changeset 3266:03880d4e2550

merged NewWebInterface
author Thomas Arendsen Hein <thomas@intevation.de>
date Thu, 05 Oct 2006 10:15:22 +0200
parents 53d6bcccdbef (current diff) d1aa83f199ef (diff)
children b4f16bf59a5d
files
diffstat 33 files changed, 688 insertions(+), 127 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/hgweb/hgweb_mod.py	Thu Oct 05 10:07:40 2006 +0200
+++ b/mercurial/hgweb/hgweb_mod.py	Thu Oct 05 10:15:22 2006 +0200
@@ -54,9 +54,9 @@
 
     def archivelist(self, nodeid):
         allowed = self.repo.ui.configlist("web", "allow_archive")
-        for i in self.archives:
+        for i, spec in self.archive_specs.iteritems():
             if i in allowed or self.repo.ui.configbool("web", "allow" + i):
-                yield {"type" : i, "node" : nodeid, "url": ""}
+                yield {"type" : i, "extension" : spec[2], "node" : nodeid}
 
     def listfiles(self, files, mf):
         for f in files[:self.maxfiles]:
@@ -645,9 +645,80 @@
                         form[name] = value
                     del form[k]
 
+        def rewrite_request(req):
+            '''translate new web interface to traditional format'''
+
+            def spliturl(req):
+                def firstitem(query):
+                    return query.split('&', 1)[0].split(';', 1)[0]
+
+                base = ''
+                if req.env.has_key('REPO_NAME'):
+                    base = '/' + req.env['REPO_NAME']
+                elif req.env.get('SCRIPT_NAME'):
+                    base = req.env['SCRIPT_NAME']
+
+                pi = req.env.get('PATH_INFO')
+                if pi:
+                    if pi.startswith(base):
+                        if len(pi) > len(base):
+                            base += '/'
+                            query = pi[len(base):]
+                        else:
+                            if req.env.has_key('REPO_NAME'):
+                                # We are using hgwebdir
+                                base += '/'
+                            else:
+                                base += '?'
+                            query = firstitem(req.env['QUERY_STRING'])
+                    else:
+                        base += '/'
+                        query = pi[1:]
+                else:
+                    base += '?'
+                    query = firstitem(req.env['QUERY_STRING'])
+
+                return (base, query)
+
+            req.url, query = spliturl(req)
+
+            if req.form.has_key('cmd'):
+                # old style
+                return
+
+            args = query.split('/', 2)
+            if not args or not args[0]:
+                return
+
+            cmd = args.pop(0)
+            style = cmd.rfind('-')
+            if style != -1:
+                req.form['style'] = [cmd[:style]]
+                cmd = cmd[style+1:]
+            # avoid accepting e.g. style parameter as command
+            if hasattr(self, 'do_' + cmd):
+                req.form['cmd'] = [cmd]
+
+            if args and args[0]:
+                node = args.pop(0)
+                req.form['node'] = [node]
+            if args:
+                req.form['file'] = args
+
+            if cmd == 'static':
+                req.form['file'] = req.form['node']
+            elif cmd == 'archive':
+                fn = req.form['node'][0]
+                for type_, spec in self.archive_specs.iteritems():
+                    ext = spec[2]
+                    if fn.endswith(ext):
+                        req.form['node'] = [fn[:-len(ext)]]
+                        req.form['type'] = [type_]
+
         self.refresh()
 
         expand_form(req.form)
+        rewrite_request(req)
 
         m = os.path.join(self.templatepath, "map")
         style = self.repo.ui.config("web", "style", "")
@@ -659,18 +730,21 @@
             if os.path.isfile(p):
                 m = p
 
