[PATCH STABLE] revert: improve hints on abort with no files specified

Kevin Bullock kbullock+mercurial at ringworld.org
Fri Jun 24 13:01:35 CDT 2011


# HG changeset patch
# User Kevin Bullock <kbullock at ringworld.org>
# Date 1308626766 18000
# Branch stable
# Node ID 50e33684a46172574479e31808c8131cb7b80209
# Parent  b9faf94ee1969f41b89edfc4df809adad582ab4c
revert: suggest update on revert to non-parent

uncommitted changes, revert to non-parent:

 BEFORE:
   $ hg revert -d 2011-05-05
   Found revision 14208 from Thu May 05 18:05:24 2011 +0200
   abort: no files or directories specified
   (use --all to discard all changes)

 AFTER (clean):
   $ hg revert -d 2011-05-05
   Found revision 14208 from Thu May 05 18:05:24 2011 +0200
   abort: no files or directories specified
   (use --all to revert all files, or 'hg update 14208' to check out that revision)

 AFTER (uncommitted changes):
   $ hg revert -d 2011-05-05
   Found revision 14208 from Thu May 05 18:05:24 2011 +0200
   abort: no files or directories specified
   (use --all to discard all changes, or 'hg update 14208' to check out that revision)

diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -4180,16 +4180,28 @@
 
     parent, p2 = repo.dirstate.parents()
 
+    ctx = scmutil.revsingle(repo, opts.get('rev'))
+    node = ctx.node()
+
     if not pats and not opts.get('all'):
         msg = _("no files or directories specified")
         hint = _("use --all to discard all changes")
         if p2 != nullid:
             hint = _("uncommitted merge, use --all to discard all changes,"
                      " or 'hg update -C .' to abort the merge")
+            raise util.Abort(msg, hint=hint)
+        dirty = util.any(repo.status())
+        if node != parent:
+            if dirty:
+                hint = _('use --all to discard all changes, or '
+                         "'hg update %s' to check out that revision"
+                         ) % ctx.rev()
+            else:
+                hint = _('use --all to revert all files, or '
+                         "'hg update %s' to check out that revision"
+                         ) % ctx.rev()
         raise util.Abort(msg, hint=hint)
 
-    ctx = scmutil.revsingle(repo, opts.get('rev'))
-    node = ctx.node()
     mf = ctx.manifest()
     if node == parent:
         pmf = mf
diff --git a/tests/test-revert.t b/tests/test-revert.t
--- a/tests/test-revert.t
+++ b/tests/test-revert.t
@@ -186,7 +186,7 @@
 
   $ hg revert -rtip
   abort: no files or directories specified
-  (use --all to discard all changes)
+  (use --all to revert all files, or 'hg update 1' to check out that revision)
   [255]
 
 should succeed


More information about the Mercurial-devel mailing list