[PATCH 2 of 2] dispatch: don't stack trace on commands like `hg .log`

Jordi GutiƩrrez Hermoso jordigh at octave.org
Fri Sep 25 11:24:12 CDT 2015


# HG changeset patch
# User Jordi GutiƩrrez Hermoso <jordigh at octave.org>
# Date 1443194180 14400
#      Fri Sep 25 11:16:20 2015 -0400
# Node ID de7f04300f2a853e1a9033cd4dc89cf54662af72
# Parent  c14d27fbb5a6568a232843887a63660e90208cbe
dispatch: don't stack trace on commands like `hg .log`

This used to stack trace because it raised a util.Abort which wasn't
handled in this block. We now handle it. Additionally, we error out
earlier instead of plodding on and showing the "log" entry of the
plain `hg help` output.

diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -3981,7 +3981,11 @@ def help_(ui, name=None, **opts):
 
     formatted, pruned = minirst.format(text, textwidth, keep=keep,
                                        section=section)
-    if section and not formatted:
+
+    # We could have been given a weird ".foo" section without a name
+    # to look for, or we could have simply failed to found "foo.bar"
+    # because bar isn't a section of foo
+    if section and not (formatted and name):
         raise util.Abort(_("help section not found"))
 
     if 'verbose' in pruned:
diff --git a/mercurial/dispatch.py b/mercurial/dispatch.py
--- a/mercurial/dispatch.py
+++ b/mercurial/dispatch.py
@@ -253,7 +253,7 @@ def _runcatch(req):
             # check if the command is in a disabled extension
             # (but don't check for extensions themselves)
             commands.help_(ui, inst.args[0], unknowncmd=True)
-        except error.UnknownCommand:
+        except (error.UnknownCommand, util.Abort):
             suggested = False
             if len(inst.args) == 2:
                 sim = _getsimilar(inst.args[1], inst.args[0])
diff --git a/tests/test-help.t b/tests/test-help.t
--- a/tests/test-help.t
+++ b/tests/test-help.t
@@ -626,6 +626,23 @@ Test command suggestion, both one or mul
   (did you mean 'log'?)
   [255]
 
+Make sure that we don't run afoul of the help system thinking that
+this is a section and erroring out weirdly.
+
+  $ hg .log
+  hg: unknown command '.log'
+  (did you mean 'log'?)
+  [255]
+
+  $ hg log.
+  hg: unknown command 'log.'
+  (did you mean 'log'?)
+  [255]
+  $ hg pu.lh
+  hg: unknown command 'pu.lh'
+  (did you mean one of 'pull', 'push'?)
+  [255]
+
   $ cat > helpext.py <<EOF
   > import os
   > from mercurial import cmdutil, commands


More information about the Mercurial-devel mailing list