diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -3942,9 +3942,9 @@ def heads(ui, repo, *branchrevs, **opts) @command('help', [('e', 'extension', None, _('show only help for extensions')), ('c', 'command', None, _('show only help for commands')), - ('k', 'keyword', '', _('show topics matching keyword')), + ('k', 'keyword', None, _('show topics matching keyword')), ], - _('[-ec] [TOPIC]'), + _('[-eck] [TOPIC]'), norepo=True) def help_(ui, name=None, **opts): """show help for a given topic or a help overview diff --git a/mercurial/help.py b/mercurial/help.py --- a/mercurial/help.py +++ b/mercurial/help.py @@ -475,11 +475,18 @@ def help_(ui, name, unknowncmd=False, fu rst = [] kw = opts.get('keyword') if kw: - matches = topicmatch(kw) - for t, title in (('topics', _('Topics')), + matches = topicmatch(name) + helpareas = [] + if opts.get('extension'): + helpareas += [('extensions', _('Extensions'))] + if opts.get('command'): + helpareas += [('commands', _('Commands'))] + if not helpareas: + helpareas = [('topics', _('Topics')), ('commands', _('Commands')), ('extensions', _('Extensions')), - ('extensioncommands', _('Extension Commands'))): + ('extensioncommands', _('Extension Commands'))] + for t, title in helpareas: if matches[t]: rst.append('%s:\n\n' % title) rst.extend(minirst.maketable(sorted(matches[t]), 1)) @@ -489,13 +496,14 @@ def help_(ui, name, unknowncmd=False, fu hint = _('try "hg help" for a list of topics') raise util.Abort(msg, hint=hint) elif name and name != 'shortlist': + queries = [] if unknowncmd: - queries = (helpextcmd,) - elif opts.get('extension'): - queries = (helpext,) - elif opts.get('command'): - queries = (helpcmd,) - else: + queries += [helpextcmd] + if opts.get('extension'): + queries += [helpext] + if opts.get('command'): + queries += [helpcmd] + if not queries: queries = (helptopic, helpcmd, helpext, helpextcmd) for f in queries: try: diff --git a/tests/test-help.t b/tests/test-help.t --- a/tests/test-help.t +++ b/tests/test-help.t @@ -988,6 +988,28 @@ Test help hooks helphook1 helphook2 +Test -e / -c / -k combinations + + $ hg help -c progress + abort: no such help topic: progress + (try "hg help --keyword progress") + [255] + $ hg help -e progress |head -1 + progress extension - show progress bars for some actions (DEPRECATED) + $ hg help -c -k dates |egrep '^(Topics|Extensions|Commands):' + Commands: + $ hg help -e -k a |egrep '^(Topics|Extensions|Commands):' + Extensions: + $ hg help -e -c -k date |egrep '^(Topics|Extensions|Commands):' + Extensions: + Commands: + $ hg help -c commit > /dev/null + $ hg help -e -c commit > /dev/null + $ hg help -e commit > /dev/null + abort: no such help topic: commit + (try "hg help --keyword commit") + [255] + Test keyword search help $ cat > prefixedname.py <