112 return True |
112 return True |
113 if not ui.verbose and doc and any(w in doc for w in _exclkeywords): |
113 if not ui.verbose and doc and any(w in doc for w in _exclkeywords): |
114 return True |
114 return True |
115 return False |
115 return False |
116 |
116 |
117 def topicmatch(ui, kw): |
117 def topicmatch(ui, commands, kw): |
118 """Return help topics matching kw. |
118 """Return help topics matching kw. |
119 |
119 |
120 Returns {'section': [(name, summary), ...], ...} where section is |
120 Returns {'section': [(name, summary), ...], ...} where section is |
121 one of topics, commands, extensions, or extensioncommands. |
121 one of topics, commands, extensions, or extensioncommands. |
122 """ |
122 """ |
132 # Old extensions may use a str as doc. |
132 # Old extensions may use a str as doc. |
133 if (sum(map(lowercontains, names)) |
133 if (sum(map(lowercontains, names)) |
134 or lowercontains(header) |
134 or lowercontains(header) |
135 or (callable(doc) and lowercontains(doc(ui)))): |
135 or (callable(doc) and lowercontains(doc(ui)))): |
136 results['topics'].append((names[0], header)) |
136 results['topics'].append((names[0], header)) |
137 from . import commands # avoid cycle |
|
138 for cmd, entry in commands.table.iteritems(): |
137 for cmd, entry in commands.table.iteritems(): |
139 if len(entry) == 3: |
138 if len(entry) == 3: |
140 summary = entry[2] |
139 summary = entry[2] |
141 else: |
140 else: |
142 summary = '' |
141 summary = '' |
297 addtopicsymbols('templates', '.. filtersmarker', templatefilters.filters) |
296 addtopicsymbols('templates', '.. filtersmarker', templatefilters.filters) |
298 addtopicsymbols('templates', '.. functionsmarker', templater.funcs) |
297 addtopicsymbols('templates', '.. functionsmarker', templater.funcs) |
299 addtopicsymbols('hgweb', '.. webcommandsmarker', webcommands.commands, |
298 addtopicsymbols('hgweb', '.. webcommandsmarker', webcommands.commands, |
300 dedent=True) |
299 dedent=True) |
301 |
300 |
302 def help_(ui, name, unknowncmd=False, full=True, subtopic=None, **opts): |
301 def help_(ui, commands, name, unknowncmd=False, full=True, subtopic=None, |
|
302 **opts): |
303 ''' |
303 ''' |
304 Generate the help for 'name' as unformatted restructured text. If |
304 Generate the help for 'name' as unformatted restructured text. If |
305 'name' is None, describe the commands available. |
305 'name' is None, describe the commands available. |
306 ''' |
306 ''' |
307 |
307 |
308 from . import commands # avoid cycle |
|
309 opts = pycompat.byteskwargs(opts) |
308 opts = pycompat.byteskwargs(opts) |
310 |
309 |
311 def helpcmd(name, subtopic=None): |
310 def helpcmd(name, subtopic=None): |
312 try: |
311 try: |
313 aliases, entry = cmdutil.findcmd(name, commands.table, |
312 aliases, entry = cmdutil.findcmd(name, commands.table, |
567 |
566 |
568 |
567 |
569 rst = [] |
568 rst = [] |
570 kw = opts.get('keyword') |
569 kw = opts.get('keyword') |
571 if kw or name is None and any(opts[o] for o in opts): |
570 if kw or name is None and any(opts[o] for o in opts): |
572 matches = topicmatch(ui, name or '') |
571 matches = topicmatch(ui, commands, name or '') |
573 helpareas = [] |
572 helpareas = [] |
574 if opts.get('extension'): |
573 if opts.get('extension'): |
575 helpareas += [('extensions', _('Extensions'))] |
574 helpareas += [('extensions', _('Extensions'))] |
576 if opts.get('command'): |
575 if opts.get('command'): |
577 helpareas += [('commands', _('Commands'))] |
576 helpareas += [('commands', _('Commands'))] |
618 rst = [_("Mercurial Distributed SCM\n"), '\n'] |
617 rst = [_("Mercurial Distributed SCM\n"), '\n'] |
619 rst.extend(helplist(None, **pycompat.strkwargs(opts))) |
618 rst.extend(helplist(None, **pycompat.strkwargs(opts))) |
620 |
619 |
621 return ''.join(rst) |
620 return ''.join(rst) |
622 |
621 |
623 def formattedhelp(ui, name, keep=None, unknowncmd=False, full=True, **opts): |
622 def formattedhelp(ui, commands, name, keep=None, unknowncmd=False, full=True, |
|
623 **opts): |
624 """get help for a given topic (as a dotted name) as rendered rst |
624 """get help for a given topic (as a dotted name) as rendered rst |
625 |
625 |
626 Either returns the rendered help text or raises an exception. |
626 Either returns the rendered help text or raises an exception. |
627 """ |
627 """ |
628 if keep is None: |
628 if keep is None: |
644 section = remaining |
644 section = remaining |
645 textwidth = ui.configint('ui', 'textwidth', 78) |
645 textwidth = ui.configint('ui', 'textwidth', 78) |
646 termwidth = ui.termwidth() - 2 |
646 termwidth = ui.termwidth() - 2 |
647 if textwidth <= 0 or termwidth < textwidth: |
647 if textwidth <= 0 or termwidth < textwidth: |
648 textwidth = termwidth |
648 textwidth = termwidth |
649 text = help_(ui, name, |
649 text = help_(ui, commands, name, |
650 subtopic=subtopic, unknowncmd=unknowncmd, full=full, **opts) |
650 subtopic=subtopic, unknowncmd=unknowncmd, full=full, **opts) |
651 |
651 |
652 formatted, pruned = minirst.format(text, textwidth, keep=keep, |
652 formatted, pruned = minirst.format(text, textwidth, keep=keep, |
653 section=section) |
653 section=section) |
654 |
654 |