mercurial/hgweb/webcommands.py
changeset 12666 ead4e21f49f1
parent 12063 516b000fbb7e
child 12692 0ac7c5c8121a
equal deleted inserted replaced
12665:cf24b6b5517c 12666:ead4e21f49f1
    11 from mercurial.node import short, hex
    11 from mercurial.node import short, hex
    12 from mercurial.util import binary
    12 from mercurial.util import binary
    13 from common import paritygen, staticfile, get_contact, ErrorResponse
    13 from common import paritygen, staticfile, get_contact, ErrorResponse
    14 from common import HTTP_OK, HTTP_FORBIDDEN, HTTP_NOT_FOUND
    14 from common import HTTP_OK, HTTP_FORBIDDEN, HTTP_NOT_FOUND
    15 from mercurial import graphmod
    15 from mercurial import graphmod
       
    16 from mercurial import help as helpmod
       
    17 from mercurial import ui
       
    18 from mercurial.i18n import _
    16 
    19 
    17 # __all__ is populated with the allowed commands. Be sure to add to it if
    20 # __all__ is populated with the allowed commands. Be sure to add to it if
    18 # you're adding a new command, or the new command won't work.
    21 # you're adding a new command, or the new command won't work.
    19 
    22 
    20 __all__ = [
    23 __all__ = [
    21    'log', 'rawfile', 'file', 'changelog', 'shortlog', 'changeset', 'rev',
    24    'log', 'rawfile', 'file', 'changelog', 'shortlog', 'changeset', 'rev',
    22    'manifest', 'tags', 'branches', 'summary', 'filediff', 'diff', 'annotate',
    25    'manifest', 'tags', 'branches', 'summary', 'filediff', 'diff', 'annotate',
    23    'filelog', 'archive', 'static', 'graph',
    26    'filelog', 'archive', 'static', 'graph', 'help',
    24 ]
    27 ]
    25 
    28 
    26 def log(web, req, tmpl):
    29 def log(web, req, tmpl):
    27     if 'file' in req.form and req.form['file'][0]:
    30     if 'file' in req.form and req.form['file'][0]:
    28         return filelog(web, req, tmpl)
    31         return filelog(web, req, tmpl)
   722 
   725 
   723     return tmpl('graph', rev=rev, revcount=revcount, uprev=uprev,
   726     return tmpl('graph', rev=rev, revcount=revcount, uprev=uprev,
   724                 lessvars=lessvars, morevars=morevars, downrev=downrev,
   727                 lessvars=lessvars, morevars=morevars, downrev=downrev,
   725                 canvasheight=canvasheight, jsdata=data, bg_height=bg_height,
   728                 canvasheight=canvasheight, jsdata=data, bg_height=bg_height,
   726                 node=revnode_hex, changenav=changenav)
   729                 node=revnode_hex, changenav=changenav)
       
   730 
       
   731 def _getdoc(e):
       
   732     doc = e[0].__doc__
       
   733     if doc:
       
   734         doc = doc.split('\n')[0]
       
   735     else:
       
   736         doc = _('(no help text available)')
       
   737     return doc
       
   738 
       
   739 def help(web, req, tmpl):
       
   740     from mercurial import commands # avoid cycle
       
   741 
       
   742     topicname = req.form.get('node', [None])[0]
       
   743     if not topicname:
       
   744         topic = []
       
   745 
       
   746         def topics(**map):
       
   747             for entries, summary, _ in helpmod.helptable:
       
   748                 entries = sorted(entries, key=len)
       
   749                 yield {'topic': entries[-1], 'summary': summary}
       
   750 
       
   751         early, other = [], []
       
   752         primary = lambda s: s.split('|')[0]
       
   753         for c, e in commands.table.iteritems():
       
   754             doc = _getdoc(e)
       
   755             if 'DEPRECATED' in doc or c.startswith('debug'):
       
   756                 continue
       
   757             cmd = primary(c)
       
   758             if cmd.startswith('^'):
       
   759                 early.append((cmd[1:], doc))
       
   760             else:
       
   761                 other.append((cmd, doc))
       
   762 
       
   763         early.sort()
       
   764         other.sort()
       
   765 
       
   766         def earlycommands(**map):
       
   767             for c, doc in early:
       
   768                 yield {'topic': c, 'summary': doc}
       
   769 
       
   770         def othercommands(**map):
       
   771             for c, doc in other:
       
   772                 yield {'topic': c, 'summary': doc}
       
   773 
       
   774         return tmpl('helptopics', topics=topics, earlycommands=earlycommands,
       
   775                     othercommands=othercommands, title='Index')
       
   776 
       
   777     u = ui.ui()
       
   778     u.pushbuffer()
       
   779     try:
       
   780         commands.help_(u, topicname)
       
   781     except error.UnknownCommand:
       
   782         raise ErrorResponse(HTTP_NOT_FOUND)
       
   783     doc = u.popbuffer()
       
   784     return tmpl('help', topic=topicname, doc=doc)