changeset 12666:ead4e21f49f1

web: add a help view for getting hg help output
author Augie Fackler <durin42@gmail.com>
date Sat, 09 Oct 2010 12:27:14 -0500
parents cf24b6b5517c
children f5735bb80d77
files mercurial/hgweb/webcommands.py mercurial/templates/coal/map mercurial/templates/gitweb/branches.tmpl mercurial/templates/gitweb/changelog.tmpl mercurial/templates/gitweb/changeset.tmpl mercurial/templates/gitweb/filediff.tmpl mercurial/templates/gitweb/graph.tmpl mercurial/templates/gitweb/help.tmpl mercurial/templates/gitweb/helptopics.tmpl mercurial/templates/gitweb/manifest.tmpl mercurial/templates/gitweb/map mercurial/templates/gitweb/shortlog.tmpl mercurial/templates/gitweb/summary.tmpl mercurial/templates/gitweb/tags.tmpl mercurial/templates/monoblue/branches.tmpl mercurial/templates/monoblue/changelog.tmpl mercurial/templates/monoblue/graph.tmpl mercurial/templates/monoblue/help.tmpl mercurial/templates/monoblue/helptopics.tmpl mercurial/templates/monoblue/manifest.tmpl mercurial/templates/monoblue/map mercurial/templates/monoblue/shortlog.tmpl mercurial/templates/monoblue/summary.tmpl mercurial/templates/monoblue/tags.tmpl mercurial/templates/paper/changeset.tmpl mercurial/templates/paper/graph.tmpl mercurial/templates/paper/help.tmpl mercurial/templates/paper/helptopics.tmpl mercurial/templates/paper/manifest.tmpl mercurial/templates/paper/map mercurial/templates/paper/shortlog.tmpl mercurial/templates/paper/tags.tmpl mercurial/templates/static/style-monoblue.css tests/test-hgweb-commands.t tests/test-hgweb-descend-empties.t tests/test-hgweb-diffs.t tests/test-hgweb-empty.t tests/test-hgweb-removed.t tests/test-hgweb.t
diffstat 39 files changed, 415 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/hgweb/webcommands.py	Sat Oct 09 15:00:30 2010 -0500
+++ b/mercurial/hgweb/webcommands.py	Sat Oct 09 12:27:14 2010 -0500
@@ -13,6 +13,9 @@
 from common import paritygen, staticfile, get_contact, ErrorResponse
 from common import HTTP_OK, HTTP_FORBIDDEN, HTTP_NOT_FOUND
 from mercurial import graphmod
+from mercurial import help as helpmod
+from mercurial import ui
+from mercurial.i18n import _
 
 # __all__ is populated with the allowed commands. Be sure to add to it if
 # you're adding a new command, or the new command won't work.
@@ -20,7 +23,7 @@
 __all__ = [
    'log', 'rawfile', 'file', 'changelog', 'shortlog', 'changeset', 'rev',
    'manifest', 'tags', 'branches', 'summary', 'filediff', 'diff', 'annotate',
-   'filelog', 'archive', 'static', 'graph',
+   'filelog', 'archive', 'static', 'graph', 'help',
 ]
 
 def log(web, req, tmpl):
@@ -724,3 +727,58 @@
                 lessvars=lessvars, morevars=morevars, downrev=downrev,
                 canvasheight=canvasheight, jsdata=data, bg_height=bg_height,
                 node=revnode_hex, changenav=changenav)
