Patchwork [1,of,5] cmdutil: provide a way to report how to continue

login
register
mail settings
Submitter timeless@mozdev.org
Date Feb. 4, 2016, 3:56 a.m.
Message ID <9606a1513d8122392594.1454558180@waste.org>
Download mbox | patch
Permalink /patch/12970/
State Superseded
Commit ed4d06f180b8453a4455d9cef23e1fc023acdc05
Headers show

Comments

timeless@mozdev.org - Feb. 4, 2016, 3:56 a.m.
# HG changeset patch
# User timeless <timeless@mozdev.org>
# Date 1454557448 0
#      Thu Feb 04 03:44:08 2016 +0000
# Node ID 9606a1513d812239259485be8469a1493faa60bf
# Parent  01a5143cd25f285f8c745a92986cd7186bb32c90
cmdutil: provide a way to report how to continue

checkafterresolved allows Mercurial to suggest what command to
use next. If users try to continue the wrong command, there
wasn't a good way for the command to suggest what to do next.

Split checcmdutil into howtocontinue and checkafterresolved.
Introduce wrongtooltocontinue which handles raising an Abort with
the hint from howtocontinue.

Patch

diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py
--- a/mercurial/cmdutil.py
+++ b/mercurial/cmdutil.py
@@ -3334,13 +3334,28 @@ 
      _('hg graft --continue')),
     ]
 
-def checkafterresolved(repo):
-    contmsg = _("continue: %s\n")
+def howtocontinue(repo):
+    contmsg = _("continue: %s")
     for f, msg in afterresolvedstates:
         if repo.vfs.exists(f):
-            repo.ui.warn(contmsg % msg)
-            return
-    repo.ui.note(contmsg % _("hg commit"))
+            return contmsg % msg, repo.ui.warn
+    workingctx = repo[None]
+    if (any(repo.status())
+     or any(workingctx.sub(s).dirty() for s in workingctx.substate)):
+        return contmsg % _("hg commit"), repo.ui.note
+    return None, None
+
+def checkafterresolved(repo):
+    msg, reporter = howtocontinue(repo)
+    if msg is not None and reporter is not None:
+        reporter("%s\n" % msg)
+
+def wrongtooltocontinue(repo, msg):
+    after = howtocontinue(repo)
+    hint = None
+    if after:
+        hint = after[0]
+    raise error.Abort(msg, hint=hint)
 
 class dirstateguard(object):
     '''Restore dirstate at unexpected failure.