changeset 3280:45b639607e52

Merge with crew
author Matt Mackall <mpm@selenic.com>
date Fri, 06 Oct 2006 17:14:18 -0500
parents ae85272b59a4 (current diff) 4b2d3c8a6195 (diff)
children f49c90b46897
files templates/map-gitweb templates/map-raw templates/map-rss
diffstat 67 files changed, 1178 insertions(+), 466 deletions(-) [+]
line wrap: on
line diff
--- a/doc/Makefile	Fri Oct 06 16:55:11 2006 -0500
+++ b/doc/Makefile	Fri Oct 06 17:14:18 2006 -0500
@@ -28,7 +28,7 @@
 
 install: man
 	for i in $(MAN) ; do \
-	  subdir=`echo $$i | sed -n 's/.\+\.\([0-9]\)$$/man\1/p'` ; \
+	  subdir=`echo $$i | sed -n 's/..*\.\([0-9]\)$$/man\1/p'` ; \
 	  mkdir -p $(MANDIR)/$$subdir ; \
 	  $(INSTALL) $$i $(MANDIR)/$$subdir ; \
 	done
--- a/doc/hg.1.txt	Fri Oct 06 16:55:11 2006 -0500
+++ b/doc/hg.1.txt	Fri Oct 06 17:14:18 2006 -0500
@@ -127,6 +127,42 @@
     A range acts as a closed interval.  This means that a range of 3:5
     gives 3, 4 and 5.  Similarly, a range of 4:2 gives 4, 3, and 2.
 
+DATE FORMATS
+------------
+
+    Some commands (backout, commit, tag) allow the user to specify a date.
+    Possible formats for dates are:
+
+YYYY-mm-dd \HH:MM[:SS] [(+|-)NNNN]::
+    This is a subset of ISO 8601, allowing just the recommended notations
+    for date and time. The last part represents the timezone; if omitted,
+    local time is assumed. Examples:
+
+    "2005-08-22 03:27 -0700"
+
+    "2006-04-19 21:39:51"
+
+aaa bbb dd HH:MM:SS YYYY [(+|-)NNNN]::
+    This is the date format used by the C library. Here, aaa stands for
+    abbreviated weekday name and bbb for abbreviated month name. The last
+    part represents the timezone; if omitted, local time is assumed.
+    Examples:
+
+    "Mon Aug 22 03:27:00 2005 -0700"
+
+    "Wed Apr 19 21:39:51 2006"
+
+unixtime offset::
+    This is the internal representation format for dates. unixtime is
+    the number of seconds since the epoch (1970-01-01 00:00 UTC). offset
+    is the offset of the local timezone, in seconds west of UTC (negative
+    if the timezone is east of UTC).
+    Examples:
+
+    "1124706420 25200" (2005-08-22 03:27:00 -0700)
+
+    "1145475591 -7200" (2006-04-19 21:39:51 +0200)
+
 ENVIRONMENT VARIABLES
 ---------------------
 
--- a/hgext/patchbomb.py	Fri Oct 06 16:55:11 2006 -0500
+++ b/hgext/patchbomb.py	Fri Oct 06 17:14:18 2006 -0500
@@ -65,7 +65,7 @@
 
 from mercurial.demandload import *
 demandload(globals(), '''email.MIMEMultipart email.MIMEText email.Utils
-                         mercurial:commands,hg,mail,ui,patch
+                         mercurial:cmdutil,commands,hg,mail,ui,patch
                          os errno popen2 socket sys tempfile time''')
 from mercurial.i18n import gettext as _
 from mercurial.node import *
@@ -146,10 +146,10 @@
             if patchname:
                 patchname = patchname[0]
             elif total > 1:
-                patchname = commands.make_filename(repo, '%b-%n.patch',
+                patchname = cmdutil.make_filename(repo, '%b-%n.patch',
                                                    binnode, idx, total)
             else:
-                patchname = commands.make_filename(repo, '%b.patch', binnode)
+                patchname = cmdutil.make_filename(repo, '%b.patch', binnode)
             p['Content-Disposition'] = 'inline; filename=' + patchname
             msg.attach(p)
         else:
--- a/mercurial/commands.py	Fri Oct 06 16:55:11 2006 -0500
+++ b/mercurial/commands.py	Fri Oct 06 17:14:18 2006 -0500
@@ -1134,7 +1134,7 @@
         error = _(".hg/dirstate inconsistent with current parent's manifest")
         raise util.Abort(error)
 
-def debugconfig(ui, repo, *values):
+def showconfig(ui, repo, *values):
     """show combined config settings from all hgrc files
 
     With no args, print names and values of all config items.
@@ -2834,7 +2834,6 @@
          [('r', 'rev', '', _('revision to rebuild to'))],
          _('debugrebuildstate [-r REV] [REV]')),
     "debugcheckstate": (debugcheckstate, [], _('debugcheckstate')),
-    "debugconfig": (debugconfig, [], _('debugconfig [NAME]...')),
     "debugsetparents": (debugsetparents, [], _('debugsetparents REV1 [REV2]')),
     "debugstate": (debugstate, [], _('debugstate')),
     "debugdata": (debugdata, [], _('debugdata FILE REV')),
@@ -3017,6 +3016,7 @@
          _('hg revert [-r REV] [NAME]...')),
     "rollback": (rollback, [], _('hg rollback')),
     "root": (root, [], _('hg root')),
+    "showconfig|debugconfig": (showconfig, [], _('showconfig [NAME]...')),
     "^serve":
         (serve,
          [('A', 'accesslog', '', _('name of access log file to write to')),
@@ -3086,7 +3086,7 @@
 
 norepo = ("clone init version help debugancestor debugcomplete debugdata"
           " debugindex debugindexdot")
-optionalrepo = ("paths serve debugconfig")
+optionalrepo = ("paths serve showconfig")
 
 def findpossible(ui, cmd):
     """
@@ -3283,6 +3283,8 @@
 
             path = u.expandpath(options["repository"]) or ""
             repo = path and hg.repository(u, path=path) or None
+            if repo and not repo.local():
+                raise util.Abort(_("repository '%s' is not local") % path)
 
             if options['help']:
                 return help_(u, cmd, options['version'])
--- a/mercurial/hgweb/common.py	Fri Oct 06 16:55:11 2006 -0500
+++ b/mercurial/hgweb/common.py	Fri Oct 06 17:14:18 2006 -0500
@@ -42,3 +42,20 @@
     except (TypeError, OSError):
         # illegal fname or unreadable file
         return ""
+
+def style_map(templatepath, style):
+    """Return path to mapfile for a given style.
+
+    Searches mapfile in the following locations:
+    1. templatepath/style/map
+    2. templatepath/map-style
+    3. templatepath/map
+    """
+    locations = style and [os.path.join(style, "map"), "map-"+style] or []
+    locations.append("map")
+    for location in locations:
+        mapfile = os.path.join(templatepath, location)
+        if os.path.isfile(mapfile):
+            return mapfile
+    raise RuntimeError("No hgweb templates found in %r" % templatepath)
+
--- a/mercurial/hgweb/hgweb_mod.py	Fri Oct 06 16:55:11 2006 -0500
+++ b/mercurial/hgweb/hgweb_mod.py	Fri Oct 06 17:14:18 2006 -0500
@@ -11,9 +11,10 @@
 import mimetypes
 from mercurial.demandload import demandload
 demandload(globals(), "re zlib ConfigParser mimetools cStringIO sys tempfile")
+demandload(globals(), 'urllib')
 demandload(globals(), "mercurial:mdiff,ui,hg,util,archival,streamclone,patch")
 demandload(globals(), "mercurial:templater")
-demandload(globals(), "mercurial.hgweb.common:get_mtime,staticfile")
+demandload(globals(), "mercurial.hgweb.common:get_mtime,staticfile,style_map")
 from mercurial.node import *
 from mercurial.i18n import gettext as _
 
@@ -54,9 +55,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,36 +646,129 @@
                         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]
+
+                root = req.env.get('REQUEST_URI', '').split('?', 1)[0]
+                pi = req.env.get('PATH_INFO', '')
+                if pi:
+                    root = root[:-len(pi)]
+                
+                if req.env.has_key('REPO_NAME'):
+                    base = '/' + req.env['REPO_NAME']
+                else:
+                    base = root
+
+                if pi:
+                    while pi.startswith('//'):
+                        pi = pi[1:]
+                    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 (root + 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_]
+
+        def queryprefix(**map):
+            return req.url[-1] == '?' and ';' or '?'
+
+        def getentries(**map):
+            fields = {}
+            if req.form.has_key('style'):
+                style = req.form['style'][0]
+                if style != self.repo.ui.config('web', 'style', ''):
+                    fields['style'] = style
+
+            if fields:
+                fields = ['%s=%s' % (k, urllib.quote(v))
+                          for k, v in fields.iteritems()]
+                yield '%s%s' % (queryprefix(), ';'.join(fields))
+            else:
+                yield ''
+
         self.refresh()
 
         expand_form(req.form)
+        rewrite_request(req)
 
-        m = os.path.join(self.templatepath, "map")
         style = self.repo.ui.config("web", "style", "")
         if req.form.has_key('style'):
             style = req.form['style'][0]
-        if style:
-            b = os.path.basename("map-" + style)
-            p = os.path.join(self.templatepath, b)
-            if os.path.isfile(p):
-                m = p
+        mapfile = style_map(self.templatepath, style)
 
-        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,
+        self.t = templater.templater(mapfile, templater.common_filters,
+                                     defaults={"url": req.url,
                                                "repo": self.reponame,
                                                "header": header,
                                                "footer": footer,
                                                "rawfileheader": rawfileheader,
+                                               "queryprefix": queryprefix,
+                                               "getentries": getentries
                                                })
 
         if not req.form.has_key('cmd'):
@@ -723,6 +817,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 +877,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	Fri Oct 06 16:55:11 2006 -0500
+++ b/mercurial/hgweb/hgwebdir_mod.py	Fri Oct 06 17:14:18 2006 -0500
@@ -11,7 +11,7 @@
 demandload(globals(), "ConfigParser mimetools cStringIO")
 demandload(globals(), "mercurial:ui,hg,util,templater")
 demandload(globals(), "mercurial.hgweb.hgweb_mod:hgweb")
-demandload(globals(), "mercurial.hgweb.common:get_mtime,staticfile")
+demandload(globals(), "mercurial.hgweb.common:get_mtime,staticfile,style_map")
 from mercurial.i18n import gettext as _
 
 # This is a stopgap
@@ -69,25 +69,20 @@
         def footer(**map):
             yield tmpl("footer", motd=self.motd, **map)
 
-        m = os.path.join(templater.templatepath(), "map")
         style = self.style
         if req.form.has_key('style'):
             style = req.form['style'][0]