+
+def _getdoc(e):
+    doc = e[0].__doc__
+    if doc:
+        doc = doc.split('\n')[0]
+    else:
+        doc = _('(no help text available)')
+    return doc
+
+def help(web, req, tmpl):
+    from mercurial import commands # avoid cycle
+
+    topicname = req.form.get('node', [None])[0]
+    if not topicname:
+        topic = []
+
+        def topics(**map):
+            for entries, summary, _ in helpmod.helptable:
+                entries = sorted(entries, key=len)
+                yield {'topic': entries[-1], 'summary': summary}
+
+        early, other = [], []
+        primary = lambda s: s.split('|')[0]
+        for c, e in commands.table.iteritems():
+            doc = _getdoc(e)
+            if 'DEPRECATED' in doc or c.startswith('debug'):
+                continue
+            cmd = primary(c)
+            if cmd.startswith('^'):
+                early.append((cmd[1:], doc))
+            else:
+                other.append((cmd, doc))
+
+        early.sort()
+        other.sort()
+
+        def earlycommands(**map):
+            for c, doc in early:
+                yield {'topic': c, 'summary': doc}
+
+        def othercommands(**map):
+            for c, doc in other:
+                yield {'topic': c, 'summary': doc}
+
+        return tmpl('helptopics', topics=topics, earlycommands=earlycommands,
+                    othercommands=othercommands, title='Index')
+
+    u = ui.ui()
+    u.pushbuffer()
+    try:
+        commands.help_(u, topicname)
+    except error.UnknownCommand:
+        raise ErrorResponse(HTTP_NOT_FOUND)
+    doc = u.popbuffer()
+    return tmpl('help', topic=topicname, doc=doc)
--- a/mercurial/templates/coal/map	Sat Oct 09 15:00:30 2010 -0500
+++ b/mercurial/templates/coal/map	Sat Oct 09 12:27:14 2010 -0500
@@ -10,6 +10,11 @@
 shortlogentry = ../paper/shortlogentry.tmpl
 graph = ../paper/graph.tmpl
 
+help = ../paper/help.tmpl
+helptopics = ../paper/helptopics.tmpl
+
+helpentry = '<tr><td><a href="{url}help/{topic|escape}{sessionvars%urlparameter}">{topic|escape}</a></td><td>{summary|escape}</td></tr>'
+
 naventry = '<a href="{url}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
 navshortentry = '<a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
 navgraphentry = '<a href="{url}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
--- a/mercurial/templates/gitweb/branches.tmpl	Sat Oct 09 15:00:30 2010 -0500
+++ b/mercurial/templates/gitweb/branches.tmpl	Sat Oct 09 12:27:14 2010 -0500
@@ -18,7 +18,8 @@
 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
 branches |
-<a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
+<a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a> |
+<a href="{url}help{sessionvars%urlparameter}">help</a>
 <br/>
 </div>
 
--- a/mercurial/templates/gitweb/changelog.tmpl	Sat Oct 09 15:00:30 2010 -0500
+++ b/mercurial/templates/gitweb/changelog.tmpl	Sat Oct 09 12:27:14 2010 -0500
@@ -25,7 +25,8 @@
 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
-<a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry}
+<a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry} |
+<a href="{url}help{sessionvars%urlparameter}">help</a>
 <br/>
 {changenav%nav}<br/>
 </div>
--- a/mercurial/templates/gitweb/changeset.tmpl	Sat Oct 09 15:00:30 2010 -0500
+++ b/mercurial/templates/gitweb/changeset.tmpl	Sat Oct 09 12:27:14 2010 -0500
@@ -20,7 +20,9 @@
 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
 <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a> |
 changeset |
-<a href="{url}raw-rev/{node|short}">raw</a> {archives%archiveentry}<br/>
+<a href="{url}raw-rev/{node|short}">raw</a> {archives%archiveentry} |
+<a href="{url}help{sessionvars%urlparameter}">help</a>
+<br/>
 </div>
 
 <div>
--- a/mercurial/templates/gitweb/filediff.tmpl	Sat Oct 09 15:00:30 2010 -0500
+++ b/mercurial/templates/gitweb/filediff.tmpl	Sat Oct 09 12:27:14 2010 -0500
@@ -25,7 +25,8 @@
 <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
 <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
 diff |
-<a href="{url}raw-diff/{node|short}/{file|urlescape}">raw</a><br/>
+<a href="{url}raw-diff/{node|short}/{file|urlescape}">raw</a><br/> |
+<a href="{url}help{sessionvars%urlparameter}">help</a>
 </div>
 
 <div class="title">{file|escape}</div>
--- a/mercurial/templates/gitweb/graph.tmpl	Sat Oct 09 15:00:30 2010 -0500
+++ b/mercurial/templates/gitweb/graph.tmpl	Sat Oct 09 12:27:14 2010 -0500
@@ -25,7 +25,8 @@
 graph |
 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
-<a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
+<a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a> |
+<a href="{url}help{sessionvars%urlparameter}">help</a>
 <br/>
 <a href="{url}graph/{rev}{lessvars%urlparameter}">less</a>
 <a href="{url}graph/{rev}{morevars%urlparameter}">more</a>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/gitweb/help.tmpl	Sat Oct 09 12:27:14 2010 -0500
