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) |