# HG changeset patch # User Vadim Gelfer # Date 1156178692 25200 # Node ID 890e285c52a10c7a4ce3ae83b81cc967fa2a2110 # Parent 26c8d37496c259520139b112fa2bc942057a0e8e revert: require --all to revert all files. diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -820,6 +820,7 @@ def backout(ui, repo, rev, **opts): parent = p1 hg.clean(repo, node, show_stats=False) revert_opts = opts.copy() + revert_opts['all'] = True revert_opts['rev'] = hex(parent) revert(ui, repo, **revert_opts) commit_opts = opts.copy() @@ -2288,8 +2289,12 @@ def revert(ui, repo, *pats, **opts): If names are given, all files matching the names are reverted. - If no arguments are given, all files in the repository are reverted. + If no arguments are given, no files are reverted. """ + + if not pats and not opts['all']: + raise util.Abort(_('no files or directories specified')) + parent, p2 = repo.dirstate.parents() if opts['rev']: node = repo.lookup(opts['rev']) @@ -3044,7 +3049,8 @@ table = { _('hg rename [OPTION]... SOURCE... DEST')), "^revert": (revert, - [('r', 'rev', '', _('revision to revert to')), + [('', 'all', None, _('revert all changes when no arguments given')), + ('r', 'rev', '', _('revision to revert to')), ('', 'no-backup', None, _('do not save backup copies of files')), ('I', 'include', [], _('include names matching given patterns')), ('X', 'exclude', [], _('exclude names matching given patterns')), diff --git a/tests/test-confused-revert b/tests/test-confused-revert --- a/tests/test-confused-revert +++ b/tests/test-confused-revert @@ -13,7 +13,7 @@ echo "%%% should show a removed and b ad hg status echo "reverting..." -hg revert +hg revert --all echo "%%% should show b unknown and a back to normal" hg status @@ -42,10 +42,10 @@ echo "%%% should show a removed and b ad hg status echo "%%% revert should fail" -hg revert +hg revert --all echo "%%% revert should be ok now" -hg revert -r2 +hg revert -r2 --all echo "%%% should show b unknown and a marked modified (merged)" hg status diff --git a/tests/test-merge-revert b/tests/test-merge-revert --- a/tests/test-merge-revert +++ b/tests/test-merge-revert @@ -15,7 +15,7 @@ hg update -C 0 hg id echo "changed file1" >> file1 hg id -hg revert +hg revert --all hg diff hg status hg id @@ -29,11 +29,11 @@ HGMERGE=merge hg update hg diff hg status hg id -hg revert +hg revert --all hg diff hg status hg id -hg revert -r tip +hg revert -r tip --all hg diff hg status hg id diff --git a/tests/test-merge-revert2 b/tests/test-merge-revert2 --- a/tests/test-merge-revert2 +++ b/tests/test-merge-revert2 @@ -16,7 +16,7 @@ hg update -C 0 hg id echo "changed file1" >> file1 hg id -hg revert --no-backup +hg revert --no-backup --all hg diff hg status hg id @@ -31,11 +31,11 @@ hg diff | sed -e "s/\(+++ [a-zA-Z0-9_/.- -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/" -e "s/\(>>>>>>>\) .*/\1/" hg status hg id -hg revert --no-backup +hg revert --no-backup --all hg diff hg status hg id -hg revert -r tip --no-backup +hg revert -r tip --no-backup --all hg diff hg status hg id diff --git a/tests/test-nested-repo b/tests/test-nested-repo --- a/tests/test-nested-repo +++ b/tests/test-nested-repo @@ -14,6 +14,6 @@ hg add b/x echo '# should print A b/x' hg st echo '# should forget b/x' -hg revert +hg revert --all echo '# should print nothing' hg st b diff --git a/tests/test-remove b/tests/test-remove --- a/tests/test-remove +++ b/tests/test-remove @@ -9,7 +9,7 @@ hg commit -m 1 -d "1000000 0" hg remove rm foo hg remove foo -hg revert +hg revert --all rm foo hg remove --after hg commit -m 2 -d "1000000 0" diff --git a/tests/test-revert b/tests/test-revert --- a/tests/test-revert +++ b/tests/test-revert @@ -31,7 +31,7 @@ echo %% should show a b c e ls echo %% should verbosely save backup to e.orig echo z > e -hg revert -v +hg revert --all -v echo %% should say no changes needed hg revert a echo %% should say file not managed @@ -46,9 +46,9 @@ echo z > z hg add z hg st echo %% should add a, forget z -hg revert -r0 +hg revert --all -r0 echo %% should forget a -hg revert -rtip +hg revert --all -rtip rm -f a *.orig echo %% should silently add a hg revert -r0 a @@ -56,7 +56,7 @@ hg st a hg update -C chmod +x c -hg revert +hg revert --all echo %% should print non-executable test -x c || echo non-executable @@ -64,7 +64,7 @@ chmod +x c hg commit -d '1000001 0' -m exe chmod -x c -hg revert +hg revert --all echo %% should print executable test -x c && echo executable @@ -78,6 +78,11 @@ hg commit -d '2 0' -m a hg update 0 mkdir b echo b > b/b + +echo % should fail - no arguments hg revert -rtip +echo % should succeed +hg revert --all -rtip + true diff --git a/tests/test-revert-unknown b/tests/test-revert-unknown --- a/tests/test-revert-unknown +++ b/tests/test-revert-unknown @@ -13,7 +13,7 @@ hg ci -m "2" -d "1000000 0" echo %% Should show unknown hg status -hg revert -r 0 +hg revert -r 0 --all echo %% Should show unknown and b removed hg status echo %% Should show a and unknown diff --git a/tests/test-revert.out b/tests/test-revert.out --- a/tests/test-revert.out +++ b/tests/test-revert.out @@ -54,4 +54,7 @@ executable %% issue 241 adding a 1 files updated, 0 files merged, 0 files removed, 0 files unresolved +% should fail - no arguments +abort: no files or directories specified +% should succeed reverting a