@@ -0,0 +1,31 @@
+{header}
+<title>{repo|escape}: Branches</title>
+<link rel="alternate" type="application/atom+xml"
+   href="{url}atom-tags" title="Atom feed for {repo|escape}"/>
+<link rel="alternate" type="application/rss+xml"
+   href="{url}rss-tags" title="RSS feed for {repo|escape}"/>
+</head>
+<body>
+
+<div class="page_header">
+<a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / branches
+</div>
+
+<div class="page_nav">
+<a href="{url}summary{sessionvars%urlparameter}">summary</a> |
+<a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
+<a href="{url}log{sessionvars%urlparameter}">changelog</a> |
+<a href="{url}graph{sessionvars%urlparameter}">graph</a> |
+<a href="{url}tags{sessionvars%urlparameter}">tags</a> |
+branches |
+<a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
+<br/>
+</div>
+
+<div class="title">&nbsp;</div>
+
+<pre>
+{doc|escape}
+</pre>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/gitweb/helptopics.tmpl	Sat Oct 09 12:27:14 2010 -0500
@@ -0,0 +1,38 @@
+{header}
+<title>{repo|escape}: Branches</title>
+<link rel="alternate" type="application/atom+xml"
+   href="{url}atom-tags" title="Atom feed for {repo|escape}"/>
+<link rel="alternate" type="application/rss+xml"
+   href="{url}rss-tags" title="RSS feed for {repo|escape}"/>
+</head>
+<body>
+
+<div class="page_header">
+<a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / branches
+</div>
+
+<div class="page_nav">
+<a href="{url}summary{sessionvars%urlparameter}">summary</a> |
+<a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
+<a href="{url}log{sessionvars%urlparameter}">changelog</a> |
+<a href="{url}graph{sessionvars%urlparameter}">graph</a> |
+<a href="{url}tags{sessionvars%urlparameter}">tags</a> |
+<a href="{url}branches{sessionvars%urlparameter}">branches</a> |
+<a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a> |
+help
+<br/>
+</div>
+
+<div class="title">&nbsp;</div>
+<table cellspacing="0">
+<tr><td colspan="2"><h2><a name="main" href="#topics">Topics</a></h2></td></tr>
+{topics % helpentry}
+
+<tr><td colspan="2"><h2><a name="main" href="#main">Main Commands</a></h2></td></tr>
+{earlycommands % helpentry}
+
+<tr><td colspan="2"><h2><a name="other" href="#other">Other Commands</a></h2></td></tr>
+{othercommands % helpentry}
+</table>
+
+{footer}
--- a/mercurial/templates/gitweb/manifest.tmpl	Sat Oct 09 15:00:30 2010 -0500
+++ b/mercurial/templates/gitweb/manifest.tmpl	Sat Oct 09 12:27:14 2010 -0500
@@ -19,7 +19,9 @@
 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
 files |
-<a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> {archives%archiveentry}<br/>
+<a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> {archives%archiveentry} |
+<a href="{url}help{sessionvars%urlparameter}">help</a>
+<br/>
 </div>
 
 <div class="title">{path|escape} <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span></div>
--- a/mercurial/templates/gitweb/map	Sat Oct 09 15:00:30 2010 -0500
+++ b/mercurial/templates/gitweb/map	Sat Oct 09 12:27:14 2010 -0500
@@ -7,6 +7,12 @@
 summary = summary.tmpl
 error = error.tmpl
 notfound = notfound.tmpl
+
+help = help.tmpl
+helptopics = helptopics.tmpl
+
+helpentry = '<tr><td><a href="{url}help/{topic|escape}{sessionvars%urlparameter}">{topic|escape}</a></td><td>{summary|escape}</td></tr>'
+
 naventry = '<a href="{url}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
 navshortentry = '<a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
 navgraphentry = '<a href="{url}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
--- a/mercurial/templates/gitweb/shortlog.tmpl	Sat Oct 09 15:00:30 2010 -0500
+++ b/mercurial/templates/gitweb/shortlog.tmpl	Sat Oct 09 12:27:14 2010 -0500
@@ -24,7 +24,8 @@
 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
-<a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry}
+<a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry} |
+<a href="{url}help{sessionvars%urlparameter}">help</a>
 <br/>{changenav%navshort}<br/>
 </div>
 
