mercurial/help.py
changeset 32566 1b90036f42f0
parent 32549 633c635a790a
child 32615 c9318beb7c1a
equal deleted inserted replaced
32565:5313d98089f5 32566:1b90036f42f0
   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