-        port = req.env["SERVER_PORT"]
-        port = port != "80" and (":" + port) or ""
-        uri = req.env["REQUEST_URI"]
-        if "?" in uri:
-            uri = uri.split("?")[0]
-        url = "http://%s%s%s" % (req.env["SERVER_NAME"], port, uri)
+        if not req.url:
+            port = req.env["SERVER_PORT"]
+            port = port != "80" and (":" + port) or ""
+            uri = req.env["REQUEST_URI"]
+            if "?" in uri:
+                uri = uri.split("?")[0]
+            req.url = "http://%s%s%s" % (req.env["SERVER_NAME"], port, uri)
+
         if not self.reponame:
             self.reponame = (self.repo.ui.config("web", "name")
-                             or uri.strip('/') or self.repo.root)
+                             or req.env.get('REPO_NAME')
+                             or req.url.strip('/') or self.repo.root)
 
         self.t = templater.templater(m, templater.common_filters,
-                                     defaults={"url": url,
+                                     defaults={"url": req.url,
                                                "repo": self.reponame,
                                                "header": header,
                                                "footer": footer,
@@ -723,6 +797,30 @@
         else:
             return 0
 
+    def do_log(self, req):
+        if req.form.has_key('file') and req.form['file'][0]:
+            self.do_filelog(req)
+        else:
+            self.do_changelog(req)
+
+    def do_rev(self, req):
+        self.do_changeset(req)
+
+    def do_file(self, req):
+        path = req.form.get('file', [''])[0]
+        if path:
+            try:
+                req.write(self.filerevision(self.filectx(req)))
+                return
+            except hg.RepoError:
+                pass
+            path = self.cleanpath(path)
+
+        req.write(self.manifest(self.changectx(req), '/' + path))
+
+    def do_diff(self, req):
+        self.do_filediff(req)
+
     def do_changelog(self, req, shortlog = False):
         if req.form.has_key('node'):
             ctx = self.changectx(req)
@@ -759,9 +857,6 @@
     def do_filediff(self, req):
         req.write(self.filediff(self.filectx(req)))
 
-    def do_file(self, req):
-        req.write(self.filerevision(self.filectx(req)))
-
     def do_annotate(self, req):
         req.write(self.fileannotate(self.filectx(req)))
 
--- a/mercurial/hgweb/hgwebdir_mod.py	Thu Oct 05 10:07:40 2006 +0200
+++ b/mercurial/hgweb/hgwebdir_mod.py	Thu Oct 05 10:15:22 2006 +0200
@@ -85,9 +85,10 @@
 
         def archivelist(ui, nodeid, url):
             allowed = ui.configlist("web", "allow_archive")
-            for i in ['zip', 'gz', 'bz2']:
-                if i in allowed or ui.configbool("web", "allow" + i):
-                    yield {"type" : i, "node": nodeid, "url": url}
+            for i in [('zip', '.zip'), ('gz', '.tar.gz'), ('bz2', '.tar.bz2')]:
+                if i[0] in allowed or ui.configbool("web", "allow" + i[0]):
+                    yield {"type" : i[0], "extension": i[1],
+                           "node": nodeid, "url": url}
 
         def entries(sortcolumn="", descending=False, **map):
             rows = []
@@ -101,7 +102,7 @@
                 get = u.config
 
                 url = ('/'.join([req.env["REQUEST_URI"].split('?')[0], name])
-                       .replace("//", "/"))
+                       .replace("//", "/")) + '/'
 
                 # update time with local timezone
                 try:
@@ -142,9 +143,22 @@
                     yield row
 
         virtual = req.env.get("PATH_INFO", "").strip('/')
-        if virtual:
-            real = dict(self.repos).get(virtual)
+        if virtual.startswith('static/'):
+            static = os.path.join(templater.templatepath(), 'static')
+            fname = virtual[7:]
+            req.write(staticfile(static, fname, req) or
+                      tmpl('error', error='%r not found' % fname))
+        elif virtual:
+            while virtual:
+                real = dict(self.repos).get(virtual)
+                if real:
+                    break
+                up = virtual.rfind('/')
+                if up < 0:
+                    break
+                virtual = virtual[:up]
             if real:
+                req.env['REPO_NAME'] = virtual
                 try:
                     hgweb(real).run_wsgi(req)
                 except IOError, inst:
--- a/mercurial/hgweb/server.py	Thu Oct 05 10:07:40 2006 +0200
+++ b/mercurial/hgweb/server.py	Thu Oct 05 10:15:22 2006 +0200
@@ -71,7 +71,7 @@
         env['REQUEST_METHOD'] = self.command
         env['SERVER_NAME'] = self.server.server_name
         env['SERVER_PORT'] = str(self.server.server_port)
-        env['REQUEST_URI'] = "/"
+        env['REQUEST_URI'] = self.path
         env['PATH_INFO'] = path_info
         if query:
             env['QUERY_STRING'] = query
--- a/templates/changelog.tmpl	Thu Oct 05 10:07:40 2006 +0200
+++ b/templates/changelog.tmpl	Thu Oct 05 10:15:22 2006 +0200
@@ -1,24 +1,23 @@
 #header#
 <title>#repo|escape#: changelog</title>
 <link rel="alternate" type="application/rss+xml"
-   href="?cmd=changelog;style=rss" title="RSS feed for #repo|escape#">
+   href="#url#rss-log" title="RSS feed for #repo|escape#">
 </head>
 <body>
 
 <div class="buttons">
-<a href="?sl=#rev#">shortlog</a>
-<a href="?cmd=tags">tags</a>
-<a href="?mf=#node|short#;path=/">manifest</a>
+<a href="#url#shortlog/#rev#">shortlog</a>
+<a href="#url#tags">tags</a>
+<a href="#url#file/#node|short#">manifest</a>
 #archives%archiveentry#
-<a type="application/rss+xml" href="?style=rss">rss</a>
+<a type="application/rss+xml" href="#url#rss-log">rss</a>
 </div>
 
 <h2>changelog for #repo|escape#</h2>
 
-<form action="#">
+<form action="#url#log">
 <p>
 <label for="search1">search:</label>
-<input type="hidden" name="cmd" value="changelog">
 <input name="rev" id="search1" type="text" size="30">
 navigate: <small class="navigate">#changenav%naventry#</small>
 </p>
@@ -26,10 +25,9 @@
 
 #entries%changelogentry#
 
-<form action="#">
+<form action="#url#log">
 <p>
 <label for="search2">search:</label>
-<input type="hidden" name="cmd" value="changelog">
 <input name="rev" id="search2" type="text" size="30">
 navigate: <small class="navigate">#changenav%naventry#</small>
 </p>
--- a/templates/changelogentry.tmpl	Thu Oct 05 10:07:40 2006 +0200
+++ b/templates/changelogentry.tmpl	Thu Oct 05 10:15:22 2006 +0200
@@ -5,7 +5,7 @@
  </tr>
  <tr>
   <th class="revision">changeset #rev#:</th>
-  <td class="node"><a href="?cs=#node|short#">#node|short#</a></td>
+  <td class="node"><a href="#url#rev/#node|short#">#node|short#</a></td>
  </tr>
  #parent%changelogparent#
  #child%changelogchild#
@@ -19,7 +19,7 @@
   <td class="date">#date|date#</td>
  </tr>
  <tr>
-  <th class="files"><a href="?mf=#node|short#;path=/">files</a>:</th>
+  <th class="files"><a href="#url#file/#node|short#/">files</a>:</th>
   <td class="files">#files#</td>
  </tr>
 </table>
--- a/templates/changeset.tmpl	Thu Oct 05 10:07:40 2006 +0200
+++ b/templates/changeset.tmpl	Thu Oct 05 10:15:22 2006 +0200
@@ -4,11 +4,11 @@
 <body>
 
 <div class="buttons">
-<a href="?cl=#rev#">changelog</a>
-<a href="?sl=#rev#">shortlog</a>
-<a href="?cmd=tags">tags</a>
-<a href="?mf=#node|short#;path=/">manifest</a>
-<a href="?cs=#node|short#;style=raw">raw</a>
+<a href="#url#log/#rev#">changelog</a>
+<a href="#url#shortlog/#rev#">shortlog</a>
+<a href="#url#tags">tags</a>
+<a href="#url#file/#node|short#">manifest</a>
+<a href="#url#raw-rev/#node|short#">raw</a>
 #archives%archiveentry#
 </div>
 
@@ -17,7 +17,7 @@
 <table id="changesetEntry">
 <tr>
  <th class="changeset">changeset #rev#:</th>
- <td class="changeset"><a href="?cs=#node|short#">#node|short#</a></td>
+ <td class="changeset"><a href="#url#rev/#node|short#">#node|short#</a></td>
 </tr>
 #parent%changesetparent#
 #child%changesetchild#
--- a/templates/fileannotate.tmpl	Thu Oct 05 10:07:40 2006 +0200
+++ b/templates/fileannotate.tmpl	Thu Oct 05 10:15:22 2006 +0200
@@ -4,14 +4,14 @@
 <body>
 
 <div class="buttons">
-<a href="?cl=#rev#">changelog</a>
-<a href="?sl=#rev#">shortlog</a>
-<a href="?tags=">tags</a>
-<a href="?cs=#node|short#">changeset</a>
-<a href="?mf=#node|short#;path=#path|urlescape#">manifest</a>
-<a href="?f=#node|short#;file=#file|urlescape#">file</a>
-<a href="?fl=#node|short#;file=#file|urlescape#">revisions</a>
-<a href="?fa=#node|short#;file=#file|urlescape#;style=raw">raw</a>
+<a href="#url#log/#rev#">changelog</a>
+<a href="#url#shortlog/#rev#">shortlog</a>
+<a href="#url#tags">tags</a>
+<a href="#url#rev/#node|short#">changeset</a>
+<a href="#url#file/#node|short##path|urlescape#">manifest</a>
+<a href="#url#file/#node|short#/#file|urlescape#">file</a>
+<a href="#url#log/#node|short#/#file|urlescape#">revisions</a>
+<a href="#url#raw-annotate/#node|short#/#file|urlescape#">raw</a>
 </div>
 
 <h2>Annotate #file|escape#</h2>
@@ -19,7 +19,7 @@
 <table>
 <tr>
  <td class="metatag">changeset #rev#:</td>
- <td><a href="?cs=#node|short#">#node|short#</a></td></tr>
+ <td><a href="#url#rev/#node|short#">#node|short#</a></td></tr>
 #rename%filerename#
 #parent%fileannotateparent#
 #child%fileannotatechild#
--- a/templates/filediff.tmpl	Thu Oct 05 10:07:40 2006 +0200
+++ b/templates/filediff.tmpl	Thu Oct 05 10:15:22 2006 +0200
@@ -4,14 +4,14 @@
 <body>
 
 <div class="buttons">
-<a href="?cl=#rev#">changelog</a>
-<a href="?sl=#rev#">shortlog</a>
-<a href="?tags=">tags</a>
-<a href="?cs=#node|short#">changeset</a>
-<a href="?f=#node|short#;file=#file|urlescape#">file</a>
-<a href="?fl=#node|short#;file=#file|urlescape#">revisions</a>
-<a href="?fa=#node|short#;file=#file|urlescape#">annotate</a>
-<a href="?fd=#node|short#;file=#file|urlescape#;style=raw">raw</a>
+<a href="#url#log/#rev#">changelog</a>
+<a href="#url#shortlog/#rev#">shortlog</a>
+<a href="#url#tags">tags</a>
+<a href="#url#rev/#node|short#">changeset</a>
+<a href="#url#file/#node|short#/#file|urlescape#">file</a>
+<a href="#url#log/#node|short#/#file|urlescape#">revisions</a>
+<a href="#url#annotate/#node|short#/#file|urlescape#">annotate</a>
+<a href="#url#raw-diff/#node|short#/#file|urlescape#">raw</a>
 </div>
 
 <h2>#file|escape#</h2>
@@ -19,7 +19,7 @@
 <table id="filediffEntry">
 <tr>
  <th class="revision">revision #rev#:</th>
- <td class="revision"><a href="?cs=#node|short#">#node|short#</a></td>
+ <td class="revision"><a href="#url#rev/#node|short#">#node|short#</a></td>
 </tr>
 #parent%filediffparent#
 #child%filediffchild#
--- a/templates/filelog.tmpl	Thu Oct 05 10:07:40 2006 +0200
+++ b/templates/filelog.tmpl	Thu Oct 05 10:15:22 2006 +0200
@@ -1,18 +1,18 @@
 #header#
 <title>#repo|escape#: #file|escape# history</title>
 <link rel="alternate" type="application/rss+xml"
-   href="?fl=0;file=#file|urlescape#;style=rss" title="RSS feed for #repo|escape#:#file#">
+   href="#url#rss-log/tip/#file|urlescape#" title="RSS feed for #repo|escape#:#file#">
 </head>
 </head>
 <body>
 
 <div class="buttons">
-<a href="?cl=tip">changelog</a>
-<a href="?sl=tip">shortlog</a>
-<a href="?tags=">tags</a>
-<a href="?f=#node|short#;file=#file|urlescape#">file</a>
-<a href="?fa=#node|short#;file=#file|urlescape#">annotate</a>
-<a type="application/rss+xml" href="?fl=0;file=#file|urlescape#;style=rss">rss</a>
+<a href="#url#log">changelog</a>
+<a href="#url#shortlog">shortlog</a>
+<a href="#url#tags">tags</a>
+<a href="#url#file/#node|short#/#file|urlescape#">file</a>
+<a href="#url#annotate/#node|short#/#file|urlescape#">annotate</a>
+<a type="application/rss+xml" href="#url#rss-log/tip/#file|urlescape#">rss</a>
 </div>
 
 <h2>#file|escape# revision history</h2>
--- a/templates/filelogentry.tmpl	Thu Oct 05 10:07:40 2006 +0200
+++ b/templates/filelogentry.tmpl	Thu Oct 05 10:15:22 2006 +0200
@@ -1,14 +1,14 @@
 <table class="logEntry parity#parity#">
  <tr>
   <th class="age">#date|age# ago:</th>
-  <th class="firstline"><a href="?cs=#node|short#">#desc|strip|firstline|escape#</a></th>
+  <th class="firstline"><a href="#url#rev/#node|short#">#desc|strip|firstline|escape#</a></th>
  </tr>
  <tr>
   <th class="revision">revision #filerev#:</td>
   <td class="node">
-   <a href="?f=#node|short#;file=#file|urlescape#">#node|short#</a>
-   <a href="?fd=#node|short#;file=#file|urlescape#">(diff)</a>
-   <a href="?fa=#node|short#;file=#file|urlescape#">(annotate)</a>
+   <a href="#url#file/#node|short#/#file|urlescape#">#node|short#</a>
+   <a href="#url#diff/#node|short#/#file|urlescape#">(diff)</a>
+   <a href="#url#annotate/#node|short#/#file|urlescape#">(annotate)</a>
   </td>
  </tr>
  #rename%filelogrename#
--- a/templates/filerevision.tmpl	Thu Oct 05 10:07:40 2006 +0200
+++ b/templates/filerevision.tmpl	Thu Oct 05 10:15:22 2006 +0200
@@ -4,14 +4,14 @@
 <body>
 
 <div class="buttons">
-<a href="?cl=#rev#">changelog</a>
-<a href="?sl=#rev#">shortlog</a>
-<a href="?tags=">tags</a>
-<a href="?cs=#node|short#">changeset</a>
-<a href="?mf=#node|short#;path=#path|urlescape#">manifest</a>
-<a href="?fl=#node|short#;file=#file|urlescape#">revisions</a>
-<a href="?fa=#node|short#;file=#file|urlescape#">annotate</a>
-<a href="?f=#node|short#;file=#file|urlescape#;style=raw">raw</a>
+<a href="#url#log/#rev#">changelog</a>
+<a href="#url#shortlog/#rev#">shortlog</a>
+<a href="#url#tags">tags</a>
+<a href="#url#rev/#node|short#">changeset</a>
+<a href="#url#file/#node|short##path|urlescape#">manifest</a>
+<a href="#url#log/#node|short#/#file|urlescape#">revisions</a>
+<a href="#url#annotate/#node|short#/#file|urlescape#">annotate</a>
+<a href="#url#raw-file/#node|short#/#file|urlescape#">raw</a>
 </div>
 
 <h2>#file|escape#</h2>
@@ -19,7 +19,7 @@
 <table>
 <tr>
  <td class="metatag">changeset #rev#:</td>
- <td><a href="?cs=#node|short#">#node|short#</a></td></tr>
+ <td><a href="#url#rev/#node|short#">#node|short#</a></td></tr>
 #rename%filerename#
 #parent%filerevparent#
 #child%filerevchild#
--- a/templates/header.tmpl	Thu Oct 05 10:07:40 2006 +0200
+++ b/templates/header.tmpl	Thu Oct 05 10:15:22 2006 +0200
@@ -3,6 +3,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html>
 <head>
-<link rel="icon" href="?static=hgicon.png" type="image/png">
+<link rel="icon" href="#url#static/hgicon.png" type="image/png">
 <meta name="robots" content="index, nofollow" />
-<link rel="stylesheet" href="?static=style.css" type="text/css" />
+<link rel="stylesheet" href="#url#static/style.css" type="text/css" />
--- a/templates/manifest.tmpl	Thu Oct 05 10:07:40 2006 +0200
+++ b/templates/manifest.tmpl	Thu Oct 05 10:15:22 2006 +0200
@@ -4,10 +4,10 @@
 <body>
 
 <div class="buttons">
-<a href="?cl=#rev#">changelog</a>
-<a href="?sl=#rev#">shortlog</a>
-<a href="?tags=">tags</a>
-<a href="?cs=#node|short#">changeset</a>
+<a href="#url#log/#rev#">changelog</a>
+<a href="#url#shortlog/#rev#">shortlog</a>
+<a href="#url#tags">tags</a>
+<a href="#url#rev/#node|short#">changeset</a>
 #archives%archiveentry#
 </div>
 
@@ -16,7 +16,7 @@
 <table cellpadding="0" cellspacing="0">
 <tr class="parity1">
   <td><tt>drwxr-xr-x</tt>&nbsp;
-  <td><a href="?mf=#node|short#;path=#up|urlescape#">[up]</a>
+  <td><a href="#url#file/#node|short##up|urlescape#">[up]</a>
 #dentries%manifestdirentry#
 #fentries%manifestfileentry#
 </table>
--- a/templates/map	Thu Oct 05 10:07:40 2006 +0200
+++ b/templates/map	Thu Oct 05 10:15:22 2006 +0200
@@ -5,49 +5,49 @@
 changelog = changelog.tmpl
 shortlog = shortlog.tmpl
 shortlogentry = shortlogentry.tmpl
-naventry = '<a href="?cl=#rev#">#label|escape#</a> '
-navshortentry = '<a href="?sl=#rev#">#label|escape#</a> '
-filedifflink = '<a href="?fd=#node|short#;file=#file|urlescape#">#file|escape#</a> '
-filenodelink = '<a href="?f=#node|short#;file=#file|urlescape#">#file|escape#</a> '
+naventry = '<a href="#url#log/#rev#">#label|escape#</a> '
+navshortentry = '<a href="#url#shortlog/#rev#">#label|escape#</a> '
+filedifflink = '<a href="#url#diff/#node|short#/#file|urlescape#">#file|escape#</a> '
+filenodelink = '<a href="#url#file/#node|short#/#file|urlescape#">#file|escape#</a> '
 fileellipses = '...'
 changelogentry = changelogentry.tmpl
 searchentry = changelogentry.tmpl
 changeset = changeset.tmpl
 manifest = manifest.tmpl
-manifestdirentry = '<tr class="parity#parity#"><td><tt>drwxr-xr-x</tt>&nbsp;<td><a href="?mf=#node|short#;path=#path|urlescape#">#basename|escape#/</a>'
-manifestfileentry = '<tr class="parity#parity#"><td><tt>#permissions|permissions#</tt>&nbsp;<td><a href="?f=#node|short#;file=#file|urlescape#">#basename|escape#</a>'
+manifestdirentry = '<tr class="parity#parity#"><td><tt>drwxr-xr-x</tt>&nbsp;<td><a href="#url#file/#node|short##path|urlescape#">#basename|escape#/</a>'
+manifestfileentry = '<tr class="parity#parity#"><td><tt>#permissions|permissions#</tt>&nbsp;<td><a href="#url#file/#node|short#/#file|urlescape#">#basename|escape#</a>'
 filerevision = filerevision.tmpl
 fileannotate = fileannotate.tmpl
 filediff = filediff.tmpl
 filelog = filelog.tmpl
 fileline = '<div class="parity#parity#"><span class="lineno">#linenumber#</span>#line|escape#</div>'
 filelogentry = filelogentry.tmpl
-annotateline = '<tr class="parity#parity#"><td class="annotate"><a href="?fa=#node|short#;file=#file|urlescape#">#author|obfuscate#@#rev#</a></td><td><pre>#line|escape#</pre></td></tr>'
+annotateline = '<tr class="parity#parity#"><td class="annotate"><a href="#url#annotate/#node|short#/#file|urlescape#">#author|obfuscate#@#rev#</a></td><td><pre>#line|escape#</pre></td></tr>'
 difflineplus = '<span class="plusline">#line|escape#</span>'
 difflineminus = '<span class="minusline">#line|escape#</span>'
 difflineat = '<span class="atline">#line|escape#</span>'
 diffline = '#line|escape#'
-changelogparent = '<tr><th class="parent">parent #rev#:</th><td class="parent"><a href="?cs=#node|short#">#node|short#</a></td></tr>'
-changesetparent = '<tr><th class="parent">parent #rev#:</th><td class="parent"><a href="?cs=#node|short#">#node|short#</a></td></tr>'
-filerevparent = '<tr><td class="metatag">parent:</td><td><a href="?f=#node|short#;file=#file|urlescape#">#node|short#</a></td></tr>'
-filerename = '<tr><td class="metatag">parent:</td><td><a href="?f=#node|short#;file=#file|urlescape#">#file|escape#@#node|short#</a></td></tr>'
-filelogrename = '<tr><th>base:</th><td><a href="?f=#node|short#;file=#file|urlescape#">#file|escape#@#node|short#</a></td></tr>'
-fileannotateparent = '<tr><td class="metatag">parent:</td><td><a href="?fa=#node|short#;file=#file|urlescape#">#node|short#</a></td></tr>'
-changesetchild = '<tr><th class="child">child #rev#:</th><td class="child"><a href="?cs=#node|short#">#node|short#</a></td></tr>'
-changelogchild = '<tr><th class="child">child #rev#:</th><td class="child"><a href="?cs=#node|short#">#node|short#</a></td></tr>'
-filerevchild = '<tr><td class="metatag">child:</td><td><a href="?f=#node|short#;file=#file|urlescape#">#node|short#</a></td></tr>'
-fileannotatechild = '<tr><td class="metatag">child:</td><td><a href="?fa=#node|short#;file=#file|urlescape#">#node|short#</a></td></tr>'
+changelogparent = '<tr><th class="parent">parent #rev#:</th><td class="parent"><a href="#url#rev/#node|short#">#node|short#</a></td></tr>'
+changesetparent = '<tr><th class="parent">parent #rev#:</th><td class="parent"><a href="#url#rev/#node|short#">#node|short#</a></td></tr>'
+filerevparent = '<tr><td class="metatag">parent:</td><td><a href="#url#file/#node|short#/#file|urlescape#">#node|short#</a></td></tr>'
+filerename = '<tr><td class="metatag">parent:</td><td><a href="#url#file/#node|short#/#file|urlescape#">#file|escape#@#node|short#</a></td></tr>'
+filelogrename = '<tr><th>base:</th><td><a href="#url#file/#node|short#/#file|urlescape#">#file|escape#@#node|short#</a></td></tr>'
+fileannotateparent = '<tr><td class="metatag">parent:</td><td><a href="#url#annotate/#node|short#/#file|urlescape#">#node|short#</a></td></tr>'
+changesetchild = '<tr><th class="child">child #rev#:</th><td class="child"><a href="#url#rev/#node|short#">#node|short#</a></td></tr>'
+changelogchild = '<tr><th class="child">child #rev#:</th><td class="child"><a href="#url#rev/#node|short#">#node|short#</a></td></tr>'
+filerevchild = '<tr><td class="metatag">child:</td><td><a href="#url#file/#node|short#/#file|urlescape#">#node|short#</a></td></tr>'
+fileannotatechild = '<tr><td class="metatag">child:</td><td><a href="#url#annotate/#node|short#/#file|urlescape#">#node|short#</a></td></tr>'
 tags = tags.tmpl
-tagentry = '<li class="tagEntry parity#parity#"><tt class="node">#node#</tt> <a href="?cs=#node|short#">#tag|escape#</a></li>'
+tagentry = '<li class="tagEntry parity#parity#"><tt class="node">#node#</tt> <a href="#url#rev/#node|short#">#tag|escape#</a></li>'
 diffblock = '<pre class="parity#parity#">#lines#</pre>'
 changelogtag = '<tr><th class="tag">tag:</th><td class="tag">#tag|escape#</td></tr>'
 changesettag = '<tr><th class="tag">tag:</th><td class="tag">#tag|escape#</td></tr>'
-filediffparent = '<tr><th class="parent">parent #rev#:</th><td class="parent"><a href="?cs=#node|short#">#node|short#</a></td></tr>'
-filelogparent = '<tr><th>parent #rev#:</th><td><a href="?f=#node|short#;file=#file|urlescape#">#node|short#</a></td></tr>'
-filediffchild = '<tr><th class="child">child #rev#:</th><td class="child"><a href="?cs=#node|short#">#node|short#</a></td></tr>'
-filelogchild = '<tr><th>child #rev#:</th><td><a href="?f=#node|short#;file=#file|urlescape#">#node|short#</a></td></tr>'
-indexentry = '<tr class="parity#parity#"><td><a href="#url#">#name|escape#</a></td><td>#description#</td><td>#contact|obfuscate#</td><td class="age">#lastchange|age# ago</td><td class="indexlinks"><a href="#url#?cl=tip;style=rss">RSS</a> #archives%archiveentry#</td></tr>'
+filediffparent = '<tr><th class="parent">parent #rev#:</th><td class="parent"><a href="#url#rev/#node|short#">#node|short#</a></td></tr>'
+filelogparent = '<tr><th>parent #rev#:</th><td><a href="#url#file/#node|short#/#file|urlescape#">#node|short#</a></td></tr>'
+filediffchild = '<tr><th class="child">child #rev#:</th><td class="child"><a href="#url#rev/#node|short#">#node|short#</a></td></tr>'
+filelogchild = '<tr><th>child #rev#:</th><td><a href="#url#file/#node|short#/#file|urlescape#">#node|short#</a></td></tr>'
+indexentry = '<tr class="parity#parity#"><td><a href="#url#">#name|escape#</a></td><td>#description#</td><td>#contact|obfuscate#</td><td class="age">#lastchange|age# ago</td><td class="indexlinks"><a href="#url#rss-log">RSS</a> #archives%archiveentry#</td></tr>'
 index = index.tmpl
-archiveentry = '<a href="#url#?ca=#node|short#;type=#type|urlescape#">#type|escape#</a> '
+archiveentry = '<a href="#url#archive/#node|short##extension|urlescape#">#type|escape#</a> '
 notfound = notfound.tmpl
 error = error.tmpl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/map-old	Thu Oct 05 10:15:22 2006 +0200
@@ -0,0 +1,53 @@
+default = 'changelog'
+header = old/header.tmpl
+footer = footer.tmpl
+search = old/search.tmpl
+changelog = old/changelog.tmpl
+shortlog = old/shortlog.tmpl
+shortlogentry = old/shortlogentry.tmpl
+naventry = '<a href="?cl=#rev#">#label|escape#</a> '
+navshortentry = '<a href="?sl=#rev#">#label|escape#</a> '
+filedifflink = '<a href="?fd=#node|short#;file=#file|urlescape#">#file|escape#</a> '
+filenodelink = '<a href="?f=#node|short#;file=#file|urlescape#">#file|escape#</a> '
+fileellipses = '...'
+changelogentry = old/changelogentry.tmpl
+searchentry = old/changelogentry.tmpl
+changeset = old/changeset.tmpl
+manifest = old/manifest.tmpl
+manifestdirentry = '<tr class="parity#parity#"><td><tt>drwxr-xr-x</tt>&nbsp;<td><a href="?mf=#node|short#;path=#path|urlescape#">#basename|escape#/</a>'
+manifestfileentry = '<tr class="parity#parity#"><td><tt>#permissions|permissions#</tt>&nbsp;<td><a href="?f=#node|short#;file=#file|urlescape#">#basename|escape#</a>'
+filerevision = old/filerevision.tmpl
+fileannotate = old/fileannotate.tmpl
+filediff = old/filediff.tmpl
+filelog = old/filelog.tmpl
+fileline = '<div class="parity#parity#"><span class="lineno">#linenumber#</span>#line|escape#</div>'
+filelogentry = old/filelogentry.tmpl
+annotateline = '<tr class="parity#parity#"><td class="annotate"><a href="?fa=#node|short#;file=#file|urlescape#">#author|obfuscate#@#rev#</a></td><td><pre>#line|escape#</pre></td></tr>'
+difflineplus = '<span class="plusline">#line|escape#</span>'
+difflineminus = '<span class="minusline">#line|escape#</span>'
+difflineat = '<span class="atline">#line|escape#</span>'
+diffline = '#line|escape#'
+changelogparent = '<tr><th class="parent">parent #rev#:</th><td class="parent"><a href="?cs=#node|short#">#node|short#</a></td></tr>'
+changesetparent = '<tr><th class="parent">parent #rev#:</th><td class="parent"><a href="?cs=#node|short#">#node|short#</a></td></tr>'
+filerevparent = '<tr><td class="metatag">parent:</td><td><a href="?f=#node|short#;file=#file|urlescape#">#node|short#</a></td></tr>'
+filerename = '<tr><td class="metatag">parent:</td><td><a href="?f=#node|short#;file=#file|urlescape#">#file|escape#@#node|short#</a></td></tr>'
+filelogrename = '<tr><th>base:</th><td><a href="?f=#node|short#;file=#file|urlescape#">#file|escape#@#node|short#</a></td></tr>'
+fileannotateparent = '<tr><td class="metatag">parent:</td><td><a href="?fa=#node|short#;file=#file|urlescape#">#node|short#</a></td></tr>'
+changesetchild = '<tr><th class="child">child #rev#:</th><td class="child"><a href="?cs=#node|short#">#node|short#</a></td></tr>'
+changelogchild = '<tr><th class="child">child #rev#:</th><td class="child"><a href="?cs=#node|short#">#node|short#</a></td></tr>'
+filerevchild = '<tr><td class="metatag">child:</td><td><a href="?f=#node|short#;file=#file|urlescape#">#node|short#</a></td></tr>'
+fileannotatechild = '<tr><td class="metatag">child:</td><td><a href="?fa=#node|short#;file=#file|urlescape#">#node|short#</a></td></tr>'
+tags = tags.tmpl
+tagentry = '<li class="tagEntry parity#parity#"><tt class="node">#node#</tt> <a href="?cs=#node|short#">#tag|escape#</a></li>'
+diffblock = '<pre class="parity#parity#">#lines#</pre>'
+changelogtag = '<tr><th class="tag">tag:</th><td class="tag">#tag|escape#</td></tr>'
+changesettag = '<tr><th class="tag">tag:</th><td class="tag">#tag|escape#</td></tr>'
+filediffparent = '<tr><th class="parent">parent #rev#:</th><td class="parent"><a href="?cs=#node|short#">#node|short#</a></td></tr>'
+filelogparent = '<tr><th>parent #rev#:</th><td><a href="?f=#node|short#;file=#file|urlescape#">#node|short#</a></td></tr>'
+filediffchild = '<tr><th class="child">child #rev#:</th><td class="child"><a href="?cs=#node|short#">#node|short#</a></td></tr>'
+filelogchild = '<tr><th>child #rev#:</th><td><a href="?f=#node|short#;file=#file|urlescape#">#node|short#</a></td></tr>'
+indexentry = '<tr class="parity#parity#"><td><a href="#url#">#name|escape#</a></td><td>#description#</td><td>#contact|obfuscate#</td><td class="age">#lastchange|age# ago</td><td class="indexlinks"><a href="#url#?cl=tip;style=rss">RSS</a> #archives%archiveentry#</td></tr>'
+index = index.tmpl
+archiveentry = '<a href="#url#?ca=#node|short#;type=#type|urlescape#">#type|escape#</a> '
+notfound = notfound.tmpl
+error = error.tmpl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/old/changelog.tmpl	Thu Oct 05 10:15:22 2006 +0200
@@ -0,0 +1,38 @@
+#header#
+<title>#repo|escape#: changelog</title>
+<link rel="alternate" type="application/rss+xml"
+   href="?cmd=changelog;style=rss" title="RSS feed for #repo|escape#">
+</head>
+<body>
+
+<div class="buttons">
+<a href="?sl=#rev#">shortlog</a>
+<a href="?cmd=tags">tags</a>
+<a href="?mf=#node|short#;path=/">manifest</a>
+#archives%archiveentry#
+<a type="application/rss+xml" href="?style=rss">rss</a>
+</div>
+
+<h2>changelog for #repo|escape#</h2>
+
+<form action="#">
+<p>
+<label for="search1">search:</label>
+<input type="hidden" name="cmd" value="changelog">
+<input name="rev" id="search1" type="text" size="30">
+navigate: <small class="navigate">#changenav%naventry#</small>
+</p>
+</form>
+
+#entries%changelogentry#
+
+<form action="#">
+<p>
+<label for="search2">search:</label>
+<input type="hidden" name="cmd" value="changelog">
+<input name="rev" id="search2" type="text" size="30">
+navigate: <small class="navigate">#changenav%naventry#</small>
+</p>
+</form>
+
+#footer#
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/old/changelogentry.tmpl	Thu Oct 05 10:15:22 2006 +0200
@@ -0,0 +1,25 @@
+<table class="logEntry parity#parity#">
+ <tr>
+  <th class="age">#date|age# ago:</th>
+  <th class="firstline">#desc|strip|firstline|escape#</th>
+ </tr>
+ <tr>
+  <th class="revision">changeset #rev#:</th>
+  <td class="node"><a href="?cs=#node|short#">#node|short#</a></td>
+ </tr>
+ #parent%changelogparent#
+ #child%changelogchild#
+ #changelogtag#
+ <tr>
+  <th class="author">author:</th>
+  <td class="author">#author|obfuscate#</td>
+ </tr>
+ <tr>
+  <th class="date">date:</th>
+  <td class="date">#date|date#</td>
+ </tr>
+ <tr>
+  <th class="files"><a href="?mf=#node|short#;path=/">files</a>:</th>
+  <td class="files">#files#</td>
+ </tr>
+</table>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/old/changeset.tmpl	Thu Oct 05 10:15:22 2006 +0200
@@ -0,0 +1,47 @@
+#header#
+<title>#repo|escape#: changeset #node|short#</title>
+</head>
+<body>
+
+<div class="buttons">
+<a href="?cl=#rev#">changelog</a>
+<a href="?sl=#rev#">shortlog</a>
+<a href="?cmd=tags">tags</a>
+<a href="?mf=#node|short#;path=/">manifest</a>
+<a href="?cs=#node|short#;style=raw">raw</a>
+#archives%archiveentry#
+</div>
+
+<h2>changeset: #desc|strip|escape|firstline#</h2>
+
+<table id="changesetEntry">
+<tr>
+ <th class="changeset">changeset #rev#:</th>
+ <td class="changeset"><a href="?cs=#node|short#">#node|short#</a></td>
+</tr>
+#parent%changesetparent#
+#child%changesetchild#
+#changesettag#
+<tr>
+ <th class="author">author:</th>
+ <td class="author">#author|obfuscate#</td>
+</tr>
+<tr>
+ <th class="date">date:</th>
+ <td class="date">#date|date# (#date|age# ago)</td></tr>
+<tr>
+ <th class="files">files:</th>
+ <td class="files">#files#</td></tr>
+<tr>
+ <th class="description">description:</th>
+ <td class="description">#desc|strip|escape|addbreaks#</td>
+</tr>
+</table>
+
+<div id="changesetDiff">
+#diff#
+</div>
+
+#footer#
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/old/fileannotate.tmpl	Thu Oct 05 10:15:22 2006 +0200
@@ -0,0 +1,43 @@
+#header#
+<title>#repo|escape#: #file|escape# annotate</title>
+</head>
+<body>
+
+<div class="buttons">
+<a href="?cl=#rev#">changelog</a>
+<a href="?sl=#rev#">shortlog</a>
+<a href="?tags=">tags</a>
+<a href="?cs=#node|short#">changeset</a>
+<a href="?mf=#node|short#;path=#path|urlescape#">manifest</a>
+<a href="?f=#node|short#;file=#file|urlescape#">file</a>
+<a href="?fl=#node|short#;file=#file|urlescape#">revisions</a>
+<a href="?fa=#node|short#;file=#file|urlescape#;style=raw">raw</a>
+</div>
+
+<h2>Annotate #file|escape#</h2>
+
+<table>
+<tr>
+ <td class="metatag">changeset #rev#:</td>
+ <td><a href="?cs=#node|short#">#node|short#</a></td></tr>
+#rename%filerename#
+#parent%fileannotateparent#
+#child%fileannotatechild#
+<tr>
+ <td class="metatag">author:</td>
+ <td>#author|obfuscate#</td></tr>
+<tr>
+ <td class="metatag">date:</td>
+ <td>#date|date# (#date|age# ago)</td></tr>
+<tr>
+ <td class="metatag">permissions:</td>
+ <td>#permissions|permissions#</td></tr>
+</table>
+
+<br/>
+
+<table cellspacing="0" cellpadding="0">
+#annotate%annotateline#
+</table>
+
+#footer#
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/old/filediff.tmpl	Thu Oct 05 10:15:22 2006 +0200
@@ -0,0 +1,34 @@
+#header#
+<title>#repo|escape#: #file|escape# diff</title>
+</head>
+<body>
+
+<div class="buttons">
+<a href="?cl=#rev#">changelog</a>
+<a href="?sl=#rev#">shortlog</a>
+<a href="?tags=">tags</a>
+<a href="?cs=#node|short#">changeset</a>
+<a href="?f=#node|short#;file=#file|urlescape#">file</a>
+<a href="?fl=#node|short#;file=#file|urlescape#">revisions</a>
+<a href="?fa=#node|short#;file=#file|urlescape#">annotate</a>
+<a href="?fd=#node|short#;file=#file|urlescape#;style=raw">raw</a>
+</div>
+
+<h2>#file|escape#</h2>
+
+<table id="filediffEntry">
+<tr>
+ <th class="revision">revision #rev#:</th>
+ <td class="revision"><a href="?cs=#node|short#">#node|short#</a></td>
+</tr>
+#parent%filediffparent#
+#child%filediffchild#
+</table>
+
+<div id="fileDiff">
+#diff#
+</div>
+
+#footer#
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/old/filelog.tmpl	Thu Oct 05 10:15:22 2006 +0200
@@ -0,0 +1,22 @@
+#header#
+<title>#repo|escape#: #file|escape# history</title>
+<link rel="alternate" type="application/rss+xml"
+   href="?fl=0;file=#file|urlescape#;style=rss" title="RSS feed for #repo|escape#:#file#">
+</head>
+</head>
+<body>
+
+<div class="buttons">
+<a href="?cl=tip">changelog</a>
+<a href="?sl=tip">shortlog</a>
+<a href="?tags=">tags</a>
+<a href="?f=#node|short#;file=#file|urlescape#">file</a>
+<a href="?fa=#node|short#;file=#file|urlescape#">annotate</a>
+<a type="application/rss+xml" href="?fl=0;file=#file|urlescape#;style=rss">rss</a>
+</div>
+
+<h2>#file|escape# revision history</h2>
+
+#entries%filelogentry#
+
+#footer#
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/old/filelogentry.tmpl	Thu Oct 05 10:15:22 2006 +0200
@@ -0,0 +1,25 @@
+<table class="logEntry parity#parity#">
+ <tr>
+  <th class="age">#date|age# ago:</th>
+  <th class="firstline"><a href="?cs=#node|short#">#desc|strip|firstline|escape#</a></th>
+ </tr>
+ <tr>
+  <th class="revision">revision #filerev#:</td>
+  <td class="node">
+   <a href="?f=#node|short#;file=#file|urlescape#">#node|short#</a>
+   <a href="?fd=#node|short#;file=#file|urlescape#">(diff)</a>
+   <a href="?fa=#node|short#;file=#file|urlescape#">(annotate)</a>
+  </td>
+ </tr>
+ #rename%filelogrename#
+ <tr>
+  <th class="author">author:</th>
+  <td class="author">#author|obfuscate#</td>
+ </tr>
+ <tr>
+  <th class="date">date:</th>
+  <td class="date">#date|date#</td>
+ </tr>
+</table>
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/old/filerevision.tmpl	Thu Oct 05 10:15:22 2006 +0200
@@ -0,0 +1,41 @@
+#header#
+<title>#repo|escape#:#file|escape#</title>
+</head>
+<body>
+
+<div class="buttons">
+<a href="?cl=#rev#">changelog</a>
+<a href="?sl=#rev#">shortlog</a>
+<a href="?tags=">tags</a>
+<a href="?cs=#node|short#">changeset</a>
+<a href="?mf=#node|short#;path=#path|urlescape#">manifest</a>
+<a href="?fl=#node|short#;file=#file|urlescape#">revisions</a>
+<a href="?fa=#node|short#;file=#file|urlescape#">annotate</a>
+<a href="?f=#node|short#;file=#file|urlescape#;style=raw">raw</a>
+</div>
+
+<h2>#file|escape#</h2>
+
+<table>
+<tr>
+ <td class="metatag">changeset #rev#:</td>
+ <td><a href="?cs=#node|short#">#node|short#</a></td></tr>
+#rename%filerename#
+#parent%filerevparent#
+#child%filerevchild#
+<tr>
+ <td class="metatag">author:</td>
+ <td>#author|obfuscate#</td></tr>
+<tr>
+ <td class="metatag">date:</td>
+ <td>#date|date# (#date|age# ago)</td></tr>
+<tr>
+ <td class="metatag">permissions:</td>
+ <td>#permissions|permissions#</td></tr>
+</table>
+
+<pre>
+#text%fileline#
+</pre>
+
+#footer#
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/old/header.tmpl	Thu Oct 05 10:15:22 2006 +0200
@@ -0,0 +1,8 @@
+Content-type: text/html
+
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<link rel="icon" href="?static=hgicon.png" type="image/png">
+<meta name="robots" content="index, nofollow" />
+<link rel="stylesheet" href="?static=style.css" type="text/css" />
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/old/manifest.tmpl	Thu Oct 05 10:15:22 2006 +0200
@@ -0,0 +1,23 @@
+#header#
+<title>#repo|escape#: manifest for changeset #node|short#</title>
+</head>
+<body>
+
+<div class="buttons">
+<a href="?cl=#rev#">changelog</a>
+<a href="?sl=#rev#">shortlog</a>
+<a href="?tags=">tags</a>
+<a href="?cs=#node|short#">changeset</a>
+#archives%archiveentry#
+</div>
+
+<h2>manifest for changeset #node|short#: #path|escape#</h2>
+
+<table cellpadding="0" cellspacing="0">
+<tr class="parity1">
+  <td><tt>drwxr-xr-x</tt>&nbsp;
+  <td><a href="?mf=#node|short#;path=#up|urlescape#">[up]</a>
+#dentries%manifestdirentry#
+#fentries%manifestfileentry#
+</table>
+#footer#
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/old/search.tmpl	Thu Oct 05 10:15:22 2006 +0200
@@ -0,0 +1,33 @@
+#header#
+<title>#repo|escape#: searching for #query|escape#</title>
+</head>
+<body>
+
+<div class="buttons">
+<a href="?cl=tip">changelog</a>
+<a href="?sl=tip">shortlog</a>
+<a href="?tags=">tags</a>
+<a href="?mf=#node|short#;path=/">manifest</a>
+</div>
+
+<h2>searching for #query|escape#</h2>
+
+<form>
+<p>
+search:
+<input type="hidden" name="cmd" value="changelog">
+<input name="rev" type="text" width="30" value="#query|escape#">
+</p>
+</form>
+
+#entries#
+
+<form>
+<p>
+search:
+<input type="hidden" name="cmd" value="changelog">
+<input name="rev" type="text" width="30" value="#query|escape#">
+</p>
+</form>
+
+#footer#
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/old/shortlog.tmpl	Thu Oct 05 10:15:22 2006 +0200
@@ -0,0 +1,38 @@
+#header#
+<title>#repo|escape#: shortlog</title>
+<link rel="alternate" type="application/rss+xml"
+   href="?cmd=changelog;style=rss" title="RSS feed for #repo|escape#">
+</head>
+<body>
+
+<div class="buttons">
+<a href="?cl=#rev#">changelog</a>
+<a href="?cmd=tags">tags</a>
+<a href="?mf=#node|short#;path=/">manifest</a>
+#archives%archiveentry#
+<a type="application/rss+xml" href="?style=rss">rss</a>
+</div>
+
+<h2>shortlog for #repo|escape#</h2>
+
+<form action="#">
+<p>
+<label for="search1">search:</label>
+<input type="hidden" name="cmd" value="changelog">
+<input name="rev" id="search1" type="text" size="30">
+navigate: <small class="navigate">#changenav%navshortentry#</small>
+</p>
+</form>
+
+#entries%shortlogentry#
+
+<form action="#">
+<p>
+<label for="search2">search:</label>
+<input type="hidden" name="cmd" value="changelog">
+<input name="rev" id="search2" type="text" size="30">
+navigate: <small class="navigate">#changenav%navshortentry#</small>
+</p>
+</form>
+
+#footer#
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/old/shortlogentry.tmpl	Thu Oct 05 10:15:22 2006 +0200
@@ -0,0 +1,7 @@
+<table class="slogEntry parity#parity#">
+ <tr>
+  <td class="age">#date|age#</td>
+  <td class="author">#author|obfuscate#</td>
+  <td class="node"><a href="?cs=#node|short#">#desc|strip|firstline|escape#</a></td>
+ </tr>
+</table>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/old/tags.tmpl	Thu Oct 05 10:15:22 2006 +0200
@@ -0,0 +1,21 @@
+#header#
+<title>#repo|escape#: tags</title>
+<link rel="alternate" type="application/rss+xml"
+   href="?cmd=tags;style=rss" title="RSS feed for #repo|escape#: tags">
+</head>
+<body>
+
+<div class="buttons">
+<a href="?cl=tip">changelog</a>
+<a href="?sl=tip">shortlog</a>
+<a href="?mf=#node|short#;path=/">manifest</a>
+<a type="application/rss+xml" href="?cmd=tags;style=rss">rss</a>
+</div>
+
+<h2>tags:</h2>
+
+<ul id="tagEntries">
+#entries%tagentry#
+</ul>
+
+#footer#
--- a/templates/search.tmpl	Thu Oct 05 10:07:40 2006 +0200
+++ b/templates/search.tmpl	Thu Oct 05 10:15:22 2006 +0200
@@ -4,10 +4,10 @@
 <body>
 
 <div class="buttons">
-<a href="?cl=tip">changelog</a>
-<a href="?sl=tip">shortlog</a>
-<a href="?tags=">tags</a>
-<a href="?mf=#node|short#;path=/">manifest</a>
+<a href="#url#log">changelog</a>
+<a href="#url#shortlog">shortlog</a>
+<a href="#url#tags">tags</a>
+<a href="#url#file/#node|short#">manifest</a>
 </div>
 
 <h2>searching for #query|escape#</h2>
@@ -15,7 +15,6 @@
 <form>
 <p>
 search:
-<input type="hidden" name="cmd" value="changelog">
 <input name="rev" type="text" width="30" value="#query|escape#">
 </p>
 </form>
@@ -25,7 +24,6 @@
 <form>
 <p>
 search:
-<input type="hidden" name="cmd" value="changelog">
 <input name="rev" type="text" width="30" value="#query|escape#">
 </p>
 </form>
--- a/templates/shortlog.tmpl	Thu Oct 05 10:07:40 2006 +0200
+++ b/templates/shortlog.tmpl	Thu Oct 05 10:15:22 2006 +0200
@@ -1,24 +1,23 @@
 #header#
 <title>#repo|escape#: shortlog</title>
 <link rel="alternate" type="application/rss+xml"
-   href="?cmd=changelog;style=rss" title="RSS feed for #repo|escape#">
+   href="#url#rss-log" title="RSS feed for #repo|escape#">
 </head>
 <body>
 
 <div class="buttons">
-<a href="?cl=#rev#">changelog</a>
-<a href="?cmd=tags">tags</a>
-<a href="?mf=#node|short#;path=/">manifest</a>
+<a href="#url#log/#rev#">changelog</a>
+<a href="#url#tags">tags</a>
+<a href="#url#file/#node|short#/">manifest</a>
 #archives%archiveentry#
-<a type="application/rss+xml" href="?style=rss">rss</a>
+<a type="application/rss+xml" href="#url#rss-log">rss</a>
 </div>
 
 <h2>shortlog for #repo|escape#</h2>
 
-<form action="#">
+<form action="#url#log">
 <p>
 <label for="search1">search:</label>
-<input type="hidden" name="cmd" value="changelog">
 <input name="rev" id="search1" type="text" size="30">
 navigate: <small class="navigate">#changenav%navshortentry#</small>
 </p>
@@ -26,10 +25,9 @@
 
 #entries%shortlogentry#
 
-<form action="#">
+<form action="#url#log">
 <p>
 <label for="search2">search:</label>
-<input type="hidden" name="cmd" value="changelog">
 <input name="rev" id="search2" type="text" size="30">
 navigate: <small class="navigate">#changenav%navshortentry#</small>
 </p>
--- a/templates/shortlogentry.tmpl	Thu Oct 05 10:07:40 2006 +0200
+++ b/templates/shortlogentry.tmpl	Thu Oct 05 10:15:22 2006 +0200
@@ -2,6 +2,6 @@
  <tr>
   <td class="age">#date|age#</td>
   <td class="author">#author|obfuscate#</td>
-  <td class="node"><a href="?cs=#node|short#">#desc|strip|firstline|escape#</a></td>
+  <td class="node"><a href="#url#rev/#node|short#">#desc|strip|firstline|escape#</a></td>
  </tr>
 </table>
--- a/templates/tags.tmpl	Thu Oct 05 10:07:40 2006 +0200
+++ b/templates/tags.tmpl	Thu Oct 05 10:15:22 2006 +0200
@@ -1,15 +1,15 @@
 #header#
 <title>#repo|escape#: tags</title>
 <link rel="alternate" type="application/rss+xml"
-   href="?cmd=tags;style=rss" title="RSS feed for #repo|escape#: tags">
+   href="#url#rss-tags" title="RSS feed for #repo|escape#: tags">
 </head>
 <body>
 
 <div class="buttons">
-<a href="?cl=tip">changelog</a>
-<a href="?sl=tip">shortlog</a>
-<a href="?mf=#node|short#;path=/">manifest</a>
-<a type="application/rss+xml" href="?cmd=tags;style=rss">rss</a>
+<a href="#url#log">changelog</a>
+<a href="#url#shortlog">shortlog</a>
+<a href="#url#file/#node|short#/">manifest</a>
+<a type="application/rss+xml" href="#url#rss-tags">rss</a>
 </div>
 
 <h2>tags:</h2>