--- a/mercurial/templates/gitweb/summary.tmpl	Sat Oct 09 15:00:30 2010 -0500
+++ b/mercurial/templates/gitweb/summary.tmpl	Sat Oct 09 12:27:14 2010 -0500
@@ -25,7 +25,8 @@
 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
-<a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry}
+<a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry} |
+<a href="{url}help{sessionvars%urlparameter}">help</a>
 <br/>
 </div>
 
--- a/mercurial/templates/gitweb/tags.tmpl	Sat Oct 09 15:00:30 2010 -0500
+++ b/mercurial/templates/gitweb/tags.tmpl	Sat Oct 09 12:27:14 2010 -0500
@@ -18,7 +18,8 @@
 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
 tags |
 <a href="{url}branches{sessionvars%urlparameter}">branches</a> |
-<a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
+<a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a> |
+<a href="{url}help{sessionvars%urlparameter}">help</a>
 <br/>
 </div>
 
--- a/mercurial/templates/monoblue/branches.tmpl	Sat Oct 09 15:00:30 2010 -0500
+++ b/mercurial/templates/monoblue/branches.tmpl	Sat Oct 09 12:27:14 2010 -0500
@@ -25,6 +25,7 @@
             <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
             <li class="current">branches</li>
             <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a></li>
+	    <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
         </ul>
     </div>
 
--- a/mercurial/templates/monoblue/changelog.tmpl	Sat Oct 09 15:00:30 2010 -0500
+++ b/mercurial/templates/monoblue/changelog.tmpl	Sat Oct 09 12:27:14 2010 -0500
@@ -25,6 +25,7 @@
             <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
             <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
             <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry}</li>
+	    <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
         </ul>
     </div>
 
--- a/mercurial/templates/monoblue/graph.tmpl	Sat Oct 09 15:00:30 2010 -0500
+++ b/mercurial/templates/monoblue/graph.tmpl	Sat Oct 09 12:27:14 2010 -0500
@@ -26,6 +26,7 @@
             <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
             <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
             <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a></li>
+	    <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
         </ul>
     </div>
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/monoblue/help.tmpl	Sat Oct 09 12:27:14 2010 -0500
@@ -0,0 +1,37 @@
+{header}
+    <title>{repo|escape}: Branches</title>
+    <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
+    <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
+</head>
+
+<body>
+<div id="container">
+    <div class="page-header">
+        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / Branches</h1>
+
+        <form action="{url}log">
+            {sessionvars%hiddenformentry}
+            <dl class="search">
+                <dt><label>Search: </label></dt>
+                <dd><input type="text" name="rev" /></dd>
+            </dl>
+        </form>
+
+        <ul class="page-nav">
+            <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
+            <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
+            <li><a href="{url}changelog{sessionvars%urlparameter}">changelog</a></li>
+            <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
+            <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
+            <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
+            <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a></li>
+	    <li class="current">help</li>
+        </ul>
+    </div>
+
+    <h2 class="no-link no-border">branches</h2>
+    <pre>
+    {doc|escape}
+    </pre>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/monoblue/helptopics.tmpl	Sat Oct 09 12:27:14 2010 -0500
@@ -0,0 +1,44 @@
+{header}
+    <title>{repo|escape}: Branches</title>
+    <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
+    <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
+</head>
+
+<body>
+<div id="container">
+    <div class="page-header">
+        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / Branches</h1>
+
+        <form action="{url}log">
+            {sessionvars%hiddenformentry}
+            <dl class="search">
+                <dt><label>Search: </label></dt>
+                <dd><input type="text" name="rev" /></dd>
+            </dl>
+        </form>
+
+        <ul class="page-nav">
+            <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
+            <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
+            <li><a href="{url}changelog{sessionvars%urlparameter}">changelog</a></li>
+            <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
+            <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
+            <li><a href="{url}help{sessionvars%urlparameter}">branches</a></li>
+            <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a></li>
+	    <li class="current">help</li>
+        </ul>
+    </div>
+
+    <h2 class="no-link no-border">branches</h2>
+    <table cellspacing="0">
+    <tr><td colspan="2"><h2><a name="main" href="#topics">Topics</a></h2></td></tr>
+    {topics % helpentry}
+
+    <tr><td colspan="2"><h2><a name="main" href="#main">Main Commands</a></h2></td></tr>
+    {earlycommands % helpentry}
+
+    <tr><td colspan="2"><h2><a name="other" href="#other">Other Commands</a></h2></td></tr>
+    {othercommands % helpentry}
+    </table>
+
+{footer}
--- a/mercurial/templates/monoblue/manifest.tmpl	Sat Oct 09 15:00:30 2010 -0500
+++ b/mercurial/templates/monoblue/manifest.tmpl	Sat Oct 09 12:27:14 2010 -0500
@@ -25,6 +25,7 @@
             <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
             <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
             <li class="current">files</li>