-        if style != "":
-            b = os.path.basename("map-" + style)
-            p = os.path.join(templater.templatepath(), b)
-            if os.path.isfile(p):
-                m = p
-
-        tmpl = templater.templater(m, templater.common_filters,
+        mapfile = style_map(templater.templatepath(), style)
+        tmpl = templater.templater(mapfile, templater.common_filters,
                                    defaults={"header": header,
                                              "footer": footer})
 
         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 +96,7 @@
                 get = u.config
 
                 url = ('/'.join([req.env["REQUEST_URI"].split('?')[0], name])
-                       .replace("//", "/"))
+                       .replace("//", "/")) + '/'
 
                 # update time with local timezone
                 try:
@@ -142,9 +137,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	Fri Oct 06 16:55:11 2006 -0500
+++ b/mercurial/hgweb/server.py	Fri Oct 06 17:14:18 2006 -0500
@@ -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/mercurial/sshrepo.py	Fri Oct 06 16:55:11 2006 -0500
+++ b/mercurial/sshrepo.py	Fri Oct 06 17:14:18 2006 -0500
@@ -70,7 +70,7 @@
             lines.append(l)
             max_noise -= 1
         else:
-            raise hg.RepoError(_("no response from remote hg"))
+            raise hg.RepoError(_("no suitable response from remote hg"))
 
         self.capabilities = ()
         lines.reverse()
--- a/mercurial/util.py	Fri Oct 06 16:55:11 2006 -0500
+++ b/mercurial/util.py	Fri Oct 06 17:14:18 2006 -0500
@@ -15,7 +15,7 @@
 from i18n import gettext as _
 from demandload import *
 demandload(globals(), "cStringIO errno getpass popen2 re shutil sys tempfile")
-demandload(globals(), "os threading time")
+demandload(globals(), "os threading time calendar")
 
 # used by parsedate
 defaultdateformats = ('%Y-%m-%d %H:%M:%S', '%Y-%m-%d %H:%M',
@@ -903,14 +903,22 @@
                (string[-5] == '+' or string[-5] == '-') and
                string[-6].isspace())
 
+    # NOTE: unixtime = localunixtime + offset
     if hastimezone(string):
         date, tz = string[:-6], string[-5:]
         tz = int(tz)
         offset = - 3600 * (tz / 100) - 60 * (tz % 100)
     else:
-        date, offset = string, 0
-    when = int(time.mktime(time.strptime(date, format))) + offset
-    return when, offset
+        date, offset = string, None
+    timetuple = time.strptime(date, format)
+    localunixtime = int(calendar.timegm(timetuple))
+    if offset is None:
+        # local timezone
+        unixtime = int(time.mktime(timetuple))
+        offset = unixtime - localunixtime
+    else:
+        unixtime = localunixtime + offset
+    return unixtime, offset
 
 def parsedate(string, formats=None):
     """parse a localized time string and return a (unixtime, offset) tuple.
@@ -929,7 +937,9 @@
             else:
                 break
         else:
-            raise ValueError(_('invalid date: %r') % string)
+            raise ValueError(_('invalid date: %r '
+                               'see hg(1) manual page for details')
+                             % string)
     # validate explicit (probably user-specified) date and
     # time zone offset. values must fit in signed 32 bits for
     # current 32-bit linux runtimes. timezones go from UTC-12
--- a/templates/changelog.tmpl	Fri Oct 06 16:55:11 2006 -0500
+++ b/templates/changelog.tmpl	Fri Oct 06 17:14:18 2006 -0500
@@ -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#{getentries}">shortlog</a>
+<a href="#url#tags{getentries}">tags</a>
+<a href="#url#file/#node|short#{getentries}">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	Fri Oct 06 16:55:11 2006 -0500
+++ b/templates/changelogentry.tmpl	Fri Oct 06 17:14:18 2006 -0500
@@ -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#{getentries}">#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#{getentries}">files</a>:</th>
   <td class="files">#files#</td>
  </tr>
 </table>
--- a/templates/changeset.tmpl	Fri Oct 06 16:55:11 2006 -0500
+++ b/templates/changeset.tmpl	Fri Oct 06 17:14:18 2006 -0500
@@ -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#{getentries}">changelog</a>
+<a href="#url#shortlog/#rev#{getentries}">shortlog</a>
+<a href="#url#tags{getentries}">tags</a>
+<a href="#url#file/#node|short#{getentries}">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#{getentries}">#node|short#</a></td>
 </tr>
 #parent%changesetparent#
 #child%changesetchild#
--- a/templates/fileannotate.tmpl	Fri Oct 06 16:55:11 2006 -0500
+++ b/templates/fileannotate.tmpl	Fri Oct 06 17:14:18 2006 -0500
@@ -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#{getentries}">changelog</a>
+<a href="#url#shortlog/#rev#{getentries}">shortlog</a>
+<a href="#url#tags{getentries}">tags</a>
+<a href="#url#rev/#node|short#{getentries}">changeset</a>
+<a href="#url#file/#node|short##path|urlescape#{getentries}">manifest</a>
+<a href="#url#file/#node|short#/#file|urlescape#{getentries}">file</a>
+<a href="#url#log/#node|short#/#file|urlescape#{getentries}">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#{getentries}">#node|short#</a></td></tr>
 #rename%filerename#
 #parent%fileannotateparent#
 #child%fileannotatechild#
--- a/templates/filediff.tmpl	Fri Oct 06 16:55:11 2006 -0500
+++ b/templates/filediff.tmpl	Fri Oct 06 17:14:18 2006 -0500
@@ -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#{getentries}">changelog</a>
+<a href="#url#shortlog/#rev#{getentries}">shortlog</a>
+<a href="#url#tags{getentries}">tags</a>
+<a href="#url#rev/#node|short#{getentries}">changeset</a>
+<a href="#url#file/#node|short#/#file|urlescape#{getentries}">file</a>
+<a href="#url#log/#node|short#/#file|urlescape#{getentries}">revisions</a>
+<a href="#url#annotate/#node|short#/#file|urlescape#{getentries}">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#{getentries}">#node|short#</a></td>
 </tr>
 #parent%filediffparent#
 #child%filediffchild#
--- a/templates/filelog.tmpl	Fri Oct 06 16:55:11 2006 -0500
+++ b/templates/filelog.tmpl	Fri Oct 06 17:14:18 2006 -0500
@@ -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{getentries}">changelog</a>
+<a href="#url#shortlog{getentries}">shortlog</a>
+<a href="#url#tags{getentries}">tags</a>
+<a href="#url#file/#node|short#/#file|urlescape#{getentries}">file</a>
+<a href="#url#annotate/#node|short#/#file|urlescape#{getentries}">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	Fri Oct 06 16:55:11 2006 -0500
+++ b/templates/filelogentry.tmpl	Fri Oct 06 17:14:18 2006 -0500
@@ -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#{getentries}">#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#{getentries}">#node|short#</a>
+   <a href="#url#diff/#node|short#/#file|urlescape#{getentries}">(diff)</a>
+   <a href="#url#annotate/#node|short#/#file|urlescape#{getentries}">(annotate)</a>
   </td>
  </tr>
  #rename%filelogrename#
--- a/templates/filerevision.tmpl	Fri Oct 06 16:55:11 2006 -0500
+++ b/templates/filerevision.tmpl	Fri Oct 06 17:14:18 2006 -0500
@@ -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#{getentries}">changelog</a>
+<a href="#url#shortlog/#rev#{getentries}">shortlog</a>
+<a href="#url#tags{getentries}">tags</a>
+<a href="#url#rev/#node|short#{getentries}">changeset</a>
+<a href="#url#file/#node|short##path|urlescape#{getentries}">manifest</a>
+<a href="#url#log/#node|short#/#file|urlescape#{getentries}">revisions</a>
+<a href="#url#annotate/#node|short#/#file|urlescape#{getentries}">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#{getentries}">#node|short#</a></td></tr>
 #rename%filerename#
 #parent%filerevparent#
 #child%filerevchild#
--- a/templates/gitweb/changelog.tmpl	Fri Oct 06 16:55:11 2006 -0500
+++ b/templates/gitweb/changelog.tmpl	Fri Oct 06 17:14:18 2006 -0500
@@ -1,26 +1,24 @@
 #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="page_header">
-<a href="http://www.selenic.com/mercurial/" title="Mercurial"><div style="float:right;">Mercurial</div></a><a href="?cmd=summary;style=gitweb">#repo|escape#</a> / changelog
+<a href="http://www.selenic.com/mercurial/" title="Mercurial"><div style="float:right;">Mercurial</div></a><a href="{url}summary{getentries}">#repo|escape#</a> / changelog
 </div>
 
-<form action="#">
+<form action="{url}log">
 <div class="search">
-<input type="hidden" name="repo" value="#repo|escape#"  />
 <input type="hidden" name="style" value="gitweb"  />
-<input type="hidden" name="cmd" value="changelog"  />
 <input type="text" name="rev"  />
 </div>
 </form>
 </div>
 
 <div class="page_nav">
-<a href="?cmd=summary;style=gitweb">summary</a> | <a href="?cmd=shortlog;rev=#rev#;style=gitweb">shortlog</a> | changelog | <a href="?cmd=tags;style=gitweb">tags</a> | <a href="?mf=#node|short#;path=/;style=gitweb">manifest</a>#archives%archiveentry#<br/>
+<a href="{url}summary{getentries}">summary</a> | <a href="{url}shortlog/#rev#{getentries}">shortlog</a> | changelog | <a href="{url}tags{getentries}">tags</a> | <a href="{url}file/#node|short#{getentries}">manifest</a>#archives%archiveentry#<br/>
 <br/>
 #changenav%naventry#<br/>
 </div>
--- a/templates/gitweb/changelogentry.tmpl	Fri Oct 06 16:55:11 2006 -0500
+++ b/templates/gitweb/changelogentry.tmpl	Fri Oct 06 17:14:18 2006 -0500
@@ -1,9 +1,9 @@
 <div>
-<a class="title" href="?cmd=changeset;node=#node#;style=gitweb"><span class="age">#date|age# ago</span>#desc|strip|firstline|escape#</a>
+<a class="title" href="{url}rev/#node|short#{getentries}"><span class="age">#date|age# ago</span>#desc|strip|firstline|escape#</a>
 </div>
 <div class="title_text">
 <div class="log_link">
-<a href="?cmd=changeset;node=#node#;style=gitweb">changeset</a><br/>
+<a href="{url}rev/#node|short#{getentries}">changeset</a><br/>
 </div>
 <i>#author|obfuscate# [#date|rfc822date#] rev #rev#</i><br/>
 </div>
--- a/templates/gitweb/changeset.tmpl	Fri Oct 06 16:55:11 2006 -0500
+++ b/templates/gitweb/changeset.tmpl	Fri Oct 06 17:14:18 2006 -0500
@@ -1,27 +1,27 @@
 #header#
 <title>#repo|escape#: Changeset</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="page_header">
-<a href="http://www.selenic.com/mercurial/" title="Mercurial"><div style="float:right;">Mercurial</div></a><a href="?cmd=summary;style=gitweb">#repo|escape#</a> / changeset
+<a href="http://www.selenic.com/mercurial/" title="Mercurial"><div style="float:right;">Mercurial</div></a><a href="#url#summary{getentries}">#repo|escape#</a> / changeset
 </div>
 
 <div class="page_nav">
-<a href="?cmd=summary;style=gitweb">summary</a> | <a href="?cmd=shortlog;rev=#rev#;style=gitweb">shortlog</a> | <a href="?cmd=changelog;rev=#rev#;style=gitweb">changelog</a> | <a href="?cmd=tags;style=gitweb">tags</a> | <a href="?mf=#node|short#;path=/;style=gitweb">manifest</a> | changeset | <a href="?cmd=changeset;node=#node#;style=raw">raw</a> #archives%archiveentry#<br/>
+<a href="{url}summary{getentries}">summary</a> | <a href="{url}shortlog/#rev#{getentries}">shortlog</a> | <a href="{url}log/#rev#{getentries}">changelog</a> | <a href="{url}tags{getentries}">tags</a> | <a href="{url}file/#node|short#{getentries}">manifest</a> | changeset | <a href="{url}raw-rev/#node|short#">raw</a> #archives%archiveentry#<br/>
 </div>
 
 <div>
-<a class="title" href="?cmd=changeset;node=#node#;style=raw">#desc|strip|escape|firstline#</a>
+<a class="title" href="{url}raw-rev/#node|short#">#desc|strip|escape|firstline#</a>
 </div>
 <div class="title_text">
 <table cellspacing="0">
 <tr><td>author</td><td>#author|obfuscate#</td></tr>
 <tr><td></td><td>#date|date# (#date|age# ago)</td></tr>
 <tr><td>changeset</td><td style="font-family:monospace">#node|short#</td></tr>
-<tr><td>manifest</td><td style="font-family:monospace"><a class="list" href="?mf=#node|short#;path=/;style=gitweb">#node|short#</a></td></tr>
+<tr><td>manifest</td><td style="font-family:monospace"><a class="list" href="{url}file/#node|short#{getentries}">#node|short#</a></td></tr>
 #parent%changesetparent#
 #child%changesetchild#
 #changesettag#
--- a/templates/gitweb/error.tmpl	Fri Oct 06 16:55:11 2006 -0500
+++ b/templates/gitweb/error.tmpl	Fri Oct 06 17:14:18 2006 -0500
@@ -1,16 +1,16 @@
 #header#
 <title>#repo|escape#: Error</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="page_header">
-<a href="http://www.selenic.com/mercurial/" title="Mercurial"><div style="float:right;">Mercurial</div></a><a href="?cmd=summary;style=gitweb">#repo|escape#</a> / error
+<a href="http://www.selenic.com/mercurial/" title="Mercurial"><div style="float:right;">Mercurial</div></a><a href="{url}summary{getentries}">#repo|escape#</a> / error
 </div>
 
 <div class="page_nav">
-<a href="?cmd=summary;style=gitweb">summary</a> | <a href="?cmd=shortlog;style=gitweb">shortlog</a> | <a href="?cmd=changelog;style=gitweb">changelog</a> | <a href="?cmd=tags;style=gitweb">tags</a> | <a href="?mf=#node|short#;path=/;style=gitweb">manifest</a><br/>
+<a href="{url}summary{getentries}">summary</a> | <a href="{url}shortlog{getentries}">shortlog</a> | <a href="{url}log{getentries}">changelog</a> | <a href="{url}tags{getentries}">tags</a> | <a href="{url}file/#node|short#{getentries}">manifest</a><br/>
 </div>
 
 <div>
--- a/templates/gitweb/fileannotate.tmpl	Fri Oct 06 16:55:11 2006 -0500
+++ b/templates/gitweb/fileannotate.tmpl	Fri Oct 06 17:14:18 2006 -0500
@@ -1,16 +1,24 @@
 #header#
 <title>#repo|escape#: Annotate</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="page_header">
-<a href="http://www.selenic.com/mercurial/" title="Mercurial"><div style="float:right;">Mercurial</div></a><a href="?cmd=summary;style=gitweb">#repo|escape#</a> / annotate
+<a href="http://www.selenic.com/mercurial/" title="Mercurial"><div style="float:right;">Mercurial</div></a><a href="{url}summary{getentries}">#repo|escape#</a> / annotate
 </div>
 
 <div class="page_nav">
-<a href="?cmd=summary;style=gitweb">summary</a> | <a href="?cmd=shortlog;style=gitweb">shortlog</a> | <a href="?cmd=changelog;style=gitweb">changelog</a> | <a href="?cmd=tags;style=gitweb">tags</a> | <a href="?mf=#node|short#;path=#path|urlescape#;style=gitweb">manifest</a> | <a href="?cmd=changeset;node=#node#;style=gitweb">changeset</a> | <a href="?cmd=file;file=#file|urlescape#;filenode=#node|short#;style=gitweb">file</a> | <a href="?cmd=filelog;file=#file|urlescape#;filenode=#node|short#;style=gitweb">revisions</a> | annotate | <a href="?cmd=annotate;file=#file|urlescape#;filenode=#node|short#;style=raw">raw</a><br/>
+<a href="{url}summary{getentries}">summary</a> |
+<a href="{url}shortlog{getentries}">shortlog</a> |
+<a href="{url}log{getentries}">changelog</a> |
+<a href="{url}tags{getentries}">tags</a> |
+<a href="{url}file/#node|short##path|urlescape#{getentries}">manifest</a> |
+<a href="{url}rev/#node|short#{getentries}">changeset</a> |
+<a href="{url}file/{node|short}/#file|urlescape#{getentries}">file</a> |
+<a href="{url}log/{node|short}/#file|urlescape#{getentries}">revisions</a> |
+annotate | <a href="{url}raw-annotate/{node|short}/#file|urlescape#">raw</a><br/>
 </div>
 
 <div class="title">#file|escape#</div>
@@ -18,13 +26,13 @@
 <table>
 <tr>
  <td class="metatag">changeset #rev#:</td>
- <td><a href="?cs=#node|short#;style=gitweb">#node|short#</a></td></tr>
+ <td><a href="{url}rev/#node|short#{getentries}">#node|short#</a></td></tr>
 #rename%filerename#
 #parent%fileannotateparent#
 #child%fileannotatechild#
 <tr>
  <td class="metatag">manifest:</td>
- <td><a href="?mf=#node|short#;path=/;style=gitweb">#node|short#</a></td></tr>
+ <td><a href="{url}file/#node|short#{getentries}">#node|short#</a></td></tr>
 <tr>
  <td class="metatag">author:</td>
  <td>#author|obfuscate#</td></tr>
--- a/templates/gitweb/filelog.tmpl	Fri Oct 06 16:55:11 2006 -0500
+++ b/templates/gitweb/filelog.tmpl	Fri Oct 06 17:14:18 2006 -0500
@@ -1,16 +1,23 @@
 #header#
 <title>#repo|escape#: File revisions</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="page_header">
-<a href="http://www.selenic.com/mercurial/" title="Mercurial"><div style="float:right;">Mercurial</div></a><a href="?cmd=summary;style=gitweb">#repo|escape#</a> / file revisions
+<a href="http://www.selenic.com/mercurial/" title="Mercurial"><div style="float:right;">Mercurial</div></a><a href="{url}summary{getentries}">#repo|escape#</a> / file revisions
 </div>
 
 <div class="page_nav">
-<a href="?cmd=summary;style=gitweb">summary</a> | <a href="?cmd=shortlog;style=gitweb">shortlog</a> | <a href="?cmd=changelog;style=gitweb">changelog</a> | <a href="?cmd=tags;style=gitweb">tags</a> | <a href="?cmd=file;file=#file|urlescape#;filenode=#node|short#;style=gitweb">file</a> | revisions | <a href="?cmd=annotate;file=#file|urlescape#;filenode=#node|short#;style=gitweb">annotate</a> | <a href="?fl=#node|short#;file=#file|urlescape#;style=rss">rss</a><br/>
+<a href="{url}summary{getentries}">summary</a> |
+<a href="{url}shortlog{getentries}">shortlog</a> |
+<a href="{url}log{getentries}">changelog</a> |
+<a href="{url}tags{getentries}">tags</a> |
+<a href="{url}file/{node|short}/#file|urlescape#{getentries}">file</a> |
+revisions |
+<a href="{url}annotate/{node|short}/#file|urlescape#{getentries}">annotate</a> |
+<a href="{url}rss-log/#node|short#/#file|urlescape#">rss</a><br/>
 </div>
 
 <div class="title" >#file|urlescape#</div>
--- a/templates/gitweb/filerevision.tmpl	Fri Oct 06 16:55:11 2006 -0500
+++ b/templates/gitweb/filerevision.tmpl	Fri Oct 06 17:14:18 2006 -0500
@@ -1,16 +1,25 @@
 #header#
 <title>#repo|escape#: File revision</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="page_header">
-<a href="http://www.selenic.com/mercurial/" title="Mercurial"><div style="float:right;">Mercurial</div></a><a href="?cmd=summary;style=gitweb">#repo|escape#</a> / file revision
+<a href="http://www.selenic.com/mercurial/" title="Mercurial"><div style="float:right;">Mercurial</div></a><a href="{url}summary{getentries}">#repo|escape#</a> / file revision
 </div>
 
 <div class="page_nav">
-<a href="?cmd=summary;style=gitweb">summary</a> | <a href="?cmd=shortlog;style=gitweb">shortlog</a> | <a href="?cmd=changelog;style=gitweb">changelog</a> | <a href="?cmd=tags;style=gitweb">tags</a> | <a href="?mf=#node|short#;path=#path|urlescape#;style=gitweb">manifest</a> | <a href="?cmd=changeset;node=#node#;style=gitweb">changeset</a> | file | <a href="?cmd=filelog;file=#file|urlescape#;filenode=#node|short#;style=gitweb">revisions</a> | <a href="?cmd=annotate;file=#file|urlescape#;filenode=#node|short#;style=gitweb">annotate</a> | <a href="?cmd=file;file=#file|urlescape#;filenode=#node#;style=raw">raw</a><br/>
+<a href="{url}summary{getentries}">summary</a> |
+<a href="{url}shortlog{getentries}">shortlog</a> |
+<a href="{url}log{getentries}">changelog</a> |
+<a href="{url}tags{getentries}">tags</a> |
+<a href="{url}file/#node|short##path|urlescape#{getentries}">manifest</a> |
+<a href="{url}rev/#node|short#{getentries}">changeset</a> |
+file |
+<a href="{url}log/{node|short}/#file|urlescape#{getentries}">revisions</a> |
+<a href="{url}annotate/{node|short}/#file|urlescape#{getentries}">annotate</a> |
+<a href="{url}raw-file/{node|short}/#file|urlescape#">raw</a><br/>
 </div>
 
 <div class="title">#file|escape#</div>
@@ -18,13 +27,13 @@
 <table>
 <tr>
  <td class="metatag">changeset #rev#:</td>
- <td><a href="?cs=#node|short#;style=gitweb">#node|short#</a></td></tr>
+ <td><a href="{url}rev/#node|short#{getentries}">#node|short#</a></td></tr>
 #rename%filerename#
 #parent%fileannotateparent#
 #child%fileannotatechild#
 <tr>
  <td class="metatag">manifest:</td>
- <td><a href="?mf=#node|short#;path=/;style=gitweb">#node|short#</a></td></tr>
+ <td><a href="{url}file/#node|short#{getentries}">#node|short#</a></td></tr>
 <tr>
  <td class="metatag">author:</td>
  <td>#author|obfuscate#</td></tr>
--- a/templates/gitweb/footer.tmpl	Fri Oct 06 16:55:11 2006 -0500
+++ b/templates/gitweb/footer.tmpl	Fri Oct 06 17:14:18 2006 -0500
@@ -1,6 +1,6 @@
 <div class="page_footer">
 <div class="page_footer_text">#repo|escape#</div>
-<a class="rss_logo" href="?cmd=changelog;style=rss">RSS</a>
+<a class="rss_logo" href="#url#rss-log">RSS</a>
 </div>
 </body>
 </html>
--- a/templates/gitweb/header.tmpl	Fri Oct 06 16:55:11 2006 -0500
+++ b/templates/gitweb/header.tmpl	Fri Oct 06 17:14:18 2006 -0500
@@ -4,8 +4,8 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
 <head>
-<link rel="icon" href="?static=hgicon.png" type="image/png">
+<link rel="icon" href="{url}static/hgicon.png" type="image/png">
 <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
 <meta name="robots" content="index, nofollow"/>
-<link rel="stylesheet" href="?static=style-gitweb.css" type="text/css" />
+<link rel="stylesheet" href="{url}static/style-gitweb.css" type="text/css" />
 
--- a/templates/gitweb/manifest.tmpl	Fri Oct 06 16:55:11 2006 -0500
+++ b/templates/gitweb/manifest.tmpl	Fri Oct 06 17:14:18 2006 -0500
@@ -1,16 +1,21 @@
 #header#
 <title>#repo|escape#: Manifest</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="page_header">
-<a href="http://www.selenic.com/mercurial/" title="Mercurial"><div style="float:right;">Mercurial</div></a><a href="?cmd=summary;style=gitweb">#repo|escape#</a> / manifest
+<a href="http://www.selenic.com/mercurial/" title="Mercurial"><div style="float:right;">Mercurial</div></a><a href="{url}summary{getentries}">#repo|escape#</a> / manifest
 </div>
 
 <div class="page_nav">
-<a href="?cmd=summary;style=gitweb">summary</a> | <a href="?cmd=shortlog;style=gitweb">shortlog</a> | <a href="?cmd=changelog;style=gitweb">changelog</a> | <a href="?cmd=tags;style=gitweb">tags</a> | manifest | <a href="?cs=#node|short#;style=gitweb">changeset</a> #archives%archiveentry#<br/>
+<a href="{url}summary{getentries}">summary</a> |
+<a href="{url}shortlog{getentries}">shortlog</a> |
+<a href="{url}log{getentries}">changelog</a> |
+<a href="{url}tags{getentries}">tags</a> |
+manifest |
+<a href="{url}rev/#node|short#{getentries}">changeset</a> #archives%archiveentry#<br/>
 </div>
 
 <div class="title" >#path|escape#</div>
@@ -18,7 +23,7 @@
 <table cellspacing="0">
 <tr class="light">
 <td style="font-family:monospace">drwxr-xr-x</td>
-<td><a href="?mf=#node|short#;path=#up|urlescape#;style=gitweb">[up]</a></td>
+<td><a href="{url}file/#node|short##up|urlescape#{getentries}">[up]</a></td>
 <td class="link">&nbsp;</td>
 </tr>
 #dentries%manifestdirentry#
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/gitweb/map	Fri Oct 06 17:14:18 2006 -0500
@@ -0,0 +1,52 @@
+default = 'summary'
+header = header.tmpl
+footer = footer.tmpl
+search = search.tmpl
+changelog = changelog.tmpl
+summary = summary.tmpl
+error = error.tmpl
+naventry = '<a href="#url#log/#rev#{getentries}">#label|escape#</a> '
+navshortentry = '<a href="#url#shortlog/#rev#{getentries}">#label|escape#</a> '
+filedifflink = '<a href="#url#diff/#node|short#/#file|urlescape#{getentries}">#file|escape#</a> '
+filenodelink = '<tr class="parity#parity#"><td><a class="list" href="">#file|escape#</a></td><td></td><td class="link"><a href="#url#file/#node|short#/#file|urlescape#{getentries}">file</a> | <a href="#url#annotate/#node|short#/#file|urlescape#{getentries}">annotate</a> <!-- FIX ME | <a href="#url#diff/#node|short#/#file|urlescape#{getentries}">diff</a> --> | <a href="#url#log/#node|short#/#file|urlescape#{getentries}">revisions</a></td></tr>'
+fileellipses = '...'
+changelogentry = changelogentry.tmpl
+searchentry = changelogentry.tmpl
+changeset = changeset.tmpl
+manifest = manifest.tmpl
+manifestdirentry = '<tr class="parity#parity#"><td style="font-family:monospace">drwxr-xr-x</td><td><a href="#url#file/#node|short##path|urlescape#{getentries}">#basename|escape#/</a></td><td class="link"><a href="#url#file/#node|short##path|urlescape#{getentries}">manifest</a></td></tr>'
+manifestfileentry = '<tr class="parity#parity#"><td style="font-family:monospace">#permissions|permissions#</td><td class="list"><a class="list" href="#url#file/#node|short#/#file|urlescape#{getentries}">#basename|escape#</a></td><td class="link"><a href="#url#file/#node|short#/#file|urlescape#{getentries}">file</a> | <a href="#url#log/#node|short#/#file|urlescape#{getentries}">revisions</a> | <a href="#url#annotate/#node|short#/#file|urlescape#{getentries}">annotate</a></td></tr>'
+filerevision = filerevision.tmpl
+fileannotate = fileannotate.tmpl
+filelog = filelog.tmpl
+fileline = '<div style="font-family:monospace" class="parity#parity#"><pre><span class="linenr">   #linenumber#</span> #line|escape#</pre></div>'
+annotateline = '<tr style="font-family:monospace" class="parity#parity#"><td class="linenr" style="text-align: right;"><a href="#url#annotate/#node|short#/#file|urlescape#{getentries}">#author|obfuscate#@#rev#</a></td><td><pre>#line|escape#</pre></td></tr>'
+difflineplus = '<div style="color:#008800;">#line|escape#</div>'
+difflineminus = '<div style="color:#cc0000;">#line|escape#</div>'
+difflineat = '<div style="color:#990099;">#line|escape#</div>'
+diffline = '<div>#line|escape#</div>'
+changelogparent = '<tr><th class="parent">parent #rev#:</th><td class="parent"><a href="#url#rev/#node|short#{getentries}">#node|short#</a></td></tr>'
+changesetparent = '<tr><td>parent</td><td style="font-family:monospace"><a class="list" href="#url#rev/#node|short#{getentries}">#node|short#</a></td></tr>'
+filerevparent = '<tr><td class="metatag">parent:</td><td><a href="{url}file/{node|short}/#file|urlescape#{getentries}">#node|short#</a></td></tr>'
+filerename = '<tr><td class="metatag">parent:</td><td><a href="{url}file/#node|short#/#file|urlescape#{getentries}">#file|escape#@#node|short#</a></td></tr>'
+filelogrename = '| <a href="{url}file/#node|short#/#file|urlescape#{getentries}">base</a>'
+fileannotateparent = '<tr><td class="metatag">parent:</td><td><a href="{url}annotate/{node|short}/#file|urlescape#{getentries}">#node|short#</a></td></tr>'
+changelogchild = '<tr><th class="child">child #rev#:</th><td class="child"><a href="{url}rev/#node|short#{getentries}">#node|short#</a></td></tr>'
+changesetchild = '<tr><td>child</td><td style="font-family:monospace"><a class="list" href="{url}rev/#node|short#{getentries}">#node|short#</a></td></tr>'
+filerevchild = '<tr><td class="metatag">child:</td><td><a href="{url}file/{node|short}#file|urlescape#{getentries}">#node|short#</a></td></tr>'
+fileannotatechild = '<tr><td class="metatag">child:</td><td><a href="{url}annotate/{node|short}/#file|urlescape#{getentries}">#node|short#</a></td></tr>'
+tags = tags.tmpl
+tagentry = '<tr class="parity#parity#"><td class="age"><i>#date|age# ago</i></td><td><a class="list" href="{url}rev/{node|short}{getentries}"><b>#tag|escape#</b></a></td><td class="link"><a href="{url}rev/#node|short#{getentries}">changeset</a> | <a href="{url}log/#node|short#{getentries}">changelog</a> | <a href="{url}file/#node|short#{getentries}">manifest</a></td></tr>'
+diffblock = '<pre>#lines#</pre>'
+changelogtag = '<tr><th class="tag">tag:</th><td class="tag">#tag|escape#</td></tr>'
+changesettag = '<tr><td>tag</td><td>#tag|escape#</td></tr>'
+filediffparent = '<tr><th class="parent">parent #rev#:</th><td class="parent"><a href="{url}rev/#node|short#{getentries}">#node|short#</a></td></tr>'
+filelogparent = '<tr><td align="right">parent #rev#:&nbsp;</td><td><a href="{url}file/{node|short}/#file|urlescape#{getentries}">#node|short#</a></td></tr>'
+filediffchild = '<tr><th class="child">child #rev#:</th><td class="child"><a href="{url}rev/#node|short#{getentries}">#node|short#</a></td></tr>'
+filelogchild = '<tr><td align="right">child #rev#:&nbsp;</td><td><a href="{url}file{node|short}/#file|urlescape#{getentries}">#node|short#</a></td></tr>'
+shortlog = shortlog.tmpl
+shortlogentry = '<tr class="parity#parity#"><td class="age"><i>#date|age# ago</i></td><td><i>#author#</i></td><td><a class="list" href="{url}rev/#node|short#{getentries}"><b>#desc|strip|firstline|escape#</b></a></td><td class="link"><a href="{url}rev/#node|short#{getentries}">changeset</a> | <a href="{url}file/#node|short#{getentries}">manifest</a></td></tr>'
+filelogentry = '<tr class="parity#parity#"><td class="age"><i>#date|age# ago</i></td><td><a class="list" href="{url}rev/#node|short#{getentries}"><b>#desc|strip|firstline|escape#</b></a></td><td class="link"><a href="{url}file/#node|short#/#file|urlescape#{getentries}">file</a> | <!-- FIXME: <a href="{url}diff/#node|short#/#file|urlescape#{getentries}">diff</a> | --> <a href="{url}annotate/#node|short#/#file|urlescape#{getentries}">annotate</a> #rename%filelogrename#</td></tr>'
+archiveentry = ' | <a href="{url}archive/{node|short}{extension}">#type|escape#</a> '
+indexentry = '<tr class="parity#parity#"><td><a class="list" href="#url#"><b>#name|escape#</b></a></td><td>#description#</td><td>#contact|obfuscate#</td><td class="age">#lastchange|age# ago</td><td class="indexlinks"><a class="rss_logo" href="#url#rss-log">RSS</a> #archives%archiveentry#</td></tr>' 
+index = index.tmpl
--- a/templates/gitweb/search.tmpl	Fri Oct 06 16:55:11 2006 -0500
+++ b/templates/gitweb/search.tmpl	Fri Oct 06 17:14:18 2006 -0500
@@ -1,22 +1,24 @@
 #header#
 <div class="page_nav">
-<a href="?cmd=summary;style=gitweb">summary</a> | <a href="?cmd=shortlog;style=gitweb">shortlog</a> | <a href="?cmd=changelog;style=gitweb">changelog</a> | <a href="?cmd=tags;style=gitweb">tags</a> | <a href="?mf=#node|short#;path=/;style=gitweb">manifest</a><br/>
+<a href="{url}summary{getentries}">summary</a> |
+<a href="{url}shortlog{getentries}">shortlog</a> |
+<a href="{url}log{getentries}">changelog</a> |
+<a href="{url}tags{getentries}">tags</a> |
+<a href="{url}file/#node|short#{getentries}">manifest</a><br/>
 </div>
 
 <h2>searching for #query|escape#</h2>
 
-<form>
+<form action="{url}log">
 search:
-<input type="hidden" name="cmd" value="changelog">
 <input type="hidden" name="style" value="gitweb">
 <input name="rev" type="text" width="30" value="#query|escape#">
 </form>
 
 #entries#
 
-<form>
+<form action="{url}log">
 search:
-<input type="hidden" name="cmd" value="changelog">
 <input type="hidden" name="style" value="gitweb">
 <input name="rev" type="text" width="30">
 </form>
--- a/templates/gitweb/shortlog.tmpl	Fri Oct 06 16:55:11 2006 -0500
+++ b/templates/gitweb/shortlog.tmpl	Fri Oct 06 17:14:18 2006 -0500
@@ -1,25 +1,27 @@
 #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="page_header">
-<a href="http://www.selenic.com/mercurial/" title="Mercurial"><div style="float:right;">Mercurial</div></a><a href="?cmd=summary;style=gitweb">#repo|escape#</a> / shortlog
+<a href="http://www.selenic.com/mercurial/" title="Mercurial"><div style="float:right;">Mercurial</div></a><a href="{url}summary{getentries}">#repo|escape#</a> / shortlog
 </div>
 
-<form action="#">
+<form action="{url}log">
 <div class="search">
-<input type="hidden" name="repo" value="#repo|escape#"  />
 <input type="hidden" name="style" value="gitweb"  />
-<input type="hidden" name="cmd" value="changelog"  />
 <input type="text" name="rev"  />
 </div>
 </form>
 </div>
 <div class="page_nav">
-<a href="?cmd=summary;style=gitweb">summary</a> | shortlog | <a href="?cmd=changelog;rev=#rev#;style=gitweb">changelog</a> | <a href="?cmd=tags;style=gitweb">tags</a> | <a href="?mf=#node|short#;path=/;style=gitweb">manifest</a>#archives%archiveentry#<br/>
+<a href="{url}summary{getentries}">summary</a> |
+shortlog |
+<a href="{url}log/#rev#{getentries}">changelog</a> |
+<a href="{url}tags{getentries}">tags</a> |
+<a href="{url}file/#node|short#{getentries}">manifest</a>#archives%archiveentry#<br/>
 <br/>
 
 #changenav%navshortentry#<br/>
--- a/templates/gitweb/summary.tmpl	Fri Oct 06 16:55:11 2006 -0500
+++ b/templates/gitweb/summary.tmpl	Fri Oct 06 17:14:18 2006 -0500
@@ -1,15 +1,19 @@
 #header#
 <title>#repo|escape#: Summary</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="page_header">
-<a href="http://www.selenic.com/mercurial/" title="Mercurial"><div style="float:right;">Mercurial</div></a><a href="?cmd=summary;style=gitweb">#repo|escape#</a> / summary
+<a href="http://www.selenic.com/mercurial/" title="Mercurial"><div style="float:right;">Mercurial</div></a><a href="{url}summary{getentries}">#repo|escape#</a> / summary
 </div>
 <div class="page_nav">
-summary | <a href="?cmd=shortlog;style=gitweb">shortlog</a> | <a href="?cmd=changelog;style=gitweb">changelog</a> | <a href="?cmd=tags;style=gitweb">tags</a> | <a href="?mf=#node|short#;path=/;style=gitweb">manifest</a>#archives%archiveentry#
+summary |
+<a href="{url}shortlog{getentries}">shortlog</a> |
+<a href="{url}log{getentries}">changelog</a> |
+<a href="{url}tags{getentries}">tags</a> |
+<a href="{url}file/#node|short#{getentries}">manifest</a>#archives%archiveentry#
 <br/>
 </div>
 
@@ -20,16 +24,16 @@
 <!-- <tr><td>last change</td><td>#lastchange|rfc822date#</td></tr> -->
 </table>
 
-<div><a  class="title" href="?cmd=changelog;style=gitweb">changes</a></div>
+<div><a  class="title" href="{url}log{getentries}">changes</a></div>
 <table cellspacing="0">
 #shortlog#
-<tr class="light"><td colspan="3"><a class="list" href="?cmd=changelog;style=gitweb">...</a></td></tr>
+<tr class="light"><td colspan="3"><a class="list" href="{url}log{getentries}">...</a></td></tr>
 </table>
 
-<div><a class="title" href="?cmd=tags;style=gitweb">tags</a></div>
+<div><a class="title" href="{url}tags{getentries}">tags</a></div>
 <table cellspacing="0">
 #tags#
-<tr class="light"><td colspan="3"><a class="list" href="?cmd=tags;style=gitweb">...</a></td></tr>
+<tr class="light"><td colspan="3"><a class="list" href="{url}tags{getentries}">...</a></td></tr>
 </table>
 
 #footer#
--- a/templates/gitweb/tags.tmpl	Fri Oct 06 16:55:11 2006 -0500
+++ b/templates/gitweb/tags.tmpl	Fri Oct 06 17:14:18 2006 -0500
@@ -1,16 +1,20 @@
 #header#
 <title>#repo|escape#: Tags</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="page_header">
-<a href="http://www.selenic.com/mercurial/" title="Mercurial"><div style="float:right;">Mercurial</div></a><a href="?cmd=summary;style=gitweb">#repo|escape#</a> / tags
+<a href="http://www.selenic.com/mercurial/" title="Mercurial"><div style="float:right;">Mercurial</div></a><a href="{url}summary{getentries}">#repo|escape#</a> / tags
 </div>
 
 <div class="page_nav">
-<a href="?cmd=summary;style=gitweb">summary</a> | <a href="?cmd=shortlog;style=gitweb">shortlog</a> | <a href="?cmd=changelog;style=gitweb">changelog</a> | tags | <a href="?cmd=manifest;manifest=#node|short#;path=/;style=gitweb">manifest</a>
+<a href="{url}summary{getentries}">summary</a> |
+<a href="{url}shortlog{getentries}">shortlog</a> |
+<a href="{url}log{getentries}">changelog</a> |
+tags |
+<a href="{url}file/#node|short#{getentries}">manifest</a>
 <br/>
 </div>
 
--- a/templates/header.tmpl	Fri Oct 06 16:55:11 2006 -0500
+++ b/templates/header.tmpl	Fri Oct 06 17:14:18 2006 -0500
@@ -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	Fri Oct 06 16:55:11 2006 -0500
+++ b/templates/manifest.tmpl	Fri Oct 06 17:14:18 2006 -0500
@@ -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#{getentries}">changelog</a>
+<a href="#url#shortlog/#rev#{getentries}">shortlog</a>
+<a href="#url#tags{getentries}">tags</a>
+<a href="#url#rev/#node|short#{getentries}">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#{getentries}">[up]</a>
 #dentries%manifestdirentry#
 #fentries%manifestfileentry#
 </table>
--- a/templates/map	Fri Oct 06 16:55:11 2006 -0500
+++ b/templates/map	Fri Oct 06 17:14:18 2006 -0500
@@ -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#{getentries}">#label|escape#</a> '
+navshortentry = '<a href="#url#shortlog/#rev#{getentries}">#label|escape#</a> '
+filedifflink = '<a href="#url#diff/#node|short#/#file|urlescape#{getentries}">#file|escape#</a> '
+filenodelink = '<a href="#url#file/#node|short#/#file|urlescape#{getentries}">#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#{getentries}">#basename|escape#/</a>'
+manifestfileentry = '<tr class="parity#parity#"><td><tt>#permissions|permissions#</tt>&nbsp;<td><a href="#url#file/#node|short#/#file|urlescape#{getentries}">#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#{getentries}">#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#{getentries}">#node|short#</a></td></tr>'
+changesetparent = '<tr><th class="parent">parent #rev#:</th><td class="parent"><a href="#url#rev/#node|short#{getentries}">#node|short#</a></td></tr>'
+filerevparent = '<tr><td class="metatag">parent:</td><td><a href="#url#file/#node|short#/#file|urlescape#{getentries}">#node|short#</a></td></tr>'
+filerename = '<tr><td class="metatag">parent:</td><td><a href="#url#file/#node|short#/#file|urlescape#{getentries}">#file|escape#@#node|short#</a></td></tr>'
+filelogrename = '<tr><th>base:</th><td><a href="#url#file/#node|short#/#file|urlescape#{getentries}">#file|escape#@#node|short#</a></td></tr>'
+fileannotateparent = '<tr><td class="metatag">parent:</td><td><a href="#url#annotate/#node|short#/#file|urlescape#{getentries}">#node|short#</a></td></tr>'
+changesetchild = '<tr><th class="child">child #rev#:</th><td class="child"><a href="#url#rev/#node|short#{getentries}">#node|short#</a></td></tr>'
+changelogchild = '<tr><th class="child">child #rev#:</th><td class="child"><a href="#url#rev/#node|short#{getentries}">#node|short#</a></td></tr>'
+filerevchild = '<tr><td class="metatag">child:</td><td><a href="#url#file/#node|short#/#file|urlescape#{getentries}">#node|short#</a></td></tr>'
+fileannotatechild = '<tr><td class="metatag">child:</td><td><a href="#url#annotate/#node|short#/#file|urlescape#{getentries}">#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#{getentries}">#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#{getentries}">#node|short#</a></td></tr>'
+filelogparent = '<tr><th>parent #rev#:</th><td><a href="#url#file/#node|short#/#file|urlescape#{getentries}">#node|short#</a></td></tr>'
+filediffchild = '<tr><th class="child">child #rev#:</th><td class="child"><a href="#url#rev/#node|short#{getentries}">#node|short#</a></td></tr>'
+filelogchild = '<tr><th>child #rev#:</th><td><a href="#url#file/#node|short#/#file|urlescape#{getentries}">#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
--- a/templates/map-gitweb	Fri Oct 06 16:55:11 2006 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +0,0 @@
-default = 'summary'
-header = gitweb/header.tmpl
-footer = gitweb/footer.tmpl
-search = gitweb/search.tmpl
-changelog = gitweb/changelog.tmpl
-summary = gitweb/summary.tmpl
-error = gitweb/error.tmpl
-naventry = '<a href="?cmd=changelog;rev=#rev#;style=gitweb">#label|escape#</a> '
-navshortentry = '<a href="?cmd=shortlog;rev=#rev#;style=gitweb">#label|escape#</a> '
-filedifflink = '<a href="?cmd=filediff;node=#node#;file=#file|urlescape#;style=gitweb">#file|escape#</a> '
-filenodelink = '<tr class="parity#parity#"><td><a class="list" href="">#file|escape#</a></td><td></td><td class="link"><a href="?f=#node|short#;file=#file|urlescape#;style=gitweb">file</a> | <a href="?fa=#node|short#;file=#file|urlescape#;style=gitweb">annotate</a> | <!-- FIXME: <a href="?fd=#node|short#;file=#file|urlescape#;style=gitweb">diff</a> | --> <a href="?cmd=filelog;filenode=#node|short#;file=#file|urlescape#;style=gitweb">revisions</a></td></tr>'
-fileellipses = '...'
-changelogentry = gitweb/changelogentry.tmpl
-searchentry = gitweb/changelogentry.tmpl
-changeset = gitweb/changeset.tmpl
-manifest = gitweb/manifest.tmpl
-manifestdirentry = '<tr class="parity#parity#"><td style="font-family:monospace">drwxr-xr-x</td><td><a href="?mf=#node|short#;path=#path|urlescape#;style=gitweb">#basename|escape#/</a></td><td class="link"><a href="?mf=#node|short#;path=#path|urlescape#;style=gitweb">manifest</a></td></tr>'
-manifestfileentry = '<tr class="parity#parity#"><td style="font-family:monospace">#permissions|permissions#</td><td class="list"><a class="list" href="?f=#node|short#;file=#file|urlescape#;style=gitweb">#basename|escape#</a></td><td class="link"><a href="?f=#node|short#;file=#file|urlescape#;style=gitweb">file</a> | <a href="?fl=#node|short#;file=#file|urlescape#;style=gitweb">revisions</a> | <a href="?fa=#node|short#;file=#file|urlescape#;style=gitweb">annotate</a></td></tr>'
-filerevision = gitweb/filerevision.tmpl
-fileannotate = gitweb/fileannotate.tmpl
-filelog = gitweb/filelog.tmpl
-fileline = '<div style="font-family:monospace" class="parity#parity#"><pre><span class="linenr">   #linenumber#</span> #line|escape#</pre></div>'
-annotateline = '<tr style="font-family:monospace" class="parity#parity#"><td class="linenr" style="text-align: right;"><a href="?fa=#node|short#;file=#file|urlescape#;style=gitweb">#author|obfuscate#@#rev#</a></td><td><pre>#line|escape#</pre></td></tr>'
-difflineplus = '<div style="color:#008800;">#line|escape#</div>'
-difflineminus = '<div style="color:#cc0000;">#line|escape#</div>'
-difflineat = '<div style="color:#990099;">#line|escape#</div>'
-diffline = '<div>#line|escape#</div>'
-changelogparent = '<tr><th class="parent">parent #rev#:</th><td class="parent"><a href="?cmd=changeset;node=#node#;style=gitweb">#node|short#</a></td></tr>'
-changesetparent = '<tr><td>parent</td><td style="font-family:monospace"><a class="list" href="?cmd=changeset;node=#node|short#;style=gitweb">#node|short#</a></td></tr>'
-filerevparent = '<tr><td class="metatag">parent:</td><td><a href="?cmd=file;file=#file|urlescape#;filenode=#node#;style=gitweb">#node|short#</a></td></tr>'
-filerename = '<tr><td class="metatag">parent:</td><td><a href="?f=#node|short#;file=#file|urlescape#;style=gitweb">#file|escape#@#node|short#</a></td></tr>'
-filelogrename = '| <a href="?f=#node|short#;file=#file|urlescape#;style=gitweb">base</a>'
-fileannotateparent = '<tr><td class="metatag">parent:</td><td><a href="?cmd=annotate;file=#file|urlescape#;filenode=#node#;style=gitweb">#node|short#</a></td></tr>'
-changelogchild = '<tr><th class="child">child #rev#:</th><td class="child"><a href="?cmd=changeset;node=#node#;style=gitweb">#node|short#</a></td></tr>'
-changesetchild = '<tr><td>child</td><td style="font-family:monospace"><a class="list" href="?cmd=changeset;node=#node|short#;style=gitweb">#node|short#</a></td></tr>'
-filerevchild = '<tr><td class="metatag">child:</td><td><a href="?cmd=file;file=#file|urlescape#;filenode=#node#;style=gitweb">#node|short#</a></td></tr>'
-fileannotatechild = '<tr><td class="metatag">child:</td><td><a href="?cmd=annotate;file=#file|urlescape#;filenode=#node#;style=gitweb">#node|short#</a></td></tr>'
-tags = gitweb/tags.tmpl
-tagentry = '<tr class="parity#parity#"><td class="age"><i>#date|age# ago</i></td><td><a class="list" href="?cmd=changeset;node=#node|short#;style=gitweb"><b>#tag|escape#</b></a></td><td class="link"><a href="?cmd=changeset;node=#node|short#;style=gitweb">changeset</a> | <a href="?cmd=changelog;rev=#node|short#;style=gitweb">changelog</a> |  <a href="?mf=#node|short#;path=/;style=gitweb">manifest</a></td></tr>'
-diffblock = '<pre>#lines#</pre>'
-changelogtag = '<tr><th class="tag">tag:</th><td class="tag">#tag|escape#</td></tr>'
-changesettag = '<tr><td>tag</td><td>#tag|escape#</td></tr>'
-filediffparent = '<tr><th class="parent">parent #rev#:</th><td class="parent"><a href="?cmd=changeset;node=#node#;style=gitweb">#node|short#</a></td></tr>'
-filelogparent = '<tr><td align="right">parent #rev#:&nbsp;</td><td><a href="?cmd=file;file=#file|urlescape#;filenode=#node#;style=gitweb">#node|short#</a></td></tr>'
-filediffchild = '<tr><th class="child">child #rev#:</th><td class="child"><a href="?cmd=changeset;node=#node#;style=gitweb">#node|short#</a></td></tr>'
-filelogchild = '<tr><td align="right">child #rev#:&nbsp;</td><td><a href="?cmd=file;file=#file|urlescape#;filenode=#node#;style=gitweb">#node|short#</a></td></tr>'
-shortlog = gitweb/shortlog.tmpl
-shortlogentry = '<tr class="parity#parity#"><td class="age"><i>#date|age# ago</i></td><td><i>#author#</i></td><td><a class="list" href="?cmd=changeset;node=#node|short#;style=gitweb"><b>#desc|strip|firstline|escape#</b></a></td><td class="link"><a href="?cmd=changeset;node=#node|short#;style=gitweb">changeset</a> |  <a href="?cmd=manifest;manifest=#node|short#;path=/;style=gitweb">manifest</a></td></tr>'
-filelogentry = '<tr class="parity#parity#"><td class="age"><i>#date|age# ago</i></td><td><a class="list" href="?cmd=changeset;node=#node|short#;style=gitweb"><b>#desc|strip|firstline|escape#</b></a></td><td class="link"><a href="?f=#node|short#;file=#file|urlescape#;style=gitweb">file</a> | <!-- FIXME: <a href="?fd=#node|short#;file=#file|urlescape#;style=gitweb">diff</a> | --> <a href="?fa=#node|short#;file=#file|urlescape#;style=gitweb">annotate</a> #rename%filelogrename#</td></tr>'
-archiveentry = ' | <a href="#url#?ca=#node|short#;type=#type|urlescape#">#type|escape#</a> '
-indexentry = '<tr class="parity#parity#"><td><a class="list" href="#url#"><b>#name|escape#</b></a></td><td>#description#</td><td>#contact|obfuscate#</td><td class="age">#lastchange|age# ago</td><td class="indexlinks"><a class="rss_logo" href="#url#?cl=tip;style=rss">RSS</a> #archives%archiveentry#</td></tr>' 
-index = gitweb/index.tmpl
--- a/templates/map-raw	Fri Oct 06 16:55:11 2006 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-header = raw/header.tmpl
-footer = ''
-changeset = raw/changeset.tmpl
-difflineplus = '#line#'
-difflineminus = '#line#'
-difflineat = '#line#'
-diffline = '#line#'
-changesetparent = '# Parent #node#'
-changesetchild = '# Child #node#'
-filenodelink = ''
-filerevision = '#rawfileheader##raw#'
-fileline = '#line#'
-diffblock = '#lines#'
-filediff = raw/filediff.tmpl
-fileannotate = raw/fileannotate.tmpl
-annotateline = '#author#@#rev#: #line#'
--- a/templates/map-rss	Fri Oct 06 16:55:11 2006 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-default = 'changelog'
-header = rss/header.tmpl
-changelog = rss/changelog.tmpl
-changelogentry = rss/changelogentry.tmpl
-filelog = rss/filelog.tmpl
-filelogentry = rss/filelogentry.tmpl
-tags = rss/tags.tmpl
-tagentry = rss/tagentry.tmpl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/old/changelog.tmpl	Fri Oct 06 17:14:18 2006 -0500
@@ -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	Fri Oct 06 17:14:18 2006 -0500
@@ -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	Fri Oct 06 17:14:18 2006 -0500
@@ -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	Fri Oct 06 17:14:18 2006 -0500
@@ -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	Fri Oct 06 17:14:18 2006 -0500
@@ -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	Fri Oct 06 17:14:18 2006 -0500
@@ -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	Fri Oct 06 17:14:18 2006 -0500
@@ -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	Fri Oct 06 17:14:18 2006 -0500
@@ -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	Fri Oct 06 17:14:18 2006 -0500
@@ -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	Fri Oct 06 17:14:18 2006 -0500
@@ -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/map	Fri Oct 06 17:14:18 2006 -0500
@@ -0,0 +1,53 @@
+default = 'changelog'
+header = header.tmpl
+footer = footer.tmpl
+search = search.tmpl
+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> '
+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>'
+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>'
+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/search.tmpl	Fri Oct 06 17:14:18 2006 -0500
@@ -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	Fri Oct 06 17:14:18 2006 -0500
@@ -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	Fri Oct 06 17:14:18 2006 -0500
@@ -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	Fri Oct 06 17:14:18 2006 -0500
@@ -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#
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/raw/map	Fri Oct 06 17:14:18 2006 -0500
@@ -0,0 +1,16 @@
+header = header.tmpl
+footer = ''
+changeset = changeset.tmpl
+difflineplus = '#line#'
+difflineminus = '#line#'
+difflineat = '#line#'
+diffline = '#line#'
+changesetparent = '# Parent #node#'
+changesetchild = '# Child #node#'
+filenodelink = ''
+filerevision = '#rawfileheader##raw#'
+fileline = '#line#'
+diffblock = '#lines#'
+filediff = filediff.tmpl
+fileannotate = fileannotate.tmpl
+annotateline = '#author#@#rev#: #line#'
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/rss/map	Fri Oct 06 17:14:18 2006 -0500
@@ -0,0 +1,8 @@
+default = 'changelog'
+header = header.tmpl
+changelog = changelog.tmpl
+changelogentry = changelogentry.tmpl
+filelog = filelog.tmpl
+filelogentry = filelogentry.tmpl
+tags = tags.tmpl
+tagentry = tagentry.tmpl
--- a/templates/search.tmpl	Fri Oct 06 16:55:11 2006 -0500
+++ b/templates/search.tmpl	Fri Oct 06 17:14:18 2006 -0500
@@ -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{getentries}">changelog</a>
+<a href="#url#shortlog{getentries}">shortlog</a>
+<a href="#url#tags{getentries}">tags</a>
+<a href="#url#file/#node|short#{getentries}">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	Fri Oct 06 16:55:11 2006 -0500
+++ b/templates/shortlog.tmpl	Fri Oct 06 17:14:18 2006 -0500
@@ -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#{getentries}">changelog</a>
+<a href="#url#tags{getentries}">tags</a>
+<a href="#url#file/#node|short#/{getentries}">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	Fri Oct 06 16:55:11 2006 -0500
+++ b/templates/shortlogentry.tmpl	Fri Oct 06 17:14:18 2006 -0500
@@ -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#{getentries}">#desc|strip|firstline|escape#</a></td>
  </tr>
 </table>
--- a/templates/tags.tmpl	Fri Oct 06 16:55:11 2006 -0500
+++ b/templates/tags.tmpl	Fri Oct 06 17:14:18 2006 -0500
@@ -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{getentries}">changelog</a>
+<a href="#url#shortlog{getentries}">shortlog</a>
+<a href="#url#file/#node|short#/{getentries}">manifest</a>
+<a type="application/rss+xml" href="#url#rss-tags">rss</a>
 </div>
 
 <h2>tags:</h2>
--- a/tests/test-commit.out	Fri Oct 06 16:55:11 2006 -0500
+++ b/tests/test-commit.out	Fri Oct 06 17:14:18 2006 -0500
@@ -1,13 +1,13 @@
 abort: impossible time zone offset: 4444444
 transaction abort!
 rollback completed
-abort: invalid date: '1\t15.1'
+abort: invalid date: '1\t15.1' see hg(1) manual page for details
 transaction abort!
 rollback completed
-abort: invalid date: 'foo bar'
+abort: invalid date: 'foo bar' see hg(1) manual page for details
 transaction abort!
 rollback completed
-abort: invalid date: ' 1 4444'
+abort: invalid date: ' 1 4444' see hg(1) manual page for details
 transaction abort!
 rollback completed
 abort: date exceeds 32 bits: 111111111111
--- a/tests/test-globalopts.out	Fri Oct 06 16:55:11 2006 -0500
+++ b/tests/test-globalopts.out	Fri Oct 06 17:14:18 2006 -0500
@@ -114,94 +114,96 @@
 
 list of commands (use "hg help -v" to show aliases and global options):
 
- add         add the specified files on the next commit
- addremove   add all new files, delete all missing files
- annotate    show changeset information per file line
- archive     create unversioned archive of a repository revision
- backout     reverse effect of earlier changeset
- bundle      create a changegroup file
- cat         output the latest or given revisions of files
- clone       make a copy of an existing repository
- commit      commit the specified files or all outstanding changes
- copy        mark files as copied for the next commit
- diff        diff repository (or selected files)
- export      dump the header and diffs for one or more changesets
- grep        search for a pattern in specified files and revisions
- heads       show current repository heads
- help        show help for a command, extension, or list of commands
- identify    print information about the working copy
- import      import an ordered set of patches
- incoming    show new changesets found in source
- init        create a new repository in the given directory
- locate      locate files matching specific patterns
- log         show revision history of entire repository or files
- manifest    output the latest or given revision of the project manifest
- merge       Merge working directory with another revision
- outgoing    show changesets not found in destination
- parents     show the parents of the working dir or revision
- paths       show definition of symbolic path names
- pull        pull changes from the specified source
- push        push changes to the specified destination
- recover     roll back an interrupted transaction
- remove      remove the specified files on the next commit
- rename      rename files; equivalent of copy + remove
- revert      revert files or dirs to their states as of some revision
- rollback    roll back the last transaction in this repository
- root        print the root (top) of the current working dir
- serve       export the repository via HTTP
- status      show changed files in the working directory
- tag         add a tag for the current tip or a given revision
- tags        list repository tags
- tip         show the tip revision
- unbundle    apply a changegroup file
- update      update or merge working directory
- verify      verify the integrity of the repository
- version     output version and copyright information
+ add          add the specified files on the next commit
+ addremove    add all new files, delete all missing files
+ annotate     show changeset information per file line
+ archive      create unversioned archive of a repository revision
+ backout      reverse effect of earlier changeset
+ bundle       create a changegroup file
+ cat          output the latest or given revisions of files
+ clone        make a copy of an existing repository
+ commit       commit the specified files or all outstanding changes
+ copy         mark files as copied for the next commit
+ diff         diff repository (or selected files)
+ export       dump the header and diffs for one or more changesets
+ grep         search for a pattern in specified files and revisions
+ heads        show current repository heads
+ help         show help for a command, extension, or list of commands
+ identify     print information about the working copy
+ import       import an ordered set of patches
+ incoming     show new changesets found in source
+ init         create a new repository in the given directory
+ locate       locate files matching specific patterns
+ log          show revision history of entire repository or files
+ manifest     output the latest or given revision of the project manifest
+ merge        Merge working directory with another revision
+ outgoing     show changesets not found in destination
+ parents      show the parents of the working dir or revision
+ paths        show definition of symbolic path names
+ pull         pull changes from the specified source
+ push         push changes to the specified destination
+ recover      roll back an interrupted transaction
+ remove       remove the specified files on the next commit
+ rename       rename files; equivalent of copy + remove
+ revert       revert files or dirs to their states as of some revision
+ rollback     roll back the last transaction in this repository
+ root         print the root (top) of the current working dir
+ serve        export the repository via HTTP
+ showconfig   show combined config settings from all hgrc files
+ status       show changed files in the working directory
+ tag          add a tag for the current tip or a given revision
+ tags         list repository tags
+ tip          show the tip revision
+ unbundle     apply a changegroup file
+ update       update or merge working directory
+ verify       verify the integrity of the repository
+ version      output version and copyright information
 Mercurial Distributed SCM
 
 list of commands (use "hg help -v" to show aliases and global options):
 
- add         add the specified files on the next commit
- addremove   add all new files, delete all missing files
- annotate    show changeset information per file line
- archive     create unversioned archive of a repository revision
- backout     reverse effect of earlier changeset
- bundle      create a changegroup file
- cat         output the latest or given revisions of files
- clone       make a copy of an existing repository
- commit      commit the specified files or all outstanding changes
- copy        mark files as copied for the next commit
- diff        diff repository (or selected files)
- export      dump the header and diffs for one or more changesets
- grep        search for a pattern in specified files and revisions
- heads       show current repository heads
- help        show help for a command, extension, or list of commands
- identify    print information about the working copy
- import      import an ordered set of patches
- incoming    show new changesets found in source
- init        create a new repository in the given directory
- locate      locate files matching specific patterns
- log         show revision history of entire repository or files
- manifest    output the latest or given revision of the project manifest
- merge       Merge working directory with another revision
- outgoing    show changesets not found in destination
- parents     show the parents of the working dir or revision
- paths       show definition of symbolic path names
- pull        pull changes from the specified source
- push        push changes to the specified destination
- recover     roll back an interrupted transaction
- remove      remove the specified files on the next commit
- rename      rename files; equivalent of copy + remove
- revert      revert files or dirs to their states as of some revision
- rollback    roll back the last transaction in this repository
- root        print the root (top) of the current working dir
- serve       export the repository via HTTP
- status      show changed files in the working directory
- tag         add a tag for the current tip or a given revision
- tags        list repository tags
- tip         show the tip revision
- unbundle    apply a changegroup file
- update      update or merge working directory
- verify      verify the integrity of the repository
- version     output version and copyright information
+ add          add the specified files on the next commit
+ addremove    add all new files, delete all missing files
+ annotate     show changeset information per file line
+ archive      create unversioned archive of a repository revision
+ backout      reverse effect of earlier changeset
+ bundle       create a changegroup file
+ cat          output the latest or given revisions of files
+ clone        make a copy of an existing repository
+ commit       commit the specified files or all outstanding changes
+ copy         mark files as copied for the next commit
+ diff         diff repository (or selected files)
+ export       dump the header and diffs for one or more changesets
+ grep         search for a pattern in specified files and revisions
+ heads        show current repository heads
+ help         show help for a command, extension, or list of commands
+ identify     print information about the working copy
+ import       import an ordered set of patches
+ incoming     show new changesets found in source
+ init         create a new repository in the given directory
+ locate       locate files matching specific patterns
+ log          show revision history of entire repository or files
+ manifest     output the latest or given revision of the project manifest
+ merge        Merge working directory with another revision
+ outgoing     show changesets not found in destination
+ parents      show the parents of the working dir or revision
+ paths        show definition of symbolic path names
+ pull         pull changes from the specified source
+ push         push changes to the specified destination
+ recover      roll back an interrupted transaction
+ remove       remove the specified files on the next commit
+ rename       rename files; equivalent of copy + remove
+ revert       revert files or dirs to their states as of some revision
+ rollback     roll back the last transaction in this repository
+ root         print the root (top) of the current working dir
+ serve        export the repository via HTTP
+ showconfig   show combined config settings from all hgrc files
+ status       show changed files in the working directory
+ tag          add a tag for the current tip or a given revision
+ tags         list repository tags
+ tip          show the tip revision
+ unbundle     apply a changegroup file
+ update       update or merge working directory
+ verify       verify the integrity of the repository
+ version      output version and copyright information
 %% not tested: --debugger
--- a/tests/test-help.out	Fri Oct 06 16:55:11 2006 -0500
+++ b/tests/test-help.out	Fri Oct 06 17:14:18 2006 -0500
@@ -38,92 +38,94 @@
 
 list of commands (use "hg help -v" to show aliases and global options):
 
- add         add the specified files on the next commit
- addremove   add all new files, delete all missing files
- annotate    show changeset information per file line
- archive     create unversioned archive of a repository revision
- backout     reverse effect of earlier changeset
- bundle      create a changegroup file
- cat         output the latest or given revisions of files
- clone       make a copy of an existing repository
- commit      commit the specified files or all outstanding changes
- copy        mark files as copied for the next commit
- diff        diff repository (or selected files)
- export      dump the header and diffs for one or more changesets
- grep        search for a pattern in specified files and revisions
- heads       show current repository heads
- help        show help for a command, extension, or list of commands
- identify    print information about the working copy
- import      import an ordered set of patches
- incoming    show new changesets found in source
- init        create a new repository in the given directory
- locate      locate files matching specific patterns
- log         show revision history of entire repository or files
- manifest    output the latest or given revision of the project manifest
- merge       Merge working directory with another revision
- outgoing    show changesets not found in destination
- parents     show the parents of the working dir or revision
- paths       show definition of symbolic path names
- pull        pull changes from the specified source
- push        push changes to the specified destination
- recover     roll back an interrupted transaction
- remove      remove the specified files on the next commit
- rename      rename files; equivalent of copy + remove
- revert      revert files or dirs to their states as of some revision
- rollback    roll back the last transaction in this repository
- root        print the root (top) of the current working dir
- serve       export the repository via HTTP
- status      show changed files in the working directory
- tag         add a tag for the current tip or a given revision
- tags        list repository tags
- tip         show the tip revision
- unbundle    apply a changegroup file
- update      update or merge working directory
- verify      verify the integrity of the repository
- version     output version and copyright information
- add         add the specified files on the next commit
- addremove   add all new files, delete all missing files
- annotate    show changeset information per file line
- archive     create unversioned archive of a repository revision
- backout     reverse effect of earlier changeset
- bundle      create a changegroup file
- cat         output the latest or given revisions of files
- clone       make a copy of an existing repository
- commit      commit the specified files or all outstanding changes
- copy        mark files as copied for the next commit
- diff        diff repository (or selected files)
- export      dump the header and diffs for one or more changesets
- grep        search for a pattern in specified files and revisions
- heads       show current repository heads
- help        show help for a command, extension, or list of commands
- identify    print information about the working copy
- import      import an ordered set of patches
- incoming    show new changesets found in source
- init        create a new repository in the given directory
- locate      locate files matching specific patterns
- log         show revision history of entire repository or files
- manifest    output the latest or given revision of the project manifest
- merge       Merge working directory with another revision
- outgoing    show changesets not found in destination
- parents     show the parents of the working dir or revision
- paths       show definition of symbolic path names
- pull        pull changes from the specified source
- push        push changes to the specified destination
- recover     roll back an interrupted transaction
- remove      remove the specified files on the next commit
- rename      rename files; equivalent of copy + remove
- revert      revert files or dirs to their states as of some revision
- rollback    roll back the last transaction in this repository
- root        print the root (top) of the current working dir
- serve       export the repository via HTTP
- status      show changed files in the working directory
- tag         add a tag for the current tip or a given revision
- tags        list repository tags
- tip         show the tip revision
- unbundle    apply a changegroup file
- update      update or merge working directory
- verify      verify the integrity of the repository
- version     output version and copyright information
+ add          add the specified files on the next commit
+ addremove    add all new files, delete all missing files
+ annotate     show changeset information per file line
+ archive      create unversioned archive of a repository revision
+ backout      reverse effect of earlier changeset
+ bundle       create a changegroup file
+ cat          output the latest or given revisions of files
+ clone        make a copy of an existing repository
+ commit       commit the specified files or all outstanding changes
+ copy         mark files as copied for the next commit
+ diff         diff repository (or selected files)
+ export       dump the header and diffs for one or more changesets
+ grep         search for a pattern in specified files and revisions
+ heads        show current repository heads
+ help         show help for a command, extension, or list of commands
+ identify     print information about the working copy
+ import       import an ordered set of patches
+ incoming     show new changesets found in source
+ init         create a new repository in the given directory
+ locate       locate files matching specific patterns
+ log          show revision history of entire repository or files
+ manifest     output the latest or given revision of the project manifest
+ merge        Merge working directory with another revision
+ outgoing     show changesets not found in destination
+ parents      show the parents of the working dir or revision
+ paths        show definition of symbolic path names
+ pull         pull changes from the specified source
+ push         push changes to the specified destination
+ recover      roll back an interrupted transaction
+ remove       remove the specified files on the next commit
+ rename       rename files; equivalent of copy + remove
+ revert       revert files or dirs to their states as of some revision
+ rollback     roll back the last transaction in this repository
+ root         print the root (top) of the current working dir
+ serve        export the repository via HTTP
+ showconfig   show combined config settings from all hgrc files
+ status       show changed files in the working directory
+ tag          add a tag for the current tip or a given revision
+ tags         list repository tags
+ tip          show the tip revision
+ unbundle     apply a changegroup file
+ update       update or merge working directory
+ verify       verify the integrity of the repository
+ version      output version and copyright information
+ add          add the specified files on the next commit
+ addremove    add all new files, delete all missing files
+ annotate     show changeset information per file line
+ archive      create unversioned archive of a repository revision
+ backout      reverse effect of earlier changeset
+ bundle       create a changegroup file
+ cat          output the latest or given revisions of files
+ clone        make a copy of an existing repository
+ commit       commit the specified files or all outstanding changes
+ copy         mark files as copied for the next commit
+ diff         diff repository (or selected files)
+ export       dump the header and diffs for one or more changesets
+ grep         search for a pattern in specified files and revisions
+ heads        show current repository heads
+ help         show help for a command, extension, or list of commands
+ identify     print information about the working copy
+ import       import an ordered set of patches
+ incoming     show new changesets found in source
+ init         create a new repository in the given directory
+ locate       locate files matching specific patterns
+ log          show revision history of entire repository or files
+ manifest     output the latest or given revision of the project manifest
+ merge        Merge working directory with another revision
+ outgoing     show changesets not found in destination
+ parents      show the parents of the working dir or revision
+ paths        show definition of symbolic path names
+ pull         pull changes from the specified source
+ push         push changes to the specified destination
+ recover      roll back an interrupted transaction
+ remove       remove the specified files on the next commit
+ rename       rename files; equivalent of copy + remove
+ revert       revert files or dirs to their states as of some revision
+ rollback     roll back the last transaction in this repository
+ root         print the root (top) of the current working dir
+ serve        export the repository via HTTP
+ showconfig   show combined config settings from all hgrc files
+ status       show changed files in the working directory
+ tag          add a tag for the current tip or a given revision
+ tags         list repository tags
+ tip          show the tip revision
+ unbundle     apply a changegroup file
+ update       update or merge working directory
+ verify       verify the integrity of the repository
+ version      output version and copyright information
 hg add [OPTION]... [FILE]...
 
 add the specified files on the next commit
--- a/tests/test-parse-date	Fri Oct 06 16:55:11 2006 -0500
+++ b/tests/test-parse-date	Fri Oct 06 17:14:18 2006 -0500
@@ -1,5 +1,6 @@
 #!/bin/sh
 
+# This runs with TZ="GMT"
 hg init
 echo "test-parse-date" > a
 hg add a
@@ -13,4 +14,21 @@
 hg ci -d "should fail" -m "fail"
 hg ci -d "100000000000000000 1400" -m "fail"
 hg ci -d "100000 1400000" -m "fail"
+
+# Check with local timezone other than GMT and with DST
+TZ="PST+8PDT"
+export TZ
+# PST=UTC-8 / PDT=UTC-7
+hg debugrebuildstate
+echo "a" > a
+hg ci -d "2006-07-15 13:30" -m "summer@UTC-7"
+hg debugrebuildstate
+echo "b" > a
+hg ci -d "2006-07-15 13:30 +0500" -m "summer@UTC+5"
+hg debugrebuildstate
+echo "c" > a
+hg ci -d "2006-01-15 13:30" -m "winter@UTC-8"
+hg debugrebuildstate
+echo "d" > a
+hg ci -d "2006-01-15 13:30 +0500" -m "winter@UTC+5"
 hg log --template '{date|date}\n'
--- a/tests/test-parse-date.out	Fri Oct 06 16:55:11 2006 -0500
+++ b/tests/test-parse-date.out	Fri Oct 06 17:14:18 2006 -0500
@@ -3,7 +3,7 @@
 merging with changeset 2:e6c3abc120e7
 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
 (branch merge, don't forget to commit)
-abort: invalid date: 'should fail'
+abort: invalid date: 'should fail' see hg(1) manual page for details
 transaction abort!
 rollback completed
 abort: date exceeds 32 bits: 100000000000000000
@@ -12,6 +12,10 @@
 abort: impossible time zone offset: 1400000
 transaction abort!
 rollback completed
+Sun Jan 15 13:30:00 2006 +0500
+Sun Jan 15 13:30:00 2006 -0800
+Sat Jul 15 13:30:00 2006 +0500
+Sat Jul 15 13:30:00 2006 -0700
 Sun Jun 11 00:26:40 2006 -0400
 Sat Apr 15 13:30:00 2006 +0200
 Sat Apr 15 13:30:00 2006 +0000
--- a/tests/test-ssh	Fri Oct 06 16:55:11 2006 -0500
+++ b/tests/test-ssh	Fri Oct 06 17:14:18 2006 -0500
@@ -36,6 +36,9 @@
 
 cd ..
 
+echo "# repo not found error"
+hg clone -e ./dummyssh ssh://user@dummy/nonexistent local
+
 echo "# clone remote via stream"
 hg clone -e ./dummyssh --uncompressed ssh://user@dummy/remote local-stream 2>&1 | \
   sed -e 's/[0-9][0-9.]*/XXX/g' -e 's/[KM]\(B\/sec\)/X\1/'
--- a/tests/test-ssh.out	Fri Oct 06 16:55:11 2006 -0500
+++ b/tests/test-ssh.out	Fri Oct 06 17:14:18 2006 -0500
@@ -1,4 +1,7 @@
 # creating 'remote'
+# repo not found error
+abort: no suitable response from remote hg!
+remote: abort: repository nonexistent not found!
 # clone remote via stream
 streaming all changes
 XXX files to transfer, XXX bytes of data
@@ -77,6 +80,7 @@
 remote: adding manifests
 remote: adding file changes
 remote: added 1 changesets with 1 changes to 1 files
+Got arguments 1:user@dummy 2:hg -R nonexistent serve --stdio 3: 4: 5:
 Got arguments 1:user@dummy 2:hg -R remote serve --stdio 3: 4: 5:
 Got arguments 1:user@dummy 2:hg -R remote serve --stdio 3: 4: 5:
 Got arguments 1:user@dummy 2:hg -R remote serve --stdio 3: 4: 5: