changeset 10115:c23626384b7e

merge with default
author Dirkjan Ochtman <dirkjan@ochtman.nl>
date Wed, 23 Dec 2009 13:12:36 +0100
parents f76984a27b3d (diff) 3e7663b2f3fc (current diff)
children 333193c025ad
files
diffstat 353 files changed, 9664 insertions(+), 8295 deletions(-) [+]
line wrap: on
line diff
--- a/Makefile	Wed Dec 23 13:09:11 2009 +0100
+++ b/Makefile	Wed Dec 23 13:12:36 2009 +0100
@@ -39,7 +39,7 @@
 	-$(PYTHON) setup.py clean --all # ignore errors from this command
 	find . -name '*.py[cdo]' -exec rm -f '{}' ';'
 	rm -f MANIFEST mercurial/__version__.py mercurial/*.so tests/*.err
-	rm -rf locale
+	rm -rf mercurial/locale
 	$(MAKE) -C doc clean
 
 install: install-bin install-doc
@@ -79,9 +79,9 @@
 
 update-pot: i18n/hg.pot
 
-i18n/hg.pot: $(PYTHON_FILES) help/*.txt
+i18n/hg.pot: $(PYTHON_FILES) mercurial/help/*.txt
 	$(PYTHON) i18n/hggettext mercurial/commands.py \
-	  hgext/*.py hgext/*/__init__.py help/*.txt > i18n/hg.pot
+	  hgext/*.py hgext/*/__init__.py mercurial/help/*.txt > i18n/hg.pot
         # All strings marked for translation in Mercurial contain
         # ASCII characters only. But some files contain string
         # literals like this '\037\213'. xgettext thinks it has to
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contrib/memory.py	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,36 @@
+# memory.py - track memory usage
+#
+# Copyright 2009 Matt Mackall <mpm@selenic.com> and others
+#
+# This software may be used and distributed according to the terms of the
+# GNU General Public License version 2, incorporated herein by reference.
+
+'''helper extension to measure memory usage
+
+Reads current and peak memory usage from ``/proc/self/status`` and
+prints it to ``stderr`` on exit.
+'''
+
+import atexit
+
+def memusage(ui):
+    """Report memory usage of the current process."""
+    status = None
+    result = {'peak': 0, 'rss': 0}
+    try:
+        # This will only work on systems with a /proc file system
+        # (like Linux).
+        status = open('/proc/self/status', 'r')
+        for line in status:
+            parts = line.split()
+            key = parts[0][2:-1].lower()
+            if key in result:
+                result[key] = int(parts[1])
+    finally:
+        if status is not None:
+            status.close()
+    ui.write_err(", ".join(["%s: %.1f MiB" % (key, value/1024.0)
+                            for key, value in result.iteritems()]) + "\n")
+
+def extsetup(ui):
+    atexit.register(memusage, ui)
--- a/contrib/perf.py	Wed Dec 23 13:09:11 2009 +0100
+++ b/contrib/perf.py	Wed Dec 23 13:12:36 2009 +0100
@@ -103,9 +103,10 @@
 def perflookup(ui, repo, rev):
     timer(lambda: len(repo.lookup(rev)))
 
-def perflog(ui, repo):
+def perflog(ui, repo, **opts):
     ui.pushbuffer()
-    timer(lambda: commands.log(ui, repo, rev=[], date='', user=''))
+    timer(lambda: commands.log(ui, repo, rev=[], date='', user='',
+                               copies=opts.get('rename')))
     ui.popbuffer()
 
 def perftemplating(ui, repo):
@@ -144,7 +145,8 @@
     'perftags': (perftags, []),
     'perfdirstate': (perfdirstate, []),
     'perfdirstatedirs': (perfdirstate, []),
-    'perflog': (perflog, []),
+    'perflog': (perflog,
+                [('', 'rename', False, 'ask log to follow renames')]),
     'perftemplating': (perftemplating, []),
     'perfdiffwd': (perfdiffwd, []),
 }
--- a/contrib/shrink-revlog.py	Wed Dec 23 13:09:11 2009 +0100
+++ b/contrib/shrink-revlog.py	Wed Dec 23 13:12:36 2009 +0100
@@ -20,6 +20,7 @@
 import sys, os, tempfile
 import optparse
 from mercurial import ui as ui_, hg, revlog, transaction, node, util
+from mercurial import changegroup
 
 def toposort(rl):
     write = sys.stdout.write
@@ -73,18 +74,23 @@
 def writerevs(r1, r2, order, tr):
     write = sys.stdout.write
     write('writing %d revs ' % len(order))
+
+    count = [0]
+    def progress(*args):
+        if count[0] % 1000 == 0:
+            write('.')
+        count[0] += 1
+
+    order = [r1.node(r) for r in order]
+
+    # this is a bit ugly, but it works
+    lookup = lambda x: "%020d" % r1.linkrev(r1.rev(x))
+    unlookup = lambda x: int(x, 10)
+
     try:
-        count = 0
-        for rev in order:
-            n = r1.node(rev)
-            p1, p2 = r1.parents(n)
-            l = r1.linkrev(rev)
-            t = r1.revision(n)
-            n2 = r2.addrevision(t, tr, l, p1, p2)
-
-            if count % 1000 == 0:
-                write('.')
-            count += 1
+        group = util.chunkbuffer(r1.group(order, lookup, progress))
+        chunkiter = changegroup.chunkiter(group)
+        r2.addgroup(chunkiter, unlookup, tr)
     finally:
         write('\n')
 
--- a/contrib/win32/mercurial.iss	Wed Dec 23 13:09:11 2009 +0100
+++ b/contrib/win32/mercurial.iss	Wed Dec 23 13:12:36 2009 +0100
@@ -46,6 +46,9 @@
 Source: contrib\mercurial.el; DestDir: {app}/Contrib
 Source: contrib\vim\*.*; DestDir: {app}/Contrib/Vim
 Source: contrib\zsh_completion; DestDir: {app}/Contrib
+Source: contrib\bash_completion; DestDir: {app}/Contrib
+Source: contrib\tcsh_completion; DestDir: {app}/Contrib
+Source: contrib\tcsh_completion_build.sh; DestDir: {app}/Contrib
 Source: contrib\hgk; DestDir: {app}/Contrib; DestName: hgk.tcl
 Source: contrib\win32\ReadMe.html; DestDir: {app}; Flags: isreadme
 Source: contrib\mergetools.hgrc; DestDir: {tmp};
@@ -62,9 +65,9 @@
 Source: dist\add_path.exe; DestDir: {app}
 Source: doc\*.html; DestDir: {app}\Docs
 Source: doc\style.css; DestDir: {app}\Docs
-Source: help\*.txt; DestDir: {app}\help
-Source: locale\*.*; DestDir: {app}\locale; Flags: recursesubdirs createallsubdirs
-Source: templates\*.*; DestDir: {app}\Templates; Flags: recursesubdirs createallsubdirs
+Source: mercurial\help\*.txt; DestDir: {app}\help
+Source: mercurial\locale\*.*; DestDir: {app}\locale; Flags: recursesubdirs createallsubdirs
+Source: mercurial\templates\*.*; DestDir: {app}\Templates; Flags: recursesubdirs createallsubdirs
 Source: CONTRIBUTORS; DestDir: {app}; DestName: Contributors.txt
 Source: COPYING; DestDir: {app}; DestName: Copying.txt
 
--- a/contrib/zsh_completion	Wed Dec 23 13:09:11 2009 +0100
+++ b/contrib/zsh_completion	Wed Dec 23 13:12:36 2009 +0100
@@ -734,6 +734,11 @@
   '*:files:_files'
 }
 
+_hg_cmd_summary() {
+  _arguments -s -w : $_hg_global_opts \
+  '--remote[check for push and pull]'
+}
+
 _hg_cmd_tag() {
   _arguments -s -w : $_hg_global_opts \
   '(--local -l)'{-l,--local}'[make the tag local]' \
--- a/doc/Makefile	Wed Dec 23 13:09:11 2009 +0100
+++ b/doc/Makefile	Wed Dec 23 13:12:36 2009 +0100
@@ -1,7 +1,7 @@
 SOURCES=$(wildcard *.[0-9].txt)
 MAN=$(SOURCES:%.txt=%)
 HTML=$(SOURCES:%.txt=%.html)
-GENDOC=gendoc.py ../mercurial/commands.py ../mercurial/help.py ../help/*.txt
+GENDOC=gendoc.py ../mercurial/commands.py ../mercurial/help.py ../mercurial/help/*.txt
 PREFIX=/usr/local
 MANDIR=$(PREFIX)/share/man
 INSTALL=install -c -m 644
--- a/doc/hgrc.5.txt	Wed Dec 23 13:09:11 2009 +0100
+++ b/doc/hgrc.5.txt	Wed Dec 23 13:12:36 2009 +0100
@@ -648,7 +648,10 @@
     When set to 'strict' patch content and patched files end of lines
     are preserved. When set to ``lf`` or ``crlf``, both files end of lines
     are ignored when patching and the result line endings are
-    normalized to either LF (Unix) or CRLF (Windows).
+    normalized to either LF (Unix) or CRLF (Windows). When set to
+    ``auto``, end of lines are again ignored while patching but line
+    endings in patched files are normalized to their original setting
+    on a per-file basis.
     Default: strict.
 
 
--- a/doc/rst2man.py	Wed Dec 23 13:09:11 2009 +0100
+++ b/doc/rst2man.py	Wed Dec 23 13:12:36 2009 +0100
@@ -228,7 +228,7 @@
 
                 'problematic' : ('\n.nf\n', '\n.fi\n'),
                     }
-        # NOTE dont specify the newline before a dot-command, but ensure
+        # NOTE don't specify the newline before a dot-command, but ensure
         # it is there.
 
     def comment_begin(self, text):
@@ -763,6 +763,7 @@
     def visit_line_block(self, node):
         self._line_block += 1
         if self._line_block == 1:
+            self.body.append('.sp\n')
             self.body.append('.nf\n')
         else:
             self.body.append('.in +2\n')
--- a/help/config.txt	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,37 +0,0 @@
-Mercurial reads configuration data from several files, if they exist.
-Below we list the most specific file first.
-
-On Windows, these configuration files are read:
-
-- ``<repo>\.hg\hgrc``
-- ``%USERPROFILE%\.hgrc``
-- ``%USERPROFILE%\Mercurial.ini``
-- ``%HOME%\.hgrc``
-- ``%HOME%\Mercurial.ini``
-- ``C:\Mercurial\Mercurial.ini``
-- ``HKEY_LOCAL_MACHINE\SOFTWARE\Mercurial``
-- ``<install-dir>\Mercurial.ini``
-
-On Unix, these files are read:
-
-- ``<repo>/.hg/hgrc``
-- ``$HOME/.hgrc``
-- ``/etc/mercurial/hgrc``
-- ``/etc/mercurial/hgrc.d/*.rc``
-- ``<install-root>/etc/mercurial/hgrc``
-- ``<install-root>/etc/mercurial/hgrc.d/*.rc``
-
-The configuration files for Mercurial use a simple ini-file format. A
-configuration file consists of sections, led by a ``[section]`` header
-and followed by ``name = value`` entries::
-
-  [ui]
-  username = Firstname Lastname <firstname.lastname@example.net>
-  verbose = True
-
-This above entries will be referred to as ``ui.username`` and
-``ui.verbose``, respectively. Please see the hgrc man page for a full
-description of the possible configuration values:
-
-- on Unix-like systems: ``man hgrc``
-- online: http://www.selenic.com/mercurial/hgrc.5.html
--- a/help/dates.txt	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-Some commands allow the user to specify a date, e.g.:
-
-- backout, commit, import, tag: Specify the commit date.
-- log, revert, update: Select revision(s) by date.
-
-Many date formats are valid. Here are some examples:
-
-- ``Wed Dec 6 13:18:29 2006`` (local timezone assumed)
-- ``Dec 6 13:18 -0600`` (year assumed, time offset provided)
-- ``Dec 6 13:18 UTC`` (UTC and GMT are aliases for +0000)
-- ``Dec 6`` (midnight)
-- ``13:18`` (today assumed)
-- ``3:39`` (3:39AM assumed)
-- ``3:39pm`` (15:39)
-- ``2006-12-06 13:18:29`` (ISO 8601 format)
-- ``2006-12-6 13:18``
-- ``2006-12-6``
-- ``12-6``
-- ``12/6``
-- ``12/6/6`` (Dec 6 2006)
-
-Lastly, there is Mercurial's internal format:
-
-- ``1165432709 0`` (Wed Dec 6 13:18:29 2006 UTC)
-
-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).
-
-The log command also accepts date ranges:
-
-- ``<{datetime}`` - at or before a given date/time
-- ``>{datetime}`` - on or after a given date/time
-- ``{datetime} to {datetime}`` - a date range, inclusive
-- ``-{days}`` - within a given number of days of today
--- a/help/diffs.txt	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-Mercurial's default format for showing changes between two versions of
-a file is compatible with the unified format of GNU diff, which can be
-used by GNU patch and many other standard tools.
-
-While this standard format is often enough, it does not encode the
-following information:
-
-- executable status and other permission bits
-- copy or rename information
-- changes in binary files
-- creation or deletion of empty files
-
-Mercurial also supports the extended diff format from the git VCS
-which addresses these limitations. The git diff format is not produced
-by default because a few widespread tools still do not understand this
-format.
-
-This means that when generating diffs from a Mercurial repository
-(e.g. with "hg export"), you should be careful about things like file
-copies and renames or other things mentioned above, because when
-applying a standard diff to a different repository, this extra
-information is lost. Mercurial's internal operations (like push and
-pull) are not affected by this, because they use an internal binary
-format for communicating changes.
-
-To make Mercurial produce the git extended diff format, use the --git
-option available for many commands, or set 'git = True' in the [diff]
-section of your hgrc. You do not need to set this option when
-importing diffs in this format or using them in the mq extension.
--- a/help/environment.txt	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,76 +0,0 @@
-HG
-    Path to the 'hg' executable, automatically passed when running
-    hooks, extensions or external tools. If unset or empty, this is
-    the hg executable's name if it's frozen, or an executable named
-    'hg' (with %PATHEXT% [defaulting to COM/EXE/BAT/CMD] extensions on
-    Windows) is searched.
-
-HGEDITOR
-    This is the name of the editor to run when committing. See EDITOR.
-
-    (deprecated, use .hgrc)
-
-HGENCODING
-    This overrides the default locale setting detected by Mercurial.
-    This setting is used to convert data including usernames,
-    changeset descriptions, tag names, and branches. This setting can
-    be overridden with the --encoding command-line option.
-
-HGENCODINGMODE
-    This sets Mercurial's behavior for handling unknown characters
-    while transcoding user input. The default is "strict", which
-    causes Mercurial to abort if it can't map a character. Other
-    settings include "replace", which replaces unknown characters, and
-    "ignore", which drops them. This setting can be overridden with
-    the --encodingmode command-line option.
-
-HGMERGE
-    An executable to use for resolving merge conflicts. The program
-    will be executed with three arguments: local file, remote file,
-    ancestor file.
-
-    (deprecated, use .hgrc)
-
-HGRCPATH
-    A list of files or directories to search for hgrc files. Item
-    separator is ":" on Unix, ";" on Windows. If HGRCPATH is not set,
-    platform default search path is used. If empty, only the .hg/hgrc
-    from the current repository is read.
-
-    For each element in HGRCPATH:
-
-    - if it's a directory, all files ending with .rc are added
-    - otherwise, the file itself will be added
-
-HGUSER
-    This is the string used as the author of a commit. If not set,
-    available values will be considered in this order:
-
-    - HGUSER (deprecated)
-    - hgrc files from the HGRCPATH
-    - EMAIL
-    - interactive prompt
-    - LOGNAME (with ``@hostname`` appended)
-
-    (deprecated, use .hgrc)
-
-EMAIL
-    May be used as the author of a commit; see HGUSER.
-
-LOGNAME
-    May be used as the author of a commit; see HGUSER.
-
-VISUAL
-    This is the name of the editor to use when committing. See EDITOR.
-
-EDITOR
-    Sometimes Mercurial needs to open a text file in an editor for a
-    user to modify, for example when writing commit messages. The
-    editor it uses is determined by looking at the environment
-    variables HGEDITOR, VISUAL and EDITOR, in that order. The first
-    non-empty one is chosen. If all of them are empty, the editor
-    defaults to 'vi'.
-
-PYTHONPATH
-    This is used by Python to find imported modules and may need to be
-    set appropriately if this Mercurial is not installed system-wide.
--- a/help/extensions.txt	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-Mercurial has the ability to add new features through the use of
-extensions. Extensions may add new commands, add options to
-existing commands, change the default behavior of commands, or
-implement hooks.
-
-Extensions are not loaded by default for a variety of reasons:
-they can increase startup overhead; they may be meant for advanced
-usage only; they may provide potentially dangerous abilities (such
-as letting you destroy or modify history); they might not be ready
-for prime time; or they may alter some usual behaviors of stock
-Mercurial. It is thus up to the user to activate extensions as
-needed.
-
-To enable the "foo" extension, either shipped with Mercurial or in
-the Python search path, create an entry for it in your hgrc, like
-this::
-
-  [extensions]
-  foo =
-
-You may also specify the full path to an extension::
-
-  [extensions]
-  myfeature = ~/.hgext/myfeature.py
-
-To explicitly disable an extension enabled in an hgrc of broader
-scope, prepend its path with !::
-
-  [extensions]
-  # disabling extension bar residing in /path/to/extension/bar.py
-  hgext.bar = !/path/to/extension/bar.py
-  # ditto, but no path was supplied for extension baz
-  hgext.baz = !
--- a/help/multirevs.txt	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
-When Mercurial accepts more than one revision, they may be specified
-individually, or provided as a topologically continuous range,
-separated by the ":" character.
-
-The syntax of range notation is [BEGIN]:[END], where BEGIN and END are
-revision identifiers. Both BEGIN and END are optional. If BEGIN is not
-specified, it defaults to revision number 0. If END is not specified,
-it defaults to the tip. The range ":" thus means "all revisions".
-
-If BEGIN is greater than END, revisions are treated in reverse order.
-
-A range acts as a closed interval. This means that a range of 3:5
-gives 3, 4 and 5. Similarly, a range of 9:6 gives 9, 8, 7, and 6.
--- a/help/patterns.txt	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +0,0 @@
-Mercurial accepts several notations for identifying one or more files
-at a time.
-
-By default, Mercurial treats filenames as shell-style extended glob
-patterns.
-
-Alternate pattern notations must be specified explicitly.
-
-To use a plain path name without any pattern matching, start it with
-``path:``. These path names must completely match starting at the
-current repository root.
-
-To use an extended glob, start a name with ``glob:``. Globs are rooted
-at the current directory; a glob such as ``*.c`` will only match files
-in the current directory ending with ``.c``.
-
-The supported glob syntax extensions are ``**`` to match any string
-across path separators and ``{a,b}`` to mean "a or b".
-
-To use a Perl/Python regular expression, start a name with ``re:``.
-Regexp pattern matching is anchored at the root of the repository.
-
-Plain examples::
-
-  path:foo/bar   a name bar in a directory named foo in the root
-                 of the repository
-  path:path:name a file or directory named "path:name"
-
-Glob examples::
-
-  glob:*.c       any name ending in ".c" in the current directory
-  *.c            any name ending in ".c" in the current directory
-  **.c           any name ending in ".c" in any subdirectory of the
-                 current directory including itself.
-  foo/*.c        any name ending in ".c" in the directory foo
-  foo/**.c       any name ending in ".c" in any subdirectory of foo
-                 including itself.
-
-Regexp examples::
-
-  re:.*\.c$      any name ending in ".c", anywhere in the repository
--- a/help/revisions.txt	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-Mercurial supports several ways to specify individual revisions.
-
-A plain integer is treated as a revision number. Negative integers are
-treated as sequential offsets from the tip, with -1 denoting the tip,
--2 denoting the revision prior to the tip, and so forth.
-
-A 40-digit hexadecimal string is treated as a unique revision
-identifier.
-
-A hexadecimal string less than 40 characters long is treated as a
-unique revision identifier and is referred to as a short-form
-identifier. A short-form identifier is only valid if it is the prefix
-of exactly one full-length identifier.
-
-Any other string is treated as a tag or branch name. A tag name is a
-symbolic name associated with a revision identifier. A branch name
-denotes the tipmost revision of that branch. Tag and branch names must
-not contain the ":" character.
-
-The reserved name "tip" is a special tag that always identifies the
-most recent revision.
-
-The reserved name "null" indicates the null revision. This is the
-revision of an empty repository, and the parent of revision 0.
-
-The reserved name "." indicates the working directory parent. If no
-working directory is checked out, it is equivalent to null. If an
-uncommitted merge is in progress, "." is the revision of the first
-parent.
--- a/help/templates.txt	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,113 +0,0 @@
-Mercurial allows you to customize output of commands through
-templates. You can either pass in a template from the command
-line, via the --template option, or select an existing
-template-style (--style).
-
-You can customize output for any "log-like" command: log,
-outgoing, incoming, tip, parents, heads and glog.
-
-Three styles are packaged with Mercurial: default (the style used
-when no explicit preference is passed), compact and changelog.
-Usage::
-
-    $ hg log -r1 --style changelog
-
-A template is a piece of text, with markup to invoke variable
-expansion::
-
-    $ hg log -r1 --template "{node}\n"
-    b56ce7b07c52de7d5fd79fb89701ea538af65746
-
-Strings in curly braces are called keywords. The availability of
-keywords depends on the exact context of the templater. These
-keywords are usually available for templating a log-like command:
-
-:author:    String. The unmodified author of the changeset.
-:branches:  String. The name of the branch on which the changeset
-            was committed. Will be empty if the branch name was
-            default.
-:date:      Date information. The date when the changeset was
-            committed.
-:desc:      String. The text of the changeset description.
-:diffstat:  String. Statistics of changes with the following
-            format: "modified files: +added/-removed lines"
-:files:     List of strings. All files modified, added, or removed
-            by this changeset.
-:file_adds: List of strings. Files added by this changeset.
-:file_mods: List of strings. Files modified by this changeset.
-:file_dels: List of strings. Files removed by this changeset.
-:node:      String. The changeset identification hash, as a
-            40-character hexadecimal string.
-:parents:   List of strings. The parents of the changeset.
-:rev:       Integer. The repository-local changeset revision
-            number.
-:tags:      List of strings. Any tags associated with the
-            changeset.
-:latesttag: String. Most recent global tag in the ancestors of this
-            changeset.
-:latesttagdistance: Integer. Longest path to the latest tag.
-
-The "date" keyword does not produce human-readable output. If you
-want to use a date in your output, you can use a filter to process
-it. Filters are functions which return a string based on the input
-variable. You can also use a chain of filters to get the desired
-output::
-
-   $ hg tip --template "{date|isodate}\n"
-   2008-08-21 18:22 +0000
-
-List of filters:
-
-:addbreaks:   Any text. Add an XHTML "<br />" tag before the end of
-              every line except the last.
-:age:         Date. Returns a human-readable date/time difference
-              between the given date/time and the current
-              date/time.
-:basename:    Any text. Treats the text as a path, and returns the
-              last component of the path after splitting by the
-              path separator (ignoring trailing separators). For
-              example, "foo/bar/baz" becomes "baz" and "foo/bar//"
-              becomes "bar".
-:stripdir:    Treat the text as path and strip a directory level,
-              if possible. For example, "foo" and "foo/bar" becomes
-              "foo".
-:date:        Date. Returns a date in a Unix date format, including
-              the timezone: "Mon Sep 04 15:13:13 2006 0700".
-:domain:      Any text. Finds the first string that looks like an
-              email address, and extracts just the domain
-              component. Example: ``User <user@example.com>`` becomes
-              ``example.com``.
-:email:       Any text. Extracts the first string that looks like
-              an email address. Example: ``User <user@example.com>``
-              becomes ``user@example.com``.
-:escape:      Any text. Replaces the special XML/XHTML characters
-              "&", "<" and ">" with XML entities.
-:fill68:      Any text. Wraps the text to fit in 68 columns.
-:fill76:      Any text. Wraps the text to fit in 76 columns.
-:firstline:   Any text. Returns the first line of text.
-:nonempty:    Any text. Returns '(none)' if the string is empty.
-:hgdate:      Date. Returns the date as a pair of numbers:
-              "1157407993 25200" (Unix timestamp, timezone offset).
-:isodate:     Date. Returns the date in ISO 8601 format:
-              "2009-08-18 13:00 +0200".
-:isodatesec:  Date. Returns the date in ISO 8601 format, including
-              seconds: "2009-08-18 13:00:13 +0200". See also the
-              rfc3339date filter.
-:localdate:   Date. Converts a date to local date.
-:obfuscate:   Any text. Returns the input text rendered as a
-              sequence of XML entities.
-:person:      Any text. Returns the text before an email address.
-:rfc822date:  Date. Returns a date using the same format used in
-              email headers: "Tue, 18 Aug 2009 13:00:13 +0200".
-:rfc3339date: Date. Returns a date using the Internet date format
-              specified in RFC 3339: "2009-08-18T13:00:13+02:00".
-:short:       Changeset hash. Returns the short form of a changeset
-              hash, i.e. a 12-byte hexadecimal string.
-:shortdate:   Date. Returns a date like "2006-09-18".
-:strip:       Any text. Strips all leading and trailing whitespace.
-:tabindent:   Any text. Returns the text, with every line except
-              the first starting with a tab character.
-:urlescape:   Any text. Escapes all "special" characters. For
-              example, "foo bar" becomes "foo%20bar".
-:user:        Any text. Returns the user portion of an email
-              address.
--- a/help/urls.txt	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,63 +0,0 @@
-Valid URLs are of the form::
-
-  local/filesystem/path[#revision]
-  file://local/filesystem/path[#revision]
-  http://[user[:pass]@]host[:port]/[path][#revision]
-  https://[user[:pass]@]host[:port]/[path][#revision]
-  ssh://[user[:pass]@]host[:port]/[path][#revision]
-
-Paths in the local filesystem can either point to Mercurial
-repositories or to bundle files (as created by 'hg bundle' or 'hg
-incoming --bundle').
-
-An optional identifier after # indicates a particular branch, tag, or
-changeset to use from the remote repository. See also 'hg help
-revisions'.
-
-Some features, such as pushing to http:// and https:// URLs are only
-possible if the feature is explicitly enabled on the remote Mercurial
-server.
-
-Some notes about using SSH with Mercurial:
-
-- SSH requires an accessible shell account on the destination machine
-  and a copy of hg in the remote path or specified with as remotecmd.
-- path is relative to the remote user's home directory by default. Use
-  an extra slash at the start of a path to specify an absolute path::
-
-    ssh://example.com//tmp/repository
-
-- Mercurial doesn't use its own compression via SSH; the right thing
-  to do is to configure it in your ~/.ssh/config, e.g.::
-
-    Host *.mylocalnetwork.example.com
-      Compression no
-    Host *
-      Compression yes
-
-  Alternatively specify "ssh -C" as your ssh command in your hgrc or
-  with the --ssh command line option.
-
-These URLs can all be stored in your hgrc with path aliases under the
-[paths] section like so::
-
-  [paths]
-  alias1 = URL1
-  alias2 = URL2
-  ...
-
-You can then use the alias for any command that uses a URL (for
-example 'hg pull alias1' will be treated as 'hg pull URL1').
-
-Two path aliases are special because they are used as defaults when
-you do not provide the URL to a command:
-
-default:
-  When you create a repository with hg clone, the clone command saves
-  the location of the source repository as the new repository's
-  'default' path. This is then used when you omit path from push- and
-  pull-like commands (including incoming and outgoing).
-
-default-push:
-  The push command will look for a path named 'default-push', and
-  prefer it over 'default' if both are defined.
--- a/hgext/bookmarks.py	Wed Dec 23 13:09:11 2009 +0100
+++ b/hgext/bookmarks.py	Wed Dec 23 13:12:36 2009 +0100
@@ -33,27 +33,7 @@
 from mercurial import util, commands, localrepo, repair, extensions
 import os
 
-def parse(repo):
-    '''Parse .hg/bookmarks file and return a dictionary
-
-    Bookmarks are stored as {HASH}\\s{NAME}\\n (localtags format) values
-    in the .hg/bookmarks file. They are read by the parse() method and
-    returned as a dictionary with name => hash values.
-
-    The parsed dictionary is cached until a write() operation is done.
-    '''
-    try:
-        if repo._bookmarks:
-            return repo._bookmarks
-        repo._bookmarks = {}
-        for line in repo.opener('bookmarks'):
-            sha, refspec = line.strip().split(' ', 1)
-            repo._bookmarks[refspec] = repo.lookup(sha)
-    except:
-        pass
-    return repo._bookmarks
-
-def write(repo, refs):
+def write(repo):
     '''Write bookmarks
 
     Write the given bookmark => hash dictionary to the .hg/bookmarks file
@@ -62,9 +42,10 @@
     We also store a backup of the previous state in undo.bookmarks that
     can be copied back on rollback.
     '''
+    refs = repo._bookmarks
     if os.path.exists(repo.join('bookmarks')):
         util.copyfile(repo.join('bookmarks'), repo.join('undo.bookmarks'))
-    if current(repo) not in refs:
+    if repo._bookmarkcurrent not in refs:
         setcurrent(repo, None)
     wlock = repo.wlock()
     try:
@@ -75,40 +56,21 @@
     finally:
         wlock.release()
 
-def current(repo):
-    '''Get the current bookmark
-
-    If we use gittishsh branches we have a current bookmark that
-    we are on. This function returns the name of the bookmark. It
-    is stored in .hg/bookmarks.current
-    '''
-    if repo._bookmarkcurrent:
-        return repo._bookmarkcurrent
-    mark = None
-    if os.path.exists(repo.join('bookmarks.current')):
-        file = repo.opener('bookmarks.current')
-        # No readline() in posixfile_nt, reading everything is cheap
-        mark = (file.readlines() or [''])[0]
-        if mark == '':
-            mark = None
-        file.close()
-    repo._bookmarkcurrent = mark
-    return mark
-
 def setcurrent(repo, mark):
     '''Set the name of the bookmark that we are currently on
 
     Set the name of the bookmark that we are on (hg update <bookmark>).
     The name is recorded in .hg/bookmarks.current
     '''
-    if current(repo) == mark:
+    current = repo._bookmarkcurrent
+    if current == mark:
         return
 
-    refs = parse(repo)
+    refs = repo._bookmarks
 
     # do not update if we do update to a rev equal to the current bookmark
     if (mark and mark not in refs and
-        current(repo) and refs[current(repo)] == repo.changectx('.').node()):
+        current and refs[current] == repo.changectx('.').node()):
         return
     if mark not in refs:
         mark = ''
@@ -135,7 +97,7 @@
     the bookmark is assigned to that revision.
     '''
     hexfn = ui.debugflag and hex or short
-    marks = parse(repo)
+    marks = repo._bookmarks
     cur   = repo.changectx('.').node()
 
     if rename:
@@ -147,9 +109,9 @@
             raise util.Abort(_("new bookmark name required"))
         marks[mark] = marks[rename]
         del marks[rename]
-        if current(repo) == rename:
+        if repo._bookmarkcurrent == rename:
             setcurrent(repo, mark)
-        write(repo, marks)
+        write(repo)
         return
 
     if delete:
@@ -157,10 +119,10 @@
             raise util.Abort(_("bookmark name required"))
         if mark not in marks:
             raise util.Abort(_("a bookmark of this name does not exist"))
-        if mark == current(repo):
+        if mark == repo._bookmarkcurrent:
             setcurrent(repo, None)
         del marks[mark]
-        write(repo, marks)
+        write(repo)
         return
 
     if mark != None:
@@ -178,7 +140,7 @@
         else:
             marks[mark] = repo.changectx('.').node()
             setcurrent(repo, mark)
-        write(repo, marks)
+        write(repo)
         return
 
     if mark is None:
@@ -189,7 +151,8 @@
         else:
             for bmark, n in marks.iteritems():
                 if ui.configbool('bookmarks', 'track.current'):
-                    prefix = (bmark == current(repo) and n == cur) and '*' or ' '
+                    current = repo._bookmarkcurrent
+                    prefix = (bmark == current and n == cur) and '*' or ' '
                 else:
                     prefix = (n == cur) and '*' or ' '
 
@@ -219,7 +182,7 @@
     the mercurial.strip method. This usually happens during
     qpush and qpop"""
     revisions = _revstostrip(repo.changelog, node)
-    marks = parse(repo)
+    marks = repo._bookmarks
     update = []
     for mark, n in marks.iteritems():
         if repo.changelog.rev(n) in revisions:
@@ -228,30 +191,75 @@
     if len(update) > 0:
         for m in update:
             marks[m] = repo.changectx('.').node()
-        write(repo, marks)
+        write(repo)
 
 def reposetup(ui, repo):
     if not repo.local():
         return
 
-    # init a bookmark cache as otherwise we would get a infinite reading
-    # in lookup()
-    repo._bookmarks = None
-    repo._bookmarkcurrent = None
+    class bookmark_repo(repo.__class__):
+
+        @util.propertycache
+        def _bookmarks(self):
+            '''Parse .hg/bookmarks file and return a dictionary
+
+            Bookmarks are stored as {HASH}\\s{NAME}\\n (localtags format) values
+            in the .hg/bookmarks file. They are read returned as a dictionary
+            with name => hash values.
+            '''
+            try:
+                bookmarks = {}
+                for line in self.opener('bookmarks'):
+                    sha, refspec = line.strip().split(' ', 1)
+                    bookmarks[refspec] = super(bookmark_repo, self).lookup(sha)
+            except:
+                pass
+            return bookmarks
 
-    class bookmark_repo(repo.__class__):
+        @util.propertycache
+        def _bookmarkcurrent(self):
+            '''Get the current bookmark
+
+            If we use gittishsh branches we have a current bookmark that
+            we are on. This function returns the name of the bookmark. It
+            is stored in .hg/bookmarks.current
+            '''
+            mark = None
+            if os.path.exists(self.join('bookmarks.current')):
+                file = self.opener('bookmarks.current')
+                # No readline() in posixfile_nt, reading everything is cheap
+                mark = (file.readlines() or [''])[0]
+                if mark == '':
+                    mark = None
+                file.close()
+            return mark
+
         def rollback(self):
             if os.path.exists(self.join('undo.bookmarks')):
                 util.rename(self.join('undo.bookmarks'), self.join('bookmarks'))
             return super(bookmark_repo, self).rollback()
 
         def lookup(self, key):
-            if self._bookmarks is None:
-                self._bookmarks = parse(self)
             if key in self._bookmarks:
                 key = self._bookmarks[key]
             return super(bookmark_repo, self).lookup(key)
 
+        def _bookmarksupdate(self, parents, node):
+            marks = self._bookmarks
+            update = False
+            if ui.configbool('bookmarks', 'track.current'):
+                mark = self._bookmarkcurrent
+                if mark and marks[mark] in parents:
+                    marks[mark] = node
+                    update = True
+            else:
+                for mark, n in marks.items():
+                    if n in parents:
+                        marks[mark] = node
+                        update = True
+            if update:
+                write(self)
+
         def commitctx(self, ctx, error=False):
             """Add a revision to the repository and
             move the bookmark"""
@@ -263,20 +271,8 @@
                 parents = self.changelog.parents(node)
                 if parents[1] == nullid:
                     parents = (parents[0],)
-                marks = parse(self)
-                update = False
-                if ui.configbool('bookmarks', 'track.current'):
-                    mark = current(self)
-                    if mark and marks[mark] in parents:
-                        marks[mark] = node
-                        update = True
-                else:
-                    for mark, n in marks.items():
-                        if n in parents:
-                            marks[mark] = node
-                            update = True
-                if update:
-                    write(self, marks)
+
+                self._bookmarksupdate(parents, node)
                 return node
             finally:
                 wlock.release()
@@ -290,26 +286,14 @@
                 # We have more heads than before
                 return result
             node = self.changelog.tip()
-            marks = parse(self)
-            update = False
-            if ui.configbool('bookmarks', 'track.current'):
-                mark = current(self)
-                if mark and marks[mark] in parents:
-                    marks[mark] = node
-                    update = True
-            else:
-                for mark, n in marks.items():
-                    if n in parents:
-                        marks[mark] = node
-                        update = True
-            if update:
-                write(self, marks)
+
+            self._bookmarksupdate(parents, node)
             return result
 
         def _findtags(self):
             """Merge bookmarks with normal tags"""
             (tags, tagtypes) = super(bookmark_repo, self)._findtags()
-            tags.update(parse(self))
+            tags.update(self._bookmarks)
             return (tags, tagtypes)
 
     repo.__class__ = bookmark_repo
--- a/hgext/color.py	Wed Dec 23 13:09:11 2009 +0100
+++ b/hgext/color.py	Wed Dec 23 13:12:36 2009 +0100
@@ -56,6 +56,8 @@
   diff.inserted = green
   diff.changed = white
   diff.trailingwhitespace = bold red_background
+
+  bookmarks.current = green
 '''
 
 import os, sys
@@ -138,6 +140,21 @@
                     'clean': ['none'],
                     'copied': ['none'], }
 
+_bookmark_effects = { 'current': ['green'] }
+
+def colorbookmarks(orig, ui, repo, *pats, **opts):
+    def colorize(orig, s):
+        lines = s.split('\n')
+        for i, line in enumerate(lines):
+            if line.startswith(" *"):
+                lines[i] = render_effects(line, _bookmark_effects['current'])
+        orig('\n'.join(lines))
+    oldwrite = extensions.wrapfunction(ui, 'write', colorize)
+    try:
+        orig(ui, repo, *pats, **opts)
+    finally:
+        ui.write = oldwrite
+
 def colorqseries(orig, ui, repo, *dummy, **opts):
     '''run the qseries command with colored output'''
     ui.pushbuffer()
@@ -213,6 +230,16 @@
     finally:
         ui.write = oldwrite
 
+def colorchurn(orig, ui, repo, *pats, **opts):
+    '''run the churn command with colored output'''
+    if not opts.get('diffstat'):
+        return orig(ui, repo, *pats, **opts)
+    oldwrite = extensions.wrapfunction(ui, 'write', colordiffstat)
+    try:
+        orig(ui, repo, *pats, **opts)
+    finally:
+        ui.write = oldwrite
+
 _diff_prefixes = [('diff', 'diffline'),
                   ('copy', 'extended'),
                   ('rename', 'extended'),
@@ -259,7 +286,19 @@
 
     if mq and rec:
         _setupcmd(ui, 'qrecord', rec.cmdtable, colordiff, _diff_effects)
+    try:
+        churn = extensions.find('churn')
+        _setupcmd(ui, 'churn', churn.cmdtable, colorchurn, _diff_effects)
+    except KeyError:
+        churn = None
 
+    try:
+        bookmarks = extensions.find('bookmarks')
+        _setupcmd(ui, 'bookmarks', bookmarks.cmdtable, colorbookmarks,
+                  _bookmark_effects)
+    except KeyError:
+        # The bookmarks extension is not enabled
+        pass
 
 def _setupcmd(ui, cmd, table, func, effectsmap):
     '''patch in command to command table and load effect map'''
@@ -268,10 +307,14 @@
         if (opts['no_color'] or opts['color'] == 'never' or
             (opts['color'] == 'auto' and (os.environ.get('TERM') == 'dumb'
                                           or not sys.__stdout__.isatty()))):
+            del opts['no_color']
+            del opts['color']
             return orig(*args, **opts)
 
         oldshowpatch = extensions.wrapfunction(cmdutil.changeset_printer,
                                                'showpatch', colorshowpatch)
+        del opts['no_color']
+        del opts['color']
         try:
             if func is not None:
                 return func(orig, *args, **opts)
--- a/hgext/convert/__init__.py	Wed Dec 23 13:09:11 2009 +0100
+++ b/hgext/convert/__init__.py	Wed Dec 23 13:12:36 2009 +0100
@@ -165,6 +165,15 @@
         matched. If a match occurs, then the conversion process will
         add the most recent revision on the branch indicated in the
         regex as the second parent of the changeset.
+    --config hook.cvslog
+        Specify a Python function to be called at the end of gathering
+        the CVS log. The function is passed a list with the log entries,
+        and can modify the entries in-place, or add or delete them.
+    --config hook.cvschangesets
+        Specify a Python function to be called after the changesets
+        are calculated from the the CVS log. The function is passed
+        a list with the changeset entries, and can modify the changesets
+        in-place, or add or delete them.
 
     An additional "debugcvsps" Mercurial command allows the builtin
     changeset merging code to be run without doing a conversion. Its
--- a/hgext/convert/convcmd.py	Wed Dec 23 13:09:11 2009 +0100
+++ b/hgext/convert/convcmd.py	Wed Dec 23 13:12:36 2009 +0100
@@ -48,6 +48,8 @@
 
 def convertsource(ui, path, type, rev):
     exceptions = []
+    if type and type not in [s[0] for s in source_converters]:
+        raise util.Abort(_('%s: invalid source repository type') % type)
     for name, source, sortmode in source_converters:
         try:
             if not type or name == type:
@@ -60,6 +62,8 @@
     raise util.Abort(_('%s: missing or unsupported repository') % path)
 
 def convertsink(ui, path, type):
+    if type and type not in [s[0] for s in sink_converters]:
+        raise util.Abort(_('%s: invalid destination repository type') % type)
     for name, sink in sink_converters:
         try:
             if not type or name == type:
--- a/hgext/convert/cvsps.py	Wed Dec 23 13:09:11 2009 +0100
+++ b/hgext/convert/cvsps.py	Wed Dec 23 13:12:36 2009 +0100
@@ -11,6 +11,7 @@
 import cPickle as pickle
 from mercurial import util
 from mercurial.i18n import _
+from mercurial import hook
 
 class logentry(object):
     '''Class logentry has the following attributes:
@@ -444,6 +445,8 @@
 
     ui.status(_('%d log entries\n') % len(log))
 
+    hook.hook(ui, None, "cvslog", True, log=log)
+
     return log
 
 
@@ -730,6 +733,8 @@
 
     ui.status(_('%d changeset entries\n') % len(changesets))
 
+    hook.hook(ui, None, "cvschangesets", True, changesets=changesets)
+
     return changesets
 
 
--- a/hgext/convert/filemap.py	Wed Dec 23 13:09:11 2009 +0100
+++ b/hgext/convert/filemap.py	Wed Dec 23 13:12:36 2009 +0100
@@ -10,11 +10,11 @@
 from common import SKIPREV, converter_source
 
 def rpairs(name):
-    yield '.', name
     e = len(name)
     while e != -1:
         yield name[:e], name[e+1:]
         e = name.rfind('/', 0, e)
+    yield '.', name
 
 class filemapper(object):
     '''Map and filter filenames when importing.
@@ -82,7 +82,7 @@
             exc = self.lookup(name, self.exclude)[0]
         else:
             exc = ''
-        if not inc or exc:
+        if (not self.include and exc) or (len(inc) <= len(exc)):
             return None
         newpre, pre, suf = self.lookup(name, self.rename)
         if newpre:
--- a/hgext/extdiff.py	Wed Dec 23 13:09:11 2009 +0100
+++ b/hgext/extdiff.py	Wed Dec 23 13:12:36 2009 +0100
@@ -146,10 +146,10 @@
         if node2:
             dir2 = snapshot(ui, repo, modadd, node2, tmproot)[0]
         elif len(common) > 1:
-            #we only actually need to get the files to copy back to the working
-            #dir in this case (because the other cases are: diffing 2 revisions
-            #or single file -- in which case the file is already directly passed
-            #to the diff tool).
+            #we only actually need to get the files to copy back to
+            #the working dir in this case (because the other cases
+            #are: diffing 2 revisions or single file -- in which case
+            #the file is already directly passed to the diff tool).
             dir2, fns_and_mtime = snapshot(ui, repo, modadd, None, tmproot)
         else:
             # This lets the diff tool open the changed file directly
@@ -169,8 +169,9 @@
                     dir1b = os.devnull
             dir2 = os.path.join(dir2root, dir2, common_file)
 
-        # Function to quote file/dir names in the argument string
-        # When not operating in 3-way mode, an empty string is returned for parent2
+        # Function to quote file/dir names in the argument string.
+        # When not operating in 3-way mode, an empty string is
+        # returned for parent2
         replace = dict(parent=dir1a, parent1=dir1a, parent2=dir1b, child=dir2)
         def quote(match):
             key = match.group()[1:]
@@ -258,13 +259,14 @@
             doc = _('''\
 use %(path)s to diff repository (or selected files)
 
-    Show differences between revisions for the specified files, using the
-    %(path)s program.
+    Show differences between revisions for the specified files, using
+    the %(path)s program.
 
-    When two revision arguments are given, then changes are shown between
-    those revisions. If only one revision is specified then that revision is
-    compared to the working directory, and, when no revisions are specified,
-    the working directory files are compared to its parent.\
+    When two revision arguments are given, then changes are shown
+    between those revisions. If only one revision is specified then
+    that revision is compared to the working directory, and, when no
+    revisions are specified, the working directory files are compared
+    to its parent.\
 ''') % dict(path=util.uirepr(path))
 
             # We must translate the docstring right away since it is
--- a/hgext/graphlog.py	Wed Dec 23 13:09:11 2009 +0100
+++ b/hgext/graphlog.py	Wed Dec 23 13:12:36 2009 +0100
@@ -250,7 +250,8 @@
     if path: # could be reset in canonpath
         revdag = graphmod.filerevs(repo, path, start, stop, limit)
     else:
-        stop = max(stop, start - limit + 1)
+        if limit is not None:
+            stop = max(stop, start - limit + 1)
         revdag = graphmod.revisions(repo, start, stop)
 
     displayer = show_changeset(ui, repo, opts, buffered=True)
@@ -260,7 +261,7 @@
 def graphrevs(repo, nodes, opts):
     limit = cmdutil.loglimit(opts)
     nodes.reverse()
-    if limit < sys.maxint:
+    if limit is not None:
         nodes = nodes[:limit]
     return graphmod.nodes(repo, nodes)
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hgext/inotify/linuxserver.py	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,441 @@
+# linuxserver.py - inotify status server for linux
+#
+# Copyright 2006, 2007, 2008 Bryan O'Sullivan <bos@serpentine.com>
+# Copyright 2007, 2008 Brendan Cully <brendan@kublai.com>
+#
+# This software may be used and distributed according to the terms of the
+# GNU General Public License version 2, incorporated herein by reference.
+
+from mercurial.i18n import _
+from mercurial import osutil, util
+import common
+import server
+import errno, os, select, stat, sys, time
+
+try:
+    import linux as inotify
+    from linux import watcher
+except ImportError:
+    raise
+
+def walkrepodirs(dirstate, absroot):
+    '''Iterate over all subdirectories of this repo.
+    Exclude the .hg directory, any nested repos, and ignored dirs.'''
+    def walkit(dirname, top):
+        fullpath = server.join(absroot, dirname)
+        try:
+            for name, kind in osutil.listdir(fullpath):
+                if kind == stat.S_IFDIR:
+                    if name == '.hg':
+                        if not top:
+                            return
+                    else:
+                        d = server.join(dirname, name)
+                        if dirstate._ignore(d):
+                            continue
+                        for subdir in walkit(d, False):
+                            yield subdir
+        except OSError, err:
+            if err.errno not in server.walk_ignored_errors:
+                raise
+        yield fullpath
+
+    return walkit('', True)
+
+def _explain_watch_limit(ui, dirstate, rootabs):
+    path = '/proc/sys/fs/inotify/max_user_watches'
+    try:
+        limit = int(file(path).read())
+    except IOError, err:
+        if err.errno != errno.ENOENT:
+            raise
+        raise util.Abort(_('this system does not seem to '
+                           'support inotify'))
+    ui.warn(_('*** the current per-user limit on the number '
+              'of inotify watches is %s\n') % limit)
+    ui.warn(_('*** this limit is too low to watch every '
+              'directory in this repository\n'))
+    ui.warn(_('*** counting directories: '))
+    ndirs = len(list(walkrepodirs(dirstate, rootabs)))
+    ui.warn(_('found %d\n') % ndirs)
+    newlimit = min(limit, 1024)
+    while newlimit < ((limit + ndirs) * 1.1):
+        newlimit *= 2
+    ui.warn(_('*** to raise the limit from %d to %d (run as root):\n') %
+            (limit, newlimit))
+    ui.warn(_('***  echo %d > %s\n') % (newlimit, path))
+    raise util.Abort(_('cannot watch %s until inotify watch limit is raised')
+                     % rootabs)
+
+class pollable(object):
+    """
+    Interface to support polling.
+    The file descriptor returned by fileno() is registered to a polling
+    object.
+    Usage:
+        Every tick, check if an event has happened since the last tick:
+        * If yes, call handle_events
+        * If no, call handle_timeout
+    """
+    poll_events = select.POLLIN
+    instances = {}
+    poll = select.poll()
+
+    def fileno(self):
+        raise NotImplementedError
+
+    def handle_events(self, events):
+        raise NotImplementedError
+
+    def handle_timeout(self):
+        raise NotImplementedError
+
+    def shutdown(self):
+        raise NotImplementedError
+
+    def register(self, timeout):
+        fd = self.fileno()
+
+        pollable.poll.register(fd, pollable.poll_events)
+        pollable.instances[fd] = self
+
+        self.registered = True
+        self.timeout = timeout
+
+    def unregister(self):
+        pollable.poll.unregister(self)
+        self.registered = False
+
+    @classmethod
+    def run(cls):
+        while True:
+            timeout = None
+            timeobj = None
+            for obj in cls.instances.itervalues():
+                if obj.timeout is not None and (timeout is None or obj.timeout < timeout):
+                    timeout, timeobj = obj.timeout, obj
+            try:
+                events = cls.poll.poll(timeout)
+            except select.error, err:
+                if err[0] == errno.EINTR:
+                    continue
+                raise
+            if events:
+                by_fd = {}
+                for fd, event in events:
+                    by_fd.setdefault(fd, []).append(event)
+
+                for fd, events in by_fd.iteritems():
+                    cls.instances[fd].handle_pollevents(events)
+
+            elif timeobj:
+                timeobj.handle_timeout()
+
+def eventaction(code):
+    """
+    Decorator to help handle events in repowatcher
+    """
+    def decorator(f):
+        def wrapper(self, wpath):
+            if code == 'm' and wpath in self.lastevent and \
+                self.lastevent[wpath] in 'cm':
+                return
+            self.lastevent[wpath] = code
+            self.timeout = 250
+
+            f(self, wpath)
+
+        wrapper.func_name = f.func_name
+        return wrapper
+    return decorator
+
+class repowatcher(server.repowatcher, pollable):
+    """
+    Watches inotify events
+    """
+    mask = (
+        inotify.IN_ATTRIB |
+        inotify.IN_CREATE |
+        inotify.IN_DELETE |
+        inotify.IN_DELETE_SELF |
+        inotify.IN_MODIFY |
+        inotify.IN_MOVED_FROM |
+        inotify.IN_MOVED_TO |
+        inotify.IN_MOVE_SELF |
+        inotify.IN_ONLYDIR |
+        inotify.IN_UNMOUNT |
+        0)
+
+    def __init__(self, ui, dirstate, root):
+        server.repowatcher.__init__(self, ui, dirstate, root)
+
+        self.lastevent = {}
+        self.dirty = False
+        try:
+            self.watcher = watcher.watcher()
+        except OSError, err:
+            raise util.Abort(_('inotify service not available: %s') %
+                             err.strerror)
+        self.threshold = watcher.threshold(self.watcher)
+        self.fileno = self.watcher.fileno
+        self.register(timeout=None)
+
+        self.handle_timeout()
+        self.scan()
+
+    def event_time(self):
+        last = self.last_event
+        now = time.time()
+        self.last_event = now
+
+        if last is None:
+            return 'start'
+        delta = now - last
+        if delta < 5:
+            return '+%.3f' % delta
+        if delta < 50:
+            return '+%.2f' % delta
+        return '+%.1f' % delta
+
+    def add_watch(self, path, mask):
+        if not path:
+            return
+        if self.watcher.path(path) is None:
+            if self.ui.debugflag:
+                self.ui.note(_('watching %r\n') % path[self.prefixlen:])
+            try:
+                self.watcher.add(path, mask)
+            except OSError, err:
+                if err.errno in (errno.ENOENT, errno.ENOTDIR):
+                    return
+                if err.errno != errno.ENOSPC:
+                    raise
+                _explain_watch_limit(self.ui, self.dirstate, self.wprefix)
+
+    def setup(self):
+        self.ui.note(_('watching directories under %r\n') % self.wprefix)
+        self.add_watch(self.wprefix + '.hg', inotify.IN_DELETE)
+
+    def scan(self, topdir=''):
+        ds = self.dirstate._map.copy()
+        self.add_watch(server.join(self.wprefix, topdir), self.mask)
+        for root, dirs, files in server.walk(self.dirstate, self.wprefix,
+                                             topdir):
+            for d in dirs:
+                self.add_watch(server.join(root, d), self.mask)
+            wroot = root[self.prefixlen:]
+            for fn in files:
+                wfn = server.join(wroot, fn)
+                self.updatefile(wfn, self.getstat(wfn))
+                ds.pop(wfn, None)
+        wtopdir = topdir
+        if wtopdir and wtopdir[-1] != '/':
+            wtopdir += '/'
+        for wfn, state in ds.iteritems():
+            if not wfn.startswith(wtopdir):
+                continue
+            try:
+                st = self.stat(wfn)
+            except OSError:
+                status = state[0]
+                self.deletefile(wfn, status)
+            else:
+                self.updatefile(wfn, st)
+        self.check_deleted('!')
+        self.check_deleted('r')
+
+    @eventaction('c')
+    def created(self, wpath):
+        if wpath == '.hgignore':
+            self.update_hgignore()
+        try:
+            st = self.stat(wpath)
+            if stat.S_ISREG(st[0]) or stat.S_ISLNK(st[0]):
+                self.updatefile(wpath, st)
+        except OSError:
+            pass
+
+    @eventaction('m')
+    def modified(self, wpath):
+        if wpath == '.hgignore':
+            self.update_hgignore()
+        try:
+            st = self.stat(wpath)
+            if stat.S_ISREG(st[0]):
+                if self.dirstate[wpath] in 'lmn':
+                    self.updatefile(wpath, st)
+        except OSError:
+            pass
+
+    @eventaction('d')
+    def deleted(self, wpath):
+        if wpath == '.hgignore':
+            self.update_hgignore()
+        elif wpath.startswith('.hg/'):
+            return
+
+        self.deletefile(wpath, self.dirstate[wpath])
+
+    def process_create(self, wpath, evt):
+        if self.ui.debugflag:
+            self.ui.note(_('%s event: created %s\n') %
+                         (self.event_time(), wpath))
+
+        if evt.mask & inotify.IN_ISDIR:
+            self.scan(wpath)
+        else:
+            self.created(wpath)
+
+    def process_delete(self, wpath, evt):
+        if self.ui.debugflag:
+            self.ui.note(_('%s event: deleted %s\n') %
+                         (self.event_time(), wpath))
+
+        if evt.mask & inotify.IN_ISDIR:
+            tree = self.tree.dir(wpath)
+            todelete = [wfn for wfn, ignore in tree.walk('?')]
+            for fn in todelete:
+                self.deletefile(fn, '?')
+            self.scan(wpath)
+        else:
+            self.deleted(wpath)
+
+    def process_modify(self, wpath, evt):
+        if self.ui.debugflag:
+            self.ui.note(_('%s event: modified %s\n') %
+                         (self.event_time(), wpath))
+
+        if not (evt.mask & inotify.IN_ISDIR):
+            self.modified(wpath)
+
+    def process_unmount(self, evt):
+        self.ui.warn(_('filesystem containing %s was unmounted\n') %
+                     evt.fullpath)
+        sys.exit(0)
+
+    def handle_pollevents(self, events):
+        if self.ui.debugflag:
+            self.ui.note(_('%s readable: %d bytes\n') %
+                         (self.event_time(), self.threshold.readable()))
+        if not self.threshold():
+            if self.registered:
+                if self.ui.debugflag:
+                    self.ui.note(_('%s below threshold - unhooking\n') %
+                                 (self.event_time()))
+                self.unregister()
+                self.timeout = 250
+        else:
+            self.read_events()
+
+    def read_events(self, bufsize=None):
+        events = self.watcher.read(bufsize)
+        if self.ui.debugflag:
+            self.ui.note(_('%s reading %d events\n') %
+                         (self.event_time(), len(events)))
+        for evt in events:
+            if evt.fullpath == self.wprefix[:-1]:
+                # events on the root of the repository
+                # itself, e.g. permission changes or repository move
+                continue
+            assert evt.fullpath.startswith(self.wprefix)
+            wpath = evt.fullpath[self.prefixlen:]
+
+            # paths have been normalized, wpath never ends with a '/'
+
+            if wpath.startswith('.hg/') and evt.mask & inotify.IN_ISDIR:
+                # ignore subdirectories of .hg/ (merge, patches...)
+                continue
+            if wpath == ".hg/wlock":
+                if evt.mask & inotify.IN_DELETE:
+                    self.dirstate.invalidate()
+                    self.dirty = False
+                    self.scan()
+                elif evt.mask & inotify.IN_CREATE:
+                    self.dirty = True
+            else:
+                if self.dirty:
+                    continue
+
+                if evt.mask & inotify.IN_UNMOUNT:
+                    self.process_unmount(wpath, evt)
+                elif evt.mask & (inotify.IN_MODIFY | inotify.IN_ATTRIB):
+                    self.process_modify(wpath, evt)
+                elif evt.mask & (inotify.IN_DELETE | inotify.IN_DELETE_SELF |
+                                 inotify.IN_MOVED_FROM):
+                    self.process_delete(wpath, evt)
+                elif evt.mask & (inotify.IN_CREATE | inotify.IN_MOVED_TO):
+                    self.process_create(wpath, evt)
+
+        self.lastevent.clear()
+
+    def handle_timeout(self):
+        if not self.registered:
+            if self.ui.debugflag:
+                self.ui.note(_('%s hooking back up with %d bytes readable\n') %
+                             (self.event_time(), self.threshold.readable()))
+            self.read_events(0)
+            self.register(timeout=None)
+
+        self.timeout = None
+
+    def shutdown(self):
+        self.watcher.close()
+
+    def debug(self):
+        """
+        Returns a sorted list of relatives paths currently watched,
+        for debugging purposes.
+        """
+        return sorted(tuple[0][self.prefixlen:] for tuple in self.watcher)
+
+class socketlistener(server.socketlistener, pollable):
+    """
+    Listens for client queries on unix socket inotify.sock
+    """
+    def __init__(self, ui, root, repowatcher, timeout):
+        server.socketlistener.__init__(self, ui, root, repowatcher, timeout)
+        self.register(timeout=timeout)
+
+    def handle_timeout(self):
+        pass
+
+    def handle_pollevents(self, events):
+        for e in events:
+            self.accept_connection()
+
+    def shutdown(self):
+        self.sock.close()
+        try:
+            os.unlink(self.sockpath)
+            if self.realsockpath:
+                os.unlink(self.realsockpath)
+                os.rmdir(os.path.dirname(self.realsockpath))
+        except OSError, err:
+            if err.errno != errno.ENOENT:
+                raise
+
+    def answer_stat_query(self, cs):
+        if self.repowatcher.timeout:
+            # We got a query while a rescan is pending.  Make sure we
+            # rescan before responding, or we could give back a wrong
+            # answer.
+            self.repowatcher.handle_timeout()
+        return server.socketlistener.answer_stat_query(self, cs)
+
+class master(object):
+    def __init__(self, ui, dirstate, root, timeout=None):
+        self.ui = ui
+        self.repowatcher = repowatcher(ui, dirstate, root)
+        self.socketlistener = socketlistener(ui, root, self.repowatcher,
+                                             timeout)
+
+    def shutdown(self):
+        for obj in pollable.instances.itervalues():
+            obj.shutdown()
+
+    def run(self):
+        self.repowatcher.setup()
+        self.ui.note(_('finished setup\n'))
+        if os.getenv('TIME_STARTUP'):
+            sys.exit(0)
+        pollable.run()
--- a/hgext/inotify/server.py	Wed Dec 23 13:09:11 2009 +0100
+++ b/hgext/inotify/server.py	Wed Dec 23 13:12:36 2009 +0100
@@ -1,7 +1,6 @@
-# server.py - inotify status server
+# server.py - common entry point for inotify status server
 #
-# Copyright 2006, 2007, 2008 Bryan O'Sullivan <bos@serpentine.com>
-# Copyright 2007, 2008 Brendan Cully <brendan@kublai.com>
+# Copyright 2009 Nicolas Dumazet <nicdumz@gmail.com>
 #
 # This software may be used and distributed according to the terms of the
 # GNU General Public License version 2, incorporated herein by reference.
@@ -9,13 +8,14 @@
 from mercurial.i18n import _
 from mercurial import cmdutil, osutil, util
 import common
-import errno, os, select, socket, stat, struct, sys, tempfile, time
 
-try:
-    import linux as inotify
-    from linux import watcher
-except ImportError:
-    raise
+import errno
+import os
+import socket
+import stat
+import struct
+import sys
+import tempfile
 
 class AlreadyStartedException(Exception): pass
 
@@ -34,30 +34,6 @@
 
 walk_ignored_errors = (errno.ENOENT, errno.ENAMETOOLONG)
 
-def walkrepodirs(dirstate, absroot):
-    '''Iterate over all subdirectories of this repo.
-    Exclude the .hg directory, any nested repos, and ignored dirs.'''
-    def walkit(dirname, top):
-        fullpath = join(absroot, dirname)
-        try:
-            for name, kind in osutil.listdir(fullpath):
-                if kind == stat.S_IFDIR:
-                    if name == '.hg':
-                        if not top:
-                            return
-                    else:
-                        d = join(dirname, name)
-                        if dirstate._ignore(d):
-                            continue
-                        for subdir in walkit(d, False):
-                            yield subdir
-        except OSError, err:
-            if err.errno not in walk_ignored_errors:
-                raise
-        yield fullpath
-
-    return walkit('', True)
-
 def walk(dirstate, absroot, root):
     '''Like os.walk, but only yields regular files.'''
 
@@ -94,113 +70,6 @@
 
     return walkit(root, root == '')
 
-def _explain_watch_limit(ui, dirstate, rootabs):
-    path = '/proc/sys/fs/inotify/max_user_watches'
-    try:
-        limit = int(file(path).read())
-    except IOError, err:
-        if err.errno != errno.ENOENT:
-            raise
-        raise util.Abort(_('this system does not seem to '
-                           'support inotify'))
-    ui.warn(_('*** the current per-user limit on the number '
-              'of inotify watches is %s\n') % limit)
-    ui.warn(_('*** this limit is too low to watch every '
-              'directory in this repository\n'))
-    ui.warn(_('*** counting directories: '))
-    ndirs = len(list(walkrepodirs(dirstate, rootabs)))
-    ui.warn(_('found %d\n') % ndirs)
-    newlimit = min(limit, 1024)
-    while newlimit < ((limit + ndirs) * 1.1):
-        newlimit *= 2
-    ui.warn(_('*** to raise the limit from %d to %d (run as root):\n') %
-            (limit, newlimit))
-    ui.warn(_('***  echo %d > %s\n') % (newlimit, path))
-    raise util.Abort(_('cannot watch %s until inotify watch limit is raised')
-                     % rootabs)
-
-class pollable(object):
-    """
-    Interface to support polling.
-    The file descriptor returned by fileno() is registered to a polling
-    object.
-    Usage:
-        Every tick, check if an event has happened since the last tick:
-        * If yes, call handle_events
-        * If no, call handle_timeout
-    """
-    poll_events = select.POLLIN
-    instances = {}
-    poll = select.poll()
-
-    def fileno(self):
-        raise NotImplementedError
-
-    def handle_events(self, events):
-        raise NotImplementedError
-
-    def handle_timeout(self):
-        raise NotImplementedError
-
-    def shutdown(self):
-        raise NotImplementedError
-
-    def register(self, timeout):
-        fd = self.fileno()
-
-        pollable.poll.register(fd, pollable.poll_events)
-        pollable.instances[fd] = self
-
-        self.registered = True
-        self.timeout = timeout
-
-    def unregister(self):
-        pollable.poll.unregister(self)
-        self.registered = False
-
-    @classmethod
-    def run(cls):
-        while True:
-            timeout = None
-            timeobj = None
-            for obj in cls.instances.itervalues():
-                if obj.timeout is not None and (timeout is None or obj.timeout < timeout):
-                    timeout, timeobj = obj.timeout, obj
-            try:
-                events = cls.poll.poll(timeout)
-            except select.error, err:
-                if err[0] == errno.EINTR:
-                    continue
-                raise
-            if events:
-                by_fd = {}
-                for fd, event in events:
-                    by_fd.setdefault(fd, []).append(event)
-
-                for fd, events in by_fd.iteritems():
-                    cls.instances[fd].handle_pollevents(events)
-
-            elif timeobj:
-                timeobj.handle_timeout()
-
-def eventaction(code):
-    """
-    Decorator to help handle events in repowatcher
-    """
-    def decorator(f):
-        def wrapper(self, wpath):
-            if code == 'm' and wpath in self.lastevent and \
-                self.lastevent[wpath] in 'cm':
-                return
-            self.lastevent[wpath] = code
-            self.timeout = 250
-
-            f(self, wpath)
-
-        wrapper.func_name = f.func_name
-        return wrapper
-    return decorator
-
 class directory(object):
     """
     Representing a directory
@@ -293,23 +162,11 @@
                 # path is not tracked
                 pass
 
-class repowatcher(pollable):
+class repowatcher(object):
     """
     Watches inotify events
     """
     statuskeys = 'almr!?'
-    mask = (
-        inotify.IN_ATTRIB |
-        inotify.IN_CREATE |
-        inotify.IN_DELETE |
-        inotify.IN_DELETE_SELF |
-        inotify.IN_MODIFY |
-        inotify.IN_MOVED_FROM |
-        inotify.IN_MOVED_TO |
-        inotify.IN_MOVE_SELF |
-        inotify.IN_ONLYDIR |
-        inotify.IN_UNMOUNT |
-        0)
 
     def __init__(self, ui, dirstate, root):
         self.ui = ui
@@ -317,41 +174,18 @@
 
         self.wprefix = join(root, '')
         self.prefixlen = len(self.wprefix)
-        try:
-            self.watcher = watcher.watcher()
-        except OSError, err:
-            raise util.Abort(_('inotify service not available: %s') %
-                             err.strerror)
-        self.threshold = watcher.threshold(self.watcher)
-        self.fileno = self.watcher.fileno
 
         self.tree = directory()
         self.statcache = {}
         self.statustrees = dict([(s, directory()) for s in self.statuskeys])
 
+        self.ds_info = self.dirstate_info()
+
         self.last_event = None
 
-        self.lastevent = {}
 
-        self.register(timeout=None)
-
-        self.ds_info = self.dirstate_info()
-        self.handle_timeout()
-        self.scan()
-
-    def event_time(self):
-        last = self.last_event
-        now = time.time()
-        self.last_event = now
-
-        if last is None:
-            return 'start'
-        delta = now - last
-        if delta < 5:
-            return '+%.3f' % delta
-        if delta < 50:
-            return '+%.2f' % delta
-        return '+%.1f' % delta
+    def handle_timeout(self):
+        pass
 
     def dirstate_info(self):
         try:
@@ -362,26 +196,6 @@
                 raise
             return 0, 0
 
-    def add_watch(self, path, mask):
-        if not path:
-            return
-        if self.watcher.path(path) is None:
-            if self.ui.debugflag:
-                self.ui.note(_('watching %r\n') % path[self.prefixlen:])
-            try:
-                self.watcher.add(path, mask)
-            except OSError, err:
-                if err.errno in (errno.ENOENT, errno.ENOTDIR):
-                    return
-                if err.errno != errno.ENOSPC:
-                    raise
-                _explain_watch_limit(self.ui, self.dirstate, self.wprefix)
-
-    def setup(self):
-        self.ui.note(_('watching directories under %r\n') % self.wprefix)
-        self.add_watch(self.wprefix + '.hg', inotify.IN_DELETE)
-        self.check_dirstate()
-
     def filestatus(self, fn, st):
         try:
             type_, mode, size, time = self.dirstate._map[fn][:4]
@@ -455,7 +269,6 @@
             if newstatus != 'n':
                 self.statustrees[newstatus].dir(root).files[fn] = newstatus
 
-
     def check_deleted(self, key):
         # Files that had been deleted but were present in the dirstate
         # may have vanished from the dirstate; we must clean them up.
@@ -468,46 +281,6 @@
             del self.statustrees[key].dir(root).files[fn]
             del self.tree.dir(root).files[fn]
 
-    def scan(self, topdir=''):
-        ds = self.dirstate._map.copy()
-        self.add_watch(join(self.wprefix, topdir), self.mask)
-        for root, dirs, files in walk(self.dirstate, self.wprefix, topdir):
-            for d in dirs:
-                self.add_watch(join(root, d), self.mask)
-            wroot = root[self.prefixlen:]
-            for fn in files:
-                wfn = join(wroot, fn)
-                self.updatefile(wfn, self.getstat(wfn))
-                ds.pop(wfn, None)
-        wtopdir = topdir
-        if wtopdir and wtopdir[-1] != '/':
-            wtopdir += '/'
-        for wfn, state in ds.iteritems():
-            if not wfn.startswith(wtopdir):
-                continue
-            try:
-                st = self.stat(wfn)
-            except OSError:
-                status = state[0]
-                self.deletefile(wfn, status)
-            else:
-                self.updatefile(wfn, st)
-        self.check_deleted('!')
-        self.check_deleted('r')
-
-    def check_dirstate(self):
-        ds_info = self.dirstate_info()
-        if ds_info == self.ds_info:
-            return
-        self.ds_info = ds_info
-        if not self.ui.debugflag:
-            self.last_event = None
-        self.ui.note(_('%s dirstate reload\n') % self.event_time())
-        self.dirstate.invalidate()
-        self.handle_timeout()
-        self.scan()
-        self.ui.note(_('%s end dirstate reload\n') % self.event_time())
-
     def update_hgignore(self):
         # An update of the ignore file can potentially change the
         # states of all unknown and ignored files.
@@ -545,139 +318,7 @@
             self.statcache.pop(wpath, None)
             raise
 
-    @eventaction('c')
-    def created(self, wpath):
-        if wpath == '.hgignore':
-            self.update_hgignore()
-        try:
-            st = self.stat(wpath)
-            if stat.S_ISREG(st[0]):
-                self.updatefile(wpath, st)
-        except OSError:
-            pass
-
-    @eventaction('m')
-    def modified(self, wpath):
-        if wpath == '.hgignore':
-            self.update_hgignore()
-        try:
-            st = self.stat(wpath)
-            if stat.S_ISREG(st[0]):
-                if self.dirstate[wpath] in 'lmn':
-                    self.updatefile(wpath, st)
-        except OSError:
-            pass
-
-    @eventaction('d')
-    def deleted(self, wpath):
-        if wpath == '.hgignore':
-            self.update_hgignore()
-        elif wpath.startswith('.hg/'):
-            if wpath == '.hg/wlock':
-                self.check_dirstate()
-            return
-
-        self.deletefile(wpath, self.dirstate[wpath])
-
-    def process_create(self, wpath, evt):
-        if self.ui.debugflag:
-            self.ui.note(_('%s event: created %s\n') %
-                         (self.event_time(), wpath))
-
-        if evt.mask & inotify.IN_ISDIR:
-            self.scan(wpath)
-        else:
-            self.created(wpath)
-
-    def process_delete(self, wpath, evt):
-        if self.ui.debugflag:
-            self.ui.note(_('%s event: deleted %s\n') %
-                         (self.event_time(), wpath))
-
-        if evt.mask & inotify.IN_ISDIR:
-            tree = self.tree.dir(wpath)
-            todelete = [wfn for wfn, ignore in tree.walk('?')]
-            for fn in todelete:
-                self.deletefile(fn, '?')
-            self.scan(wpath)
-        else:
-            self.deleted(wpath)
-
-    def process_modify(self, wpath, evt):
-        if self.ui.debugflag:
-            self.ui.note(_('%s event: modified %s\n') %
-                         (self.event_time(), wpath))
-
-        if not (evt.mask & inotify.IN_ISDIR):
-            self.modified(wpath)
-
-    def process_unmount(self, evt):
-        self.ui.warn(_('filesystem containing %s was unmounted\n') %
-                     evt.fullpath)
-        sys.exit(0)
-
-    def handle_pollevents(self, events):
-        if self.ui.debugflag:
-            self.ui.note(_('%s readable: %d bytes\n') %
-                         (self.event_time(), self.threshold.readable()))
-        if not self.threshold():
-            if self.registered:
-                if self.ui.debugflag:
-                    self.ui.note(_('%s below threshold - unhooking\n') %
-                                 (self.event_time()))
-                self.unregister()
-                self.timeout = 250
-        else:
-            self.read_events()
-
-    def read_events(self, bufsize=None):
-        events = self.watcher.read(bufsize)
-        if self.ui.debugflag:
-            self.ui.note(_('%s reading %d events\n') %
-                         (self.event_time(), len(events)))
-        for evt in events:
-            assert evt.fullpath.startswith(self.wprefix)
-            wpath = evt.fullpath[self.prefixlen:]
-
-            # paths have been normalized, wpath never ends with a '/'
-
-            if wpath.startswith('.hg/') and evt.mask & inotify.IN_ISDIR:
-                # ignore subdirectories of .hg/ (merge, patches...)
-                continue
-
-            if evt.mask & inotify.IN_UNMOUNT:
-                self.process_unmount(wpath, evt)
-            elif evt.mask & (inotify.IN_MODIFY | inotify.IN_ATTRIB):
-                self.process_modify(wpath, evt)
-            elif evt.mask & (inotify.IN_DELETE | inotify.IN_DELETE_SELF |
-                             inotify.IN_MOVED_FROM):
-                self.process_delete(wpath, evt)
-            elif evt.mask & (inotify.IN_CREATE | inotify.IN_MOVED_TO):
-                self.process_create(wpath, evt)
-
-        self.lastevent.clear()
-
-    def handle_timeout(self):
-        if not self.registered:
-            if self.ui.debugflag:
-                self.ui.note(_('%s hooking back up with %d bytes readable\n') %
-                             (self.event_time(), self.threshold.readable()))
-            self.read_events(0)
-            self.register(timeout=None)
-
-        self.timeout = None
-
-    def shutdown(self):
-        self.watcher.close()
-
-    def debug(self):
-        """
-        Returns a sorted list of relatives paths currently watched,
-        for debugging purposes.
-        """
-        return sorted(tuple[0][self.prefixlen:] for tuple in self.watcher)
-
-class server(pollable):
+class socketlistener(object):
     """
     Listens for client queries on unix socket inotify.sock
     """
@@ -718,10 +359,6 @@
                 raise
         self.sock.listen(5)
         self.fileno = self.sock.fileno
-        self.register(timeout=timeout)
-
-    def handle_timeout(self):
-        pass
 
     def answer_stat_query(self, cs):
         names = cs.read().split('\0')
@@ -730,12 +367,6 @@
 
         self.ui.note(_('answering query for %r\n') % states)
 
-        if self.repowatcher.timeout:
-            # We got a query while a rescan is pending.  Make sure we
-            # rescan before responding, or we could give back a wrong
-            # answer.
-            self.repowatcher.handle_timeout()
-
         visited = set()
         if not names:
             def genresult(states, tree):
@@ -764,11 +395,7 @@
     def answer_dbug_query(self):
         return ['\0'.join(self.repowatcher.debug())]
 
-    def handle_pollevents(self, events):
-        for e in events:
-            self.handle_pollevent()
-
-    def handle_pollevent(self):
+    def accept_connection(self):
         sock, addr = self.sock.accept()
 
         cs = common.recvcs(sock)
@@ -808,33 +435,12 @@
             if err[0] != errno.EPIPE:
                 raise
 
-    def shutdown(self):
-        self.sock.close()
-        try:
-            os.unlink(self.sockpath)
-            if self.realsockpath:
-                os.unlink(self.realsockpath)
-                os.rmdir(os.path.dirname(self.realsockpath))
-        except OSError, err:
-            if err.errno != errno.ENOENT:
-                raise
+if sys.platform == 'linux2':
+    import linuxserver as _server
+else:
+    raise ImportError
 
-class master(object):
-    def __init__(self, ui, dirstate, root, timeout=None):
-        self.ui = ui
-        self.repowatcher = repowatcher(ui, dirstate, root)
-        self.server = server(ui, root, self.repowatcher, timeout)
-
-    def shutdown(self):
-        for obj in pollable.instances.itervalues():
-            obj.shutdown()
-
-    def run(self):
-        self.repowatcher.setup()
-        self.ui.note(_('finished setup\n'))
-        if os.getenv('TIME_STARTUP'):
-            sys.exit(0)
-        pollable.run()
+master = _server.master
 
 def start(ui, dirstate, root, opts):
     timeout = opts.get('timeout')
@@ -865,5 +471,8 @@
 
     service = service()
     logfile = ui.config('inotify', 'log')
+
+    appendpid = ui.configbool('inotify', 'appendpid', False)
+
     cmdutil.service(opts, initfn=service.init, runfn=service.run,
-                    logfile=logfile, runargs=runargs)
+                    logfile=logfile, runargs=runargs, appendpid=appendpid)
--- a/hgext/keyword.py	Wed Dec 23 13:09:11 2009 +0100
+++ b/hgext/keyword.py	Wed Dec 23 13:12:36 2009 +0100
@@ -112,7 +112,8 @@
         'Author': '{author|user}',
         'Date': '{date|utcdate}',
         'RCSfile': '{file|basename},v',
-        'RCSFile': '{file|basename},v', # kept only for backwards compatibility
+        'RCSFile': '{file|basename},v', # kept for backwards compatibility
+                                        # with hg-keyword
         'Source': '{root}/{file},v',
         'Id': '{file|basename},v {node|short} {date|utcdate} {author|user}',
         'Header': '{root}/{file},v {node|short} {date|utcdate} {author|user}',
--- a/hgext/patchbomb.py	Wed Dec 23 13:09:11 2009 +0100
+++ b/hgext/patchbomb.py	Wed Dec 23 13:12:36 2009 +0100
@@ -381,20 +381,21 @@
     else:
         msgs = getpatchmsgs(list(getpatches(revs)))
 
-    def getaddrs(opt, prpt, default = None):
-        addrs = opts.get(opt) or (ui.config('email', opt) or
-                                  ui.config('patchbomb', opt) or
-                                  prompt(ui, prpt, default)).split(',')
-        return [mail.addressencode(ui, a.strip(), _charsets, opts.get('test'))
-                for a in addrs if a.strip()]
+    def getaddrs(opt, prpt=None, default=None):
+        if opts.get(opt):
+            return mail.addrlistencode(ui, opts.get(opt), _charsets,
+                                       opts.get('test'))
+
+        addrs = (ui.config('email', opt) or
+                 ui.config('patchbomb', opt) or '')
+        if not addrs and prpt:
+            addrs = prompt(ui, prpt, default)
+
+        return mail.addrlistencode(ui, [addrs], _charsets, opts.get('test'))
 
     to = getaddrs('to', 'To')
     cc = getaddrs('cc', 'Cc', '')
-
-    bcc = opts.get('bcc') or (ui.config('email', 'bcc') or
-                          ui.config('patchbomb', 'bcc') or '').split(',')
-    bcc = [mail.addressencode(ui, a.strip(), _charsets, opts.get('test'))
-           for a in bcc if a.strip()]
+    bcc = getaddrs('bcc')
 
     ui.write('\n')
 
--- a/hgext/relink.py	Wed Dec 23 13:09:11 2009 +0100
+++ b/hgext/relink.py	Wed Dec 23 13:12:36 2009 +0100
@@ -14,25 +14,27 @@
 def relink(ui, repo, origin=None, **opts):
     """recreate hardlinks between two repositories
 
-    When repositories are cloned locally, their data files will be hardlinked
-    so that they only use the space of a single repository.
+    When repositories are cloned locally, their data files will be
+    hardlinked so that they only use the space of a single repository.
 
-    Unfortunately, subsequent pulls into either repository will break hardlinks
-    for any files touched by the new changesets, even if both repositories end
-    up pulling the same changes.
+    Unfortunately, subsequent pulls into either repository will break
+    hardlinks for any files touched by the new changesets, even if
+    both repositories end up pulling the same changes.
 
-    Similarly, passing --rev to "hg clone" will fail to use
-    any hardlinks, falling back to a complete copy of the source repository.
+    Similarly, passing --rev to "hg clone" will fail to use any
+    hardlinks, falling back to a complete copy of the source
+    repository.
 
-    This command lets you recreate those hardlinks and reclaim that wasted
-    space.
+    This command lets you recreate those hardlinks and reclaim that
+    wasted space.
 
-    This repository will be relinked to share space with ORIGIN, which must be
-    on the same local disk. If ORIGIN is omitted, looks for "default-relink",
-    then "default", in [paths].
+    This repository will be relinked to share space with ORIGIN, which
+    must be on the same local disk. If ORIGIN is omitted, looks for
+    "default-relink", then "default", in [paths].
 
-    Do not attempt any read operations on this repository while the command is
-    running. (Both repositories will be locked against writes.)
+    Do not attempt any read operations on this repository while the
+    command is running. (Both repositories will be locked against
+    writes.)
     """
     src = hg.repository(
         cmdutil.remoteui(repo, opts),
--- a/hgext/win32mbcs.py	Wed Dec 23 13:09:11 2009 +0100
+++ b/hgext/win32mbcs.py	Wed Dec 23 13:12:36 2009 +0100
@@ -2,7 +2,7 @@
 #
 # Copyright (c) 2008 Shun-ichi Goto <shunichi.goto@gmail.com>
 #
-# Version: 0.2
+# Version: 0.3
 # Author:  Shun-ichi Goto <shunichi.goto@gmail.com>
 #
 # This software may be used and distributed according to the terms of the
@@ -33,22 +33,27 @@
 Note that there are some limitations on using this extension:
 
 - You should use single encoding in one repository.
-- You should set same encoding for the repository by locale or
-  HGENCODING.
+
+
+By default, win32mbcs uses encoding.encoding decided by Mercurial.
+You can specify the encoding by config option::
 
-Path encoding conversion are done between Unicode and
-encoding.encoding which is decided by Mercurial from current locale
-setting or HGENCODING.
+ [win32mbcs]
+ encoding = sjis
+
+It is useful for the users who want to commit with UTF-8 log message.
 '''
 
 import os, sys
 from mercurial.i18n import _
 from mercurial import util, encoding
 
+_encoding = None                                # see reposetup()
+
 def decode(arg):
     if isinstance(arg, str):
-        uarg = arg.decode(encoding.encoding)
-        if arg == uarg.encode(encoding.encoding):
+        uarg = arg.decode(_encoding)
+        if arg == uarg.encode(_encoding):
             return uarg
         raise UnicodeError("Not local encoding")
     elif isinstance(arg, tuple):
@@ -62,7 +67,7 @@
 
 def encode(arg):
     if isinstance(arg, unicode):
-        return arg.encode(encoding.encoding)
+        return arg.encode(_encoding)
     elif isinstance(arg, tuple):
         return tuple(map(encode, arg))
     elif isinstance(arg, list):
@@ -93,7 +98,7 @@
         return encode(func(*decode(args), **decode(kwds)))
     except UnicodeError:
         raise util.Abort(_("[win32mbcs] filename conversion failed with"
-                         " %s encoding\n") % (encoding.encoding))
+                         " %s encoding\n") % (_encoding))
 
 def wrapperforlistdir(func, args, kwds):
     # Ensure 'path' argument ends with os.sep to avoids
@@ -136,12 +141,14 @@
     if not os.path.supports_unicode_filenames:
         ui.warn(_("[win32mbcs] cannot activate on this platform.\n"))
         return
-
+    # determine encoding for filename
+    global _encoding
+    _encoding = ui.config('win32mbcs', 'encoding', encoding.encoding)
     # fake is only for relevant environment.
-    if encoding.encoding.lower() in problematic_encodings.split():
+    if _encoding.lower() in problematic_encodings.split():
         for f in funcs.split():
             wrapname(f, wrapper)
         wrapname("mercurial.osutil.listdir", wrapperforlistdir)
         ui.debug("[win32mbcs] activated with encoding: %s\n"
-                 % encoding.encoding)
+                 % _encoding)
 
--- a/i18n/da.po	Wed Dec 23 13:09:11 2009 +0100
+++ b/i18n/da.po	Wed Dec 23 13:12:36 2009 +0100
@@ -17,8 +17,8 @@
 msgstr ""
 "Project-Id-Version: Mercurial\n"
 "Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n"
-"POT-Creation-Date: 2009-11-10 20:42+0100\n"
-"PO-Revision-Date: 2009-11-11 22:54+0100\n"
+"POT-Creation-Date: 2009-11-29 20:24+0100\n"
+"PO-Revision-Date: 2009-11-29 20:27+0100\n"
 "Last-Translator:  <mg@lazybytes.net>\n"
 "Language-Team: Danish\n"
 "MIME-Version: 1.0\n"
@@ -135,37 +135,37 @@
 "- backout, commit, import, tag: Specify the commit date.\n"
 "- log, revert, update: Select revision(s) by date.\n"
 "\n"
-"Many date formats are valid. Here are some examples::\n"
-"\n"
-"  \"Wed Dec 6 13:18:29 2006\" (local timezone assumed)\n"
-"  \"Dec 6 13:18 -0600\" (year assumed, time offset provided)\n"
-"  \"Dec 6 13:18 UTC\" (UTC and GMT are aliases for +0000)\n"
-"  \"Dec 6\" (midnight)\n"
-"  \"13:18\" (today assumed)\n"
-"  \"3:39\" (3:39AM assumed)\n"
-"  \"3:39pm\" (15:39)\n"
-"  \"2006-12-06 13:18:29\" (ISO 8601 format)\n"
-"  \"2006-12-6 13:18\"\n"
-"  \"2006-12-6\"\n"
-"  \"12-6\"\n"
-"  \"12/6\"\n"
-"  \"12/6/6\" (Dec 6 2006)\n"
-"\n"
-"Lastly, there is Mercurial's internal format::\n"
-"\n"
-"  \"1165432709 0\" (Wed Dec 6 13:18:29 2006 UTC)\n"
+"Many date formats are valid. Here are some examples:\n"
+"\n"
+"- ``Wed Dec 6 13:18:29 2006`` (local timezone assumed)\n"
+"- ``Dec 6 13:18 -0600`` (year assumed, time offset provided)\n"
+"- ``Dec 6 13:18 UTC`` (UTC and GMT are aliases for +0000)\n"
+"- ``Dec 6`` (midnight)\n"
+"- ``13:18`` (today assumed)\n"
+"- ``3:39`` (3:39AM assumed)\n"
+"- ``3:39pm`` (15:39)\n"
+"- ``2006-12-06 13:18:29`` (ISO 8601 format)\n"
+"- ``2006-12-6 13:18``\n"
+"- ``2006-12-6``\n"
+"- ``12-6``\n"
+"- ``12/6``\n"
+"- ``12/6/6`` (Dec 6 2006)\n"
+"\n"
+"Lastly, there is Mercurial's internal format:\n"
+"\n"
+"- ``1165432709 0`` (Wed Dec 6 13:18:29 2006 UTC)\n"
 "\n"
 "This is the internal representation format for dates. unixtime is the\n"
 "number of seconds since the epoch (1970-01-01 00:00 UTC). offset is\n"
 "the offset of the local timezone, in seconds west of UTC (negative if\n"
 "the timezone is east of UTC).\n"
 "\n"
-"The log command also accepts date ranges::\n"
-"\n"
-"  \"<{datetime}\" - at or before a given date/time\n"
-"  \">{datetime}\" - on or after a given date/time\n"
-"  \"{datetime} to {datetime}\" - a date range, inclusive\n"
-"  \"-{days}\" - within a given number of days of today\n"
+"The log command also accepts date ranges:\n"
+"\n"
+"- ``<{datetime}`` - at or before a given date/time\n"
+"- ``>{datetime}`` - on or after a given date/time\n"
+"- ``{datetime} to {datetime}`` - a date range, inclusive\n"
+"- ``-{days}`` - within a given number of days of today\n"
 msgstr ""
 "Nogle kommandoer tillader brugeren at specificere en dato, f.eks.:\n"
 "\n"
@@ -174,23 +174,23 @@
 "\n"
 "Der er mange gyldige datoformater. Her er nogle eksempler::\n"
 "\n"
-"  \"Wed Dec 6 13:18:29 2006\" (antager lokal tidszone)\n"
-"  \"Dec 6 13:18 -0600\" (antager år, tidszone er angivet)\n"
-"  \"Dec 6 13:18 UTC\" (UTC og GMT er aliaser for +0000)\n"
-"  \"Dec 6\" (midnat)\n"
-"  \"13:18\" (antager dags dato)\n"
-"  \"3:39\"\n"
-"  \"3:39pm\" (15:39)\n"
-"  \"2006-12-06 13:18:29\" (ISO 8601 format)\n"
-"  \"2006-12-6 13:18\"\n"
-"  \"2006-12-6\"\n"
-"  \"12-6\"\n"
-"  \"12/6\"\n"
-"  \"12/6/6\" (6. dec. 2006)\n"
+"- ``Wed Dec 6 13:18:29 2006`` (antager lokal tidszone)\n"
+"- ``Dec 6 13:18 -0600`` (antager år, tidszone er angivet)\n"
+"- ``Dec 6 13:18 UTC`` (UTC og GMT er aliaser for +0000)\n"
+"- ``Dec 6`` (midnat)\n"
+"- ``13:18`` (antager dags dato)\n"
+"- ``3:39``\n"
+"- ``3:39pm`` (15:39)\n"
+"- ``2006-12-06 13:18:29`` (ISO 8601 format)\n"
+"- ``2006-12-6 13:18``\n"
+"- ``2006-12-6``\n"
+"- ``12-6``\n"
+"- ``12/6``\n"
+"- ``12/6/6`` (6. dec. 2006)\n"
 "\n"
 "Endelig er der Mercurials interne format::\n"
 "\n"
-"  \"1165432709 0\" (Ons 6. dec. 13:18:29 2006 UTC)\n"
+"- ``1165432709 0`` (Ons 6. dec. 13:18:29 2006 UTC)\n"
 "\n"
 "Dette er den interne repræsentation af datoer. unixtime er\n"
 "antallet af sekunder siden begyndelsen af epoken (1970-01-01 00:00\n"
@@ -199,10 +199,10 @@
 "\n"
 "Kommandoen log accepterer også datointervaller::\n"
 "\n"
-"  \"<{date}\" - på eller før den angivne dato/tidspunkt\n"
-"  \">{date}\" - på eller efter den angivne dato/tidspunkt\n"
-"  \"{date} to {date}\" - et datointerval, inklusiv endepunkterne\n"
-"  \"-{days}\" - indenfor et angivet antal dage, fra dags dato\n"
+"- ``<{date}`` - på eller før den angivne dato/tidspunkt\n"
+"- ``>{date}`` - på eller efter den angivne dato/tidspunkt\n"
+"- ``{date} to {date}`` - et datointerval, inklusiv endepunkterne\n"
+"- ``-{days}`` - indenfor et angivet antal dage, fra dags dato\n"
 
 msgid ""
 "Mercurial's default format for showing changes between two versions of\n"
@@ -1813,6 +1813,11 @@
 msgid "Mercurial failed to run itself, check hg executable is in PATH"
 msgstr "Mercurial kunne ikke køre sig selv, kontroller om hg er i PATH"
 
+msgid ""
+"svn: cannot probe remote repository, assume it could be a subversion "
+"repository. Use --source-type if you know better.\n"
+msgstr ""
+
 msgid "Subversion python bindings could not be loaded"
 msgstr "Subversion python bindingerne kunne ikke indlæses"
 
@@ -1981,15 +1986,14 @@
 msgid ""
 "use %(path)s to diff repository (or selected files)\n"
 "\n"
-"    Show differences between revisions for the specified files, using the\n"
-"    %(path)s program.\n"
-"\n"
-"    When two revision arguments are given, then changes are shown between\n"
-"    those revisions. If only one revision is specified then that revision "
-"is\n"
-"    compared to the working directory, and, when no revisions are "
-"specified,\n"
-"    the working directory files are compared to its parent."
+"    Show differences between revisions for the specified files, using\n"
+"    the %(path)s program.\n"
+"\n"
+"    When two revision arguments are given, then changes are shown\n"
+"    between those revisions. If only one revision is specified then\n"
+"    that revision is compared to the working directory, and, when no\n"
+"    revisions are specified, the working directory files are compared\n"
+"    to its parent."
 msgstr ""
 
 #, python-format
@@ -2449,23 +2453,23 @@
 msgid "hg inserve [OPTION]..."
 msgstr "hg inserve [TILVALG]..."
 
-msgid "(found dead inotify server socket; removing it)\n"
-msgstr "(fandt død inotify server sokkel; fjerner den)\n"
-
-#, python-format
-msgid "could not start inotify server: %s\n"
-msgstr "kunne ikke starte inotify server: %s\n"
-
-#, python-format
-msgid "could not talk to new inotify server: %s\n"
-msgstr "kunne ikke snakke med ny inotify server: %s\n"
-
-#, python-format
-msgid "failed to contact inotify server: %s\n"
-msgstr "kontakt med inotify server miskykkedes: %s\n"
-
-msgid "received empty answer from inotify server"
-msgstr "modtog tomt svar fra inotify server"
+msgid "inotify-client: found dead inotify server socket; removing it\n"
+msgstr "inotify-klient: fandt død inotify server sokkel; fjerner den\n"
+
+#, python-format
+msgid "inotify-client: could not start inotify server: %s\n"
+msgstr "inotify-klient: kunne ikke starte inotify server: %s\n"
+
+#, python-format
+msgid "inotify-client: could not talk to new inotify server: %s\n"
+msgstr "inotify-klient: kunne ikke snakke med ny inotify server: %s\n"
+
+#, python-format
+msgid "inotify-client: failed to contact inotify server: %s\n"
+msgstr "inotify-klient: kontakt med inotify server mislykkedes: %s\n"
+
+msgid "inotify-client: received empty answer from inotify server"
+msgstr "inotify-klient: modtog tomt svar fra inotify server"
 
 #, python-format
 msgid "(inotify: received response from incompatible server version %d)\n"
@@ -2521,21 +2525,6 @@
 msgstr "overvåger kataloger under %r\n"
 
 #, python-format
-msgid "status: %r %s -> %s\n"
-msgstr "status: %r %s -> %s\n"
-
-#, python-format
-msgid "%s dirstate reload\n"
-msgstr "%s genindlæsning af dirstate\n"
-
-#, python-format
-msgid "%s end dirstate reload\n"
-msgstr "%s genindlæsning af dirstate afsluttet\n"
-
-msgid "rescanning due to .hgignore change\n"
-msgstr "genskanner på grund af ændring af .hgignore\n"
-
-#, python-format
 msgid "%s event: created %s\n"
 msgstr "%s hændelse: oprettede %s\n"
 
@@ -2567,9 +2556,23 @@
 msgid "%s hooking back up with %d bytes readable\n"
 msgstr ""
 
-#, python-format
-msgid "could not start server: %s"
-msgstr "kunne ikke starte server: %s"
+msgid "finished setup\n"
+msgstr "afsluttede opsætning\n"
+
+#, python-format
+msgid "status: %r %s -> %s\n"
+msgstr "status: %r %s -> %s\n"
+
+msgid "rescanning due to .hgignore change\n"
+msgstr "genskanner på grund af ændring af .hgignore\n"
+
+msgid "cannot start: socket is already bound"
+msgstr ""
+
+msgid ""
+"cannot start: tried linking .hg/inotify.sock to a temporary socket but .hg/"
+"inotify.sock already exists"
+msgstr ""
 
 #, python-format
 msgid "answering query for %r\n"
@@ -2583,9 +2586,6 @@
 msgid "unrecognized query type: %s\n"
 msgstr "genkendte ikke forespørgselstype: %s\n"
 
-msgid "finished setup\n"
-msgstr "afsluttede opsætning\n"
-
 msgid ""
 "expand expressions into changelog and summaries\n"
 "\n"
@@ -3507,7 +3507,8 @@
 "    With arguments, set guards for the named patch.\n"
 "    NOTE: Specifying negative guards now requires '--'.\n"
 "\n"
-"    To set guards on another patch:\n"
+"    To set guards on another patch::\n"
+"\n"
 "      hg qguard -- other.patch +2.6.17 -stable\n"
 "    "
 msgstr ""
@@ -3640,7 +3641,7 @@
 "    qselect to tell mq which guards to use. A patch will be pushed if\n"
 "    it has no guards or any positive guards match the currently\n"
 "    selected guard, but will not be pushed if any negative guards\n"
-"    match the current guard. For example:\n"
+"    match the current guard. For example::\n"
 "\n"
 "        qguard foo.patch -stable    (negative guard)\n"
 "        qguard bar.patch +stable    (positive guard)\n"
@@ -3708,11 +3709,14 @@
 
 #, python-format
 msgid "number of unguarded, unapplied patches has changed from %d to %d\n"
-msgstr "antallet af ufiltrerede og ikke-anvendte rettelser har ændret sig fra %dtil %d\n"
+msgstr ""
+"antallet af ufiltrerede og ikke-anvendte rettelser har ændret sig fra %dtil %"
+"d\n"
 
 #, python-format
 msgid "number of guarded, applied patches has changed from %d to %d\n"
-msgstr "antallet af filtrerede og anvendte rettelser har ændret sig fra %d til %d\n"
+msgstr ""
+"antallet af filtrerede og anvendte rettelser har ændret sig fra %d til %d\n"
 
 msgid "guards in series file:\n"
 msgstr "filtre i seriefilen:\n"
@@ -4132,10 +4136,13 @@
 "  ignore = version, help, update\n"
 "\n"
 "You can also enable the pager only for certain commands using\n"
-"pager.attend::\n"
+"pager.attend. Below is the default list of commands to be paged::\n"
 "\n"
 "  [pager]\n"
-"  attend = log\n"
+"  attend = annotate, cat, diff, export, glog, log, qdiff\n"
+"\n"
+"Setting pager.attend to an empty value will cause all commands to be\n"
+"paged.\n"
 "\n"
 "If pager.attend is present, pager.ignore will be ignored.\n"
 "\n"
@@ -4661,9 +4668,6 @@
 msgid " and "
 msgstr " og "
 
-msgid "y"
-msgstr "j"
-
 #, python-format
 msgid "record this change to %r?"
 msgstr "optag denne ændring i %r?"
@@ -4744,32 +4748,27 @@
 msgid ""
 "recreate hardlinks between two repositories\n"
 "\n"
-"    When repositories are cloned locally, their data files will be "
-"hardlinked\n"
-"    so that they only use the space of a single repository.\n"
-"\n"
-"    Unfortunately, subsequent pulls into either repository will break "
-"hardlinks\n"
-"    for any files touched by the new changesets, even if both repositories "
-"end\n"
-"    up pulling the same changes.\n"
-"\n"
-"    Similarly, passing --rev to \"hg clone\" will fail to use\n"
-"    any hardlinks, falling back to a complete copy of the source "
-"repository.\n"
-"\n"
-"    This command lets you recreate those hardlinks and reclaim that wasted\n"
-"    space.\n"
-"\n"
-"    This repository will be relinked to share space with ORIGIN, which must "
-"be\n"
-"    on the same local disk. If ORIGIN is omitted, looks for \"default-relink"
-"\",\n"
-"    then \"default\", in [paths].\n"
-"\n"
-"    Do not attempt any read operations on this repository while the command "
-"is\n"
-"    running. (Both repositories will be locked against writes.)\n"
+"    When repositories are cloned locally, their data files will be\n"
+"    hardlinked so that they only use the space of a single repository.\n"
+"\n"
+"    Unfortunately, subsequent pulls into either repository will break\n"
+"    hardlinks for any files touched by the new changesets, even if\n"
+"    both repositories end up pulling the same changes.\n"
+"\n"
+"    Similarly, passing --rev to \"hg clone\" will fail to use any\n"
+"    hardlinks, falling back to a complete copy of the source\n"
+"    repository.\n"
+"\n"
+"    This command lets you recreate those hardlinks and reclaim that\n"
+"    wasted space.\n"
+"\n"
+"    This repository will be relinked to share space with ORIGIN, which\n"
+"    must be on the same local disk. If ORIGIN is omitted, looks for\n"
+"    \"default-relink\", then \"default\", in [paths].\n"
+"\n"
+"    Do not attempt any read operations on this repository while the\n"
+"    command is running. (Both repositories will be locked against\n"
+"    writes.)\n"
 "    "
 msgstr ""
 
@@ -5458,14 +5457,14 @@
 "    directory; use -r/--rev to specify a different revision.\n"
 "\n"
 "    To specify the type of archive to create, use -t/--type. Valid\n"
-"    types are::\n"
-"\n"
-"      \"files\" (default): a directory full of files\n"
-"      \"tar\": tar archive, uncompressed\n"
-"      \"tbz2\": tar archive, compressed using bzip2\n"
-"      \"tgz\": tar archive, compressed using gzip\n"
-"      \"uzip\": zip archive, uncompressed\n"
-"      \"zip\": zip archive, compressed using deflate\n"
+"    types are:\n"
+"\n"
+"    :``files``: a directory full of files (default)\n"
+"    :``tar``:   tar archive, uncompressed\n"
+"    :``tbz2``:  tar archive, compressed using bzip2\n"
+"    :``tgz``:   tar archive, compressed using gzip\n"
+"    :``uzip``:  zip archive, uncompressed\n"
+"    :``zip``:   zip archive, compressed using deflate\n"
 "\n"
 "    The exact name of the destination archive or directory is given\n"
 "    using a format string; see 'hg help export' for details.\n"
@@ -5742,11 +5741,11 @@
 "\n"
 "    Output may be to a file, in which case the name of the file is\n"
 "    given using a format string. The formatting rules are the same as\n"
-"    for the export command, with the following additions::\n"
-"\n"
-"      %s   basename of file being printed\n"
-"      %d   dirname of file being printed, or '.' if in repository root\n"
-"      %p   root-relative path name of file being printed\n"
+"    for the export command, with the following additions:\n"
+"\n"
+"    :``%s``: basename of file being printed\n"
+"    :``%d``: dirname of file being printed, or '.' if in repository root\n"
+"    :``%p``: root-relative path name of file being printed\n"
 "    "
 msgstr ""
 "udskriv den aktuelle eller en given revision af filer\n"
@@ -5758,12 +5757,12 @@
 "\n"
 "    Output kan gemmes i en fil hvis navn angives med et formatstreng.\n"
 "    Reglerne for formatteringen er de samme som for export-kommandoen\n"
-"    med følgende tilføjelser::\n"
-"\n"
-"      %s   grundnavn for filen som udskrives\n"
-"      %d   katalognavn for filen som blvier udskrevet\n"
-"           eller '.' hvis filen er i katalogets rod\n"
-"      %p   rod-relativ sti for filen som bliver udkrevet\n"
+"    med følgende tilføjelser:\n"
+"\n"
+"    :``%s``: grundnavn for filen som udskrives\n"
+"    :``%d``: katalognavn for filen som blvier udskrevet\n"
+"             eller '.' hvis filen er i katalogets rod\n"
+"    :``%p``: rod-relativ sti for filen som bliver udkrevet\n"
 "    "
 
 msgid ""
@@ -5788,9 +5787,9 @@
 "    will be the null changeset). Otherwise, clone will initially check\n"
 "    out (in order of precedence):\n"
 "\n"
-"      a) the changeset, tag or branch specified with -u/--updaterev\n"
-"      b) the changeset, tag or branch given with the first -r/--rev\n"
-"      c) the head of the default branch\n"
+"    a) the changeset, tag or branch specified with -u/--updaterev\n"
+"    b) the changeset, tag or branch given with the first -r/--rev\n"
+"    c) the head of the default branch\n"
 "\n"
 "    Use 'hg clone -u . src dst' to checkout the source repository's\n"
 "    parent changeset (applicable for local source repositories only).\n"
@@ -5799,8 +5798,8 @@
 "    by listing each changeset (tag, or branch name) with -r/--rev.\n"
 "    If -r/--rev is used, the cloned repository will contain only a subset\n"
 "    of the changesets of the source repository. Only the set of changesets\n"
-"    defined by all -r/--rev options (including their direct and indirect\n"
-"    parent changesets) will be pulled into the destination repository.\n"
+"    defined by all -r/--rev options (including all their ancestors)\n"
+"    will be pulled into the destination repository.\n"
 "    No subsequent changesets (including subsequent tags) will be present\n"
 "    in the destination.\n"
 "\n"
@@ -5848,11 +5847,11 @@
 "    et depot (.hg) og intet arbejdskatalog (arbejdskatalogets forælder\n"
 "    er sat til nul revisionen). Ellers vil clone kommandoen hente\n"
 "\n"
-"      a) ændringen, mærkaten eller grenen specificeret med\n"
-"         -u/--updaterev\n"
-"      b) ændringen, mærkaten eller grenen angivet med den første\n"
-"         -r/--rev\n"
-"      c) hovedet af default grenen\n"
+"    a) ændringen, mærkaten eller grenen specificeret med\n"
+"       -u/--updaterev\n"
+"    b) ændringen, mærkaten eller grenen angivet med den første\n"
+"       -r/--rev\n"
+"    c) hovedet af default grenen\n"
 "\n"
 "    Brug 'hg clone -u . kilde destination' for at hente ændringen i\n"
 "    kildedepotet ud i destinations depotet (kan kun anvendes ved\n"
@@ -5863,10 +5862,9 @@
 "    grennavn) med -r/--rev. Hvis -r/--rev tilvalget bruges, så vil det\n"
 "    klonede depot kun indeholde en delmængde af ændringerne i\n"
 "    kildedepotet. Det er kun mængden af ændringer defineret af alle\n"
-"    -r/--rev tilvalgene (inklusiv deres direkte og indirekte forfædre)\n"
-"    som vil blive hevet ind i destinationsdepotet. Ingen efterfølgende\n"
-"    revisioner (inklusiv efterfølgende mærkater) vil findes i\n"
-"    destinationen.\n"
+"    -r/--rev tilvalgene (inklusiv alle deres forfædre) som vil blive\n"
+"    hevet ind i destinationsdepotet. Ingen efterfølgende revisioner\n"
+"    (inklusiv efterfølgende mærkater) vil findes i destinationen.\n"
 "\n"
 "    Brug af -r/--rev (eller 'clone kilde#rev destination') medfører\n"
 "    --pull, selv ved lokale depoter.\n"
@@ -6193,16 +6191,16 @@
 "    first parent only.\n"
 "\n"
 "    Output may be to a file, in which case the name of the file is\n"
-"    given using a format string. The formatting rules are as follows::\n"
-"\n"
-"      %%   literal \"%\" character\n"
-"      %H   changeset hash (40 bytes of hexadecimal)\n"
-"      %N   number of patches being generated\n"
-"      %R   changeset revision number\n"
-"      %b   basename of the exporting repository\n"
-"      %h   short-form changeset hash (12 bytes of hexadecimal)\n"
-"      %n   zero-padded sequence number, starting at 1\n"
-"      %r   zero-padded changeset revision number\n"
+"    given using a format string. The formatting rules are as follows:\n"
+"\n"
+"    :``%%``: literal \"%\" character\n"
+"    :``%H``: changeset hash (40 bytes of hexadecimal)\n"
+"    :``%N``: number of patches being generated\n"
+"    :``%R``: changeset revision number\n"
+"    :``%b``: basename of the exporting repository\n"
+"    :``%h``: short-form changeset hash (12 bytes of hexadecimal)\n"
+"    :``%n``: zero-padded sequence number, starting at 1\n"
+"    :``%r``: zero-padded changeset revision number\n"
 "\n"
 "    Without the -a/--text option, export will avoid generating diffs\n"
 "    of files it detects as binary. With -a, export will generate a\n"
@@ -6230,14 +6228,14 @@
 "    Uddata kan gemmes i en fil, og filnavnet er givet ved en\n"
 "    format-streng. Formatteringsreglerne er som følger::\n"
 "\n"
-"      %%   litteral % tegn\n"
-"      %H   ændringshash (40 byte heksadecimal)\n"
-"      %N   antallet af rettelser som bliver genereret\n"
-"      %R   revisionnummer for ændringen\n"
-"      %b   grundnavn for det eksporterede depot\n"
-"      %h   kortform ændringshash (12 byte heksadecimal)\n"
-"      %n   nul-fyldt sekvensnummer, startende ved 1\n"
-"      %r   nul-fyldt revisionsnummer for ændringen\n"
+"    :``%%``: litteral \"%\" tegn\n"
+"    :``%H``: ændringshash (40 byte heksadecimal)\n"
+"    :``%N``: antallet af rettelser som bliver genereret\n"
+"    :``%R``: revisionnummer for ændringen\n"
+"    :``%b``: grundnavn for det eksporterede depot\n"
+"    :``%h``: kortform ændringshash (12 byte heksadecimal)\n"
+"    :``%n``: nul-fyldt sekvensnummer, startende ved 1\n"
+"    :``%r``: nul-fyldt revisionsnummer for ændringen\n"
 "\n"
 "    Uden -a/--text tilvalget vil annotate undgå at behandle filer som\n"
 "    den detekterer som binære. Med -a vil annotate generere en\n"
@@ -6408,9 +6406,6 @@
 msgid "no commands defined\n"
 msgstr "ingen kommandoer defineret\n"
 
-msgid "enabled extensions:"
-msgstr "aktiverede udvidelser:"
-
 msgid "no help text available"
 msgstr "ingen hjælpetekst tilgængelig"
 
@@ -6432,6 +6427,9 @@
 "basale kommandoer:\n"
 "\n"
 
+msgid "enabled extensions:"
+msgstr "aktiverede udvidelser:"
+
 msgid "DEPRECATED"
 msgstr ""
 
@@ -7047,13 +7045,13 @@
 "    Transactions are used to encapsulate the effects of all commands\n"
 "    that create new changesets or propagate existing changesets into a\n"
 "    repository. For example, the following commands are transactional,\n"
-"    and their effects can be rolled back::\n"
-"\n"
-"      commit\n"
-"      import\n"
-"      pull\n"
-"      push (with this repository as destination)\n"
-"      unbundle\n"
+"    and their effects can be rolled back:\n"
+"\n"
+"    - commit\n"
+"    - import\n"
+"    - pull\n"
+"    - push (with this repository as destination)\n"
+"    - unbundle\n"
 "\n"
 "    This command is not intended for use on public repositories. Once\n"
 "    changes are visible for pull by other users, rolling a transaction\n"
@@ -7352,13 +7350,13 @@
 "    The following rules apply when the working directory contains\n"
 "    uncommitted changes:\n"
 "\n"
-"    1. If neither -c/--check nor -C/--clean is specified, uncommitted\n"
-"       changes are merged into the requested changeset, and the merged "
-"result\n"
-"       is left uncommitted. Updating and merging will occur only if the\n"
-"       requested changeset is an ancestor or descendant of the parent\n"
-"       changeset. Otherwise, the update is aborted and the uncommitted "
-"changes\n"
+"    1. If neither -c/--check nor -C/--clean is specified, and if\n"
+"       the requested changeset is an ancestor or descendant of\n"
+"       the working directory's parent, the uncommitted changes\n"
+"       are merged into the requested changeset and the merged\n"
+"       result is left uncommitted. If the requested changeset is\n"
+"       not an ancestor or descendant (that is, it is on another\n"
+"       branch), the update is aborted and the uncommitted changes\n"
 "       are preserved.\n"
 "\n"
 "    2. With the -c/--check option, the update is aborted and the\n"
@@ -7388,13 +7386,14 @@
 "    De følgende regler gælder når arbejdskataloget indeholder\n"
 "    udeponerede ændringer:\n"
 "\n"
-"    1. Hvis hverken -c/--check eler -C/--clean er angivet, så bliver\n"
-"       udeponerede ændringer føjet ind i den ønskede ændring og det\n"
-"       sammenføjne resultat bliver efterlad udeponeret. Opdateringen\n"
-"       eller sammenføjningen vil kun finde sted hvis den ønskede\n"
-"       ændring er forfar til eller nedstammer fra forældreændringen.\n"
-"       Ellers vil opdateringen blive afbrudt og de udeponerede\n"
-"       ændringer bliver bevaret.\n"
+"    1. Hvis hverken -c/--check eller -C/--clean er angivet og hvis den\n"
+"       ønskede ændring er en forfar til eller nedstammer fra\n"
+"       arbejdskatalogets forældre, så bliver udeponerede ændringer\n"
+"       føjet ind i den ønskede ændring og det sammenføjne resultat\n"
+"       bliver efterlad udeponeret. Hvis den ønskede ændring ikke er\n"
+"       forfar til eller nedstammer fra forældreændringen (det vil\n"
+"       sige, den er på en anden gren), så vil opdateringen blive\n"
+"       afbrudt og de udeponerede ændringer bliver bevaret.\n"
 "\n"
 "    2. Med -c/--check tilvalget vil opdateringen blive afbrudt og de\n"
 "       udeponerede ændringer bliver bevaret.\n"
@@ -7696,8 +7695,8 @@
 msgid "revision, tag or branch to check out"
 msgstr "revision, mærkat eller gren som skal hentes ud"
 
-msgid "a changeset you would like to have after cloning"
-msgstr "en ændringer du gerne vil have efter kloningen"
+msgid "clone only the specified revisions and ancestors"
+msgstr "klon kun de specificerede revisioner og deres forfædre"
 
 msgid "[OPTION]... SOURCE [DEST]"
 msgstr "[TILVALG]... KILDE [MÅL]"
@@ -8266,6 +8265,16 @@
 msgstr "ingen definition for alias '%s'\n"
 
 #, python-format
+msgid ""
+"alias for: hg %s\n"
+"\n"
+"%s"
+msgstr ""
+"alias for: hg %s\n"
+"\n"
+"%s"
+
+#, python-format
 msgid "alias '%s' resolves to unknown command '%s'\n"
 msgstr "alias '%s' oversætter til ukendt kommando '%s'\n"
 
@@ -8274,8 +8283,8 @@
 msgstr "alias '%s' oversætter til tvetydig kommando '%s'\n"
 
 #, python-format
-msgid "malformed --config option: %s"
-msgstr "misdannet --config tilvalg: %s"
+msgid "malformed --config option: %r (use --config section.name=value)"
+msgstr "misdannet --config tilvalg: %r (brug --config sektion.navn=værdi)"
 
 #, python-format
 msgid "extension '%s' overrides commands: %s\n"
@@ -8490,6 +8499,12 @@
 msgid "%s hook is invalid (\"%s\" not in a module)"
 msgstr ""
 
+msgid "exception from first failed import attempt:\n"
+msgstr "fejltekst fra første fejlede import-forsøg:\n"
+
+msgid "exception from second failed import attempt:\n"
+msgstr "fejltekst fra andet fejlede import-forsøg:\n"
+
 #, python-format
 msgid "%s hook is invalid (import of \"%s\" failed)"
 msgstr ""
@@ -8632,7 +8647,7 @@
 msgstr "ukendt revision '%s'"
 
 msgid "abandoned transaction found - run hg recover"
-msgstr ""
+msgstr "fandt en efterladt transaktion - kør hg recover"
 
 msgid "rolling back interrupted transaction\n"
 msgstr "ruller afbrudt transaktion tilbage\n"
@@ -8665,6 +8680,8 @@
 
 msgid "cannot partially commit a merge (do not specify files or patterns)"
 msgstr ""
+"kan ikke deponere en sammenføjning partielt (undgå at specificere filer "
+"eller mønstre)"
 
 msgid "file not found!"
 msgstr "filen blev ikke fundet!"
@@ -8683,6 +8700,10 @@
 msgstr "deponerer underdepot %s\n"
 
 #, python-format
+msgid "note: commit message saved in %s\n"
+msgstr "bemærk: deponeringsbesked er gemt i %s\n"
+
+#, python-format
 msgid "trouble committing %s!\n"
 msgstr "problem ved deponering %s!\n"
 
@@ -8695,6 +8716,8 @@
 "%s: files over 10MB may cause memory and performance problems\n"
 "(use 'hg revert %s' to unadd the file)\n"
 msgstr ""
+"%s: filer på over 10 MB kan skabe hukommelses- og ydelsesproblemer\n"
+"(brug 'hg revert %s' for at u-tilføje filen)\n"
 
 #, python-format
 msgid "%s not added: only files and symlinks supported currently\n"
@@ -8756,7 +8779,7 @@
 msgstr "(glemte du at sammenføje? brug push -f for at gennemtvinge)\n"
 
 msgid "note: unsynced remote changes!\n"
-msgstr ""
+msgstr "bemærk: usynkroniserede ændringer i fjernsystemet!\n"
 
 #, python-format
 msgid "%d changesets found\n"
@@ -8799,10 +8822,10 @@
 msgstr "låsning af fjerndepotet fejlede"
 
 msgid "the server sent an unknown error code"
-msgstr ""
+msgstr "serveren sendte en ukendt fejlkode"
 
 msgid "streaming all changes\n"
-msgstr ""
+msgstr "streamer alle ændringer\n"
 
 #, python-format
 msgid "%d files to transfer, %s of data\n"
@@ -8817,7 +8840,7 @@
 
 #, python-format
 msgid "sending mail: smtp host %s, port %s\n"
-msgstr ""
+msgstr "sender mail: smtp host %s, port %s\n"
 
 msgid "can't use TLS: Python SSL support not installed"
 msgstr "kan ikke bruge TLS: Python SSL support er ikke installeret"
@@ -8842,7 +8865,7 @@
 
 #, python-format
 msgid "ignoring invalid sendcharset: %s\n"
-msgstr ""
+msgstr "ignorerer ugyldigt sendcharset: %s\n"
 
 #, python-format
 msgid "invalid email address: %s"
--- a/i18n/el.po	Wed Dec 23 13:09:11 2009 +0100
+++ b/i18n/el.po	Wed Dec 23 13:12:36 2009 +0100
@@ -8,7 +8,7 @@
 "Project-Id-Version: Mercurial\n"
 "Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n"
 "POT-Creation-Date: 2009-10-25 12:38+0100\n"
-"PO-Revision-Date: 2009-10-25 12:42+0100\n"
+"PO-Revision-Date: 2009-12-02 03:23+0200\n"
 "Last-Translator: <keramida@ceid.upatras.gr>\n"
 "Language-Team: Greek\n"
 "MIME-Version: 1.0\n"
@@ -21,17 +21,18 @@
 msgid " (default: %s)"
 msgstr " (προκαθορισμένο: %s)"
 
-msgid "OPTIONS"
-msgstr "ΕΠΙΛΟΓΕΣ"
-
-msgid "COMMANDS"
-msgstr "ΕΝΤΟΛΕΣ"
-
-#, fuzzy
+msgid "Options"
+msgstr "Επιλογές"
+
+msgid "Commands"
+msgstr "Εντολές"
+
 msgid ""
 "    options:\n"
 "\n"
-msgstr "    επιλογές:\n"
+msgstr ""
+"    επιλογές:\n"
+"\n"
 
 #, python-format
 msgid ""
@@ -41,82 +42,84 @@
 "    ψευδώνυμα: %s\n"
 "\n"
 
-#, fuzzy
+msgid ""
+"Mercurial reads configuration data from several files, if they exist.\n"
+"Below we list the most specific file first.\n"
+"\n"
+"On Windows, these configuration files are read:\n"
+"\n"
+"- ``<repo>\\.hg\\hgrc``\n"
+"- ``%USERPROFILE%\\.hgrc``\n"
+"- ``%USERPROFILE%\\Mercurial.ini``\n"
+"- ``%HOME%\\.hgrc``\n"
+"- ``%HOME%\\Mercurial.ini``\n"
+"- ``C:\\Mercurial\\Mercurial.ini``\n"
+"- ``HKEY_LOCAL_MACHINE\\SOFTWARE\\Mercurial``\n"
+"- ``<install-dir>\\Mercurial.ini``\n"
+"\n"
+"On Unix, these files are read:\n"
+"\n"
+"- ``<repo>/.hg/hgrc``\n"
+"- ``$HOME/.hgrc``\n"
+"- ``/etc/mercurial/hgrc``\n"
+"- ``/etc/mercurial/hgrc.d/*.rc``\n"
+"- ``<install-root>/etc/mercurial/hgrc``\n"
+"- ``<install-root>/etc/mercurial/hgrc.d/*.rc``\n"
+"\n"
+"The configuration files for Mercurial use a simple ini-file format. A\n"
+"configuration file consists of sections, led by a ``[section]`` header\n"
+"and followed by ``name = value`` entries::\n"
+"\n"
+"  [ui]\n"
+"  username = Firstname Lastname <firstname.lastname@example.net>\n"
+"  verbose = True\n"
+"\n"
+"This above entries will be referred to as ``ui.username`` and\n"
+"``ui.verbose``, respectively. Please see the hgrc man page for a full\n"
+"description of the possible configuration values:\n"
+"\n"
+"- on Unix-like systems: ``man hgrc``\n"
+"- online: http://www.selenic.com/mercurial/hgrc.5.html\n"
+msgstr ""
+
 msgid ""
 "Some commands allow the user to specify a date, e.g.:\n"
 "\n"
 "- backout, commit, import, tag: Specify the commit date.\n"
 "- log, revert, update: Select revision(s) by date.\n"
 "\n"
-"Many date formats are valid. Here are some examples::\n"
-"\n"
-"  \"Wed Dec 6 13:18:29 2006\" (local timezone assumed)\n"
-"  \"Dec 6 13:18 -0600\" (year assumed, time offset provided)\n"
-"  \"Dec 6 13:18 UTC\" (UTC and GMT are aliases for +0000)\n"
-"  \"Dec 6\" (midnight)\n"
-"  \"13:18\" (today assumed)\n"
-"  \"3:39\" (3:39AM assumed)\n"
-"  \"3:39pm\" (15:39)\n"
-"  \"2006-12-06 13:18:29\" (ISO 8601 format)\n"
-"  \"2006-12-6 13:18\"\n"
-"  \"2006-12-6\"\n"
-"  \"12-6\"\n"
-"  \"12/6\"\n"
-"  \"12/6/6\" (Dec 6 2006)\n"
-"\n"
-"Lastly, there is Mercurial's internal format::\n"
-"\n"
-"  \"1165432709 0\" (Wed Dec 6 13:18:29 2006 UTC)\n"
+"Many date formats are valid. Here are some examples:\n"
+"\n"
+"- ``Wed Dec 6 13:18:29 2006`` (local timezone assumed)\n"
+"- ``Dec 6 13:18 -0600`` (year assumed, time offset provided)\n"
+"- ``Dec 6 13:18 UTC`` (UTC and GMT are aliases for +0000)\n"
+"- ``Dec 6`` (midnight)\n"
+"- ``13:18`` (today assumed)\n"
+"- ``3:39`` (3:39AM assumed)\n"
+"- ``3:39pm`` (15:39)\n"
+"- ``2006-12-06 13:18:29`` (ISO 8601 format)\n"
+"- ``2006-12-6 13:18``\n"
+"- ``2006-12-6``\n"
+"- ``12-6``\n"
+"- ``12/6``\n"
+"- ``12/6/6`` (Dec 6 2006)\n"
+"\n"
+"Lastly, there is Mercurial's internal format:\n"
+"\n"
+"- ``1165432709 0`` (Wed Dec 6 13:18:29 2006 UTC)\n"
 "\n"
 "This is the internal representation format for dates. unixtime is the\n"
 "number of seconds since the epoch (1970-01-01 00:00 UTC). offset is\n"
 "the offset of the local timezone, in seconds west of UTC (negative if\n"
 "the timezone is east of UTC).\n"
 "\n"
-"The log command also accepts date ranges::\n"
-"\n"
-"  \"<{datetime}\" - at or before a given date/time\n"
-"  \">{datetime}\" - on or after a given date/time\n"
-"  \"{datetime} to {datetime}\" - a date range, inclusive\n"
-"  \"-{days}\" - within a given number of days of today\n"
-msgstr ""
-"\n"
-"    Nogle kommandoer tillader brugeren at specificere en dato:\n"
-"    backout, commit, import, tag: specificer commit-datøn.\n"
-"    log, revert, update: vælg revisioner eftre dato.\n"
-"\n"
-"    Der er mange gyldige datoformater. Her er nogle eksempler:\n"
-"\n"
-"    \"Wed Dec 6 13:18:29 2006\" (antager lokal tidszone)\n"
-"    \"Dec 6 13:18 -0600\" (antager år, tidszone er angivet)\n"
-"    \"Dec 6 13:18 UTC\" (UTC og GMT er aliaser for +0000)\n"
-"    \"Dec 6\" (midnat)\n"
-"    \"13:18\" (antager dags dato)\n"
-"    \"3:39\"\n"
-"    \"3:39pm\" (15:39)\n"
-"    \"2006-12-06 13:18:29\" (ISO 8601 format)\n"
-"    \"2006-12-6 13:18\"\n"
-"    \"2006-12-6\"\n"
-"    \"12-6\"\n"
-"    \"12/6\"\n"
-"    \"12/6/6\" (6. dec. 2006)\n"
-"\n"
-"    Endelig er der Mercurials interne format:\n"
-"\n"
-"    \"1165432709 0\" (Ons 6. dec. 13:18:29 2006 UTC)\n"
-"\n"
-"    Dette er den interne representation af datoer. unixtime er\n"
-"    antallet af sekunder siden begyndelsen af epoken (1970-01-01 00:00\n"
-"    UTC). offset er den lokale tidszone, angivet i antal sekunder vest\n"
-"    for UTC (negativ hvis tidszonen er øst for UTC).\n"
-"\n"
-"    Kommandoen log accepterer også datointervaller:\n"
-"\n"
-"    \"<{date}\" - på eller før den angivne dato\n"
-"    \">{date}\" - på eller efter den angivne dato\n"
-"    \"{date} to {date}\" - et datointerval, inklusiv endepunkterne\n"
-"    \"-{days}\" - indenfor et angivet antal date, fra dags dato\n"
-"    "
+"The log command also accepts date ranges:\n"
+"\n"
+"- ``<{datetime}`` - at or before a given date/time\n"
+"- ``>{datetime}`` - on or after a given date/time\n"
+"- ``{datetime} to {datetime}`` - a date range, inclusive\n"
+"- ``-{days}`` - within a given number of days of today\n"
+msgstr ""
 
 msgid ""
 "Mercurial's default format for showing changes between two versions of\n"
@@ -203,7 +206,7 @@
 "    - hgrc files from the HGRCPATH\n"
 "    - EMAIL\n"
 "    - interactive prompt\n"
-"    - LOGNAME (with '@hostname' appended)\n"
+"    - LOGNAME (with ``@hostname`` appended)\n"
 "\n"
 "    (deprecated, use .hgrc)\n"
 "\n"
@@ -435,11 +438,11 @@
 "              the timezone: \"Mon Sep 04 15:13:13 2006 0700\".\n"
 ":domain:      Any text. Finds the first string that looks like an\n"
 "              email address, and extracts just the domain\n"
-"              component. Example: 'User <user@example.com>' becomes\n"
-"              'example.com'.\n"
+"              component. Example: ``User <user@example.com>`` becomes\n"
+"              ``example.com``.\n"
 ":email:       Any text. Extracts the first string that looks like\n"
-"              an email address. Example: 'User <user@example.com>'\n"
-"              becomes 'user@example.com'.\n"
+"              an email address. Example: ``User <user@example.com>``\n"
+"              becomes ``user@example.com``.\n"
 ":escape:      Any text. Replaces the special XML/XHTML characters\n"
 "              \"&\", \"<\" and \">\" with XML entities.\n"
 ":fill68:      Any text. Wraps the text to fit in 68 columns.\n"
@@ -523,7 +526,7 @@
 "  ...\n"
 "\n"
 "You can then use the alias for any command that uses a URL (for\n"
-"example 'hg pull alias1' would pull from the 'alias1' path).\n"
+"example 'hg pull alias1' will be treated as 'hg pull URL1').\n"
 "\n"
 "Two path aliases are special because they are used as defaults when\n"
 "you do not provide the URL to a command:\n"
@@ -586,6 +589,60 @@
 "  glob pattern = user4, user5\n"
 "   ** = user6\n"
 msgstr ""
+"hooks για έλεγχο της πρόσβασης σε ένα αποθετήριο\n"
+"\n"
+"Τα hooks της επέκτασης acl σας δίνουν τη δυνατότητα να επιτρέψετε ή να\n"
+"απαγορεύσετε την πρόσβαση για αλλαγές σε μέρη ενός αποθετηρίου κατά τη\n"
+"διάρκεια της λήψης εισερχόμενων αλλαγών.\n"
+"\n"
+"Η πρόσβαση ελέγχεται με βάση το τοπικό όνομα χρήστη στο σύστημα το οποίο\n"
+"εκτελεί τον κώδικα της επέκτασης κι όχι με βάση το όνομα του συγγραφέα\n"
+"μιας αλλαγής (αφού το δεύτερο υπάρχει μόνο για πληροφοριακούς σκοπούς).\n"
+"\n"
+"Η επέκταση acl είναι πιο χρήσιμη όταν συνδυάζεται με ένα περιορισμένο\n"
+"φλοιό όπως το hgsh, αφού έτσι οι απομακρυσμένοι χρήστες έχουν πρόσβαση\n"
+"μόνο για λειτουργίες pull ή push.  Η επέκταση δε μπορεί να σας\n"
+"εξασφαλίσει ότι δε θα την απενεργοποιήσουν οι τοπικοί χρήστες όταν\n"
+"έχουν απευθείας πρόσβαση να εκτελέσουν οποιαδήποτε εντολή στο\n"
+"εξυπηρετητή του αποθετηρίου.  Δεν είναι ασφαλής, επίσης, όταν πολλοί\n"
+"απομακρυσμένοι χρήστες μοιράζονται τον ίδιο τοπικό λογαριασμό, αφού δεν\n"
+"υπάρχει τρόπος να ξεχωρίσει ο ένας χρήστης από τον άλλο.\n"
+"\n"
+"Για να χρησιμοποιήσετε το hook της επέκτασης ενεργοποιήστε την στο\n"
+"αρχείο hgrc ως εξής::\n"
+"\n"
+"  [extensions]\n"
+"  hgext.acl =\n"
+"\n"
+"  [hooks]\n"
+"  pretxnchangegroup.acl = python:hgext.acl.hook\n"
+"\n"
+"  [acl]\n"
+"  # Ελέγξτε αν η πηγή των εισερχόμενων αλλαγών είναι κάποια από τις\n"
+"  # (\\\"serve\\\" == ssh ή http, \\\"push\\\", \\\"pull\\\", \\\"bundle\\"
+"\")\n"
+"  sources = serve\n"
+"\n"
+"Τα τμήματα του αρχείου ρυθμίσεων τα οποία επιτρέπουν ή απαγορεύουν την\n"
+"πρόσβαση μπορούν να αναφέρονται σε υποκαταλόγους του αποθετηρίου (με\n"
+"σύνταξη glob για τα ονόματα αρχείων ή υποκαταλόγων).  Σε κάθε πρότυπο\n"
+"ονόματος μπορείτε να ορίσετε ένα ή περισσότερους χρήστες χωρίζοντας τα\n"
+"ονόματά τους με κόμμα.  Η λίστα προτύπων που απαγορεύει την πρόσβαση\n"
+"ελέγχεται πρώτη. ::\n"
+"\n"
+"  [acl.allow]\n"
+"  # Όταν δεν υπάρχει το τμήμα acl.allow επιτρέπεται η πρόσβαση σε\n"
+"  # όλους τους χρήστες.  Όταν το τμήμα acl.allow είναι κενό δεν\n"
+"  # επιτρέπεται η πρόσβαση σε κανέναν χρήστη.\n"
+"  docs/** = doc_writer\n"
+"  .hgtags = release_engineer\n"
+"\n"
+"  [acl.deny]\n"
+"  # Όταν δεν υπάρχει το τμήμα acl.deny επιτρέπεται η πρόσβαση σε\n"
+"  # όλους τους χρήστες.  Όταν είναι κενό επίσης επιτρέπεται η\n"
+"  # πρόσβαση σε όλους.\n"
+"  glob pattern = user4, user5\n"
+"   ** = user6\n"
 
 #, python-format
 msgid "config error - hook type \"%s\" cannot stop incoming changesets"
@@ -620,6 +677,28 @@
 "using, and only update it. This is similar to git's approach to\n"
 "branching.\n"
 msgstr ""
+"παρακολούθηση μιας γραμμής ανάπτυξης με κινητές ετικέτες\n"
+"\n"
+"Τα bookmarks είναι κινητές ετικέτες για αλλαγές.  Κάθε ετικέτα δείχνει\n"
+"σε μια αλλαγή, με βάση το hash της αλλαγής.  Αν δημιουργήσετε μια νέα\n"
+"αλλαγή με βάση μια αλλαγή στην οποία δείχνει μια ετικέτα, η ετικέτα\n"
+"μετακινείται στην καινούρια αλλαγή.\n"
+"\n"
+"Οι ετικέτες μπορούν να χρησιμοποιηθούν οπουδήποτε έχει νόημα το\n"
+"αναγνωριστικό μιας έκδοσης (π.χ. ως ορίσματα των hg merge ή hg update).\n"
+"\n"
+"Η προκαθορισμένη συμπεριφορά της επέκτασης είναι να μετακινεί όλες τις\n"
+"ετικέτες μιας γονικής αλλαγής.  Αυτή η συμπεριφορά μπορεί να αλλάξει,\n"
+"για να μοιάζει περισσότερο με το git, προσθέτοντας την παρακάτω επιλογή\n"
+"στο αρχείο .hgrc::\n"
+"\n"
+"  [bookmarks]\n"
+"  track.current = True\n"
+"\n"
+"Με αυτή την επιλογή το Mercurial θα ελέγχει αν έχετε ενεργοποιήσει\n"
+"κάποια ετικέτα και θα μετακινεί μόνο αυτή την ετικέτα.  Αυτή η\n"
+"συμπεριφορά μοιάζει με τον τρόπο που λειτουργούν οι κλάδοι ανάπτυξης στο\n"
+"git.\n"
 
 msgid ""
 "track a line of development with movable markers\n"
@@ -635,6 +714,20 @@
 "    the bookmark is assigned to that revision.\n"
 "    "
 msgstr ""
+"παρακολούθηση μιας γραμμής ανάπτυξης με κινητές ετικέτες\n"
+"\n"
+"    Οι ετικέτες είναι δείκτες προς συγκεκριμένες αλλαγές, οι οποίοι\n"
+"    μετακινούνται όταν κάνετε commit.  Οι ετικέτες αποθηκεύονται μόνο\n"
+"    τοπικά.  Μπορούν να μετονομαστούν, να αντιγραφούν, και να σβηστούν.\n"
+"    Η χρήση τους επιτρέπεται τόσο με την εντολή 'hg merge όσο και με την\n"
+"    'hg update', για συγχώνευση ή ενημέρωση, αντίστοιχα, του χώρου\n"
+"    εργασίας με την έκδοση μιας ετικέτας.\n"
+"\n"
+"    Μπορείτε να δώσετε 'hg bookmark ΟΝΟΜΑ' για να ορίσετε μια ετικέτα η\n"
+"    οποία δείχνει στη γονική αλλαγή του χώρου εργασίας.  Με την επιλογή\n"
+"    '-r REV' (όπου REV μπορεί να είναι και μια υπάρχουσα ετικέτα)\n"
+"    μπορείτε να ορίσετε μια νέα ετικέτα για οποιαδήποτε έκδοση.\n"
+"    "
 
 msgid "a bookmark of this name does not exist"
 msgstr "δεν υπάρχει σελιδοδείκτης με αυτό το όνομα"
@@ -650,7 +743,7 @@
 
 msgid "bookmark name cannot contain newlines"
 msgstr ""
-"το όνομα ενός σελιδοδείκτη δεν επιτρέπεται να περιέχει χαρακτήρεςαλλαγής "
+"το όνομα ενός σελιδοδείκτη δεν επιτρέπεται να περιέχει χαρακτήρες αλλαγής "
 "γραμμής"
 
 msgid "a bookmark cannot have the name of an existing branch"
@@ -658,7 +751,7 @@
 "οι σελιδοδείκτες δεν επιτρέπεται να έχουν το όνομα ενός υπάρχοντος κλάδου"
 
 msgid "force"
-msgstr ""
+msgstr "force"
 
 msgid "revision"
 msgstr "αλλαγή"
@@ -669,9 +762,8 @@
 msgid "rename a given bookmark"
 msgstr "μετονομασία ενός σελιδοδείκτη"
 
-#, fuzzy
 msgid "hg bookmarks [-f] [-d] [-m NAME] [-r REV] [NAME]"
-msgstr "hg bookmarks [-d] [-m ΟΝΟΜΑ] [-r ΟΝΟΜΑ] [ΟΝΟΜΑ]"
+msgstr "hg bookmarks [-f] [-d] [-m ΟΝΟΜΑ] [-r REV] [REV]"
 
 msgid ""
 "hooks for integrating with the Bugzilla bug tracker\n"
@@ -808,6 +900,157 @@
 "\n"
 "    Changeset commit comment. Bug 1234.\n"
 msgstr ""
+"διασύνδεση με το bug tracker Bugzilla\n"
+"\n"
+"Αυτή η επέκταση προσθέτει σχόλια σε bugs στο Bugzilla όταν δει κάποια\n"
+"αλλαγή να αναφέρεται σε ανοιχτά bugs. Το hook της επέκτασης δεν αλλάζει\n"
+"την κατάσταση του bug.\n"
+"\n"
+"Το hook ενημερώνει απευθείας τη βάση δεδομένων του Bugzilla.  Αυτή η\n"
+"έκδοση υποστηρίζει μόνο εγκαταστάσεις του Bugzilla που χρησιμοποιούν τη\n"
+"βάση δεδομένων MySQL.\n"
+"\n"
+"Το hook καλεί εσωτερικά το script του Bugzilla για ειδοποιήσεις μέσω\n"
+"email. Το script έχει διαφορετικό όνομα σε μερικές εκδόσεις του\n"
+"Bugzilla. Μέχρι την έκδοση 2.18 λέγεται 'processmail'. Από την έκδοση\n"
+"2.18 και μετά αντικαταστάθηκε από το 'config/sendbugmail.pl'. Το script\n"
+"εκτελείται με τα δικαιώματα του χρήστη που στέλνει τις αλλαγές μέσω\n"
+"Mercurial· μπορεί να χρειαστεί να ρυθμίσετε τις άδειες χρήστη στην\n"
+"εγκατάσταση του Bugzilla για να λειτουργήσει σωστά.\n"
+"\n"
+"Η επέκταση bugzilla ρυθμίζεται μέσω τριών διαφορετικών τμημάτων του\n"
+"αρχείου εκκίνησης του Mercurial.  Οι παρακω επιλογές αναγνωρίζονται στο\n"
+"τμήμα [bugzilla]:\n"
+"\n"
+"host\n"
+"  Το όνομα του εξυπηρετητή MySQL για τη βάση δεδομένων του Bugzilla.\n"
+"\n"
+"db\n"
+"  Το όνομα της βάσης δεδομένων MySQL του Bugzilla.  Προκαθορισμένο όνομα\n"
+"  'bugs'.\n"
+"\n"
+"user\n"
+"  Το όνομα χρήστη για πρόσβαση στον εξυπηρετητή MySQL.  Προκαθορισμένο\n"
+"  όνομα 'bugs'.\n"
+"\n"
+"password\n"
+"  Κωδικός χρήστη για πρόσβαση στον εξυπηρετητή MySQL.\n"
+"\n"
+"timeout\n"
+"  Χρονικό όριο πρόσβασης στη βάση δεδομένων (δευτερόλεπτα).\n"
+"  Προκαθορισμένος χρόνος 5.\n"
+"\n"
+"version\n"
+"  Έκδοση Bugzilla.  Ορίστε '3.0' για την έκδοση 3.0 ή νεώτερες, '2.18'\n"
+"  για εκδόσεις από 2.18 έως και 3.0, και '2.16' για εκδόσεις πιο παλιές\n"
+"  από την 2.18.\n"
+"\n"
+"bzuser\n"
+"  Εναλλακτικό όνομα χρήστη Bugzilla.  Το όνομα του χρήστη Bugzilla που\n"
+"  θα χρησιμοποιείται όταν ο αρχικός συγγραφέας μιας αλλαγής δε μπορεί να\n"
+"  βρεθεί ως χρήστης στο Bugzilla.\n"
+"\n"
+"bzdir\n"
+"   Ο κατάλογος εγκατάστασης του Bugzilla.  Χρησιμοποιείται από τον\n"
+"   προκαθορισμένο μηχανισμό ειδοποιήσεων.  Προκαθορισμένος κατάλογος\n"
+"   '/var/www/html/bugzilla'.\n"
+"\n"
+"notify\n"
+"  Η εντολή που χρησιμοποιείται για την αποστολή ειδοποιήσεων μέσω\n"
+"  Bugzilla.  Η επέκταση υποστηρίζει τρία κλειδιά στην τιμή αυτής της\n"
+"  εντολής: 'bzdir', 'id' (bug id) και 'user' (το όνομα χρήστη στο\n"
+"  bugzilla).  Η προκαθορισμένη τιμή εξαρτάται από την έκδοση του\n"
+"  Bugzilla.  Για την έκδοση 2.18 και νεότερες είναι \\\"cd %(bzdir)s &&\n"
+"  perl -T contrib/sendbugmail.pl %(id)s %(user)s\\\".\n"
+"\n"
+"regexp\n"
+"  Regular expression to match bug IDs in changeset commit message.\n"
+"  Must contain one \\\"()\\\" group. The default expression matches 'Bug\n"
+"  1234', 'Bug no. 1234', 'Bug number 1234', 'Bugs 1234,5678', 'Bug\n"
+"  1234 and 5678' and variations thereof. Matching is case insensitive.\n"
+"\n"
+"style\n"
+"  Το αρχείο στυλ που θα χρησιμοποιείται για την μορφοποίηση των σχολίων.\n"
+"\n"
+"template\n"
+"  Πρότυπο μορφοποίησης σχολίων.  Όταν ορίζεται έχει προτεραιότητα σε\n"
+"  σχέση με το αρχείο στυλ.  Υποστηρίζονται όλες οι συνηθισμένες λέξεις\n"
+"  κλειδιά των προτύπων του Mercurial, κι επιπλέον οι εξής ειδικές λέξεις\n"
+"  κλειδιά::\n"
+"\n"
+"    {bug}       Το ID ενός bug στο Bugzilla.\n"
+"    {root}      Ο πλήρης κατάλογος ενός αποθετηρίου Mercurial.\n"
+"    {webroot}   Σύντομη μορφή του καταλόγου ενός αποθετηρίου.\n"
+"    {hgweb}     Αρχικό URL για προβολή των αποθετηρίων Mercurial.\n"
+"\n"
+"  Προκαθορισμένη τιμή: 'changeset {node|short} in repo {root} refers '\n"
+"                       'to bug {bug}.\\\\ndetails:\\\\n\\\\t{desc|"
+"tabindent}'\n"
+"\n"
+"strip\n"
+"  The number of slashes to strip from the front of {root} to produce\n"
+"  {webroot}. Default 0.\n"
+"\n"
+"usermap\n"
+"\n"
+"  Η διαδρομή του αρχείου αντιστοίχησης του ονόματος κάθε συγγραφέα από\n"
+"  το Mercurial σε Bugzilla user ID. Όταν ορίζεται αυτή η επιλογή το\n"
+"  αρχείο πρέπει να περιέχει μια αντιστοίχηση ανά γραμμή.  Κάθε γραμμή\n"
+"  είναι της μορφής \\\"committer\\\"=\\\"Bugzilla user\\\". Δείτε και την\n"
+"  περιγραφή του τμήματος [usermap].\n"
+"\n"
+"Το τμήμα [usermap] χρησιμοποιείται για την αντιστοίχηση του ονόματος\n"
+"κάθε συγγραφέα από το όνομα που χρησιμοποιεί στο Mercurial στο όνομα\n"
+"χρήστη που έχει στο Bugzilla.  Δείτε επίσης την περιγραφή της επιλογής\n"
+"[bugzilla].usermap.  Η μορφή που έχει κάθε γραμμή στο usermap είναι::\n"
+"\n"
+"\\\"committer\\\"=\\\"Bugzilla user\\\"\n"
+"\n"
+"Τέλος, στο τμήμα [web] υποστηρίζεται η εξής επιλογή:\n"
+"\n"
+"baseurl\n"
+"  Αρχικός κατάλογος για προβολή των αποθετηρίων Mercurial.  Η τιμή του\n"
+"  baseurl χρησιμοποιείται από τα πρότυπα μορφοποίησης ως {hgweb}.\n"
+"\n"
+"Ενεργοποίηση της επέκτασης::\n"
+"\n"
+"    [extensions]\n"
+"    hgext.bugzilla =\n"
+"\n"
+"    [hooks]\n"
+"    # run bugzilla hook on every change pulled or pushed in here\n"
+"    incoming.bugzilla = python:hgext.bugzilla.hook\n"
+"\n"
+"Παράδειγμα ρυθμίσεων:\n"
+"\n"
+"Οι παρακάτω ρυθμίσεις αναφέρονται σε μια συλλογή αποθετηρίων Mercurial\n"
+"στον κατάλογο /var/local/hg/repos/ και μια τοπική εγκατάσταση του\n"
+"Bugzilla 3.2 με αρχικό κατάλογο τον /opt/bugzilla-3.2. ::\n"
+"\n"
+"    [bugzilla]\n"
+"    host=localhost\n"
+"    password=XYZZY\n"
+"    version=3.0\n"
+"    bzuser=unknown@domain.com\n"
+"    bzdir=/opt/bugzilla-3.2\n"
+"    template=Αλλαγή {node|short} στο {root|basename}.\n"
+"             {hgweb}/{webroot}/rev/{node|short}\\\\n\n"
+"             {desc}\\\\n\n"
+"    strip=5\n"
+"\n"
+"    [web]\n"
+"    baseurl=http://dev.domain.com/hg\n"
+"\n"
+"    [usermap]\n"
+"    user@emaildomain.com=user.name@bugzilladomain.com\n"
+"\n"
+"Οι αλλαγές που στέλνονται στα αποθετήρια προσθέτουν στα αντίστοιχα bug\n"
+"report ένα σχόλιο της μορφής::\n"
+"\n"
+"    Αλλαγή 3b16791d6642 στο όνομα-αποθετηρίου.\n"
+"    http://dev.domain.com/hg/repository-name/rev/3b16791d6642\n"
+"\n"
+"    Περιγραφή της αλλαγής.  Bug 1234.\n"
 
 #, python-format
 msgid "connecting to %s:%s as %s, password %s\n"
@@ -829,7 +1072,7 @@
 msgstr "το πρόβλημα %d έχει ενημερωθεί ήδη για την αλλαγή %s\n"
 
 msgid "telling bugzilla to send mail:\n"
-msgstr ""
+msgstr "ειδοποίηση του bugzilla να στείλει email:\n"
 
 #, python-format
 msgid "  bug %s\n"
@@ -837,11 +1080,11 @@
 
 #, python-format
 msgid "running notify command %s\n"
-msgstr ""
+msgstr "εκτέλεση εντολής ειδοποίησης %s\n"
 
 #, python-format
 msgid "bugzilla notify command %s"
-msgstr ""
+msgstr "εντολή ειδοποίησης bugzilla %s"
 
 msgid "done\n"
 msgstr "ολοκληρώθηκε\n"
@@ -867,6 +1110,9 @@
 "details:\n"
 "\t{desc|tabindent}"
 msgstr ""
+"η αλλαγή {node|short} στο αποθετήριο {root} αναφέρεται στο bug {bug}.\n"
+"λεπτομέρειες:\n"
+"\t{desc|tabindent}"
 
 #, python-format
 msgid "python mysql support not available: %s"
@@ -881,7 +1127,7 @@
 msgstr "σφάλμα βάσης δεδομένων: %s"
 
 msgid "command to display child changesets"
-msgstr ""
+msgstr "εντολή προβολής εξαρτώμενων αλλαγών"
 
 msgid ""
 "show the children of the given or working directory revision\n"
@@ -894,27 +1140,24 @@
 "    "
 msgstr ""
 
-#, fuzzy
 msgid "show children of the specified revision"
-msgstr "lav statistik for de specificerede revisioner"
+msgstr ""
 
 msgid "hg children [-r REV] [FILE]"
 msgstr "hg children [-r ΕΚΔΟΣΗ] [ΑΡΧΕΙΟ]"
 
-#, fuzzy
 msgid "command to display statistics about repository history"
 msgstr ""
 "εντολή η οποία δείχνει κάποια στατιστικά για το ιστορικό του αποθετηρίου"
 
 #, python-format
 msgid "Revision %d is a merge, ignoring...\n"
-msgstr ""
+msgstr "Η αλλαγή %d είναι αλλαγή συγχώνευσης, αγνοείται...\n"
 
 #, python-format
 msgid "generating stats: %d%%"
-msgstr ""
-
-#, fuzzy
+msgstr "υπολογισμός στατιστικών: %d%%"
+
 msgid ""
 "histogram of changes to the repository\n"
 "\n"
@@ -951,32 +1194,6 @@
 "    a .hgchurn file will be looked for in the working directory root.\n"
 "    "
 msgstr ""
-"plot antallet af revisioner grupperet efter et mønster\n"
-"\n"
-"    Plotter antallet af ændrede linier eller antallet af revisioner\n"
-"    grupperet efter et mønster eller alternativt efter dato, hvis\n"
-"    dateformat bruges. I så tilfælde bruges mønstret ikke.\n"
-"\n"
-"    Som udgangspunkt laves der statistik over antallet af ændrede\n"
-"    linier.\n"
-"\n"
-"    Eksempler:\n"
-"\n"
-"      # viser antaller af ændrede linier for hver bruger\n"
-"      hg churn -t '{author|email}'\n"
-"\n"
-"      # viser graf over daglig aktivitet\n"
-"      hg churn -f '%H' -s -c\n"
-"\n"
-"      # viser månedlig aktivitet af udviklerne\n"
-"      hg churn -f '%Y-%m' -s -c\n"
-"\n"
-"      # viser antallet af linier ændret hvert år\n"
-"      hg churn -f '%Y' -s\n"
-"\n"
-"    Formatet for map-filen er rimelig simpelt:\n"
-"\n"
-"    <alias email> <faktisk email>"
 
 msgid "count rate for the specified revision or range"
 msgstr ""
@@ -996,11 +1213,14 @@
 msgid "sort by key (default: sort by count)"
 msgstr ""
 
+msgid "display added/removed lines separately"
+msgstr ""
+
 msgid "file with email aliases"
 msgstr ""
 
 msgid "show progress"
-msgstr ""
+msgstr "προβολή προόδου"
 
 msgid "hg churn [-d DATE] [-r REV] [--aliases FILE] [--progress] [FILE]"
 msgstr ""
@@ -1149,7 +1369,10 @@
 "    revision control system whose parents should be modified (same\n"
 "    format as a key in .hg/shamap). The values are the revision IDs\n"
 "    (in either the source or destination revision control system) that\n"
-"    should be used as the new parents for that node.\n"
+"    should be used as the new parents for that node. For example, if\n"
+"    you have merged \"release-1.0\" into \"trunk\", then you should\n"
+"    specify the revision on \"trunk\" as the first parent and the one on\n"
+"    the \"release-1.0\" branch as the second.\n"
 "\n"
 "    The branchmap is a file that allows you to rename a branch when it is\n"
 "    being brought in from whatever external repository. When used in\n"
@@ -1339,7 +1562,7 @@
 msgstr ""
 
 msgid "show parent changesets"
-msgstr ""
+msgstr "προβολή γονικών αλλαγών"
 
 msgid "show current changeset in ancestor branches"
 msgstr ""
@@ -1348,7 +1571,7 @@
 msgstr ""
 
 msgid "hg debugcvsps [OPTION]... [PATH]..."
-msgstr ""
+msgstr "hg debugcvsps [ΕΠΙΛΟΓΗ]... [ΑΡΧΕΙΟ]"
 
 msgid ""
 "warning: lightweight checkouts may cause conversion failures, try with a "
@@ -1523,13 +1746,15 @@
 msgstr "δημιουργία αλλαγών\n"
 
 msgid "synthetic changeset cannot have multiple parents"
-msgstr ""
+msgstr "μια συνθετική αλλαγή δε μπορεί να έχει πολλές γονικές αλλαγές"
 
 #, python-format
 msgid ""
 "warning: CVS commit message references non-existent branch %r:\n"
 "%s\n"
 msgstr ""
+"προειδοποίηση: το μήνυμα καταγραφής CVS αναφέρεται στον ανύπαρκτο κλάδο %r:\n"
+"%s\n"
 
 #, python-format
 msgid "%d changeset entries\n"
@@ -1615,17 +1840,20 @@
 msgid "copying file in renamed directory from '%s' to '%s'"
 msgstr ""
 
-#, fuzzy
 msgid "reading p4 views\n"
-msgstr "καθαρισμός %s\n"
-
-#, fuzzy
+msgstr ""
+
 msgid "collecting p4 changelists\n"
-msgstr "δημιουργία αλλαγών\n"
+msgstr ""
 
 msgid "Mercurial failed to run itself, check hg executable is in PATH"
 msgstr ""
 
+msgid ""
+"svn: cannot probe remote repository, assume it could be a subversion "
+"repository. Use --source-type if you know better.\n"
+msgstr ""
+
 msgid "Subversion python bindings could not be loaded"
 msgstr ""
 
@@ -1788,26 +2016,25 @@
 msgstr ""
 
 msgid "hg extdiff [OPT]... [FILE]..."
-msgstr ""
+msgstr "hg extdiff [ΕΠΙΛΟΓΗ]... [ΑΡΧΕΙΟ]..."
 
 #, python-format
 msgid ""
 "use %(path)s to diff repository (or selected files)\n"
 "\n"
-"    Show differences between revisions for the specified files, using the\n"
-"    %(path)s program.\n"
-"\n"
-"    When two revision arguments are given, then changes are shown between\n"
-"    those revisions. If only one revision is specified then that revision "
-"is\n"
-"    compared to the working directory, and, when no revisions are "
-"specified,\n"
-"    the working directory files are compared to its parent."
+"    Show differences between revisions for the specified files, using\n"
+"    the %(path)s program.\n"
+"\n"
+"    When two revision arguments are given, then changes are shown\n"
+"    between those revisions. If only one revision is specified then\n"
+"    that revision is compared to the working directory, and, when no\n"
+"    revisions are specified, the working directory files are compared\n"
+"    to its parent."
 msgstr ""
 
 #, python-format
 msgid "hg %s [OPTION]... [FILE]..."
-msgstr ""
+msgstr "hg %s [ΕΠΙΛΟΓΗ]... [ΑΡΧΕΙΟ]..."
 
 msgid "pull, update and merge in one command"
 msgstr ""
@@ -1866,11 +2093,11 @@
 
 #, python-format
 msgid "updating to %d:%s\n"
-msgstr ""
+msgstr "ενημέρωση σε %d:%s\n"
 
 #, python-format
 msgid "merging with %d:%s\n"
-msgstr ""
+msgstr "συγχώνευση με %d:%s\n"
 
 #, python-format
 msgid "new changeset %d:%s merges remote changes with local\n"
@@ -1880,7 +2107,7 @@
 msgstr ""
 
 msgid "edit commit message"
-msgstr ""
+msgstr "επεξεργασία μηνύματος καταγραφής"
 
 msgid "edit commit message (DEPRECATED)"
 msgstr ""
@@ -1889,13 +2116,13 @@
 msgstr ""
 
 msgid "hg fetch [SOURCE]"
-msgstr ""
+msgstr "hg fetch [ΠΗΓΗ]"
 
 msgid "commands to sign and verify changesets"
 msgstr ""
 
 msgid "error while verifying signature"
-msgstr ""
+msgstr "σφάλμα επιβεβαίωσης υπογραφής"
 
 #, python-format
 msgid "%s Bad signature from \"%s\"\n"
@@ -1910,7 +2137,7 @@
 msgstr ""
 
 msgid "list signed changesets"
-msgstr ""
+msgstr "προβολή λίστας υπογεγραμμένων αλλαγών"
 
 #, python-format
 msgid "%s:%d node does not exist\n"
@@ -1921,7 +2148,7 @@
 
 #, python-format
 msgid "No valid signature for %s\n"
-msgstr ""
+msgstr "Δεν υπάρχει έγκυρη υπογραφή για την αλλαγή %s\n"
 
 msgid ""
 "add a signature for the current or given revision\n"
@@ -1937,7 +2164,7 @@
 msgstr ""
 
 msgid "Error while signing"
-msgstr ""
+msgstr "Σφάλμα δημιουργίας υπογραφής"
 
 msgid ""
 "working copy of .hgsigs is changed (please commit .hgsigs manually or use --"
@@ -1957,16 +2184,16 @@
 msgstr ""
 
 msgid "the key id to sign with"
-msgstr ""
+msgstr "το κλειδί με το οποίο δημιουργούνται υπογραφές"
 
 msgid "commit message"
-msgstr ""
+msgstr "μήνυμα καταγραφής"
 
 msgid "hg sign [OPTION]... [REVISION]..."
-msgstr ""
+msgstr "hg sign [ΕΠΙΛΟΓΗ]... [ΑΛΛΑΓΗ]..."
 
 msgid "hg sigcheck REVISION"
-msgstr ""
+msgstr "hg sigcheck ΑΛΛΑΓΗ"
 
 msgid "hg sigs"
 msgstr ""
@@ -2014,7 +2241,7 @@
 msgstr ""
 
 msgid "hg glog [OPTION]... [FILE]"
-msgstr ""
+msgstr "hg glog [ΕΠΙΛΟΓΗ]... [ΑΡΧΕΙΟ]"
 
 msgid ""
 "hooks for integrating with the CIA.vc notification service\n"
@@ -2136,7 +2363,7 @@
 msgstr ""
 
 msgid "search"
-msgstr ""
+msgstr "αναζήτηση"
 
 msgid "hg git-diff-tree [OPTION]... NODE1 NODE2 [FILE]..."
 msgstr ""
@@ -2216,22 +2443,22 @@
 msgid "hg inserve [OPTION]..."
 msgstr ""
 
-msgid "(found dead inotify server socket; removing it)\n"
-msgstr ""
-
-#, python-format
-msgid "could not start inotify server: %s\n"
-msgstr ""
-
-#, python-format
-msgid "could not talk to new inotify server: %s\n"
-msgstr ""
-
-#, python-format
-msgid "failed to contact inotify server: %s\n"
-msgstr ""
-
-msgid "received empty answer from inotify server"
+msgid "inotify-client: found dead inotify server socket; removing it\n"
+msgstr ""
+
+#, python-format
+msgid "inotify-client: could not start inotify server: %s\n"
+msgstr ""
+
+#, python-format
+msgid "inotify-client: could not talk to new inotify server: %s\n"
+msgstr ""
+
+#, python-format
+msgid "inotify-client: failed to contact inotify server: %s\n"
+msgstr ""
+
+msgid "inotify-client: received empty answer from inotify server"
 msgstr ""
 
 #, python-format
@@ -2284,21 +2511,6 @@
 msgstr ""
 
 #, python-format
-msgid "status: %r %s -> %s\n"
-msgstr ""
-
-#, python-format
-msgid "%s dirstate reload\n"
-msgstr ""
-
-#, python-format
-msgid "%s end dirstate reload\n"
-msgstr ""
-
-msgid "rescanning due to .hgignore change\n"
-msgstr ""
-
-#, python-format
 msgid "%s event: created %s\n"
 msgstr ""
 
@@ -2330,8 +2542,22 @@
 msgid "%s hooking back up with %d bytes readable\n"
 msgstr ""
 
-#, python-format
-msgid "could not start server: %s"
+msgid "finished setup\n"
+msgstr ""
+
+#, python-format
+msgid "status: %r %s -> %s\n"
+msgstr ""
+
+msgid "rescanning due to .hgignore change\n"
+msgstr ""
+
+msgid "cannot start: socket is already bound"
+msgstr ""
+
+msgid ""
+"cannot start: tried linking .hg/inotify.sock to a temporary socket but .hg/"
+"inotify.sock already exists"
 msgstr ""
 
 #, python-format
@@ -2346,9 +2572,6 @@
 msgid "unrecognized query type: %s\n"
 msgstr ""
 
-msgid "finished setup\n"
-msgstr ""
-
 msgid ""
 "expand expressions into changelog and summaries\n"
 "\n"
@@ -2454,9 +2677,9 @@
 "    "
 msgstr ""
 
-#, fuzzy, python-format
+#, python-format
 msgid "creating temporary repository at %s\n"
-msgstr "δημιουργία αποθετηρίου για το queue"
+msgstr "δημιουργία προσωρινού αποθετηρίου %s\n"
 
 msgid ""
 "\n"
@@ -2571,7 +2794,6 @@
 msgid "hg kwshrink [OPTION]... [FILE]..."
 msgstr ""
 
-#, fuzzy
 msgid ""
 "manage a stack of patches\n"
 "\n"
@@ -2595,29 +2817,6 @@
 "  remove patch from applied stack           qpop\n"
 "  refresh contents of top applied patch     qrefresh\n"
 msgstr ""
-"udvikling og håndtering af patches\n"
-"\n"
-"Denne udvidelse lader dig arbejde med en stak af patches i et\n"
-"Mercurial repository. Den håndterer to stakke af patches - alle kendte\n"
-"patches og alle anvendte patches (en delmængde af de kendte patches).\n"
-"\n"
-"Kendte patches er repræsenteret som patch-filer i .hg/patches\n"
-"biblioteket. Anvendte patches er både patch-filer og Mercurial\n"
-"ændringer.\n"
-"\n"
-"Almindelige opgaver (brug \"hg help kommado\" for flere detaljer):\n"
-"\n"
-"forbered repository til at arbejde med patches   qinit\n"
-"opret ny patch                                   qnew\n"
-"importer eksisterende patch                      qimport\n"
-"\n"
-"list patch-serien                                qseries\n"
-"list anvendte patches                            qapplied\n"
-"list navnet på den øverste patch                 qtop\n"
-"\n"
-"anvend og put patch på stakken                   qpush\n"
-"fjern patch fra stakken                          qpop\n"
-"genopfrisk indholdet af den øverste patch        qrefresh\n"
 
 #, python-format
 msgid "%s appears more than once in %s"
@@ -2700,9 +2899,9 @@
 msgid "applying %s\n"
 msgstr ""
 
-#, fuzzy, python-format
+#, python-format
 msgid "unable to read %s\n"
-msgstr " ενημέρωση σε %d:%s\n"
+msgstr "αποτυχία ανάγνωσης του %s\n"
 
 #, python-format
 msgid "imported patch %s\n"
@@ -2769,7 +2968,7 @@
 
 #, python-format
 msgid "error unlinking %s\n"
-msgstr ""
+msgstr "σφάλμα διαγραφής του %s\n"
 
 #, python-format
 msgid "patch name \"%s\" is ambiguous:\n"
@@ -2779,12 +2978,11 @@
 msgid "patch %s not in series"
 msgstr ""
 
-#, fuzzy
 msgid "(working directory not at a head)\n"
-msgstr "χώρος εργασίας του %s"
+msgstr "(ο χώρος εργασίας δεν ταιριάζει με κάποιο υπάρχοντα κλάδο)\n"
 
 msgid "no patches in series\n"
-msgstr ""
+msgstr "δεν υπάρχουν patches στην ακολουθία\n"
 
 #, python-format
 msgid "cannot push to a previous patch: %s"
@@ -2824,10 +3022,10 @@
 
 #, python-format
 msgid "patch %s is not applied"
-msgstr ""
+msgstr "το patch %s δεν έχει εφαρμοστεί"
 
 msgid "no patches applied\n"
-msgstr ""
+msgstr "δεν έχει εφαρμοστεί κανένα patch\n"
 
 #, python-format
 msgid "qpop: %s is already at the top\n"
@@ -2846,12 +3044,12 @@
 msgid "deletions found between repo revs"
 msgstr ""
 
-#, fuzzy, python-format
+#, python-format
 msgid "popping %s\n"
 msgstr "αφαίρεση του %s\n"
 
 msgid "patch queue now empty\n"
-msgstr ""
+msgstr "η ακολουθία των patches είναι τώρα κενή\n"
 
 msgid "cannot refresh a revision with children"
 msgstr ""
@@ -2873,7 +3071,7 @@
 
 #, python-format
 msgid "restoring status: %s\n"
-msgstr ""
+msgstr "επαναφορά κατάστασης: %s\n"
 
 msgid "save entry has children, leaving it alone\n"
 msgstr ""
@@ -2943,14 +3141,14 @@
 
 #, python-format
 msgid "patch %s does not exist"
-msgstr ""
+msgstr "το patch %s δεν υπάρχει"
 
 msgid "need --name to import a patch from -"
 msgstr ""
 
 #, python-format
 msgid "adding %s to series file\n"
-msgstr ""
+msgstr "προσθήκη του %s στο αρχείο series\n"
 
 msgid ""
 "remove patches from queue\n"
@@ -3035,29 +3233,28 @@
 msgstr ""
 
 msgid "cloning main repository\n"
-msgstr ""
-
-#, fuzzy
+msgstr "κλωνοποίηση του κεντρικού αποθετηρίου\n"
+
 msgid "cloning patch repository\n"
-msgstr "δε μπορεί να δημιουργηθεί ένα νέο αποθετήριο μέσω http"
+msgstr ""
 
 msgid "stripping applied patches from destination repository\n"
 msgstr ""
 
 msgid "updating destination repository\n"
-msgstr ""
+msgstr "ενημέρωση του αποθετηρίου προορισμού\n"
 
 msgid "commit changes in the queue repository"
 msgstr ""
 
 msgid "print the entire series file"
-msgstr ""
+msgstr "προβολή ολόκληρης της ακολουθίας των patches"
 
 msgid "print the name of the current patch"
-msgstr ""
+msgstr "προβολή του ονόματος του τρέχοντος patch"
 
 msgid "print the name of the next patch"
-msgstr ""
+msgstr "προβολή του ονόματος του επόμενου patch"
 
 msgid "print the name of the previous patch"
 msgstr "προβολή του ονόματος του προηγούμενου patch"
@@ -3106,7 +3303,7 @@
 msgstr ""
 
 msgid "option \"-e\" incompatible with \"-m\" or \"-l\""
-msgstr ""
+msgstr "η επιλογή \"-e\" είναι ασύμβατη με τις \"-m\" και \"-l\""
 
 msgid ""
 "diff of the current patch and subsequent modifications\n"
@@ -3141,7 +3338,7 @@
 msgstr ""
 
 msgid "No patches applied"
-msgstr ""
+msgstr "Δεν έχει εφαρμοστεί κανένα patch"
 
 #, python-format
 msgid "Skipping already folded patch %s"
@@ -3153,10 +3350,12 @@
 
 #, python-format
 msgid "Error folding patch %s"
-msgstr ""
+msgstr "Σφάλμα συγχώνευσης του patch %s"
 
 msgid "push or pop patches until named patch is at top of stack"
 msgstr ""
+"εφαρμογή ή αφαίρεση patches μέχρι το patch προορισμού να είναι στην κορυφή "
+"της στοίβας"
 
 msgid ""
 "set or print guards for a patch\n"
@@ -3171,7 +3370,8 @@
 "    With arguments, set guards for the named patch.\n"
 "    NOTE: Specifying negative guards now requires '--'.\n"
 "\n"
-"    To set guards on another patch:\n"
+"    To set guards on another patch::\n"
+"\n"
 "      hg qguard -- other.patch +2.6.17 -stable\n"
 "    "
 msgstr ""
@@ -3184,7 +3384,7 @@
 
 #, python-format
 msgid "no patch named %s"
-msgstr ""
+msgstr "δεν υπάρχει patch με το όνομα %s"
 
 msgid "print the header of the topmost or specified patch"
 msgstr ""
@@ -3202,7 +3402,7 @@
 
 #, python-format
 msgid "merging with queue at: %s\n"
-msgstr ""
+msgstr "συγχώνευση με την ουρά: %s\n"
 
 msgid ""
 "pop the current patch off the stack\n"
@@ -3226,17 +3426,17 @@
 
 #, python-format
 msgid "%s already exists"
-msgstr ""
+msgstr "το %s υπάρχει ήδη"
 
 #, python-format
 msgid "A patch named %s already exists in the series file"
-msgstr ""
+msgstr "Υπάρχει ήδη ένα patch με το όνομα %s στο αρχείο series "
 
 msgid "restore the queue state saved by a revision"
 msgstr ""
 
 msgid "save current queue state"
-msgstr ""
+msgstr "αποθήκευση της τρέχουσας κατάστασης της σειράς patch"
 
 #, python-format
 msgid "destination %s exists and is not a directory"
@@ -3248,7 +3448,7 @@
 
 #, python-format
 msgid "copy %s to %s\n"
-msgstr ""
+msgstr "αντιγραφή του %s σε %s\n"
 
 msgid ""
 "strip a revision and all its descendants from the repository\n"
@@ -3266,7 +3466,7 @@
 "    qselect to tell mq which guards to use. A patch will be pushed if\n"
 "    it has no guards or any positive guards match the currently\n"
 "    selected guard, but will not be pushed if any negative guards\n"
-"    match the current guard. For example:\n"
+"    match the current guard. For example::\n"
 "\n"
 "        qguard foo.patch -stable    (negative guard)\n"
 "        qguard bar.patch +stable    (positive guard)\n"
@@ -3378,9 +3578,8 @@
 msgid "use uncompressed transfer (fast over LAN)"
 msgstr ""
 
-#, fuzzy
 msgid "location of source patch repository"
-msgstr "δε μπορεί να δημιουργηθεί ένα νέο αποθετήριο μέσω http"
+msgstr ""
 
 msgid "hg qclone [OPTION]... SOURCE [DEST]"
 msgstr ""
@@ -3431,7 +3630,7 @@
 msgstr ""
 
 msgid "name of patch file"
-msgstr ""
+msgstr "όνομα του αρχείου patch"
 
 msgid "overwrite existing files"
 msgstr ""
@@ -3484,7 +3683,6 @@
 msgid "queue name to pop"
 msgstr ""
 
-#, fuzzy
 msgid "forget any local changes to patched files"
 msgstr "ακύρωση όλων των τοπικών αλλαγών"
 
@@ -3533,9 +3731,8 @@
 msgid "delete save entry"
 msgstr ""
 
-#, fuzzy
 msgid "update queue working directory"
-msgstr "χώρος εργασίας του %s"
+msgstr ""
 
 msgid "hg qrestore [-d] [-u] REV"
 msgstr ""
@@ -3719,10 +3916,13 @@
 "  ignore = version, help, update\n"
 "\n"
 "You can also enable the pager only for certain commands using\n"
-"pager.attend::\n"
+"pager.attend. Below is the default list of commands to be paged::\n"
 "\n"
 "  [pager]\n"
-"  attend = log\n"
+"  attend = annotate, cat, diff, export, glog, log, qdiff\n"
+"\n"
+"Setting pager.attend to an empty value will cause all commands to be\n"
+"paged.\n"
 "\n"
 "If pager.attend is present, pager.ignore will be ignored.\n"
 "\n"
@@ -3816,13 +4016,13 @@
 msgstr ""
 
 #, python-format
-msgid "%sPlease enter a valid value"
+msgid "%s Please enter a valid value"
 msgstr ""
 
 msgid "Please enter a valid value.\n"
 msgstr ""
 
-msgid "does the diffstat above look okay? "
+msgid "does the diffstat above look okay?"
 msgstr ""
 
 msgid "diffstat rejected"
@@ -4145,11 +4345,10 @@
 msgstr ""
 
 msgid "collapse the rebased changesets"
-msgstr ""
-
-#, fuzzy
+msgstr "συγχώνευση των αλλαγών καθώς μεταφέρονται"
+
 msgid "keep original changesets"
-msgstr "το %s δεν υπάρχει στα manifests"
+msgstr ""
 
 msgid "keep original branch names"
 msgstr ""
@@ -4218,9 +4417,6 @@
 msgid " and "
 msgstr ""
 
-msgid "y"
-msgstr ""
-
 #, python-format
 msgid "record this change to %r?"
 msgstr ""
@@ -4273,6 +4469,68 @@
 msgid "hg qrecord [OPTION]... PATCH [FILE]..."
 msgstr ""
 
+msgid "recreates hardlinks between repository clones"
+msgstr ""
+
+msgid ""
+"recreate hardlinks between two repositories\n"
+"\n"
+"    When repositories are cloned locally, their data files will be\n"
+"    hardlinked so that they only use the space of a single repository.\n"
+"\n"
+"    Unfortunately, subsequent pulls into either repository will break\n"
+"    hardlinks for any files touched by the new changesets, even if\n"
+"    both repositories end up pulling the same changes.\n"
+"\n"
+"    Similarly, passing --rev to \"hg clone\" will fail to use any\n"
+"    hardlinks, falling back to a complete copy of the source\n"
+"    repository.\n"
+"\n"
+"    This command lets you recreate those hardlinks and reclaim that\n"
+"    wasted space.\n"
+"\n"
+"    This repository will be relinked to share space with ORIGIN, which\n"
+"    must be on the same local disk. If ORIGIN is omitted, looks for\n"
+"    \"default-relink\", then \"default\", in [paths].\n"
+"\n"
+"    Do not attempt any read operations on this repository while the\n"
+"    command is running. (Both repositories will be locked against\n"
+"    writes.)\n"
+"    "
+msgstr ""
+
+#, python-format
+msgid "relinking %s to %s\n"
+msgstr ""
+
+#, python-format
+msgid "collected %d candidate storage files\n"
+msgstr ""
+
+msgid "source and destination are on different devices"
+msgstr ""
+
+#, python-format
+msgid "not linkable: %s\n"
+msgstr ""
+
+#, python-format
+msgid "pruned down to %d probably relinkable files\n"
+msgstr ""
+
+msgid " files"
+msgstr ""
+
+msgid "relink"
+msgstr ""
+
+#, python-format
+msgid "relinked %d files (%d bytes reclaimed)\n"
+msgstr ""
+
+msgid "[ORIGIN]"
+msgstr ""
+
 msgid "share a common history between several working directories"
 msgstr ""
 
@@ -4287,9 +4545,8 @@
 "    "
 msgstr ""
 
-#, fuzzy
 msgid "do not create a working copy"
-msgstr "(δώστε 'hg update' για να εξάγετε αντίγραφο εργασίας)\n"
+msgstr ""
 
 msgid "[-U] SOURCE [DEST]"
 msgstr ""
@@ -4670,15 +4927,13 @@
 msgid "moving %s to %s\n"
 msgstr "μετακίνηση του %s στο %s\n"
 
-#, fuzzy, python-format
+#, python-format
 msgid "copying %s to %s\n"
-msgstr "μετακίνηση του %s στο %s\n"
+msgstr "αντιγραφή του %s στο %s\n"
 
 #, python-format
 msgid "%s has not been committed yet, so no copy data will be stored for %s.\n"
 msgstr ""
-"%s er endnu ikke comitted, så der vil ikke blive gemt kopieringsdata for %"
-"s.\n"
 
 msgid "no source or destination specified"
 msgstr ""
@@ -4688,7 +4943,6 @@
 
 msgid "with multiple sources, destination must be an existing directory"
 msgstr ""
-"destinationen skal være en eksisterende mappe når der angivet flere kilder"
 
 #, python-format
 msgid "destination %s is not a directory"
@@ -4775,10 +5029,6 @@
 msgid "cannot follow nonexistent file: \"%s\""
 msgstr ""
 
-#, python-format
-msgid "%s:%s copy source revision cannot be found!\n"
-msgstr ""
-
 msgid "can only follow copies/renames for explicit filenames"
 msgstr ""
 
@@ -4799,17 +5049,17 @@
 msgid "HG: branch '%s'"
 msgstr ""
 
-#, fuzzy, python-format
+#, python-format
 msgid "HG: subrepo %s"
-msgstr "καθαρισμός %s\n"
+msgstr ""
 
 #, python-format
 msgid "HG: added %s"
 msgstr ""
 
-#, fuzzy, python-format
+#, python-format
 msgid "HG: changed %s"
-msgstr "προσθήκη αλλαγής %s\n"
+msgstr ""
 
 #, python-format
 msgid "HG: removed %s"
@@ -4821,7 +5071,6 @@
 msgid "empty commit message"
 msgstr ""
 
-#, fuzzy
 msgid ""
 "add the specified files on the next commit\n"
 "\n"
@@ -4834,17 +5083,6 @@
 "    If no names are given, add all files to the repository.\n"
 "    "
 msgstr ""
-"tilføj de angivne filer ved næste commit\n"
-"\n"
-"    Opskriv filer til at blive versionsstyret og tilføjet til\n"
-"    repository'et.\n"
-"\n"
-"    Filerne vil bliver tilføjet til repository'et ved næste commit.\n"
-"    For at omgøre en tilføjelse før det, se hg revert.\n"
-"\n"
-"    Hvis der ikke er angivet nogen navne tilføjes alle filer i\n"
-"    repository'et.\n"
-"    "
 
 msgid ""
 "add all new files, delete all missing files\n"
@@ -4904,14 +5142,14 @@
 "    directory; use -r/--rev to specify a different revision.\n"
 "\n"
 "    To specify the type of archive to create, use -t/--type. Valid\n"
-"    types are::\n"
-"\n"
-"      \"files\" (default): a directory full of files\n"
-"      \"tar\": tar archive, uncompressed\n"
-"      \"tbz2\": tar archive, compressed using bzip2\n"
-"      \"tgz\": tar archive, compressed using gzip\n"
-"      \"uzip\": zip archive, uncompressed\n"
-"      \"zip\": zip archive, compressed using deflate\n"
+"    types are:\n"
+"\n"
+"    :``files``: a directory full of files (default)\n"
+"    :``tar``:   tar archive, uncompressed\n"
+"    :``tbz2``:  tar archive, compressed using bzip2\n"
+"    :``tgz``:   tar archive, compressed using gzip\n"
+"    :``uzip``:  zip archive, uncompressed\n"
+"    :``zip``:   zip archive, compressed using deflate\n"
 "\n"
 "    The exact name of the destination archive or directory is given\n"
 "    using a format string; see 'hg help export' for details.\n"
@@ -5010,13 +5248,11 @@
 "    "
 msgstr ""
 
-#, fuzzy
 msgid "The first good revision is:\n"
-msgstr "Η πρώτη %s αλλαγή είναι:\n"
-
-#, fuzzy
+msgstr "Η πρώτη καλή %s αλλαγή είναι:\n"
+
 msgid "The first bad revision is:\n"
-msgstr "Η πρώτη %s αλλαγή είναι:\n"
+msgstr "Η πρώτη κακή %s αλλαγή είναι:\n"
 
 msgid "Due to skipped revisions, the first good revision could be any of:\n"
 msgstr ""
@@ -5044,9 +5280,9 @@
 msgid "%s killed"
 msgstr ""
 
-#, fuzzy, python-format
+#, python-format
 msgid "Changeset %d:%s: %s\n"
-msgstr "Αλλαγή: %s: %s\n"
+msgstr "Αλλαγή %d:%s: %s\n"
 
 #, python-format
 msgid "Testing changeset %d:%s (%d changesets remaining, ~%d tests)\n"
@@ -5138,11 +5374,11 @@
 "\n"
 "    Output may be to a file, in which case the name of the file is\n"
 "    given using a format string. The formatting rules are the same as\n"
-"    for the export command, with the following additions::\n"
-"\n"
-"      %s   basename of file being printed\n"
-"      %d   dirname of file being printed, or '.' if in repository root\n"
-"      %p   root-relative path name of file being printed\n"
+"    for the export command, with the following additions:\n"
+"\n"
+"    :``%s``: basename of file being printed\n"
+"    :``%d``: dirname of file being printed, or '.' if in repository root\n"
+"    :``%p``: root-relative path name of file being printed\n"
 "    "
 msgstr ""
 
@@ -5157,22 +5393,36 @@
 "    The location of the source is added to the new repository's\n"
 "    .hg/hgrc file, as the default to be used for future pulls.\n"
 "\n"
-"    If you use the -r/--rev option to clone up to a specific revision,\n"
-"    no subsequent revisions (including subsequent tags) will be\n"
-"    present in the cloned repository. This option implies --pull, even\n"
-"    on local repositories.\n"
-"\n"
-"    By default, clone will check out the head of the 'default' branch.\n"
-"    If the -U/--noupdate option is used, the new clone will contain\n"
-"    only a repository (.hg) and no working copy (the working copy\n"
-"    parent is the null revision).\n"
-"\n"
 "    See 'hg help urls' for valid source format details.\n"
 "\n"
 "    It is possible to specify an ssh:// URL as the destination, but no\n"
 "    .hg/hgrc and working directory will be created on the remote side.\n"
 "    Please see 'hg help urls' for important details about ssh:// URLs.\n"
 "\n"
+"    If the -U/--noupdate option is specified, the new clone will contain\n"
+"    only a repository (.hg) and no working copy (the working copy parent\n"
+"    will be the null changeset). Otherwise, clone will initially check\n"
+"    out (in order of precedence):\n"
+"\n"
+"    a) the changeset, tag or branch specified with -u/--updaterev\n"
+"    b) the changeset, tag or branch given with the first -r/--rev\n"
+"    c) the head of the default branch\n"
+"\n"
+"    Use 'hg clone -u . src dst' to checkout the source repository's\n"
+"    parent changeset (applicable for local source repositories only).\n"
+"\n"
+"    A set of changesets (tags, or branch names) to pull may be specified\n"
+"    by listing each changeset (tag, or branch name) with -r/--rev.\n"
+"    If -r/--rev is used, the cloned repository will contain only a subset\n"
+"    of the changesets of the source repository. Only the set of changesets\n"
+"    defined by all -r/--rev options (including all their ancestors)\n"
+"    will be pulled into the destination repository.\n"
+"    No subsequent changesets (including subsequent tags) will be present\n"
+"    in the destination.\n"
+"\n"
+"    Using -r/--rev (or 'clone src#rev dest') implies --pull, even for\n"
+"    local source repositories.\n"
+"\n"
 "    For efficiency, hardlinks are used for cloning whenever the source\n"
 "    and destination are on the same filesystem (note this applies only\n"
 "    to the repository data, not to the checked out files). Some\n"
@@ -5194,6 +5444,9 @@
 "    "
 msgstr ""
 
+msgid "cannot specify both --noupdate and --updaterev"
+msgstr ""
+
 msgid ""
 "commit the specified files or all outstanding changes\n"
 "\n"
@@ -5215,7 +5468,7 @@
 msgstr ""
 
 msgid "nothing changed\n"
-msgstr ""
+msgstr "δεν έγινε καμία αλλαγή\n"
 
 msgid "created new head\n"
 msgstr "δημιουργήθηκε νέο παρακλάδι\n"
@@ -5247,7 +5500,7 @@
 msgstr "Δεν υπάρχει αποθετήριο Mercurial εδώ (δε βρέθηκε υποκατάλογος .hg)"
 
 msgid "either two or three arguments required"
-msgstr "απαιτούνται είτε δύο ή τρία ορίσματα"
+msgstr "απαιτούνται δύο ή τρία ορίσματα"
 
 msgid "returns the completion list associated with the given command"
 msgstr ""
@@ -5256,7 +5509,7 @@
 msgstr ""
 
 msgid "validate the correctness of the current dirstate"
-msgstr ""
+msgstr "έλεγχος εγκυρότητας της τρέχουσας dirstate"
 
 #, python-format
 msgid "%s in state %s, but not in manifest1\n"
@@ -5294,7 +5547,7 @@
 msgstr ""
 
 msgid "only one config item permitted"
-msgstr ""
+msgstr "σε αυτό το σημείο επιτρέπεται μόνο ένα όρισμα ρυθμίσεων"
 
 msgid ""
 "manually set the parents of the current working directory\n"
@@ -5305,58 +5558,58 @@
 msgstr ""
 
 msgid "show the contents of the current dirstate"
-msgstr ""
+msgstr "προβολή περιεχομένων της τρέχουσας dirstate"
 
 #, python-format
 msgid "copy: %s -> %s\n"
 msgstr "αντιγραφή: %s -> %s\n"
 
 msgid "dump the contents of a data file revision"
-msgstr ""
+msgstr "εκτύπωση περιεχομένων μιας έκδοσης αρχείου δεδομένων"
 
 #, python-format
 msgid "invalid revision identifier %s"
 msgstr "μη έγκυρο όνομα αλλαγής: %s"
 
 msgid "parse and display a date"
-msgstr ""
+msgstr "αναγνώριση και εκτύπωση μιας ημερομηνίας"
 
 msgid "dump the contents of an index file"
-msgstr ""
+msgstr "εκτύπωση περιεχομένων ενός αρχείου καταλόγου"
 
 msgid "dump an index DAG as a graphviz dot file"
-msgstr ""
+msgstr "εκτύπωση του γράφου ενός καταλόγου σε μορφή graphviz dot"
 
 msgid "test Mercurial installation"
-msgstr ""
+msgstr "δοκιμή της εγκατάστασης του Mercurial"
 
 #, python-format
 msgid "Checking encoding (%s)...\n"
-msgstr ""
+msgstr "Έλεγχος κωδικοποίησης (%s)...\n"
 
 msgid " (check that your locale is properly set)\n"
-msgstr ""
+msgstr " (ελέγξτε ότι έχετε τις σωστές ρυθμίσεις γλώσσας)\n"
 
 msgid "Checking extensions...\n"
-msgstr ""
+msgstr "Έλεγχος επεκτάσεων...\n"
 
 msgid " One or more extensions could not be found"
-msgstr ""
+msgstr " Δεν ήταν δυνατή η εύρεση κάποιων επεκτάσεων"
 
 msgid " (check that you compiled the extensions)\n"
-msgstr ""
+msgstr " (ελέγξτε ότι έχετε μεταγλωττίσει τις επεκτάσεις)\n"
 
 msgid "Checking templates...\n"
-msgstr ""
+msgstr "Έλεγχος προτύπων...\n"
 
 msgid " (templates seem to have been installed incorrectly)\n"
-msgstr ""
+msgstr " (υπάρχει κάποιο πρόβλημα με την εγκατάσταση των προτύπων)\n"
 
 msgid "Checking patch...\n"
-msgstr ""
+msgstr "Έλεγχος εργαλείου patch...\n"
 
 msgid " patch call failed:\n"
-msgstr ""
+msgstr " η κλήση του patch απέτυχε:\n"
 
 msgid " unexpected patch output!\n"
 msgstr ""
@@ -5453,16 +5706,16 @@
 "    first parent only.\n"
 "\n"
 "    Output may be to a file, in which case the name of the file is\n"
-"    given using a format string. The formatting rules are as follows::\n"
-"\n"
-"      %%   literal \"%\" character\n"
-"      %H   changeset hash (40 bytes of hexadecimal)\n"
-"      %N   number of patches being generated\n"
-"      %R   changeset revision number\n"
-"      %b   basename of the exporting repository\n"
-"      %h   short-form changeset hash (12 bytes of hexadecimal)\n"
-"      %n   zero-padded sequence number, starting at 1\n"
-"      %r   zero-padded changeset revision number\n"
+"    given using a format string. The formatting rules are as follows:\n"
+"\n"
+"    :``%%``: literal \"%\" character\n"
+"    :``%H``: changeset hash (40 bytes of hexadecimal)\n"
+"    :``%N``: number of patches being generated\n"
+"    :``%R``: changeset revision number\n"
+"    :``%b``: basename of the exporting repository\n"
+"    :``%h``: short-form changeset hash (12 bytes of hexadecimal)\n"
+"    :``%n``: zero-padded sequence number, starting at 1\n"
+"    :``%r``: zero-padded changeset revision number\n"
 "\n"
 "    Without the -a/--text option, export will avoid generating diffs\n"
 "    of files it detects as binary. With -a, export will generate a\n"
@@ -5587,8 +5840,6 @@
 
 msgid "use \"hg help\" for the full list of commands or \"hg -v\" for details"
 msgstr ""
-"brug \"hg help\" for den fulde liste af kommandoer eller \"hg -v\" for "
-"detaljer"
 
 #, python-format
 msgid "use \"hg -v help%s\" to show aliases and global options"
@@ -5623,21 +5874,14 @@
 msgid "no commands defined\n"
 msgstr "δεν έχει οριστεί καμία εντολή\n"
 
-#, fuzzy
-msgid "enabled extensions:"
-msgstr ""
-"\n"
-"ενεργές επεκτάσεις:\n"
-"\n"
-
 msgid "no help text available"
 msgstr "δεν υπάρχει κείμενο βοήθειας"
 
-#, fuzzy, python-format
+#, python-format
 msgid ""
 "%s extension - %s\n"
 "\n"
-msgstr "** Ενεργές επεκτάσεις: %s\n"
+msgstr ""
 
 msgid "Mercurial Distributed SCM\n"
 msgstr "Mercurial Κατανεμημένο SCM\n"
@@ -5649,6 +5893,12 @@
 "βασικές εντολές:\n"
 "\n"
 
+msgid "enabled extensions:"
+msgstr "ενεργές επεκτάσεις:"
+
+msgid "DEPRECATED"
+msgstr ""
+
 msgid ""
 "\n"
 "additional help topics:\n"
@@ -5677,7 +5927,8 @@
 msgid ""
 "import an ordered set of patches\n"
 "\n"
-"    Import a list of patches and commit them individually.\n"
+"    Import a list of patches and commit them individually (unless\n"
+"    --no-commit is specified).\n"
 "\n"
 "    If there are outstanding changes in the working directory, import\n"
 "    will abort unless given the -f/--force flag.\n"
@@ -6024,14 +6275,16 @@
 msgid ""
 "retry file merges from a merge or update\n"
 "\n"
-"    This command will cleanly retry unresolved file merges using file\n"
-"    revisions preserved from the last update or merge. To attempt to\n"
-"    resolve all unresolved files, use the -a/--all switch.\n"
+"    This command can cleanly retry unresolved file merges using file\n"
+"    revisions preserved from the last update or merge.\n"
 "\n"
 "    If a conflict is resolved manually, please note that the changes\n"
 "    will be overwritten if the merge is retried with resolve. The\n"
 "    -m/--mark switch should be used to mark the file as resolved.\n"
 "\n"
+"    You can specify a set of files to operate on, or use the -a/-all\n"
+"    switch to select all unresolved files.\n"
+"\n"
 "    This command also allows listing resolved files and manually\n"
 "    indicating whether or not files are resolved. All files must be\n"
 "    marked as resolved before a commit is permitted.\n"
@@ -6051,8 +6304,8 @@
 
 msgid "no files or directories specified; use --all to remerge all files"
 msgstr ""
-"ingen filer eller mapper specificeret; brug --all for at gen-sammenføje alle "
-"filerne"
+"δεν ορίστηκαν αρχεία ή κατάλογοι· χρησιμοποιήστε την επιλογή --all για να "
+"επαναλάβετε τη συγχώνευση για όλα τα αρχεία"
 
 msgid ""
 "restore individual files or directories to an earlier state\n"
@@ -6131,13 +6384,13 @@
 "    Transactions are used to encapsulate the effects of all commands\n"
 "    that create new changesets or propagate existing changesets into a\n"
 "    repository. For example, the following commands are transactional,\n"
-"    and their effects can be rolled back::\n"
-"\n"
-"      commit\n"
-"      import\n"
-"      pull\n"
-"      push (with this repository as destination)\n"
-"      unbundle\n"
+"    and their effects can be rolled back:\n"
+"\n"
+"    - commit\n"
+"    - import\n"
+"    - pull\n"
+"    - push (with this repository as destination)\n"
+"    - unbundle\n"
 "\n"
 "    This command is not intended for use on public repositories. Once\n"
 "    changes are visible for pull by other users, rolling a transaction\n"
@@ -6216,17 +6469,15 @@
 "    "
 msgstr ""
 
-#, fuzzy
 msgid " (empty repository)"
-msgstr "δε μπορεί να δημιουργηθεί ένα νέο αποθετήριο μέσω http"
-
-#, fuzzy
+msgstr ""
+
 msgid " (no revision checked out)"
-msgstr "αλλαγή"
-
-#, fuzzy, python-format
+msgstr ""
+
+#, python-format
 msgid "parent: %d:%s %s\n"
-msgstr "Αλλαγή: %s: %s\n"
+msgstr ""
 
 #, python-format
 msgid "branch: %s\n"
@@ -6236,13 +6487,13 @@
 msgid "%d added"
 msgstr ""
 
-#, fuzzy, python-format
+#, python-format
 msgid "%d modified"
-msgstr "έχει τροποποιηθεί"
+msgstr "%d τροποποιήθηκαν"
 
 #, python-format
 msgid "%d removed"
-msgstr ""
+msgstr "%d αφαιρέθηκαν"
 
 #, python-format
 msgid "%d deleted"
@@ -6272,20 +6523,20 @@
 msgid " (new branch head)"
 msgstr ""
 
-#, fuzzy, python-format
+#, python-format
 msgid "commit: %s\n"
-msgstr "τώρα στο: %s\n"
+msgstr ""
 
 msgid "update: (current)\n"
 msgstr ""
 
 #, python-format
 msgid "update: %d new changesets (update)\n"
-msgstr ""
+msgstr "update: %d νέες αλλαγές (ενημερώστε)\n"
 
 #, python-format
 msgid "update: %d new changesets, %d branch heads (merge)\n"
-msgstr ""
+msgstr "update: %d νέες αλλαγές, %d παρακλάδια (συγχωνεύστε)\n"
 
 msgid "1 or more incoming"
 msgstr ""
@@ -6294,15 +6545,13 @@
 msgid "%d outgoing"
 msgstr ""
 
-#, fuzzy, python-format
+#, python-format
 msgid "remote: %s\n"
-msgstr "απομακρυσμένο:"
-
-#, fuzzy
+msgstr "απομακρυσμένο: %s\n"
+
 msgid "remote: (synced)\n"
-msgstr "απομακρυσμένο:"
-
-#, fuzzy
+msgstr "απομακρυσμένο: (συγχρονίστηκε)\n"
+
 msgid ""
 "add one or more tags for the current or given revision\n"
 "\n"
@@ -6410,30 +6659,35 @@
 "update working directory\n"
 "\n"
 "    Update the repository's working directory to the specified\n"
-"    revision, or the tip of the current branch if none is specified.\n"
-"    Use null as the revision to remove the working copy (like 'hg\n"
+"    changeset.\n"
+"\n"
+"    If no changeset is specified, attempt to update to the head of the\n"
+"    current branch. If this head is a descendant of the working\n"
+"    directory's parent, update to it, otherwise abort.\n"
+"\n"
+"    The following rules apply when the working directory contains\n"
+"    uncommitted changes:\n"
+"\n"
+"    1. If neither -c/--check nor -C/--clean is specified, and if\n"
+"       the requested changeset is an ancestor or descendant of\n"
+"       the working directory's parent, the uncommitted changes\n"
+"       are merged into the requested changeset and the merged\n"
+"       result is left uncommitted. If the requested changeset is\n"
+"       not an ancestor or descendant (that is, it is on another\n"
+"       branch), the update is aborted and the uncommitted changes\n"
+"       are preserved.\n"
+"\n"
+"    2. With the -c/--check option, the update is aborted and the\n"
+"       uncommitted changes are preserved.\n"
+"\n"
+"    3. With the -C/--clean option, uncommitted changes are discarded and\n"
+"       the working directory is updated to the requested changeset.\n"
+"\n"
+"    Use null as the changeset to remove the working directory (like 'hg\n"
 "    clone -U').\n"
 "\n"
-"    When the working directory contains no uncommitted changes, it\n"
-"    will be replaced by the state of the requested revision from the\n"
-"    repository. When the requested revision is on a different branch,\n"
-"    the working directory will additionally be switched to that\n"
-"    branch.\n"
-"\n"
-"    When there are uncommitted changes, use option -C/--clean to\n"
-"    discard them, forcibly replacing the state of the working\n"
-"    directory with the requested revision. Alternately, use -c/--check\n"
-"    to abort.\n"
-"\n"
-"    When there are uncommitted changes and option -C/--clean is not\n"
-"    used, and the parent revision and requested revision are on the\n"
-"    same branch, and one of them is an ancestor of the other, then the\n"
-"    new working directory will contain the requested revision merged\n"
-"    with the uncommitted changes. Otherwise, the update will fail with\n"
-"    a suggestion to use 'merge' or 'update -C' instead.\n"
-"\n"
-"    If you want to update just one file to an older revision, use\n"
-"    revert.\n"
+"    If you want to update just one file to an older changeset, use 'hg "
+"revert'.\n"
 "\n"
 "    See 'hg help dates' for a list of formats valid for -d/--date.\n"
 "    "
@@ -6442,7 +6696,6 @@
 msgid "cannot specify both -c/--check and -C/--clean"
 msgstr ""
 
-#, fuzzy
 msgid "uncommitted local changes"
 msgstr "υπάρχουν τοπικές αλλαγές ακόμη"
 
@@ -6471,6 +6724,12 @@
 "This is free software; see the source for copying conditions. There is NO\n"
 "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
 msgstr ""
+"\n"
+"Πνευματικά δικαιώματα (C) 2005-2009 Matt Mackall <mpm@selenic.com> και "
+"άλλοι\n"
+"Αυτό το πρόγραμμα είναι ελεύθερο λογισμικό· δείτε τον πηγαίο κώδικα για\n"
+"την άδεια χρήσης του. Δεν παρέχεται ΚΑΜΙΑ εγγύηση· ούτε καν για την\n"
+"ΕΜΠΟΡΕΥΣΙΜΟΤΗΤΑ ή την ΚΑΤΑΛΛΗΛΟΤΗΤΑ ΓΙΑ ΚΑΠΟΙΟ ΣΚΟΠΟ.\n"
 
 msgid "repository root directory or name of overlay bundle file"
 msgstr ""
@@ -6502,7 +6761,7 @@
 msgid "set the charset encoding mode"
 msgstr ""
 
-msgid "print traceback on exception"
+msgid "always print a traceback on exception"
 msgstr ""
 
 msgid "time how long the command takes"
@@ -6562,6 +6821,9 @@
 msgid "show which function each change is in"
 msgstr ""
 
+msgid "produce a diff that undoes the changes"
+msgstr ""
+
 msgid "ignore white space when comparing lines"
 msgstr ""
 
@@ -6574,6 +6836,9 @@
 msgid "number of lines of context to show"
 msgstr ""
 
+msgid "output diffstat-style summary of changes"
+msgstr ""
+
 msgid "guess renamed files by similarity (0<=s<=100)"
 msgstr ""
 
@@ -6703,7 +6968,10 @@
 msgid "the clone will only contain a repository (no working copy)"
 msgstr ""
 
-msgid "a changeset you would like to have after cloning"
+msgid "revision, tag or branch to check out"
+msgstr ""
+
+msgid "clone only the specified revisions and ancestors"
 msgstr ""
 
 msgid "[OPTION]... SOURCE [DEST]"
@@ -6727,9 +6995,8 @@
 msgid "[INDEX] REV1 REV2"
 msgstr ""
 
-#, fuzzy
 msgid "[COMMAND]"
-msgstr "ΕΝΤΟΛΕΣ"
+msgstr "[ΕΝΤΟΛΗ]"
 
 msgid "show the command options"
 msgstr ""
@@ -6773,9 +7040,8 @@
 msgid "[OPTION]..."
 msgstr ""
 
-#, fuzzy
 msgid "revision to check"
-msgstr "αλλαγή"
+msgstr "αλλαγή προς έλεγχο"
 
 msgid "[OPTION]... [-r REV1 [-r REV2]] [FILE]..."
 msgstr ""
@@ -6872,7 +7138,7 @@
 msgid "file to store the bundles into"
 msgstr ""
 
-msgid "a specific revision up to which you would like to pull"
+msgid "a specific remote revision up to which you would like to pull"
 msgstr ""
 
 msgid "[-p] [-n] [-M] [-f] [-r REV]... [--bundle FILENAME] [SOURCE]"
@@ -6950,9 +7216,8 @@
 msgid "show parents from the specified revision"
 msgstr ""
 
-#, fuzzy
 msgid "[-r REV] [FILE]"
-msgstr "[-r ΕΚΔΟΣΗ] [ΑΡΧΕΙΟ]"
+msgstr ""
 
 msgid "[NAME]"
 msgstr ""
@@ -6981,7 +7246,7 @@
 msgid "[OPTION]... SOURCE... DEST"
 msgstr ""
 
-msgid "remerge all unresolved files"
+msgid "select all unresolved files"
 msgstr ""
 
 msgid "list state of files needing merge"
@@ -6993,6 +7258,9 @@
 msgid "unmark files as resolved"
 msgstr ""
 
+msgid "hide status prefix"
+msgstr ""
+
 msgid "revert all changes when no arguments given"
 msgstr ""
 
@@ -7077,9 +7345,6 @@
 msgid "show only ignored files"
 msgstr ""
 
-msgid "hide status prefix"
-msgstr ""
-
 msgid "show source of copied files"
 msgstr ""
 
@@ -7110,19 +7375,18 @@
 msgid "[-u] FILE..."
 msgstr ""
 
-msgid "overwrite locally modified files (no backup)"
-msgstr ""
-
-#, fuzzy
+msgid "discard uncommitted changes (no backup)"
+msgstr ""
+
 msgid "check for uncommitted changes"
-msgstr "υπάρχουν τοπικές αλλαγές ακόμη"
-
-msgid "[-C] [-d DATE] [[-r] REV]"
+msgstr ""
+
+msgid "[-c] [-C] [-d DATE] [[-r] REV]"
 msgstr ""
 
 #, python-format
 msgid "config error at %s:%d: '%s'"
-msgstr ""
+msgstr "σφάλμα ρυθμίσεων στο %s:%d: '%s'"
 
 msgid "not found in manifest"
 msgstr ""
@@ -7130,9 +7394,8 @@
 msgid "branch name not in UTF-8!"
 msgstr ""
 
-#, fuzzy
 msgid "working directory state appears damaged!"
-msgstr "χώρος εργασίας του %s"
+msgstr "ο χώρος εργασίας έχει πρόβλημα!"
 
 #, python-format
 msgid "'\\n' and '\\r' disallowed in filenames: %r"
@@ -7185,8 +7448,6 @@
 "hg: command '%s' is ambiguous:\n"
 "    %s\n"
 msgstr ""
-"hg: kommandoen '%s' is tvetydig:\n"
-"    %s\n"
 
 #, python-format
 msgid "timed out waiting for lock held by %s"
@@ -7194,7 +7455,7 @@
 
 #, python-format
 msgid "lock held by %s"
-msgstr ""
+msgstr "κλειδωμένο από %s"
 
 #, python-format
 msgid "abort: %s: %s\n"
@@ -7265,26 +7526,33 @@
 
 #, python-format
 msgid "** Mercurial Distributed SCM (version %s)\n"
-msgstr "** Mercurial Κατανεμημένο SCM (έκδοση %s)\n"
+msgstr ""
 
 #, python-format
 msgid "** Extensions loaded: %s\n"
-msgstr "** Ενεργές επεκτάσεις: %s\n"
+msgstr ""
 
 #, python-format
 msgid "no definition for alias '%s'\n"
 msgstr ""
 
-#, fuzzy, python-format
+#, python-format
+msgid ""
+"alias for: hg %s\n"
+"\n"
+"%s"
+msgstr ""
+
+#, python-format
 msgid "alias '%s' resolves to unknown command '%s'\n"
-msgstr "η αλλαγή αναφέρεται σε άγνωστο manifest %s"
+msgstr ""
 
 #, python-format
 msgid "alias '%s' resolves to ambiguous command '%s'\n"
 msgstr ""
 
 #, python-format
-msgid "malformed --config option: %s"
+msgid "malformed --config option: %r (use --config section.name=value)"
 msgstr ""
 
 #, python-format
@@ -7390,12 +7658,11 @@
 msgid "unknown bisect kind %s"
 msgstr ""
 
-#, fuzzy
 msgid "disabled extensions:"
-msgstr ""
-"\n"
-"ενεργές επεκτάσεις:\n"
-"\n"
+msgstr "ανενεργές επεκτάσεις:"
+
+msgid "Configuration Files"
+msgstr ""
 
 msgid "Date Formats"
 msgstr ""
@@ -7453,9 +7720,9 @@
 msgid "clone from remote to remote not supported"
 msgstr ""
 
-#, fuzzy, python-format
+#, python-format
 msgid "updating to branch %s\n"
-msgstr " ενημέρωση σε %d:%s\n"
+msgstr ""
 
 #, python-format
 msgid ""
@@ -7495,6 +7762,12 @@
 msgid "%s hook is invalid (\"%s\" not in a module)"
 msgstr ""
 
+msgid "exception from first failed import attempt:\n"
+msgstr ""
+
+msgid "exception from second failed import attempt:\n"
+msgstr ""
+
 #, python-format
 msgid "%s hook is invalid (import of \"%s\" failed)"
 msgstr ""
@@ -7546,7 +7819,7 @@
 msgstr ""
 
 msgid "authorization failed"
-msgstr ""
+msgstr "απαιτείται έλεγχος πρόσβασης"
 
 msgid "http error, possibly caused by proxy setting"
 msgstr ""
@@ -7556,7 +7829,11 @@
 msgstr ""
 
 #, python-format
-msgid "'%s' does not appear to be an hg repository"
+msgid ""
+"'%s' does not appear to be an hg repository:\n"
+"---%%<--- (%s)\n"
+"%s\n"
+"---%%<---\n"
 msgstr ""
 
 #, python-format
@@ -7620,15 +7897,15 @@
 msgid "working copy of .hgtags is changed (please commit .hgtags manually)"
 msgstr ""
 
-#, fuzzy, python-format
+#, python-format
 msgid "working directory has unknown parent '%s'!"
-msgstr "χώρος εργασίας του %s"
+msgstr ""
 
 #, python-format
 msgid "unknown revision '%s'"
 msgstr ""
 
-msgid "journal already exists - run hg recover"
+msgid "abandoned transaction found - run hg recover"
 msgstr ""
 
 msgid "rolling back interrupted transaction\n"
@@ -7662,9 +7939,8 @@
 msgid "cannot partially commit a merge (do not specify files or patterns)"
 msgstr ""
 
-#, fuzzy
 msgid "file not found!"
-msgstr "δε βρέθηκε!\n"
+msgstr "δε βρέθηκε!"
 
 msgid "no match under directory!"
 msgstr ""
@@ -7680,6 +7956,10 @@
 msgstr ""
 
 #, python-format
+msgid "note: commit message saved in %s\n"
+msgstr ""
+
+#, python-format
 msgid "trouble committing %s!\n"
 msgstr ""
 
@@ -7722,7 +8002,7 @@
 msgstr ""
 
 msgid "searching for changes\n"
-msgstr ""
+msgstr "αναζήτηση αλλαγών\n"
 
 msgid "already have changeset "
 msgstr ""
@@ -7872,9 +8152,8 @@
 "(n)one, e(x)ec or sym(l)ink?"
 msgstr ""
 
-#, fuzzy
 msgid "&None"
-msgstr "ολοκληρώθηκε\n"
+msgstr ""
 
 msgid "E&xec"
 msgstr ""
@@ -7895,7 +8174,7 @@
 msgstr ""
 
 msgid "&Delete"
-msgstr ""
+msgstr "&Διαγραφή"
 
 #, python-format
 msgid ""
@@ -7904,7 +8183,7 @@
 msgstr ""
 
 msgid "&Deleted"
-msgstr ""
+msgstr "&Διαγράφηκε"
 
 #, python-format
 msgid "update failed to remove %s: %s!\n"
@@ -7924,7 +8203,7 @@
 
 #, python-format
 msgid "branch %s not found"
-msgstr ""
+msgstr "δε βρέθηκε ο κλάδος %s"
 
 msgid "can't merge with ancestor"
 msgstr ""
@@ -7932,17 +8211,15 @@
 msgid "nothing to merge (use 'hg update' or check 'hg heads')"
 msgstr ""
 
-#, fuzzy
 msgid "outstanding uncommitted changes (use 'hg status' to list changes)"
-msgstr "υπάρχουν τοπικές αλλαγές ακόμη"
-
-msgid "crosses branches (use 'hg merge' or 'hg update -C' to discard changes)"
-msgstr ""
-
-msgid "crosses branches (use 'hg merge' or 'hg update -C')"
-msgstr ""
-
-msgid "crosses named branches (use 'hg update -C' to discard changes)"
+msgstr "υπάρχουν τοπικές αλλαγές ακόμη (δώστε 'hg status' για να δείτε τις αλλαγές)"
+
+msgid ""
+"crosses branches (use 'hg merge' to merge or use 'hg update -C' to discard "
+"changes)"
+msgstr ""
+
+msgid "crosses branches (use 'hg merge' or use 'hg update -c')"
 msgstr ""
 
 #, python-format
@@ -8023,24 +8300,24 @@
 msgid "Unsupported line endings type: %s"
 msgstr ""
 
-#, fuzzy, python-format
+#, python-format
 msgid " %d files changed, %d insertions(+), %d deletions(-)\n"
-msgstr "%d αρχεία, %d αλλαγές, %d εκδόσεις αρχείων\n"
+msgstr " %d αρχεία τροποποιήθηκαν, %d εισαγωγές(+), %d διαγραφές(-)\n"
 
 #, python-format
 msgid "exited with status %d"
-msgstr ""
+msgstr "τερμάτισε με κωδικό %d"
 
 #, python-format
 msgid "killed by signal %d"
-msgstr ""
+msgstr "διακοπή λόγω σήματος %d"
 
 #, python-format
 msgid "saving bundle to %s\n"
 msgstr ""
 
 msgid "adding branch\n"
-msgstr ""
+msgstr "προσθήκη κλάδου\n"
 
 #, python-format
 msgid "cannot %s; remote repository does not support the %r capability"
@@ -8110,7 +8387,7 @@
 msgstr ""
 
 msgid "remote: "
-msgstr "απομακρυσμένο:"
+msgstr "απομακρυσμένο: "
 
 #, python-format
 msgid "push refused: %s"
@@ -8119,6 +8396,10 @@
 msgid "unsynced changes"
 msgstr ""
 
+#, python-format
+msgid "'%s' does not appear to be an hg repository"
+msgstr ""
+
 msgid "cannot lock static-http repository"
 msgstr ""
 
@@ -8135,9 +8416,8 @@
 "use (l)ocal source (%s) or (r)emote source (%s)?"
 msgstr ""
 
-#, fuzzy
 msgid "&Remote"
-msgstr "απομακρυσμένο:"
+msgstr "&Απομακρυσμένο:"
 
 #, python-format
 msgid ""
@@ -8151,17 +8431,17 @@
 "use (c)hanged version or (d)elete?"
 msgstr ""
 
-#, fuzzy, python-format
+#, python-format
 msgid "removing subrepo %s\n"
-msgstr "αφαίρεση του %s\n"
-
-#, fuzzy, python-format
+msgstr "αφαίρεση του εμφωλιασμένου αποθετηρίου %s\n"
+
+#, python-format
 msgid "pulling subrepo %s\n"
-msgstr "καθαρισμός %s\n"
+msgstr "λήψη στο εμφωλιασμένο αποθετήριο %s\n"
 
 #, python-format
 msgid "pushing subrepo %s\n"
-msgstr ""
+msgstr "αποστολή από το εμφωλιασμένο αποθετήριο %s\n"
 
 #, python-format
 msgid "%s, line %s: %s\n"
@@ -8221,23 +8501,23 @@
 msgid "ignoring untrusted configuration option %s.%s = %s\n"
 msgstr ""
 
-#, fuzzy, python-format
+#, python-format
 msgid "%s.%s not a boolean ('%s')"
-msgstr "η αλλαγή %s δεν είναι γονική αλλαγή της %s"
+msgstr ""
 
 msgid "enter a commit username:"
 msgstr ""
 
 #, python-format
 msgid "No username found, using '%s' instead\n"
-msgstr ""
-
-msgid "Please specify a username."
+msgstr "Δε βρέθηκε όνομα χρήστη. Χρησιμοποιήθηκε το όνομα '%s'\n"
+
+msgid "no username supplied (see \"hg help config\")"
 msgstr ""
 
 #, python-format
 msgid "username %s contains a newline\n"
-msgstr ""
+msgstr "το όνομα χρήστη %s περιέχει το χαρακτήρα αλλαγή γραμμής\n"
 
 msgid "response expected"
 msgstr ""
@@ -8274,11 +8554,11 @@
 
 #, python-format
 msgid "command '%s' failed: %s"
-msgstr ""
+msgstr "η εντολή '%s' απέτυχε: %s"
 
 #, python-format
 msgid "path contains illegal component: %s"
-msgstr ""
+msgstr "η διαδρομή περιέχει μη έγκυρα στοιχεία: %s"
 
 #, python-format
 msgid "path %r is inside repo %r"
@@ -8289,23 +8569,23 @@
 msgstr ""
 
 msgid "Hardlinks not supported"
-msgstr ""
+msgstr "Δεν υποστηρίζονται hard links"
 
 #, python-format
 msgid "could not symlink to %r: %s"
-msgstr ""
+msgstr "απέτυχε η δημιουργία συντόμευσης του %r: %s"
 
 #, python-format
 msgid "invalid date: %r "
-msgstr ""
+msgstr "μη έγκυρη ημερομηνία: %r "
 
 #, python-format
 msgid "date exceeds 32 bits: %d"
-msgstr ""
+msgstr "η ημερομηνία ξεπερνά τα 32 διφία: %d"
 
 #, python-format
 msgid "impossible time zone offset: %d"
-msgstr ""
+msgstr "μη έγκυρη μετατόπιση ζώνης ώρας: %d"
 
 #, python-format
 msgid "invalid day spec: %s"
@@ -8352,10 +8632,10 @@
 msgstr "%.0f bytes"
 
 msgid "cannot verify bundle or remote repos"
-msgstr ""
+msgstr "δεν είναι δυνατός ο έλεγχος σε bundles ή απομακρυσμένα αποθετήρια"
 
 msgid "interrupted"
-msgstr ""
+msgstr "διακόπηκε"
 
 #, python-format
 msgid "empty or missing %s"
@@ -8367,7 +8647,7 @@
 
 #, python-format
 msgid "index contains %d extra bytes"
-msgstr ""
+msgstr "το ευρετήριο περιέχει %d έξτρα bytes"
 
 #, python-format
 msgid "warning: `%s' uses revlog format 1"
@@ -8377,13 +8657,13 @@
 msgid "warning: `%s' uses revlog format 0"
 msgstr "προειδοποίηση: το '%s' χρησιμοποιεί revlog έκδοσης 0"
 
-#, fuzzy, python-format
+#, python-format
 msgid "rev %d points to nonexistent changeset %d"
-msgstr "η έκδοση %d αναφέρεται στο %s της αλλαγής %d"
-
-#, fuzzy, python-format
+msgstr "η έκδοση %d αναφέρεται στην ανύπαρκτη αλλαγή %d"
+
+#, python-format
 msgid "rev %d points to unexpected changeset %d"
-msgstr "η έκδοση %d αναφέρεται στο %s της αλλαγής %d"
+msgstr "η έκδοση %d αναφέρεται στη μη-αναμενόμενη αλλαγή %d"
 
 #, python-format
 msgid " (expected %s)"
@@ -8391,20 +8671,23 @@
 
 #, python-format
 msgid "unknown parent 1 %s of %s"
-msgstr ""
+msgstr "άγνωστη γονική αλλαγή 1 %s της %s"
 
 #, python-format
 msgid "unknown parent 2 %s of %s"
-msgstr ""
+msgstr "άγνωστη γονική αλλαγή 2 %s της %s"
 
 #, python-format
 msgid "checking parents of %s"
-msgstr ""
+msgstr "έλεγχος γονικών αλλαγών της %s"
 
 #, python-format
 msgid "duplicate revision %d (%d)"
 msgstr "διπλή έκδοση %d (%d)"
 
+msgid "abandoned transaction found - run hg recover\n"
+msgstr ""
+
 #, python-format
 msgid "repository uses revlog format %d\n"
 msgstr "το αποθετήριο χρησιμοποιεί τη μορφή revlog %d\n"
@@ -8419,9 +8702,9 @@
 msgid "checking manifests\n"
 msgstr "έλεγχος manifests\n"
 
-#, fuzzy, python-format
+#, python-format
 msgid "%s not in changesets"
-msgstr "το %s δεν υπάρχει στα manifests"
+msgstr "%s δεν υπάρχει ως αλλαγή"
 
 msgid "file without name in manifest"
 msgstr "αρχείο χωρίς όνομα στο manifest"
@@ -8469,21 +8752,20 @@
 msgid "unpacking %s"
 msgstr "εξαγωγή του %s"
 
-#, fuzzy, python-format
+#, python-format
 msgid "warning: copy source of '%s' not in parents of %s"
 msgstr ""
-"προειδοποίηση: %s@%s: η έκδοση προέλευσης της αντιγραφής αρχείου είναι το "
-"nullid %s:%s"
+"προειδοποίηση: η πηγή '%s' της αντιγραφής δεν υπάρχει στις γονικές της %s"
 
 #, python-format
 msgid "empty or missing copy source revlog %s:%s"
 msgstr "κενό ή μη έγκυρο revlog προέλευσης %s:%s"
 
-#, fuzzy, python-format
+#, python-format
 msgid "warning: %s@%s: copy source revision is nullid %s:%s\n"
 msgstr ""
-"προειδοποίηση: %s@%s: η έκδοση προέλευσης της αντιγραφής αρχείου είναι το "
-"nullid %s:%s"
+"προειδοποίηση: %s@%s: η έκδοση προέλευσης της αντιγραφής αρχείου είναι η "
+"κενή αλλαγή %s:%s\n"
 
 #, python-format
 msgid "checking rename of %s"
@@ -8491,7 +8773,7 @@
 
 #, python-format
 msgid "%s in manifests not found"
-msgstr ""
+msgstr "%s δε βρέθηκε στα manifests"
 
 #, python-format
 msgid "warning: orphan revlog '%s'"
--- a/i18n/sv.po	Wed Dec 23 13:09:11 2009 +0100
+++ b/i18n/sv.po	Wed Dec 23 13:12:36 2009 +0100
@@ -13,8 +13,8 @@
 msgstr ""
 "Project-Id-Version: Mercurial\n"
 "Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n"
-"POT-Creation-Date: 2009-11-10 20:01+0100\n"
-"PO-Revision-Date: 2009-11-10 20:06+0100\n"
+"POT-Creation-Date: 2009-11-22 19:02+0100\n"
+"PO-Revision-Date: 2009-11-22 19:37+0100\n"
 "Last-Translator: Jens Bäckman <jens.backman@gmail.com>\n"
 "Language-Team: Swedish\n"
 "MIME-Version: 1.0\n"
@@ -85,6 +85,43 @@
 "- on Unix-like systems: ``man hgrc``\n"
 "- online: http://www.selenic.com/mercurial/hgrc.5.html\n"
 msgstr ""
+"Mercurial läser konfigurationsdata från flera filer, om de existerar.\n"
+"Nedan listar vi den mest specifika filen först.\n"
+"\n"
+"Under Windows läses dessa konfigurationsfiler:\n"
+"\n"
+"- ``<arkiv>\\.hg\\hgrc``\n"
+"- ``%USERPROFILE%\\.hgrc``\n"
+"- ``%USERPROFILE%\\Mercurial.ini``\n"
+"- ``%HOME%\\.hgrc``\n"
+"- ``%HOME%\\Mercurial.ini``\n"
+"- ``C:\\Mercurial\\Mercurial.ini``\n"
+"- ``HKEY_LOCAL_MACHINE\\SOFTWARE\\Mercurial``\n"
+"- ``<installationskatalog>\\Mercurial.ini``\n"
+"\n"
+"Under Unix läses dessa filer:\n"
+"\n"
+"- ``<arkiv>/.hg/hgrc``\n"
+"- ``$HOME/.hgrc``\n"
+"- ``/etc/mercurial/hgrc``\n"
+"- ``/etc/mercurial/hgrc.d/*.rc``\n"
+"- ``<installationsrot>/etc/mercurial/hgrc``\n"
+"- ``<installationsrot>/etc/mercurial/hgrc.d/*.rc``\n"
+"\n"
+"Konfigurationsfilerna för Mercurial använder ett enkelt ini-filformat. En\n"
+"file består av sektioner, som inleds av en rubrik (ex ``[sektion]``) och\n"
+"följs av rader med ``namn = värde``::\n"
+"\n"
+"  [ui]\n"
+"  username = Förnamn Efternamn <fornamn.efternamn@example.net>\n"
+"  verbose = True\n"
+"\n"
+"Raderna ovanför refereras till som ``ui.username`` och\n"
+"``ui.verbose``. Läs man-sidan för hgrc för en full beskrivning av alla\n"
+"möjliga konfigurationsvärden:\n"
+"\n"
+"- under Unix-liknande system: ``man hgrc``\n"
+"- online: http://www.selenic.com/mercurial/hgrc.5.html\n"
 
 msgid ""
 "Some commands allow the user to specify a date, e.g.:\n"
@@ -92,37 +129,37 @@
 "- backout, commit, import, tag: Specify the commit date.\n"
 "- log, revert, update: Select revision(s) by date.\n"
 "\n"
-"Many date formats are valid. Here are some examples::\n"
-"\n"
-"  \"Wed Dec 6 13:18:29 2006\" (local timezone assumed)\n"
-"  \"Dec 6 13:18 -0600\" (year assumed, time offset provided)\n"
-"  \"Dec 6 13:18 UTC\" (UTC and GMT are aliases for +0000)\n"
-"  \"Dec 6\" (midnight)\n"
-"  \"13:18\" (today assumed)\n"
-"  \"3:39\" (3:39AM assumed)\n"
-"  \"3:39pm\" (15:39)\n"
-"  \"2006-12-06 13:18:29\" (ISO 8601 format)\n"
-"  \"2006-12-6 13:18\"\n"
-"  \"2006-12-6\"\n"
-"  \"12-6\"\n"
-"  \"12/6\"\n"
-"  \"12/6/6\" (Dec 6 2006)\n"
-"\n"
-"Lastly, there is Mercurial's internal format::\n"
-"\n"
-"  \"1165432709 0\" (Wed Dec 6 13:18:29 2006 UTC)\n"
+"Many date formats are valid. Here are some examples:\n"
+"\n"
+"- ``Wed Dec 6 13:18:29 2006`` (local timezone assumed)\n"
+"- ``Dec 6 13:18 -0600`` (year assumed, time offset provided)\n"
+"- ``Dec 6 13:18 UTC`` (UTC and GMT are aliases for +0000)\n"
+"- ``Dec 6`` (midnight)\n"
+"- ``13:18`` (today assumed)\n"
+"- ``3:39`` (3:39AM assumed)\n"
+"- ``3:39pm`` (15:39)\n"
+"- ``2006-12-06 13:18:29`` (ISO 8601 format)\n"
+"- ``2006-12-6 13:18``\n"
+"- ``2006-12-6``\n"
+"- ``12-6``\n"
+"- ``12/6``\n"
+"- ``12/6/6`` (Dec 6 2006)\n"
+"\n"
+"Lastly, there is Mercurial's internal format:\n"
+"\n"
+"- ``1165432709 0`` (Wed Dec 6 13:18:29 2006 UTC)\n"
 "\n"
 "This is the internal representation format for dates. unixtime is the\n"
 "number of seconds since the epoch (1970-01-01 00:00 UTC). offset is\n"
 "the offset of the local timezone, in seconds west of UTC (negative if\n"
 "the timezone is east of UTC).\n"
 "\n"
-"The log command also accepts date ranges::\n"
-"\n"
-"  \"<{datetime}\" - at or before a given date/time\n"
-"  \">{datetime}\" - on or after a given date/time\n"
-"  \"{datetime} to {datetime}\" - a date range, inclusive\n"
-"  \"-{days}\" - within a given number of days of today\n"
+"The log command also accepts date ranges:\n"
+"\n"
+"- ``<{datetime}`` - at or before a given date/time\n"
+"- ``>{datetime}`` - on or after a given date/time\n"
+"- ``{datetime} to {datetime}`` - a date range, inclusive\n"
+"- ``-{days}`` - within a given number of days of today\n"
 msgstr ""
 
 msgid ""
@@ -1599,6 +1636,11 @@
 msgid "Mercurial failed to run itself, check hg executable is in PATH"
 msgstr ""
 
+msgid ""
+"svn: cannot probe remote repository, assume it could be a subversion "
+"repository. Use --source-type if you know better.\n"
+msgstr ""
+
 msgid "Subversion python bindings could not be loaded"
 msgstr ""
 
@@ -3118,7 +3160,8 @@
 "    With arguments, set guards for the named patch.\n"
 "    NOTE: Specifying negative guards now requires '--'.\n"
 "\n"
-"    To set guards on another patch:\n"
+"    To set guards on another patch::\n"
+"\n"
 "      hg qguard -- other.patch +2.6.17 -stable\n"
 "    "
 msgstr ""
@@ -3213,7 +3256,7 @@
 "    qselect to tell mq which guards to use. A patch will be pushed if\n"
 "    it has no guards or any positive guards match the currently\n"
 "    selected guard, but will not be pushed if any negative guards\n"
-"    match the current guard. For example:\n"
+"    match the current guard. For example::\n"
 "\n"
 "        qguard foo.patch -stable    (negative guard)\n"
 "        qguard bar.patch +stable    (positive guard)\n"
@@ -3663,10 +3706,13 @@
 "  ignore = version, help, update\n"
 "\n"
 "You can also enable the pager only for certain commands using\n"
-"pager.attend::\n"
+"pager.attend. Below is the default list of commands to be paged::\n"
 "\n"
 "  [pager]\n"
-"  attend = log\n"
+"  attend = annotate, cat, diff, export, glog, log, qdiff\n"
+"\n"
+"Setting pager.attend to an empty value will cause all commands to be\n"
+"paged.\n"
 "\n"
 "If pager.attend is present, pager.ignore will be ignored.\n"
 "\n"
@@ -4161,9 +4207,6 @@
 msgid " and "
 msgstr ""
 
-msgid "y"
-msgstr ""
-
 #, python-format
 msgid "record this change to %r?"
 msgstr ""
@@ -4222,32 +4265,27 @@
 msgid ""
 "recreate hardlinks between two repositories\n"
 "\n"
-"    When repositories are cloned locally, their data files will be "
-"hardlinked\n"
-"    so that they only use the space of a single repository.\n"
-"\n"
-"    Unfortunately, subsequent pulls into either repository will break "
-"hardlinks\n"
-"    for any files touched by the new changesets, even if both repositories "
-"end\n"
-"    up pulling the same changes.\n"
-"\n"
-"    Similarly, passing --rev to \"hg clone\" will fail to use\n"
-"    any hardlinks, falling back to a complete copy of the source "
-"repository.\n"
-"\n"
-"    This command lets you recreate those hardlinks and reclaim that wasted\n"
-"    space.\n"
-"\n"
-"    This repository will be relinked to share space with ORIGIN, which must "
-"be\n"
-"    on the same local disk. If ORIGIN is omitted, looks for \"default-relink"
-"\",\n"
-"    then \"default\", in [paths].\n"
-"\n"
-"    Do not attempt any read operations on this repository while the command "
-"is\n"
-"    running. (Both repositories will be locked against writes.)\n"
+"    When repositories are cloned locally, their data files will be\n"
+"    hardlinked so that they only use the space of a single repository.\n"
+"\n"
+"    Unfortunately, subsequent pulls into either repository will break\n"
+"    hardlinks for any files touched by the new changesets, even if\n"
+"    both repositories end up pulling the same changes.\n"
+"\n"
+"    Similarly, passing --rev to \"hg clone\" will fail to use any\n"
+"    hardlinks, falling back to a complete copy of the source\n"
+"    repository.\n"
+"\n"
+"    This command lets you recreate those hardlinks and reclaim that\n"
+"    wasted space.\n"
+"\n"
+"    This repository will be relinked to share space with ORIGIN, which\n"
+"    must be on the same local disk. If ORIGIN is omitted, looks for\n"
+"    \"default-relink\", then \"default\", in [paths].\n"
+"\n"
+"    Do not attempt any read operations on this repository while the\n"
+"    command is running. (Both repositories will be locked against\n"
+"    writes.)\n"
 "    "
 msgstr ""
 
@@ -4863,12 +4901,27 @@
 "    can be expensive.\n"
 "    "
 msgstr ""
+"lägg till alla nya nya filer, radera alla saknade filer\n"
+"\n"
+"    Lägg till alla nya filer och radera alla saknade filer från arkivet.\n"
+"\n"
+"    Nya filer ignoreras om de överrensstämmer något av mönstren i\n"
+"    .hgignore. Precis som med add, kommer ändringarna att träda i kraft vid\n"
+"    nästa arkivering.\n"
+"\n"
+"    Använd flaggan -s/--similarity för att upptäcka omdöpta filer. Med en\n"
+"    parameter större än 0, kommer varje borttagen fil att jämföras med\n"
+"    varje tillagd fil och lagrar de som är tillräckligt lika som ett\n"
+"    namnbyte. Flaggan tar ett procentvärde mellan 0 (deaktiverad) och 100\n"
+"    (filer måste vara identiska) som parameter. Att upptäcka omdöpta filer\n"
+"    på det här sättet kan ta lång tid.\n"
+"    "
 
 msgid "similarity must be a number"
-msgstr ""
+msgstr "likhet måste vara ett nummer"
 
 msgid "similarity must be between 0 and 100"
-msgstr ""
+msgstr "likhet måste vara mellan 0 och 100"
 
 msgid ""
 "show changeset information by line for each file\n"
@@ -4914,14 +4967,14 @@
 "    directory; use -r/--rev to specify a different revision.\n"
 "\n"
 "    To specify the type of archive to create, use -t/--type. Valid\n"
-"    types are::\n"
-"\n"
-"      \"files\" (default): a directory full of files\n"
-"      \"tar\": tar archive, uncompressed\n"
-"      \"tbz2\": tar archive, compressed using bzip2\n"
-"      \"tgz\": tar archive, compressed using gzip\n"
-"      \"uzip\": zip archive, uncompressed\n"
-"      \"zip\": zip archive, compressed using deflate\n"
+"    types are:\n"
+"\n"
+"    :``files``: a directory full of files (default)\n"
+"    :``tar``:   tar archive, uncompressed\n"
+"    :``tbz2``:  tar archive, compressed using bzip2\n"
+"    :``tgz``:   tar archive, compressed using gzip\n"
+"    :``uzip``:  zip archive, uncompressed\n"
+"    :``zip``:   zip archive, compressed using deflate\n"
 "\n"
 "    The exact name of the destination archive or directory is given\n"
 "    using a format string; see 'hg help export' for details.\n"
@@ -4932,15 +4985,37 @@
 "    removed.\n"
 "    "
 msgstr ""
+"skapa ett icke versionshanterat arkiv från en arkivresision\n"
+"\n"
+"    Som standard används revisonen för arbetskatalogens förälder; använd\n"
+"    -r/--rev för att specificera en annan revision.\n"
+"\n"
+"    För att definiera vilken typ av arkiv som ska skapas, använd -t/--type.\n"
+"    Giltiga typer är::\n"
+"\n"
+"    :``files``: en katalog fylld med filer (standard)\n"
+"    :``tar``:   tar-arkiv, okomprimerad\n"
+"    :``tbz2``:  tar-arkiv, komprimerad med bzip2\n"
+"    :``tgz``:   tar-arkiv, komprimerad med gzip\n"
+"    :``uzip``:  zip-arkiv, okomprimerad\n"
+"    :``zip``:   zip-arkiv, komprimerad med deflate\n"
+"\n"
+"    Det exakta namnet på destinationsarkivet eller -katalogen anges med en\n"
+"    formatsträng; se 'hg help export' för detaljer.\n"
+"\n"
+"    Varje fil som läggs till en arkivfil har ett katalogprefix. Använd\n"
+"    -p/--prefix för att specificera en formatsträn för prefixet. Som\n"
+"    standard används basnamnet för arkivet, med suffix borttagna.\n"
+"    "
 
 msgid "no working directory: please specify a revision"
-msgstr ""
+msgstr "ingen arbetskatalog: specificera en revision"
 
 msgid "repository root cannot be destination"
-msgstr ""
+msgstr "arkivroten kan inte vara destinationen"
 
 msgid "cannot archive plain files to stdout"
-msgstr ""
+msgstr "kan inte arkivera rena filer till stdout"
 
 msgid ""
 "reverse effect of earlier changeset\n"
@@ -4960,42 +5035,59 @@
 "    See 'hg help dates' for a list of formats valid for -d/--date.\n"
 "    "
 msgstr ""
+"omvänd effekten från en tidigare ändring\n"
+"\n"
+"    Arkivera de återkallade ändringarna som en ny ändring. Den nya\n"
+"    ändringen är ett barn till den återkallade ändringen.\n"
+"\n"
+"    Om du återkallar en annan ändring än toppen, skapas ett nytt huvud.\n"
+"    Detta huvud kommer att vara en nya toppen och du bör sammanfoga den med\n"
+"    ett annat huvud.\n"
+"\n"
+"    Flaggan --merge kommer ihåg arbetskatalogens förälder innan\n"
+"    återkallningen påbörjas, och sammanfogar sedan det nya huvudet med den\n"
+"    ändringen efteråt. Detta gör att du inte behöver göra sammanfogningen\n"
+"    manuellt. Resultatet av sammanfogningen arkiveras inte, precis som en\n"
+"    vanlig sammanfogning.\n"
+"\n"
+"    Se 'hg help dates' för en lista med giltiga format för -d/--date.\n"
+"    "
 
 msgid "please specify just one revision"
-msgstr ""
+msgstr "specificera bara en revision"
 
 msgid "please specify a revision to backout"
-msgstr ""
+msgstr "specificera en revision att återkalla"
 
 msgid "cannot backout change on a different branch"
-msgstr ""
+msgstr "kan inte återkalla en ändring på en annan gren"
 
 msgid "cannot backout a change with no parents"
-msgstr ""
+msgstr "kan inte återkalla en ändring utan föräldrar"
 
 msgid "cannot backout a merge changeset without --parent"
-msgstr ""
+msgstr "kan inte återkalla en sammanfogande ändring utan --parent"
 
 #, python-format
 msgid "%s is not a parent of %s"
-msgstr ""
+msgstr "%s är inte en förälder till %s"
 
 msgid "cannot use --parent on non-merge changeset"
-msgstr ""
+msgstr "kan inte använda --parent på icke-sammanfogande ändring"
 
 #, python-format
 msgid "changeset %s backs out changeset %s\n"
-msgstr ""
+msgstr "ändringen %s återkallar ändringen %s\n"
 
 #, python-format
 msgid "merging with changeset %s\n"
-msgstr ""
+msgstr "sammanfogar med ändring %s\n"
 
 msgid "the backout changeset is a new head - do not forget to merge\n"
-msgstr ""
+msgstr "återkallningsändringen är ett nytt huvud - glöm inte att sammanfoga\n"
 
 msgid "(use \"backout --merge\" if you want to auto-merge)\n"
-msgstr ""
+msgstr "(använd \"backout --merge\" om du vill auto-sammanfoga)\n"
 
 msgid ""
 "subdivision search of changesets\n"
@@ -5146,11 +5238,11 @@
 "\n"
 "    Output may be to a file, in which case the name of the file is\n"
 "    given using a format string. The formatting rules are the same as\n"
-"    for the export command, with the following additions::\n"
-"\n"
-"      %s   basename of file being printed\n"
-"      %d   dirname of file being printed, or '.' if in repository root\n"
-"      %p   root-relative path name of file being printed\n"
+"    for the export command, with the following additions:\n"
+"\n"
+"    :``%s``: basename of file being printed\n"
+"    :``%d``: dirname of file being printed, or '.' if in repository root\n"
+"    :``%p``: root-relative path name of file being printed\n"
 "    "
 msgstr ""
 
@@ -5176,9 +5268,9 @@
 "    will be the null changeset). Otherwise, clone will initially check\n"
 "    out (in order of precedence):\n"
 "\n"
-"      a) the changeset, tag or branch specified with -u/--updaterev\n"
-"      b) the changeset, tag or branch given with the first -r/--rev\n"
-"      c) the head of the default branch\n"
+"    a) the changeset, tag or branch specified with -u/--updaterev\n"
+"    b) the changeset, tag or branch given with the first -r/--rev\n"
+"    c) the head of the default branch\n"
 "\n"
 "    Use 'hg clone -u . src dst' to checkout the source repository's\n"
 "    parent changeset (applicable for local source repositories only).\n"
@@ -5187,8 +5279,8 @@
 "    by listing each changeset (tag, or branch name) with -r/--rev.\n"
 "    If -r/--rev is used, the cloned repository will contain only a subset\n"
 "    of the changesets of the source repository. Only the set of changesets\n"
-"    defined by all -r/--rev options (including their direct and indirect\n"
-"    parent changesets) will be pulled into the destination repository.\n"
+"    defined by all -r/--rev options (including all their ancestors)\n"
+"    will be pulled into the destination repository.\n"
 "    No subsequent changesets (including subsequent tags) will be present\n"
 "    in the destination.\n"
 "\n"
@@ -5236,9 +5328,9 @@
 "    förälder kommer att vara null-ändringen). Annars kommer klonen initialt\n"
 "    att hämta ut (i prioritetsordning):\n"
 "\n"
-"      a) ändringen, taggen eller grenen specificerad med -u/--updaterev\n"
-"      b) ändringen, taggen eller grenen given med den första -r/--rev\n"
-"      c) huvudet på grenen 'default'\n"
+"    a) ändringen, taggen eller grenen specificerad med -u/--updaterev\n"
+"    b) ändringen, taggen eller grenen given med den första -r/--rev\n"
+"    c) huvudet på grenen 'default'\n"
 "\n"
 "    Använd 'hg clone -u . källa dst' för att hämta ut källkodsarkivets\n"
 "    föräldraänrding (gäller bara för lokala arkiv).\n"
@@ -5247,9 +5339,9 @@
 "    genom att lista varje ändring (märke, eller grennamn) med -r/--rev.\n"
 "    Om -r/--rev används, kommer det klonade arkivet bara att innehålla en\n"
 "    delmängd av ändringarna i källarkivet. Bara ändringarna definierade med\n"
-"    -r/--rev (inklusive direkta och indirekta föräldrar) kommer att dras in\n"
-"    i destinationsarkivet. Inga efterföljande ändringar (inklusive\n"
-"    efterföljande märken) kommer att finnas i destinationen.\n"
+"    -r/--rev (och alla föräldrar) kommer att dras in i destinationsarkivet.\n"
+"    Inga efterföljande ändringar (inklusive efterföljande märken) kommer\n"
+"    att finnas i destinationen.\n"
 "\n"
 "    Användande av -r/--rev (eller 'clone källa#rev dest') aktiverar också\n"
 "    --pull, även för lokala arkiv.\n"
@@ -5574,16 +5666,16 @@
 "    first parent only.\n"
 "\n"
 "    Output may be to a file, in which case the name of the file is\n"
-"    given using a format string. The formatting rules are as follows::\n"
-"\n"
-"      %%   literal \"%\" character\n"
-"      %H   changeset hash (40 bytes of hexadecimal)\n"
-"      %N   number of patches being generated\n"
-"      %R   changeset revision number\n"
-"      %b   basename of the exporting repository\n"
-"      %h   short-form changeset hash (12 bytes of hexadecimal)\n"
-"      %n   zero-padded sequence number, starting at 1\n"
-"      %r   zero-padded changeset revision number\n"
+"    given using a format string. The formatting rules are as follows:\n"
+"\n"
+"    :``%%``: literal \"%\" character\n"
+"    :``%H``: changeset hash (40 bytes of hexadecimal)\n"
+"    :``%N``: number of patches being generated\n"
+"    :``%R``: changeset revision number\n"
+"    :``%b``: basename of the exporting repository\n"
+"    :``%h``: short-form changeset hash (12 bytes of hexadecimal)\n"
+"    :``%n``: zero-padded sequence number, starting at 1\n"
+"    :``%r``: zero-padded changeset revision number\n"
 "\n"
 "    Without the -a/--text option, export will avoid generating diffs\n"
 "    of files it detects as binary. With -a, export will generate a\n"
@@ -5610,14 +5702,14 @@
 "    Utmatning kan vara till en fil, och då anges namnet på filen med en\n"
 "    formatsträng. Formateringsreglerna är som följer::\n"
 "\n"
-"      %%   ett \"%\"-tecken\n"
-"      %H   ändringshash (40 hexadecimala bytes)\n"
-"      %N   antal genererade patchar\n"
-"      %R   ändringens revisionsnummer\n"
-"      %b   basnamn för det exporterande arkivet\n"
-"      %h   kort ändringshash (12 hexadecimala bytes)\n"
-"      %n   nollpaddat sekvensnummer, börjar med 1\n"
-"      %r   nollpaddat ändringsrevisionsnummer\n"
+"    :``%%``: ett \"%\"-tecken\n"
+"    :``%H``: ändringshash (40 hexadecimala bytes)\n"
+"    :``%N``: antal genererade patchar\n"
+"    :``%R``: ändringens revisionsnummer\n"
+"    :``%b``: basnamn för det exporterande arkivet\n"
+"    :``%h``: kort ändringshash (12 hexadecimala bytes)\n"
+"    :``%n``: nollpaddat sekvensnummer, börjar med 1\n"
+"    :``%r``: nollpaddat ändringsrevisionsnummer\n"
 "\n"
 "    Utan flaggan -a/--text, kommer export att undvika skapandet av diffar\n"
 "    av filer som upptäcks vara binära. Med -a, kommer filen att exporteras\n"
@@ -5783,25 +5875,24 @@
 "alias: %s\n"
 
 msgid "(no help text available)"
-msgstr ""
+msgstr "(ingen hjälptext tillgänglig)"
 
 msgid "options:\n"
 msgstr "flaggor:\n"
 
 msgid "no commands defined\n"
-msgstr ""
-
-msgid "enabled extensions:"
-msgstr "aktiverade utökningar:"
+msgstr "inga kommandon definierade\n"
 
 msgid "no help text available"
-msgstr ""
+msgstr "ingen hjälptext tillgänglig"
 
 #, python-format
 msgid ""
 "%s extension - %s\n"
 "\n"
 msgstr ""
+"%s-utökning - %s\n"
+"\n"
 
 msgid "Mercurial Distributed SCM\n"
 msgstr "Mercurial Distribuerad SCM\n"
@@ -5813,6 +5904,9 @@
 "grundläggande kommandon:\n"
 "\n"
 
+msgid "enabled extensions:"
+msgstr "aktiverade utökningar:"
+
 msgid "DEPRECATED"
 msgstr "FÖRLEGAD"
 
@@ -6417,13 +6511,13 @@
 "    Transactions are used to encapsulate the effects of all commands\n"
 "    that create new changesets or propagate existing changesets into a\n"
 "    repository. For example, the following commands are transactional,\n"
-"    and their effects can be rolled back::\n"
-"\n"
-"      commit\n"
-"      import\n"
-"      pull\n"
-"      push (with this repository as destination)\n"
-"      unbundle\n"
+"    and their effects can be rolled back:\n"
+"\n"
+"    - commit\n"
+"    - import\n"
+"    - pull\n"
+"    - push (with this repository as destination)\n"
+"    - unbundle\n"
 "\n"
 "    This command is not intended for use on public repositories. Once\n"
 "    changes are visible for pull by other users, rolling a transaction\n"
@@ -6706,6 +6800,11 @@
 "    bundle command.\n"
 "    "
 msgstr ""
+"applicera en eller flera filer med ändringar\n"
+"\n"
+"    Applicera en eller flera komprimerade filer med ändringar genererade\n"
+"    av bundle-kommandot.\n"
+"    "
 
 msgid ""
 "update working directory\n"
@@ -6720,13 +6819,13 @@
 "    The following rules apply when the working directory contains\n"
 "    uncommitted changes:\n"
 "\n"
-"    1. If neither -c/--check nor -C/--clean is specified, uncommitted\n"
-"       changes are merged into the requested changeset, and the merged "
-"result\n"
-"       is left uncommitted. Updating and merging will occur only if the\n"
-"       requested changeset is an ancestor or descendant of the parent\n"
-"       changeset. Otherwise, the update is aborted and the uncommitted "
-"changes\n"
+"    1. If neither -c/--check nor -C/--clean is specified, and if\n"
+"       the requested changeset is an ancestor or descendant of\n"
+"       the working directory's parent, the uncommitted changes\n"
+"       are merged into the requested changeset and the merged\n"
+"       result is left uncommitted. If the requested changeset is\n"
+"       not an ancestor or descendant (that is, it is on another\n"
+"       branch), the update is aborted and the uncommitted changes\n"
 "       are preserved.\n"
 "\n"
 "    2. With the -c/--check option, the update is aborted and the\n"
@@ -6755,12 +6854,13 @@
 "    Följande regler gäller när arbetskatalogen innehåller oarkiverade\n"
 "    ändringar:\n"
 "\n"
-"    1. Om varken -c/--check eller -C/--clean specificeras, kommer\n"
-"       oarkiverade ändringar att sammanfogas med den begärda ändringen,\n"
-"       och det sammanfogade resultatet lämnas oarkiverat. Uppdatering och\n"
-"       sammanfogning kommer bara att göras om den begärda ändringen är en\n"
-"       anfader eller ättling till föräldraändringen. Om inte, avbryts\n"
-"       uppdateringen och de oarkiverade ändringarna lämnas.\n"
+"    1. Om varken -c/--check eller -C/--clean specificeras, och om den\n"
+"       begärda ändringen är en anfader eller ättling till arbetskatalogens\n"
+"       förälder, kommer oarkiverade ändringar att sammanfogas med den\n"
+"       begärda ändringen och det sammanfogade resultatet lämnas oarkiverat.\n"
+"       Om den begärda ändringen inte är en anfader eller ättling (dvs är i\n"
+"       en annan gren), avbryts uppdateringen och de oarkiverade ändringarna\n"
+"       bevaras.\n"
 "\n"
 "    2. Med flaggan -c/--check avbryts uppdateringen och de oarkiverade\n"
 "       ändringarna lämnas.\n"
@@ -6794,13 +6894,21 @@
 "    integrity of their crosslinks and indices.\n"
 "    "
 msgstr ""
+"verifiera arkivets integritet\n"
+"\n"
+"    Verifiera det aktuella arkivets integritet.\n"
+"\n"
+"    Detta genomför en omfattande kontroll av arkivets integritet, validerar\n"
+"    hash- och checksummor för varje notering i ändringsloggen, manifestet,\n"
+"    och spårade filer, såväl som integriteten av korslänkar och indexar.\n"
+"    "
 
 msgid "output version and copyright information"
-msgstr ""
+msgstr "visa version och copyright-information"
 
 #, python-format
 msgid "Mercurial Distributed SCM (version %s)\n"
-msgstr ""
+msgstr "Mercurial Distribuerad SCM (version %s)\n"
 
 msgid ""
 "\n"
@@ -6808,6 +6916,10 @@
 "This is free software; see the source for copying conditions. There is NO\n"
 "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
 msgstr ""
+"\n"
+"Copyright (C) 2005-2009 Matt Mackall <mpm@selenic.com> och andra\n"
+"Detta är fri mjukvara; se källkoden för kopieringsvillkor. Det ges INGEN\n"
+"garanti; inte ens för SÄLJBARHET eller ATT PASSA FÖR ETT VISST ÄNDAMÅL.\n"
 
 msgid "repository root directory or name of overlay bundle file"
 msgstr "arkivrotkatalog eller namn på påläggsbuntfil"
@@ -6918,7 +7030,7 @@
 msgstr "visa sammanfattning av ändringar i diffstat-stil"
 
 msgid "guess renamed files by similarity (0<=s<=100)"
-msgstr ""
+msgstr "gissa omdöpta filer efter likhet (0<=s<=100)"
 
 msgid "[OPTION]... [FILE]..."
 msgstr "[FLAGGA]... [FIL]..."
@@ -6948,31 +7060,31 @@
 msgstr "[-r REV] [-f] [-a] [-u] [-d] [-n] [-c] [-l] FIL..."
 
 msgid "do not pass files through decoders"
-msgstr ""
+msgstr "passera inte filer genom dekoders"
 
 msgid "directory prefix for files in archive"
-msgstr ""
+msgstr "katalogprefix för filer i arkiv"
 
 msgid "revision to distribute"
-msgstr ""
+msgstr "revision att distribuera"
 
 msgid "type of distribution to create"
-msgstr ""
+msgstr "distributionstyp att skapa"
 
 msgid "[OPTION]... DEST"
-msgstr ""
+msgstr "[FLAGGA]... DEST"
 
 msgid "merge with old dirstate parent after backout"
-msgstr ""
+msgstr "sammanfoga med gamla dirstate-föräldern efter återkallning"
 
 msgid "parent to choose when backing out merge"
-msgstr ""
+msgstr "förälder att välja när en sammanfogning återkallas"
 
 msgid "revision to backout"
-msgstr ""
+msgstr "revision att återkalla"
 
 msgid "[OPTION]... [-r] REV"
-msgstr ""
+msgstr "[FLAGGA]... [-r] REV"
 
 msgid "reset bisect state"
 msgstr ""
@@ -7029,7 +7141,7 @@
 msgstr ""
 
 msgid "[-f] [-a] [-r REV]... [--base REV]... FILE [DEST]"
-msgstr ""
+msgstr "[-f] [-a] [-r REV]... [--base REV]... FIL [DEST]"
 
 msgid "print output to file with formatted name"
 msgstr "skriv utmatning till fil med formatterat namn"
@@ -7049,8 +7161,8 @@
 msgid "revision, tag or branch to check out"
 msgstr "revision, märke eller gren att hämta ut"
 
-msgid "a changeset you would like to have after cloning"
-msgstr "en ändring du skulle vilja ha efter kloning"
+msgid "clone only the specified revisions and ancestors"
+msgstr "klona bara specificerade revisioner och anfäder"
 
 msgid "[OPTION]... SOURCE [DEST]"
 msgstr "[FLAGGA]... KÄLLA [DEST]"
@@ -7068,7 +7180,7 @@
 msgstr ""
 
 msgid "[OPTION]... [SOURCE]... DEST"
-msgstr ""
+msgstr "[FLAGGA]... [KÄLLA]... DEST"
 
 msgid "[INDEX] REV1 REV2"
 msgstr ""
@@ -7449,10 +7561,10 @@
 msgstr ""
 
 msgid "update to new tip if changesets were unbundled"
-msgstr ""
+msgstr "uppdatera till ny topp om ändringas packades upp"
 
 msgid "[-u] FILE..."
-msgstr ""
+msgstr "[-u] FIL..."
 
 msgid "discard uncommitted changes (no backup)"
 msgstr "kassera oarkiverade ändringar (ingen backup)"
@@ -7516,7 +7628,7 @@
 
 #, python-format
 msgid "abort: %s\n"
-msgstr ""
+msgstr "avbryter: %s\n"
 
 #, python-format
 msgid "hg: %s\n"
@@ -7616,6 +7728,16 @@
 msgstr ""
 
 #, python-format
+msgid ""
+"alias for: hg %s\n"
+"\n"
+"%s"
+msgstr ""
+"alias för: hg %s\n"
+"\n"
+"%s"
+
+#, python-format
 msgid "alias '%s' resolves to unknown command '%s'\n"
 msgstr ""
 
@@ -7624,7 +7746,7 @@
 msgstr ""
 
 #, python-format
-msgid "malformed --config option: %s"
+msgid "malformed --config option: %r (use --config section.name=value)"
 msgstr ""
 
 #, python-format
@@ -7734,7 +7856,7 @@
 msgstr ""
 
 msgid "Configuration Files"
-msgstr ""
+msgstr "Konfigurationsfiler"
 
 msgid "Date Formats"
 msgstr ""
@@ -7834,6 +7956,12 @@
 msgid "%s hook is invalid (\"%s\" not in a module)"
 msgstr ""
 
+msgid "exception from first failed import attempt:\n"
+msgstr ""
+
+msgid "exception from second failed import attempt:\n"
+msgstr ""
+
 #, python-format
 msgid "%s hook is invalid (import of \"%s\" failed)"
 msgstr ""
@@ -8579,7 +8707,7 @@
 msgstr ""
 
 msgid "no username supplied (see \"hg help config\")"
-msgstr ""
+msgstr "inget användarnamn angivet (se \"hg help config\")"
 
 #, python-format
 msgid "username %s contains a newline\n"
--- a/mercurial/ancestor.py	Wed Dec 23 13:09:11 2009 +0100
+++ b/mercurial/ancestor.py	Wed Dec 23 13:12:36 2009 +0100
@@ -9,10 +9,11 @@
 
 def ancestor(a, b, pfunc):
     """
-    return the least common ancestor of nodes a and b or None if there
-    is no such ancestor.
+    return a minimal-distance ancestor of nodes a and b, or None if there is no
+    such ancestor. Note that there can be several ancestors with the same
+    (minimal) distance, and the one returned is arbitrary.
 
-    pfunc must return a list of parent vertices
+    pfunc must return a list of parent vertices for a given vertex
     """
 
     if a == b:
--- a/mercurial/cmdutil.py	Wed Dec 23 13:09:11 2009 +0100
+++ b/mercurial/cmdutil.py	Wed Dec 23 13:12:36 2009 +0100
@@ -8,7 +8,7 @@
 from node import hex, nullid, nullrev, short
 from i18n import _
 import os, sys, errno, re, glob
-import mdiff, bdiff, util, templater, patch, error, encoding
+import mdiff, bdiff, util, templater, patch, error, encoding, templatekw
 import match as _match
 
 revrangesep = ':'
@@ -95,7 +95,7 @@
             raise util.Abort(_('limit must be a positive integer'))
         if limit <= 0: raise util.Abort(_('limit must be positive'))
     else:
-        limit = sys.maxint
+        limit = None
     return limit
 
 def remoteui(src, opts):
@@ -275,31 +275,42 @@
 
 def findrenames(repo, added, removed, threshold):
     '''find renamed files -- yields (before, after, score) tuples'''
+    copies = {}
     ctx = repo['.']
-    for a in added:
-        aa = repo.wread(a)
-        bestname, bestscore = None, threshold
-        for r in removed:
-            if r not in ctx:
-                continue
-            rr = ctx.filectx(r).data()
+    for r in removed:
+        if r not in ctx:
+            continue
+        fctx = ctx.filectx(r)
 
+        def score(text):
+            if not len(text):
+                return 0.0
+            if not fctx.cmp(text):
+                return 1.0
+            if threshold == 1.0:
+                return 0.0
+            orig = fctx.data()
             # bdiff.blocks() returns blocks of matching lines
             # count the number of bytes in each
             equal = 0
-            alines = mdiff.splitnewlines(aa)
-            matches = bdiff.blocks(aa, rr)
-            for x1,x2,y1,y2 in matches:
+            alines = mdiff.splitnewlines(text)
+            matches = bdiff.blocks(text, orig)
+            for x1, x2, y1, y2 in matches:
                 for line in alines[x1:x2]:
                     equal += len(line)
 
-            lengths = len(aa) + len(rr)
-            if lengths:
-                myscore = equal*2.0 / lengths
-                if myscore >= bestscore:
-                    bestname, bestscore = r, myscore
-        if bestname:
-            yield bestname, a, bestscore
+            lengths = len(text) + len(orig)
+            return equal * 2.0 / lengths
+
+        for a in added:
+            bestscore = copies.get(a, (None, threshold))[1]
+            myscore = score(repo.wread(a))
+            if myscore >= bestscore:
+                copies[a] = (r, myscore)
+
+    for dest, v in copies.iteritems():
+        source, score = v
+        yield source, dest, score
 
 def addremove(repo, pats=[], opts={}, dry_run=None, similarity=None):
     if dry_run is None:
@@ -552,7 +563,7 @@
     return errors
 
 def service(opts, parentfn=None, initfn=None, runfn=None, logfile=None,
-    runargs=None):
+    runargs=None, appendpid=False):
     '''Run a command as a service.'''
 
     if opts['daemon'] and not opts['daemon_pipefds']:
@@ -582,7 +593,8 @@
         initfn()
 
     if opts['pid_file']:
-        fp = open(opts['pid_file'], 'w')
+        mode = appendpid and 'a' or 'w'
+        fp = open(opts['pid_file'], mode)
         fp.write(str(os.getpid()) + '\n')
         fp.close()
 
@@ -639,7 +651,7 @@
             return 1
         return 0
 
-    def show(self, ctx, copies=(), **props):
+    def show(self, ctx, copies=None, **props):
         if self.buffered:
             self.ui.pushbuffer()
             self._show(ctx, copies, props)
@@ -745,14 +757,17 @@
     def __init__(self, ui, repo, patch, diffopts, mapfile, buffered):
         changeset_printer.__init__(self, ui, repo, patch, diffopts, buffered)
         formatnode = ui.debugflag and (lambda x: x) or (lambda x: x[:12])
+        defaulttempl = {
+            'parent': '{rev}:{node|formatnode} ',
+            'manifest': '{rev}:{node|formatnode}',
+            'file_copy': '{name} ({source})',
+            'extra': '{key}={value|stringescape}'
+            }
+        # filecopy is preserved for compatibility reasons
+        defaulttempl['filecopy'] = defaulttempl['file_copy']
         self.t = templater.templater(mapfile, {'formatnode': formatnode},
-                                     cache={
-                                         'parent': '{rev}:{node|formatnode} ',
-                                         'manifest': '{rev}:{node|formatnode}',
-                                         'filecopy': '{name} ({source})'})
-        # Cache mapping from rev to a tuple with tag date, tag
-        # distance and tag name
-        self._latesttagcache = {-1: (0, 0, 'null')}
+                                     cache=defaulttempl)
+        self.cache = {}
 
     def use_template(self, t):
         '''set template string to use'''
@@ -770,174 +785,28 @@
             return []
         return parents
 
-    def _latesttaginfo(self, rev):
-        '''return date, distance and name for the latest tag of rev'''
-        todo = [rev]
-        while todo:
-            rev = todo.pop()
-            if rev in self._latesttagcache:
-                continue
-            ctx = self.repo[rev]
-            tags = [t for t in ctx.tags() if self.repo.tagtype(t) == 'global']
-            if tags:
-                self._latesttagcache[rev] = ctx.date()[0], 0, ':'.join(sorted(tags))
-                continue
-            try:
-                # The tuples are laid out so the right one can be found by comparison.
-                pdate, pdist, ptag = max(
-                    self._latesttagcache[p.rev()] for p in ctx.parents())
-            except KeyError:
-                # Cache miss - recurse
-                todo.append(rev)
-                todo.extend(p.rev() for p in ctx.parents())
-                continue
-            self._latesttagcache[rev] = pdate, pdist + 1, ptag
-        return self._latesttagcache[rev]
-
     def _show(self, ctx, copies, props):
         '''show a single changeset or file revision'''
 
-        def showlist(name, values, plural=None, **args):
-            '''expand set of values.
-            name is name of key in template map.
-            values is list of strings or dicts.
-            plural is plural of name, if not simply name + 's'.
-
-            expansion works like this, given name 'foo'.
-
-            if values is empty, expand 'no_foos'.
-
-            if 'foo' not in template map, return values as a string,
-            joined by space.
-
-            expand 'start_foos'.
-
-            for each value, expand 'foo'. if 'last_foo' in template
-            map, expand it instead of 'foo' for last key.
+        showlist = templatekw.showlist
 
-            expand 'end_foos'.
-            '''
-            if plural: names = plural
-            else: names = name + 's'
-            if not values:
-                noname = 'no_' + names
-                if noname in self.t:
-                    yield self.t(noname, **args)
-                return
-            if name not in self.t:
-                if isinstance(values[0], str):
-                    yield ' '.join(values)
-                else:
-                    for v in values:
-                        yield dict(v, **args)
-                return
-            startname = 'start_' + names
-            if startname in self.t:
-                yield self.t(startname, **args)
-            vargs = args.copy()
-            def one(v, tag=name):
-                try:
-                    vargs.update(v)
-                except (AttributeError, ValueError):
-                    try:
-                        for a, b in v:
-                            vargs[a] = b
-                    except ValueError:
-                        vargs[name] = v
-                return self.t(tag, **vargs)
-            lastname = 'last_' + name
-            if lastname in self.t:
-                last = values.pop()
-            else:
-                last = None
-            for v in values:
-                yield one(v)
-            if last is not None:
-                yield one(last, tag=lastname)
-            endname = 'end_' + names
-            if endname in self.t:
-                yield self.t(endname, **args)
-
-        def showbranches(**args):
-            branch = ctx.branch()
-            if branch != 'default':
-                branch = encoding.tolocal(branch)
-                return showlist('branch', [branch], plural='branches', **args)
-
-        def showparents(**args):
+        # showparents() behaviour depends on ui trace level which
+        # causes unexpected behaviours at templating level and makes
+        # it harder to extract it in a standalone function. Its
+        # behaviour cannot be changed so leave it here for now.
+        def showparents(repo, ctx, templ, **args):
             parents = [[('rev', p.rev()), ('node', p.hex())]
                        for p in self._meaningful_parentrevs(ctx)]
-            return showlist('parent', parents, **args)
-
-        def showtags(**args):
-            return showlist('tag', ctx.tags(), **args)
-
-        def showextras(**args):
-            for key, value in sorted(ctx.extra().items()):
-                args = args.copy()
-                args.update(dict(key=key, value=value))
-                yield self.t('extra', **args)
-
-        def showcopies(**args):
-            c = [{'name': x[0], 'source': x[1]} for x in copies]
-            return showlist('file_copy', c, plural='file_copies', **args)
-
-        files = []
-        def getfiles():
-            if not files:
-                files[:] = self.repo.status(ctx.parents()[0].node(),
-                                            ctx.node())[:3]
-            return files
-        def showfiles(**args):
-            return showlist('file', ctx.files(), **args)
-        def showmods(**args):
-            return showlist('file_mod', getfiles()[0], **args)
-        def showadds(**args):
-            return showlist('file_add', getfiles()[1], **args)
-        def showdels(**args):
-            return showlist('file_del', getfiles()[2], **args)
-        def showmanifest(**args):
-            args = args.copy()
-            args.update(dict(rev=self.repo.manifest.rev(ctx.changeset()[0]),
-                             node=hex(ctx.changeset()[0])))
-            return self.t('manifest', **args)
+            return showlist(templ, 'parent', parents, **args)
 
-        def showdiffstat(**args):
-            diff = patch.diff(self.repo, ctx.parents()[0].node(), ctx.node())
-            files, adds, removes = 0, 0, 0
-            for i in patch.diffstatdata(util.iterlines(diff)):
-                files += 1
-                adds += i[1]
-                removes += i[2]
-            return '%s: +%s/-%s' % (files, adds, removes)
-
-        def showlatesttag(**args):
-            return self._latesttaginfo(ctx.rev())[2]
-        def showlatesttagdistance(**args):
-            return self._latesttaginfo(ctx.rev())[1]
-
-        defprops = {
-            'author': ctx.user(),
-            'branches': showbranches,
-            'date': ctx.date(),
-            'desc': ctx.description().strip(),
-            'file_adds': showadds,
-            'file_dels': showdels,
-            'file_mods': showmods,
-            'files': showfiles,
-            'file_copies': showcopies,
-            'manifest': showmanifest,
-            'node': ctx.hex(),
-            'parents': showparents,
-            'rev': ctx.rev(),
-            'tags': showtags,
-            'extras': showextras,
-            'diffstat': showdiffstat,
-            'latesttag': showlatesttag,
-            'latesttagdistance': showlatesttagdistance,
-            }
         props = props.copy()
-        props.update(defprops)
+        props.update(templatekw.keywords)
+        props['parents'] = showparents
+        props['templ'] = self.t
+        props['ctx'] = ctx
+        props['repo'] = self.repo
+        props['revcache'] = {'copies': copies}
+        props['cache'] = self.cache
 
         # find correct templates for current mode
 
@@ -1161,7 +1030,7 @@
     class followfilter(object):
         def __init__(self, onlyfirst=False):
             self.startrev = nullrev
-            self.roots = []
+            self.roots = set()
             self.onlyfirst = onlyfirst
 
         def match(self, rev):
@@ -1179,18 +1048,18 @@
             if rev > self.startrev:
                 # forward: all descendants
                 if not self.roots:
-                    self.roots.append(self.startrev)
+                    self.roots.add(self.startrev)
                 for parent in realparents(rev):
                     if parent in self.roots:
-                        self.roots.append(rev)
+                        self.roots.add(rev)
                         return True
             else:
                 # backwards: all parents
                 if not self.roots:
-                    self.roots.extend(realparents(self.startrev))
+                    self.roots.update(realparents(self.startrev))
                 if rev in self.roots:
                     self.roots.remove(rev)
-                    self.roots.extend(realparents(rev))
+                    self.roots.update(realparents(rev))
                     return True
 
             return False
--- a/mercurial/commands.py	Wed Dec 23 13:09:11 2009 +0100
+++ b/mercurial/commands.py	Wed Dec 23 13:12:36 2009 +0100
@@ -10,7 +10,7 @@
 from i18n import _, gettext
 import os, re, sys, difflib, time, tempfile
 import hg, util, revlog, bundlerepo, extensions, copies, error
-import patch, help, mdiff, url, encoding
+import patch, help, mdiff, url, encoding, templatekw
 import archival, changegroup, cmdutil, sshserver, hbisect
 from hgweb import server
 import merge as merge_
@@ -1161,6 +1161,7 @@
     With the --switch-parent option, the diff will be against the
     second parent. It can be useful to review a merge.
     """
+    changesets += tuple(opts.get('rev', []))
     if not changesets:
         raise util.Abort(_("export requires at least one changeset"))
     revs = cmdutil.revrange(repo, changesets)
@@ -1476,7 +1477,7 @@
             ui.write('\n')
 
         try:
-            aliases, i = cmdutil.findcmd(name, table, False)
+            aliases, entry = cmdutil.findcmd(name, table, False)
         except error.AmbiguousCommand, inst:
             # py3k fix: except vars can't be used outside the scope of the
             # except block, nor can be used inside a lambda. python issue4617
@@ -1485,12 +1486,17 @@
             helplist(_('list of commands:\n\n'), select)
             return
 
+        # check if it's an invalid alias and display its error if it is
+        if getattr(entry[0], 'badalias', False):
+            entry[0](ui)
+            return
+
         # synopsis
-        if len(i) > 2:
-            if i[2].startswith('hg'):
-                ui.write("%s\n" % i[2])
+        if len(entry) > 2:
+            if entry[2].startswith('hg'):
+                ui.write("%s\n" % entry[2])
             else:
-                ui.write('hg %s %s\n' % (aliases[0], i[2]))
+                ui.write('hg %s %s\n' % (aliases[0], entry[2]))
         else:
             ui.write('hg %s\n' % aliases[0])
 
@@ -1499,7 +1505,7 @@
             ui.write(_("\naliases: %s\n") % ', '.join(aliases[1:]))
 
         # description
-        doc = gettext(i[0].__doc__)
+        doc = gettext(entry[0].__doc__)
         if not doc:
             doc = _("(no help text available)")
         if ui.quiet:
@@ -1508,8 +1514,8 @@
 
         if not ui.quiet:
             # options
-            if i[1]:
-                option_lists.append((_("options:\n"), i[1]))
+            if entry[1]:
+                option_lists.append((_("options:\n"), entry[1]))
 
             addglobalopts(False)
 
@@ -1918,7 +1924,7 @@
         displayer = cmdutil.show_changeset(ui, other, opts)
         count = 0
         for n in o:
-            if count >= limit:
+            if limit is not None and count >= limit:
                 break
             parents = [p for p in other.changelog.parents(n) if p != nullid]
             if opts.get('no_merges') and len(parents) == 2:
@@ -2012,41 +2018,9 @@
     limit = cmdutil.loglimit(opts)
     count = 0
 
+    endrev = None
     if opts.get('copies') and opts.get('rev'):
         endrev = max(cmdutil.revrange(repo, opts.get('rev'))) + 1
-    else:
-        endrev = len(repo)
-    rcache = {}
-    ncache = {}
-    def getrenamed(fn, rev):
-        '''looks up all renames for a file (up to endrev) the first
-        time the file is given. It indexes on the changerev and only
-        parses the manifest if linkrev != changerev.
-        Returns rename info for fn at changerev rev.'''
-        if fn not in rcache:
-            rcache[fn] = {}
-            ncache[fn] = {}
-            fl = repo.file(fn)
-            for i in fl:
-                node = fl.node(i)
-                lr = fl.linkrev(i)
-                renamed = fl.renamed(node)
-                rcache[fn][lr] = renamed
-                if renamed:
-                    ncache[fn][node] = renamed
-                if lr >= endrev:
-                    break
-        if rev in rcache[fn]:
-            return rcache[fn][rev]
-
-        # If linkrev != rev (i.e. rev not found in rcache) fallback to
-        # filectx logic.
-
-        try:
-            return repo[rev][fn].renamed()
-        except error.LookupError:
-            pass
-        return None
 
     df = False
     if opts["date"]:
@@ -2076,8 +2050,10 @@
             else:
                 return
 
-        copies = []
+        copies = None
         if opts.get('copies') and rev:
+            copies = []
+            getrenamed = templatekw.getrenamedfn(repo, endrev=endrev)
             for fn in ctx.files():
                 rename = getrenamed(fn, rev)
                 if rename:
@@ -2203,7 +2179,7 @@
     displayer = cmdutil.show_changeset(ui, repo, opts)
     count = 0
     for n in o:
-        if count >= limit:
+        if limit is not None and count >= limit:
             break
         parents = [p for p in repo.changelog.parents(n) if p != nullid]
         if opts.get('no_merges') and len(parents) == 2:
@@ -2849,7 +2825,8 @@
 
     If one revision is given, it is used as the base revision.
     If two revisions are given, the differences between them are
-    shown.
+    shown. The --change option can also be used as a shortcut to list
+    the changed files of a revision from its first parent.
 
     The codes used to show the status of files are::
 
@@ -2863,7 +2840,18 @@
         = origin of the previous file listed as A (added)
     """
 
-    node1, node2 = cmdutil.revpair(repo, opts.get('rev'))
+    revs = opts.get('rev')
+    change = opts.get('change')
+
+    if revs and change:
+        msg = _('cannot specify --rev and --change at the same time')
+        raise util.Abort(msg)
+    elif change:
+        node2 = repo.lookup(change)
+        node1 = repo[node2].parents()[0].node()
+    else:
+        node1, node2 = cmdutil.revpair(repo, revs)
+
     cwd = (pats and repo.getcwd()) or ''
     end = opts.get('print0') and '\0' or '\n'
     copy = {}
@@ -3451,7 +3439,8 @@
     "^export":
         (export,
          [('o', 'output', '', _('print output to file with formatted name')),
-          ('', 'switch-parent', None, _('diff against the second parent'))
+          ('', 'switch-parent', None, _('diff against the second parent')),
+          ('r', 'rev', [], _('revisions to export')),
           ] + diffopts,
          _('[OPTION]... [-o OUTFILESPEC] REV...')),
     "^forget":
@@ -3667,6 +3656,7 @@
           ('0', 'print0', None,
            _('end filenames with NUL, for use with xargs')),
           ('', 'rev', [], _('show difference from revision')),
+          ('', 'change', '', _('list the changed files of a revision')),
          ] + walkopts,
          _('[OPTION]... [FILE]...')),
     "tag":
--- a/mercurial/context.py	Wed Dec 23 13:09:11 2009 +0100
+++ b/mercurial/context.py	Wed Dec 23 13:12:36 2009 +0100
@@ -433,19 +433,17 @@
         # sort by revision (per file) which is a topological order
         visit = []
         for f in files:
-            fn = [(n.rev(), n) for n in needed if n._path == f]
-            visit.extend(fn)
+            visit.extend(n for n in needed if n._path == f)
 
         hist = {}
-        for r, f in sorted(visit):
+        for f in sorted(visit, key=lambda x: x.rev()):
             curr = decorate(f.data(), f)
             for p in parents(f):
-                if p != nullid:
-                    curr = pair(hist[p], curr)
-                    # trim the history of unneeded revs
-                    needed[p] -= 1
-                    if not needed[p]:
-                        del hist[p]
+                curr = pair(hist[p], curr)
+                # trim the history of unneeded revs
+                needed[p] -= 1
+                if not needed[p]:
+                    del hist[p]
             hist[f] = curr
 
         return zip(hist[f][0], hist[f][1].splitlines(True))
--- a/mercurial/dispatch.py	Wed Dec 23 13:09:11 2009 +0100
+++ b/mercurial/dispatch.py	Wed Dec 23 13:12:36 2009 +0100
@@ -177,6 +177,7 @@
         self.opts = []
         self.help = ''
         self.norepo = True
+        self.badalias = False
 
         try:
             cmdutil.findcmd(self.name, cmdtable, True)
@@ -189,6 +190,7 @@
                 ui.warn(_("no definition for alias '%s'\n") % self.name)
                 return 1
             self.fn = fn
+            self.badalias = True
 
             return
 
@@ -205,18 +207,26 @@
             self.args = aliasargs(self.fn) + args
             if cmd not in commands.norepo.split(' '):
                 self.norepo = False
+            if self.help.startswith("hg " + cmd):
+                # drop prefix in old-style help lines so hg shows the alias
+                self.help = self.help[4 + len(cmd):]
+            self.__doc__ = _("alias for: hg %s\n\n%s") \
+                               % (definition, self.fn.__doc__)
+
         except error.UnknownCommand:
             def fn(ui, *args):
                 ui.warn(_("alias '%s' resolves to unknown command '%s'\n") \
                             % (self.name, cmd))
                 return 1
             self.fn = fn
+            self.badalias = True
         except error.AmbiguousCommand:
             def fn(ui, *args):
                 ui.warn(_("alias '%s' resolves to ambiguous command '%s'\n") \
                             % (self.name, cmd))
                 return 1
             self.fn = fn
+            self.badalias = True
 
     def __call__(self, ui, *args, **opts):
         if self.shadows:
@@ -245,14 +255,14 @@
 
     if args:
         cmd, args = args[0], args[1:]
-        aliases, i = cmdutil.findcmd(cmd, commands.table,
+        aliases, entry = cmdutil.findcmd(cmd, commands.table,
                                      ui.config("ui", "strict"))
         cmd = aliases[0]
-        args = aliasargs(i[0]) + args
+        args = aliasargs(entry[0]) + args
         defaults = ui.config("defaults", cmd)
         if defaults:
             args = map(util.expandpath, shlex.split(defaults)) + args
-        c = list(i[1])
+        c = list(entry[1])
     else:
         cmd = None
         c = []
@@ -272,7 +282,7 @@
         options[n] = cmdoptions[n]
         del cmdoptions[n]
 
-    return (cmd, cmd and i[0] or None, args, options, cmdoptions)
+    return (cmd, cmd and entry[0] or None, args, options, cmdoptions)
 
 def _parseconfig(ui, config):
     """parse the --config options from the command line"""
--- a/mercurial/graphmod.py	Wed Dec 23 13:09:11 2009 +0100
+++ b/mercurial/graphmod.py	Wed Dec 23 13:12:36 2009 +0100
@@ -17,7 +17,6 @@
 Data depends on type.
 """
 
-import sys
 from mercurial.node import nullrev
 
 CHANGESET = 'C'
@@ -37,7 +36,7 @@
         yield (cur, CHANGESET, ctx, sorted(parents))
         cur -= 1
 
-def filerevs(repo, path, start, stop, limit=sys.maxint):
+def filerevs(repo, path, start, stop, limit=None):
     """file cset DAG generator yielding (id, CHANGESET, ctx, [parentids]) tuples
 
     This generator function walks through the revision history of a single
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/help/config.txt	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,37 @@
+Mercurial reads configuration data from several files, if they exist.
+Below we list the most specific file first.
+
+On Windows, these configuration files are read:
+
+- ``<repo>\.hg\hgrc``
+- ``%USERPROFILE%\.hgrc``
+- ``%USERPROFILE%\Mercurial.ini``
+- ``%HOME%\.hgrc``
+- ``%HOME%\Mercurial.ini``
+- ``C:\Mercurial\Mercurial.ini``
+- ``HKEY_LOCAL_MACHINE\SOFTWARE\Mercurial``
+- ``<install-dir>\Mercurial.ini``
+
+On Unix, these files are read:
+
+- ``<repo>/.hg/hgrc``
+- ``$HOME/.hgrc``
+- ``/etc/mercurial/hgrc``
+- ``/etc/mercurial/hgrc.d/*.rc``
+- ``<install-root>/etc/mercurial/hgrc``
+- ``<install-root>/etc/mercurial/hgrc.d/*.rc``
+
+The configuration files for Mercurial use a simple ini-file format. A
+configuration file consists of sections, led by a ``[section]`` header
+and followed by ``name = value`` entries::
+
+  [ui]
+  username = Firstname Lastname <firstname.lastname@example.net>
+  verbose = True
+
+This above entries will be referred to as ``ui.username`` and
+``ui.verbose``, respectively. Please see the hgrc man page for a full
+description of the possible configuration values:
+
+- on Unix-like systems: ``man hgrc``
+- online: http://www.selenic.com/mercurial/hgrc.5.html
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/help/dates.txt	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,36 @@
+Some commands allow the user to specify a date, e.g.:
+
+- backout, commit, import, tag: Specify the commit date.
+- log, revert, update: Select revision(s) by date.
+
+Many date formats are valid. Here are some examples:
+
+- ``Wed Dec 6 13:18:29 2006`` (local timezone assumed)
+- ``Dec 6 13:18 -0600`` (year assumed, time offset provided)
+- ``Dec 6 13:18 UTC`` (UTC and GMT are aliases for +0000)
+- ``Dec 6`` (midnight)
+- ``13:18`` (today assumed)
+- ``3:39`` (3:39AM assumed)
+- ``3:39pm`` (15:39)
+- ``2006-12-06 13:18:29`` (ISO 8601 format)
+- ``2006-12-6 13:18``
+- ``2006-12-6``
+- ``12-6``
+- ``12/6``
+- ``12/6/6`` (Dec 6 2006)
+
+Lastly, there is Mercurial's internal format:
+
+- ``1165432709 0`` (Wed Dec 6 13:18:29 2006 UTC)
+
+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).
+
+The log command also accepts date ranges:
+
+- ``<{datetime}`` - at or before a given date/time
+- ``>{datetime}`` - on or after a given date/time
+- ``{datetime} to {datetime}`` - a date range, inclusive
+- ``-{days}`` - within a given number of days of today
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/help/diffs.txt	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,29 @@
+Mercurial's default format for showing changes between two versions of
+a file is compatible with the unified format of GNU diff, which can be
+used by GNU patch and many other standard tools.
+
+While this standard format is often enough, it does not encode the
+following information:
+
+- executable status and other permission bits
+- copy or rename information
+- changes in binary files
+- creation or deletion of empty files
+
+Mercurial also supports the extended diff format from the git VCS
+which addresses these limitations. The git diff format is not produced
+by default because a few widespread tools still do not understand this
+format.
+
+This means that when generating diffs from a Mercurial repository
+(e.g. with "hg export"), you should be careful about things like file
+copies and renames or other things mentioned above, because when
+applying a standard diff to a different repository, this extra
+information is lost. Mercurial's internal operations (like push and
+pull) are not affected by this, because they use an internal binary
+format for communicating changes.
+
+To make Mercurial produce the git extended diff format, use the --git
+option available for many commands, or set 'git = True' in the [diff]
+section of your hgrc. You do not need to set this option when
+importing diffs in this format or using them in the mq extension.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/help/environment.txt	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,76 @@
+HG
+    Path to the 'hg' executable, automatically passed when running
+    hooks, extensions or external tools. If unset or empty, this is
+    the hg executable's name if it's frozen, or an executable named
+    'hg' (with %PATHEXT% [defaulting to COM/EXE/BAT/CMD] extensions on
+    Windows) is searched.
+
+HGEDITOR
+    This is the name of the editor to run when committing. See EDITOR.
+
+    (deprecated, use .hgrc)
+
+HGENCODING
+    This overrides the default locale setting detected by Mercurial.
+    This setting is used to convert data including usernames,
+    changeset descriptions, tag names, and branches. This setting can
+    be overridden with the --encoding command-line option.
+
+HGENCODINGMODE
+    This sets Mercurial's behavior for handling unknown characters
+    while transcoding user input. The default is "strict", which
+    causes Mercurial to abort if it can't map a character. Other
+    settings include "replace", which replaces unknown characters, and
+    "ignore", which drops them. This setting can be overridden with
+    the --encodingmode command-line option.
+
+HGMERGE
+    An executable to use for resolving merge conflicts. The program
+    will be executed with three arguments: local file, remote file,
+    ancestor file.
+
+    (deprecated, use .hgrc)
+
+HGRCPATH
+    A list of files or directories to search for hgrc files. Item
+    separator is ":" on Unix, ";" on Windows. If HGRCPATH is not set,
+    platform default search path is used. If empty, only the .hg/hgrc
+    from the current repository is read.
+
+    For each element in HGRCPATH:
+
+    - if it's a directory, all files ending with .rc are added
+    - otherwise, the file itself will be added
+
+HGUSER
+    This is the string used as the author of a commit. If not set,
+    available values will be considered in this order:
+
+    - HGUSER (deprecated)
+    - hgrc files from the HGRCPATH
+    - EMAIL
+    - interactive prompt
+    - LOGNAME (with ``@hostname`` appended)
+
+    (deprecated, use .hgrc)
+
+EMAIL
+    May be used as the author of a commit; see HGUSER.
+
+LOGNAME
+    May be used as the author of a commit; see HGUSER.
+
+VISUAL
+    This is the name of the editor to use when committing. See EDITOR.
+
+EDITOR
+    Sometimes Mercurial needs to open a text file in an editor for a
+    user to modify, for example when writing commit messages. The
+    editor it uses is determined by looking at the environment
+    variables HGEDITOR, VISUAL and EDITOR, in that order. The first
+    non-empty one is chosen. If all of them are empty, the editor
+    defaults to 'vi'.
+
+PYTHONPATH
+    This is used by Python to find imported modules and may need to be
+    set appropriately if this Mercurial is not installed system-wide.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/help/extensions.txt	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,33 @@
+Mercurial has the ability to add new features through the use of
+extensions. Extensions may add new commands, add options to
+existing commands, change the default behavior of commands, or
+implement hooks.
+
+Extensions are not loaded by default for a variety of reasons:
+they can increase startup overhead; they may be meant for advanced
+usage only; they may provide potentially dangerous abilities (such
+as letting you destroy or modify history); they might not be ready
+for prime time; or they may alter some usual behaviors of stock
+Mercurial. It is thus up to the user to activate extensions as
+needed.
+
+To enable the "foo" extension, either shipped with Mercurial or in
+the Python search path, create an entry for it in your hgrc, like
+this::
+
+  [extensions]
+  foo =
+
+You may also specify the full path to an extension::
+
+  [extensions]
+  myfeature = ~/.hgext/myfeature.py
+
+To explicitly disable an extension enabled in an hgrc of broader
+scope, prepend its path with !::
+
+  [extensions]
+  # disabling extension bar residing in /path/to/extension/bar.py
+  hgext.bar = !/path/to/extension/bar.py
+  # ditto, but no path was supplied for extension baz
+  hgext.baz = !
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/help/multirevs.txt	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,13 @@
+When Mercurial accepts more than one revision, they may be specified
+individually, or provided as a topologically continuous range,
+separated by the ":" character.
+
+The syntax of range notation is [BEGIN]:[END], where BEGIN and END are
+revision identifiers. Both BEGIN and END are optional. If BEGIN is not
+specified, it defaults to revision number 0. If END is not specified,
+it defaults to the tip. The range ":" thus means "all revisions".
+
+If BEGIN is greater than END, revisions are treated in reverse order.
+
+A range acts as a closed interval. This means that a range of 3:5
+gives 3, 4 and 5. Similarly, a range of 9:6 gives 9, 8, 7, and 6.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/help/patterns.txt	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,41 @@
+Mercurial accepts several notations for identifying one or more files
+at a time.
+
+By default, Mercurial treats filenames as shell-style extended glob
+patterns.
+
+Alternate pattern notations must be specified explicitly.
+
+To use a plain path name without any pattern matching, start it with
+``path:``. These path names must completely match starting at the
+current repository root.
+
+To use an extended glob, start a name with ``glob:``. Globs are rooted
+at the current directory; a glob such as ``*.c`` will only match files
+in the current directory ending with ``.c``.
+
+The supported glob syntax extensions are ``**`` to match any string
+across path separators and ``{a,b}`` to mean "a or b".
+
+To use a Perl/Python regular expression, start a name with ``re:``.
+Regexp pattern matching is anchored at the root of the repository.
+
+Plain examples::
+
+  path:foo/bar   a name bar in a directory named foo in the root
+                 of the repository
+  path:path:name a file or directory named "path:name"
+
+Glob examples::
+
+  glob:*.c       any name ending in ".c" in the current directory
+  *.c            any name ending in ".c" in the current directory
+  **.c           any name ending in ".c" in any subdirectory of the
+                 current directory including itself.
+  foo/*.c        any name ending in ".c" in the directory foo
+  foo/**.c       any name ending in ".c" in any subdirectory of foo
+                 including itself.
+
+Regexp examples::
+
+  re:.*\.c$      any name ending in ".c", anywhere in the repository
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/help/revisions.txt	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,29 @@
+Mercurial supports several ways to specify individual revisions.
+
+A plain integer is treated as a revision number. Negative integers are
+treated as sequential offsets from the tip, with -1 denoting the tip,
+-2 denoting the revision prior to the tip, and so forth.
+
+A 40-digit hexadecimal string is treated as a unique revision
+identifier.
+
+A hexadecimal string less than 40 characters long is treated as a
+unique revision identifier and is referred to as a short-form
+identifier. A short-form identifier is only valid if it is the prefix
+of exactly one full-length identifier.
+
+Any other string is treated as a tag or branch name. A tag name is a
+symbolic name associated with a revision identifier. A branch name
+denotes the tipmost revision of that branch. Tag and branch names must
+not contain the ":" character.
+
+The reserved name "tip" is a special tag that always identifies the
+most recent revision.
+
+The reserved name "null" indicates the null revision. This is the
+revision of an empty repository, and the parent of revision 0.
+
+The reserved name "." indicates the working directory parent. If no
+working directory is checked out, it is equivalent to null. If an
+uncommitted merge is in progress, "." is the revision of the first
+parent.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/help/templates.txt	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,149 @@
+Mercurial allows you to customize output of commands through
+templates. You can either pass in a template from the command
+line, via the --template option, or select an existing
+template-style (--style).
+
+You can customize output for any "log-like" command: log,
+outgoing, incoming, tip, parents, heads and glog.
+
+Three styles are packaged with Mercurial: default (the style used
+when no explicit preference is passed), compact and changelog.
+Usage::
+
+    $ hg log -r1 --style changelog
+
+A template is a piece of text, with markup to invoke variable
+expansion::
+
+    $ hg log -r1 --template "{node}\n"
+    b56ce7b07c52de7d5fd79fb89701ea538af65746
+
+Strings in curly braces are called keywords. The availability of
+keywords depends on the exact context of the templater. These
+keywords are usually available for templating a log-like command:
+
+:author: String. The unmodified author of the changeset.
+
+:branches: String. The name of the branch on which the changeset was
+    committed. Will be empty if the branch name was default.
+
+:date: Date information. The date when the changeset was committed.
+
+:desc: String. The text of the changeset description.
+
+:diffstat: String. Statistics of changes with the following format:
+    "modified files: +added/-removed lines"
+
+:files: List of strings. All files modified, added, or removed by this
+    changeset.
+
+:file_adds: List of strings. Files added by this changeset.
+
+:file_copies: List of strings. Files copied in this changeset with
+    their sources.
+
+:file_copies_switch: List of strings. Like "file_copies" but displayed
+    only if the --copied switch is set.
+
+:file_mods: List of strings. Files modified by this changeset.
+
+:file_dels: List of strings. Files removed by this changeset.
+
+:node: String. The changeset identification hash, as a 40-character
+    hexadecimal string.
+
+:parents: List of strings. The parents of the changeset.
+
+:rev: Integer. The repository-local changeset revision number.
+
+:tags: List of strings. Any tags associated with the changeset.
+
+:latesttag: String. Most recent global tag in the ancestors of this
+    changeset.
+
+:latesttagdistance: Integer. Longest path to the latest tag.
+
+The "date" keyword does not produce human-readable output. If you
+want to use a date in your output, you can use a filter to process
+it. Filters are functions which return a string based on the input
+variable. You can also use a chain of filters to get the desired
+output::
+
+   $ hg tip --template "{date|isodate}\n"
+   2008-08-21 18:22 +0000
+
+List of filters:
+
+:addbreaks: Any text. Add an XHTML "<br />" tag before the end of
+    every line except the last.
+
+:age: Date. Returns a human-readable date/time difference between the
+    given date/time and the current date/time.
+
+:basename: Any text. Treats the text as a path, and returns the last
+    component of the path after splitting by the path separator
+    (ignoring trailing separators). For example, "foo/bar/baz" becomes
+    "baz" and "foo/bar//" becomes "bar".
+
+:stripdir: Treat the text as path and strip a directory level, if
+    possible. For example, "foo" and "foo/bar" becomes "foo".
+
+:date: Date. Returns a date in a Unix date format, including the
+    timezone: "Mon Sep 04 15:13:13 2006 0700".
+
+:domain: Any text. Finds the first string that looks like an email
+    address, and extracts just the domain component. Example: ``User
+    <user@example.com>`` becomes ``example.com``.
+
+:email: Any text. Extracts the first string that looks like an email
+    address. Example: ``User <user@example.com>`` becomes
+    ``user@example.com``.
+
+:escape: Any text. Replaces the special XML/XHTML characters "&", "<"
+    and ">" with XML entities.
+
+:fill68: Any text. Wraps the text to fit in 68 columns.
+
+:fill76: Any text. Wraps the text to fit in 76 columns.
+
+:firstline: Any text. Returns the first line of text.
+
+:nonempty: Any text. Returns '(none)' if the string is empty.
+
+:hgdate: Date. Returns the date as a pair of numbers: "1157407993
+    25200" (Unix timestamp, timezone offset).
+
+:isodate: Date. Returns the date in ISO 8601 format: "2009-08-18 13:00
+    +0200".
+
+:isodatesec: Date. Returns the date in ISO 8601 format, including
+    seconds: "2009-08-18 13:00:13 +0200". See also the rfc3339date
+    filter.
+
+:localdate: Date. Converts a date to local date.
+
+:obfuscate: Any text. Returns the input text rendered as a sequence of
+    XML entities.
+
+:person: Any text. Returns the text before an email address.
+
+:rfc822date: Date. Returns a date using the same format used in email
+    headers: "Tue, 18 Aug 2009 13:00:13 +0200".
+
+:rfc3339date: Date. Returns a date using the Internet date format
+    specified in RFC 3339: "2009-08-18T13:00:13+02:00".
+
+:short: Changeset hash. Returns the short form of a changeset hash,
+    i.e. a 12-byte hexadecimal string.
+
+:shortdate: Date. Returns a date like "2006-09-18".
+
+:strip: Any text. Strips all leading and trailing whitespace.
+
+:tabindent: Any text. Returns the text, with every line except the
+     first starting with a tab character.
+
+:urlescape: Any text. Escapes all "special" characters. For example,
+    "foo bar" becomes "foo%20bar".
+
+:user: Any text. Returns the user portion of an email address.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/help/urls.txt	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,63 @@
+Valid URLs are of the form::
+
+  local/filesystem/path[#revision]
+  file://local/filesystem/path[#revision]
+  http://[user[:pass]@]host[:port]/[path][#revision]
+  https://[user[:pass]@]host[:port]/[path][#revision]
+  ssh://[user[:pass]@]host[:port]/[path][#revision]
+
+Paths in the local filesystem can either point to Mercurial
+repositories or to bundle files (as created by 'hg bundle' or 'hg
+incoming --bundle').
+
+An optional identifier after # indicates a particular branch, tag, or
+changeset to use from the remote repository. See also 'hg help
+revisions'.
+
+Some features, such as pushing to http:// and https:// URLs are only
+possible if the feature is explicitly enabled on the remote Mercurial
+server.
+
+Some notes about using SSH with Mercurial:
+
+- SSH requires an accessible shell account on the destination machine
+  and a copy of hg in the remote path or specified with as remotecmd.
+- path is relative to the remote user's home directory by default. Use
+  an extra slash at the start of a path to specify an absolute path::
+
+    ssh://example.com//tmp/repository
+
+- Mercurial doesn't use its own compression via SSH; the right thing
+  to do is to configure it in your ~/.ssh/config, e.g.::
+
+    Host *.mylocalnetwork.example.com
+      Compression no
+    Host *
+      Compression yes
+
+  Alternatively specify "ssh -C" as your ssh command in your hgrc or
+  with the --ssh command line option.
+
+These URLs can all be stored in your hgrc with path aliases under the
+[paths] section like so::
+
+  [paths]
+  alias1 = URL1
+  alias2 = URL2
+  ...
+
+You can then use the alias for any command that uses a URL (for
+example 'hg pull alias1' will be treated as 'hg pull URL1').
+
+Two path aliases are special because they are used as defaults when
+you do not provide the URL to a command:
+
+default:
+  When you create a repository with hg clone, the clone command saves
+  the location of the source repository as the new repository's
+  'default' path. This is then used when you omit path from push- and
+  pull-like commands (including incoming and outgoing).
+
+default-push:
+  The push command will look for a path named 'default-push', and
+  prefer it over 'default' if both are defined.
--- a/mercurial/hgweb/common.py	Wed Dec 23 13:09:11 2009 +0100
+++ b/mercurial/hgweb/common.py	Wed Dec 23 13:12:36 2009 +0100
@@ -16,6 +16,58 @@
 HTTP_METHOD_NOT_ALLOWED = 405
 HTTP_SERVER_ERROR = 500
 
+# Hooks for hgweb permission checks; extensions can add hooks here. Each hook
+# is invoked like this: hook(hgweb, request, operation), where operation is
+# either read, pull or push. Hooks should either raise an ErrorResponse
+# exception, or just return.
+# It is possible to do both authentication and authorization through this.
+permhooks = []
+
+def checkauthz(hgweb, req, op):
+    '''Check permission for operation based on request data (including
+    authentication info). Return if op allowed, else raise an ErrorResponse
+    exception.'''
+
+    user = req.env.get('REMOTE_USER')
+
+    deny_read = hgweb.configlist('web', 'deny_read')
+    if deny_read and (not user or deny_read == ['*'] or user in deny_read):
+        raise ErrorResponse(HTTP_UNAUTHORIZED, 'read not authorized')
+
+    allow_read = hgweb.configlist('web', 'allow_read')
+    result = (not allow_read) or (allow_read == ['*'])
+    if not (result or user in allow_read):
+        raise ErrorResponse(HTTP_UNAUTHORIZED, 'read not authorized')
+
+    if op == 'pull' and not hgweb.allowpull:
+        raise ErrorResponse(HTTP_UNAUTHORIZED, 'pull not authorized')
+    elif op == 'pull' or op is None: # op is None for interface requests
+        return
+
+    # enforce that you can only push using POST requests
+    if req.env['REQUEST_METHOD'] != 'POST':
+        msg = 'push requires POST request'
+        raise ErrorResponse(HTTP_METHOD_NOT_ALLOWED, msg)
+
+    # require ssl by default for pushing, auth info cannot be sniffed
+    # and replayed
+    scheme = req.env.get('wsgi.url_scheme')
+    if hgweb.configbool('web', 'push_ssl', True) and scheme != 'https':
+        raise ErrorResponse(HTTP_OK, 'ssl required')
+
+    deny = hgweb.configlist('web', 'deny_push')
+    if deny and (not user or deny == ['*'] or user in deny):
+        raise ErrorResponse(HTTP_UNAUTHORIZED, 'push not authorized')
+
+    allow = hgweb.configlist('web', 'allow_push')
+    result = allow and (allow == ['*'] or user in allow)
+    if not result:
+        raise ErrorResponse(HTTP_UNAUTHORIZED, 'push not authorized')
+
+# Add the default permhook, which provides simple authorization.
+permhooks.append(checkauthz)
+
+
 class ErrorResponse(Exception):
     def __init__(self, code, message=None, headers=[]):
         Exception.__init__(self)
@@ -34,15 +86,12 @@
 def statusmessage(code, message=None):
     return '%d %s' % (code, message or _statusmessage(code))
 
-def get_mtime(repo_path):
-    store_path = os.path.join(repo_path, ".hg")
-    if not os.path.isdir(os.path.join(store_path, "data")):
-        store_path = os.path.join(store_path, "store")
-    cl_path = os.path.join(store_path, "00changelog.i")
+def get_mtime(spath):
+    cl_path = os.path.join(spath, "00changelog.i")
     if os.path.exists(cl_path):
         return os.stat(cl_path).st_mtime
     else:
-        return os.stat(store_path).st_mtime
+        return os.stat(spath).st_mtime
 
 def staticfile(directory, fname, req):
     """return a file inside directory with guessed Content-Type header
--- a/mercurial/hgweb/hgweb_mod.py	Wed Dec 23 13:09:11 2009 +0100
+++ b/mercurial/hgweb/hgweb_mod.py	Wed Dec 23 13:12:36 2009 +0100
@@ -8,7 +8,7 @@
 
 import os
 from mercurial import ui, hg, hook, error, encoding, templater
-from common import get_mtime, ErrorResponse
+from common import get_mtime, ErrorResponse, permhooks
 from common import HTTP_OK, HTTP_BAD_REQUEST, HTTP_NOT_FOUND, HTTP_SERVER_ERROR
 from common import HTTP_UNAUTHORIZED, HTTP_METHOD_NOT_ALLOWED
 from request import wsgirequest
@@ -54,8 +54,10 @@
         return self.repo.ui.configlist(section, name, default,
                                        untrusted=untrusted)
 
-    def refresh(self):
-        mtime = get_mtime(self.repo.root)
+    def refresh(self, request=None):
+        if request:
+            self.repo.ui.environ = request.env
+        mtime = get_mtime(self.repo.spath)
         if mtime != self.mtime:
             self.mtime = mtime
             self.repo = hg.repository(self.repo.ui, self.repo.root)
@@ -80,7 +82,7 @@
 
     def run_wsgi(self, req):
 
-        self.refresh()
+        self.refresh(req)
 
         # work with CGI variables to create coherent structure
         # use SCRIPT_NAME, PATH_INFO and QUERY_STRING as well as our REPO_NAME
@@ -281,42 +283,5 @@
         }
 
     def check_perm(self, req, op):
-        '''Check permission for operation based on request data (including
-        authentication info). Return if op allowed, else raise an ErrorResponse
-        exception.'''
-
-        user = req.env.get('REMOTE_USER')
-
-        deny_read = self.configlist('web', 'deny_read')
-        if deny_read and (not user or deny_read == ['*'] or user in deny_read):
-            raise ErrorResponse(HTTP_UNAUTHORIZED, 'read not authorized')
-
-        allow_read = self.configlist('web', 'allow_read')
-        result = (not allow_read) or (allow_read == ['*'])
-        if not (result or user in allow_read):
-            raise ErrorResponse(HTTP_UNAUTHORIZED, 'read not authorized')
-
-        if op == 'pull' and not self.allowpull:
-            raise ErrorResponse(HTTP_UNAUTHORIZED, 'pull not authorized')
-        elif op == 'pull' or op is None: # op is None for interface requests
-            return
-
-        # enforce that you can only push using POST requests
-        if req.env['REQUEST_METHOD'] != 'POST':
-            msg = 'push requires POST request'
-            raise ErrorResponse(HTTP_METHOD_NOT_ALLOWED, msg)
-
-        # require ssl by default for pushing, auth info cannot be sniffed
-        # and replayed
-        scheme = req.env.get('wsgi.url_scheme')
-        if self.configbool('web', 'push_ssl', True) and scheme != 'https':
-            raise ErrorResponse(HTTP_OK, 'ssl required')
-
-        deny = self.configlist('web', 'deny_push')
-        if deny and (not user or deny == ['*'] or user in deny):
-            raise ErrorResponse(HTTP_UNAUTHORIZED, 'push not authorized')
-
-        allow = self.configlist('web', 'allow_push')
-        result = allow and (allow == ['*'] or user in allow)
-        if not result:
-            raise ErrorResponse(HTTP_UNAUTHORIZED, 'push not authorized')
+        for hook in permhooks:
+            hook(self, req, op)
--- a/mercurial/hgweb/hgwebdir_mod.py	Wed Dec 23 13:09:11 2009 +0100
+++ b/mercurial/hgweb/hgwebdir_mod.py	Wed Dec 23 13:12:36 2009 +0100
@@ -235,7 +235,8 @@
 
                 # update time with local timezone
                 try:
-                    d = (get_mtime(path), util.makedate()[1])
+                    r = hg.repository(self.ui, path)
+                    d = (get_mtime(r.spath), util.makedate()[1])
                 except OSError:
                     continue
 
--- a/mercurial/httprepo.py	Wed Dec 23 13:09:11 2009 +0100
+++ b/mercurial/httprepo.py	Wed Dec 23 13:12:36 2009 +0100
@@ -93,7 +93,7 @@
         resp_url = resp.geturl()
         if resp_url.endswith(qs):
             resp_url = resp_url[:-len(qs)]
-        if self._url != resp_url:
+        if self._url.rstrip('/') != resp_url.rstrip('/'):
             self.ui.status(_('real URL is %s\n') % resp_url)
             self._url = resp_url
         try:
--- a/mercurial/localrepo.py	Wed Dec 23 13:09:11 2009 +0100
+++ b/mercurial/localrepo.py	Wed Dec 23 13:12:36 2009 +0100
@@ -128,6 +128,12 @@
             return context.workingctx(self)
         return context.changectx(self, changeid)
 
+    def __contains__(self, changeid):
+        try:
+            return bool(self.lookup(changeid))
+        except error.RepoLookupError:
+            return False
+
     def __nonzero__(self):
         return True
 
@@ -819,6 +825,7 @@
                                       extra, changes)
             if editor:
                 cctx._text = editor(self, cctx, subs)
+            edited = (text != cctx._text)
 
             # commit subs
             if subs:
@@ -829,7 +836,21 @@
                     state[s] = (state[s][0], sr)
                 subrepo.writestate(self, state)
 
-            ret = self.commitctx(cctx, True)
+            # Save commit message in case this transaction gets rolled back
+            # (e.g. by a pretxncommit hook).  Leave the content alone on
+            # the assumption that the user will use the same editor again.
+            msgfile = self.opener('last-message.txt', 'wb')
+            msgfile.write(cctx._text)
+            msgfile.close()
+
+            try:
+                ret = self.commitctx(cctx, True)
+            except:
+                if edited:
+                    msgfn = self.pathto(msgfile.name[len(self.root)+1:])
+                    self.ui.write(
+                        _('note: commit message saved in %s\n') % msgfn)
+                raise
 
             # update dirstate and mergestate
             for f in changes[0] + changes[1]:
@@ -1686,18 +1707,8 @@
         # also assume the recipient will have all the parents.  This function
         # prunes them from the set of missing nodes.
         def prune_parents(revlog, hasset, msngset):
-            haslst = list(hasset)
-            haslst.sort(key=revlog.rev)
-            for node in haslst:
-                parentlst = [p for p in revlog.parents(node) if p != nullid]
-                while parentlst:
-                    n = parentlst.pop()
-                    if n not in hasset:
-                        hasset.add(n)
-                        p = [p for p in revlog.parents(n) if p != nullid]
-                        parentlst.extend(p)
-            for n in hasset:
-                msngset.pop(n, None)
+            for r in revlog.ancestors(*[revlog.rev(n) for n in hasset]):
+                msngset.pop(revlog.node(r), None)
 
         # This is a function generating function used to set up an environment
         # for the inner function to execute in.
@@ -1743,7 +1754,6 @@
         # A function generating function that sets up the initial environment
         # the inner function.
         def filenode_collector(changedfiles):
-            next_rev = [0]
             # This gathers information from each manifestnode included in the
             # changegroup about which filenodes the manifest node references
             # so we can include those in the changegroup too.
@@ -1753,8 +1763,8 @@
             # the first manifest that references it belongs to.
             def collect_msng_filenodes(mnfstnode):
                 r = mnfst.rev(mnfstnode)
-                if r == next_rev[0]:
-                    # If the last rev we looked at was the one just previous,
+                if r - 1 in mnfst.parentrevs(r):
+                    # If the previous rev is one of the parents,
                     # we only need to see a diff.
                     deltamf = mnfst.readdelta(mnfstnode)
                     # For each line in the delta
@@ -1783,8 +1793,6 @@
                             clnode = msng_mnfst_set[mnfstnode]
                             ndset = msng_filenode_set.setdefault(f, {})
                             ndset.setdefault(fnode, clnode)
-                # Remember the revision we hope to see next.
-                next_rev[0] = r + 1
             return collect_msng_filenodes
 
         # We have a list of filenodes we think we need for a file, lets remove
--- a/mercurial/mail.py	Wed Dec 23 13:09:11 2009 +0100
+++ b/mercurial/mail.py	Wed Dec 23 13:12:36 2009 +0100
@@ -160,11 +160,7 @@
         return str(email.Header.Header(s, cs))
     return s
 
-def addressencode(ui, address, charsets=None, display=False):
-    '''Turns address into RFC-2047 compliant header.'''
-    if display or not address:
-        return address or ''
-    name, addr = email.Utils.parseaddr(address)
+def _addressencode(ui, name, addr, charsets=None):
     name = headencode(ui, name, charsets)
     try:
         acc, dom = addr.split('@')
@@ -181,6 +177,26 @@
             raise util.Abort(_('invalid local address: %s') % addr)
     return email.Utils.formataddr((name, addr))
 
+def addressencode(ui, address, charsets=None, display=False):
+    '''Turns address into RFC-2047 compliant header.'''
+    if display or not address:
+        return address or ''
+    name, addr = email.Utils.parseaddr(address)
+    return _addressencode(ui, name, addr, charsets)
+
+def addrlistencode(ui, addrs, charsets=None, display=False):
+    '''Turns a list of addresses into a list of RFC-2047 compliant headers.
+    A single element of input list may contain multiple addresses, but output
+    always has one address per item'''
+    if display:
+        return [a.strip() for a in addrs if a.strip()]
+
+    result = []
+    for name, addr in email.Utils.getaddresses(addrs):
+        if name or addr:
+            result.append(_addressencode(ui, name, addr, charsets))
+    return result
+
 def mimeencode(ui, s, charsets=None, display=False):
     '''creates mime text object, encodes it if needed, and sets
     charset and transfer-encoding accordingly.'''
--- a/mercurial/minirst.py	Wed Dec 23 13:09:11 2009 +0100
+++ b/mercurial/minirst.py	Wed Dec 23 13:12:36 2009 +0100
@@ -113,7 +113,7 @@
 
 _bulletre = re.compile(r'(-|[0-9A-Za-z]+\.|\(?[0-9A-Za-z]+\)) ')
 _optionre = re.compile(r'^(--[a-z-]+)((?:[ =][a-zA-Z][\w-]*)?  +)(.*)$')
-_fieldre = re.compile(r':(?![: ])([^:]*)(?<! ):( +)(.*)')
+_fieldre = re.compile(r':(?![: ])([^:]*)(?<! ):[ ]+(.*)')
 _definitionre = re.compile(r'[^ ]')
 
 def splitparagraphs(blocks):
@@ -159,6 +159,33 @@
     return blocks
 
 
+_fieldwidth = 12
+
+def updatefieldlists(blocks):
+    """Find key and maximum key width for field lists."""
+    i = 0
+    while i < len(blocks):
+        if blocks[i]['type'] != 'field':
+            i += 1
+            continue
+
+        keywidth = 0
+        j = i
+        while j < len(blocks) and blocks[j]['type'] == 'field':
+            m = _fieldre.match(blocks[j]['lines'][0])
+            key, rest = m.groups()
+            blocks[j]['lines'][0] = rest
+            blocks[j]['key'] = key
+            keywidth = max(keywidth, len(key))
+            j += 1
+
+        for block in blocks[i:j]:
+            block['keywidth'] = keywidth
+        i = j + 1
+
+    return blocks
+
+
 def findsections(blocks):
     """Finds sections.
 
@@ -226,20 +253,27 @@
     initindent = subindent = indent
     if block['type'] == 'bullet':
         m = _bulletre.match(block['lines'][0])
-        if m:
-            subindent = indent + m.end() * ' '
+        subindent = indent + m.end() * ' '
     elif block['type'] == 'field':
-        m = _fieldre.match(block['lines'][0])
-        if m:
-            key, spaces, rest = m.groups()
-            # Turn ":foo: bar" into "foo   bar".
-            block['lines'][0] = '%s  %s%s' % (key, spaces, rest)
-            subindent = indent + (2 + len(key) + len(spaces)) * ' '
+        keywidth = block['keywidth']
+        key = block['key']
+
+        subindent = indent + _fieldwidth * ' '
+        if len(key) + 2 > _fieldwidth:
+            # key too large, use full line width
+            key = key.ljust(width)
+        elif keywidth + 2 < _fieldwidth:
+            # all keys are small, add only two spaces
+            key = key.ljust(keywidth + 2)
+            subindent = indent + (keywidth + 2) * ' '
+        else:
+            # mixed sizes, use fieldwidth for this one
+            key = key.ljust(_fieldwidth)
+        block['lines'][0] = key + block['lines'][0]
     elif block['type'] == 'option':
         m = _optionre.match(block['lines'][0])
-        if m:
-            option, arg, rest = m.groups()
-            subindent = indent + (len(option) + len(arg)) * ' '
+        option, arg, rest = m.groups()
+        subindent = indent + (len(option) + len(arg)) * ' '
 
     text = ' '.join(map(str.strip, block['lines']))
     return textwrap.fill(text, width=width,
@@ -255,6 +289,7 @@
     blocks = findliteralblocks(blocks)
     blocks = inlineliterals(blocks)
     blocks = splitparagraphs(blocks)
+    blocks = updatefieldlists(blocks)
     blocks = findsections(blocks)
     blocks = addmargins(blocks)
     return '\n'.join(formatblock(b, width) for b in blocks)
@@ -273,7 +308,9 @@
     text = open(sys.argv[1]).read()
     blocks = debug(findblocks, text)
     blocks = debug(findliteralblocks, blocks)
+    blocks = debug(inlineliterals, blocks)
     blocks = debug(splitparagraphs, blocks)
+    blocks = debug(updatefieldlists, blocks)
     blocks = debug(findsections, blocks)
     blocks = debug(addmargins, blocks)
     print '\n'.join(formatblock(b, 30) for b in blocks)
--- a/mercurial/patch.py	Wed Dec 23 13:09:11 2009 +0100
+++ b/mercurial/patch.py	Wed Dec 23 13:12:36 2009 +0100
@@ -239,6 +239,7 @@
         self.fp = fp
         self.buf = []
         self.textmode = textmode
+        self.eol = None
 
     def push(self, line):
         if line is not None:
@@ -250,6 +251,11 @@
             del self.buf[0]
             return l
         l = self.fp.readline()
+        if not self.eol:
+            if l.endswith('\r\n'):
+                self.eol = '\r\n'
+            elif l.endswith('\n'):
+                self.eol = '\n'
         if self.textmode and l.endswith('\r\n'):
             l = l[:-2] + '\n'
         return l
@@ -264,11 +270,13 @@
 # @@ -start,len +start,len @@ or @@ -start +start @@ if len is 1
 unidesc = re.compile('@@ -(\d+)(,(\d+))? \+(\d+)(,(\d+))? @@')
 contextdesc = re.compile('(---|\*\*\*) (\d+)(,(\d+))? (---|\*\*\*)')
+eolmodes = ['strict', 'crlf', 'lf', 'auto']
 
 class patchfile(object):
-    def __init__(self, ui, fname, opener, missing=False, eol=None):
+    def __init__(self, ui, fname, opener, missing=False, eolmode='strict'):
         self.fname = fname
-        self.eol = eol
+        self.eolmode = eolmode
+        self.eol = None
         self.opener = opener
         self.ui = ui
         self.lines = []
@@ -296,7 +304,10 @@
             return [os.readlink(fname)]
         fp = self.opener(fname, 'r')
         try:
-            return list(linereader(fp, self.eol is not None))
+            lr = linereader(fp, self.eolmode != 'strict')
+            lines = list(lr)
+            self.eol = lr.eol
+            return lines
         finally:
             fp.close()
 
@@ -310,10 +321,17 @@
         else:
             fp = self.opener(fname, 'w')
         try:
-            if self.eol and self.eol != '\n':
+            if self.eolmode == 'auto' and self.eol:
+                eol = self.eol
+            elif self.eolmode == 'crlf':
+                eol = '\r\n'
+            else:
+                eol = '\n'
+
+            if self.eolmode != 'strict' and eol != '\n':
                 for l in lines:
                     if l and l[-1] == '\n':
-                        l = l[:-1] + self.eol
+                        l = l[:-1] + eol
                     fp.write(l)
             else:
                 fp.writelines(lines)
@@ -939,7 +957,7 @@
     if hunknum == 0 and dopatch and not gitworkdone:
         raise NoHunks
 
-def applydiff(ui, fp, changed, strip=1, sourcefile=None, eol=None):
+def applydiff(ui, fp, changed, strip=1, sourcefile=None, eolmode='strict'):
     """
     Reads a patch from fp and tries to apply it.
 
@@ -947,16 +965,16 @@
     by the patch. Returns 0 for a clean patch, -1 if any rejects were
     found and 1 if there was any fuzz.
 
-    If 'eol' is None, the patch content and patched file are read in
-    binary mode. Otherwise, line endings are ignored when patching then
-    normalized to 'eol' (usually '\n' or \r\n').
+    If 'eolmode' is 'strict', the patch content and patched file are
+    read in binary mode. Otherwise, line endings are ignored when
+    patching then normalized according to 'eolmode'.
     """
     rejects = 0
     err = 0
     current_file = None
     gitpatches = None
     opener = util.opener(os.getcwd())
-    textmode = eol is not None
+    textmode = eolmode != 'strict'
 
     def closefile():
         if not current_file:
@@ -979,11 +997,11 @@
             afile, bfile, first_hunk = values
             try:
                 if sourcefile:
-                    current_file = patchfile(ui, sourcefile, opener, eol=eol)
+                    current_file = patchfile(ui, sourcefile, opener, eolmode=eolmode)
                 else:
                     current_file, missing = selectfile(afile, bfile, first_hunk,
                                             strip)
-                    current_file = patchfile(ui, current_file, opener, missing, eol)
+                    current_file = patchfile(ui, current_file, opener, missing, eolmode)
             except PatchError, err:
                 ui.warn(str(err) + '\n')
                 current_file, current_hunk = None, None
@@ -1104,10 +1122,9 @@
         files = {}
     if eolmode is None:
         eolmode = ui.config('patch', 'eol', 'strict')
-    try:
-        eol = {'strict': None, 'crlf': '\r\n', 'lf': '\n'}[eolmode.lower()]
-    except KeyError:
+    if eolmode.lower() not in eolmodes:
         raise util.Abort(_('Unsupported line endings type: %s') % eolmode)
+    eolmode = eolmode.lower()
 
     try:
         fp = open(patchobj, 'rb')
@@ -1117,7 +1134,7 @@
         curdir = os.getcwd()
         os.chdir(cwd)
     try:
-        ret = applydiff(ui, fp, files, strip=strip, eol=eol)
+        ret = applydiff(ui, fp, files, strip=strip, eolmode=eolmode)
     finally:
         if cwd:
             os.chdir(curdir)
--- a/mercurial/revlog.py	Wed Dec 23 13:09:11 2009 +0100
+++ b/mercurial/revlog.py	Wed Dec 23 13:12:36 2009 +0100
@@ -1140,10 +1140,19 @@
     def ancestor(self, a, b):
         """calculate the least common ancestor of nodes a and b"""
 
+        # fast path, check if it is a descendant
+        a, b = self.rev(a), self.rev(b)
+        start, end = sorted((a, b))
+        for i in self.descendants(start):
+            if i == end:
+                return self.node(start)
+            elif i > end:
+                break
+
         def parents(rev):
             return [p for p in self.parentrevs(rev) if p != nullrev]
 
-        c = ancestor.ancestor(self.rev(a), self.rev(b), parents)
+        c = ancestor.ancestor(a, b, parents)
         if c is None:
             return nullid
 
--- a/mercurial/subrepo.py	Wed Dec 23 13:09:11 2009 +0100
+++ b/mercurial/subrepo.py	Wed Dec 23 13:12:36 2009 +0100
@@ -149,6 +149,21 @@
         raise error.Abort('unknown subrepo source %s' % state[0])
     return hgsubrepo(ctx, path, state)
 
+# subrepo classes need to implement the following methods:
+# __init__(self, ctx, path, state)
+# dirty(self): returns true if the dirstate of the subrepo
+#   does not match current stored state
+# commit(self, text, user, date): commit the current changes
+#   to the subrepo with the given log message. Use given
+#   user and date if possible. Return the new state of the subrepo.
+# remove(self): remove the subrepo (should verify the dirstate
+#   is not dirty first)
+# get(self, state): run whatever commands are needed to put the
+#   subrepo into this state
+# merge(self, state): merge currently-saved state with the new state.
+# push(self, force): perform whatever action is analagous to 'hg push'
+#   This may be a no-op on some systems.
+
 class hgsubrepo(object):
     def __init__(self, ctx, path, state):
         self._path = path
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templatekw.py	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,249 @@
+# templatekw.py - common changeset template keywords
+#
+# Copyright 2005-2009 Matt Mackall <mpm@selenic.com>
+#
+# This software may be used and distributed according to the terms of the
+# GNU General Public License version 2, incorporated herein by reference.
+
+from node import hex
+import encoding, patch, util, error
+
+def showlist(templ, name, values, plural=None, **args):
+    '''expand set of values.
+    name is name of key in template map.
+    values is list of strings or dicts.
+    plural is plural of name, if not simply name + 's'.
+
+    expansion works like this, given name 'foo'.
+
+    if values is empty, expand 'no_foos'.
+
+    if 'foo' not in template map, return values as a string,
+    joined by space.
+
+    expand 'start_foos'.
+
+    for each value, expand 'foo'. if 'last_foo' in template
+    map, expand it instead of 'foo' for last key.
+
+    expand 'end_foos'.
+    '''
+    if plural: names = plural
+    else: names = name + 's'
+    if not values:
+        noname = 'no_' + names
+        if noname in templ:
+            yield templ(noname, **args)
+        return
+    if name not in templ:
+        if isinstance(values[0], str):
+            yield ' '.join(values)
+        else:
+            for v in values:
+                yield dict(v, **args)
+        return
+    startname = 'start_' + names
+    if startname in templ:
+        yield templ(startname, **args)
+    vargs = args.copy()
+    def one(v, tag=name):
+        try:
+            vargs.update(v)
+        except (AttributeError, ValueError):
+            try:
+                for a, b in v:
+                    vargs[a] = b
+            except ValueError:
+                vargs[name] = v
+        return templ(tag, **vargs)
+    lastname = 'last_' + name
+    if lastname in templ:
+        last = values.pop()
+    else:
+        last = None
+    for v in values:
+        yield one(v)
+    if last is not None:
+        yield one(last, tag=lastname)
+    endname = 'end_' + names
+    if endname in templ:
+        yield templ(endname, **args)
+
+def getfiles(repo, ctx, revcache):
+    if 'files' not in revcache:
+        revcache['files'] = repo.status(ctx.parents()[0].node(),
+                                        ctx.node())[:3]
+    return revcache['files']
+
+def getlatesttags(repo, ctx, cache):
+    '''return date, distance and name for the latest tag of rev'''
+
+    if 'latesttags' not in cache:
+        # Cache mapping from rev to a tuple with tag date, tag
+        # distance and tag name
+        cache['latesttags'] = {-1: (0, 0, 'null')}
+    latesttags = cache['latesttags']
+
+    rev = ctx.rev()
+    todo = [rev]
+    while todo:
+        rev = todo.pop()
+        if rev in latesttags:
+            continue
+        ctx = repo[rev]
+        tags = [t for t in ctx.tags() if repo.tagtype(t) == 'global']
+        if tags:
+            latesttags[rev] = ctx.date()[0], 0, ':'.join(sorted(tags))
+            continue
+        try:
+            # The tuples are laid out so the right one can be found by
+            # comparison.
+            pdate, pdist, ptag = max(
+                latesttags[p.rev()] for p in ctx.parents())
+        except KeyError:
+            # Cache miss - recurse
+            todo.append(rev)
+            todo.extend(p.rev() for p in ctx.parents())
+            continue
+        latesttags[rev] = pdate, pdist + 1, ptag
+    return latesttags[rev]
+
+def getrenamedfn(repo, endrev=None):
+    rcache = {}
+    if endrev is None:
+        endrev = len(repo)
+
+    def getrenamed(fn, rev):
+        '''looks up all renames for a file (up to endrev) the first
+        time the file is given. It indexes on the changerev and only
+        parses the manifest if linkrev != changerev.
+        Returns rename info for fn at changerev rev.'''
+        if fn not in rcache:
+            rcache[fn] = {}
+            fl = repo.file(fn)
+            for i in fl:
+                lr = fl.linkrev(i)
+                renamed = fl.renamed(fl.node(i))
+                rcache[fn][lr] = renamed
+                if lr >= endrev:
+                    break
+        if rev in rcache[fn]:
+            return rcache[fn][rev]
+
+        # If linkrev != rev (i.e. rev not found in rcache) fallback to
+        # filectx logic.
+        try:
+            return repo[rev][fn].renamed()
+        except error.LookupError:
+            return None
+
+    return getrenamed
+
+
+def showauthor(repo, ctx, templ, **args):
+    return ctx.user()
+
+def showbranches(repo, ctx, templ, **args):
+    branch = ctx.branch()
+    if branch != 'default':
+        branch = encoding.tolocal(branch)
+        return showlist(templ, 'branch', [branch], plural='branches', **args)
+
+def showdate(repo, ctx, templ, **args):
+    return ctx.date()
+
+def showdescription(repo, ctx, templ, **args):
+    return ctx.description().strip()
+
+def showdiffstat(repo, ctx, templ, **args):
+    diff = patch.diff(repo, ctx.parents()[0].node(), ctx.node())
+    files, adds, removes = 0, 0, 0
+    for i in patch.diffstatdata(util.iterlines(diff)):
+        files += 1
+        adds += i[1]
+        removes += i[2]
+    return '%s: +%s/-%s' % (files, adds, removes)
+
+def showextras(repo, ctx, templ, **args):
+    for key, value in sorted(ctx.extra().items()):
+        args = args.copy()
+        args.update(dict(key=key, value=value))
+        yield templ('extra', **args)
+
+def showfileadds(repo, ctx, templ, revcache, **args):
+    return showlist(templ, 'file_add', getfiles(repo, ctx, revcache)[1], **args)
+
+def showfilecopies(repo, ctx, templ, cache, revcache, **args):
+    copies = revcache.get('copies')
+    if copies is None:
+        if 'getrenamed' not in cache:
+            cache['getrenamed'] = getrenamedfn(repo)
+        copies = []
+        getrenamed = cache['getrenamed']
+        for fn in ctx.files():
+            rename = getrenamed(fn, ctx.rev())
+            if rename:
+                copies.append((fn, rename[0]))
+            
+    c = [{'name': x[0], 'source': x[1]} for x in copies]
+    return showlist(templ, 'file_copy', c, plural='file_copies', **args)
+
+# showfilecopiesswitch() displays file copies only if copy records are
+# provided before calling the templater, usually with a --copies
+# command line switch.
+def showfilecopiesswitch(repo, ctx, templ, cache, revcache, **args):
+    copies = revcache.get('copies') or []
+    c = [{'name': x[0], 'source': x[1]} for x in copies]
+    return showlist(templ, 'file_copy', c, plural='file_copies', **args)
+
+def showfiledels(repo, ctx, templ, revcache, **args):
+    return showlist(templ, 'file_del', getfiles(repo, ctx, revcache)[2], **args)
+
+def showfilemods(repo, ctx, templ, revcache, **args):
+    return showlist(templ, 'file_mod', getfiles(repo, ctx, revcache)[0], **args)
+
+def showfiles(repo, ctx, templ, **args):
+    return showlist(templ, 'file', ctx.files(), **args)
+
+def showlatesttag(repo, ctx, templ, cache, **args):
+    return getlatesttags(repo, ctx, cache)[2]
+
+def showlatesttagdistance(repo, ctx, templ, cache, **args):
+    return getlatesttags(repo, ctx, cache)[1]
+
+def showmanifest(repo, ctx, templ, **args):
+    args = args.copy()
+    args.update(dict(rev=repo.manifest.rev(ctx.changeset()[0]),
+                     node=hex(ctx.changeset()[0])))
+    return templ('manifest', **args)
+
+def shownode(repo, ctx, templ, **args):
+    return ctx.hex()
+
+def showrev(repo, ctx, templ, **args):
+    return ctx.rev()
+
+def showtags(repo, ctx, templ, **args):
+    return showlist(templ, 'tag', ctx.tags(), **args)
+
+keywords = {
+    'author': showauthor,
+    'branches': showbranches,
+    'date': showdate,
+    'desc': showdescription,
+    'diffstat': showdiffstat,
+    'extras': showextras,
+    'file_adds': showfileadds,
+    'file_copies': showfilecopies,
+    'file_copies_switch': showfilecopiesswitch,
+    'file_dels': showfiledels,
+    'file_mods': showfilemods,
+    'files': showfiles,
+    'latesttag': showlatesttag,
+    'latesttagdistance': showlatesttagdistance,
+    'manifest': showmanifest,
+    'node': shownode,
+    'rev': showrev,
+    'tags': showtags,
+}
+
--- a/mercurial/templater.py	Wed Dec 23 13:09:11 2009 +0100
+++ b/mercurial/templater.py	Wed Dec 23 13:12:36 2009 +0100
@@ -77,8 +77,14 @@
             raise SyntaxError(_("error expanding '%s%%%s'") % (key, format))
         lm = map.copy()
         for i in v:
-            lm.update(i)
-            yield self.process(format, lm)
+            if isinstance(i, dict): 
+                lm.update(i)
+                yield self.process(format, lm)
+            else:
+                # v is not an iterable of dicts, this happen when 'key'
+                # has been fully expanded already and format is useless.
+                # If so, return the expanded value.
+                yield i
 
     def _filter(self, expr, get, map):
         if expr not in self.cache:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/atom/changelog.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,10 @@
+{header}
+ <!-- Changelog -->
+ <id>{urlbase}{url}</id>
+ <link rel="self" href="{urlbase}{url}atom-log"/>
+ <link rel="alternate" href="{urlbase}{url}"/>
+ <title>{repo|escape} Changelog</title>
+ {latestentry%feedupdated}
+
+{entries%changelogentry}
+</feed>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/atom/changelogentry.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,16 @@
+ <entry>
+  <title>{desc|strip|firstline|strip|escape|nonempty}</title>
+  <id>{urlbase}{url}#changeset-{node}</id>
+  <link href="{urlbase}{url}rev/{node|short}"/>
+  <author>
+   <name>{author|person|escape}</name>
+   <email>{author|email|obfuscate}</email>
+  </author>
+  <updated>{date|rfc3339date}</updated>
+  <published>{date|rfc3339date}</published>
+  <content type="xhtml">
+   <div xmlns="http://www.w3.org/1999/xhtml">
+    <pre xml:space="preserve">{desc|escape|nonempty}</pre>
+   </div>
+  </content>
+ </entry>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/atom/error.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,17 @@
+{header}
+ <!-- Error -->
+ <id>{urlbase}{url}</id>
+ <link rel="self" href="{urlbase}{url}atom-log"/>
+ <link rel="alternate" href="{urlbase}{url}"/>
+ <title>Error</title>
+ <updated>1970-01-01T00:00:00+00:00</updated>
+ <entry>
+  <title>Error</title>
+  <id>http://mercurial.selenic.com/#error</id>
+  <author>
+    <name>mercurial</name>
+  </author>
+  <updated>1970-01-01T00:00:00+00:00</updated>
+  <content type="text">{error|escape}</content>
+ </entry>
+</feed>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/atom/filelog.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,8 @@
+{header}
+ <id>{urlbase}{url}atom-log/tip/{file|escape}</id>
+ <link rel="self" href="{urlbase}{url}atom-log/tip/{file|urlescape}"/>
+ <title>{repo|escape}: {file|escape} history</title>
+ {latestentry%feedupdated}
+
+{entries%changelogentry}
+</feed>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/atom/header.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="{encoding}"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/atom/map	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,11 @@
+default = 'changelog'
+feedupdated = '<updated>{date|rfc3339date}</updated>'
+mimetype = 'application/atom+xml; charset={encoding}'
+header = header.tmpl
+changelog = changelog.tmpl
+changelogentry = changelogentry.tmpl
+filelog = filelog.tmpl
+filelogentry = filelogentry.tmpl
+tags = tags.tmpl
+tagentry = tagentry.tmpl
+error = error.tmpl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/atom/tagentry.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,8 @@
+ <entry>
+  <title>{tag|escape}</title>
+  <link rel="alternate" href="{urlbase}{url}rev/{node|short}"/>
+  <id>{urlbase}{url}#tag-{node}</id>
+  <updated>{date|rfc3339date}</updated>
+  <published>{date|rfc3339date}</published>
+  <content type="text">{tag|strip|escape}</content>
+ </entry>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/atom/tags.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,11 @@
+{header}
+ <id>{urlbase}{url}</id>
+ <link rel="self" href="{urlbase}{url}atom-tags"/>
+ <link rel="alternate" href="{urlbase}{url}tags"/>
+ <title>{repo|escape}: tags</title>
+ <summary>{repo|escape} tag history</summary>
+ <author><name>Mercurial SCM</name></author>
+ {latestentry%feedupdated}
+
+{entriesnotip%tagentry}
+</feed>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/coal/header.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,6 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
+<head>
+<link rel="icon" href="{staticurl}hgicon.png" type="image/png" />
+<meta name="robots" content="index, nofollow" />
+<link rel="stylesheet" href="{staticurl}style-coal.css" type="text/css" />
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/coal/map	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,191 @@
+default = 'shortlog'
+
+mimetype = 'text/html; charset={encoding}'
+header = header.tmpl
+footer = ../paper/footer.tmpl
+search = ../paper/search.tmpl
+
+changelog = ../paper/shortlog.tmpl
+shortlog = ../paper/shortlog.tmpl
+shortlogentry = ../paper/shortlogentry.tmpl
+graph = ../paper/graph.tmpl
+
+naventry = '<a href="{url}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
+navshortentry = '<a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
+navgraphentry = '<a href="{url}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
+filenaventry = '<a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{label|escape}</a> '
+filedifflink = '<a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
+filenodelink = '<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
+filenolink = '{file|escape} '
+fileellipses = '...'
+changelogentry = ../paper/shortlogentry.tmpl
+searchentry = ../paper/shortlogentry.tmpl
+changeset = ../paper/changeset.tmpl
+manifest = ../paper/manifest.tmpl
+
+direntry = '
+  <tr class="fileline parity{parity}">
+    <td class="name">
+      <a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">
+        <img src="{staticurl}coal-folder.png" alt="dir."/> {basename|escape}/
+      </a>
+      <a href="{url}file/{node|short}{path|urlescape}/{emptydirs|urlescape}{sessionvars%urlparameter}">
+        {emptydirs|escape}
+      </a>
+    </td>
+    <td class="size"></td>
+    <td class="permissions">drwxr-xr-x</td>
+  </tr>'
+
+fileentry = '
+  <tr class="fileline parity{parity}">
+    <td class="filename">
+      <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
+        <img src="{staticurl}coal-file.png" alt="file"/> {basename|escape}
+      </a>
+    </td>
+    <td class="size">{size}</td>
+    <td class="permissions">{permissions|permissions}</td>
+  </tr>'
+
+filerevision = ../paper/filerevision.tmpl
+fileannotate = ../paper/fileannotate.tmpl
+filediff = ../paper/filediff.tmpl
+filelog = ../paper/filelog.tmpl
+fileline = '
+  <div class="parity{parity} source"><a href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</div>'
+filelogentry = ../paper/filelogentry.tmpl
+
+annotateline = '
+  <tr class="parity{parity}">
+    <td class="annotate">
+      <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#{targetline}"
+         title="{node|short}: {desc|escape|firstline}">{author|user}@{rev}</a>
+    </td>
+    <td class="source"><a href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</td>
+  </tr>'
+
+diffblock = '<div class="source bottomline parity{parity}"><pre>{lines}</pre></div>'
+difflineplus = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> <span class="plusline">{line|escape}</span>'
+difflineminus = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> <span class="minusline">{line|escape}</span>'
+difflineat = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> <span class="atline">{line|escape}</span>'
+diffline = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}'
+
+changelogparent = '
+  <tr>
+    <th class="parent">parent {rev}:</th>
+    <td class="parent"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
+  </tr>'
+
+changesetparent = '<a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a> '
+
+filerevparent = '<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{rename%filerename}{node|short}</a> '
+filerevchild = '<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a> '
+
+filerename = '{file|escape}@'
+filelogrename = '
+  <tr>
+    <th>base:</th>
+    <td>
+      <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
+        {file|escape}@{node|short}
+      </a>
+    </td>
+  </tr>'
+fileannotateparent = '
+  <tr>
+    <td class="metatag">parent:</td>
+    <td>
+      <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
+        {rename%filerename}{node|short}
+      </a>
+    </td>
+  </tr>'
+changesetchild = ' <a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>'
+changelogchild = '
+  <tr>
+    <th class="child">child</th>
+    <td class="child">
+      <a href="{url}rev/{node|short}{sessionvars%urlparameter}">
+        {node|short}
+      </a>
+    </td>
+  </tr>'
+fileannotatechild = '
+  <tr>
+    <td class="metatag">child:</td>
+    <td>
+      <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
+        {node|short}
+      </a>
+    </td>
+  </tr>'
+tags = ../paper/tags.tmpl
+tagentry = '
+  <tr class="tagEntry parity{parity}">
+    <td>
+      <a href="{url}rev/{node|short}{sessionvars%urlparameter}">
+        {tag|escape}
+      </a>
+    </td>
+    <td class="node">
+      {node|short}
+    </td>
+  </tr>'
+branches = ../paper/branches.tmpl
+branchentry = '
+  <tr class="tagEntry parity{parity}">
+    <td>
+      <a href="{url}shortlog/{node|short}{sessionvars%urlparameter}" class="{status}">
+        {branch|escape}
+      </a>
+    </td>
+    <td class="node">
+      {node|short}
+    </td>
+  </tr>'
+changelogtag = '<span class="tag">{name|escape}</span> '
+changesettag = '<span class="tag">{tag|escape}</span> '
+changelogbranchhead = '<span class="branchhead">{name|escape}</span> '
+changelogbranchname = '<span class="branchname">{name|escape}</span> ' 
+
+filediffparent = '
+  <tr>
+    <th class="parent">parent {rev}:</th>
+    <td class="parent"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
+  </tr>'
+filelogparent = '
+  <tr>
+    <th>parent {rev}:</th>
+    <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
+  </tr>'
+filediffchild = '
+  <tr>
+    <th class="child">child {rev}:</th>
+    <td class="child"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
+  </td>
+  </tr>'
+filelogchild = '
+  <tr>
+    <th>child {rev}:</th>
+    <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
+  </tr>'
+
+indexentry = '
+  <tr class="parity{parity}">
+    <td><a href="{url}{sessionvars%urlparameter}">{name|escape}</a></td>
+    <td>{description}</td>
+    <td>{contact|obfuscate}</td>
+    <td class="age">{lastchange|age} ago</td>
+    <td class="indexlinks">{archives%indexarchiveentry}</td>
+  </tr>\n'
+indexarchiveentry = '<a href="{url}archive/{node|short}{extension|urlescape}">&nbsp;&darr;{type|escape}</a>'
+index = ../paper/index.tmpl
+archiveentry = '
+  <li>
+    <a href="{url}archive/{node|short}{extension|urlescape}">{type|escape}</a>
+  </li>'
+notfound = ../paper/notfound.tmpl
+error = ../paper/error.tmpl
+urlparameter = '{separator}{name}={value|urlescape}'
+hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/gitweb/branches.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,30 @@
+{header}
+<title>{repo|escape}: Branches</title>
+<link rel="alternate" type="application/atom+xml"
+   href="{url}atom-tags" title="Atom feed for {repo|escape}"/>
+<link rel="alternate" type="application/rss+xml"
+   href="{url}rss-tags" title="RSS feed for {repo|escape}"/>
+</head>
+<body>
+
+<div class="page_header">
+<a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / branches
+</div>
+
+<div class="page_nav">
+<a href="{url}summary{sessionvars%urlparameter}">summary</a> |
+<a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
+<a href="{url}log{sessionvars%urlparameter}">changelog</a> |
+<a href="{url}graph{sessionvars%urlparameter}">graph</a> |
+<a href="{url}tags{sessionvars%urlparameter}">tags</a> |
+branches |
+<a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
+<br/>
+</div>
+
+<div class="title">&nbsp;</div>
+<table cellspacing="0">
+{entries%branchentry}
+</table>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/gitweb/changelog.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,39 @@
+{header}
+<title>{repo|escape}: Changelog</title>
+<link rel="alternate" type="application/atom+xml"
+   href="{url}atom-log" title="Atom feed for {repo|escape}"/>
+<link rel="alternate" type="application/rss+xml"
+   href="{url}rss-log" title="RSS feed for {repo|escape}"/>
+</head>
+<body>
+
+<div class="page_header">
+<a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / changelog
+</div>
+
+<form action="{url}log">
+{sessionvars%hiddenformentry}
+<div class="search">
+<input type="text" name="rev"  />
+</div>
+</form>
+
+<div class="page_nav">
+<a href="{url}summary{sessionvars%urlparameter}">summary</a> |
+<a href="{url}shortlog/{rev}{sessionvars%urlparameter}">shortlog</a> |
+changelog |
+<a href="{url}graph{sessionvars%urlparameter}">graph</a> |
+<a href="{url}tags{sessionvars%urlparameter}">tags</a> |
+<a href="{url}branches{sessionvars%urlparameter}">branches</a> |
+<a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry}
+<br/>
+{changenav%naventry}<br/>
+</div>
+
+{entries%changelogentry}
+
+<div class="page_nav">
+{changenav%naventry}<br/>
+</div>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/gitweb/changelogentry.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,14 @@
+<div>
+<a class="title" href="{url}rev/{node|short}{sessionvars%urlparameter}"><span class="age">{date|age}</span>{desc|strip|firstline|escape|nonempty}<span class="logtags"> {inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span></a>
+</div>
+<div class="title_text">
+<div class="log_link">
+<a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a><br/>
+</div>
+<i>{author|obfuscate} [{date|rfc822date}] rev {rev}</i><br/>
+</div>
+<div class="log_body">
+{desc|strip|escape|addbreaks|nonempty}
+<br/>
+<br/>
+</div>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/gitweb/changeset.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,50 @@
+{header}
+<title>{repo|escape}: changeset {rev}:{node|short}</title>
+<link rel="alternate" type="application/atom+xml"
+   href="{url}atom-log" title="Atom feed for {repo|escape}"/>
+<link rel="alternate" type="application/rss+xml"
+   href="{url}rss-log" title="RSS feed for {repo|escape}"/>
+</head>
+<body>
+
+<div class="page_header">
+<a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / changeset
+</div>
+
+<div class="page_nav">
+<a href="{url}summary{sessionvars%urlparameter}">summary</a> |
+<a href="{url}shortlog/{rev}{sessionvars%urlparameter}">shortlog</a> |
+<a href="{url}log/{rev}{sessionvars%urlparameter}">changelog</a> |
+<a href="{url}graph{sessionvars%urlparameter}">graph</a> |
+<a href="{url}tags{sessionvars%urlparameter}">tags</a> |
+<a href="{url}branches{sessionvars%urlparameter}">branches</a> |
+<a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a> |
+changeset |
+<a href="{url}raw-rev/{node|short}">raw</a> {archives%archiveentry}<br/>
+</div>
+
+<div>
+<a class="title" href="{url}raw-rev/{node|short}">{desc|strip|escape|firstline|nonempty} <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span></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})</td></tr>
+{branch%changesetbranch}
+<tr><td>changeset {rev}</td><td style="font-family:monospace">{node|short}</td></tr>
+{parent%changesetparent}
+{child%changesetchild}
+</table></div>
+
+<div class="page_body">
+{desc|strip|escape|addbreaks|nonempty}
+</div>
+<div class="list_head"></div>
+<div class="title_text">
+<table cellspacing="0">
+{files}
+</table></div>
+
+<div class="page_body">{diff}</div>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/gitweb/error.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,25 @@
+{header}
+<title>{repo|escape}: Error</title>
+<link rel="alternate" type="application/atom+xml"
+   href="{url}atom-log" title="Atom feed for {repo|escape}"/>
+<link rel="alternate" type="application/rss+xml"
+   href="{url}rss-log" title="RSS feed for {repo|escape}"/>
+</head>
+<body>
+
+<div class="page_header">
+<a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / error
+</div>
+
+<div class="page_nav">
+<a href="{url}summary{sessionvars%urlparameter}">summary</a> | <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> | <a href="{url}log{sessionvars%urlparameter}">changelog</a> | <a href="{url}tags{sessionvars%urlparameter}">tags</a> | <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a><br/>
+</div>
+
+<div class="page_body">
+<br/>
+<i>An error occurred while processing your request</i><br/>
+<br/>
+{error|escape}
+</div>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/gitweb/fileannotate.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,62 @@
+{header}
+<title>{repo|escape}: {file|escape}@{node|short} (annotated)</title>
+<link rel="alternate" type="application/atom+xml"
+   href="{url}atom-log" title="Atom feed for {repo|escape}"/>
+<link rel="alternate" type="application/rss+xml"
+   href="{url}rss-log" title="RSS feed for {repo|escape}"/>
+</head>
+<body>
+
+<div class="page_header">
+<a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / annotate
+</div>
+
+<div class="page_nav">
+<a href="{url}summary{sessionvars%urlparameter}">summary</a> |
+<a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
+<a href="{url}log{sessionvars%urlparameter}">changelog</a> |
+<a href="{url}graph{sessionvars%urlparameter}">graph</a> |
+<a href="{url}tags{sessionvars%urlparameter}">tags</a> |
+<a href="{url}branches{sessionvars%urlparameter}">branches</a> |
+<a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a> |
+<a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
+<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
+<a href="{url}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a> |
+<a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
+annotate |
+<a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
+<a href="{url}raw-annotate/{node|short}/{file|urlescape}">raw</a><br/>
+</div>
+
+<div class="title">{file|escape}</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})</td></tr>
+{branch%filerevbranch}
+<tr>
+ <td>changeset {rev}</td>
+ <td style="font-family:monospace"><a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td></tr>
+{parent%fileannotateparent}
+{child%fileannotatechild}
+<tr>
+ <td>permissions</td>
+ <td style="font-family:monospace">{permissions|permissions}</td></tr>
+</table>
+</div>
+
+<div class="page_path">
+{desc|strip|escape|addbreaks|nonempty}
+</div>
+<div class="page_body">
+<table>
+{annotate%annotateline}
+</table>
+</div>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/gitweb/filediff.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,48 @@
+{header}
+<title>{repo|escape}: diff {file|escape}</title>
+<link rel="alternate" type="application/atom+xml"
+   href="{url}atom-log" title="Atom feed for {repo|escape}"/>
+<link rel="alternate" type="application/rss+xml"
+   href="{url}rss-log" title="RSS feed for {repo|escape}"/>
+</head>
+<body>
+
+<div class="page_header">
+<a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / diff
+</div>
+
+<div class="page_nav">
+<a href="{url}summary{sessionvars%urlparameter}">summary</a> |
+<a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
+<a href="{url}log{sessionvars%urlparameter}">changelog</a> |
+<a href="{url}graph{sessionvars%urlparameter}">graph</a> |
+<a href="{url}tags{sessionvars%urlparameter}">tags</a> |
+<a href="{url}branches{sessionvars%urlparameter}">branches</a> |
+<a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a> |
+<a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
+<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
+<a href="{url}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a> |
+<a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
+<a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
+diff |
+<a href="{url}raw-diff/{node|short}/{file|urlescape}">raw</a><br/>
+</div>
+
+<div class="title">{file|escape}</div>
+
+<table>
+{branch%filerevbranch}
+<tr>
+ <td>changeset {rev}</td>
+ <td style="font-family:monospace"><a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td></tr>
+{parent%filediffparent}
+{child%filediffchild}
+</table>
+
+<div class="list_head"></div>
+
+<div class="page_body">
+{diff}
+</div>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/gitweb/filelog.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,40 @@
+{header}
+<title>{repo|escape}: File revisions</title>
+<link rel="alternate" type="application/atom+xml"
+   href="{url}atom-log" title="Atom feed for {repo|escape}"/>
+<link rel="alternate" type="application/rss+xml"
+   href="{url}rss-log" title="RSS feed for {repo|escape}"/>
+</head>
+<body>
+
+<div class="page_header">
+<a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / file revisions
+</div>
+
+<div class="page_nav">
+<a href="{url}summary{sessionvars%urlparameter}">summary</a> |
+<a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
+<a href="{url}log{sessionvars%urlparameter}">changelog</a> |
+<a href="{url}graph{sessionvars%urlparameter}">graph</a> |
+<a href="{url}tags{sessionvars%urlparameter}">tags</a> |
+<a href="{url}branches{sessionvars%urlparameter}">branches</a> |
+<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
+revisions |
+<a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
+<a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
+<a href="{url}rss-log/{node|short}/{file|urlescape}">rss</a>
+<br/>
+{nav%filenaventry}
+</div>
+
+<div class="title" >{file|urlescape}</div>
+
+<table>
+{entries%filelogentry}
+</table>
+
+<div class="page_nav">
+{nav%filenaventry}
+</div>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/gitweb/filerevision.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,61 @@
+{header}
+<title>{repo|escape}: {file|escape}@{node|short}</title>
+<link rel="alternate" type="application/atom+xml"
+   href="{url}atom-log" title="Atom feed for {repo|escape}"/>
+<link rel="alternate" type="application/rss+xml"
+   href="{url}rss-log" title="RSS feed for {repo|escape}"/>
+</head>
+<body>
+
+<div class="page_header">
+<a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / file revision
+</div>
+
+<div class="page_nav">
+<a href="{url}summary{sessionvars%urlparameter}">summary</a> |
+<a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
+<a href="{url}log{sessionvars%urlparameter}">changelog</a> |
+<a href="{url}graph{sessionvars%urlparameter}">graph</a> |
+<a href="{url}tags{sessionvars%urlparameter}">tags</a> |
+<a href="{url}branches{sessionvars%urlparameter}">branches</a> |
+<a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a> |
+<a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
+file |
+<a href="{url}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a> |
+<a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
+<a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
+<a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
+<a href="{url}raw-file/{node|short}/{file|urlescape}">raw</a><br/>
+</div>
+
+<div class="title">{file|escape}</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})</td></tr>
+{branch%filerevbranch}
+<tr>
+ <td>changeset {rev}</td>
+ <td style="font-family:monospace"><a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td></tr>
+{parent%filerevparent}
+{child%filerevchild}
+<tr>
+ <td>permissions</td>
+ <td style="font-family:monospace">{permissions|permissions}</td></tr>
+</table>
+</div>
+
+<div class="page_path">
+{desc|strip|escape|addbreaks|nonempty}
+</div>
+
+<div class="page_body">
+{text%fileline}
+</div>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/gitweb/footer.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,11 @@
+<div class="page_footer">
+<div class="page_footer_text">{repo|escape}</div>
+<div class="rss_logo">
+<a href="{url}rss-log">RSS</a>
+<a href="{url}atom-log">Atom</a>
+</div>
+<br />
+{motd}
+</div>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/gitweb/graph.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,121 @@
+{header}
+<title>{repo|escape}: Graph</title>
+<link rel="alternate" type="application/atom+xml"
+   href="{url}atom-log" title="Atom feed for {repo|escape}"/>
+<link rel="alternate" type="application/rss+xml"
+   href="{url}rss-log" title="RSS feed for {repo|escape}"/>
+<!--[if IE]><script type="text/javascript" src="{staticurl}excanvas.js"></script><![endif]-->
+</head>
+<body>
+
+<div class="page_header">
+<a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / graph
+</div>
+
+<form action="{url}log">
+{sessionvars%hiddenformentry}
+<div class="search">
+<input type="text" name="rev"  />
+</div>
+</form>
+<div class="page_nav">
+<a href="{url}summary{sessionvars%urlparameter}">summary</a> |
+<a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
+<a href="{url}log/{rev}{sessionvars%urlparameter}">changelog</a> |
+graph |
+<a href="{url}tags{sessionvars%urlparameter}">tags</a> |
+<a href="{url}branches{sessionvars%urlparameter}">branches</a> |
+<a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
+<br/>
+<a href="{url}graph/{rev}{lessvars%urlparameter}">less</a>
+<a href="{url}graph/{rev}{morevars%urlparameter}">more</a>
+| {changenav%navgraphentry}<br/>
+</div>
+
+<div class="title">&nbsp;</div>
+
+<noscript>The revision graph only works with JavaScript-enabled browsers.</noscript>
+
+<div id="wrapper">
+<ul id="nodebgs"></ul>
+<canvas id="graph" width="224" height="{canvasheight}"></canvas>
+<ul id="graphnodes"></ul>
+</div>
+
+<script type="text/javascript" src="{staticurl}graph.js"></script>
+<script>
+<!-- hide script content
+
+var data = {jsdata|json};
+var graph = new Graph();
+graph.scale({bg_height});
+
+graph.edge = function(x0, y0, x1, y1, color) {
+	
+	this.setColor(color, 0.0, 0.65);
+	this.ctx.beginPath();
+	this.ctx.moveTo(x0, y0);
+	this.ctx.lineTo(x1, y1);
+	this.ctx.stroke();
+	
+}
+
+var revlink = '<li style="_STYLE"><span class="desc">';
+revlink += '<a class="list" href="{url}rev/_NODEID{sessionvars%urlparameter}" title="_NODEID"><b>_DESC</b></a>';
+revlink += '</span> _TAGS';
+revlink += '<span class="info">_DATE ago, by _USER</span></li>';
+
+graph.vertex = function(x, y, color, parity, cur) {
+	
+	this.ctx.beginPath();
+	color = this.setColor(color, 0.25, 0.75);
+	this.ctx.arc(x, y, radius, 0, Math.PI * 2, true);
+	this.ctx.fill();
+	
+	var bg = '<li class="bg parity' + parity + '"></li>';
+	var left = (this.columns + 1) * this.bg_height;
+	var nstyle = 'padding-left: ' + left + 'px;';
+	var item = revlink.replace(/_STYLE/, nstyle);
+	item = item.replace(/_PARITY/, 'parity' + parity);
+	item = item.replace(/_NODEID/, cur[0]);
+	item = item.replace(/_NODEID/, cur[0]);
+	item = item.replace(/_DESC/, cur[3]);
+	item = item.replace(/_USER/, cur[4]);
+	item = item.replace(/_DATE/, cur[5]);
+	
+	var tagspan = '';
+	if (cur[7].length || (cur[6][0] != 'default' || cur[6][1])) {
+		tagspan = '<span class="logtags">';
+		if (cur[6][1]) {
+			tagspan += '<span class="branchtag" title="' + cur[6][0] + '">';
+			tagspan += cur[6][0] + '</span> ';
+		} else if (!cur[6][1] && cur[6][0] != 'default') {
+			tagspan += '<span class="inbranchtag" title="' + cur[6][0] + '">';
+			tagspan += cur[6][0] + '</span> ';
+		}
+		if (cur[7].length) {
+			for (var t in cur[7]) {
+				var tag = cur[7][t];
+				tagspan += '<span class="tagtag">' + tag + '</span> ';
+			}
+		}
+		tagspan += '</span>';
+	}
+	
+	item = item.replace(/_TAGS/, tagspan);
+	return [bg, item];
+	
+}
+
+graph.render(data);
+
+// stop hiding script -->
+</script>
+
+<div class="page_nav">
+<a href="{url}graph/{rev}{lessvars%urlparameter}">less</a>
+<a href="{url}graph/{rev}{morevars%urlparameter}">more</a>
+| {changenav%navgraphentry}
+</div>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/gitweb/header.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="{encoding}"?>
+<!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="{staticurl}hgicon.png" type="image/png" />
+<meta name="robots" content="index, nofollow"/>
+<link rel="stylesheet" href="{staticurl}style-gitweb.css" type="text/css" />
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/gitweb/index.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,26 @@
+{header}
+<title>Mercurial repositories index</title>
+</head>
+<body>
+
+<div class="page_header">
+    <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a>
+    Repositories list
+</div>
+
+<table cellspacing="0">
+    <tr>
+        <td><a href="?sort={sort_name}">Name</a></td>
+        <td><a href="?sort={sort_description}">Description</a></td>
+        <td><a href="?sort={sort_contact}">Contact</a></td>
+        <td><a href="?sort={sort_lastchange}">Last change</a></td>
+        <td>&nbsp;</td>
+        <td>&nbsp;</td>
+    </tr>
+    {entries%indexentry}
+</table>
+<div class="page_footer">
+{motd}
+</div>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/gitweb/manifest.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,38 @@
+{header}
+<title>{repo|escape}: files</title>
+<link rel="alternate" type="application/atom+xml"
+   href="{url}atom-log" title="Atom feed for {repo|escape}"/>
+<link rel="alternate" type="application/rss+xml"
+   href="{url}rss-log" title="RSS feed for {repo|escape}"/>
+</head>
+<body>
+
+<div class="page_header">
+<a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / files
+</div>
+
+<div class="page_nav">
+<a href="{url}summary{sessionvars%urlparameter}">summary</a> |
+<a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
+<a href="{url}log{sessionvars%urlparameter}">changelog</a> |
+<a href="{url}graph{sessionvars%urlparameter}">graph</a> |
+<a href="{url}tags{sessionvars%urlparameter}">tags</a> |
+<a href="{url}branches{sessionvars%urlparameter}">branches</a> |
+files |
+<a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> {archives%archiveentry}<br/>
+</div>
+
+<div class="title">{path|escape} <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span></div>
+<table cellspacing="0">
+<tr class="parity{upparity}">
+<td style="font-family:monospace">drwxr-xr-x</td>
+<td style="font-family:monospace"></td>
+<td style="font-family:monospace"></td>
+<td><a href="{url}file/{node|short}{up|urlescape}{sessionvars%urlparameter}">[up]</a></td>
+<td class="link">&nbsp;</td>
+</tr>
+{dentries%direntry}
+{fentries%fileentry}
+</table>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/gitweb/map	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,248 @@
+default = 'summary'
+mimetype = 'text/html; charset={encoding}'
+header = header.tmpl
+footer = footer.tmpl
+search = search.tmpl
+changelog = changelog.tmpl
+summary = summary.tmpl
+error = error.tmpl
+notfound = notfound.tmpl
+naventry = '<a href="{url}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
+navshortentry = '<a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
+navgraphentry = '<a href="{url}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
+filenaventry = '<a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{label|escape}</a> '
+filedifflink = '<a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
+filenodelink = '
+  <tr class="parity{parity}">
+    <td><a class="list" href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a></td>
+    <td></td>
+    <td class="link">
+      <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
+      <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
+      <a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
+      <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
+    </td>
+  </tr>'
+filenolink = '
+  <tr class="parity{parity}">
+    <td><a class="list" href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a></td>
+    <td></td>
+    <td class="link">
+      file |
+      annotate |
+      <a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
+      <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
+    </td>
+  </tr>'
+fileellipses = '...'
+changelogentry = changelogentry.tmpl
+searchentry = changelogentry.tmpl
+changeset = changeset.tmpl
+manifest = manifest.tmpl
+direntry = '
+  <tr class="parity{parity}">
+    <td style="font-family:monospace">drwxr-xr-x</td>
+    <td style="font-family:monospace"></td>
+    <td style="font-family:monospace"></td>
+    <td>
+      <a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">{basename|escape}</a>
+      <a href="{url}file/{node|short}{path|urlescape}/{emptydirs|urlescape}{sessionvars%urlparameter}">{emptydirs|escape}</a>
+    </td>
+    <td class="link">
+      <a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a>
+    </td>
+  </tr>'
+fileentry = '
+  <tr class="parity{parity}">
+    <td style="font-family:monospace">{permissions|permissions}</td>
+    <td style="font-family:monospace" align=right>{date|isodate}</td>
+    <td style="font-family:monospace" align=right>{size}</td>
+    <td class="list">
+      <a class="list" href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{basename|escape}</a>
+    </td>
+    <td class="link">
+      <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
+      <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
+      <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
+    </td>
+  </tr>'
+filerevision = filerevision.tmpl
+fileannotate = fileannotate.tmpl
+filediff = filediff.tmpl
+filelog = filelog.tmpl
+fileline = '
+  <div style="font-family:monospace" class="parity{parity}">
+    <pre><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {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}{sessionvars%urlparameter}#l{targetline}"
+         title="{node|short}: {desc|escape|firstline}">{author|user}@{rev}</a>
+    </td>
+    <td><pre><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a></pre></td>
+    <td><pre>{line|escape}</pre></td>
+  </tr>'
+difflineplus = '<span style="color:#008800;"><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
+difflineminus = '<span style="color:#cc0000;"><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
+difflineat = '<span style="color:#990099;"><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
+diffline = '<span><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
+changelogparent = '
+  <tr>
+    <th class="parent">parent {rev}:</th>
+    <td class="parent">
+      <a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
+    </td>
+  </tr>'
+changesetbranch = '<tr><td>branch</td><td>{name}</td></tr>'
+changesetparent = '
+  <tr>
+    <td>parent {rev}</td>
+    <td style="font-family:monospace">
+      <a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
+    </td>
+  </tr>'
+filerevbranch = '<tr><td>branch</td><td>{name}</td></tr>'
+filerevparent = '
+  <tr>
+    <td>parent {rev}</td>
+    <td style="font-family:monospace">
+      <a class="list" href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
+        {rename%filerename}{node|short}
+      </a>
+    </td>
+  </tr>'
+filerename = '{file|escape}@'
+filelogrename = '| <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">base</a>'
+fileannotateparent = '
+  <tr>
+    <td>parent {rev}</td>
+    <td style="font-family:monospace">
+      <a class="list" href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
+        {rename%filerename}{node|short}
+      </a>
+    </td>
+  </tr>'
+changelogchild = '
+  <tr>
+    <th class="child">child {rev}:</th>
+    <td class="child"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
+  </tr>'
+changesetchild = '
+  <tr>
+    <td>child {rev}</td>
+    <td style="font-family:monospace">
+      <a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
+    </td>
+  </tr>'
+filerevchild = '
+  <tr>
+    <td>child {rev}</td>
+    <td style="font-family:monospace">
+      <a class="list" href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
+    </tr>'
+fileannotatechild = '
+  <tr>
+    <td>child {rev}</td>
+    <td style="font-family:monospace">
+      <a class="list" href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
+    </tr>'
+tags = tags.tmpl
+tagentry = '
+  <tr class="parity{parity}">
+    <td class="age"><i>{date|age}</i></td>
+    <td><a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}"><b>{tag|escape}</b></a></td>
+    <td class="link">
+      <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
+      <a href="{url}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
+      <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
+    </td>
+  </tr>'
+branches = branches.tmpl
+branchentry = '
+  <tr class="parity{parity}">
+    <td class="age"><i>{date|age}</i></td>
+    <td><a class="list" href="{url}shortlog/{node|short}{sessionvars%urlparameter}"><b>{node|short}</b></a></td>
+    <td class="{status}">{branch|escape}</td>
+    <td class="link">
+      <a href="{url}changeset/{node|short}{sessionvars%urlparameter}">changeset</a> |
+      <a href="{url}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
+      <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
+    </td>
+  </tr>'
+diffblock = '<pre>{lines}</pre>'
+filediffparent = '
+  <tr>
+    <td>parent {rev}</td>
+    <td style="font-family:monospace">
+      <a class="list" href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
+        {node|short}
+      </a>
+    </td>
+  </tr>'
+filelogparent = '
+  <tr>
+    <td align="right">parent {rev}:&nbsp;</td>
+    <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
+  </tr>'
+filediffchild = '
+  <tr>
+    <td>child {rev}</td>
+    <td style="font-family:monospace">
+      <a class="list" href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a>
+    </td>
+  </tr>'
+filelogchild = '
+  <tr>
+    <td align="right">child {rev}:&nbsp;</td>
+    <td><a href="{url}file{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
+  </tr>'
+shortlog = shortlog.tmpl
+graph = graph.tmpl
+tagtag = '<span class="tagtag" title="{name}">{name}</span> '
+branchtag = '<span class="branchtag" title="{name}">{name}</span> '
+inbranchtag = '<span class="inbranchtag" title="{name}">{name}</span> '
+shortlogentry = '
+  <tr class="parity{parity}">
+    <td class="age"><i>{date|age}</i></td>
+    <td><i>{author|person}</i></td>
+    <td>
+      <a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">
+        <b>{desc|strip|firstline|escape|nonempty}</b>
+        <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span>
+      </a>
+    </td>
+    <td class="link" nowrap>
+      <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
+      <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
+    </td>
+  </tr>'
+filelogentry = '
+  <tr class="parity{parity}">
+    <td class="age"><i>{date|age}</i></td>
+    <td>
+      <a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">
+        <b>{desc|strip|firstline|escape|nonempty}</b>
+      </a>
+    </td>
+    <td class="link">
+      <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a>&nbsp;|&nbsp;<a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a>&nbsp;|&nbsp;<a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">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}{sessionvars%urlparameter}">
+        <b>{name|escape}</b>
+      </a>
+    </td>
+    <td>{description}</td>
+    <td>{contact|obfuscate}</td>
+    <td class="age">{lastchange|age}</td>
+    <td class="indexlinks">{archives%indexarchiveentry}</td>
+    <td><div class="rss_logo"><a href="{url}rss-log">RSS</a> <a href="{url}atom-log">Atom</a></div></td>
+  </tr>\n'
+indexarchiveentry = ' <a href="{url}archive/{node|short}{extension}">{type|escape}</a> '
+index = index.tmpl
+urlparameter = '{separator}{name}={value|urlescape}'
+hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/gitweb/notfound.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,18 @@
+{header}
+<title>Mercurial repository not found</title>
+</head>
+
+<body>
+
+<div class="page_header">
+<a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a> Not found: {repo|escape}
+</div>
+
+<div class="page_body">
+The specified repository "{repo|escape}" is unknown, sorry.
+<br/>
+<br/>
+Please go back to the <a href="{url}">main repository list page</a>.
+</div>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/gitweb/search.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,36 @@
+{header}
+<title>{repo|escape}: Search</title>
+<link rel="alternate" type="application/atom+xml"
+   href="{url}atom-log" title="Atom feed for {repo|escape}"/>
+<link rel="alternate" type="application/rss+xml"
+   href="{url}rss-log" title="RSS feed for {repo|escape}"/>
+</head>
+<body>
+
+<div class="page_header">
+<a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / search
+
+<form action="{url}log">
+{sessionvars%hiddenformentry}
+<div class="search">
+<input type="text" name="rev" value="{query|escape}" />
+</div>
+</form>
+</div>
+
+<div class="page_nav">
+<a href="{url}summary{sessionvars%urlparameter}">summary</a> |
+<a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
+<a href="{url}log{sessionvars%urlparameter}">changelog</a> |
+<a href="{url}graph{sessionvars%urlparameter}">graph</a> |
+<a href="{url}tags{sessionvars%urlparameter}">tags</a> |
+<a href="{url}branches{sessionvars%urlparameter}">branches</a> |
+<a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry}
+<br/>
+</div>
+
+<div class="title">searching for {query|escape}</div>
+
+{entries}
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/gitweb/shortlog.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,41 @@
+{header}
+<title>{repo|escape}: Shortlog</title>
+<link rel="alternate" type="application/atom+xml"
+   href="{url}atom-log" title="Atom feed for {repo|escape}"/>
+<link rel="alternate" type="application/rss+xml"
+   href="{url}rss-log" title="RSS feed for {repo|escape}"/>
+</head>
+<body>
+
+<div class="page_header">
+<a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / shortlog
+</div>
+
+<form action="{url}log">
+{sessionvars%hiddenformentry}
+<div class="search">
+<input type="text" name="rev"  />
+</div>
+</form>
+<div class="page_nav">
+<a href="{url}summary{sessionvars%urlparameter}">summary</a> |
+shortlog |
+<a href="{url}log/{rev}{sessionvars%urlparameter}">changelog</a> |
+<a href="{url}graph{sessionvars%urlparameter}">graph</a> |
+<a href="{url}tags{sessionvars%urlparameter}">tags</a> |
+<a href="{url}branches{sessionvars%urlparameter}">branches</a> |
+<a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry}
+<br/>
+{changenav%navshortentry}<br/>
+</div>
+
+<div class="title">&nbsp;</div>
+<table cellspacing="0">
+{entries%shortlogentry}
+</table>
+
+<div class="page_nav">
+{changenav%navshortentry}
+</div>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/gitweb/summary.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,58 @@
+{header}
+<title>{repo|escape}: Summary</title>
+<link rel="alternate" type="application/atom+xml"
+   href="{url}atom-log" title="Atom feed for {repo|escape}"/>
+<link rel="alternate" type="application/rss+xml"
+   href="{url}rss-log" title="RSS feed for {repo|escape}"/>
+</head>
+<body>
+
+<div class="page_header">
+<a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / summary
+
+<form action="{url}log">
+{sessionvars%hiddenformentry}
+<div class="search">
+<input type="text" name="rev"  />
+</div>
+</form>
+</div>
+
+<div class="page_nav">
+summary |
+<a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
+<a href="{url}log{sessionvars%urlparameter}">changelog</a> |
+<a href="{url}graph{sessionvars%urlparameter}">graph</a> |
+<a href="{url}tags{sessionvars%urlparameter}">tags</a> |
+<a href="{url}branches{sessionvars%urlparameter}">branches</a> |
+<a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry}
+<br/>
+</div>
+
+<div class="title">&nbsp;</div>
+<table cellspacing="0">
+<tr><td>description</td><td>{desc}</td></tr>
+<tr><td>owner</td><td>{owner|obfuscate}</td></tr>
+<tr><td>last change</td><td>{lastchange|rfc822date}</td></tr>
+</table>
+
+<div><a  class="title" href="{url}shortlog{sessionvars%urlparameter}">changes</a></div>
+<table cellspacing="0">
+{shortlog}
+<tr class="light"><td colspan="4"><a class="list" href="{url}shortlog{sessionvars%urlparameter}">...</a></td></tr>
+</table>
+
+<div><a class="title" href="{url}tags{sessionvars%urlparameter}">tags</a></div>
+<table cellspacing="0">
+{tags}
+<tr class="light"><td colspan="3"><a class="list" href="{url}tags{sessionvars%urlparameter}">...</a></td></tr>
+</table>
+
+<div><a class="title" href="#">branches</a></div>
+<table cellspacing="0">
+{branches%branchentry}
+<tr class="light">
+  <td colspan="4"><a class="list"  href="#">...</a></td>
+</tr>
+</table>
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/gitweb/tags.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,30 @@
+{header}
+<title>{repo|escape}: Tags</title>
+<link rel="alternate" type="application/atom+xml"
+   href="{url}atom-tags" title="Atom feed for {repo|escape}"/>
+<link rel="alternate" type="application/rss+xml"
+   href="{url}rss-tags" title="RSS feed for {repo|escape}"/>
+</head>
+<body>
+
+<div class="page_header">
+<a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / tags
+</div>
+
+<div class="page_nav">
+<a href="{url}summary{sessionvars%urlparameter}">summary</a> |
+<a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
+<a href="{url}log{sessionvars%urlparameter}">changelog</a> |
+<a href="{url}graph{sessionvars%urlparameter}">graph</a> |
+tags |
+<a href="{url}branches{sessionvars%urlparameter}">branches</a> |
+<a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
+<br/>
+</div>
+
+<div class="title">&nbsp;</div>
+<table cellspacing="0">
+{entries%tagentry}
+</table>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/map-cmdline.changelog	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,17 @@
+header = '{date|shortdate}  {author|person}  <{author|email}>\n\n'
+header_verbose = ''
+changeset = '\t* {files|stringify|fill68|tabindent}{desc|fill68|tabindent|strip}\n\t[{node|short}]{tags}{branches}\n\n'
+changeset_quiet = '\t* {desc|firstline|fill68|tabindent|strip}\n\n'
+changeset_verbose = '{date|isodate}  {author|person}  <{author|email}>  ({node|short}{tags}{branches})\n\n\t* {file_adds|stringify|fill68|tabindent}{file_dels|stringify|fill68|tabindent}{files|stringify|fill68|tabindent}{desc|fill68|tabindent|strip}\n\n'
+start_tags = ' ['
+tag = '{tag}, '
+last_tag = '{tag}]'
+start_branches = ' <'
+branch = '{branch}, '
+last_branch = '{branch}>'
+file = '{file}, '
+last_file = '{file}:\n\t'
+file_add = '{file_add}, '
+last_file_add = '{file_add}: new file.\n* '
+file_del = '{file_del}, '
+last_file_del = '{file_del}: deleted file.\n* '
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/map-cmdline.compact	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,9 @@
+changeset = '{rev}{tags}{parents}   {node|short}   {date|isodate}   {author|user}\n  {desc|firstline|strip}\n\n'
+changeset_quiet = '{rev}:{node|short}\n'
+changeset_verbose = '{rev}{tags}{parents}   {node|short}   {date|isodate}   {author}\n  {desc|strip}\n\n'
+start_tags = '['
+tag = '{tag},'
+last_tag = '{tag}]'
+start_parents = ':'
+parent = '{rev},'
+last_parent = '{rev}'
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/map-cmdline.default	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,24 @@
+changeset = 'changeset:   {rev}:{node|short}\n{branches}{tags}{parents}user:        {author}\ndate:        {date|date}\nsummary:     {desc|firstline}\n\n'
+changeset_quiet = '{rev}:{node|short}\n'
+changeset_verbose = 'changeset:   {rev}:{node|short}\n{branches}{tags}{parents}user:        {author}\ndate:        {date|date}\n{files}{file_copies_switch}description:\n{desc|strip}\n\n\n'
+changeset_debug = 'changeset:   {rev}:{node}\n{branches}{tags}{parents}{manifest}user:        {author}\ndate:        {date|date}\n{file_mods}{file_adds}{file_dels}{file_copies_switch}{extras}description:\n{desc|strip}\n\n\n'
+start_files = 'files:      '
+file = ' {file}'
+end_files = '\n'
+start_file_mods = 'files:      '
+file_mod = ' {file_mod}'
+end_file_mods = '\n'
+start_file_adds = 'files+:     '
+file_add = ' {file_add}'
+end_file_adds = '\n'
+start_file_dels = 'files-:     '
+file_del = ' {file_del}'
+end_file_dels = '\n'
+start_file_copies_switch = 'copies:     '
+file_copy = ' {name} ({source})'
+end_file_copies_switch = '\n'
+parent = 'parent:      {rev}:{node|formatnode}\n'
+manifest = 'manifest:    {rev}:{node}\n'
+branch = 'branch:      {branch}\n'
+tag = 'tag:         {tag}\n'
+extra = 'extra:       {key}={value|stringescape}\n'
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/monoblue/branches.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,36 @@
+{header}
+    <title>{repo|escape}: Branches</title>
+    <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
+    <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
+</head>
+
+<body>
+<div id="container">
+    <div class="page-header">
+        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / Branches</h1>
+
+        <form action="{url}log">
+            {sessionvars%hiddenformentry}
+            <dl class="search">
+                <dt><label>Search: </label></dt>
+                <dd><input type="text" name="rev" /></dd>
+            </dl>
+        </form>
+
+        <ul class="page-nav">
+            <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
+            <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
+            <li><a href="{url}changelog{sessionvars%urlparameter}">changelog</a></li>
+            <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
+            <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
+            <li class="current">branches</li>
+            <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a></li>
+        </ul>
+    </div>
+
+    <h2 class="no-link no-border">tags</h2>
+    <table cellspacing="0">
+{entries%branchentry}
+    </table>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/monoblue/changelog.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,40 @@
+{header}
+    <title>{repo|escape}: changelog</title>
+    <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
+    <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
+</head>
+
+<body>
+<div id="container">
+    <div class="page-header">
+        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / changelog</h1>
+
+        <form action="{url}log">
+            {sessionvars%hiddenformentry}
+            <dl class="search">
+                <dt><label>Search: </label></dt>
+                <dd><input type="text" name="rev" /></dd>
+            </dl>
+        </form>
+
+        <ul class="page-nav">
+            <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
+            <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
+            <li class="current">changelog</li>
+            <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
+            <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
+            <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
+            <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry}</li>
+        </ul>
+    </div>
+
+    <h2 class="no-link no-border">changelog</h2>
+    <div>
+    {entries%changelogentry}
+    </div>
+
+    <div class="page-path">
+{changenav%naventry}
+    </div>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/monoblue/changelogentry.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,6 @@
+<h3 class="changelog"><a class="title" href="{url}rev/{node|short}{sessionvars%urlparameter}">{desc|strip|firstline|escape|nonempty}<span class="logtags"> {inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span></a></h3>
+<ul class="changelog-entry">
+    <li class="age">{date|age}</li>
+    <li>by <span class="name">{author|obfuscate}</span> <span class="revdate">[{date|rfc822date}] rev {rev}</span></li>
+    <li class="description">{desc|strip|escape|addbreaks|nonempty}</li>
+</ul>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/monoblue/changeset.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,63 @@
+{header}
+<title>{repo|escape}: changeset {rev}:{node|short}</title>
+    <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
+    <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
+</head>
+
+<body>
+<div id="container">
+    <div class="page-header">
+        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / files</h1>
+
+        <form action="{url}log">
+            {sessionvars%hiddenformentry}
+            <dl class="search">
+                <dt><label>Search: </label></dt>
+                <dd><input type="text" name="rev" /></dd>
+            </dl>
+        </form>
+
+        <ul class="page-nav">
+            <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
+            <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
+            <li><a href="{url}changelog{sessionvars%urlparameter}">changelog</a></li>
+            <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
+            <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
+            <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
+            <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a></li>
+        </ul>
+    </div>
+
+    <ul class="submenu">
+        <li class="current">changeset</li>
+        <li><a href="{url}raw-rev/{node|short}">raw</a> {archives%archiveentry}</li>
+    </ul>
+
+    <h2 class="no-link no-border">changeset</h2>
+
+    <h3 class="changeset"><a href="{url}raw-rev/{node|short}">{desc|strip|escape|firstline|nonempty} <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span></a></h3>
+    <p class="changeset-age"><span>{date|age}</span></p>
+
+    <dl class="overview">
+        <dt>author</dt>
+        <dd>{author|obfuscate}</dd>
+        <dt>date</dt>
+        <dd>{date|date}</dd>
+        {branch%changesetbranch}
+        <dt>changeset {rev}</dt>
+        <dd>{node|short}</dd>
+        {parent%changesetparent}
+        {child%changesetchild}
+    </dl>
+
+    <p class="description">{desc|strip|escape|addbreaks|nonempty}</p>
+
+    <table>
+    {files}
+    </table>
+
+    <div class="diff">
+    {diff}
+    </div>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/monoblue/error.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,34 @@
+{header}
+    <title>{repo|escape}: Error</title>
+    <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
+    <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
+</head>
+
+<body>
+<div id="container">
+    <div class="page-header">
+        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / Not found: {repo|escape}</h1>
+
+        <form action="{url}log">
+            {sessionvars%hiddenformentry}
+            <dl class="search">
+                <dt><label>Search: </label></dt>
+                <dd><input type="text" name="rev" /></dd>
+            </dl>
+        </form>
+
+        <ul class="page-nav">
+            <li class="current">summary</li>
+            <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
+            <li><a href="{url}log{sessionvars%urlparameter}">changelog</a></li>
+            <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
+            <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
+            <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
+            <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a></li>
+        </ul>
+    </div>
+
+    <h2 class="no-link no-border">An error occurred while processing your request</h2>
+    <p class="normal">{error|escape}</p>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/monoblue/fileannotate.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,63 @@
+{header}
+<title>{repo|escape}: {file|escape}@{node|short} (annotated)</title>
+    <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
+    <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
+</head>
+
+<body>
+<div id="container">
+    <div class="page-header">
+        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / annotate</h1>
+
+        <form action="{url}log">
+            {sessionvars%hiddenformentry}
+            <dl class="search">
+                <dt><label>Search: </label></dt>
+                <dd><input type="text" name="rev" /></dd>
+            </dl>
+        </form>
+
+        <ul class="page-nav">
+            <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
+            <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
+            <li><a href="{url}log{sessionvars%urlparameter}">changelog</a></li>
+            <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
+            <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
+            <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
+            <li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a></li>
+        </ul>
+    </div>
+
+    <ul class="submenu">
+        <li><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a></li>
+        <li><a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a></li>
+        <li class="current">annotate</li>
+        <li><a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a></li>
+        <li><a href="{url}raw-annotate/{node|short}/{file|urlescape}">raw</a></li>
+    </ul>
+
+    <h2 class="no-link no-border">{file|escape}@{node|short} (annotated)</h2>
+    <h3 class="changeset">{file|escape}</h3>
+    <p class="changeset-age"><span>{date|age}</span></p>
+
+    <dl class="overview">
+        <dt>author</dt>
+        <dd>{author|obfuscate}</dd>
+        <dt>date</dt>
+        <dd>{date|date}</dd>
+        {branch%filerevbranch}
+        <dt>changeset {rev}</dt>
+        <dd><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></dd>
+        {parent%fileannotateparent}
+        {child%fileannotatechild}
+        <dt>permissions</dt>
+        <dd>{permissions|permissions}</dd>
+    </dl>
+
+    <p class="description">{desc|strip|escape|addbreaks|nonempty}</p>
+
+    <table class="annotated">
+    {annotate%annotateline}
+    </table>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/monoblue/filediff.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,54 @@
+{header}
+<title>{repo|escape}: diff {file|escape}</title>
+    <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
+    <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
+</head>
+
+<body>
+<div id="container">
+    <div class="page-header">
+        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / file diff</h1>
+
+        <form action="{url}log">
+            {sessionvars%hiddenformentry}
+            <dl class="search">
+                <dt><label>Search: </label></dt>
+                <dd><input type="text" name="rev" /></dd>
+            </dl>
+        </form>
+
+        <ul class="page-nav">
+            <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
+            <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
+            <li><a href="{url}log{sessionvars%urlparameter}">changelog</a></li>
+            <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
+            <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
+            <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
+            <li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a></li>
+        </ul>
+    </div>
+
+    <ul class="submenu">
+        <li><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a></li>
+        <li><a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a></li>
+        <li><a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a></li>
+        <li class="current">diff</li>
+        <li><a href="{url}raw-diff/{node|short}/{file|urlescape}">raw</a></li>
+    </ul>
+
+    <h2 class="no-link no-border">diff: {file|escape}</h2>
+    <h3 class="changeset">{file|escape}</h3>
+
+    <dl class="overview">
+        {branch%filerevbranch}
+        <dt>changeset {rev}</dt>
+        <dd><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></dd>
+        {parent%filediffparent}
+        {child%filediffchild}
+    </dl>
+
+    <div class="diff">
+    {diff}
+    </div>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/monoblue/filelog.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,49 @@
+{header}
+<title>{repo|escape}: File revisions</title>
+    <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
+    <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
+</head>
+
+<body>
+<div id="container">
+    <div class="page-header">
+        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / file revisions</h1>
+
+        <form action="{url}log">
+            {sessionvars%hiddenformentry}
+            <dl class="search">
+                <dt><label>Search: </label></dt>
+                <dd><input type="text" name="rev" /></dd>
+            </dl>
+        </form>
+
+        <ul class="page-nav">
+            <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
+            <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
+            <li><a href="{url}log{sessionvars%urlparameter}">changelog</a></li>
+            <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
+            <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
+            <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
+            <li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a></li>
+        </ul>
+    </div>
+
+    <ul class="submenu">
+        <li><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a></li>
+        <li class="current">revisions</li>
+        <li><a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a></li>
+        <li><a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a></li>
+        <li><a href="{url}rss-log/{node|short}/{file|urlescape}">rss</a></li>
+    </ul>
+
+    <h2 class="no-link no-border">{file|urlescape}</h2>
+
+    <table>
+    {entries%filelogentry}
+    </table>
+
+    <div class="page-path">
+    {nav%filenaventry}
+    </div>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/monoblue/filerevision.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,63 @@
+{header}
+<title>{repo|escape}: {file|escape}@{node|short}</title>
+    <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
+    <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
+</head>
+
+<body>
+<div id="container">
+    <div class="page-header">
+        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / file revision</h1>
+
+        <form action="{url}log">
+            {sessionvars%hiddenformentry}
+            <dl class="search">
+                <dt><label>Search: </label></dt>
+                <dd><input type="text" name="rev" /></dd>
+            </dl>
+        </form>
+
+        <ul class="page-nav">
+            <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
+            <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
+            <li><a href="{url}changelog{sessionvars%urlparameter}">changelog</a></li>
+            <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
+            <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
+            <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
+            <li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a></li>
+        </ul>
+    </div>
+
+    <ul class="submenu">
+        <li class="current">file</li>
+        <li><a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a></li>
+        <li><a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a></li>
+        <li><a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a></li>
+        <li><a href="{url}raw-file/{node|short}/{file|urlescape}">raw</a></li>
+    </ul>
+
+    <h2 class="no-link no-border">{file|escape}@{node|short}</h2>
+    <h3 class="changeset">{file|escape}</h3>
+    <p class="changeset-age"><span>{date|age}</span></p>
+
+    <dl class="overview">
+        <dt>author</dt>
+        <dd>{author|obfuscate}</dd>
+        <dt>date</dt>
+        <dd>{date|date}</dd>
+        {branch%filerevbranch}
+        <dt>changeset {rev}</dt>
+        <dd><a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></dd>
+        {parent%filerevparent}
+        {child%filerevchild}
+        <dt>permissions</dt>
+        <dd>{permissions|permissions}</dd>
+    </dl>
+
+    <p class="description">{desc|strip|escape|addbreaks|nonempty}</p>
+
+    <div class="source">
+    {text%fileline}
+    </div>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/monoblue/footer.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,22 @@
+    <div class="page-footer">
+        <p>Mercurial Repository: {repo|escape}</p>
+        <ul class="rss-logo">
+            <li><a href="{url}rss-log">RSS</a></li>
+            <li><a href="{url}atom-log">Atom</a></li>
+        </ul>
+        {motd}
+    </div>
+
+    <div id="powered-by">
+        <p><a href="http://mercurial.selenic.com/" title="Mercurial"><img src="{staticurl}hglogo.png" width=75 height=90 border=0 alt="mercurial"></a></p>
+    </div>
+
+    <div id="corner-top-left"></div>
+    <div id="corner-top-right"></div>
+    <div id="corner-bottom-left"></div>
+    <div id="corner-bottom-right"></div>
+
+</div>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/monoblue/graph.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,118 @@
+{header}
+    <title>{repo|escape}: graph</title>
+    <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
+    <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
+    <!--[if IE]><script type="text/javascript" src="{staticurl}excanvas.js"></script><![endif]-->
+</head>
+
+<body>
+<div id="container">
+    <div class="page-header">
+        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / graph</h1>
+
+        <form action="{url}log">
+            {sessionvars%hiddenformentry}
+            <dl class="search">
+                <dt><label>Search: </label></dt>
+                <dd><input type="text" name="rev" /></dd>
+            </dl>
+        </form>
+
+        <ul class="page-nav">
+            <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
+            <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
+            <li><a href="{url}changelog{sessionvars%urlparameter}">changelog</a></li>
+            <li class="current">graph</li>
+            <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
+            <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
+            <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a></li>
+        </ul>
+    </div>
+
+    <h2 class="no-link no-border">graph</h2>
+
+    <div id="noscript">The revision graph only works with JavaScript-enabled browsers.</div>
+    <div id="wrapper">
+        <ul id="nodebgs"></ul>
+        <canvas id="graph" width="224" height="{canvasheight}"></canvas>
+        <ul id="graphnodes"></ul>
+    </div>
+
+    <script type="text/javascript" src="{staticurl}graph.js"></script>
+    <script>
+    <!-- hide script content
+
+    document.getElementById('noscript').style.display = 'none';
+
+    var data = {jsdata|json};
+    var graph = new Graph();
+    graph.scale({bg_height});
+
+    graph.edge = function(x0, y0, x1, y1, color) {
+
+        this.setColor(color, 0.0, 0.65);
+        this.ctx.beginPath();
+        this.ctx.moveTo(x0, y0);
+        this.ctx.lineTo(x1, y1);
+        this.ctx.stroke();
+
+    }
+
+    var revlink = '<li style="_STYLE"><span class="desc">';
+    revlink += '<a href="{url}rev/_NODEID{sessionvars%urlparameter}" title="_NODEID">_DESC</a>';
+    revlink += '</span>_TAGS<span class="info">_DATE ago, by _USER</span></li>';
+
+    graph.vertex = function(x, y, color, parity, cur) {
+
+        this.ctx.beginPath();
+        color = this.setColor(color, 0.25, 0.75);
+        this.ctx.arc(x, y, radius, 0, Math.PI * 2, true);
+        this.ctx.fill();
+
+        var bg = '<li class="bg parity' + parity + '"></li>';
+        var left = (this.columns + 1) * this.bg_height;
+        var nstyle = 'padding-left: ' + left + 'px;';
+        var item = revlink.replace(/_STYLE/, nstyle);
+        item = item.replace(/_PARITY/, 'parity' + parity);
+        item = item.replace(/_NODEID/, cur[0]);
+        item = item.replace(/_NODEID/, cur[0]);
+	item = item.replace(/_DESC/, cur[3]);
+        item = item.replace(/_USER/, cur[4]);
+        item = item.replace(/_DATE/, cur[5]);
+
+        var tagspan = '';
+        if (cur[7].length || (cur[6][0] != 'default' || cur[6][1])) {
+            tagspan = '<span class="logtags">';
+            if (cur[6][1]) {
+                tagspan += '<span class="branchtag" title="' + cur[6][0] + '">';
+                tagspan += cur[6][0] + '</span> ';
+            } else if (!cur[6][1] && cur[6][0] != 'default') {
+                tagspan += '<span class="inbranchtag" title="' + cur[6][0] + '">';
+                tagspan += cur[6][0] + '</span> ';
+            }
+            if (cur[7].length) {
+                for (var t in cur[7]) {
+                    var tag = cur[7][t];
+                    tagspan += '<span class="tagtag">' + tag + '</span> ';
+                }
+            }
+            tagspan += '</span>';
+        }
+
+        item = item.replace(/_TAGS/, tagspan); 
+        return [bg, item];
+
+    }
+
+    graph.render(data);
+
+    // stop hiding script -->
+    </script>
+
+    <div class="page-path">
+        <a href="{url}graph/{rev}{lessvars%urlparameter}">less</a>
+        <a href="{url}graph/{rev}{morevars%urlparameter}">more</a>
+        | {changenav%navgraphentry}
+    </div>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/monoblue/header.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,6 @@
+<!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" lang="en">
+<head>
+    <link rel="icon" href="{staticurl}hgicon.png" type="image/png" />
+    <meta name="robots" content="index, nofollow"/>
+    <link rel="stylesheet" href="{staticurl}style-monoblue.css" type="text/css" />
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/monoblue/index.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,39 @@
+{header}
+    <title>{repo|escape}: Mercurial repositories index</title>
+</head>
+
+<body>
+<div id="container">
+    <div class="page-header">
+        <h1>Mercurial Repositories</h1>
+        <ul class="page-nav">
+        </ul>
+    </div>
+    
+    <table cellspacing="0">
+        <tr>
+            <td><a href="?sort={sort_name}">Name</a></td>
+            <td><a href="?sort={sort_description}">Description</a></td>
+            <td><a href="?sort={sort_contact}">Contact</a></td>
+            <td><a href="?sort={sort_lastchange}">Last change</a></td>
+            <td>&nbsp;</td>
+            <td>&nbsp;</td>
+        </tr>
+        {entries%indexentry}
+    </table>
+    <div class="page-footer">
+        {motd}
+    </div>
+
+    <div id="powered-by">
+        <p><a href="http://mercurial.selenic.com/" title="Mercurial"><img src="{staticurl}hglogo.png" width=75 height=90 border=0 alt="mercurial"></a></p>
+    </div>
+
+    <div id="corner-top-left"></div>
+    <div id="corner-top-right"></div>
+    <div id="corner-bottom-left"></div>
+    <div id="corner-bottom-right"></div>
+
+</div>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/monoblue/manifest.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,51 @@
+{header}
+<title>{repo|escape}: files</title>
+    <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
+    <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
+</head>
+
+<body>
+<div id="container">
+    <div class="page-header">
+        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / files</h1>
+
+        <form action="{url}log">
+            {sessionvars%hiddenformentry}
+            <dl class="search">
+                <dt><label>Search: </label></dt>
+                <dd><input type="text" name="rev" /></dd>
+            </dl>
+        </form>
+
+        <ul class="page-nav">
+            <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
+            <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
+            <li><a href="{url}changelog{sessionvars%urlparameter}">changelog</a></li>
+            <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
+            <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
+            <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
+            <li class="current">files</li>
+        </ul>
+    </div>
+
+    <ul class="submenu">
+        <li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> {archives%archiveentry}</li>
+        {archives%archiveentry}
+    </ul>
+
+    <h2 class="no-link no-border">files</h2>
+    <p class="files">{path|escape} <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span></p>
+
+    <table>
+        <tr class="parity{upparity}">
+            <td>drwxr-xr-x</td>
+            <td></td>
+            <td></td>
+            <td><a href="{url}file/{node|short}{up|urlescape}{sessionvars%urlparameter}">[up]</a></td>
+            <td class="link">&nbsp;</td>
+        </tr>
+        {dentries%direntry}
+        {fentries%fileentry}
+    </table>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/monoblue/map	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,214 @@
+default = 'summary'
+mimetype = 'text/html; charset={encoding}'
+header = header.tmpl
+footer = footer.tmpl
+search = search.tmpl
+changelog = changelog.tmpl
+summary = summary.tmpl
+error = error.tmpl
+notfound = notfound.tmpl
+naventry = '<a href="{url}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
+navshortentry = '<a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
+navgraphentry = '<a href="{url}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
+filenaventry = '<a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{label|escape}</a>'
+filedifflink = '<a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
+filenodelink = '
+  <tr class="parity{parity}">
+    <td><a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a></td>
+    <td></td>
+    <td>
+      <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
+      <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
+      <a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
+      <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
+    </td>
+  </tr>'
+filenolink = '
+  <tr class="parity{parity}">
+    <td>
+      <a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a></td><td></td><td>file |
+      annotate |
+      <a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
+      <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
+    </td>
+  </tr>'
+fileellipses = '...'
+changelogentry = changelogentry.tmpl
+searchentry = changelogentry.tmpl
+changeset = changeset.tmpl
+manifest = manifest.tmpl
+direntry = '
+  <tr class="parity{parity}">
+    <td>drwxr-xr-x</td>
+    <td></td>
+    <td></td>
+    <td><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">{basename|escape}</a></td>
+    <td><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a></td>
+  </tr>'
+fileentry = '
+  <tr class="parity{parity}">
+    <td>{permissions|permissions}</td>
+    <td>{date|isodate}</td>
+    <td>{size}</td>
+    <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{basename|escape}</a></td>
+    <td>
+      <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
+      <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
+      <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
+    </td>
+  </tr>'
+filerevision = filerevision.tmpl
+fileannotate = fileannotate.tmpl
+filediff = filediff.tmpl
+filelog = filelog.tmpl
+fileline = '
+  <div style="font-family:monospace" class="parity{parity}">
+    <pre><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</pre>
+  </div>'
+annotateline = '
+  <tr class="parity{parity}">
+    <td class="linenr">
+      <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#{targetline}"
+         title="{node|short}: {desc|escape|firstline}">{author|user}@{rev}</a>
+    </td>
+    <td class="lineno">
+      <a href="#{lineid}" id="{lineid}">{linenumber}</a>
+    </td>
+    <td class="source">{line|escape}</td>
+  </tr>'
+difflineplus = '<span style="color:#008800;"><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
+difflineminus = '<span style="color:#cc0000;"><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
+difflineat = '<span style="color:#990099;"><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
+diffline = '<span><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
+changelogparent = '
+  <tr>
+    <th class="parent">parent {rev}:</th>
+    <td class="parent">
+      <a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
+    </td>
+  </tr>'
+changesetbranch = '<dt>branch</dt><dd>{name}</dd>'
+changesetparent = '
+  <dt>parent {rev}</dt>
+  <dd><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></dd>'
+filerevbranch = '<dt>branch</dt><dd>{name}</dd>'
+filerevparent = '
+  <dt>parent {rev}</dt>
+  <dd>
+    <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
+      {rename%filerename}{node|short}
+    </a>
+  </dd>'
+filerename = '{file|escape}@'
+filelogrename = '| <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">base</a>'
+fileannotateparent = '
+  <dt>parent {rev}</dt>
+  <dd>
+    <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
+      {rename%filerename}{node|short}
+    </a>
+  </dd>'
+changelogchild = '
+  <dt>child {rev}:</dt>
+  <dd><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></dd>'
+changesetchild = '
+  <dt>child {rev}</dt>
+  <dd><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></dd>'
+filerevchild = '
+  <dt>child {rev}</dt>
+  <dd>
+    <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a>
+  </dd>'
+fileannotatechild = '
+  <dt>child {rev}</dt>
+  <dd>
+    <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a>
+  </dd>'
+tags = tags.tmpl
+tagentry = '
+  <tr class="parity{parity}">
+    <td class="nowrap">{date|age}</td>
+    <td><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{tag|escape}</a></td>
+    <td class="nowrap">
+      <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
+      <a href="{url}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
+      <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
+    </td>
+  </tr>'
+branches = branches.tmpl
+branchentry = '
+  <tr class="parity{parity}">
+    <td class="nowrap">{date|age}</td>
+    <td><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
+    <td class="{status}">{branch|escape}</td>
+    <td class="nowrap">
+      <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
+      <a href="{url}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
+      <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
+    </td>
+  </tr>'
+diffblock = '<pre>{lines}</pre>'
+filediffparent = '
+  <dt>parent {rev}</dt>
+  <dd><a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></dd>'
+filelogparent = '
+  <tr>
+    <td align="right">parent {rev}:&nbsp;</td>
+    <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
+  </tr>'
+filediffchild = '
+  <dt>child {rev}</dt>
+  <dd><a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></dd>'
+filelogchild = '
+  <tr>
+    <td align="right">child {rev}:&nbsp;</td>
+    <td><a href="{url}file{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
+  </tr>'
+shortlog = shortlog.tmpl
+tagtag = '<span class="tagtag" title="{name}">{name}</span> '
+branchtag = '<span class="branchtag" title="{name}">{name}</span> '
+inbranchtag = '<span class="inbranchtag" title="{name}">{name}</span> '
+shortlogentry = '
+  <tr class="parity{parity}">
+    <td class="nowrap">{date|age}</td>
+    <td>{author|person}</td>
+    <td>
+      <a href="{url}rev/{node|short}{sessionvars%urlparameter}">
+        {desc|strip|firstline|escape|nonempty}
+        <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span>
+      </a>
+    </td>
+    <td class="nowrap">
+      <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
+      <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
+    </td>
+  </tr>'
+filelogentry = '
+  <tr class="parity{parity}">
+    <td class="nowrap">{date|age}</td>
+    <td><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{desc|strip|firstline|escape|nonempty}</a></td>
+    <td class="nowrap">
+      <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a>&nbsp;|&nbsp;<a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a>&nbsp;|&nbsp;<a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
+      {rename%filelogrename}
+    </td>
+  </tr>'
+archiveentry = '<li><a href="{url}archive/{node|short}{extension}">{type|escape}</a></li>'
+indexentry = '
+  <tr class="parity{parity}">
+    <td><a href="{url}{sessionvars%urlparameter}">{name|escape}</a></td>
+    <td>{description}</td>
+    <td>{contact|obfuscate}</td>
+    <td>{lastchange|age}</td>
+    <td class="indexlinks">{archives%indexarchiveentry}</td>
+    <td>
+      <div class="rss_logo">
+        <a href="{url}rss-log">RSS</a>
+        <a href="{url}atom-log">Atom</a>
+      </div>
+    </td>
+  </tr>\n'
+indexarchiveentry = '<a href="{url}archive/{node|short}{extension}">{type|escape}</a> '
+index = index.tmpl
+urlparameter = '{separator}{name}={value|urlescape}'
+hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
+graph = graph.tmpl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/monoblue/notfound.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,35 @@
+{header}
+    <title>{repo|escape}: Mercurial repository not found</title>
+    <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
+    <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
+</head>
+
+<body>
+<div id="container">
+    <div class="page-header">
+        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / Not found: {repo|escape}</h1>
+
+        <form action="{url}log">
+            {sessionvars%hiddenformentry}
+            <dl class="search">
+                <dt><label>Search: </label></dt>
+                <dd><input type="text" name="rev" /></dd>
+            </dl>
+        </form>
+
+        <ul class="page-nav">
+            <li class="current">summary</li>
+            <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
+            <li><a href="{url}log{sessionvars%urlparameter}">changelog</a></li>
+            <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
+            <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
+            <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
+            <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry}</li>
+        </ul>
+    </div>
+
+    <h2 class="no-link no-border">Not Found</h2>
+    <p class="normal">The specified repository "{repo|escape}" is unknown, sorry.</p>
+    <p class="normal">Please go back to the <a href="{url}">main repository list page</a>.</p>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/monoblue/search.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,34 @@
+{header}
+    <title>{repo|escape}: Search</title>
+    <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
+    <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
+</head>
+
+<body>
+<div id="container">
+    <div class="page-header">
+        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / search</h1>
+
+        <form action="{url}log">
+            {sessionvars%hiddenformentry}
+            <dl class="search">
+                <dt><label>Search: </label></dt>
+                <dd><input type="text" name="rev" value="{query|escape}" /></dd>
+            </dl>
+        </form>
+
+        <ul class="page-nav">
+            <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
+            <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
+            <li><a href="{url}log{sessionvars%urlparameter}">changelog</a></li>
+            <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
+            <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
+            <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
+            <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry}
+        </ul>
+    </div>
+
+    <h2 class="no-link no-border">searching for {query|escape}</h2>
+    {entries}
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/monoblue/shortlog.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,41 @@
+{header}
+    <title>{repo|escape}: shortlog</title>
+    <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
+    <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
+</head>
+
+<body>
+<div id="container">
+    <div class="page-header">
+        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / shortlog</h1>
+
+        <form action="{url}log">
+            {sessionvars%hiddenformentry}
+            <dl class="search">
+                <dt><label>Search: </label></dt>
+                <dd><input type="text" name="rev" /></dd>
+            </dl>
+        </form>
+
+        <ul class="page-nav">
+            <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
+            <li class="current">shortlog</li>
+            <li><a href="{url}log{sessionvars%urlparameter}">changelog</a></li>
+            <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
+            <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
+            <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
+            <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry}</li>
+        </ul>
+    </div>
+
+    <h2 class="no-link no-border">shortlog</h2>
+
+    <table>
+{entries%shortlogentry}
+    </table>
+
+    <div class="page-path">
+{changenav%navshortentry}
+    </div>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/monoblue/summary.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,66 @@
+{header}
+    <title>{repo|escape}: Summary</title>
+    <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
+    <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
+</head>
+
+<body>
+<div id="container">
+    <div class="page-header">
+        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / summary</h1>
+
+        <form action="{url}log">
+            {sessionvars%hiddenformentry}
+            <dl class="search">
+                <dt><label>Search: </label></dt>
+                <dd><input type="text" name="rev" /></dd>
+            </dl>
+        </form>
+
+        <ul class="page-nav">
+            <li class="current">summary</li>
+            <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
+            <li><a href="{url}log{sessionvars%urlparameter}">changelog</a></li>
+            <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
+            <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
+            <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
+            <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a></li>
+        </ul>
+    </div>
+
+    <h2 class="no-link no-border">Mercurial Repository Overview</h2>
+    <dl class="overview">
+        <dt>name</dt>
+        <dd>{repo|escape}</dd>
+        <dt>description</dt>
+        <dd>{desc}</dd>
+        <dt>owner</dt>
+        <dd>{owner|obfuscate}</dd>
+        <dt>last change</dt>
+        <dd>{lastchange|rfc822date}</dd>
+    </dl>
+
+    <h2><a href="{url}shortlog{sessionvars%urlparameter}">Changes</a></h2>
+    <table>
+{shortlog}
+        <tr class="light">
+            <td colspan="4"><a class="list" href="{url}shortlog{sessionvars%urlparameter}">...</a></td>
+        </tr>
+    </table>
+
+    <h2><a href="{url}tags{sessionvars%urlparameter}">Tags</a></h2>
+    <table>
+{tags}
+        <tr class="light">
+            <td colspan="3"><a class="list" href="{url}tags{sessionvars%urlparameter}">...</a></td>
+        </tr>
+    </table>
+
+    <h2 class="no-link">Branches</h2>
+    <table>
+    {branches%branchentry}
+        <tr class="light">
+          <td colspan="4"><a class="list"  href="#">...</a></td>
+        </tr>
+    </table>
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/monoblue/tags.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,36 @@
+{header}
+    <title>{repo|escape}: Tags</title>
+    <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
+    <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
+</head>
+
+<body>
+<div id="container">
+    <div class="page-header">
+        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / Tags</h1>
+
+        <form action="{url}log">
+            {sessionvars%hiddenformentry}
+            <dl class="search">
+                <dt><label>Search: </label></dt>
+                <dd><input type="text" name="rev" /></dd>
+            </dl>
+        </form>
+
+        <ul class="page-nav">
+            <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
+            <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
+            <li><a href="{url}changelog{sessionvars%urlparameter}">changelog</a></li>
+            <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
+            <li class="current">tags</li>
+            <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
+            <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a></li>
+        </ul>
+    </div>
+
+    <h2 class="no-link no-border">tags</h2>
+    <table cellspacing="0">
+{entries%tagentry}
+    </table>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/paper/branches.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,45 @@
+{header}
+<title>{repo|escape}: branches</title>
+<link rel="alternate" type="application/atom+xml"
+   href="{url}atom-tags" title="Atom feed for {repo|escape}: branches" />
+<link rel="alternate" type="application/rss+xml"
+   href="{url}rss-tags" title="RSS feed for {repo|escape}: branches" />
+</head>
+<body>
+
+<div class="container">
+<div class="menu">
+<div class="logo">
+<a href="http://mercurial.selenic.com/">
+<img src="{staticurl}hglogo.png" alt="mercurial" /></a>
+</div>
+<ul>
+<li><a href="{url}shortlog{sessionvars%urlparameter}">log</a></li>
+<li><a href="{url}graph{sessionvars%urlparameter}">graph</a></li>
+<li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
+<li class="active">branches</li>
+</ul>
+</div>
+
+<div class="main">
+<h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
+<h3>branches</h3>
+
+<form class="search" action="{url}log">
+{sessionvars%hiddenformentry}
+<p><input name="rev" id="search1" type="text" size="30" /></p>
+<div id="hint">find changesets by author, revision,
+files, or words in the commit message</div>
+</form>
+
+<table class="bigtable">
+<tr>
+ <th>branch</th>
+ <th>node</th>
+</tr>
+{entries%branchentry}
+</table>
+</div>
+</div>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/paper/changeset.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,71 @@
+{header}
+<title>{repo|escape}: {node|short}</title>
+</head>
+<body>
+<div class="container">
+<div class="menu">
+<div class="logo">
+<a href="http://mercurial.selenic.com/">
+<img src="{staticurl}hglogo.png" alt="mercurial" /></a>
+</div>
+<ul>
+ <li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
+ <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
+ <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
+ <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
+</ul>
+<ul>
+ <li class="active">changeset</li>
+ <li><a href="{url}raw-rev/{node|short}{sessionvars%urlparameter}">raw</a></li>
+ <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">browse</a></li>
+</ul>
+<ul>
+ {archives%archiveentry}
+</ul>
+</div>
+
+<div class="main">
+
+<h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
+<h3>changeset {rev}:{node|short} {changesetbranch%changelogbranchname} {changesettag}</h3>
+
+<form class="search" action="{url}log">
+{sessionvars%hiddenformentry}
+<p><input name="rev" id="search1" type="text" size="30" /></p>
+<div id="hint">find changesets by author, revision,
+files, or words in the commit message</div>
+</form>
+
+<div class="description">{desc|strip|escape|addbreaks|nonempty}</div>
+
+<table id="changesetEntry">
+<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})</td></tr>
+<tr>
+ <th class="author">parents</th>
+ <td class="author">{parent%changesetparent}</td>
+</tr>
+<tr>
+ <th class="author">children</th>
+ <td class="author">{child%changesetchild}</td>
+</tr>
+<tr>
+ <th class="files">files</th>
+ <td class="files">{files}</td>
+</tr>
+</table>
+
+<div class="overflow">
+<div class="sourcefirst">   line diff</div>
+
+{diff}
+</div>
+
+</div>
+</div>
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/paper/error.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,43 @@
+{header}
+<title>{repo|escape}: error</title>
+</head>
+<body>
+
+<div class="container">
+<div class="menu">
+<div class="logo">
+<a href="http://mercurial.selenic.com/">
+<img src="{staticurl}hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
+</div>
+<ul>
+<li><a href="{url}shortlog{sessionvars%urlparameter}">log</a></li>
+<li><a href="{url}graph{sessionvars%urlparameter}">graph</a></li>
+<li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
+<li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
+</ul>
+</div>
+
+<div class="main">
+
+<h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
+<h3>error</h3>
+
+<form class="search" action="{url}log">
+{sessionvars%hiddenformentry}
+<p><input name="rev" id="search1" type="text" size="30"></p>
+<div id="hint">find changesets by author, revision,
+files, or words in the commit message</div>
+</form>
+
+<div class="description">
+<p>
+An error occurred while processing your request:
+</p>
+<p>
+{error|escape}
+</p>
+</div>
+</div>
+</div>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/paper/fileannotate.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,78 @@
+{header}
+<title>{repo|escape}: {file|escape} annotate</title>
+</head>
+<body>
+
+<div class="container">
+<div class="menu">
+<div class="logo">
+<a href="http://mercurial.selenic.com/">
+<img src="{staticurl}hglogo.png" alt="mercurial" /></a>
+</div>
+<ul>
+<li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
+<li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
+<li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
+<li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
+</ul>
+
+<ul>
+<li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li>
+<li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
+</ul>
+<ul>
+<li><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a></li>
+<li><a href="{url}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a></li>
+<li><a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a></li>
+<li class="active">annotate</li>
+<li><a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file log</a></li>
+<li><a href="{url}raw-annotate/{node|short}/{file|urlescape}">raw</a></li>
+</ul>
+</div>
+
+<div class="main">
+<h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
+<h3>annotate {file|escape} @ {rev}:{node|short}</h3>
+
+<form class="search" action="{url}log">
+{sessionvars%hiddenformentry}
+<p><input name="rev" id="search1" type="text" size="30" /></p>
+<div id="hint">find changesets by author, revision,
+files, or words in the commit message</div>
+</form>
+
+<div class="description">{desc|strip|escape|addbreaks|nonempty}</div>
+
+<table id="changesetEntry">
+<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})</td>
+</tr>
+<tr>
+ <th class="author">parents</th>
+ <td class="author">{parent%filerevparent}</td>
+</tr>
+<tr>
+ <th class="author">children</th>
+ <td class="author">{child%filerevchild}</td>
+</tr>
+{changesettag}
+</table>
+
+<div class="overflow">
+<table class="bigtable">
+<tr>
+ <th class="annotate">rev</th>
+ <th class="line">&nbsp;&nbsp;line source</th>
+</tr>
+{annotate%annotateline}
+</table>
+</div>
+</div>
+</div>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/paper/filediff.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,73 @@
+{header}
+<title>{repo|escape}: {file|escape} diff</title>
+</head>
+<body>
+
+<div class="container">
+<div class="menu">
+<div class="logo">
+<a href="http://mercurial.selenic.com/">
+<img src="{staticurl}hglogo.png" alt="mercurial" /></a>
+</div>
+<ul>
+<li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
+<li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
+<li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
+<li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
+</ul>
+<ul>
+<li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li>
+<li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
+</ul>
+<ul>
+<li><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a></li>
+<li><a href="{url}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a></li>
+<li class="active">diff</li>
+<li><a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a></li>
+<li><a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file log</a></li>
+<li><a href="{url}raw-file/{node|short}/{file|urlescape}">raw</a></li>
+</ul>
+</div>
+
+<div class="main">
+<h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
+<h3>diff {file|escape} @ {rev}:{node|short}</h3>
+
+<form class="search" action="{url}log">
+<p>{sessionvars%hiddenformentry}</p>
+<p><input name="rev" id="search1" type="text" size="30" /></p>
+<div id="hint">find changesets by author, revision,
+files, or words in the commit message</div>
+</form>
+
+<div class="description">{desc|strip|escape|addbreaks|nonempty}</div>
+
+<table id="changesetEntry">
+<tr>
+ <th>author</th>
+ <td>{author|obfuscate}</td>
+</tr>
+<tr>
+ <th>date</th>
+ <td>{date|date} ({date|age})</td>
+</tr>
+<tr>
+ <th>parents</th>
+ <td>{parent%filerevparent}</td>
+</tr>
+<tr>
+ <th>children</th>
+ <td>{child%filerevchild}</td>
+</tr>
+{changesettag}
+</table>
+
+<div class="overflow">
+<div class="sourcefirst">   line diff</div>
+
+{diff}
+</div>
+</div>
+</div>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/paper/filelog.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,60 @@
+{header}
+<title>{repo|escape}: {file|escape} history</title>
+<link rel="alternate" type="application/atom+xml"
+   href="{url}atom-log/tip/{file|urlescape}" title="Atom feed for {repo|escape}:{file}" />
+<link rel="alternate" type="application/rss+xml"
+   href="{url}rss-log/tip/{file|urlescape}" title="RSS feed for {repo|escape}:{file}" />
+</head>
+<body>
+
+<div class="container">
+<div class="menu">
+<div class="logo">
+<a href="http://mercurial.selenic.com/">
+<img src="{staticurl}hglogo.png" alt="mercurial" /></a>
+</div>
+<ul>
+<li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
+<li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
+<li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
+<li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
+</ul>
+<ul>
+<li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li>
+<li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
+</ul>
+<ul>
+<li><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a></li>
+<li><a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a></li>
+<li><a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a></li>
+<li class="active">file log</li>
+<li><a href="{url}raw-file/{node|short}/{file|urlescape}">raw</a></li>
+</ul>
+</div>
+
+<div class="main">
+<h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
+<h3>log {file|escape}</h3>
+
+<form class="search" action="{url}log">
+{sessionvars%hiddenformentry}
+<p><input name="rev" id="search1" type="text" size="30" /></p>
+<div id="hint">find changesets by author, revision,
+files, or words in the commit message</div>
+</form>
+
+<div class="navigate">{nav%filenaventry}</div>
+
+<table class="bigtable">
+ <tr>
+  <th class="age">age</th>
+  <th class="author">author</th>
+  <th class="description">description</th>
+ </tr>
+{entries%filelogentry}
+</table>
+
+</div>
+</div>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/paper/filelogentry.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,5 @@
+ <tr class="parity{parity}">
+  <td class="age">{date|age}</td>
+  <td class="author">{author|person}</td>
+  <td class="description"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{desc|strip|firstline|escape|nonempty}</a>{inbranch%changelogbranchname}{branches%changelogbranchhead}{tags%changelogtag}</td>
+ </tr>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/paper/filerevision.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,73 @@
+{header}
+<title>{repo|escape}: {node|short} {file|escape}</title>
+</head>
+<body>
+
+<div class="container">
+<div class="menu">
+<div class="logo">
+<a href="http://mercurial.selenic.com/">
+<img src="{staticurl}hglogo.png" alt="mercurial" /></a>
+</div>
+<ul>
+<li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
+<li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
+<li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
+<li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
+</ul>
+<ul>
+<li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li>
+<li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
+</ul>
+<ul>
+<li class="active">file</li>
+<li><a href="{url}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a></li>
+<li><a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a></li>
+<li><a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a></li>
+<li><a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file log</a></li>
+<li><a href="{url}raw-file/{node|short}/{file|urlescape}">raw</a></li>
+</ul>
+</div>
+
+<div class="main">
+<h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
+<h3>view {file|escape} @ {rev}:{node|short}</h3>
+
+<form class="search" action="{url}log">
+{sessionvars%hiddenformentry}
+<p><input name="rev" id="search1" type="text" size="30" /></p>
+<div id="hint">find changesets by author, revision,
+files, or words in the commit message</div>
+</form>
+
+<div class="description">{desc|strip|escape|addbreaks|nonempty}</div>
+
+<table id="changesetEntry">
+<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})</td>
+</tr>
+<tr>
+ <th class="author">parents</th>
+ <td class="author">{parent%filerevparent}</td>
+</tr>
+<tr>
+ <th class="author">children</th>
+ <td class="author">{child%filerevchild}</td>
+</tr>
+{changesettag}
+</table>
+
+<div class="overflow">
+<div class="sourcefirst"> line source</div>
+{text%fileline}
+<div class="sourcelast"></div>
+</div>
+</div>
+</div>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/paper/footer.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,4 @@
+{motd}
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/paper/graph.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,132 @@
+{header}
+<title>{repo|escape}: revision graph</title>
+<link rel="alternate" type="application/atom+xml"
+   href="{url}atom-log" title="Atom feed for {repo|escape}: log" />
+<link rel="alternate" type="application/rss+xml"
+   href="{url}rss-log" title="RSS feed for {repo|escape}: log" />
+<!--[if IE]><script type="text/javascript" src="{staticurl}excanvas.js"></script><![endif]-->
+</head>
+<body>
+
+<div class="container">
+<div class="menu">
+<div class="logo">
+<a href="http://mercurial.selenic.com/">
+<img src="{staticurl}hglogo.png" alt="mercurial" /></a>
+</div>
+<ul>
+<li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
+<li class="active">graph</li>
+<li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
+<li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
+</ul>
+<ul>
+<li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li>
+<li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
+</ul>
+</div>
+
+<div class="main">
+<h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
+<h3>graph</h3>
+
+<form class="search" action="{url}log">
+{sessionvars%hiddenformentry}
+<p><input name="rev" id="search1" type="text" size="30" /></p>
+<div id="hint">find changesets by author, revision,
+files, or words in the commit message</div>
+</form>
+
+<div class="navigate">
+<a href="{url}graph/{rev}{lessvars%urlparameter}">less</a>
+<a href="{url}graph/{rev}{morevars%urlparameter}">more</a>
+| rev {rev}: {changenav%navgraphentry}
+</div>
+
+<noscript><p>The revision graph only works with JavaScript-enabled browsers.</p></noscript>
+
+<div id="wrapper">
+<ul id="nodebgs"></ul>
+<canvas id="graph" width="224" height="{canvasheight}"></canvas>
+<ul id="graphnodes"></ul>
+</div>
+
+<script type="text/javascript" src="{staticurl}graph.js"></script>
+<script type="text/javascript">
+<!-- hide script content
+
+var data = {jsdata|json};
+var graph = new Graph();
+graph.scale({bg_height});
+
+graph.edge = function(x0, y0, x1, y1, color) {
+	
+	this.setColor(color, 0.0, 0.65);
+	this.ctx.beginPath();
+	this.ctx.moveTo(x0, y0);
+	this.ctx.lineTo(x1, y1);
+	this.ctx.stroke();
+	
+}
+
+var revlink = '<li style="_STYLE"><span class="desc">';
+revlink += '<a href="{url}rev/_NODEID{sessionvars%urlparameter}" title="_NODEID">_DESC</a>';
+revlink += '</span>_TAGS<span class="info">_DATE ago, by _USER</span></li>';
+
+graph.vertex = function(x, y, color, parity, cur) {
+	
+	this.ctx.beginPath();
+	color = this.setColor(color, 0.25, 0.75);
+	this.ctx.arc(x, y, radius, 0, Math.PI * 2, true);
+	this.ctx.fill();
+	
+	var bg = '<li class="bg parity' + parity + '"></li>';
+	var left = (this.columns + 1) * this.bg_height;
+	var nstyle = 'padding-left: ' + left + 'px;';
+	var item = revlink.replace(/_STYLE/, nstyle);
+	item = item.replace(/_PARITY/, 'parity' + parity);
+	item = item.replace(/_NODEID/, cur[0]);
+	item = item.replace(/_NODEID/, cur[0]);
+	item = item.replace(/_DESC/, cur[3]);
+	item = item.replace(/_USER/, cur[4]);
+	item = item.replace(/_DATE/, cur[5]);
+
+	var tagspan = '';
+	if (cur[7].length || (cur[6][0] != 'default' || cur[6][1])) {
+		tagspan = '<span class="logtags">';
+		if (cur[6][1]) {
+			tagspan += '<span class="branchhead" title="' + cur[6][0] + '">';
+			tagspan += cur[6][0] + '</span> ';
+		} else if (!cur[6][1] && cur[6][0] != 'default') {
+			tagspan += '<span class="branchname" title="' + cur[6][0] + '">';
+			tagspan += cur[6][0] + '</span> ';
+		}
+		if (cur[7].length) {
+			for (var t in cur[7]) {
+				var tag = cur[7][t];
+				tagspan += '<span class="tag">' + tag + '</span> ';
+			}
+		}
+		tagspan += '</span>';
+	}
+	
+	item = item.replace(/_TAGS/, tagspan);
+	return [bg, item];
+	
+}
+
+graph.render(data);
+
+// stop hiding script -->
+</script>
+
+<div class="navigate">
+<a href="{url}graph/{rev}{lessvars%urlparameter}">less</a>
+<a href="{url}graph/{rev}{morevars%urlparameter}">more</a>
+| rev {rev}: {changenav%navgraphentry}
+</div>
+
+</div>
+</div>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/paper/header.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,6 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
+<head>
+<link rel="icon" href="{staticurl}hgicon.png" type="image/png" />
+<meta name="robots" content="index, nofollow" />
+<link rel="stylesheet" href="{staticurl}style-paper.css" type="text/css" />
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/paper/index.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,26 @@
+{header}
+<title>Mercurial repositories index</title>
+</head>
+<body>
+
+<div class="container">
+<div class="menu">
+<a href="http://mercurial.selenic.com/">
+<img src="{staticurl}hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
+</div>
+<div class="main">
+<h2>Mercurial Repositories</h2>
+
+<table class="bigtable">
+    <tr>
+        <th><a href="?sort={sort_name}">Name</a></th>
+        <th><a href="?sort={sort_description}">Description</a></th>
+        <th><a href="?sort={sort_contact}">Contact</a></th>
+        <th><a href="?sort={sort_lastchange}">Last change</a></th>
+        <th>&nbsp;</th>
+    </tr>
+    {entries%indexentry}
+</table>
+</div>
+</div>
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/paper/manifest.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,54 @@
+{header}
+<title>{repo|escape}: {node|short} {path|escape}</title>
+</head>
+<body>
+
+<div class="container">
+<div class="menu">
+<div class="logo">
+<a href="http://mercurial.selenic.com/">
+<img src="{staticurl}hglogo.png" alt="mercurial" /></a>
+</div>
+<ul>
+<li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
+<li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
+<li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
+<li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
+</ul>
+<ul>
+<li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li>
+<li class="active">browse</li>
+</ul>
+<ul>
+{archives%archiveentry}
+</ul>
+</div>
+
+<div class="main">
+<h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
+<h3>directory {path|escape} @ {rev}:{node|short} {tags%changelogtag}</h3>
+
+<form class="search" action="{url}log">
+{sessionvars%hiddenformentry}
+<p><input name="rev" id="search1" type="text" size="30" /></p>
+<div id="hint">find changesets by author, revision,
+files, or words in the commit message</div>
+</form>
+
+<table class="bigtable">
+<tr>
+  <th class="name">name</th>
+  <th class="size">size</th>
+  <th class="permissions">permissions</th>
+</tr>
+<tr class="fileline parity{upparity}">
+  <td class="name"><a href="{url}file/{node|short}{up|urlescape}{sessionvars%urlparameter}">[up]</a></td>
+  <td class="size"></td>
+  <td class="permissions">drwxr-xr-x</td>
+</tr>
+{dentries%direntry}
+{fentries%fileentry}
+</table>
+</div>
+</div>
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/paper/map	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,191 @@
+default = 'shortlog'
+
+mimetype = 'text/html; charset={encoding}'
+header = header.tmpl
+footer = footer.tmpl
+search = search.tmpl
+
+changelog = shortlog.tmpl
+shortlog = shortlog.tmpl
+shortlogentry = shortlogentry.tmpl
+graph = graph.tmpl
+
+naventry = '<a href="{url}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
+navshortentry = '<a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
+navgraphentry = '<a href="{url}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
+filenaventry = '<a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{label|escape}</a> '
+filedifflink = '<a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
+filenodelink = '<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
+filenolink = '{file|escape} '
+fileellipses = '...'
+changelogentry = shortlogentry.tmpl
+searchentry = shortlogentry.tmpl
+changeset = changeset.tmpl
+manifest = manifest.tmpl
+
+direntry = '
+  <tr class="fileline parity{parity}">
+    <td class="name">
+      <a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">
+        <img src="{staticurl}coal-folder.png" alt="dir."/> {basename|escape}/
+      </a>
+      <a href="{url}file/{node|short}{path|urlescape}/{emptydirs|urlescape}{sessionvars%urlparameter}">
+        {emptydirs|escape}
+      </a>
+    </td>
+    <td class="size"></td>
+    <td class="permissions">drwxr-xr-x</td>
+  </tr>'
+
+fileentry = '
+  <tr class="fileline parity{parity}">
+    <td class="filename">
+      <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
+        <img src="{staticurl}coal-file.png" alt="file"/> {basename|escape}
+      </a>
+    </td>
+    <td class="size">{size}</td>
+    <td class="permissions">{permissions|permissions}</td>
+  </tr>'
+
+filerevision = filerevision.tmpl
+fileannotate = fileannotate.tmpl
+filediff = filediff.tmpl
+filelog = filelog.tmpl
+fileline = '
+  <div class="parity{parity} source"><a href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</div>'
+filelogentry = filelogentry.tmpl
+
+annotateline = '
+  <tr class="parity{parity}">
+    <td class="annotate">
+      <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#{targetline}"
+         title="{node|short}: {desc|escape|firstline}">{author|user}@{rev}</a>
+    </td>
+    <td class="source"><a href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</td>
+  </tr>'
+
+diffblock = '<div class="source bottomline parity{parity}"><pre>{lines}</pre></div>'
+difflineplus = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> <span class="plusline">{line|escape}</span>'
+difflineminus = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> <span class="minusline">{line|escape}</span>'
+difflineat = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> <span class="atline">{line|escape}</span>'
+diffline = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}'
+
+changelogparent = '
+  <tr>
+    <th class="parent">parent {rev}:</th>
+    <td class="parent"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
+  </tr>'
+
+changesetparent = '<a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a> '
+
+filerevparent = '<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{rename%filerename}{node|short}</a> '
+filerevchild = '<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a> '
+
+filerename = '{file|escape}@'
+filelogrename = '
+  <tr>
+    <th>base:</th>
+    <td>
+      <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
+        {file|escape}@{node|short}
+      </a>
+    </td>
+  </tr>'
+fileannotateparent = '
+  <tr>
+    <td class="metatag">parent:</td>
+    <td>
+      <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
+        {rename%filerename}{node|short}
+      </a>
+    </td>
+  </tr>'
+changesetchild = ' <a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>'
+changelogchild = '
+  <tr>
+    <th class="child">child</th>
+    <td class="child">
+      <a href="{url}rev/{node|short}{sessionvars%urlparameter}">
+        {node|short}
+      </a>
+    </td>
+  </tr>'
+fileannotatechild = '
+  <tr>
+    <td class="metatag">child:</td>
+    <td>
+      <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
+        {node|short}
+      </a>
+    </td>
+  </tr>'
+tags = tags.tmpl
+tagentry = '
+  <tr class="tagEntry parity{parity}">
+    <td>
+      <a href="{url}rev/{node|short}{sessionvars%urlparameter}">
+        {tag|escape}
+      </a>
+    </td>
+    <td class="node">
+      {node|short}
+    </td>
+  </tr>'
+branches = branches.tmpl
+branchentry = '
+  <tr class="tagEntry parity{parity}">
+    <td>
+      <a href="{url}shortlog/{node|short}{sessionvars%urlparameter}" class="{status}">
+        {branch|escape}
+      </a>
+    </td>
+    <td class="node">
+      {node|short}
+    </td>
+  </tr>'
+changelogtag = '<span class="tag">{name|escape}</span> '
+changesettag = '<span class="tag">{tag|escape}</span> '
+changelogbranchhead = '<span class="branchhead">{name|escape}</span> '
+changelogbranchname = '<span class="branchname">{name|escape}</span> ' 
+
+filediffparent = '
+  <tr>
+    <th class="parent">parent {rev}:</th>
+    <td class="parent"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
+  </tr>'
+filelogparent = '
+  <tr>
+    <th>parent {rev}:</th>
+    <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
+  </tr>'
+filediffchild = '
+  <tr>
+    <th class="child">child {rev}:</th>
+    <td class="child"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
+  </td>
+  </tr>'
+filelogchild = '
+  <tr>
+    <th>child {rev}:</th>
+    <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
+  </tr>'
+
+indexentry = '
+  <tr class="parity{parity}">
+    <td><a href="{url}{sessionvars%urlparameter}">{name|escape}</a></td>
+    <td>{description}</td>
+    <td>{contact|obfuscate}</td>
+    <td class="age">{lastchange|age}</td>
+    <td class="indexlinks">{archives%indexarchiveentry}</td>
+  </tr>\n'
+indexarchiveentry = '<a href="{url}archive/{node|short}{extension|urlescape}">&nbsp;&darr;{type|escape}</a>'
+index = index.tmpl
+archiveentry = '
+  <li>
+    <a href="{url}archive/{node|short}{extension|urlescape}">{type|escape}</a>
+  </li>'
+notfound = notfound.tmpl
+error = error.tmpl
+urlparameter = '{separator}{name}={value|urlescape}'
+hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/paper/notfound.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,12 @@
+{header}
+<title>Mercurial repository not found</title>
+</head>
+<body>
+
+<h2>Mercurial repository not found</h2>
+
+The specified repository "{repo|escape}" is unknown, sorry.
+
+Please go back to the <a href="{url}">main repository list page</a>.
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/paper/search.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,43 @@
+{header}
+<title>{repo|escape}: searching for {query|escape}</title>
+</head>
+<body>
+
+<div class="container">
+<div class="menu">
+<div class="logo">
+<a href="http://mercurial.selenic.com/">
+<img src="{staticurl}hglogo.png" width=75 height=90 border=0 alt="mercurial"></a>
+</div>
+<ul>
+<li><a href="{url}shortlog{sessionvars%urlparameter}">log</a></li>
+<li><a href="{url}graph{sessionvars%urlparameter}">graph</a></li>
+<li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
+<li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
+</ul>
+</div>
+
+<div class="main">
+<h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
+<h3>searching for '{query|escape}'</h3>
+
+<form class="search" action="{url}log">
+{sessionvars%hiddenformentry}
+<p><input name="rev" id="search1" type="text" size="30"></p>
+<div id="hint">find changesets by author, revision,
+files, or words in the commit message</div>
+</form>
+
+<table class="bigtable">
+ <tr>
+  <th class="age">age</th>
+  <th class="author">author</th>
+  <th class="description">description</th>
+ </tr>
+{entries}
+</table>
+
+</div>
+</div>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/paper/shortlog.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,57 @@
+{header}
+<title>{repo|escape}: log</title>
+<link rel="alternate" type="application/atom+xml"
+   href="{url}atom-log" title="Atom feed for {repo|escape}" />
+<link rel="alternate" type="application/rss+xml"
+   href="{url}rss-log" title="RSS feed for {repo|escape}" />
+</head>
+<body>
+
+<div class="container">
+<div class="menu">
+<div class="logo">
+<a href="http://mercurial.selenic.com/">
+<img src="{staticurl}hglogo.png" alt="mercurial" /></a>
+</div>
+<ul>
+<li class="active">log</li>
+<li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
+<li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
+<li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
+</ul>
+<ul>
+<li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li>
+<li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
+</ul>
+<ul>
+{archives%archiveentry}
+</ul>
+</div>
+
+<div class="main">
+<h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
+<h3>log</h3>
+
+<form class="search" action="{url}log">
+{sessionvars%hiddenformentry}
+<p><input name="rev" id="search1" type="text" size="30" /></p>
+<div id="hint">find changesets by author, revision,
+files, or words in the commit message</div>
+</form>
+
+<div class="navigate">rev {rev}: {changenav%navshortentry}</div>
+
+<table class="bigtable">
+ <tr>
+  <th class="age">age</th>
+  <th class="author">author</th>
+  <th class="description">description</th>
+ </tr>
+{entries%shortlogentry}
+</table>
+
+<div class="navigate">rev {rev}: {changenav%navshortentry}</div>
+</div>
+</div>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/paper/shortlogentry.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,5 @@
+ <tr class="parity{parity}">
+  <td class="age">{date|age}</td>
+  <td class="author">{author|person}</td>
+  <td class="description"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{desc|strip|firstline|escape|nonempty}</a>{inbranch%changelogbranchname}{branches%changelogbranchhead}{tags%changelogtag}</td>
+ </tr>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/paper/tags.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,45 @@
+{header}
+<title>{repo|escape}: tags</title>
+<link rel="alternate" type="application/atom+xml"
+   href="{url}atom-tags" title="Atom feed for {repo|escape}: tags" />
+<link rel="alternate" type="application/rss+xml"
+   href="{url}rss-tags" title="RSS feed for {repo|escape}: tags" />
+</head>
+<body>
+
+<div class="container">
+<div class="menu">
+<div class="logo">
+<a href="http://mercurial.selenic.com/">
+<img src="{staticurl}hglogo.png" alt="mercurial" /></a>
+</div>
+<ul>
+<li><a href="{url}shortlog{sessionvars%urlparameter}">log</a></li>
+<li><a href="{url}graph{sessionvars%urlparameter}">graph</a></li>
+<li class="active">tags</li>
+<li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
+</ul>
+</div>
+
+<div class="main">
+<h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
+<h3>tags</h3>
+
+<form class="search" action="{url}log">
+{sessionvars%hiddenformentry}
+<p><input name="rev" id="search1" type="text" size="30" /></p>
+<div id="hint">find changesets by author, revision,
+files, or words in the commit message</div>
+</form>
+
+<table class="bigtable">
+<tr>
+ <th>tag</th>
+ <th>node</th>
+</tr>
+{entries%tagentry}
+</table>
+</div>
+</div>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/raw/changeset.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,9 @@
+{header}
+# HG changeset patch
+# User {author}
+# Date {date|hgdate}
+# Node ID {node}
+{parent%changesetparent}
+{desc}
+
+{diff}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/raw/error.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,2 @@
+{header}
+error: {error}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/raw/fileannotate.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,5 @@
+{header}
+{annotate%annotateline}
+{footer}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/raw/filediff.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,5 @@
+{header}
+{diff}
+{footer}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/raw/index.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,2 @@
+{header}
+{entries%indexentry}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/raw/manifest.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,3 @@
+{header}
+{dentries%direntry}{fentries%fileentry}
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/raw/map	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,27 @@
+mimetype = 'text/plain; charset={encoding}'
+header = ''
+footer = ''
+changeset = changeset.tmpl
+difflineplus = '{line}'
+difflineminus = '{line}'
+difflineat = '{line}'
+diffline = '{line}'
+changesetparent = '# Parent  {node}'
+changesetchild = '# Child   {node}'
+filenodelink = ''
+fileline = '{line}'
+diffblock = '{lines}'
+filediff = filediff.tmpl
+fileannotate = fileannotate.tmpl
+annotateline = '{author|user}@{rev}: {line}'
+manifest = manifest.tmpl
+direntry = 'drwxr-xr-x {basename}\n'
+fileentry = '{permissions|permissions} {size} {basename}\n'
+index = index.tmpl
+notfound = notfound.tmpl
+error = error.tmpl
+indexentry = '{url}\n'
+tags = '{entries%tagentry}'
+tagentry = '{tag}	{node}\n'
+branches = '{entries%branchentry}'
+branchentry = '{branch}	{node}	{status}\n'
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/raw/notfound.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,2 @@
+{header}
+error: repository {repo} not found
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/rss/changelog.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,6 @@
+{header}
+    <title>{repo|escape} Changelog</title>
+    <description>{repo|escape} Changelog</description>
+    {entries%changelogentry}
+  </channel>
+</rss>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/rss/changelogentry.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,7 @@
+<item>
+    <title>{desc|strip|firstline|strip|escape}</title>
+    <guid isPermaLink="true">{urlbase}{url}rev/{node|short}</guid>
+    <description><![CDATA[{desc|strip|escape|addbreaks|nonempty}]]></description>
+    <author>{author|obfuscate}</author>
+    <pubDate>{date|rfc822date}</pubDate>
+</item>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/rss/error.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,10 @@
+{header}
+    <title>Error</title>
+    <description>Error</description>
+    <item>
+      <title>Error</title>
+      <description>{error|escape}</description>
+      <guid>http://mercurial.selenic.com/#error</guid>
+    </item>
+  </channel>
+</rss>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/rss/filelog.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,6 @@
+{header}
+    <title>{repo|escape}: {file|escape} history</title>
+    <description>{file|escape} revision history</description>
+    {entries%filelogentry}
+  </channel>
+</rss>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/rss/filelogentry.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,7 @@
+<item>
+    <title>{desc|strip|firstline|strip|escape}</title>
+    <link>{urlbase}{url}log{{node|short}}/{file|urlescape}</link>
+    <description><![CDATA[{desc|strip|escape|addbreaks|nonempty}]]></description>
+    <author>{author|obfuscate}</author>
+    <pubDate>{date|rfc822date}</pubDate>
+</item>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/rss/header.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="{encoding}"?>
+<rss version="2.0">
+  <channel>
+    <link>{urlbase}{url}</link>
+    <language>en-us</language>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/rss/map	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,10 @@
+default = 'changelog'
+mimetype = 'text/xml; charset={encoding}'
+header = header.tmpl
+changelog = changelog.tmpl
+changelogentry = changelogentry.tmpl
+filelog = filelog.tmpl
+filelogentry = filelogentry.tmpl
+tags = tags.tmpl
+tagentry = tagentry.tmpl
+error = error.tmpl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/rss/tagentry.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,6 @@
+<item>
+    <title>{tag|escape}</title>
+    <link>{urlbase}{url}rev/{node|short}</link>
+    <description><![CDATA[{tag|strip|escape|addbreaks}]]></description>
+    <pubDate>{date|rfc822date}</pubDate>
+</item>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/rss/tags.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,6 @@
+{header}
+    <title>{repo|escape}: tags </title>
+    <description>{repo|escape} tag history</description>
+    {entriesnotip%tagentry}
+  </channel>
+</rss>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/spartan/branches.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,26 @@
+{header}
+<title>{repo|escape}: branches</title>
+<link rel="alternate" type="application/atom+xml"
+   href="{url}atom-branches" title="Atom feed for {repo|escape}: branches">
+<link rel="alternate" type="application/rss+xml"
+   href="{url}rss-branches" title="RSS feed for {repo|escape}: branches">
+</head>
+<body>
+
+<div class="buttons">
+<a href="{url}log{sessionvars%urlparameter}">changelog</a>
+<a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a>
+<a href="{url}graph{sessionvars%urlparameter}">graph</a>
+<a href="{url}tags{sessionvars%urlparameter}">tags</a>
+<a href="{url}file/{node|short}/{sessionvars%urlparameter}">files</a>
+<a type="application/rss+xml" href="{url}rss-branches">rss</a>
+<a type="application/atom+xml" href="{url}atom-branches">atom</a>
+</div>
+
+<h2>branches:</h2>
+
+<ul id="tagEntries">
+{entries%branchentry}
+</ul>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/spartan/changelog.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,43 @@
+{header}
+<title>{repo|escape}: changelog</title>
+<link rel="alternate" type="application/atom+xml"
+   href="{url}atom-log" title="Atom feed for {repo|escape}">
+<link rel="alternate" type="application/rss+xml"
+   href="{url}rss-log" title="RSS feed for {repo|escape}">
+</head>
+<body>
+
+<div class="buttons">
+<a href="{url}shortlog/{rev}{sessionvars%urlparameter}">shortlog</a>
+<a href="{url}graph{sessionvars%urlparameter}">graph</a>
+<a href="{url}tags{sessionvars%urlparameter}">tags</a>
+<a href="{url}branches{sessionvars%urlparameter}">branches</a>
+<a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
+{archives%archiveentry}
+<a type="application/rss+xml" href="{url}rss-log">rss</a>
+<a type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}">atom</a>
+</div>
+
+<h2>changelog for {repo|escape}</h2>
+
+<form action="{url}log">
+{sessionvars%hiddenformentry}
+<p>
+<label for="search1">search:</label>
+<input name="rev" id="search1" type="text" size="30">
+navigate: <small class="navigate">{changenav%naventry}</small>
+</p>
+</form>
+
+{entries%changelogentry}
+
+<form action="{url}log">
+{sessionvars%hiddenformentry}
+<p>
+<label for="search2">search:</label>
+<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/mercurial/templates/spartan/changelogentry.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,25 @@
+<table class="logEntry parity{parity}">
+ <tr>
+  <th class="age">{date|age}:</th>
+  <th class="firstline">{desc|strip|firstline|escape|nonempty}</th>
+ </tr>
+ <tr>
+  <th class="revision">changeset {rev}:</th>
+  <td class="node"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{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="{url}file/{node|short}{sessionvars%urlparameter}">files</a>:</th>
+  <td class="files">{files}</td>
+ </tr>
+</table>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/spartan/changeset.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,51 @@
+{header}
+<title>{repo|escape}: changeset {node|short}</title>
+</head>
+<body>
+
+<div class="buttons">
+<a href="{url}log/{rev}{sessionvars%urlparameter}">changelog</a>
+<a href="{url}shortlog/{rev}{sessionvars%urlparameter}">shortlog</a>
+<a href="{url}graph{sessionvars%urlparameter}">graph</a>
+<a href="{url}tags{sessionvars%urlparameter}">tags</a>
+<a href="{url}branches{sessionvars%urlparameter}">branches</a>
+<a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
+<a href="{url}raw-rev/{node|short}">raw</a>
+{archives%archiveentry}
+</div>
+
+<h2>changeset: {desc|strip|escape|firstline|nonempty}</h2>
+
+<table id="changesetEntry">
+<tr>
+ <th class="changeset">changeset {rev}:</th>
+ <td class="changeset"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{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})</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|nonempty}</td>
+</tr>
+</table>
+
+<div id="changesetDiff">
+{diff}
+</div>
+
+{footer}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/spartan/error.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,15 @@
+{header}
+<title>Mercurial Error</title>
+</head>
+<body>
+
+<h2>Mercurial Error</h2>
+
+<p>
+An error occurred while processing your request:
+</p>
+<p>
+{error|escape}
+</p>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/spartan/fileannotate.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,48 @@
+{header}
+<title>{repo|escape}: {file|escape} annotate</title>
+</head>
+<body>
+
+<div class="buttons">
+<a href="{url}log/{rev}{sessionvars%urlparameter}">changelog</a>
+<a href="{url}shortlog/{rev}{sessionvars%urlparameter}">shortlog</a>
+<a href="{url}graph{sessionvars%urlparameter}">graph</a>
+<a href="{url}tags{sessionvars%urlparameter}">tags</a>
+<a href="{url}branches{sessionvars%urlparameter}">branches</a>
+<a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a>
+<a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a>
+<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a>
+<a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
+<a href="{url}raw-annotate/{node|short}/{file|urlescape}">raw</a>
+</div>
+
+<h2>Annotate {file|escape}</h2>
+
+<table>
+<tr>
+ <td class="metatag">changeset {rev}:</td>
+ <td><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td></tr>
+{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})</td>
+</tr>
+<tr>
+ <td class="metatag">permissions:</td>
+ <td>{permissions|permissions}</td>
+</tr>
+<tr>
+  <td class="metatag">description:</td>
+  <td>{desc|strip|escape|addbreaks|nonempty}</td>
+</tr>
+</table>
+
+<table cellspacing="0" cellpadding="0">
+{annotate%annotateline}
+</table>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/spartan/filediff.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,36 @@
+{header}
+<title>{repo|escape}: {file|escape} diff</title>
+</head>
+<body>
+
+<div class="buttons">
+<a href="{url}log/{rev}{sessionvars%urlparameter}">changelog</a>
+<a href="{url}shortlog/{rev}{sessionvars%urlparameter}">shortlog</a>
+<a href="{url}graph{sessionvars%urlparameter}">graph</a>
+<a href="{url}tags{sessionvars%urlparameter}">tags</a>
+<a href="{url}branches{sessionvars%urlparameter}">branches</a>
+<a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a>
+<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a>
+<a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
+<a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
+<a href="{url}raw-diff/{node|short}/{file|urlescape}">raw</a>
+</div>
+
+<h2>{file|escape}</h2>
+
+<table id="filediffEntry">
+<tr>
+ <th class="revision">revision {rev}:</th>
+ <td class="revision"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{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/mercurial/templates/spartan/filelog.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,28 @@
+{header}
+<title>{repo|escape}: {file|escape} history</title>
+<link rel="alternate" type="application/atom+xml"
+   href="{url}atom-log/tip/{file|urlescape}" title="Atom feed for {repo|escape}:{file}">
+<link rel="alternate" type="application/rss+xml"
+   href="{url}rss-log/tip/{file|urlescape}" title="RSS feed for {repo|escape}:{file}">
+</head>
+<body>
+
+<div class="buttons">
+<a href="{url}log{sessionvars%urlparameter}">changelog</a>
+<a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a>
+<a href="{url}graph{sessionvars%urlparameter}">graph</a>
+<a href="{url}tags{sessionvars%urlparameter}">tags</a>
+<a href="{url}branches{sessionvars%urlparameter}">branches</a>
+<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a>
+<a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
+<a type="application/rss+xml" href="{url}rss-log/tip/{file|urlescape}">rss</a>
+<a type="application/atom+xml" href="{url}atom-log/tip/{file|urlescape}" title="Atom feed for {repo|escape}:{file}">atom</a>
+</div>
+
+<h2>{file|escape} revision history</h2>
+
+<p>navigate: <small class="navigate">{nav%filenaventry}</small></p>
+
+{entries%filelogentry}
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/spartan/filelogentry.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,25 @@
+<table class="logEntry parity{parity}">
+ <tr>
+  <th class="age">{date|age}:</th>
+  <th class="firstline"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{desc|strip|firstline|escape|nonempty}</a></th>
+ </tr>
+ <tr>
+  <th class="revision">revision {filerev}:</td>
+  <td class="node">
+   <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a>
+   <a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">(diff)</a>
+   <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">(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/mercurial/templates/spartan/filerevision.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,46 @@
+{header}
+<title>{repo|escape}:{file|escape}</title>
+</head>
+<body>
+
+<div class="buttons">
+<a href="{url}log/{rev}{sessionvars%urlparameter}">changelog</a>
+<a href="{url}shortlog/{rev}{sessionvars%urlparameter}">shortlog</a>
+<a href="{url}graph{sessionvars%urlparameter}">graph</a>
+<a href="{url}tags{sessionvars%urlparameter}">tags</a>
+<a href="{url}branches{sessionvars%urlparameter}">branches</a>
+<a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a>
+<a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a>
+<a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
+<a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
+<a href="{url}raw-file/{node|short}/{file|urlescape}">raw</a>
+</div>
+
+<h2>{file|escape}</h2>
+
+<table>
+<tr>
+ <td class="metatag">changeset {rev}:</td>
+ <td><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td></tr>
+{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})</td></tr>
+<tr>
+ <td class="metatag">permissions:</td>
+ <td>{permissions|permissions}</td></tr>
+<tr>
+  <td class="metatag">description:</td>
+  <td>{desc|strip|escape|addbreaks|nonempty}</td>
+</tr>
+</table>
+
+<pre>
+{text%fileline}
+</pre>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/spartan/footer.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,8 @@
+{motd}
+<div class="logo">
+<a href="http://mercurial.selenic.com/">
+<img src="{staticurl}hglogo.png" width=75 height=90 border=0 alt="mercurial"></a>
+</div>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/spartan/graph.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,96 @@
+{header}
+<title>{repo|escape}: graph</title>
+<link rel="alternate" type="application/atom+xml"
+   href="{url}atom-tags" title="Atom feed for {repo|escape}: tags">
+<link rel="alternate" type="application/rss+xml"
+   href="{url}rss-tags" title="RSS feed for {repo|escape}: tags">
+<!--[if IE]><script type="text/javascript" src="{staticurl}excanvas.js"></script><![endif]-->
+</head>
+<body>
+
+<div class="buttons">
+<a href="{url}log{sessionvars%urlparameter}">changelog</a>
+<a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a>
+<a href="{url}tags{sessionvars%urlparameter}">tags</a>
+<a href="{url}branches{sessionvars%urlparameter}">branches</a>
+<a href="{url}file/{node|short}/{sessionvars%urlparameter}">files</a>
+</div>
+
+<h2>graph</h2>
+
+<form action="{url}log">
+{sessionvars%hiddenformentry}
+<p>
+<label for="search1">search:</label>
+<input name="rev" id="search1" type="text" size="30">
+navigate: <small class="navigate">{changenav%navgraphentry}</small>
+</p>
+</form>
+
+<noscript>The revision graph only works with JavaScript-enabled browsers.</noscript>
+
+<div id="wrapper">
+<ul id="nodebgs"></ul>
+<canvas id="graph" width="224" height="{canvasheight}"></canvas>
+<ul id="graphnodes"></ul>
+</div>
+
+<script type="text/javascript" src="{staticurl}graph.js"></script>
+<script type="text/javascript">
+<!-- hide script content
+
+var data = {jsdata|json};
+var graph = new Graph();
+graph.scale({bg_height});
+
+graph.edge = function(x0, y0, x1, y1, color) {
+	
+	this.setColor(color, 0.0, 0.65);
+	this.ctx.beginPath();
+	this.ctx.moveTo(x0, y0);
+	this.ctx.lineTo(x1, y1);
+	this.ctx.stroke();
+	
+}
+
+var revlink = '<li style="_STYLE"><span class="desc">';
+revlink += '<a href="{url}rev/_NODEID{sessionvars%urlparameter}" title="_NODEID">_DESC</a>';
+revlink += '</span><span class="info">_DATE ago, by _USER</span></li>';
+
+graph.vertex = function(x, y, color, parity, cur) {
+	
+	this.ctx.beginPath();
+	color = this.setColor(color, 0.25, 0.75);
+	this.ctx.arc(x, y, radius, 0, Math.PI * 2, true);
+	this.ctx.fill();
+	
+	var bg = '<li class="bg parity' + parity + '"></li>';
+	var left = (this.columns + 1) * this.bg_height;
+	var nstyle = 'padding-left: ' + left + 'px;';
+	var item = revlink.replace(/_STYLE/, nstyle);
+	item = item.replace(/_PARITY/, 'parity' + parity);
+	item = item.replace(/_NODEID/, cur[0]);
+	item = item.replace(/_NODEID/, cur[0]);
+	item = item.replace(/_DESC/, cur[3]);
+	item = item.replace(/_USER/, cur[4]);
+	item = item.replace(/_DATE/, cur[5]);
+	
+	return [bg, item];
+	
+}
+
+graph.render(data);
+
+// stop hiding script -->
+</script>
+
+<form action="{url}log">
+{sessionvars%hiddenformentry}
+<p>
+<label for="search1">search:</label>
+<input name="rev" id="search1" type="text" size="30">
+navigate: <small class="navigate">{changenav%navgraphentry}</small>
+</p>
+</form>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/spartan/header.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,6 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+<link rel="icon" href="{staticurl}hgicon.png" type="image/png">
+<meta name="robots" content="index, nofollow" />
+<link rel="stylesheet" href="{staticurl}style.css" type="text/css" />
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/spartan/index.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,19 @@
+{header}
+<title>Mercurial repositories index</title>
+</head>
+<body>
+
+<h2>Mercurial Repositories</h2>
+
+<table>
+    <tr>
+        <td><a href="?sort={sort_name}">Name</a></td>
+        <td><a href="?sort={sort_description}">Description</a></td>
+        <td><a href="?sort={sort_contact}">Contact</a></td>
+        <td><a href="?sort={sort_lastchange}">Last change</a></td>
+        <td>&nbsp;</td>
+    </tr>
+    {entries%indexentry}
+</table>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/spartan/manifest.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,28 @@
+{header}
+<title>{repo|escape}: files for changeset {node|short}</title>
+</head>
+<body>
+
+<div class="buttons">
+<a href="{url}log/{rev}{sessionvars%urlparameter}">changelog</a>
+<a href="{url}shortlog/{rev}{sessionvars%urlparameter}">shortlog</a>
+<a href="{url}graph{sessionvars%urlparameter}">graph</a>
+<a href="{url}tags{sessionvars%urlparameter}">tags</a>
+<a href="{url}branches{sessionvars%urlparameter}">branches</a>
+<a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a>
+{archives%archiveentry}
+</div>
+
+<h2>files for changeset {node|short}: {path|escape}</h2>
+
+<table cellpadding="0" cellspacing="0">
+<tr class="parity{upparity}">
+  <td><tt>drwxr-xr-x</tt>&nbsp;
+  <td>&nbsp;
+  <td>&nbsp;
+  <td><a href="{url}file/{node|short}{up|urlescape}{sessionvars%urlparameter}">[up]</a>
+</tr>
+{dentries%direntry}
+{fentries%fileentry}
+</table>
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/spartan/map	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,178 @@
+default = 'shortlog'
+mimetype = 'text/html; charset={encoding}'
+header = header.tmpl
+footer = footer.tmpl
+search = search.tmpl
+changelog = changelog.tmpl
+shortlog = shortlog.tmpl
+shortlogentry = shortlogentry.tmpl
+graph = graph.tmpl
+naventry = '<a href="{url}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
+navshortentry = '<a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
+navgraphentry = '<a href="{url}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
+filenaventry = '<a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{label|escape}</a> '
+filedifflink = '<a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
+filenodelink = '<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
+filenolink = '{file|escape} '
+fileellipses = '...'
+changelogentry = changelogentry.tmpl
+searchentry = changelogentry.tmpl
+changeset = changeset.tmpl
+manifest = manifest.tmpl
+
+direntry = '
+  <tr class="parity{parity}">
+    <td><tt>drwxr-xr-x</tt>&nbsp;
+    <td>&nbsp;
+    <td>&nbsp;
+    <td>
+      <a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">{basename|escape}/</a>
+      <a href="{url}file/{node|short}{path|urlescape}/{emptydirs|urlescape}{sessionvars%urlparameter}">
+        {emptydirs|urlescape}
+      </a>'
+
+fileentry = '
+  <tr class="parity{parity}">
+    <td><tt>{permissions|permissions}</tt>&nbsp;
+    <td align=right><tt class="date">{date|isodate}</tt>&nbsp;
+    <td align=right><tt>{size}</tt>&nbsp;
+    <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{basename|escape}</a>'
+
+filerevision = filerevision.tmpl
+fileannotate = fileannotate.tmpl
+filediff = filediff.tmpl
+filelog = filelog.tmpl
+fileline = '<div class="parity{parity}"><a class="lineno" href="#{lineid}" id="{lineid}">{linenumber}</a>&nbsp;{line|escape}</div>'
+filelogentry = filelogentry.tmpl
+
+# The &nbsp; ensures that all table cells have content (even if there
+# is an empty line in the annotated file), which in turn ensures that
+# all table rows have equal height.
+annotateline = '
+  <tr class="parity{parity}">
+    <td class="annotate">
+      <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#l{targetline}"
+         title="{node|short}: {desc|escape|firstline}">{author|user}@{rev}</a>
+    </td>
+    <td>
+      <a class="lineno" href="#{lineid}" id="{lineid}">{linenumber}</a>
+    </td>
+    <td><pre>&nbsp;{line|escape}</pre></td>
+  </tr>'
+difflineplus = '<span class="plusline"><a class="lineno" href="#{lineid}" id="{lineid}">{linenumber}</a>{line|escape}</span>'
+difflineminus = '<span class="minusline"><a class="lineno" href="#{lineid}" id="{lineid}">{linenumber}</a>{line|escape}</span>'
+difflineat = '<span class="atline"><a class="lineno" href="#{lineid}" id="{lineid}">{linenumber}</a>{line|escape}</span>'
+diffline = '<a class="lineno" href="#{lineid}" id="{lineid}">{linenumber}</a>{line|escape}'
+changelogparent = '
+  <tr>
+    <th class="parent">parent {rev}:</th>
+    <td class="parent">
+      <a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
+    </td>
+  </tr>'
+changesetparent = '
+  <tr>
+    <th class="parent">parent {rev}:</th>
+    <td class="parent"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
+  </tr>'
+filerevparent = '
+  <tr>
+    <td class="metatag">parent:</td>
+    <td>
+      <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
+        {rename%filerename}{node|short}
+      </a>
+    </td>
+  </tr>'
+filerename = '{file|escape}@'
+filelogrename = '
+  <tr>
+    <th>base:</th>
+    <td>
+      <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
+        {file|escape}@{node|short}
+      </a>
+    </td>
+  </tr>'
+fileannotateparent = '
+  <tr>
+    <td class="metatag">parent:</td>
+    <td>
+      <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
+        {rename%filerename}{node|short}
+      </a>
+    </td>
+  </tr>'
+changesetchild = '
+  <tr>
+    <th class="child">child {rev}:</th>
+    <td class="child"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
+  </tr>'
+changelogchild = '
+  <tr>
+    <th class="child">child {rev}:</th>
+    <td class="child"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
+  </tr>'
+filerevchild = '
+  <tr>
+    <td class="metatag">child:</td>
+    <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
+  </tr>'
+fileannotatechild = '
+  <tr>
+    <td class="metatag">child:</td>
+    <td><a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
+  </tr>'
+tags = tags.tmpl
+tagentry = '
+  <li class="tagEntry parity{parity}">
+    <tt class="node">{node}</tt>
+    <a href="{url}rev/{node|short}{sessionvars%urlparameter}">{tag|escape}</a>
+  </li>'
+branches = branches.tmpl
+branchentry = '
+  <li class="tagEntry parity{parity}">
+    <tt class="node">{node}</tt>
+    <a href="{url}shortlog/{node|short}{sessionvars%urlparameter}" class="{status}">{branch|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="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
+  </tr>'
+filelogparent = '
+  <tr>
+    <th>parent {rev}:</th>
+    <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
+  </tr>'
+filediffchild = '
+  <tr>
+    <th class="child">child {rev}:</th>
+    <td class="child"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
+  </tr>'
+filelogchild = '
+  <tr>
+    <th>child {rev}:</th>
+    <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
+  </tr>'
+indexentry = '
+  <tr class="parity{parity}">
+    <td><a href="{url}{sessionvars%urlparameter}">{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>
+      <a href="{url}atom-log">Atom</a>
+      {archives%archiveentry}
+    </td>
+  </tr>'
+index = index.tmpl
+archiveentry = '<a href="{url}archive/{node|short}{extension|urlescape}">{type|escape}</a> '
+notfound = notfound.tmpl
+error = error.tmpl
+urlparameter = '{separator}{name}={value|urlescape}'
+hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/spartan/notfound.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,12 @@
+{header}
+<title>Mercurial repository not found</title>
+</head>
+<body>
+
+<h2>Mercurial repository not found</h2>
+
+The specified repository "{repo|escape}" is unknown, sorry.
+
+Please go back to the <a href="{url}">main repository list page</a>.
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/spartan/search.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,36 @@
+{header}
+<title>{repo|escape}: searching for {query|escape}</title>
+</head>
+<body>
+
+<div class="buttons">
+<a href="{url}log{sessionvars%urlparameter}">changelog</a>
+<a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a>
+<a href="{url}graph{sessionvars%urlparameter}">graph</a>
+<a href="{url}tags{sessionvars%urlparameter}">tags</a>
+<a href="{url}branches{sessionvars%urlparameter}">branches</a>
+<a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
+{archives%archiveentry}
+</div>
+
+<h2>searching for {query|escape}</h2>
+
+<form>
+{sessionvars%hiddenformentry}
+<p>
+search:
+<input name="rev" type="text" width="30" value="{query|escape}">
+</p>
+</form>
+
+{entries}
+
+<form>
+{sessionvars%hiddenformentry}
+<p>
+search:
+<input name="rev" type="text" width="30" value="{query|escape}">
+</p>
+</form>
+
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/spartan/shortlog.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,43 @@
+{header}
+<title>{repo|escape}: shortlog</title>
+<link rel="alternate" type="application/atom+xml"
+   href="{url}atom-log" title="Atom feed for {repo|escape}">
+<link rel="alternate" type="application/rss+xml"
+   href="{url}rss-log" title="RSS feed for {repo|escape}">
+</head>
+<body>
+
+<div class="buttons">
+<a href="{url}log/{rev}{sessionvars%urlparameter}">changelog</a>
+<a href="{url}graph{sessionvars%urlparameter}">graph</a>
+<a href="{url}tags{sessionvars%urlparameter}">tags</a>
+<a href="{url}branches{sessionvars%urlparameter}">branches</a>
+<a href="{url}file/{node|short}/{sessionvars%urlparameter}">files</a>
+{archives%archiveentry}
+<a type="application/rss+xml" href="{url}rss-log">rss</a>
+<a type="application/rss+xml" href="{url}atom-log" title="Atom feed for {repo|escape}">atom</a>
+</div>
+
+<h2>shortlog for {repo|escape}</h2>
+
+<form action="{url}log">
+{sessionvars%hiddenformentry}
+<p>
+<label for="search1">search:</label>
+<input name="rev" id="search1" type="text" size="30">
+navigate: <small class="navigate">{changenav%navshortentry}</small>
+</p>
+</form>
+
+{entries%shortlogentry}
+
+<form action="{url}log">
+{sessionvars%hiddenformentry}
+<p>
+<label for="search2">search:</label>
+<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/mercurial/templates/spartan/shortlogentry.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,7 @@
+<table class="slogEntry parity{parity}">
+ <tr>
+  <td class="age">{date|age}</td>
+  <td class="author">{author|person}</td>
+  <td class="node"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{desc|strip|firstline|escape|nonempty}</a></td>
+ </tr>
+</table>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/spartan/tags.tmpl	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,26 @@
+{header}
+<title>{repo|escape}: tags</title>
+<link rel="alternate" type="application/atom+xml"
+   href="{url}atom-tags" title="Atom feed for {repo|escape}: tags">
+<link rel="alternate" type="application/rss+xml"
+   href="{url}rss-tags" title="RSS feed for {repo|escape}: tags">
+</head>
+<body>
+
+<div class="buttons">
+<a href="{url}log{sessionvars%urlparameter}">changelog</a>
+<a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a>
+<a href="{url}graph{sessionvars%urlparameter}">graph</a>
+<a href="{url}branches{sessionvars%urlparameter}">branches</a>
+<a href="{url}file/{node|short}/{sessionvars%urlparameter}">files</a>
+<a type="application/rss+xml" href="{url}rss-tags">rss</a>
+<a type="application/atom+xml" href="{url}atom-tags">atom</a>
+</div>
+
+<h2>tags:</h2>
+
+<ul id="tagEntries">
+{entries%tagentry}
+</ul>
+
+{footer}
Binary file mercurial/templates/static/background.png has changed
Binary file mercurial/templates/static/coal-file.png has changed
Binary file mercurial/templates/static/coal-folder.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/static/excanvas.js	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,19 @@
+if(!window.CanvasRenderingContext2D){(function(){var I=Math,i=I.round,L=I.sin,M=I.cos,m=10,A=m/2,Q={init:function(a){var b=a||document;if(/MSIE/.test(navigator.userAgent)&&!window.opera){var c=this;b.attachEvent("onreadystatechange",function(){c.r(b)})}},r:function(a){if(a.readyState=="complete"){if(!a.namespaces["s"]){a.namespaces.add("g_vml_","urn:schemas-microsoft-com:vml")}var b=a.createStyleSheet();b.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}g_vml_\\:*{behavior:url(#default#VML)}";
+var c=a.getElementsByTagName("canvas");for(var d=0;d<c.length;d++){if(!c[d].getContext){this.initElement(c[d])}}}},q:function(a){var b=a.outerHTML,c=a.ownerDocument.createElement(b);if(b.slice(-2)!="/>"){var d="/"+a.tagName,e;while((e=a.nextSibling)&&e.tagName!=d){e.removeNode()}if(e){e.removeNode()}}a.parentNode.replaceChild(c,a);return c},initElement:function(a){a=this.q(a);a.getContext=function(){if(this.l){return this.l}return this.l=new K(this)};a.attachEvent("onpropertychange",V);a.attachEvent("onresize",
+W);var b=a.attributes;if(b.width&&b.width.specified){a.style.width=b.width.nodeValue+"px"}else{a.width=a.clientWidth}if(b.height&&b.height.specified){a.style.height=b.height.nodeValue+"px"}else{a.height=a.clientHeight}return a}};function V(a){var b=a.srcElement;switch(a.propertyName){case "width":b.style.width=b.attributes.width.nodeValue+"px";b.getContext().clearRect();break;case "height":b.style.height=b.attributes.height.nodeValue+"px";b.getContext().clearRect();break}}function W(a){var b=a.srcElement;
+if(b.firstChild){b.firstChild.style.width=b.clientWidth+"px";b.firstChild.style.height=b.clientHeight+"px"}}Q.init();var R=[];for(var E=0;E<16;E++){for(var F=0;F<16;F++){R[E*16+F]=E.toString(16)+F.toString(16)}}function J(){return[[1,0,0],[0,1,0],[0,0,1]]}function G(a,b){var c=J();for(var d=0;d<3;d++){for(var e=0;e<3;e++){var g=0;for(var h=0;h<3;h++){g+=a[d][h]*b[h][e]}c[d][e]=g}}return c}function N(a,b){b.fillStyle=a.fillStyle;b.lineCap=a.lineCap;b.lineJoin=a.lineJoin;b.lineWidth=a.lineWidth;b.miterLimit=
+a.miterLimit;b.shadowBlur=a.shadowBlur;b.shadowColor=a.shadowColor;b.shadowOffsetX=a.shadowOffsetX;b.shadowOffsetY=a.shadowOffsetY;b.strokeStyle=a.strokeStyle;b.d=a.d;b.e=a.e}function O(a){var b,c=1;a=String(a);if(a.substring(0,3)=="rgb"){var d=a.indexOf("(",3),e=a.indexOf(")",d+1),g=a.substring(d+1,e).split(",");b="#";for(var h=0;h<3;h++){b+=R[Number(g[h])]}if(g.length==4&&a.substr(3,1)=="a"){c=g[3]}}else{b=a}return[b,c]}function S(a){switch(a){case "butt":return"flat";case "round":return"round";
+case "square":default:return"square"}}function K(a){this.a=J();this.m=[];this.k=[];this.c=[];this.strokeStyle="#000";this.fillStyle="#000";this.lineWidth=1;this.lineJoin="miter";this.lineCap="butt";this.miterLimit=m*1;this.globalAlpha=1;this.canvas=a;var b=a.ownerDocument.createElement("div");b.style.width=a.clientWidth+"px";b.style.height=a.clientHeight+"px";b.style.overflow="hidden";b.style.position="absolute";a.appendChild(b);this.j=b;this.d=1;this.e=1}var j=K.prototype;j.clearRect=function(){this.j.innerHTML=
+"";this.c=[]};j.beginPath=function(){this.c=[]};j.moveTo=function(a,b){this.c.push({type:"moveTo",x:a,y:b});this.f=a;this.g=b};j.lineTo=function(a,b){this.c.push({type:"lineTo",x:a,y:b});this.f=a;this.g=b};j.bezierCurveTo=function(a,b,c,d,e,g){this.c.push({type:"bezierCurveTo",cp1x:a,cp1y:b,cp2x:c,cp2y:d,x:e,y:g});this.f=e;this.g=g};j.quadraticCurveTo=function(a,b,c,d){var e=this.f+0.6666666666666666*(a-this.f),g=this.g+0.6666666666666666*(b-this.g),h=e+(c-this.f)/3,l=g+(d-this.g)/3;this.bezierCurveTo(e,
+g,h,l,c,d)};j.arc=function(a,b,c,d,e,g){c*=m;var h=g?"at":"wa",l=a+M(d)*c-A,n=b+L(d)*c-A,o=a+M(e)*c-A,f=b+L(e)*c-A;if(l==o&&!g){l+=0.125}this.c.push({type:h,x:a,y:b,radius:c,xStart:l,yStart:n,xEnd:o,yEnd:f})};j.rect=function(a,b,c,d){this.moveTo(a,b);this.lineTo(a+c,b);this.lineTo(a+c,b+d);this.lineTo(a,b+d);this.closePath()};j.strokeRect=function(a,b,c,d){this.beginPath();this.moveTo(a,b);this.lineTo(a+c,b);this.lineTo(a+c,b+d);this.lineTo(a,b+d);this.closePath();this.stroke()};j.fillRect=function(a,
+b,c,d){this.beginPath();this.moveTo(a,b);this.lineTo(a+c,b);this.lineTo(a+c,b+d);this.lineTo(a,b+d);this.closePath();this.fill()};j.createLinearGradient=function(a,b,c,d){var e=new H("gradient");return e};j.createRadialGradient=function(a,b,c,d,e,g){var h=new H("gradientradial");h.n=c;h.o=g;h.i.x=a;h.i.y=b;return h};j.drawImage=function(a,b){var c,d,e,g,h,l,n,o,f=a.runtimeStyle.width,k=a.runtimeStyle.height;a.runtimeStyle.width="auto";a.runtimeStyle.height="auto";var q=a.width,r=a.height;a.runtimeStyle.width=
+f;a.runtimeStyle.height=k;if(arguments.length==3){c=arguments[1];d=arguments[2];h=(l=0);n=(e=q);o=(g=r)}else if(arguments.length==5){c=arguments[1];d=arguments[2];e=arguments[3];g=arguments[4];h=(l=0);n=q;o=r}else if(arguments.length==9){h=arguments[1];l=arguments[2];n=arguments[3];o=arguments[4];c=arguments[5];d=arguments[6];e=arguments[7];g=arguments[8]}else{throw"Invalid number of arguments";}var s=this.b(c,d),t=[],v=10,w=10;t.push(" <g_vml_:group",' coordsize="',m*v,",",m*w,'"',' coordorigin="0,0"',
+' style="width:',v,";height:",w,";position:absolute;");if(this.a[0][0]!=1||this.a[0][1]){var x=[];x.push("M11='",this.a[0][0],"',","M12='",this.a[1][0],"',","M21='",this.a[0][1],"',","M22='",this.a[1][1],"',","Dx='",i(s.x/m),"',","Dy='",i(s.y/m),"'");var p=s,y=this.b(c+e,d),z=this.b(c,d+g),B=this.b(c+e,d+g);p.x=Math.max(p.x,y.x,z.x,B.x);p.y=Math.max(p.y,y.y,z.y,B.y);t.push("padding:0 ",i(p.x/m),"px ",i(p.y/m),"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(",x.join(""),", sizingmethod='clip');")}else{t.push("top:",
+i(s.y/m),"px;left:",i(s.x/m),"px;")}t.push(' ">','<g_vml_:image src="',a.src,'"',' style="width:',m*e,";"," height:",m*g,';"',' cropleft="',h/q,'"',' croptop="',l/r,'"',' cropright="',(q-h-n)/q,'"',' cropbottom="',(r-l-o)/r,'"'," />","</g_vml_:group>");this.j.insertAdjacentHTML("BeforeEnd",t.join(""))};j.stroke=function(a){var b=[],c=O(a?this.fillStyle:this.strokeStyle),d=c[0],e=c[1]*this.globalAlpha,g=10,h=10;b.push("<g_vml_:shape",' fillcolor="',d,'"',' filled="',Boolean(a),'"',' style="position:absolute;width:',
+g,";height:",h,';"',' coordorigin="0 0" coordsize="',m*g," ",m*h,'"',' stroked="',!a,'"',' strokeweight="',this.lineWidth,'"',' strokecolor="',d,'"',' path="');var l={x:null,y:null},n={x:null,y:null};for(var o=0;o<this.c.length;o++){var f=this.c[o];if(f.type=="moveTo"){b.push(" m ");var k=this.b(f.x,f.y);b.push(i(k.x),",",i(k.y))}else if(f.type=="lineTo"){b.push(" l ");var k=this.b(f.x,f.y);b.push(i(k.x),",",i(k.y))}else if(f.type=="close"){b.push(" x ")}else if(f.type=="bezierCurveTo"){b.push(" c ");
+var k=this.b(f.x,f.y),q=this.b(f.cp1x,f.cp1y),r=this.b(f.cp2x,f.cp2y);b.push(i(q.x),",",i(q.y),",",i(r.x),",",i(r.y),",",i(k.x),",",i(k.y))}else if(f.type=="at"||f.type=="wa"){b.push(" ",f.type," ");var k=this.b(f.x,f.y),s=this.b(f.xStart,f.yStart),t=this.b(f.xEnd,f.yEnd);b.push(i(k.x-this.d*f.radius),",",i(k.y-this.e*f.radius)," ",i(k.x+this.d*f.radius),",",i(k.y+this.e*f.radius)," ",i(s.x),",",i(s.y)," ",i(t.x),",",i(t.y))}if(k){if(l.x==null||k.x<l.x){l.x=k.x}if(n.x==null||k.x>n.x){n.x=k.x}if(l.y==
+null||k.y<l.y){l.y=k.y}if(n.y==null||k.y>n.y){n.y=k.y}}}b.push(' ">');if(typeof this.fillStyle=="object"){var v={x:"50%",y:"50%"},w=n.x-l.x,x=n.y-l.y,p=w>x?w:x;v.x=i(this.fillStyle.i.x/w*100+50)+"%";v.y=i(this.fillStyle.i.y/x*100+50)+"%";var y=[];if(this.fillStyle.p=="gradientradial"){var z=this.fillStyle.n/p*100,B=this.fillStyle.o/p*100-z}else{var z=0,B=100}var C={offset:null,color:null},D={offset:null,color:null};this.fillStyle.h.sort(function(T,U){return T.offset-U.offset});for(var o=0;o<this.fillStyle.h.length;o++){var u=
+this.fillStyle.h[o];y.push(u.offset*B+z,"% ",u.color,",");if(u.offset>C.offset||C.offset==null){C.offset=u.offset;C.color=u.color}if(u.offset<D.offset||D.offset==null){D.offset=u.offset;D.color=u.color}}y.pop();b.push("<g_vml_:fill",' color="',D.color,'"',' color2="',C.color,'"',' type="',this.fillStyle.p,'"',' focusposition="',v.x,", ",v.y,'"',' colors="',y.join(""),'"',' opacity="',e,'" />')}else if(a){b.push('<g_vml_:fill color="',d,'" opacity="',e,'" />')}else{b.push("<g_vml_:stroke",' opacity="',
+e,'"',' joinstyle="',this.lineJoin,'"',' miterlimit="',this.miterLimit,'"',' endcap="',S(this.lineCap),'"',' weight="',this.lineWidth,'px"',' color="',d,'" />')}b.push("</g_vml_:shape>");this.j.insertAdjacentHTML("beforeEnd",b.join(""));this.c=[]};j.fill=function(){this.stroke(true)};j.closePath=function(){this.c.push({type:"close"})};j.b=function(a,b){return{x:m*(a*this.a[0][0]+b*this.a[1][0]+this.a[2][0])-A,y:m*(a*this.a[0][1]+b*this.a[1][1]+this.a[2][1])-A}};j.save=function(){var a={};N(this,a);
+this.k.push(a);this.m.push(this.a);this.a=G(J(),this.a)};j.restore=function(){N(this.k.pop(),this);this.a=this.m.pop()};j.translate=function(a,b){var c=[[1,0,0],[0,1,0],[a,b,1]];this.a=G(c,this.a)};j.rotate=function(a){var b=M(a),c=L(a),d=[[b,c,0],[-c,b,0],[0,0,1]];this.a=G(d,this.a)};j.scale=function(a,b){this.d*=a;this.e*=b;var c=[[a,0,0],[0,b,0],[0,0,1]];this.a=G(c,this.a)};j.clip=function(){};j.arcTo=function(){};j.createPattern=function(){return new P};function H(a){this.p=a;this.n=0;this.o=
+0;this.h=[];this.i={x:0,y:0}}H.prototype.addColorStop=function(a,b){b=O(b);this.h.push({offset:1-a,color:b})};function P(){}G_vmlCanvasManager=Q;CanvasRenderingContext2D=K;CanvasGradient=H;CanvasPattern=P})()};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/static/graph.js	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,137 @@
+// branch_renderer.js - Rendering of branch DAGs on the client side
+//
+// Copyright 2008 Dirkjan Ochtman <dirkjan AT ochtman DOT nl>
+// Copyright 2006 Alexander Schremmer <alex AT alexanderweb DOT de>
+//
+// derived from code written by Scott James Remnant <scott@ubuntu.com>
+// Copyright 2005 Canonical Ltd.
+//
+// This software may be used and distributed according to the terms
+// of the GNU General Public License, incorporated herein by reference.
+
+var colors = [
+	[ 1.0, 0.0, 0.0 ],
+	[ 1.0, 1.0, 0.0 ],
+	[ 0.0, 1.0, 0.0 ],
+	[ 0.0, 1.0, 1.0 ],
+	[ 0.0, 0.0, 1.0 ],
+	[ 1.0, 0.0, 1.0 ]
+];
+
+function Graph() {
+	
+	this.canvas = document.getElementById('graph');
+	if (navigator.userAgent.indexOf('MSIE') >= 0) this.canvas = window.G_vmlCanvasManager.initElement(this.canvas);
+	this.ctx = this.canvas.getContext('2d');
+	this.ctx.strokeStyle = 'rgb(0, 0, 0)';
+	this.ctx.fillStyle = 'rgb(0, 0, 0)';
+	this.cur = [0, 0];
+	this.line_width = 3;
+	this.bg = [0, 4];
+	this.cell = [2, 0];
+	this.columns = 0;
+	this.revlink = '';
+	
+	this.scale = function(height) {
+		this.bg_height = height;
+		this.box_size = Math.floor(this.bg_height / 1.2);
+		this.cell_height = this.box_size;
+	}
+	
+	function colorPart(num) {
+		num *= 255
+		num = num < 0 ? 0 : num;
+		num = num > 255 ? 255 : num;
+		var digits = Math.round(num).toString(16);
+		if (num < 16) {
+			return '0' + digits;
+		} else {
+			return digits;
+		}
+	}
+
+	this.setColor = function(color, bg, fg) {
+		
+		// Set the colour.
+		//
+		// Picks a distinct colour based on an internal wheel; the bg
+		// parameter provides the value that should be assigned to the 'zero'
+		// colours and the fg parameter provides the multiplier that should be
+		// applied to the foreground colours.
+		
+		color %= colors.length;
+		var red = (colors[color][0] * fg) || bg;
+		var green = (colors[color][1] * fg) || bg;
+		var blue = (colors[color][2] * fg) || bg;
+		red = Math.round(red * 255);
+		green = Math.round(green * 255);
+		blue = Math.round(blue * 255);
+		var s = 'rgb(' + red + ', ' + green + ', ' + blue + ')';
+		this.ctx.strokeStyle = s;
+		this.ctx.fillStyle = s;
+		return s;
+		
+	}
+
+	this.render = function(data) {
+		
+		var backgrounds = '';
+		var nodedata = '';
+		
+		for (var i in data) {
+			
+			var parity = i % 2;
+			this.cell[1] += this.bg_height;
+			this.bg[1] += this.bg_height;
+			
+			var cur = data[i];
+			var node = cur[1];
+			var edges = cur[2];
+			var fold = false;
+			
+			for (var j in edges) {
+				
+				line = edges[j];
+				start = line[0];
+				end = line[1];
+				color = line[2];
+
+				if (end > this.columns || start > this.columns) {
+					this.columns += 1;
+				}
+				
+				if (start == this.columns && start > end) {
+					var fold = true;
+				}
+				
+				x0 = this.cell[0] + this.box_size * start + this.box_size / 2;
+				y0 = this.bg[1] - this.bg_height / 2;
+				x1 = this.cell[0] + this.box_size * end + this.box_size / 2;
+				y1 = this.bg[1] + this.bg_height / 2;
+				
+				this.edge(x0, y0, x1, y1, color);
+				
+			}
+			
+			// Draw the revision node in the right column
+			
+			column = node[0]
+			color = node[1]
+			
+			radius = this.box_size / 8;
+			x = this.cell[0] + this.box_size * column + this.box_size / 2;
+			y = this.bg[1] - this.bg_height / 2;
+			var add = this.vertex(x, y, color, parity, cur);
+			backgrounds += add[0];
+			nodedata += add[1];
+			
+			if (fold) this.columns -= 1;
+			
+		}
+		
+		document.getElementById('nodebgs').innerHTML += backgrounds;
+		document.getElementById('graphnodes').innerHTML += nodedata;
+		
+	}
+
+}
Binary file mercurial/templates/static/hgicon.png has changed
Binary file mercurial/templates/static/hglogo.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/static/style-coal.css	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,265 @@
+body {
+  margin: 0;
+  padding: 0;
+  background: black url(background.png) repeat-x;
+  font-family: sans-serif;
+}
+
+.container {
+  padding-right: 150px;
+}
+
+.main {
+  position: relative;
+  background: white;
+  padding: 2em;
+  border-right: 15px solid black;
+  border-bottom: 15px solid black;
+}
+
+#.main {
+  width: 98%;
+}
+
+.overflow {
+  width: 100%;
+  overflow: auto;
+}
+
+.menu {
+  background: #999;
+  padding: 10px;
+  width: 75px;
+  margin: 0;
+  font-size: 80%;
+  text-align: left;
+  position: fixed;
+  top: 27px;
+  left: auto;
+  right: 27px;
+}
+
+#.menu {
+  position: absolute !important;
+  top:expression(eval(document.body.scrollTop + 27));
+}
+
+.menu ul {
+  list-style: none;
+  padding: 0;
+  margin: 10px 0 0 0;
+}
+
+.menu li {
+  margin-bottom: 3px;
+  padding: 2px 4px;
+  background: white;
+  color: black;
+  font-weight: normal;
+}
+
+.menu li.active {
+  background: black;
+  color: white;
+}
+
+.menu img {
+  width: 75px;
+  height: 90px;
+  border: 0;
+}
+
+.menu a { color: black; display: block; }
+
+.search {
+  position: absolute;
+  top: .7em;
+  right: 2em;
+}
+
+form.search div#hint {
+  display: none;
+  position: absolute;
+  top: 40px;
+  right: 0px;
+  width: 190px;
+  padding: 5px;
+  background: #ffc;
+  font-size: 70%;
+  border: 1px solid yellow;
+  -moz-border-radius: 5px; /* this works only in camino/firefox */
+  -webkit-border-radius: 5px; /* this is just for Safari */
+}
+
+form.search:hover div#hint { display: block; }
+
+a { text-decoration:none; }
+.age { white-space:nowrap; }
+.date { white-space:nowrap; }
+.indexlinks { white-space:nowrap; }
+.parity0 { background-color: #f0f0f0; }
+.parity1 { background-color: white; }
+.plusline { color: green; }
+.minusline { color: #dc143c; } /* crimson */
+.atline { color: purple; }
+
+.navigate {
+  text-align: right;
+  font-size: 60%;
+  margin: 1em 0;
+}
+
+.tag {
+  color: #999;
+  font-size: 70%;
+  font-weight: normal;
+  margin-left: .5em;
+  vertical-align: baseline;
+}
+
+.branchhead {
+  color: #000;
+  font-size: 80%;
+  font-weight: normal;
+  margin-left: .5em;
+  vertical-align: baseline;
+}
+
+ul#graphnodes .branchhead {
+  font-size: 75%;
+}
+
+.branchname {
+  color: #000;
+  font-size: 60%; 
+  font-weight: normal;
+  margin-left: .5em;
+  vertical-align: baseline;
+}
+
+h3 .branchname {
+  font-size: 80%;
+}
+
+/* Common */
+pre { margin: 0; }
+
+h2 { font-size: 120%; border-bottom: 1px solid #999; }
+h2 a { color: #000; }
+h3 {
+  margin-top: -.7em;
+  font-size: 100%;
+}
+
+/* log and tags tables */
+.bigtable {
+  border-bottom: 1px solid #999;
+  border-collapse: collapse;
+  font-size: 90%;
+  width: 100%;
+  font-weight: normal;
+  text-align: left;
+}
+
+.bigtable td {
+  vertical-align: top;
+}
+
+.bigtable th {
+  padding: 1px 4px;
+  border-bottom: 1px solid #999;
+}
+.bigtable tr { border: none; }
+.bigtable .age { width: 6em; }
+.bigtable .author { width: 12em; }
+.bigtable .description { }
+.bigtable .node { width: 5em; font-family: monospace;}
+.bigtable .lineno { width: 2em; text-align: right;}
+.bigtable .lineno a { color: #999; font-size: smaller; font-family: monospace;}
+.bigtable .permissions { width: 8em; text-align: left;}
+.bigtable .size { width: 5em; text-align: right; }
+.bigtable .annotate { text-align: right; }
+.bigtable td.annotate { font-size: smaller; }
+.bigtable td.source { font-size: inherit; }
+
+.source, .sourcefirst, .sourcelast {
+  font-family: monospace;
+  white-space: pre;
+  padding: 1px 4px;
+  font-size: 90%;
+}
+.sourcefirst { border-bottom: 1px solid #999; font-weight: bold; }
+.sourcelast { border-top: 1px solid #999; }
+.source a { color: #999; font-size: smaller; font-family: monospace;}
+.bottomline { border-bottom: 1px solid #999; }
+
+.fileline { font-family: monospace; }
+.fileline img { border: 0; }
+
+.tagEntry .closed { color: #99f; }
+
+/* Changeset entry */
+#changesetEntry {
+  border-collapse: collapse;
+  font-size: 90%;
+  width: 100%;
+  margin-bottom: 1em;
+}
+
+#changesetEntry th {
+  padding: 1px 4px;
+  width: 4em;
+  text-align: right;
+  font-weight: normal;
+  color: #999;
+  margin-right: .5em;
+  vertical-align: top;
+}
+
+div.description {
+  border-left: 3px solid #999;
+  margin: 1em 0 1em 0;
+  padding: .3em;
+}
+
+/* Graph */
+div#wrapper {
+	position: relative;
+	border-top: 1px solid black;
+	border-bottom: 1px solid black;
+	margin: 0;
+	padding: 0;
+}
+
+canvas {
+	position: absolute;
+	z-index: 5;
+	top: -0.7em;
+	margin: 0;
+}
+
+ul#graphnodes {
+	position: absolute;
+	z-index: 10;
+	top: -1.0em;
+	list-style: none inside none;
+	padding: 0;
+}
+
+ul#nodebgs {
+	list-style: none inside none;
+	padding: 0;
+	margin: 0;
+	top: -0.7em;
+}
+
+ul#graphnodes li, ul#nodebgs li {
+	height: 39px;
+}
+
+ul#graphnodes li .info {
+	display: block;
+	font-size: 70%;
+	position: relative;
+	top: -3px;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/static/style-gitweb.css	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,123 @@
+body { font-family: sans-serif; font-size: 12px; margin:0px; border:solid #d9d8d1; border-width:1px; margin:10px; }
+a { color:#0000cc; }
+a:hover, a:visited, a:active { color:#880000; }
+div.page_header { height:25px; padding:8px; font-size:18px; font-weight:bold; background-color:#d9d8d1; }
+div.page_header a:visited { color:#0000cc; }
+div.page_header a:hover { color:#880000; }
+div.page_nav { padding:8px; }
+div.page_nav a:visited { color:#0000cc; }
+div.page_path { padding:8px; border:solid #d9d8d1; border-width:0px 0px 1px}
+div.page_footer { padding:4px 8px; background-color: #d9d8d1; }
+div.page_footer_text { float:left; color:#555555; font-style:italic; }
+div.page_body { padding:8px; }
+div.title, a.title {
+	display:block; padding:6px 8px;
+	font-weight:bold; background-color:#edece6; text-decoration:none; color:#000000;
+}
+a.title:hover { background-color: #d9d8d1; }
+div.title_text { padding:6px 0px; border: solid #d9d8d1; border-width:0px 0px 1px; }
+div.log_body { padding:8px 8px 8px 150px; }
+.age { white-space:nowrap; }
+span.age { position:relative; float:left; width:142px; font-style:italic; }
+div.log_link {
+	padding:0px 8px;
+	font-size:10px; font-family:sans-serif; font-style:normal;
+	position:relative; float:left; width:136px;
+}
+div.list_head { padding:6px 8px 4px; border:solid #d9d8d1; border-width:1px 0px 0px; font-style:italic; }
+a.list { text-decoration:none; color:#000000; }
+a.list:hover { text-decoration:underline; color:#880000; }
+table { padding:8px 4px; }
+th { padding:2px 5px; font-size:12px; text-align:left; }
+tr.light:hover, .parity0:hover { background-color:#edece6; }
+tr.dark, .parity1 { background-color:#f6f6f0; }
+tr.dark:hover, .parity1:hover { background-color:#edece6; }
+td { padding:2px 5px; font-size:12px; vertical-align:top; }
+td.link { padding:2px 5px; font-family:sans-serif; font-size:10px; }
+td.indexlinks { white-space: nowrap; }
+td.indexlinks a {
+  padding: 2px 5px; line-height: 10px;
+  border: 1px solid;
+  color: #ffffff; background-color: #7777bb;
+  border-color: #aaaadd #333366 #333366 #aaaadd;
+  font-weight: bold;  text-align: center; text-decoration: none;
+  font-size: 10px;
+}
+td.indexlinks a:hover { background-color: #6666aa; }
+div.pre { font-family:monospace; font-size:12px; white-space:pre; }
+div.diff_info { font-family:monospace; color:#000099; background-color:#edece6; font-style:italic; }
+div.index_include { border:solid #d9d8d1; border-width:0px 0px 1px; padding:12px 8px; }
+div.search { margin:4px 8px; position:absolute; top:56px; right:12px }
+.linenr { color:#999999; text-decoration:none }
+div.rss_logo { float: right; white-space: nowrap; }
+div.rss_logo a {
+	padding:3px 6px; line-height:10px;
+	border:1px solid; border-color:#fcc7a5 #7d3302 #3e1a01 #ff954e;
+	color:#ffffff; background-color:#ff6600;
+	font-weight:bold; font-family:sans-serif; font-size:10px;
+	text-align:center; text-decoration:none;
+}
+div.rss_logo a:hover { background-color:#ee5500; }
+pre { margin: 0; }
+span.logtags span {
+	padding: 0px 4px;
+	font-size: 10px;
+	font-weight: normal;
+	border: 1px solid;
+	background-color: #ffaaff;
+	border-color: #ffccff #ff00ee #ff00ee #ffccff;
+}
+span.logtags span.tagtag {
+	background-color: #ffffaa;
+	border-color: #ffffcc #ffee00 #ffee00 #ffffcc;
+}
+span.logtags span.branchtag {
+	background-color: #aaffaa;
+	border-color: #ccffcc #00cc33 #00cc33 #ccffcc;
+}
+span.logtags span.inbranchtag {
+	background-color: #d5dde6;
+	border-color: #e3ecf4 #9398f4 #9398f4 #e3ecf4;
+}
+
+/* Graph */
+div#wrapper {
+	position: relative;
+	margin: 0;
+	padding: 0;
+	margin-top: 3px;
+}
+
+canvas {
+	position: absolute;
+	z-index: 5;
+	top: -0.9em;
+	margin: 0;
+}
+
+ul#nodebgs {
+	list-style: none inside none;
+	padding: 0;
+	margin: 0;
+	top: -0.7em;
+}
+
+ul#graphnodes li, ul#nodebgs li {
+	height: 39px;
+}
+
+ul#graphnodes {
+	position: absolute;
+	z-index: 10;
+	top: -0.8em;
+	list-style: none inside none;
+	padding: 0;
+}
+
+ul#graphnodes li .info {
+	display: block;
+	font-size: 100%;
+	position: relative;
+	top: -3px;
+	font-style: italic;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/static/style-monoblue.css	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,472 @@
+/*** Initial Settings ***/
+* {
+  margin: 0;
+  padding: 0;
+  font-weight: normal;
+  font-style: normal;
+}
+
+html {
+  font-size: 100%;
+  font-family: sans-serif;
+}
+
+body {
+  font-size: 77%;
+  margin: 15px 50px;
+  background: #4B4B4C;
+}
+
+a {
+  color:#0000cc;
+  text-decoration: none;
+}
+/*** end of Initial Settings ***/
+
+
+/** common settings **/
+div#container {
+  background: #FFFFFF;
+  position: relative;
+  color: #666;
+}
+
+div.page-header {
+  padding: 50px 20px 0;
+  background: #006699 top left repeat-x;
+  position: relative;
+}
+  div.page-header h1 {
+    margin: 10px 0 30px;
+    font-size: 1.8em;
+    font-weight: bold;
+    font-family: osaka,'MS P Gothic', Georgia, serif;
+    letter-spacing: 1px;
+    color: #DDD;
+  }
+  div.page-header h1 a {
+    font-weight: bold;
+    color: #FFF;
+  }
+  div.page-header a {
+    text-decoration: none;
+  }
+
+  div.page-header form {
+    position: absolute;
+    margin-bottom: 2px;
+    bottom: 0;
+    right: 20px;
+  }
+  div.page-header form label {
+    color: #DDD;
+  }
+  div.page-header form input {
+    padding: 2px;
+    border: solid 1px #DDD;
+  }
+  div.page-header form dl {
+    overflow: hidden;
+  }
+  div.page-header form dl dt {
+    font-size: 1.2em;
+  }
+  div.page-header form dl dt,
+  div.page-header form dl dd {
+    margin: 0 0 0 5px;
+    float: left;
+    height: 24px;
+    line-height: 20px;
+  }
+
+  ul.page-nav {
+    margin: 10px 0 0 0;
+    list-style-type: none;
+    overflow: hidden;
+    width: 800px;
+  }
+    ul.page-nav li {
+      margin: 0 2px 0 0;
+      float: left;
+      width: 80px;
+      height: 24px;
+      font-size: 1.1em;
+      line-height: 24px;
+      text-align: center;
+    }
+    ul.page-nav li.current {
+      background: #FFF;
+    }
+    ul.page-nav li a {
+      height: 24px;
+      color: #666;
+      background: #DDD;
+      display: block;
+      text-decoration: none;
+    }
+    ul.page-nav li a:hover {
+      color:#333;
+      background: #FFF;
+    }
+
+ul.submenu {
+  margin: 10px 0 -10px 20px;
+  list-style-type: none;
+}
+ul.submenu li {
+  margin: 0 10px 0 0;
+  font-size: 1.2em;
+  display: inline;
+}
+
+h2 {
+  margin: 20px 0 10px;
+  height: 30px;
+  line-height: 30px;
+  text-indent: 20px;
+  background: #FFF;
+  font-size: 1.2em;
+  border-top: dotted 1px #D5E1E6;
+  font-weight: bold;
+}
+h2.no-link {
+  color:#006699;
+}
+h2.no-border {
+  color: #FFF;
+  background: #006699;
+  border: 0;
+}
+h2 a {
+  font-weight:bold;
+  color:#006699;
+}
+
+div.page-path {
+  text-align: right;
+  padding: 20px 30px 10px 0;
+  border:solid #d9d8d1;
+  border-width:0px 0px 1px;
+  font-size: 1.2em;
+}
+
+div.page-footer {
+  margin: 50px 0 0;
+  position: relative;
+}
+  div.page-footer p {
+    position: relative;
+    left: 20px;
+    bottom: 5px;
+    font-size: 1.2em;
+  }
+
+  ul.rss-logo {
+    position: absolute;
+    top: -10px;
+    right: 20px;
+    height: 20px;
+    list-style-type: none;
+  }
+  ul.rss-logo li {
+    display: inline;
+  }
+  ul.rss-logo li a {
+    padding: 3px 6px;
+    line-height: 10px;
+    border:1px solid;
+    border-color:#fcc7a5 #7d3302 #3e1a01 #ff954e;
+    color:#ffffff;
+    background-color:#ff6600;
+    font-weight:bold;
+    font-family:sans-serif;
+    font-size:10px;
+    text-align:center;
+    text-decoration:none;
+  }
+  div.rss-logo li a:hover {
+    background-color:#ee5500;
+  }
+
+p.normal {
+  margin: 20px 0 20px 30px;
+  font-size: 1.2em;
+}
+
+table {
+  margin: 10px 0 0 20px;
+  width: 95%;
+  border-collapse: collapse;
+}
+table tr td {
+  font-size: 1.1em;
+}
+table tr td.nowrap {
+  white-space: nowrap;
+}
+/*
+table tr.parity0:hover,
+table tr.parity1:hover {
+  background: #D5E1E6;
+}
+*/
+table tr.parity0 {
+  background: #F1F6F7;
+}
+table tr.parity1 {
+  background: #FFFFFF;
+}
+table tr td {
+  padding: 5px 5px;
+}
+table.annotated tr td {
+  padding: 0px 5px;
+}
+
+span.logtags span {
+  padding: 2px 6px;
+  font-weight: normal;
+  font-size: 11px;
+  border: 1px solid;
+  background-color: #ffaaff;
+  border-color: #ffccff #ff00ee #ff00ee #ffccff;
+}
+span.logtags span.tagtag {
+  background-color: #ffffaa;
+  border-color: #ffffcc #ffee00 #ffee00 #ffffcc;
+}
+span.logtags span.branchtag {
+  background-color: #aaffaa;
+  border-color: #ccffcc #00cc33 #00cc33 #ccffcc;
+}
+span.logtags span.inbranchtag {
+  background-color: #d5dde6;
+  border-color: #e3ecf4 #9398f4 #9398f4 #e3ecf4;
+}
+
+div.diff pre {
+  margin: 10px 0 0 0;
+}
+div.diff pre span {
+  font-family: monospace;
+  white-space: pre;
+  font-size: 1.2em;
+  padding: 3px 0;
+}
+td.source {
+  white-space: pre;
+  font-family: monospace;
+  margin: 10px 30px 0;
+  font-size: 1.2em;
+  font-family: monospace;
+}
+  div.source div.parity0,
+  div.source div.parity1 {
+    padding: 1px;
+    font-size: 1.2em;
+  }
+  div.source div.parity0 {
+    background: #F1F6F7;
+  }
+  div.source div.parity1 {
+    background: #FFFFFF;
+  }
+div.parity0:hover,
+div.parity1:hover {
+  background: #D5E1E6;
+}
+.linenr {
+  color: #999;
+  text-align: right;
+}
+.lineno {
+  text-align: right;
+}
+.lineno a {
+  color: #999;
+}
+td.linenr {
+  width: 60px;
+}
+
+div#powered-by {
+  position: absolute;
+  width: 75px;
+  top: 15px;
+  right: 20px;
+  font-size: 1.2em;
+}
+div#powered-by a {
+  color: #EEE;
+  text-decoration: none;
+}
+div#powered-by a:hover {
+  text-decoration: underline;
+}
+/*
+div#monoblue-corner-top-left {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 10px;
+  height: 10px;
+  background: url(./monoblue-corner.png) top left no-repeat !important;
+  background: none;
+}
+div#monoblue-corner-top-right {
+  position: absolute;
+  top: 0;
+  right: 0;
+  width: 10px;
+  height: 10px;
+  background: url(./monoblue-corner.png) top right no-repeat !important;
+  background: none;
+}
+div#monoblue-corner-bottom-left {
+  position: absolute;
+  bottom: 0;
+  left: 0;
+  width: 10px;
+  height: 10px;
+  background: url(./monoblue-corner.png) bottom left no-repeat !important;
+  background: none;
+}
+div#monoblue-corner-bottom-right {
+  position: absolute;
+  bottom: 0;
+  right: 0;
+  width: 10px;
+  height: 10px;
+  background: url(./monoblue-corner.png) bottom right no-repeat !important;
+  background: none;
+}
+*/
+/** end of common settings **/
+
+/** summary **/
+dl.overview {
+  margin: 0 0 0 30px;
+  font-size: 1.1em;
+  overflow: hidden;
+}
+  dl.overview dt,
+  dl.overview dd {
+    margin: 5px 0;
+    float: left;
+  }
+  dl.overview dt {
+    clear: left;
+    font-weight: bold;
+    width: 150px;
+  }
+/** end of summary **/
+
+/** chagelog **/
+h3.changelog {
+  margin: 20px 0 5px 30px;
+  padding: 0 0 2px;
+  font-size: 1.4em;
+  border-bottom: dotted 1px #D5E1E6;
+}
+ul.changelog-entry {
+  margin: 0 0 10px 30px;
+  list-style-type: none;
+  position: relative;
+}
+ul.changelog-entry li span.revdate {
+  font-size: 1.1em;
+}
+ul.changelog-entry li.age {
+  position: absolute;
+  top: -25px;
+  right: 10px;
+  font-size: 1.4em;
+  color: #CCC;
+  font-weight: bold;
+  font-style: italic;
+}
+ul.changelog-entry li span.name {
+  font-size: 1.2em;
+  font-weight: bold;
+}
+ul.changelog-entry li.description {
+  margin: 10px 0 0;
+  font-size: 1.1em;
+}
+/** end of changelog **/
+
+/** file **/
+p.files {
+  margin: 0 0 0 20px;
+  font-size: 2.0em;
+  font-weight: bold;
+}
+/** end of file **/
+
+/** changeset **/
+h3.changeset {
+  margin: 20px 0 5px 20px;
+  padding: 0 0 2px;
+  font-size: 1.6em;
+  border-bottom: dotted 1px #D5E1E6;
+}
+p.changeset-age {
+  position: relative;
+}
+p.changeset-age span {
+  position: absolute;
+  top: -25px;
+  right: 10px;
+  font-size: 1.4em;
+  color: #CCC;
+  font-weight: bold;
+  font-style: italic;
+}
+p.description {
+  margin: 10px 30px 0 30px;
+  padding: 10px;
+  border: solid 1px #CCC;
+  font-size: 1.2em;
+}
+/** end of changeset **/
+
+/** canvas **/
+div#wrapper {
+	position: relative;
+    font-size: 1.2em;
+}
+
+canvas {
+	position: absolute;
+	z-index: 5;
+	top: -0.7em;
+}
+
+ul#nodebgs li.parity0 {
+    background: #F1F6F7;
+}
+
+ul#nodebgs li.parity1 {
+    background: #FFFFFF;
+}
+
+ul#graphnodes {
+	position: absolute;
+	z-index: 10;
+	top: 7px;
+	list-style: none inside none;
+}
+
+ul#nodebgs {
+	list-style: none inside none;
+}
+
+ul#graphnodes li, ul#nodebgs li {
+	height: 39px;
+}
+
+ul#graphnodes li .info {
+	display: block;
+	position: relative;
+}
+/** end of canvas **/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/static/style-paper.css	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,254 @@
+body {
+  margin: 0;
+  padding: 0;
+  background: white;
+  font-family: sans-serif;
+}
+
+.container {
+  padding-left: 115px;
+}
+
+.main {
+  position: relative;
+  background: white;
+  padding: 2em 2em 2em 0;
+}
+
+#.main {
+  width: 98%;
+}
+
+.overflow {
+  width: 100%;
+  overflow: auto;
+}
+
+.menu {
+  width: 90px;
+  margin: 0;
+  font-size: 80%;
+  text-align: left;
+  position: absolute;
+  top: 20px;
+  left: 20px;
+  right: auto;
+}
+
+.menu ul {
+  list-style: none;
+  padding: 0;
+  margin: 10px 0 0 0;
+  border-left: 2px solid #999;
+}
+
+.menu li {
+  margin-bottom: 3px;
+  padding: 2px 4px;
+  background: white;
+  color: black;
+  font-weight: normal;
+}
+
+.menu li.active {
+  font-weight: bold;
+}
+
+.menu img {
+  width: 75px;
+  height: 90px;
+  border: 0;
+}
+
+.menu a { color: black; display: block; }
+
+.search {
+  position: absolute;
+  top: .7em;
+  right: 2em;
+}
+
+form.search div#hint {
+  display: none;
+  position: absolute;
+  top: 40px;
+  right: 0px;
+  width: 190px;
+  padding: 5px;
+  background: #ffc;
+  font-size: 70%;
+  border: 1px solid yellow;
+  -moz-border-radius: 5px; /* this works only in camino/firefox */
+  -webkit-border-radius: 5px; /* this is just for Safari */
+}
+
+form.search:hover div#hint { display: block; }
+
+a { text-decoration:none; }
+.age { white-space:nowrap; }
+.date { white-space:nowrap; }
+.indexlinks { white-space:nowrap; }
+.parity0 { background-color: #f0f0f0; }
+.parity1 { background-color: white; }
+.plusline { color: green; }
+.minusline { color: #dc143c; } /* crimson */
+.atline { color: purple; }
+
+.navigate {
+  text-align: right;
+  font-size: 60%;
+  margin: 1em 0;
+}
+
+.tag {
+  color: #999;
+  font-size: 70%;
+  font-weight: normal;
+  margin-left: .5em;
+  vertical-align: baseline;
+}
+
+.branchhead {
+  color: #000;
+  font-size: 80%;
+  font-weight: normal;
+  margin-left: .5em;
+  vertical-align: baseline;
+}
+
+ul#graphnodes .branchhead {
+  font-size: 75%;
+}
+
+.branchname {
+  color: #000;
+  font-size: 60%; 
+  font-weight: normal;
+  margin-left: .5em;
+  vertical-align: baseline;
+}
+
+h3 .branchname {
+  font-size: 80%;
+}
+
+/* Common */
+pre { margin: 0; }
+
+h2 { font-size: 120%; border-bottom: 1px solid #999; }
+h2 a { color: #000; }
+h3 {
+  margin-top: -.7em;
+  font-size: 100%;
+}
+
+/* log and tags tables */
+.bigtable {
+  border-bottom: 1px solid #999;
+  border-collapse: collapse;
+  font-size: 90%;
+  width: 100%;
+  font-weight: normal;
+  text-align: left;
+}
+
+.bigtable td {
+  vertical-align: top;
+}
+
+.bigtable th {
+  padding: 1px 4px;
+  border-bottom: 1px solid #999;
+}
+.bigtable tr { border: none; }
+.bigtable .age { width: 7em; }
+.bigtable .author { width: 12em; }
+.bigtable .description { }
+.bigtable .node { width: 5em; font-family: monospace;}
+.bigtable .permissions { width: 8em; text-align: left;}
+.bigtable .size { width: 5em; text-align: right; }
+.bigtable .annotate { text-align: right; }
+.bigtable td.annotate { font-size: smaller; }
+.bigtable td.source { font-size: inherit; }
+
+.source, .sourcefirst, .sourcelast {
+  font-family: monospace;
+  white-space: pre;
+  padding: 1px 4px;
+  font-size: 90%;
+}
+.sourcefirst { border-bottom: 1px solid #999; font-weight: bold; }
+.sourcelast { border-top: 1px solid #999; }
+.source a { color: #999; font-size: smaller; font-family: monospace;}
+.bottomline { border-bottom: 1px solid #999; }
+
+.fileline { font-family: monospace; }
+.fileline img { border: 0; }
+
+.tagEntry .closed { color: #99f; }
+
+/* Changeset entry */
+#changesetEntry {
+  border-collapse: collapse;
+  font-size: 90%;
+  width: 100%;
+  margin-bottom: 1em;
+}
+
+#changesetEntry th {
+  padding: 1px 4px;
+  width: 4em;
+  text-align: right;
+  font-weight: normal;
+  color: #999;
+  margin-right: .5em;
+  vertical-align: top;
+}
+
+div.description {
+  border-left: 2px solid #999;
+  margin: 1em 0 1em 0;
+  padding: .3em;
+}
+
+/* Graph */
+div#wrapper {
+	position: relative;
+	border-top: 1px solid black;
+	border-bottom: 1px solid black;
+	margin: 0;
+	padding: 0;
+}
+
+canvas {
+	position: absolute;
+	z-index: 5;
+	top: -0.7em;
+	margin: 0;
+}
+
+ul#graphnodes {
+	position: absolute;
+	z-index: 10;
+	top: -1.0em;
+	list-style: none inside none;
+	padding: 0;
+}
+
+ul#nodebgs {
+	list-style: none inside none;
+	padding: 0;
+	margin: 0;
+	top: -0.7em;
+}
+
+ul#graphnodes li, ul#nodebgs li {
+	height: 39px;
+}
+
+ul#graphnodes li .info {
+	display: block;
+	font-size: 70%;
+	position: relative;
+	top: -3px;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/static/style.css	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,105 @@
+a { text-decoration:none; }
+.age { white-space:nowrap; }
+.date { white-space:nowrap; }
+.indexlinks { white-space:nowrap; }
+.parity0 { background-color: #ddd; }
+.parity1 { background-color: #eee; }
+.lineno { width: 60px; color: #aaa; font-size: smaller;
+          text-align: right; }
+.plusline { color: green; }
+.minusline { color: red; }
+.atline { color: purple; }
+.annotate { font-size: smaller; text-align: right; padding-right: 1em; }
+.buttons a {
+  background-color: #666;
+  padding: 2pt;
+  color: white;
+  font-family: sans;
+  font-weight: bold;
+}
+.navigate a {
+  background-color: #ccc;
+  padding: 2pt;
+  font-family: sans;
+  color: black;
+}
+
+.metatag {
+  background-color: #888;
+  color: white;
+  text-align: right;
+}
+
+/* Common */
+pre { margin: 0; }
+
+.logo {
+  float: right;
+  clear: right;
+}
+
+/* Changelog/Filelog entries */
+.logEntry { width: 100%; }
+.logEntry .age { width: 15%; }
+.logEntry th { font-weight: normal; text-align: right; vertical-align: top; }
+.logEntry th.age, .logEntry th.firstline { font-weight: bold; }
+.logEntry th.firstline { text-align: left; width: inherit; }
+
+/* Shortlog entries */
+.slogEntry { width: 100%; }
+.slogEntry .age { width: 8em; }
+.slogEntry td { font-weight: normal; text-align: left; vertical-align: top; }
+.slogEntry td.author { width: 15em; }
+
+/* Tag entries */
+#tagEntries { list-style: none; margin: 0; padding: 0; }
+#tagEntries .tagEntry { list-style: none; margin: 0; padding: 0; }
+
+/* Changeset entry */
+#changesetEntry { }
+#changesetEntry th { font-weight: normal; background-color: #888; color: #fff; text-align: right; }
+#changesetEntry th.files, #changesetEntry th.description { vertical-align: top; }
+
+/* File diff view */
+#filediffEntry { }
+#filediffEntry th { font-weight: normal; background-color: #888; color: #fff; text-align: right; }
+
+/* Graph */
+div#wrapper {
+	position: relative;
+	margin: 0;
+	padding: 0;
+}
+
+canvas {
+	position: absolute;
+	z-index: 5;
+	top: -0.6em;
+	margin: 0;
+}
+
+ul#nodebgs {
+	list-style: none inside none;
+	padding: 0;
+	margin: 0;
+	top: -0.7em;
+}
+
+ul#graphnodes li, ul#nodebgs li {
+	height: 39px;
+}
+
+ul#graphnodes {
+	position: absolute;
+	z-index: 10;
+	top: -0.85em;
+	list-style: none inside none;
+	padding: 0;
+}
+
+ul#graphnodes li .info {
+	display: block;
+	font-size: 70%;
+	position: relative;
+	top: -1px;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/templates/template-vars.txt	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,37 @@
+repo          the name of the repo
+rev           a changeset.manifest revision
+node          a changeset node
+changesets    total number of changesets
+file          a filename
+filerev       a file revision
+filerevs      total number of file revisions
+up            the directory of the relevant file
+path          a path in the manifest, starting with "/"
+basename      a short pathname
+date          a date string
+age           age in hours, days, etc
+line          a line of text (escaped)
+desc          a description (escaped, with breaks)
+shortdesc     a short description (escaped)
+author        a name or email addressv(obfuscated)
+parent        a list of the parent
+child         a list of the children
+tags          a list of tag
+
+header        the global page header
+footer        the global page footer
+
+files         a list of file links
+file_copies   a list of pairs of name, source filenames
+dirs          a set of directory links
+diff          a diff of one or more files
+annotate      an annotated file
+entries       the entries relevant to the page
+
+Templates and commands:
+  changelog(rev) - a page for browsing changesets
+    naventry - a link for jumping to a changeset number
+    filenodelink - jump to file diff
+    fileellipses - printed after maxfiles
+    changelogentry - an entry in the log
+  manifest - browse a manifest as a directory tree
--- a/mercurial/ui.py	Wed Dec 23 13:09:11 2009 +0100
+++ b/mercurial/ui.py	Wed Dec 23 13:12:36 2009 +0100
@@ -29,8 +29,11 @@
             self._ocfg = src._ocfg.copy()
             self._trustusers = src._trustusers.copy()
             self._trustgroups = src._trustgroups.copy()
+            self.environ = src.environ
             self.fixconfig()
         else:
+            # shared read-only environment
+            self.environ = os.environ
             # we always trust global config files
             for f in util.rcpath():
                 self.readconfig(f, trust=True)
@@ -250,7 +253,13 @@
     def interactive(self):
         i = self.configbool("ui", "interactive", None)
         if i is None:
-            return sys.stdin.isatty()
+            try:
+                return sys.stdin.isatty()
+            except AttributeError:
+                # some environments replace stdin without implementing isatty
+                # usually those are non-interactive
+                return False
+
         return i
 
     def _readline(self, prompt=''):
--- a/setup.py	Wed Dec 23 13:09:11 2009 +0100
+++ b/setup.py	Wed Dec 23 13:12:36 2009 +0100
@@ -44,7 +44,7 @@
 
 # simplified version of distutils.ccompiler.CCompiler.has_function
 # that actually removes its temporary files.
-def has_function(cc, funcname):
+def hasfunction(cc, funcname):
     tmpdir = tempfile.mkdtemp(prefix='hg-install-')
     devnull = oldstderr = None
     try:
@@ -165,13 +165,7 @@
 except ImportError:
     version = 'unknown'
 
-class install_package_data(install_data):
-    def finalize_options(self):
-        self.set_undefined_options('install',
-                                   ('install_lib', 'install_dir'))
-        install_data.finalize_options(self)
-
-class build_mo(build):
+class hgbuildmo(build):
 
     description = "build translations (.mo files)"
 
@@ -193,22 +187,23 @@
             pofile = join(podir, po)
             modir = join('locale', po[:-3], 'LC_MESSAGES')
             mofile = join(modir, 'hg.mo')
-            cmd = ['msgfmt', '-v', '-o', mofile, pofile]
+            mobuildfile = join('mercurial', mofile)
+            cmd = ['msgfmt', '-v', '-o', mobuildfile, pofile]
             if sys.platform != 'sunos5':
                 # msgfmt on Solaris does not know about -c
                 cmd.append('-c')
-            self.mkpath(modir)
-            self.make_file([pofile], mofile, spawn, (cmd,))
-            self.distribution.data_files.append((join('mercurial', modir),
-                                                 [mofile]))
+            self.mkpath(join('mercurial', modir))
+            self.make_file([pofile], mobuildfile, spawn, (cmd,))
 
-build.sub_commands.append(('build_mo', None))
+# Insert hgbuildmo first so that files in mercurial/locale/ are found
+# when build_py is run next.
+build.sub_commands.insert(0, ('build_mo', None))
 
 Distribution.pure = 0
 Distribution.global_options.append(('pure', None, "use pure (slow) Python "
                                     "code instead of C extensions"))
 
-class hg_build_py(build_py):
+class hgbuildpy(build_py):
 
     def finalize_options(self):
         build_py.finalize_options(self)
@@ -230,11 +225,10 @@
             else:
                 yield module
 
-cmdclass = {'install_data': install_package_data,
-            'build_mo': build_mo,
-            'build_py': hg_build_py}
+cmdclass = {'build_mo': hgbuildmo,
+            'build_py': hgbuildpy}
 
-ext_modules=[
+extmodules = [
     Extension('mercurial.base85', ['mercurial/base85.c']),
     Extension('mercurial.bdiff', ['mercurial/bdiff.c']),
     Extension('mercurial.diffhelpers', ['mercurial/diffhelpers.c']),
@@ -250,18 +244,26 @@
     # The inotify extension is only usable with Linux 2.6 kernels.
     # You also need a reasonably recent C library.
     cc = new_compiler()
-    if has_function(cc, 'inotify_add_watch'):
-        ext_modules.append(Extension('hgext.inotify.linux._inotify',
+    if hasfunction(cc, 'inotify_add_watch'):
+        extmodules.append(Extension('hgext.inotify.linux._inotify',
                                      ['hgext/inotify/linux/_inotify.c']))
         packages.extend(['hgext.inotify', 'hgext.inotify.linux'])
 
+packagedata = {'mercurial': ['locale/*/LC_MESSAGES/hg.mo',
+                             'help/*.txt']}
+
+def ordinarypath(p):
+    return p and p[0] != '.' and p[-1] != '~'
+
+for root in ('templates', ):
+    for curdir, dirs, files in os.walk(os.path.join('mercurial', root)):
+        curdir = curdir.split(os.sep, 1)[1]
+        dirs[:] = filter(ordinarypath, dirs)
+        for f in filter(ordinarypath, files):
+            f = os.path.join(curdir, f)
+            packagedata['mercurial'].append(f)
+
 datafiles = []
-for root in ('templates', 'i18n', 'help'):
-    for dir, dirs, files in os.walk(root):
-        dirs[:] = [x for x in dirs if not x.startswith('.')]
-        files = [x for x in files if not x.startswith('.')]
-        datafiles.append((os.path.join('mercurial', dir),
-                          [os.path.join(dir, file_) for file_ in files]))
 
 setup(name='mercurial',
       version=version,
@@ -272,8 +274,9 @@
       license='GNU GPL',
       scripts=scripts,
       packages=packages,
-      ext_modules=ext_modules,
+      ext_modules=extmodules,
       data_files=datafiles,
+      package_data=packagedata,
       cmdclass=cmdclass,
       options=dict(py2exe=dict(packages=['hgext', 'email']),
                    bdist_mpkg=dict(zipdist=True,
--- a/templates/atom/changelog.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-{header}
- <!-- Changelog -->
- <id>{urlbase}{url}</id>
- <link rel="self" href="{urlbase}{url}atom-log"/>
- <link rel="alternate" href="{urlbase}{url}"/>
- <title>{repo|escape} Changelog</title>
- {latestentry%feedupdated}
-
-{entries%changelogentry}
-</feed>
--- a/templates/atom/changelogentry.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
- <entry>
-  <title>{desc|strip|firstline|strip|escape|nonempty}</title>
-  <id>{urlbase}{url}#changeset-{node}</id>
-  <link href="{urlbase}{url}rev/{node|short}"/>
-  <author>
-   <name>{author|person|escape}</name>
-   <email>{author|email|obfuscate}</email>
-  </author>
-  <updated>{date|rfc3339date}</updated>
-  <published>{date|rfc3339date}</published>
-  <content type="xhtml">
-   <div xmlns="http://www.w3.org/1999/xhtml">
-    <pre xml:space="preserve">{desc|escape|nonempty}</pre>
-   </div>
-  </content>
- </entry>
--- a/templates/atom/error.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-{header}
- <!-- Error -->
- <id>{urlbase}{url}</id>
- <link rel="self" href="{urlbase}{url}atom-log"/>
- <link rel="alternate" href="{urlbase}{url}"/>
- <title>Error</title>
- <updated>1970-01-01T00:00:00+00:00</updated>
- <entry>
-  <title>Error</title>
-  <id>http://mercurial.selenic.com/#error</id>
-  <author>
-    <name>mercurial</name>
-  </author>
-  <updated>1970-01-01T00:00:00+00:00</updated>
-  <content type="text">{error|escape}</content>
- </entry>
-</feed>
--- a/templates/atom/filelog.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-{header}
- <id>{urlbase}{url}atom-log/tip/{file|escape}</id>
- <link rel="self" href="{urlbase}{url}atom-log/tip/{file|urlescape}"/>
- <title>{repo|escape}: {file|escape} history</title>
- {latestentry%feedupdated}
-
-{entries%changelogentry}
-</feed>
--- a/templates/atom/header.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="{encoding}"?>
-<feed xmlns="http://www.w3.org/2005/Atom">
\ No newline at end of file
--- a/templates/atom/map	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-default = 'changelog'
-feedupdated = '<updated>{date|rfc3339date}</updated>'
-mimetype = 'application/atom+xml; charset={encoding}'
-header = header.tmpl
-changelog = changelog.tmpl
-changelogentry = changelogentry.tmpl
-filelog = filelog.tmpl
-filelogentry = filelogentry.tmpl
-tags = tags.tmpl
-tagentry = tagentry.tmpl
-error = error.tmpl
--- a/templates/atom/tagentry.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
- <entry>
-  <title>{tag|escape}</title>
-  <link rel="alternate" href="{urlbase}{url}rev/{node|short}"/>
-  <id>{urlbase}{url}#tag-{node}</id>
-  <updated>{date|rfc3339date}</updated>
-  <published>{date|rfc3339date}</published>
-  <content type="text">{tag|strip|escape}</content>
- </entry>
--- a/templates/atom/tags.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-{header}
- <id>{urlbase}{url}</id>
- <link rel="self" href="{urlbase}{url}atom-tags"/>
- <link rel="alternate" href="{urlbase}{url}tags"/>
- <title>{repo|escape}: tags</title>
- <summary>{repo|escape} tag history</summary>
- <author><name>Mercurial SCM</name></author>
- {latestentry%feedupdated}
-
-{entriesnotip%tagentry}
-</feed>
--- a/templates/coal/header.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
-<head>
-<link rel="icon" href="{staticurl}hgicon.png" type="image/png" />
-<meta name="robots" content="index, nofollow" />
-<link rel="stylesheet" href="{staticurl}style-coal.css" type="text/css" />
--- a/templates/coal/map	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,191 +0,0 @@
-default = 'shortlog'
-
-mimetype = 'text/html; charset={encoding}'
-header = header.tmpl
-footer = ../paper/footer.tmpl
-search = ../paper/search.tmpl
-
-changelog = ../paper/shortlog.tmpl
-shortlog = ../paper/shortlog.tmpl
-shortlogentry = ../paper/shortlogentry.tmpl
-graph = ../paper/graph.tmpl
-
-naventry = '<a href="{url}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
-navshortentry = '<a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
-navgraphentry = '<a href="{url}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
-filenaventry = '<a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{label|escape}</a> '
-filedifflink = '<a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
-filenodelink = '<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
-filenolink = '{file|escape} '
-fileellipses = '...'
-changelogentry = ../paper/shortlogentry.tmpl
-searchentry = ../paper/shortlogentry.tmpl
-changeset = ../paper/changeset.tmpl
-manifest = ../paper/manifest.tmpl
-
-direntry = '
-  <tr class="fileline parity{parity}">
-    <td class="name">
-      <a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">
-        <img src="{staticurl}coal-folder.png" alt="dir."/> {basename|escape}/
-      </a>
-      <a href="{url}file/{node|short}{path|urlescape}/{emptydirs|urlescape}{sessionvars%urlparameter}">
-        {emptydirs|escape}
-      </a>
-    </td>
-    <td class="size"></td>
-    <td class="permissions">drwxr-xr-x</td>
-  </tr>'
-
-fileentry = '
-  <tr class="fileline parity{parity}">
-    <td class="filename">
-      <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
-        <img src="{staticurl}coal-file.png" alt="file"/> {basename|escape}
-      </a>
-    </td>
-    <td class="size">{size}</td>
-    <td class="permissions">{permissions|permissions}</td>
-  </tr>'
-
-filerevision = ../paper/filerevision.tmpl
-fileannotate = ../paper/fileannotate.tmpl
-filediff = ../paper/filediff.tmpl
-filelog = ../paper/filelog.tmpl
-fileline = '
-  <div class="parity{parity} source"><a href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</div>'
-filelogentry = ../paper/filelogentry.tmpl
-
-annotateline = '
-  <tr class="parity{parity}">
-    <td class="annotate">
-      <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#{targetline}"
-         title="{node|short}: {desc|escape|firstline}">{author|user}@{rev}</a>
-    </td>
-    <td class="source"><a href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</td>
-  </tr>'
-
-diffblock = '<div class="source bottomline parity{parity}"><pre>{lines}</pre></div>'
-difflineplus = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> <span class="plusline">{line|escape}</span>'
-difflineminus = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> <span class="minusline">{line|escape}</span>'
-difflineat = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> <span class="atline">{line|escape}</span>'
-diffline = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}'
-
-changelogparent = '
-  <tr>
-    <th class="parent">parent {rev}:</th>
-    <td class="parent"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
-  </tr>'
-
-changesetparent = '<a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a> '
-
-filerevparent = '<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{rename%filerename}{node|short}</a> '
-filerevchild = '<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a> '
-
-filerename = '{file|escape}@'
-filelogrename = '
-  <tr>
-    <th>base:</th>
-    <td>
-      <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
-        {file|escape}@{node|short}
-      </a>
-    </td>
-  </tr>'
-fileannotateparent = '
-  <tr>
-    <td class="metatag">parent:</td>
-    <td>
-      <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
-        {rename%filerename}{node|short}
-      </a>
-    </td>
-  </tr>'
-changesetchild = ' <a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>'
-changelogchild = '
-  <tr>
-    <th class="child">child</th>
-    <td class="child">
-      <a href="{url}rev/{node|short}{sessionvars%urlparameter}">
-        {node|short}
-      </a>
-    </td>
-  </tr>'
-fileannotatechild = '
-  <tr>
-    <td class="metatag">child:</td>
-    <td>
-      <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
-        {node|short}
-      </a>
-    </td>
-  </tr>'
-tags = ../paper/tags.tmpl
-tagentry = '
-  <tr class="tagEntry parity{parity}">
-    <td>
-      <a href="{url}rev/{node|short}{sessionvars%urlparameter}">
-        {tag|escape}
-      </a>
-    </td>
-    <td class="node">
-      {node|short}
-    </td>
-  </tr>'
-branches = ../paper/branches.tmpl
-branchentry = '
-  <tr class="tagEntry parity{parity}">
-    <td>
-      <a href="{url}shortlog/{node|short}{sessionvars%urlparameter}" class="{status}">
-        {branch|escape}
-      </a>
-    </td>
-    <td class="node">
-      {node|short}
-    </td>
-  </tr>'
-changelogtag = '<span class="tag">{name|escape}</span> '
-changesettag = '<span class="tag">{tag|escape}</span> '
-changelogbranchhead = '<span class="branchhead">{name|escape}</span> '
-changelogbranchname = '<span class="branchname">{name|escape}</span> ' 
-
-filediffparent = '
-  <tr>
-    <th class="parent">parent {rev}:</th>
-    <td class="parent"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
-  </tr>'
-filelogparent = '
-  <tr>
-    <th>parent {rev}:</th>
-    <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
-  </tr>'
-filediffchild = '
-  <tr>
-    <th class="child">child {rev}:</th>
-    <td class="child"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
-  </td>
-  </tr>'
-filelogchild = '
-  <tr>
-    <th>child {rev}:</th>
-    <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
-  </tr>'
-
-indexentry = '
-  <tr class="parity{parity}">
-    <td><a href="{url}{sessionvars%urlparameter}">{name|escape}</a></td>
-    <td>{description}</td>
-    <td>{contact|obfuscate}</td>
-    <td class="age">{lastchange|age} ago</td>
-    <td class="indexlinks">{archives%indexarchiveentry}</td>
-  </tr>\n'
-indexarchiveentry = '<a href="{url}archive/{node|short}{extension|urlescape}">&nbsp;&darr;{type|escape}</a>'
-index = ../paper/index.tmpl
-archiveentry = '
-  <li>
-    <a href="{url}archive/{node|short}{extension|urlescape}">{type|escape}</a>
-  </li>'
-notfound = ../paper/notfound.tmpl
-error = ../paper/error.tmpl
-urlparameter = '{separator}{name}={value|urlescape}'
-hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
--- a/templates/gitweb/branches.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-{header}
-<title>{repo|escape}: Branches</title>
-<link rel="alternate" type="application/atom+xml"
-   href="{url}atom-tags" title="Atom feed for {repo|escape}"/>
-<link rel="alternate" type="application/rss+xml"
-   href="{url}rss-tags" title="RSS feed for {repo|escape}"/>
-</head>
-<body>
-
-<div class="page_header">
-<a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / branches
-</div>
-
-<div class="page_nav">
-<a href="{url}summary{sessionvars%urlparameter}">summary</a> |
-<a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
-<a href="{url}log{sessionvars%urlparameter}">changelog</a> |
-<a href="{url}graph{sessionvars%urlparameter}">graph</a> |
-<a href="{url}tags{sessionvars%urlparameter}">tags</a> |
-branches |
-<a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
-<br/>
-</div>
-
-<div class="title">&nbsp;</div>
-<table cellspacing="0">
-{entries%branchentry}
-</table>
-
-{footer}
--- a/templates/gitweb/changelog.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-{header}
-<title>{repo|escape}: Changelog</title>
-<link rel="alternate" type="application/atom+xml"
-   href="{url}atom-log" title="Atom feed for {repo|escape}"/>
-<link rel="alternate" type="application/rss+xml"
-   href="{url}rss-log" title="RSS feed for {repo|escape}"/>
-</head>
-<body>
-
-<div class="page_header">
-<a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / changelog
-</div>
-
-<form action="{url}log">
-{sessionvars%hiddenformentry}
-<div class="search">
-<input type="text" name="rev"  />
-</div>
-</form>
-
-<div class="page_nav">
-<a href="{url}summary{sessionvars%urlparameter}">summary</a> |
-<a href="{url}shortlog/{rev}{sessionvars%urlparameter}">shortlog</a> |
-changelog |
-<a href="{url}graph{sessionvars%urlparameter}">graph</a> |
-<a href="{url}tags{sessionvars%urlparameter}">tags</a> |
-<a href="{url}branches{sessionvars%urlparameter}">branches</a> |
-<a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry}
-<br/>
-{changenav%naventry}<br/>
-</div>
-
-{entries%changelogentry}
-
-<div class="page_nav">
-{changenav%naventry}<br/>
-</div>
-
-{footer}
--- a/templates/gitweb/changelogentry.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-<div>
-<a class="title" href="{url}rev/{node|short}{sessionvars%urlparameter}"><span class="age">{date|age}</span>{desc|strip|firstline|escape|nonempty}<span class="logtags"> {inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span></a>
-</div>
-<div class="title_text">
-<div class="log_link">
-<a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a><br/>
-</div>
-<i>{author|obfuscate} [{date|rfc822date}] rev {rev}</i><br/>
-</div>
-<div class="log_body">
-{desc|strip|escape|addbreaks|nonempty}
-<br/>
-<br/>
-</div>
--- a/templates/gitweb/changeset.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,50 +0,0 @@
-{header}
-<title>{repo|escape}: changeset {rev}:{node|short}</title>
-<link rel="alternate" type="application/atom+xml"
-   href="{url}atom-log" title="Atom feed for {repo|escape}"/>
-<link rel="alternate" type="application/rss+xml"
-   href="{url}rss-log" title="RSS feed for {repo|escape}"/>
-</head>
-<body>
-
-<div class="page_header">
-<a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / changeset
-</div>
-
-<div class="page_nav">
-<a href="{url}summary{sessionvars%urlparameter}">summary</a> |
-<a href="{url}shortlog/{rev}{sessionvars%urlparameter}">shortlog</a> |
-<a href="{url}log/{rev}{sessionvars%urlparameter}">changelog</a> |
-<a href="{url}graph{sessionvars%urlparameter}">graph</a> |
-<a href="{url}tags{sessionvars%urlparameter}">tags</a> |
-<a href="{url}branches{sessionvars%urlparameter}">branches</a> |
-<a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a> |
-changeset |
-<a href="{url}raw-rev/{node|short}">raw</a> {archives%archiveentry}<br/>
-</div>
-
-<div>
-<a class="title" href="{url}raw-rev/{node|short}">{desc|strip|escape|firstline|nonempty} <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span></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})</td></tr>
-{branch%changesetbranch}
-<tr><td>changeset {rev}</td><td style="font-family:monospace">{node|short}</td></tr>
-{parent%changesetparent}
-{child%changesetchild}
-</table></div>
-
-<div class="page_body">
-{desc|strip|escape|addbreaks|nonempty}
-</div>
-<div class="list_head"></div>
-<div class="title_text">
-<table cellspacing="0">
-{files}
-</table></div>
-
-<div class="page_body">{diff}</div>
-
-{footer}
--- a/templates/gitweb/error.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-{header}
-<title>{repo|escape}: Error</title>
-<link rel="alternate" type="application/atom+xml"
-   href="{url}atom-log" title="Atom feed for {repo|escape}"/>
-<link rel="alternate" type="application/rss+xml"
-   href="{url}rss-log" title="RSS feed for {repo|escape}"/>
-</head>
-<body>
-
-<div class="page_header">
-<a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / error
-</div>
-
-<div class="page_nav">
-<a href="{url}summary{sessionvars%urlparameter}">summary</a> | <a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> | <a href="{url}log{sessionvars%urlparameter}">changelog</a> | <a href="{url}tags{sessionvars%urlparameter}">tags</a> | <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a><br/>
-</div>
-
-<div class="page_body">
-<br/>
-<i>An error occurred while processing your request</i><br/>
-<br/>
-{error|escape}
-</div>
-
-{footer}
--- a/templates/gitweb/fileannotate.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-{header}
-<title>{repo|escape}: {file|escape}@{node|short} (annotated)</title>
-<link rel="alternate" type="application/atom+xml"
-   href="{url}atom-log" title="Atom feed for {repo|escape}"/>
-<link rel="alternate" type="application/rss+xml"
-   href="{url}rss-log" title="RSS feed for {repo|escape}"/>
-</head>
-<body>
-
-<div class="page_header">
-<a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / annotate
-</div>
-
-<div class="page_nav">
-<a href="{url}summary{sessionvars%urlparameter}">summary</a> |
-<a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
-<a href="{url}log{sessionvars%urlparameter}">changelog</a> |
-<a href="{url}graph{sessionvars%urlparameter}">graph</a> |
-<a href="{url}tags{sessionvars%urlparameter}">tags</a> |
-<a href="{url}branches{sessionvars%urlparameter}">branches</a> |
-<a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a> |
-<a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
-<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
-<a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
-annotate |
-<a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
-<a href="{url}raw-annotate/{node|short}/{file|urlescape}">raw</a><br/>
-</div>
-
-<div class="title">{file|escape}</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})</td></tr>
-{branch%filerevbranch}
-<tr>
- <td>changeset {rev}</td>
- <td style="font-family:monospace"><a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td></tr>
-{parent%fileannotateparent}
-{child%fileannotatechild}
-<tr>
- <td>permissions</td>
- <td style="font-family:monospace">{permissions|permissions}</td></tr>
-</table>
-</div>
-
-<div class="page_path">
-{desc|strip|escape|addbreaks|nonempty}
-</div>
-<div class="page_body">
-<table>
-{annotate%annotateline}
-</table>
-</div>
-
-{footer}
--- a/templates/gitweb/filediff.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-{header}
-<title>{repo|escape}: diff {file|escape}</title>
-<link rel="alternate" type="application/atom+xml"
-   href="{url}atom-log" title="Atom feed for {repo|escape}"/>
-<link rel="alternate" type="application/rss+xml"
-   href="{url}rss-log" title="RSS feed for {repo|escape}"/>
-</head>
-<body>
-
-<div class="page_header">
-<a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / diff
-</div>
-
-<div class="page_nav">
-<a href="{url}summary{sessionvars%urlparameter}">summary</a> |
-<a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
-<a href="{url}log{sessionvars%urlparameter}">changelog</a> |
-<a href="{url}graph{sessionvars%urlparameter}">graph</a> |
-<a href="{url}tags{sessionvars%urlparameter}">tags</a> |
-<a href="{url}branches{sessionvars%urlparameter}">branches</a> |
-<a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a> |
-<a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
-<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
-<a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
-<a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
-diff |
-<a href="{url}raw-diff/{node|short}/{file|urlescape}">raw</a><br/>
-</div>
-
-<div class="title">{file|escape}</div>
-
-<table>
-{branch%filerevbranch}
-<tr>
- <td>changeset {rev}</td>
- <td style="font-family:monospace"><a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td></tr>
-{parent%filediffparent}
-{child%filediffchild}
-</table>
-
-<div class="list_head"></div>
-
-<div class="page_body">
-{diff}
-</div>
-
-{footer}
--- a/templates/gitweb/filelog.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-{header}
-<title>{repo|escape}: File revisions</title>
-<link rel="alternate" type="application/atom+xml"
-   href="{url}atom-log" title="Atom feed for {repo|escape}"/>
-<link rel="alternate" type="application/rss+xml"
-   href="{url}rss-log" title="RSS feed for {repo|escape}"/>
-</head>
-<body>
-
-<div class="page_header">
-<a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / file revisions
-</div>
-
-<div class="page_nav">
-<a href="{url}summary{sessionvars%urlparameter}">summary</a> |
-<a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
-<a href="{url}log{sessionvars%urlparameter}">changelog</a> |
-<a href="{url}graph{sessionvars%urlparameter}">graph</a> |
-<a href="{url}tags{sessionvars%urlparameter}">tags</a> |
-<a href="{url}branches{sessionvars%urlparameter}">branches</a> |
-<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
-revisions |
-<a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
-<a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
-<a href="{url}rss-log/{node|short}/{file|urlescape}">rss</a>
-<br/>
-{nav%filenaventry}
-</div>
-
-<div class="title" >{file|urlescape}</div>
-
-<table>
-{entries%filelogentry}
-</table>
-
-<div class="page_nav">
-{nav%filenaventry}
-</div>
-
-{footer}
--- a/templates/gitweb/filerevision.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-{header}
-<title>{repo|escape}: {file|escape}@{node|short}</title>
-<link rel="alternate" type="application/atom+xml"
-   href="{url}atom-log" title="Atom feed for {repo|escape}"/>
-<link rel="alternate" type="application/rss+xml"
-   href="{url}rss-log" title="RSS feed for {repo|escape}"/>
-</head>
-<body>
-
-<div class="page_header">
-<a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / file revision
-</div>
-
-<div class="page_nav">
-<a href="{url}summary{sessionvars%urlparameter}">summary</a> |
-<a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
-<a href="{url}log{sessionvars%urlparameter}">changelog</a> |
-<a href="{url}graph{sessionvars%urlparameter}">graph</a> |
-<a href="{url}tags{sessionvars%urlparameter}">tags</a> |
-<a href="{url}branches{sessionvars%urlparameter}">branches</a> |
-<a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a> |
-<a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
-file |
-<a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
-<a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
-<a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
-<a href="{url}raw-file/{node|short}/{file|urlescape}">raw</a><br/>
-</div>
-
-<div class="title">{file|escape}</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})</td></tr>
-{branch%filerevbranch}
-<tr>
- <td>changeset {rev}</td>
- <td style="font-family:monospace"><a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td></tr>
-{parent%filerevparent}
-{child%filerevchild}
-<tr>
- <td>permissions</td>
- <td style="font-family:monospace">{permissions|permissions}</td></tr>
-</table>
-</div>
-
-<div class="page_path">
-{desc|strip|escape|addbreaks|nonempty}
-</div>
-
-<div class="page_body">
-{text%fileline}
-</div>
-
-{footer}
--- a/templates/gitweb/footer.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-<div class="page_footer">
-<div class="page_footer_text">{repo|escape}</div>
-<div class="rss_logo">
-<a href="{url}rss-log">RSS</a>
-<a href="{url}atom-log">Atom</a>
-</div>
-<br />
-{motd}
-</div>
-</body>
-</html>
--- a/templates/gitweb/graph.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,121 +0,0 @@
-{header}
-<title>{repo|escape}: Graph</title>
-<link rel="alternate" type="application/atom+xml"
-   href="{url}atom-log" title="Atom feed for {repo|escape}"/>
-<link rel="alternate" type="application/rss+xml"
-   href="{url}rss-log" title="RSS feed for {repo|escape}"/>
-<!--[if IE]><script type="text/javascript" src="{staticurl}excanvas.js"></script><![endif]-->
-</head>
-<body>
-
-<div class="page_header">
-<a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / graph
-</div>
-
-<form action="{url}log">
-{sessionvars%hiddenformentry}
-<div class="search">
-<input type="text" name="rev"  />
-</div>
-</form>
-<div class="page_nav">
-<a href="{url}summary{sessionvars%urlparameter}">summary</a> |
-<a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
-<a href="{url}log/{rev}{sessionvars%urlparameter}">changelog</a> |
-graph |
-<a href="{url}tags{sessionvars%urlparameter}">tags</a> |
-<a href="{url}branches{sessionvars%urlparameter}">branches</a> |
-<a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
-<br/>
-<a href="{url}graph/{rev}{lessvars%urlparameter}">less</a>
-<a href="{url}graph/{rev}{morevars%urlparameter}">more</a>
-| {changenav%navgraphentry}<br/>
-</div>
-
-<div class="title">&nbsp;</div>
-
-<noscript>The revision graph only works with JavaScript-enabled browsers.</noscript>
-
-<div id="wrapper">
-<ul id="nodebgs"></ul>
-<canvas id="graph" width="224" height="{canvasheight}"></canvas>
-<ul id="graphnodes"></ul>
-</div>
-
-<script type="text/javascript" src="{staticurl}graph.js"></script>
-<script>
-<!-- hide script content
-
-var data = {jsdata|json};
-var graph = new Graph();
-graph.scale({bg_height});
-
-graph.edge = function(x0, y0, x1, y1, color) {
-	
-	this.setColor(color, 0.0, 0.65);
-	this.ctx.beginPath();
-	this.ctx.moveTo(x0, y0);
-	this.ctx.lineTo(x1, y1);
-	this.ctx.stroke();
-	
-}
-
-var revlink = '<li style="_STYLE"><span class="desc">';
-revlink += '<a class="list" href="{url}rev/_NODEID{sessionvars%urlparameter}" title="_NODEID"><b>_DESC</b></a>';
-revlink += '</span> _TAGS';
-revlink += '<span class="info">_DATE ago, by _USER</span></li>';
-
-graph.vertex = function(x, y, color, parity, cur) {
-	
-	this.ctx.beginPath();
-	color = this.setColor(color, 0.25, 0.75);
-	this.ctx.arc(x, y, radius, 0, Math.PI * 2, true);
-	this.ctx.fill();
-	
-	var bg = '<li class="bg parity' + parity + '"></li>';
-	var left = (this.columns + 1) * this.bg_height;
-	var nstyle = 'padding-left: ' + left + 'px;';
-	var item = revlink.replace(/_STYLE/, nstyle);
-	item = item.replace(/_PARITY/, 'parity' + parity);
-	item = item.replace(/_NODEID/, cur[0]);
-	item = item.replace(/_NODEID/, cur[0]);
-	item = item.replace(/_DESC/, cur[3]);
-	item = item.replace(/_USER/, cur[4]);
-	item = item.replace(/_DATE/, cur[5]);
-	
-	var tagspan = '';
-	if (cur[7].length || (cur[6][0] != 'default' || cur[6][1])) {
-		tagspan = '<span class="logtags">';
-		if (cur[6][1]) {
-			tagspan += '<span class="branchtag" title="' + cur[6][0] + '">';
-			tagspan += cur[6][0] + '</span> ';
-		} else if (!cur[6][1] && cur[6][0] != 'default') {
-			tagspan += '<span class="inbranchtag" title="' + cur[6][0] + '">';
-			tagspan += cur[6][0] + '</span> ';
-		}
-		if (cur[7].length) {
-			for (var t in cur[7]) {
-				var tag = cur[7][t];
-				tagspan += '<span class="tagtag">' + tag + '</span> ';
-			}
-		}
-		tagspan += '</span>';
-	}
-	
-	item = item.replace(/_TAGS/, tagspan);
-	return [bg, item];
-	
-}
-
-graph.render(data);
-
-// stop hiding script -->
-</script>
-
-<div class="page_nav">
-<a href="{url}graph/{rev}{lessvars%urlparameter}">less</a>
-<a href="{url}graph/{rev}{morevars%urlparameter}">more</a>
-| {changenav%navgraphentry}
-</div>
-
-{footer}
--- a/templates/gitweb/header.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="{encoding}"?>
-<!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="{staticurl}hgicon.png" type="image/png" />
-<meta name="robots" content="index, nofollow"/>
-<link rel="stylesheet" href="{staticurl}style-gitweb.css" type="text/css" />
-
--- a/templates/gitweb/index.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-{header}
-<title>Mercurial repositories index</title>
-</head>
-<body>
-
-<div class="page_header">
-    <a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a>
-    Repositories list
-</div>
-
-<table cellspacing="0">
-    <tr>
-        <td><a href="?sort={sort_name}">Name</a></td>
-        <td><a href="?sort={sort_description}">Description</a></td>
-        <td><a href="?sort={sort_contact}">Contact</a></td>
-        <td><a href="?sort={sort_lastchange}">Last change</a></td>
-        <td>&nbsp;</td>
-        <td>&nbsp;</td>
-    </tr>
-    {entries%indexentry}
-</table>
-<div class="page_footer">
-{motd}
-</div>
-</body>
-</html>
--- a/templates/gitweb/manifest.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,38 +0,0 @@
-{header}
-<title>{repo|escape}: files</title>
-<link rel="alternate" type="application/atom+xml"
-   href="{url}atom-log" title="Atom feed for {repo|escape}"/>
-<link rel="alternate" type="application/rss+xml"
-   href="{url}rss-log" title="RSS feed for {repo|escape}"/>
-</head>
-<body>
-
-<div class="page_header">
-<a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / files
-</div>
-
-<div class="page_nav">
-<a href="{url}summary{sessionvars%urlparameter}">summary</a> |
-<a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
-<a href="{url}log{sessionvars%urlparameter}">changelog</a> |
-<a href="{url}graph{sessionvars%urlparameter}">graph</a> |
-<a href="{url}tags{sessionvars%urlparameter}">tags</a> |
-<a href="{url}branches{sessionvars%urlparameter}">branches</a> |
-files |
-<a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> {archives%archiveentry}<br/>
-</div>
-
-<div class="title">{path|escape} <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span></div>
-<table cellspacing="0">
-<tr class="parity{upparity}">
-<td style="font-family:monospace">drwxr-xr-x</td>
-<td style="font-family:monospace"></td>
-<td style="font-family:monospace"></td>
-<td><a href="{url}file/{node|short}{up|urlescape}{sessionvars%urlparameter}">[up]</a></td>
-<td class="link">&nbsp;</td>
-</tr>
-{dentries%direntry}
-{fentries%fileentry}
-</table>
-
-{footer}
--- a/templates/gitweb/map	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,248 +0,0 @@
-default = 'summary'
-mimetype = 'text/html; charset={encoding}'
-header = header.tmpl
-footer = footer.tmpl
-search = search.tmpl
-changelog = changelog.tmpl
-summary = summary.tmpl
-error = error.tmpl
-notfound = notfound.tmpl
-naventry = '<a href="{url}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
-navshortentry = '<a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
-navgraphentry = '<a href="{url}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
-filenaventry = '<a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{label|escape}</a> '
-filedifflink = '<a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
-filenodelink = '
-  <tr class="parity{parity}">
-    <td><a class="list" href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a></td>
-    <td></td>
-    <td class="link">
-      <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
-      <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
-      <a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
-      <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
-    </td>
-  </tr>'
-filenolink = '
-  <tr class="parity{parity}">
-    <td><a class="list" href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a></td>
-    <td></td>
-    <td class="link">
-      file |
-      annotate |
-      <a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
-      <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
-    </td>
-  </tr>'
-fileellipses = '...'
-changelogentry = changelogentry.tmpl
-searchentry = changelogentry.tmpl
-changeset = changeset.tmpl
-manifest = manifest.tmpl
-direntry = '
-  <tr class="parity{parity}">
-    <td style="font-family:monospace">drwxr-xr-x</td>
-    <td style="font-family:monospace"></td>
-    <td style="font-family:monospace"></td>
-    <td>
-      <a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">{basename|escape}</a>
-      <a href="{url}file/{node|short}{path|urlescape}/{emptydirs|urlescape}{sessionvars%urlparameter}">{emptydirs|escape}</a>
-    </td>
-    <td class="link">
-      <a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a>
-    </td>
-  </tr>'
-fileentry = '
-  <tr class="parity{parity}">
-    <td style="font-family:monospace">{permissions|permissions}</td>
-    <td style="font-family:monospace" align=right>{date|isodate}</td>
-    <td style="font-family:monospace" align=right>{size}</td>
-    <td class="list">
-      <a class="list" href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{basename|escape}</a>
-    </td>
-    <td class="link">
-      <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
-      <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
-      <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
-    </td>
-  </tr>'
-filerevision = filerevision.tmpl
-fileannotate = fileannotate.tmpl
-filediff = filediff.tmpl
-filelog = filelog.tmpl
-fileline = '
-  <div style="font-family:monospace" class="parity{parity}">
-    <pre><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {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}{sessionvars%urlparameter}#l{targetline}"
-         title="{node|short}: {desc|escape|firstline}">{author|user}@{rev}</a>
-    </td>
-    <td><pre><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a></pre></td>
-    <td><pre>{line|escape}</pre></td>
-  </tr>'
-difflineplus = '<span style="color:#008800;"><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
-difflineminus = '<span style="color:#cc0000;"><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
-difflineat = '<span style="color:#990099;"><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
-diffline = '<span><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
-changelogparent = '
-  <tr>
-    <th class="parent">parent {rev}:</th>
-    <td class="parent">
-      <a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
-    </td>
-  </tr>'
-changesetbranch = '<tr><td>branch</td><td>{name}</td></tr>'
-changesetparent = '
-  <tr>
-    <td>parent {rev}</td>
-    <td style="font-family:monospace">
-      <a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
-    </td>
-  </tr>'
-filerevbranch = '<tr><td>branch</td><td>{name}</td></tr>'
-filerevparent = '
-  <tr>
-    <td>parent {rev}</td>
-    <td style="font-family:monospace">
-      <a class="list" href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
-        {rename%filerename}{node|short}
-      </a>
-    </td>
-  </tr>'
-filerename = '{file|escape}@'
-filelogrename = '| <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">base</a>'
-fileannotateparent = '
-  <tr>
-    <td>parent {rev}</td>
-    <td style="font-family:monospace">
-      <a class="list" href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
-        {rename%filerename}{node|short}
-      </a>
-    </td>
-  </tr>'
-changelogchild = '
-  <tr>
-    <th class="child">child {rev}:</th>
-    <td class="child"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
-  </tr>'
-changesetchild = '
-  <tr>
-    <td>child {rev}</td>
-    <td style="font-family:monospace">
-      <a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
-    </td>
-  </tr>'
-filerevchild = '
-  <tr>
-    <td>child {rev}</td>
-    <td style="font-family:monospace">
-      <a class="list" href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
-    </tr>'
-fileannotatechild = '
-  <tr>
-    <td>child {rev}</td>
-    <td style="font-family:monospace">
-      <a class="list" href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
-    </tr>'
-tags = tags.tmpl
-tagentry = '
-  <tr class="parity{parity}">
-    <td class="age"><i>{date|age}</i></td>
-    <td><a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}"><b>{tag|escape}</b></a></td>
-    <td class="link">
-      <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
-      <a href="{url}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
-      <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
-    </td>
-  </tr>'
-branches = branches.tmpl
-branchentry = '
-  <tr class="parity{parity}">
-    <td class="age"><i>{date|age}</i></td>
-    <td><a class="list" href="{url}shortlog/{node|short}{sessionvars%urlparameter}"><b>{node|short}</b></a></td>
-    <td class="{status}">{branch|escape}</td>
-    <td class="link">
-      <a href="{url}changeset/{node|short}{sessionvars%urlparameter}">changeset</a> |
-      <a href="{url}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
-      <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
-    </td>
-  </tr>'
-diffblock = '<pre>{lines}</pre>'
-filediffparent = '
-  <tr>
-    <td>parent {rev}</td>
-    <td style="font-family:monospace">
-      <a class="list" href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
-        {node|short}
-      </a>
-    </td>
-  </tr>'
-filelogparent = '
-  <tr>
-    <td align="right">parent {rev}:&nbsp;</td>
-    <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
-  </tr>'
-filediffchild = '
-  <tr>
-    <td>child {rev}</td>
-    <td style="font-family:monospace">
-      <a class="list" href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a>
-    </td>
-  </tr>'
-filelogchild = '
-  <tr>
-    <td align="right">child {rev}:&nbsp;</td>
-    <td><a href="{url}file{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
-  </tr>'
-shortlog = shortlog.tmpl
-graph = graph.tmpl
-tagtag = '<span class="tagtag" title="{name}">{name}</span> '
-branchtag = '<span class="branchtag" title="{name}">{name}</span> '
-inbranchtag = '<span class="inbranchtag" title="{name}">{name}</span> '
-shortlogentry = '
-  <tr class="parity{parity}">
-    <td class="age"><i>{date|age}</i></td>
-    <td><i>{author|person}</i></td>
-    <td>
-      <a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">
-        <b>{desc|strip|firstline|escape|nonempty}</b>
-        <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span>
-      </a>
-    </td>
-    <td class="link" nowrap>
-      <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
-      <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
-    </td>
-  </tr>'
-filelogentry = '
-  <tr class="parity{parity}">
-    <td class="age"><i>{date|age}</i></td>
-    <td>
-      <a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">
-        <b>{desc|strip|firstline|escape|nonempty}</b>
-      </a>
-    </td>
-    <td class="link">
-      <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a>&nbsp;|&nbsp;<a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a>&nbsp;|&nbsp;<a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">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}{sessionvars%urlparameter}">
-        <b>{name|escape}</b>
-      </a>
-    </td>
-    <td>{description}</td>
-    <td>{contact|obfuscate}</td>
-    <td class="age">{lastchange|age}</td>
-    <td class="indexlinks">{archives%indexarchiveentry}</td>
-    <td><div class="rss_logo"><a href="{url}rss-log">RSS</a> <a href="{url}atom-log">Atom</a></div></td>
-  </tr>\n'
-indexarchiveentry = ' <a href="{url}archive/{node|short}{extension}">{type|escape}</a> '
-index = index.tmpl
-urlparameter = '{separator}{name}={value|urlescape}'
-hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
--- a/templates/gitweb/notfound.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-{header}
-<title>Mercurial repository not found</title>
-</head>
-
-<body>
-
-<div class="page_header">
-<a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a> Not found: {repo|escape}
-</div>
-
-<div class="page_body">
-The specified repository "{repo|escape}" is unknown, sorry.
-<br/>
-<br/>
-Please go back to the <a href="{url}">main repository list page</a>.
-</div>
-
-{footer}
--- a/templates/gitweb/search.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-{header}
-<title>{repo|escape}: Search</title>
-<link rel="alternate" type="application/atom+xml"
-   href="{url}atom-log" title="Atom feed for {repo|escape}"/>
-<link rel="alternate" type="application/rss+xml"
-   href="{url}rss-log" title="RSS feed for {repo|escape}"/>
-</head>
-<body>
-
-<div class="page_header">
-<a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / search
-
-<form action="{url}log">
-{sessionvars%hiddenformentry}
-<div class="search">
-<input type="text" name="rev" value="{query|escape}" />
-</div>
-</form>
-</div>
-
-<div class="page_nav">
-<a href="{url}summary{sessionvars%urlparameter}">summary</a> |
-<a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
-<a href="{url}log{sessionvars%urlparameter}">changelog</a> |
-<a href="{url}graph{sessionvars%urlparameter}">graph</a> |
-<a href="{url}tags{sessionvars%urlparameter}">tags</a> |
-<a href="{url}branches{sessionvars%urlparameter}">branches</a> |
-<a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry}
-<br/>
-</div>
-
-<div class="title">searching for {query|escape}</div>
-
-{entries}
-
-{footer}
--- a/templates/gitweb/shortlog.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +0,0 @@
-{header}
-<title>{repo|escape}: Shortlog</title>
-<link rel="alternate" type="application/atom+xml"
-   href="{url}atom-log" title="Atom feed for {repo|escape}"/>
-<link rel="alternate" type="application/rss+xml"
-   href="{url}rss-log" title="RSS feed for {repo|escape}"/>
-</head>
-<body>
-
-<div class="page_header">
-<a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / shortlog
-</div>
-
-<form action="{url}log">
-{sessionvars%hiddenformentry}
-<div class="search">
-<input type="text" name="rev"  />
-</div>
-</form>
-<div class="page_nav">
-<a href="{url}summary{sessionvars%urlparameter}">summary</a> |
-shortlog |
-<a href="{url}log/{rev}{sessionvars%urlparameter}">changelog</a> |
-<a href="{url}graph{sessionvars%urlparameter}">graph</a> |
-<a href="{url}tags{sessionvars%urlparameter}">tags</a> |
-<a href="{url}branches{sessionvars%urlparameter}">branches</a> |
-<a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry}
-<br/>
-{changenav%navshortentry}<br/>
-</div>
-
-<div class="title">&nbsp;</div>
-<table cellspacing="0">
-{entries%shortlogentry}
-</table>
-
-<div class="page_nav">
-{changenav%navshortentry}
-</div>
-
-{footer}
--- a/templates/gitweb/summary.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,58 +0,0 @@
-{header}
-<title>{repo|escape}: Summary</title>
-<link rel="alternate" type="application/atom+xml"
-   href="{url}atom-log" title="Atom feed for {repo|escape}"/>
-<link rel="alternate" type="application/rss+xml"
-   href="{url}rss-log" title="RSS feed for {repo|escape}"/>
-</head>
-<body>
-
-<div class="page_header">
-<a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / summary
-
-<form action="{url}log">
-{sessionvars%hiddenformentry}
-<div class="search">
-<input type="text" name="rev"  />
-</div>
-</form>
-</div>
-
-<div class="page_nav">
-summary |
-<a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
-<a href="{url}log{sessionvars%urlparameter}">changelog</a> |
-<a href="{url}graph{sessionvars%urlparameter}">graph</a> |
-<a href="{url}tags{sessionvars%urlparameter}">tags</a> |
-<a href="{url}branches{sessionvars%urlparameter}">branches</a> |
-<a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry}
-<br/>
-</div>
-
-<div class="title">&nbsp;</div>
-<table cellspacing="0">
-<tr><td>description</td><td>{desc}</td></tr>
-<tr><td>owner</td><td>{owner|obfuscate}</td></tr>
-<tr><td>last change</td><td>{lastchange|rfc822date}</td></tr>
-</table>
-
-<div><a  class="title" href="{url}shortlog{sessionvars%urlparameter}">changes</a></div>
-<table cellspacing="0">
-{shortlog}
-<tr class="light"><td colspan="4"><a class="list" href="{url}shortlog{sessionvars%urlparameter}">...</a></td></tr>
-</table>
-
-<div><a class="title" href="{url}tags{sessionvars%urlparameter}">tags</a></div>
-<table cellspacing="0">
-{tags}
-<tr class="light"><td colspan="3"><a class="list" href="{url}tags{sessionvars%urlparameter}">...</a></td></tr>
-</table>
-
-<div><a class="title" href="#">branches</a></div>
-<table cellspacing="0">
-{branches%branchentry}
-<tr class="light">
-  <td colspan="4"><a class="list"  href="#">...</a></td>
-</tr>
-</table>
-{footer}
--- a/templates/gitweb/tags.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-{header}
-<title>{repo|escape}: Tags</title>
-<link rel="alternate" type="application/atom+xml"
-   href="{url}atom-tags" title="Atom feed for {repo|escape}"/>
-<link rel="alternate" type="application/rss+xml"
-   href="{url}rss-tags" title="RSS feed for {repo|escape}"/>
-</head>
-<body>
-
-<div class="page_header">
-<a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / tags
-</div>
-
-<div class="page_nav">
-<a href="{url}summary{sessionvars%urlparameter}">summary</a> |
-<a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a> |
-<a href="{url}log{sessionvars%urlparameter}">changelog</a> |
-<a href="{url}graph{sessionvars%urlparameter}">graph</a> |
-tags |
-<a href="{url}branches{sessionvars%urlparameter}">branches</a> |
-<a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
-<br/>
-</div>
-
-<div class="title">&nbsp;</div>
-<table cellspacing="0">
-{entries%tagentry}
-</table>
-
-{footer}
--- a/templates/map-cmdline.changelog	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-header = '{date|shortdate}  {author|person}  <{author|email}>\n\n'
-header_verbose = ''
-changeset = '\t* {files|stringify|fill68|tabindent}{desc|fill68|tabindent|strip}\n\t[{node|short}]{tags}\n\n'
-changeset_quiet = '\t* {desc|firstline|fill68|tabindent|strip}\n\n'
-changeset_verbose = '{date|isodate}  {author|person}  <{author|email}>  ({node|short}{tags})\n\n\t* {file_adds|stringify|fill68|tabindent}{file_dels|stringify|fill68|tabindent}{files|stringify|fill68|tabindent}{desc|fill68|tabindent|strip}\n\n'
-start_tags = ' ['
-tag = '{tag}, '
-last_tag = '{tag}]'
-file = '{file}, '
-last_file = '{file}:\n\t'
-file_add = '{file_add}, '
-last_file_add = '{file_add}: new file.\n* '
-file_del = '{file_del}, '
-last_file_del = '{file_del}: deleted file.\n* '
--- a/templates/map-cmdline.compact	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,9 +0,0 @@
-changeset = '{rev}{tags}{parents}   {node|short}   {date|isodate}   {author|user}\n  {desc|firstline|strip}\n\n'
-changeset_quiet = '{rev}:{node|short}\n'
-changeset_verbose = '{rev}{tags}{parents}   {node|short}   {date|isodate}   {author}\n  {desc|strip}\n\n'
-start_tags = '['
-tag = '{tag},'
-last_tag = '{tag}]'
-start_parents = ':'
-parent = '{rev},'
-last_parent = '{rev}'
--- a/templates/map-cmdline.default	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,24 +0,0 @@
-changeset = 'changeset:   {rev}:{node|short}\n{branches}{tags}{parents}user:        {author}\ndate:        {date|date}\nsummary:     {desc|firstline}\n\n'
-changeset_quiet = '{rev}:{node|short}\n'
-changeset_verbose = 'changeset:   {rev}:{node|short}\n{branches}{tags}{parents}user:        {author}\ndate:        {date|date}\n{files}{file_copies}description:\n{desc|strip}\n\n\n'
-changeset_debug = 'changeset:   {rev}:{node}\n{branches}{tags}{parents}{manifest}user:        {author}\ndate:        {date|date}\n{file_mods}{file_adds}{file_dels}{file_copies}{extras}description:\n{desc|strip}\n\n\n'
-start_files = 'files:      '
-file = ' {file}'
-end_files = '\n'
-start_file_mods = 'files:      '
-file_mod = ' {file_mod}'
-end_file_mods = '\n'
-start_file_adds = 'files+:     '
-file_add = ' {file_add}'
-end_file_adds = '\n'
-start_file_dels = 'files-:     '
-file_del = ' {file_del}'
-end_file_dels = '\n'
-start_file_copies = 'copies:     '
-file_copy = ' {name} ({source})'
-end_file_copies = '\n'
-parent = 'parent:      {rev}:{node|formatnode}\n'
-manifest = 'manifest:    {rev}:{node}\n'
-branch = 'branch:      {branch}\n'
-tag = 'tag:         {tag}\n'
-extra = 'extra:       {key}={value|stringescape}\n'
--- a/templates/monoblue/branches.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-{header}
-    <title>{repo|escape}: Branches</title>
-    <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
-    <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
-</head>
-
-<body>
-<div id="container">
-    <div class="page-header">
-        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / Branches</h1>
-
-        <form action="{url}log">
-            {sessionvars%hiddenformentry}
-            <dl class="search">
-                <dt><label>Search: </label></dt>
-                <dd><input type="text" name="rev" /></dd>
-            </dl>
-        </form>
-
-        <ul class="page-nav">
-            <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
-            <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
-            <li><a href="{url}changelog{sessionvars%urlparameter}">changelog</a></li>
-            <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
-            <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
-            <li class="current">branches</li>
-            <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a></li>
-        </ul>
-    </div>
-
-    <h2 class="no-link no-border">tags</h2>
-    <table cellspacing="0">
-{entries%branchentry}
-    </table>
-
-{footer}
--- a/templates/monoblue/changelog.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-{header}
-    <title>{repo|escape}: changelog</title>
-    <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
-    <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
-</head>
-
-<body>
-<div id="container">
-    <div class="page-header">
-        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / changelog</h1>
-
-        <form action="{url}log">
-            {sessionvars%hiddenformentry}
-            <dl class="search">
-                <dt><label>Search: </label></dt>
-                <dd><input type="text" name="rev" /></dd>
-            </dl>
-        </form>
-
-        <ul class="page-nav">
-            <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
-            <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
-            <li class="current">changelog</li>
-            <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
-            <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
-            <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
-            <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry}</li>
-        </ul>
-    </div>
-
-    <h2 class="no-link no-border">changelog</h2>
-    <div>
-    {entries%changelogentry}
-    </div>
-
-    <div class="page-path">
-{changenav%naventry}
-    </div>
-
-{footer}
--- a/templates/monoblue/changelogentry.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-<h3 class="changelog"><a class="title" href="{url}rev/{node|short}{sessionvars%urlparameter}">{desc|strip|firstline|escape|nonempty}<span class="logtags"> {inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span></a></h3>
-<ul class="changelog-entry">
-    <li class="age">{date|age}</li>
-    <li>by <span class="name">{author|obfuscate}</span> <span class="revdate">[{date|rfc822date}] rev {rev}</span></li>
-    <li class="description">{desc|strip|escape|addbreaks|nonempty}</li>
-</ul>
--- a/templates/monoblue/changeset.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,63 +0,0 @@
-{header}
-<title>{repo|escape}: changeset {rev}:{node|short}</title>
-    <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
-    <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
-</head>
-
-<body>
-<div id="container">
-    <div class="page-header">
-        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / files</h1>
-
-        <form action="{url}log">
-            {sessionvars%hiddenformentry}
-            <dl class="search">
-                <dt><label>Search: </label></dt>
-                <dd><input type="text" name="rev" /></dd>
-            </dl>
-        </form>
-
-        <ul class="page-nav">
-            <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
-            <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
-            <li><a href="{url}changelog{sessionvars%urlparameter}">changelog</a></li>
-            <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
-            <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
-            <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
-            <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a></li>
-        </ul>
-    </div>
-
-    <ul class="submenu">
-        <li class="current">changeset</li>
-        <li><a href="{url}raw-rev/{node|short}">raw</a> {archives%archiveentry}</li>
-    </ul>
-
-    <h2 class="no-link no-border">changeset</h2>
-
-    <h3 class="changeset"><a href="{url}raw-rev/{node|short}">{desc|strip|escape|firstline|nonempty} <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span></a></h3>
-    <p class="changeset-age"><span>{date|age}</span></p>
-
-    <dl class="overview">
-        <dt>author</dt>
-        <dd>{author|obfuscate}</dd>
-        <dt>date</dt>
-        <dd>{date|date}</dd>
-        {branch%changesetbranch}
-        <dt>changeset {rev}</dt>
-        <dd>{node|short}</dd>
-        {parent%changesetparent}
-        {child%changesetchild}
-    </dl>
-
-    <p class="description">{desc|strip|escape|addbreaks|nonempty}</p>
-
-    <table>
-    {files}
-    </table>
-
-    <div class="diff">
-    {diff}
-    </div>
-
-{footer}
--- a/templates/monoblue/error.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-{header}
-    <title>{repo|escape}: Error</title>
-    <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
-    <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
-</head>
-
-<body>
-<div id="container">
-    <div class="page-header">
-        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / Not found: {repo|escape}</h1>
-
-        <form action="{url}log">
-            {sessionvars%hiddenformentry}
-            <dl class="search">
-                <dt><label>Search: </label></dt>
-                <dd><input type="text" name="rev" /></dd>
-            </dl>
-        </form>
-
-        <ul class="page-nav">
-            <li class="current">summary</li>
-            <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
-            <li><a href="{url}log{sessionvars%urlparameter}">changelog</a></li>
-            <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
-            <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
-            <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
-            <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a></li>
-        </ul>
-    </div>
-
-    <h2 class="no-link no-border">An error occurred while processing your request</h2>
-    <p class="normal">{error|escape}</p>
-
-{footer}
--- a/templates/monoblue/fileannotate.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,63 +0,0 @@
-{header}
-<title>{repo|escape}: {file|escape}@{node|short} (annotated)</title>
-    <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
-    <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
-</head>
-
-<body>
-<div id="container">
-    <div class="page-header">
-        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / annotate</h1>
-
-        <form action="{url}log">
-            {sessionvars%hiddenformentry}
-            <dl class="search">
-                <dt><label>Search: </label></dt>
-                <dd><input type="text" name="rev" /></dd>
-            </dl>
-        </form>
-
-        <ul class="page-nav">
-            <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
-            <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
-            <li><a href="{url}log{sessionvars%urlparameter}">changelog</a></li>
-            <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
-            <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
-            <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
-            <li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a></li>
-        </ul>
-    </div>
-
-    <ul class="submenu">
-        <li><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a></li>
-        <li><a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a></li>
-        <li class="current">annotate</li>
-        <li><a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a></li>
-        <li><a href="{url}raw-annotate/{node|short}/{file|urlescape}">raw</a></li>
-    </ul>
-
-    <h2 class="no-link no-border">{file|escape}@{node|short} (annotated)</h2>
-    <h3 class="changeset">{file|escape}</h3>
-    <p class="changeset-age"><span>{date|age}</span></p>
-
-    <dl class="overview">
-        <dt>author</dt>
-        <dd>{author|obfuscate}</dd>
-        <dt>date</dt>
-        <dd>{date|date}</dd>
-        {branch%filerevbranch}
-        <dt>changeset {rev}</dt>
-        <dd><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></dd>
-        {parent%fileannotateparent}
-        {child%fileannotatechild}
-        <dt>permissions</dt>
-        <dd>{permissions|permissions}</dd>
-    </dl>
-
-    <p class="description">{desc|strip|escape|addbreaks|nonempty}</p>
-
-    <table class="annotated">
-    {annotate%annotateline}
-    </table>
-
-{footer}
--- a/templates/monoblue/filediff.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,54 +0,0 @@
-{header}
-<title>{repo|escape}: diff {file|escape}</title>
-    <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
-    <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
-</head>
-
-<body>
-<div id="container">
-    <div class="page-header">
-        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / file diff</h1>
-
-        <form action="{url}log">
-            {sessionvars%hiddenformentry}
-            <dl class="search">
-                <dt><label>Search: </label></dt>
-                <dd><input type="text" name="rev" /></dd>
-            </dl>
-        </form>
-
-        <ul class="page-nav">
-            <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
-            <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
-            <li><a href="{url}log{sessionvars%urlparameter}">changelog</a></li>
-            <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
-            <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
-            <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
-            <li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a></li>
-        </ul>
-    </div>
-
-    <ul class="submenu">
-        <li><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a></li>
-        <li><a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a></li>
-        <li><a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a></li>
-        <li class="current">diff</li>
-        <li><a href="{url}raw-diff/{node|short}/{file|urlescape}">raw</a></li>
-    </ul>
-
-    <h2 class="no-link no-border">diff: {file|escape}</h2>
-    <h3 class="changeset">{file|escape}</h3>
-
-    <dl class="overview">
-        {branch%filerevbranch}
-        <dt>changeset {rev}</dt>
-        <dd><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></dd>
-        {parent%filediffparent}
-        {child%filediffchild}
-    </dl>
-
-    <div class="diff">
-    {diff}
-    </div>
-
-{footer}
--- a/templates/monoblue/filelog.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-{header}
-<title>{repo|escape}: File revisions</title>
-    <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
-    <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
-</head>
-
-<body>
-<div id="container">
-    <div class="page-header">
-        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / file revisions</h1>
-
-        <form action="{url}log">
-            {sessionvars%hiddenformentry}
-            <dl class="search">
-                <dt><label>Search: </label></dt>
-                <dd><input type="text" name="rev" /></dd>
-            </dl>
-        </form>
-
-        <ul class="page-nav">
-            <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
-            <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
-            <li><a href="{url}log{sessionvars%urlparameter}">changelog</a></li>
-            <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
-            <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
-            <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
-            <li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a></li>
-        </ul>
-    </div>
-
-    <ul class="submenu">
-        <li><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a></li>
-        <li class="current">revisions</li>
-        <li><a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a></li>
-        <li><a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a></li>
-        <li><a href="{url}rss-log/{node|short}/{file|urlescape}">rss</a></li>
-    </ul>
-
-    <h2 class="no-link no-border">{file|urlescape}</h2>
-
-    <table>
-    {entries%filelogentry}
-    </table>
-
-    <div class="page-path">
-    {nav%filenaventry}
-    </div>
-
-{footer}
--- a/templates/monoblue/filerevision.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,63 +0,0 @@
-{header}
-<title>{repo|escape}: {file|escape}@{node|short}</title>
-    <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
-    <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
-</head>
-
-<body>
-<div id="container">
-    <div class="page-header">
-        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / file revision</h1>
-
-        <form action="{url}log">
-            {sessionvars%hiddenformentry}
-            <dl class="search">
-                <dt><label>Search: </label></dt>
-                <dd><input type="text" name="rev" /></dd>
-            </dl>
-        </form>
-
-        <ul class="page-nav">
-            <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
-            <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
-            <li><a href="{url}changelog{sessionvars%urlparameter}">changelog</a></li>
-            <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
-            <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
-            <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
-            <li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a></li>
-        </ul>
-    </div>
-
-    <ul class="submenu">
-        <li class="current">file</li>
-        <li><a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a></li>
-        <li><a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a></li>
-        <li><a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a></li>
-        <li><a href="{url}raw-file/{node|short}/{file|urlescape}">raw</a></li>
-    </ul>
-
-    <h2 class="no-link no-border">{file|escape}@{node|short}</h2>
-    <h3 class="changeset">{file|escape}</h3>
-    <p class="changeset-age"><span>{date|age}</span></p>
-
-    <dl class="overview">
-        <dt>author</dt>
-        <dd>{author|obfuscate}</dd>
-        <dt>date</dt>
-        <dd>{date|date}</dd>
-        {branch%filerevbranch}
-        <dt>changeset {rev}</dt>
-        <dd><a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></dd>
-        {parent%filerevparent}
-        {child%filerevchild}
-        <dt>permissions</dt>
-        <dd>{permissions|permissions}</dd>
-    </dl>
-
-    <p class="description">{desc|strip|escape|addbreaks|nonempty}</p>
-
-    <div class="source">
-    {text%fileline}
-    </div>
-
-{footer}
--- a/templates/monoblue/footer.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-    <div class="page-footer">
-        <p>Mercurial Repository: {repo|escape}</p>
-        <ul class="rss-logo">
-            <li><a href="{url}rss-log">RSS</a></li>
-            <li><a href="{url}atom-log">Atom</a></li>
-        </ul>
-        {motd}
-    </div>
-
-    <div id="powered-by">
-        <p><a href="http://mercurial.selenic.com/" title="Mercurial"><img src="{staticurl}hglogo.png" width=75 height=90 border=0 alt="mercurial"></a></p>
-    </div>
-
-    <div id="corner-top-left"></div>
-    <div id="corner-top-right"></div>
-    <div id="corner-bottom-left"></div>
-    <div id="corner-bottom-right"></div>
-
-</div>
-
-</body>
-</html>
--- a/templates/monoblue/graph.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,118 +0,0 @@
-{header}
-    <title>{repo|escape}: graph</title>
-    <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
-    <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
-    <!--[if IE]><script type="text/javascript" src="{staticurl}excanvas.js"></script><![endif]-->
-</head>
-
-<body>
-<div id="container">
-    <div class="page-header">
-        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / graph</h1>
-
-        <form action="{url}log">
-            {sessionvars%hiddenformentry}
-            <dl class="search">
-                <dt><label>Search: </label></dt>
-                <dd><input type="text" name="rev" /></dd>
-            </dl>
-        </form>
-
-        <ul class="page-nav">
-            <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
-            <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
-            <li><a href="{url}changelog{sessionvars%urlparameter}">changelog</a></li>
-            <li class="current">graph</li>
-            <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
-            <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
-            <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a></li>
-        </ul>
-    </div>
-
-    <h2 class="no-link no-border">graph</h2>
-
-    <div id="noscript">The revision graph only works with JavaScript-enabled browsers.</div>
-    <div id="wrapper">
-        <ul id="nodebgs"></ul>
-        <canvas id="graph" width="224" height="{canvasheight}"></canvas>
-        <ul id="graphnodes"></ul>
-    </div>
-
-    <script type="text/javascript" src="{staticurl}graph.js"></script>
-    <script>
-    <!-- hide script content
-
-    document.getElementById('noscript').style.display = 'none';
-
-    var data = {jsdata|json};
-    var graph = new Graph();
-    graph.scale({bg_height});
-
-    graph.edge = function(x0, y0, x1, y1, color) {
-
-        this.setColor(color, 0.0, 0.65);
-        this.ctx.beginPath();
-        this.ctx.moveTo(x0, y0);
-        this.ctx.lineTo(x1, y1);
-        this.ctx.stroke();
-
-    }
-
-    var revlink = '<li style="_STYLE"><span class="desc">';
-    revlink += '<a href="{url}rev/_NODEID{sessionvars%urlparameter}" title="_NODEID">_DESC</a>';
-    revlink += '</span>_TAGS<span class="info">_DATE ago, by _USER</span></li>';
-
-    graph.vertex = function(x, y, color, parity, cur) {
-
-        this.ctx.beginPath();
-        color = this.setColor(color, 0.25, 0.75);
-        this.ctx.arc(x, y, radius, 0, Math.PI * 2, true);
-        this.ctx.fill();
-
-        var bg = '<li class="bg parity' + parity + '"></li>';
-        var left = (this.columns + 1) * this.bg_height;
-        var nstyle = 'padding-left: ' + left + 'px;';
-        var item = revlink.replace(/_STYLE/, nstyle);
-        item = item.replace(/_PARITY/, 'parity' + parity);
-        item = item.replace(/_NODEID/, cur[0]);
-        item = item.replace(/_NODEID/, cur[0]);
-	item = item.replace(/_DESC/, cur[3]);
-        item = item.replace(/_USER/, cur[4]);
-        item = item.replace(/_DATE/, cur[5]);
-
-        var tagspan = '';
-        if (cur[7].length || (cur[6][0] != 'default' || cur[6][1])) {
-            tagspan = '<span class="logtags">';
-            if (cur[6][1]) {
-                tagspan += '<span class="branchtag" title="' + cur[6][0] + '">';
-                tagspan += cur[6][0] + '</span> ';
-            } else if (!cur[6][1] && cur[6][0] != 'default') {
-                tagspan += '<span class="inbranchtag" title="' + cur[6][0] + '">';
-                tagspan += cur[6][0] + '</span> ';
-            }
-            if (cur[7].length) {
-                for (var t in cur[7]) {
-                    var tag = cur[7][t];
-                    tagspan += '<span class="tagtag">' + tag + '</span> ';
-                }
-            }
-            tagspan += '</span>';
-        }
-
-        item = item.replace(/_TAGS/, tagspan); 
-        return [bg, item];
-
-    }
-
-    graph.render(data);
-
-    // stop hiding script -->
-    </script>
-
-    <div class="page-path">
-        <a href="{url}graph/{rev}{lessvars%urlparameter}">less</a>
-        <a href="{url}graph/{rev}{morevars%urlparameter}">more</a>
-        | {changenav%navgraphentry}
-    </div>
-
-{footer}
--- a/templates/monoblue/header.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-<!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" lang="en">
-<head>
-    <link rel="icon" href="{staticurl}hgicon.png" type="image/png" />
-    <meta name="robots" content="index, nofollow"/>
-    <link rel="stylesheet" href="{staticurl}style-monoblue.css" type="text/css" />
--- a/templates/monoblue/index.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-{header}
-    <title>{repo|escape}: Mercurial repositories index</title>
-</head>
-
-<body>
-<div id="container">
-    <div class="page-header">
-        <h1>Mercurial Repositories</h1>
-        <ul class="page-nav">
-        </ul>
-    </div>
-    
-    <table cellspacing="0">
-        <tr>
-            <td><a href="?sort={sort_name}">Name</a></td>
-            <td><a href="?sort={sort_description}">Description</a></td>
-            <td><a href="?sort={sort_contact}">Contact</a></td>
-            <td><a href="?sort={sort_lastchange}">Last change</a></td>
-            <td>&nbsp;</td>
-            <td>&nbsp;</td>
-        </tr>
-        {entries%indexentry}
-    </table>
-    <div class="page-footer">
-        {motd}
-    </div>
-
-    <div id="powered-by">
-        <p><a href="http://mercurial.selenic.com/" title="Mercurial"><img src="{staticurl}hglogo.png" width=75 height=90 border=0 alt="mercurial"></a></p>
-    </div>
-
-    <div id="corner-top-left"></div>
-    <div id="corner-top-right"></div>
-    <div id="corner-bottom-left"></div>
-    <div id="corner-bottom-right"></div>
-
-</div>
-</body>
-</html>
--- a/templates/monoblue/manifest.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-{header}
-<title>{repo|escape}: files</title>
-    <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
-    <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
-</head>
-
-<body>
-<div id="container">
-    <div class="page-header">
-        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / files</h1>
-
-        <form action="{url}log">
-            {sessionvars%hiddenformentry}
-            <dl class="search">
-                <dt><label>Search: </label></dt>
-                <dd><input type="text" name="rev" /></dd>
-            </dl>
-        </form>
-
-        <ul class="page-nav">
-            <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
-            <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
-            <li><a href="{url}changelog{sessionvars%urlparameter}">changelog</a></li>
-            <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
-            <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
-            <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
-            <li class="current">files</li>
-        </ul>
-    </div>
-
-    <ul class="submenu">
-        <li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> {archives%archiveentry}</li>
-        {archives%archiveentry}
-    </ul>
-
-    <h2 class="no-link no-border">files</h2>
-    <p class="files">{path|escape} <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span></p>
-
-    <table>
-        <tr class="parity{upparity}">
-            <td>drwxr-xr-x</td>
-            <td></td>
-            <td></td>
-            <td><a href="{url}file/{node|short}{up|urlescape}{sessionvars%urlparameter}">[up]</a></td>
-            <td class="link">&nbsp;</td>
-        </tr>
-        {dentries%direntry}
-        {fentries%fileentry}
-    </table>
-
-{footer}
--- a/templates/monoblue/map	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,214 +0,0 @@
-default = 'summary'
-mimetype = 'text/html; charset={encoding}'
-header = header.tmpl
-footer = footer.tmpl
-search = search.tmpl
-changelog = changelog.tmpl
-summary = summary.tmpl
-error = error.tmpl
-notfound = notfound.tmpl
-naventry = '<a href="{url}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
-navshortentry = '<a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
-navgraphentry = '<a href="{url}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
-filenaventry = '<a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{label|escape}</a>'
-filedifflink = '<a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
-filenodelink = '
-  <tr class="parity{parity}">
-    <td><a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a></td>
-    <td></td>
-    <td>
-      <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
-      <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a> |
-      <a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
-      <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
-    </td>
-  </tr>'
-filenolink = '
-  <tr class="parity{parity}">
-    <td>
-      <a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a></td><td></td><td>file |
-      annotate |
-      <a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a> |
-      <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
-    </td>
-  </tr>'
-fileellipses = '...'
-changelogentry = changelogentry.tmpl
-searchentry = changelogentry.tmpl
-changeset = changeset.tmpl
-manifest = manifest.tmpl
-direntry = '
-  <tr class="parity{parity}">
-    <td>drwxr-xr-x</td>
-    <td></td>
-    <td></td>
-    <td><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">{basename|escape}</a></td>
-    <td><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a></td>
-  </tr>'
-fileentry = '
-  <tr class="parity{parity}">
-    <td>{permissions|permissions}</td>
-    <td>{date|isodate}</td>
-    <td>{size}</td>
-    <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{basename|escape}</a></td>
-    <td>
-      <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a> |
-      <a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a> |
-      <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
-    </td>
-  </tr>'
-filerevision = filerevision.tmpl
-fileannotate = fileannotate.tmpl
-filediff = filediff.tmpl
-filelog = filelog.tmpl
-fileline = '
-  <div style="font-family:monospace" class="parity{parity}">
-    <pre><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</pre>
-  </div>'
-annotateline = '
-  <tr class="parity{parity}">
-    <td class="linenr">
-      <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#{targetline}"
-         title="{node|short}: {desc|escape|firstline}">{author|user}@{rev}</a>
-    </td>
-    <td class="lineno">
-      <a href="#{lineid}" id="{lineid}">{linenumber}</a>
-    </td>
-    <td class="source">{line|escape}</td>
-  </tr>'
-difflineplus = '<span style="color:#008800;"><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
-difflineminus = '<span style="color:#cc0000;"><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
-difflineat = '<span style="color:#990099;"><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
-diffline = '<span><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
-changelogparent = '
-  <tr>
-    <th class="parent">parent {rev}:</th>
-    <td class="parent">
-      <a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
-    </td>
-  </tr>'
-changesetbranch = '<dt>branch</dt><dd>{name}</dd>'
-changesetparent = '
-  <dt>parent {rev}</dt>
-  <dd><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></dd>'
-filerevbranch = '<dt>branch</dt><dd>{name}</dd>'
-filerevparent = '
-  <dt>parent {rev}</dt>
-  <dd>
-    <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
-      {rename%filerename}{node|short}
-    </a>
-  </dd>'
-filerename = '{file|escape}@'
-filelogrename = '| <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">base</a>'
-fileannotateparent = '
-  <dt>parent {rev}</dt>
-  <dd>
-    <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
-      {rename%filerename}{node|short}
-    </a>
-  </dd>'
-changelogchild = '
-  <dt>child {rev}:</dt>
-  <dd><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></dd>'
-changesetchild = '
-  <dt>child {rev}</dt>
-  <dd><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></dd>'
-filerevchild = '
-  <dt>child {rev}</dt>
-  <dd>
-    <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a>
-  </dd>'
-fileannotatechild = '
-  <dt>child {rev}</dt>
-  <dd>
-    <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a>
-  </dd>'
-tags = tags.tmpl
-tagentry = '
-  <tr class="parity{parity}">
-    <td class="nowrap">{date|age}</td>
-    <td><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{tag|escape}</a></td>
-    <td class="nowrap">
-      <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
-      <a href="{url}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
-      <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
-    </td>
-  </tr>'
-branches = branches.tmpl
-branchentry = '
-  <tr class="parity{parity}">
-    <td class="nowrap">{date|age}</td>
-    <td><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
-    <td class="{status}">{branch|escape}</td>
-    <td class="nowrap">
-      <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
-      <a href="{url}log/{node|short}{sessionvars%urlparameter}">changelog</a> |
-      <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
-    </td>
-  </tr>'
-diffblock = '<pre>{lines}</pre>'
-filediffparent = '
-  <dt>parent {rev}</dt>
-  <dd><a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></dd>'
-filelogparent = '
-  <tr>
-    <td align="right">parent {rev}:&nbsp;</td>
-    <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
-  </tr>'
-filediffchild = '
-  <dt>child {rev}</dt>
-  <dd><a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></dd>'
-filelogchild = '
-  <tr>
-    <td align="right">child {rev}:&nbsp;</td>
-    <td><a href="{url}file{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
-  </tr>'
-shortlog = shortlog.tmpl
-tagtag = '<span class="tagtag" title="{name}">{name}</span> '
-branchtag = '<span class="branchtag" title="{name}">{name}</span> '
-inbranchtag = '<span class="inbranchtag" title="{name}">{name}</span> '
-shortlogentry = '
-  <tr class="parity{parity}">
-    <td class="nowrap">{date|age}</td>
-    <td>{author|person}</td>
-    <td>
-      <a href="{url}rev/{node|short}{sessionvars%urlparameter}">
-        {desc|strip|firstline|escape|nonempty}
-        <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span>
-      </a>
-    </td>
-    <td class="nowrap">
-      <a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a> |
-      <a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
-    </td>
-  </tr>'
-filelogentry = '
-  <tr class="parity{parity}">
-    <td class="nowrap">{date|age}</td>
-    <td><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{desc|strip|firstline|escape|nonempty}</a></td>
-    <td class="nowrap">
-      <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a>&nbsp;|&nbsp;<a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a>&nbsp;|&nbsp;<a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
-      {rename%filelogrename}
-    </td>
-  </tr>'
-archiveentry = '<li><a href="{url}archive/{node|short}{extension}">{type|escape}</a></li>'
-indexentry = '
-  <tr class="parity{parity}">
-    <td><a href="{url}{sessionvars%urlparameter}">{name|escape}</a></td>
-    <td>{description}</td>
-    <td>{contact|obfuscate}</td>
-    <td>{lastchange|age}</td>
-    <td class="indexlinks">{archives%indexarchiveentry}</td>
-    <td>
-      <div class="rss_logo">
-        <a href="{url}rss-log">RSS</a>
-        <a href="{url}atom-log">Atom</a>
-      </div>
-    </td>
-  </tr>\n'
-indexarchiveentry = '<a href="{url}archive/{node|short}{extension}">{type|escape}</a> '
-index = index.tmpl
-urlparameter = '{separator}{name}={value|urlescape}'
-hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
-graph = graph.tmpl
--- a/templates/monoblue/notfound.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-{header}
-    <title>{repo|escape}: Mercurial repository not found</title>
-    <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
-    <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
-</head>
-
-<body>
-<div id="container">
-    <div class="page-header">
-        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / Not found: {repo|escape}</h1>
-
-        <form action="{url}log">
-            {sessionvars%hiddenformentry}
-            <dl class="search">
-                <dt><label>Search: </label></dt>
-                <dd><input type="text" name="rev" /></dd>
-            </dl>
-        </form>
-
-        <ul class="page-nav">
-            <li class="current">summary</li>
-            <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
-            <li><a href="{url}log{sessionvars%urlparameter}">changelog</a></li>
-            <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
-            <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
-            <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
-            <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry}</li>
-        </ul>
-    </div>
-
-    <h2 class="no-link no-border">Not Found</h2>
-    <p class="normal">The specified repository "{repo|escape}" is unknown, sorry.</p>
-    <p class="normal">Please go back to the <a href="{url}">main repository list page</a>.</p>
-
-{footer}
--- a/templates/monoblue/search.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-{header}
-    <title>{repo|escape}: Search</title>
-    <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
-    <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
-</head>
-
-<body>
-<div id="container">
-    <div class="page-header">
-        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / search</h1>
-
-        <form action="{url}log">
-            {sessionvars%hiddenformentry}
-            <dl class="search">
-                <dt><label>Search: </label></dt>
-                <dd><input type="text" name="rev" value="{query|escape}" /></dd>
-            </dl>
-        </form>
-
-        <ul class="page-nav">
-            <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
-            <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
-            <li><a href="{url}log{sessionvars%urlparameter}">changelog</a></li>
-            <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
-            <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
-            <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
-            <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry}
-        </ul>
-    </div>
-
-    <h2 class="no-link no-border">searching for {query|escape}</h2>
-    {entries}
-
-{footer}
--- a/templates/monoblue/shortlog.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +0,0 @@
-{header}
-    <title>{repo|escape}: shortlog</title>
-    <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
-    <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
-</head>
-
-<body>
-<div id="container">
-    <div class="page-header">
-        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / shortlog</h1>
-
-        <form action="{url}log">
-            {sessionvars%hiddenformentry}
-            <dl class="search">
-                <dt><label>Search: </label></dt>
-                <dd><input type="text" name="rev" /></dd>
-            </dl>
-        </form>
-
-        <ul class="page-nav">
-            <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
-            <li class="current">shortlog</li>
-            <li><a href="{url}log{sessionvars%urlparameter}">changelog</a></li>
-            <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
-            <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
-            <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
-            <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry}</li>
-        </ul>
-    </div>
-
-    <h2 class="no-link no-border">shortlog</h2>
-
-    <table>
-{entries%shortlogentry}
-    </table>
-
-    <div class="page-path">
-{changenav%navshortentry}
-    </div>
-
-{footer}
--- a/templates/monoblue/summary.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,66 +0,0 @@
-{header}
-    <title>{repo|escape}: Summary</title>
-    <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
-    <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
-</head>
-
-<body>
-<div id="container">
-    <div class="page-header">
-        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / summary</h1>
-
-        <form action="{url}log">
-            {sessionvars%hiddenformentry}
-            <dl class="search">
-                <dt><label>Search: </label></dt>
-                <dd><input type="text" name="rev" /></dd>
-            </dl>
-        </form>
-
-        <ul class="page-nav">
-            <li class="current">summary</li>
-            <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
-            <li><a href="{url}log{sessionvars%urlparameter}">changelog</a></li>
-            <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
-            <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
-            <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
-            <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a></li>
-        </ul>
-    </div>
-
-    <h2 class="no-link no-border">Mercurial Repository Overview</h2>
-    <dl class="overview">
-        <dt>name</dt>
-        <dd>{repo|escape}</dd>
-        <dt>description</dt>
-        <dd>{desc}</dd>
-        <dt>owner</dt>
-        <dd>{owner|obfuscate}</dd>
-        <dt>last change</dt>
-        <dd>{lastchange|rfc822date}</dd>
-    </dl>
-
-    <h2><a href="{url}shortlog{sessionvars%urlparameter}">Changes</a></h2>
-    <table>
-{shortlog}
-        <tr class="light">
-            <td colspan="4"><a class="list" href="{url}shortlog{sessionvars%urlparameter}">...</a></td>
-        </tr>
-    </table>
-
-    <h2><a href="{url}tags{sessionvars%urlparameter}">Tags</a></h2>
-    <table>
-{tags}
-        <tr class="light">
-            <td colspan="3"><a class="list" href="{url}tags{sessionvars%urlparameter}">...</a></td>
-        </tr>
-    </table>
-
-    <h2 class="no-link">Branches</h2>
-    <table>
-    {branches%branchentry}
-        <tr class="light">
-          <td colspan="4"><a class="list"  href="#">...</a></td>
-        </tr>
-    </table>
-{footer}
--- a/templates/monoblue/tags.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-{header}
-    <title>{repo|escape}: Tags</title>
-    <link rel="alternate" type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}"/>
-    <link rel="alternate" type="application/rss+xml" href="{url}rss-log" title="RSS feed for {repo|escape}"/>
-</head>
-
-<body>
-<div id="container">
-    <div class="page-header">
-        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / Tags</h1>
-
-        <form action="{url}log">
-            {sessionvars%hiddenformentry}
-            <dl class="search">
-                <dt><label>Search: </label></dt>
-                <dd><input type="text" name="rev" /></dd>
-            </dl>
-        </form>
-
-        <ul class="page-nav">
-            <li><a href="{url}summary{sessionvars%urlparameter}">summary</a></li>
-            <li><a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a></li>
-            <li><a href="{url}changelog{sessionvars%urlparameter}">changelog</a></li>
-            <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
-            <li class="current">tags</li>
-            <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
-            <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a></li>
-        </ul>
-    </div>
-
-    <h2 class="no-link no-border">tags</h2>
-    <table cellspacing="0">
-{entries%tagentry}
-    </table>
-
-{footer}
--- a/templates/paper/branches.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-{header}
-<title>{repo|escape}: branches</title>
-<link rel="alternate" type="application/atom+xml"
-   href="{url}atom-tags" title="Atom feed for {repo|escape}: branches" />
-<link rel="alternate" type="application/rss+xml"
-   href="{url}rss-tags" title="RSS feed for {repo|escape}: branches" />
-</head>
-<body>
-
-<div class="container">
-<div class="menu">
-<div class="logo">
-<a href="http://mercurial.selenic.com/">
-<img src="{staticurl}hglogo.png" alt="mercurial" /></a>
-</div>
-<ul>
-<li><a href="{url}shortlog{sessionvars%urlparameter}">log</a></li>
-<li><a href="{url}graph{sessionvars%urlparameter}">graph</a></li>
-<li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
-<li class="active">branches</li>
-</ul>
-</div>
-
-<div class="main">
-<h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
-<h3>branches</h3>
-
-<form class="search" action="{url}log">
-{sessionvars%hiddenformentry}
-<p><input name="rev" id="search1" type="text" size="30" /></p>
-<div id="hint">find changesets by author, revision,
-files, or words in the commit message</div>
-</form>
-
-<table class="bigtable">
-<tr>
- <th>branch</th>
- <th>node</th>
-</tr>
-{entries%branchentry}
-</table>
-</div>
-</div>
-
-{footer}
--- a/templates/paper/changeset.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,71 +0,0 @@
-{header}
-<title>{repo|escape}: {node|short}</title>
-</head>
-<body>
-<div class="container">
-<div class="menu">
-<div class="logo">
-<a href="http://mercurial.selenic.com/">
-<img src="{staticurl}hglogo.png" alt="mercurial" /></a>
-</div>
-<ul>
- <li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
- <li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
- <li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
- <li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
-</ul>
-<ul>
- <li class="active">changeset</li>
- <li><a href="{url}raw-rev/{node|short}{sessionvars%urlparameter}">raw</a></li>
- <li><a href="{url}file/{node|short}{sessionvars%urlparameter}">browse</a></li>
-</ul>
-<ul>
- {archives%archiveentry}
-</ul>
-</div>
-
-<div class="main">
-
-<h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
-<h3>changeset {rev}:{node|short} {changesetbranch%changelogbranchname} {changesettag}</h3>
-
-<form class="search" action="{url}log">
-{sessionvars%hiddenformentry}
-<p><input name="rev" id="search1" type="text" size="30" /></p>
-<div id="hint">find changesets by author, revision,
-files, or words in the commit message</div>
-</form>
-
-<div class="description">{desc|strip|escape|addbreaks|nonempty}</div>
-
-<table id="changesetEntry">
-<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})</td></tr>
-<tr>
- <th class="author">parents</th>
- <td class="author">{parent%changesetparent}</td>
-</tr>
-<tr>
- <th class="author">children</th>
- <td class="author">{child%changesetchild}</td>
-</tr>
-<tr>
- <th class="files">files</th>
- <td class="files">{files}</td>
-</tr>
-</table>
-
-<div class="overflow">
-<div class="sourcefirst">   line diff</div>
-
-{diff}
-</div>
-
-</div>
-</div>
-{footer}
--- a/templates/paper/error.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-{header}
-<title>{repo|escape}: error</title>
-</head>
-<body>
-
-<div class="container">
-<div class="menu">
-<div class="logo">
-<a href="http://mercurial.selenic.com/">
-<img src="{staticurl}hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
-</div>
-<ul>
-<li><a href="{url}shortlog{sessionvars%urlparameter}">log</a></li>
-<li><a href="{url}graph{sessionvars%urlparameter}">graph</a></li>
-<li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
-<li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
-</ul>
-</div>
-
-<div class="main">
-
-<h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
-<h3>error</h3>
-
-<form class="search" action="{url}log">
-{sessionvars%hiddenformentry}
-<p><input name="rev" id="search1" type="text" size="30"></p>
-<div id="hint">find changesets by author, revision,
-files, or words in the commit message</div>
-</form>
-
-<div class="description">
-<p>
-An error occurred while processing your request:
-</p>
-<p>
-{error|escape}
-</p>
-</div>
-</div>
-</div>
-
-{footer}
--- a/templates/paper/fileannotate.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,78 +0,0 @@
-{header}
-<title>{repo|escape}: {file|escape} annotate</title>
-</head>
-<body>
-
-<div class="container">
-<div class="menu">
-<div class="logo">
-<a href="http://mercurial.selenic.com/">
-<img src="{staticurl}hglogo.png" alt="mercurial" /></a>
-</div>
-<ul>
-<li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
-<li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
-<li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
-<li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
-</ul>
-
-<ul>
-<li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li>
-<li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
-</ul>
-<ul>
-<li><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a></li>
-<li><a href="{url}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a></li>
-<li><a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a></li>
-<li class="active">annotate</li>
-<li><a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file log</a></li>
-<li><a href="{url}raw-annotate/{node|short}/{file|urlescape}">raw</a></li>
-</ul>
-</div>
-
-<div class="main">
-<h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
-<h3>annotate {file|escape} @ {rev}:{node|short}</h3>
-
-<form class="search" action="{url}log">
-{sessionvars%hiddenformentry}
-<p><input name="rev" id="search1" type="text" size="30" /></p>
-<div id="hint">find changesets by author, revision,
-files, or words in the commit message</div>
-</form>
-
-<div class="description">{desc|strip|escape|addbreaks|nonempty}</div>
-
-<table id="changesetEntry">
-<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})</td>
-</tr>
-<tr>
- <th class="author">parents</th>
- <td class="author">{parent%filerevparent}</td>
-</tr>
-<tr>
- <th class="author">children</th>
- <td class="author">{child%filerevchild}</td>
-</tr>
-{changesettag}
-</table>
-
-<div class="overflow">
-<table class="bigtable">
-<tr>
- <th class="annotate">rev</th>
- <th class="line">&nbsp;&nbsp;line source</th>
-</tr>
-{annotate%annotateline}
-</table>
-</div>
-</div>
-</div>
-
-{footer}
--- a/templates/paper/filediff.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,73 +0,0 @@
-{header}
-<title>{repo|escape}: {file|escape} diff</title>
-</head>
-<body>
-
-<div class="container">
-<div class="menu">
-<div class="logo">
-<a href="http://mercurial.selenic.com/">
-<img src="{staticurl}hglogo.png" alt="mercurial" /></a>
-</div>
-<ul>
-<li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
-<li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
-<li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
-<li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
-</ul>
-<ul>
-<li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li>
-<li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
-</ul>
-<ul>
-<li><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a></li>
-<li><a href="{url}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a></li>
-<li class="active">diff</li>
-<li><a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a></li>
-<li><a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file log</a></li>
-<li><a href="{url}raw-file/{node|short}/{file|urlescape}">raw</a></li>
-</ul>
-</div>
-
-<div class="main">
-<h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
-<h3>diff {file|escape} @ {rev}:{node|short}</h3>
-
-<form class="search" action="{url}log">
-<p>{sessionvars%hiddenformentry}</p>
-<p><input name="rev" id="search1" type="text" size="30" /></p>
-<div id="hint">find changesets by author, revision,
-files, or words in the commit message</div>
-</form>
-
-<div class="description">{desc|strip|escape|addbreaks|nonempty}</div>
-
-<table id="changesetEntry">
-<tr>
- <th>author</th>
- <td>{author|obfuscate}</td>
-</tr>
-<tr>
- <th>date</th>
- <td>{date|date} ({date|age})</td>
-</tr>
-<tr>
- <th>parents</th>
- <td>{parent%filerevparent}</td>
-</tr>
-<tr>
- <th>children</th>
- <td>{child%filerevchild}</td>
-</tr>
-{changesettag}
-</table>
-
-<div class="overflow">
-<div class="sourcefirst">   line diff</div>
-
-{diff}
-</div>
-</div>
-</div>
-
-{footer}
--- a/templates/paper/filelog.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,60 +0,0 @@
-{header}
-<title>{repo|escape}: {file|escape} history</title>
-<link rel="alternate" type="application/atom+xml"
-   href="{url}atom-log/tip/{file|urlescape}" title="Atom feed for {repo|escape}:{file}" />
-<link rel="alternate" type="application/rss+xml"
-   href="{url}rss-log/tip/{file|urlescape}" title="RSS feed for {repo|escape}:{file}" />
-</head>
-<body>
-
-<div class="container">
-<div class="menu">
-<div class="logo">
-<a href="http://mercurial.selenic.com/">
-<img src="{staticurl}hglogo.png" alt="mercurial" /></a>
-</div>
-<ul>
-<li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
-<li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
-<li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
-<li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
-</ul>
-<ul>
-<li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li>
-<li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
-</ul>
-<ul>
-<li><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a></li>
-<li><a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a></li>
-<li><a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a></li>
-<li class="active">file log</li>
-<li><a href="{url}raw-file/{node|short}/{file|urlescape}">raw</a></li>
-</ul>
-</div>
-
-<div class="main">
-<h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
-<h3>log {file|escape}</h3>
-
-<form class="search" action="{url}log">
-{sessionvars%hiddenformentry}
-<p><input name="rev" id="search1" type="text" size="30" /></p>
-<div id="hint">find changesets by author, revision,
-files, or words in the commit message</div>
-</form>
-
-<div class="navigate">{nav%filenaventry}</div>
-
-<table class="bigtable">
- <tr>
-  <th class="age">age</th>
-  <th class="author">author</th>
-  <th class="description">description</th>
- </tr>
-{entries%filelogentry}
-</table>
-
-</div>
-</div>
-
-{footer}
--- a/templates/paper/filelogentry.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
- <tr class="parity{parity}">
-  <td class="age">{date|age}</td>
-  <td class="author">{author|person}</td>
-  <td class="description"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{desc|strip|firstline|escape|nonempty}</a>{inbranch%changelogbranchname}{branches%changelogbranchhead}{tags%changelogtag}</td>
- </tr>
--- a/templates/paper/filerevision.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,73 +0,0 @@
-{header}
-<title>{repo|escape}: {node|short} {file|escape}</title>
-</head>
-<body>
-
-<div class="container">
-<div class="menu">
-<div class="logo">
-<a href="http://mercurial.selenic.com/">
-<img src="{staticurl}hglogo.png" alt="mercurial" /></a>
-</div>
-<ul>
-<li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
-<li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
-<li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
-<li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
-</ul>
-<ul>
-<li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li>
-<li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
-</ul>
-<ul>
-<li class="active">file</li>
-<li><a href="{url}file/tip/{file|urlescape}{sessionvars%urlparameter}">latest</a></li>
-<li><a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">diff</a></li>
-<li><a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a></li>
-<li><a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file log</a></li>
-<li><a href="{url}raw-file/{node|short}/{file|urlescape}">raw</a></li>
-</ul>
-</div>
-
-<div class="main">
-<h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
-<h3>view {file|escape} @ {rev}:{node|short}</h3>
-
-<form class="search" action="{url}log">
-{sessionvars%hiddenformentry}
-<p><input name="rev" id="search1" type="text" size="30" /></p>
-<div id="hint">find changesets by author, revision,
-files, or words in the commit message</div>
-</form>
-
-<div class="description">{desc|strip|escape|addbreaks|nonempty}</div>
-
-<table id="changesetEntry">
-<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})</td>
-</tr>
-<tr>
- <th class="author">parents</th>
- <td class="author">{parent%filerevparent}</td>
-</tr>
-<tr>
- <th class="author">children</th>
- <td class="author">{child%filerevchild}</td>
-</tr>
-{changesettag}
-</table>
-
-<div class="overflow">
-<div class="sourcefirst"> line source</div>
-{text%fileline}
-<div class="sourcelast"></div>
-</div>
-</div>
-</div>
-
-{footer}
--- a/templates/paper/footer.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,4 +0,0 @@
-{motd}
-
-</body>
-</html>
--- a/templates/paper/graph.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,132 +0,0 @@
-{header}
-<title>{repo|escape}: revision graph</title>
-<link rel="alternate" type="application/atom+xml"
-   href="{url}atom-log" title="Atom feed for {repo|escape}: log" />
-<link rel="alternate" type="application/rss+xml"
-   href="{url}rss-log" title="RSS feed for {repo|escape}: log" />
-<!--[if IE]><script type="text/javascript" src="{staticurl}excanvas.js"></script><![endif]-->
-</head>
-<body>
-
-<div class="container">
-<div class="menu">
-<div class="logo">
-<a href="http://mercurial.selenic.com/">
-<img src="{staticurl}hglogo.png" alt="mercurial" /></a>
-</div>
-<ul>
-<li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
-<li class="active">graph</li>
-<li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
-<li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
-</ul>
-<ul>
-<li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li>
-<li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
-</ul>
-</div>
-
-<div class="main">
-<h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
-<h3>graph</h3>
-
-<form class="search" action="{url}log">
-{sessionvars%hiddenformentry}
-<p><input name="rev" id="search1" type="text" size="30" /></p>
-<div id="hint">find changesets by author, revision,
-files, or words in the commit message</div>
-</form>
-
-<div class="navigate">
-<a href="{url}graph/{rev}{lessvars%urlparameter}">less</a>
-<a href="{url}graph/{rev}{morevars%urlparameter}">more</a>
-| rev {rev}: {changenav%navgraphentry}
-</div>
-
-<noscript><p>The revision graph only works with JavaScript-enabled browsers.</p></noscript>
-
-<div id="wrapper">
-<ul id="nodebgs"></ul>
-<canvas id="graph" width="224" height="{canvasheight}"></canvas>
-<ul id="graphnodes"></ul>
-</div>
-
-<script type="text/javascript" src="{staticurl}graph.js"></script>
-<script type="text/javascript">
-<!-- hide script content
-
-var data = {jsdata|json};
-var graph = new Graph();
-graph.scale({bg_height});
-
-graph.edge = function(x0, y0, x1, y1, color) {
-	
-	this.setColor(color, 0.0, 0.65);
-	this.ctx.beginPath();
-	this.ctx.moveTo(x0, y0);
-	this.ctx.lineTo(x1, y1);
-	this.ctx.stroke();
-	
-}
-
-var revlink = '<li style="_STYLE"><span class="desc">';
-revlink += '<a href="{url}rev/_NODEID{sessionvars%urlparameter}" title="_NODEID">_DESC</a>';
-revlink += '</span>_TAGS<span class="info">_DATE ago, by _USER</span></li>';
-
-graph.vertex = function(x, y, color, parity, cur) {
-	
-	this.ctx.beginPath();
-	color = this.setColor(color, 0.25, 0.75);
-	this.ctx.arc(x, y, radius, 0, Math.PI * 2, true);
-	this.ctx.fill();
-	
-	var bg = '<li class="bg parity' + parity + '"></li>';
-	var left = (this.columns + 1) * this.bg_height;
-	var nstyle = 'padding-left: ' + left + 'px;';
-	var item = revlink.replace(/_STYLE/, nstyle);
-	item = item.replace(/_PARITY/, 'parity' + parity);
-	item = item.replace(/_NODEID/, cur[0]);
-	item = item.replace(/_NODEID/, cur[0]);
-	item = item.replace(/_DESC/, cur[3]);
-	item = item.replace(/_USER/, cur[4]);
-	item = item.replace(/_DATE/, cur[5]);
-
-	var tagspan = '';
-	if (cur[7].length || (cur[6][0] != 'default' || cur[6][1])) {
-		tagspan = '<span class="logtags">';
-		if (cur[6][1]) {
-			tagspan += '<span class="branchhead" title="' + cur[6][0] + '">';
-			tagspan += cur[6][0] + '</span> ';
-		} else if (!cur[6][1] && cur[6][0] != 'default') {
-			tagspan += '<span class="branchname" title="' + cur[6][0] + '">';
-			tagspan += cur[6][0] + '</span> ';
-		}
-		if (cur[7].length) {
-			for (var t in cur[7]) {
-				var tag = cur[7][t];
-				tagspan += '<span class="tag">' + tag + '</span> ';
-			}
-		}
-		tagspan += '</span>';
-	}
-	
-	item = item.replace(/_TAGS/, tagspan);
-	return [bg, item];
-	
-}
-
-graph.render(data);
-
-// stop hiding script -->
-</script>
-
-<div class="navigate">
-<a href="{url}graph/{rev}{lessvars%urlparameter}">less</a>
-<a href="{url}graph/{rev}{morevars%urlparameter}">more</a>
-| rev {rev}: {changenav%navgraphentry}
-</div>
-
-</div>
-</div>
-
-{footer}
--- a/templates/paper/header.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
-<head>
-<link rel="icon" href="{staticurl}hgicon.png" type="image/png" />
-<meta name="robots" content="index, nofollow" />
-<link rel="stylesheet" href="{staticurl}style-paper.css" type="text/css" />
--- a/templates/paper/index.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-{header}
-<title>Mercurial repositories index</title>
-</head>
-<body>
-
-<div class="container">
-<div class="menu">
-<a href="http://mercurial.selenic.com/">
-<img src="{staticurl}hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
-</div>
-<div class="main">
-<h2>Mercurial Repositories</h2>
-
-<table class="bigtable">
-    <tr>
-        <th><a href="?sort={sort_name}">Name</a></th>
-        <th><a href="?sort={sort_description}">Description</a></th>
-        <th><a href="?sort={sort_contact}">Contact</a></th>
-        <th><a href="?sort={sort_lastchange}">Last change</a></th>
-        <th>&nbsp;</th>
-    </tr>
-    {entries%indexentry}
-</table>
-</div>
-</div>
-{footer}
--- a/templates/paper/manifest.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,54 +0,0 @@
-{header}
-<title>{repo|escape}: {node|short} {path|escape}</title>
-</head>
-<body>
-
-<div class="container">
-<div class="menu">
-<div class="logo">
-<a href="http://mercurial.selenic.com/">
-<img src="{staticurl}hglogo.png" alt="mercurial" /></a>
-</div>
-<ul>
-<li><a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">log</a></li>
-<li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
-<li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
-<li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
-</ul>
-<ul>
-<li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li>
-<li class="active">browse</li>
-</ul>
-<ul>
-{archives%archiveentry}
-</ul>
-</div>
-
-<div class="main">
-<h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
-<h3>directory {path|escape} @ {rev}:{node|short} {tags%changelogtag}</h3>
-
-<form class="search" action="{url}log">
-{sessionvars%hiddenformentry}
-<p><input name="rev" id="search1" type="text" size="30" /></p>
-<div id="hint">find changesets by author, revision,
-files, or words in the commit message</div>
-</form>
-
-<table class="bigtable">
-<tr>
-  <th class="name">name</th>
-  <th class="size">size</th>
-  <th class="permissions">permissions</th>
-</tr>
-<tr class="fileline parity{upparity}">
-  <td class="name"><a href="{url}file/{node|short}{up|urlescape}{sessionvars%urlparameter}">[up]</a></td>
-  <td class="size"></td>
-  <td class="permissions">drwxr-xr-x</td>
-</tr>
-{dentries%direntry}
-{fentries%fileentry}
-</table>
-</div>
-</div>
-{footer}
--- a/templates/paper/map	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,191 +0,0 @@
-default = 'shortlog'
-
-mimetype = 'text/html; charset={encoding}'
-header = header.tmpl
-footer = footer.tmpl
-search = search.tmpl
-
-changelog = shortlog.tmpl
-shortlog = shortlog.tmpl
-shortlogentry = shortlogentry.tmpl
-graph = graph.tmpl
-
-naventry = '<a href="{url}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
-navshortentry = '<a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
-navgraphentry = '<a href="{url}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
-filenaventry = '<a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{label|escape}</a> '
-filedifflink = '<a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
-filenodelink = '<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
-filenolink = '{file|escape} '
-fileellipses = '...'
-changelogentry = shortlogentry.tmpl
-searchentry = shortlogentry.tmpl
-changeset = changeset.tmpl
-manifest = manifest.tmpl
-
-direntry = '
-  <tr class="fileline parity{parity}">
-    <td class="name">
-      <a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">
-        <img src="{staticurl}coal-folder.png" alt="dir."/> {basename|escape}/
-      </a>
-      <a href="{url}file/{node|short}{path|urlescape}/{emptydirs|urlescape}{sessionvars%urlparameter}">
-        {emptydirs|escape}
-      </a>
-    </td>
-    <td class="size"></td>
-    <td class="permissions">drwxr-xr-x</td>
-  </tr>'
-
-fileentry = '
-  <tr class="fileline parity{parity}">
-    <td class="filename">
-      <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
-        <img src="{staticurl}coal-file.png" alt="file"/> {basename|escape}
-      </a>
-    </td>
-    <td class="size">{size}</td>
-    <td class="permissions">{permissions|permissions}</td>
-  </tr>'
-
-filerevision = filerevision.tmpl
-fileannotate = fileannotate.tmpl
-filediff = filediff.tmpl
-filelog = filelog.tmpl
-fileline = '
-  <div class="parity{parity} source"><a href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</div>'
-filelogentry = filelogentry.tmpl
-
-annotateline = '
-  <tr class="parity{parity}">
-    <td class="annotate">
-      <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#{targetline}"
-         title="{node|short}: {desc|escape|firstline}">{author|user}@{rev}</a>
-    </td>
-    <td class="source"><a href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</td>
-  </tr>'
-
-diffblock = '<div class="source bottomline parity{parity}"><pre>{lines}</pre></div>'
-difflineplus = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> <span class="plusline">{line|escape}</span>'
-difflineminus = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> <span class="minusline">{line|escape}</span>'
-difflineat = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> <span class="atline">{line|escape}</span>'
-diffline = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}'
-
-changelogparent = '
-  <tr>
-    <th class="parent">parent {rev}:</th>
-    <td class="parent"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
-  </tr>'
-
-changesetparent = '<a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a> '
-
-filerevparent = '<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{rename%filerename}{node|short}</a> '
-filerevchild = '<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a> '
-
-filerename = '{file|escape}@'
-filelogrename = '
-  <tr>
-    <th>base:</th>
-    <td>
-      <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
-        {file|escape}@{node|short}
-      </a>
-    </td>
-  </tr>'
-fileannotateparent = '
-  <tr>
-    <td class="metatag">parent:</td>
-    <td>
-      <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
-        {rename%filerename}{node|short}
-      </a>
-    </td>
-  </tr>'
-changesetchild = ' <a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>'
-changelogchild = '
-  <tr>
-    <th class="child">child</th>
-    <td class="child">
-      <a href="{url}rev/{node|short}{sessionvars%urlparameter}">
-        {node|short}
-      </a>
-    </td>
-  </tr>'
-fileannotatechild = '
-  <tr>
-    <td class="metatag">child:</td>
-    <td>
-      <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
-        {node|short}
-      </a>
-    </td>
-  </tr>'
-tags = tags.tmpl
-tagentry = '
-  <tr class="tagEntry parity{parity}">
-    <td>
-      <a href="{url}rev/{node|short}{sessionvars%urlparameter}">
-        {tag|escape}
-      </a>
-    </td>
-    <td class="node">
-      {node|short}
-    </td>
-  </tr>'
-branches = branches.tmpl
-branchentry = '
-  <tr class="tagEntry parity{parity}">
-    <td>
-      <a href="{url}shortlog/{node|short}{sessionvars%urlparameter}" class="{status}">
-        {branch|escape}
-      </a>
-    </td>
-    <td class="node">
-      {node|short}
-    </td>
-  </tr>'
-changelogtag = '<span class="tag">{name|escape}</span> '
-changesettag = '<span class="tag">{tag|escape}</span> '
-changelogbranchhead = '<span class="branchhead">{name|escape}</span> '
-changelogbranchname = '<span class="branchname">{name|escape}</span> ' 
-
-filediffparent = '
-  <tr>
-    <th class="parent">parent {rev}:</th>
-    <td class="parent"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
-  </tr>'
-filelogparent = '
-  <tr>
-    <th>parent {rev}:</th>
-    <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
-  </tr>'
-filediffchild = '
-  <tr>
-    <th class="child">child {rev}:</th>
-    <td class="child"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
-  </td>
-  </tr>'
-filelogchild = '
-  <tr>
-    <th>child {rev}:</th>
-    <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
-  </tr>'
-
-indexentry = '
-  <tr class="parity{parity}">
-    <td><a href="{url}{sessionvars%urlparameter}">{name|escape}</a></td>
-    <td>{description}</td>
-    <td>{contact|obfuscate}</td>
-    <td class="age">{lastchange|age}</td>
-    <td class="indexlinks">{archives%indexarchiveentry}</td>
-  </tr>\n'
-indexarchiveentry = '<a href="{url}archive/{node|short}{extension|urlescape}">&nbsp;&darr;{type|escape}</a>'
-index = index.tmpl
-archiveentry = '
-  <li>
-    <a href="{url}archive/{node|short}{extension|urlescape}">{type|escape}</a>
-  </li>'
-notfound = notfound.tmpl
-error = error.tmpl
-urlparameter = '{separator}{name}={value|urlescape}'
-hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
--- a/templates/paper/notfound.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
-{header}
-<title>Mercurial repository not found</title>
-</head>
-<body>
-
-<h2>Mercurial repository not found</h2>
-
-The specified repository "{repo|escape}" is unknown, sorry.
-
-Please go back to the <a href="{url}">main repository list page</a>.
-
-{footer}
--- a/templates/paper/search.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-{header}
-<title>{repo|escape}: searching for {query|escape}</title>
-</head>
-<body>
-
-<div class="container">
-<div class="menu">
-<div class="logo">
-<a href="http://mercurial.selenic.com/">
-<img src="{staticurl}hglogo.png" width=75 height=90 border=0 alt="mercurial"></a>
-</div>
-<ul>
-<li><a href="{url}shortlog{sessionvars%urlparameter}">log</a></li>
-<li><a href="{url}graph{sessionvars%urlparameter}">graph</a></li>
-<li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
-<li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
-</ul>
-</div>
-
-<div class="main">
-<h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
-<h3>searching for '{query|escape}'</h3>
-
-<form class="search" action="{url}log">
-{sessionvars%hiddenformentry}
-<p><input name="rev" id="search1" type="text" size="30"></p>
-<div id="hint">find changesets by author, revision,
-files, or words in the commit message</div>
-</form>
-
-<table class="bigtable">
- <tr>
-  <th class="age">age</th>
-  <th class="author">author</th>
-  <th class="description">description</th>
- </tr>
-{entries}
-</table>
-
-</div>
-</div>
-
-{footer}
--- a/templates/paper/shortlog.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,57 +0,0 @@
-{header}
-<title>{repo|escape}: log</title>
-<link rel="alternate" type="application/atom+xml"
-   href="{url}atom-log" title="Atom feed for {repo|escape}" />
-<link rel="alternate" type="application/rss+xml"
-   href="{url}rss-log" title="RSS feed for {repo|escape}" />
-</head>
-<body>
-
-<div class="container">
-<div class="menu">
-<div class="logo">
-<a href="http://mercurial.selenic.com/">
-<img src="{staticurl}hglogo.png" alt="mercurial" /></a>
-</div>
-<ul>
-<li class="active">log</li>
-<li><a href="{url}graph/{node|short}{sessionvars%urlparameter}">graph</a></li>
-<li><a href="{url}tags{sessionvars%urlparameter}">tags</a></li>
-<li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
-</ul>
-<ul>
-<li><a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a></li>
-<li><a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">browse</a></li>
-</ul>
-<ul>
-{archives%archiveentry}
-</ul>
-</div>
-
-<div class="main">
-<h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
-<h3>log</h3>
-
-<form class="search" action="{url}log">
-{sessionvars%hiddenformentry}
-<p><input name="rev" id="search1" type="text" size="30" /></p>
-<div id="hint">find changesets by author, revision,
-files, or words in the commit message</div>
-</form>
-
-<div class="navigate">rev {rev}: {changenav%navshortentry}</div>
-
-<table class="bigtable">
- <tr>
-  <th class="age">age</th>
-  <th class="author">author</th>
-  <th class="description">description</th>
- </tr>
-{entries%shortlogentry}
-</table>
-
-<div class="navigate">rev {rev}: {changenav%navshortentry}</div>
-</div>
-</div>
-
-{footer}
--- a/templates/paper/shortlogentry.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
- <tr class="parity{parity}">
-  <td class="age">{date|age}</td>
-  <td class="author">{author|person}</td>
-  <td class="description"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{desc|strip|firstline|escape|nonempty}</a>{inbranch%changelogbranchname}{branches%changelogbranchhead}{tags%changelogtag}</td>
- </tr>
--- a/templates/paper/tags.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-{header}
-<title>{repo|escape}: tags</title>
-<link rel="alternate" type="application/atom+xml"
-   href="{url}atom-tags" title="Atom feed for {repo|escape}: tags" />
-<link rel="alternate" type="application/rss+xml"
-   href="{url}rss-tags" title="RSS feed for {repo|escape}: tags" />
-</head>
-<body>
-
-<div class="container">
-<div class="menu">
-<div class="logo">
-<a href="http://mercurial.selenic.com/">
-<img src="{staticurl}hglogo.png" alt="mercurial" /></a>
-</div>
-<ul>
-<li><a href="{url}shortlog{sessionvars%urlparameter}">log</a></li>
-<li><a href="{url}graph{sessionvars%urlparameter}">graph</a></li>
-<li class="active">tags</li>
-<li><a href="{url}branches{sessionvars%urlparameter}">branches</a></li>
-</ul>
-</div>
-
-<div class="main">
-<h2><a href="{url}{sessionvars%urlparameter}">{repo|escape}</a></h2>
-<h3>tags</h3>
-
-<form class="search" action="{url}log">
-{sessionvars%hiddenformentry}
-<p><input name="rev" id="search1" type="text" size="30" /></p>
-<div id="hint">find changesets by author, revision,
-files, or words in the commit message</div>
-</form>
-
-<table class="bigtable">
-<tr>
- <th>tag</th>
- <th>node</th>
-</tr>
-{entries%tagentry}
-</table>
-</div>
-</div>
-
-{footer}
--- a/templates/raw/changeset.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,9 +0,0 @@
-{header}
-# HG changeset patch
-# User {author}
-# Date {date|hgdate}
-# Node ID {node}
-{parent%changesetparent}
-{desc}
-
-{diff}
--- a/templates/raw/error.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-{header}
-error: {error}
--- a/templates/raw/fileannotate.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-{header}
-{annotate%annotateline}
-{footer}
-
-
--- a/templates/raw/filediff.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-{header}
-{diff}
-{footer}
-
-
--- a/templates/raw/index.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-{header}
-{entries%indexentry}
--- a/templates/raw/manifest.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-{header}
-{dentries%direntry}{fentries%fileentry}
-{footer}
--- a/templates/raw/map	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-mimetype = 'text/plain; charset={encoding}'
-header = ''
-footer = ''
-changeset = changeset.tmpl
-difflineplus = '{line}'
-difflineminus = '{line}'
-difflineat = '{line}'
-diffline = '{line}'
-changesetparent = '# Parent  {node}'
-changesetchild = '# Child   {node}'
-filenodelink = ''
-fileline = '{line}'
-diffblock = '{lines}'
-filediff = filediff.tmpl
-fileannotate = fileannotate.tmpl
-annotateline = '{author|user}@{rev}: {line}'
-manifest = manifest.tmpl
-direntry = 'drwxr-xr-x {basename}\n'
-fileentry = '{permissions|permissions} {size} {basename}\n'
-index = index.tmpl
-notfound = notfound.tmpl
-error = error.tmpl
-indexentry = '{url}\n'
--- a/templates/raw/notfound.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-{header}
-error: repository {repo} not found
--- a/templates/rss/changelog.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-{header}
-    <title>{repo|escape} Changelog</title>
-    <description>{repo|escape} Changelog</description>
-    {entries%changelogentry}
-  </channel>
-</rss>
\ No newline at end of file
--- a/templates/rss/changelogentry.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-<item>
-    <title>{desc|strip|firstline|strip|escape}</title>
-    <guid isPermaLink="true">{urlbase}{url}rev/{node|short}</guid>
-    <description><![CDATA[{desc|strip|escape|addbreaks|nonempty}]]></description>
-    <author>{author|obfuscate}</author>
-    <pubDate>{date|rfc822date}</pubDate>
-</item>
--- a/templates/rss/error.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-{header}
-    <title>Error</title>
-    <description>Error</description>
-    <item>
-      <title>Error</title>
-      <description>{error|escape}</description>
-      <guid>http://mercurial.selenic.com/#error</guid>
-    </item>
-  </channel>
-</rss>
--- a/templates/rss/filelog.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-{header}
-    <title>{repo|escape}: {file|escape} history</title>
-    <description>{file|escape} revision history</description>
-    {entries%filelogentry}
-  </channel>
-</rss>
--- a/templates/rss/filelogentry.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-<item>
-    <title>{desc|strip|firstline|strip|escape}</title>
-    <link>{urlbase}{url}log{{node|short}}/{file|urlescape}</link>
-    <description><![CDATA[{desc|strip|escape|addbreaks|nonempty}]]></description>
-    <author>{author|obfuscate}</author>
-    <pubDate>{date|rfc822date}</pubDate>
-</item>
--- a/templates/rss/header.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="{encoding}"?>
-<rss version="2.0">
-  <channel>
-    <link>{urlbase}{url}</link>
-    <language>en-us</language>
--- a/templates/rss/map	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-default = 'changelog'
-mimetype = 'text/xml; charset={encoding}'
-header = header.tmpl
-changelog = changelog.tmpl
-changelogentry = changelogentry.tmpl
-filelog = filelog.tmpl
-filelogentry = filelogentry.tmpl
-tags = tags.tmpl
-tagentry = tagentry.tmpl
-error = error.tmpl
--- a/templates/rss/tagentry.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-<item>
-    <title>{tag|escape}</title>
-    <link>{urlbase}{url}rev/{node|short}</link>
-    <description><![CDATA[{tag|strip|escape|addbreaks}]]></description>
-    <pubDate>{date|rfc822date}</pubDate>
-</item>
--- a/templates/rss/tags.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-{header}
-    <title>{repo|escape}: tags </title>
-    <description>{repo|escape} tag history</description>
-    {entriesnotip%tagentry}
-  </channel>
-</rss>
--- a/templates/spartan/branches.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-{header}
-<title>{repo|escape}: branches</title>
-<link rel="alternate" type="application/atom+xml"
-   href="{url}atom-branches" title="Atom feed for {repo|escape}: branches">
-<link rel="alternate" type="application/rss+xml"
-   href="{url}rss-branches" title="RSS feed for {repo|escape}: branches">
-</head>
-<body>
-
-<div class="buttons">
-<a href="{url}log{sessionvars%urlparameter}">changelog</a>
-<a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a>
-<a href="{url}graph{sessionvars%urlparameter}">graph</a>
-<a href="{url}tags{sessionvars%urlparameter}">tags</a>
-<a href="{url}file/{node|short}/{sessionvars%urlparameter}">files</a>
-<a type="application/rss+xml" href="{url}rss-branches">rss</a>
-<a type="application/atom+xml" href="{url}atom-branches">atom</a>
-</div>
-
-<h2>branches:</h2>
-
-<ul id="tagEntries">
-{entries%branchentry}
-</ul>
-
-{footer}
--- a/templates/spartan/changelog.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-{header}
-<title>{repo|escape}: changelog</title>
-<link rel="alternate" type="application/atom+xml"
-   href="{url}atom-log" title="Atom feed for {repo|escape}">
-<link rel="alternate" type="application/rss+xml"
-   href="{url}rss-log" title="RSS feed for {repo|escape}">
-</head>
-<body>
-
-<div class="buttons">
-<a href="{url}shortlog/{rev}{sessionvars%urlparameter}">shortlog</a>
-<a href="{url}graph{sessionvars%urlparameter}">graph</a>
-<a href="{url}tags{sessionvars%urlparameter}">tags</a>
-<a href="{url}branches{sessionvars%urlparameter}">branches</a>
-<a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
-{archives%archiveentry}
-<a type="application/rss+xml" href="{url}rss-log">rss</a>
-<a type="application/atom+xml" href="{url}atom-log" title="Atom feed for {repo|escape}">atom</a>
-</div>
-
-<h2>changelog for {repo|escape}</h2>
-
-<form action="{url}log">
-{sessionvars%hiddenformentry}
-<p>
-<label for="search1">search:</label>
-<input name="rev" id="search1" type="text" size="30">
-navigate: <small class="navigate">{changenav%naventry}</small>
-</p>
-</form>
-
-{entries%changelogentry}
-
-<form action="{url}log">
-{sessionvars%hiddenformentry}
-<p>
-<label for="search2">search:</label>
-<input name="rev" id="search2" type="text" size="30">
-navigate: <small class="navigate">{changenav%naventry}</small>
-</p>
-</form>
-
-{footer}
--- a/templates/spartan/changelogentry.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-<table class="logEntry parity{parity}">
- <tr>
-  <th class="age">{date|age}:</th>
-  <th class="firstline">{desc|strip|firstline|escape|nonempty}</th>
- </tr>
- <tr>
-  <th class="revision">changeset {rev}:</th>
-  <td class="node"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{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="{url}file/{node|short}{sessionvars%urlparameter}">files</a>:</th>
-  <td class="files">{files}</td>
- </tr>
-</table>
--- a/templates/spartan/changeset.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
-{header}
-<title>{repo|escape}: changeset {node|short}</title>
-</head>
-<body>
-
-<div class="buttons">
-<a href="{url}log/{rev}{sessionvars%urlparameter}">changelog</a>
-<a href="{url}shortlog/{rev}{sessionvars%urlparameter}">shortlog</a>
-<a href="{url}graph{sessionvars%urlparameter}">graph</a>
-<a href="{url}tags{sessionvars%urlparameter}">tags</a>
-<a href="{url}branches{sessionvars%urlparameter}">branches</a>
-<a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
-<a href="{url}raw-rev/{node|short}">raw</a>
-{archives%archiveentry}
-</div>
-
-<h2>changeset: {desc|strip|escape|firstline|nonempty}</h2>
-
-<table id="changesetEntry">
-<tr>
- <th class="changeset">changeset {rev}:</th>
- <td class="changeset"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{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})</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|nonempty}</td>
-</tr>
-</table>
-
-<div id="changesetDiff">
-{diff}
-</div>
-
-{footer}
-
-
--- a/templates/spartan/error.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,15 +0,0 @@
-{header}
-<title>Mercurial Error</title>
-</head>
-<body>
-
-<h2>Mercurial Error</h2>
-
-<p>
-An error occurred while processing your request:
-</p>
-<p>
-{error|escape}
-</p>
-
-{footer}
--- a/templates/spartan/fileannotate.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-{header}
-<title>{repo|escape}: {file|escape} annotate</title>
-</head>
-<body>
-
-<div class="buttons">
-<a href="{url}log/{rev}{sessionvars%urlparameter}">changelog</a>
-<a href="{url}shortlog/{rev}{sessionvars%urlparameter}">shortlog</a>
-<a href="{url}graph{sessionvars%urlparameter}">graph</a>
-<a href="{url}tags{sessionvars%urlparameter}">tags</a>
-<a href="{url}branches{sessionvars%urlparameter}">branches</a>
-<a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a>
-<a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a>
-<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a>
-<a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
-<a href="{url}raw-annotate/{node|short}/{file|urlescape}">raw</a>
-</div>
-
-<h2>Annotate {file|escape}</h2>
-
-<table>
-<tr>
- <td class="metatag">changeset {rev}:</td>
- <td><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td></tr>
-{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})</td>
-</tr>
-<tr>
- <td class="metatag">permissions:</td>
- <td>{permissions|permissions}</td>
-</tr>
-<tr>
-  <td class="metatag">description:</td>
-  <td>{desc|strip|escape|addbreaks|nonempty}</td>
-</tr>
-</table>
-
-<table cellspacing="0" cellpadding="0">
-{annotate%annotateline}
-</table>
-
-{footer}
--- a/templates/spartan/filediff.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-{header}
-<title>{repo|escape}: {file|escape} diff</title>
-</head>
-<body>
-
-<div class="buttons">
-<a href="{url}log/{rev}{sessionvars%urlparameter}">changelog</a>
-<a href="{url}shortlog/{rev}{sessionvars%urlparameter}">shortlog</a>
-<a href="{url}graph{sessionvars%urlparameter}">graph</a>
-<a href="{url}tags{sessionvars%urlparameter}">tags</a>
-<a href="{url}branches{sessionvars%urlparameter}">branches</a>
-<a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a>
-<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a>
-<a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
-<a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
-<a href="{url}raw-diff/{node|short}/{file|urlescape}">raw</a>
-</div>
-
-<h2>{file|escape}</h2>
-
-<table id="filediffEntry">
-<tr>
- <th class="revision">revision {rev}:</th>
- <td class="revision"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
-</tr>
-{parent%filediffparent}
-{child%filediffchild}
-</table>
-
-<div id="fileDiff">
-{diff}
-</div>
-
-{footer}
-
-
--- a/templates/spartan/filelog.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-{header}
-<title>{repo|escape}: {file|escape} history</title>
-<link rel="alternate" type="application/atom+xml"
-   href="{url}atom-log/tip/{file|urlescape}" title="Atom feed for {repo|escape}:{file}">
-<link rel="alternate" type="application/rss+xml"
-   href="{url}rss-log/tip/{file|urlescape}" title="RSS feed for {repo|escape}:{file}">
-</head>
-<body>
-
-<div class="buttons">
-<a href="{url}log{sessionvars%urlparameter}">changelog</a>
-<a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a>
-<a href="{url}graph{sessionvars%urlparameter}">graph</a>
-<a href="{url}tags{sessionvars%urlparameter}">tags</a>
-<a href="{url}branches{sessionvars%urlparameter}">branches</a>
-<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">file</a>
-<a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
-<a type="application/rss+xml" href="{url}rss-log/tip/{file|urlescape}">rss</a>
-<a type="application/atom+xml" href="{url}atom-log/tip/{file|urlescape}" title="Atom feed for {repo|escape}:{file}">atom</a>
-</div>
-
-<h2>{file|escape} revision history</h2>
-
-<p>navigate: <small class="navigate">{nav%filenaventry}</small></p>
-
-{entries%filelogentry}
-
-{footer}
--- a/templates/spartan/filelogentry.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-<table class="logEntry parity{parity}">
- <tr>
-  <th class="age">{date|age}:</th>
-  <th class="firstline"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{desc|strip|firstline|escape|nonempty}</a></th>
- </tr>
- <tr>
-  <th class="revision">revision {filerev}:</td>
-  <td class="node">
-   <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a>
-   <a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">(diff)</a>
-   <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">(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>
-
-
--- a/templates/spartan/filerevision.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-{header}
-<title>{repo|escape}:{file|escape}</title>
-</head>
-<body>
-
-<div class="buttons">
-<a href="{url}log/{rev}{sessionvars%urlparameter}">changelog</a>
-<a href="{url}shortlog/{rev}{sessionvars%urlparameter}">shortlog</a>
-<a href="{url}graph{sessionvars%urlparameter}">graph</a>
-<a href="{url}tags{sessionvars%urlparameter}">tags</a>
-<a href="{url}branches{sessionvars%urlparameter}">branches</a>
-<a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a>
-<a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">files</a>
-<a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">revisions</a>
-<a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">annotate</a>
-<a href="{url}raw-file/{node|short}/{file|urlescape}">raw</a>
-</div>
-
-<h2>{file|escape}</h2>
-
-<table>
-<tr>
- <td class="metatag">changeset {rev}:</td>
- <td><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td></tr>
-{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})</td></tr>
-<tr>
- <td class="metatag">permissions:</td>
- <td>{permissions|permissions}</td></tr>
-<tr>
-  <td class="metatag">description:</td>
-  <td>{desc|strip|escape|addbreaks|nonempty}</td>
-</tr>
-</table>
-
-<pre>
-{text%fileline}
-</pre>
-
-{footer}
--- a/templates/spartan/footer.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-{motd}
-<div class="logo">
-<a href="http://mercurial.selenic.com/">
-<img src="{staticurl}hglogo.png" width=75 height=90 border=0 alt="mercurial"></a>
-</div>
-
-</body>
-</html>
--- a/templates/spartan/graph.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,96 +0,0 @@
-{header}
-<title>{repo|escape}: graph</title>
-<link rel="alternate" type="application/atom+xml"
-   href="{url}atom-tags" title="Atom feed for {repo|escape}: tags">
-<link rel="alternate" type="application/rss+xml"
-   href="{url}rss-tags" title="RSS feed for {repo|escape}: tags">
-<!--[if IE]><script type="text/javascript" src="{staticurl}excanvas.js"></script><![endif]-->
-</head>
-<body>
-
-<div class="buttons">
-<a href="{url}log{sessionvars%urlparameter}">changelog</a>
-<a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a>
-<a href="{url}tags{sessionvars%urlparameter}">tags</a>
-<a href="{url}branches{sessionvars%urlparameter}">branches</a>
-<a href="{url}file/{node|short}/{sessionvars%urlparameter}">files</a>
-</div>
-
-<h2>graph</h2>
-
-<form action="{url}log">
-{sessionvars%hiddenformentry}
-<p>
-<label for="search1">search:</label>
-<input name="rev" id="search1" type="text" size="30">
-navigate: <small class="navigate">{changenav%navgraphentry}</small>
-</p>
-</form>
-
-<noscript>The revision graph only works with JavaScript-enabled browsers.</noscript>
-
-<div id="wrapper">
-<ul id="nodebgs"></ul>
-<canvas id="graph" width="224" height="{canvasheight}"></canvas>
-<ul id="graphnodes"></ul>
-</div>
-
-<script type="text/javascript" src="{staticurl}graph.js"></script>
-<script type="text/javascript">
-<!-- hide script content
-
-var data = {jsdata|json};
-var graph = new Graph();
-graph.scale({bg_height});
-
-graph.edge = function(x0, y0, x1, y1, color) {
-	
-	this.setColor(color, 0.0, 0.65);
-	this.ctx.beginPath();
-	this.ctx.moveTo(x0, y0);
-	this.ctx.lineTo(x1, y1);
-	this.ctx.stroke();
-	
-}
-
-var revlink = '<li style="_STYLE"><span class="desc">';
-revlink += '<a href="{url}rev/_NODEID{sessionvars%urlparameter}" title="_NODEID">_DESC</a>';
-revlink += '</span><span class="info">_DATE ago, by _USER</span></li>';
-
-graph.vertex = function(x, y, color, parity, cur) {
-	
-	this.ctx.beginPath();
-	color = this.setColor(color, 0.25, 0.75);
-	this.ctx.arc(x, y, radius, 0, Math.PI * 2, true);
-	this.ctx.fill();
-	
-	var bg = '<li class="bg parity' + parity + '"></li>';
-	var left = (this.columns + 1) * this.bg_height;
-	var nstyle = 'padding-left: ' + left + 'px;';
-	var item = revlink.replace(/_STYLE/, nstyle);
-	item = item.replace(/_PARITY/, 'parity' + parity);
-	item = item.replace(/_NODEID/, cur[0]);
-	item = item.replace(/_NODEID/, cur[0]);
-	item = item.replace(/_DESC/, cur[3]);
-	item = item.replace(/_USER/, cur[4]);
-	item = item.replace(/_DATE/, cur[5]);
-	
-	return [bg, item];
-	
-}
-
-graph.render(data);
-
-// stop hiding script -->
-</script>
-
-<form action="{url}log">
-{sessionvars%hiddenformentry}
-<p>
-<label for="search1">search:</label>
-<input name="rev" id="search1" type="text" size="30">
-navigate: <small class="navigate">{changenav%navgraphentry}</small>
-</p>
-</form>
-
-{footer}
--- a/templates/spartan/header.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<html>
-<head>
-<link rel="icon" href="{staticurl}hgicon.png" type="image/png">
-<meta name="robots" content="index, nofollow" />
-<link rel="stylesheet" href="{staticurl}style.css" type="text/css" />
--- a/templates/spartan/index.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-{header}
-<title>Mercurial repositories index</title>
-</head>
-<body>
-
-<h2>Mercurial Repositories</h2>
-
-<table>
-    <tr>
-        <td><a href="?sort={sort_name}">Name</a></td>
-        <td><a href="?sort={sort_description}">Description</a></td>
-        <td><a href="?sort={sort_contact}">Contact</a></td>
-        <td><a href="?sort={sort_lastchange}">Last change</a></td>
-        <td>&nbsp;</td>
-    </tr>
-    {entries%indexentry}
-</table>
-
-{footer}
--- a/templates/spartan/manifest.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-{header}
-<title>{repo|escape}: files for changeset {node|short}</title>
-</head>
-<body>
-
-<div class="buttons">
-<a href="{url}log/{rev}{sessionvars%urlparameter}">changelog</a>
-<a href="{url}shortlog/{rev}{sessionvars%urlparameter}">shortlog</a>
-<a href="{url}graph{sessionvars%urlparameter}">graph</a>
-<a href="{url}tags{sessionvars%urlparameter}">tags</a>
-<a href="{url}branches{sessionvars%urlparameter}">branches</a>
-<a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a>
-{archives%archiveentry}
-</div>
-
-<h2>files for changeset {node|short}: {path|escape}</h2>
-
-<table cellpadding="0" cellspacing="0">
-<tr class="parity{upparity}">
-  <td><tt>drwxr-xr-x</tt>&nbsp;
-  <td>&nbsp;
-  <td>&nbsp;
-  <td><a href="{url}file/{node|short}{up|urlescape}{sessionvars%urlparameter}">[up]</a>
-</tr>
-{dentries%direntry}
-{fentries%fileentry}
-</table>
-{footer}
--- a/templates/spartan/map	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,178 +0,0 @@
-default = 'shortlog'
-mimetype = 'text/html; charset={encoding}'
-header = header.tmpl
-footer = footer.tmpl
-search = search.tmpl
-changelog = changelog.tmpl
-shortlog = shortlog.tmpl
-shortlogentry = shortlogentry.tmpl
-graph = graph.tmpl
-naventry = '<a href="{url}log/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
-navshortentry = '<a href="{url}shortlog/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
-navgraphentry = '<a href="{url}graph/{node|short}{sessionvars%urlparameter}">{label|escape}</a> '
-filenaventry = '<a href="{url}log/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{label|escape}</a> '
-filedifflink = '<a href="{url}diff/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
-filenodelink = '<a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{file|escape}</a> '
-filenolink = '{file|escape} '
-fileellipses = '...'
-changelogentry = changelogentry.tmpl
-searchentry = changelogentry.tmpl
-changeset = changeset.tmpl
-manifest = manifest.tmpl
-
-direntry = '
-  <tr class="parity{parity}">
-    <td><tt>drwxr-xr-x</tt>&nbsp;
-    <td>&nbsp;
-    <td>&nbsp;
-    <td>
-      <a href="{url}file/{node|short}{path|urlescape}{sessionvars%urlparameter}">{basename|escape}/</a>
-      <a href="{url}file/{node|short}{path|urlescape}/{emptydirs|urlescape}{sessionvars%urlparameter}">
-        {emptydirs|urlescape}
-      </a>'
-
-fileentry = '
-  <tr class="parity{parity}">
-    <td><tt>{permissions|permissions}</tt>&nbsp;
-    <td align=right><tt class="date">{date|isodate}</tt>&nbsp;
-    <td align=right><tt>{size}</tt>&nbsp;
-    <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{basename|escape}</a>'
-
-filerevision = filerevision.tmpl
-fileannotate = fileannotate.tmpl
-filediff = filediff.tmpl
-filelog = filelog.tmpl
-fileline = '<div class="parity{parity}"><a class="lineno" href="#{lineid}" id="{lineid}">{linenumber}</a>&nbsp;{line|escape}</div>'
-filelogentry = filelogentry.tmpl
-
-# The &nbsp; ensures that all table cells have content (even if there
-# is an empty line in the annotated file), which in turn ensures that
-# all table rows have equal height.
-annotateline = '
-  <tr class="parity{parity}">
-    <td class="annotate">
-      <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}#l{targetline}"
-         title="{node|short}: {desc|escape|firstline}">{author|user}@{rev}</a>
-    </td>
-    <td>
-      <a class="lineno" href="#{lineid}" id="{lineid}">{linenumber}</a>
-    </td>
-    <td><pre>&nbsp;{line|escape}</pre></td>
-  </tr>'
-difflineplus = '<span class="plusline"><a class="lineno" href="#{lineid}" id="{lineid}">{linenumber}</a>{line|escape}</span>'
-difflineminus = '<span class="minusline"><a class="lineno" href="#{lineid}" id="{lineid}">{linenumber}</a>{line|escape}</span>'
-difflineat = '<span class="atline"><a class="lineno" href="#{lineid}" id="{lineid}">{linenumber}</a>{line|escape}</span>'
-diffline = '<a class="lineno" href="#{lineid}" id="{lineid}">{linenumber}</a>{line|escape}'
-changelogparent = '
-  <tr>
-    <th class="parent">parent {rev}:</th>
-    <td class="parent">
-      <a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a>
-    </td>
-  </tr>'
-changesetparent = '
-  <tr>
-    <th class="parent">parent {rev}:</th>
-    <td class="parent"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
-  </tr>'
-filerevparent = '
-  <tr>
-    <td class="metatag">parent:</td>
-    <td>
-      <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
-        {rename%filerename}{node|short}
-      </a>
-    </td>
-  </tr>'
-filerename = '{file|escape}@'
-filelogrename = '
-  <tr>
-    <th>base:</th>
-    <td>
-      <a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
-        {file|escape}@{node|short}
-      </a>
-    </td>
-  </tr>'
-fileannotateparent = '
-  <tr>
-    <td class="metatag">parent:</td>
-    <td>
-      <a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">
-        {rename%filerename}{node|short}
-      </a>
-    </td>
-  </tr>'
-changesetchild = '
-  <tr>
-    <th class="child">child {rev}:</th>
-    <td class="child"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
-  </tr>'
-changelogchild = '
-  <tr>
-    <th class="child">child {rev}:</th>
-    <td class="child"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
-  </tr>'
-filerevchild = '
-  <tr>
-    <td class="metatag">child:</td>
-    <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
-  </tr>'
-fileannotatechild = '
-  <tr>
-    <td class="metatag">child:</td>
-    <td><a href="{url}annotate/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
-  </tr>'
-tags = tags.tmpl
-tagentry = '
-  <li class="tagEntry parity{parity}">
-    <tt class="node">{node}</tt>
-    <a href="{url}rev/{node|short}{sessionvars%urlparameter}">{tag|escape}</a>
-  </li>'
-branches = branches.tmpl
-branchentry = '
-  <li class="tagEntry parity{parity}">
-    <tt class="node">{node}</tt>
-    <a href="{url}shortlog/{node|short}{sessionvars%urlparameter}" class="{status}">{branch|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="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
-  </tr>'
-filelogparent = '
-  <tr>
-    <th>parent {rev}:</th>
-    <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
-  </tr>'
-filediffchild = '
-  <tr>
-    <th class="child">child {rev}:</th>
-    <td class="child"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td>
-  </tr>'
-filelogchild = '
-  <tr>
-    <th>child {rev}:</th>
-    <td><a href="{url}file/{node|short}/{file|urlescape}{sessionvars%urlparameter}">{node|short}</a></td>
-  </tr>'
-indexentry = '
-  <tr class="parity{parity}">
-    <td><a href="{url}{sessionvars%urlparameter}">{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>
-      <a href="{url}atom-log">Atom</a>
-      {archives%archiveentry}
-    </td>
-  </tr>'
-index = index.tmpl
-archiveentry = '<a href="{url}archive/{node|short}{extension|urlescape}">{type|escape}</a> '
-notfound = notfound.tmpl
-error = error.tmpl
-urlparameter = '{separator}{name}={value|urlescape}'
-hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
--- a/templates/spartan/notfound.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
-{header}
-<title>Mercurial repository not found</title>
-</head>
-<body>
-
-<h2>Mercurial repository not found</h2>
-
-The specified repository "{repo|escape}" is unknown, sorry.
-
-Please go back to the <a href="{url}">main repository list page</a>.
-
-{footer}
--- a/templates/spartan/search.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-{header}
-<title>{repo|escape}: searching for {query|escape}</title>
-</head>
-<body>
-
-<div class="buttons">
-<a href="{url}log{sessionvars%urlparameter}">changelog</a>
-<a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a>
-<a href="{url}graph{sessionvars%urlparameter}">graph</a>
-<a href="{url}tags{sessionvars%urlparameter}">tags</a>
-<a href="{url}branches{sessionvars%urlparameter}">branches</a>
-<a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>
-{archives%archiveentry}
-</div>
-
-<h2>searching for {query|escape}</h2>
-
-<form>
-{sessionvars%hiddenformentry}
-<p>
-search:
-<input name="rev" type="text" width="30" value="{query|escape}">
-</p>
-</form>
-
-{entries}
-
-<form>
-{sessionvars%hiddenformentry}
-<p>
-search:
-<input name="rev" type="text" width="30" value="{query|escape}">
-</p>
-</form>
-
-{footer}
--- a/templates/spartan/shortlog.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-{header}
-<title>{repo|escape}: shortlog</title>
-<link rel="alternate" type="application/atom+xml"
-   href="{url}atom-log" title="Atom feed for {repo|escape}">
-<link rel="alternate" type="application/rss+xml"
-   href="{url}rss-log" title="RSS feed for {repo|escape}">
-</head>
-<body>
-
-<div class="buttons">
-<a href="{url}log/{rev}{sessionvars%urlparameter}">changelog</a>
-<a href="{url}graph{sessionvars%urlparameter}">graph</a>
-<a href="{url}tags{sessionvars%urlparameter}">tags</a>
-<a href="{url}branches{sessionvars%urlparameter}">branches</a>
-<a href="{url}file/{node|short}/{sessionvars%urlparameter}">files</a>
-{archives%archiveentry}
-<a type="application/rss+xml" href="{url}rss-log">rss</a>
-<a type="application/rss+xml" href="{url}atom-log" title="Atom feed for {repo|escape}">atom</a>
-</div>
-
-<h2>shortlog for {repo|escape}</h2>
-
-<form action="{url}log">
-{sessionvars%hiddenformentry}
-<p>
-<label for="search1">search:</label>
-<input name="rev" id="search1" type="text" size="30">
-navigate: <small class="navigate">{changenav%navshortentry}</small>
-</p>
-</form>
-
-{entries%shortlogentry}
-
-<form action="{url}log">
-{sessionvars%hiddenformentry}
-<p>
-<label for="search2">search:</label>
-<input name="rev" id="search2" type="text" size="30">
-navigate: <small class="navigate">{changenav%navshortentry}</small>
-</p>
-</form>
-
-{footer}
--- a/templates/spartan/shortlogentry.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-<table class="slogEntry parity{parity}">
- <tr>
-  <td class="age">{date|age}</td>
-  <td class="author">{author|person}</td>
-  <td class="node"><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{desc|strip|firstline|escape|nonempty}</a></td>
- </tr>
-</table>
--- a/templates/spartan/tags.tmpl	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-{header}
-<title>{repo|escape}: tags</title>
-<link rel="alternate" type="application/atom+xml"
-   href="{url}atom-tags" title="Atom feed for {repo|escape}: tags">
-<link rel="alternate" type="application/rss+xml"
-   href="{url}rss-tags" title="RSS feed for {repo|escape}: tags">
-</head>
-<body>
-
-<div class="buttons">
-<a href="{url}log{sessionvars%urlparameter}">changelog</a>
-<a href="{url}shortlog{sessionvars%urlparameter}">shortlog</a>
-<a href="{url}graph{sessionvars%urlparameter}">graph</a>
-<a href="{url}branches{sessionvars%urlparameter}">branches</a>
-<a href="{url}file/{node|short}/{sessionvars%urlparameter}">files</a>
-<a type="application/rss+xml" href="{url}rss-tags">rss</a>
-<a type="application/atom+xml" href="{url}atom-tags">atom</a>
-</div>
-
-<h2>tags:</h2>
-
-<ul id="tagEntries">
-{entries%tagentry}
-</ul>
-
-{footer}
Binary file templates/static/background.png has changed
Binary file templates/static/coal-file.png has changed
Binary file templates/static/coal-folder.png has changed
--- a/templates/static/excanvas.js	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-if(!window.CanvasRenderingContext2D){(function(){var I=Math,i=I.round,L=I.sin,M=I.cos,m=10,A=m/2,Q={init:function(a){var b=a||document;if(/MSIE/.test(navigator.userAgent)&&!window.opera){var c=this;b.attachEvent("onreadystatechange",function(){c.r(b)})}},r:function(a){if(a.readyState=="complete"){if(!a.namespaces["s"]){a.namespaces.add("g_vml_","urn:schemas-microsoft-com:vml")}var b=a.createStyleSheet();b.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}g_vml_\\:*{behavior:url(#default#VML)}";
-var c=a.getElementsByTagName("canvas");for(var d=0;d<c.length;d++){if(!c[d].getContext){this.initElement(c[d])}}}},q:function(a){var b=a.outerHTML,c=a.ownerDocument.createElement(b);if(b.slice(-2)!="/>"){var d="/"+a.tagName,e;while((e=a.nextSibling)&&e.tagName!=d){e.removeNode()}if(e){e.removeNode()}}a.parentNode.replaceChild(c,a);return c},initElement:function(a){a=this.q(a);a.getContext=function(){if(this.l){return this.l}return this.l=new K(this)};a.attachEvent("onpropertychange",V);a.attachEvent("onresize",
-W);var b=a.attributes;if(b.width&&b.width.specified){a.style.width=b.width.nodeValue+"px"}else{a.width=a.clientWidth}if(b.height&&b.height.specified){a.style.height=b.height.nodeValue+"px"}else{a.height=a.clientHeight}return a}};function V(a){var b=a.srcElement;switch(a.propertyName){case "width":b.style.width=b.attributes.width.nodeValue+"px";b.getContext().clearRect();break;case "height":b.style.height=b.attributes.height.nodeValue+"px";b.getContext().clearRect();break}}function W(a){var b=a.srcElement;
-if(b.firstChild){b.firstChild.style.width=b.clientWidth+"px";b.firstChild.style.height=b.clientHeight+"px"}}Q.init();var R=[];for(var E=0;E<16;E++){for(var F=0;F<16;F++){R[E*16+F]=E.toString(16)+F.toString(16)}}function J(){return[[1,0,0],[0,1,0],[0,0,1]]}function G(a,b){var c=J();for(var d=0;d<3;d++){for(var e=0;e<3;e++){var g=0;for(var h=0;h<3;h++){g+=a[d][h]*b[h][e]}c[d][e]=g}}return c}function N(a,b){b.fillStyle=a.fillStyle;b.lineCap=a.lineCap;b.lineJoin=a.lineJoin;b.lineWidth=a.lineWidth;b.miterLimit=
-a.miterLimit;b.shadowBlur=a.shadowBlur;b.shadowColor=a.shadowColor;b.shadowOffsetX=a.shadowOffsetX;b.shadowOffsetY=a.shadowOffsetY;b.strokeStyle=a.strokeStyle;b.d=a.d;b.e=a.e}function O(a){var b,c=1;a=String(a);if(a.substring(0,3)=="rgb"){var d=a.indexOf("(",3),e=a.indexOf(")",d+1),g=a.substring(d+1,e).split(",");b="#";for(var h=0;h<3;h++){b+=R[Number(g[h])]}if(g.length==4&&a.substr(3,1)=="a"){c=g[3]}}else{b=a}return[b,c]}function S(a){switch(a){case "butt":return"flat";case "round":return"round";
-case "square":default:return"square"}}function K(a){this.a=J();this.m=[];this.k=[];this.c=[];this.strokeStyle="#000";this.fillStyle="#000";this.lineWidth=1;this.lineJoin="miter";this.lineCap="butt";this.miterLimit=m*1;this.globalAlpha=1;this.canvas=a;var b=a.ownerDocument.createElement("div");b.style.width=a.clientWidth+"px";b.style.height=a.clientHeight+"px";b.style.overflow="hidden";b.style.position="absolute";a.appendChild(b);this.j=b;this.d=1;this.e=1}var j=K.prototype;j.clearRect=function(){this.j.innerHTML=
-"";this.c=[]};j.beginPath=function(){this.c=[]};j.moveTo=function(a,b){this.c.push({type:"moveTo",x:a,y:b});this.f=a;this.g=b};j.lineTo=function(a,b){this.c.push({type:"lineTo",x:a,y:b});this.f=a;this.g=b};j.bezierCurveTo=function(a,b,c,d,e,g){this.c.push({type:"bezierCurveTo",cp1x:a,cp1y:b,cp2x:c,cp2y:d,x:e,y:g});this.f=e;this.g=g};j.quadraticCurveTo=function(a,b,c,d){var e=this.f+0.6666666666666666*(a-this.f),g=this.g+0.6666666666666666*(b-this.g),h=e+(c-this.f)/3,l=g+(d-this.g)/3;this.bezierCurveTo(e,
-g,h,l,c,d)};j.arc=function(a,b,c,d,e,g){c*=m;var h=g?"at":"wa",l=a+M(d)*c-A,n=b+L(d)*c-A,o=a+M(e)*c-A,f=b+L(e)*c-A;if(l==o&&!g){l+=0.125}this.c.push({type:h,x:a,y:b,radius:c,xStart:l,yStart:n,xEnd:o,yEnd:f})};j.rect=function(a,b,c,d){this.moveTo(a,b);this.lineTo(a+c,b);this.lineTo(a+c,b+d);this.lineTo(a,b+d);this.closePath()};j.strokeRect=function(a,b,c,d){this.beginPath();this.moveTo(a,b);this.lineTo(a+c,b);this.lineTo(a+c,b+d);this.lineTo(a,b+d);this.closePath();this.stroke()};j.fillRect=function(a,
-b,c,d){this.beginPath();this.moveTo(a,b);this.lineTo(a+c,b);this.lineTo(a+c,b+d);this.lineTo(a,b+d);this.closePath();this.fill()};j.createLinearGradient=function(a,b,c,d){var e=new H("gradient");return e};j.createRadialGradient=function(a,b,c,d,e,g){var h=new H("gradientradial");h.n=c;h.o=g;h.i.x=a;h.i.y=b;return h};j.drawImage=function(a,b){var c,d,e,g,h,l,n,o,f=a.runtimeStyle.width,k=a.runtimeStyle.height;a.runtimeStyle.width="auto";a.runtimeStyle.height="auto";var q=a.width,r=a.height;a.runtimeStyle.width=
-f;a.runtimeStyle.height=k;if(arguments.length==3){c=arguments[1];d=arguments[2];h=(l=0);n=(e=q);o=(g=r)}else if(arguments.length==5){c=arguments[1];d=arguments[2];e=arguments[3];g=arguments[4];h=(l=0);n=q;o=r}else if(arguments.length==9){h=arguments[1];l=arguments[2];n=arguments[3];o=arguments[4];c=arguments[5];d=arguments[6];e=arguments[7];g=arguments[8]}else{throw"Invalid number of arguments";}var s=this.b(c,d),t=[],v=10,w=10;t.push(" <g_vml_:group",' coordsize="',m*v,",",m*w,'"',' coordorigin="0,0"',
-' style="width:',v,";height:",w,";position:absolute;");if(this.a[0][0]!=1||this.a[0][1]){var x=[];x.push("M11='",this.a[0][0],"',","M12='",this.a[1][0],"',","M21='",this.a[0][1],"',","M22='",this.a[1][1],"',","Dx='",i(s.x/m),"',","Dy='",i(s.y/m),"'");var p=s,y=this.b(c+e,d),z=this.b(c,d+g),B=this.b(c+e,d+g);p.x=Math.max(p.x,y.x,z.x,B.x);p.y=Math.max(p.y,y.y,z.y,B.y);t.push("padding:0 ",i(p.x/m),"px ",i(p.y/m),"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(",x.join(""),", sizingmethod='clip');")}else{t.push("top:",
-i(s.y/m),"px;left:",i(s.x/m),"px;")}t.push(' ">','<g_vml_:image src="',a.src,'"',' style="width:',m*e,";"," height:",m*g,';"',' cropleft="',h/q,'"',' croptop="',l/r,'"',' cropright="',(q-h-n)/q,'"',' cropbottom="',(r-l-o)/r,'"'," />","</g_vml_:group>");this.j.insertAdjacentHTML("BeforeEnd",t.join(""))};j.stroke=function(a){var b=[],c=O(a?this.fillStyle:this.strokeStyle),d=c[0],e=c[1]*this.globalAlpha,g=10,h=10;b.push("<g_vml_:shape",' fillcolor="',d,'"',' filled="',Boolean(a),'"',' style="position:absolute;width:',
-g,";height:",h,';"',' coordorigin="0 0" coordsize="',m*g," ",m*h,'"',' stroked="',!a,'"',' strokeweight="',this.lineWidth,'"',' strokecolor="',d,'"',' path="');var l={x:null,y:null},n={x:null,y:null};for(var o=0;o<this.c.length;o++){var f=this.c[o];if(f.type=="moveTo"){b.push(" m ");var k=this.b(f.x,f.y);b.push(i(k.x),",",i(k.y))}else if(f.type=="lineTo"){b.push(" l ");var k=this.b(f.x,f.y);b.push(i(k.x),",",i(k.y))}else if(f.type=="close"){b.push(" x ")}else if(f.type=="bezierCurveTo"){b.push(" c ");
-var k=this.b(f.x,f.y),q=this.b(f.cp1x,f.cp1y),r=this.b(f.cp2x,f.cp2y);b.push(i(q.x),",",i(q.y),",",i(r.x),",",i(r.y),",",i(k.x),",",i(k.y))}else if(f.type=="at"||f.type=="wa"){b.push(" ",f.type," ");var k=this.b(f.x,f.y),s=this.b(f.xStart,f.yStart),t=this.b(f.xEnd,f.yEnd);b.push(i(k.x-this.d*f.radius),",",i(k.y-this.e*f.radius)," ",i(k.x+this.d*f.radius),",",i(k.y+this.e*f.radius)," ",i(s.x),",",i(s.y)," ",i(t.x),",",i(t.y))}if(k){if(l.x==null||k.x<l.x){l.x=k.x}if(n.x==null||k.x>n.x){n.x=k.x}if(l.y==
-null||k.y<l.y){l.y=k.y}if(n.y==null||k.y>n.y){n.y=k.y}}}b.push(' ">');if(typeof this.fillStyle=="object"){var v={x:"50%",y:"50%"},w=n.x-l.x,x=n.y-l.y,p=w>x?w:x;v.x=i(this.fillStyle.i.x/w*100+50)+"%";v.y=i(this.fillStyle.i.y/x*100+50)+"%";var y=[];if(this.fillStyle.p=="gradientradial"){var z=this.fillStyle.n/p*100,B=this.fillStyle.o/p*100-z}else{var z=0,B=100}var C={offset:null,color:null},D={offset:null,color:null};this.fillStyle.h.sort(function(T,U){return T.offset-U.offset});for(var o=0;o<this.fillStyle.h.length;o++){var u=
-this.fillStyle.h[o];y.push(u.offset*B+z,"% ",u.color,",");if(u.offset>C.offset||C.offset==null){C.offset=u.offset;C.color=u.color}if(u.offset<D.offset||D.offset==null){D.offset=u.offset;D.color=u.color}}y.pop();b.push("<g_vml_:fill",' color="',D.color,'"',' color2="',C.color,'"',' type="',this.fillStyle.p,'"',' focusposition="',v.x,", ",v.y,'"',' colors="',y.join(""),'"',' opacity="',e,'" />')}else if(a){b.push('<g_vml_:fill color="',d,'" opacity="',e,'" />')}else{b.push("<g_vml_:stroke",' opacity="',
-e,'"',' joinstyle="',this.lineJoin,'"',' miterlimit="',this.miterLimit,'"',' endcap="',S(this.lineCap),'"',' weight="',this.lineWidth,'px"',' color="',d,'" />')}b.push("</g_vml_:shape>");this.j.insertAdjacentHTML("beforeEnd",b.join(""));this.c=[]};j.fill=function(){this.stroke(true)};j.closePath=function(){this.c.push({type:"close"})};j.b=function(a,b){return{x:m*(a*this.a[0][0]+b*this.a[1][0]+this.a[2][0])-A,y:m*(a*this.a[0][1]+b*this.a[1][1]+this.a[2][1])-A}};j.save=function(){var a={};N(this,a);
-this.k.push(a);this.m.push(this.a);this.a=G(J(),this.a)};j.restore=function(){N(this.k.pop(),this);this.a=this.m.pop()};j.translate=function(a,b){var c=[[1,0,0],[0,1,0],[a,b,1]];this.a=G(c,this.a)};j.rotate=function(a){var b=M(a),c=L(a),d=[[b,c,0],[-c,b,0],[0,0,1]];this.a=G(d,this.a)};j.scale=function(a,b){this.d*=a;this.e*=b;var c=[[a,0,0],[0,b,0],[0,0,1]];this.a=G(c,this.a)};j.clip=function(){};j.arcTo=function(){};j.createPattern=function(){return new P};function H(a){this.p=a;this.n=0;this.o=
-0;this.h=[];this.i={x:0,y:0}}H.prototype.addColorStop=function(a,b){b=O(b);this.h.push({offset:1-a,color:b})};function P(){}G_vmlCanvasManager=Q;CanvasRenderingContext2D=K;CanvasGradient=H;CanvasPattern=P})()};
--- a/templates/static/graph.js	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,137 +0,0 @@
-// branch_renderer.js - Rendering of branch DAGs on the client side
-//
-// Copyright 2008 Dirkjan Ochtman <dirkjan AT ochtman DOT nl>
-// Copyright 2006 Alexander Schremmer <alex AT alexanderweb DOT de>
-//
-// derived from code written by Scott James Remnant <scott@ubuntu.com>
-// Copyright 2005 Canonical Ltd.
-//
-// This software may be used and distributed according to the terms
-// of the GNU General Public License, incorporated herein by reference.
-
-var colors = [
-	[ 1.0, 0.0, 0.0 ],
-	[ 1.0, 1.0, 0.0 ],
-	[ 0.0, 1.0, 0.0 ],
-	[ 0.0, 1.0, 1.0 ],
-	[ 0.0, 0.0, 1.0 ],
-	[ 1.0, 0.0, 1.0 ]
-];
-
-function Graph() {
-	
-	this.canvas = document.getElementById('graph');
-	if (navigator.userAgent.indexOf('MSIE') >= 0) this.canvas = window.G_vmlCanvasManager.initElement(this.canvas);
-	this.ctx = this.canvas.getContext('2d');
-	this.ctx.strokeStyle = 'rgb(0, 0, 0)';
-	this.ctx.fillStyle = 'rgb(0, 0, 0)';
-	this.cur = [0, 0];
-	this.line_width = 3;
-	this.bg = [0, 4];
-	this.cell = [2, 0];
-	this.columns = 0;
-	this.revlink = '';
-	
-	this.scale = function(height) {
-		this.bg_height = height;
-		this.box_size = Math.floor(this.bg_height / 1.2);
-		this.cell_height = this.box_size;
-	}
-	
-	function colorPart(num) {
-		num *= 255
-		num = num < 0 ? 0 : num;
-		num = num > 255 ? 255 : num;
-		var digits = Math.round(num).toString(16);
-		if (num < 16) {
-			return '0' + digits;
-		} else {
-			return digits;
-		}
-	}
-
-	this.setColor = function(color, bg, fg) {
-		
-		// Set the colour.
-		//
-		// Picks a distinct colour based on an internal wheel; the bg
-		// parameter provides the value that should be assigned to the 'zero'
-		// colours and the fg parameter provides the multiplier that should be
-		// applied to the foreground colours.
-		
-		color %= colors.length;
-		var red = (colors[color][0] * fg) || bg;
-		var green = (colors[color][1] * fg) || bg;
-		var blue = (colors[color][2] * fg) || bg;
-		red = Math.round(red * 255);
-		green = Math.round(green * 255);
-		blue = Math.round(blue * 255);
-		var s = 'rgb(' + red + ', ' + green + ', ' + blue + ')';
-		this.ctx.strokeStyle = s;
-		this.ctx.fillStyle = s;
-		return s;
-		
-	}
-
-	this.render = function(data) {
-		
-		var backgrounds = '';
-		var nodedata = '';
-		
-		for (var i in data) {
-			
-			var parity = i % 2;
-			this.cell[1] += this.bg_height;
-			this.bg[1] += this.bg_height;
-			
-			var cur = data[i];
-			var node = cur[1];
-			var edges = cur[2];
-			var fold = false;
-			
-			for (var j in edges) {
-				
-				line = edges[j];
-				start = line[0];
-				end = line[1];
-				color = line[2];
-
-				if (end > this.columns || start > this.columns) {
-					this.columns += 1;
-				}
-				
-				if (start == this.columns && start > end) {
-					var fold = true;
-				}
-				
-				x0 = this.cell[0] + this.box_size * start + this.box_size / 2;
-				y0 = this.bg[1] - this.bg_height / 2;
-				x1 = this.cell[0] + this.box_size * end + this.box_size / 2;
-				y1 = this.bg[1] + this.bg_height / 2;
-				
-				this.edge(x0, y0, x1, y1, color);
-				
-			}
-			
-			// Draw the revision node in the right column
-			
-			column = node[0]
-			color = node[1]
-			
-			radius = this.box_size / 8;
-			x = this.cell[0] + this.box_size * column + this.box_size / 2;
-			y = this.bg[1] - this.bg_height / 2;
-			var add = this.vertex(x, y, color, parity, cur);
-			backgrounds += add[0];
-			nodedata += add[1];
-			
-			if (fold) this.columns -= 1;
-			
-		}
-		
-		document.getElementById('nodebgs').innerHTML += backgrounds;
-		document.getElementById('graphnodes').innerHTML += nodedata;
-		
-	}
-
-}
Binary file templates/static/hgicon.png has changed
Binary file templates/static/hglogo.png has changed
--- a/templates/static/style-coal.css	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,265 +0,0 @@
-body {
-  margin: 0;
-  padding: 0;
-  background: black url(background.png) repeat-x;
-  font-family: sans-serif;
-}
-
-.container {
-  padding-right: 150px;
-}
-
-.main {
-  position: relative;
-  background: white;
-  padding: 2em;
-  border-right: 15px solid black;
-  border-bottom: 15px solid black;
-}
-
-#.main {
-  width: 98%;
-}
-
-.overflow {
-  width: 100%;
-  overflow: auto;
-}
-
-.menu {
-  background: #999;
-  padding: 10px;
-  width: 75px;
-  margin: 0;
-  font-size: 80%;
-  text-align: left;
-  position: fixed;
-  top: 27px;
-  left: auto;
-  right: 27px;
-}
-
-#.menu {
-  position: absolute !important;
-  top:expression(eval(document.body.scrollTop + 27));
-}
-
-.menu ul {
-  list-style: none;
-  padding: 0;
-  margin: 10px 0 0 0;
-}
-
-.menu li {
-  margin-bottom: 3px;
-  padding: 2px 4px;
-  background: white;
-  color: black;
-  font-weight: normal;
-}
-
-.menu li.active {
-  background: black;
-  color: white;
-}
-
-.menu img {
-  width: 75px;
-  height: 90px;
-  border: 0;
-}
-
-.menu a { color: black; display: block; }
-
-.search {
-  position: absolute;
-  top: .7em;
-  right: 2em;
-}
-
-form.search div#hint {
-  display: none;
-  position: absolute;
-  top: 40px;
-  right: 0px;
-  width: 190px;
-  padding: 5px;
-  background: #ffc;
-  font-size: 70%;
-  border: 1px solid yellow;
-  -moz-border-radius: 5px; /* this works only in camino/firefox */
-  -webkit-border-radius: 5px; /* this is just for Safari */
-}
-
-form.search:hover div#hint { display: block; }
-
-a { text-decoration:none; }
-.age { white-space:nowrap; }
-.date { white-space:nowrap; }
-.indexlinks { white-space:nowrap; }
-.parity0 { background-color: #f0f0f0; }
-.parity1 { background-color: white; }
-.plusline { color: green; }
-.minusline { color: #dc143c; } /* crimson */
-.atline { color: purple; }
-
-.navigate {
-  text-align: right;
-  font-size: 60%;
-  margin: 1em 0;
-}
-
-.tag {
-  color: #999;
-  font-size: 70%;
-  font-weight: normal;
-  margin-left: .5em;
-  vertical-align: baseline;
-}
-
-.branchhead {
-  color: #000;
-  font-size: 80%;
-  font-weight: normal;
-  margin-left: .5em;
-  vertical-align: baseline;
-}
-
-ul#graphnodes .branchhead {
-  font-size: 75%;
-}
-
-.branchname {
-  color: #000;
-  font-size: 60%; 
-  font-weight: normal;
-  margin-left: .5em;
-  vertical-align: baseline;
-}
-
-h3 .branchname {
-  font-size: 80%;
-}
-
-/* Common */
-pre { margin: 0; }
-
-h2 { font-size: 120%; border-bottom: 1px solid #999; }
-h2 a { color: #000; }
-h3 {
-  margin-top: -.7em;
-  font-size: 100%;
-}
-
-/* log and tags tables */
-.bigtable {
-  border-bottom: 1px solid #999;
-  border-collapse: collapse;
-  font-size: 90%;
-  width: 100%;
-  font-weight: normal;
-  text-align: left;
-}
-
-.bigtable td {
-  vertical-align: top;
-}
-
-.bigtable th {
-  padding: 1px 4px;
-  border-bottom: 1px solid #999;
-}
-.bigtable tr { border: none; }
-.bigtable .age { width: 6em; }
-.bigtable .author { width: 12em; }
-.bigtable .description { }
-.bigtable .node { width: 5em; font-family: monospace;}
-.bigtable .lineno { width: 2em; text-align: right;}
-.bigtable .lineno a { color: #999; font-size: smaller; font-family: monospace;}
-.bigtable .permissions { width: 8em; text-align: left;}
-.bigtable .size { width: 5em; text-align: right; }
-.bigtable .annotate { text-align: right; }
-.bigtable td.annotate { font-size: smaller; }
-.bigtable td.source { font-size: inherit; }
-
-.source, .sourcefirst, .sourcelast {
-  font-family: monospace;
-  white-space: pre;
-  padding: 1px 4px;
-  font-size: 90%;
-}
-.sourcefirst { border-bottom: 1px solid #999; font-weight: bold; }
-.sourcelast { border-top: 1px solid #999; }
-.source a { color: #999; font-size: smaller; font-family: monospace;}
-.bottomline { border-bottom: 1px solid #999; }
-
-.fileline { font-family: monospace; }
-.fileline img { border: 0; }
-
-.tagEntry .closed { color: #99f; }
-
-/* Changeset entry */
-#changesetEntry {
-  border-collapse: collapse;
-  font-size: 90%;
-  width: 100%;
-  margin-bottom: 1em;
-}
-
-#changesetEntry th {
-  padding: 1px 4px;
-  width: 4em;
-  text-align: right;
-  font-weight: normal;
-  color: #999;
-  margin-right: .5em;
-  vertical-align: top;
-}
-
-div.description {
-  border-left: 3px solid #999;
-  margin: 1em 0 1em 0;
-  padding: .3em;
-}
-
-/* Graph */
-div#wrapper {
-	position: relative;
-	border-top: 1px solid black;
-	border-bottom: 1px solid black;
-	margin: 0;
-	padding: 0;
-}
-
-canvas {
-	position: absolute;
-	z-index: 5;
-	top: -0.7em;
-	margin: 0;
-}
-
-ul#graphnodes {
-	position: absolute;
-	z-index: 10;
-	top: -1.0em;
-	list-style: none inside none;
-	padding: 0;
-}
-
-ul#nodebgs {
-	list-style: none inside none;
-	padding: 0;
-	margin: 0;
-	top: -0.7em;
-}
-
-ul#graphnodes li, ul#nodebgs li {
-	height: 39px;
-}
-
-ul#graphnodes li .info {
-	display: block;
-	font-size: 70%;
-	position: relative;
-	top: -3px;
-}
--- a/templates/static/style-gitweb.css	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,123 +0,0 @@
-body { font-family: sans-serif; font-size: 12px; margin:0px; border:solid #d9d8d1; border-width:1px; margin:10px; }
-a { color:#0000cc; }
-a:hover, a:visited, a:active { color:#880000; }
-div.page_header { height:25px; padding:8px; font-size:18px; font-weight:bold; background-color:#d9d8d1; }
-div.page_header a:visited { color:#0000cc; }
-div.page_header a:hover { color:#880000; }
-div.page_nav { padding:8px; }
-div.page_nav a:visited { color:#0000cc; }
-div.page_path { padding:8px; border:solid #d9d8d1; border-width:0px 0px 1px}
-div.page_footer { padding:4px 8px; background-color: #d9d8d1; }
-div.page_footer_text { float:left; color:#555555; font-style:italic; }
-div.page_body { padding:8px; }
-div.title, a.title {
-	display:block; padding:6px 8px;
-	font-weight:bold; background-color:#edece6; text-decoration:none; color:#000000;
-}
-a.title:hover { background-color: #d9d8d1; }
-div.title_text { padding:6px 0px; border: solid #d9d8d1; border-width:0px 0px 1px; }
-div.log_body { padding:8px 8px 8px 150px; }
-.age { white-space:nowrap; }
-span.age { position:relative; float:left; width:142px; font-style:italic; }
-div.log_link {
-	padding:0px 8px;
-	font-size:10px; font-family:sans-serif; font-style:normal;
-	position:relative; float:left; width:136px;
-}
-div.list_head { padding:6px 8px 4px; border:solid #d9d8d1; border-width:1px 0px 0px; font-style:italic; }
-a.list { text-decoration:none; color:#000000; }
-a.list:hover { text-decoration:underline; color:#880000; }
-table { padding:8px 4px; }
-th { padding:2px 5px; font-size:12px; text-align:left; }
-tr.light:hover, .parity0:hover { background-color:#edece6; }
-tr.dark, .parity1 { background-color:#f6f6f0; }
-tr.dark:hover, .parity1:hover { background-color:#edece6; }
-td { padding:2px 5px; font-size:12px; vertical-align:top; }
-td.link { padding:2px 5px; font-family:sans-serif; font-size:10px; }
-td.indexlinks { white-space: nowrap; }
-td.indexlinks a {
-  padding: 2px 5px; line-height: 10px;
-  border: 1px solid;
-  color: #ffffff; background-color: #7777bb;
-  border-color: #aaaadd #333366 #333366 #aaaadd;
-  font-weight: bold;  text-align: center; text-decoration: none;
-  font-size: 10px;
-}
-td.indexlinks a:hover { background-color: #6666aa; }
-div.pre { font-family:monospace; font-size:12px; white-space:pre; }
-div.diff_info { font-family:monospace; color:#000099; background-color:#edece6; font-style:italic; }
-div.index_include { border:solid #d9d8d1; border-width:0px 0px 1px; padding:12px 8px; }
-div.search { margin:4px 8px; position:absolute; top:56px; right:12px }
-.linenr { color:#999999; text-decoration:none }
-div.rss_logo { float: right; white-space: nowrap; }
-div.rss_logo a {
-	padding:3px 6px; line-height:10px;
-	border:1px solid; border-color:#fcc7a5 #7d3302 #3e1a01 #ff954e;
-	color:#ffffff; background-color:#ff6600;
-	font-weight:bold; font-family:sans-serif; font-size:10px;
-	text-align:center; text-decoration:none;
-}
-div.rss_logo a:hover { background-color:#ee5500; }
-pre { margin: 0; }
-span.logtags span {
-	padding: 0px 4px;
-	font-size: 10px;
-	font-weight: normal;
-	border: 1px solid;
-	background-color: #ffaaff;
-	border-color: #ffccff #ff00ee #ff00ee #ffccff;
-}
-span.logtags span.tagtag {
-	background-color: #ffffaa;
-	border-color: #ffffcc #ffee00 #ffee00 #ffffcc;
-}
-span.logtags span.branchtag {
-	background-color: #aaffaa;
-	border-color: #ccffcc #00cc33 #00cc33 #ccffcc;
-}
-span.logtags span.inbranchtag {
-	background-color: #d5dde6;
-	border-color: #e3ecf4 #9398f4 #9398f4 #e3ecf4;
-}
-
-/* Graph */
-div#wrapper {
-	position: relative;
-	margin: 0;
-	padding: 0;
-	margin-top: 3px;
-}
-
-canvas {
-	position: absolute;
-	z-index: 5;
-	top: -0.9em;
-	margin: 0;
-}
-
-ul#nodebgs {
-	list-style: none inside none;
-	padding: 0;
-	margin: 0;
-	top: -0.7em;
-}
-
-ul#graphnodes li, ul#nodebgs li {
-	height: 39px;
-}
-
-ul#graphnodes {
-	position: absolute;
-	z-index: 10;
-	top: -0.8em;
-	list-style: none inside none;
-	padding: 0;
-}
-
-ul#graphnodes li .info {
-	display: block;
-	font-size: 100%;
-	position: relative;
-	top: -3px;
-	font-style: italic;
-}
--- a/templates/static/style-monoblue.css	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,472 +0,0 @@
-/*** Initial Settings ***/
-* {
-  margin: 0;
-  padding: 0;
-  font-weight: normal;
-  font-style: normal;
-}
-
-html {
-  font-size: 100%;
-  font-family: sans-serif;
-}
-
-body {
-  font-size: 77%;
-  margin: 15px 50px;
-  background: #4B4B4C;
-}
-
-a {
-  color:#0000cc;
-  text-decoration: none;
-}
-/*** end of Initial Settings ***/
-
-
-/** common settings **/
-div#container {
-  background: #FFFFFF;
-  position: relative;
-  color: #666;
-}
-
-div.page-header {
-  padding: 50px 20px 0;
-  background: #006699 top left repeat-x;
-  position: relative;
-}
-  div.page-header h1 {
-    margin: 10px 0 30px;
-    font-size: 1.8em;
-    font-weight: bold;
-    font-family: osaka,'MS P Gothic', Georgia, serif;
-    letter-spacing: 1px;
-    color: #DDD;
-  }
-  div.page-header h1 a {
-    font-weight: bold;
-    color: #FFF;
-  }
-  div.page-header a {
-    text-decoration: none;
-  }
-
-  div.page-header form {
-    position: absolute;
-    margin-bottom: 2px;
-    bottom: 0;
-    right: 20px;
-  }
-  div.page-header form label {
-    color: #DDD;
-  }
-  div.page-header form input {
-    padding: 2px;
-    border: solid 1px #DDD;
-  }
-  div.page-header form dl {
-    overflow: hidden;
-  }
-  div.page-header form dl dt {
-    font-size: 1.2em;
-  }
-  div.page-header form dl dt,
-  div.page-header form dl dd {
-    margin: 0 0 0 5px;
-    float: left;
-    height: 24px;
-    line-height: 20px;
-  }
-
-  ul.page-nav {
-    margin: 10px 0 0 0;
-    list-style-type: none;
-    overflow: hidden;
-    width: 800px;
-  }
-    ul.page-nav li {
-      margin: 0 2px 0 0;
-      float: left;
-      width: 80px;
-      height: 24px;
-      font-size: 1.1em;
-      line-height: 24px;
-      text-align: center;
-    }
-    ul.page-nav li.current {
-      background: #FFF;
-    }
-    ul.page-nav li a {
-      height: 24px;
-      color: #666;
-      background: #DDD;
-      display: block;
-      text-decoration: none;
-    }
-    ul.page-nav li a:hover {
-      color:#333;
-      background: #FFF;
-    }
-
-ul.submenu {
-  margin: 10px 0 -10px 20px;
-  list-style-type: none;
-}
-ul.submenu li {
-  margin: 0 10px 0 0;
-  font-size: 1.2em;
-  display: inline;
-}
-
-h2 {
-  margin: 20px 0 10px;
-  height: 30px;
-  line-height: 30px;
-  text-indent: 20px;
-  background: #FFF;
-  font-size: 1.2em;
-  border-top: dotted 1px #D5E1E6;
-  font-weight: bold;
-}
-h2.no-link {
-  color:#006699;
-}
-h2.no-border {
-  color: #FFF;
-  background: #006699;
-  border: 0;
-}
-h2 a {
-  font-weight:bold;
-  color:#006699;
-}
-
-div.page-path {
-  text-align: right;
-  padding: 20px 30px 10px 0;
-  border:solid #d9d8d1;
-  border-width:0px 0px 1px;
-  font-size: 1.2em;
-}
-
-div.page-footer {
-  margin: 50px 0 0;
-  position: relative;
-}
-  div.page-footer p {
-    position: relative;
-    left: 20px;
-    bottom: 5px;
-    font-size: 1.2em;
-  }
-
-  ul.rss-logo {
-    position: absolute;
-    top: -10px;
-    right: 20px;
-    height: 20px;
-    list-style-type: none;
-  }
-  ul.rss-logo li {
-    display: inline;
-  }
-  ul.rss-logo li a {
-    padding: 3px 6px;
-    line-height: 10px;
-    border:1px solid;
-    border-color:#fcc7a5 #7d3302 #3e1a01 #ff954e;
-    color:#ffffff;
-    background-color:#ff6600;
-    font-weight:bold;
-    font-family:sans-serif;
-    font-size:10px;
-    text-align:center;
-    text-decoration:none;
-  }
-  div.rss-logo li a:hover {
-    background-color:#ee5500;
-  }
-
-p.normal {
-  margin: 20px 0 20px 30px;
-  font-size: 1.2em;
-}
-
-table {
-  margin: 10px 0 0 20px;
-  width: 95%;
-  border-collapse: collapse;
-}
-table tr td {
-  font-size: 1.1em;
-}
-table tr td.nowrap {
-  white-space: nowrap;
-}
-/*
-table tr.parity0:hover,
-table tr.parity1:hover {
-  background: #D5E1E6;
-}
-*/
-table tr.parity0 {
-  background: #F1F6F7;
-}
-table tr.parity1 {
-  background: #FFFFFF;
-}
-table tr td {
-  padding: 5px 5px;
-}
-table.annotated tr td {
-  padding: 0px 5px;
-}
-
-span.logtags span {
-  padding: 2px 6px;
-  font-weight: normal;
-  font-size: 11px;
-  border: 1px solid;
-  background-color: #ffaaff;
-  border-color: #ffccff #ff00ee #ff00ee #ffccff;
-}
-span.logtags span.tagtag {
-  background-color: #ffffaa;
-  border-color: #ffffcc #ffee00 #ffee00 #ffffcc;
-}
-span.logtags span.branchtag {
-  background-color: #aaffaa;
-  border-color: #ccffcc #00cc33 #00cc33 #ccffcc;
-}
-span.logtags span.inbranchtag {
-  background-color: #d5dde6;
-  border-color: #e3ecf4 #9398f4 #9398f4 #e3ecf4;
-}
-
-div.diff pre {
-  margin: 10px 0 0 0;
-}
-div.diff pre span {
-  font-family: monospace;
-  white-space: pre;
-  font-size: 1.2em;
-  padding: 3px 0;
-}
-td.source {
-  white-space: pre;
-  font-family: monospace;
-  margin: 10px 30px 0;
-  font-size: 1.2em;
-  font-family: monospace;
-}
-  div.source div.parity0,
-  div.source div.parity1 {
-    padding: 1px;
-    font-size: 1.2em;
-  }
-  div.source div.parity0 {
-    background: #F1F6F7;
-  }
-  div.source div.parity1 {
-    background: #FFFFFF;
-  }
-div.parity0:hover,
-div.parity1:hover {
-  background: #D5E1E6;
-}
-.linenr {
-  color: #999;
-  text-align: right;
-}
-.lineno {
-  text-align: right;
-}
-.lineno a {
-  color: #999;
-}
-td.linenr {
-  width: 60px;
-}
-
-div#powered-by {
-  position: absolute;
-  width: 75px;
-  top: 15px;
-  right: 20px;
-  font-size: 1.2em;
-}
-div#powered-by a {
-  color: #EEE;
-  text-decoration: none;
-}
-div#powered-by a:hover {
-  text-decoration: underline;
-}
-/*
-div#monoblue-corner-top-left {
-  position: absolute;
-  top: 0;
-  left: 0;
-  width: 10px;
-  height: 10px;
-  background: url(./monoblue-corner.png) top left no-repeat !important;
-  background: none;
-}
-div#monoblue-corner-top-right {
-  position: absolute;
-  top: 0;
-  right: 0;
-  width: 10px;
-  height: 10px;
-  background: url(./monoblue-corner.png) top right no-repeat !important;
-  background: none;
-}
-div#monoblue-corner-bottom-left {
-  position: absolute;
-  bottom: 0;
-  left: 0;
-  width: 10px;
-  height: 10px;
-  background: url(./monoblue-corner.png) bottom left no-repeat !important;
-  background: none;
-}
-div#monoblue-corner-bottom-right {
-  position: absolute;
-  bottom: 0;
-  right: 0;
-  width: 10px;
-  height: 10px;
-  background: url(./monoblue-corner.png) bottom right no-repeat !important;
-  background: none;
-}
-*/
-/** end of common settings **/
-
-/** summary **/
-dl.overview {
-  margin: 0 0 0 30px;
-  font-size: 1.1em;
-  overflow: hidden;
-}
-  dl.overview dt,
-  dl.overview dd {
-    margin: 5px 0;
-    float: left;
-  }
-  dl.overview dt {
-    clear: left;
-    font-weight: bold;
-    width: 150px;
-  }
-/** end of summary **/
-
-/** chagelog **/
-h3.changelog {
-  margin: 20px 0 5px 30px;
-  padding: 0 0 2px;
-  font-size: 1.4em;
-  border-bottom: dotted 1px #D5E1E6;
-}
-ul.changelog-entry {
-  margin: 0 0 10px 30px;
-  list-style-type: none;
-  position: relative;
-}
-ul.changelog-entry li span.revdate {
-  font-size: 1.1em;
-}
-ul.changelog-entry li.age {
-  position: absolute;
-  top: -25px;
-  right: 10px;
-  font-size: 1.4em;
-  color: #CCC;
-  font-weight: bold;
-  font-style: italic;
-}
-ul.changelog-entry li span.name {
-  font-size: 1.2em;
-  font-weight: bold;
-}
-ul.changelog-entry li.description {
-  margin: 10px 0 0;
-  font-size: 1.1em;
-}
-/** end of changelog **/
-
-/** file **/
-p.files {
-  margin: 0 0 0 20px;
-  font-size: 2.0em;
-  font-weight: bold;
-}
-/** end of file **/
-
-/** changeset **/
-h3.changeset {
-  margin: 20px 0 5px 20px;
-  padding: 0 0 2px;
-  font-size: 1.6em;
-  border-bottom: dotted 1px #D5E1E6;
-}
-p.changeset-age {
-  position: relative;
-}
-p.changeset-age span {
-  position: absolute;
-  top: -25px;
-  right: 10px;
-  font-size: 1.4em;
-  color: #CCC;
-  font-weight: bold;
-  font-style: italic;
-}
-p.description {
-  margin: 10px 30px 0 30px;
-  padding: 10px;
-  border: solid 1px #CCC;
-  font-size: 1.2em;
-}
-/** end of changeset **/
-
-/** canvas **/
-div#wrapper {
-	position: relative;
-    font-size: 1.2em;
-}
-
-canvas {
-	position: absolute;
-	z-index: 5;
-	top: -0.7em;
-}
-
-ul#nodebgs li.parity0 {
-    background: #F1F6F7;
-}
-
-ul#nodebgs li.parity1 {
-    background: #FFFFFF;
-}
-
-ul#graphnodes {
-	position: absolute;
-	z-index: 10;
-	top: 7px;
-	list-style: none inside none;
-}
-
-ul#nodebgs {
-	list-style: none inside none;
-}
-
-ul#graphnodes li, ul#nodebgs li {
-	height: 39px;
-}
-
-ul#graphnodes li .info {
-	display: block;
-	position: relative;
-}
-/** end of canvas **/
--- a/templates/static/style-paper.css	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,254 +0,0 @@
-body {
-  margin: 0;
-  padding: 0;
-  background: white;
-  font-family: sans-serif;
-}
-
-.container {
-  padding-left: 115px;
-}
-
-.main {
-  position: relative;
-  background: white;
-  padding: 2em 2em 2em 0;
-}
-
-#.main {
-  width: 98%;
-}
-
-.overflow {
-  width: 100%;
-  overflow: auto;
-}
-
-.menu {
-  width: 90px;
-  margin: 0;
-  font-size: 80%;
-  text-align: left;
-  position: absolute;
-  top: 20px;
-  left: 20px;
-  right: auto;
-}
-
-.menu ul {
-  list-style: none;
-  padding: 0;
-  margin: 10px 0 0 0;
-  border-left: 2px solid #999;
-}
-
-.menu li {
-  margin-bottom: 3px;
-  padding: 2px 4px;
-  background: white;
-  color: black;
-  font-weight: normal;
-}
-
-.menu li.active {
-  font-weight: bold;
-}
-
-.menu img {
-  width: 75px;
-  height: 90px;
-  border: 0;
-}
-
-.menu a { color: black; display: block; }
-
-.search {
-  position: absolute;
-  top: .7em;
-  right: 2em;
-}
-
-form.search div#hint {
-  display: none;
-  position: absolute;
-  top: 40px;
-  right: 0px;
-  width: 190px;
-  padding: 5px;
-  background: #ffc;
-  font-size: 70%;
-  border: 1px solid yellow;
-  -moz-border-radius: 5px; /* this works only in camino/firefox */
-  -webkit-border-radius: 5px; /* this is just for Safari */
-}
-
-form.search:hover div#hint { display: block; }
-
-a { text-decoration:none; }
-.age { white-space:nowrap; }
-.date { white-space:nowrap; }
-.indexlinks { white-space:nowrap; }
-.parity0 { background-color: #f0f0f0; }
-.parity1 { background-color: white; }
-.plusline { color: green; }
-.minusline { color: #dc143c; } /* crimson */
-.atline { color: purple; }
-
-.navigate {
-  text-align: right;
-  font-size: 60%;
-  margin: 1em 0;
-}
-
-.tag {
-  color: #999;
-  font-size: 70%;
-  font-weight: normal;
-  margin-left: .5em;
-  vertical-align: baseline;
-}
-
-.branchhead {
-  color: #000;
-  font-size: 80%;
-  font-weight: normal;
-  margin-left: .5em;
-  vertical-align: baseline;
-}
-
-ul#graphnodes .branchhead {
-  font-size: 75%;
-}
-
-.branchname {
-  color: #000;
-  font-size: 60%; 
-  font-weight: normal;
-  margin-left: .5em;
-  vertical-align: baseline;
-}
-
-h3 .branchname {
-  font-size: 80%;
-}
-
-/* Common */
-pre { margin: 0; }
-
-h2 { font-size: 120%; border-bottom: 1px solid #999; }
-h2 a { color: #000; }
-h3 {
-  margin-top: -.7em;
-  font-size: 100%;
-}
-
-/* log and tags tables */
-.bigtable {
-  border-bottom: 1px solid #999;
-  border-collapse: collapse;
-  font-size: 90%;
-  width: 100%;
-  font-weight: normal;
-  text-align: left;
-}
-
-.bigtable td {
-  vertical-align: top;
-}
-
-.bigtable th {
-  padding: 1px 4px;
-  border-bottom: 1px solid #999;
-}
-.bigtable tr { border: none; }
-.bigtable .age { width: 7em; }
-.bigtable .author { width: 12em; }
-.bigtable .description { }
-.bigtable .node { width: 5em; font-family: monospace;}
-.bigtable .permissions { width: 8em; text-align: left;}
-.bigtable .size { width: 5em; text-align: right; }
-.bigtable .annotate { text-align: right; }
-.bigtable td.annotate { font-size: smaller; }
-.bigtable td.source { font-size: inherit; }
-
-.source, .sourcefirst, .sourcelast {
-  font-family: monospace;
-  white-space: pre;
-  padding: 1px 4px;
-  font-size: 90%;
-}
-.sourcefirst { border-bottom: 1px solid #999; font-weight: bold; }
-.sourcelast { border-top: 1px solid #999; }
-.source a { color: #999; font-size: smaller; font-family: monospace;}
-.bottomline { border-bottom: 1px solid #999; }
-
-.fileline { font-family: monospace; }
-.fileline img { border: 0; }
-
-.tagEntry .closed { color: #99f; }
-
-/* Changeset entry */
-#changesetEntry {
-  border-collapse: collapse;
-  font-size: 90%;
-  width: 100%;
-  margin-bottom: 1em;
-}
-
-#changesetEntry th {
-  padding: 1px 4px;
-  width: 4em;
-  text-align: right;
-  font-weight: normal;
-  color: #999;
-  margin-right: .5em;
-  vertical-align: top;
-}
-
-div.description {
-  border-left: 2px solid #999;
-  margin: 1em 0 1em 0;
-  padding: .3em;
-}
-
-/* Graph */
-div#wrapper {
-	position: relative;
-	border-top: 1px solid black;
-	border-bottom: 1px solid black;
-	margin: 0;
-	padding: 0;
-}
-
-canvas {
-	position: absolute;
-	z-index: 5;
-	top: -0.7em;
-	margin: 0;
-}
-
-ul#graphnodes {
-	position: absolute;
-	z-index: 10;
-	top: -1.0em;
-	list-style: none inside none;
-	padding: 0;
-}
-
-ul#nodebgs {
-	list-style: none inside none;
-	padding: 0;
-	margin: 0;
-	top: -0.7em;
-}
-
-ul#graphnodes li, ul#nodebgs li {
-	height: 39px;
-}
-
-ul#graphnodes li .info {
-	display: block;
-	font-size: 70%;
-	position: relative;
-	top: -3px;
-}
--- a/templates/static/style.css	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,105 +0,0 @@
-a { text-decoration:none; }
-.age { white-space:nowrap; }
-.date { white-space:nowrap; }
-.indexlinks { white-space:nowrap; }
-.parity0 { background-color: #ddd; }
-.parity1 { background-color: #eee; }
-.lineno { width: 60px; color: #aaa; font-size: smaller;
-          text-align: right; }
-.plusline { color: green; }
-.minusline { color: red; }
-.atline { color: purple; }
-.annotate { font-size: smaller; text-align: right; padding-right: 1em; }
-.buttons a {
-  background-color: #666;
-  padding: 2pt;
-  color: white;
-  font-family: sans;
-  font-weight: bold;
-}
-.navigate a {
-  background-color: #ccc;
-  padding: 2pt;
-  font-family: sans;
-  color: black;
-}
-
-.metatag {
-  background-color: #888;
-  color: white;
-  text-align: right;
-}
-
-/* Common */
-pre { margin: 0; }
-
-.logo {
-  float: right;
-  clear: right;
-}
-
-/* Changelog/Filelog entries */
-.logEntry { width: 100%; }
-.logEntry .age { width: 15%; }
-.logEntry th { font-weight: normal; text-align: right; vertical-align: top; }
-.logEntry th.age, .logEntry th.firstline { font-weight: bold; }
-.logEntry th.firstline { text-align: left; width: inherit; }
-
-/* Shortlog entries */
-.slogEntry { width: 100%; }
-.slogEntry .age { width: 8em; }
-.slogEntry td { font-weight: normal; text-align: left; vertical-align: top; }
-.slogEntry td.author { width: 15em; }
-
-/* Tag entries */
-#tagEntries { list-style: none; margin: 0; padding: 0; }
-#tagEntries .tagEntry { list-style: none; margin: 0; padding: 0; }
-
-/* Changeset entry */
-#changesetEntry { }
-#changesetEntry th { font-weight: normal; background-color: #888; color: #fff; text-align: right; }
-#changesetEntry th.files, #changesetEntry th.description { vertical-align: top; }
-
-/* File diff view */
-#filediffEntry { }
-#filediffEntry th { font-weight: normal; background-color: #888; color: #fff; text-align: right; }
-
-/* Graph */
-div#wrapper {
-	position: relative;
-	margin: 0;
-	padding: 0;
-}
-
-canvas {
-	position: absolute;
-	z-index: 5;
-	top: -0.6em;
-	margin: 0;
-}
-
-ul#nodebgs {
-	list-style: none inside none;
-	padding: 0;
-	margin: 0;
-	top: -0.7em;
-}
-
-ul#graphnodes li, ul#nodebgs li {
-	height: 39px;
-}
-
-ul#graphnodes {
-	position: absolute;
-	z-index: 10;
-	top: -0.85em;
-	list-style: none inside none;
-	padding: 0;
-}
-
-ul#graphnodes li .info {
-	display: block;
-	font-size: 70%;
-	position: relative;
-	top: -1px;
-}
--- a/templates/template-vars.txt	Wed Dec 23 13:09:11 2009 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,37 +0,0 @@
-repo          the name of the repo
-rev           a changeset.manifest revision
-node          a changeset node
-changesets    total number of changesets
-file          a filename
-filerev       a file revision
-filerevs      total number of file revisions
-up            the directory of the relevant file
-path          a path in the manifest, starting with "/"
-basename      a short pathname
-date          a date string
-age           age in hours, days, etc
-line          a line of text (escaped)
-desc          a description (escaped, with breaks)
-shortdesc     a short description (escaped)
-author        a name or email addressv(obfuscated)
-parent        a list of the parent
-child         a list of the children
-tags          a list of tag
-
-header        the global page header
-footer        the global page footer
-
-files         a list of file links
-file_copies   a list of pairs of name, source filenames
-dirs          a set of directory links
-diff          a diff of one or more files
-annotate      an annotated file
-entries       the entries relevant to the page
-
-Templates and commands:
-  changelog(rev) - a page for browsing changesets
-    naventry - a link for jumping to a changeset number
-    filenodelink - jump to file diff
-    fileellipses - printed after maxfiles
-    changelogentry - an entry in the log
-  manifest - browse a manifest as a directory tree
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/blacklist	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,37 @@
+# ConfigParser format
+# Definitions of blacklists for run-tests.py
+#
+# Identify in config sections a list of tests you want to be skipped.
+# Section names are meant to be used as targets for run-tests.py --blacklist
+# option.
+# "test-" prefixes should be omitted from test names. Values are not used.
+#
+# e.g. if your file looks like:
+## [example]
+## hgrc =
+## help = "this string is not used"
+# then calling "run-tests.py --blacklist example" will exclude test-hgrc and
+# test-help from the list of tests to run.
+
+[inotify-failures]
+# When --inotify is activated, help output and config changes:
+debugcomplete =
+empty =
+fncache =
+globalopts =
+help =
+hgrc =
+inherit-mode =
+qrecord =
+strict =
+
+# --inotify activates de facto the inotify extension. It does not play well
+# with inotify-specific tests, which activate/desactivate inotify at will:
+inotify =
+inotify-debuginotify =
+inotify-dirty-dirstate =
+inotify-issue1208 =
+inotify-issue1371 =
+inotify-issue1542 =
+inotify-issue1556 =
+inotify-lookup =
--- a/tests/run-tests.py	Wed Dec 23 13:09:11 2009 +0100
+++ b/tests/run-tests.py	Wed Dec 23 13:12:36 2009 +0100
@@ -41,6 +41,7 @@
 # completes fairly quickly, includes both shell and Python scripts, and
 # includes some scripts that run daemon processes.)
 
+from ConfigParser import ConfigParser
 import difflib
 import errno
 import optparse
@@ -130,6 +131,11 @@
         help="use pure Python code instead of C extensions")
     parser.add_option("-3", "--py3k-warnings", action="store_true",
         help="enable Py3k warnings on Python 2.6+")
+    parser.add_option("--inotify", action="store_true",
+        help="enable inotify extension when running tests")
+    parser.add_option("--blacklist", action="append",
+        help="skip tests listed in the specified section of "
+             "the blacklist file")
 
     for option, default in defaults.items():
         defaults[option] = int(os.environ.get(*default))
@@ -195,6 +201,14 @@
     if options.py3k_warnings:
         if sys.version_info[:2] < (2, 6) or sys.version_info[:2] >= (3, 0):
             parser.error('--py3k-warnings can only be used on Python 2.6+')
+    if options.blacklist:
+        configparser = ConfigParser()
+        configparser.read("blacklist")
+        blacklist = dict()
+        for section in options.blacklist:
+            for (item, value) in configparser.items(section):
+                blacklist["test-" + item] = section
+        options.blacklist = blacklist
 
     return (options, args)
 
@@ -237,9 +251,8 @@
 
     return missing, failed
 
-def showdiff(expected, output):
-    for line in difflib.unified_diff(expected, output,
-            "Expected output", "Test output"):
+def showdiff(expected, output, ref, err):
+    for line in difflib.unified_diff(expected, output, ref, err):
         sys.stdout.write(line)
 
 def findprogram(program):
@@ -293,10 +306,18 @@
     script = os.path.realpath(sys.argv[0])
     hgroot = os.path.dirname(os.path.dirname(script))
     os.chdir(hgroot)
+    nohome = '--home=""'
+    if os.name == 'nt':
+        # The --home="" trick works only on OS where os.sep == '/'
+        # because of a distutils convert_path() fast-path. Avoid it at
+        # least on Windows for now, deal with .pydistutils.cfg bugs
+        # when they happen.
+        nohome = ''
     cmd = ('%s setup.py %s clean --all'
            ' install --force --prefix="%s" --install-lib="%s"'
-           ' --install-scripts="%s" >%s 2>&1'
-           % (sys.executable, pure, INST, PYTHONDIR, BINDIR, installerrs))
+           ' --install-scripts="%s" %s >%s 2>&1'
+           % (sys.executable, pure, INST, PYTHONDIR, BINDIR, nohome,
+              installerrs))
     vlog("# Running", cmd)
     if os.system(cmd) == 0:
         if not options.verbose:
@@ -430,13 +451,13 @@
         if not options.verbose:
             skips.append((test, msg))
         else:
-            print "\nSkipping %s: %s" % (test, msg)
+            print "\nSkipping %s: %s" % (testpath, msg)
         return None
 
     def fail(msg):
         fails.append((test, msg))
         if not options.nodiff:
-            print "\nERROR: %s %s" % (test, msg)
+            print "\nERROR: %s %s" % (testpath, msg)
         return None
 
     vlog("# Test", test)
@@ -449,6 +470,12 @@
     hgrc.write('backout = -d "0 0"\n')
     hgrc.write('commit = -d "0 0"\n')
     hgrc.write('tag = -d "0 0"\n')
+    if options.inotify:
+        hgrc.write('[extensions]\n')
+        hgrc.write('inotify=\n')
+        hgrc.write('[inotify]\n')
+        hgrc.write('pidfile=%s\n' % DAEMON_PIDS)
+        hgrc.write('appendpid=True\n')
     hgrc.close()
 
     err = os.path.join(TESTDIR, test+".err")
@@ -537,7 +564,7 @@
         else:
             fail("output changed")
         if not options.nodiff:
-            showdiff(refout, out)
+            showdiff(refout, out, ref, err)
         ret = 1
     elif ret:
         mark = '!'
@@ -715,6 +742,13 @@
         fails = []
 
         for test in tests:
+            if options.blacklist:
+                section = options.blacklist.get(test)
+                if section is not None:
+                    skips.append((test, "blacklisted (%s section)" % section))
+                    skipped += 1
+                    continue
+
             if options.retest and not os.path.exists(test + ".err"):
                 skipped += 1
                 continue
--- a/tests/test-alias	Wed Dec 23 13:09:11 2009 +0100
+++ b/tests/test-alias	Wed Dec 23 13:12:36 2009 +0100
@@ -25,15 +25,19 @@
 
 echo '% unknown'
 hg unknown
+hg help unknown
 
 echo '% ambiguous'
 hg ambiguous
+hg help ambiguous
 
 echo '% recursive'
 hg recursive
+hg help recursive
 
 echo '% no definition'
 hg nodef
+hg help nodef
 
 cd alias
 
--- a/tests/test-alias.out	Wed Dec 23 13:09:11 2009 +0100
+++ b/tests/test-alias.out	Wed Dec 23 13:12:36 2009 +0100
@@ -1,12 +1,16 @@
 % basic
 % unknown
 alias 'unknown' resolves to unknown command 'bargle'
+alias 'unknown' resolves to unknown command 'bargle'
 % ambiguous
 alias 'ambiguous' resolves to ambiguous command 's'
+alias 'ambiguous' resolves to ambiguous command 's'
 % recursive
 alias 'recursive' resolves to unknown command 'recursive'
+alias 'recursive' resolves to unknown command 'recursive'
 % no definition
 no definition for alias 'nodefinition'
+no definition for alias 'nodefinition'
 % no usage
 no rollback information available
 adding foo
--- a/tests/test-command-template	Wed Dec 23 13:09:11 2009 +0100
+++ b/tests/test-command-template	Wed Dec 23 13:12:36 2009 +0100
@@ -32,6 +32,7 @@
 hg commit -m second -d '1000000 0' -u 'User Name <user@hostname>'
 echo third > third
 hg add third
+hg mv second fourth
 hg commit -m third -d "2020-01-01 10:01"
 
 # make sure user/global hgrc does not affect tests
@@ -93,7 +94,8 @@
 
 echo "# keys work"
 for key in author branches date desc file_adds file_dels file_mods \
-        files manifest node parents rev tags diffstat; do
+        file_copies file_copies_switch files \
+        manifest node parents rev tags diffstat extras; do
     for mode in '' --verbose --debug; do
         hg log $mode --template "$key$mode: {$key}\n"
     done
--- a/tests/test-command-template.out	Wed Dec 23 13:09:11 2009 +0100
+++ b/tests/test-command-template.out	Wed Dec 23 13:12:36 2009 +0100
@@ -8,7 +8,7 @@
 # revision with no copies (used to print a traceback)
 
 # compact style works
-8[tip]   946e2bd9c565   2020-01-01 10:01 +0000   test
+8[tip]   3bdecc1cde0c   2020-01-01 10:01 +0000   test
   third
 
 7:-1   29114dbae42b   1970-01-12 13:46 +0000   user
@@ -35,7 +35,7 @@
 0   1e4e1b8f71e0   1970-01-12 13:46 +0000   user
   line 1
 
-8[tip]   946e2bd9c565   2020-01-01 10:01 +0000   test
+8[tip]   3bdecc1cde0c   2020-01-01 10:01 +0000   test
   third
 
 7:-1   29114dbae42b   1970-01-12 13:46 +0000   User Name <user@hostname>
@@ -66,7 +66,7 @@
   line 1
 line 2
 
-8[tip]:7,-1   946e2bd9c565   2020-01-01 10:01 +0000   test
+8[tip]:7,-1   3bdecc1cde0c   2020-01-01 10:01 +0000   test
   third
 
 7:-1,-1   29114dbae42b   1970-01-12 13:46 +0000   User Name <user@hostname>
@@ -128,9 +128,9 @@
 # issue338
 2020-01-01  test  <test>
 
-	* third:
+	* fourth, second, third:
 	third
-	[946e2bd9c565] [tip]
+	[3bdecc1cde0c] [tip]
 
 1970-01-12  User Name  <user@hostname>
 
@@ -150,7 +150,7 @@
 1970-01-17  person  <person>
 
 	* new branch
-	[32a18f097fcc]
+	[32a18f097fcc] <foo>
 
 1970-01-16  person  <person>
 
@@ -299,7 +299,7 @@
 other 3
 desc--debug: line 1
 line 2
-file_adds: third
+file_adds: fourth third
 file_adds: second
 file_adds: 
 file_adds: d
@@ -308,7 +308,7 @@
 file_adds: c
 file_adds: b
 file_adds: a
-file_adds--verbose: third
+file_adds--verbose: fourth third
 file_adds--verbose: second
 file_adds--verbose: 
 file_adds--verbose: d
@@ -317,7 +317,7 @@
 file_adds--verbose: c
 file_adds--verbose: b
 file_adds--verbose: a
-file_adds--debug: third
+file_adds--debug: fourth third
 file_adds--debug: second
 file_adds--debug: 
 file_adds--debug: d
@@ -326,7 +326,7 @@
 file_adds--debug: c
 file_adds--debug: b
 file_adds--debug: a
-file_dels: 
+file_dels: second
 file_dels: 
 file_dels: 
 file_dels: 
@@ -335,6 +335,7 @@
 file_dels: 
 file_dels: 
 file_dels: 
+file_dels--verbose: second
 file_dels--verbose: 
 file_dels--verbose: 
 file_dels--verbose: 
@@ -343,8 +344,7 @@
 file_dels--verbose: 
 file_dels--verbose: 
 file_dels--verbose: 
-file_dels--verbose: 
-file_dels--debug: 
+file_dels--debug: second
 file_dels--debug: 
 file_dels--debug: 
 file_dels--debug: 
@@ -380,7 +380,61 @@
 file_mods--debug: 
 file_mods--debug: 
 file_mods--debug: 
-files: third
+file_copies: fourth (second)
+file_copies: 
+file_copies: 
+file_copies: 
+file_copies: 
+file_copies: 
+file_copies: 
+file_copies: 
+file_copies: 
+file_copies--verbose: fourth (second)
+file_copies--verbose: 
+file_copies--verbose: 
+file_copies--verbose: 
+file_copies--verbose: 
+file_copies--verbose: 
+file_copies--verbose: 
+file_copies--verbose: 
+file_copies--verbose: 
+file_copies--debug: fourth (second)
+file_copies--debug: 
+file_copies--debug: 
+file_copies--debug: 
+file_copies--debug: 
+file_copies--debug: 
+file_copies--debug: 
+file_copies--debug: 
+file_copies--debug: 
+file_copies_switch: 
+file_copies_switch: 
+file_copies_switch: 
+file_copies_switch: 
+file_copies_switch: 
+file_copies_switch: 
+file_copies_switch: 
+file_copies_switch: 
+file_copies_switch: 
+file_copies_switch--verbose: 
+file_copies_switch--verbose: 
+file_copies_switch--verbose: 
+file_copies_switch--verbose: 
+file_copies_switch--verbose: 
+file_copies_switch--verbose: 
+file_copies_switch--verbose: 
+file_copies_switch--verbose: 
+file_copies_switch--verbose: 
+file_copies_switch--debug: 
+file_copies_switch--debug: 
+file_copies_switch--debug: 
+file_copies_switch--debug: 
+file_copies_switch--debug: 
+file_copies_switch--debug: 
+file_copies_switch--debug: 
+file_copies_switch--debug: 
+file_copies_switch--debug: 
+files: fourth second third
 files: second
 files: 
 files: d
@@ -389,7 +443,7 @@
 files: c
 files: b
 files: a
-files--verbose: third
+files--verbose: fourth second third
 files--verbose: second
 files--verbose: 
 files--verbose: d
@@ -398,7 +452,7 @@
 files--verbose: c
 files--verbose: b
 files--verbose: a
-files--debug: third
+files--debug: fourth second third
 files--debug: second
 files--debug: 
 files--debug: d
@@ -407,7 +461,7 @@
 files--debug: c
 files--debug: b
 files--debug: a
-manifest: 8:8a0d8faab8b2
+manifest: 8:79c71159cb0a
 manifest: 7:f2dbc354b94e
 manifest: 6:91015e9dbdd7
 manifest: 5:4dc3def4f9b4
@@ -416,7 +470,7 @@
 manifest: 2:6e0e82995c35
 manifest: 1:4e8d705b1e53
 manifest: 0:a0c8bcbbb45c
-manifest--verbose: 8:8a0d8faab8b2
+manifest--verbose: 8:79c71159cb0a
 manifest--verbose: 7:f2dbc354b94e
 manifest--verbose: 6:91015e9dbdd7
 manifest--verbose: 5:4dc3def4f9b4
@@ -425,7 +479,7 @@
 manifest--verbose: 2:6e0e82995c35
 manifest--verbose: 1:4e8d705b1e53
 manifest--verbose: 0:a0c8bcbbb45c
-manifest--debug: 8:8a0d8faab8b2eee97dcfccabbcb18f413c9d097b
+manifest--debug: 8:79c71159cb0a1a84add78e7922a1e5e7be34c499
 manifest--debug: 7:f2dbc354b94e5ec0b4f10680ee0cee816101d0bf
 manifest--debug: 6:91015e9dbdd76a6791085d12b0a0ec7fcd22ffbf
 manifest--debug: 5:4dc3def4f9b4c6e8de820f6ee74737f91e96a216
@@ -434,7 +488,7 @@
 manifest--debug: 2:6e0e82995c35d0d57a52aca8da4e56139e06b4b1
 manifest--debug: 1:4e8d705b1e53e3f9375e0e60dc7b525d8211fe55
 manifest--debug: 0:a0c8bcbbb45c63b90b70ad007bf38961f64f2af0
-node: 946e2bd9c565394777d74d9669045b39e856e3ea
+node: 3bdecc1cde0c3d5fa6eaee3d9d9828f6ac468d57
 node: 29114dbae42b9f078cf2714dbe3a86bba8ec7453
 node: c7b487c6c50ef1cf464cafdc4f4f5e615fc5999f
 node: 13207e5a10d9fd28ec424934298e176197f2c67f
@@ -443,7 +497,7 @@
 node: 97054abb4ab824450e9164180baf491ae0078465
 node: b608e9d1a3f0273ccf70fb85fd6866b3482bf965
 node: 1e4e1b8f71e05681d422154f5421e385fec3454f
-node--verbose: 946e2bd9c565394777d74d9669045b39e856e3ea
+node--verbose: 3bdecc1cde0c3d5fa6eaee3d9d9828f6ac468d57
 node--verbose: 29114dbae42b9f078cf2714dbe3a86bba8ec7453
 node--verbose: c7b487c6c50ef1cf464cafdc4f4f5e615fc5999f
 node--verbose: 13207e5a10d9fd28ec424934298e176197f2c67f
@@ -452,7 +506,7 @@
 node--verbose: 97054abb4ab824450e9164180baf491ae0078465
 node--verbose: b608e9d1a3f0273ccf70fb85fd6866b3482bf965
 node--verbose: 1e4e1b8f71e05681d422154f5421e385fec3454f
-node--debug: 946e2bd9c565394777d74d9669045b39e856e3ea
+node--debug: 3bdecc1cde0c3d5fa6eaee3d9d9828f6ac468d57
 node--debug: 29114dbae42b9f078cf2714dbe3a86bba8ec7453
 node--debug: c7b487c6c50ef1cf464cafdc4f4f5e615fc5999f
 node--debug: 13207e5a10d9fd28ec424934298e176197f2c67f
@@ -542,7 +596,7 @@
 tags--debug: 
 tags--debug: 
 tags--debug: 
-diffstat: 1: +1/-0
+diffstat: 3: +2/-1
 diffstat: 1: +1/-0
 diffstat: 0: +0/-0
 diffstat: 1: +1/-0
@@ -551,7 +605,7 @@
 diffstat: 1: +4/-0
 diffstat: 1: +2/-0
 diffstat: 1: +1/-0
-diffstat--verbose: 1: +1/-0
+diffstat--verbose: 3: +2/-1
 diffstat--verbose: 1: +1/-0
 diffstat--verbose: 0: +0/-0
 diffstat--verbose: 1: +1/-0
@@ -560,7 +614,7 @@
 diffstat--verbose: 1: +4/-0
 diffstat--verbose: 1: +2/-0
 diffstat--verbose: 1: +1/-0
-diffstat--debug: 1: +1/-0
+diffstat--debug: 3: +2/-1
 diffstat--debug: 1: +1/-0
 diffstat--debug: 0: +0/-0
 diffstat--debug: 1: +1/-0
@@ -569,6 +623,33 @@
 diffstat--debug: 1: +4/-0
 diffstat--debug: 1: +2/-0
 diffstat--debug: 1: +1/-0
+extras: branch=default
+extras: branch=default
+extras: branch=default
+extras: branch=default
+extras: branch=foo
+extras: branch=default
+extras: branch=default
+extras: branch=default
+extras: branch=default
+extras--verbose: branch=default
+extras--verbose: branch=default
+extras--verbose: branch=default
+extras--verbose: branch=default
+extras--verbose: branch=foo
+extras--verbose: branch=default
+extras--verbose: branch=default
+extras--verbose: branch=default
+extras--verbose: branch=default
+extras--debug: branch=default
+extras--debug: branch=default
+extras--debug: branch=default
+extras--debug: branch=default
+extras--debug: branch=foo
+extras--debug: branch=default
+extras--debug: branch=default
+extras--debug: branch=default
+extras--debug: branch=default
 # filters work
 
 hostname
@@ -643,7 +724,7 @@
 no person
 other 1
 line 1
-946e2bd9c565
+3bdecc1cde0c
 29114dbae42b
 c7b487c6c50e
 13207e5a10d9
--- a/tests/test-convert	Wed Dec 23 13:09:11 2009 +0100
+++ b/tests/test-convert	Wed Dec 23 13:12:36 2009 +0100
@@ -50,3 +50,10 @@
 # override $PATH to ensure p4 not visible; use $PYTHON in case we're
 # running from a devel copy, not a temp installation
 PATH=$BINDIR $PYTHON $BINDIR/hg convert emptydir 2>&1 | sed 's,file://.*/emptydir,.../emptydir,g'
+
+echo % convert with imaginary source type
+hg convert --source-type foo a a-foo
+echo % convert with imaginary sink type
+hg convert --dest-type foo a a-foo
+
+true
--- a/tests/test-convert-cvs	Wed Dec 23 13:09:11 2009 +0100
+++ b/tests/test-convert-cvs	Wed Dec 23 13:12:36 2009 +0100
@@ -16,10 +16,23 @@
 echo "convert = " >> $HGRCPATH
 echo "graphlog = " >> $HGRCPATH
 
+cat > cvshooks.py <<EOF
+def cvslog(ui,repo,hooktype,log):
+    print "%s hook: %d entries"%(hooktype,len(log))
+
+def cvschangesets(ui,repo,hooktype,changesets):
+    print "%s hook: %d changesets"%(hooktype,len(changesets))
+EOF
+hookpath=$PWD
+
+echo "[hooks]" >> $HGRCPATH
+echo "cvslog=python:$hookpath/cvshooks.py:cvslog" >> $HGRCPATH
+echo "cvschangesets=python:$hookpath/cvshooks.py:cvschangesets" >> $HGRCPATH
+
 echo % create cvs repository
 mkdir cvsrepo
 cd cvsrepo
-CVSROOT=`pwd`
+CVSROOT=$PWD
 export CVSROOT
 CVS_OPTIONS=-f
 export CVS_OPTIONS
--- a/tests/test-convert-cvs.out	Wed Dec 23 13:09:11 2009 +0100
+++ b/tests/test-convert-cvs.out	Wed Dec 23 13:12:36 2009 +0100
@@ -17,8 +17,10 @@
 scanning source...
 collecting CVS rlog
 5 log entries
+cvslog hook: 5 entries
 creating changesets
 3 changeset entries
+cvschangesets hook: 3 changesets
 sorting...
 converting...
 2 Initial revision
@@ -34,8 +36,10 @@
 scanning source...
 collecting CVS rlog
 5 log entries
+cvslog hook: 5 entries
 creating changesets
 3 changeset entries
+cvschangesets hook: 3 changesets
 sorting...
 converting...
 2 Initial revision
@@ -57,8 +61,10 @@
 scanning source...
 collecting CVS rlog
 7 log entries
+cvslog hook: 7 entries
 creating changesets
 4 changeset entries
+cvschangesets hook: 4 changesets
 sorting...
 converting...
 0 ci1
@@ -72,8 +78,10 @@
 scanning source...
 collecting CVS rlog
 7 log entries
+cvslog hook: 7 entries
 creating changesets
 4 changeset entries
+cvschangesets hook: 4 changesets
 sorting...
 converting...
 0 ci1
@@ -94,8 +102,10 @@
 scanning source...
 collecting CVS rlog
 8 log entries
+cvslog hook: 8 entries
 creating changesets
 5 changeset entries
+cvschangesets hook: 5 changesets
 sorting...
 converting...
 0 ci2
@@ -106,8 +116,10 @@
 scanning source...
 collecting CVS rlog
 8 log entries
+cvslog hook: 8 entries
 creating changesets
 5 changeset entries
+cvschangesets hook: 5 changesets
 sorting...
 converting...
 0 ci2
@@ -125,8 +137,10 @@
 scanning source...
 collecting CVS rlog
 9 log entries
+cvslog hook: 9 entries
 creating changesets
 6 changeset entries
+cvschangesets hook: 6 changesets
 sorting...
 converting...
 0 funny
@@ -148,8 +162,10 @@
 % testing debugcvsps
 collecting CVS rlog
 9 log entries
+cvslog hook: 9 entries
 creating changesets
 8 changeset entries
+cvschangesets hook: 8 changesets
 ---------------------
 PatchSet 1 
 Date:
--- a/tests/test-convert-filemap	Wed Dec 23 13:09:11 2009 +0100
+++ b/tests/test-convert-filemap	Wed Dec 23 13:12:36 2009 +0100
@@ -16,9 +16,11 @@
 
 echo foo > foo
 echo baz > baz
-mkdir dir
+mkdir -p dir/subdir
 echo dir/file >> dir/file
 echo dir/file2 >> dir/file2
+echo dir/subdir/file3 >> dir/subdir/file3
+echo dir/subdir/file4 >> dir/subdir/file4
 hg ci -d '0 0' -qAm '0: add foo baz dir/'
 
 echo bar > bar
@@ -114,6 +116,8 @@
 include copied
 rename foo foo2
 rename copied copied2
+exclude dir/subdir
+include dir/subdir/file3
 EOF
 hg -q convert --filemap renames.fmap --datesort source renames.repo
 hg up -q -R renames.repo
--- a/tests/test-convert-filemap.out	Wed Dec 23 13:09:11 2009 +0100
+++ b/tests/test-convert-filemap.out	Wed Dec 23 13:12:36 2009 +0100
@@ -16,7 +16,7 @@
 |/
 o  1 "1: add bar quux; copy foo to copied" files: bar copied quux
 |
-o  0 "0: add foo baz dir/" files: baz dir/file dir/file2 foo
+o  0 "0: add foo baz dir/" files: baz dir/file dir/file2 dir/subdir/file3 dir/subdir/file4 foo
 
 % final file versions in this repo:
 9463f52fe115e377cf2878d4fc548117211063f2 644   bar
@@ -24,6 +24,8 @@
 6ca237634e1f6bee1b6db94292fb44f092a25842 644   copied
 3e20847584beff41d7cd16136b7331ab3d754be0 644   dir/file
 75e6d3f8328f5f6ace6bf10b98df793416a09dca 644   dir/file2
+5fe139720576e18e34bcc9f79174db8897c8afe9 644   dir/subdir/file3
+57a1c1511590f3de52874adfa04effe8a77d64af 644   dir/subdir/file4
 9a7b52012991e4873687192c3e17e61ba3e837a3 644   foo
 bc3eca3f47023a3e70ca0d8cc95a22a6827db19d 644   quux
 copied renamed from foo:2ed2a3912a0b24502043eae84ee4b279c18b90dd
@@ -144,10 +146,11 @@
 |
 o  1 "1: add bar quux; copy foo to copied" files: copied2
 |
-o  0 "0: add foo baz dir/" files: dir2/file foo2
+o  0 "0: add foo baz dir/" files: dir2/file dir2/subdir/file3 foo2
 
 e5e3d520be9be45937d0b06b004fadcd6c221fa2 644   copied2
 3e20847584beff41d7cd16136b7331ab3d754be0 644   dir2/file
+5fe139720576e18e34bcc9f79174db8897c8afe9 644   dir2/subdir/file3
 9a7b52012991e4873687192c3e17e61ba3e837a3 644   foo2
 copied2 renamed from foo2:2ed2a3912a0b24502043eae84ee4b279c18b90dd
 copied:
--- a/tests/test-convert.out	Wed Dec 23 13:09:11 2009 +0100
+++ b/tests/test-convert.out	Wed Dec 23 13:12:36 2009 +0100
@@ -140,6 +140,15 @@
         If a match occurs, then the conversion process will add the most
         recent revision on the branch indicated in the regex as the second
         parent of the changeset.
+    --config hook.cvslog
+        Specify a Python function to be called at the end of gathering the CVS
+        log. The function is passed a list with the log entries, and can
+        modify the entries in-place, or add or delete them.
+    --config hook.cvschangesets
+        Specify a Python function to be called after the changesets are
+        calculated from the the CVS log. The function is passed a list with
+        the changeset entries, and can modify the changesets in-place, or add
+        or delete them.
 
     An additional "debugcvsps" Mercurial command allows the builtin changeset
     merging code to be run without doing a conversion. Its parameters and
@@ -259,3 +268,8 @@
 emptydir does not look like a Bazaar repo
 cannot find required "p4" tool
 abort: emptydir: missing or unsupported repository
+% convert with imaginary source type
+initializing destination a-foo repository
+abort: foo: invalid source repository type
+% convert with imaginary sink type
+abort: foo: invalid destination repository type
--- a/tests/test-debugcomplete.out	Wed Dec 23 13:09:11 2009 +0100
+++ b/tests/test-debugcomplete.out	Wed Dec 23 13:12:36 2009 +0100
@@ -168,7 +168,7 @@
 clone: noupdate, updaterev, rev, pull, uncompressed, ssh, remotecmd
 commit: addremove, close-branch, include, exclude, message, logfile, date, user
 diff: rev, change, text, git, nodates, show-function, reverse, ignore-all-space, ignore-space-change, ignore-blank-lines, unified, stat, include, exclude
-export: output, switch-parent, text, git, nodates
+export: output, switch-parent, rev, text, git, nodates
 forget: include, exclude
 init: ssh, remotecmd
 log: follow, follow-first, date, copies, keyword, rev, removed, only-merges, user, only-branch, prune, patch, git, limit, no-merges, style, template, include, exclude
@@ -177,7 +177,7 @@
 push: force, rev, ssh, remotecmd
 remove: after, force, include, exclude
 serve: accesslog, daemon, daemon-pipefds, errorlog, port, address, prefix, name, webdir-conf, pid-file, stdio, templates, style, ipv6, certificate
-status: all, modified, added, removed, deleted, clean, unknown, ignored, no-status, copies, print0, rev, include, exclude
+status: all, modified, added, removed, deleted, clean, unknown, ignored, no-status, copies, print0, rev, change, include, exclude
 summary: remote
 update: clean, check, date, rev
 addremove: similarity, include, exclude, dry-run
--- a/tests/test-dispatch.out	Wed Dec 23 13:09:11 2009 +0100
+++ b/tests/test-dispatch.out	Wed Dec 23 13:12:36 2009 +0100
@@ -13,9 +13,9 @@
     a format string. The formatting rules are the same as for the export
     command, with the following additions:
 
-    "%s"   basename of file being printed
-    "%d"   dirname of file being printed, or '.' if in repository root
-    "%p"   root-relative path name of file being printed
+    "%s"  basename of file being printed
+    "%d"  dirname of file being printed, or '.' if in repository root
+    "%p"  root-relative path name of file being printed
 
 options:
 
--- a/tests/test-fncache.out	Wed Dec 23 13:09:11 2009 +0100
+++ b/tests/test-fncache.out	Wed Dec 23 13:12:36 2009 +0100
@@ -50,6 +50,7 @@
 .hg/data/tst.d.hg
 .hg/data/tst.d.hg/foo.i
 .hg/dirstate
+.hg/last-message.txt
 .hg/requires
 .hg/undo
 .hg/undo.branch
@@ -59,6 +60,7 @@
 .hg
 .hg/00changelog.i
 .hg/dirstate
+.hg/last-message.txt
 .hg/requires
 .hg/store
 .hg/store/00changelog.i
--- a/tests/test-git-import	Wed Dec 23 13:09:11 2009 +0100
+++ b/tests/test-git-import	Wed Dec 23 13:12:36 2009 +0100
@@ -141,7 +141,7 @@
 rename from rename2
 rename to rename3-2
 EOF
-hg log -vCr. --template '{rev} {files} / {file_copies%filecopy}\n'
+hg log -vr. --template '{rev} {files} / {file_copies}\n'
 
 hg locate rename2 rename3 rename3-2
 hg cat rename3
--- a/tests/test-help	Wed Dec 23 13:09:11 2009 +0100
+++ b/tests/test-help	Wed Dec 23 13:12:36 2009 +0100
@@ -4,6 +4,10 @@
 hg -q
 hg help
 hg -q help
+
+echo %% test short command list with verbose option
+hg -v help shortlist | sed 's/[(]version [^)]*[)]/(version xxx)/'
+
 hg add -h
 hg add --skjdfks
 hg help diff
--- a/tests/test-help.out	Wed Dec 23 13:09:11 2009 +0100
+++ b/tests/test-help.out	Wed Dec 23 13:12:36 2009 +0100
@@ -170,6 +170,68 @@
  templating   Template Usage
  urls         URL Paths
  extensions   Using additional features
+%% test short command list with verbose option
+Mercurial Distributed SCM (version xxx)
+
+Copyright (C) 2005-2009 Matt Mackall <mpm@selenic.com> and others
+This is free software; see the source for copying conditions. There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+basic commands:
+
+ add:
+      add the specified files on the next commit
+ annotate, blame:
+      show changeset information by line for each file
+ clone:
+      make a copy of an existing repository
+ commit, ci:
+      commit the specified files or all outstanding changes
+ diff:
+      diff repository (or selected files)
+ export:
+      dump the header and diffs for one or more changesets
+ forget:
+      forget the specified files on the next commit
+ init:
+      create a new repository in the given directory
+ log, history:
+      show revision history of entire repository or files
+ merge:
+      merge working directory with another revision
+ pull:
+      pull changes from the specified source
+ push:
+      push changes to the specified destination
+ remove, rm:
+      remove the specified files on the next commit
+ serve:
+      export the repository via HTTP
+ status, st:
+      show changed files in the working directory
+ summary, sum:
+      summarize working directory state
+ update, up, checkout, co:
+      update working directory
+
+global options:
+ -R --repository      repository root directory or name of overlay bundle file
+    --cwd             change working directory
+ -y --noninteractive  do not prompt, assume 'yes' for any required answers
+ -q --quiet           suppress output
+ -v --verbose         enable additional output
+    --config          set/override config option
+    --debug           enable debugging output
+    --debugger        start debugger
+    --encoding        set the charset encoding (default: ascii)
+    --encodingmode    set the charset encoding mode (default: strict)
+    --traceback       always print a traceback on exception
+    --time            time how long the command takes
+    --profile         print command execution profile
+    --version         output version information and exit
+ -h --help            display help and exit
+
+use "hg help" for the full list of commands
 hg add [OPTION]... [FILE]...
 
 add the specified files on the next commit
@@ -270,7 +332,9 @@
     parent.
 
     If one revision is given, it is used as the base revision. If two
-    revisions are given, the differences between them are shown.
+    revisions are given, the differences between them are shown. The --change
+    option can also be used as a shortcut to list the changed files of a
+    revision from its first parent.
 
     The codes used to show the status of files are:
 
@@ -297,6 +361,7 @@
  -C --copies     show source of copied files
  -0 --print0     end filenames with NUL, for use with xargs
     --rev        show difference from revision
+    --change     list the changed files of a revision
  -I --include    include names matching the given patterns
  -X --exclude    exclude names matching the given patterns
 
--- a/tests/test-hgrc	Wed Dec 23 13:09:11 2009 +0100
+++ b/tests/test-hgrc	Wed Dec 23 13:12:36 2009 +0100
@@ -1,25 +1,21 @@
 #!/bin/sh
 
-mkdir t
-cd t
-hg init
-echo "invalid" > .hg/hgrc
-hg status 2>&1 |sed -e "s:/.*\(/t/.*\):...\1:"
+echo "invalid" > $HGRCPATH
+hg version 2>&1 | sed -e "s|$HGRCPATH|\$HGRCPATH|"
+echo "" > $HGRCPATH
 
-#issue 1199, escaping
-
-cd ..
+# issue1199: escaping
 hg init "foo%bar"
 hg clone "foo%bar" foobar
 p=`pwd`
 cd foobar
-cat .hg/hgrc |sed -e "s:$p:...:"
-hg paths |sed -e "s:$p:...:"
-hg showconfig |sed -e "s:$p:...:"
+cat .hg/hgrc | sed -e "s:$p:...:"
+hg paths | sed -e "s:$p:...:"
+hg showconfig | sed -e "s:$p:...:"
+cd ..
 
 # issue1829: wrong indentation
-cd ..
-echo '[foo]' >> $HGRCPATH
+echo '[foo]' > $HGRCPATH
 echo '  x = y' >> $HGRCPATH
 hg version 2>&1 | sed -e "s|$HGRCPATH|\$HGRCPATH|"
 
--- a/tests/test-hgrc.out	Wed Dec 23 13:09:11 2009 +0100
+++ b/tests/test-hgrc.out	Wed Dec 23 13:12:36 2009 +0100
@@ -1,14 +1,10 @@
-hg: config error at .../t/.hg/hgrc:1: 'invalid'
+hg: config error at $HGRCPATH:1: 'invalid'
 updating to branch default
 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
 [paths]
 default = .../foo%bar
 default = .../foo%bar
 bundle.mainreporoot=.../foobar
-defaults.backout=-d "0 0"
-defaults.commit=-d "0 0"
-defaults.tag=-d "0 0"
 paths.default=.../foo%bar
-ui.slash=True
-hg: config error at $HGRCPATH:8: '  x = y'
+hg: config error at $HGRCPATH:2: '  x = y'
 hg: config error at $HGRCPATH:1: cannot include /no-such-file (No such file or directory)
--- a/tests/test-hgweb-commands	Wed Dec 23 13:09:11 2009 +0100
+++ b/tests/test-hgweb-commands	Wed Dec 23 13:12:36 2009 +0100
@@ -35,8 +35,8 @@
 "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/filediff/1/foo/?style=raw'
 
 echo % Overviews
-"$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/tags/?style=atom' | sed "s/http:\/\/[^/]*\//http:\/\/127.0.0.1\//"
-"$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/branches/?style=gitweb' | sed "s/http:\/\/[^/]*\//http:\/\/127.0.0.1\//"
+"$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/raw-tags'
+"$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/raw-branches'
 "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/summary/?style=gitweb'
 "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/graph/?style=gitweb'
 
--- a/tests/test-hgweb-commands.out	Wed Dec 23 13:09:11 2009 +0100
+++ b/tests/test-hgweb-commands.out	Wed Dec 23 13:12:36 2009 +0100
@@ -465,97 +465,12 @@
 % Overviews
 200 Script output follows
 
-<?xml version="1.0" encoding="ascii"?>
-<feed xmlns="http://127.0.0.1/2005/Atom">
- <id>http://127.0.0.1/</id>
- <link rel="self" href="http://127.0.0.1/atom-tags"/>
- <link rel="alternate" href="http://127.0.0.1/tags"/>
- <title>test: tags</title>
- <summary>test tag history</summary>
- <author><name>Mercurial SCM</name></author>
- <updated>1970-01-01T00:00:00+00:00</updated>
-
- <entry>
-  <title>1.0</title>
-  <link rel="alternate" href="http://127.0.0.1/rev/2ef0ac749a14"/>
-  <id>http://127.0.0.1/#tag-2ef0ac749a14e4f57a5a822464a0902c6f7f448f</id>
-  <updated>1970-01-01T00:00:00+00:00</updated>
-  <published>1970-01-01T00:00:00+00:00</published>
-  <content type="text">1.0</content>
- </entry>
-
-</feed>
+tip	1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe
+1.0	2ef0ac749a14e4f57a5a822464a0902c6f7f448f
 200 Script output follows
 
-<?xml version="1.0" encoding="ascii"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://127.0.0.1/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://127.0.0.1/1999/xhtml" xml:lang="en-US" lang="en-US">
-<head>
-<link rel="icon" href="/static/hgicon.png" type="image/png" />
-<meta name="robots" content="index, nofollow"/>
-<link rel="stylesheet" href="/static/style-gitweb.css" type="text/css" />
-
-
-<title>test: Branches</title>
-<link rel="alternate" type="application/atom+xml"
-   href="/atom-tags" title="Atom feed for test"/>
-<link rel="alternate" type="application/rss+xml"
-   href="/rss-tags" title="RSS feed for test"/>
-</head>
-<body>
-
-<div class="page_header">
-<a href="http://127.0.0.1/" title="Mercurial" style="float: right;">Mercurial</a><a href="/summary?style=gitweb">test</a> / branches
-</div>
-
-<div class="page_nav">
-<a href="/summary?style=gitweb">summary</a> |
-<a href="/shortlog?style=gitweb">shortlog</a> |
-<a href="/log?style=gitweb">changelog</a> |
-<a href="/graph?style=gitweb">graph</a> |
-<a href="/tags?style=gitweb">tags</a> |
-branches |
-<a href="/file/1d22e65f027e?style=gitweb">files</a>
-<br/>
-</div>
-
-<div class="title">&nbsp;</div>
-<table cellspacing="0">
-
-<tr class="parity0">
-<td class="age"><i>1970-01-01</i></td>
-<td><a class="list" href="/shortlog/1d22e65f027e?style=gitweb"><b>1d22e65f027e</b></a></td>
-<td class="open">stable</td>
-<td class="link">
-<a href="/changeset/1d22e65f027e?style=gitweb">changeset</a> |
-<a href="/log/1d22e65f027e?style=gitweb">changelog</a> |
-<a href="/file/1d22e65f027e?style=gitweb">files</a>
-</td>
-</tr>
-<tr class="parity1">
-<td class="age"><i>1970-01-01</i></td>
-<td><a class="list" href="/shortlog/a4f92ed23982?style=gitweb"><b>a4f92ed23982</b></a></td>
-<td class="inactive">default</td>
-<td class="link">
-<a href="/changeset/a4f92ed23982?style=gitweb">changeset</a> |
-<a href="/log/a4f92ed23982?style=gitweb">changelog</a> |
-<a href="/file/a4f92ed23982?style=gitweb">files</a>
-</td>
-</tr>
-</table>
-
-<div class="page_footer">
-<div class="page_footer_text">test</div>
-<div class="rss_logo">
-<a href="/rss-log">RSS</a>
-<a href="/atom-log">Atom</a>
-</div>
-<br />
-
-</div>
-</body>
-</html>
-
+stable	1d22e65f027e5a0609357e7d8e7508cd2ba5d2fe	open
+default	a4f92ed23982be056b9852de5dfe873eaac7f0de	inactive
 200 Script output follows
 
 <?xml version="1.0" encoding="ascii"?>
--- a/tests/test-import-eol	Wed Dec 23 13:09:11 2009 +0100
+++ b/tests/test-import-eol	Wed Dec 23 13:12:36 2009 +0100
@@ -28,19 +28,35 @@
 python -c 'file("a", "wb").write("a\nbbb\ncc\n\nd\ne")'
 hg ci -Am adda
 python ../makepatch.py
+
 echo % invalid eol
 hg --config patch.eol='LFCR' import eol.diff
 hg revert -a
+
 echo % force LF
 hg --traceback --config patch.eol='LF' import eol.diff
 python -c 'print repr(file("a","rb").read())'
 hg st
+
 echo % force CRLF
 hg up -C 0
 hg --traceback --config patch.eol='CRLF' import eol.diff
 python -c 'print repr(file("a","rb").read())'
 hg st
 
+echo % auto EOL on LF file
+hg up -C 0
+hg --traceback --config patch.eol='auto' import eol.diff
+python -c 'print repr(file("a","rb").read())'
+hg st
+
+echo % auto EOL on CRLF file
+python -c 'file("a", "wb").write("a\r\nbbb\r\ncc\r\n\r\nd\r\ne")'
+hg commit -m 'switch EOLs in a'
+hg --traceback --config patch.eol='auto' import eol.diff
+python -c 'print repr(file("a","rb").read())'
+hg st
+
 # Test --eol and binary patches
 python -c 'file("b", "wb").write("a\x00\nb")'
 hg ci -Am addb
--- a/tests/test-import-eol.out	Wed Dec 23 13:09:11 2009 +0100
+++ b/tests/test-import-eol.out	Wed Dec 23 13:12:36 2009 +0100
@@ -10,6 +10,13 @@
 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
 applying eol.diff
 'a\r\nyyyy\r\ncc\r\n\r\nd\r\ne'
+% auto EOL on LF file
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+applying eol.diff
+'a\nyyyy\ncc\n\nd\ne'
+% auto EOL on CRLF file
+applying eol.diff
+'a\r\nyyyy\r\ncc\r\n\r\nd\r\ne'
 adding b
 % binary patch with --eol
 applying bin.diff
--- a/tests/test-inherit-mode.out	Wed Dec 23 13:09:11 2009 +0100
+++ b/tests/test-inherit-mode.out	Wed Dec 23 13:12:36 2009 +0100
@@ -14,6 +14,7 @@
 00700 ./.hg/
 00600 ./.hg/00changelog.i
 00660 ./.hg/dirstate
+00660 ./.hg/last-message.txt
 00600 ./.hg/requires
 00770 ./.hg/store/
 00660 ./.hg/store/00changelog.i
--- a/tests/test-log	Wed Dec 23 13:09:11 2009 +0100
+++ b/tests/test-log	Wed Dec 23 13:12:36 2009 +0100
@@ -31,20 +31,24 @@
 echo % many renames
 hg log -vf e
 
-echo % log copies
-hg log -vC --template '{rev} {file_copies%filecopy}\n'
+echo '% log copies with --copies'
+hg log -vC --template '{rev} {file_copies}\n'
+echo '% log copies switch without --copies, with old filecopy template'
+hg log -v --template '{rev} {file_copies_switch%filecopy}\n'
+echo '% log copies switch with --copies'
+hg log -vC --template '{rev} {file_copies_switch}\n'
 
 echo % log copies, non-linear manifest
 hg up -C 3
 hg mv dir/b e
 echo foo > foo
 hg ci -Ame2 -d '6 0'
-hg log -vC --template '{rev} {file_copies%filecopy}\n' -r 5
+hg log -v --template '{rev} {file_copies}\n' -r 5
 
 echo % log copies, execute bit set
 chmod +x e
 hg ci -me3 -d '7 0'
-hg log -vC --template '{rev} {file_copies%filecopy}\n' -r 6
+hg log -v --template '{rev} {file_copies}\n' -r 6
 
 echo '% log -p d'
 hg log -pv d
--- a/tests/test-log.out	Wed Dec 23 13:09:11 2009 +0100
+++ b/tests/test-log.out	Wed Dec 23 13:12:36 2009 +0100
@@ -76,7 +76,19 @@
 a
 
 
-% log copies
+% log copies with --copies
+4 e (dir/b)
+3 b (a)
+2 dir/b (b)
+1 b (a)
+0 
+% log copies switch without --copies, with old filecopy template
+4 
+3 
+2 
+1 
+0 
+% log copies switch with --copies
 4 e (dir/b)
 3 b (a)
 2 dir/b (b)
--- a/tests/test-minirst.py	Wed Dec 23 13:09:11 2009 +0100
+++ b/tests/test-minirst.py	Wed Dec 23 13:12:36 2009 +0100
@@ -134,13 +134,14 @@
 
 
 fields = """
-Field lists give a simple two-column layout:
+:a: First item.
+:ab: Second item. Indentation and wrapping
+     is handled automatically.
 
-:key:         The whitespace following the key is
-  significant for the wrapping of this text.
-:another key: More text.
-    The indentation on the following
-    lines is not significant.
+Next list:
+
+:small: The larger key below triggers full indentation here.
+:much too large: This key is big enough to get its own line.
 """
 
 debugformat('fields', fields, 60)
--- a/tests/test-minirst.py.out	Wed Dec 23 13:09:11 2009 +0100
+++ b/tests/test-minirst.py.out	Wed Dec 23 13:12:36 2009 +0100
@@ -215,29 +215,34 @@
 
 fields formatted to fit within 60 characters:
 ----------------------------------------------------------------------
-Field lists give a simple two-column layout:
+a   First item.
+ab  Second item. Indentation and wrapping is handled
+    automatically.
 
-key           The whitespace following the key is
-              significant for the wrapping of this text.
-another key   More text. The indentation on the following
-              lines is not significant.
+Next list:
+
+small       The larger key below triggers full indentation
+            here.
+much too large
+            This key is big enough to get its own line.
 ----------------------------------------------------------------------
 
 fields formatted to fit within 30 characters:
 ----------------------------------------------------------------------
-Field lists give a simple two-
-column layout:
+a   First item.
+ab  Second item. Indentation
+    and wrapping is handled
+    automatically.
+
+Next list:
 
-key           The whitespace
-              following the
-              key is
-              significant for
-              the wrapping of
-              this text.
-another key   More text. The
-              indentation on
-              the following
-              lines is not
-              significant.
+small       The larger key
+            below triggers
+            full indentation
+            here.
+much too large
+            This key is big
+            enough to get its
+            own line.
 ----------------------------------------------------------------------
 
--- a/tests/test-mq	Wed Dec 23 13:09:11 2009 +0100
+++ b/tests/test-mq	Wed Dec 23 13:12:36 2009 +0100
@@ -387,10 +387,10 @@
 hg up -C 1
 hg qrefresh --git 2>&1 | grep -v 'saving bundle'
 cat .hg/patches/bar
-hg log -vC --template '{rev} {file_copies%filecopy}\n' -r .
+hg log -v --template '{rev} {file_copies}\n' -r .
 hg qrefresh --git
 cat .hg/patches/bar
-hg log -vC --template '{rev} {file_copies%filecopy}\n' -r .
+hg log -v --template '{rev} {file_copies}\n' -r .
 hg qrefresh
 grep 'diff --git' .hg/patches/bar
 
@@ -403,12 +403,12 @@
 hg mv baz bleh
 hg qrefresh --git 2>&1 | grep -v 'saving bundle'
 cat .hg/patches/bar
-hg log -vC --template '{rev} {file_copies%filecopy}\n' -r .
+hg log -v --template '{rev} {file_copies}\n' -r .
 hg mv quux fred
 hg mv bleh barney
 hg qrefresh --git
 cat .hg/patches/bar
-hg log -vC --template '{rev} {file_copies%filecopy}\n' -r .
+hg log -v --template '{rev} {file_copies}\n' -r .
 
 echo % refresh omitting an added file
 hg qnew baz
--- a/tests/test-non-interactive-wsgi	Wed Dec 23 13:09:11 2009 +0100
+++ b/tests/test-non-interactive-wsgi	Wed Dec 23 13:12:36 2009 +0100
@@ -60,9 +60,14 @@
 	'SERVER_PROTOCOL': 'HTTP/1.0'
 }
 
-hgweb('.')(env, startrsp)
+i = hgweb('.')
+i(env, startrsp)
 print '---- ERRORS'
 print errors.getvalue()
+print '---- OS.ENVIRON wsgi variables'
+print sorted([x for x in os.environ if x.startswith('wsgi')])
+print '---- request.ENVIRON wsgi variables'
+print sorted([x for x in i.repo.ui.environ if x.startswith('wsgi')])
 EOF
 
 python request.py
--- a/tests/test-non-interactive-wsgi.out	Wed Dec 23 13:09:11 2009 +0100
+++ b/tests/test-non-interactive-wsgi.out	Wed Dec 23 13:12:36 2009 +0100
@@ -10,3 +10,7 @@
 [('Content-Type', 'text/html; charset=ascii')]
 ---- ERRORS
 
+---- OS.ENVIRON wsgi variables
+[]
+---- request.ENVIRON wsgi variables
+['wsgi.errors', 'wsgi.input', 'wsgi.multiprocess', 'wsgi.multithread', 'wsgi.run_once', 'wsgi.url_scheme', 'wsgi.version']
--- a/tests/test-patchbomb	Wed Dec 23 13:09:11 2009 +0100
+++ b/tests/test-patchbomb	Wed Dec 23 13:12:36 2009 +0100
@@ -169,6 +169,12 @@
 hg email --date '1970-1-1 0:1' -n --flag fooFlag --flag barFlag -f quux -t foo \
  -c bar -s test -r 0:1 | fixheaders
 
+echo "% test multi-address parsing"
+hg email --date '1980-1-1 0:1' -m tmp.mbox -f quux -t 'spam<spam><eggs>' \
+ -t toast -c 'foo,bar@example.com' -c '"A, B <>" <a@example.com>' -s test -r 0 \
+ --config email.bcc='"Quux, A." <quux>'
+cat tmp.mbox | fixheaders
+
 echo "% test multi-byte domain parsing"
 UUML=`printf '\374'`
 HGENCODING=iso-8859-1
--- a/tests/test-patchbomb.out	Wed Dec 23 13:09:11 2009 +0100
+++ b/tests/test-patchbomb.out	Wed Dec 23 13:12:36 2009 +0100
@@ -1469,6 +1469,39 @@
 @@ -0,0 +1,1 @@
 +b
 
+% test multi-address parsing
+This patch series consists of 1 patches.
+
+
+Writing [PATCH] test ...
+From quux Tue Jan 01 00:01:01 1980
+Content-Type: text/plain; charset="us-ascii"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+Subject: [PATCH] test
+X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
+Message-Id: <8580ff50825a50c8f716.315532860@
+User-Agent: Mercurial-patchbomb
+Date: Tue, 01 Jan 1980 00:01:00 +0000
+From: quux
+To: spam <spam>, eggs, toast
+Cc: foo, bar@example.com, "A, B <>" <a@example.com>
+Bcc: "Quux, A." <quux>
+
+# HG changeset patch
+# User test
+# Date 1 0
+# Node ID 8580ff50825a50c8f716709acdf8de0deddcd6ab
+# Parent  0000000000000000000000000000000000000000
+a
+
+diff -r 000000000000 -r 8580ff50825a a
+--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
++++ b/a	Thu Jan 01 00:00:01 1970 +0000
+@@ -0,0 +1,1 @@
++a
+
+
 % test multi-byte domain parsing
 This patch series consists of 1 patches.
 
--- a/tests/test-rollback	Wed Dec 23 13:09:11 2009 +0100
+++ b/tests/test-rollback	Wed Dec 23 13:12:36 2009 +0100
@@ -15,14 +15,34 @@
 hg status
 
 echo % Test issue 902
-hg commit -m "test"
+hg commit -m "test2"
 hg branch test
 hg rollback
 hg branch
 
+echo '% Test issue 1635 (commit message saved)'
+echo '.hg/last-message.txt:'
+cat .hg/last-message.txt ; echo
+
 echo % Test rollback of hg before issue 902 was fixed
-hg commit -m "test"
+hg commit -m "test3"
 hg branch test
 rm .hg/undo.branch
 hg rollback
 hg branch
+
+echo '% rollback by pretxncommit saves commit message (issue 1635)'
+echo a >> a
+hg --config hooks.pretxncommit=false commit -m"precious commit message" 2>&1 | sed 's,exited with status .*,exited ...,g'
+echo '.hg/last-message.txt:'
+cat .hg/last-message.txt ; echo
+
+echo '% same thing, but run $EDITOR'
+cat > $HGTMP/editor <<'__EOF__'
+#!/bin/sh
+echo "another precious commit message" > "$1"
+__EOF__
+chmod +x $HGTMP/editor
+HGEDITOR=$HGTMP/editor hg --config hooks.pretxncommit=false commit 2>&1 | sed 's,exited with status .*,exited ...,g'
+echo '.hg/last-message.txt:'
+cat .hg/last-message.txt
--- a/tests/test-rollback.out	Wed Dec 23 13:09:11 2009 +0100
+++ b/tests/test-rollback.out	Wed Dec 23 13:12:36 2009 +0100
@@ -20,8 +20,24 @@
 marked working directory as branch test
 rolling back last transaction
 default
+% Test issue 1635 (commit message saved)
+.hg/last-message.txt:
+test2
 % Test rollback of hg before issue 902 was fixed
 marked working directory as branch test
 rolling back last transaction
 Named branch could not be reset, current branch still is: test
 test
+% rollback by pretxncommit saves commit message (issue 1635)
+transaction abort!
+rollback completed
+abort: pretxncommit hook exited ...
+.hg/last-message.txt:
+precious commit message
+% same thing, but run $EDITOR
+transaction abort!
+rollback completed
+note: commit message saved in .hg/last-message.txt
+abort: pretxncommit hook exited ...
+.hg/last-message.txt:
+another precious commit message
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-share	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,48 @@
+#!/bin/sh
+
+echo "[extensions]"      >> $HGRCPATH
+echo "share = "          >> $HGRCPATH
+
+echo % prepare repo1
+hg init repo1
+cd repo1
+echo a > a
+hg commit -A -m'init'
+
+echo % share it
+cd ..
+hg share repo1 repo2
+
+echo % contents of repo2/.hg
+cd repo2
+[ -d .hg/store ] \
+  && echo "fail: .hg/store should not exist" \
+  || echo "pass: .hg/store does not exist"
+# Some sed versions appends newline, some don't, and some just fails
+(cat .hg/sharedpath; echo) | head -n1 | sed "s:$HGTMP:*HGTMP*:"
+
+echo % commit in shared clone
+echo a >> a
+hg commit -m'change in shared clone'
+
+echo % check original
+cd ../repo1
+hg log
+hg update
+cat a             # should be two lines of "a"
+
+echo % commit in original
+echo b > b
+hg commit -A -m'another file'
+
+echo % check in shared clone
+cd ../repo2
+hg log
+hg update
+cat b             # should exist with one "b"
+
+echo % hg serve shared clone
+hg serve -n test -p $HGPORT -d --pid-file=hg.pid
+cat hg.pid >> $DAEMON_PIDS
+
+"$TESTDIR/get-with-headers.py" localhost:$HGPORT '/raw-file/'
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-share.out	Wed Dec 23 13:12:36 2009 +0100
@@ -0,0 +1,53 @@
+% prepare repo1
+adding a
+% share it
+updating working directory
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+% contents of repo2/.hg
+pass: .hg/store does not exist
+*HGTMP*/test-share/repo1/.hg
+% commit in shared clone
+% check original
+changeset:   1:8af4dc49db9e
+tag:         tip
+user:        test
+date:        Thu Jan 01 00:00:00 1970 +0000
+summary:     change in shared clone
+
+changeset:   0:d3873e73d99e
+user:        test
+date:        Thu Jan 01 00:00:00 1970 +0000
+summary:     init
+
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+a
+a
+% commit in original
+adding b
+% check in shared clone
+changeset:   2:c2e0ac586386
+tag:         tip
+user:        test
+date:        Thu Jan 01 00:00:00 1970 +0000
+summary:     another file
+
+changeset:   1:8af4dc49db9e
+user:        test
+date:        Thu Jan 01 00:00:00 1970 +0000
+summary:     change in shared clone
+
+changeset:   0:d3873e73d99e
+user:        test
+date:        Thu Jan 01 00:00:00 1970 +0000
+summary:     init
+
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+b
+% hg serve shared clone
+200 Script output follows
+
+
+-rw-r--r-- 4 a
+-rw-r--r-- 2 b
+
+
--- a/tests/test-status	Wed Dec 23 13:09:11 2009 +0100
+++ b/tests/test-status	Wed Dec 23 13:12:36 2009 +0100
@@ -91,4 +91,27 @@
 assert "-q" "-u"         1
 assert "-m" "-a"         1
 assert "-r" "-d"         1
+cd ..
 
+hg init repo4
+cd repo4
+touch modified removed deleted
+hg ci -q -A -m 'initial checkin' -d "1000000 0"
+touch added unknown
+hg add added
+hg remove removed
+rm deleted
+echo x > modified
+hg copy modified copied
+hg ci -m 'test checkin' -d "1000001 0"
+rm *
+touch unrelated
+hg ci -q -A -m 'unrelated checkin' -d "1000002 0"
+echo "hg status --change 1:"
+hg status --change 1
+echo "hg status --change 1 unrelated:"
+hg status --change 1 unrelated
+echo "hg status -C --change 1 added modified copied removed deleted:"
+hg status -C --change 1 added modified copied removed deleted
+echo "hg status -A --change 1"
+hg status -A --change 1
--- a/tests/test-status.out	Wed Dec 23 13:09:11 2009 +0100
+++ b/tests/test-status.out	Wed Dec 23 13:12:36 2009 +0100
@@ -124,3 +124,22 @@
 adding deleted
 adding modified
 adding removed
+hg status --change 1:
+M modified
+A added
+A copied
+R removed
+hg status --change 1 unrelated:
+hg status -C --change 1 added modified copied removed deleted:
+M modified
+A added
+A copied
+  modified
+R removed
+hg status -A --change 1
+M modified
+A added
+A copied
+  modified
+R removed
+C deleted
--- a/tests/test-template-engine	Wed Dec 23 13:09:11 2009 +0100
+++ b/tests/test-template-engine	Wed Dec 23 13:12:36 2009 +0100
@@ -11,6 +11,10 @@
     def process(self, t, map):
         tmpl = self.loader(t)
         for k, v in map.iteritems():
+            if k in ('templ', 'ctx', 'repo', 'revcache', 'cache'):
+                continue
+            if hasattr(v, '__call__'):
+                v = v(**map)
             v = templater.stringify(v)
             tmpl = tmpl.replace('{{%s}}' % k, v)
         yield tmpl