+	    <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
         </ul>
     </div>
 
--- a/mercurial/templates/monoblue/map	Sat Oct 09 15:00:30 2010 -0500
+++ b/mercurial/templates/monoblue/map	Sat Oct 09 12:27:14 2010 -0500
@@ -7,6 +7,12 @@
 summary = summary.tmpl
 error = error.tmpl
 notfound = notfound.tmpl
+
+help = help.tmpl
+helptopics = helptopics.tmpl
+
+helpentry = '<tr><td><a href="{url}help/{topic|escape}{sessionvars%urlparameter}">{topic|escape}</a></td><td>{summary|escape}</td></tr>'
+
 naventry = '<a href="{url}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
 navshortentry = '<a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
 navgraphentry = '<a href="{url}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
@@ -75,7 +81,7 @@
   <tr class="parity{parity}">
     <td class="linenr">
       <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#{targetline}"
-         title="{node|short}: {desc|escape|firstline}">{author|user}@{rev}</a>
+	 title="{node|short}: {desc|escape|firstline}">{author|user}@{rev}</a>
     </td>
     <td class="lineno">
       <a href="#{lineid}" id="{lineid}">{linenumber}</a>
--- a/mercurial/templates/monoblue/shortlog.tmpl	Sat Oct 09 15:00:30 2010 -0500
+++ b/mercurial/templates/monoblue/shortlog.tmpl	Sat Oct 09 12:27:14 2010 -0500
@@ -24,7 +24,9 @@
             <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
             <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
             <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
-            <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry}</li>
+            <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a></li>
+	    {archives%archiveentry}
+	    <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
         </ul>
     </div>
 
--- a/mercurial/templates/monoblue/summary.tmpl	Sat Oct 09 15:00:30 2010 -0500
+++ b/mercurial/templates/monoblue/summary.tmpl	Sat Oct 09 12:27:14 2010 -0500
@@ -25,6 +25,7 @@
             <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
             <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
             <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a></li>
+	    <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
         </ul>
     </div>
 
--- a/mercurial/templates/monoblue/tags.tmpl	Sat Oct 09 15:00:30 2010 -0500
+++ b/mercurial/templates/monoblue/tags.tmpl	Sat Oct 09 12:27:14 2010 -0500
@@ -25,6 +25,7 @@
             <li class="current">tags</li>
             <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
             <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a></li>
+	    <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
         </ul>
     </div>
 
--- a/mercurial/templates/paper/changeset.tmpl	Sat Oct 09 15:00:30 2010 -0500
+++ b/mercurial/templates/paper/changeset.tmpl	Sat Oct 09 12:27:14 2010 -0500
@@ -22,6 +22,9 @@
 <ul>
  {archives%archiveentry}
 </ul>
+<ul>
+ <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
+</ul>
 </div>
 
 <div class="main">
--- a/mercurial/templates/paper/graph.tmpl	Sat Oct 09 15:00:30 2010 -0500
+++ b/mercurial/templates/paper/graph.tmpl	Sat Oct 09 12:27:14 2010 -0500
@@ -24,6 +24,9 @@
 <li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li>
 <li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
 </ul>
+<ul>
+ <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
+</ul>
 </div>
 
 <div class="main">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/paper/help.tmpl	Sat Oct 09 12:27:14 2010 -0500
