# HG changeset patch # User timeless # Date 2015-12-09 05:56:54 # Node ID eadbbd14bdc1d008a84bd4b0ec7fd9da798eb4c4 # Parent 5456374561a7a81eb60864cf28a4d8535a6b3e63 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. diff --git a/mercurial/dispatch.py b/mercurial/dispatch.py --- a/mercurial/dispatch.py +++ b/mercurial/dispatch.py @@ -854,7 +854,7 @@ def _dispatch(req): 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') diff --git a/mercurial/help.py b/mercurial/help.py --- a/mercurial/help.py +++ b/mercurial/help.py @@ -328,7 +328,7 @@ def help_(ui, name, unknowncmd=False, fu 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 @@ def help_(ui, name, unknowncmd=False, fu 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 @@ def help_(ui, name, unknowncmd=False, fu 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 @@ def help_(ui, name, unknowncmd=False, fu # program name if not ui.quiet: rst = [_("Mercurial Distributed SCM\n"), '\n'] - rst.extend(helplist()) + rst.extend(helplist(None, **opts)) return ''.join(rst) diff --git a/tests/test-help.t b/tests/test-help.t --- a/tests/test-help.t +++ b/tests/test-help.t @@ -1043,16 +1043,25 @@ Test help hooks 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")