Mercurial > public > mercurial-scm > hg
comparison mercurial/merge.py @ 46366:135056e8b5a8
purge: add a --confirm option
The options provide a prompt to the user before permanent deletion are made.
The prompt is currently not aware of directory deletion. I'll fix this in the
next changesets.
Differential Revision: https://phab.mercurial-scm.org/D9818
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Mon, 18 Jan 2021 10:24:03 +0100 |
parents | dfca84970da8 |
children | 57370e7deb7b |
comparison
equal
deleted
inserted
replaced
46365:63dfaca9087f | 46366:135056e8b5a8 |
---|---|
2322 ignored=False, | 2322 ignored=False, |
2323 removeemptydirs=True, | 2323 removeemptydirs=True, |
2324 removefiles=True, | 2324 removefiles=True, |
2325 abortonerror=False, | 2325 abortonerror=False, |
2326 noop=False, | 2326 noop=False, |
2327 confirm=False, | |
2327 ): | 2328 ): |
2328 """Purge the working directory of untracked files. | 2329 """Purge the working directory of untracked files. |
2329 | 2330 |
2330 ``matcher`` is a matcher configured to scan the working directory - | 2331 ``matcher`` is a matcher configured to scan the working directory - |
2331 potentially a subset. | 2332 potentially a subset. |
2341 ``abortonerror`` causes an exception to be raised if an error occurs | 2342 ``abortonerror`` causes an exception to be raised if an error occurs |
2342 deleting a file or directory. | 2343 deleting a file or directory. |
2343 | 2344 |
2344 ``noop`` controls whether to actually remove files. If not defined, actions | 2345 ``noop`` controls whether to actually remove files. If not defined, actions |
2345 will be taken. | 2346 will be taken. |
2347 | |
2348 ``confirm`` ask confirmation before actually removing anything. | |
2346 | 2349 |
2347 Returns an iterable of relative paths in the working directory that were | 2350 Returns an iterable of relative paths in the working directory that were |
2348 or would be removed. | 2351 or would be removed. |
2349 """ | 2352 """ |
2350 | 2353 |
2369 directories = [] | 2372 directories = [] |
2370 matcher.traversedir = directories.append | 2373 matcher.traversedir = directories.append |
2371 | 2374 |
2372 status = repo.status(match=matcher, ignored=ignored, unknown=unknown) | 2375 status = repo.status(match=matcher, ignored=ignored, unknown=unknown) |
2373 | 2376 |
2377 if confirm: | |
2378 nb_ignored = len(status.ignored) | |
2379 nb_unkown = len(status.unknown) | |
2380 if nb_unkown and nb_ignored: | |
2381 msg = _(b"permanently delete %d unkown and %d ignored files?") | |
2382 msg %= (nb_unkown, nb_ignored) | |
2383 elif nb_unkown: | |
2384 msg = _(b"permanently delete %d unkown files?") | |
2385 msg %= nb_unkown | |
2386 elif nb_ignored: | |
2387 msg = _(b"permanently delete %d ignored files?") | |
2388 msg %= nb_ignored | |
2389 else: | |
2390 # XXX we might be missing directory there | |
2391 return res | |
2392 msg += b" (yN)$$ &Yes $$ &No" | |
2393 if repo.ui.promptchoice(msg, default=1) == 1: | |
2394 raise error.CanceledError(_(b'removal cancelled')) | |
2395 | |
2374 if removefiles: | 2396 if removefiles: |
2375 for f in sorted(status.unknown + status.ignored): | 2397 for f in sorted(status.unknown + status.ignored): |
2376 if not noop: | 2398 if not noop: |
2377 repo.ui.note(_(b'removing file %s\n') % f) | 2399 repo.ui.note(_(b'removing file %s\n') % f) |
2378 remove(repo.wvfs.unlink, f) | 2400 remove(repo.wvfs.unlink, f) |