@@ -0,0 +1,43 @@
+{header}
+<title>Help: {topic}</title>
+<link rel="alternate" type="application/atom+xml"
+   href="{url}atom-tags" title="Atom feed for {repo|escape}" />
+<link rel="alternate" type="application/rss+xml"
+   href="{url}rss-tags" title="RSS feed for {repo|escape}" />
+</head>
+<body>
+
+<div class="container">
+<div class="menu">
+<div class="logo">
+<a href="http://mercurial.selenic.com/">
+<img src="{staticurl}hglogo.png" alt="mercurial" /></a>
+</div>
+<ul>
+<li><a href="{url}shortlog{sessionvars%urlparameter}">log</a></li>
+<li><a href="{url}graph{sessionvars%urlparameter}">graph</a></li>
+<li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
+<li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
+</ul>
+<ul>
+ <li class="active">help</li>
+</ul>
+</div>
+
+<div class="main">
+<h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
+<h3>Help: {topic}</h3>
+
+<form class="search" action="{url}log">
+{sessionvars%hiddenformentry}
+<p><input name="rev" id="search1" type="text" size="30" /></p>
+<div id="hint">find changesets by author, revision,
+files, or words in the commit message</div>
+</form>
+<pre>
+{doc|escape}
+</pre>
+</div>
+</div>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/paper/helptopics.tmpl	Sat Oct 09 12:27:14 2010 -0500
@@ -0,0 +1,48 @@
+{header}
+<title>Help: {title}</title>
+<link rel="alternate" type="application/atom+xml"
+   href="{url}atom-tags" title="Atom feed for {repo|escape}" />
+<link rel="alternate" type="application/rss+xml"
+   href="{url}rss-tags" title="RSS feed for {repo|escape}" />
+</head>
+<body>
+
+<div class="container">
+<div class="menu">
+<div class="logo">
+<a href="http://mercurial.selenic.com/">
+<img src="{staticurl}hglogo.png" alt="mercurial" /></a>
+</div>
+<ul>
+<li><a href="{url}shortlog{sessionvars%urlparameter}">log</a></li>
+<li><a href="{url}graph{sessionvars%urlparameter}">graph</a></li>
+<li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
+<li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
+</ul>
+<ul>
+<li class="active">help</li>
+</ul>
+</div>
+
+<div class="main">
+<h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
+<form class="search" action="{url}log">
+{sessionvars%hiddenformentry}
+<p><input name="rev" id="search1" type="text" size="30" /></p>
+<div id="hint">find changesets by author, revision,
+files, or words in the commit message</div>
+</form>
+<table class="bigtable">
+<tr><td colspan="2"><h2><a name="main" href="#topics">Topics</a></h2></td></tr>
+{topics % helpentry}
+
+<tr><td colspan="2"><h2><a name="main" href="#main">Main Commands</a></h2></td></tr>
+{earlycommands % helpentry}
+
+<tr><td colspan="2"><h2><a name="other" href="#other">Other Commands</a></h2></td></tr>
+{othercommands % helpentry}
+</table>
+</div>
+</div>
+
+{footer}
--- a/mercurial/templates/paper/manifest.tmpl	Sat Oct 09 15:00:30 2010 -0500
+++ b/mercurial/templates/paper/manifest.tmpl	Sat Oct 09 12:27:14 2010 -0500
@@ -22,6 +22,9 @@
 <ul>
 {archives%archiveentry}
 </ul>
+<ul>
+ <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
+</ul>
 </div>
 
 <div class="main">
--- a/mercurial/templates/paper/map	Sat Oct 09 15:00:30 2010 -0500
+++ b/mercurial/templates/paper/map	Sat Oct 09 12:27:14 2010 -0500
@@ -9,6 +9,10 @@
 shortlog = shortlog.tmpl
 shortlogentry = shortlogentry.tmpl
 graph = graph.tmpl
+help = help.tmpl
+helptopics = helptopics.tmpl
+
+helpentry = '<tr><td><a href="{url}help/{topic|escape}{sessionvars%urlparameter}">{topic|escape}</a></td><td>{summary|escape}</td></tr>'
 
 naventry = '<a href="{url}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
 navshortentry = '<a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
--- a/mercurial/templates/paper/shortlog.tmpl	Sat Oct 09 15:00:30 2010 -0500
+++ b/mercurial/templates/paper/shortlog.tmpl	Sat Oct 09 12:27:14 2010 -0500
@@ -26,6 +26,9 @@
 <ul>
 {archives%archiveentry}
 </ul>
+<ul>
+ <li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
+</ul>
 </div>
 
 <div class="main">
--- a/mercurial/templates/paper/tags.tmpl	Sat Oct 09 15:00:30 2010 -0500
+++ b/mercurial/templates/paper/tags.tmpl	Sat Oct 09 12:27:14 2010 -0500
@@ -19,6 +19,9 @@
 <li class="active">tags</li>
 <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
 </ul>
