changeset 27325:eadbbd14bdc1

help: fix help -c/help -e/help -k Before, hg help -c was the same as hg help, now it only shows commands. Before, hg help -e was the same as hg help, now it only shows extensions. Before, hg help -k crashed, now it shows all topics.
author timeless <timeless@mozdev.org>
date Wed, 09 Dec 2015 05:56:54 +0000
parents 5456374561a7
children ee2d7b5daa8a
files mercurial/dispatch.py mercurial/help.py tests/test-help.t
diffstat 3 files changed, 19 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/dispatch.py	Wed Dec 09 19:09:35 2015 +0000
+++ b/mercurial/dispatch.py	Wed Dec 09 05:56:54 2015 +0000
@@ -854,7 +854,7 @@
     if options['version']:
         return commands.version_(ui)
     if options['help']:
-        return commands.help_(ui, cmd, command=True)
+        return commands.help_(ui, cmd, command=cmd is not None)
     elif not cmd:
         return commands.help_(ui, 'shortlist')
 
--- a/mercurial/help.py	Wed Dec 09 19:09:35 2015 +0000
+++ b/mercurial/help.py	Wed Dec 09 05:56:54 2015 +0000
@@ -328,7 +328,7 @@
         return rst
 
 
-    def helplist(select=None):
+    def helplist(select=None, **opts):
         # list of commands
         if name == "shortlist":
             header = _('basic commands:\n\n')
@@ -374,7 +374,9 @@
             else:
                 rst.append(' :%s: %s\n' % (f, h[f]))
 
-        if not name:
+        ex = opts.get
+        anyopts = (ex('keyword') or not (ex('command') or ex('extension')))
+        if not name and anyopts:
             exts = listexts(_('enabled extensions:'), extensions.enabled())
             if exts:
                 rst.append('\n')
@@ -491,8 +493,8 @@
 
     rst = []
     kw = opts.get('keyword')
-    if kw:
-        matches = topicmatch(ui, name)
+    if kw or name is None and any(opts[o] for o in opts):
+        matches = topicmatch(ui, name or '')
         helpareas = []
         if opts.get('extension'):
             helpareas += [('extensions', _('Extensions'))]
@@ -539,6 +541,6 @@
         # program name
         if not ui.quiet:
             rst = [_("Mercurial Distributed SCM\n"), '\n']
-        rst.extend(helplist())
+        rst.extend(helplist(None, **opts))
 
     return ''.join(rst)
--- a/tests/test-help.t	Wed Dec 09 19:09:35 2015 +0000
+++ b/tests/test-help.t	Wed Dec 09 05:56:54 2015 +0000
@@ -1043,16 +1043,25 @@
 
 help -c should only show debug --debug
 
-  $ hg help -c --debug|grep debug|wc -l|grep '^\s*0\s*$'
+  $ hg help -c --debug|egrep debug|wc -l|egrep '^\s*0\s*$'
   [1]
 
 help -c should only show deprecated for -v
 
-  $ hg help -c -v|grep DEPRECATED|wc -l|grep '^\s*0\s*$'
+  $ hg help -c -v|egrep DEPRECATED|wc -l|egrep '^\s*0\s*$'
   [1]
 
 Test -e / -c / -k combinations
 
+  $ hg help -c|egrep '^\S|debug'
+  Commands:
+  $ hg help -e|egrep '^\S'
+  Extensions:
+  $ hg help -k|egrep '^\S'
+  Topics:
+  Commands:
+  Extensions:
+  Extension Commands:
   $ hg help -c schemes
   abort: no such help topic: schemes
   (try "hg help --keyword schemes")