+<ul>
+<li><a href="{url}help{sessionvars%urlparameter}">help</a></li>
+</ul>
 </div>
 
 <div class="main">
--- a/mercurial/templates/static/style-monoblue.css	Sat Oct 09 15:00:30 2010 -0500
+++ b/mercurial/templates/static/style-monoblue.css	Sat Oct 09 12:27:14 2010 -0500
@@ -83,7 +83,7 @@
     margin: 10px 0 0 0;
     list-style-type: none;
     overflow: hidden;
-    width: 800px;
+    width: 900px;
   }
     ul.page-nav li {
       margin: 0 2px 0 0;
--- a/tests/test-hgweb-commands.t	Sat Oct 09 15:00:30 2010 -0500
+++ b/tests/test-hgweb-commands.t	Sat Oct 09 12:27:14 2010 -0500
@@ -205,6 +205,7 @@
   <li><a href="/graph/1d22e65f027e">graph</a></li>
   <li><a href="/tags">tags</a></li>
   <li><a href="/branches">branches</a></li>
+  <li><a href="/help">help</a></li>
   </ul>
   <ul>
   <li><a href="/rev/1d22e65f027e">changeset</a></li>
@@ -213,6 +214,9 @@
   <ul>
   
   </ul>
+  <ul>
+   <li><a href="/help">help</a></li>
+  </ul>
   </div>
   
   <div class="main">
@@ -294,6 +298,7 @@
    <li><a href="/graph/2ef0ac749a14">graph</a></li>
    <li><a href="/tags">tags</a></li>
    <li><a href="/branches">branches</a></li>
+   <li><a href="/help">help</a></li>
   </ul>
   <ul>
    <li class="active">changeset</li>
@@ -303,6 +308,9 @@
   <ul>
    
   </ul>
+  <ul>
+   <li><a href="/help">help</a></li>
+  </ul>
   </div>
   
   <div class="main">
@@ -627,7 +635,8 @@
   <a href="/graph?style=gitweb">graph</a> |
   <a href="/tags?style=gitweb">tags</a> |
   <a href="/branches?style=gitweb">branches</a> |
-  <a href="/file/1d22e65f027e?style=gitweb">files</a>
+  <a href="/file/1d22e65f027e?style=gitweb">files</a> |
+  <a href="/help?style=gitweb">help</a>
   <br/>
   </div>
   
@@ -778,7 +787,8 @@
   graph |
   <a href="/tags?style=gitweb">tags</a> |
   <a href="/branches?style=gitweb">branches</a> |
-  <a href="/file/1d22e65f027e?style=gitweb">files</a>
+  <a href="/file/1d22e65f027e?style=gitweb">files</a> |
+  <a href="/help?style=gitweb">help</a>
   <br/>
   <a href="/graph/2?style=gitweb&revcount=30">less</a>
   <a href="/graph/2?style=gitweb&revcount=120">more</a>
--- a/tests/test-hgweb-descend-empties.t	Sat Oct 09 15:00:30 2010 -0500
+++ b/tests/test-hgweb-descend-empties.t	Sat Oct 09 12:27:14 2010 -0500
@@ -52,6 +52,7 @@
   <li><a href="/graph/9087c84a0f5d">graph</a></li>
   <li><a href="/tags">tags</a></li>
   <li><a href="/branches">branches</a></li>
+  <li><a href="/help">help</a></li>
   </ul>
   <ul>
   <li><a href="/rev/9087c84a0f5d">changeset</a></li>
@@ -60,6 +61,9 @@
   <ul>
   
   </ul>
+  <ul>
+   <li><a href="/help">help</a></li>
+  </ul>
   </div>
   
   <div class="main">
--- a/tests/test-hgweb-diffs.t	Sat Oct 09 15:00:30 2010 -0500
+++ b/tests/test-hgweb-diffs.t	Sat Oct 09 12:27:14 2010 -0500
@@ -44,6 +44,7 @@
    <li><a href="/graph/0cd96de13884">graph</a></li>
    <li><a href="/tags">tags</a></li>
    <li><a href="/branches">branches</a></li>
+   <li><a href="/help">help</a></li>
   </ul>
   <ul>
    <li class="active">changeset</li>
@@ -53,6 +54,9 @@
   <ul>
    
   </ul>
+  <ul>
+   <li><a href="/help">help</a></li>
+  </ul>
   </div>
   
   <div class="main">
@@ -263,6 +267,7 @@
    <li><a href="/graph/0cd96de13884">graph</a></li>
    <li><a href="/tags">tags</a></li>
    <li><a href="/branches">branches</a></li>
+   <li><a href="/help">help</a></li>
   </ul>
   <ul>
    <li class="active">changeset</li>
@@ -272,6 +277,9 @@
   <ul>
    
   </ul>
+  <ul>
+   <li><a href="/help">help</a></li>
+  </ul>
   </div>
   
   <div class="main">
--- a/tests/test-hgweb-empty.t	Sat Oct 09 15:00:30 2010 -0500
+++ b/tests/test-hgweb-empty.t	Sat Oct 09 12:27:14 2010 -0500
@@ -33,6 +33,7 @@
   <li><a href="/graph/000000000000">graph</a></li>
   <li><a href="/tags">tags</a></li>
   <li><a href="/branches">branches</a></li>
+  <li><a href="/help">help</a></li>
   </ul>
   <ul>
   <li><a href="/rev/000000000000">changeset</a></li>
@@ -41,6 +42,9 @@
   <ul>
   
   </ul>
+  <ul>
+   <li><a href="/help">help</a></li>
+  </ul>
   </div>
   
   <div class="main">
@@ -112,6 +116,7 @@
   <li><a href="/graph/000000000000">graph</a></li>
   <li><a href="/tags">tags</a></li>
   <li><a href="/branches">branches</a></li>
+  <li><a href="/help">help</a></li>
   </ul>
   <ul>
   <li><a href="/rev/000000000000">changeset</a></li>
@@ -120,6 +125,9 @@
   <ul>
   
   </ul>
+  <ul>
+   <li><a href="/help">help</a></li>
+  </ul>
   </div>
   
   <div class="main">
@@ -192,11 +200,15 @@
   <li class="active">graph</li>
   <li><a href="/tags">tags</a></li>
   <li><a href="/branches">branches</a></li>
+  <li><a href="/help">help</a></li>
   </ul>
   <ul>
   <li><a href="/rev/000000000000">changeset</a></li>
   <li><a href="/file/000000000000">browse</a></li>
   </ul>
+  <ul>
+   <li><a href="/help">help</a></li>
+  </ul>
   </div>
   
   <div class="main">
@@ -332,6 +344,7 @@
   <li><a href="/graph/000000000000">graph</a></li>
   <li><a href="/tags">tags</a></li>
   <li><a href="/branches">branches</a></li>
+  <li><a href="/help">help</a></li>
   </ul>
   <ul>
   <li><a href="/rev/000000000000">changeset</a></li>
@@ -340,6 +353,9 @@
   <ul>
   
   </ul>
+  <ul>
+   <li><a href="/help">help</a></li>
+  </ul>
   </div>
   
   <div class="main">
--- a/tests/test-hgweb-removed.t	Sat Oct 09 15:00:30 2010 -0500
+++ b/tests/test-hgweb-removed.t	Sat Oct 09 12:27:14 2010 -0500
@@ -39,6 +39,7 @@
    <li><a href="/graph/c78f6c5cbea9">graph</a></li>
    <li><a href="/tags">tags</a></li>
    <li><a href="/branches">branches</a></li>
+   <li><a href="/help">help</a></li>
   </ul>
   <ul>
    <li class="active">changeset</li>
@@ -48,6 +49,9 @@
   <ul>
    
   </ul>
+  <ul>
+   <li><a href="/help">help</a></li>
+  </ul>
   </div>
   
   <div class="main">
--- a/tests/test-hgweb.t	Sat Oct 09 15:00:30 2010 -0500
+++ b/tests/test-hgweb.t	Sat Oct 09 12:27:14 2010 -0500
@@ -213,6 +213,7 @@
   <li><a href="/graph/2ef0ac749a14">graph</a></li>
   <li><a href="/tags">tags</a></li>
   <li><a href="/branches">branches</a></li>
+  <li><a href="/help">help</a></li>
   </ul>
   <ul>
   <li><a href="/rev/2ef0ac749a14">changeset</a></li>
@@ -221,6 +222,9 @@
   <ul>
   
   </ul>
+  <ul>
+   <li><a href="/help">help</a></li>
+  </ul>
   </div>
   
   <div class="main">