changeset 9084:9f191931c859

Merge backed out change
author Bryan O'Sullivan <bos@serpentine.com>
date Wed, 08 Jul 2009 17:03:16 -0700
parents d4d4da54ab05 (diff) ec171737aaf1 (current diff)
children 4858f2cacb4d 8ec39725d966
files mercurial/util.py
diffstat 480 files changed, 50859 insertions(+), 17346 deletions(-) [+]
line wrap: on
line diff
--- a/.hgsigs	Wed Jul 08 17:01:18 2009 -0700
+++ b/.hgsigs	Wed Jul 08 17:03:16 2009 -0700
@@ -12,3 +12,4 @@
 11a4eb81fb4f4742451591489e2797dc47903277 0 iEYEABECAAYFAklcAnsACgkQywK+sNU5EO+uXwCbBVHNNsLy1g7BlAyQJwadYVyHOXoAoKvtAVO71+bv7EbVoukwTzT+P4Sx
 11efa41037e280d08cfb07c09ad485df30fb0ea8 0 iEYEABECAAYFAkmvJRQACgkQywK+sNU5EO9XZwCeLMgDgPSMWMm6vgjL4lDs2pEc5+0AnRxfiFbpbBfuEFTqKz9nbzeyoBlx
 02981000012e3adf40c4849bd7b3d5618f9ce82d 0 iEYEABECAAYFAknEH3wACgkQywK+sNU5EO+uXwCeI+LbLMmhjU1lKSfU3UWJHjjUC7oAoIZLvYDGOL/tNZFUuatc3RnZ2eje
+196d40e7c885fa6e95f89134809b3ec7bdbca34b 0 iEYEABECAAYFAkpL2X4ACgkQywK+sNU5EO9FOwCfXJycjyKJXsvQqKkHrglwOQhEKS4An36GfKzptfN8b1qNc3+ya/5c2WOM
--- a/.hgtags	Wed Jul 08 17:01:18 2009 -0700
+++ b/.hgtags	Wed Jul 08 17:03:16 2009 -0700
@@ -24,3 +24,4 @@
 11a4eb81fb4f4742451591489e2797dc47903277 1.1.2
 11efa41037e280d08cfb07c09ad485df30fb0ea8 1.2
 02981000012e3adf40c4849bd7b3d5618f9ce82d 1.2.1
+196d40e7c885fa6e95f89134809b3ec7bdbca34b 1.3
--- a/Makefile	Wed Jul 08 17:01:18 2009 -0700
+++ b/Makefile	Wed Jul 08 17:03:16 2009 -0700
@@ -36,7 +36,7 @@
 	$(MAKE) -C doc
 
 clean:
-	-$(PYTHON) setup.py clean --all # ignore errors of this command
+	-$(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
@@ -80,9 +80,8 @@
 update-pot: i18n/hg.pot
 
 i18n/hg.pot: $(PYTHON_FILES)
-	mkdir -p i18n
-	pygettext -d hg -p i18n --docstrings \
-	  mercurial/commands.py hgext/*.py hgext/*/__init__.py
+	$(PYTHON) i18n/hggettext mercurial/commands.py \
+	  hgext/*.py hgext/*/__init__.py > 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
--- a/README	Wed Jul 08 17:01:18 2009 -0700
+++ b/README	Wed Jul 08 17:03:16 2009 -0700
@@ -5,6 +5,6 @@
  $ hg debuginstall # sanity-check setup
  $ hg              # see help
 
-See http://www.selenic.com/mercurial/ for detailed installation
+See http://mercurial.selenic.com/ for detailed installation
 instructions, platform-specific notes, and Mercurial user information.
 
--- a/contrib/bash_completion	Wed Jul 08 17:01:18 2009 -0700
+++ b/contrib/bash_completion	Wed Jul 08 17:03:16 2009 -0700
@@ -89,6 +89,13 @@
     COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$tags' -- "$cur"))
 }
 
+_hg_branches()
+{
+    local branches="$("$hg" branches -q 2>/dev/null)"
+    local IFS=$'\n'
+    COMPREPLY=(${COMPREPLY[@]:-} $(compgen -W '$branches' -- "$cur"))
+}
+
 # this is "kind of" ugly...
 _hg_count_non_option()
 {
@@ -189,9 +196,11 @@
     if [ "$cmd" != status ] && [ "$prev" = -r ] || [ "$prev" == --rev ]; then
 	if [ $canonical = 1 ]; then
 	    _hg_tags
+	    _hg_branches
 	    return 0
 	elif [[ status != "$cmd"* ]]; then
 	    _hg_tags
+	    _hg_branches
 	    return 0
 	else
 	    return 1
@@ -207,9 +216,11 @@
 		return 0
 	    fi
 	    _hg_tags
+	    _hg_branches
 	;;
 	manifest|update)
 	    _hg_tags
+	    _hg_branches
 	;;
 	pull|push|outgoing|incoming)
 	    _hg_paths
@@ -221,6 +232,10 @@
 	add)
 	    _hg_status "u"
 	;;
+	merge)
+	    _hg_tags
+	    _hg_branches
+	;;
 	commit)
 	    _hg_status "mar"
 	;;
@@ -335,6 +350,7 @@
 _hg_cmd_strip()
 {
     _hg_tags
+    _hg_branches
 }
 
 _hg_cmd_qcommit()
@@ -443,6 +459,7 @@
     case "$subcmd" in
 	good|bad)
 	    _hg_tags
+	    _hg_branches
 	    ;;
     esac
 
@@ -479,6 +496,7 @@
     esac
 
     _hg_tags
+    _hg_branches
     return
 }
 
@@ -487,6 +505,7 @@
 _hg_cmd_sign()
 {
     _hg_tags
+    _hg_branches
 }
 
 
@@ -507,6 +526,7 @@
 
     # all other transplant options values and command parameters are revisions
     _hg_tags
+    _hg_branches
     return
 }
 
--- a/contrib/buildrpm	Wed Jul 08 17:01:18 2009 -0700
+++ b/contrib/buildrpm	Wed Jul 08 17:03:16 2009 -0700
@@ -1,19 +1,19 @@
 #!/bin/sh
 #
 # Build a Mercurial RPM in place.
-# Known to work on:
-# - Fedora 9
-# - Fedora 10
 #
 # Bryan O'Sullivan <bos@serpentine.com>
+#
+# Tested on
+# - Fedora 10
+# - Fedora 11
+# - Centos 5.3 (with Fedora EPEL repo for asciidoc)
 
-if hg --version > /dev/null 2>&1; then :
-else
-    echo 'hg command not available!' 1>&2
-    exit 1
-fi
+HG="`dirname $0`/../hg"
+PYTHONPATH="`dirname $0`/../mercurial/pure"
+export PYTHONPATH
 
-root="`hg root 2>/dev/null`"
+root="`$HG root 2>/dev/null`"
 specfile=contrib/mercurial.spec
 
 if [ -z "$root" ]; then
@@ -26,7 +26,7 @@
 cd "$root"
 rm -rf $rpmdir
 mkdir -p $rpmdir/RPMS
-hg clone "$root" $rpmdir/BUILD
+$HG clone "$root" $rpmdir/BUILD
 
 if [ ! -f $specfile ]; then
     echo "Cannot find $specfile!" 1>&2
@@ -35,11 +35,11 @@
 
 tmpspec=/tmp/`basename "$specfile"`.$$ # FIXME: Insecure /tmp handling
 # Use the most recent tag as the version.
-version=`hg tags | perl -e 'while(<STDIN>){if(/^(\d\S+)/){print$1;exit}}'`
+version=`$HG tags | python -c 'import sys; print [l for l in sys.stdin.readlines() if l[0].isdigit()][0].split()[0]'`
 # Compute the release number as the difference in revision numbers
 # between the tip and the most recent tag.
-release=`hg tags | perl -e 'while(<STDIN>){($tag,$id)=/^(\S+)\s+(\d+)/;if($tag eq "tip"){$tip = $id}elsif($tag=~/^\d/){print $tip-$id+1;exit}}'`
-tip=`hg -q tip`
+release=`$HG tags | python -c 'import sys; l = sys.stdin.readlines(); print int(l[0].split()[1].split(":")[0]) - int([x for x in l if x[0].isdigit()][0].split()[1].split(":")[0])'`
+tip=`$HG -q tip`
 
 # Beat up the spec file
 sed -e 's,^Source:.*,Source: /dev/null,' \
@@ -51,11 +51,11 @@
 
 cat <<EOF >> $tmpspec
 %changelog
-* `date +'%a %b %d %Y'` `hg showconfig ui.username` $version-$release
+* `LANG=en_US date +'%a %b %d %Y'` `$HG showconfig ui.username` $version-$release
 - Automatically built via $0
 
 EOF
-hg log \
+$HG log \
      --template '* {date|rfc822date} {author}\n- {desc|firstline}\n\n' \
      .hgtags \
   | sed -e 's/^\(\* [MTWFS][a-z][a-z]\), \([0-3][0-9]\) \([A-Z][a-z][a-z]\) /\1 \3 \2 /' \
--- a/contrib/hgdiff	Wed Jul 08 17:01:18 2009 -0700
+++ b/contrib/hgdiff	Wed Jul 08 17:03:16 2009 -0700
@@ -37,13 +37,13 @@
                 names[os.path.join(l, x)] = (st.st_dev, st.st_ino)
 
 def diff_files(file1, file2):
-    if file1 == None:
+    if file1 is None:
         b = file(file2).read().splitlines(1)
         l1 = "--- %s\n" % (file2)
         l2 = "+++ %s\n" % (file2)
         l3 = "@@ -0,0 +1,%d @@\n" % len(b)
         l = [l1, l2, l3] + ["+" + e for e in b]
-    elif file2 == None:
+    elif file2 is None:
         a = file(file1).read().splitlines(1)
         l1 = "--- %s\n" % (file1)
         l2 = "+++ %s\n" % (file1)
--- a/contrib/macosx/Readme.html	Wed Jul 08 17:01:18 2009 -0700
+++ b/contrib/macosx/Readme.html	Wed Jul 08 17:03:16 2009 -0700
@@ -25,13 +25,13 @@
 <p class="p2"><br></p>
 <p class="p1"><b>Documentation</b></p>
 <p class="p2"><br></p>
-<p class="p3">Visit the <a href="http://www.selenic.com/mercurial">Mercurial web site and wiki</a></p>
+<p class="p3">Visit the <a href="http://mercurial.selenic.com/">Mercurial web site and wiki</a></p>
 <p class="p2"><br></p>
 <p class="p3">There's also a free book, <a href="http://hgbook.red-bean.com/">Distributed revision control with Mercurial</a></p>
 <p class="p2"><br></p>
 <p class="p1"><b>Reporting problems</b></p>
 <p class="p2"><br></p>
 <p class="p3">If you run into any problems, please file a bug online:</p>
-<p class="p3"><a href="http://www.selenic.com/mercurial/bts">http://www.selenic.com/mercurial/bts</a></p>
+<p class="p3"><a href="http://mercurial.selenic.com/bts/">http://mercurial.selenic.com/bts/</a></p>
 </body>
 </html>
--- a/contrib/macosx/Welcome.html	Wed Jul 08 17:01:18 2009 -0700
+++ b/contrib/macosx/Welcome.html	Wed Jul 08 17:03:16 2009 -0700
@@ -11,10 +11,10 @@
   </style>
 </head>
 <body>
-<p class="p1">This is a prepackaged release of <a href="http://www.selenic.com/mercurial">Mercurial</a> for Mac OS X.</p>
+<p class="p1">This is a prepackaged release of <a href="http://mercurial.selenic.com/">Mercurial</a> for Mac OS X.</p>
 <p class="p2"><br></p>
 <br>
 <p>
-Please be sure to read the latest <a href="http://www.selenic.com/mercurial/wiki/index.cgi/WhatsNew">release notes</a>.</p>
+Please be sure to read the latest <a href="http://mercurial.selenic.com/wiki/WhatsNew">release notes</a>.</p>
 </body>
 </html>
--- a/contrib/mercurial.el	Wed Jul 08 17:01:18 2009 -0700
+++ b/contrib/mercurial.el	Wed Jul 08 17:03:16 2009 -0700
@@ -837,11 +837,12 @@
   (interactive "d")
   (save-excursion
     (goto-char pos)
-    (let ((face (get-text-property pos 'face))
+    (let (face
 	  (inhibit-read-only t)
 	  bol)
       (beginning-of-line)
       (setq bol (+ (point) 4))
+      (setq face (get-text-property bol 'face))
       (end-of-line)
       (if (eq face 'bold)
 	  (progn
--- a/contrib/mercurial.spec	Wed Jul 08 17:01:18 2009 -0700
+++ b/contrib/mercurial.spec	Wed Jul 08 17:03:16 2009 -0700
@@ -2,10 +2,10 @@
 Name: mercurial
 Version: snapshot
 Release: 0
-License: GPL
+License: GPLv2
 Group: Development/Tools
-Source: http://www.selenic.com/mercurial/release/%{name}-%{version}.tar.gz
-URL: http://www.selenic.com/mercurial
+URL: http://mercurial.selenic.com/
+Source0: http://mercurial.selenic.com/release/%{name}-%{version}.tar.gz
 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
 
 # From the README:
@@ -17,11 +17,11 @@
 # python-devel provides an adequate python-dev.  The merge tool is a
 # run-time dependency.
 #
-BuildRequires: python >= 2.3, python-devel, make, gcc, asciidoc, xmlto
+BuildRequires: python >= 2.4, python-devel, make, gcc, asciidoc, xmlto
+Provides: hg = %{version}-%{release}
 
 %define pythonver %(python -c 'import sys;print ".".join(map(str, sys.version_info[:2]))')
-%define pythonlib %{_libdir}/python%{pythonver}/site-packages/%{name}
-%define hgext %{_libdir}/python%{pythonver}/site-packages/hgext
+%define emacs_lispdir %{_datadir}/emacs/site-lisp
 
 %description
 Mercurial is a fast, lightweight source control management system designed
@@ -45,23 +45,26 @@
 
 bash_completion_dir=$RPM_BUILD_ROOT%{_sysconfdir}/bash_completion.d
 mkdir -p $bash_completion_dir
-install contrib/bash_completion $bash_completion_dir/mercurial.sh
+install -m 644 contrib/bash_completion $bash_completion_dir/mercurial.sh
 
 zsh_completion_dir=$RPM_BUILD_ROOT%{_datadir}/zsh/site-functions
 mkdir -p $zsh_completion_dir
-install contrib/zsh_completion $zsh_completion_dir/_mercurial
+install -m 644 contrib/zsh_completion $zsh_completion_dir/_mercurial
 
-lisp_dir=$RPM_BUILD_ROOT%{_datadir}/emacs/site-lisp
-mkdir -p $lisp_dir
-install contrib/mercurial.el $lisp_dir
+mkdir -p $RPM_BUILD_ROOT%{emacs_lispdir}
+install contrib/mercurial.el $RPM_BUILD_ROOT%{emacs_lispdir}
+
+mkdir -p $RPM_BUILD_ROOT/%{_sysconfdir}/mercurial/hgrc.d
+install contrib/mergetools.hgrc $RPM_BUILD_ROOT%{_sysconfdir}/mercurial/hgrc.d/mergetools.rc
 
 %clean
 rm -rf $RPM_BUILD_ROOT
 
 %files
 %defattr(-,root,root,-)
-%doc CONTRIBUTORS COPYING doc/README doc/hg*.txt doc/hg*.html doc/ja *.cgi
-%{_mandir}/man?/hg*.gz
+%doc CONTRIBUTORS COPYING doc/README doc/hg*.txt doc/hg*.html doc/ja *.cgi contrib/*.fcgi
+%doc %attr(644,root,root) %{_mandir}/man?/hg*.gz
+%doc %attr(644,root,root) contrib/*.svg contrib/sample.hgrc
 %{_sysconfdir}/bash_completion.d/mercurial.sh
 %{_datadir}/zsh/site-functions/_mercurial
 %{_datadir}/emacs/site-lisp/mercurial.el
@@ -71,6 +74,13 @@
 %{_bindir}/hg-viz
 %{_bindir}/git-rev-tree
 %{_bindir}/mercurial-convert-repo
-%{_libdir}/python%{pythonver}/site-packages/%{name}-*-py2.5.egg-info
-%{pythonlib}
-%{hgext}
+%dir %{_sysconfdir}/bash_completion.d/
+%dir %{_datadir}/zsh/site-functions/
+%dir %{_sysconfdir}/mercurial
+%dir %{_sysconfdir}/mercurial/hgrc.d
+%config(noreplace) %{_sysconfdir}/mercurial/hgrc.d/mergetools.rc
+%if "%{?pythonver}" != "2.4"
+%{_libdir}/python%{pythonver}/site-packages/%{name}-*-py%{pythonver}.egg-info
+%endif
+%{_libdir}/python%{pythonver}/site-packages/%{name}
+%{_libdir}/python%{pythonver}/site-packages/hgext
--- a/contrib/perf.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/contrib/perf.py	Wed Jul 08 17:03:16 2009 -0700
@@ -1,6 +1,6 @@
 # perf.py - performance test routines
+'''helper extension to measure performance'''
 
-from mercurial.i18n import _
 from mercurial import cmdutil, match, commands
 import time, os, sys
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contrib/tmplrewrite.py	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,23 @@
+#!/usr/bin/python
+import sys, os, re
+
+IGNORE = ['.css', '.py']
+oldre = re.compile('#([\w\|%]+)#')
+
+def rewrite(fn):
+    f = open(fn)
+    new = open(fn + '.new', 'wb')
+    for ln in f:
+        new.write(oldre.sub('{\\1}', ln))
+    new.close()
+    f.close()
+    os.rename(new.name, f.name)
+
+if __name__ == '__main__':
+    if len(sys.argv) < 2:
+        print 'usage: python tmplrewrite.py [file [file [file]]]'
+    for fn in sys.argv[1:]:
+        if os.path.splitext(fn) in IGNORE:
+            continue
+        print 'rewriting %s...' % fn
+        rewrite(fn)
--- a/contrib/vim/hgcommand.vim	Wed Jul 08 17:01:18 2009 -0700
+++ b/contrib/vim/hgcommand.vim	Wed Jul 08 17:03:16 2009 -0700
@@ -1226,7 +1226,7 @@
 
 Author:  Mathieu Clabaut <mathieu.clabaut@gmail.com>
 Credits:  Bob Hiestand <bob.hiestand@gmail.com>
-Mercurial: http://www.selenic.com/mercurial
+Mercurial: http://mercurial.selenic.com/
    Mercurial (noted Hg) is a fast, lightweight Source Control Management
    system designed for efficient handling of very large distributed projects.
 
--- a/contrib/win32/ReadMe.html	Wed Jul 08 17:01:18 2009 -0700
+++ b/contrib/win32/ReadMe.html	Wed Jul 08 17:03:16 2009 -0700
@@ -5,9 +5,25 @@
     <meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
     <style type="text/css">
       <!--
-      .indented
-      {
-      padding-left: 10pt;
+      html {
+        font-family: sans-serif;
+        margin: 1em 2em;
+      }
+
+      p {
+        margin-top: 0.5em;
+        margin-bottom: 0.5em;
+      }
+
+      pre {
+        margin: 0.25em 0em;
+        padding: 0.5em;
+        background-color: #EEE;
+        border: thin solid #CCC;
+      }
+
+      .indented {
+        padding-left: 10pt;
       }
       -->
     </style>
@@ -18,95 +34,130 @@
 
     <p>Welcome to Mercurial for Windows!</p>
 
-    <p>Mercurial is a command-line application.  You must run it from
+    <p>
+      Mercurial is a command-line application. You must run it from
       the Windows command prompt (or if you're hard core, a <a
-      href="http://www.mingw.org/">MinGW</a> shell).</p>
+      href="http://www.mingw.org/">MinGW</a> shell).
+    </p>
 
-    <p><div class="indented"><i>Note: the standard <a
-      href="http://www.mingw.org/">MinGW</a> msys startup script uses
-      rxvt which has problems setting up standard input and output.
-      Running bash directly works correctly.</i></div>
+    <p class="indented">
+      <i>Note: the standard <a href="http://www.mingw.org/">MinGW</a>
+      msys startup script uses rxvt which has problems setting up
+      standard input and output. Running bash directly works
+      correctly.</i>
+    </p>
 
-    <p>For documentation, please visit the <a
-      href="http://www.selenic.com/mercurial">Mercurial web site</a>.
+    <p>
+      For documentation, please visit the <a
+      href="http://mercurial.selenic.com/">Mercurial web site</a>.
       You can also download a free book, <a
-      href="http://hgbook.red-bean.com/">Distributed revision control
-      with Mercurial</a>.</p>
+      href="http://hgbook.red-bean.com/">Mercurial: The Definitive
+      Guide</a>.
+    </p>
 
-    <p>By default, Mercurial installs to <tt>C:\Program Files\Mercurial</tt>.  The
-      Mercurial command is called <tt>hg.exe</tt>.</p>
+    <p>
+      By default, Mercurial installs to <tt>C:\Program
+      Files\Mercurial</tt>. The Mercurial command is called
+      <tt>hg.exe</tt>.
+    </p>
 
     <h1>Testing Mercurial after you've installed it</h1>
 
-    <p>The easiest way to check that Mercurial is installed properly is to
-      just type the following at the command prompt:</p>
+    <p>
+      The easiest way to check that Mercurial is installed properly is
+      to just type the following at the command prompt:
+    </p>
 
     <pre>
 hg
 </pre>
 
-    <p>This command should print a useful help message.  If it does,
-      other Mercurial commands should work fine for you.</p>
+    <p>
+      This command should print a useful help message. If it does,
+      other Mercurial commands should work fine for you.
+    </p>
 
     <h1>Configuration notes</h1>
-	<h4>Default editor</h4>
-	The default editor for commit messages is 'notepad'. You can set the EDITOR
-    (or HGEDITOR) environment variable to specify your preference or set it in
-    mercurial.ini:
+    <h4>Default editor</h4>
+    <p>
+      The default editor for commit messages is 'notepad'. You can set
+      the <tt>EDITOR</tt> (or <tt>HGEDITOR</tt>) environment variable
+      to specify your preference or set it in <tt>mercurial.ini</tt>:
+    </p>
     <pre>
 [ui]
 editor = whatever
 </pre>
 
-	<h4>Configuring a Merge program</h4>
-	It should be emphasized that Mercurial by itself doesn't attempt to do a
-	Merge at the file level, neither does it make any attempt to Resolve the conflicts.
+    <h4>Configuring a Merge program</h4>
+    <p>
+      It should be emphasized that Mercurial by itself doesn't attempt
+      to do a Merge at the file level, neither does it make any
+      attempt to Resolve the conflicts.
+    </p>
 
-    By default, Mercurial will use the merge program defined by the HGMERGE environment
-    variable, or uses the one defined in the mercurial.ini file. (see <a href="http://www.selenic.com/mercurial/wiki/index.cgi/MergeProgram">MergeProgram</a> on the Mercurial Wiki for more information)
+    <p>
+      By default, Mercurial will use the merge program defined by the
+      <tt>HGMERGE</tt> environment variable, or uses the one defined
+      in the <tt>mercurial.ini</tt> file. (see <a
+      href="http://mercurial.selenic.com/wiki/MergeProgram">MergeProgram</a>
+      on the Mercurial Wiki for more information)
+    </p>
 
     <h1>Reporting problems</h1>
 
-    <p>Before you report any problems, please consult the <a
-	href="http://www.selenic.com/mercurial">Mercurial web site</a> and
-      see if your question is already in our list of <a
-	href="http://www.selenic.com/mercurial/wiki/index.cgi/FAQ">Frequently
-	Answered Questions</a> (the "FAQ").
+    <p>
+      Before you report any problems, please consult the <a
+      href="http://mercurial.selenic.com/">Mercurial web site</a>
+      and see if your question is already in our list of <a
+      href="http://mercurial.selenic.com/wiki/FAQ">Frequently
+      Answered Questions</a> (the "FAQ").
+    </p>
 
-    <p>If you cannot find an answer to your question, please feel
-      free to send mail to the Mercurial mailing list, at <a
-	href="mailto:mercurial@selenic.com">mercurial@selenic.com</a>.
+    <p>
+      If you cannot find an answer to your question, please feel free
+      to send mail to the Mercurial mailing list, at <a
+      href="mailto:mercurial@selenic.com">mercurial@selenic.com</a>.
       <b>Remember</b>, the more useful information you include in your
-      report, the easier it will be for us to help you!</p>
+      report, the easier it will be for us to help you!
+    </p>
 
-    <p>If you are IRC-savvy, that's usually the fastest way to get
-      help.  Go to <tt>#mercurial</tt> on
-      <tt>irc.freenode.net</tt>.</p>
+    <p>
+      If you are IRC-savvy, that's usually the fastest way to get
+      help. Go to <tt>#mercurial</tt> on <tt>irc.freenode.net</tt>.
+    </p>
 
     <h1>Author and copyright information</h1>
 
-    <p>Mercurial was written by <a href="http://www.selenic.com">Matt
-	Mackall</a>, and is maintained by Matt and a team of
-	volunteers.</p>
+    <p>
+      Mercurial was written by <a href="http://www.selenic.com">Matt
+      Mackall</a>, and is maintained by Matt and a team of volunteers.
+    </p>
 
-    <p>The Windows installer was written by <a
-	href="http://www.serpentine.com/blog">Bryan
-	O'Sullivan</a>.</p>
+    <p>
+      The Windows installer was written by <a
+      href="http://www.serpentine.com/blog">Bryan O'Sullivan</a>.
+    </p>
 
-    <p>Mercurial is Copyright 2005-2009 Matt Mackall and others.
-	See the <tt>Contributors.txt</tt> file for a list of contributors.</p>
+    <p>
+      Mercurial is Copyright 2005-2009 Matt Mackall and others. See
+      the <tt>Contributors.txt</tt> file for a list of contributors.
+    </p>
 
-    <p>Mercurial is free software; you can redistribute it and/or
+    <p>
+      Mercurial is free software; you can redistribute it and/or
       modify it under the terms of the <a
-	href="http://www.gnu.org/copyleft/gpl.html">GNU General Public
-	License</a> as published by the Free Software Foundation; either
-      version 2 of the License, or (at your option) any later
-      version.</p>
+      href="http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt">GNU
+      General Public License version 2</a> as published by the Free
+      Software Foundation.
+    </p>
 
-    <p>Mercurial is distributed in the hope that it will be useful,
-      but <b>without any warranty</b>; without even the implied
-      warranty of <b>merchantability</b> or <b>fitness for a
-      particular purpose</b>.  See the GNU General Public License for
-      more details.</p>
+    <p>
+      Mercurial is distributed in the hope that it will be useful, but
+      <b>without any warranty</b>; without even the implied warranty
+      of <b>merchantability</b> or <b>fitness for a particular
+      purpose</b>. See the GNU General Public License for more
+      details.
+    </p>
   </body>
 </html>
--- a/contrib/win32/mercurial.iss	Wed Jul 08 17:01:18 2009 -0700
+++ b/contrib/win32/mercurial.iss	Wed Jul 08 17:03:16 2009 -0700
@@ -8,9 +8,9 @@
 LicenseFile=COPYING
 ShowLanguageDialog=yes
 AppPublisher=Matt Mackall and others
-AppPublisherURL=http://www.selenic.com/mercurial
-AppSupportURL=http://www.selenic.com/mercurial
-AppUpdatesURL=http://www.selenic.com/mercurial
+AppPublisherURL=http://mercurial.selenic.com/
+AppSupportURL=http://mercurial.selenic.com/
+AppUpdatesURL=http://mercurial.selenic.com/
 AppID={{4B95A5F1-EF59-4B08-BED8-C891C46121B3}
 AppContact=mercurial@selenic.com
 OutputBaseFilename=Mercurial-snapshot
@@ -51,7 +51,7 @@
 Source: COPYING; DestDir: {app}; DestName: Copying.txt
 
 [INI]
-Filename: {app}\Mercurial.url; Section: InternetShortcut; Key: URL; String: http://www.selenic.com/mercurial/
+Filename: {app}\Mercurial.url; Section: InternetShortcut; Key: URL; String: http://mercurial.selenic.com/
 
 [UninstallDelete]
 Type: files; Name: {app}\Mercurial.url
--- a/contrib/win32/postinstall.txt	Wed Jul 08 17:01:18 2009 -0700
+++ b/contrib/win32/postinstall.txt	Wed Jul 08 17:03:16 2009 -0700
@@ -6,4 +6,4 @@
 
 Also check the release notes at:
 
- http://www.selenic.com/mercurial/wiki/index.cgi/WhatsNew
+ http://mercurial.selenic.com/wiki/WhatsNew
--- a/contrib/zsh_completion	Wed Jul 08 17:01:18 2009 -0700
+++ b/contrib/zsh_completion	Wed Jul 08 17:03:16 2009 -0700
@@ -4,13 +4,34 @@
 # it into your zsh function path (/usr/share/zsh/site-functions for
 # instance)
 #
-# Copyright (C) 2005-6 Steve Borho
-# Copyright (C) 2006-8 Brendan Cully <brendan@kublai.com>
+# If you do not want to install it globally, you can copy it somewhere
+# else and add that directory to $fpath. This must be done before
+# compinit is called. If the file is copied to ~/.zsh.d, your ~/.zshrc
+# file could look like this:
+#
+# fpath=("$HOME/.zsh.d" $fpath)
+# autoload -U compinit
+# compinit
+#
+# Copyright (C) 2005, 2006 Steve Borho <steve@borho.org>
+# Copyright (C) 2006-9 Brendan Cully <brendan@kublai.com>
 #
-# This is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free
-# Software Foundation; either version 2 of the License, or (at your
-# option) any later version.
+# Permission is hereby granted, without written agreement and without
+# licence or royalty fees, to use, copy, modify, and distribute this
+# software and to distribute modified versions of this software for any
+# purpose, provided that the above copyright notice and the following
+# two paragraphs appear in all copies of this software.
+#
+# In no event shall the authors be liable to any party for direct,
+# indirect, special, incidental, or consequential damages arising out of
+# the use of this software and its documentation, even if the authors
+# have been advised of the possibility of such damage.
+#
+# The authors specifically disclaim any warranties, including, but not
+# limited to, the implied warranties of merchantability and fitness for
+# a particular purpose.  The software provided hereunder is on an "as
+# is" basis, and the authors have no obligation to provide maintenance,
+# support, updates, enhancements, or modifications.
 
 emulate -LR zsh
 setopt extendedglob
@@ -118,7 +139,7 @@
   typeset -gA _hg_alias_list
   local hline cmd cmdalias
 
-  _call_program hg hg debugcomplete -v 2>/dev/null | while read -A hline
+  _call_program hg hg debugcomplete -v | while read -A hline
   do
     cmd=$hline[1]
     _hg_cmd_list+=($cmd)
@@ -145,13 +166,26 @@
   typeset -a tags
   local tag rev
 
-  _hg_cmd tags 2> /dev/null | while read tag
+  _hg_cmd tags | while read tag
   do
     tags+=(${tag/ #    [0-9]#:*})
   done
   (( $#tags )) && _describe -t tags 'tags' tags
 }
 
+# likely merge candidates
+_hg_mergerevs() {
+  typeset -a heads
+  local myrev
+
+  heads=(${(f)"$(_hg_cmd heads --template '{rev}\\n')"})
+  # exclude own revision
+  myrev=$(_hg_cmd log -r . --template '{rev}\\n')
+  heads=(${heads:#$myrev})
+
+  (( $#heads )) && _describe -t heads 'heads' heads
+}
+
 _hg_files() {
   if [[ -n "$_hg_root" ]]
   then
@@ -171,7 +205,7 @@
 
 _hg_status() {
   [[ -d $PREFIX ]] || PREFIX=$PREFIX:h
-  status_files=(${(ps:\0:)"$(_hg_cmd status -0n$1 ./$PREFIX 2>/dev/null)"})
+  status_files=(${(ps:\0:)"$(_hg_cmd status -0n$1 ./$PREFIX)"})
 }
 
 _hg_unknown() {
@@ -193,11 +227,11 @@
 }
 
 _hg_resolve() {
-  local rstate rpah
+  local rstate rpath
 
   [[ -d $PREFIX ]] || PREFIX=$PREFIX:h
 
-  _hg_cmd resolve -l ./$PREFIX 2> /dev/null | while read rstate rpath
+  _hg_cmd resolve -l ./$PREFIX | while read rstate rpath
   do
     [[ $rstate == 'R' ]] && resolved_files+=($rpath)
     [[ $rstate == 'U' ]] && unresolved_files+=($rpath)
@@ -241,7 +275,7 @@
       compset -P '*/'
       if _cache_invalid "$cacheid" || ! _retrieve_cache "$cacheid"
       then
-        remdirs=(${${(M)${(f)"$(_call_program files ssh -a -x $host ls -1FL "${(q)rempath}" 2> /dev/null)"}##*/}%/})
+        remdirs=(${${(M)${(f)"$(_call_program files ssh -a -x $host ls -1FL "${(q)rempath}")"}##*/}%/})
         _store_cache "$cacheid" remdirs
       fi
       _describe -t directories 'remote directory' remdirs -S/
@@ -279,7 +313,7 @@
 
 _hg_paths() {
   typeset -a paths pnames
-  _hg_cmd paths 2> /dev/null | while read -A pnames
+  _hg_cmd paths | while read -A pnames
   do
     paths+=($pnames[1])
   done
@@ -343,7 +377,8 @@
   '--remotecmd[specify hg command to run on the remote side]:')
 
 _hg_cmd() {
-  _call_program hg hg "$_hg_cmd_globals[@]" "$@"
+  _call_program hg hg --config ui.verbose=0 --config defaults."$1"= \
+    "$_hg_cmd_globals[@]" "$@" 2> /dev/null
 }
 
 _hg_cmd_add() {
@@ -389,6 +424,27 @@
     '(--logfile -l)'{-l+,--logfile}'[read commit message from <file>]:log file:_files -g \*.txt'
 }
 
+_hg_cmd_bisect() {
+  _arguments -s -w : $_hg_global_opts \
+  '(-)'{-r,--reset}'[reset bisect state]' \
+  '(--good -g --bad -b --skip -s --reset -r)'{-g,--good}'[mark changeset good]'::revision:_hg_tags \
+  '(--good -g --bad -b --skip -s --reset -r)'{-b,--bad}'[mark changeset bad]'::revision:_hg_tags \
+  '(--good -g --bad -b --skip -s --reset -r)'{-s,--skip}'[skip testing changeset]' \
+  '(--command -c --noupdate -U)'{-c+,--command}'[use command to check changeset state]':commands:_command_names \
+  '(--command -c --noupdate -U)'{-U,--noupdate}'[do not update to target]'
+}
+
+_hg_cmd_branch() {
+  _arguments -s -w : $_hg_global_opts \
+  '(--force -f)'{-f,--force}'[set branch name even if it shadows an existing branch]' \
+  '(--clean -C)'{-C,--clean}'[reset branch name to parent branch name]'
+}
+
+_hg_cmd_branches() {
+  _arguments -s -w : $_hg_global_opts \
+  '(--active -a)'{-a,--active}'[show only branches that have unmerge heads]'
+}
+
 _hg_cmd_bundle() {
   _arguments -s -w : $_hg_global_opts $_hg_remote_opts \
   '(--force -f)'{-f,--force}'[run even when remote repository is unrelated]' \
@@ -543,6 +599,14 @@
   ':revision:_hg_tags'
 }
 
+_hg_cmd_merge() {
+  _arguments -s -w : $_hg_global_opts \
+  '(--force -f)'{-f,--force}'[force a merge with outstanding changes]' \
+  '(--rev -r 1)'{-r,--rev}'[revision to merge]:revision:_hg_mergerevs' \
+  '(--preview -P)'{-P,--preview}'[review revisions to merge (no merge is performed)]' \
+  ':revision:_hg_mergerevs'
+}
+
 _hg_cmd_outgoing() {
   _arguments -s -w : $_hg_global_opts $_hg_remote_opts $_hg_style_opts \
   '(--no-merges -M)'{-M,--no-merges}'[do not show merge revisions]' \
@@ -698,11 +762,6 @@
   ':revision:_hg_tags'
 }
 
-# bisect extension
-_hg_cmd_bisect() {
-  _arguments -s -w : $_hg_global_opts ':evaluation:(help init reset next good bad)'
-}
-
 # HGK
 _hg_cmd_view() {
   _arguments -s -w : $_hg_global_opts \
@@ -713,13 +772,13 @@
 # MQ
 _hg_qseries() {
   typeset -a patches
-  patches=(${(f)"$(_hg_cmd qseries 2>/dev/null)"})
+  patches=(${(f)"$(_hg_cmd qseries)"})
   (( $#patches )) && _describe -t hg-patches 'patches' patches
 }
 
 _hg_qapplied() {
   typeset -a patches
-  patches=(${(f)"$(_hg_cmd qapplied 2>/dev/null)"})
+  patches=(${(f)"$(_hg_cmd qapplied)"})
   if (( $#patches ))
   then
     patches+=(qbase qtip)
@@ -729,15 +788,27 @@
 
 _hg_qunapplied() {
   typeset -a patches
-  patches=(${(f)"$(_hg_cmd qunapplied 2>/dev/null)"})
+  patches=(${(f)"$(_hg_cmd qunapplied)"})
   (( $#patches )) && _describe -t hg-unapplied-patches 'unapplied patches' patches
 }
 
+# unapplied, including guarded patches
+_hg_qdeletable() {
+  typeset -a unapplied
+  unapplied=(${(f)"$(_hg_cmd qseries)"})
+  for p in $(_hg_cmd qapplied)
+  do
+    unapplied=(${unapplied:#$p})
+  done
+
+  (( $#unapplied )) && _describe -t hg-allunapplied-patches 'all unapplied patches' unapplied
+}
+
 _hg_qguards() {
   typeset -a guards
   local guard
   compset -P "+|-"
-  _hg_cmd qselect -s 2>/dev/null | while read guard
+  _hg_cmd qselect -s | while read guard
   do
     guards+=(${guard#(+|-)})
   done
@@ -755,7 +826,7 @@
   _arguments -s -w : $_hg_global_opts \
   '(--keep -k)'{-k,--keep}'[keep patch file]' \
   '*'{-r+,--rev}'[stop managing a revision]:applied patch:_hg_revrange' \
-  '*:unapplied patch:_hg_qunapplied'
+  '*:unapplied patch:_hg_qdeletable'
 }
 
 _hg_cmd_qdiff() {
--- a/doc/Makefile	Wed Jul 08 17:01:18 2009 -0700
+++ b/doc/Makefile	Wed Jul 08 17:03:16 2009 -0700
@@ -39,7 +39,7 @@
 
 install: man
 	for i in $(MAN) ; do \
-	  subdir=`echo $$i | sed -n 's/..*\.\([0-9]\)$$/man\1/p'` ; \
+	  subdir=`echo $$i | sed -n 's/^.*\.\([0-9]\)$$/man\1/p'` ; \
 	  mkdir -p $(DESTDIR)$(MANDIR)/$$subdir ; \
 	  $(INSTALL) $$i $(DESTDIR)$(MANDIR)/$$subdir ; \
 	done
--- a/doc/gendoc.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/doc/gendoc.py	Wed Jul 08 17:03:16 2009 -0700
@@ -44,7 +44,7 @@
     s = 'hg ' + cmds[0]
     if len(attr) > 2:
         if not attr[2].startswith('hg'):
-            s += attr[2]
+            s += ' ' + attr[2]
         else:
             s = attr[2]
     d['synopsis'] = s
@@ -103,7 +103,9 @@
         underlined(gettext(section).upper())
         if callable(doc):
             doc = doc()
-        ui.write(gettext(doc))
+        else:
+            doc = gettext(doc)
+        ui.write(doc)
         ui.write("\n")
 
 if __name__ == "__main__":
--- a/doc/hg.1.txt	Wed Jul 08 17:01:18 2009 -0700
+++ b/doc/hg.1.txt	Wed Jul 08 17:03:16 2009 -0700
@@ -1,6 +1,8 @@
 HG(1)
 =====
 Matt Mackall <mpm@selenic.com>
+:man source: Mercurial
+:man manual: Mercurial Manual
 
 NAME
 ----
@@ -8,11 +10,12 @@
 
 SYNOPSIS
 --------
-'hg' [global option]... <command> [command/global option]... [argument]...
+*hg* 'command' ['option']... ['argument']...
 
 DESCRIPTION
 -----------
-The hg(1) command provides a command line interface to the Mercurial system.
+The *hg* command provides a command line interface to the Mercurial
+system.
 
 COMMAND ELEMENTS
 ----------------
@@ -25,8 +28,9 @@
     indicates a path on the local machine
 
 revision::
-    indicates a changeset which can be specified as a changeset revision
-    number, a tag, or a unique substring of the changeset hash value
+    indicates a changeset which can be specified as a changeset
+    revision number, a tag, or a unique substring of the changeset
+    hash value
 
 repository path::
     either the pathname of a local repository or the URI of a remote
@@ -36,33 +40,34 @@
 
 FILES
 -----
- .hgignore::
-    This file contains regular expressions (one per line) that describe file
-    names that should be ignored by hg. For details, see hgignore(5).
+ `.hgignore`::
+    This file contains regular expressions (one per line) that
+    describe file names that should be ignored by *hg*. For details,
+    see *hgignore(5)*.
 
- .hgtags::
-    This file contains changeset hash values and text tag names (one of each
-    separated by spaces) that correspond to tagged versions of the repository
-    contents.
+ `.hgtags`::
+    This file contains changeset hash values and text tag names (one
+    of each separated by spaces) that correspond to tagged versions of
+    the repository contents.
 
- /etc/mercurial/hgrc, $HOME/.hgrc, .hg/hgrc::
-    This file contains defaults and configuration. Values in .hg/hgrc
-    override those in $HOME/.hgrc, and these override settings made in the
-    global /etc/mercurial/hgrc configuration. See hgrc(5) for details of
-    the contents and format of these files.
+ `/etc/mercurial/hgrc`, `$HOME/.hgrc`, `.hg/hgrc`::
+    This file contains defaults and configuration. Values in `.hg/hgrc`
+    override those in `$HOME/.hgrc`, and these override settings made in
+    the global `/etc/mercurial/hgrc` configuration. See *hgrc(5)* for
+    details of the contents and format of these files.
 
-Some commands (e.g. revert) produce backup files ending in .orig, if
-the .orig file already exists and is not tracked by Mercurial, it
-will be overwritten.
+Some commands (e.g. revert) produce backup files ending in `.orig`, if
+the `.orig` file already exists and is not tracked by Mercurial, it will
+be overwritten.
 
 BUGS
 ----
-Probably lots, please post them to the mailing list (See Resources below)
-when you find them.
+Probably lots, please post them to the mailing list (See Resources
+below) when you find them.
 
 SEE ALSO
 --------
-hgignore(5), hgrc(5)
+*hgignore(5)*, *hgrc(5)*
 
 AUTHOR
 ------
@@ -70,7 +75,7 @@
 
 RESOURCES
 ---------
-http://selenic.com/mercurial[Main Web Site]
+http://mercurial.selenic.com/[Main Web Site]
 
 http://selenic.com/hg[Source code repository]
 
@@ -78,6 +83,6 @@
 
 COPYING
 -------
-Copyright \(C) 2005-2007 Matt Mackall.
+Copyright \(C) 2005-2009 Matt Mackall.
 Free use of this software is granted under the terms of the GNU General
 Public License (GPL).
--- a/doc/hgignore.5.txt	Wed Jul 08 17:01:18 2009 -0700
+++ b/doc/hgignore.5.txt	Wed Jul 08 17:03:16 2009 -0700
@@ -1,6 +1,8 @@
 HGIGNORE(5)
 ===========
 Vadim Gelfer <vadim.gelfer@gmail.com>
+:man source: Mercurial
+:man manual: Mercurial Manual
 
 NAME
 ----
@@ -9,7 +11,7 @@
 SYNOPSIS
 --------
 
-The Mercurial system uses a file called .hgignore in the root
+The Mercurial system uses a file called `.hgignore` in the root
 directory of a repository to control its behavior when it finds files
 that it is not currently managing.
 
@@ -18,9 +20,8 @@
 
 Mercurial ignores every unmanaged file that matches any pattern in an
 ignore file. The patterns in an ignore file do not apply to files
-managed by Mercurial. To control Mercurial's handling of files that
-it manages, see the hg(1) man page. Look for the "-I" and "-X"
-options.
+managed by Mercurial. To control Mercurial's handling of files that it
+manages, see the hg(1) man page. Look for the "-I" and "-X" options.
 
 In addition, a Mercurial configuration file can point to a set of
 per-user or global ignore files. See the hgrc(5) man page for details
@@ -31,9 +32,9 @@
 ------
 
 An ignore file is a plain text file consisting of a list of patterns,
-with one pattern per line. Empty lines are skipped. The "#"
-character is treated as a comment character, and the "\" character is
-treated as an escape character.
+with one pattern per line. Empty lines are skipped. The "`#`"
+character is treated as a comment character, and the "`\`" character
+is treated as an escape character.
 
 Mercurial supports several pattern syntaxes. The default syntax used
 is Python/Perl-style regular expressions.
@@ -53,9 +54,9 @@
 follow, until another syntax is selected.
 
 Neither glob nor regexp patterns are rooted. A glob-syntax pattern of
-the form "*.c" will match a file ending in ".c" in any directory, and
-a regexp pattern of the form "\.c$" will do the same. To root a
-regexp pattern, start it with "^".
+the form "`*.c`" will match a file ending in "`.c`" in any directory,
+and a regexp pattern of the form "`\.c$`" will do the same. To root a
+regexp pattern, start it with "`^`".
 
 EXAMPLE
 -------
@@ -86,6 +87,6 @@
 COPYING
 -------
 This manual page is copyright 2006 Vadim Gelfer.
-Mercurial is copyright 2005-2007 Matt Mackall.
+Mercurial is copyright 2005-2009 Matt Mackall.
 Free use of this software is granted under the terms of the GNU General
 Public License (GPL).
--- a/doc/hgrc.5.txt	Wed Jul 08 17:01:18 2009 -0700
+++ b/doc/hgrc.5.txt	Wed Jul 08 17:03:16 2009 -0700
@@ -1,6 +1,8 @@
 HGRC(5)
 =======
 Bryan O'Sullivan <bos@serpentine.com>
+:man source: Mercurial
+:man manual: Mercurial Manual
 
 NAME
 ----
@@ -10,72 +12,71 @@
 --------
 
 The Mercurial system uses a set of configuration files to control
-aspects of its behaviour.
+aspects of its behavior.
 
 FILES
 -----
 
 Mercurial reads configuration data from several files, if they exist.
 The names of these files depend on the system on which Mercurial is
-installed. *.rc files from a single directory are read in
-alphabetical order, later ones overriding earlier ones. Where
-multiple paths are given below, settings from later paths override
-earlier ones.
+installed. `*.rc` files from a single directory are read in
+alphabetical order, later ones overriding earlier ones. Where multiple
+paths are given below, settings from later paths override earlier
+ones.
 
-(Unix) <install-root>/etc/mercurial/hgrc.d/*.rc::
-(Unix) <install-root>/etc/mercurial/hgrc::
+(Unix) `<install-root>/etc/mercurial/hgrc.d/*.rc`::
+(Unix) `<install-root>/etc/mercurial/hgrc`::
     Per-installation configuration files, searched for in the
-    directory where Mercurial is installed. <install-root> is the
-    parent directory of the hg executable (or symlink) being run.
-    For example, if installed in /shared/tools/bin/hg, Mercurial will
-    look in /shared/tools/etc/mercurial/hgrc. Options in these files
-    apply to all Mercurial commands executed by any user in any
-    directory.
+    directory where Mercurial is installed. `<install-root>` is the
+    parent directory of the hg executable (or symlink) being run. For
+    example, if installed in `/shared/tools/bin/hg`, Mercurial will look
+    in `/shared/tools/etc/mercurial/hgrc`. Options in these files apply
+    to all Mercurial commands executed by any user in any directory.
 
-(Unix) /etc/mercurial/hgrc.d/*.rc::
-(Unix) /etc/mercurial/hgrc::
+(Unix) `/etc/mercurial/hgrc.d/*.rc`::
+(Unix) `/etc/mercurial/hgrc`::
     Per-system configuration files, for the system on which Mercurial
-    is running. Options in these files apply to all Mercurial
-    commands executed by any user in any directory. Options in these
-    files override per-installation options.
+    is running. Options in these files apply to all Mercurial commands
+    executed by any user in any directory. Options in these files
+    override per-installation options.
 
-(Windows) <install-dir>\Mercurial.ini::
+(Windows) `<install-dir>\Mercurial.ini`::
   or else::
-(Windows) HKEY_LOCAL_MACHINE\SOFTWARE\Mercurial::
+(Windows) `HKEY_LOCAL_MACHINE\SOFTWARE\Mercurial`::
   or else::
-(Windows) C:\Mercurial\Mercurial.ini::
+(Windows) `C:\Mercurial\Mercurial.ini`::
     Per-installation/system configuration files, for the system on
     which Mercurial is running. Options in these files apply to all
-    Mercurial commands executed by any user in any directory.
-    Registry keys contain PATH-like strings, every part of which must
-    reference a Mercurial.ini file or be a directory where *.rc files
-    will be read.
+    Mercurial commands executed by any user in any directory. Registry
+    keys contain PATH-like strings, every part of which must reference
+    a `Mercurial.ini` file or be a directory where `*.rc` files will
+    be read.
 
-(Unix) $HOME/.hgrc::
-(Windows) %HOME%\Mercurial.ini::
-(Windows) %HOME%\.hgrc::
-(Windows) %USERPROFILE%\Mercurial.ini::
-(Windows) %USERPROFILE%\.hgrc::
-    Per-user configuration file(s), for the user running Mercurial.
-    On Windows 9x, %HOME% is replaced by %APPDATA%.
-    Options in these files apply to all Mercurial commands executed
-    by this user in any directory. Options in thes files override
-    per-installation and per-system options.
+(Unix) `$HOME/.hgrc`::
+(Windows) `%HOME%\Mercurial.ini`::
+(Windows) `%HOME%\.hgrc`::
+(Windows) `%USERPROFILE%\Mercurial.ini`::
+(Windows) `%USERPROFILE%\.hgrc`::
+    Per-user configuration file(s), for the user running Mercurial. On
+    Windows 9x, `%HOME%` is replaced by `%APPDATA%`. Options in these
+    files apply to all Mercurial commands executed by this user in any
+    directory. Options in these files override per-installation and
+    per-system options.
 
-(Unix, Windows) <repo>/.hg/hgrc::
+(Unix, Windows) `<repo>/.hg/hgrc`::
     Per-repository configuration options that only apply in a
     particular repository. This file is not version-controlled, and
     will not get transferred during a "clone" operation. Options in
-    this file override options in all other configuration files.
-    On Unix, most of this file will be ignored if it doesn't belong
-    to a trusted user or to a trusted group. See the documentation
-    for the trusted section below for more details.
+    this file override options in all other configuration files. On
+    Unix, most of this file will be ignored if it doesn't belong to a
+    trusted user or to a trusted group. See the documentation for the
+    trusted section below for more details.
 
 SYNTAX
 ------
 
-A configuration file consists of sections, led by a "[section]" header
-and followed by "name: value" entries; "name=value" is also accepted.
+A configuration file consists of sections, led by a "`[section]`" header
+and followed by "`name: value`" entries; "`name=value`" is also accepted.
 
     [spam]
     eggs=ham
@@ -87,136 +88,176 @@
 
 Leading whitespace is removed from values. Empty lines are skipped.
 
-The optional values can contain format strings which refer to other
-values in the same section, or values in a special DEFAULT section.
-
-Lines beginning with "#" or ";" are ignored and may be used to provide
+Lines beginning with "`#`" or "`;`" are ignored and may be used to provide
 comments.
 
 SECTIONS
 --------
 
 This section describes the different sections that may appear in a
-Mercurial "hgrc" file, the purpose of each section, its possible
-keys, and their possible values.
+Mercurial "hgrc" file, the purpose of each section, its possible keys,
+and their possible values.
+
+[[alias]]
+alias::
+ Defines command aliases.
+  Aliases allow you to define your own commands in terms of other
+  commands (or aliases), optionally including arguments.
++
+--
+Alias definitions consist of lines of the form:
+
+    <alias> = <command> [<argument]...
+
+For example, this definition:
+
+    latest = log --limit 5
+
+creates a new command `latest` that shows only the five most recent
+changesets. You can define subsequent aliases using earlier ones:
+
+    stable5 = latest -b stable
+
+NOTE: It is possible to create aliases with the same names as existing
+commands, which will then override the original definitions. This is
+almost always a bad idea!
+--
 
 [[auth]]
-auth:
-  Authentication credentials for HTTP authentication.
-  Each line has the following format:
+auth::
+Authentication credentials for HTTP authentication. Each line has
+the following format:
 
     <name>.<argument> = <value>
-
-  where <name> is used to group arguments into authentication entries.
-  Example:
++
+--
+where <name> is used to group arguments into authentication entries.
+Example:
 
     foo.prefix = hg.intevation.org/mercurial
     foo.username = foo
     foo.password = bar
     foo.schemes = http https
 
-  Supported arguments:
+    bar.prefix = secure.example.org
+    bar.key = path/to/file.key
+    bar.cert = path/to/file.cert
+    bar.schemes = https
+
+Supported arguments:
 
   prefix;;
-    Either '*' or a URI prefix with or without the scheme part. The
-    authentication entry with the longest matching prefix is used
-    (where '*' matches everything and counts as a match of length 1).
-    If the prefix doesn't include a scheme, the match is performed against
-    the URI with its scheme stripped as well, and the schemes argument,
-    q.v., is then subsequently consulted.
+    Either "\*" or a URI prefix with or without the scheme part.
+    The authentication entry with the longest matching prefix is used
+    (where "*" matches everything and counts as a match of length
+    1). If the prefix doesn't include a scheme, the match is performed
+    against the URI with its scheme stripped as well, and the schemes
+    argument, q.v., is then subsequently consulted.
   username;;
-    Username to authenticate with.
+    Optional. Username to authenticate with. If not given, and the
+    remote site requires basic or digest authentication, the user
+    will be prompted for it.
   password;;
-    Optional. Password to authenticate with. If not given the user will be
-    prompted for it.
+    Optional. Password to authenticate with. If not given, and the
+    remote site requires basic or digest authentication, the user
+    will be prompted for it.
+  key;;
+    Optional. PEM encoded client certificate key file.
+  cert;;
+    Optional. PEM encoded client certificate chain file.
   schemes;;
-    Optional. Space separated list of URI schemes to use this authentication
-    entry with. Only used if the prefix doesn't include a scheme. Supported
-    schemes are http and https. They will match static-http and static-https
-    respectively, as well.
+    Optional. Space separated list of URI schemes to use this
+    authentication entry with. Only used if the prefix doesn't include
+    a scheme. Supported schemes are http and https. They will match
+    static-http and static-https respectively, as well.
     Default: https.
 
-  If no suitable authentication entry is found, the user is prompted for
-  credentials as usual if required by the remote.
+If no suitable authentication entry is found, the user is prompted
+for credentials as usual if required by the remote.
+--
 
 [[decode]]
 decode/encode::
   Filters for transforming files on checkout/checkin. This would
   typically be used for newline processing or other
   localization/canonicalization of files.
++
+--
+Filters consist of a filter pattern followed by a filter command.
+Filter patterns are globs by default, rooted at the repository root.
+For example, to match any file ending in "`.txt`" in the root
+directory only, use the pattern "\*.txt". To match any file ending
+in "`.c`" anywhere in the repository, use the pattern "**`.c`".
 
-  Filters consist of a filter pattern followed by a filter command.
-  Filter patterns are globs by default, rooted at the repository
-  root. For example, to match any file ending in ".txt" in the root
-  directory only, use the pattern "*.txt". To match any file ending
-  in ".c" anywhere in the repository, use the pattern "**.c".
-
-  The filter command can start with a specifier, either "pipe:" or
-  "tempfile:". If no specifier is given, "pipe:" is used by default.
+The filter command can start with a specifier, either "pipe:" or
+"tempfile:". If no specifier is given, "pipe:" is used by default.
 
-  A "pipe:" command must accept data on stdin and return the
-  transformed data on stdout.
+A "pipe:" command must accept data on stdin and return the transformed
+data on stdout.
 
-  Pipe example:
+Pipe example:
 
-    [encode]
-    # uncompress gzip files on checkin to improve delta compression
-    # note: not necessarily a good idea, just an example
-    *.gz = pipe: gunzip
+  [encode]
+  # uncompress gzip files on checkin to improve delta compression
+  # note: not necessarily a good idea, just an example
+  *.gz = pipe: gunzip
 
-    [decode]
-    # recompress gzip files when writing them to the working dir (we
-    # can safely omit "pipe:", because it's the default)
-    *.gz = gzip
+  [decode]
+  # recompress gzip files when writing them to the working dir (we
+  # can safely omit "pipe:", because it's the default)
+  *.gz = gzip
 
-  A "tempfile:" command is a template. The string INFILE is replaced
-  with the name of a temporary file that contains the data to be
-  filtered by the command. The string OUTFILE is replaced with the
-  name of an empty temporary file, where the filtered data must be
-  written by the command.
+A "tempfile:" command is a template. The string INFILE is replaced
+with the name of a temporary file that contains the data to be
+filtered by the command. The string OUTFILE is replaced with the name
+of an empty temporary file, where the filtered data must be written by
+the command.
 
-  NOTE: the tempfile mechanism is recommended for Windows systems,
-  where the standard shell I/O redirection operators often have
-  strange effects and may corrupt the contents of your files.
+NOTE: the tempfile mechanism is recommended for Windows systems, where
+the standard shell I/O redirection operators often have strange
+effects and may corrupt the contents of your files.
 
-  The most common usage is for LF <-> CRLF translation on Windows.
-  For this, use the "smart" convertors which check for binary files:
+The most common usage is for LF <-> CRLF translation on Windows. For
+this, use the "smart" converters which check for binary files:
 
-    [extensions]
-    hgext.win32text =
-    [encode]
-    ** = cleverencode:
-    [decode]
-    ** = cleverdecode:
+  [extensions]
+  hgext.win32text =
+  [encode]
+  ** = cleverencode:
+  [decode]
+  ** = cleverdecode:
 
-  or if you only want to translate certain files:
+or if you only want to translate certain files:
 
-    [extensions]
-    hgext.win32text =
-    [encode]
-    **.txt = dumbencode:
-    [decode]
-    **.txt = dumbdecode:
+  [extensions]
+  hgext.win32text =
+  [encode]
+  **.txt = dumbencode:
+  [decode]
+  **.txt = dumbdecode:
+--
 
 [[defaults]]
 defaults::
   Use the [defaults] section to define command defaults, i.e. the
   default options/arguments to pass to the specified commands.
-
-  The following example makes 'hg log' run in verbose mode, and
-  'hg status' show only the modified files, by default.
++
+--
+The following example makes 'hg log' run in verbose mode, and 'hg
+status' show only the modified files, by default.
 
-    [defaults]
-    log = -v
-    status = -m
+  [defaults]
+  log = -v
+  status = -m
 
-  The actual commands, instead of their aliases, must be used when
-  defining command defaults. The command defaults will also be
-  applied to the aliases of the commands defined.
+The actual commands, instead of their aliases, must be used when
+defining command defaults. The command defaults will also be applied
+to the aliases of the commands defined.
+--
 
 [[diff]]
 diff::
-  Settings used when displaying diffs. They are all boolean and
+  Settings used when displaying diffs. They are all Boolean and
   defaults to False.
   git;;
     Use git extended diff format.
@@ -243,66 +284,70 @@
     Optional. Comma-separated list of carbon copy recipients'
     email addresses.
   bcc;;
-    Optional. Comma-separated list of blind carbon copy
-    recipients' email addresses. Cannot be set interactively.
+    Optional. Comma-separated list of blind carbon copy recipients'
+    email addresses. Cannot be set interactively.
   method;;
-    Optional. Method to use to send email messages. If value is
-    "smtp" (default), use SMTP (see section "[smtp]" for
-    configuration). Otherwise, use as name of program to run that
-    acts like sendmail (takes "-f" option for sender, list of
-    recipients on command line, message on stdin). Normally, setting
-    this to "sendmail" or "/usr/sbin/sendmail" is enough to use
-    sendmail to send messages.
+    Optional. Method to use to send email messages. If value is "smtp"
+    (default), use SMTP (see section "[smtp]" for configuration).
+    Otherwise, use as name of program to run that acts like sendmail
+    (takes "-f" option for sender, list of recipients on command line,
+    message on stdin). Normally, setting this to "sendmail" or
+    "/usr/sbin/sendmail" is enough to use sendmail to send messages.
   charsets;;
-    Optional. Comma-separated list of charsets considered
+    Optional. Comma-separated list of character sets considered
     convenient for recipients. Addresses, headers, and parts not
-    containing patches of outgoing messages will be encoded in
-    the first charset to which conversion from local encoding
-    ($HGENCODING, ui.fallbackencoding) succeeds. If correct
-    conversion fails, the text in question is sent as is.
-    Defaults to empty (explicit) list.
+    containing patches of outgoing messages will be encoded in the
+    first character set to which conversion from local encoding
+    (`$HGENCODING`, `ui.fallbackencoding`) succeeds. If correct
+    conversion fails, the text in question is sent as is. Defaults to
+    empty (explicit) list.
++
+--
+Order of outgoing email character sets:
 
-  Order of outgoing email charsets:
- 
-    us-ascii             always first, regardless of settings
-    email.charsets       in order given by user
-    ui.fallbackencoding  if not in email.charsets
-    $HGENCODING          if not in email.charsets
-    utf-8                always last, regardless of settings
+  us-ascii             always first, regardless of settings
+  email.charsets       in order given by user
+  ui.fallbackencoding  if not in email.charsets
+  $HGENCODING          if not in email.charsets
+  utf-8                always last, regardless of settings
+
+Email example:
 
-  Email example:
-
-    [email]
-    from = Joseph User <joe.user@example.com>
-    method = /usr/sbin/sendmail
-    # charsets for western europeans
-    # us-ascii, utf-8 omitted, as they are tried first and last
-    charsets = iso-8859-1, iso-8859-15, windows-1252
+  [email]
+  from = Joseph User <joe.user@example.com>
+  method = /usr/sbin/sendmail
+  # charsets for western Europeans
+  # us-ascii, utf-8 omitted, as they are tried first and last
+  charsets = iso-8859-1, iso-8859-15, windows-1252
+--
 
 [[extensions]]
 extensions::
   Mercurial has an extension mechanism for adding new features. To
   enable an extension, create an entry for it in this section.
++
+--
+If you know that the extension is already in Python's search path,
+you can give the name of the module, followed by "`=`", with nothing
+after the "`=`".
 
-  If you know that the extension is already in Python's search path,
-  you can give the name of the module, followed by "=", with nothing
-  after the "=".
-
-  Otherwise, give a name that you choose, followed by "=", followed by
-  the path to the ".py" file (including the file name extension) that
-  defines the extension.
+Otherwise, give a name that you choose, followed by "`=`", followed by
+the path to the "`.py`" file (including the file name extension) that
+defines the extension.
 
-  To explicitly disable an extension that is enabled in an hgrc of
-  broader scope, prepend its path with '!', as in
-  'hgext.foo = !/ext/path' or 'hgext.foo = !' when no path is supplied.
+To explicitly disable an extension that is enabled in an hgrc of
+broader scope, prepend its path with "`!`", as in
+"`hgext.foo = !/ext/path`" or "`hgext.foo = !`"  when path is not
+supplied.
 
-  Example for ~/.hgrc:
+Example for `~/.hgrc`:
 
-    [extensions]
-    # (the mq extension will get loaded from mercurial's path)
-    hgext.mq =
-    # (this extension will get loaded from the file specified)
-    myfeature = ~/.hgext/myfeature.py
+  [extensions]
+  # (the mq extension will get loaded from Mercurial's path)
+  hgext.mq =
+  # (this extension will get loaded from the file specified)
+  myfeature = ~/.hgext/myfeature.py
+--
 
 [[format]]
 format::
@@ -318,89 +363,94 @@
   usefncache;;
     Enable or disable the "fncache" repository format which enhances
     the "store" repository format (which has to be enabled to use
-    fncache) to allow longer filenames and avoids using Windows reserved
-    names, e.g. "nul". Enabled by default. Disabling this option ensures
-    that the on-disk format of newly created repositories will be
-    compatible with Mercurial before version 1.1.
+    fncache) to allow longer filenames and avoids using Windows
+    reserved names, e.g. "nul". Enabled by default. Disabling this
+    option ensures that the on-disk format of newly created
+    repositories will be compatible with Mercurial before version 1.1.
 
 [[merge-patterns]]
 merge-patterns::
   This section specifies merge tools to associate with particular file
   patterns. Tools matched here will take precedence over the default
-  merge tool. Patterns are globs by default, rooted at the repository root.
-
-  Example:
-
-    [merge-patterns]
-    **.c = kdiff3
-    **.jpg = myimgmerge
+  merge tool. Patterns are globs by default, rooted at the repository
+  root.
++
+Example:
++
+  [merge-patterns]
+  **.c = kdiff3
+  **.jpg = myimgmerge
 
 [[merge-tools]]
 merge-tools::
   This section configures external merge tools to use for file-level
   merges.
-
-  Example ~/.hgrc:
++
+--
+Example `~/.hgrc`:
 
-    [merge-tools]
-    # Override stock tool location
-    kdiff3.executable = ~/bin/kdiff3
-    # Specify command line
-    kdiff3.args = $base $local $other -o $output
-    # Give higher priority
-    kdiff3.priority = 1
+  [merge-tools]
+  # Override stock tool location
+  kdiff3.executable = ~/bin/kdiff3
+  # Specify command line
+  kdiff3.args = $base $local $other -o $output
+  # Give higher priority
+  kdiff3.priority = 1
 
-    # Define new tool
-    myHtmlTool.args = -m $local $other $base $output
-    myHtmlTool.regkey = Software\FooSoftware\HtmlMerge
-    myHtmlTool.priority = 1
+  # Define new tool
+  myHtmlTool.args = -m $local $other $base $output
+  myHtmlTool.regkey = Software\FooSoftware\HtmlMerge
+  myHtmlTool.priority = 1
 
-  Supported arguments:
+Supported arguments:
 
-  priority;;
-    The priority in which to evaluate this tool.
-    Default: 0.
-  executable;;
-    Either just the name of the executable or its pathname.
-    Default: the tool name.
-  args;;
-    The arguments to pass to the tool executable. You can refer to the files
-    being merged as well as the output file through these variables: $base,
-    $local, $other, $output.
-    Default: $local $base $other
-  premerge;;
-    Attempt to run internal non-interactive 3-way merge tool before
-    launching external tool.
-    Default: True
-  binary;;
-    This tool can merge binary files. Defaults to False, unless tool
-    was selected by file pattern match.
-  symlink;;
-    This tool can merge symlinks. Defaults to False, even if tool was
-    selected by file pattern match.
-  checkconflicts;;
-    Check whether there are conflicts even though the tool reported
-    success.
-    Default: False
-  checkchanged;;
-    Check whether outputs were written even though the tool reported
-    success.
-    Default: False
-  fixeol;;
-    Attempt to fix up EOL changes caused by the merge tool.
-    Default: False
-  gui;;
-    This tool requires a graphical interface to run. Default: False
-  regkey;;
-    Windows registry key which describes install location of this tool.
-    Mercurial will search for this key first under HKEY_CURRENT_USER and
-    then under HKEY_LOCAL_MACHINE. Default: None
-  regname;;
-    Name of value to read from specified registry key. Defaults to the
-    unnamed (default) value.
-  regappend;;
-    String to append to the value read from the registry, typically the
-    executable name of the tool. Default: None
+priority;;
+  The priority in which to evaluate this tool.
+  Default: 0.
+executable;;
+  Either just the name of the executable or its pathname.
+  Default: the tool name.
+args;;
+  The arguments to pass to the tool executable. You can refer to the
+  files being merged as well as the output file through these
+  variables: `$base`, `$local`, `$other`, `$output`.
+  Default: `$local $base $other`
+premerge;;
+  Attempt to run internal non-interactive 3-way merge tool before
+  launching external tool.
+  Default: True
+binary;;
+  This tool can merge binary files. Defaults to False, unless tool
+  was selected by file pattern match.
+symlink;;
+  This tool can merge symlinks. Defaults to False, even if tool was
+  selected by file pattern match.
+checkconflicts;;
+  Check whether there are conflicts even though the tool reported
+  success.
+  Default: False
+checkchanged;;
+  Check whether outputs were written even though the tool reported
+  success.
+  Default: False
+fixeol;;
+  Attempt to fix up EOL changes caused by the merge tool.
+  Default: False
+gui;;
+  This tool requires a graphical interface to run. Default: False
+regkey;;
+  Windows registry key which describes install location of this
+  tool. Mercurial will search for this key first under
+  `HKEY_CURRENT_USER` and then under `HKEY_LOCAL_MACHINE`.
+  Default: None
+regname;;
+  Name of value to read from specified registry key. Defaults to the
+  unnamed (default) value.
+regappend;;
+  String to append to the value read from the registry, typically
+  the executable name of the tool.
+  Default: None
+--
 
 [[hooks]]
 hooks::
@@ -409,122 +459,125 @@
   hooks can be run for the same action by appending a suffix to the
   action. Overriding a site-wide hook can be done by changing its
   value or setting it to an empty string.
-
-  Example .hg/hgrc:
++
+--
+Example `.hg/hgrc`:
 
-    [hooks]
-    # do not use the site-wide hook
-    incoming =
-    incoming.email = /my/email/hook
-    incoming.autobuild = /my/build/hook
+  [hooks]
+  # do not use the site-wide hook
+  incoming =
+  incoming.email = /my/email/hook
+  incoming.autobuild = /my/build/hook
 
-  Most hooks are run with environment variables set that give added
-  useful information. For each hook below, the environment variables
-  it is passed are listed with names of the form "$HG_foo".
+Most hooks are run with environment variables set that give useful
+additional information. For each hook below, the environment
+variables it is passed are listed with names of the form "$HG_foo".
 
-  changegroup;;
-    Run after a changegroup has been added via push, pull or
-    unbundle. ID of the first new changeset is in $HG_NODE. URL from
-    which changes came is in $HG_URL.
-  commit;;
-    Run after a changeset has been created in the local repository.
-    ID of the newly created changeset is in $HG_NODE. Parent
-    changeset IDs are in $HG_PARENT1 and $HG_PARENT2.
-  incoming;;
-    Run after a changeset has been pulled, pushed, or unbundled into
-    the local repository. The ID of the newly arrived changeset is in
-    $HG_NODE. URL that was source of changes came is in $HG_URL.
-  outgoing;;
-    Run after sending changes from local repository to another. ID of
-    first changeset sent is in $HG_NODE. Source of operation is in
-    $HG_SOURCE; see "preoutgoing" hook for description.
-  post-<command>;;
-    Run after successful invocations of the associated command. The
-    contents of the command line are passed as $HG_ARGS and the result
-    code in $HG_RESULT. Hook failure is ignored.
-  pre-<command>;;
-    Run before executing the associated command. The contents of the
-    command line are passed as $HG_ARGS. If the hook returns failure,
-    the command doesn't execute and Mercurial returns the failure code.
-  prechangegroup;;
-    Run before a changegroup is added via push, pull or unbundle.
-    Exit status 0 allows the changegroup to proceed. Non-zero status
-    will cause the push, pull or unbundle to fail. URL from which
-    changes will come is in $HG_URL.
-  precommit;;
-    Run before starting a local commit. Exit status 0 allows the
-    commit to proceed. Non-zero status will cause the commit to fail.
-    Parent changeset IDs are in $HG_PARENT1 and $HG_PARENT2.
-  preoutgoing;;
-    Run before collecting changes to send from the local repository to
-    another. Non-zero status will cause failure. This lets you
-    prevent pull over http or ssh. Also prevents against local pull,
-    push (outbound) or bundle commands, but not effective, since you
-    can just copy files instead then. Source of operation is in
-    $HG_SOURCE. If "serve", operation is happening on behalf of
-    remote ssh or http repository. If "push", "pull" or "bundle",
-    operation is happening on behalf of repository on same system.
-  pretag;;
-    Run before creating a tag. Exit status 0 allows the tag to be
-    created. Non-zero status will cause the tag to fail. ID of
-    changeset to tag is in $HG_NODE. Name of tag is in $HG_TAG. Tag
-    is local if $HG_LOCAL=1, in repo if $HG_LOCAL=0.
-  pretxnchangegroup;;
-    Run after a changegroup has been added via push, pull or unbundle,
-    but before the transaction has been committed. Changegroup is
-    visible to hook program. This lets you validate incoming changes
-    before accepting them. Passed the ID of the first new changeset
-    in $HG_NODE. Exit status 0 allows the transaction to commit.
-    Non-zero status will cause the transaction to be rolled back and
-    the push, pull or unbundle will fail. URL that was source of
-    changes is in $HG_URL.
-  pretxncommit;;
-    Run after a changeset has been created but the transaction not yet
-    committed. Changeset is visible to hook program. This lets you
-    validate commit message and changes. Exit status 0 allows the
-    commit to proceed. Non-zero status will cause the transaction to
-    be rolled back. ID of changeset is in $HG_NODE. Parent changeset
-    IDs are in $HG_PARENT1 and $HG_PARENT2.
-  preupdate;;
-    Run before updating the working directory. Exit status 0 allows
-    the update to proceed. Non-zero status will prevent the update.
-    Changeset ID of first new parent is in $HG_PARENT1. If merge, ID
-    of second new parent is in $HG_PARENT2.
-  tag;;
-    Run after a tag is created. ID of tagged changeset is in
-    $HG_NODE. Name of tag is in $HG_TAG. Tag is local if
-    $HG_LOCAL=1, in repo if $HG_LOCAL=0.
-  update;;
-    Run after updating the working directory. Changeset ID of first
-    new parent is in $HG_PARENT1. If merge, ID of second new parent
-    is in $HG_PARENT2. If update succeeded, $HG_ERROR=0. If update
-    failed (e.g. because conflicts not resolved), $HG_ERROR=1.
+changegroup;;
+  Run after a changegroup has been added via push, pull or unbundle.
+  ID of the first new changeset is in `$HG_NODE`. URL from which
+  changes came is in `$HG_URL`.
+commit;;
+  Run after a changeset has been created in the local repository. ID
+  of the newly created changeset is in `$HG_NODE`. Parent changeset
+  IDs are in `$HG_PARENT1` and `$HG_PARENT2`.
+incoming;;
+  Run after a changeset has been pulled, pushed, or unbundled into
+  the local repository. The ID of the newly arrived changeset is in
+  `$HG_NODE`. URL that was source of changes came is in `$HG_URL`.
+outgoing;;
+  Run after sending changes from local repository to another. ID of
+  first changeset sent is in `$HG_NODE`. Source of operation is in
+  `$HG_SOURCE`; see "preoutgoing" hook for description.
+post-<command>;;
+  Run after successful invocations of the associated command. The
+  contents of the command line are passed as `$HG_ARGS` and the result
+  code in `$HG_RESULT`. Hook failure is ignored.
+pre-<command>;;
+  Run before executing the associated command. The contents of the
+  command line are passed as `$HG_ARGS`. If the hook returns failure,
+  the command doesn't execute and Mercurial returns the failure
+  code.
+prechangegroup;;
+  Run before a changegroup is added via push, pull or unbundle. Exit
+  status 0 allows the changegroup to proceed. Non-zero status will
+  cause the push, pull or unbundle to fail. URL from which changes
+  will come is in `$HG_URL`.
+precommit;;
+  Run before starting a local commit. Exit status 0 allows the
+  commit to proceed. Non-zero status will cause the commit to fail.
+  Parent changeset IDs are in `$HG_PARENT1` and `$HG_PARENT2`.
+preoutgoing;;
+  Run before collecting changes to send from the local repository to
+  another. Non-zero status will cause failure. This lets you prevent
+  pull over HTTP or SSH. Also prevents against local pull, push
+  (outbound) or bundle commands, but not effective, since you can
+  just copy files instead then. Source of operation is in
+  `$HG_SOURCE`. If "serve", operation is happening on behalf of remote
+  SSH or HTTP repository. If "push", "pull" or "bundle", operation
+  is happening on behalf of repository on same system.
+pretag;;
+  Run before creating a tag. Exit status 0 allows the tag to be
+  created. Non-zero status will cause the tag to fail. ID of
+  changeset to tag is in `$HG_NODE`. Name of tag is in `$HG_TAG`. Tag is
+  local if `$HG_LOCAL=1`, in repository if `$HG_LOCAL=0`.
+pretxnchangegroup;;
+  Run after a changegroup has been added via push, pull or unbundle,
+  but before the transaction has been committed. Changegroup is
+  visible to hook program. This lets you validate incoming changes
+  before accepting them. Passed the ID of the first new changeset in
+  `$HG_NODE`. Exit status 0 allows the transaction to commit. Non-zero
+  status will cause the transaction to be rolled back and the push,
+  pull or unbundle will fail. URL that was source of changes is in
+  `$HG_URL`.
+pretxncommit;;
+  Run after a changeset has been created but the transaction not yet
+  committed. Changeset is visible to hook program. This lets you
+  validate commit message and changes. Exit status 0 allows the
+  commit to proceed. Non-zero status will cause the transaction to
+  be rolled back. ID of changeset is in `$HG_NODE`. Parent changeset
+  IDs are in `$HG_PARENT1` and `$HG_PARENT2`.
+preupdate;;
+  Run before updating the working directory. Exit status 0 allows
+  the update to proceed. Non-zero status will prevent the update.
+  Changeset ID of first new parent is in `$HG_PARENT1`. If merge, ID
+  of second new parent is in `$HG_PARENT2`.
+tag;;
+  Run after a tag is created. ID of tagged changeset is in `$HG_NODE`.
+  Name of tag is in `$HG_TAG`. Tag is local if `$HG_LOCAL=1`, in
+  repository if `$HG_LOCAL=0`.
+update;;
+  Run after updating the working directory. Changeset ID of first
+  new parent is in `$HG_PARENT1`. If merge, ID of second new parent is
+  in `$HG_PARENT2`. If the update succeeded, `$HG_ERROR=0`. If the
+  update failed (e.g. because conflicts not resolved), `$HG_ERROR=1`.
 
-  Note: it is generally better to use standard hooks rather than the
-  generic pre- and post- command hooks as they are guaranteed to be
-  called in the appropriate contexts for influencing transactions.
-  Also, hooks like "commit" will be called in all contexts that
-  generate a commit (eg. tag) and not just the commit command.
+NOTE: it is generally better to use standard hooks rather than the
+generic pre- and post- command hooks as they are guaranteed to be
+called in the appropriate contexts for influencing transactions.
+Also, hooks like "commit" will be called in all contexts that
+generate a commit (e.g. tag) and not just the commit command.
 
-  Note2: Environment variables with empty values may not be passed to
-  hooks on platforms like Windows. For instance, $HG_PARENT2 will
-  not be available under Windows for non-merge changesets while being
-  set to an empty value under Unix-like systems.
+NOTE: Environment variables with empty values may not be passed to
+hooks on platforms such as Windows. As an example, `$HG_PARENT2` will
+have an empty value under Unix-like platforms for non-merge
+changesets, while it will not be available at all under Windows.
 
-  The syntax for Python hooks is as follows:
+The syntax for Python hooks is as follows:
 
-    hookname = python:modulename.submodule.callable
-    hookname = python:/path/to/python/module.py:callable
+  hookname = python:modulename.submodule.callable
+  hookname = python:/path/to/python/module.py:callable
 
-  Python hooks are run within the Mercurial process. Each hook is
-  called with at least three keyword arguments: a ui object (keyword
-  "ui"), a repository object (keyword "repo"), and a "hooktype"
-  keyword that tells what kind of hook is used. Arguments listed as
-  environment variables above are passed as keyword arguments, with no
-  "HG_" prefix, and names in lower case.
+Python hooks are run within the Mercurial process. Each hook is
+called with at least three keyword arguments: a ui object (keyword
+"ui"), a repository object (keyword "repo"), and a "hooktype"
+keyword that tells what kind of hook is used. Arguments listed as
+environment variables above are passed as keyword arguments, with no
+"HG_" prefix, and names in lower case.
 
-  If a Python hook returns a "true" value or raises an exception, this
-  is treated as failure of the hook.
+If a Python hook returns a "true" value or raises an exception, this
+is treated as a failure.
+--
 
 [[http_proxy]]
 http_proxy::
@@ -552,110 +605,125 @@
     Optional. Whether to connect to mail server using TLS. True or
     False. Default: False.
   username;;
-    Optional. User name to authenticate to SMTP server with.
-    If username is specified, password must also be specified.
+    Optional. User name to authenticate to SMTP server with. If
+    username is specified, password must also be specified.
     Default: none.
   password;;
-    Optional. Password to authenticate to SMTP server with.
-    If username is specified, password must also be specified.
+    Optional. Password to authenticate to SMTP server with. If
+    username is specified, password must also be specified.
     Default: none.
   local_hostname;;
-    Optional. It's the hostname that the sender can use to identify itself
-    to the MTA.
+    Optional. It's the hostname that the sender can use to identify
+    itself to the MTA.
+
+[[patch]]
+patch::
+  Settings used when applying patches, for instance through the 'import'
+  command or with Mercurial Queues extension.
+  eol;;
+    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).
+    Default: strict.
 
 [[paths]]
 paths::
   Assigns symbolic names to repositories. The left side is the
   symbolic name, and the right gives the directory or URL that is the
-  location of the repository. Default paths can be declared by
-  setting the following entries.
+  location of the repository. Default paths can be declared by setting
+  the following entries.
   default;;
     Directory or URL to use when pulling if no source is specified.
-    Default is set to repository from which the current repository
-    was cloned.
+    Default is set to repository from which the current repository was
+    cloned.
   default-push;;
     Optional. Directory or URL to use when pushing if no destination
     is specified.
 
 [[profiling]]
 profiling::
-  Specifies profiling format and file output.
-  In this section description, 'profiling data' stands for the raw data
-  collected during profiling, while 'profiling report' stands for a
-  statistical text report generated from the profiling data.
-  The profiling is done using lsprof.
+  Specifies profiling format and file output. In this section
+  description, 'profiling data' stands for the raw data collected
+  during profiling, while 'profiling report' stands for a statistical
+  text report generated from the profiling data. The profiling is done
+  using lsprof.
   format;;
     Profiling format.
     Default: text.
     text;;
-      Generate a profiling report.
-      When saving to a file, it should be noted that only the report is saved,
-      and the profiling data is not kept.
+      Generate a profiling report. When saving to a file, it should be
+      noted that only the report is saved, and the profiling data is
+      not kept.
     kcachegrind;;
-      Format profiling data for kcachegrind use:
-      when saving to a file, the generated file can directly be loaded
-      into kcachegrind.
+      Format profiling data for kcachegrind use: when saving to a
+      file, the generated file can directly be loaded into
+      kcachegrind.
   output;;
-    File path where profiling data or report should be saved.
-    If the file exists, it is replaced.
-    Default: None, data is printed on stderr
+    File path where profiling data or report should be saved. If the
+    file exists, it is replaced. Default: None, data is printed on
+    stderr
 
 [[server]]
 server::
   Controls generic server settings.
   uncompressed;;
-    Whether to allow clients to clone a repo using the uncompressed
-    streaming protocol. This transfers about 40% more data than a
-    regular clone, but uses less memory and CPU on both server and
-    client. Over a LAN (100Mbps or better) or a very fast WAN, an
-    uncompressed streaming clone is a lot faster (~10x) than a regular
-    clone. Over most WAN connections (anything slower than about
-    6Mbps), uncompressed streaming is slower, because of the extra
-    data transfer overhead. Default is False.
+    Whether to allow clients to clone a repository using the
+    uncompressed streaming protocol. This transfers about 40% more
+    data than a regular clone, but uses less memory and CPU on both
+    server and client. Over a LAN (100 Mbps or better) or a very fast
+    WAN, an uncompressed streaming clone is a lot faster (~10x) than a
+    regular clone. Over most WAN connections (anything slower than
+    about 6 Mbps), uncompressed streaming is slower, because of the
+    extra data transfer overhead. Default is False.
 
 [[trusted]]
 trusted::
-  For security reasons, Mercurial will not use the settings in
-  the .hg/hgrc file from a repository if it doesn't belong to a
-  trusted user or to a trusted group. The main exception is the
-  web interface, which automatically uses some safe settings, since
-  it's common to serve repositories from different users.
+  For security reasons, Mercurial will not use the settings in the
+  `.hg/hgrc` file from a repository if it doesn't belong to a trusted
+  user or to a trusted group. The main exception is the web interface,
+  which automatically uses some safe settings, since it's common to
+  serve repositories from different users.
++
+--
+This section specifies what users and groups are trusted. The
+current user is always trusted. To trust everybody, list a user or a
+group with name "`*`".
 
-  This section specifies what users and groups are trusted. The
-  current user is always trusted. To trust everybody, list a user
-  or a group with name "*".
-
-  users;;
-    Comma-separated list of trusted users.
-  groups;;
-    Comma-separated list of trusted groups.
+users;;
+  Comma-separated list of trusted users.
+groups;;
+  Comma-separated list of trusted groups.
+--
 
 [[ui]]
 ui::
   User interface controls.
++
+--
   archivemeta;;
-    Whether to include the .hg_archival.txt file containing metadata
-    (hashes for the repository base and for tip) in archives created by
-    the hg archive command or downloaded via hgweb.
+    Whether to include the .hg_archival.txt file containing meta data
+    (hashes for the repository base and for tip) in archives created
+    by the hg archive command or downloaded via hgweb.
     Default is true.
   askusername;;
     Whether to prompt for a username when committing. If True, and
-    neither $HGUSER nor $EMAIL has been specified, then the user will
-    be prompted to enter a username.  If no username is entered, the
+    neither `$HGUSER` nor `$EMAIL` has been specified, then the user will
+    be prompted to enter a username. If no username is entered, the
     default USER@HOST is used instead.
     Default is False.
   debug;;
     Print debugging information. True or False. Default is False.
   editor;;
-    The editor to use during a commit. Default is $EDITOR or "vi".
+    The editor to use during a commit. Default is `$EDITOR` or "vi".
   fallbackencoding;;
     Encoding to try if it's not possible to decode the changelog using
     UTF-8. Default is ISO-8859-1.
   ignore;;
-    A file to read per-user ignore patterns from. This file should be in
-    the same format as a repository-wide .hgignore file. This option
-    supports hook syntax, so if you want to specify multiple ignore
-    files, you can do so by setting something like
+    A file to read per-user ignore patterns from. This file should be
+    in the same format as a repository-wide .hgignore file. This
+    option supports hook syntax, so if you want to specify multiple
+    ignore files, you can do so by setting something like
     "ignore.other = ~/.hgignore2". For details of the ignore file
     format, see the hgignore(5) man page.
   interactive;;
@@ -665,7 +733,7 @@
   merge;;
     The conflict resolution program to use during a manual merge.
     There are some internal tools available:
-
++
       internal:local;;
         keep the local version
       internal:other;;
@@ -674,23 +742,25 @@
         use the internal non-interactive merge tool
       internal:fail;;
         fail to merge
-
-    See the merge-tools section for more information on configuring tools.
++
+For more information on configuring merge tools see the
+merge-tools section.
 
   patch;;
-    command to use to apply patches. Look for 'gpatch' or 'patch' in PATH if
-    unset.
+    command to use to apply patches. Look for 'gpatch' or 'patch' in
+    PATH if unset.
   quiet;;
     Reduce the amount of output printed. True or False. Default is False.
   remotecmd;;
     remote command to use for clone/push/pull operations. Default is 'hg'.
   report_untrusted;;
-    Warn if a .hg/hgrc file is ignored due to not being owned by a
+    Warn if a `.hg/hgrc` file is ignored due to not being owned by a
     trusted user or group. True or False. Default is True.
   slash;;
-    Display paths using a slash ("/") as the path separator. This only
-    makes a difference on systems where the default path separator is not
-    the slash character (e.g. Windows uses the backslash character ("\")).
+    Display paths using a slash ("`/`") as the path separator. This
+    only makes a difference on systems where the default path
+    separator is not the slash character (e.g. Windows uses the
+    backslash character ("`\`")).
     Default is False.
   ssh;;
     command to use for SSH connections. Default is 'ssh'.
@@ -705,13 +775,13 @@
   username;;
     The committer of a changeset created when running "commit".
     Typically a person's name and email address, e.g. "Fred Widget
-    <fred@example.com>". Default is $EMAIL or username@hostname.
-    If the username in hgrc is empty, it has to be specified manually or
-    in a different hgrc file (e.g. $HOME/.hgrc, if the admin set "username ="
-    in the system hgrc).
+    <fred@example.com>". Default is `$EMAIL` or username@hostname. If
+    the username in hgrc is empty, it has to be specified manually or
+    in a different hgrc file (e.g. `$HOME/.hgrc`, if the admin set
+    "username =" in the system hgrc).
   verbose;;
     Increase the amount of output printed. True or False. Default is False.
-
+--
 
 [[web]]
 web::
@@ -724,60 +794,66 @@
     List of archive format (bz2, gz, zip) allowed for downloading.
     Default is empty.
   allowbz2;;
-    (DEPRECATED) Whether to allow .tar.bz2 downloading of repo revisions.
+    (DEPRECATED) Whether to allow .tar.bz2 downloading of repository
+    revisions.
     Default is false.
   allowgz;;
-    (DEPRECATED) Whether to allow .tar.gz downloading of repo revisions.
+    (DEPRECATED) Whether to allow .tar.gz downloading of repository
+    revisions.
     Default is false.
   allowpull;;
     Whether to allow pulling from the repository. Default is true.
   allow_push;;
     Whether to allow pushing to the repository. If empty or not set,
-    push is not allowed. If the special value "*", any remote user
-    can push, including unauthenticated users. Otherwise, the remote
-    user must have been authenticated, and the authenticated user name
-    must be present in this list (separated by whitespace or ",").
-    The contents of the allow_push list are examined after the
-    deny_push list.
+    push is not allowed. If the special value "`*`", any remote user can
+    push, including unauthenticated users. Otherwise, the remote user
+    must have been authenticated, and the authenticated user name must
+    be present in this list (separated by whitespace or ","). The
+    contents of the allow_push list are examined after the deny_push
+    list.
   allow_read;;
-    If the user has not already been denied repository access due to the
-    contents of deny_read, this list determines whether to grant repository
-    access to the user. If this list is not empty, and the user is
-    unauthenticated or not present in the list (separated by whitespace or ","),
-    then access is denied for the user.  If the list is empty or not set, then
-    access is permitted to all users by default.  Setting allow_read to the
-    special value "*" is equivalent to it not being set (i.e. access is
-    permitted to all users).  The contents of the allow_read list are examined
-    after the deny_read list.
+    If the user has not already been denied repository access due to
+    the contents of deny_read, this list determines whether to grant
+    repository access to the user. If this list is not empty, and the
+    user is unauthenticated or not present in the list (separated by
+    whitespace or ","), then access is denied for the user. If the
+    list is empty or not set, then access is permitted to all users by
+    default. Setting allow_read to the special value "`*`" is equivalent
+    to it not being set (i.e. access is permitted to all users). The
+    contents of the allow_read list are examined after the deny_read
+    list.
   allowzip;;
-    (DEPRECATED) Whether to allow .zip downloading of repo revisions.
-    Default is false. This feature creates temporary files.
+    (DEPRECATED) Whether to allow .zip downloading of repository
+    revisions. Default is false. This feature creates temporary files.
   baseurl;;
     Base URL to use when publishing URLs in other locations, so
-    third-party tools like email notification hooks can construct URLs.
-    Example: "http://hgserver/repos/"
+    third-party tools like email notification hooks can construct
+    URLs. Example: "http://hgserver/repos/"
   contact;;
     Name or email address of the person in charge of the repository.
-    Defaults to ui.username or $EMAIL or "unknown" if unset or empty.
+    Defaults to ui.username or `$EMAIL` or "unknown" if unset or empty.
   deny_push;;
     Whether to deny pushing to the repository. If empty or not set,
-    push is not denied. If the special value "*", all remote users
-    are denied push. Otherwise, unauthenticated users are all denied,
-    and any authenticated user name present in this list (separated by
+    push is not denied. If the special value "`*`", all remote users are
+    denied push. Otherwise, unauthenticated users are all denied, and
+    any authenticated user name present in this list (separated by
     whitespace or ",") is also denied. The contents of the deny_push
     list are examined before the allow_push list.
   deny_read;;
-    Whether to deny reading/viewing of the repository.  If this list is not
-    empty, unauthenticated users are all denied, and any authenticated user name
-    present in this list (separated by whitespace or ",") is also denied access
-    to the repository.  If set to the special value "*", all remote users are
-    denied access (rarely needed ;).  If deny_read is empty or not set, the
-    determination of repository access depends on the presence and content of
-    the allow_read list (see description).  If both deny_read and allow_read are
-    empty or not set, then access is permitted to all users by default.  If the
-    repository is being served via hgwebdir, denied users will not be able to
-    see it in the list of repositories.  The contents of the deny_read list have
-    priority over (are examined before) the contents of the allow_read list.
+    Whether to deny reading/viewing of the repository. If this list is
+    not empty, unauthenticated users are all denied, and any
+    authenticated user name present in this list (separated by
+    whitespace or ",") is also denied access to the repository. If set
+    to the special value "`*`", all remote users are denied access
+    (rarely needed ;). If deny_read is empty or not set, the
+    determination of repository access depends on the presence and
+    content of the allow_read list (see description). If both
+    deny_read and allow_read are empty or not set, then access is
+    permitted to all users by default. If the repository is being
+    served via hgwebdir, denied users will not be able to see it in
+    the list of repositories. The contents of the deny_read list have
+    priority over (are examined before) the contents of the allow_read
+    list.
   description;;
     Textual description of the repository's purpose or contents.
     Default is "unknown".
@@ -787,7 +863,8 @@
   errorlog;;
     Where to output the error log. Default is stderr.
   hidden;;
-    Whether to hide the repository in the hgwebdir index. Default is false.
+    Whether to hide the repository in the hgwebdir index.
+    Default is false.
   ipv6;;
     Whether to use IPv6. Default is false.
   name;;
@@ -805,9 +882,9 @@
     Whether to require that inbound pushes be transported over SSL to
     prevent password sniffing. Default is true.
   staticurl;;
-    Base URL to use for static files. If unset, static files (e.g.
-    the hgicon.png favicon) will be served by the CGI script itself.
-    Use this setting to serve them directly with the HTTP server.
+    Base URL to use for static files. If unset, static files (e.g. the
+    hgicon.png favicon) will be served by the CGI script itself. Use
+    this setting to serve them directly with the HTTP server.
     Example: "http://hgserver/static/"
   stripes;;
     How many lines a "zebra stripe" should span in multiline output.
@@ -831,6 +908,6 @@
 COPYING
 -------
 This manual page is copyright 2005 Bryan O'Sullivan.
-Mercurial is copyright 2005-2007 Matt Mackall.
+Mercurial is copyright 2005-2009 Matt Mackall.
 Free use of this software is granted under the terms of the GNU General
 Public License (GPL).
--- a/doc/ja/hg.1.ja.txt	Wed Jul 08 17:01:18 2009 -0700
+++ b/doc/ja/hg.1.ja.txt	Wed Jul 08 17:03:16 2009 -0700
@@ -852,7 +852,7 @@
 
 情報源
 ---
-http://selenic.com/mercurial[主なウェブサイト]
+http://mercurial.selenic.com/[主なウェブサイト]
 
 http://www.serpentine.com/mercurial[Wiki サイト]
 
--- a/hgext/acl.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/acl.py	Wed Jul 08 17:03:16 2009 -0700
@@ -5,49 +5,57 @@
 # This software may be used and distributed according to the terms of the
 # GNU General Public License version 2, incorporated herein by reference.
 #
-# this hook allows to allow or deny access to parts of a repo when
-# taking incoming changesets.
-#
-# authorization is against local user name on system where hook is
-# run, not committer of original changeset (since that is easy to
-# spoof).
-#
-# acl hook is best to use if you use hgsh to set up restricted shells
-# for authenticated users to only push to / pull from.  not safe if
-# user has interactive shell access, because they can disable hook.
-# also not safe if remote users share one local account, because then
-# no way to tell remote users apart.
-#
-# to use, configure acl extension in hgrc like this:
-#
-#   [extensions]
-#   hgext.acl =
-#
-#   [hooks]
-#   pretxnchangegroup.acl = python:hgext.acl.hook
-#
-#   [acl]
-#   sources = serve        # check if source of incoming changes in this list
-#                          # ("serve" == ssh or http, "push", "pull", "bundle")
-#
-# allow and deny lists have subtree pattern (default syntax is glob)
-# on left, user names on right. deny list checked before allow list.
-#
-#   [acl.allow]
-#   # if acl.allow not present, all users allowed by default
-#   # empty acl.allow = no users allowed
-#   docs/** = doc_writer
-#   .hgtags = release_engineer
-#
-#   [acl.deny]
-#   # if acl.deny not present, no users denied by default
-#   # empty acl.deny = all users allowed
-#   glob pattern = user4, user5
-#   ** = user6
+
+'''hooks for controlling repository access
+
+This hook makes it possible to allow or deny write access to portions
+of a repository when receiving incoming changesets.
+
+The authorization is matched based on the local user name on the
+system where the hook runs, and not the committer of the original
+changeset (since the latter is merely informative).
+
+The acl hook is best used along with a restricted shell like hgsh,
+preventing authenticating users from doing anything other than
+pushing or pulling. The hook is not safe to use if users have
+interactive shell access, as they can then disable the hook.
+Nor is it safe if remote users share an account, because then there
+is no way to distinguish them.
+
+To use this hook, configure the acl extension in your hgrc like this:
+
+  [extensions]
+  hgext.acl =
+
+  [hooks]
+  pretxnchangegroup.acl = python:hgext.acl.hook
+
+  [acl]
+  # Check whether the source of incoming changes is in this list
+  # ("serve" == ssh or http, "push", "pull", "bundle")
+  sources = serve
+
+The allow and deny sections take a subtree pattern as key (with a
+glob syntax by default), and a comma separated list of users as
+the corresponding value. The deny list is checked before the allow
+list is.
+
+  [acl.allow]
+  # If acl.allow is not present, all users are allowed by default.
+  # An empty acl.allow section means no users allowed.
+  docs/** = doc_writer
+  .hgtags = release_engineer
+
+  [acl.deny]
+  # If acl.deny is not present, no users are refused by default.
+  # An empty acl.deny section means all users allowed.
+  glob pattern = user4, user5
+   ** = user6
+'''
 
 from mercurial.i18n import _
-from mercurial import util
-import getpass
+from mercurial import util, match
+import getpass, urllib
 
 def buildmatch(ui, repo, user, key):
     '''return tuple of (match function, list enabled).'''
@@ -60,8 +68,9 @@
     ui.debug(_('acl: %s enabled, %d entries for user %s\n') %
              (key, len(pats), user))
     if pats:
-        return util.matcher(repo.root, names=pats)[1]
-    return util.never
+        return match.match(repo.root, '', pats)
+    return match.exact(repo.root, '', [])
+
 
 def hook(ui, repo, hooktype, node=None, source=None, **kwargs):
     if hooktype != 'pretxnchangegroup':
@@ -71,7 +80,15 @@
         ui.debug(_('acl: changes have source "%s" - skipping\n') % source)
         return
 
-    user = getpass.getuser()
+    user = None
+    if source == 'serve' and 'url' in kwargs:
+        url = kwargs['url'].split(':')
+        if url[0] == 'remote' and url[1].startswith('http'):
+            user = urllib.unquote(url[3])
+
+    if user is None:
+        user = getpass.getuser()
+
     cfg = ui.config('acl', 'config')
     if cfg:
         ui.readconfig(cfg, sections = ['acl.allow', 'acl.deny'])
--- a/hgext/alias.py	Wed Jul 08 17:01:18 2009 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,76 +0,0 @@
-# Copyright (C) 2007 Brendan Cully <brendan@kublai.com>
-# This file is published under the GNU GPL.
-
-'''allow user-defined command aliases
-
-To use, create entries in your hgrc of the form
-
-[alias]
-mycmd = cmd --args
-'''
-
-from mercurial.i18n import _
-from mercurial import commands, cmdutil, error
-
-cmdtable = {}
-
-class RecursiveCommand(Exception): pass
-
-class lazycommand(object):
-    '''defer command lookup until needed, so that extensions loaded
-    after alias can be aliased'''
-    def __init__(self, ui, name, target):
-        self._ui = ui
-        self._name = name
-        self._target = target
-        self._cmd = None
-
-    def __len__(self):
-        self._resolve()
-        return len(self._cmd)
-
-    def __getitem__(self, key):
-        self._resolve()
-        return self._cmd[key]
-
-    def __iter__(self):
-        self._resolve()
-        return self._cmd.__iter__()
-
-    def _resolve(self):
-        if self._cmd is not None:
-            return
-
-        try:
-            self._cmd = cmdutil.findcmd(self._target, commands.table, False)[1]
-            if self._cmd == self:
-                raise RecursiveCommand()
-            if self._target in commands.norepo.split(' '):
-                commands.norepo += ' %s' % self._name
-            return
-        except error.UnknownCommand:
-            msg = _('*** [alias] %s: command %s is unknown') % \
-                  (self._name, self._target)
-        except error.AmbiguousCommand:
-            msg = _('*** [alias] %s: command %s is ambiguous') % \
-                  (self._name, self._target)
-        except RecursiveCommand:
-            msg = _('*** [alias] %s: circular dependency on %s') % \
-                  (self._name, self._target)
-        def nocmd(*args, **opts):
-            self._ui.warn(msg + '\n')
-            return 1
-        nocmd.__doc__ = msg
-        self._cmd = (nocmd, [], '')
-        commands.norepo += ' %s' % self._name
-
-def uisetup(ui):
-    for cmd, target in ui.configitems('alias'):
-        if not target:
-            ui.warn(_('*** [alias] %s: no definition\n') % cmd)
-            continue
-        args = target.split(' ')
-        tcmd = args.pop(0)
-        if args:
-            ui.setconfig('defaults', cmd, ' '.join(args))
-        cmdtable[cmd] = lazycommand(ui, cmd, tcmd)
--- a/hgext/bookmarks.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/bookmarks.py	Wed Jul 08 17:03:16 2009 -0700
@@ -5,24 +5,26 @@
 # This software may be used and distributed according to the terms of the
 # GNU General Public License version 2, incorporated herein by reference.
 
-'''mercurial bookmarks
+'''track a line of development with movable markers
 
-Mercurial bookmarks are local moveable pointers to changesets. Every
-bookmark points to a changeset identified by its hash. If you commit a
-changeset that is based on a changeset that has a bookmark on it, the
-bookmark is forwarded to the new changeset.
+Bookmarks are local movable markers to changesets. Every bookmark
+points to a changeset identified by its hash. If you commit a
+changeset that is based on a changeset that has a bookmark on it,
+the bookmark shifts to the new changeset.
+
+It is possible to use bookmark names in every revision lookup
+(e.g. hg merge, hg update).
 
-It is possible to use bookmark names in every revision lookup (e.g. hg
-merge, hg update).
-
-The bookmark extension offers the possiblity to have a more git-like
-experience by adding the following configuration option to your .hgrc:
+By default, when several bookmarks point to the same changeset, they
+will all move forward together. It is possible to obtain a more
+git-like experience by adding the following configuration option to
+your .hgrc:
 
-[bookmarks]
-track.current = True
+  [bookmarks]
+  track.current = True
 
-This will cause bookmarks to track the bookmark that you are currently
-on, and just updates it. This is similar to git's approach of
+This will cause Mercurial to track the bookmark that you are currently
+using, and only update it. This is similar to git's approach to
 branching.
 '''
 
@@ -64,10 +66,14 @@
         util.copyfile(repo.join('bookmarks'), repo.join('undo.bookmarks'))
     if current(repo) not in refs:
         setcurrent(repo, None)
-    file = repo.opener('bookmarks', 'w+')
-    for refspec, node in refs.iteritems():
-        file.write("%s %s\n" % (hex(node), refspec))
-    file.close()
+    wlock = repo.wlock()
+    try:
+        file = repo.opener('bookmarks', 'w', atomictemp=True)
+        for refspec, node in refs.iteritems():
+            file.write("%s %s\n" % (hex(node), refspec))
+        file.rename()
+    finally:
+        wlock.release()
 
 def current(repo):
     '''Get the current bookmark
@@ -106,23 +112,27 @@
         return
     if mark not in refs:
         mark = ''
-    file = repo.opener('bookmarks.current', 'w+')
-    file.write(mark)
-    file.close()
+    wlock = repo.wlock()
+    try:
+        file = repo.opener('bookmarks.current', 'w', atomictemp=True)
+        file.write(mark)
+        file.rename()
+    finally:
+        wlock.release()
     repo._bookmarkcurrent = mark
 
 def bookmark(ui, repo, mark=None, rev=None, force=False, delete=False, rename=None):
-    '''mercurial bookmarks
+    '''track a line of development with movable markers
 
     Bookmarks are pointers to certain commits that move when
-    commiting. Bookmarks are local. They can be renamed, copied and
+    committing. Bookmarks are local. They can be renamed, copied and
     deleted. It is possible to use bookmark names in 'hg merge' and
-    'hg update' to update to a given bookmark.
+    'hg update' to merge and update respectively to a given bookmark.
 
-    You can use 'hg bookmark NAME' to set a bookmark on the current
-    tip with the given name. If you specify a revision using -r REV
-    (where REV may be an existing bookmark), the bookmark is set to
-    that revision.
+    You can use 'hg bookmark NAME' to set a bookmark on the working
+    directory's parent revision with the given name. If you specify
+    a revision using -r REV (where REV may be an existing bookmark),
+    the bookmark is assigned to that revision.
     '''
     hexfn = ui.debugflag and hex or short
     marks = parse(repo)
@@ -143,7 +153,7 @@
         return
 
     if delete:
-        if mark == None:
+        if mark is None:
             raise util.Abort(_("bookmark name required"))
         if mark not in marks:
             raise util.Abort(_("a bookmark of this name does not exist"))
@@ -171,7 +181,7 @@
         write(repo, marks)
         return
 
-    if mark == None:
+    if mark is None:
         if rev:
             raise util.Abort(_("bookmark name required"))
         if len(marks) == 0:
@@ -242,44 +252,48 @@
         def commit(self, *k, **kw):
             """Add a revision to the repository and
             move the bookmark"""
-            node  = super(bookmark_repo, self).commit(*k, **kw)
-            if node == None:
-                return None
-            parents = repo.changelog.parents(node)
-            if parents[1] == nullid:
-                parents = (parents[0],)
-            marks = parse(repo)
-            update = False
-            for mark, n in marks.items():
-                if ui.configbool('bookmarks', 'track.current'):
-                    if mark == current(repo) and n in parents:
-                        marks[mark] = node
-                        update = True
-                else:
-                    if n in parents:
-                        marks[mark] = node
-                        update = True
-            if update:
-                write(repo, marks)
-            return node
+            wlock = self.wlock() # do both commit and bookmark with lock held
+            try:
+                node  = super(bookmark_repo, self).commit(*k, **kw)
+                if node is None:
+                    return None
+                parents = self.changelog.parents(node)
+                if parents[1] == nullid:
+                    parents = (parents[0],)
+                marks = parse(self)
+                update = False
+                for mark, n in marks.items():
+                    if ui.configbool('bookmarks', 'track.current'):
+                        if mark == current(self) and n in parents:
+                            marks[mark] = node
+                            update = True
+                    else:
+                        if n in parents:
+                            marks[mark] = node
+                            update = True
+                if update:
+                    write(self, marks)
+                return node
+            finally:
+                wlock.release()
 
         def addchangegroup(self, source, srctype, url, emptyok=False):
-            parents = repo.dirstate.parents()
+            parents = self.dirstate.parents()
 
             result = super(bookmark_repo, self).addchangegroup(
                 source, srctype, url, emptyok)
             if result > 1:
                 # We have more heads than before
                 return result
-            node = repo.changelog.tip()
-            marks = parse(repo)
+            node = self.changelog.tip()
+            marks = parse(self)
             update = False
             for mark, n in marks.items():
                 if n in parents:
                     marks[mark] = node
                     update = True
             if update:
-                write(repo, marks)
+                write(self, marks)
             return result
 
         def tags(self):
@@ -288,7 +302,7 @@
                 return self.tagscache
 
             tagscache = super(bookmark_repo, self).tags()
-            tagscache.update(parse(repo))
+            tagscache.update(parse(self))
             return tagscache
 
     repo.__class__ = bookmark_repo
--- a/hgext/bugzilla.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/bugzilla.py	Wed Jul 08 17:03:16 2009 -0700
@@ -5,7 +5,7 @@
 # This software may be used and distributed according to the terms of the
 # GNU General Public License version 2, incorporated herein by reference.
 
-'''Bugzilla integration
+'''hooks for integrating with the Bugzilla bug tracker
 
 This hook extension adds comments on bugs in Bugzilla when changesets
 that refer to bugs by Bugzilla ID are seen. The hook does not change
@@ -339,7 +339,7 @@
                 re.IGNORECASE)
             bugzilla._split_re = re.compile(r'\D+')
         start = 0
-        ids = {}
+        ids = set()
         while True:
             m = bugzilla._bug_re.search(ctx.description(), start)
             if not m:
@@ -347,8 +347,7 @@
             start = m.end()
             for id in bugzilla._split_re.split(m.group(1)):
                 if not id: continue
-                ids[int(id)] = 1
-        ids = ids.keys()
+                ids.add(int(id))
         if ids:
             ids = self.filter_real_bug_ids(ids)
         if ids:
--- a/hgext/children.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/children.py	Wed Jul 08 17:03:16 2009 -0700
@@ -8,6 +8,8 @@
 # This software may be used and distributed according to the terms of the
 # GNU General Public License version 2, incorporated herein by reference.
 
+'''command to display child changesets'''
+
 from mercurial import cmdutil
 from mercurial.commands import templateopts
 from mercurial.i18n import _
--- a/hgext/churn.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/churn.py	Wed Jul 08 17:03:16 2009 -0700
@@ -6,7 +6,7 @@
 # This software may be used and distributed according to the terms of the
 # GNU General Public License version 2, incorporated herein by reference.
 
-'''command to show certain statistics about revision history'''
+'''command to display statistics about repository history'''
 
 from mercurial.i18n import _
 from mercurial import patch, cmdutil, util, templater
@@ -92,13 +92,17 @@
 
 
 def churn(ui, repo, *pats, **opts):
-    '''graph count of revisions grouped by template
+    '''histogram of changes to the repository
 
-    Will graph count of changed lines or revisions grouped by template
-    or alternatively by date, if dateformat is used. In this case it
-    will override template.
+    This command will display a histogram representing the number
+    of changed lines or revisions, grouped according to the given
+    template. The default template will group changes by author.
+    The --dateformat option may be used to group the results by
+    date instead.
 
-    By default statistics are counted for number of changed lines.
+    Statistics are based on the number of changed lines, or
+    alternatively the number of matching revisions if the
+    --changesets option is specified.
 
     Examples:
 
@@ -114,12 +118,13 @@
       # display count of lines changed in every year
       hg churn -f '%Y' -s
 
-    The map file format used to specify aliases is fairly simple:
+    It is possible to map alternate email addresses to a main address
+    by providing a file using the following format:
 
     <alias email> <actual email>
 
-    By default .hgchurn in the working directory root will be used, if
-    it exists. Use the --aliases option to override this.
+    Such a file may be specified with the --aliases option, otherwise a
+    .hgchurn file will be looked for in the working directory root.
     '''
     def pad(s, l):
         return (s + " " * l)[:l]
--- a/hgext/color.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/color.py	Wed Jul 08 17:03:16 2009 -0700
@@ -16,7 +16,7 @@
 # with this program; if not, write to the Free Software Foundation, Inc.,
 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
-'''add color output to status, qseries, and diff-related commands
+'''colorize output from some commands
 
 This extension modifies the status command to add color to its output
 to reflect file status, the qseries command to add color to reflect
@@ -29,11 +29,7 @@
 function (aka ANSI escape codes). This module also provides the
 render_text function, which can be used to add effects to any text.
 
-To enable this extension, add this to your .hgrc file:
-[extensions]
-color =
-
-Default effects my be overriden from the .hgrc file:
+Default effects may be overridden from the .hgrc file:
 
 [color]
 status.modified = blue bold underline red_background
@@ -62,9 +58,9 @@
 diff.trailingwhitespace = bold red_background
 '''
 
-import os, re, sys
+import os, sys
 
-from mercurial import cmdutil, commands, extensions
+from mercurial import cmdutil, commands, extensions, error
 from mercurial.i18n import _
 
 # start and stop parameters for effects
@@ -90,9 +86,9 @@
                   'cyan_background': 46,
                   'white_background': 47}
 
-def render_effects(text, *effects):
+def render_effects(text, effects):
     'Wrap text in commands to turn on each effect.'
-    start = [str(_effect_params[e]) for e in ('none',) + effects]
+    start = [str(_effect_params[e]) for e in ['none'] + effects]
     start = '\033[' + ';'.join(start) + 'm'
     stop = '\033[' + str(_effect_params['none']) + 'm'
     return ''.join([start, text, stop])
@@ -116,11 +112,11 @@
         lines = lines_with_status
 
     # apply color to output and display it
-    for i in xrange(0, len(lines)):
+    for i in xrange(len(lines)):
         status = _status_abbreviations[lines_with_status[i][0]]
         effects = _status_effects[status]
         if effects:
-            lines[i] = render_effects(lines[i], *effects)
+            lines[i] = render_effects(lines[i], effects)
         ui.write(lines[i] + delimiter)
     return retval
 
@@ -133,14 +129,14 @@
                           'C': 'clean',
                           ' ': 'copied', }
 
-_status_effects = { 'modified': ('blue', 'bold'),
-                    'added': ('green', 'bold'),
-                    'removed': ('red', 'bold'),
-                    'deleted': ('cyan', 'bold', 'underline'),
-                    'unknown': ('magenta', 'bold', 'underline'),
-                    'ignored': ('black', 'bold'),
-                    'clean': ('none', ),
-                    'copied': ('none', ), }
+_status_effects = { 'modified': ['blue', 'bold'],
+                    'added': ['green', 'bold'],
+                    'removed': ['red', 'bold'],
+                    'deleted': ['cyan', 'bold', 'underline'],
+                    'unknown': ['magenta', 'bold', 'underline'],
+                    'ignored': ['black', 'bold'],
+                    'clean': ['none'],
+                    'copied': ['none'], }
 
 def colorqseries(orig, ui, repo, *dummy, **opts):
     '''run the qseries command with colored output'''
@@ -162,12 +158,12 @@
             effects = _patch_effects['applied']
         else:
             effects = _patch_effects['unapplied']
-        ui.write(render_effects(patch, *effects) + '\n')
+        ui.write(render_effects(patch, effects) + '\n')
     return retval
 
-_patch_effects = { 'applied': ('blue', 'bold', 'underline'),
-                   'missing': ('red', 'bold'),
-                   'unapplied': ('black', 'bold'), }
+_patch_effects = { 'applied': ['blue', 'bold', 'underline'],
+                   'missing': ['red', 'bold'],
+                   'unapplied': ['black', 'bold'], }
 
 def colorwrap(orig, s):
     '''wrap ui.write for colored diff output'''
@@ -179,11 +175,11 @@
             stripline = line.rstrip()
         for prefix, style in _diff_prefixes:
             if stripline.startswith(prefix):
-                lines[i] = render_effects(stripline, *_diff_effects[style])
+                lines[i] = render_effects(stripline, _diff_effects[style])
                 break
         if line != stripline:
             lines[i] += render_effects(
-                line[len(stripline):], *_diff_effects['trailingwhitespace'])
+                line[len(stripline):], _diff_effects['trailingwhitespace'])
     orig('\n'.join(lines))
 
 def colorshowpatch(orig, self, node):
@@ -214,28 +210,40 @@
                   ('-', 'deleted'),
                   ('+', 'inserted')]
 
-_diff_effects = {'diffline': ('bold',),
-                 'extended': ('cyan', 'bold'),
-                 'file_a': ('red', 'bold'),
-                 'file_b': ('green', 'bold'),
-                 'hunk': ('magenta',),
-                 'deleted': ('red',),
-                 'inserted': ('green',),
-                 'changed': ('white',),
-                 'trailingwhitespace': ('bold', 'red_background'),}
+_diff_effects = {'diffline': ['bold'],
+                 'extended': ['cyan', 'bold'],
+                 'file_a': ['red', 'bold'],
+                 'file_b': ['green', 'bold'],
+                 'hunk': ['magenta'],
+                 'deleted': ['red'],
+                 'inserted': ['green'],
+                 'changed': ['white'],
+                 'trailingwhitespace': ['bold', 'red_background']}
+
+_ui = None
 
 def uisetup(ui):
     '''Initialize the extension.'''
+    global _ui
+    _ui = ui
     _setupcmd(ui, 'diff', commands.table, colordiff, _diff_effects)
     _setupcmd(ui, 'incoming', commands.table, None, _diff_effects)
     _setupcmd(ui, 'log', commands.table, None, _diff_effects)
     _setupcmd(ui, 'outgoing', commands.table, None, _diff_effects)
     _setupcmd(ui, 'tip', commands.table, None, _diff_effects)
     _setupcmd(ui, 'status', commands.table, colorstatus, _status_effects)
+
+def extsetup():
     try:
         mq = extensions.find('mq')
-        _setupcmd(ui, 'qdiff', mq.cmdtable, colordiff, _diff_effects)
-        _setupcmd(ui, 'qseries', mq.cmdtable, colorqseries, _patch_effects)
+        try:
+            # If we are loaded after mq, we must wrap commands.table
+            _setupcmd(_ui, 'qdiff', commands.table, colordiff, _diff_effects)
+            _setupcmd(_ui, 'qseries', commands.table, colorqseries, _patch_effects)
+        except error.UnknownCommand:
+            # Otherwise we wrap mq.cmdtable
+            _setupcmd(_ui, 'qdiff', mq.cmdtable, colordiff, _diff_effects)
+            _setupcmd(_ui, 'qseries', mq.cmdtable, colorqseries, _patch_effects)
     except KeyError:
         # The mq extension is not enabled
         pass
@@ -265,6 +273,15 @@
     ])
 
     for status in effectsmap:
-        effects = ui.config('color', cmd + '.' + status)
+        configkey = cmd + '.' + status
+        effects = ui.configlist('color', configkey)
         if effects:
-            effectsmap[status] = re.split('\W+', effects)
+            good = []
+            for e in effects:
+                if e in _effect_params:
+                    good.append(e)
+                else:
+                    ui.warn(_("ignoring unknown color/effect %r "
+                              "(configured in color.%s)\n")
+                            % (e, configkey))
+            effectsmap[status] = good
--- a/hgext/convert/__init__.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/convert/__init__.py	Wed Jul 08 17:03:16 2009 -0700
@@ -5,7 +5,7 @@
 # This software may be used and distributed according to the terms of the
 # GNU General Public License version 2, incorporated herein by reference.
 
-'''converting foreign VCS repositories to Mercurial'''
+'''import revisions from foreign VCS repositories into Mercurial'''
 
 import convcmd
 import cvsps
@@ -41,6 +41,18 @@
     basename of the source with '-hg' appended. If the destination
     repository doesn't exist, it will be created.
 
+    By default, all sources except Mercurial will use
+    --branchsort. Mercurial uses --sourcesort to preserve original
+    revision numbers order. Sort modes have the following effects:
+      --branchsort: convert from parent to child revision when
+        possible, which means branches are usually converted one after
+        the other. It generates more compact repositories.
+      --datesort: sort revisions by date. Converted repositories have
+        good-looking changelogs but are often an order of magnitude
+        larger than the same ones generated by --branchsort.
+      --sourcesort: try to preserve source revisions order, only
+        supported by Mercurial sources.
+
     If <REVMAP> isn't given, it will be put in a default location
     (<dest>/.hg/shamap by default). The <REVMAP> is a simple text file
     that maps each source commit ID to the destination ID for that
@@ -69,7 +81,7 @@
 
     The 'include' directive causes a file, or all files under a
     directory, to be included in the destination repository, and the
-    exclusion of all other files and directories not explicitely included.
+    exclusion of all other files and directories not explicitly included.
     The 'exclude' directive causes files or directories to be omitted.
     The 'rename' directive renames a file or directory. To rename from
     a subdirectory into the root of the repository, use '.' as the
@@ -86,6 +98,17 @@
     (in either the source or destination revision control system) that
     should be used as the new parents for that node.
 
+    The branchmap is a file that allows you to rename a branch when it is
+    being brought in from whatever external repository. When used in
+    conjunction with a splicemap, it allows for a powerful combination
+    to help fix even the most badly mismanaged repositories and turn them
+    into nicely structured Mercurial repositories. The branchmap contains
+    lines of the form "original_branch_name new_branch_name".
+    "original_branch_name" is the name of the branch in the source
+    repository, and "new_branch_name" is the name of the branch is the
+    destination repository. This can be used to (for instance) move code
+    in one repository from "default" to a named branch.
+
     Mercurial Source
     -----------------
 
@@ -109,7 +132,7 @@
     in the sandbox to find the CVS repository, and then uses CVS rlog
     commands to find files to convert. This means that unless a
     filemap is given, all files under the starting directory will be
-    converted, and that any directory reorganisation in the CVS
+    converted, and that any directory reorganization in the CVS
     sandbox is ignored.
 
     Because CVS does not have changesets, it is necessary to collect
@@ -117,7 +140,7 @@
     source uses its internal changeset merging code by default but can
     be configured to call the external 'cvsps' program by setting:
         --config convert.cvsps='cvsps -A -u --cvs-direct -q'
-    This is a legacy option and may be removed in future.
+    This option is deprecated and will be removed in Mercurial 1.4.
 
     The options shown are the defaults.
 
@@ -133,13 +156,13 @@
             single changeset. When very large files were checked in as
             part of a changeset then the default may not be long
             enough.
-        --config convert.cvsps.mergeto='{{mergetobranch ([-\w]+)}}'
+        --config convert.cvsps.mergeto='{{mergetobranch ([-\\w]+)}}'
             Specify a regular expression to which commit log messages
             are matched. If a match occurs, then the conversion
             process will insert a dummy revision merging the branch on
             which this log message occurs to the branch indicated in
             the regex.
-        --config convert.cvsps.mergefrom='{{mergefrombranch ([-\w]+)}}'
+        --config convert.cvsps.mergefrom='{{mergefrombranch ([-\\w]+)}}'
             Specify a regular expression to which commit log messages
             are matched. If a match occurs, then the conversion
             process will add the most recent revision on the branch
@@ -160,9 +183,9 @@
     its subdirectories are listed as possible branches. If
     "svn://repo/path/tags" exists, it is looked for tags referencing
     converted branches. Default "trunk", "branches" and "tags" values
-    can be overriden with following options. Set them to paths
-    relative to the source URL, or leave them blank to disable
-    autodetection.
+    can be overridden with following options. Set them to paths
+    relative to the source URL, or leave them blank to disable auto
+    detection.
 
     --config convert.svn.branches=branches    (directory name)
         specify the directory containing branches
@@ -235,7 +258,10 @@
           ('r', 'rev', '', _('import up to target revision REV')),
           ('s', 'source-type', '', _('source repository type')),
           ('', 'splicemap', '', _('splice synthesized history into place')),
-          ('', 'datesort', None, _('try to sort changesets by date'))],
+          ('', 'branchmap', '', _('change branch names while converting')),
+          ('', 'branchsort', None, _('try to sort changesets by branches')),
+          ('', 'datesort', None, _('try to sort changesets by date')),
+          ('', 'sourcesort', None, _('preserve source changesets order'))],
          _('hg convert [OPTION]... SOURCE [DEST [REVMAP]]')),
     "debugsvnlog":
         (debugsvnlog,
--- a/hgext/convert/bzr.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/convert/bzr.py	Wed Jul 08 17:03:16 2009 -0700
@@ -45,10 +45,31 @@
             raise NoRepo('Bazaar modules could not be loaded')
 
         path = os.path.abspath(path)
+        self._checkrepotype(path)
         self.branch = branch.Branch.open(path)
         self.sourcerepo = self.branch.repository
         self._parentids = {}
 
+    def _checkrepotype(self, path):
+        # Lightweight checkouts detection is informational but probably
+        # fragile at API level. It should not terminate the conversion.
+        try:
+            from bzrlib import bzrdir
+            dir = bzrdir.BzrDir.open_containing(path)[0]
+            try:
+                tree = dir.open_workingtree(recommend_upgrade=False)
+                branch = tree.branch
+            except (errors.NoWorkingTree, errors.NotLocalUrl), e:
+                tree = None
+                branch = dir.open_branch()
+            if (tree is not None and tree.bzrdir.root_transport.base !=
+                branch.bzrdir.root_transport.base):
+                self.ui.warn(_('warning: lightweight checkouts may cause '
+                               'conversion failures, try with a regular '
+                               'branch instead.\n'))
+        except:
+            self.ui.note(_('bzr source type could not be determined\n'))
+
     def before(self):
         """Before the conversion begins, acquire a read lock
         for all the operations that might need it. Fortunately
@@ -78,13 +99,23 @@
 
     def getfile(self, name, rev):
         revtree = self.sourcerepo.revision_tree(rev)
-        fileid = revtree.path2id(name)
-        if fileid is None or revtree.kind(fileid) not in supportedkinds:
+        fileid = revtree.path2id(name.decode(self.encoding or 'utf-8'))
+        kind = None
+        if fileid is not None:
+            kind = revtree.kind(fileid)
+        if kind not in supportedkinds:
             # the file is not available anymore - was deleted
             raise IOError(_('%s is not available in %s anymore') %
                     (name, rev))
-        sio = revtree.get_file(fileid)
-        return sio.read()
+        if kind == 'symlink':
+            target = revtree.get_symlink_target(fileid)
+            if target is None:
+                raise util.Abort(_('%s.%s symlink has no target')
+                                 % (name, rev))
+            return target
+        else:
+            sio = revtree.get_file(fileid)
+            return sio.read()
 
     def getmode(self, name, rev):
         return self._modecache[(name, rev)]
--- a/hgext/convert/common.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/convert/common.py	Wed Jul 08 17:03:16 2009 -0700
@@ -8,7 +8,7 @@
 import base64, errno
 import os
 import cPickle as pickle
-from mercurial import util, strutil
+from mercurial import util
 from mercurial.i18n import _
 
 def encodeargs(args):
@@ -38,7 +38,7 @@
 
 class commit(object):
     def __init__(self, author, date, desc, parents, branch=None, rev=None,
-                 extra={}):
+                 extra={}, sortkey=None):
         self.author = author or 'unknown'
         self.date = date or '0 0'
         self.desc = desc
@@ -46,6 +46,7 @@
         self.branch = branch
         self.rev = rev
         self.extra = extra
+        self.sortkey = sortkey
 
 class converter_source(object):
     """Conversion source interface"""
@@ -75,7 +76,8 @@
 
     def getfile(self, name, rev):
         """Return file contents as a string. rev is the identifier returned
-        by a previous call to getchanges().
+        by a previous call to getchanges(). Raise IOError to indicate that
+        name was deleted in rev.
         """
         raise NotImplementedError()
 
@@ -89,7 +91,7 @@
         """Returns a tuple of (files, copies).
 
         files is a sorted list of (filename, id) tuples for all files
-        changed between version and it's first parent returned by
+        changed between version and its first parent returned by
         getcommit(). id is the source revision id of the file.
 
         copies is a dictionary of dest: source
@@ -101,7 +103,10 @@
         raise NotImplementedError()
 
     def gettags(self):
-        """Return the tags as a dictionary of name: revision"""
+        """Return the tags as a dictionary of name: revision
+
+        Tag names must be UTF-8 strings.
+        """
         raise NotImplementedError()
 
     def recode(self, s, encoding=None):
@@ -135,6 +140,19 @@
         '''Notify the source that a revision has been converted.'''
         pass
 
+    def hasnativeorder(self):
+        """Return true if this source has a meaningful, native revision
+        order. For instance, Mercurial revisions are store sequentially
+        while there is no such global ordering with Darcs.
+        """
+        return False
+
+    def lookuprev(self, rev):
+        """If rev is a meaningful revision reference in source, return
+        the referenced identifier in the same format used by getcommit().
+        return None otherwise.
+        """
+        return None
 
 class converter_sink(object):
     """Conversion sink (target) interface"""
@@ -165,13 +183,15 @@
         mapping equivalent authors identifiers for each system."""
         return None
 
-    def putcommit(self, files, copies, parents, commit, source):
+    def putcommit(self, files, copies, parents, commit, source, revmap):
         """Create a revision with all changed files listed in 'files'
-        and having listed parents. 'commit' is a commit object containing
-        at a minimum the author, date, and message for this changeset.
-        'files' is a list of (path, version) tuples, 'copies'is a dictionary
-        mapping destinations to sources, and 'source' is the source repository.
-        Only getfile() and getmode() should be called on 'source'.
+        and having listed parents. 'commit' is a commit object
+        containing at a minimum the author, date, and message for this
+        changeset.  'files' is a list of (path, version) tuples,
+        'copies' is a dictionary mapping destinations to sources,
+        'source' is the source repository, and 'revmap' is a mapfile
+        of source revisions to converted revisions. Only getfile(),
+        getmode(), and lookuprev() should be called on 'source'.
 
         Note that the sink repository is not told to update itself to
         a particular revision (or even what that revision would be)
@@ -181,7 +201,9 @@
 
     def puttags(self, tags):
         """Put tags into sink.
-        tags: {tagname: sink_rev_id, ...}"""
+
+        tags: {tagname: sink_rev_id, ...} where tagname is an UTF-8 string.
+        """
         raise NotImplementedError()
 
     def setbranch(self, branch, pbranches):
@@ -267,7 +289,7 @@
                 self.ui.warn(_('%s error:\n') % self.command)
                 self.ui.warn(output)
             msg = util.explain_exit(status)[0]
-            raise util.Abort(_('%s %s') % (self.command, msg))
+            raise util.Abort('%s %s' % (self.command, msg))
 
     def run0(self, cmd, *args, **kwargs):
         output, status = self.run(cmd, *args, **kwargs)
--- a/hgext/convert/convcmd.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/convert/convcmd.py	Wed Jul 08 17:03:16 2009 -0700
@@ -30,15 +30,15 @@
         return s.decode('utf-8').encode(orig_encoding, 'replace')
 
 source_converters = [
-    ('cvs', convert_cvs),
-    ('git', convert_git),
-    ('svn', svn_source),
-    ('hg', mercurial_source),
-    ('darcs', darcs_source),
-    ('mtn', monotone_source),
-    ('gnuarch', gnuarch_source),
-    ('bzr', bzr_source),
-    ('p4', p4_source),
+    ('cvs', convert_cvs, 'branchsort'),
+    ('git', convert_git, 'branchsort'),
+    ('svn', svn_source, 'branchsort'),
+    ('hg', mercurial_source, 'sourcesort'),
+    ('darcs', darcs_source, 'branchsort'),
+    ('mtn', monotone_source, 'branchsort'),
+    ('gnuarch', gnuarch_source, 'branchsort'),
+    ('bzr', bzr_source, 'branchsort'),
+    ('p4', p4_source, 'branchsort'),
     ]
 
 sink_converters = [
@@ -48,10 +48,10 @@
 
 def convertsource(ui, path, type, rev):
     exceptions = []
-    for name, source in source_converters:
+    for name, source, sortmode in source_converters:
         try:
             if not type or name == type:
-                return source(ui, path, rev)
+                return source(ui, path, rev), sortmode
         except (NoRepo, MissingTool), inst:
             exceptions.append(inst)
     if not ui.quiet:
@@ -79,6 +79,9 @@
         self.authors = {}
         self.authorfile = None
 
+        # Record converted revisions persistently: maps source revision
+        # ID to target revision ID (both strings).  (This is how
+        # incremental conversions work.)
         self.map = mapfile(ui, revmapfile)
 
         # Read first the dst author map if any
@@ -91,17 +94,18 @@
             self.authorfile = self.dest.authorfile()
 
         self.splicemap = mapfile(ui, opts.get('splicemap'))
+        self.branchmap = mapfile(ui, opts.get('branchmap'))
 
     def walktree(self, heads):
         '''Return a mapping that identifies the uncommitted parents of every
         uncommitted changeset.'''
         visit = heads
-        known = {}
+        known = set()
         parents = {}
         while visit:
             n = visit.pop(0)
             if n in known or n in self.map: continue
-            known[n] = 1
+            known.add(n)
             commit = self.cachecommit(n)
             parents[n] = []
             for p in commit.parents:
@@ -110,34 +114,70 @@
 
         return parents
 
-    def toposort(self, parents):
+    def toposort(self, parents, sortmode):
         '''Return an ordering such that every uncommitted changeset is
         preceeded by all its uncommitted ancestors.'''
-        visit = parents.keys()
-        seen = {}
-        children = {}
-        actives = []
+
+        def mapchildren(parents):
+            """Return a (children, roots) tuple where 'children' maps parent
+            revision identifiers to children ones, and 'roots' is the list of
+            revisions without parents. 'parents' must be a mapping of revision
+            identifier to its parents ones.
+            """
+            visit = parents.keys()
+            seen = set()
+            children = {}
+            roots = []
+
+            while visit:
+                n = visit.pop(0)
+                if n in seen:
+                    continue
+                seen.add(n)
+                # Ensure that nodes without parents are present in the
+                # 'children' mapping.
+                children.setdefault(n, [])
+                hasparent = False
+                for p in parents[n]:
+                    if not p in self.map:
+                        visit.append(p)
+                        hasparent = True
+                    children.setdefault(p, []).append(n)
+                if not hasparent:
+                    roots.append(n)
+
+            return children, roots
 
-        while visit:
-            n = visit.pop(0)
-            if n in seen: continue
-            seen[n] = 1
-            # Ensure that nodes without parents are present in the 'children'
-            # mapping.
-            children.setdefault(n, [])
-            hasparent = False
-            for p in parents[n]:
-                if not p in self.map:
-                    visit.append(p)
-                    hasparent = True
-                children.setdefault(p, []).append(n)
-            if not hasparent:
-                actives.append(n)
+        # Sort functions are supposed to take a list of revisions which
+        # can be converted immediately and pick one
 
-        del seen
-        del visit
+        def makebranchsorter():
+            """If the previously converted revision has a child in the
+            eligible revisions list, pick it. Return the list head
+            otherwise. Branch sort attempts to minimize branch
+            switching, which is harmful for Mercurial backend
+            compression.
+            """
+            prev = [None]
+            def picknext(nodes):
+                next = nodes[0]
+                for n in nodes:
+                    if prev[0] in parents[n]:
+                        next = n
+                        break
+                prev[0] = next
+                return next
+            return picknext
 
-        if self.opts.get('datesort'):
+        def makesourcesorter():
+            """Source specific sort."""
+            keyfn = lambda n: self.commitcache[n].sortkey
+            def picknext(nodes):
+                return sorted(nodes, key=keyfn)[0]
+            return picknext
+
+        def makedatesorter():
+            """Sort revisions by date."""
             dates = {}
             def getdate(n):
                 if n not in dates:
@@ -146,18 +186,19 @@
 
             def picknext(nodes):
                 return min([(getdate(n), n) for n in nodes])[1]
+
+            return picknext
+
+        if sortmode == 'branchsort':
+            picknext = makebranchsorter()
+        elif sortmode == 'datesort':
+            picknext = makedatesorter()
+        elif sortmode == 'sourcesort':
+            picknext = makesourcesorter()
         else:
-            prev = [None]
-            def picknext(nodes):
-                # Return the first eligible child of the previously converted
-                # revision, or any of them.
-                next = nodes[0]
-                for n in nodes:
-                    if prev[0] in parents[n]:
-                        next = n
-                        break
-                prev[0] = next
-                return next
+            raise util.Abort(_('unknown sort mode: %s') % sortmode)
+
+        children, actives = mapchildren(parents)
 
         s = []
         pendings = {}
@@ -225,6 +266,7 @@
     def cachecommit(self, rev):
         commit = self.source.getcommit(rev)
         commit.author = self.authors.get(commit.author, commit.author)
+        commit.branch = self.branchmap.get(commit.branch, commit.branch)
         self.commitcache[rev] = commit
         return commit
 
@@ -255,12 +297,12 @@
             parents = [self.map.get(p, p) for p in parents]
         except KeyError:
             parents = [b[0] for b in pbranches]
-        newnode = self.dest.putcommit(files, copies, parents, commit, self.source)
+        newnode = self.dest.putcommit(files, copies, parents, commit,
+                                      self.source, self.map)
         self.source.converted(rev, newnode)
         self.map[rev] = newnode
 
-    def convert(self):
-
+    def convert(self, sortmode):
         try:
             self.source.before()
             self.dest.before()
@@ -269,7 +311,7 @@
             heads = self.source.getheads()
             parents = self.walktree(heads)
             self.ui.status(_("sorting...\n"))
-            t = self.toposort(parents)
+            t = self.toposort(parents, sortmode)
             num = len(t)
             c = None
 
@@ -323,13 +365,21 @@
     destc = convertsink(ui, dest, opts.get('dest_type'))
 
     try:
-        srcc = convertsource(ui, src, opts.get('source_type'),
-                             opts.get('rev'))
+        srcc, defaultsort = convertsource(ui, src, opts.get('source_type'),
+                                          opts.get('rev'))
     except Exception:
         for path in destc.created:
             shutil.rmtree(path, True)
         raise
 
+    sortmodes = ('branchsort', 'datesort', 'sourcesort')
+    sortmode = [m for m in sortmodes if opts.get(m)]
+    if len(sortmode) > 1:
+        raise util.Abort(_('more than one sort mode specified'))
+    sortmode = sortmode and sortmode[0] or defaultsort
+    if sortmode == 'sourcesort' and not srcc.hasnativeorder():
+        raise util.Abort(_('--sourcesort is not supported by this data source'))
+
     fmap = opts.get('filemap')
     if fmap:
         srcc = filemap.filemap_source(ui, srcc, fmap)
@@ -342,5 +392,5 @@
             revmapfile = os.path.join(destc, "map")
 
     c = converter(ui, srcc, destc, revmapfile, opts)
-    c.convert()
+    c.convert(sortmode)
 
--- a/hgext/convert/cvs.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/convert/cvs.py	Wed Jul 08 17:03:16 2009 -0700
@@ -25,6 +25,9 @@
         self.cmd = ui.config('convert', 'cvsps', 'builtin')
         cvspsexe = self.cmd.split(None, 1)[0]
         self.builtin = cvspsexe == 'builtin'
+        if not self.builtin:
+            ui.warn(_('warning: support for external cvsps is deprecated and '
+                      'will be removed in Mercurial 1.4\n'))
 
         if not self.builtin:
             checktool(cvspsexe)
--- a/hgext/convert/cvsps.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/convert/cvsps.py	Wed Jul 08 17:03:16 2009 -0700
@@ -34,7 +34,9 @@
         .revision  - revision number as tuple
         .tags      - list of tags on the file
         .synthetic - is this a synthetic "file ... added on ..." revision?
-        .mergepoint- the branch that has been merged from (if present in rlog output)
+        .mergepoint- the branch that has been merged from
+                     (if present in rlog output)
+        .branchpoints- the branches that start at the current entry
     '''
     def __init__(self, **entries):
         self.__dict__.update(entries)
@@ -105,14 +107,18 @@
     re_00 = re.compile('RCS file: (.+)$')
     re_01 = re.compile('cvs \\[r?log aborted\\]: (.+)$')
     re_02 = re.compile('cvs (r?log|server): (.+)\n$')
-    re_03 = re.compile("(Cannot access.+CVSROOT)|(can't create temporary directory.+)$")
+    re_03 = re.compile("(Cannot access.+CVSROOT)|"
+                       "(can't create temporary directory.+)$")
     re_10 = re.compile('Working file: (.+)$')
     re_20 = re.compile('symbolic names:')
     re_30 = re.compile('\t(.+): ([\\d.]+)$')
     re_31 = re.compile('----------------------------$')
-    re_32 = re.compile('=============================================================================$')
+    re_32 = re.compile('======================================='
+                       '======================================$')
     re_50 = re.compile('revision ([\\d.]+)(\s+locked by:\s+.+;)?$')
-    re_60 = re.compile(r'date:\s+(.+);\s+author:\s+(.+);\s+state:\s+(.+?);(\s+lines:\s+(\+\d+)?\s+(-\d+)?;)?(.*mergepoint:\s+([^;]+);)?')
+    re_60 = re.compile(r'date:\s+(.+);\s+author:\s+(.+);\s+state:\s+(.+?);'
+                       r'(\s+lines:\s+(\+\d+)?\s+(-\d+)?;)?'
+                       r'(.*mergepoint:\s+([^;]+);)?')
     re_70 = re.compile('branches: (.+);$')
 
     file_added_re = re.compile(r'file [^/]+ was (initially )?added on branch')
@@ -282,7 +288,8 @@
             if re_31.match(line):
                 state = 5
             else:
-                assert not re_32.match(line), _('must have at least some revisions')
+                assert not re_32.match(line), _('must have at least '
+                                                'some revisions')
 
         elif state == 5:
             # expecting revision number and possibly (ignored) lock indication
@@ -308,7 +315,9 @@
             if len(d.split()) != 3:
                 # cvs log dates always in GMT
                 d = d + ' UTC'
-            e.date = util.parsedate(d, ['%y/%m/%d %H:%M:%S', '%Y/%m/%d %H:%M:%S', '%Y-%m-%d %H:%M:%S'])
+            e.date = util.parsedate(d, ['%y/%m/%d %H:%M:%S',
+                                        '%Y/%m/%d %H:%M:%S',
+                                        '%Y-%m-%d %H:%M:%S'])
             e.author = scache(match.group(2))
             e.dead = match.group(3).lower() == 'dead'
 
@@ -392,6 +401,19 @@
             else:
                 e.branch = None
 
+            # find the branches starting from this revision
+            branchpoints = set()
+            for branch, revision in branchmap.iteritems():
+                revparts = tuple([int(i) for i in revision.split('.')])
+                if revparts[-2] == 0 and revparts[-1] % 2 == 0:
+                    # normal branch
+                    if revparts[:-2] == e.revision:
+                        branchpoints.add(branch)
+                elif revparts == (1,1,1): # vendor branch
+                    if revparts in e.branches:
+                        branchpoints.add(branch)
+            e.branchpoints = branchpoints
+
             log.append(e)
 
             if len(log) % 100 == 0:
@@ -443,7 +465,9 @@
         .parents   - list of one or two parent changesets
         .tags      - list of tags on this changeset
         .synthetic - from synthetic revision "file ... added on branch ..."
-        .mergepoint- the branch that has been merged from (if present in rlog output)
+        .mergepoint- the branch that has been merged from
+                     (if present in rlog output)
+        .branchpoints- the branches that start at the current entry
     '''
     def __init__(self, **entries):
         self.__dict__.update(entries)
@@ -463,30 +487,49 @@
     listsort(log, key=lambda x:(x.comment, x.author, x.branch, x.date))
 
     changesets = []
-    files = {}
+    files = set()
     c = None
     for i, e in enumerate(log):
 
         # Check if log entry belongs to the current changeset or not.
+
+        # Since CVS is file centric, two different file revisions with
+        # different branchpoints should be treated as belonging to two
+        # different changesets (and the ordering is important and not
+        # honoured by cvsps at this point).
+        #
+        # Consider the following case:
+        # foo 1.1 branchpoints: [MYBRANCH]
+        # bar 1.1 branchpoints: [MYBRANCH, MYBRANCH2]
+        #
+        # Here foo is part only of MYBRANCH, but not MYBRANCH2, e.g. a
+        # later version of foo may be in MYBRANCH2, so foo should be the
+        # first changeset and bar the next and MYBRANCH and MYBRANCH2
+        # should both start off of the bar changeset. No provisions are
+        # made to ensure that this is, in fact, what happens.
         if not (c and
                   e.comment == c.comment and
                   e.author == c.author and
                   e.branch == c.branch and
+                  (not hasattr(e, 'branchpoints') or
+                    not hasattr (c, 'branchpoints') or
+                    e.branchpoints == c.branchpoints) and
                   ((c.date[0] + c.date[1]) <=
                    (e.date[0] + e.date[1]) <=
                    (c.date[0] + c.date[1]) + fuzz) and
                   e.file not in files):
             c = changeset(comment=e.comment, author=e.author,
                           branch=e.branch, date=e.date, entries=[],
-                          mergepoint=getattr(e, 'mergepoint', None))
+                          mergepoint=getattr(e, 'mergepoint', None),
+                          branchpoints=getattr(e, 'branchpoints', set()))
             changesets.append(c)
-            files = {}
+            files = set()
             if len(changesets) % 100 == 0:
                 t = '%d %s' % (len(changesets), repr(e.comment)[1:-1])
                 ui.status(util.ellipsis(t, 80) + '\n')
 
         c.entries.append(e)
-        files[e.file] = True
+        files.add(e.file)
         c.date = e.date       # changeset date is date of latest commit in it
 
     # Mark synthetic changesets
@@ -564,19 +607,17 @@
 
     globaltags = {}
     for c in changesets:
-        tags = {}
         for e in c.entries:
             for tag in e.tags:
                 # remember which is the latest changeset to have this tag
                 globaltags[tag] = c
 
     for c in changesets:
-        tags = {}
+        tags = set()
         for e in c.entries:
-            for tag in e.tags:
-                tags[tag] = True
+            tags.update(e.tags)
         # remember tags only if this is the latest changeset to have it
-        c.tags = sorted([tag for tag in tags if globaltags[tag] is c])
+        c.tags = sorted(tag for tag in tags if globaltags[tag] is c)
 
     # Find parent changesets, handle {{mergetobranch BRANCHNAME}}
     # by inserting dummy changesets with two parents, and handle
@@ -606,8 +647,17 @@
         if c.branch in branches:
             p = branches[c.branch]
         else:
-            for f in c.entries:
-                p = max(p, versions.get((f.rcs, f.parent), None))
+            # first changeset on a new branch
+            # the parent is a changeset with the branch in its
+            # branchpoints such that it is the latest possible
+            # commit without any intervening, unrelated commits.
+
+            for candidate in xrange(i):
+                if c.branch not in changesets[candidate].branchpoints:
+                    if p is not None:
+                        break
+                    continue
+                p = candidate
 
         c.parents = []
         if p is not None:
@@ -691,9 +741,10 @@
 
 
 def debugcvsps(ui, *args, **opts):
-    '''Read CVS rlog for current directory or named path in repository, and
-    convert the log to changesets based on matching commit log entries and dates.'''
-
+    '''Read CVS rlog for current directory or named path in
+    repository, and convert the log to changesets based on matching
+    commit log entries and dates.
+    '''
     if opts["new_cache"]:
         cache = "write"
     elif opts["update_cache"]:
@@ -726,7 +777,8 @@
 
         if opts["ancestors"]:
             if cs.branch not in branches and cs.parents and cs.parents[0].id:
-                ancestors[cs.branch] = changesets[cs.parents[0].id-1].branch, cs.parents[0].id
+                ancestors[cs.branch] = (changesets[cs.parents[0].id-1].branch,
+                                        cs.parents[0].id)
             branches[cs.branch] = cs.id
 
         # limit by branches
@@ -738,11 +790,15 @@
             #       bug-for-bug compatibility with cvsps.
             ui.write('---------------------\n')
             ui.write('PatchSet %d \n' % cs.id)
-            ui.write('Date: %s\n' % util.datestr(cs.date, '%Y/%m/%d %H:%M:%S %1%2'))
+            ui.write('Date: %s\n' % util.datestr(cs.date,
+                                                 '%Y/%m/%d %H:%M:%S %1%2'))
             ui.write('Author: %s\n' % cs.author)
             ui.write('Branch: %s\n' % (cs.branch or 'HEAD'))
             ui.write('Tag%s: %s \n' % (['', 's'][len(cs.tags)>1],
                                   ','.join(cs.tags) or '(none)'))
+            branchpoints = getattr(cs, 'branchpoints', None)
+            if branchpoints:
+                ui.write('Branchpoints: %s \n' % ', '.join(branchpoints))
             if opts["parents"] and cs.parents:
                 if len(cs.parents)>1:
                     ui.write('Parents: %s\n' % (','.join([str(p.id) for p in cs.parents])))
--- a/hgext/convert/filemap.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/convert/filemap.py	Wed Jul 08 17:03:16 2009 -0700
@@ -351,3 +351,9 @@
 
     def gettags(self):
         return self.base.gettags()
+
+    def hasnativeorder(self):
+        return self.base.hasnativeorder()
+
+    def lookuprev(self, rev):
+        return self.base.lookuprev(rev)
--- a/hgext/convert/git.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/convert/git.py	Wed Jul 08 17:03:16 2009 -0700
@@ -63,7 +63,7 @@
         self.modecache = {}
         fh = self.gitcmd("git diff-tree -z --root -m -r %s" % version)
         changes = []
-        seen = {}
+        seen = set()
         entry = None
         for l in fh.read().split('\x00'):
             if not entry:
@@ -73,7 +73,7 @@
                 continue
             f = l
             if f not in seen:
-                seen[f] = 1
+                seen.add(f)
                 entry = entry.split()
                 h = entry[3]
                 p = (entry[1] == "100755")
--- a/hgext/convert/gnuarch.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/convert/gnuarch.py	Wed Jul 08 17:03:16 2009 -0700
@@ -14,7 +14,7 @@
 
 class gnuarch_source(converter_source, commandline):
 
-    class gnuarch_rev:
+    class gnuarch_rev(object):
         def __init__(self, rev):
             self.rev = rev
             self.summary = ''
@@ -83,7 +83,8 @@
 
             archive = treeversion.split('/')[0]
             if archive not in self.archives:
-                self.ui.status(_('tree analysis stopped because it points to an unregistered archive %s...\n') % archive)
+                self.ui.status(_('tree analysis stopped because it points to '
+                                 'an unregistered archive %s...\n') % archive)
                 break
 
             # Get the complete list of revisions for that tree version
@@ -178,8 +179,8 @@
 
     def getcommit(self, rev):
         changes = self.changes[rev]
-        return commit(author = changes.author, date = changes.date,
-                      desc = changes.summary, parents = self.parents[rev], rev=rev)
+        return commit(author=changes.author, date=changes.date,
+                      desc=changes.summary, parents=self.parents[rev], rev=rev)
 
     def gettags(self):
         return self.tags
@@ -256,7 +257,7 @@
         self.ui.debug(_('obtaining revision %s...\n') % rev)
         output = self._execute('get', rev, self.tmppath)
         self.checkexit(output)
-        self.ui.debug(_('analysing revision %s...\n') % rev)
+        self.ui.debug(_('analyzing revision %s...\n') % rev)
         files = self._readcontents(self.tmppath)
         self.changes[rev].add_files += files
 
--- a/hgext/convert/hg.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/convert/hg.py	Wed Jul 08 17:03:16 2009 -0700
@@ -12,13 +12,13 @@
 #   those older versions, then converted, may thus have different
 #   hashes for changesets that are otherwise identical.
 #
-# * By default, the source revision is stored in the converted
-#   revision.  This will cause the converted revision to have a
-#   different identity than the source.  To avoid this, use the
-#   following option: "--config convert.hg.saverev=false"
+# * Using "--config convert.hg.saverev=true" will make the source
+#   identifier to be stored in the converted revision. This will cause
+#   the converted revision to have a different identity than the
+#   source.
 
 
-import os, time
+import os, time, cStringIO
 from mercurial.i18n import _
 from mercurial.node import bin, hex, nullid
 from mercurial import hg, util, context, error
@@ -112,13 +112,27 @@
                 self.repo.pull(prepo, [prepo.lookup(h) for h in heads])
             self.before()
 
-    def putcommit(self, files, copies, parents, commit, source):
+    def _rewritetags(self, source, revmap, data):
+        fp = cStringIO.StringIO()
+        for line in data.splitlines():
+            s = line.split(' ', 1)
+            if len(s) != 2:
+                continue
+            revid = revmap.get(source.lookuprev(s[0]))
+            if not revid:
+                continue
+            fp.write('%s %s\n' % (revid, s[1]))
+        return fp.getvalue()
+
+    def putcommit(self, files, copies, parents, commit, source, revmap):
 
         files = dict(files)
         def getfilectx(repo, memctx, f):
             v = files[f]
             data = source.getfile(f, v)
             e = source.getmode(f, v)
+            if f == '.hgtags':
+                data = self._rewritetags(source, revmap, data)
             return context.memfilectx(f, data, 'l' in e, 'x' in e, copies.get(f))
 
         pl = []
@@ -131,8 +145,8 @@
             m1node = self.repo.changelog.read(bin(parents[0]))[0]
             parent = parents[0]
 
-        if len(parents) < 2: parents.append("0" * 40)
-        if len(parents) < 2: parents.append("0" * 40)
+        if len(parents) < 2: parents.append(nullid)
+        if len(parents) < 2: parents.append(nullid)
         p2 = parents.pop(0)
 
         text = commit.desc
@@ -155,6 +169,7 @@
             man = self.repo.manifest
             mnode = self.repo.changelog.read(bin(p2))[0]
             if not man.cmp(m1node, man.revision(mnode)):
+                self.ui.status(_("filtering out empty revision\n"))
                 self.repo.rollback()
                 return parent
         return p2
@@ -195,7 +210,7 @@
     def __init__(self, ui, path, rev=None):
         converter_source.__init__(self, ui, path, rev)
         self.ignoreerrors = ui.configbool('convert', 'hg.ignoreerrors', False)
-        self.ignored = {}
+        self.ignored = set()
         self.saverev = ui.configbool('convert', 'hg.saverev', False)
         try:
             self.repo = hg.repository(self.ui, path)
@@ -288,7 +303,7 @@
             except error.LookupError, e:
                 if not self.ignoreerrors:
                     raise
-                self.ignored[name] = 1
+                self.ignored.add(name)
                 self.ui.warn(_('ignoring: %s\n') % e)
         return copies
 
@@ -301,7 +316,8 @@
             crev = None
         return commit(author=ctx.user(), date=util.datestr(ctx.date()),
                       desc=ctx.description(), rev=crev, parents=parents,
-                      branch=ctx.branch(), extra=ctx.extra())
+                      branch=ctx.branch(), extra=ctx.extra(),
+                      sortkey=ctx.rev())
 
     def gettags(self):
         tags = [t for t in self.repo.tagslist() if t[0] != 'tip']
@@ -336,3 +352,12 @@
 
     def after(self):
         self.ui.debug(_('run hg source post-conversion action\n'))
+
+    def hasnativeorder(self):
+        return True
+
+    def lookuprev(self, rev):
+        try:
+            return hex(self.repo.lookup(rev))
+        except error.RepoError:
+            return None
--- a/hgext/convert/monotone.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/convert/monotone.py	Wed Jul 08 17:03:16 2009 -0700
@@ -93,19 +93,11 @@
     def mtnisfile(self, name, rev):
         # a non-file could be a directory or a deleted or renamed file
         self.mtnloadmanifest(rev)
-        try:
-            self.files[name]
-            return True
-        except KeyError:
-            return False
+        return name in self.files
 
     def mtnisdir(self, name, rev):
         self.mtnloadmanifest(rev)
-        try:
-            self.dirs[name]
-            return True
-        except KeyError:
-            return False
+        return name in self.dirs
 
     def mtngetcerts(self, rev):
         certs = {"author":"<missing>", "date":"<missing>",
@@ -190,11 +182,8 @@
 
     def getmode(self, name, rev):
         self.mtnloadmanifest(rev)
-        try:
-            node, attr = self.files[name]
-            return attr
-        except KeyError:
-            return ""
+        node, attr = self.files.get(name, (None, ""))
+        return attr
 
     def getfile(self, name, rev):
         if not self.mtnisfile(name, rev):
--- a/hgext/convert/p4.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/convert/p4.py	Wed Jul 08 17:03:16 2009 -0700
@@ -12,6 +12,7 @@
 
 from common import commit, converter_source, checktool, NoRepo
 import marshal
+import re
 
 def loaditer(f):
     "Yield the dictionary objects generated by p4"
@@ -28,7 +29,7 @@
     def __init__(self, ui, path, rev=None):
         super(p4_source, self).__init__(ui, path, rev=rev)
 
-        if not path.startswith('//'):
+        if "/" in path and not path.startswith('//'):
             raise NoRepo('%s does not look like a P4 repo' % path)
 
         checktool('p4', abort=False)
@@ -43,6 +44,9 @@
         self.encoding = "latin_1"
         self.depotname = {}           # mapping from local name to depot name
         self.modecache = {}
+        self.re_type = re.compile("([a-z]+)?(text|binary|symlink|apple|resource|unicode|utf\d+)(\+\w+)?$")
+        self.re_keywords = re.compile(r"\$(Id|Header|Date|DateTime|Change|File|Revision|Author):[^$\n]*\$")
+        self.re_keywords_old = re.compile("\$(Id|Header):[^$\n]*\$")
 
         self._parse(ui, path)
 
@@ -146,22 +150,44 @@
         stdout = util.popen(cmd)
 
         mode = None
-        data = ""
+        contents = ""
+        keywords = None
 
         for d in loaditer(stdout):
-            if d["code"] == "stat":
-                if "+x" in d["type"]:
-                    mode = "x"
-                else:
+            code = d["code"]
+            data = d.get("data")
+
+            if code == "error":
+                raise IOError(d["generic"], data)
+
+            elif code == "stat":
+                p4type = self.re_type.match(d["type"])
+                if p4type:
                     mode = ""
-            elif d["code"] == "text":
-                data += d["data"]
+                    flags = (p4type.group(1) or "") + (p4type.group(3) or "")
+                    if "x" in flags:
+                        mode = "x"
+                    if p4type.group(2) == "symlink":
+                        mode = "l"
+                    if "ko" in flags:
+                        keywords = self.re_keywords_old
+                    elif "k" in flags:
+                        keywords = self.re_keywords
+
+            elif code == "text" or code == "binary":
+                contents += data
 
         if mode is None:
-            raise IOError()
+            raise IOError(0, "bad stat")
 
         self.modecache[(name, rev)] = mode
-        return data
+
+        if keywords:
+            contents = keywords.sub("$\\1$", contents)
+        if mode == "l" and contents.endswith("\n"):
+            contents = contents[:-1]
+
+        return contents
 
     def getmode(self, name, rev):
         return self.modecache[(name, rev)]
--- a/hgext/convert/subversion.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/convert/subversion.py	Wed Jul 08 17:03:16 2009 -0700
@@ -1,19 +1,6 @@
 # Subversion 1.4/1.5 Python API backend
 #
 # Copyright(C) 2007 Daniel Holth et al
-#
-# Configuration options:
-#
-# convert.svn.trunk
-#   Relative path to the trunk (default: "trunk")
-# convert.svn.branches
-#   Relative path to tree of branches (default: "branches")
-# convert.svn.tags
-#   Relative path to tree of tags (default: "tags")
-#
-# Set these in a hgrc, or on the command line as follows:
-#
-#   hg convert --config convert.svn.trunk=wackoname [...]
 
 import locale
 import os
@@ -23,7 +10,7 @@
 import tempfile
 import urllib
 
-from mercurial import strutil, util
+from mercurial import strutil, util, encoding
 from mercurial.i18n import _
 
 # Subversion stuff. Works best with very recent Python SVN bindings
@@ -63,6 +50,9 @@
         path = os.path.normpath(os.path.abspath(path))
         if os.name == 'nt':
             path = '/' + util.normpath(path)
+        # Module URL is later compared with the repository URL returned
+        # by svn API, which is UTF-8.
+        path = encoding.tolocal(path)
         return 'file://%s' % urllib.quote(path)
     return path
 
@@ -118,7 +108,7 @@
     args = decodeargs(sys.stdin.read())
     get_log_child(sys.stdout, *args)
 
-class logstream:
+class logstream(object):
     """Interruptible revision log iterator."""
     def __init__(self, stdout):
         self._stdout = stdout
@@ -161,10 +151,13 @@
             'file': filecheck,
             }
 def issvnurl(url):
-    if not '://' in url:
-        return False
-    proto, path = url.split('://', 1)
-    path = urllib.url2pathname(path).replace(os.sep, '/')
+    try:
+        proto, path = url.split('://', 1)
+        path = urllib.url2pathname(path)
+    except ValueError:
+        proto = 'file'
+        path = os.path.abspath(url)
+    path = path.replace(os.sep, '/')
     check = protomap.get(proto, lambda p, p2: False)
     while '/' in path:
         if check(path, proto):
@@ -210,7 +203,6 @@
             raise MissingTool(_('Subversion python bindings are too old, 1.4 '
                                 'or later required'))
 
-        self.encoding = locale.getpreferredencoding()
         self.lastrevs = {}
 
         latest = None
@@ -237,7 +229,7 @@
             self.rootmodule = self.module
             self.commits = {}
             self.paths = {}
-            self.uuid = svn.ra.get_uuid(self.ra).decode(self.encoding)
+            self.uuid = svn.ra.get_uuid(self.ra)
         except SubversionException:
             ui.traceback()
             raise NoRepo("%s does not look like a Subversion repo" % self.url)
@@ -257,15 +249,10 @@
             raise util.Abort(_('svn: start revision %s is not an integer')
                              % self.startrev)
 
-        try:
-            self.get_blacklist()
-        except IOError:
-            pass
-
         self.head = self.latest(self.module, latest)
         if not self.head:
-            raise util.Abort(_('no revision found in module %s') %
-                             self.module.encode(self.encoding))
+            raise util.Abort(_('no revision found in module %s')
+                             % self.module)
         self.last_changed = self.revnum(self.head)
 
         self._changescache = None
@@ -325,8 +312,8 @@
             self.module += '/' + trunk
             self.head = self.latest(self.module, self.last_changed)
             if not self.head:
-                raise util.Abort(_('no revision found in module %s') %
-                                 self.module.encode(self.encoding))
+                raise util.Abort(_('no revision found in module %s') 
+                                 % self.module)
 
         # First head in the list is the module's head
         self.heads = [self.head]
@@ -344,8 +331,7 @@
                     continue
                 brevid = self.latest(module, self.last_changed)
                 if not brevid:
-                    self.ui.note(_('ignoring empty branch %s\n') %
-                                   branch.encode(self.encoding))
+                    self.ui.note(_('ignoring empty branch %s\n') % branch)
                     continue
                 self.ui.note(_('found branch %s at %d\n') %
                              (branch, self.revnum(brevid)))
@@ -469,7 +455,7 @@
                 # Here/tags/tag.1 discarded as well as its children.
                 # It happens with tools like cvs2svn. Such tags cannot
                 # be represented in mercurial.
-                addeds = dict((p, e.copyfrom_path) for p,e 
+                addeds = dict((p, e.copyfrom_path) for p, e
                               in origpaths.iteritems() if e.action == 'A')
                 badroots = set()
                 for destroot in addeds:
@@ -481,7 +467,7 @@
                         break
 
                 for badroot in badroots:
-                    pendings = [p for p in pendings if p[2] != badroot 
+                    pendings = [p for p in pendings if p[2] != badroot
                                 and not p[2].startswith(badroot + '/')]
 
                 # Tell tag renamings from tag creations
@@ -494,15 +480,16 @@
                     if tagname in tags:
                         # Keep the latest tag value
                         continue
-                    # From revision may be fake, get one with changes                    
+                    # From revision may be fake, get one with changes
                     try:
                         tagid = self.latest(source, sourcerev)
                         if tagid and tagname not in tags:
                             tags[tagname] = tagid
                     except SvnPathNotFound:
-                        # It happens when we are following directories we assumed
-                        # were copied with their parents but were really created
-                        # in the tag directory.
+                        # It happens when we are following directories
+                        # we assumed were copied with their parents
+                        # but were really created in the tag
+                        # directory.
                         pass
                 pendings = remainings
                 tagspath = srctagspath
@@ -520,19 +507,14 @@
         self.convertfp.write('%s %d\n' % (destrev, self.revnum(rev)))
         self.convertfp.flush()
 
-    # -- helper functions --
-
     def revid(self, revnum, module=None):
-        if not module:
-            module = self.module
-        return u"svn:%s%s@%s" % (self.uuid, module.decode(self.encoding),
-                                 revnum)
+        return 'svn:%s%s@%s' % (self.uuid, module or self.module, revnum)
 
     def revnum(self, rev):
         return int(rev.split('@')[-1])
 
     def revsplit(self, rev):
-        url, revnum = rev.encode(self.encoding).rsplit('@', 1)
+        url, revnum = rev.rsplit('@', 1)
         revnum = int(revnum)
         parts = url.split('/', 1)
         uuid = parts.pop(0)[4:]
@@ -563,9 +545,9 @@
         if not dirent:
             raise SvnPathNotFound(_('%s not found up to revision %d') % (path, stop))
 
-        # stat() gives us the previous revision on this line of development, but
-        # it might be in *another module*. Fetch the log and detect renames down
-        # to the latest revision.
+        # stat() gives us the previous revision on this line of
+        # development, but it might be in *another module*. Fetch the
+        # log and detect renames down to the latest revision.
         stream = self._getlog([path], stop, dirent.created_rev)
         try:
             for entry in stream:
@@ -589,25 +571,6 @@
             return None
         return self.revid(dirent.created_rev, path)
 
-    def get_blacklist(self):
-        """Avoid certain revision numbers.
-        It is not uncommon for two nearby revisions to cancel each other
-        out, e.g. 'I copied trunk into a subdirectory of itself instead
-        of making a branch'. The converted repository is significantly
-        smaller if we ignore such revisions."""
-        self.blacklist = set()
-        blacklist = self.blacklist
-        for line in file("blacklist.txt", "r"):
-            if not line.startswith("#"):
-                try:
-                    svn_rev = int(line.strip())
-                    blacklist.add(svn_rev)
-                except ValueError:
-                    pass # not an integer or a comment
-
-    def is_blacklisted(self, svn_rev):
-        return svn_rev in self.blacklist
-
     def reparent(self, module):
         """Reparent the svn transport and return the previous parent."""
         if self.prevmodule == module:
@@ -623,7 +586,9 @@
 
     def expandpaths(self, rev, paths, parents):
         entries = []
-        copyfrom = {} # Map of entrypath, revision for finding source of deleted revisions.
+        # Map of entrypath, revision for finding source of deleted
+        # revisions.
+        copyfrom = {}
         copies = {}
 
         new_module, revnum = self.revsplit(rev)[1:]
@@ -633,15 +598,14 @@
 
         for path, ent in paths:
             entrypath = self.getrelpath(path)
-            entry = entrypath.decode(self.encoding)
 
             kind = self._checkpath(entrypath, revnum)
             if kind == svn.core.svn_node_file:
-                entries.append(self.recode(entry))
+                entries.append(self.recode(entrypath))
                 if not ent.copyfrom_path or not parents:
                     continue
-                # Copy sources not in parent revisions cannot be represented,
-                # ignore their origin for now
+                # Copy sources not in parent revisions cannot be
+                # represented, ignore their origin for now
                 pmodule, prevnum = self.revsplit(parents[0])[1:]
                 if ent.copyfrom_rev < prevnum:
                     continue
@@ -650,99 +614,46 @@
                     continue
                 self.ui.debug(_("copied to %s from %s@%s\n") %
                               (entrypath, copyfrom_path, ent.copyfrom_rev))
-                copies[self.recode(entry)] = self.recode(copyfrom_path)
+                copies[self.recode(entrypath)] = self.recode(copyfrom_path)
             elif kind == 0: # gone, but had better be a deleted *file*
                 self.ui.debug(_("gone from %s\n") % ent.copyfrom_rev)
-
-                # if a branch is created but entries are removed in the same
-                # changeset, get the right fromrev
-                # parents cannot be empty here, you cannot remove things from
-                # a root revision.
-                uuid, old_module, fromrev = self.revsplit(parents[0])
-
-                basepath = old_module + "/" + self.getrelpath(path)
-                entrypath = basepath
+                pmodule, prevnum = self.revsplit(parents[0])[1:]
+                parentpath = pmodule + "/" + entrypath
+                self.ui.debug(_("entry %s\n") % parentpath)
 
-                def lookup_parts(p):
-                    rc = None
-                    parts = p.split("/")
-                    for i in range(len(parts)):
-                        part = "/".join(parts[:i])
-                        info = part, copyfrom.get(part, None)
-                        if info[1] is not None:
-                            self.ui.debug(_("found parent directory %s\n") % info[1])
-                            rc = info
-                    return rc
-
-                self.ui.debug(_("base, entry %s %s\n") % (basepath, entrypath))
-
-                frompath, froment = lookup_parts(entrypath) or (None, revnum - 1)
-
-                # need to remove fragment from lookup_parts and replace with copyfrom_path
-                if frompath is not None:
-                    self.ui.debug(_("munge-o-matic\n"))
-                    self.ui.debug(entrypath + '\n')
-                    self.ui.debug(entrypath[len(frompath):] + '\n')
-                    entrypath = froment.copyfrom_path + entrypath[len(frompath):]
-                    fromrev = froment.copyfrom_rev
-                    self.ui.debug(_("info: %s %s %s %s\n") % (frompath, froment, ent, entrypath))
-
-                # We can avoid the reparent calls if the module has not changed
-                # but it probably does not worth the pain.
+                # We can avoid the reparent calls if the module has
+                # not changed but it probably does not worth the pain.
                 prevmodule = self.reparent('')
-                fromkind = svn.ra.check_path(self.ra, entrypath.strip('/'), fromrev)
+                fromkind = svn.ra.check_path(self.ra, parentpath.strip('/'), prevnum)
                 self.reparent(prevmodule)
 
-                if fromkind == svn.core.svn_node_file:   # a deleted file
-                    entries.append(self.recode(entry))
+                if fromkind == svn.core.svn_node_file:
+                    entries.append(self.recode(entrypath))
                 elif fromkind == svn.core.svn_node_dir:
-                    # print "Deleted/moved non-file:", revnum, path, ent
-                    # children = self._find_children(path, revnum - 1)
-                    # print "find children %s@%d from %d action %s" % (path, revnum, ent.copyfrom_rev, ent.action)
-                    # Sometimes this is tricky. For example: in
-                    # The Subversion Repository revision 6940 a dir
-                    # was copied and one of its files was deleted
-                    # from the new location in the same commit. This
-                    # code can't deal with that yet.
                     if ent.action == 'C':
-                        children = self._find_children(path, fromrev)
+                        children = self._find_children(path, prevnum)
                     else:
-                        oroot = entrypath.strip('/')
+                        oroot = parentpath.strip('/')
                         nroot = path.strip('/')
-                        children = self._find_children(oroot, fromrev)
+                        children = self._find_children(oroot, prevnum)
                         children = [s.replace(oroot,nroot) for s in children]
-                    # Mark all [files, not directories] as deleted.
+
                     for child in children:
-                        # Can we move a child directory and its
-                        # parent in the same commit? (probably can). Could
-                        # cause problems if instead of revnum -1,
-                        # we have to look in (copyfrom_path, revnum - 1)
-                        entrypath = self.getrelpath("/" + child, module=old_module)
-                        if entrypath:
-                            entry = self.recode(entrypath.decode(self.encoding))
-                            if entry in copies:
-                                # deleted file within a copy
-                                del copies[entry]
-                            else:
-                                entries.append(entry)
+                        childpath = self.getrelpath("/" + child, pmodule)
+                        if not childpath:
+                            continue
+                        if childpath in copies:
+                            del copies[childpath]
+                        entries.append(childpath)
                 else:
                     self.ui.debug(_('unknown path in revision %d: %s\n') % \
                                   (revnum, path))
             elif kind == svn.core.svn_node_dir:
-                # Should probably synthesize normal file entries
-                # and handle as above to clean up copy/rename handling.
-
                 # If the directory just had a prop change,
                 # then we shouldn't need to look for its children.
                 if ent.action == 'M':
                     continue
 
-                # Also this could create duplicate entries. Not sure
-                # whether this will matter. Maybe should make entries a set.
-                # print "Changed directory", revnum, path, ent.action, ent.copyfrom_path, ent.copyfrom_rev
-                # This will fail if a directory was copied
-                # from another branch and then some of its files
-                # were deleted in the same transaction.
                 children = sorted(self._find_children(path, revnum))
                 for child in children:
                     # Can we move a child directory and its
@@ -750,25 +661,21 @@
                     # cause problems if instead of revnum -1,
                     # we have to look in (copyfrom_path, revnum - 1)
                     entrypath = self.getrelpath("/" + child)
-                    # print child, self.module, entrypath
                     if entrypath:
                         # Need to filter out directories here...
                         kind = self._checkpath(entrypath, revnum)
                         if kind != svn.core.svn_node_dir:
                             entries.append(self.recode(entrypath))
 
-                # Copies here (must copy all from source)
-                # Probably not a real problem for us if
-                # source does not exist
+                # Handle directory copies
                 if not ent.copyfrom_path or not parents:
                     continue
-                # Copy sources not in parent revisions cannot be represented,
-                # ignore their origin for now
+                # Copy sources not in parent revisions cannot be
+                # represented, ignore their origin for now
                 pmodule, prevnum = self.revsplit(parents[0])[1:]
                 if ent.copyfrom_rev < prevnum:
                     continue
-                copyfrompath = ent.copyfrom_path.decode(self.encoding)
-                copyfrompath = self.getrelpath(copyfrompath, pmodule)
+                copyfrompath = self.getrelpath(ent.copyfrom_path, pmodule)
                 if not copyfrompath:
                     continue
                 copyfrom[path] = ent
@@ -780,10 +687,9 @@
                     entrypath = self.getrelpath("/" + child, pmodule)
                     if not entrypath:
                         continue
-                    entry = entrypath.decode(self.encoding)
-                    copytopath = path + entry[len(copyfrompath):]
+                    copytopath = path + entrypath[len(copyfrompath):]
                     copytopath = self.getrelpath(copytopath)
-                    copies[self.recode(copytopath)] = self.recode(entry, pmodule)
+                    copies[self.recode(copytopath)] = self.recode(entrypath)
 
         return (list(set(entries)), copies)
 
@@ -854,7 +760,7 @@
                           desc=log,
                           parents=parents,
                           branch=branch,
-                          rev=rev.encode('utf-8'))
+                          rev=rev)
 
             self.commits[rev] = cset
             # The parents list is *shared* among self.paths and the
@@ -878,10 +784,6 @@
                     if revnum < self.startrev:
                         lastonbranch = True
                         break
-                    if self.is_blacklisted(revnum):
-                        self.ui.note(_('skipping blacklisted revision %d\n')
-                                     % revnum)
-                        continue
                     if not paths:
                         self.ui.debug(_('revision %d has no entries\n') % revnum)
                         continue
@@ -1165,7 +1067,7 @@
     def revid(self, rev):
         return u"svn:%s@%s" % (self.uuid, rev)
 
-    def putcommit(self, files, copies, parents, commit, source):
+    def putcommit(self, files, copies, parents, commit, source, revmap):
         # Apply changes to working copy
         for f, v in files:
             try:
--- a/hgext/convert/transport.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/convert/transport.py	Wed Jul 08 17:03:16 2009 -0700
@@ -97,7 +97,7 @@
             self.ra = ra
             svn.ra.reparent(self.ra, self.svn_url.encode('utf8'))
 
-    class Reporter:
+    class Reporter(object):
         def __init__(self, (reporter, report_baton)):
             self._reporter = reporter
             self._baton = report_baton
--- a/hgext/extdiff.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/extdiff.py	Wed Jul 08 17:03:16 2009 -0700
@@ -5,18 +5,14 @@
 # This software may be used and distributed according to the terms of the
 # GNU General Public License version 2, incorporated herein by reference.
 
-'''
+'''command to allow external programs to compare revisions
+
 The `extdiff' Mercurial extension allows you to use external programs
 to compare revisions, or revision with working directory. The external diff
 programs are called with a configurable set of options and two
 non-option arguments: paths to directories containing snapshots of
 files to compare.
 
-To enable this extension:
-
-  [extensions]
-  hgext.extdiff =
-
 The `extdiff' extension also allows to configure new diff commands, so
 you do not need to type "hg extdiff -p kdiff3" always.
 
@@ -35,7 +31,7 @@
 
   # add new command called vimdiff, runs gvimdiff with DirDiff plugin
   # (see http://www.vim.org/scripts/script.php?script_id=102)
-  # Non english user, be sure to put "let g:DirDiffDynamicDiffText = 1" in
+  # Non English user, be sure to put "let g:DirDiffDynamicDiffText = 1" in
   # your .vimrc
   vimdiff = gvim -f '+next' '+execute "DirDiff" argv(0) argv(1)'
 
--- a/hgext/fetch.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/fetch.py	Wed Jul 08 17:03:16 2009 -0700
@@ -5,11 +5,11 @@
 # This software may be used and distributed according to the terms of the
 # GNU General Public License version 2, incorporated herein by reference.
 
-'''pulling, updating and merging in one command'''
+'''pull, update and merge in one command'''
 
 from mercurial.i18n import _
 from mercurial.node import nullid, short
-from mercurial import commands, cmdutil, hg, util, url
+from mercurial import commands, cmdutil, hg, util, url, error
 from mercurial.lock import release
 
 def fetch(ui, repo, source='default', **opts):
@@ -67,11 +67,12 @@
                   url.hidepassword(ui.expandpath(source)))
         revs = None
         if opts['rev']:
-            if not other.local():
-                raise util.Abort(_("fetch -r doesn't work for remote "
-                                   "repositories yet"))
-            else:
+            try:
                 revs = [other.lookup(rev) for rev in opts['rev']]
+            except error.CapabilityError:
+                err = _("Other repository doesn't support revision lookup, "
+                        "so a rev cannot be specified.")
+                raise util.Abort(err)
 
         # Are there any changes at all?
         modheads = repo.pull(other, heads=revs)
@@ -120,14 +121,14 @@
             err = hg.merge(repo, secondparent, remind=False)
 
         if not err:
-            mod, add, rem = repo.status()[:3]
             message = (cmdutil.logmessage(opts) or
                        (_('Automated merge with %s') %
                         url.removeauth(other.url())))
-            force_editor = opts.get('force_editor') or opts.get('edit')
-            n = repo.commit(mod + add + rem, message,
-                            opts['user'], opts['date'], force=True,
-                            force_editor=force_editor)
+            editor = cmdutil.commiteditor
+            if opts.get('force_editor') or opts.get('edit'):
+                editor = cmdutil.commitforceeditor
+            n = repo.commit(message, opts['user'], opts['date'],
+                            force=True, editor=editor)
             ui.status(_('new changeset %d:%s merges remote changes '
                         'with local\n') % (repo.changelog.rev(n),
                                            short(n)))
--- a/hgext/gpg.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/gpg.py	Wed Jul 08 17:03:16 2009 -0700
@@ -1,16 +1,16 @@
-# GnuPG signing extension for Mercurial
-#
 # Copyright 2005, 2006 Benoit Boissinot <benoit.boissinot@ens-lyon.org>
 #
 # This software may be used and distributed according to the terms of the
 # GNU General Public License version 2, incorporated herein by reference.
 
+'''commands to sign and verify changesets'''
+
 import os, tempfile, binascii
-from mercurial import util, commands
+from mercurial import util, commands, match
 from mercurial import node as hgnode
 from mercurial.i18n import _
 
-class gpg:
+class gpg(object):
     def __init__(self, path, key=None):
         self.path = path
         self.key = (key and " --local-user \"%s\"" % key) or ""
@@ -255,7 +255,8 @@
                              % hgnode.short(n)
                              for n in nodes])
     try:
-        repo.commit([".hgsigs"], message, opts['user'], opts['date'])
+        m = match.exact(repo.root, '', ['.hgsigs'])
+        repo.commit(message, opts['user'], opts['date'], match=m)
     except ValueError, inst:
         raise util.Abort(str(inst))
 
--- a/hgext/graphlog.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/graphlog.py	Wed Jul 08 17:03:16 2009 -0700
@@ -5,66 +5,39 @@
 # This software may be used and distributed according to the terms of the
 # GNU General Public License version 2, incorporated herein by reference.
 
-'''show revision graphs in terminal windows
+'''command to view revision graphs from a shell
 
 This extension adds a --graph option to the incoming, outgoing and log
-commands. When this options is given, an ascii representation of the
+commands. When this options is given, an ASCII representation of the
 revision graph is also shown.
 '''
 
-import os
+import os, sys
 from mercurial.cmdutil import revrange, show_changeset
 from mercurial.commands import templateopts
 from mercurial.i18n import _
 from mercurial.node import nullrev
 from mercurial import bundlerepo, changegroup, cmdutil, commands, extensions
-from mercurial import hg, url, util
-
-def revisions(repo, start, stop):
-    """cset DAG generator yielding (rev, node, [parents]) tuples
+from mercurial import hg, url, util, graphmod
 
-    This generator function walks through the revision history from revision
-    start to revision stop (which must be less than or equal to start).
-    """
-    assert start >= stop
-    cur = start
-    while cur >= stop:
-        ctx = repo[cur]
-        parents = [p.rev() for p in ctx.parents() if p.rev() != nullrev]
-        parents.sort()
-        yield (ctx, parents)
-        cur -= 1
-
-def filerevs(repo, path, start, stop):
-    """file cset DAG generator yielding (rev, node, [parents]) tuples
+ASCIIDATA = 'ASC'
 
-    This generator function walks through the revision history of a single
-    file from revision start to revision stop (which must be less than or
-    equal to start).
-    """
-    assert start >= stop
-    filerev = len(repo.file(path)) - 1
-    while filerev >= 0:
-        fctx = repo.filectx(path, fileid=filerev)
-        parents = [f.linkrev() for f in fctx.parents() if f.path() == path]
-        parents.sort()
-        if fctx.rev() <= start:
-            yield (fctx, parents)
-        if fctx.rev() <= stop:
-            break
-        filerev -= 1
+def asciiformat(ui, repo, revdag, opts):
+    """formats a changelog DAG walk for ASCII output"""
+    showparents = [ctx.node() for ctx in repo[None].parents()]
+    displayer = show_changeset(ui, repo, opts, buffered=True)
+    for (id, type, ctx, parentids) in revdag:
+        if type != graphmod.CHANGESET:
+            continue
+        displayer.show(ctx)
+        lines = displayer.hunk.pop(ctx.rev()).split('\n')[:-1]
+        char = ctx.node() in showparents and '@' or 'o'
+        yield (id, ASCIIDATA, (char, lines), parentids)
 
-def grapher(nodes):
-    """grapher for asciigraph on a list of nodes and their parents
-
-    nodes must generate tuples (node, parents, char, lines) where
-     - parents must generate the parents of node, in sorted order,
-       and max length 2,
-     - char is the char to print as the node symbol, and
-     - lines are the lines to display next to the node.
-    """
+def asciiedges(nodes):
+    """adds edge info to changelog DAG walk suitable for ascii()"""
     seen = []
-    for node, parents, char, lines in nodes:
+    for node, type, data, parents in nodes:
         if node not in seen:
             seen.append(node)
         nodeidx = seen.index(node)
@@ -88,7 +61,7 @@
             edges.append((nodeidx, nodeidx + 1))
         nmorecols = len(nextseen) - ncols
         seen = nextseen
-        yield (char, lines, nodeidx, edges, ncols, nmorecols)
+        yield (nodeidx, type, data, edges, ncols, nmorecols)
 
 def fix_long_right_edges(edges):
     for (i, (start, end)) in enumerate(edges):
@@ -142,14 +115,16 @@
     line.extend(["|", " "] * (n_columns - ni - 1))
     return line
 
-def ascii(ui, grapher):
-    """prints an ASCII graph of the DAG returned by the grapher
+def ascii(ui, dag):
+    """prints an ASCII graph of the DAG
+
+    dag is a generator that emits tuples with the following elements:
 
-    grapher is a generator that emits tuples with the following elements:
-
-      - Character to use as node's symbol.
-      - List of lines to display as the node's text.
       - Column of the current node in the set of ongoing edges.
+      - Type indicator of node data == ASCIIDATA.
+      - Payload: (char, lines):
+        - Character to use as node's symbol.
+        - List of lines to display as the node's text.
       - Edges; a list of (col, next_col) indicating the edges between
         the current node and its parents.
       - Number of columns (ongoing edges) in the current revision.
@@ -160,7 +135,7 @@
     """
     prev_n_columns_diff = 0
     prev_node_index = 0
-    for (node_ch, node_lines, node_index, edges, n_columns, n_columns_diff) in grapher:
+    for (node_index, type, (node_ch, node_lines), edges, n_columns, n_columns_diff) in dag:
 
         assert -2 < n_columns_diff < 2
         if n_columns_diff == -1:
@@ -278,34 +253,19 @@
     if path:
         path = util.canonpath(repo.root, os.getcwd(), path)
     if path: # could be reset in canonpath
-        revdag = filerevs(repo, path, start, stop)
+        revdag = graphmod.filerevs(repo, path, start, stop)
     else:
-        revdag = revisions(repo, start, stop)
+        revdag = graphmod.revisions(repo, start, stop)
 
-    graphdag = graphabledag(ui, repo, revdag, opts)
-    ascii(ui, grapher(graphdag))
+    fmtdag = asciiformat(ui, repo, revdag, opts)
+    ascii(ui, asciiedges(fmtdag))
 
 def graphrevs(repo, nodes, opts):
-    include = set(nodes)
     limit = cmdutil.loglimit(opts)
-    count = 0
-    for node in reversed(nodes):
-        if count >= limit:
-            break
-        ctx = repo[node]
-        parents = [p.rev() for p in ctx.parents() if p.node() in include]
-        parents.sort()
-        yield (ctx, parents)
-        count += 1
-
-def graphabledag(ui, repo, revdag, opts):
-    showparents = [ctx.node() for ctx in repo[None].parents()]
-    displayer = show_changeset(ui, repo, opts, buffered=True)
-    for (ctx, parents) in revdag:
-        displayer.show(ctx)
-        lines = displayer.hunk.pop(ctx.rev()).split('\n')[:-1]
-        char = ctx.node() in showparents and '@' or 'o'
-        yield (ctx.rev(), parents, char, lines)
+    nodes.reverse()
+    if limit < sys.maxint:
+        nodes = nodes[:limit]
+    return graphmod.nodes(repo, nodes)
 
 def goutgoing(ui, repo, dest=None, **opts):
     """show the outgoing changesets alongside an ASCII revision graph
@@ -332,8 +292,8 @@
 
     o = repo.changelog.nodesbetween(o, revs)[0]
     revdag = graphrevs(repo, o, opts)
-    graphdag = graphabledag(ui, repo, revdag, opts)
-    ascii(ui, grapher(graphdag))
+    fmtdag = asciiformat(ui, repo, revdag, opts)
+    ascii(ui, asciiedges(fmtdag))
 
 def gincoming(ui, repo, source="default", **opts):
     """show the incoming changesets alongside an ASCII revision graph
@@ -381,8 +341,8 @@
 
         chlist = other.changelog.nodesbetween(incoming, revs)[0]
         revdag = graphrevs(other, chlist, opts)
-        graphdag = graphabledag(ui, repo, revdag, opts)
-        ascii(ui, grapher(graphdag))
+        fmtdag = asciiformat(ui, repo, revdag, opts)
+        ascii(ui, asciiedges(fmtdag))
 
     finally:
         if hasattr(other, 'close'):
--- a/hgext/hgcia.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/hgcia.py	Wed Jul 08 17:03:16 2009 -0700
@@ -1,7 +1,7 @@
 # Copyright (C) 2007-8 Brendan Cully <brendan@kublai.com>
 # Published under the GNU GPL
 
-"""CIA notification
+"""hooks for integrating with the CIA.vc notification service
 
 This is meant to be run as a changegroup or incoming hook.
 To configure it, set the following options in your hgrc:
@@ -16,7 +16,7 @@
 # Append a diffstat to the log message (optional)
 #diffstat = False
 # Template to use for log messages (optional)
-#template = {desc}\n{baseurl}/rev/{node}-- {diffstat}
+#template = {desc}\\n{baseurl}/rev/{node}-- {diffstat}
 # Style to use (optional)
 #style = foo
 # The URL of the CIA notification service (optional)
@@ -99,7 +99,7 @@
         return '\n'.join(msg)
 
     def diffstat(self):
-        class patchbuf:
+        class patchbuf(object):
             def __init__(self):
                 self.lines = []
                 # diffstat is stupid
--- a/hgext/hgk.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/hgk.py	Wed Jul 08 17:03:16 2009 -0700
@@ -5,29 +5,17 @@
 # This software may be used and distributed according to the terms of the
 # GNU General Public License version 2, incorporated herein by reference.
 
-'''browsing the repository in a graphical way
+'''browse the repository in a graphical way
 
 The hgk extension allows browsing the history of a repository in a
 graphical way. It requires Tcl/Tk version 8.4 or later. (Tcl/Tk is not
 distributed with Mercurial.)
 
 hgk consists of two parts: a Tcl script that does the displaying and
-querying of information, and an extension to mercurial named hgk.py,
+querying of information, and an extension to Mercurial named hgk.py,
 which provides hooks for hgk to get information. hgk can be found in
-the contrib directory, and hgk.py can be found in the hgext directory.
-
-To load the hgext.py extension, add it to your .hgrc file (you have to
-use your global $HOME/.hgrc file, not one in a repository). You can
-specify an absolute path:
-
-  [extensions]
-  hgk=/usr/local/lib/hgk.py
-
-Mercurial can also scan the default python library path for a file
-named 'hgk.py' if you set hgk empty:
-
-  [extensions]
-  hgk=
+the contrib directory, and the extension is shipped in the hgext
+repository, and needs to be enabled.
 
 The hg view command will launch the hgk Tcl script. For this command
 to work, hgk must be in your search path. Alternately, you can specify
@@ -96,7 +84,7 @@
             chunks = patch.diff(repo, node1, node2, match=m,
                                 opts=patch.diffopts(ui, {'git': True}))
             for chunk in chunks:
-                repo.ui.write(chunk)
+                ui.write(chunk)
         else:
             __difftree(repo, node1, node2, files=files)
         if not opts['stdin']:
@@ -188,7 +176,7 @@
             else:
                 i -= chunk
 
-            for x in xrange(0, chunk):
+            for x in xrange(chunk):
                 if i + x >= count:
                     l[chunk - x:] = [0] * (chunk - x)
                     break
@@ -221,27 +209,26 @@
 
     # figure out which commits they are asking for and which ones they
     # want us to stop on
-    for i in xrange(len(args)):
-        if args[i].startswith('^'):
-            s = repo.lookup(args[i][1:])
+    for i, arg in enumerate(args):
+        if arg.startswith('^'):
+            s = repo.lookup(arg[1:])
             stop_sha1.append(s)
             want_sha1.append(s)
-        elif args[i] != 'HEAD':
-            want_sha1.append(repo.lookup(args[i]))
+        elif arg != 'HEAD':
+            want_sha1.append(repo.lookup(arg))
 
     # calculate the graph for the supplied commits
-    for i in xrange(len(want_sha1)):
-        reachable.append({});
-        n = want_sha1[i];
+    for i, n in enumerate(want_sha1):
+        reachable.append(set());
         visit = [n];
-        reachable[i][n] = 1
+        reachable[i].add(n)
         while visit:
             n = visit.pop(0)
             if n in stop_sha1:
                 continue
             for p in repo.changelog.parents(n):
                 if p not in reachable[i]:
-                    reachable[i][p] = 1
+                    reachable[i].add(p)
                     visit.append(p)
                 if p in stop_sha1:
                     continue
@@ -344,7 +331,7 @@
     "debug-config":
         (config, [], _('hg debug-config')),
     "debug-merge-base":
-        (base, [], _('hg debug-merge-base node node')),
+        (base, [], _('hg debug-merge-base REV REV')),
     "debug-rev-parse":
         (revparse,
          [('', 'default', '', _('ignored'))],
@@ -355,5 +342,5 @@
           ('t', 'topo-order', None, _('topo-order')),
           ('p', 'parents', None, _('parents')),
           ('n', 'max-count', 0, _('max-count'))],
-         _('hg debug-rev-list [options] revs')),
+         _('hg debug-rev-list [OPTION]... REV...')),
 }
--- a/hgext/highlight/__init__.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/highlight/__init__.py	Wed Jul 08 17:03:16 2009 -0700
@@ -8,15 +8,10 @@
 # The original module was split in an interface and an implementation
 # file to defer pygments loading and speedup extension setup.
 
-"""syntax highlighting in hgweb, based on Pygments
-
-It depends on the pygments syntax highlighting library:
-http://pygments.org/
+"""syntax highlighting for hgweb (requires Pygments)
 
-To enable the extension add this to hgrc:
-
-[extensions]
-hgext.highlight =
+It depends on the Pygments syntax highlighting library:
+http://pygments.org/
 
 There is a single configuration option:
 
@@ -24,16 +19,14 @@
 pygments_style = <style>
 
 The default is 'colorful'.
-
--- Adam Hupp <adam@hupp.org>
 """
 
 import highlight
 from mercurial.hgweb import webcommands, webutil, common
-from mercurial import extensions
+from mercurial import extensions, encoding
 
 def filerevision_highlight(orig, web, tmpl, fctx):
-    mt = ''.join(tmpl('mimetype', encoding=web.encoding))
+    mt = ''.join(tmpl('mimetype', encoding=encoding.encoding))
     # only pygmentize for mimetype containing 'html' so we both match
     # 'text/html' and possibly 'application/xhtml+xml' in the future
     # so that we don't have to touch the extension when the mimetype
@@ -47,7 +40,7 @@
     return orig(web, tmpl, fctx)
 
 def annotate_highlight(orig, web, req, tmpl):
-    mt = ''.join(tmpl('mimetype', encoding=web.encoding))
+    mt = ''.join(tmpl('mimetype', encoding=encoding.encoding))
     if 'html' in mt:
         fctx = webutil.filectx(web.repo, req)
         style = web.config('web', 'pygments_style', 'colorful')
--- a/hgext/highlight/highlight.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/highlight/highlight.py	Wed Jul 08 17:03:16 2009 -0700
@@ -10,9 +10,7 @@
 
 from mercurial import demandimport
 demandimport.ignore.extend(['pkgutil', 'pkg_resources', '__main__',])
-
 from mercurial import util, encoding
-from mercurial.templatefilters import filters
 
 from pygments import highlight
 from pygments.util import ClassNotFound
@@ -55,7 +53,7 @@
     colorized = colorized[colorized.find('<pre>')+5:]
     coloriter = iter(colorized.splitlines())
 
-    filters['colorize'] = lambda x: coloriter.next()
+    tmpl.filters['colorize'] = lambda x: coloriter.next()
 
     oldl = tmpl.cache[field]
     newl = oldl.replace('line|escape', 'line|colorize')
--- a/hgext/inotify/__init__.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/inotify/__init__.py	Wed Jul 08 17:03:16 2009 -0700
@@ -6,15 +6,15 @@
 # This software may be used and distributed according to the terms of the
 # GNU General Public License version 2, incorporated herein by reference.
 
-'''inotify-based status acceleration for Linux systems
-'''
+'''accelerate status report using Linux's inotify service'''
 
 # todo: socket permissions
 
 from mercurial.i18n import _
 from mercurial import cmdutil, util
-import client, errno, os, server, socket
+import server
 from weakref import proxy
+from client import client, QueryFailed
 
 def serve(ui, repo, **opts):
     '''start an inotify server for this repository'''
@@ -22,10 +22,10 @@
     if timeout:
         timeout = float(timeout) * 1e3
 
-    class service:
+    class service(object):
         def init(self):
             try:
-                self.master = server.Master(ui, repo, timeout)
+                self.master = server.master(ui, repo, timeout)
             except server.AlreadyStartedException, inst:
                 raise util.Abort(str(inst))
 
@@ -36,7 +36,21 @@
                 self.master.shutdown()
 
     service = service()
-    cmdutil.service(opts, initfn=service.init, runfn=service.run)
+    logfile = ui.config('inotify', 'log')
+    cmdutil.service(opts, initfn=service.init, runfn=service.run,
+                    logfile=logfile)
+
+def debuginotify(ui, repo, **opts):
+    '''debugging information for inotify extension
+
+    Prints the list of directories being watched by the inotify server.
+    '''
+    cli = client(ui, repo)
+    response = cli.debugquery()
+
+    ui.write(_('directories being watched:\n'))
+    for path in response:
+        ui.write(('  %s/\n') % path)
 
 def reposetup(ui, repo):
     if not hasattr(repo, 'dirstate'):
@@ -46,19 +60,28 @@
     repo = proxy(repo)
 
     class inotifydirstate(repo.dirstate.__class__):
-        # Set to True if we're the inotify server, so we don't attempt
-        # to recurse.
-        inotifyserver = False
+
+        # We'll set this to false after an unsuccessful attempt so that
+        # next calls of status() within the same instance don't try again
+        # to start an inotify server if it won't start.
+        _inotifyon = True
 
         def status(self, match, ignored, clean, unknown=True):
             files = match.files()
             if '.' in files:
                 files = []
-            try:
-                if not ignored and not self.inotifyserver:
-                    result = client.query(ui, repo, files, match, False,
-                                          clean, unknown)
-                    if result and ui.config('inotify', 'debug'):
+            if self._inotifyon and not ignored:
+                cli = client(ui, repo)
+                try:
+                    result = cli.statusquery(files, match, False,
+                                            clean, unknown)
+                except QueryFailed, instr:
+                    ui.debug(str(instr))
+                    # don't retry within the same hg instance
+                    inotifydirstate._inotifyon = False
+                    pass
+                else:
+                    if ui.config('inotify', 'debug'):
                         r2 = super(inotifydirstate, self).status(
                             match, False, clean, unknown)
                         for c,a,b in zip('LMARDUIC', result, r2):
@@ -69,57 +92,20 @@
                                 if f not in a:
                                     ui.warn('*** inotify: %s -%s\n' % (c, f))
                         result = r2
-
-                    if result is not None:
-                        return result
-            except (OSError, socket.error), err:
-                autostart = ui.configbool('inotify', 'autostart', True)
-
-                if err[0] == errno.ECONNREFUSED:
-                    ui.warn(_('(found dead inotify server socket; '
-                                   'removing it)\n'))
-                    os.unlink(repo.join('inotify.sock'))
-                if err[0] in (errno.ECONNREFUSED, errno.ENOENT) and autostart:
-                    ui.debug(_('(starting inotify server)\n'))
-                    try:
-                        try:
-                            server.start(ui, repo)
-                        except server.AlreadyStartedException, inst:
-                            # another process may have started its own
-                            # inotify server while this one was starting.
-                            ui.debug(str(inst))
-                    except Exception, inst:
-                        ui.warn(_('could not start inotify server: '
-                                       '%s\n') % inst)
-                    else:
-                        # server is started, send query again
-                        try:
-                            return client.query(ui, repo, files, match,
-                                         ignored, clean, unknown)
-                        except socket.error, err:
-                            ui.warn(_('could not talk to new inotify '
-                                           'server: %s\n') % err[-1])
-                elif err[0] in (errno.ECONNREFUSED, errno.ENOENT):
-                    # silently ignore normal errors if autostart is False
-                    ui.debug(_('(inotify server not running)\n'))
-                else:
-                    ui.warn(_('failed to contact inotify server: %s\n')
-                             % err[-1])
-                ui.traceback()
-                # replace by old status function
-                self.status = super(inotifydirstate, self).status
-
+                    return result
             return super(inotifydirstate, self).status(
                 match, ignored, clean, unknown)
 
     repo.dirstate.__class__ = inotifydirstate
 
 cmdtable = {
+    'debuginotify':
+        (debuginotify, [], ('hg debuginotify')),
     '^inserve':
-    (serve,
-     [('d', 'daemon', None, _('run server in background')),
-      ('', 'daemon-pipefds', '', _('used internally by daemon mode')),
-      ('t', 'idle-timeout', '', _('minutes to sit idle before exiting')),
-      ('', 'pid-file', '', _('name of file to write process ID to'))],
-     _('hg inserve [OPT]...')),
+        (serve,
+         [('d', 'daemon', None, _('run server in background')),
+          ('', 'daemon-pipefds', '', _('used internally by daemon mode')),
+          ('t', 'idle-timeout', '', _('minutes to sit idle before exiting')),
+          ('', 'pid-file', '', _('name of file to write process ID to'))],
+         _('hg inserve [OPTION]...')),
     }
--- a/hgext/inotify/client.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/inotify/client.py	Wed Jul 08 17:03:16 2009 -0700
@@ -2,60 +2,158 @@
 #
 # 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.
 
 from mercurial.i18n import _
-import common
-import os, socket, struct
+import common, server
+import errno, os, socket, struct
+
+class QueryFailed(Exception): pass
+
+def start_server(function):
+    """
+    Decorator.
+    Tries to call function, if it fails, try to (re)start inotify server.
+    Raise QueryFailed if something went wrong
+    """
+    def decorated_function(self, *args):
+        result = None
+        try:
+            return function(self, *args)
+        except (OSError, socket.error), err:
+            autostart = self.ui.configbool('inotify', 'autostart', True)
 
-def query(ui, repo, names, match, ignored, clean, unknown=True):
-    sock = socket.socket(socket.AF_UNIX)
-    sockpath = repo.join('inotify.sock')
-    try:
-        sock.connect(sockpath)
-    except socket.error, err:
-        if err[0] == "AF_UNIX path too long":
-            sockpath = os.readlink(sockpath)
-            sock.connect(sockpath)
-        else:
-            raise
+            if err[0] == errno.ECONNREFUSED:
+                self.ui.warn(_('(found dead inotify server socket; '
+                               'removing it)\n'))
+                os.unlink(self.repo.join('inotify.sock'))
+            if err[0] in (errno.ECONNREFUSED, errno.ENOENT) and autostart:
+                self.ui.debug(_('(starting inotify server)\n'))
+                try:
+                    try:
+                        server.start(self.ui, self.repo)
+                    except server.AlreadyStartedException, inst:
+                        # another process may have started its own
+                        # inotify server while this one was starting.
+                        self.ui.debug(str(inst))
+                except Exception, inst:
+                    self.ui.warn(_('could not start inotify server: '
+                                   '%s\n') % inst)
+                else:
+                    try:
+                        return function(self, *args)
+                    except socket.error, err:
+                        self.ui.warn(_('could not talk to new inotify '
+                                       'server: %s\n') % err[-1])
+            elif err[0] in (errno.ECONNREFUSED, errno.ENOENT):
+                # silently ignore normal errors if autostart is False
+                self.ui.debug(_('(inotify server not running)\n'))
+            else:
+                self.ui.warn(_('failed to contact inotify server: %s\n')
+                         % err[-1])
 
-    def genquery():
-        for n in names:
-            yield n
-        states = 'almrx!'
-        if ignored:
-            raise ValueError('this is insanity')
-        if clean: states += 'c'
-        if unknown: states += '?'
-        yield states
+        self.ui.traceback()
+        raise QueryFailed('inotify query failed')
+
+    return decorated_function
+
+
+class client(object):
+    def __init__(self, ui, repo):
+        self.ui = ui
+        self.repo = repo
+        self.sock = socket.socket(socket.AF_UNIX)
+
+    def _connect(self):
+        sockpath = self.repo.join('inotify.sock')
+        try:
+            self.sock.connect(sockpath)
+        except socket.error, err:
+            if err[0] == "AF_UNIX path too long":
+                sockpath = os.readlink(sockpath)
+                self.sock.connect(sockpath)
+            else:
+                raise
+
+    def _send(self, type, data):
+        """Sends protocol version number, and the data"""
+        self.sock.sendall(chr(common.version) + type + data)
 
-    req = '\0'.join(genquery())
+        self.sock.shutdown(socket.SHUT_WR)
 
-    sock.sendall(chr(common.version))
-    sock.sendall(req)
-    sock.shutdown(socket.SHUT_WR)
+    def _receive(self, type):
+        """
+        Read data, check version number, extract headers,
+        and returns a tuple (data descriptor, header)
+        Raises QueryFailed on error
+        """
+        cs = common.recvcs(self.sock)
+        try:
+            version = ord(cs.read(1))
+        except TypeError:
+            # empty answer, assume the server crashed
+            self.ui.warn(_('received empty answer from inotify server'))
+            raise QueryFailed('server crashed')
 
-    cs = common.recvcs(sock)
-    version = ord(cs.read(1))
+        if version != common.version:
+            self.ui.warn(_('(inotify: received response from incompatible '
+                      'server version %d)\n') % version)
+            raise QueryFailed('incompatible server version')
 
-    if version != common.version:
-        ui.warn(_('(inotify: received response from incompatible server '
-                  'version %d)\n') % version)
-        return None
+        readtype = cs.read(4)
+        if readtype != type:
+            self.ui.warn(_('(inotify: received \'%s\' response when expecting'
+                       ' \'%s\')\n') % (readtype, type))
+            raise QueryFailed('wrong response type')
+
+        hdrfmt = common.resphdrfmts[type]
+        hdrsize = common.resphdrsizes[type]
+        try:
+            resphdr = struct.unpack(hdrfmt, cs.read(hdrsize))
+        except struct.error:
+            raise QueryFailed('unable to retrieve query response headers')
+
+        return cs, resphdr
 
-    try:
-        resphdr = struct.unpack(common.resphdrfmt, cs.read(common.resphdrsize))
-    except struct.error:
-        return None
+    def query(self, type, req):
+        self._connect()
+
+        self._send(type, req)
+
+        return self._receive(type)
+
+    @start_server
+    def statusquery(self, names, match, ignored, clean, unknown=True):
+
+        def genquery():
+            for n in names:
+                yield n
+            states = 'almrx!'
+            if ignored:
+                raise ValueError('this is insanity')
+            if clean: states += 'c'
+            if unknown: states += '?'
+            yield states
 
-    def readnames(nbytes):
-        if nbytes:
-            names = cs.read(nbytes)
-            if names:
-                return filter(match, names.split('\0'))
-        return []
+        req = '\0'.join(genquery())
+
+        cs, resphdr = self.query('STAT', req)
 
-    return map(readnames, resphdr)
+        def readnames(nbytes):
+            if nbytes:
+                names = cs.read(nbytes)
+                if names:
+                    return filter(match, names.split('\0'))
+            return []
+        return map(readnames, resphdr)
+
+    @start_server
+    def debugquery(self):
+        cs, resphdr = self.query('DBUG', '')
+
+        nbytes = resphdr[0]
+        names = cs.read(nbytes)
+        return names.split('\0')
--- a/hgext/inotify/common.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/inotify/common.py	Wed Jul 08 17:03:16 2009 -0700
@@ -8,10 +8,35 @@
 
 import cStringIO, socket, struct
 
-version = 1
+"""
+  Protocol between inotify clients and server:
+
+  Client sending query:
+  1) send protocol version number
+  2) send query type (string, 4 letters long)
+  3) send query parameters:
+     - For STAT, N+1 \0-separated strings:
+        1) N different names that need checking
+        2) 1 string containing all the status types to match
+     - No parameter needed for DBUG
 
-resphdrfmt = '>llllllll'
-resphdrsize = struct.calcsize(resphdrfmt)
+  Server sending query answer:
+  1) send protocol version number
+  2) send query type
+  3) send struct.pack'ed headers describing the length of the content:
+      e.g. for STAT, receive 8 integers describing the length of the
+      8 \0-separated string lists ( one list for each lmar!?ic status type )
+
+"""
+
+version = 2
+
+resphdrfmts = {
+    'STAT': '>llllllll', # status requests
+    'DBUG': '>l'         # debugging queries
+}
+resphdrsizes = dict((k, struct.calcsize(v))
+                    for k, v in resphdrfmts.iteritems())
 
 def recvcs(sock):
     cs = cStringIO.StringIO()
--- a/hgext/inotify/linux/watcher.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/inotify/linux/watcher.py	Wed Jul 08 17:03:16 2009 -0700
@@ -11,12 +11,12 @@
 The inotify subsystem provides an efficient mechanism for file status
 monitoring and change notification.
 
-The Watcher class hides the low-level details of the inotify
+The watcher class hides the low-level details of the inotify
 interface, and provides a Pythonic wrapper around it.  It generates
 events that provide somewhat more information than raw inotify makes
 available.
 
-The AutoWatcher class is more useful, as it automatically watches
+The autowatcher class is more useful, as it automatically watches
 newly-created directories on your behalf.'''
 
 __author__ = "Bryan O'Sullivan <bos@serpentine.com>"
@@ -29,7 +29,7 @@
 import termios
 
 
-class Event(object):
+class event(object):
     '''Derived inotify event class.
 
     The following fields are available:
@@ -72,7 +72,7 @@
 
     def __repr__(self):
         r = repr(self.raw)
-        return 'Event(path=' + repr(self.path) + ', ' + r[r.find('(')+1:]
+        return 'event(path=' + repr(self.path) + ', ' + r[r.find('(')+1:]
 
 
 _event_props = {
@@ -100,12 +100,12 @@
         return self.mask & mask
     getter.__name__ = k
     getter.__doc__ = v
-    setattr(Event, k, property(getter, doc=v))
+    setattr(event, k, property(getter, doc=v))
 
 del _event_props
 
 
-class Watcher(object):
+class watcher(object):
     '''Provide a Pythonic interface to the low-level inotify API.
 
     Also adds derived information to each event that is not available
@@ -177,7 +177,7 @@
 
         events = []
         for evt in inotify.read(self.fd, bufsize):
-            events.append(Event(evt, self._wds[evt.wd][0]))
+            events.append(event(evt, self._wds[evt.wd][0]))
             if evt.mask & inotify.IN_IGNORED:
                 self._remove(evt.wd)
             elif evt.mask & inotify.IN_UNMOUNT:
@@ -265,8 +265,8 @@
         return [w for w in self.add_iter(path, mask, onerror)]
 
 
-class AutoWatcher(Watcher):
-    '''Watcher class that automatically watches newly created directories.'''
+class autowatcher(watcher):
+    '''watcher class that automatically watches newly created directories.'''
 
     __slots__ = (
         'addfilter',
@@ -284,13 +284,13 @@
         True, the directory will be watched if it still exists,
         otherwise, it will beb skipped.'''
 
-        super(AutoWatcher, self).__init__()
+        super(autowatcher, self).__init__()
         self.addfilter = addfilter
 
     _dir_create_mask = inotify.IN_ISDIR | inotify.IN_CREATE
 
     def read(self, bufsize=None):
-        events = super(AutoWatcher, self).read(bufsize)
+        events = super(autowatcher, self).read(bufsize)
         for evt in events:
             if evt.mask & self._dir_create_mask == self._dir_create_mask:
                 if self.addfilter is None or self.addfilter(evt):
@@ -305,7 +305,7 @@
         return events
 
 
-class Threshold(object):
+class threshold(object):
     '''Class that indicates whether a file descriptor has reached a
     threshold of readable bytes available.
 
--- a/hgext/inotify/server.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/inotify/server.py	Wed Jul 08 17:03:16 2009 -0700
@@ -26,6 +26,12 @@
         return a + '/' + b
     return b
 
+def split(path):
+    c = path.rfind('/')
+    if c == -1:
+        return '', path
+    return path[:c], path[c+1:]
+
 walk_ignored_errors = (errno.ENOENT, errno.ENAMETOOLONG)
 
 def walkrepodirs(repo):
@@ -73,23 +79,22 @@
                             return
                     else:
                         dirs.append(name)
+                        path = join(root, name)
+                        if repo.dirstate._ignore(path):
+                            continue
+                        for result in walkit(path, False):
+                            yield result
                 elif kind in (stat.S_IFREG, stat.S_IFLNK):
                     files.append(name)
             yield fullpath, dirs, files
 
-            for subdir in dirs:
-                path = join(root, subdir)
-                if repo.dirstate._ignore(path):
-                    continue
-                for result in walkit(path, False):
-                    yield result
         except OSError, err:
             if err.errno not in walk_ignored_errors:
                 raise
 
     return walkit(root, root == '')
 
-def _explain_watch_limit(ui, repo, count):
+def _explain_watch_limit(ui, repo):
     path = '/proc/sys/fs/inotify/max_user_watches'
     try:
         limit = int(file(path).read())
@@ -114,50 +119,130 @@
     raise util.Abort(_('cannot watch %s until inotify watch limit is raised')
                      % repo.root)
 
-class RepoWatcher(object):
+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(pollable):
+    """
+    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, repo, master):
+    def __init__(self, ui, repo):
         self.ui = ui
         self.repo = repo
         self.wprefix = self.repo.wjoin('')
-        self.timeout = None
-        self.master = master
-        self.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)
         try:
-            self.watcher = watcher.Watcher()
+            self.watcher = watcher.watcher()
         except OSError, err:
             raise util.Abort(_('inotify service not available: %s') %
                              err.strerror)
-        self.threshold = watcher.Threshold(self.watcher)
-        self.registered = True
+        self.threshold = watcher.threshold(self.watcher)
         self.fileno = self.watcher.fileno
 
-        self.repo.dirstate.__class__.inotifyserver = True
-
         self.tree = {}
         self.statcache = {}
         self.statustrees = dict([(s, {}) for s in self.statuskeys])
 
-        self.watches = 0
         self.last_event = None
 
-        self.eventq = {}
-        self.deferred = 0
+        self.lastevent = {}
+
+        self.register(timeout=None)
 
         self.ds_info = self.dirstate_info()
+        self.handle_timeout()
         self.scan()
 
     def event_time(self):
@@ -191,32 +276,22 @@
                 self.ui.note(_('watching %r\n') % path[len(self.wprefix):])
             try:
                 self.watcher.add(path, mask)
-                self.watches += 1
             except OSError, err:
                 if err.errno in (errno.ENOENT, errno.ENOTDIR):
                     return
                 if err.errno != errno.ENOSPC:
                     raise
-                _explain_watch_limit(self.ui, self.repo, self.watches)
+                _explain_watch_limit(self.ui, self.repo)
 
     def setup(self):
         self.ui.note(_('watching directories under %r\n') % self.repo.root)
         self.add_watch(self.repo.path, inotify.IN_DELETE)
         self.check_dirstate()
 
-    def wpath(self, evt):
-        path = evt.fullpath
-        if path == self.repo.root:
-            return ''
-        if path.startswith(self.wprefix):
-            return path[len(self.wprefix):]
-        raise 'wtf? ' + path
-
     def dir(self, tree, path):
         if path:
             for name in path.split('/'):
-                tree.setdefault(name, {})
-                tree = tree[name]
+                tree = tree.setdefault(name, {})
         return tree
 
     def lookup(self, path, tree):
@@ -230,12 +305,6 @@
                 return 'd'
         return tree
 
-    def split(self, path):
-        c = path.rfind('/')
-        if c == -1:
-            return '', path
-        return path[:c], path[c+1:]
-
     def filestatus(self, fn, st):
         try:
             type_, mode, size, time = self.repo.dirstate._map[fn][:4]
@@ -254,49 +323,67 @@
             return 'i'
         return type_
 
-    def updatestatus(self, wfn, st=None, status=None):
-        if st:
-            status = self.filestatus(wfn, st)
+    def updatefile(self, wfn, osstat):
+        '''
+        update the file entry of an existing file.
+
+        osstat: (mode, size, time) tuple, as returned by os.lstat(wfn)
+        '''
+
+        self._updatestatus(wfn, self.filestatus(wfn, osstat))
+
+    def deletefile(self, wfn, oldstatus):
+        '''
+        update the entry of a file which has been deleted.
+
+        oldstatus: char in statuskeys, status of the file before deletion
+        '''
+        if oldstatus == 'r':
+            newstatus = 'r'
+        elif oldstatus in 'almn':
+            newstatus = '!'
         else:
-            self.statcache.pop(wfn, None)
-        root, fn = self.split(wfn)
+            newstatus = None
+
+        self.statcache.pop(wfn, None)
+        self._updatestatus(wfn, newstatus)
+
+    def _updatestatus(self, wfn, newstatus):
+        '''
+        Update the stored status of a file or directory.
+
+        newstatus: - char in (statuskeys + 'ni'), new status to apply.
+                   - or None, to stop tracking wfn
+        '''
+        root, fn = split(wfn)
         d = self.dir(self.tree, root)
+
         oldstatus = d.get(fn)
-        isdir = False
-        if oldstatus:
-            try:
-                if not status:
-                    if oldstatus in 'almn':
-                        status = '!'
-                    elif oldstatus == 'r':
-                        status = 'r'
-            except TypeError:
-                # oldstatus may be a dict left behind by a deleted
-                # directory
-                isdir = True
-            else:
-                if oldstatus in self.statuskeys and oldstatus != status:
-                    del self.dir(self.statustrees[oldstatus], root)[fn]
-        if self.ui.debugflag and oldstatus != status:
+        # oldstatus can be either:
+        # - None : fn is new
+        # - a char in statuskeys: fn is a (tracked) file
+        # - a dict: fn is a directory
+        isdir = isinstance(oldstatus, dict)
+
+        if self.ui.debugflag and oldstatus != newstatus:
             if isdir:
                 self.ui.note(_('status: %r dir(%d) -> %s\n') %
-                             (wfn, len(oldstatus), status))
+                             (wfn, len(oldstatus), newstatus))
             else:
                 self.ui.note(_('status: %r %s -> %s\n') %
-                             (wfn, oldstatus, status))
+                             (wfn, oldstatus, newstatus))
         if not isdir:
-            if status and status != 'i':
-                d[fn] = status
-                if status in self.statuskeys:
-                    dd = self.dir(self.statustrees[status], root)
-                    if oldstatus != status or fn not in dd:
-                        dd[fn] = status
+            if oldstatus and oldstatus in self.statuskeys \
+                and oldstatus != newstatus:
+                del self.dir(self.statustrees[oldstatus], root)[fn]
+            if newstatus and newstatus != 'i':
+                d[fn] = newstatus
+                if newstatus in self.statuskeys:
+                    dd = self.dir(self.statustrees[newstatus], root)
+                    if oldstatus != newstatus or fn not in dd:
+                        dd[fn] = newstatus
             else:
                 d.pop(fn, None)
-        elif not status:
-            # a directory is being removed, check its contents
-            for subfile, b in oldstatus.copy().iteritems():
-                self.updatestatus(wfn + '/' + subfile, None)
 
 
     def check_deleted(self, key):
@@ -307,22 +394,20 @@
             if wfn not in self.repo.dirstate:
                 nuke.append(wfn)
         for wfn in nuke:
-            root, fn = self.split(wfn)
+            root, fn = split(wfn)
             del self.dir(self.statustrees[key], root)[fn]
             del self.dir(self.tree, root)[fn]
 
     def scan(self, topdir=''):
-        self.handle_timeout()
         ds = self.repo.dirstate._map.copy()
         self.add_watch(join(self.repo.root, topdir), self.mask)
         for root, dirs, files in walk(self.repo, topdir):
             for d in dirs:
                 self.add_watch(join(root, d), self.mask)
             wroot = root[len(self.wprefix):]
-            d = self.dir(self.tree, wroot)
             for fn in files:
                 wfn = join(wroot, fn)
-                self.updatestatus(wfn, self.getstat(wfn))
+                self.updatefile(wfn, self.getstat(wfn))
                 ds.pop(wfn, None)
         wtopdir = topdir
         if wtopdir and wtopdir[-1] != '/':
@@ -334,9 +419,9 @@
                 st = self.stat(wfn)
             except OSError:
                 status = state[0]
-                self.updatestatus(wfn, None, status=status)
+                self.deletefile(wfn, status)
             else:
-                self.updatestatus(wfn, st)
+                self.updatefile(wfn, st)
         self.check_deleted('!')
         self.check_deleted('r')
 
@@ -349,6 +434,7 @@
             self.last_event = None
         self.ui.note(_('%s dirstate reload\n') % self.event_time())
         self.repo.dirstate.invalidate()
+        self.handle_timeout()
         self.scan()
         self.ui.note(_('%s end dirstate reload\n') % self.event_time())
 
@@ -378,6 +464,7 @@
         if '_ignore' in self.repo.dirstate.__dict__:
             delattr(self.repo.dirstate, '_ignore')
             self.ui.note(_('rescanning due to .hgignore change\n'))
+            self.handle_timeout()
             self.scan()
 
     def getstat(self, wpath):
@@ -400,16 +487,18 @@
             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.updatestatus(wpath, st)
+                self.updatefile(wpath, st)
         except OSError:
             pass
 
+    @eventaction('m')
     def modified(self, wpath):
         if wpath == '.hgignore':
             self.update_hgignore()
@@ -417,10 +506,11 @@
             st = self.stat(wpath)
             if stat.S_ISREG(st[0]):
                 if self.repo.dirstate[wpath] in 'lmn':
-                    self.updatestatus(wpath, st)
+                    self.updatefile(wpath, st)
         except OSError:
             pass
 
+    @eventaction('d')
     def deleted(self, wpath):
         if wpath == '.hgignore':
             self.update_hgignore()
@@ -429,26 +519,7 @@
                 self.check_dirstate()
             return
 
-        self.updatestatus(wpath, None)
-
-    def schedule_work(self, wpath, evt):
-        self.eventq.setdefault(wpath, [])
-        prev = self.eventq[wpath]
-        try:
-            if prev and evt == 'm' and prev[-1] in 'cm':
-                return
-            self.eventq[wpath].append(evt)
-        finally:
-            self.deferred += 1
-            self.timeout = 250
-
-    def deferred_event(self, wpath, evt):
-        if evt == 'c':
-            self.created(wpath)
-        elif evt == 'm':
-            self.modified(wpath)
-        elif evt == 'd':
-            self.deleted(wpath)
+        self.deletefile(wpath, self.repo.dirstate[wpath])
 
     def process_create(self, wpath, evt):
         if self.ui.debugflag:
@@ -458,7 +529,7 @@
         if evt.mask & inotify.IN_ISDIR:
             self.scan(wpath)
         else:
-            self.schedule_work(wpath, 'c')
+            self.created(wpath)
 
     def process_delete(self, wpath, evt):
         if self.ui.debugflag:
@@ -466,8 +537,12 @@
                          (self.event_time(), wpath))
 
         if evt.mask & inotify.IN_ISDIR:
+            tree = self.dir(self.tree, wpath).copy()
+            for wfn, ignore in self.walk('?', tree):
+                self.deletefile(join(wpath, wfn), '?')
             self.scan(wpath)
-        self.schedule_work(wpath, 'd')
+        else:
+            self.deleted(wpath)
 
     def process_modify(self, wpath, evt):
         if self.ui.debugflag:
@@ -475,14 +550,14 @@
                          (self.event_time(), wpath))
 
         if not (evt.mask & inotify.IN_ISDIR):
-            self.schedule_work(wpath, 'm')
+            self.modified(wpath)
 
     def process_unmount(self, evt):
         self.ui.warn(_('filesystem containing %s was unmounted\n') %
                      evt.fullpath)
         sys.exit(0)
 
-    def handle_event(self, fd, event):
+    def handle_pollevents(self, events):
         if self.ui.debugflag:
             self.ui.note(_('%s readable: %d bytes\n') %
                          (self.event_time(), self.threshold.readable()))
@@ -491,8 +566,7 @@
                 if self.ui.debugflag:
                     self.ui.note(_('%s below threshold - unhooking\n') %
                                  (self.event_time()))
-                self.master.poll.unregister(fd)
-                self.registered = False
+                self.unregister()
                 self.timeout = 250
         else:
             self.read_events()
@@ -503,7 +577,9 @@
             self.ui.note(_('%s reading %d events\n') %
                          (self.event_time(), len(events)))
         for evt in events:
-            wpath = self.wpath(evt)
+            assert evt.fullpath.startswith(self.wprefix)
+            wpath = evt.fullpath[len(self.wprefix):]
+
             if evt.mask & inotify.IN_UNMOUNT:
                 self.process_unmount(wpath, evt)
             elif evt.mask & (inotify.IN_MODIFY | inotify.IN_ATTRIB):
@@ -514,38 +590,36 @@
             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.master.poll.register(self, select.POLLIN)
-            self.registered = True
+            self.register(timeout=None)
 
-        if self.eventq:
-            if self.ui.debugflag:
-                self.ui.note(_('%s processing %d deferred events as %d\n') %
-                             (self.event_time(), self.deferred,
-                              len(self.eventq)))
-            for wpath, evts in sorted(self.eventq.iteritems()):
-                for evt in evts:
-                    self.deferred_event(wpath, evt)
-            self.eventq.clear()
-            self.deferred = 0
         self.timeout = None
 
     def shutdown(self):
         self.watcher.close()
 
-class Server(object):
-    poll_events = select.POLLIN
+    def debug(self):
+        """
+        Returns a sorted list of relatives paths currently watched,
+        for debugging purposes.
+        """
+        return sorted(tuple[0][len(self.wprefix):] for tuple in self.watcher)
 
+class server(pollable):
+    """
+    Listens for client queries on unix socket inotify.sock
+    """
     def __init__(self, ui, repo, repowatcher, timeout):
         self.ui = ui
         self.repo = repo
         self.repowatcher = repowatcher
-        self.timeout = timeout
         self.sock = socket.socket(socket.AF_UNIX)
         self.sockpath = self.repo.join('inotify.sock')
         self.realsockpath = None
@@ -575,23 +649,12 @@
                 raise
         self.sock.listen(5)
         self.fileno = self.sock.fileno
+        self.register(timeout=timeout)
 
     def handle_timeout(self):
         pass
 
-    def handle_event(self, fd, event):
-        sock, addr = self.sock.accept()
-
-        cs = common.recvcs(sock)
-        version = ord(cs.read(1))
-
-        sock.sendall(chr(common.version))
-
-        if version != common.version:
-            self.ui.warn(_('received query from incompatible client '
-                           'version %d\n') % version)
-            return
-
+    def answer_stat_query(self, cs):
         names = cs.read().split('\0')
 
         states = names.pop()
@@ -619,7 +682,7 @@
                         for f, s in self.repowatcher.walk(states, l, fn):
                             yield f
 
-        results = ['\0'.join(r) for r in [
+        return ['\0'.join(r) for r in [
             genresult('l', self.repowatcher.statustrees['l']),
             genresult('m', self.repowatcher.statustrees['m']),
             genresult('a', self.repowatcher.statustrees['a']),
@@ -632,10 +695,46 @@
             'c' in states and genresult('n', self.repowatcher.tree) or [],
             ]]
 
+    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):
+        sock, addr = self.sock.accept()
+
+        cs = common.recvcs(sock)
+        version = ord(cs.read(1))
+
+        if version != common.version:
+            self.ui.warn(_('received query from incompatible client '
+                           'version %d\n') % version)
+            try:
+                # try to send back our version to the client
+                # this way, the client too is informed of the mismatch
+                sock.sendall(chr(common.version))
+            except:
+                pass
+            return
+
+        type = cs.read(4)
+
+        if type == 'STAT':
+            results = self.answer_stat_query(cs)
+        elif type == 'DBUG':
+            results = self.answer_dbug_query()
+        else:
+            self.ui.warn(_('unrecognized query type: %s\n') % type)
+            return
+
         try:
             try:
-                sock.sendall(struct.pack(common.resphdrfmt,
-                                         *map(len, results)))
+                v = chr(common.version)
+
+                sock.sendall(v + type + struct.pack(common.resphdrfmts[type],
+                                            *map(len, results)))
                 sock.sendall(''.join(results))
             finally:
                 sock.shutdown(socket.SHUT_WR)
@@ -654,24 +753,15 @@
             if err.errno != errno.ENOENT:
                 raise
 
-class Master(object):
+class master(object):
     def __init__(self, ui, repo, timeout=None):
         self.ui = ui
         self.repo = repo
-        self.poll = select.poll()
-        self.repowatcher = RepoWatcher(ui, repo, self)
-        self.server = Server(ui, repo, self.repowatcher, timeout)
-        self.table = {}
-        for obj in (self.repowatcher, self.server):
-            fd = obj.fileno()
-            self.table[fd] = obj
-            self.poll.register(fd, obj.poll_events)
-
-    def register(self, fd, mask):
-        self.poll.register(fd, mask)
+        self.repowatcher = repowatcher(ui, repo)
+        self.server = server(ui, repo, self.repowatcher, timeout)
 
     def shutdown(self):
-        for obj in self.table.itervalues():
+        for obj in pollable.instances.itervalues():
             obj.shutdown()
 
     def run(self):
@@ -679,28 +769,7 @@
         self.ui.note(_('finished setup\n'))
         if os.getenv('TIME_STARTUP'):
             sys.exit(0)
-        while True:
-            timeout = None
-            timeobj = None
-            for obj in self.table.itervalues():
-                if obj.timeout is not None and (timeout is None or obj.timeout < timeout):
-                    timeout, timeobj = obj.timeout, obj
-            try:
-                if self.ui.debugflag:
-                    if timeout is None:
-                        self.ui.note(_('polling: no timeout\n'))
-                    else:
-                        self.ui.note(_('polling: %sms timeout\n') % timeout)
-                events = self.poll.poll(timeout)
-            except select.error, err:
-                if err[0] == errno.EINTR:
-                    continue
-                raise
-            if events:
-                for fd, event in events:
-                    self.table[fd].handle_event(fd, event)
-            elif timeobj:
-                timeobj.handle_timeout()
+        pollable.run()
 
 def start(ui, repo):
     def closefds(ignore):
@@ -723,7 +792,7 @@
             except OSError:
                 pass
 
-    m = Master(ui, repo)
+    m = master(ui, repo)
     sys.stdout.flush()
     sys.stderr.flush()
 
@@ -731,7 +800,7 @@
     if pid:
         return pid
 
-    closefds([m.server.fileno(), m.repowatcher.fileno()])
+    closefds(pollable.instances.keys())
     os.setsid()
 
     fd = os.open('/dev/null', os.O_RDONLY)
--- a/hgext/interhg.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/interhg.py	Wed Jul 08 17:03:16 2009 -0700
@@ -7,23 +7,21 @@
 #
 # This software may be used and distributed according to the terms of the
 # GNU General Public License version 2, incorporated herein by reference.
-#
-# The `interhg' Mercurial extension allows you to change changelog and
-# summary text just like InterWiki way.
-#
-# To enable this extension:
-#
-#   [extensions]
-#   interhg =
-#
-# These are some example patterns (link to bug tracking, etc.)
-#
-#   [interhg]
-#   issues = s!issue(\d+)!<a href="http://bts/issue\1">issue\1<\/a>!
-#   bugzilla = s!((?:bug|b=|(?=#?\d{4,}))(?:\s*#?)(\d+))!<a..=\2">\1</a>!i
-#   boldify = s/(^|\s)#(\d+)\b/ <b>#\2<\/b>/
-#
-# Add any number of names and patterns to match
+
+'''expand expressions into changelog and summaries
+
+This extension allows the use of a special syntax in summaries,
+which will be automatically expanded into links or any other
+arbitrary expression, much like InterWiki does.
+
+A few example patterns (link to bug tracking, etc.) that may
+be used in your hgrc:
+
+  [interhg]
+  issues = s!issue(\\d+)!<a href="http://bts/issue\\1">issue\\1</a>!
+  bugzilla = s!((?:bug|b=|(?=#?\\d{4,}))(?:\\s*#?)(\\d+))!<a..=\\2">\\1</a>!i
+  boldify = s!(^|\\s)#(\\d+)\\b! <b>#\\2</b>!
+'''
 
 import re
 from mercurial.hgweb import hgweb_mod
--- a/hgext/keyword.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/keyword.py	Wed Jul 08 17:03:16 2009 -0700
@@ -15,24 +15,18 @@
 # audience not running a version control system.
 #
 # For in-depth discussion refer to
-# <http://www.selenic.com/mercurial/wiki/index.cgi/KeywordPlan>.
+# <http://mercurial.selenic.com/wiki/KeywordPlan>.
 #
 # Keyword expansion is based on Mercurial's changeset template mappings.
 #
 # Binary files are not touched.
 #
-# Setup in hgrc:
-#
-#   [extensions]
-#   # enable extension
-#   hgext.keyword =
-#
 # Files to act upon/ignore are specified in the [keyword] section.
 # Customized keyword template mappings in the [keywordmaps] section.
 #
 # Run "hg help keyword" and "hg kwdemo" to get info on configuration.
 
-'''keyword expansion in local repositories
+'''expand keywords in tracked files
 
 This extension expands RCS/CVS-like or self-customized $Keywords$ in
 tracked text files selected by your configuration.
@@ -64,7 +58,7 @@
 kwdemo" to control the results of your config changes.
 
 Before changing/disabling active keywords, run "hg kwshrink" to avoid
-the risk of inadvertedly storing expanded keywords in the change
+the risk of inadvertently storing expanded keywords in the change
 history.
 
 To force expansion after enabling it, or a configuration change, run
@@ -81,7 +75,7 @@
 '''
 
 from mercurial import commands, cmdutil, dispatch, filelog, revlog, extensions
-from mercurial import patch, localrepo, templater, templatefilters, util
+from mercurial import patch, localrepo, templater, templatefilters, util, match
 from mercurial.hgweb import webcommands
 from mercurial.lock import release
 from mercurial.node import nullid, hex
@@ -125,8 +119,8 @@
     def __init__(self, ui, repo):
         self.ui = ui
         self.repo = repo
-        self.matcher = util.matcher(repo.root,
-                                    inc=kwtools['inc'], exc=kwtools['exc'])[1]
+        self.match = match.match(repo.root, '', [],
+                                 kwtools['inc'], kwtools['exc'])
         self.restrict = kwtools['hgcmd'] in restricted.split()
 
         kwmaps = self.ui.configitems('keywordmaps')
@@ -155,7 +149,7 @@
 
     def expand(self, path, node, data):
         '''Returns data with keywords expanded.'''
-        if not self.restrict and self.matcher(path) and not util.binary(data):
+        if not self.restrict and self.match(path) and not util.binary(data):
             ctx = self.repo.filectx(path, fileid=node).changectx()
             return self.substitute(data, path, ctx, self.re_kw.sub)
         return data
@@ -164,7 +158,7 @@
         '''Returns true if path matches [keyword] pattern
         and is not a symbolic link.
         Caveat: localrepository._link fails on Windows.'''
-        return self.matcher(path) and not 'l' in flagfunc(path)
+        return self.match(path) and not 'l' in flagfunc(path)
 
     def overwrite(self, node, expand, files):
         '''Overwrites selected files expanding/shrinking keywords.'''
@@ -195,7 +189,8 @@
                 if found:
                     notify(msg % f)
                     self.repo.wwrite(f, data, mf.flags(f))
-                    self.repo.dirstate.normal(f)
+                    if node is None:
+                        self.repo.dirstate.normal(f)
             self.restrict = False
 
     def shrinktext(self, text):
@@ -204,13 +199,13 @@
 
     def shrink(self, fname, text):
         '''Returns text with all keyword substitutions removed.'''
-        if self.matcher(fname) and not util.binary(text):
+        if self.match(fname) and not util.binary(text):
             return self.shrinktext(text)
         return text
 
     def shrinklines(self, fname, lines):
         '''Returns lines with keyword substitutions removed.'''
-        if self.matcher(fname):
+        if self.match(fname):
             text = ''.join(lines)
             if not util.binary(text):
                 return self.shrinktext(text).splitlines(True)
@@ -253,8 +248,8 @@
     '''Bails out if [keyword] configuration is not active.
     Returns status of working directory.'''
     if kwt:
-        matcher = cmdutil.match(repo, pats, opts)
-        return repo.status(match=matcher, unknown=unknown, clean=True)
+        match = cmdutil.match(repo, pats, opts)
+        return repo.status(match=match, unknown=unknown, clean=True)
     if ui.configitems('keyword'):
         raise util.Abort(_('[keyword] patterns cannot match'))
     raise util.Abort(_('no [keyword] patterns configured'))
@@ -280,16 +275,13 @@
     '''print [keywordmaps] configuration and an expansion example
 
     Show current, custom, or default keyword template maps and their
-    expansion.
+    expansions.
 
     Extend current configuration by specifying maps as arguments and
     optionally by reading from an additional hgrc file.
 
     Override current keyword template maps with "default" option.
     '''
-    def demostatus(stat):
-        ui.status(_('\n\t%s\n') % stat)
-
     def demoitems(section, items):
         ui.write('[%s]\n' % section)
         for k, v in items:
@@ -329,7 +321,7 @@
         if k.endswith('keyword'):
             extension = '%s = %s' % (k, v)
             break
-    demostatus('config using %s keyword template maps' % kwstatus)
+    ui.status(_('\n\tconfig using %s keyword template maps\n') % kwstatus)
     ui.write('[extensions]\n%s\n' % extension)
     demoitems('keyword', ui.configitems('keyword'))
     demoitems('keywordmaps', kwmaps.iteritems())
@@ -352,13 +344,13 @@
     ui.note('hg -R "%s" ci -m "%s"\n' % (tmpdir, msg))
     repo.commit(text=msg)
     fmt = ui.verbose and ' in %s' % path or ''
-    demostatus('%s keywords expanded%s' % (kwstatus, fmt))
+    ui.status(_('\n\t%s keywords expanded%s\n') % (kwstatus, fmt))
     ui.write(repo.wread(fn))
     ui.debug(_('\nremoving temporary repository %s\n') % tmpdir)
     shutil.rmtree(tmpdir, ignore_errors=True)
 
 def expand(ui, repo, *pats, **opts):
-    '''expand keywords in working directory
+    '''expand keywords in the working directory
 
     Run after (re)enabling keyword expansion.
 
@@ -368,29 +360,47 @@
     _kwfwrite(ui, repo, True, *pats, **opts)
 
 def files(ui, repo, *pats, **opts):
-    '''print files currently configured for keyword expansion
+    '''show files configured for keyword expansion
+
+    List which files in the working directory are matched by the
+    [keyword] configuration patterns.
+
+    Useful to prevent inadvertent keyword expansion and to speed up
+    execution by including only files that are actual candidates
+    for expansion.
 
-    Crosscheck which files in working directory are potential targets
-    for keyword expansion. That is, files matched by [keyword] config
-    patterns but not symlinks.
+    See "hg help keyword" on how to construct patterns both for
+    inclusion and exclusion of files.
+
+    Use -u/--untracked to list untracked files as well.
+
+    With -a/--all and -v/--verbose the codes used to show the status
+    of files are:
+    K = keyword expansion candidate
+    k = keyword expansion candidate (untracked)
+    I = ignored
+    i = ignored (untracked)
     '''
     kwt = kwtools['templater']
     status = _status(ui, repo, kwt, opts.get('untracked'), *pats, **opts)
     modified, added, removed, deleted, unknown, ignored, clean = status
-    files = sorted(modified + added + clean + unknown)
+    files = sorted(modified + added + clean)
     wctx = repo[None]
     kwfiles = [f for f in files if kwt.iskwfile(f, wctx.flags)]
+    kwuntracked = [f for f in unknown if kwt.iskwfile(f, wctx.flags)]
     cwd = pats and repo.getcwd() or ''
-    kwfstats = not opts.get('ignore') and (('K', kwfiles),) or ()
+    kwfstats = (not opts.get('ignore') and
+                (('K', kwfiles), ('k', kwuntracked),) or ())
     if opts.get('all') or opts.get('ignore'):
-        kwfstats += (('I', [f for f in files if f not in kwfiles]),)
+        kwfstats += (('I', [f for f in files if f not in kwfiles]),
+                     ('i', [f for f in unknown if f not in kwuntracked]),)
     for char, filenames in kwfstats:
         fmt = (opts.get('all') or ui.verbose) and '%s %%s\n' % char or '%s\n'
         for f in filenames:
             ui.write(fmt % repo.pathto(f, cwd))
 
 def shrink(ui, repo, *pats, **opts):
-    '''revert expanded keywords in working directory
+    '''revert expanded keywords in the working directory
 
     Run before changing/disabling active keywords or if you experience
     problems with "hg import" or "hg merge".
@@ -449,11 +459,16 @@
             data = super(kwrepo, self).wread(filename)
             return kwt.wread(filename, data)
 
-        def commit(self, files=None, text='', user=None, date=None,
-                   match=None, force=False, force_editor=False,
-                   p1=None, p2=None, extra={}, empty_ok=False):
+        def commit(self, text='', user=None, date=None, match=None,
+                   force=False, editor=None, extra={}):
+            # use custom commitctx for user commands
+            # other extensions can still wrap repo.commitctx directly
+            repo.commitctx = self.kwcommitctx
+            return super(kwrepo, self).commit(text, user, date, match, force,
+                         editor, extra)
+
+        def kwcommitctx(self, ctx, error=False):
             wlock = lock = None
-            _p1 = _p2 = None
             try:
                 wlock = self.wlock()
                 lock = self.lock()
@@ -464,36 +479,26 @@
                         commithooks[name] = cmd
                         ui.setconfig('hooks', name, None)
                 if commithooks:
-                    # store parents for commit hook environment
-                    if p1 is None:
-                        _p1, _p2 = repo.dirstate.parents()
-                    else:
-                        _p1, _p2 = p1, p2 or nullid
-                    _p1 = hex(_p1)
-                    if _p2 == nullid:
-                        _p2 = ''
-                    else:
-                        _p2 = hex(_p2)
+                    # store parents for commit hooks
+                    p1, p2 = ctx.p1(), ctx.p2()
+                    xp1, xp2 = p1.hex(), p2 and p2.hex() or ''
+
+                n = super(kwrepo, self).commitctx(ctx, error)
 
-                n = super(kwrepo, self).commit(files, text, user, date, match,
-                                               force, force_editor, p1, p2,
-                                               extra, empty_ok)
-
-                # restore commit hooks
-                for name, cmd in commithooks.iteritems():
-                    ui.setconfig('hooks', name, cmd)
-                if n is not None:
-                    kwt.overwrite(n, True, None)
-                    repo.hook('commit', node=n, parent1=_p1, parent2=_p2)
+                kwt.overwrite(n, True, None)
+                if commithooks:
+                    for name, cmd in commithooks.iteritems():
+                        ui.setconfig('hooks', name, cmd)
+                    repo.hook('commit', node=n, parent1=xp1, parent2=xp2)
                 return n
             finally:
                 release(lock, wlock)
 
     # monkeypatches
-    def kwpatchfile_init(orig, self, ui, fname, opener, missing=False):
+    def kwpatchfile_init(orig, self, ui, fname, opener, missing=False, eol=None):
         '''Monkeypatch/wrap patch.patchfile.__init__ to avoid
         rejects or conflicts due to expanded keywords in working dir.'''
-        orig(self, ui, fname, opener, missing)
+        orig(self, ui, fname, opener, missing, eol)
         # shrink keywords read from working dir
         self.lines = kwt.shrinklines(self.fname, self.lines)
 
@@ -502,14 +507,14 @@
         '''Monkeypatch patch.diff to avoid expansion except when
         comparing against working dir.'''
         if node2 is not None:
-            kwt.matcher = util.never
+            kwt.match = util.never
         elif node1 is not None and node1 != repo['.'].node():
             kwt.restrict = True
         return orig(repo, node1, node2, match, changes, opts)
 
     def kwweb_skip(orig, web, req, tmpl):
         '''Wraps webcommands.x turning off keyword expansion.'''
-        kwt.matcher = util.never
+        kwt.match = util.never
         return orig(web, req, tmpl)
 
     repo.__class__ = kwrepo
--- a/hgext/mq.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/mq.py	Wed Jul 08 17:03:16 2009 -0700
@@ -5,7 +5,7 @@
 # This software may be used and distributed according to the terms of the
 # GNU General Public License version 2, incorporated herein by reference.
 
-'''patch management and development
+'''manage a stack of patches
 
 This extension lets you work with a stack of patches in a Mercurial
 repository. It manages two stacks of patches - all known patches, and
@@ -42,7 +42,7 @@
 # They must be joinable with queue directory and result in the patch path.
 normname = util.normpath
 
-class statusentry:
+class statusentry(object):
     def __init__(self, rev, name=None):
         if not name:
             fields = rev.split(':', 1)
@@ -57,15 +57,89 @@
         return self.rev + ':' + self.name
 
 class patchheader(object):
-    def __init__(self, message, comments, user, date, haspatch):
+    def __init__(self, pf):
+        def eatdiff(lines):
+            while lines:
+                l = lines[-1]
+                if (l.startswith("diff -") or
+                    l.startswith("Index:") or
+                    l.startswith("===========")):
+                    del lines[-1]
+                else:
+                    break
+        def eatempty(lines):
+            while lines:
+                l = lines[-1]
+                if re.match('\s*$', l):
+                    del lines[-1]
+                else:
+                    break
+
+        message = []
+        comments = []
+        user = None
+        date = None
+        format = None
+        subject = None
+        diffstart = 0
+
+        for line in file(pf):
+            line = line.rstrip()
+            if line.startswith('diff --git'):
+                diffstart = 2
+                break
+            if diffstart:
+                if line.startswith('+++ '):
+                    diffstart = 2
+                break
+            if line.startswith("--- "):
+                diffstart = 1
+                continue
+            elif format == "hgpatch":
+                # parse values when importing the result of an hg export
+                if line.startswith("# User "):
+                    user = line[7:]
+                elif line.startswith("# Date "):
+                    date = line[7:]
+                elif not line.startswith("# ") and line:
+                    message.append(line)
+                    format = None
+            elif line == '# HG changeset patch':
+                format = "hgpatch"
+            elif (format != "tagdone" and (line.startswith("Subject: ") or
+                                           line.startswith("subject: "))):
+                subject = line[9:]
+                format = "tag"
+            elif (format != "tagdone" and (line.startswith("From: ") or
+                                           line.startswith("from: "))):
+                user = line[6:]
+                format = "tag"
+            elif format == "tag" and line == "":
+                # when looking for tags (subject: from: etc) they
+                # end once you find a blank line in the source
+                format = "tagdone"
+            elif message or line:
+                message.append(line)
+            comments.append(line)
+
+        eatdiff(message)
+        eatdiff(comments)
+        eatempty(message)
+        eatempty(comments)
+
+        # make sure message isn't empty
+        if format and format.startswith("tag") and subject:
+            message.insert(0, "")
+            message.insert(0, subject)
+
         self.message = message
         self.comments = comments
         self.user = user
         self.date = date
-        self.haspatch = haspatch
+        self.haspatch = diffstart > 1
 
     def setuser(self, user):
-        if not self.setheader(['From: ', '# User '], user):
+        if not self.updateheader(['From: ', '# User '], user):
             try:
                 patchheaderat = self.comments.index('# HG changeset patch')
                 self.comments.insert(patchheaderat + 1,'# User ' + user)
@@ -74,7 +148,7 @@
         self.user = user
 
     def setdate(self, date):
-        if self.setheader(['# Date '], date):
+        if self.updateheader(['# Date '], date):
             self.date = date
 
     def setmessage(self, message):
@@ -83,9 +157,9 @@
         self.message = [message]
         self.comments += self.message
 
-    def setheader(self, prefixes, new):
+    def updateheader(self, prefixes, new):
         '''Update all references to a field in the patch header.
-        If none found, add it email style.'''
+        Return whether the field is present.'''
         res = False
         for prefix in prefixes:
             for i in xrange(len(self.comments)):
@@ -112,19 +186,17 @@
                     self.message = self.message[2:]
                     break
         ci = 0
-        for mi in xrange(len(self.message)):
-            while self.message[mi] != self.comments[ci]:
+        for mi in self.message:
+            while mi != self.comments[ci]:
                 ci += 1
             del self.comments[ci]
 
-class queue:
+class queue(object):
     def __init__(self, ui, path, patchdir=None):
         self.basepath = path
         self.path = patchdir or os.path.join(path, "patches")
         self.opener = util.opener(self.path)
         self.ui = ui
-        self.applied = []
-        self.full_series = []
         self.applied_dirty = 0
         self.series_dirty = 0
         self.series_path = "series"
@@ -134,13 +206,37 @@
         self.guards_dirty = False
         self._diffopts = None
 
-        if os.path.exists(self.join(self.series_path)):
-            self.full_series = self.opener(self.series_path).read().splitlines()
-        self.parse_series()
-
+    @util.propertycache
+    def applied(self):
         if os.path.exists(self.join(self.status_path)):
             lines = self.opener(self.status_path).read().splitlines()
-            self.applied = [statusentry(l) for l in lines]
+            return [statusentry(l) for l in lines]
+        return []
+
+    @util.propertycache
+    def full_series(self):
+        if os.path.exists(self.join(self.series_path)):
+            return self.opener(self.series_path).read().splitlines()
+        return []
+
+    @util.propertycache
+    def series(self):
+        self.parse_series()
+        return self.series
+
+    @util.propertycache
+    def series_guards(self):
+        self.parse_series()
+        return self.series_guards
+
+    def invalidate(self):
+        for a in 'applied full_series series series_guards'.split():
+            if a in self.__dict__:
+                delattr(self, a)
+        self.applied_dirty = 0
+        self.series_dirty = 0
+        self.guards_dirty = False
+        self.active_guards = None
 
     def diffopts(self):
         if self._diffopts is None:
@@ -292,83 +388,6 @@
         if self.series_dirty: write_list(self.full_series, self.series_path)
         if self.guards_dirty: write_list(self.active_guards, self.guards_path)
 
-    def readheaders(self, patch):
-        def eatdiff(lines):
-            while lines:
-                l = lines[-1]
-                if (l.startswith("diff -") or
-                    l.startswith("Index:") or
-                    l.startswith("===========")):
-                    del lines[-1]
-                else:
-                    break
-        def eatempty(lines):
-            while lines:
-                l = lines[-1]
-                if re.match('\s*$', l):
-                    del lines[-1]
-                else:
-                    break
-
-        pf = self.join(patch)
-        message = []
-        comments = []
-        user = None
-        date = None
-        format = None
-        subject = None
-        diffstart = 0
-
-        for line in file(pf):
-            line = line.rstrip()
-            if line.startswith('diff --git'):
-                diffstart = 2
-                break
-            if diffstart:
-                if line.startswith('+++ '):
-                    diffstart = 2
-                break
-            if line.startswith("--- "):
-                diffstart = 1
-                continue
-            elif format == "hgpatch":
-                # parse values when importing the result of an hg export
-                if line.startswith("# User "):
-                    user = line[7:]
-                elif line.startswith("# Date "):
-                    date = line[7:]
-                elif not line.startswith("# ") and line:
-                    message.append(line)
-                    format = None
-            elif line == '# HG changeset patch':
-                format = "hgpatch"
-            elif (format != "tagdone" and (line.startswith("Subject: ") or
-                                           line.startswith("subject: "))):
-                subject = line[9:]
-                format = "tag"
-            elif (format != "tagdone" and (line.startswith("From: ") or
-                                           line.startswith("from: "))):
-                user = line[6:]
-                format = "tag"
-            elif format == "tag" and line == "":
-                # when looking for tags (subject: from: etc) they
-                # end once you find a blank line in the source
-                format = "tagdone"
-            elif message or line:
-                message.append(line)
-            comments.append(line)
-
-        eatdiff(message)
-        eatdiff(comments)
-        eatempty(message)
-        eatempty(comments)
-
-        # make sure message isn't empty
-        if format and format.startswith("tag") and subject:
-            message.insert(0, "")
-            message.insert(0, subject)
-        return patchheader(message, comments, user, date, diffstart > 1)
-
     def removeundo(self, repo):
         undo = repo.sjoin('undo')
         if not os.path.exists(undo):
@@ -407,11 +426,11 @@
         ret = hg.merge(repo, rev)
         if ret:
             raise util.Abort(_("update returned %d") % ret)
-        n = repo.commit(None, ctx.description(), ctx.user(), force=1)
-        if n == None:
+        n = repo.commit(ctx.description(), ctx.user(), force=True)
+        if n is None:
             raise util.Abort(_("repo commit failed"))
         try:
-            ph = mergeq.readheaders(patch)
+            ph = patchheader(mergeq.join(patch))
         except:
             raise util.Abort(_("unable to read %s") % patch)
 
@@ -452,7 +471,7 @@
             # the first patch in the queue is never a merge patch
             #
             pname = ".hg.patches.merge.marker"
-            n = repo.commit(None, '[mq]: merge marker', user=None, force=1)
+            n = repo.commit('[mq]: merge marker', force=True)
             self.removeundo(repo)
             self.applied.append(statusentry(hex(n), pname))
             self.applied_dirty = 1
@@ -484,11 +503,11 @@
 
     def patch(self, repo, patchfile):
         '''Apply patchfile  to the working directory.
-        patchfile: file name of patch'''
+        patchfile: name of patch file'''
         files = {}
         try:
             fuzz = patch.patch(patchfile, self.ui, strip=1, cwd=repo.root,
-                               files=files)
+                               files=files, eolmode=None)
         except Exception, inst:
             self.ui.note(str(inst) + '\n')
             if not self.ui.verbose:
@@ -524,6 +543,8 @@
 
     def _apply(self, repo, series, list=False, update_status=True,
                strict=False, patchdir=None, merge=None, all_files={}):
+        '''returns (error, hash)
+        error = 1 for unable to read, 2 for patch failed, 3 for patch fuzz'''
         # TODO unify with commands.py
         if not patchdir:
             patchdir = self.path
@@ -538,9 +559,9 @@
             pf = os.path.join(patchdir, patchname)
 
             try:
-                ph = self.readheaders(patchname)
+                ph = patchheader(self.join(patchname))
             except:
-                self.ui.warn(_("Unable to read %s\n") % patchname)
+                self.ui.warn(_("unable to read %s\n") % patchname)
                 err = 1
                 break
 
@@ -578,10 +599,9 @@
 
             files = patch.updatedir(self.ui, repo, files)
             match = cmdutil.matchfiles(repo, files or [])
-            n = repo.commit(files, message, ph.user, ph.date, match=match,
-                            force=True)
+            n = repo.commit(message, ph.user, ph.date, match=match, force=True)
 
-            if n == None:
+            if n is None:
                 raise util.Abort(_("repo commit failed"))
 
             if update_status:
@@ -589,46 +609,60 @@
 
             if patcherr:
                 self.ui.warn(_("patch failed, rejects left in working dir\n"))
-                err = 1
+                err = 2
                 break
 
             if fuzz and strict:
                 self.ui.warn(_("fuzz found when applying patch, stopping\n"))
-                err = 1
+                err = 3
                 break
         return (err, n)
 
-    def _clean_series(self, patches):
+    def _cleanup(self, patches, numrevs, keep=False):
+        if not keep:
+            r = self.qrepo()
+            if r:
+                r.remove(patches, True)
+            else:
+                for p in patches:
+                    os.unlink(self.join(p))
+
+        if numrevs:
+            del self.applied[:numrevs]
+            self.applied_dirty = 1
+
         for i in sorted([self.find_series(p) for p in patches], reverse=True):
             del self.full_series[i]
         self.parse_series()
         self.series_dirty = 1
 
-    def finish(self, repo, revs):
+    def _revpatches(self, repo, revs):
         firstrev = repo[self.applied[0].rev].rev()
-        appliedbase = 0
         patches = []
-        for rev in sorted(revs):
+        for i, rev in enumerate(revs):
+
             if rev < firstrev:
                 raise util.Abort(_('revision %d is not managed') % rev)
-            base = bin(self.applied[appliedbase].rev)
-            node = repo.changelog.node(rev)
-            if node != base:
-                raise util.Abort(_('cannot delete revision %d above '
-                                   'applied patches') % rev)
-            patches.append(self.applied[appliedbase].name)
-            appliedbase += 1
+
+            ctx = repo[rev]
+            base = bin(self.applied[i].rev)
+            if ctx.node() != base:
+                msg = _('cannot delete revision %d above applied patches')
+                raise util.Abort(msg % rev)
 
-        r = self.qrepo()
-        if r:
-            r.remove(patches, True)
-        else:
-            for p in patches:
-                os.unlink(self.join(p))
+            patch = self.applied[i].name
+            for fmt in ('[mq]: %s', 'imported patch %s'):
+                if ctx.description() == fmt % patch:
+                    msg = _('patch %s finalized without changeset message\n')
+                    repo.ui.status(msg % patch)
+                    break
 
-        del self.applied[:appliedbase]
-        self.applied_dirty = 1
-        self._clean_series(patches)
+            patches.append(patch)
+        return patches
+
+    def finish(self, repo, revs):
+        patches = self._revpatches(repo, sorted(revs))
+        self._cleanup(patches, len(patches))
 
     def delete(self, repo, patches, opts):
         if not patches and not opts.get('rev'):
@@ -645,37 +679,18 @@
                 raise util.Abort(_("patch %s not in series file") % patch)
             realpatches.append(patch)
 
-        appliedbase = 0
+        numrevs = 0
         if opts.get('rev'):
             if not self.applied:
                 raise util.Abort(_('no patches applied'))
             revs = cmdutil.revrange(repo, opts['rev'])
             if len(revs) > 1 and revs[0] > revs[1]:
                 revs.reverse()
-            for rev in revs:
-                if appliedbase >= len(self.applied):
-                    raise util.Abort(_("revision %d is not managed") % rev)
-
-                base = bin(self.applied[appliedbase].rev)
-                node = repo.changelog.node(rev)
-                if node != base:
-                    raise util.Abort(_("cannot delete revision %d above "
-                                       "applied patches") % rev)
-                realpatches.append(self.applied[appliedbase].name)
-                appliedbase += 1
+            revpatches = self._revpatches(repo, revs)
+            realpatches += revpatches
+            numrevs = len(revpatches)
 
-        if not opts.get('keep'):
-            r = self.qrepo()
-            if r:
-                r.remove(realpatches, True)
-            else:
-                for p in realpatches:
-                    os.unlink(self.join(p))
-
-        if appliedbase:
-            del self.applied[:appliedbase]
-            self.applied_dirty = 1
-        self._clean_series(realpatches)
+        self._cleanup(realpatches, numrevs, opts.get('keep'))
 
     def check_toppatch(self, repo):
         if len(self.applied) > 0:
@@ -741,11 +756,11 @@
                 elif user:
                     p.write("From: " + user + "\n\n")
 
-                if callable(msg):
+                if hasattr(msg, '__call__'):
                     msg = msg()
                 commitmsg = msg and msg or ("[mq]: %s" % patchfn)
-                n = repo.commit(commitfiles, commitmsg, user, date, match=match, force=True)
-                if n == None:
+                n = repo.commit(commitmsg, user, date, match=match, force=True)
+                if n is None:
                     raise util.Abort(_("repo commit failed"))
                 try:
                     self.full_series[insert:insert] = [patchfn]
@@ -805,8 +820,7 @@
 
     def isapplied(self, patch):
         """returns (index, rev, patch)"""
-        for i in xrange(len(self.applied)):
-            a = self.applied[i]
+        for i, a in enumerate(self.applied):
             if a.name == patch:
                 return (i, a.rev, a.name)
         return None
@@ -838,7 +852,7 @@
                     return self.series[0]
             return None
 
-        if patch == None:
+        if patch is None:
             return None
         if patch in self.series:
             return patch
@@ -885,14 +899,14 @@
     def push(self, repo, patch=None, force=False, list=False,
              mergeq=None, all=False):
         wlock = repo.wlock()
-        if repo.dirstate.parents()[0] != repo.changelog.tip():
-            self.ui.status(_("(working directory not at tip)\n"))
+        try:
+            if repo.dirstate.parents()[0] not in repo.heads():
+                self.ui.status(_("(working directory not at a head)\n"))
 
-        if not self.series:
-            self.ui.warn(_('no patches in series\n'))
-            return 0
+            if not self.series:
+                self.ui.warn(_('no patches in series\n'))
+                return 0
 
-        try:
             patch = self.lookup(patch)
             # Suppose our series file is: A B C and the current 'top'
             # patch is B. qpush C should be performed (moving forward)
@@ -941,6 +955,7 @@
                 end = start + 1
             else:
                 end = self.series.index(patch, start) + 1
+
             s = self.series[start:end]
             all_files = {}
             try:
@@ -960,13 +975,15 @@
                         util.unlink(repo.wjoin(f))
                 self.ui.warn(_('done\n'))
                 raise
+
             top = self.applied[-1].name
-            if ret[0]:
-                self.ui.write(_("errors during apply, please fix and "
-                                "refresh %s\n") % top)
+            if ret[0] and ret[0] > 1:
+                msg = _("errors during apply, please fix and refresh %s\n")
+                self.ui.write(msg % top)
             else:
                 self.ui.write(_("now at: %s\n") % top)
             return ret[0]
+
         finally:
             wlock.release()
 
@@ -1099,7 +1116,7 @@
                 raise util.Abort(_("cannot refresh a revision with children"))
             cparents = repo.changelog.parents(top)
             patchparent = self.qparents(repo, top)
-            ph = self.readheaders(patchfn)
+            ph = patchheader(self.join(patchfn))
 
             patchf = self.opener(patchfn, 'r')
 
@@ -1266,8 +1283,8 @@
                 try:
                     # might be nice to attempt to roll back strip after this
                     patchf.rename()
-                    n = repo.commit(match.files(), message, user, ph.date,
-                                    match=match, force=1)
+                    n = repo.commit(message, user, ph.date, match=match,
+                                    force=True)
                     self.applied.append(statusentry(hex(n), patchfn))
                 except:
                     ctx = repo[cparents[0]]
@@ -1328,7 +1345,7 @@
                 summary=False):
         def displayname(patchname):
             if summary:
-                ph = self.readheaders(patchname)
+                ph = patchheader(self.join(patchname))
                 msg = ph.message
                 msg = msg and ': ' + msg[0] or ': '
             else:
@@ -1385,22 +1402,22 @@
         series = []
         applied = []
         qpp = None
-        for i in xrange(0, len(lines)):
-            if lines[i] == 'Patch Data:':
+        for i, line in enumerate(lines):
+            if line == 'Patch Data:':
                 datastart = i + 1
-            elif lines[i].startswith('Dirstate:'):
-                l = lines[i].rstrip()
+            elif line.startswith('Dirstate:'):
+                l = line.rstrip()
                 l = l[10:].split(' ')
                 qpp = [ bin(x) for x in l ]
             elif datastart != None:
-                l = lines[i].rstrip()
+                l = line.rstrip()
                 se = statusentry(l)
                 file_ = se.name
                 if se.rev:
                     applied.append(se)
                 else:
                     series.append(file_)
-        if datastart == None:
+        if datastart is None:
             self.ui.warn(_("No saved patch data found\n"))
             return 1
         self.ui.warn(_("restoring status: %s\n") % lines[0])
@@ -1452,7 +1469,7 @@
         msg += "\n\nPatch Data:\n"
         text = msg + "\n".join([str(x) for x in self.applied]) + '\n' + (ar and
                    "\n".join(ar) + '\n' or "")
-        n = repo.commit(None, text, user=None, force=1)
+        n = repo.commit(text, force=True)
         if not n:
             self.ui.warn(_("repo commit failed\n"))
             return 1
@@ -1464,7 +1481,7 @@
         if len(self.applied) > 0:
             p = self.applied[-1].name
             end = self.find_series(p)
-            if end == None:
+            if end is None:
                 return len(self.full_series)
             return end + 1
         return 0
@@ -1624,16 +1641,11 @@
 def delete(ui, repo, *patches, **opts):
     """remove patches from queue
 
-    The patches must not be applied, unless they are arguments to the
-    -r/--rev parameter. At least one patch or revision is required.
+    The patches must not be applied, and at least one patch is required. With
+    -k/--keep, the patch files are preserved in the patch directory.
 
-    With --rev, mq will stop managing the named revisions (converting
-    them to regular mercurial changesets). The qfinish command should
-    be used as an alternative for qdelete -r, as the latter option is
-    deprecated.
-
-    With -k/--keep, the patch files are preserved in the patch
-    directory."""
+    To stop managing a patch and move it into permanent history,
+    use the qfinish command."""
     q = repo.mq
     q.delete(repo, patches, opts)
     q.save_dirty()
@@ -1693,6 +1705,9 @@
               existing=opts['existing'], force=opts['force'], rev=opts['rev'],
               git=opts['git'])
     q.save_dirty()
+
+    if opts.get('push') and not opts.get('rev'):
+        return q.push(repo, None)
     return 0
 
 def init(ui, repo, **opts):
@@ -1733,7 +1748,7 @@
     Source patch repository is looked for in <src>/.hg/patches by
     default. Use -p <url> to change.
 
-    The patch directory must be a nested mercurial repository, as
+    The patch directory must be a nested Mercurial repository, as
     would be created by qinit -c.
     '''
     def patchdir(repo):
@@ -1898,7 +1913,7 @@
         if message:
             raise util.Abort(_('option "-e" incompatible with "-m" or "-l"'))
         patch = q.applied[-1].name
-        ph = q.readheaders(patch)
+        ph = patchheader(q.join(patch))
         message = ui.edit('\n'.join(ph.message), ph.user or ui.username())
     setupheaderopts(ui, opts)
     ret = q.refresh(repo, pats, msg=message, **opts)
@@ -1940,6 +1955,7 @@
         raise util.Abort(_('qfold requires at least one patch name'))
     if not q.check_toppatch(repo):
         raise util.Abort(_('No patches applied'))
+    q.check_localchanges(repo)
 
     message = cmdutil.logmessage(opts)
     if opts['edit']:
@@ -1959,7 +1975,7 @@
 
     for p in patches:
         if not message:
-            ph = q.readheaders(p)
+            ph = patchheader(q.join(p))
             if ph.message:
                 messages.append(ph.message)
         pf = q.join(p)
@@ -1969,7 +1985,7 @@
         patch.updatedir(ui, repo, files)
 
     if not message:
-        ph = q.readheaders(parent)
+        ph = patchheader(q.join(parent))
         message, user = ph.message, ph.user
         for msg in messages:
             message.append('* * *')
@@ -2050,7 +2066,7 @@
             ui.write('no patches applied\n')
             return 1
         patch = q.lookup('qtip')
-    ph = repo.mq.readheaders(patch)
+    ph = patchheader(repo.mq.join(patch))
 
     ui.write('\n'.join(ph.message) + '\n')
 
@@ -2064,7 +2080,7 @@
         m = namere.match(f)
         if m:
             index = int(m.group(1))
-            if maxindex == None or index > maxindex:
+            if maxindex is None or index > maxindex:
                 maxindex = index
                 maxname = f
     if maxname:
@@ -2382,22 +2398,24 @@
 
 def reposetup(ui, repo):
     class mqrepo(repo.__class__):
+        @util.propertycache
+        def mq(self):
+            return queue(self.ui, self.join(""))
+
         def abort_if_wdir_patched(self, errmsg, force=False):
             if self.mq.applied and not force:
                 parent = hex(self.dirstate.parents()[0])
                 if parent in [s.rev for s in self.mq.applied]:
                     raise util.Abort(errmsg)
 
-        def commit(self, *args, **opts):
-            if len(args) >= 6:
-                force = args[5]
-            else:
-                force = opts.get('force')
+        def commit(self, text="", user=None, date=None, match=None,
+                   force=False, editor=False, extra={}):
             self.abort_if_wdir_patched(
                 _('cannot commit over an applied mq patch'),
                 force)
 
-            return super(mqrepo, self).commit(*args, **opts)
+            return super(mqrepo, self).commit(text, user, date, match, force,
+                                              editor, extra)
 
         def push(self, remote, force=False, revs=None):
             if self.mq.applied and not force and not revs:
@@ -2463,7 +2481,6 @@
 
     if repo.local():
         repo.__class__ = mqrepo
-        repo.mq = queue(ui, repo.join(""))
 
 def mqimport(orig, ui, repo, *args, **kwargs):
     if hasattr(repo, 'abort_if_wdir_patched'):
@@ -2498,7 +2515,7 @@
     "qdelete|qremove|qrm":
         (delete,
          [('k', 'keep', None, _('keep patch file')),
-          ('r', 'rev', [], _('stop managing a revision'))],
+          ('r', 'rev', [], _('stop managing a revision (DEPRECATED)'))],
          _('hg qdelete [-k] [-r REV]... [PATCH]...')),
     'qfold':
         (fold,
@@ -2519,11 +2536,12 @@
     "^qimport":
         (qimport,
          [('e', 'existing', None, _('import file in patch directory')),
-          ('n', 'name', '', _('patch file name')),
+          ('n', 'name', '', _('name of patch file')),
           ('f', 'force', None, _('overwrite existing files')),
           ('r', 'rev', [], _('place existing revisions under mq control')),
-          ('g', 'git', None, _('use git extended diff format'))],
-         _('hg qimport [-e] [-n NAME] [-f] [-g] [-r REV]... FILE...')),
+          ('g', 'git', None, _('use git extended diff format')),
+          ('P', 'push', None, _('qpush after importing'))],
+         _('hg qimport [-e] [-n NAME] [-f] [-g] [-P] [-r REV]... FILE...')),
     "^qinit":
         (init,
          [('c', 'create-repo', None, _('create queue repository'))],
@@ -2603,5 +2621,5 @@
     "qfinish":
         (finish,
          [('a', 'applied', None, _('finish all applied changesets'))],
-         _('hg qfinish [-a] [REV...]')),
+         _('hg qfinish [-a] [REV]...')),
 }
--- a/hgext/notify.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/notify.py	Wed Jul 08 17:03:16 2009 -0700
@@ -5,7 +5,7 @@
 # This software may be used and distributed according to the terms of the
 # GNU General Public License version 2, incorporated herein by reference.
 
-'''hook extension to email notifications on commits/pushes
+'''hooks for sending email notifications at commit/push time
 
 Subscriptions can be managed through hgrc. Default mode is to print
 messages to stdout, for testing and configuring.
--- a/hgext/pager.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/pager.py	Wed Jul 08 17:03:16 2009 -0700
@@ -12,7 +12,7 @@
 #
 # Run "hg help pager" to get info on configuration.
 
-'''browse command output with external pager
+'''browse command output with an external pager
 
 To set the pager that should be used, set the application variable:
 
--- a/hgext/parentrevspec.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/parentrevspec.py	Wed Jul 08 17:03:16 2009 -0700
@@ -5,15 +5,14 @@
 # This software may be used and distributed according to the terms of the
 # GNU General Public License version 2, incorporated herein by reference.
 
-'''\
-use suffixes to refer to ancestor revisions
+'''interpret suffixes to refer to ancestor revisions
 
 This extension allows you to use git-style suffixes to refer to the
 ancestors of a specific revision.
 
 For example, if you can refer to a revision as "foo", then:
 
-- foo^N = Nth parent of foo:
+- foo^N = Nth parent of foo
   foo^0 = foo
   foo^1 = first parent of foo
   foo^2 = second parent of foo
--- a/hgext/patchbomb.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/patchbomb.py	Wed Jul 08 17:03:16 2009 -0700
@@ -5,7 +5,7 @@
 # This software may be used and distributed according to the terms of the
 # GNU General Public License version 2, incorporated herein by reference.
 
-'''sending Mercurial changesets as a series of patch emails
+'''command to send changesets as (a series of) patch emails
 
 The series is started off with a "[PATCH 0 of N]" introduction, which
 describes the series as a whole.
@@ -14,24 +14,19 @@
 first line of the changeset description as the subject text. The
 message contains two or three body parts:
 
-  The remainder of the changeset description.
+  The changeset description.
 
   [Optional] The result of running diffstat on the patch.
 
   The patch itself, as generated by "hg export".
 
-Each message refers to all of its predecessors using the In-Reply-To
+Each message refers to the first in the series using the In-Reply-To
 and References headers, so they will show up as a sequence in threaded
 mail and news readers, and in mail archives.
 
-For each changeset, you will be prompted with a diffstat summary and
-the changeset summary, so you can be sure you are sending the right
-changes.
-
-To enable this extension:
-
-  [extensions]
-  hgext.patchbomb =
+With the -d/--diffstat option, you will be prompted for each changeset
+with a diffstat summary and the changeset summary, so you can be sure
+you are sending the right changes.
 
 To configure other defaults, add a section like this to your hgrc
 file:
@@ -47,11 +42,11 @@
 
 To avoid sending patches prematurely, it is a good idea to first run
 the "email" command with the "-n" option (test only). You will be
-prompted for an email recipient address, a subject an an introductory
+prompted for an email recipient address, a subject and an introductory
 message describing the patches of your patchbomb. Then when all is
-done, patchbomb messages are displayed. If PAGER environment variable
-is set, your pager will be fired up once for each patchbomb message,
-so you can verify everything is alright.
+done, patchbomb messages are displayed. If the PAGER environment
+variable is set, your pager will be fired up once for each patchbomb
+message, so you can verify everything is alright.
 
 The -m/--mbox option is also very useful. Instead of previewing each
 patchbomb message in a pager or sending the messages directly, it will
@@ -70,7 +65,7 @@
 That should be all. Now your patchbomb is on its way out.
 
 You can also either configure the method option in the email section
-to be a sendmail compatable mailer or fill out the [smtp] section so
+to be a sendmail compatible mailer or fill out the [smtp] section so
 that the patchbomb extension can automatically send patchbombs
 directly from the commandline. See the [email] and [smtp] sections in
 hgrc(5) for details.'''
@@ -148,7 +143,7 @@
             msg.attach(mail.mimeencode(ui, body, _charsets, opts.get('test')))
         p = mail.mimetextpatch('\n'.join(patch), 'x-patch', opts.get('test'))
         binnode = bin(node)
-        # if node is mq patch, it will have patch file name as tag
+        # if node is mq patch, it will have the patch file's name as a tag
         if not patchname:
             patchtags = [t for t in repo.nodetags(binnode)
                          if t.endswith('.patch') or t.endswith('.diff')]
@@ -187,10 +182,16 @@
 
     Each patch email has a Subject line of "[PATCH M of N] ...", using
     the first line of the changeset description as the subject text.
-    The message contains two or three body parts. First, the rest of
-    the changeset description. Next, (optionally) if the diffstat
-    program is installed, the result of running diffstat on the patch.
-    Finally, the patch itself, as generated by "hg export".
+    The message contains two or three parts. First, the changeset
+    description. Next, (optionally) if the diffstat program is
+    installed and -d/--diffstat is used, the result of running
+    diffstat on the patch. Finally, the patch itself, as generated by
+    "hg export".
+
+    By default the patch is included as text in the email body for
+    easy reviewing. Using the -a/--attach option will instead create
+    an attachment for the patch. With -i/--inline an inline attachment
+    will be created.
 
     With -o/--outgoing, emails will be generated for patches not found
     in the destination repository (or only those which are ancestors
@@ -391,6 +392,14 @@
     ui.write('\n')
 
     parent = opts.get('in_reply_to') or None
+    # angle brackets may be omitted, they're not semantically part of the msg-id
+    if parent is not None:
+        if not parent.startswith('<'):
+            parent = '<' + parent
+        if not parent.endswith('>'):
+            parent += '>'
+
+    first = True
 
     sender_addr = email.Utils.parseaddr(sender)[1]
     sender = mail.addressencode(ui, sender, _charsets, opts.get('test'))
@@ -403,10 +412,12 @@
         if parent:
             m['In-Reply-To'] = parent
             m['References'] = parent
-        else:
+        if first:
             parent = m['Message-Id']
+            first = False
+
         m['User-Agent'] = 'Mercurial-patchbomb/%s' % util.version()
-        m['Date'] = util.datestr(start_time, "%a, %d %b %Y %H:%M:%S %1%2")
+        m['Date'] = email.Utils.formatdate(start_time[0])
 
         start_time = (start_time[0] + 1, start_time[1])
         m['From'] = sender
@@ -481,7 +492,7 @@
           ('b', 'bundle', None,
            _('send changes not in target as a binary bundle')),
           ('', 'bundlename', 'bundle',
-           _('file name of the bundle attachment')),
+           _('name of the bundle attachment file')),
           ('r', 'rev', [], _('a revision to send')),
           ('', 'force', None,
            _('run even when remote repository is unrelated '
--- a/hgext/purge.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/purge.py	Wed Jul 08 17:03:16 2009 -0700
@@ -1,15 +1,11 @@
 # Copyright (C) 2006 - Marco Barisione <marco@barisione.org>
 #
-# This is a small extension for Mercurial (http://www.selenic.com/mercurial)
+# This is a small extension for Mercurial (http://mercurial.selenic.com/)
 # that removes files not known to mercurial
 #
 # This program was inspired by the "cvspurge" script contained in CVS utilities
 # (http://www.red-bean.com/cvsutils/).
 #
-# To enable the "purge" extension put these lines in your ~/.hgrc:
-#  [extensions]
-#  hgext.purge =
-#
 # For help on the usage of "hg purge" use:
 #  hg help purge
 #
@@ -27,6 +23,8 @@
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
+'''command to delete untracked files from the working directory'''
+
 from mercurial import util, commands, cmdutil
 from mercurial.i18n import _
 import os, stat
@@ -40,7 +38,7 @@
     This means that purge will delete:
      - Unknown files: files marked with "?" by "hg status"
      - Empty directories: in fact Mercurial ignores directories unless
-       they contain files under source control managment
+       they contain files under source control management
     But it will leave untouched:
      - Modified and unmodified tracked files
      - Ignored files (unless --all is specified)
@@ -102,7 +100,7 @@
         (purge,
          [('a', 'abort-on-err', None, _('abort if an error occurs')),
           ('',  'all', None, _('purge ignored files too')),
-          ('p', 'print', None, _('print the file names instead of deleting them')),
+          ('p', 'print', None, _('print filenames instead of deleting them')),
           ('0', 'print0', None, _('end filenames with NUL, for use with xargs'
                                   ' (implies -p/--print)')),
          ] + commands.walkopts,
--- a/hgext/rebase.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/rebase.py	Wed Jul 08 17:03:16 2009 -0700
@@ -5,13 +5,13 @@
 # This software may be used and distributed according to the terms of the
 # GNU General Public License version 2, incorporated herein by reference.
 
-'''move sets of revisions to a different ancestor
+'''command to move sets of revisions to a different ancestor
 
 This extension lets you rebase changesets in an existing Mercurial
 repository.
 
 For more information:
-http://www.selenic.com/mercurial/wiki/index.cgi/RebaseProject
+http://mercurial.selenic.com/wiki/RebaseProject
 '''
 
 from mercurial import util, repair, merge, cmdutil, commands, error
@@ -51,7 +51,8 @@
     """
     originalwd = target = None
     external = nullrev
-    state = skipped = {}
+    state = {}
+    skipped = set()
 
     lock = wlock = None
     try:
@@ -95,7 +96,7 @@
             if result:
                 originalwd, target, state, external = result
             else: # Empty state built, nothing to rebase
-                repo.ui.status(_('nothing to rebase\n'))
+                ui.status(_('nothing to rebase\n'))
                 return
 
         if keepbranchesf:
@@ -132,7 +133,7 @@
                 ui.warn(_("warning: new changesets detected on source branch, "
                                                         "not stripping\n"))
             else:
-                repair.strip(repo.ui, repo, repo[min(state)].node(), "strip")
+                repair.strip(ui, repo, repo[min(state)].node(), "strip")
 
         clearstatus(repo)
         ui.status(_("rebase completed\n"))
@@ -143,7 +144,7 @@
     finally:
         release(lock, wlock)
 
-def concludenode(repo, rev, p1, p2, state, collapse, last=False, skipped={},
+def concludenode(repo, rev, p1, p2, state, collapse, last=False, skipped=None,
                  extrafn=None):
     """Skip commit if collapsing has been required and rev is not the last
     revision, commit otherwise
@@ -155,8 +156,10 @@
 
     repo.dirstate.setparents(repo[p1].node(), repo[p2].node())
 
+    if skipped is None:
+        skipped = set()
+
     # Commit, record the old nodeid
-    m, a, r = repo.status()[:3]
     newrev = nullrev
     try:
         if last:
@@ -171,11 +174,8 @@
         extra = {'rebase_source': repo[rev].hex()}
         if extrafn:
             extrafn(repo[rev], extra)
-        newrev = repo.commit(m+a+r,
-                            text=commitmsg,
-                            user=repo[rev].user(),
-                            date=repo[rev].date(),
-                            extra=extra)
+        newrev = repo.commit(text=commitmsg, user=repo[rev].user(),
+                             date=repo[rev].date(), extra=extra)
         repo.dirstate.setbranch(repo[newrev].branch())
         return newrev
     except util.Abort:
@@ -234,7 +234,7 @@
         if not collapse:
             repo.ui.note(_('no changes, revision %d skipped\n') % rev)
             repo.ui.debug(_('next revision set to %s\n') % p1)
-            skipped[rev] = True
+            skipped.add(rev)
         state[rev] = p1
 
 def defineparents(repo, rev, target, state, targetancestors):
--- a/hgext/record.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/record.py	Wed Jul 08 17:03:16 2009 -0700
@@ -5,7 +5,7 @@
 # This software may be used and distributed according to the terms of the
 # GNU General Public License version 2, incorporated herein by reference.
 
-'''interactive change selection during commit or qrefresh'''
+'''commands to interactively select changes for commit/qrefresh'''
 
 from mercurial.i18n import gettext, _
 from mercurial import cmdutil, commands, extensions, hg, mdiff, patch
@@ -251,7 +251,7 @@
     """Interactively filter patch chunks into applied-only chunks"""
     chunks = list(chunks)
     chunks.reverse()
-    seen = {}
+    seen = set()
     def consumefile():
         """fetch next portion from chunks until a 'header' is seen
         NB: header == new-file mark
@@ -321,7 +321,7 @@
             if hdr in seen:
                 consumefile()
                 continue
-            seen[hdr] = True
+            seen.add(hdr)
             if resp_all[0] is None:
                 chunk.pretty(ui)
             r = prompt(_('examine changes to %s?') %
@@ -385,7 +385,8 @@
 def qrecord(ui, repo, patch, *pats, **opts):
     '''interactively record a new patch
 
-    see 'hg help qnew' & 'hg help record' for more information and usage
+    See 'hg help qnew' & 'hg help record' for more information and
+    usage.
     '''
 
     try:
@@ -480,7 +481,8 @@
                     ui.debug(_('applying patch\n'))
                     ui.debug(fp.getvalue())
                     pfiles = {}
-                    patch.internalpatch(fp, ui, 1, repo.root, files=pfiles)
+                    patch.internalpatch(fp, ui, 1, repo.root, files=pfiles,
+                                        eolmode=None)
                     patch.updatedir(ui, repo, pfiles)
                 except patch.PatchError, err:
                     s = str(err)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/hgext/share.py	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,31 @@
+# Copyright 2006, 2007 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.
+
+'''share a common history between several working directories'''
+
+import os
+from mercurial.i18n import _
+from mercurial import hg, commands
+
+def share(ui, source, dest=None, noupdate=False):
+    """create a new shared repository (experimental)
+
+    Initialize a new repository and working directory that shares its
+    history with another repository.
+
+    NOTE: actions that change history such as rollback or moving the
+    source may confuse sharers.
+    """
+
+    return hg.share(ui, source, dest, not noupdate)
+
+cmdtable = {
+    "share":
+    (share,
+     [('U', 'noupdate', None, _('do not create a working copy'))],
+     _('[-U] SOURCE [DEST]')),
+}
+
+commands.norepo += " share"
--- a/hgext/transplant.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/transplant.py	Wed Jul 08 17:03:16 2009 -0700
@@ -5,7 +5,7 @@
 # This software may be used and distributed according to the terms of the
 # GNU General Public License version 2, incorporated herein by reference.
 
-'''patch transplanting tool
+'''command to transplant changesets from another branch
 
 This extension allows you to transplant patches from another branch.
 
@@ -15,15 +15,15 @@
 
 from mercurial.i18n import _
 import os, tempfile
-from mercurial import bundlerepo, changegroup, cmdutil, hg, merge
+from mercurial import bundlerepo, changegroup, cmdutil, hg, merge, match
 from mercurial import patch, revlog, util, error
 
-class transplantentry:
+class transplantentry(object):
     def __init__(self, lnode, rnode):
         self.lnode = lnode
         self.rnode = rnode
 
-class transplants:
+class transplants(object):
     def __init__(self, path=None, transplantfile=None, opener=None):
         self.path = path
         self.transplantfile = transplantfile
@@ -64,7 +64,7 @@
         del self.transplants[self.transplants.index(transplant)]
         self.dirty = True
 
-class transplanter:
+class transplanter(object):
     def __init__(self, ui, repo):
         self.ui = ui
         self.path = repo.join('transplant')
@@ -218,7 +218,7 @@
                 files = {}
                 try:
                     patch.patch(patchfile, self.ui, cwd=repo.root,
-                                files=files)
+                                files=files, eolmode=None)
                     if not files:
                         self.ui.warn(_('%s: empty changeset')
                                      % revlog.hex(node))
@@ -242,8 +242,11 @@
         if merge:
             p1, p2 = repo.dirstate.parents()
             repo.dirstate.setparents(p1, node)
+            m = match.always(repo.root, '')
+        else:
+            m = match.exact(repo.root, '', files)
 
-        n = repo.commit(files, message, user, date, extra=extra)
+        n = repo.commit(message, user, date, extra=extra, match=m)
         if not merge:
             self.transplants.set(n, node)
 
@@ -285,7 +288,7 @@
                                  revlog.hex(parents[0]))
             if merge:
                 repo.dirstate.setparents(p1, parents[1])
-            n = repo.commit(None, message, user, date, extra=extra)
+            n = repo.commit(message, user, date, extra=extra)
             if not n:
                 raise util.Abort(_('commit failed'))
             if not merge:
@@ -413,7 +416,7 @@
             elif action == 'p':
                 parent = repo.changelog.parents(node)[0]
                 for chunk in patch.diff(repo, parent, node):
-                    repo.ui.write(chunk)
+                    ui.write(chunk)
                 action = None
             elif action not in ('y', 'n', 'm', 'c', 'q'):
                 ui.write('no such option\n')
--- a/hgext/win32mbcs.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/win32mbcs.py	Wed Jul 08 17:03:16 2009 -0700
@@ -9,23 +9,23 @@
 # GNU General Public License version 2, incorporated herein by reference.
 #
 
-"""allow to use MBCS path with problematic encoding.
+'''allow the use of MBCS paths with problematic encodings
 
 Some MBCS encodings are not good for some path operations (i.e.
 splitting path, case conversion, etc.) with its encoded bytes. We call
 such a encoding (i.e. shift_jis and big5) as "problematic encoding".
 This extension can be used to fix the issue with those encodings by
-wrapping some functions to convert to unicode string before path
+wrapping some functions to convert to Unicode string before path
 operation.
 
-This extension is usefull for:
+This extension is useful for:
  * Japanese Windows users using shift_jis encoding.
  * Chinese Windows users using big5 encoding.
  * All users who use a repository with one of problematic encodings on
    case-insensitive file system.
 
 This extension is not needed for:
- * Any user who use only ascii chars in path.
+ * Any user who use only ASCII chars in path.
  * Any user who do not use any of problematic encodings.
 
 Note that there are some limitations on using this extension:
@@ -33,16 +33,10 @@
  * You should set same encoding for the repository by locale or
    HGENCODING.
 
-To use this extension, enable the extension in .hg/hgrc or ~/.hgrc:
-
-  [extensions]
-  hgext.win32mbcs =
-
-Path encoding conversion are done between unicode and
-encoding.encoding which is decided by mercurial from current locale
+Path encoding conversion are done between Unicode and
+encoding.encoding which is decided by Mercurial from current locale
 setting or HGENCODING.
-
-"""
+'''
 
 import os
 from mercurial.i18n import _
@@ -88,7 +82,7 @@
     idx = name.rfind('.')
     module = name[:idx]
     name = name[idx+1:]
-    module = eval(module)
+    module = globals()[module]
     func = getattr(module, name)
     def f(*args):
         return wrapper(func, args)
@@ -109,7 +103,7 @@
 problematic_encodings = '''big5 big5-tw csbig5 big5hkscs big5-hkscs
  hkscs cp932 932 ms932 mskanji ms-kanji shift_jis csshiftjis shiftjis
  sjis s_jis shift_jis_2004 shiftjis2004 sjis_2004 sjis2004
- shift_jisx0213 shiftjisx0213 sjisx0213 s_jisx0213'''
+ shift_jisx0213 shiftjisx0213 sjisx0213 s_jisx0213 950 cp950 ms950 '''
 
 def reposetup(ui, repo):
     # TODO: decide use of config section for this extension
--- a/hgext/win32text.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/win32text.py	Wed Jul 08 17:03:16 2009 -0700
@@ -4,31 +4,34 @@
 #
 # This software may be used and distributed according to the terms of the
 # GNU General Public License version 2, incorporated herein by reference.
-#
-# To perform automatic newline conversion, use:
-#
-# [extensions]
-# hgext.win32text =
-# [encode]
-# ** = cleverencode:
-# # or ** = macencode:
-# [decode]
-# ** = cleverdecode:
-# # or ** = macdecode:
-#
-# If not doing conversion, to make sure you do not commit CRLF/CR by
-# accident:
-#
-# [hooks]
-# pretxncommit.crlf = python:hgext.win32text.forbidcrlf
-# # or pretxncommit.cr = python:hgext.win32text.forbidcr
-#
-# To do the same check on a server to prevent CRLF/CR from being
-# pushed or pulled:
-#
-# [hooks]
-# pretxnchangegroup.crlf = python:hgext.win32text.forbidcrlf
-# # or pretxnchangegroup.cr = python:hgext.win32text.forbidcr
+
+'''perform automatic newline conversion
+
+To perform automatic newline conversion, use:
+
+[extensions]
+hgext.win32text =
+[encode]
+** = cleverencode:
+# or ** = macencode:
+
+[decode]
+** = cleverdecode:
+# or ** = macdecode:
+
+If not doing conversion, to make sure you do not commit CRLF/CR by accident:
+
+[hooks]
+pretxncommit.crlf = python:hgext.win32text.forbidcrlf
+# or pretxncommit.cr = python:hgext.win32text.forbidcr
+
+To do the same check on a server to prevent CRLF/CR from being
+pushed or pulled:
+
+[hooks]
+pretxnchangegroup.crlf = python:hgext.win32text.forbidcrlf
+# or pretxnchangegroup.cr = python:hgext.win32text.forbidcr
+'''
 
 from mercurial.i18n import _
 from mercurial.node import short
@@ -45,7 +48,7 @@
     # warn if already has 'newline' in repository.
     # it might cause unexpected eol conversion.
     # see issue 302:
-    #   http://www.selenic.com/mercurial/bts/issue302
+    #   http://mercurial.selenic.com/bts/issue302
     if newline in s and ui and filename and repo:
         ui.warn(_('WARNING: %s already has %s line endings\n'
                   'and does not need EOL conversion by the win32text plugin.\n'
--- a/hgext/zeroconf/__init__.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/hgext/zeroconf/__init__.py	Wed Jul 08 17:03:16 2009 -0700
@@ -5,18 +5,12 @@
 # This software may be used and distributed according to the terms of the
 # GNU General Public License version 2, incorporated herein by reference.
 
-'''zeroconf support for mercurial repositories
+'''discover and advertise repositories on the local network
 
 Zeroconf enabled repositories will be announced in a network without
 the need to configure a server or a service. They can be discovered
 without knowing their actual IP address.
 
-To use the zeroconf extension add the following entry to your hgrc
-file:
-
-[extensions]
-hgext.zeroconf =
-
 To allow other people to discover your repository using run "hg serve"
 in your repository.
 
--- a/i18n/da.po	Wed Jul 08 17:01:18 2009 -0700
+++ b/i18n/da.po	Wed Jul 08 17:03:16 2009 -0700
@@ -5,10 +5,10 @@
 # Translation dictionary:
 #
 # changeset           ændring
-# commit              arkivering
+# commit              deponere
 # merge               sammenføje
-# patch               rettelse
-# repo(sitory)        arkiv
+# patch               lap
+# repo(sitory)        depot
 # revision            revision
 # tag                 mærkat
 # working directory   arbejdskatalog
@@ -17,14 +17,13 @@
 msgstr ""
 "Project-Id-Version: Mercurial\n"
 "Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n"
-"POT-Creation-Date: 2009-05-02 17:00+0200\n"
-"PO-Revision-Date: 2009-05-02 17:47+0200\n"
-"Last-Translator:  <mg@daimi.au.dk>\n"
+"POT-Creation-Date: 2009-06-30 23:18+0200\n"
+"PO-Revision-Date: 2009-06-30 23:28+0200\n"
+"Last-Translator:  <mg@lazybytes.net>\n"
 "Language-Team: Danish\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Generated-By: pygettext.py 1.5\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
 #, python-format
@@ -32,13 +31,13 @@
 msgstr " (standard: %s)"
 
 msgid "OPTIONS"
-msgstr ""
+msgstr "TILVALG"
 
 msgid "COMMANDS"
 msgstr "KOMMANDOER"
 
 msgid "    options:\n"
-msgstr ""
+msgstr "    tilvalg:\n"
 
 #, python-format
 msgid ""
@@ -48,7 +47,52 @@
 "    aliaser %s:\n"
 "\n"
 
-msgid "return tuple of (match function, list enabled)."
+msgid ""
+"hooks for controlling repository access\n"
+"\n"
+"This hook makes it possible to allow or deny write access to portions\n"
+"of a repository when receiving incoming changesets.\n"
+"\n"
+"The authorization is matched based on the local user name on the\n"
+"system where the hook runs, and not the committer of the original\n"
+"changeset (since the latter is merely informative).\n"
+"\n"
+"The acl hook is best used along with a restricted shell like hgsh,\n"
+"preventing authenticating users from doing anything other than\n"
+"pushing or pulling. The hook is not safe to use if users have\n"
+"interactive shell access, as they can then disable the hook.\n"
+"Nor is it safe if remote users share an account, because then there\n"
+"is no way to distinguish them.\n"
+"\n"
+"To use this hook, configure the acl extension in your hgrc like this:\n"
+"\n"
+"  [extensions]\n"
+"  hgext.acl =\n"
+"\n"
+"  [hooks]\n"
+"  pretxnchangegroup.acl = python:hgext.acl.hook\n"
+"\n"
+"  [acl]\n"
+"  # Check whether the source of incoming changes is in this list\n"
+"  # (\"serve\" == ssh or http, \"push\", \"pull\", \"bundle\")\n"
+"  sources = serve\n"
+"\n"
+"The allow and deny sections take a subtree pattern as key (with a\n"
+"glob syntax by default), and a comma separated list of users as\n"
+"the corresponding value. The deny list is checked before the allow\n"
+"list is.\n"
+"\n"
+"  [acl.allow]\n"
+"  # If acl.allow is not present, all users are allowed by default.\n"
+"  # An empty acl.allow section means no users allowed.\n"
+"  docs/** = doc_writer\n"
+"  .hgtags = release_engineer\n"
+"\n"
+"  [acl.deny]\n"
+"  # If acl.deny is not present, no users are refused by default.\n"
+"  # An empty acl.deny section means all users allowed.\n"
+"  glob pattern = user4, user5\n"
+"   ** = user6\n"
 msgstr ""
 
 #, python-format
@@ -57,7 +101,7 @@
 
 #, python-format
 msgid "acl: %s enabled, %d entries for user %s\n"
-msgstr "acl: %s slået til, %d indgange for bruger %s\n"
+msgstr "acl: %s slået til, %d optegnelser for bruger %s\n"
 
 #, python-format
 msgid "config error - hook type \"%s\" cannot stop incoming changesets"
@@ -85,168 +129,79 @@
 msgstr "acl: tillader ændring %s\n"
 
 msgid ""
-"allow user-defined command aliases\n"
-"\n"
-"To use, create entries in your hgrc of the form\n"
-"\n"
-"[alias]\n"
-"mycmd = cmd --args\n"
-msgstr ""
-
-msgid ""
-"defer command lookup until needed, so that extensions loaded\n"
-"    after alias can be aliased"
-msgstr ""
-
-#, python-format
-msgid "*** [alias] %s: command %s is unknown"
-msgstr ""
-
-#, python-format
-msgid "*** [alias] %s: command %s is ambiguous"
-msgstr ""
-
-#, python-format
-msgid "*** [alias] %s: circular dependency on %s"
-msgstr ""
-
-#, python-format
-msgid "*** [alias] %s: no definition\n"
-msgstr ""
-
-msgid ""
-"mercurial bookmarks\n"
-"\n"
-"Mercurial bookmarks are local moveable pointers to changesets. Every\n"
-"bookmark points to a changeset identified by its hash. If you commit a\n"
-"changeset that is based on a changeset that has a bookmark on it, the\n"
-"bookmark is forwarded to the new changeset.\n"
-"\n"
-"It is possible to use bookmark names in every revision lookup (e.g. hg\n"
-"merge, hg update).\n"
-"\n"
-"The bookmark extension offers the possiblity to have a more git-like\n"
-"experience by adding the following configuration option to your .hgrc:\n"
-"\n"
-"[bookmarks]\n"
-"track.current = True\n"
-"\n"
-"This will cause bookmarks to track the bookmark that you are currently\n"
-"on, and just updates it. This is similar to git's approach of\n"
+"track a line of development with movable markers\n"
+"\n"
+"Bookmarks are local movable markers to changesets. Every bookmark\n"
+"points to a changeset identified by its hash. If you commit a\n"
+"changeset that is based on a changeset that has a bookmark on it,\n"
+"the bookmark shifts to the new changeset.\n"
+"\n"
+"It is possible to use bookmark names in every revision lookup\n"
+"(e.g. hg merge, hg update).\n"
+"\n"
+"By default, when several bookmarks point to the same changeset, they\n"
+"will all move forward together. It is possible to obtain a more\n"
+"git-like experience by adding the following configuration option to\n"
+"your .hgrc:\n"
+"\n"
+"  [bookmarks]\n"
+"  track.current = True\n"
+"\n"
+"This will cause Mercurial to track the bookmark that you are currently\n"
+"using, and only update it. This is similar to git's approach to\n"
 "branching.\n"
 msgstr ""
 
 msgid ""
-"Parse .hg/bookmarks file and return a dictionary\n"
-"\n"
-"    Bookmarks are stored as {HASH}\\s{NAME}\\n (localtags format) values\n"
-"    in the .hg/bookmarks file. They are read by the parse() method and\n"
-"    returned as a dictionary with name => hash values.\n"
-"\n"
-"    The parsed dictionary is cached until a write() operation is done.\n"
-"    "
-msgstr ""
-
-msgid ""
-"Write bookmarks\n"
-"\n"
-"    Write the given bookmark => hash dictionary to the .hg/bookmarks file\n"
-"    in a format equal to those of localtags.\n"
-"\n"
-"    We also store a backup of the previous state in undo.bookmarks that\n"
-"    can be copied back on rollback.\n"
-"    "
-msgstr ""
-
-msgid ""
-"Get the current bookmark\n"
-"\n"
-"    If we use gittishsh branches we have a current bookmark that\n"
-"    we are on. This function returns the name of the bookmark. It\n"
-"    is stored in .hg/bookmarks.current\n"
-"    "
-msgstr ""
-
-msgid ""
-"Set the name of the bookmark that we are currently on\n"
-"\n"
-"    Set the name of the bookmark that we are on (hg update <bookmark>).\n"
-"    The name is recorded in .hg/bookmarks.current\n"
-"    "
-msgstr ""
-
-msgid ""
-"mercurial bookmarks\n"
+"track a line of development with movable markers\n"
 "\n"
 "    Bookmarks are pointers to certain commits that move when\n"
-"    commiting. Bookmarks are local. They can be renamed, copied and\n"
+"    committing. Bookmarks are local. They can be renamed, copied and\n"
 "    deleted. It is possible to use bookmark names in 'hg merge' and\n"
-"    'hg update' to update to a given bookmark.\n"
-"\n"
-"    You can use 'hg bookmark NAME' to set a bookmark on the current\n"
-"    tip with the given name. If you specify a revision using -r REV\n"
-"    (where REV may be an existing bookmark), the bookmark is set to\n"
-"    that revision.\n"
+"    'hg update' to merge and update respectively to a given bookmark.\n"
+"\n"
+"    You can use 'hg bookmark NAME' to set a bookmark on the working\n"
+"    directory's parent revision with the given name. If you specify\n"
+"    a revision using -r REV (where REV may be an existing bookmark),\n"
+"    the bookmark is assigned to that revision.\n"
 "    "
 msgstr ""
 
 msgid "a bookmark of this name does not exist"
-msgstr ""
+msgstr "et bogmærke med dette navn findes ikke"
 
 msgid "a bookmark of the same name already exists"
-msgstr ""
+msgstr "et bogmærke med samme navn findes allerede"
 
 msgid "new bookmark name required"
-msgstr ""
+msgstr "nyt bogmærkenavn påkrævet"
 
 msgid "bookmark name required"
-msgstr ""
+msgstr "bogmærkenavn påkrævet"
 
 msgid "bookmark name cannot contain newlines"
 msgstr "bogmærkenavn kan ikke indeholde linieskift"
 
 msgid "a bookmark cannot have the name of an existing branch"
-msgstr ""
-
-msgid ""
-"Strip bookmarks if revisions are stripped using\n"
-"    the mercurial.strip method. This usually happens during\n"
-"    qpush and qpop"
-msgstr ""
-
-msgid ""
-"Add a revision to the repository and\n"
-"            move the bookmark"
-msgstr ""
-
-msgid "Merge bookmarks with normal tags"
-msgstr ""
-
-msgid ""
-"Set the current bookmark\n"
-"\n"
-"    If the user updates to a bookmark we update the .hg/bookmarks.current\n"
-"    file.\n"
-"    "
-msgstr ""
+msgstr "et bogmærke kan ikke hedde det samme som en eksisterende gren"
 
 msgid "force"
-msgstr ""
+msgstr "gennemtving"
 
 msgid "revision"
-msgstr ""
+msgstr "revision"
 
 msgid "delete a given bookmark"
-msgstr ""
+msgstr "slet et givent bogmærke"
 
 msgid "rename a given bookmark"
-msgstr ""
+msgstr "omdøb et givet bogmærke"
 
 msgid "hg bookmarks [-f] [-d] [-m NAME] [-r REV] [NAME]"
-msgstr ""
-
-msgid ""
-"Bugzilla integration\n"
+msgstr "hg bookmarks [-f] [-d] [-m NAVN] [-r REV] [NAVN]"
+
+msgid ""
+"hooks for integrating with the Bugzilla bug tracker\n"
 "\n"
 "This hook extension adds comments on bugs in Bugzilla when changesets\n"
 "that refer to bugs by Bugzilla ID are seen. The hook does not change\n"
@@ -359,16 +314,10 @@
 "    Changeset commit comment. Bug 1234.\n"
 msgstr ""
 
-msgid "support for bugzilla version 2.16."
-msgstr ""
-
 #, python-format
 msgid "connecting to %s:%s as %s, password %s\n"
 msgstr "forbinder til %s:%s som %s, kodeord %s\n"
 
-msgid "run a query."
-msgstr ""
-
 #, python-format
 msgid "query: %s %s\n"
 msgstr "forespørgsel: %s %s\n"
@@ -377,25 +326,13 @@
 msgid "failed query: %s %s\n"
 msgstr "fejlet forespørgsel: %s %s\n"
 
-msgid "get identity of longdesc field"
-msgstr ""
-
 msgid "unknown database schema"
 msgstr "ukendt databaseskema"
 
-msgid "filter not-existing bug ids from list."
-msgstr ""
-
-msgid "filter bug ids from list that already refer to this changeset."
-msgstr ""
-
 #, python-format
 msgid "bug %d already knows about changeset %s\n"
 msgstr "fejl %d kender allerede til ændring %s\n"
 
-msgid "tell bugzilla to send mail."
-msgstr ""
-
 msgid "telling bugzilla to send mail:\n"
 msgstr "beder bugzilla om at sende mail:\n"
 
@@ -409,68 +346,26 @@
 
 #, python-format
 msgid "bugzilla notify command %s"
-msgstr ""
+msgstr "bugzilla notificeringskommando %s"
 
 msgid "done\n"
 msgstr "færdig\n"
 
-msgid "look up numeric bugzilla user id."
-msgstr ""
-
 #, python-format
 msgid "looking up user %s\n"
 msgstr "slår bruger %s op\n"
 
-msgid "map name of committer to bugzilla user name."
-msgstr ""
-
-msgid ""
-"see if committer is a registered bugzilla user. Return\n"
-"        bugzilla username and userid if so. If not, return default\n"
-"        bugzilla username and userid."
-msgstr ""
-
 #, python-format
 msgid "cannot find bugzilla user id for %s"
-msgstr ""
+msgstr "kan ikke finde bugzilla bruger-id for %s"
 
 #, python-format
 msgid "cannot find bugzilla user id for %s or %s"
-msgstr ""
-
-msgid ""
-"add comment to bug. try adding comment as committer of\n"
-"        changeset, otherwise as default bugzilla user."
-msgstr ""
-
-msgid "support for bugzilla 2.18 series."
-msgstr ""
-
-msgid "support for bugzilla 3.0 series."
-msgstr ""
-
-msgid ""
-"return object that knows how to talk to bugzilla version in\n"
-"        use."
-msgstr ""
+msgstr "kan ikke finde bugzilla bruger-id for %s eller %s"
 
 #, python-format
 msgid "bugzilla version %s not supported"
-msgstr ""
-
-msgid ""
-"find valid bug ids that are referred to in changeset\n"
-"        comments and that do not already have references to this\n"
-"        changeset."
-msgstr ""
-
-msgid "update bugzilla bug with reference to changeset."
-msgstr ""
-
-msgid ""
-"strip leading prefix of repo root and turn into\n"
-"            url-safe path."
-msgstr ""
+msgstr "bugzilla version %s ikke understøttet"
 
 msgid ""
 "changeset {node|short} in repo {root} refers to bug {bug}.\n"
@@ -478,15 +373,9 @@
 "\t{desc|tabindent}"
 msgstr ""
 
-msgid ""
-"add comment to bugzilla for each changeset that refers to a\n"
-"    bugzilla bug id. only add a comment once per bug, so same change\n"
-"    seen multiple times does not fill bug with duplicate data."
-msgstr ""
-
 #, python-format
 msgid "python mysql support not available: %s"
-msgstr ""
+msgstr "python mysql-understøttelse ikke tilgængelig: %s"
 
 #, python-format
 msgid "hook type %s does not pass a changeset id"
@@ -494,7 +383,10 @@
 
 #, python-format
 msgid "database error: %s"
-msgstr ""
+msgstr "databasefejl: %s"
+
+msgid "command to display child changesets"
+msgstr "kommando til at vise børne-ændringer"
 
 msgid ""
 "show the children of the given or working directory revision\n"
@@ -506,43 +398,44 @@
 "    argument to --rev if given) is printed.\n"
 "    "
 msgstr ""
-"vis børnene til arbejdskatalogets eller en given revision\n"
-"\n"
-"    Udskriv arbejdskatalogets børnerevisioner. Hvis en revision\n"
-"    angivet med -r/--rev, så udskrives børnene til denne revision.\n"
+"vis børnene til arbejdskataloget eller en given revision\n"
+"\n"
+"    Udskriv arbejdskatalogets børnerevisioner. Hvis en revision er\n"
+"    angivet med -r/--rev, udskrives børnene til denne revision.\n"
 "    Hvis en fil er angivet, udskrives revisionen i hvilken filen sidst\n"
 "    blev ændret (efter arbejdskatalogets revision eller argumentet til\n"
 "    --rev, hvis givet).\n"
 "    "
 
 msgid "show children of the specified revision"
-msgstr ""
+msgstr "vis børn af den givne revision"
 
 msgid "hg children [-r REV] [FILE]"
-msgstr ""
-
-msgid "command to show certain statistics about revision history"
-msgstr ""
-
-msgid "Calculate stats"
-msgstr ""
+msgstr "hg children [-r REV] [FIL]"
+
+msgid "command to display statistics about repository history"
+msgstr "kommando til at vise statistikker om depotets historie"
 
 #, python-format
 msgid "Revision %d is a merge, ignoring...\n"
-msgstr ""
+msgstr "Revision %d er en sammenføjning; ignorerer...\n"
 
 #, python-format
 msgid "generating stats: %d%%"
 msgstr "genererer statistik: %d%%"
 
 msgid ""
-"graph count of revisions grouped by template\n"
-"\n"
-"    Will graph count of changed lines or revisions grouped by template\n"
-"    or alternatively by date, if dateformat is used. In this case it\n"
-"    will override template.\n"
-"\n"
-"    By default statistics are counted for number of changed lines.\n"
+"histogram of changes to the repository\n"
+"\n"
+"    This command will display a histogram representing the number\n"
+"    of changed lines or revisions, grouped according to the given\n"
+"    template. The default template will group changes by author.\n"
+"    The --dateformat option may be used to group the results by\n"
+"    date instead.\n"
+"\n"
+"    Statistics are based on the number of changed lines, or\n"
+"    alternatively the number of matching revisions if the\n"
+"    --changesets option is specified.\n"
 "\n"
 "    Examples:\n"
 "\n"
@@ -558,22 +451,26 @@
 "      # display count of lines changed in every year\n"
 "      hg churn -f '%Y' -s\n"
 "\n"
-"    The map file format used to specify aliases is fairly simple:\n"
+"    It is possible to map alternate email addresses to a main address\n"
+"    by providing a file using the following format:\n"
 "\n"
 "    <alias email> <actual email>\n"
 "\n"
-"    By default .hgchurn in the working directory root will be used, if\n"
-"    it exists. Use the --aliases option to override this.\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"
+"    Such a file may be specified with the --aliases option, otherwise a\n"
+"    .hgchurn file will be looked for in the working directory root.\n"
+"    "
+msgstr ""
+"histogram over ændringer i depotet\n"
+"\n"
+"    Denne kommando vil vise et histogram som repræsenterer antallet af\n"
+"    ændrede linier eller revisioner, grupperet efter en given\n"
+"    skabelon. Standardskabelonen vil gruppere ændringer efter\n"
+"    forfatter. Med --dateformat tilvalget kan resultaterne i stedet\n"
+"    grupperes efter dato.\n"
+"\n"
+"    Statistikken er basseret på antallet af ændrede linier eller\n"
+"    alternativt på antallet af matchende revisioner, hvis --changesets\n"
+"    tilvalget er specificeret.\n"
 "\n"
 "    Eksempler:\n"
 "\n"
@@ -589,17 +486,18 @@
 "      # viser antallet af linier ændret hvert år\n"
 "      hg churn -f '%Y' -s\n"
 "\n"
-"    Formatet for map-filen er rimelig simpelt:\n"
+"    Det er muligt at afbilde alternative e-mail-adresser til\n"
+"    hoved-adresser ved at bruge en fil med følgende format:\n"
 "\n"
 "    <alias email> <faktisk email>\n"
 "\n"
-"    Som standard bruges .hgchurn i arbejdskatalogets rod, hvis denne\n"
-"    findes. Brug --aliases tilvalget for at ændre dette.\n"
+"    En sådan fil kan angivet med --aliases tilvalget. Som standard\n"
+"    bruges .hgchurn i arbejdskatalogets rod, hvis denne findes.\n"
 "    "
 
 #, python-format
 msgid "assuming %i character terminal\n"
-msgstr ""
+msgstr "antager %i-tegn terminal\n"
 
 msgid "count rate for the specified revision or range"
 msgstr "lav statistik for de specificerede revisioner"
@@ -608,7 +506,7 @@
 msgstr "lav statistik for revisioner som matcher dato specifikationen"
 
 msgid "template to group changesets"
-msgstr "mønster for gruppering af ændringer"
+msgstr "skabelon for gruppering af ændringer"
 
 msgid "strftime-compatible format for grouping by date"
 msgstr "strftime-kompatibelt format til gruppering efter dato"
@@ -617,7 +515,7 @@
 msgstr "lav statistik efter antallet af ændringer"
 
 msgid "sort by key (default: sort by count)"
-msgstr "sortér efter nøgle (standard: sortering efter antal)"
+msgstr "sorter efter nøgle (standard: sorter efter antal)"
 
 msgid "file with email aliases"
 msgstr "fil med email-aliaser"
@@ -626,10 +524,10 @@
 msgstr "vis fremskridt"
 
 msgid "hg churn [-d DATE] [-r REV] [--aliases FILE] [--progress] [FILE]"
-msgstr "hg churn [-d DATO] [-r REVISIONER] [--aliases FIL] [--progress] [FIL]"
-
-msgid ""
-"add color output to status, qseries, and diff-related commands\n"
+msgstr "hg churn [-d DATO] [-r REV] [--aliases FIL] [--progress] [FIL]"
+
+msgid ""
+"colorize output from some commands\n"
 "\n"
 "This extension modifies the status command to add color to its output\n"
 "to reflect file status, the qseries command to add color to reflect\n"
@@ -642,11 +540,7 @@
 "function (aka ANSI escape codes). This module also provides the\n"
 "render_text function, which can be used to add effects to any text.\n"
 "\n"
-"To enable this extension, add this to your .hgrc file:\n"
-"[extensions]\n"
-"color =\n"
-"\n"
-"Default effects my be overriden from the .hgrc file:\n"
+"Default effects may be overridden from the .hgrc file:\n"
 "\n"
 "[color]\n"
 "status.modified = blue bold underline red_background\n"
@@ -675,38 +569,18 @@
 "diff.trailingwhitespace = bold red_background\n"
 msgstr ""
 
-msgid "Wrap text in commands to turn on each effect."
-msgstr ""
-
-msgid "run the status command with colored output"
-msgstr ""
-
-msgid "run the qseries command with colored output"
-msgstr ""
-
-msgid "wrap ui.write for colored diff output"
-msgstr ""
-
-msgid "wrap cmdutil.changeset_printer.showpatch with colored output"
-msgstr ""
-
-msgid "run the diff command with colored output"
-msgstr ""
-
-msgid "Initialize the extension."
-msgstr ""
-
-msgid "patch in command to command table and load effect map"
-msgstr ""
-
 msgid "when to colorize (always, auto, or never)"
-msgstr ""
+msgstr "hvornår der skal farvelægges (altid, automatisk eller aldrig)"
 
 msgid "don't colorize output"
-msgstr ""
-
-msgid "converting foreign VCS repositories to Mercurial"
-msgstr ""
+msgstr "farvelæg ikke output"
+
+#, python-format
+msgid "ignoring unknown color/effect %r (configured in color.%s)\n"
+msgstr ""
+
+msgid "import revisions from foreign VCS repositories into Mercurial"
+msgstr "importer revisioner fra fremmede VCS depoter ind i Mercurial"
 
 msgid ""
 "convert a foreign SCM repository to a Mercurial one.\n"
@@ -734,6 +608,18 @@
 "    basename of the source with '-hg' appended. If the destination\n"
 "    repository doesn't exist, it will be created.\n"
 "\n"
+"    By default, all sources except Mercurial will use\n"
+"    --branchsort. Mercurial uses --sourcesort to preserve original\n"
+"    revision numbers order. Sort modes have the following effects:\n"
+"      --branchsort: convert from parent to child revision when\n"
+"        possible, which means branches are usually converted one after\n"
+"        the other. It generates more compact repositories.\n"
+"      --datesort: sort revisions by date. Converted repositories have\n"
+"        good-looking changelogs but are often an order of magnitude\n"
+"        larger than the same ones generated by --branchsort.\n"
+"      --sourcesort: try to preserve source revisions order, only\n"
+"        supported by Mercurial sources.\n"
+"\n"
 "    If <REVMAP> isn't given, it will be put in a default location\n"
 "    (<dest>/.hg/shamap by default). The <REVMAP> is a simple text file\n"
 "    that maps each source commit ID to the destination ID for that\n"
@@ -762,7 +648,7 @@
 "\n"
 "    The 'include' directive causes a file, or all files under a\n"
 "    directory, to be included in the destination repository, and the\n"
-"    exclusion of all other files and directories not explicitely included.\n"
+"    exclusion of all other files and directories not explicitly included.\n"
 "    The 'exclude' directive causes files or directories to be omitted.\n"
 "    The 'rename' directive renames a file or directory. To rename from\n"
 "    a subdirectory into the root of the repository, use '.' as the\n"
@@ -779,6 +665,17 @@
 "    (in either the source or destination revision control system) that\n"
 "    should be used as the new parents for that node.\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"
+"    conjunction with a splicemap, it allows for a powerful combination\n"
+"    to help fix even the most badly mismanaged repositories and turn them\n"
+"    into nicely structured Mercurial repositories. The branchmap contains\n"
+"    lines of the form \"original_branch_name new_branch_name\".\n"
+"    \"original_branch_name\" is the name of the branch in the source\n"
+"    repository, and \"new_branch_name\" is the name of the branch is the\n"
+"    destination repository. This can be used to (for instance) move code\n"
+"    in one repository from \"default\" to a named branch.\n"
+"\n"
 "    Mercurial Source\n"
 "    -----------------\n"
 "\n"
@@ -802,7 +699,7 @@
 "    in the sandbox to find the CVS repository, and then uses CVS rlog\n"
 "    commands to find files to convert. This means that unless a\n"
 "    filemap is given, all files under the starting directory will be\n"
-"    converted, and that any directory reorganisation in the CVS\n"
+"    converted, and that any directory reorganization in the CVS\n"
 "    sandbox is ignored.\n"
 "\n"
 "    Because CVS does not have changesets, it is necessary to collect\n"
@@ -810,7 +707,7 @@
 "    source uses its internal changeset merging code by default but can\n"
 "    be configured to call the external 'cvsps' program by setting:\n"
 "        --config convert.cvsps='cvsps -A -u --cvs-direct -q'\n"
-"    This is a legacy option and may be removed in future.\n"
+"    This option is deprecated and will be removed in Mercurial 1.4.\n"
 "\n"
 "    The options shown are the defaults.\n"
 "\n"
@@ -853,9 +750,9 @@
 "    its subdirectories are listed as possible branches. If\n"
 "    \"svn://repo/path/tags\" exists, it is looked for tags referencing\n"
 "    converted branches. Default \"trunk\", \"branches\" and \"tags\" values\n"
-"    can be overriden with following options. Set them to paths\n"
-"    relative to the source URL, or leave them blank to disable\n"
-"    autodetection.\n"
+"    can be overridden with following options. Set them to paths\n"
+"    relative to the source URL, or leave them blank to disable auto\n"
+"    detection.\n"
 "\n"
 "    --config convert.svn.branches=branches    (directory name)\n"
 "        specify the directory containing branches\n"
@@ -915,73 +812,94 @@
 msgstr ""
 
 msgid "username mapping filename"
-msgstr ""
+msgstr "brugernavnsafbildningsfilnavn"
 
 msgid "destination repository type"
 msgstr "type for destinations repository"
 
 msgid "remap file names using contents of file"
-msgstr ""
+msgstr "konverter filnavne ved brug af filindhold"
 
 msgid "import up to target revision REV"
-msgstr ""
+msgstr "importer op til revision REV"
 
 msgid "source repository type"
-msgstr ""
+msgstr "kildedepotstype"
 
 msgid "splice synthesized history into place"
-msgstr ""
+msgstr "ind-splejs syntetisk historie"
+
+msgid "change branch names while converting"
+msgstr "omdøb grene under konverteringen"
+
+msgid "try to sort changesets by branches"
+msgstr "forsøg at sortere ændringer efter gren"
 
 msgid "try to sort changesets by date"
-msgstr ""
+msgstr "forsøg at sortere ændringer efter dato"
+
+msgid "preserve source changesets order"
+msgstr "bevar kildeændringerne ordning"
 
 msgid "hg convert [OPTION]... SOURCE [DEST [REVMAP]]"
-msgstr ""
+msgstr "hg convert [TILVALG]... KILDE [MÅL [REV-AFBILDNING]]"
 
 msgid "only return changes on specified branches"
-msgstr ""
+msgstr "returner kun ændringer på givne grene"
 
 msgid "prefix to remove from file names"
-msgstr ""
+msgstr "præfix der skal fjernes fra filnavne"
 
 msgid "only return changes after or between specified tags"
-msgstr ""
+msgstr "returner kun ændringer efter eller mellem givne mærkater"
 
 msgid "update cvs log cache"
-msgstr ""
+msgstr "opdater cvs log cache"
 
 msgid "create new cvs log cache"
-msgstr ""
+msgstr "opret ny cvs log cache"
 
 msgid "set commit time fuzz in seconds"
 msgstr ""
 
 msgid "specify cvsroot"
-msgstr ""
+msgstr "angiv cvsroot"
 
 msgid "show parent changesets"
-msgstr "vis forældre-ændring"
+msgstr "vis forældre-ændringer"
 
 msgid "show current changeset in ancestor branches"
 msgstr ""
 
 msgid "ignored for compatibility"
-msgstr ""
+msgstr "ignoreret af kompatibilitetsgrunde"
 
 msgid "hg debugcvsps [OPTION]... [PATH]..."
-msgstr ""
+msgstr "hg debugcvsps [TILVALG]... [STI]..."
+
+msgid ""
+"warning: lightweight checkouts may cause conversion failures, try with a "
+"regular branch instead.\n"
+msgstr ""
+
+msgid "bzr source type could not be determined\n"
+msgstr "bzr kildetype kunne ikke bestemmes\n"
 
 #, python-format
 msgid "%s is not a valid revision in current branch"
-msgstr ""
+msgstr "%s er ikke en gyldig revision i den nuværende gren"
 
 #, python-format
 msgid "%s is not available in %s anymore"
-msgstr ""
+msgstr "%s er ikke længere tilgængelig i %s"
+
+#, python-format
+msgid "%s.%s symlink has no target"
+msgstr "%s.%s symbolsk lænke er ikke noget mål"
 
 #, python-format
 msgid "cannot find required \"%s\" tool"
-msgstr ""
+msgstr "kan ikke finde påkrævet værktøj \"%s\""
 
 #, python-format
 msgid "running: %s\n"
@@ -989,92 +907,105 @@
 
 #, python-format
 msgid "%s error:\n"
-msgstr ""
-
-#, python-format
-msgid "%s %s"
-msgstr ""
+msgstr "%s fejl:\n"
 
 #, python-format
 msgid "syntax error in %s(%d): key/value pair expected"
-msgstr ""
+msgstr "syntaksfejl i %s(%d): nøgle/værdi-par forventet"
 
 #, python-format
 msgid "could not open map file %r: %s"
-msgstr ""
+msgstr "kunne ikke åbne afbildningsfil %r: %s"
 
 #, python-format
 msgid "%s: missing or unsupported repository"
-msgstr ""
+msgstr "%s: manglende eller usupporteret depot"
 
 #, python-format
 msgid "convert: %s\n"
-msgstr ""
+msgstr "convert: %s\n"
 
 #, python-format
 msgid "%s: unknown repository type"
-msgstr "%s: ukendt arkivtype"
+msgstr "%s: ukendt depottype"
+
+#, python-format
+msgid "unknown sort mode: %s"
+msgstr "ukendt sortering: %s"
 
 #, python-format
 msgid "cycle detected between %s and %s"
-msgstr ""
+msgstr "cyklus opdaget mellem %s og %s"
 
 msgid "not all revisions were sorted"
-msgstr ""
+msgstr "ikke alle revisioner blev sorteret"
 
 #, python-format
 msgid "Writing author map file %s\n"
-msgstr ""
+msgstr "Skriver forfatter-afbildningsfil %s\n"
 
 #, python-format
 msgid "Ignoring bad line in author map file %s: %s\n"
-msgstr ""
+msgstr "Ignorerer dårlig linie i forfatter-afbildningsfil %s: %s\n"
 
 #, python-format
 msgid "mapping author %s to %s\n"
-msgstr ""
+msgstr "afbilder forfatter %s til %s\n"
 
 #, python-format
 msgid "overriding mapping for author %s, was %s, will be %s\n"
-msgstr ""
+msgstr "tilsidesætter afbildning for forfatter %s, var %s, vil blive %s\n"
 
 #, python-format
 msgid "spliced in %s as parents of %s\n"
-msgstr ""
+msgstr "splejsede %s ind som forældre til %s\n"
 
 msgid "scanning source...\n"
-msgstr ""
+msgstr "skanner kilde...\n"
 
 msgid "sorting...\n"
-msgstr ""
+msgstr "sorterer...\n"
 
 msgid "converting...\n"
-msgstr ""
+msgstr "konverterer...\n"
 
 #, python-format
 msgid "source: %s\n"
-msgstr ""
+msgstr "kilde: %s\n"
 
 #, python-format
 msgid "assuming destination %s\n"
-msgstr ""
+msgstr "antager mål %s\n"
+
+msgid "more than one sort mode specified"
+msgstr "mere end end sorteringsmetode angivet"
+
+msgid "--sourcesort is not supported by this data source"
+msgstr "--sourcesort er ikke supporteret at denne datakilde"
+
+msgid ""
+"warning: support for external cvsps is deprecated and will be removed in "
+"Mercurial 1.4\n"
+msgstr ""
+"advarsel: support for ekstern cvsps er forældet og vil blive fjernet i "
+"Mercurial 1.4\n"
 
 #, python-format
 msgid "revision %s is not a patchset number or date"
 msgstr ""
 
 msgid "using builtin cvsps\n"
-msgstr ""
+msgstr "bruger indbygget cvsps\n"
 
 #, python-format
 msgid "connecting to %s\n"
-msgstr ""
+msgstr "forbinder til %s\n"
 
 msgid "CVS pserver authentication failed"
 msgstr "CVS pserver godkendelse fejlede"
 
 msgid "server sucks"
-msgstr ""
+msgstr "serveren sutter"
 
 #, python-format
 msgid "%d bytes missing from remote file"
@@ -1093,15 +1024,15 @@
 
 #, python-format
 msgid "reading cvs log cache %s\n"
-msgstr ""
+msgstr "læser cvs log-mellemlager %s\n"
 
 #, python-format
 msgid "cache has %d log entries\n"
-msgstr ""
+msgstr "mellemlager har %d lagerindgange\n"
 
 #, python-format
 msgid "error reading cache: %r\n"
-msgstr ""
+msgstr "fejl ved læsning af mellemlager: %r\n"
 
 #, python-format
 msgid "running %s\n"
@@ -1109,82 +1040,84 @@
 
 #, python-format
 msgid "prefix=%r directory=%r root=%r\n"
-msgstr ""
+msgstr "præfiks=%r katalog=%r rod=%r\n"
 
 msgid "RCS file must be followed by working file"
-msgstr ""
+msgstr "RCS-fil skal efterfølges af en arbejdsfil"
 
 msgid "must have at least some revisions"
-msgstr ""
+msgstr "kan have mindst nogle revisioner"
 
 msgid "expected revision number"
-msgstr ""
+msgstr "forventede et revisionsnummer"
 
 msgid "revision must be followed by date line"
-msgstr ""
+msgstr "revision skal efterfølges af datolinje"
 
 #, python-format
 msgid "found synthetic revision in %s: %r\n"
-msgstr ""
+msgstr "fandt syntetisk revision i %s: %r\n"
 
 #, python-format
 msgid "writing cvs log cache %s\n"
-msgstr ""
+msgstr "skriver cvs log-mellemlager %s\n"
 
 #, python-format
 msgid "%d log entries\n"
-msgstr ""
+msgstr "%d lagerindgange\n"
 
 msgid "creating changesets\n"
 msgstr "opretter ændringer\n"
 
 msgid "synthetic changeset cannot have multiple parents"
-msgstr ""
+msgstr "syntetisk ændring kan ikke have flere forældre"
 
 #, python-format
 msgid ""
 "warning: CVS commit message references non-existent branch %r:\n"
 "%s\n"
 msgstr ""
+"advarsel: CVS deponeringsbesked refererer en ikke-eksisterende gren %r:\n"
+"%s\n"
 
 #, python-format
 msgid "%d changeset entries\n"
 msgstr "%d ændringer\n"
 
 msgid "Python ElementTree module is not available"
-msgstr ""
+msgstr "Python ElementTree modulet er ikke tilstede"
 
 #, python-format
 msgid "cleaning up %s\n"
 msgstr "rydder op %s\n"
 
 msgid "internal calling inconsistency"
-msgstr ""
+msgstr "intern kaldeinkonsistens"
 
 msgid "errors in filemap"
-msgstr ""
+msgstr "fejl i filafbildning"
 
 #, python-format
 msgid "%s:%d: %r already in %s list\n"
-msgstr ""
+msgstr "%s:%d: %r er allerede i %s listen\n"
 
 #, python-format
 msgid "%s:%d: unknown directive %r\n"
-msgstr ""
+msgstr "%s:%d: ukendt direktiv %r\n"
 
 msgid "source repository doesn't support --filemap"
-msgstr ""
+msgstr "kildedepot understøtter ikke --filemap"
 
 #, python-format
 msgid "%s does not look like a GNU Arch repo"
-msgstr ""
+msgstr "%s ser ikke ud som et GNU Arch depot"
 
 msgid "cannot find a GNU Arch tool"
-msgstr ""
+msgstr "kan ikke finde GNU Arch"
 
 #, python-format
 msgid "analyzing tree version %s...\n"
-msgstr ""
+msgstr "analyserer træ version %s...\n"
 
 #, python-format
 msgid ""
@@ -1193,7 +1126,7 @@
 
 #, python-format
 msgid "applying revision %s...\n"
-msgstr ""
+msgstr "anvender revision %s...\n"
 
 #, python-format
 msgid "computing changeset between %s and %s...\n"
@@ -1204,20 +1137,20 @@
 msgstr "henter revision %s...\n"
 
 #, python-format
-msgid "analysing revision %s...\n"
+msgid "analyzing revision %s...\n"
 msgstr "analyserer revision %s...\n"
 
 #, python-format
 msgid "could not parse cat-log of %s"
-msgstr ""
+msgstr "kan ikke parse cat-log af %s"
 
 #, python-format
 msgid "%s is not a local Mercurial repo"
-msgstr ""
+msgstr "%s er ikke et lokalt Mercurial depot"
 
 #, python-format
 msgid "initializing destination %s repository\n"
-msgstr ""
+msgstr "initialiserer mål %s depot\n"
 
 msgid "run hg sink pre-conversion action\n"
 msgstr ""
@@ -1227,14 +1160,17 @@
 
 #, python-format
 msgid "pulling from %s into %s\n"
-msgstr ""
+msgstr "hiver fra %s ind i %s\n"
+
+msgid "filtering out empty revision\n"
+msgstr "bortfiltrerer tom revision\n"
 
 msgid "updating tags\n"
-msgstr ""
+msgstr "opdaterer mærkater\n"
 
 #, python-format
 msgid "%s is not a valid start revision"
-msgstr ""
+msgstr "%s er ikke en gyldig startrevision"
 
 #, python-format
 msgid "ignoring: %s\n"
@@ -1248,78 +1184,78 @@
 
 #, python-format
 msgid "%s does not look like a monotone repo"
-msgstr ""
+msgstr "%s ser ikke ud som et monotone depot"
 
 #, python-format
 msgid "copying file in renamed directory from '%s' to '%s'"
-msgstr ""
+msgstr "kopierer fil i omdøbt katalog fra '%s' til '%s'"
 
 msgid "reading p4 views\n"
-msgstr ""
+msgstr "læser p4 views\n"
 
 msgid "collecting p4 changelists\n"
-msgstr ""
+msgstr "samler p4 changelists\n"
 
 msgid "Subversion python bindings could not be loaded"
-msgstr ""
+msgstr "Subversion python bindingerne kunne ikke indlæses"
 
 #, python-format
 msgid "Subversion python bindings %d.%d found, 1.4 or later required"
-msgstr ""
+msgstr "fandt Subversion python bindinger %d.%d, 1.4 eller senere er påkrævet"
 
 msgid "Subversion python bindings are too old, 1.4 or later required"
-msgstr ""
+msgstr "Subversion python bindinger er for gamle, 1.4 eller senere er påkrævet"
 
 #, python-format
 msgid "svn: revision %s is not an integer"
-msgstr ""
+msgstr "svn: revision %s er ikke et heltal"
 
 #, python-format
 msgid "svn: start revision %s is not an integer"
-msgstr ""
+msgstr "svn: startrevision %s er ikke et heltal"
 
 #, python-format
 msgid "no revision found in module %s"
-msgstr ""
+msgstr "ingen revision fundet i modul %s"
 
 #, python-format
 msgid "expected %s to be at %r, but not found"
-msgstr ""
+msgstr "forventede at %s ville være ved %r, men fandt det ikke"
 
 #, python-format
 msgid "found %s at %r\n"
-msgstr ""
+msgstr "fandt %s ved %r\n"
 
 #, python-format
 msgid "ignoring empty branch %s\n"
-msgstr ""
+msgstr "ignorerer tom gren %s\n"
 
 #, python-format
 msgid "found branch %s at %d\n"
-msgstr ""
+msgstr "fandt gren %s ved %d\n"
 
 msgid "svn: start revision is not supported with more than one branch"
-msgstr ""
+msgstr "svn: startrevision er ikke understøttet ved mere end en gren"
 
 #, python-format
 msgid "svn: no revision found after start revision %d"
-msgstr ""
+msgstr "svn: fandt ingen revisioner efter startrevision %d"
 
 #, python-format
 msgid "no tags found at revision %d\n"
-msgstr ""
+msgstr "ingen mærkater fundet ved revision %d\n"
 
 #, python-format
 msgid "ignoring foreign branch %r\n"
-msgstr ""
+msgstr "ignorerer fremmed gren %r\n"
 
 #, python-format
 msgid "%s not found up to revision %d"
-msgstr ""
+msgstr "%s blev ikke fundet op til revision %d"
 
 #, python-format
 msgid "branch renamed from %s to %s at %d\n"
-msgstr ""
+msgstr "gren omdøbt fra %s til %s ved %d\n"
 
 #, python-format
 msgid "reparent to %s\n"
@@ -1327,30 +1263,19 @@
 
 #, python-format
 msgid "copied to %s from %s@%s\n"
-msgstr ""
+msgstr "kopieret til %s fra %s@%s\n"
 
 #, python-format
 msgid "gone from %s\n"
-msgstr ""
-
-#, python-format
-msgid "found parent directory %s\n"
-msgstr ""
-
-#, python-format
-msgid "base, entry %s %s\n"
-msgstr ""
-
-msgid "munge-o-matic\n"
-msgstr ""
-
-#, python-format
-msgid "info: %s %s %s %s\n"
+msgstr "væk fra %s\n"
+
+#, python-format
+msgid "entry %s\n"
 msgstr ""
 
 #, python-format
 msgid "unknown path in revision %d: %s\n"
-msgstr ""
+msgstr "ukendt sti i revision %d: %s\n"
 
 #, python-format
 msgid "mark %s came from %s:%d\n"
@@ -1358,53 +1283,50 @@
 
 #, python-format
 msgid "parsing revision %d (%d changes)\n"
-msgstr ""
+msgstr "parser revision %d (%d ændringer)\n"
 
 #, python-format
 msgid "found parent of branch %s at %d: %s\n"
-msgstr ""
+msgstr "fandt forælder til gren %s ved %d: %s\n"
 
 msgid "no copyfrom path, don't know what to do.\n"
 msgstr ""
 
 #, python-format
 msgid "fetching revision log for \"%s\" from %d to %d\n"
-msgstr ""
-
-#, python-format
-msgid "skipping blacklisted revision %d\n"
-msgstr ""
+msgstr "henter revisionslog for \"%s\" fra %d til %d\n"
 
 #, python-format
 msgid "revision %d has no entries\n"
-msgstr ""
+msgstr "revision %d har ikke nogen indgange\n"
 
 #, python-format
 msgid "svn: branch has no revision %s"
-msgstr ""
+msgstr "svn: gren har ikke nogen revision %s"
 
 #, python-format
 msgid "%r is not under %r, ignoring\n"
-msgstr ""
+msgstr "%r ikke under %r, ignorerer\n"
 
 #, python-format
 msgid "initializing svn repo %r\n"
-msgstr ""
+msgstr "initialiserer svn depot %r\n"
 
 #, python-format
 msgid "initializing svn wc %r\n"
-msgstr ""
+msgstr "initialiserer svn arbejdskatalog %r\n"
 
 msgid "unexpected svn output:\n"
-msgstr ""
+msgstr "uventet svn output:\n"
 
 msgid "unable to cope with svn output"
-msgstr ""
+msgstr "kan ikke håndtere svn output"
 
 msgid "XXX TAGS NOT IMPLEMENTED YET\n"
 msgstr ""
 
 msgid ""
+"command to allow external programs to compare revisions\n"
 "\n"
 "The `extdiff' Mercurial extension allows you to use external programs\n"
 "to compare revisions, or revision with working directory. The external diff\n"
@@ -1412,11 +1334,6 @@
 "non-option arguments: paths to directories containing snapshots of\n"
 "files to compare.\n"
 "\n"
-"To enable this extension:\n"
-"\n"
-"  [extensions]\n"
-"  hgext.extdiff =\n"
-"\n"
 "The `extdiff' extension also allows to configure new diff commands, so\n"
 "you do not need to type \"hg extdiff -p kdiff3\" always.\n"
 "\n"
@@ -1435,7 +1352,7 @@
 "\n"
 "  # add new command called vimdiff, runs gvimdiff with DirDiff plugin\n"
 "  # (see http://www.vim.org/scripts/script.php?script_id=102)\n"
-"  # Non english user, be sure to put \"let g:DirDiffDynamicDiffText = 1\" "
+"  # Non English user, be sure to put \"let g:DirDiffDynamicDiffText = 1\" "
 "in\n"
 "  # your .vimrc\n"
 "  vimdiff = gvim -f '+next' '+execute \"DirDiff\" argv(0) argv(1)'\n"
@@ -1446,43 +1363,27 @@
 "fast (at least faster than having to compare the entire tree).\n"
 msgstr ""
 
-msgid ""
-"snapshot files as of some revision\n"
-"    if not using snapshot, -I/-X does not work and recursive diff\n"
-"    in tools like kdiff3 and meld displays too many files."
-msgstr ""
-
 #, python-format
 msgid "making snapshot of %d files from rev %s\n"
-msgstr ""
+msgstr "laver øjebliksbillede af %d filer fra rev %s\n"
 
 #, python-format
 msgid "making snapshot of %d files from working directory\n"
-msgstr ""
-
-msgid ""
-"Do the actuall diff:\n"
-"\n"
-"    - copy to a temp structure if diffing 2 internal revisions\n"
-"    - copy to a temp structure if diffing working revision with\n"
-"      another one and more than 1 file is changed\n"
-"    - just invoke the diff for a single file in the working dir\n"
-"    "
-msgstr ""
+msgstr "laver øjebliksbillede af %d filer fra arbejdskataloget\n"
 
 msgid "cannot specify --rev and --change at the same time"
-msgstr ""
+msgstr "kan ikke angive --rev og --change på samme tid"
 
 #, python-format
 msgid "running %r in %s\n"
-msgstr ""
+msgstr "kører %r i %s\n"
 
 #, python-format
 msgid "file changed while diffing. Overwriting: %s (src: %s)\n"
 msgstr ""
 
 msgid "cleaning up temp directory\n"
-msgstr ""
+msgstr "rydder midlertidigt katalog op\n"
 
 msgid ""
 "use external program to diff repository (or selected files)\n"
@@ -1504,26 +1405,23 @@
 msgstr ""
 
 msgid "comparison program to run"
-msgstr ""
+msgstr "sammenligningsprogram der skal køres"
 
 msgid "pass option to comparison program"
-msgstr ""
+msgstr "videregiv argument til sammenligningsprogram"
 
 msgid "change made by revision"
-msgstr ""
+msgstr "ændring lavet i revision"
 
 msgid "hg extdiff [OPT]... [FILE]..."
-msgstr ""
-
-msgid "use closure to save diff command to use"
-msgstr ""
+msgstr "hg extdiff [TILVALG]... [FIL]..."
 
 #, python-format
 msgid "hg %s [OPTION]... [FILE]..."
-msgstr ""
-
-msgid "pulling, updating and merging in one command"
-msgstr ""
+msgstr "hg %s [TILVALG]... [FIL]..."
+
+msgid "pull, update and merge in one command"
+msgstr "træk, opdater og sammenføj i en kommando"
 
 msgid ""
 "pull changes from a remote repository, merge new changes if needed.\n"
@@ -1548,12 +1446,14 @@
 msgid ""
 "working dir not at branch tip (use \"hg update\" to check out branch tip)"
 msgstr ""
+"arbejdskataloget er ikke ved gren-spidsen (brug \"hg update\" for at hente "
+"gren-spidsen)"
 
 msgid "outstanding uncommitted merge"
-msgstr ""
+msgstr "udestående udeponeret sammenføjning"
 
 msgid "outstanding uncommitted changes"
-msgstr ""
+msgstr "udestående udeponeret ændringer"
 
 msgid "working directory is missing some files"
 msgstr "arbejdskataloget mangler nogle filer"
@@ -1561,19 +1461,25 @@
 msgid ""
 "multiple heads in this branch (use \"hg heads .\" and \"hg merge\" to merge)"
 msgstr ""
+"flere hoveder i denne gren (brug \"hg heads .\" og \"hg merge\" for at "
+"sammenføje)"
 
 #, python-format
 msgid "pulling from %s\n"
 msgstr "hiver fra %s\n"
 
-msgid "fetch -r doesn't work for remote repositories yet"
-msgstr "fetch -r virker endnu ikke for fjernarkiver"
+msgid ""
+"Other repository doesn't support revision lookup, so a rev cannot be "
+"specified."
+msgstr ""
 
 #, python-format
 msgid ""
 "not merging with %d other new branch heads (use \"hg heads .\" and \"hg merge"
 "\" to merge them)\n"
 msgstr ""
+"sammenføjer ikke med %d andre nye gren-hoveder (brug \"hg heads .\" og \"hg "
+"merge\" for at sammenføje dem)\n"
 
 #, python-format
 msgid "updating to %d:%s\n"
@@ -1585,57 +1491,44 @@
 
 #, python-format
 msgid "Automated merge with %s"
-msgstr ""
+msgstr "Automatisk sammenføjning med %s"
 
 #, python-format
 msgid "new changeset %d:%s merges remote changes with local\n"
 msgstr "ny ændring %d:%s fletter fjernændringer sammen med lokale\n"
 
 msgid "a specific revision you would like to pull"
-msgstr ""
+msgstr "en bestemt revision som du gerne vil hive ned"
 
 msgid "edit commit message"
-msgstr ""
+msgstr "rediger deponeringsbesked"
 
 msgid "edit commit message (DEPRECATED)"
-msgstr ""
+msgstr "rediger deponeringsbesked (FORÆLDET)"
 
 msgid "switch parents when merging"
-msgstr ""
+msgstr "ombyt forældre ved sammenføjning"
 
 msgid "hg fetch [SOURCE]"
-msgstr ""
-
-msgid " returns of the good and bad signatures"
-msgstr ""
+msgstr "hg fetch [KILDE]"
+
+msgid "commands to sign and verify changesets"
+msgstr "kommandoer til at underskrive og verificere ændringer"
 
 msgid "error while verifying signature"
-msgstr ""
-
-msgid "create a new gpg instance"
-msgstr ""
-
-msgid ""
-"\n"
-"    walk over every sigs, yields a couple\n"
-"    ((node, version, sig), (filename, linenumber))\n"
-"    "
-msgstr ""
-
-msgid "get the keys who signed a data"
-msgstr ""
+msgstr "fejl ved verifikation af underskrift"
 
 #, python-format
 msgid "%s Bad signature from \"%s\"\n"
-msgstr ""
+msgstr "%s Dårlig underskrift fra \"%s\"\n"
 
 #, python-format
 msgid "%s Note: Signature has expired (signed by: \"%s\")\n"
-msgstr ""
+msgstr "%s Bemærk: underskriften er udløbet (underskrevet af \"%s\")\n"
 
 #, python-format
 msgid "%s Note: This key has expired (signed by: \"%s\")\n"
-msgstr ""
+msgstr "%s Bemærk: denne nøgle er udløbet (underskrevet af \"%s\")\n"
 
 msgid "list signed changesets"
 msgstr "vis underskrevne ændringer"
@@ -1651,9 +1544,6 @@
 msgid "No valid signature for %s\n"
 msgstr "Ingen gyldig signatur for %s\n"
 
-msgid "associate a string to a key (username, comment)"
-msgstr ""
-
 msgid ""
 "add a signature for the current or given revision\n"
 "\n"
@@ -1665,7 +1555,7 @@
 msgstr ""
 
 msgid "uncommitted merge - please provide a specific revision"
-msgstr ""
+msgstr "udeponeret sammenføjning - angiv venligst en specifik revision"
 
 msgid "Error while signing"
 msgstr "Fejl ved underskrivning"
@@ -1674,99 +1564,51 @@
 "working copy of .hgsigs is changed (please commit .hgsigs manually or use --"
 "force)"
 msgstr ""
+"arbejdskopien af .hgsigs er ændret (deponer venligst .hgsigs manuelt eller "
+"brug --force)"
 
 #, python-format
 msgid "Added signature for changeset %s"
-msgstr ""
-
-msgid "map a manifest into some text"
-msgstr ""
+msgstr "Tilføjede underskrift af ændring %s"
 
 msgid "unknown signature version"
-msgstr ""
+msgstr "ukendt underskrift-version"
 
 msgid "make the signature local"
-msgstr ""
+msgstr "lav underskriften lokal"
 
 msgid "sign even if the sigfile is modified"
-msgstr ""
+msgstr "underskriv selv hvis signaturfilen er ændret"
 
 msgid "do not commit the sigfile after signing"
-msgstr ""
+msgstr "deponer ikke signaturfilen efter underskrivning"
 
 msgid "the key id to sign with"
-msgstr ""
+msgstr "nøgle ID der skal underskrives med"
 
 msgid "commit message"
-msgstr ""
+msgstr "deponeringsbesked"
 
 msgid "hg sign [OPTION]... [REVISION]..."
-msgstr ""
+msgstr "hg sign [TILVALG]... [REVISION]..."
 
 msgid "hg sigcheck REVISION"
-msgstr ""
+msgstr "hg sigcheck REVISION"
 
 msgid "hg sigs"
-msgstr ""
-
-msgid ""
-"show revision graphs in terminal windows\n"
+msgstr "hg sigs"
+
+msgid ""
+"command to view revision graphs from a shell\n"
 "\n"
 "This extension adds a --graph option to the incoming, outgoing and log\n"
-"commands. When this options is given, an ascii representation of the\n"
+"commands. When this options is given, an ASCII representation of the\n"
 "revision graph is also shown.\n"
 msgstr ""
 
-msgid ""
-"cset DAG generator yielding (rev, node, [parents]) tuples\n"
-"\n"
-"    This generator function walks through the revision history from "
-"revision\n"
-"    start to revision stop (which must be less than or equal to start).\n"
-"    "
-msgstr ""
-
-msgid ""
-"file cset DAG generator yielding (rev, node, [parents]) tuples\n"
-"\n"
-"    This generator function walks through the revision history of a single\n"
-"    file from revision start to revision stop (which must be less than or\n"
-"    equal to start).\n"
-"    "
-msgstr ""
-
-msgid ""
-"grapher for asciigraph on a list of nodes and their parents\n"
-"\n"
-"    nodes must generate tuples (node, parents, char, lines) where\n"
-"     - parents must generate the parents of node, in sorted order,\n"
-"       and max length 2,\n"
-"     - char is the char to print as the node symbol, and\n"
-"     - lines are the lines to display next to the node.\n"
-"    "
-msgstr ""
-
-msgid ""
-"prints an ASCII graph of the DAG returned by the grapher\n"
-"\n"
-"    grapher is a generator that emits tuples with the following elements:\n"
-"\n"
-"      - Character to use as node's symbol.\n"
-"      - List of lines to display as the node's text.\n"
-"      - Column of the current node in the set of ongoing edges.\n"
-"      - Edges; a list of (col, next_col) indicating the edges between\n"
-"        the current node and its parents.\n"
-"      - Number of columns (ongoing edges) in the current revision.\n"
-"      - The difference between the number of columns (ongoing edges)\n"
-"        in the next revision and the number of columns (ongoing edges)\n"
-"        in the current revision. That is: -1 means one column removed;\n"
-"        0 means no columns added or removed; 1 means one column added.\n"
-"    "
-msgstr ""
-
 #, python-format
 msgid "--graph option is incompatible with --%s"
-msgstr ""
+msgstr "--graph tilvalget er ikke kompatibelt med --%s"
 
 msgid ""
 "show revision history alongside an ASCII revision graph\n"
@@ -1779,17 +1621,6 @@
 "    "
 msgstr ""
 
-msgid ""
-"show the outgoing changesets alongside an ASCII revision graph\n"
-"\n"
-"    Print the outgoing changesets alongside a revision graph drawn with\n"
-"    ASCII characters.\n"
-"\n"
-"    Nodes printed as an @ character are parents of the working\n"
-"    directory.\n"
-"    "
-msgstr ""
-
 #, python-format
 msgid "comparing with %s\n"
 msgstr "sammenligner med %s\n"
@@ -1797,37 +1628,23 @@
 msgid "no changes found\n"
 msgstr "fandt ingen ændringer\n"
 
-msgid ""
-"show the incoming changesets alongside an ASCII revision graph\n"
-"\n"
-"    Print the incoming changesets alongside a revision graph drawn with\n"
-"    ASCII characters.\n"
-"\n"
-"    Nodes printed as an @ character are parents of the working\n"
-"    directory.\n"
-"    "
-msgstr ""
-
-msgid "wrap the command"
-msgstr ""
-
 msgid "show the revision DAG"
-msgstr ""
+msgstr "vis revisionsgrafen"
 
 msgid "limit number of changes displayed"
-msgstr ""
+msgstr "begræns antaln viste ændringer"
 
 msgid "show patch"
-msgstr ""
+msgstr "vis lap"
 
 msgid "show the specified revision or range"
-msgstr ""
+msgstr "vis den angivne revision eller interval"
 
 msgid "hg glog [OPTION]... [FILE]"
-msgstr ""
-
-msgid ""
-"CIA notification\n"
+msgstr "hg glog [TILVALG]... [FIL]"
+
+msgid ""
+"hooks for integrating with the CIA.vc notification service\n"
 "\n"
 "This is meant to be run as a changegroup or incoming hook.\n"
 "To configure it, set the following options in your hgrc:\n"
@@ -1842,8 +1659,7 @@
 "# Append a diffstat to the log message (optional)\n"
 "#diffstat = False\n"
 "# Template to use for log messages (optional)\n"
-"#template = {desc}\n"
-"{baseurl}/rev/{node}-- {diffstat}\n"
+"#template = {desc}\\n{baseurl}/rev/{node}-- {diffstat}\n"
 "# Style to use (optional)\n"
 "#style = foo\n"
 "# The URL of the CIA notification service (optional)\n"
@@ -1864,21 +1680,12 @@
 "baseurl = http://server/path/to/repo\n"
 msgstr ""
 
-msgid " A CIA message "
-msgstr ""
-
-msgid " CIA notification class "
-msgstr ""
-
 #, python-format
 msgid "hgcia: sending update to %s\n"
-msgstr ""
-
-msgid " send CIA notification "
-msgstr ""
+msgstr "hgcia: sender opdatering til %s\n"
 
 msgid "email.from must be defined when sending by email"
-msgstr ""
+msgstr "email.from skal være defineret ved afsendelse af email"
 
 msgid "cia: no user specified"
 msgstr "cia: ingen bruger angivet"
@@ -1887,29 +1694,17 @@
 msgstr "cia: intet project angivet"
 
 msgid ""
-"browsing the repository in a graphical way\n"
+"browse the repository in a graphical way\n"
 "\n"
 "The hgk extension allows browsing the history of a repository in a\n"
 "graphical way. It requires Tcl/Tk version 8.4 or later. (Tcl/Tk is not\n"
 "distributed with Mercurial.)\n"
 "\n"
 "hgk consists of two parts: a Tcl script that does the displaying and\n"
-"querying of information, and an extension to mercurial named hgk.py,\n"
+"querying of information, and an extension to Mercurial named hgk.py,\n"
 "which provides hooks for hgk to get information. hgk can be found in\n"
-"the contrib directory, and hgk.py can be found in the hgext directory.\n"
-"\n"
-"To load the hgext.py extension, add it to your .hgrc file (you have to\n"
-"use your global $HOME/.hgrc file, not one in a repository). You can\n"
-"specify an absolute path:\n"
-"\n"
-"  [extensions]\n"
-"  hgk=/usr/local/lib/hgk.py\n"
-"\n"
-"Mercurial can also scan the default python library path for a file\n"
-"named 'hgk.py' if you set hgk empty:\n"
-"\n"
-"  [extensions]\n"
-"  hgk=\n"
+"the contrib directory, and the extension is shipped in the hgext\n"
+"repository, and needs to be enabled.\n"
 "\n"
 "The hg view command will launch the hgk Tcl script. For this command\n"
 "to work, hgk must be in your search path. Alternately, you can specify\n"
@@ -1932,10 +1727,10 @@
 msgstr ""
 
 msgid "output common ancestor information"
-msgstr ""
+msgstr "udskriv information om fælles forfar"
 
 msgid "cat a specific revision"
-msgstr ""
+msgstr "udskriv en bestemt revision"
 
 msgid "cat-file: type or revision not supplied\n"
 msgstr ""
@@ -1947,137 +1742,147 @@
 msgstr ""
 
 msgid "print revisions"
-msgstr ""
+msgstr "udskriv revisioner"
 
 msgid "print extension options"
-msgstr ""
+msgstr "udskriv udvidelses valgmuligheder"
 
 msgid "start interactive history viewer"
-msgstr ""
+msgstr "start interaktiv historievisning"
 
 msgid "hg view [-l LIMIT] [REVRANGE]"
-msgstr ""
+msgstr "hg view [-l GRÆNSE] [REV-INTERVAL]"
 
 msgid "generate patch"
-msgstr ""
+msgstr "generer lap"
 
 msgid "recursive"
-msgstr ""
+msgstr "rekursiv"
 
 msgid "pretty"
-msgstr ""
+msgstr "pæn"
 
 msgid "stdin"
-msgstr ""
+msgstr "standardinddata"
 
 msgid "detect copies"
-msgstr ""
+msgstr "detekter kopier"
 
 msgid "search"
 msgstr "søg"
 
 msgid "hg git-diff-tree [OPTION]... NODE1 NODE2 [FILE]..."
-msgstr ""
+msgstr "hg git-diff-tree [TILVALG]... KNUDE1 KNUDE2 [FIL]..."
 
 msgid "hg debug-cat-file [OPTION]... TYPE FILE"
-msgstr ""
+msgstr "hg debug-cat-file [TILVALG      ]... TYPE FIL"
 
 msgid "hg debug-config"
-msgstr ""
-
-msgid "hg debug-merge-base node node"
-msgstr ""
+msgstr "hg debug-config"
+
+msgid "hg debug-merge-base REV REV"
+msgstr "hg debug-merge-base REV REV"
 
 msgid "ignored"
 msgstr "Ignoreret"
 
 msgid "hg debug-rev-parse REV"
-msgstr ""
+msgstr "hg debug-rev-parse REV"
 
 msgid "header"
 msgstr ""
 
 msgid "topo-order"
-msgstr ""
+msgstr "topologisk ordning"
 
 msgid "parents"
-msgstr ""
+msgstr "forældre"
 
 msgid "max-count"
 msgstr ""
 
-msgid "hg debug-rev-list [options] revs"
-msgstr ""
-
-msgid ""
-"syntax highlighting in hgweb, based on Pygments\n"
-"\n"
-"It depends on the pygments syntax highlighting library:\n"
+msgid "hg debug-rev-list [OPTION]... REV..."
+msgstr "hg debug-rev-list [TILVALG]... REV..."
+
+msgid ""
+"syntax highlighting for hgweb (requires Pygments)\n"
+"\n"
+"It depends on the Pygments syntax highlighting library:\n"
 "http://pygments.org/\n"
 "\n"
-"To enable the extension add this to hgrc:\n"
-"\n"
-"[extensions]\n"
-"hgext.highlight =\n"
-"\n"
 "There is a single configuration option:\n"
 "\n"
 "[web]\n"
 "pygments_style = <style>\n"
 "\n"
 "The default is 'colorful'.\n"
-"\n"
-"-- Adam Hupp <adam@hupp.org>\n"
-msgstr ""
-
-msgid "inotify-based status acceleration for Linux systems\n"
-msgstr ""
+msgstr ""
+
+msgid "accelerate status report using Linux's inotify service"
+msgstr "accelerer statusreporter ved brug af Linux's inotify service"
 
 msgid "start an inotify server for this repository"
-msgstr ""
+msgstr "start en inotify server for dette depot"
+
+msgid ""
+"debugging information for inotify extension\n"
+"\n"
+"    Prints the list of directories being watched by the inotify server.\n"
+"    "
+msgstr ""
+
+msgid "directories being watched:\n"
+msgstr "kataloger som bliver overvåget:\n"
+
+msgid "run server in background"
+msgstr "kører serveren i baggrunden"
+
+msgid "used internally by daemon mode"
+msgstr "brugt internt i daemon mode"
+
+msgid "minutes to sit idle before exiting"
+msgstr "antal minutter der skal ventes i tomgang før afslutning"
+
+msgid "name of file to write process ID to"
+msgstr "navn på fil at skrive process ID til"
+
+msgid "hg inserve [OPTION]..."
+msgstr "hg inserve [TILVALG]..."
 
 msgid "(found dead inotify server socket; removing it)\n"
-msgstr ""
+msgstr "(fandt død inotify server sokkel; fjerner den)\n"
 
 msgid "(starting inotify server)\n"
-msgstr ""
+msgstr "(starter inotify server)\n"
 
 #, python-format
 msgid "could not start inotify server: %s\n"
-msgstr ""
+msgstr "kunne ikke starte inotify server: %s\n"
 
 #, python-format
 msgid "could not talk to new inotify server: %s\n"
-msgstr ""
+msgstr "kunne ikke snakke med ny inotify server: %s\n"
 
 msgid "(inotify server not running)\n"
-msgstr ""
+msgstr "(inotify server kører ikke)\n"
 
 #, python-format
 msgid "failed to contact inotify server: %s\n"
-msgstr ""
-
-msgid "run server in background"
-msgstr ""
-
-msgid "used internally by daemon mode"
-msgstr ""
-
-msgid "minutes to sit idle before exiting"
-msgstr ""
-
-msgid "name of file to write process ID to"
-msgstr ""
-
-msgid "hg inserve [OPT]..."
-msgstr ""
+msgstr "kontakt med inotify server miskykkedes: %s\n"
+
+msgid "received empty answer from inotify server"
+msgstr "modtog tomt svar fra inotify server"
 
 #, python-format
 msgid "(inotify: received response from incompatible server version %d)\n"
-msgstr ""
+msgstr "(inotify: modtog svar fra inkompatibel server version %d)\n"
+
+#, python-format
+msgid "(inotify: received '%s' response when expecting '%s')\n"
+msgstr "(inotify: modtog '%s' svar når '%s' blev forventet)\n"
 
 msgid "this system does not seem to support inotify"
-msgstr ""
+msgstr "dette system ser ikke ud til at understøtte inotify"
 
 #, python-format
 msgid "*** the current per-user limit on the number of inotify watches is %s\n"
@@ -2087,11 +1892,11 @@
 msgstr ""
 
 msgid "*** counting directories: "
-msgstr ""
+msgstr "*** tæller kataloger: "
 
 #, python-format
 msgid "found %d\n"
-msgstr ""
+msgstr "fandt %d\n"
 
 #, python-format
 msgid "*** to raise the limit from %d to %d (run as root):\n"
@@ -2111,11 +1916,11 @@
 
 #, python-format
 msgid "watching %r\n"
-msgstr ""
+msgstr "overvåget %r\n"
 
 #, python-format
 msgid "watching directories under %r\n"
-msgstr ""
+msgstr "overvåger kataloger under %r\n"
 
 #, python-format
 msgid "status: %r dir(%d) -> %s\n"
@@ -2134,23 +1939,23 @@
 msgstr ""
 
 msgid "rescanning due to .hgignore change\n"
-msgstr ""
+msgstr "genskanner på grund af .hgignore ændring\n"
 
 #, python-format
 msgid "%s event: created %s\n"
-msgstr ""
+msgstr "%s hændelse: oprettede %s\n"
 
 #, python-format
 msgid "%s event: deleted %s\n"
-msgstr ""
+msgstr "%s hændelse: slettede %s\n"
 
 #, python-format
 msgid "%s event: modified %s\n"
-msgstr ""
+msgstr "%s hændelse: ændrede %s\n"
 
 #, python-format
 msgid "filesystem containing %s was unmounted\n"
-msgstr ""
+msgstr "filsystem indeholdende %s blev afmonteret\n"
 
 #, python-format
 msgid "%s readable: %d bytes\n"
@@ -2169,29 +1974,39 @@
 msgstr ""
 
 #, python-format
-msgid "%s processing %d deferred events as %d\n"
-msgstr ""
-
-#, python-format
 msgid "could not start server: %s"
-msgstr ""
+msgstr "kunne ikke starte server: %s"
+
+#, python-format
+msgid "answering query for %r\n"
+msgstr "svarer forespørgsel for %r\n"
 
 #, python-format
 msgid "received query from incompatible client version %d\n"
-msgstr ""
-
-#, python-format
-msgid "answering query for %r\n"
-msgstr ""
+msgstr "modtog forespørgsel fra inkompatibel klient version %d\n"
+
+#, python-format
+msgid "unrecognized query type: %s\n"
+msgstr "genkendte ikke forespørgselstype: %s\n"
 
 msgid "finished setup\n"
-msgstr ""
-
-msgid "polling: no timeout\n"
-msgstr ""
-
-#, python-format
-msgid "polling: %sms timeout\n"
+msgstr "afsluttede opsætning\n"
+
+msgid ""
+"expand expressions into changelog and summaries\n"
+"\n"
+"This extension allows the use of a special syntax in summaries,\n"
+"which will be automatically expanded into links or any other\n"
+"arbitrary expression, much like InterWiki does.\n"
+"\n"
+"A few example patterns (link to bug tracking, etc.) that may\n"
+"be used in your hgrc:\n"
+"\n"
+"  [interhg]\n"
+"  issues = s!issue(\\d+)!<a href=\"http://bts/issue\\1\">issue\\1</a>!\n"
+"  bugzilla = s!((?:bug|b=|(?=#?\\d{4,}))(?:\\s*#?)(\\d+))!<a..=\\2\">\\1</a>!"
+"i\n"
+"  boldify = s!(^|\\s)#(\\d+)\\b! <b>#\\2</b>!\n"
 msgstr ""
 
 #, python-format
@@ -2203,7 +2018,7 @@
 msgstr ""
 
 msgid ""
-"keyword expansion in local repositories\n"
+"expand keywords in tracked files\n"
 "\n"
 "This extension expands RCS/CVS-like or self-customized $Keywords$ in\n"
 "tracked text files selected by your configuration.\n"
@@ -2235,7 +2050,7 @@
 "kwdemo\" to control the results of your config changes.\n"
 "\n"
 "Before changing/disabling active keywords, run \"hg kwshrink\" to avoid\n"
-"the risk of inadvertedly storing expanded keywords in the change\n"
+"the risk of inadvertently storing expanded keywords in the change\n"
 "history.\n"
 "\n"
 "To force expansion after enabling it, or a configuration change, run\n"
@@ -2251,31 +2066,6 @@
 "\"Log = {desc}\" expands to the first line of the changeset description.\n"
 msgstr ""
 
-msgid "Returns hgdate in cvs-like UTC format."
-msgstr ""
-
-msgid ""
-"\n"
-"    Sets up keyword templates, corresponding keyword regex, and\n"
-"    provides keyword substitution functions.\n"
-"    "
-msgstr ""
-
-msgid "Replaces keywords in data with expanded template."
-msgstr ""
-
-msgid "Returns data with keywords expanded."
-msgstr ""
-
-msgid ""
-"Returns true if path matches [keyword] pattern\n"
-"        and is not a symbolic link.\n"
-"        Caveat: localrepository._link fails on Windows."
-msgstr ""
-
-msgid "Overwrites selected files expanding/shrinking keywords."
-msgstr ""
-
 #, python-format
 msgid "overwriting %s expanding keywords\n"
 msgstr ""
@@ -2284,55 +2074,17 @@
 msgid "overwriting %s shrinking keywords\n"
 msgstr ""
 
-msgid "Unconditionally removes all keyword substitutions from text."
-msgstr ""
-
-msgid "Returns text with all keyword substitutions removed."
-msgstr ""
-
-msgid "Returns lines with keyword substitutions removed."
-msgstr ""
-
-msgid ""
-"If in restricted mode returns data read from wdir with\n"
-"        keyword substitutions removed."
-msgstr ""
-
-msgid ""
-"\n"
-"    Subclass of filelog to hook into its read, add, cmp methods.\n"
-"    Keywords are \"stored\" unexpanded, and processed on reading.\n"
-"    "
-msgstr ""
-
-msgid "Expands keywords when reading filelog."
-msgstr ""
-
-msgid "Removes keyword substitutions when adding to filelog."
-msgstr ""
-
-msgid "Removes keyword substitutions for comparison."
-msgstr ""
-
-msgid ""
-"Bails out if [keyword] configuration is not active.\n"
-"    Returns status of working directory."
-msgstr ""
-
 msgid "[keyword] patterns cannot match"
-msgstr ""
+msgstr "[keyword] mønstre kan ikke matche"
 
 msgid "no [keyword] patterns configured"
-msgstr ""
-
-msgid "Selects files and passes them to kwtemplater.overwrite."
-msgstr ""
+msgstr "ingen [keyword] mønstre konfigureret"
 
 msgid ""
 "print [keywordmaps] configuration and an expansion example\n"
 "\n"
 "    Show current, custom, or default keyword template maps and their\n"
-"    expansion.\n"
+"    expansions.\n"
 "\n"
 "    Extend current configuration by specifying maps as arguments and\n"
 "    optionally by reading from an additional hgrc file.\n"
@@ -2342,13 +2094,13 @@
 msgstr ""
 
 #, python-format
-msgid ""
-"\n"
-"\t%s\n"
-msgstr ""
-
-#, python-format
 msgid "creating temporary repository at %s\n"
+msgstr "opretter midlertidigt depot ved %s\n"
+
+#, python-format
+msgid ""
+"\n"
+"\tconfig using %s keyword template maps\n"
 msgstr ""
 
 #, python-format
@@ -2363,11 +2115,19 @@
 #, python-format
 msgid ""
 "\n"
+"\t%s keywords expanded%s\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"\n"
 "removing temporary repository %s\n"
 msgstr ""
-
-msgid ""
-"expand keywords in working directory\n"
+"\n"
+"fjerner midlertidigt depot %s\n"
+
+msgid ""
+"expand keywords in the working directory\n"
 "\n"
 "    Run after (re)enabling keyword expansion.\n"
 "\n"
@@ -2376,16 +2136,31 @@
 msgstr ""
 
 msgid ""
-"print files currently configured for keyword expansion\n"
-"\n"
-"    Crosscheck which files in working directory are potential targets\n"
-"    for keyword expansion. That is, files matched by [keyword] config\n"
-"    patterns but not symlinks.\n"
-"    "
-msgstr ""
-
-msgid ""
-"revert expanded keywords in working directory\n"
+"show files configured for keyword expansion\n"
+"\n"
+"    List which files in the working directory are matched by the\n"
+"    [keyword] configuration patterns.\n"
+"\n"
+"    Useful to prevent inadvertent keyword expansion and to speed up\n"
+"    execution by including only files that are actual candidates\n"
+"    for expansion.\n"
+"\n"
+"    See \"hg help keyword\" on how to construct patterns both for\n"
+"    inclusion and exclusion of files.\n"
+"\n"
+"    Use -u/--untracked to list untracked files as well.\n"
+"\n"
+"    With -a/--all and -v/--verbose the codes used to show the status\n"
+"    of files are:\n"
+"    K = keyword expansion candidate\n"
+"    k = keyword expansion candidate (untracked)\n"
+"    I = ignored\n"
+"    i = ignored (untracked)\n"
+"    "
+msgstr ""
+
+msgid ""
+"revert expanded keywords in the working directory\n"
 "\n"
 "    Run before changing/disabling active keywords or if you experience\n"
 "    problems with \"hg import\" or \"hg merge\".\n"
@@ -2394,38 +2169,8 @@
 "    "
 msgstr ""
 
-msgid ""
-"Collects [keyword] config in kwtools.\n"
-"    Monkeypatches dispatch._parse if needed."
-msgstr ""
-
-msgid "Monkeypatch dispatch._parse to obtain running hg command."
-msgstr ""
-
-msgid ""
-"Sets up repo as kwrepo for keyword substitution.\n"
-"    Overrides file method to return kwfilelog instead of filelog\n"
-"    if file matches user configuration.\n"
-"    Wraps commit to overwrite configured files with updated\n"
-"    keyword substitutions.\n"
-"    Monkeypatches patch and webcommands."
-msgstr ""
-
-msgid ""
-"Monkeypatch/wrap patch.patchfile.__init__ to avoid\n"
-"        rejects or conflicts due to expanded keywords in working dir."
-msgstr ""
-
-msgid ""
-"Monkeypatch patch.diff to avoid expansion except when\n"
-"        comparing against working dir."
-msgstr ""
-
-msgid "Wraps webcommands.x turning off keyword expansion."
-msgstr ""
-
 msgid "show default keyword template maps"
-msgstr ""
+msgstr "vis standard keyword skabelon-afbildninger"
 
 msgid "read maps from rcfile"
 msgstr ""
@@ -2434,25 +2179,25 @@
 msgstr ""
 
 msgid "hg kwexpand [OPTION]... [FILE]..."
-msgstr ""
+msgstr "hg kwexpand [TILVALG]... [FIL]..."
 
 msgid "show keyword status flags of all files"
-msgstr ""
+msgstr "vis keyword status for alle filer"
 
 msgid "show files excluded from expansion"
-msgstr ""
+msgstr "vis filer ekskluderet fra ekspansion"
 
 msgid "additionally show untracked files"
-msgstr ""
+msgstr "vis også ikke-fulgte filer"
 
 msgid "hg kwfiles [OPTION]... [FILE]..."
-msgstr ""
+msgstr "hg kwfiles [TILVALG]... [FIL]..."
 
 msgid "hg kwshrink [OPTION]... [FILE]..."
-msgstr ""
-
-msgid ""
-"patch management and development\n"
+msgstr "hg kwshrink [TILVALG]... [FIL]..."
+
+msgid ""
+"manage a stack of patches\n"
 "\n"
 "This extension lets you work with a stack of patches in a Mercurial\n"
 "repository. It manages two stacks of patches - all known patches, and\n"
@@ -2475,40 +2220,29 @@
 "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"
+"håndter en stak af lapper\n"
+"\n"
+"Denne udvidelse lader dig arbejde med en stak af lapper (patches) i et\n"
+"Mercurial repository. Den håndterer to stakke af lapper - alle kendte\n"
+"lapper og alle anvendte lapper (en delmængde af de kendte lapper).\n"
+"\n"
+"Kendte lapper er repræsenteret som lap-filer i .hg/patches\n"
+"biblioteket. Anvendte lapper er både lap-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"
-
-msgid ""
-"Update all references to a field in the patch header.\n"
-"        If none found, add it email style."
-msgstr ""
-
-msgid ""
-"Remove existing message, keeping the rest of the comments fields.\n"
-"        If comments contains 'subject: ', message will prepend\n"
-"        the field and a blank line."
-msgstr ""
+"forbered repository til at arbejde med lapper    qinit\n"
+"opret ny lap                                     qnew\n"
+"importer eksisterende lap                        qimport\n"
+"\n"
+"list lap-serien                                  qseries\n"
+"list anvendte lapper                             qapplied\n"
+"list navnet på den øverste lap                   qtop\n"
+"\n"
+"anvend og put lap på stakken                     qpush\n"
+"fjern lap fra stakken                            qpop\n"
+"genopfrisk indholdet af den øverste lap          qrefresh\n"
 
 #, python-format
 msgid "%s appears more than once in %s"
@@ -2563,18 +2297,18 @@
 
 #, python-format
 msgid "apply failed for patch %s"
-msgstr ""
+msgstr "lap %s kunne ikke anvendes"
 
 #, python-format
 msgid "patch didn't work out, merging %s\n"
-msgstr ""
+msgstr "lap virkede ikke, sammenføjer %s\n"
 
 #, python-format
 msgid "update returned %d"
-msgstr ""
+msgstr "opdatering returnerede %d"
 
 msgid "repo commit failed"
-msgstr ""
+msgstr "deponering fejlede"
 
 #, python-format
 msgid "unable to read %s"
@@ -2582,31 +2316,26 @@
 
 #, python-format
 msgid "patch %s does not exist\n"
-msgstr "rettelsen %s findes ikke\n"
+msgstr "lappen %s findes ikke\n"
 
 #, python-format
 msgid "patch %s is not applied\n"
-msgstr "rettelsen %s er ikke anvendt\n"
-
-msgid ""
-"Apply patchfile  to the working directory.\n"
-"        patchfile: file name of patch"
-msgstr ""
+msgstr "lappen %s er ikke anvendt\n"
 
 msgid "patch failed, unable to continue (try -v)\n"
-msgstr ""
+msgstr "lapning fejlede, kan ikke fortsætte (prøv -v)\n"
 
 #, python-format
 msgid "applying %s\n"
 msgstr "anvender %s\n"
 
 #, python-format
-msgid "Unable to read %s\n"
-msgstr ""
+msgid "unable to read %s\n"
+msgstr "kan ikke læse %s\n"
 
 #, python-format
 msgid "imported patch %s\n"
-msgstr "importeret rettelse %s\n"
+msgstr "importeret lap %s\n"
 
 #, python-format
 msgid ""
@@ -2614,14 +2343,14 @@
 "imported patch %s"
 msgstr ""
 "\n"
-"importeret rettelse %s"
+"importeret lap %s"
 
 #, python-format
 msgid "patch %s is empty\n"
-msgstr "rettelse %s er tom\n"
+msgstr "lappen %s er tom\n"
 
 msgid "patch failed, rejects left in working dir\n"
-msgstr ""
+msgstr "lapning fejlede, afvisninger efter efterladt i arbejdskataloget\n"
 
 msgid "fuzz found when applying patch, stopping\n"
 msgstr ""
@@ -2632,24 +2361,28 @@
 
 #, python-format
 msgid "cannot delete revision %d above applied patches"
-msgstr "kan ikke slette revision %d ovenover anvendte rettelser"
+msgstr "kan ikke slette revision %d ovenover anvendte lapper"
+
+#, python-format
+msgid "patch %s finalized without changeset message\n"
+msgstr "lappen %s er færdiggjort uden en ændringsbesked\n"
 
 msgid "qdelete requires at least one revision or patch name"
-msgstr ""
+msgstr "qdelete kræver mindst en revision eller navnet på en lap"
 
 #, python-format
 msgid "cannot delete applied patch %s"
-msgstr "kan ikke slette den anvendte rettelse %s"
+msgstr "kan ikke slette den anvendte lap %s"
 
 #, python-format
 msgid "patch %s not in series file"
-msgstr "rettelse %s er ikke i series filen"
+msgstr "lappen %s er ikke i series filen"
 
 msgid "no patches applied"
-msgstr "ingen rettelser anvendt"
+msgstr "ingen lapper anvendt"
 
 msgid "working directory revision is not qtip"
-msgstr ""
+msgstr "arbejdskatalogets revision er ikke qtip"
 
 msgid "local changes found, refresh first"
 msgstr "lokale ændringer fundet, genopfrisk først"
@@ -2659,35 +2392,26 @@
 
 #, python-format
 msgid "\"%s\" cannot be used as the name of a patch"
-msgstr "\"%s\" kan ikke bruges som navnet på en rettelse"
-
-msgid ""
-"options:\n"
-"           msg: a string or a no-argument function returning a string\n"
-"        "
-msgstr ""
+msgstr "\"%s\" kan ikke bruges som navnet på en lap"
 
 #, python-format
 msgid "patch \"%s\" already exists"
-msgstr "rettelsen \"%s\" findes allerede"
+msgstr "lappen \"%s\" findes allerede"
 
 #, python-format
 msgid "error unlinking %s\n"
 msgstr "fejl ved sletning af %s\n"
 
-msgid "returns (index, rev, patch)"
-msgstr ""
-
 #, python-format
 msgid "patch name \"%s\" is ambiguous:\n"
-msgstr "rettelsen \"%s\" er tvetydigt:\n"
+msgstr "lappen \"%s\" er tvetydigt:\n"
 
 #, python-format
 msgid "patch %s not in series"
 msgstr ""
 
-msgid "(working directory not at tip)\n"
-msgstr ""
+msgid "(working directory not at a head)\n"
+msgstr "(arbejdskatalog er ikke ved et hoved)\n"
 
 msgid "no patches in series\n"
 msgstr "ingen patches i serien\n"
@@ -2712,7 +2436,7 @@
 msgstr "kan ikke skubbe '%s' - %s\n"
 
 msgid "all patches are currently applied\n"
-msgstr "alle rettelser er i øjeblikket anvendt\n"
+msgstr "alle lapper er i øjeblikket anvendt\n"
 
 msgid "patch series already fully applied\n"
 msgstr ""
@@ -2730,14 +2454,14 @@
 
 #, python-format
 msgid "patch %s is not applied"
-msgstr "rettelse %s er ikke anvendt"
+msgstr "lappen %s er ikke anvendt"
 
 msgid "no patches applied\n"
-msgstr "ingen rettelser anvendt\n"
+msgstr "ingen lapper anvendt\n"
 
 #, python-format
 msgid "qpop: %s is already at the top\n"
-msgstr ""
+msgstr "qpop: %s er allerede ved toppen\n"
 
 msgid "qpop: forcing dirstate update\n"
 msgstr ""
@@ -2753,7 +2477,7 @@
 msgstr ""
 
 msgid "patch queue now empty\n"
-msgstr "rettelseskøen er nu tom\n"
+msgstr "køen af lapper er nu tom\n"
 
 msgid "cannot refresh a revision with children"
 msgstr ""
@@ -2768,7 +2492,7 @@
 
 #, python-format
 msgid "patch %s is not in series file"
-msgstr "rettelse %s er ikke i series filen"
+msgstr "lappen %s er ikke i series filen"
 
 msgid "No saved patch data found\n"
 msgstr ""
@@ -2806,31 +2530,23 @@
 msgid "repo commit failed\n"
 msgstr ""
 
-msgid ""
-"If all_patches is False, return the index of the next pushable patch\n"
-"        in the series, or the series length. If all_patches is True, return "
-"the\n"
-"        index of the first patch past the last applied one.\n"
-"        "
-msgstr ""
-
 #, python-format
 msgid "patch %s is already in the series file"
-msgstr ""
+msgstr "lap %s er allerede i series-filen"
 
 msgid "option \"-r\" not valid when importing files"
-msgstr ""
+msgstr "tilvalg \"-r\" er ikke gyldigt når filer bliver importeret"
 
 msgid "option \"-n\" not valid when importing multiple patches"
-msgstr ""
+msgstr "tilvalg \"-n\" er ikke gyldigt når flere lapper bliver importeret"
 
 #, python-format
 msgid "revision %d is the root of more than one branch"
-msgstr ""
+msgstr "revision %d er roden for mere end en gren"
 
 #, python-format
 msgid "revision %d is already managed"
-msgstr ""
+msgstr "revision %d er allerede håndteret"
 
 #, python-format
 msgid "revision %d is not the parent of the queue"
@@ -2842,21 +2558,21 @@
 
 #, python-format
 msgid "cannot import merge revision %d"
-msgstr ""
+msgstr "kan ikke importere sammenføjningsrevision %d"
 
 #, python-format
 msgid "revision %d is not the parent of %d"
 msgstr ""
 
 msgid "-e is incompatible with import from -"
-msgstr ""
+msgstr "-e er ikke kompatibelt med importering fra -"
 
 #, python-format
 msgid "patch %s does not exist"
-msgstr "rettelse %s eksisterer ikke"
+msgstr "lappen %s eksisterer ikke"
 
 msgid "need --name to import a patch from -"
-msgstr ""
+msgstr "har brug for --name for at importere lap fra -"
 
 #, python-format
 msgid "adding %s to series file\n"
@@ -2865,23 +2581,19 @@
 msgid ""
 "remove patches from queue\n"
 "\n"
-"    The patches must not be applied, unless they are arguments to the\n"
-"    -r/--rev parameter. At least one patch or revision is required.\n"
-"\n"
-"    With --rev, mq will stop managing the named revisions (converting\n"
-"    them to regular mercurial changesets). The qfinish command should\n"
-"    be used as an alternative for qdelete -r, as the latter option is\n"
-"    deprecated.\n"
-"\n"
-"    With -k/--keep, the patch files are preserved in the patch\n"
-"    directory."
+"    The patches must not be applied, and at least one patch is required. "
+"With\n"
+"    -k/--keep, the patch files are preserved in the patch directory.\n"
+"\n"
+"    To stop managing a patch and move it into permanent history,\n"
+"    use the qfinish command."
 msgstr ""
 
 msgid "print the patches already applied"
-msgstr "udskriver rettelserne som allerede er anvendt"
+msgstr "udskriver lapperne som allerede er anvendt"
 
 msgid "print the patches not yet applied"
-msgstr "udskriver rettelserne som ikke er anvendt endnu"
+msgstr "udskriver lapperne som ikke er anvendt endnu"
 
 msgid ""
 "import a patch\n"
@@ -2911,6 +2623,32 @@
 "    using the --name flag.\n"
 "    "
 msgstr ""
+"importer en patch\n"
+"\n"
+"    Patchen sættes ind i serien efter den sidste anvendte patch. Hvis\n"
+"    der ikker er anvendt nogen patches, indsætter qimport patches\n"
+"    først i serien.\n"
+"\n"
+"    Patchen vil have samme navn som dens kildefil, med mindre du\n"
+"    angiver et nyt med -n/--name.\n"
+"\n"
+"    Du kan registrere en eksisterende patch inden i patch kataloget\n"
+"    med -e/--existing tilvalget.\n"
+"\n"
+"    Med -f/--force vil en allerede eksisterende patch med samme navn\n"
+"    blive overskrevet.\n"
+"\n"
+"    En eksisterende ændrin kan blive sat under mq kontrol med -r/--rev\n"
+"    (e.g. qimport --rev tip -n patch vil sætte tip under mq kontrol).\n"
+"    Med -g/--git vil patches importeret med --rev bruge git diff\n"
+"    formatet. Se 'hg help diffs' for mere information om hvorfor dette\n"
+"    er vigtigt for at bevare omdøbnings/kopierings-information og\n"
+"    ændriner i rettigheder.\n"
+"\n"
+"    Brug - som patch filnavn for at importere en patch fra standard\n"
+"    indput. Når der importeres fra standard indput skal der angivet et\n"
+"    patchnavn med --name tilvalget.\n"
+"    "
 
 msgid ""
 "init a new queue repository\n"
@@ -2921,6 +2659,13 @@
 "    an unversioned patch repository into a versioned one). You can use\n"
 "    qcommit to commit changes to this queue repository."
 msgstr ""
+"opret et nyt kø-depot\n"
+"\n"
+"    Kø-depotet er uversioneret som standard. Hvis -c/--create-repo\n"
+"    bruges, så vil qinit oprettet et separat indlejret depot til\n"
+"    patches (qinit -c kan også bruges senere for at konvertere et\n"
+"    uversioneret patch depot til et versioneret et). Du kan bruge\n"
+"    qcommit for at deponere ændringer i dette kø-depot."
 
 msgid ""
 "clone main and patch repository at same time\n"
@@ -2934,19 +2679,19 @@
 "    Source patch repository is looked for in <src>/.hg/patches by\n"
 "    default. Use -p <url> to change.\n"
 "\n"
-"    The patch directory must be a nested mercurial repository, as\n"
+"    The patch directory must be a nested Mercurial repository, as\n"
 "    would be created by qinit -c.\n"
 "    "
 msgstr ""
 
 msgid "versioned patch repository not found (see qinit -c)"
-msgstr "versionsstyret arkiv til rettelser blev ikke fundet (se qinit -c)"
+msgstr "versionsstyret depot til lapper blev ikke fundet (se qinit -c)"
 
 msgid "cloning main repository\n"
-msgstr "kloner hovedarkiv\n"
+msgstr "kloner hoveddepot\n"
 
 msgid "cloning patch repository\n"
-msgstr "kloner rettelsesarkiv\n"
+msgstr "kloner depotet til lapper\n"
 
 msgid "stripping applied patches from destination repository\n"
 msgstr ""
@@ -2961,19 +2706,19 @@
 msgstr "udskriver hele series filen"
 
 msgid "print the name of the current patch"
-msgstr "udskriver navnet på den nuværende rettelse"
+msgstr "udskriver navnet på den nuværende lap"
 
 msgid "print the name of the next patch"
-msgstr "udskriver navnet på den næste rettelse"
+msgstr "udskriver navnet på den næste lap"
 
 msgid "all patches applied\n"
-msgstr "alle rettelser er anvendt\n"
+msgstr "alle lapper er anvendt\n"
 
 msgid "print the name of the previous patch"
-msgstr "udskriver navnet på den forgående rettelse"
+msgstr "udskriver navnet på den forgående lap"
 
 msgid "only one patch applied\n"
-msgstr "kun én rettelse er anvendt\n"
+msgstr "kun én lap er anvendt\n"
 
 msgid ""
 "create a new patch\n"
@@ -3017,9 +2762,23 @@
 "    git diff format.\n"
 "    "
 msgstr ""
+"opdater den aktuelle patch\n"
+"\n"
+"    Hvis der angives filer, så vil den opdaterede patch kun indeholde\n"
+"    modifikationer som matcher disse filer; de andre ændringer vil\n"
+"    forblive i arbejdskataloget.\n"
+"\n"
+"    Hvis -s/--short angivet, så vil filer som allerede er i patches\n"
+"    blive opdateret ligesom matchede filer og forblive i patchen.\n"
+"\n"
+"    hg add/remove/copy/rename virker som sædvanlig, dog vil du måske\n"
+"    bruge git-patches (-g/--git eller [diff] git=1) for at følge\n"
+"    kopier og omdøbninger. Se 'hg help diffs' for mere information om\n"
+"    git diff formatet.\n"
+"    "
 
 msgid "option \"-e\" incompatible with \"-m\" or \"-l\""
-msgstr ""
+msgstr "tilvalg \"-e\" er inkompatibelt med \"-m\" eller \"-l\""
 
 msgid ""
 "diff of the current patch and subsequent modifications\n"
@@ -3035,6 +2794,18 @@
 "    qrefresh.\n"
 "    "
 msgstr ""
+"forskelle mellem den nuværende patch og efterfølgende modifikationer\n"
+"\n"
+"    Viser forskelle fra den nuværende patch og eventuelle\n"
+"    efterfølgende ændringer i arbejdskataloget siden sidste refresh\n"
+"    (dermed ser man hvad den nuværende patch vil blive efter en\n"
+"    qrefresh)\n"
+"\n"
+"    Brug 'hg diff' hvis du kun vil se ændringer lavet siden den sidste\n"
+"    qrefresh, eller 'hg export qtip' hvis du vil se ændringer lavet af\n"
+"    den nuværende patch uden at inkludere ændringer lavet siden\n"
+"    qrefresh.\n"
+"    "
 
 msgid ""
 "fold the named patches into the current patch\n"
@@ -3054,7 +2825,7 @@
 msgstr ""
 
 msgid "No patches applied"
-msgstr "Ingen rettelser anvendt"
+msgstr "Der er ikke anvendt nogen lapper"
 
 #, python-format
 msgid "Skipping already folded patch %s"
@@ -3109,6 +2880,11 @@
 "    will be lost.\n"
 "    "
 msgstr ""
+"skub den næste patch på stakken\n"
+"\n"
+"    Når -f/--force er angivet, så vil alle lokale ændringer i de\n"
+"    patchede filer gå tabt.\n"
+"    "
 
 msgid "no saved queues found, please use -n\n"
 msgstr ""
@@ -3125,6 +2901,12 @@
 "    top of the stack.\n"
 "    "
 msgstr ""
+"fjern den aktuelle patch fra stakken\n"
+"\n"
+"    Som standard fjernes toppen af stakken. Hvis der angives en patch,\n"
+"    så vil der blive fjernet patches indtil den angivne patch er på\n"
+"    toppen af stakken.\n"
+"    "
 
 #, python-format
 msgid "using patch queue: %s\n"
@@ -3153,15 +2935,15 @@
 
 #, python-format
 msgid "destination %s exists and is not a directory"
-msgstr ""
+msgstr "målet %s eksisterer og er ikke et katalog"
 
 #, python-format
 msgid "destination %s exists, use -f to force"
-msgstr ""
+msgstr "målet %s eksisterer, brug -f for at gennemtvinge"
 
 #, python-format
 msgid "copy %s to %s\n"
-msgstr ""
+msgstr "kopier %s til %s\n"
 
 msgid ""
 "strip a revision and all its descendants from the repository\n"
@@ -3171,6 +2953,12 @@
 "    revision.\n"
 "    "
 msgstr ""
+"strip en revision og alle dens efterkommere fra depotet\n"
+"\n"
+"    Hvis en af arbejdskatalogets forælder-revisioner bliver strippet,\n"
+"    så vil arbejdskataloget blive opdateret til forældren af den\n"
+"    strippede revision.\n"
+"    "
 
 msgid ""
 "set or print guarded patches to push\n"
@@ -3277,10 +3065,10 @@
 msgstr ""
 
 msgid "hg qapplied [-s] [PATCH]"
-msgstr ""
+msgstr "hg qapplied [-s] [LAP]"
 
 msgid "use pull protocol to copy metadata"
-msgstr ""
+msgstr "brug træk-protokol til at kopiere metadata"
 
 msgid "do not update the new working directories"
 msgstr ""
@@ -3292,22 +3080,22 @@
 msgstr ""
 
 msgid "hg qclone [OPTION]... SOURCE [DEST]"
-msgstr ""
+msgstr "hg qclone [TILVALG]... KILDE [MÅL]"
 
 msgid "hg qcommit [OPTION]... [FILE]..."
-msgstr ""
+msgstr "hg qcommit [TILVALG]... [FIL]..."
 
 msgid "hg qdiff [OPTION]... [FILE]..."
-msgstr ""
+msgstr "hg qdiff [TILVALG]... [FIL]..."
 
 msgid "keep patch file"
 msgstr ""
 
-msgid "stop managing a revision"
+msgid "stop managing a revision (DEPRECATED)"
 msgstr ""
 
 msgid "hg qdelete [-k] [-r REV]... [PATCH]..."
-msgstr ""
+msgstr "hg qdelete [-k] [-r REV]... [LAP]..."
 
 msgid "edit patch header"
 msgstr ""
@@ -3316,13 +3104,13 @@
 msgstr ""
 
 msgid "hg qfold [-e] [-k] [-m TEXT] [-l FILE] PATCH..."
-msgstr ""
+msgstr "hg qfold [-e] [-k] [-m TEKST] [-l FIL] LAP..."
 
 msgid "overwrite any local changes"
 msgstr ""
 
 msgid "hg qgoto [OPTION]... PATCH"
-msgstr ""
+msgstr "hg qgoto [TILVALG]... LAP"
 
 msgid "list all patches and guards"
 msgstr ""
@@ -3331,16 +3119,16 @@
 msgstr ""
 
 msgid "hg qguard [-l] [-n] -- [PATCH] [+GUARD]... [-GUARD]..."
-msgstr ""
+msgstr "hg qguard [-l] [-n] -- [LAP] [+VAGT]... [-VAGT]..."
 
 msgid "hg qheader [PATCH]"
-msgstr ""
+msgstr "hg qheader [LAP]"
 
 msgid "import file in patch directory"
 msgstr ""
 
-msgid "patch file name"
-msgstr "patch navn"
+msgid "name of patch file"
+msgstr "navn på lap"
 
 msgid "overwrite existing files"
 msgstr ""
@@ -3351,14 +3139,17 @@
 msgid "use git extended diff format"
 msgstr ""
 
-msgid "hg qimport [-e] [-n NAME] [-f] [-g] [-r REV]... FILE..."
-msgstr ""
+msgid "qpush after importing"
+msgstr ""
+
+msgid "hg qimport [-e] [-n NAME] [-f] [-g] [-P] [-r REV]... FILE..."
+msgstr "hg qimport [-e] [-n NAVN] [-f] [-g] [-P] [-r REV]... FIL..."
 
 msgid "create queue repository"
 msgstr "opret kø-repository"
 
 msgid "hg qinit [-c]"
-msgstr ""
+msgstr "hg qinit [-c]"
 
 msgid "import uncommitted changes into patch"
 msgstr ""
@@ -3376,13 +3167,13 @@
 msgstr ""
 
 msgid "hg qnew [-e] [-m TEXT] [-l FILE] [-f] PATCH [FILE]..."
-msgstr ""
+msgstr "hg qnew [-e] [-m TEKST] [-l FIL] [-f] LAP [FIL]..."
 
 msgid "hg qnext [-s]"
-msgstr ""
+msgstr "hg qnext [-s]"
 
 msgid "hg qprev [-s]"
-msgstr ""
+msgstr "hg qprev [-s]"
 
 msgid "pop all patches"
 msgstr ""
@@ -3394,7 +3185,7 @@
 msgstr ""
 
 msgid "hg qpop [-a] [-n NAME] [-f] [PATCH | INDEX]"
-msgstr ""
+msgstr "hg qpop [-a] [-n NAVN] [-f] [LAP | INDEKS]"
 
 msgid "apply if the patch has rejects"
 msgstr ""
@@ -3412,7 +3203,7 @@
 msgstr ""
 
 msgid "hg qpush [-f] [-l] [-a] [-m] [-n NAME] [PATCH | INDEX]"
-msgstr ""
+msgstr "hg qpush [-f] [-l] [-a] [-m] [-n NAVN] [LAP | INDEKS]"
 
 msgid "refresh only files already in the patch and specified files"
 msgstr ""
@@ -3430,10 +3221,10 @@
 msgstr ""
 
 msgid "hg qrefresh [-I] [-X] [-e] [-m TEXT] [-l FILE] [-s] [FILE]..."
-msgstr ""
+msgstr "hg qrefresh [-I] [-X] [-e] [-m TEKST] [-l FIL] [-s] [FIL]..."
 
 msgid "hg qrename PATCH1 [PATCH2]"
-msgstr ""
+msgstr "hg qrename LAP1 [LAP2]"
 
 msgid "delete save entry"
 msgstr ""
@@ -3442,7 +3233,7 @@
 msgstr ""
 
 msgid "hg qrestore [-d] [-u] REV"
-msgstr ""
+msgstr "hg qrestore [-d] [-u] REV"
 
 msgid "copy patch directory"
 msgstr ""
@@ -3457,7 +3248,7 @@
 msgstr ""
 
 msgid "hg qsave [-m TEXT] [-l FILE] [-c] [-n NAME] [-e] [-f]"
-msgstr ""
+msgstr "hg qsave [-m TEKST] [-l FIL] [-c] [-n NAVN] [-e] [-f]"
 
 msgid "disable all guards"
 msgstr ""
@@ -3472,13 +3263,13 @@
 msgstr ""
 
 msgid "hg qselect [OPTION]... [GUARD]..."
-msgstr ""
+msgstr "hg qselect [TILVALG]... [VAGT]..."
 
 msgid "print patches not in series"
 msgstr ""
 
 msgid "hg qseries [-ms]"
-msgstr ""
+msgstr "hg qseries [-ms]"
 
 msgid "force removal with local changes"
 msgstr ""
@@ -3490,22 +3281,22 @@
 msgstr ""
 
 msgid "hg strip [-f] [-b] [-n] REV"
-msgstr ""
+msgstr "hg strip [-f] [-b] [-n] REV"
 
 msgid "hg qtop [-s]"
-msgstr ""
+msgstr "hg qtop [-s]"
 
 msgid "hg qunapplied [-s] [PATCH]"
-msgstr ""
+msgstr "hg qunapplied [-s] [LAP]"
 
 msgid "finish all applied changesets"
 msgstr "afslut alle anvendte ændringer"
 
-msgid "hg qfinish [-a] [REV...]"
-msgstr "hg qfinish [-a] [REV...]"
-
-msgid ""
-"hook extension to email notifications on commits/pushes\n"
+msgid "hg qfinish [-a] [REV]..."
+msgstr "hg qfinish [-a] [REV]..."
+
+msgid ""
+"hooks for sending email notifications at commit/push time\n"
 "\n"
 "Subscriptions can be managed through hgrc. Default mode is to print\n"
 "messages to stdout, for testing and configuring.\n"
@@ -3568,27 +3359,6 @@
 " can push changes to, they can manage their own subscriptions."
 msgstr ""
 
-msgid "email notification class."
-msgstr ""
-
-msgid "strip leading slashes from local path, turn into web-safe path."
-msgstr ""
-
-msgid "try to clean up email addresses."
-msgstr ""
-
-msgid "return list of email addresses of subscribers to this repo."
-msgstr ""
-
-msgid "format one changeset."
-msgstr ""
-
-msgid "true if incoming changes from this source should be skipped."
-msgstr ""
-
-msgid "send message."
-msgstr ""
-
 #, python-format
 msgid "%s: %d new changesets"
 msgstr "%s: %d nye ændringer"
@@ -3611,23 +3381,16 @@
 "\n"
 msgstr ""
 
-msgid ""
-"send email notifications to interested subscribers.\n"
-"\n"
-"    if used as changegroup hook, send one email for all changesets in\n"
-"    changegroup. else send one email per changeset."
-msgstr ""
-
 #, python-format
 msgid "notify: no subscribers to repository %s\n"
-msgstr ""
+msgstr "notify: ingen abonnementer til depot %s\n"
 
 #, python-format
 msgid "notify: changes have source \"%s\" - skipping\n"
-msgstr ""
-
-msgid ""
-"browse command output with external pager\n"
+msgstr "notify: ændringer har kilde \"%s\" - springer over\n"
+
+msgid ""
+"browse command output with an external pager\n"
 "\n"
 "To set the pager that should be used, set the application variable:\n"
 "\n"
@@ -3662,14 +3425,14 @@
 msgstr ""
 
 msgid ""
-"use suffixes to refer to ancestor revisions\n"
+"interpret suffixes to refer to ancestor revisions\n"
 "\n"
 "This extension allows you to use git-style suffixes to refer to the\n"
 "ancestors of a specific revision.\n"
 "\n"
 "For example, if you can refer to a revision as \"foo\", then:\n"
 "\n"
-"- foo^N = Nth parent of foo:\n"
+"- foo^N = Nth parent of foo\n"
 "  foo^0 = foo\n"
 "  foo^1 = first parent of foo\n"
 "  foo^2 = second parent of foo\n"
@@ -3682,7 +3445,7 @@
 msgstr ""
 
 msgid ""
-"sending Mercurial changesets as a series of patch emails\n"
+"command to send changesets as (a series of) patch emails\n"
 "\n"
 "The series is started off with a \"[PATCH 0 of N]\" introduction, which\n"
 "describes the series as a whole.\n"
@@ -3691,24 +3454,19 @@
 "first line of the changeset description as the subject text. The\n"
 "message contains two or three body parts:\n"
 "\n"
-"  The remainder of the changeset description.\n"
+"  The changeset description.\n"
 "\n"
 "  [Optional] The result of running diffstat on the patch.\n"
 "\n"
 "  The patch itself, as generated by \"hg export\".\n"
 "\n"
-"Each message refers to all of its predecessors using the In-Reply-To\n"
+"Each message refers to the first in the series using the In-Reply-To\n"
 "and References headers, so they will show up as a sequence in threaded\n"
 "mail and news readers, and in mail archives.\n"
 "\n"
-"For each changeset, you will be prompted with a diffstat summary and\n"
-"the changeset summary, so you can be sure you are sending the right\n"
-"changes.\n"
-"\n"
-"To enable this extension:\n"
-"\n"
-"  [extensions]\n"
-"  hgext.patchbomb =\n"
+"With the -d/--diffstat option, you will be prompted for each changeset\n"
+"with a diffstat summary and the changeset summary, so you can be sure\n"
+"you are sending the right changes.\n"
 "\n"
 "To configure other defaults, add a section like this to your hgrc\n"
 "file:\n"
@@ -3724,11 +3482,11 @@
 "\n"
 "To avoid sending patches prematurely, it is a good idea to first run\n"
 "the \"email\" command with the \"-n\" option (test only). You will be\n"
-"prompted for an email recipient address, a subject an an introductory\n"
+"prompted for an email recipient address, a subject and an introductory\n"
 "message describing the patches of your patchbomb. Then when all is\n"
-"done, patchbomb messages are displayed. If PAGER environment variable\n"
-"is set, your pager will be fired up once for each patchbomb message,\n"
-"so you can verify everything is alright.\n"
+"done, patchbomb messages are displayed. If the PAGER environment\n"
+"variable is set, your pager will be fired up once for each patchbomb\n"
+"message, so you can verify everything is alright.\n"
 "\n"
 "The -m/--mbox option is also very useful. Instead of previewing each\n"
 "patchbomb message in a pager or sending the messages directly, it will\n"
@@ -3747,14 +3505,14 @@
 "That should be all. Now your patchbomb is on its way out.\n"
 "\n"
 "You can also either configure the method option in the email section\n"
-"to be a sendmail compatable mailer or fill out the [smtp] section so\n"
+"to be a sendmail compatible mailer or fill out the [smtp] section so\n"
 "that the patchbomb extension can automatically send patchbombs\n"
 "directly from the commandline. See the [email] and [smtp] sections in\n"
 "hgrc(5) for details."
 msgstr ""
 
 msgid "Please enter a valid value.\n"
-msgstr ""
+msgstr "Angiv venligst en gyldig værdi.\n"
 
 msgid "does the diffstat above look okay? "
 msgstr ""
@@ -3771,10 +3529,16 @@
 "\n"
 "    Each patch email has a Subject line of \"[PATCH M of N] ...\", using\n"
 "    the first line of the changeset description as the subject text.\n"
-"    The message contains two or three body parts. First, the rest of\n"
-"    the changeset description. Next, (optionally) if the diffstat\n"
-"    program is installed, the result of running diffstat on the patch.\n"
-"    Finally, the patch itself, as generated by \"hg export\".\n"
+"    The message contains two or three parts. First, the changeset\n"
+"    description. Next, (optionally) if the diffstat program is\n"
+"    installed and -d/--diffstat is used, the result of running\n"
+"    diffstat on the patch. Finally, the patch itself, as generated by\n"
+"    \"hg export\".\n"
+"\n"
+"    By default the patch is included as text in the email body for\n"
+"    easy reviewing. Using the -a/--attach option will instead create\n"
+"    an attachment for the patch. With -i/--inline an inline attachment\n"
+"    will be created.\n"
 "\n"
 "    With -o/--outgoing, emails will be generated for patches not found\n"
 "    in the destination repository (or only those which are ancestors\n"
@@ -3807,9 +3571,6 @@
 "    "
 msgstr ""
 
-msgid "Return the revisions present locally but not in dest"
-msgstr ""
-
 msgid "specify at least one changeset with -r or -o"
 msgstr "angiv mindst en ændring med -r eller -o"
 
@@ -3838,19 +3599,19 @@
 msgstr ""
 
 msgid "Displaying "
-msgstr ""
+msgstr "Viser "
 
 msgid "Writing "
-msgstr ""
+msgstr "Skriver "
 
 msgid "Sending "
-msgstr ""
+msgstr "Sender "
 
 msgid "send patches as attachments"
-msgstr ""
+msgstr "send lapper som vedhæftede filer"
 
 msgid "send patches as inline attachments"
-msgstr ""
+msgstr "send lapper som integreret tekst"
 
 msgid "email addresses of blind carbon copy recipients"
 msgstr ""
@@ -3859,7 +3620,7 @@
 msgstr ""
 
 msgid "add diffstat output to messages"
-msgstr ""
+msgstr "tilføj diffstat resultat til beskeder"
 
 msgid "use the given date as the sending date"
 msgstr ""
@@ -3894,14 +3655,14 @@
 msgid "send changes not in target as a binary bundle"
 msgstr ""
 
-msgid "file name of the bundle attachment"
+msgid "name of the bundle attachment file"
 msgstr ""
 
 msgid "a revision to send"
 msgstr ""
 
 msgid "run even when remote repository is unrelated (with -b/--bundle)"
-msgstr "kør selv hvis fjernarkivet er urelateret (med -b/--bundle)"
+msgstr "kør selv hvis fjerndepotet er urelateret (med -b/--bundle)"
 
 msgid "a base changeset to specify instead of a destination (with -b/--bundle)"
 msgstr ""
@@ -3910,7 +3671,10 @@
 msgstr ""
 
 msgid "hg email [OPTION]... [DEST]..."
-msgstr ""
+msgstr "hg email [TILVALG]... [MÅL]..."
+
+msgid "command to delete untracked files from the working directory"
+msgstr "kommando til at slette filer fra arbejdskataloget som ikke følges"
 
 msgid ""
 "removes files not tracked by Mercurial\n"
@@ -3921,7 +3685,7 @@
 "    This means that purge will delete:\n"
 "     - Unknown files: files marked with \"?\" by \"hg status\"\n"
 "     - Empty directories: in fact Mercurial ignores directories unless\n"
-"       they contain files under source control managment\n"
+"       they contain files under source control management\n"
 "    But it will leave untouched:\n"
 "     - Modified and unmodified tracked files\n"
 "     - Ignored files (unless --all is specified)\n"
@@ -3939,46 +3703,43 @@
 
 #, python-format
 msgid "%s cannot be removed"
-msgstr ""
+msgstr "%s kan ikke slettes"
 
 #, python-format
 msgid "warning: %s\n"
-msgstr ""
+msgstr "advarsel: %s\n"
 
 #, python-format
 msgid "Removing file %s\n"
-msgstr ""
+msgstr "Fjerner fil %s\n"
 
 #, python-format
 msgid "Removing directory %s\n"
-msgstr ""
+msgstr "Fjerner katalog %s\n"
 
 msgid "abort if an error occurs"
-msgstr ""
+msgstr "afbryd hvis der opstår en fejl"
 
 msgid "purge ignored files too"
-msgstr ""
-
-msgid "print the file names instead of deleting them"
-msgstr ""
+msgstr "udrens også ignorerede filer"
+
+msgid "print filenames instead of deleting them"
+msgstr "udskriv filnavne i stedet for at slette dem"
 
 msgid "end filenames with NUL, for use with xargs (implies -p/--print)"
-msgstr ""
+msgstr "afslut filnavne med NUL, for brug med xargs (medfører -p/--print)"
 
 msgid "hg purge [OPTION]... [DIR]..."
-msgstr ""
-
-msgid ""
-"move sets of revisions to a different ancestor\n"
+msgstr "hg purge [TILVALG]... [KATALOG]..."
+
+msgid ""
+"command to move sets of revisions to a different ancestor\n"
 "\n"
 "This extension lets you rebase changesets in an existing Mercurial\n"
 "repository.\n"
 "\n"
 "For more information:\n"
-"http://www.selenic.com/mercurial/wiki/index.cgi/RebaseProject\n"
-msgstr ""
-
-msgid "return the correct ancestor"
+"http://mercurial.selenic.com/wiki/RebaseProject\n"
 msgstr ""
 
 msgid "first revision, do not change ancestor\n"
@@ -4027,18 +3788,9 @@
 msgid "%d revisions have been skipped\n"
 msgstr ""
 
-msgid ""
-"Skip commit if collapsing has been required and rev is not the last\n"
-"    revision, commit otherwise\n"
-"    "
-msgstr ""
-
 msgid " set parents\n"
 msgstr ""
 
-msgid "Rebase a single revision"
-msgstr ""
-
 #, python-format
 msgid "rebasing %d:%s\n"
 msgstr ""
@@ -4072,19 +3824,10 @@
 msgid "next revision set to %s\n"
 msgstr ""
 
-msgid "Return the new parent relationship of the revision that will be rebased"
-msgstr ""
-
 #, python-format
 msgid "cannot use revision %d as base, result would have 3 parents"
 msgstr ""
 
-msgid "Return true if the given patch is in git format"
-msgstr ""
-
-msgid "Update rebased mq patches - finalize and then import them"
-msgstr ""
-
 #, python-format
 msgid "revision %d is an mq patch (%s), finalize it.\n"
 msgstr ""
@@ -4093,36 +3836,21 @@
 msgid "import mq patch %d (%s)\n"
 msgstr ""
 
-msgid "Store the current status to allow recovery"
-msgstr ""
-
 msgid "rebase status stored\n"
 msgstr ""
 
-msgid "Remove the status files"
-msgstr ""
-
-msgid "Restore a previously stored status"
-msgstr ""
-
 msgid "rebase status resumed\n"
 msgstr ""
 
 msgid "no rebase in progress"
 msgstr ""
 
-msgid "Restore the repository to its original state"
-msgstr ""
-
 msgid "warning: new changesets detected on target branch, not stripping\n"
 msgstr ""
 
 msgid "rebase aborted\n"
 msgstr ""
 
-msgid "Define which revisions are going to be rebased and where"
-msgstr ""
-
 msgid "cannot rebase onto an applied mq patch"
 msgstr ""
 
@@ -4145,15 +3873,9 @@
 msgid "unable to collapse, there is more than one external parent"
 msgstr ""
 
-msgid "Call rebase after pull if the latter has been invoked with --rebase"
-msgstr ""
-
 msgid "--update and --rebase are not compatible, ignoring the update flag\n"
 msgstr ""
 
-msgid "Replace pull with a decorator to provide --rebase option"
-msgstr ""
-
 msgid "rebase working directory to branch head"
 msgstr ""
 
@@ -4185,76 +3907,21 @@
 "hg rebase [-s REV | -b REV] [-d REV] [--collapse] [--keep] [--keepbranches] "
 "| [-c] | [-a]"
 msgstr ""
-
-msgid "interactive change selection during commit or qrefresh"
-msgstr ""
-
-msgid ""
-"like patch.iterhunks, but yield different events\n"
-"\n"
-"    - ('file',    [header_lines + fromfile + tofile])\n"
-"    - ('context', [context_lines])\n"
-"    - ('hunk',    [hunk_lines])\n"
-"    - ('range',   (-start,len, +start,len, diffp))\n"
-"    "
-msgstr ""
-
-msgid "scan lr while predicate holds"
-msgstr ""
-
-msgid ""
-"patch header\n"
-"\n"
-"    XXX shoudn't we move this to mercurial/patch.py ?\n"
-"    "
+"hg rebase [-s REV | -b REV] [-d REV] [--collapse] [--keep] [--keepbranches] "
+"| [-c] | [-a]"
+
+msgid "commands to interactively select changes for commit/qrefresh"
 msgstr ""
 
 msgid "this modifies a binary file (all or nothing)\n"
-msgstr ""
+msgstr "dette ændrer en binær fil (alt eller intet)\n"
 
 msgid "this is a binary file\n"
-msgstr ""
+msgstr "dette er en binær fil\n"
 
 #, python-format
 msgid "%d hunks, %d lines changed\n"
-msgstr ""
-
-msgid "hunk -> (n+,n-)"
-msgstr ""
-
-msgid ""
-"patch hunk\n"
-"\n"
-"    XXX shouldn't we merge this with patch.hunk ?\n"
-"    "
-msgstr ""
-
-msgid "patch -> [] of hunks "
-msgstr ""
-
-msgid "patch parsing state machine"
-msgstr ""
-
-msgid "Interactively filter patch chunks into applied-only chunks"
-msgstr ""
-
-msgid ""
-"fetch next portion from chunks until a 'header' is seen\n"
-"        NB: header == new-file mark\n"
-"        "
-msgstr ""
-
-msgid ""
-"prompt query, and process base inputs\n"
-"\n"
-"        - y/n for the rest of file\n"
-"        - y/n for the rest\n"
-"        - ? (help)\n"
-"        - q (quit)\n"
-"\n"
-"        else, input is returned to the caller.\n"
-"        "
-msgstr ""
+msgstr "%d stumper, %d linjer ændret\n"
 
 msgid "[Ynsfdaq?]"
 msgstr ""
@@ -4308,22 +3975,22 @@
 msgstr ""
 
 msgid "user quit"
-msgstr ""
+msgstr "user quit"
 
 #, python-format
 msgid "examine changes to %s?"
-msgstr ""
+msgstr "undersøg ændringer i %s?"
 
 msgid " and "
-msgstr ""
+msgstr " og "
 
 #, python-format
 msgid "record this change to %r?"
-msgstr ""
+msgstr "optag denne ændring i %r?"
 
 #, python-format
 msgid "record change %d/%d to %r?"
-msgstr ""
+msgstr "optag ændring %d/%d i %r?"
 
 msgid ""
 "interactively select changes to commit\n"
@@ -4351,61 +4018,57 @@
 "    ? - display help"
 msgstr ""
 
-msgid ""
-"interactively record a new patch\n"
-"\n"
-"    see 'hg help qnew' & 'hg help record' for more information and usage\n"
-"    "
-msgstr ""
-
 msgid "'mq' extension not loaded"
 msgstr ""
 
 msgid "running non-interactively, use commit instead"
 msgstr ""
 
-msgid ""
-"This is generic record driver.\n"
-"\n"
-"        It's job is to interactively filter local changes, and accordingly\n"
-"        prepare working dir into a state, where the job can be delegated to\n"
-"        non-interactive commit command such as 'commit' or 'qrefresh'.\n"
-"\n"
-"        After the actual job is done by non-interactive command, working "
-"dir\n"
-"        state is restored to original.\n"
-"\n"
-"        In the end we'll record intresting changes, and everything else will "
-"be\n"
-"        left in place, so the user can continue his work.\n"
-"        "
-msgstr ""
-
 msgid "no changes to record\n"
 msgstr ""
 
 #, python-format
 msgid "backup %r as %r\n"
-msgstr ""
+msgstr "sikkerhedskopier %r som %r\n"
 
 msgid "applying patch\n"
-msgstr ""
+msgstr "tilføjer lap\n"
 
 msgid "patch failed to apply"
-msgstr ""
+msgstr "lap kunne ikke tilføjes"
 
 #, python-format
 msgid "restoring %r to %r\n"
-msgstr ""
+msgstr "gendanner %r som %r\n"
 
 msgid "hg record [OPTION]... [FILE]..."
-msgstr ""
+msgstr "hg record [TILVALG]... [FIL]..."
 
 msgid "hg qrecord [OPTION]... PATCH [FILE]..."
-msgstr ""
-
-msgid ""
-"patch transplanting tool\n"
+msgstr "hg qrecord [TILVALG]... LAP [FIL]..."
+
+msgid "share a common history between several working directories"
+msgstr ""
+
+msgid ""
+"create a new shared repository (experimental)\n"
+"\n"
+"    Initialize a new repository and working directory that shares its\n"
+"    history with another repository.\n"
+"\n"
+"    NOTE: actions that change history such as rollback or moving the\n"
+"    source may confuse sharers.\n"
+"    "
+msgstr ""
+
+msgid "do not create a working copy"
+msgstr "opret ikke en arbejdskopi"
+
+msgid "[-U] SOURCE [DEST]"
+msgstr ""
+
+msgid ""
+"command to transplant changesets from another branch\n"
 "\n"
 "This extension allows you to transplant patches from another branch.\n"
 "\n"
@@ -4413,14 +4076,6 @@
 "map from a changeset hash to its hash in the source repository.\n"
 msgstr ""
 
-msgid ""
-"returns True if a node is already an ancestor of parent\n"
-"        or has already been transplanted"
-msgstr ""
-
-msgid "apply the revisions in revmap one by one in revision order"
-msgstr ""
-
 #, python-format
 msgid "skipping already applied revision %s\n"
 msgstr ""
@@ -4435,20 +4090,14 @@
 
 #, python-format
 msgid "%s transplanted to %s\n"
-msgstr ""
-
-msgid "arbitrarily rewrite changeset before applying it"
-msgstr ""
+msgstr "%s transplanteret til %s\n"
 
 #, python-format
 msgid "filtering %s\n"
-msgstr ""
+msgstr "filtrerer %s\n"
 
 msgid "filter failed"
-msgstr ""
-
-msgid "apply the patch in patchfile to the repository as a transplant"
-msgstr ""
+msgstr "filter fejlede"
 
 msgid "can only omit patchfile if merging"
 msgstr ""
@@ -4460,15 +4109,9 @@
 msgid "Fix up the merge and run hg transplant --continue"
 msgstr ""
 
-msgid "recover last transaction and apply remaining changesets"
-msgstr ""
-
 #, python-format
 msgid "%s transplanted as %s\n"
-msgstr ""
-
-msgid "commit working directory using journal metadata"
-msgstr ""
+msgstr "%s transplanteret som %s\n"
 
 msgid "transplant log file is corrupt"
 msgstr ""
@@ -4478,16 +4121,7 @@
 msgstr ""
 
 msgid "commit failed"
-msgstr ""
-
-msgid "journal changelog metadata for later recover"
-msgstr ""
-
-msgid "remove changelog journal"
-msgstr ""
-
-msgid "interactively transplant changesets"
-msgstr "transplanter ændringer interaktivt"
+msgstr "deponering fejlede"
 
 msgid "apply changeset? [ynmpcq?]:"
 msgstr ""
@@ -4531,7 +4165,7 @@
 msgstr ""
 
 msgid "--continue is incompatible with branch, all or merge"
-msgstr ""
+msgstr "--continue er inkompatibelt med branch, all eller merge"
 
 msgid "no source URL, branch tag or revision list provided"
 msgstr ""
@@ -4540,31 +4174,31 @@
 msgstr ""
 
 msgid "--all is incompatible with a revision list"
-msgstr ""
+msgstr "--all er inkompatibelt med en revisionsliste"
 
 msgid "no revision checked out"
 msgstr ""
 
 msgid "outstanding uncommitted merges"
-msgstr ""
+msgstr "udestående udeponeret sammenføjning"
 
 msgid "outstanding local changes"
-msgstr ""
+msgstr "udestående lokale ændringer"
 
 msgid "pull patches from REPOSITORY"
-msgstr ""
+msgstr "hiv lapper fra DEPOT"
 
 msgid "pull patches from branch BRANCH"
-msgstr ""
+msgstr "hiv lapper fra gren GREN"
 
 msgid "pull all changesets up to BRANCH"
-msgstr ""
+msgstr "his alle ændringer indtil GREN"
 
 msgid "skip over REV"
 msgstr "spring over REV"
 
 msgid "merge at REV"
-msgstr ""
+msgstr "sammenføj ved REV"
 
 msgid "append transplant info to log message"
 msgstr ""
@@ -4573,30 +4207,30 @@
 msgstr ""
 
 msgid "filter changesets through FILTER"
-msgstr ""
+msgstr "filtrer ændringer igennem FILTER"
 
 msgid ""
 "hg transplant [-s REPOSITORY] [-b BRANCH [-a]] [-p REV] [-m REV] [REV]..."
-msgstr ""
-
-msgid ""
-"allow to use MBCS path with problematic encoding.\n"
+msgstr "hg transplant [-s DEPOT] [-b GREN [-a]] [-p REV] [-m REV] [REV]..."
+
+msgid ""
+"allow the use of MBCS paths with problematic encodings\n"
 "\n"
 "Some MBCS encodings are not good for some path operations (i.e.\n"
 "splitting path, case conversion, etc.) with its encoded bytes. We call\n"
 "such a encoding (i.e. shift_jis and big5) as \"problematic encoding\".\n"
 "This extension can be used to fix the issue with those encodings by\n"
-"wrapping some functions to convert to unicode string before path\n"
+"wrapping some functions to convert to Unicode string before path\n"
 "operation.\n"
 "\n"
-"This extension is usefull for:\n"
+"This extension is useful for:\n"
 " * Japanese Windows users using shift_jis encoding.\n"
 " * Chinese Windows users using big5 encoding.\n"
 " * All users who use a repository with one of problematic encodings on\n"
 "   case-insensitive file system.\n"
 "\n"
 "This extension is not needed for:\n"
-" * Any user who use only ascii chars in path.\n"
+" * Any user who use only ASCII chars in path.\n"
 " * Any user who do not use any of problematic encodings.\n"
 "\n"
 "Note that there are some limitations on using this extension:\n"
@@ -4604,15 +4238,9 @@
 " * You should set same encoding for the repository by locale or\n"
 "   HGENCODING.\n"
 "\n"
-"To use this extension, enable the extension in .hg/hgrc or ~/.hgrc:\n"
-"\n"
-"  [extensions]\n"
-"  hgext.win32mbcs =\n"
-"\n"
-"Path encoding conversion are done between unicode and\n"
-"encoding.encoding which is decided by mercurial from current locale\n"
+"Path encoding conversion are done between Unicode and\n"
+"encoding.encoding which is decided by Mercurial from current locale\n"
 "setting or HGENCODING.\n"
-"\n"
 msgstr ""
 
 #, python-format
@@ -4626,6 +4254,36 @@
 msgid "[win32mbcs] activated with encoding: %s\n"
 msgstr ""
 
+msgid ""
+"perform automatic newline conversion\n"
+"\n"
+"To perform automatic newline conversion, use:\n"
+"\n"
+"[extensions]\n"
+"hgext.win32text =\n"
+"[encode]\n"
+"** = cleverencode:\n"
+"# or ** = macencode:\n"
+"\n"
+"[decode]\n"
+"** = cleverdecode:\n"
+"# or ** = macdecode:\n"
+"\n"
+"If not doing conversion, to make sure you do not commit CRLF/CR by "
+"accident:\n"
+"\n"
+"[hooks]\n"
+"pretxncommit.crlf = python:hgext.win32text.forbidcrlf\n"
+"# or pretxncommit.cr = python:hgext.win32text.forbidcr\n"
+"\n"
+"To do the same check on a server to prevent CRLF/CR from being\n"
+"pushed or pulled:\n"
+"\n"
+"[hooks]\n"
+"pretxnchangegroup.crlf = python:hgext.win32text.forbidcrlf\n"
+"# or pretxnchangegroup.cr = python:hgext.win32text.forbidcr\n"
+msgstr ""
+
 #, python-format
 msgid ""
 "WARNING: %s already has %s line endings\n"
@@ -4662,18 +4320,12 @@
 msgstr ""
 
 msgid ""
-"zeroconf support for mercurial repositories\n"
+"discover and advertise repositories on the local network\n"
 "\n"
 "Zeroconf enabled repositories will be announced in a network without\n"
 "the need to configure a server or a service. They can be discovered\n"
 "without knowing their actual IP address.\n"
 "\n"
-"To use the zeroconf extension add the following entry to your hgrc\n"
-"file:\n"
-"\n"
-"[extensions]\n"
-"hgext.zeroconf =\n"
-"\n"
 "To allow other people to discover your repository using run \"hg serve\"\n"
 "in your repository.\n"
 "\n"
@@ -4687,20 +4339,20 @@
 msgstr ""
 
 msgid "archive prefix contains illegal components"
-msgstr "arkivpræfix indeholder ugyldige komponenter"
+msgstr "depotpræfix indeholder ugyldige komponenter"
 
 msgid "cannot give prefix when archiving to files"
 msgstr "kan ikke give præfix ved arkivering til filer"
 
 #, python-format
 msgid "unknown archive type '%s'"
-msgstr "ukendt arkivtype '%s'"
+msgstr "ukendt depottype '%s'"
 
 msgid "invalid changegroup"
 msgstr ""
 
 msgid "unknown parent"
-msgstr "ukendt forældre"
+msgstr "ukendt forælder"
 
 #, python-format
 msgid "integrity check failed on %s:%d"
@@ -4725,6 +4377,9 @@
 msgid "premature EOF reading chunk (got %d bytes, expected %d)"
 msgstr "for tidlig EOF ved læsning af chunk (fik %d bytes, forventede %d)"
 
+msgid "empty username"
+msgstr "tomt brugernavn"
+
 #, python-format
 msgid "username %s contains a newline"
 msgstr "brugernavn %s indeholder et linieskift"
@@ -4734,7 +4389,7 @@
 
 #, python-format
 msgid "can't read commit message '%s': %s"
-msgstr "Kan ikke læse arkiveringsbesked '%s': %s"
+msgstr "kan ikke læse deponeringsbesked '%s': %s"
 
 msgid "limit must be a positive integer"
 msgstr ""
@@ -4746,7 +4401,7 @@
 msgstr "der er specificeret for mange revisioner"
 
 #, python-format
-msgid "invalid format spec '%%%s' in output file name"
+msgid "invalid format spec '%%%s' in output filename"
 msgstr ""
 
 #, python-format
@@ -4787,11 +4442,11 @@
 
 #, python-format
 msgid "moving %s to %s\n"
-msgstr ""
+msgstr "flytter %s til %s\n"
 
 #, python-format
 msgid "copying %s to %s\n"
-msgstr ""
+msgstr "kopierer %s til %s\n"
 
 #, python-format
 msgid "%s has not been committed yet, so no copy data will be stored for %s.\n"
@@ -4833,7 +4488,7 @@
 
 #, python-format
 msgid "parent:      %d:%s\n"
-msgstr "forældre:    %d:%s\n"
+msgstr "forælder:    %d:%s\n"
 
 #, python-format
 msgid "manifest:    %d:%s\n"
@@ -4854,7 +4509,7 @@
 msgstr "filer-:"
 
 msgid "files:"
-msgstr ""
+msgstr "filer:"
 
 #, python-format
 msgid "files:       %s\n"
@@ -4898,24 +4553,44 @@
 msgid "%s:%s copy source revision cannot be found!\n"
 msgstr ""
 
-msgid "can only follow copies/renames for explicit file names"
-msgstr ""
-
-#, python-format
-msgid "file %s not found!"
-msgstr "filen %s blev ikke fundet!"
-
-#, python-format
-msgid "no match under directory %s!"
-msgstr ""
-
-#, python-format
-msgid "can't commit %s: unsupported file type!"
-msgstr ""
-
-#, python-format
-msgid "file %s not tracked!"
-msgstr ""
+msgid "can only follow copies/renames for explicit filenames"
+msgstr ""
+
+msgid "HG: Enter commit message.  Lines beginning with 'HG:' are removed."
+msgstr ""
+"HG: Skriv deponeringsbesked. Linier som starter med 'HG:' bliver fjernet."
+
+msgid "HG: Leave message empty to abort commit."
+msgstr "HG: Efterlad beskeden tom for at afbryde deponeringen."
+
+#, python-format
+msgid "HG: user: %s"
+msgstr "HG: bruger: %s"
+
+msgid "HG: branch merge"
+msgstr "HG: gren-sammenføjning"
+
+#, python-format
+msgid "HG: branch '%s'"
+msgstr "HG: gren '%s'"
+
+#, python-format
+msgid "HG: added %s"
+msgstr "HG: tilføjet %s"
+
+#, python-format
+msgid "HG: changed %s"
+msgstr "HG: ændret %s"
+
+#, python-format
+msgid "HG: removed %s"
+msgstr "HG: fjernet %s"
+
+msgid "HG: no files changed"
+msgstr "HG: ingen filændringer"
+
+msgid "empty commit message"
+msgstr "tom deponeringsbesked"
 
 msgid ""
 "add the specified files on the next commit\n"
@@ -4924,20 +4599,20 @@
 "    repository.\n"
 "\n"
 "    The files will be added to the repository at the next commit. To\n"
-"    undo an add before that, see hg revert.\n"
+"    undo an add before that, see hg forget.\n"
 "\n"
 "    If no names are given, add all files to the repository.\n"
 "    "
 msgstr ""
-"tilføj de angivne filer ved næste arkivering\n"
-"\n"
-"    Opskriv filer til at blive versionsstyret og tilføjet til arkivet.\n"
-"\n"
-"    Filerne vil bliver tilføjet til arkivet ved næste arkivering. For\n"
-"    at omgøre en tilføjelse før det, se hg revert.\n"
+"tilføj de angivne filer ved næste deponering\n"
+"\n"
+"    Opskriv filer til at blive versionsstyret og tilføjet til depotet.\n"
+"\n"
+"    Filerne vil bliver tilføjet til depotet ved næste deponering. For\n"
+"    at omgøre en tilføjelse før det, se hg forget.\n"
 "\n"
 "    Hvis der ikke er angivet nogen navne tilføjes alle filer til\n"
-"    arkivet.\n"
+"    depotet.\n"
 "    "
 
 msgid ""
@@ -4966,33 +4641,35 @@
 msgstr ""
 
 msgid ""
-"show changeset information per file line\n"
+"show changeset information by line for each file\n"
 "\n"
 "    List changes in files, showing the revision id responsible for\n"
 "    each line\n"
 "\n"
-"    This command is useful to discover who did a change or when a\n"
-"    change took place.\n"
+"    This command is useful for discovering when a change was made and\n"
+"    by whom.\n"
 "\n"
 "    Without the -a/--text option, annotate will avoid processing files\n"
-"    it detects as binary. With -a, annotate will generate an\n"
-"    annotation anyway, probably with undesirable results.\n"
-"    "
-msgstr ""
-"vis information om ændringer pr linie\n"
+"    it detects as binary. With -a, annotate will annotate the file\n"
+"    anyway, although the results will probably be neither useful\n"
+"    nor desirable.\n"
+"    "
+msgstr ""
+"vis information om ændringer pr linie for hver fil\n"
 "\n"
 "    Vis ændringer i filer ved at vise revisions ID'et som er\n"
 "    ansvarligt for hver linie\n"
 "\n"
-"    Denne kommando er nyttig til at opdage hvem der lavede en ændring\n"
-"    og hvornår en ændring blev foretaget.\n"
+"    Denne kommando er nyttig til at opdage hvornår en ændring blev\n"
+"    foretaget og af hvem.\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"
-"    annotering alligevel, sandsynligvis med et uønsket resultat.\n"
-"    "
-
-msgid "at least one file name or pattern required"
+"    annotering alligevel, selvom resultatet sandsynligvis vil være\n"
+"    hverken brugbart eller ønskværdigt.\n"
+"    "
+
+msgid "at least one filename or pattern is required"
 msgstr ""
 
 msgid "at least one of -n/-c is required for -l"
@@ -5000,10 +4677,10 @@
 
 #, python-format
 msgid "%s: binary file\n"
-msgstr ""
-
-msgid ""
-"create unversioned archive of a repository revision\n"
+msgstr "%s: binær fil\n"
+
+msgid ""
+"create an unversioned archive of a repository revision\n"
 "\n"
 "    By default, the revision used is the parent of the working\n"
 "    directory; use -r/--rev to specify a different revision.\n"
@@ -5029,7 +4706,7 @@
 msgstr ""
 
 msgid "no working directory: please specify a revision"
-msgstr ""
+msgstr "intet arbejdskatalog: angive venligst en revision"
 
 msgid "repository root cannot be destination"
 msgstr ""
@@ -5043,9 +4720,9 @@
 "    Commit the backed out changes as a new changeset. The new\n"
 "    changeset is a child of the backed out changeset.\n"
 "\n"
-"    If you back out a changeset other than the tip, a new head is\n"
+"    If you backout a changeset other than the tip, a new head is\n"
 "    created. This head will be the new tip and you should merge this\n"
-"    backout changeset with another head (current one by default).\n"
+"    backout changeset with another head.\n"
 "\n"
 "    The --merge option remembers the parent of the working directory\n"
 "    before starting the backout, then merges the new head with that\n"
@@ -5057,7 +4734,7 @@
 msgstr ""
 "omgør effekten af tidligere ændringer\n"
 "\n"
-"    Arkiverer de omgjorte ændringer som en ny ændring. Den nye ændring\n"
+"    Deponerer de omgjorte ændringer som en ny ændring. Den nye ændring\n"
 "    er et barn af den omgjorte ændring.\n"
 "\n"
 "    Hvis du omgør en ændring som ikke er spidsen, så vil et der blive\n"
@@ -5065,10 +4742,10 @@
 "    sammenføje denne omgjorte ændring med et andet hoved (det\n"
 "    nuværende hoved som standard).\n"
 "\n"
-"    Med --merge tilvalget vil forældren til arbejdskataloget bliver\n"
+"    Med --merge tilvalget vil forælderen til arbejdskataloget blive\n"
 "    husket og det nye hoved vil blive sammenføjet med denne ændring\n"
 "    bagefter. Dette sparer dig for at lave sammenføjningen selv.\n"
-"    Resultatet af denne sammenføjning er ikke arkiveret, som ved en\n"
+"    Resultatet af denne sammenføjning er ikke lagt i depot, som ved en\n"
 "    normal sammenføjning.\n"
 "\n"
 "    Se 'hg help dates' for en liste af gyldige formater til -d/--date.\n"
@@ -5078,20 +4755,20 @@
 msgstr "angiv venligst kun en revision"
 
 msgid "please specify a revision to backout"
-msgstr ""
-
-msgid "cannot back out change on a different branch"
-msgstr "kan ikke bakke en ændring på en anden gren ud"
-
-msgid "cannot back out a change with no parents"
-msgstr "kan ikke bakke en ændring ud uden forældre"
-
-msgid "cannot back out a merge changeset without --parent"
-msgstr ""
+msgstr "angiv venligst en revision der skal omgøres"
+
+msgid "cannot backout change on a different branch"
+msgstr "kan ikke omgøre en ændring på en anden gren"
+
+msgid "cannot backout a change with no parents"
+msgstr "kan ikke omgøre en ændring uden forældre"
+
+msgid "cannot backout a merge changeset without --parent"
+msgstr "kan ikke omgøre en sammenføjning uden --parent"
 
 #, python-format
 msgid "%s is not a parent of %s"
-msgstr "%s er ikke forældre til %s"
+msgstr "%s er ikke forælder til %s"
 
 msgid "cannot use --parent on non-merge changeset"
 msgstr ""
@@ -5106,7 +4783,7 @@
 
 #, python-format
 msgid "merging with changeset %s\n"
-msgstr ""
+msgstr "sammenføjer med ændring %s\n"
 
 msgid "the backout changeset is a new head - do not forget to merge\n"
 msgstr ""
@@ -5122,18 +4799,18 @@
 "    bad, then mark the latest changeset which is free from the problem\n"
 "    as good. Bisect will update your working directory to a revision\n"
 "    for testing (unless the -U/--noupdate option is specified). Once\n"
-"    you have performed tests, mark the working directory as bad or\n"
-"    good and bisect will either update to another candidate changeset\n"
+"    you have performed tests, mark the working directory as good or\n"
+"    bad, and bisect will either update to another candidate changeset\n"
 "    or announce that it has found the bad revision.\n"
 "\n"
 "    As a shortcut, you can also use the revision argument to mark a\n"
 "    revision as good or bad without checking it out first.\n"
 "\n"
-"    If you supply a command it will be used for automatic bisection.\n"
-"    Its exit status will be used as flag to mark revision as bad or\n"
-"    good. In case exit status is 0 the revision is marked as good, 125\n"
-"    - skipped, 127 (command not found) - bisection will be aborted;\n"
-"    any other status bigger than 0 will mark revision as bad.\n"
+"    If you supply a command, it will be used for automatic bisection.\n"
+"    Its exit status will be used to mark revisions as good or bad:\n"
+"    status 0 means good, 125 means to skip the revision, 127\n"
+"    (command not found) will abort the bisection, and any other\n"
+"    non-zero exit status means the revision is bad.\n"
 "    "
 msgstr ""
 
@@ -5145,9 +4822,13 @@
 
 msgid "Due to skipped revisions, the first good revision could be any of:\n"
 msgstr ""
+"På grund af oversprungne revisioner kan den første gode revision være en "
+"hvilken som helst af:\n"
 
 msgid "Due to skipped revisions, the first bad revision could be any of:\n"
 msgstr ""
+"På grund af oversprungne revisioner kan den første dårlige revision være en "
+"hvilken som helst af:\n"
 
 msgid "cannot bisect (no known good revisions)"
 msgstr ""
@@ -5159,7 +4840,11 @@
 msgstr ""
 
 msgid "incompatible arguments"
-msgstr ""
+msgstr "inkompatible argumenter"
+
+#, python-format
+msgid "cannot find executable: %s"
+msgstr "kan ikke finde program: %s"
 
 #, python-format
 msgid "failed to execute %s"
@@ -5170,23 +4855,24 @@
 msgstr "%s dræbt"
 
 #, python-format
-msgid "Changeset %s: %s\n"
-msgstr "Ændring: %s: %s\n"
+msgid "Changeset %d:%s: %s\n"
+msgstr "Ændring %d:%s: %s\n"
 
 #, python-format
 msgid "Testing changeset %s:%s (%s changesets remaining, ~%s tests)\n"
-msgstr ""
+msgstr "Tester ændring %s:%s (%s ændringer tilbage, ~%s test)\n"
 
 msgid ""
 "set or show the current branch name\n"
 "\n"
 "    With no argument, show the current branch name. With one argument,\n"
-"    set the working directory branch name (the branch does not exist\n"
-"    in the repository until the next commit). It is recommended to use\n"
-"    the 'default' branch as your primary development branch.\n"
+"    set the working directory branch name (the branch will not exist\n"
+"    in the repository until the next commit). Standard practice\n"
+"    recommends that primary development take place on the 'default'\n"
+"    branch.\n"
 "\n"
 "    Unless -f/--force is specified, branch will not let you set a\n"
-"    branch name that shadows an existing branch.\n"
+"    branch name that already exists, even if it's inactive.\n"
 "\n"
 "    Use -C/--clean to reset the working directory branch to that of\n"
 "    the parent of the working directory, negating a previous branch\n"
@@ -5202,22 +4888,34 @@
 
 msgid "a branch of the same name already exists (use --force to override)"
 msgstr ""
+"en gren ved samme navn eksisterer allerede (brug --force for at gennemtvinge)"
 
 #, python-format
 msgid "marked working directory as branch %s\n"
-msgstr ""
+msgstr "markerede arbejdskataloget som gren %s\n"
 
 msgid ""
 "list repository named branches\n"
 "\n"
 "    List the repository's named branches, indicating which ones are\n"
-"    inactive. If active is specified, only show active branches.\n"
+"    inactive. If -a/--active is specified, only show active branches.\n"
 "\n"
 "    A branch is considered active if it contains repository heads.\n"
 "\n"
 "    Use the command 'hg update' to switch to an existing branch.\n"
 "    "
 msgstr ""
+"vis navngivne grene i depotet\n"
+"\n"
+"    Viser depotets navngivne grene og indikerer hvilke der er\n"
+"    inaktive. Hvis -a/--active angivet, da vises kun aktive grene.\n"
+"\n"
+"    En gren er anses for at være aktiv hvis den indeholder\n"
+"    depothoveder.\n"
+"\n"
+"    Brug kommandoen 'hg update' for at skifte til en eksisterende\n"
+"    gren.\n"
+"    "
 
 msgid ""
 "create a changegroup file\n"
@@ -5228,9 +4926,11 @@
 "    If no destination repository is specified the destination is\n"
 "    assumed to have all the nodes specified by one or more --base\n"
 "    parameters. To create a bundle containing all changesets, use\n"
-"    -a/--all (or --base null). To change the compression method\n"
-"    applied, use the -t/--type option (by default, bundles are\n"
-"    compressed using bz2).\n"
+"    -a/--all (or --base null).\n"
+"\n"
+"    You can change compression method with the -t/--type option.\n"
+"    The available compression methods are: none, bzip2, and\n"
+"    gzip (by default, bundles are compressed using bzip2).\n"
 "\n"
 "    The bundle file can then be transferred using conventional means\n"
 "    and applied to another repository with the unbundle or pull\n"
@@ -5242,7 +4942,7 @@
 "    "
 msgstr ""
 
-msgid "--base is incompatible with specifiying a destination"
+msgid "--base is incompatible with specifying a destination"
 msgstr ""
 
 msgid "unknown bundle type specified with --type"
@@ -5290,8 +4990,7 @@
 "\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"
-"    Look at the help text for URLs for important details about ssh://\n"
-"    URLs.\n"
+"    Please see 'hg help urls' for important details about ssh:// URLs.\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"
@@ -5314,47 +5013,47 @@
 "\n"
 "    "
 msgstr ""
-"lav en kopi af et eksisterende arkiv\n"
-"\n"
-"    Lav en kopi af et eksisterende arkiv i en ny mappe.\n"
+"lav en kopi af et eksisterende depot\n"
+"\n"
+"    Lav en kopi af et eksisterende depot i en ny mappe.\n"
 "\n"
 "    Hvis der ikke angivet et navn til destinationen, så bruges\n"
 "    grundnavnet for kilden.\n"
 "\n"
-"    Placeringen af kilden tilføjes til det nye arkivs .hg/hgrc fil som\n"
+"    Placeringen af kilden tilføjes til det nye depots .hg/hgrc fil som\n"
 "    den nye standard for fremtidige kald til 'hg pull'.\n"
 "\n"
 "    Hvis du bruger -r/--rev tilvalget for at klone op til en specifik\n"
 "    revision, så vil ingen efterfølgende revisioner (inklusiv\n"
-"    efterfølgende mærkater) findes i det klonede arkiv. Denne\n"
-"    valgmulighed medfører --pull, selv ved lokale arkiver.\n"
+"    efterfølgende mærkater) findes i det klonede depot. Denne\n"
+"    valgmulighed medfører --pull, selv ved lokale depoter.\n"
 "\n"
 "    Som udgangspunkt vil clone hente hovedet af 'default' grenen. Hvis\n"
 "    -U/--noupdate tilvalget bruges vil den nye klon kun indeholde et\n"
-"    arkiv (.hg) og intet arbejdskatalog (arbejdskatalogets forældre er\n"
+"    depot (.hg) og intet arbejdskatalog (arbejdskatalogets forælder er\n"
 "    sat til nul revisionen).\n"
 "\n"
 "    Se 'hg help urls' for detaljer om gyldige formatter for kilden.\n"
 "\n"
 "    Det er muligt at specificere en ssh:// URL som destination, men\n"
 "    der vil ikke bliver oprettet nogen .hg/hgrc fil eller noget\n"
-"    arbejdskatalog på den anden side. Se hjælpeteksten for URLer for\n"
+"    arbejdskatalog på den anden side. Se venligst 'hg help urls' for\n"
 "    vigtige detaljer om ssh:// URLer.\n"
 "\n"
 "    Af effektivitetsgrunde bruges hårde lænker ved kloning når kilden\n"
 "    og destinationen er på det samme filsystem (bemærk at dette kun\n"
-"    gælder for arkivdata og ikke for de udhentede filer). Nogle\n"
+"    gælder for depotdata og ikke for de udhentede filer). Nogle\n"
 "    filsystemer, såsom AFS, implementerer ikke hårde lænker korrekt,\n"
 "    men rapporterer ingen fejl. I disse tilfælde skal --pull bruges\n"
 "    for at undgå hårde lænker.\n"
 "\n"
-"    I nogle tilfælde kan man klone arkiver og udhentede filer med\n"
-"\n"
-"      $ cp -al ARKIV ARKIVKLON\n"
+"    I nogle tilfælde kan man klone depoter og udhentede filer med\n"
+"\n"
+"      $ cp -al DEPOT DEPOTKLON\n"
 "\n"
 "    Dette er den hurtigste måde at klone på, men det er ikke altid\n"
 "    sikkert. Operationen er ikke atomisk (det er op til dig at sikre\n"
-"    at ARKIV ikke bliver modificeret undervejs) og du skal selv sørge\n"
+"    at DEPOT ikke bliver modificeret undervejs) og du skal selv sørge\n"
 "    for at din tekstbehandler bryder hårde lænker (Emacs og de fleste\n"
 "    Linux Kernel værktøjer gør det). Dette er desuden ikke kompatibelt\n"
 "    med visse udvidelser som placerer deres metadata under .hg mappen,\n"
@@ -5367,13 +5066,13 @@
 "\n"
 "    Commit changes to the given files into the repository. Unlike a\n"
 "    centralized RCS, this operation is a local operation. See hg push\n"
-"    for means to actively distribute your changes.\n"
+"    for a way to actively distribute your changes.\n"
 "\n"
 "    If a list of files is omitted, all changes reported by \"hg status\"\n"
 "    will be committed.\n"
 "\n"
 "    If you are committing the result of a merge, do not provide any\n"
-"    file names or -I/-X filters.\n"
+"    filenames or -I/-X filters.\n"
 "\n"
 "    If no commit message is specified, the configured editor is\n"
 "    started to prompt you for a message.\n"
@@ -5381,19 +5080,19 @@
 "    See 'hg help dates' for a list of formats valid for -d/--date.\n"
 "    "
 msgstr ""
-"arkiver de specificerede filer eller alle udestående ændringer\n"
-"\n"
-"    Arkiver ændringer i de angivne filer ind i arkivet. Dette er en\n"
+"lægger de specificerede filer eller alle udestående ændringer i depot\n"
+"\n"
+"    Deponerer ændringer i de angivne filer ind i depotet. Dette er en\n"
 "    lokal operation, i modsætning til et centraliseret RCS. Se hg push\n"
 "    for en måde til aktivt distribuere dine ændringer.\n"
 "\n"
 "    Hvis en liste af filer udelades vil alle ændringer rapporteret af\n"
-"    \"hg status\" blive arkiveret.\n"
-"\n"
-"    Hvis du arkiverer resultatet af en sammenføjning, undlad da at\n"
+"    \"hg status\" blive deponeret.\n"
+"\n"
+"    Hvis du deponerer resultatet af en sammenføjning, undlad da at\n"
 "    angive filnavne eller -I/-X filtre.\n"
 "\n"
-"    Hvis der ikke angives en arkiveringsbesked, så starten den\n"
+"    Hvis der ikke angives en deponeringsbesked, så starten den\n"
 "    konfigurerede editor for at bede dig om en besked.\n"
 "\n"
 "    Se 'hg help dates' for en liste af gyldige formater til -d/--date.\n"
@@ -5404,7 +5103,7 @@
 
 #, python-format
 msgid "committed changeset %d:%s\n"
-msgstr ""
+msgstr "deponerede ændring %d:%s\n"
 
 msgid ""
 "mark files as copied for the next commit\n"
@@ -5414,7 +5113,7 @@
 "    the source must be a single file.\n"
 "\n"
 "    By default, this command copies the contents of files as they\n"
-"    stand in the working directory. If invoked with -A/--after, the\n"
+"    exist in the working directory. If invoked with -A/--after, the\n"
 "    operation is recorded, but no copying is performed.\n"
 "\n"
 "    This command takes effect with the next commit. To undo a copy\n"
@@ -5426,7 +5125,7 @@
 msgstr ""
 
 msgid "There is no Mercurial repository here (.hg not found)"
-msgstr "Der er ikke noget Mercurial arkiv her (fandt ikke .hg)"
+msgstr "Der er intet Mercurial depot her (.hg ikke fundet)"
 
 msgid "either two or three arguments required"
 msgstr "kræver enten to eller tre argumenter"
@@ -5462,16 +5161,16 @@
 msgid ""
 "show combined config settings from all hgrc files\n"
 "\n"
-"    With no args, print names and values of all config items.\n"
-"\n"
-"    With one arg of the form section.name, print just the value of\n"
-"    that config item.\n"
-"\n"
-"    With multiple args, print names and values of all config items\n"
-"    with matching section names.\n"
-"\n"
-"    With the --debug flag, the source (filename and line number) is\n"
-"    printed for each config item.\n"
+"    With no arguments, print names and values of all config items.\n"
+"\n"
+"    With one argument of the form section.name, print just the value\n"
+"    of that config item.\n"
+"\n"
+"    With multiple arguments, print names and values of all config\n"
+"    items with matching section names.\n"
+"\n"
+"    With --debug, the source (filename and line number) is printed\n"
+"    for each config item.\n"
 "    "
 msgstr ""
 
@@ -5506,11 +5205,11 @@
 msgid "dump the contents of an index file"
 msgstr ""
 
-msgid "dump an index DAG as a .dot file"
+msgid "dump an index DAG as a graphviz dot file"
 msgstr ""
 
 msgid "test Mercurial installation"
-msgstr ""
+msgstr "test Mercurial installationen"
 
 #, python-format
 msgid "Checking encoding (%s)...\n"
@@ -5552,8 +5251,8 @@
 msgstr ""
 
 msgid ""
-" Internal patcher failure, please report this error to http://www.selenic."
-"com/mercurial/bts\n"
+" Internal patcher failure, please report this error to http://mercurial."
+"selenic.com/bts/\n"
 msgstr ""
 
 msgid "Checking commit editor...\n"
@@ -5621,7 +5320,7 @@
 "    format. For more information, read 'hg help diffs'.\n"
 "    "
 msgstr ""
-"find ændringer i hele arkivet (eller udvalgte filer)\n"
+"find ændringer i hele depotet (eller udvalgte filer)\n"
 "\n"
 "    Vis ændringer mellem revisioner for de udvalgte filer.\n"
 "\n"
@@ -5629,13 +5328,13 @@
 "\n"
 "    BEMÆRK: diff kan generere overraskende resultater for\n"
 "    sammenføjninger, idet den som udgangspunkt vil sammenligne med\n"
-"    arbejdskatalogets første forældre, hvis der ikke angivet en\n"
+"    arbejdskatalogets første forælder, hvis der ikke angivet en\n"
 "    revision.\n"
 "\n"
 "    Når der gives to revisioner som argumenter, så vises ændringer\n"
 "    mellem disse. Hvis der kun angives en revision, så sammenlignes\n"
 "    denne revision med arbejdskataloget, og når der ikke angives nogen\n"
-"    revisioner, så sammenlignes arbejdskataloget med dennes forældre.\n"
+"    revisioner, så sammenlignes arbejdskataloget med dennes forælder.\n"
 "\n"
 "    Uden -a/--text tilvalget vil diff undgå at generere ændringer for\n"
 "    filer som den detekterer som binære. Med -a vil diff generere\n"
@@ -5674,7 +5373,7 @@
 "    diff anyway, probably with undesirable results.\n"
 "\n"
 "    Use the -g/--git option to generate diffs in the git extended diff\n"
-"    format. Read the diffs help topic for more information.\n"
+"    format. See 'hg help diffs' for more information.\n"
 "\n"
 "    With the --switch-parent option, the diff will be against the\n"
 "    second parent. It can be useful to review a merge.\n"
@@ -5686,11 +5385,11 @@
 "    revisioner.\n"
 "\n"
 "    Informationen som vises i ændrings-hovedet er: forfatter,\n"
-"    ændringshash, forældrene og arkiveringsbeskeden.\n"
+"    ændringshash, forældrene og deponeringsbeskeden.\n"
 "\n"
 "    BEMÆRK: export kan generere uventet diff uddata for\n"
 "    sammenføjningsændringer idet den kun vil sammenligne\n"
-"    sammenføjningsændringen med dennes første forældre.\n"
+"    sammenføjningsændringen med dennes første forælder.\n"
 "\n"
 "    Uddata kan gemmes i en fil, og filnavnet er givet ved en\n"
 "    format-streng. Formatteringsreglerne er som følger:\n"
@@ -5699,7 +5398,7 @@
 "    %H   ændringshash (40 byte heksadecimal)\n"
 "    %N   antallet af rettelser som bliver genereret\n"
 "    %R   revisionnummer for ændringen\n"
-"    %b   grundnavn for det eksporterede arkiv\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"
@@ -5709,10 +5408,10 @@
 "    annotering alligevel, sandsynligvis med et uønsket resultat.\n"
 "\n"
 "    Brug -g/--git tilvalget for at generere ændringer i det udvidede\n"
-"    git diff-format. For mere information, læs hg help diffs.\n"
+"    git diff-format. Se 'hg help diffs' for mere information.\n"
 "\n"
 "    Med --switch-parent tilvalget vil ændringerne blive beregnet i\n"
-"    forhold til den anden forældre. Dette kan være nyttigt til at\n"
+"    forhold til den anden forælder. Dette kan være nyttigt til at\n"
 "    gennemse en sammenføjning.\n"
 "    "
 
@@ -5726,6 +5425,38 @@
 msgstr ""
 
 msgid ""
+"forget the specified files on the next commit\n"
+"\n"
+"    Mark the specified files so they will no longer be tracked\n"
+"    after the next commit.\n"
+"\n"
+"    This only removes files from the current branch, not from the\n"
+"    entire project history, and it does not delete them from the\n"
+"    working directory.\n"
+"\n"
+"    To undo a forget before the next commit, see hg add.\n"
+"    "
+msgstr ""
+"glem de angivne filer ved næste deponering\n"
+"\n"
+"    Marker de angivne filer sådan at de ikke længere vil fulgt ved\n"
+"    næste deponering.\n"
+"\n"
+"    Dette fjerner kun filerne fra den aktuelle gren, ikke fra hele\n"
+"    projektets historie, og det sletter dem heller ikke fra\n"
+"    arbejdskataloget.\n"
+"\n"
+"    For at omgøre forget før næste deponering, se hg add.\n"
+"    "
+
+msgid "no files specified"
+msgstr "ingen filer angivet"
+
+#, python-format
+msgid "not removing %s: file is already untracked\n"
+msgstr "fjerner ikke %s: filen følges ikke\n"
+
+msgid ""
 "search for a pattern in specified files and revisions\n"
 "\n"
 "    Search revisions of files for a regular expression.\n"
@@ -5745,46 +5476,55 @@
 
 #, python-format
 msgid "grep: invalid match pattern: %s\n"
-msgstr ""
+msgstr "grep: ugyldigt søgemønster: %s\n"
 
 msgid ""
 "show current repository heads or show branch heads\n"
 "\n"
 "    With no arguments, show all repository head changesets.\n"
 "\n"
-"    If branch or revisions names are given this will show the heads of\n"
-"    the specified branches or the branches those revisions are tagged\n"
-"    with.\n"
-"\n"
 "    Repository \"heads\" are changesets that don't have child\n"
 "    changesets. They are where development generally takes place and\n"
 "    are the usual targets for update and merge operations.\n"
 "\n"
-"    Branch heads are changesets that have a given branch tag, but have\n"
-"    no child changesets with that tag. They are usually where\n"
-"    development on the given branch takes place.\n"
-"    "
-msgstr ""
+"    If one or more REV is given, the \"branch heads\" will be shown for\n"
+"    the named branch associated with that revision. The name of the\n"
+"    branch is called the revision's branch tag.\n"
+"\n"
+"    Branch heads are revisions on a given named branch that do not have\n"
+"    any descendants on the same branch. A branch head could be a true head\n"
+"    or it could be the last changeset on a branch before a new branch\n"
+"    was created. If none of the branch heads are true heads, the branch\n"
+"    is considered inactive.\n"
+"\n"
+"    If STARTREV is specified only those heads (or branch heads) that\n"
+"    are descendants of STARTREV will be displayed.\n"
+"    "
+msgstr ""
+
+#, python-format
+msgid "no open branch heads on branch %s\n"
+msgstr "ingen åbne gren-hoveder på gren %s\n"
 
 #, python-format
 msgid "no changes on branch %s containing %s are reachable from %s\n"
-msgstr ""
+msgstr "ingen ændringer på gren %s som indeholder %s kan nås fra %s\n"
 
 #, python-format
 msgid "no changes on branch %s are reachable from %s\n"
-msgstr ""
+msgstr "ingen ændringer på gren %s kan nås fra %s\n"
 
 msgid ""
 "show help for a given topic or a help overview\n"
 "\n"
-"    With no arguments, print a list of commands and short help.\n"
+"    With no arguments, print a list of commands with short help messages.\n"
 "\n"
 "    Given a topic, extension, or command name, print help for that\n"
 "    topic."
 msgstr ""
 
 msgid "global options:"
-msgstr ""
+msgstr "globale indstillinger:"
 
 msgid "use \"hg help\" for the full list of commands"
 msgstr "brug \"hg help\" for den fulde liste af kommandoer"
@@ -5815,7 +5555,7 @@
 "aliases: %s\n"
 msgstr ""
 "\n"
-"aliaser %s:\n"
+"aliasser: %s\n"
 
 msgid "(no help text available)"
 msgstr "(ingen hjælpetekst tilgængelig)"
@@ -5826,25 +5566,15 @@
 msgid "no commands defined\n"
 msgstr "ingen kommandoer defineret\n"
 
-msgid ""
-"\n"
-"enabled extensions:\n"
-"\n"
-msgstr ""
-"\n"
-"aktiverede udvidelser:\n"
-"\n"
-
-#, python-format
-msgid " %s   %s\n"
-msgstr ""
+msgid "enabled extensions:"
+msgstr "aktiverede udvidelser:"
 
 msgid "no help text available"
 msgstr "ingen hjælpetekst tilgængelig"
 
 #, python-format
 msgid "%s extension - %s\n"
-msgstr ""
+msgstr "%s udvidelse - %s\n"
 
 msgid "Mercurial Distributed SCM\n"
 msgstr "Mercurial Distribueret SCM\n"
@@ -5871,7 +5601,8 @@
 "    With no revision, print a summary of the current state of the\n"
 "    repository.\n"
 "\n"
-"    With a path, do a lookup in another repository.\n"
+"    Specifying a path to a repository root or Mercurial bundle will\n"
+"    cause lookup to operate on that repository/bundle.\n"
 "\n"
 "    This summary identifies the repository state using one or two\n"
 "    parent hash identifiers, followed by a \"+\" if there are\n"
@@ -5889,8 +5620,8 @@
 "    will abort unless given the -f/--force flag.\n"
 "\n"
 "    You can import a patch straight from a mail message. Even patches\n"
-"    as attachments work (body part must be type text/plain or\n"
-"    text/x-patch to be used). From and Subject headers of email\n"
+"    as attachments work (to use the body part, it must have type\n"
+"    text/plain or text/x-patch). From and Subject headers of email\n"
 "    message are used as default committer and commit message. All\n"
 "    text/plain body parts before first diff are added to commit\n"
 "    message.\n"
@@ -5909,16 +5640,17 @@
 "    With -s/--similarity, hg will attempt to discover renames and\n"
 "    copies in the patch in the same way as 'addremove'.\n"
 "\n"
-"    To read a patch from standard input, use patch name \"-\". See 'hg\n"
-"    help dates' for a list of formats valid for -d/--date.\n"
+"    To read a patch from standard input, use \"-\" as the patch name. If\n"
+"    a URL is specified, the patch will be downloaded from it.\n"
+"    See 'hg help dates' for a list of formats valid for -d/--date.\n"
 "    "
 msgstr ""
 
 msgid "applying patch from stdin\n"
-msgstr ""
+msgstr "anvender lap fra standardinddata\n"
 
 msgid "no diffs found"
-msgstr ""
+msgstr "fandt ingen ændringer"
 
 #, python-format
 msgid ""
@@ -5928,18 +5660,18 @@
 "meddelse:\n"
 "%s\n"
 
-msgid "not a mercurial patch"
-msgstr ""
+msgid "not a Mercurial patch"
+msgstr "ikke en Mercurial patch"
 
 msgid "patch is damaged or loses information"
-msgstr ""
+msgstr "lappen er beskadiget eller mister information"
 
 msgid ""
 "show new changesets found in source\n"
 "\n"
 "    Show new changesets found in the specified path/URL or the default\n"
-"    pull location. These are the changesets that would be pulled if a\n"
-"    pull was requested.\n"
+"    pull location. These are the changesets that would have been pulled\n"
+"    if a pull at the time you issued this command.\n"
 "\n"
 "    For remote repository, using --bundle avoids downloading the\n"
 "    changesets twice if the incoming is followed by a pull.\n"
@@ -5952,7 +5684,7 @@
 "create a new repository in the given directory\n"
 "\n"
 "    Initialize a new repository in the given directory. If the given\n"
-"    directory does not exist, it is created.\n"
+"    directory does not exist, it will be created.\n"
 "\n"
 "    If no directory is given, the current directory is used.\n"
 "\n"
@@ -5960,9 +5692,9 @@
 "    See 'hg help urls' for more information.\n"
 "    "
 msgstr ""
-"opret et nyt arkiv i det givne katalog\n"
-"\n"
-"    Initialiser et nyt arkiv i det givne katalog. Hvis det givne\n"
+"opret et nyt depot i det givne katalog\n"
+"\n"
+"    Initialiser et nyt depot i det givne katalog. Hvis det givne\n"
 "    katalog ikke findes vil det blive oprettet.\n"
 "\n"
 "    Hvis intet katalog er angivet vil det nuværende katalog bliver\n"
@@ -5975,20 +5707,20 @@
 msgid ""
 "locate files matching specific patterns\n"
 "\n"
-"    Print all files under Mercurial control whose names match the\n"
-"    given patterns.\n"
-"\n"
-"    This command searches the entire repository by default. To search\n"
-"    just the current directory and its subdirectories, use\n"
-"    \"--include .\".\n"
-"\n"
-"    If no patterns are given to match, this command prints all file\n"
-"    names.\n"
+"    Print files under Mercurial control in the working directory whose\n"
+"    names match the given patterns.\n"
+"\n"
+"    By default, this command searches all directories in the working\n"
+"    directory. To search just the current directory and its\n"
+"    subdirectories, use \"--include .\".\n"
+"\n"
+"    If no patterns are given to match, this command prints the names\n"
+"    of all files under Mercurial control in the working directory.\n"
 "\n"
 "    If you want to feed the output of this command into the \"xargs\"\n"
 "    command, use the -0 option to both this command and \"xargs\". This\n"
 "    will avoid the problem of \"xargs\" treating single filenames that\n"
-"    contain white space as multiple filenames.\n"
+"    contain whitespace as multiple filenames.\n"
 "    "
 msgstr ""
 
@@ -5999,8 +5731,8 @@
 "    project.\n"
 "\n"
 "    File history is shown without following rename or copy history of\n"
-"    files. Use -f/--follow with a file name to follow history across\n"
-"    renames and copies. --follow without a file name will only show\n"
+"    files. Use -f/--follow with a filename to follow history across\n"
+"    renames and copies. --follow without a filename will only show\n"
 "    ancestors or descendants of the starting revision. --follow-first\n"
 "    only follows the first parent of merge revisions.\n"
 "\n"
@@ -6010,67 +5742,85 @@
 "\n"
 "    See 'hg help dates' for a list of formats valid for -d/--date.\n"
 "\n"
-"    By default this command outputs: changeset id and hash, tags,\n"
-"    non-trivial parents, user, date and time, and a summary for each\n"
-"    commit. When the -v/--verbose switch is used, the list of changed\n"
-"    files and full commit message is shown.\n"
+"    By default this command prints revision number and changeset id,\n"
+"    tags, non-trivial parents, user, date and time, and a summary for\n"
+"    each commit. When the -v/--verbose switch is used, the list of\n"
+"    changed files and full commit message are shown.\n"
 "\n"
 "    NOTE: log -p/--patch may generate unexpected diff output for merge\n"
 "    changesets, as it will only compare the merge changeset against\n"
-"    its first parent. Also, the files: list will only reflect files\n"
-"    that are different from BOTH parents.\n"
-"\n"
-"    "
-msgstr ""
-
-msgid ""
-"looks up all renames for a file (up to endrev) the first\n"
-"        time the file is given. It indexes on the changerev and only\n"
-"        parses the manifest if linkrev != changerev.\n"
-"        Returns rename info for fn at changerev rev."
-msgstr ""
+"    its first parent. Also, only files different from BOTH parents\n"
+"    will appear in files:.\n"
+"    "
+msgstr ""
+"vis revisionhistorik for hele depotet eller udvalgte filer\n"
+"\n"
+"    Viser revisionshistorikken for de angivne filer eller hele\n"
+"    projektet.\n"
+"\n"
+"    Filhistorik vises uden at følge omdøbninger eller kopieringer.\n"
+"    Brug -f/--follow med et filnavn for at følge historien hen over\n"
+"    omdøbninger og kopieringer. --follow uden et filnavn vil kun vise\n"
+"    forfædre eller efterkommere af startrevisionen. --follow-first\n"
+"    følger kun den første forældre for sammenføjningsrevisioner.\n"
+"\n"
+"    Hvis der ikke angives et revisionsinterval, da bruges tip:0 som\n"
+"    standard, med mindre --follow er brugt, i hvilket tilfælde\n"
+"    arbejdskatalogets forælder bruges som startrevision.\n"
+"\n"
+"    Se 'hg help dates' for en liste af gyldige formater til -d/--date.\n"
+"\n"
+"    Som standard udskriver denne kommando revisionsnummer og ændrings\n"
+"    ID, mærkater, ikke-trivielle forældre, bruger, dato og tid, og et\n"
+"    uddrag for hver ændring. Når -v/--verbose tilvalget bruges vises\n"
+"    listen af ændrede filer og den fulde deponeringsbesked.\n"
+"\n"
+"    BEMÆRK: log -p/--patch kan generere uventet diff output for\n"
+"    sammenføjningsændringer idet den kun sammenligner ændringen med\n"
+"    dennes første forælder. Ydermere vises kun filer som er\n"
+"    forskellige fra BEGGE forældre i files:.\n"
+"    "
 
 msgid ""
 "output the current or given revision of the project manifest\n"
 "\n"
 "    Print a list of version controlled files for the given revision.\n"
 "    If no revision is given, the first parent of the working directory\n"
-"    is used, or the null revision if none is checked out.\n"
-"\n"
-"    With -v flag, print file permissions, symlink and executable bits.\n"
-"    With --debug flag, print file revision hashes.\n"
+"    is used, or the null revision if no revision is checked out.\n"
+"\n"
+"    With -v, print file permissions, symlink and executable bits.\n"
+"    With --debug, print file revision hashes.\n"
 "    "
 msgstr ""
 
 msgid ""
 "merge working directory with another revision\n"
 "\n"
-"    The contents of the current working directory is updated with all\n"
-"    changes made in the requested revision since the last common\n"
-"    predecessor revision.\n"
+"    The current working directory is updated with all changes made in\n"
+"    the requested revision since the last common predecessor revision.\n"
 "\n"
 "    Files that changed between either parent are marked as changed for\n"
 "    the next commit and a commit must be performed before any further\n"
-"    updates are allowed. The next commit has two parents.\n"
+"    updates to the repository are allowed. The next commit will have\n"
+"    two parents.\n"
 "\n"
 "    If no revision is specified, the working directory's parent is a\n"
 "    head revision, and the current branch contains exactly one other\n"
 "    head, the other head is merged with by default. Otherwise, an\n"
-"    explicit revision to merge with must be provided.\n"
+"    explicit revision with which to merge with must be provided.\n"
 "    "
 msgstr ""
 "sammenføj arbejdskataloget med en anden revision\n"
 "\n"
-"    Indholdet af det nuværende arbejdskatalog opdateres med alle\n"
-"    ændringer lavet i den ønskede revision siden den sidste fælles\n"
-"    foregående revision.\n"
+"    Det nuværende arbejdskatalog opdateres med alle ændringer lavet i\n"
+"    den ønskede revision siden den sidste fælles foregående revision.\n"
 "\n"
 "    Filer som ændrede sig i forhold til en af forældrene bliver\n"
-"    markeret som ændret med hensyn til næste arkivering, og\n"
-"    arkiveringen skal laves før yderligere opdateringer er tilladt.\n"
-"    Den næste arkiverede ændring får to forældre.\n"
-"\n"
-"    Hvis ingen revision angives og arbejdskatalogets forældre er en\n"
+"    markeret som ændret med hensyn til næste deponering, og en\n"
+"    deponering skal laves før yderligere opdateringer er tilladt. Den\n"
+"    næste deponerede ændring får to forældre.\n"
+"\n"
+"    Hvis ingen revision angives og arbejdskatalogets forælder er en\n"
 "    hovedrevision og den nuværende gren indeholder præcis et andet\n"
 "    hoved, så sammenføjes der med dette hoved som standard. Ellers\n"
 "    skal en eksplicit revision angives.\n"
@@ -6079,13 +5829,14 @@
 #, python-format
 msgid "branch '%s' has %d heads - please merge with an explicit rev"
 msgstr ""
+"gren '%s' har %d hoveder - sammenføj venligst med en eksplicit revision"
 
 #, python-format
 msgid "branch '%s' has one head - please merge with an explicit rev"
-msgstr ""
+msgstr "gren '%s' har et hoved - sammenføj venligst med en eksplicit revision"
 
 msgid "there is nothing to merge"
-msgstr ""
+msgstr "der er ikke noget at sammenføje"
 
 #, python-format
 msgid "%s - use \"hg update\" instead"
@@ -6095,6 +5846,8 @@
 "working dir not at a head rev - use \"hg update\" or merge with an explicit "
 "rev"
 msgstr ""
+"arbejdskataloget er ikke ved en hovedrevision - brug \"hg update\" eller "
+"sammenføj med en eksplicit revision"
 
 msgid ""
 "show changesets not found in destination\n"
@@ -6112,9 +5865,9 @@
 "\n"
 "    Print the working directory's parent revisions. If a revision is\n"
 "    given via -r/--rev, the parent of that revision will be printed.\n"
-"    If a file argument is given, revision in which the file was last\n"
-"    changed (before the working directory revision or the argument to\n"
-"    --rev if given) is printed.\n"
+"    If a file argument is given, the revision in which the file was\n"
+"    last changed (before the working directory revision or the\n"
+"    argument to --rev if given) is printed.\n"
 "    "
 msgstr ""
 "vis forældrene til arbejdskataloget eller en revision\n"
@@ -6126,18 +5879,18 @@
 "    --rev, hvis givet).\n"
 "    "
 
-msgid "can only specify an explicit file name"
+msgid "can only specify an explicit filename"
 msgstr ""
 
 #, python-format
 msgid "'%s' not found in manifest!"
-msgstr ""
+msgstr "'%s' ikke fundet i manifest!"
 
 msgid ""
 "show aliases for remote repositories\n"
 "\n"
 "    Show definition of symbolic path name NAME. If no name is given,\n"
-"    show definition of available names.\n"
+"    show definition of all available names.\n"
 "\n"
 "    Path names are defined in the [paths] section of /etc/mercurial/hgrc\n"
 "    and $HOME/.hgrc. If run inside a repository, .hg/hgrc is used, too.\n"
@@ -6161,14 +5914,17 @@
 msgid ""
 "pull changes from the specified source\n"
 "\n"
-"    Pull changes from a remote repository to the local one.\n"
+"    Pull changes from a remote repository to a local one.\n"
 "\n"
 "    This finds all changes from the repository at the specified path\n"
-"    or URL and adds them to the local repository. By default, this\n"
-"    does not update the copy of the project in the working directory.\n"
-"\n"
-"    Use hg incoming if you want to see what will be added by the next\n"
-"    pull without actually adding the changes to the repository.\n"
+"    or URL and adds them to a local repository (the current one unless\n"
+"    -R is specified). By default, this does not update the copy of the\n"
+"    project in the working directory.\n"
+"\n"
+"    Use hg incoming if you want to see what would have been added by a\n"
+"    pull at the time you issued this command. If you then decide to\n"
+"    added those changes to the repository, you should use pull -r X\n"
+"    where X is the last changeset listed by hg incoming.\n"
 "\n"
 "    If SOURCE is omitted, the 'default' path will be used.\n"
 "    See 'hg help urls' for more information.\n"
@@ -6176,26 +5932,23 @@
 msgstr ""
 "hent ændringer fra den angivne kilde\n"
 "\n"
-"    Hiver ændringer fra et fjert arkiv til det lokale.\n"
-"\n"
-"    Dette finder alle ændringer fra arkivet på den specificerede sti\n"
-"    eller URL og tilføjer dem til det lokale arkiv. Som standard\n"
-"    opdateres arbejdskataloget ikke.\n"
-"\n"
-"    Brug hg incoming hvis du vil se hvad der vil blive tilføjet til\n"
-"    arkivet ved næste pull, men uden rent faktisk at tilføje\n"
-"    ændringerne til arkivet.\n"
+"    Hiver ændringer fra et fjert depot til et lokalt.\n"
+"\n"
+"    Dette finder alle ændringer fra depotet på den specificerede sti\n"
+"    eller URL og tilføjer dem til et lokalt depot (det nuværende depot\n"
+"    med mindre -R er angivet). Som standard opdateres arbejdskataloget\n"
+"    ikke.\n"
+"\n"
+"    Brug hg incoming for at se hvad der ville være blevet tilføjet på\n"
+"    det tidspunkt du udførte kommandoen. Hvis du derefter beslutter at\n"
+"    tilføje disse ændringer til depotet, så bør du bruge pull -r X\n"
+"    hvor X er den sidste ændring nævnt af hg incoming.\n"
 "\n"
 "    Hvis KILDE udelades, så bruges 'default' stien.\n"
 "    Se 'hg help urls' for mere information.\n"
 "    "
 
 msgid ""
-"Other repository doesn't support revision lookup, so a rev cannot be "
-"specified."
-msgstr ""
-
-msgid ""
 "push changes to the specified destination\n"
 "\n"
 "    Push changes from the local repository to the given destination.\n"
@@ -6207,36 +5960,34 @@
 "\n"
 "    By default, push will refuse to run if it detects the result would\n"
 "    increase the number of remote heads. This generally indicates the\n"
-"    the client has forgotten to pull and merge before pushing.\n"
+"    user forgot to pull and merge before pushing.\n"
 "\n"
 "    If -r/--rev is used, the named revision and all its ancestors will\n"
 "    be pushed to the remote repository.\n"
 "\n"
-"    Look at the help text for URLs for important details about ssh://\n"
+"    Please see 'hg help urls' for important details about ssh://\n"
 "    URLs. If DESTINATION is omitted, a default path will be used.\n"
-"    See 'hg help urls' for more information.\n"
 "    "
 msgstr ""
 "skub ændringer til den angivne destination\n"
 "\n"
-"    Skubber ændringer fra det lokale arkiv til den givne destination.\n"
+"    Skubber ændringer fra det lokale depot til den givne destination.\n"
 "\n"
 "    Dette er den symmetriske operation for pull. Den flytter ændringer\n"
-"    fra det nuværende arkiv til et andet. Hvis destinationen er lokal,\n"
+"    fra det nuværende depot til et andet. Hvis destinationen er lokal,\n"
 "    så er dette identisk til et pull i destinationen af det nuværende\n"
-"    arkiv.\n"
+"    depot.\n"
 "\n"
 "    Som standard vil push nægte af køre hvis den detekterer at den vil\n"
 "    øge antallet af hoveder i destinationen. Dette indikerer normalt\n"
-"    at klienten har glemt at henge og sammenføje ændringerne før\n"
+"    at brugeren har glemt at hente og sammenføje ændringerne før\n"
 "    skubningen.\n"
 "\n"
 "    Hvis -r/--rev bruges, så vil den navngivne revision og alle dets\n"
-"    forfædre bliver skubbet til det andet arkiv.\n"
-"\n"
-"    Se hjælpeteksten for URL'er for vigtige detaljer om ssh:// URL'er.\n"
+"    forfædre bliver skubbet til det andet depot.\n"
+"\n"
+"    Se venligst 'hg help urls' for vigtige detaljer om ssh:// URL'er.\n"
 "    Hvis DESTINATION udelades vil en standard sti blive brugt.\n"
-"    Se 'hg help urls' for mere information.\n"
 "    "
 
 #, python-format
@@ -6244,23 +5995,6 @@
 msgstr "skubber til %s\n"
 
 msgid ""
-"raw commit interface (DEPRECATED)\n"
-"\n"
-"    (DEPRECATED)\n"
-"    Lowlevel commit, for use in helper scripts.\n"
-"\n"
-"    This command is not intended to be used by normal users, as it is\n"
-"    primarily useful for importing from other SCMs.\n"
-"\n"
-"    This command is now deprecated and will be removed in a future\n"
-"    release, please use debugsetparents and commit instead.\n"
-"    "
-msgstr ""
-
-msgid "(the rawcommit command is deprecated)\n"
-msgstr ""
-
-msgid ""
 "roll back an interrupted transaction\n"
 "\n"
 "    Recover from an interrupted commit or pull.\n"
@@ -6280,13 +6014,13 @@
 "    entire project history. -A/--after can be used to remove only\n"
 "    files that have already been deleted, -f/--force can be used to\n"
 "    force deletion, and -Af can be used to remove files from the next\n"
-"    revision without deleting them.\n"
+"    revision without deleting them from the working directory.\n"
 "\n"
 "    The following table details the behavior of remove for different\n"
 "    file states (columns) and option combinations (rows). The file\n"
-"    states are Added, Clean, Modified and Missing (as reported by hg\n"
-"    status). The actions are Warn, Remove (from branch) and Delete\n"
-"    (from disk).\n"
+"    states are Added [A], Clean [C], Modified [M] and Missing [!]\n"
+"    (as reported by hg status). The actions are Warn, Remove (from\n"
+"    branch) and Delete (from disk).\n"
 "\n"
 "           A  C  M  !\n"
 "    none   W  RD W  R\n"
@@ -6298,21 +6032,21 @@
 "    To undo a remove before that, see hg revert.\n"
 "    "
 msgstr ""
-"fjern de angivne filer ved næste arkivering\n"
-"\n"
-"    Planlæg de angivne filer til sletning fra arkivet.\n"
+"fjern de angivne filer ved næste deponering\n"
+"\n"
+"    Planlæg de angivne filer til sletning fra depotet.\n"
 "\n"
 "    Dette fjerner kun filerne fra den nuværende gren, ikke fra hele\n"
 "    projektets historie. -A/--after kan bruges til kun at fjerne filer\n"
 "    som allerede er slettet, -f/--force kan bruges for at gennemtvinge\n"
 "    en sletning, og -Af kan bruges til at fjerne filer fra næste\n"
-"    revision uden at slette dem.\n"
+"    revision uden at slette dem fra arbejdskataloget.\n"
 "\n"
 "    Den følgende tabel viser opførslen af remove for forskellige\n"
-"    tilstande af filer (søjler) og kombinationer af tilvalg (rækker).\n"
-"    Filtilstandene er Added, Clean, Modified og Missing (som\n"
-"    rapporteret af hg status). Handlingerne er Warn, Remove (fra gren)\n"
-"    og Delete (fra disk).\n"
+"    filtilstande (søjler) og kombinationer af tilvalg (rækker). Mulige\n"
+"    filtilstande er tilføjet [A], ren [C], ændret [M] og manglende [!]\n"
+"    (som rapporteret af hg status). Handlingerne er Warn, Remove (fra\n"
+"    gren) og Delete (fra disk).\n"
 "\n"
 "           A  C  M  !\n"
 "    none   W  RD W  R\n"
@@ -6321,11 +6055,12 @@
 "    -Af    R  R  R  R\n"
 "\n"
 "    Denne kommando planlægger filerne til at blive fjernet ved næste\n"
-"    arkivering. For at omgøre en fjernelse før det, se hg revert.\n"
-"    "
-
-msgid "no files specified"
-msgstr ""
+"    deponering. For at omgøre en fjernelse før det, se hg revert.\n"
+"    "
+
+#, python-format
+msgid "not removing %s: file is untracked\n"
+msgstr "fjerner ikke %s: filen følges ikke\n"
 
 #, python-format
 msgid "not removing %s: file %s (use -f to force removal)\n"
@@ -6367,9 +6102,9 @@
 "    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"
-"    This command will also allow listing resolved files and manually\n"
-"    marking and unmarking files as resolved. All files must be marked\n"
-"    as resolved before the new commits are permitted.\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"
 "\n"
 "    The codes used to show the status of files are:\n"
 "    U = unresolved\n"
@@ -6378,10 +6113,10 @@
 msgstr ""
 
 msgid "too many options specified"
-msgstr ""
+msgstr "der er angivet for mange tilvalg"
 
 msgid "can't specify --all and patterns"
-msgstr ""
+msgstr "kan ikke angive --all og mønstre"
 
 msgid "no files or directories specified; use --all to remerge all files"
 msgstr ""
@@ -6441,7 +6176,7 @@
 
 #, python-format
 msgid "undeleting %s\n"
-msgstr ""
+msgstr "usletter %s\n"
 
 #, python-format
 msgid "saving current version of %s as %s\n"
@@ -6449,11 +6184,11 @@
 
 #, python-format
 msgid "file not managed: %s\n"
-msgstr ""
+msgstr "filen er ikke håndteret: %s\n"
 
 #, python-format
 msgid "no changes needed to %s\n"
-msgstr ""
+msgstr "%s behøver ingen ændringer\n"
 
 msgid ""
 "roll back the last transaction\n"
@@ -6461,7 +6196,8 @@
 "    This command should be used with care. There is only one level of\n"
 "    rollback, and there is no way to undo a rollback. It will also\n"
 "    restore the dirstate at the time of the last transaction, losing\n"
-"    any dirstate changes since that time.\n"
+"    any dirstate changes since that time. This command does not alter\n"
+"    the working directory.\n"
 "\n"
 "    Transactions are used to encapsulate the effects of all commands\n"
 "    that create new changesets or propagate existing changesets into a\n"
@@ -6500,9 +6236,9 @@
 "    files.\n"
 "    "
 msgstr ""
-"eksporter arkivet via HTTP\n"
-"\n"
-"    Start en lokal HTTP arkivbrowser og pull-server.\n"
+"eksporter depotet via HTTP\n"
+"\n"
+"    Start en lokal HTTP depotbrowser og pull-server.\n"
 "\n"
 "    Som standard logger serveren forespørgsler til stdout og fejl til\n"
 "    stderr. Brug -A/--accesslog og -E/--errorlog tilvalgene for at\n"
@@ -6518,10 +6254,10 @@
 "\n"
 "    Show status of files in the repository. If names are given, only\n"
 "    files that match are shown. Files that are clean or ignored or\n"
-"    source of a copy/move operation, are not listed unless -c/--clean,\n"
-"    -i/--ignored, -C/--copies or -A/--all is given. Unless options\n"
-"    described with \"show only ...\" are given, the options -mardu are\n"
-"    used.\n"
+"    the source of a copy/move operation, are not listed unless\n"
+"    -c/--clean, -i/--ignored, -C/--copies or -A/--all are given.\n"
+"    Unless options described with \"show only ...\" are given, the\n"
+"    options -mardu are used.\n"
 "\n"
 "    Option -q/--quiet hides untracked (unknown and ignored) files\n"
 "    unless explicitly requested with -u/--unknown or -i/--ignored.\n"
@@ -6532,7 +6268,8 @@
 "    to one merge parent.\n"
 "\n"
 "    If one revision is given, it is used as the base revision.\n"
-"    If two revisions are given, the difference between them is shown.\n"
+"    If two revisions are given, the differences between them are\n"
+"    shown.\n"
 "\n"
 "    The codes used to show the status of files are:\n"
 "    M = modified\n"
@@ -6542,12 +6279,12 @@
 "    ! = missing (deleted by non-hg command, but still tracked)\n"
 "    ? = not tracked\n"
 "    I = ignored\n"
-"      = the previous added file was copied from here\n"
+"      = origin of the previous file listed as A (added)\n"
 "    "
 msgstr ""
 "vis ændrede filer i arbejdskataloget\n"
 "\n"
-"    Vis status for filer i arkivet. Hvis der angivet navne, så vil kun\n"
+"    Vis status for filer i depotet. Hvis der angivet navne, så vil kun\n"
 "    disse filer blive vist. Filer som er rene eller ignorerede eller\n"
 "    kilden i en kopierings/flytnings operation vises ikke med mindre\n"
 "    -c/--clear, -i/--ignored, -C/--copies eller -A/--all er angivet.\n"
@@ -6575,7 +6312,7 @@
 "    ! = mangler (slettet af en ikke-hg kommando, men følges stadig)\n"
 "    ? = følges ikke\n"
 "    I = ignoreret\n"
-"      = den foregående fil blev kopieret herfra\n"
+"      = den foregående fil markeret som A (tilføjet) stammer herfra\n"
 "    "
 
 msgid ""
@@ -6601,34 +6338,34 @@
 msgstr ""
 
 msgid "tag names must be unique"
-msgstr ""
+msgstr "mærkatnavne skal være unikke"
 
 #, python-format
 msgid "the name '%s' is reserved"
-msgstr ""
+msgstr "navnet '%s' er reserveret"
 
 msgid "--rev and --remove are incompatible"
-msgstr ""
+msgstr "--rev og --remove er inkompatible"
 
 #, python-format
 msgid "tag '%s' does not exist"
-msgstr ""
+msgstr "mærkaten '%s' eksisterer ikke"
 
 #, python-format
 msgid "tag '%s' is not a global tag"
-msgstr ""
+msgstr "mærkaten '%s' er ikke en global mærkat"
 
 #, python-format
 msgid "tag '%s' is not a local tag"
-msgstr ""
+msgstr "mærkaten '%s' er ikke en lokal mærkat"
 
 #, python-format
 msgid "Removed tag %s"
-msgstr ""
+msgstr "Mærke %s er fjernet"
 
 #, python-format
 msgid "tag '%s' already exists (use -f to force)"
-msgstr ""
+msgstr "mærkaten '%s' eksisterer allerede (brug -f for at gennemtvinge)"
 
 #, python-format
 msgid "Added tag %s for changeset %s"
@@ -6641,7 +6378,7 @@
 "    switch is used, a third column \"local\" is printed for local tags.\n"
 "    "
 msgstr ""
-"vis arkivmærkater\n"
+"vis depotmærkater\n"
 "\n"
 "    Viser både normale og lokale mærkater. Når -v/--verbose flaget\n"
 "    bruges, udskrives en tredje kolonne \"local\" for lokale mærkater.\n"
@@ -6650,9 +6387,9 @@
 msgid ""
 "show the tip revision\n"
 "\n"
-"    The tip revision (usually just called the tip) is the most\n"
-"    recently added changeset in the repository, the most recently\n"
-"    changed head.\n"
+"    The tip revision (usually just called the tip) is the changeset\n"
+"    most recently added to the repository (and therefore the most\n"
+"    recently changed head).\n"
 "\n"
 "    If you have just made a commit, that commit will be the tip. If\n"
 "    you have just pulled changes from another repository, the tip of\n"
@@ -6685,7 +6422,8 @@
 "\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.\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"
@@ -6702,26 +6440,27 @@
 msgstr ""
 "opdater arbejdskataloget\n"
 "\n"
-"    Opdater arkivets arbejdskatalog til den angivne revision, eller\n"
+"    Opdater depotets arbejdskatalog til den angivne revision, eller\n"
 "    spidsen af den nuværende gren hvis ingen revision er angivet. Brug\n"
 "    null som revision for at fjerne arbejdskataloget (ligesom 'hg\n"
 "    clone -U').\n"
 "\n"
-"    Hvis arbejdskataloget ikke indeholder nogen uarkiverede ændringer,\n"
-"    da vil det blive erstattet af den ønskede revision fra arkivet.\n"
-"    Hvis den ønskede revision er på en anden gren, så vil\n"
+"    Hvis arbejdskataloget ikke indeholder nogen ikke-deponerede\n"
+"    ændringer, da vil det blive erstattet af den ønskede revision fra\n"
+"    depotet. Hvis den ønskede revision er på en anden gren, så vil\n"
 "    arbejdskataloget yderligere blive skiftet til denne gren.\n"
 "\n"
-"    Hvis der er uarkiverede ændringer kan -C/--clean tilvalget bruges\n"
-"    for at kassere dem og sætte tilstanden af arbejdskataloget lig\n"
-"    tilstanden i den ønskede revision.\n"
-"\n"
-"    Hvis der er uarkiverede ændringer, og -C/--clean tilvalget ikke\n"
-"    bruges, og forældrerevisionen og den ønskede revision begge er på\n"
-"    samme gren, og en af dem er en forfar til den anden, så vil det\n"
-"    nye arbejdskatalog indeholde den ønskede revision sammenføjet med\n"
-"    de uarkiverede ændringer. Ellers vil opdateringen fejle med et\n"
-"    forslag til at bruge 'merge' eller 'update -C' i stedet.\n"
+"    Hvis der er ikke-deponerede ændringer kan -C/--clean tilvalget\n"
+"    bruges for at kassere dem og sætte tilstanden af arbejdskataloget\n"
+"    lig tilstanden i den ønskede revision. Alternativt, brug\n"
+"    -c/--check for at afbryde.\n"
+"\n"
+"    Hvis der er ikke-deponerede ændringer, og -C/--clean tilvalget\n"
+"    ikke bruges, og forældrerevisionen og den ønskede revision begge\n"
+"    er på samme gren, og en af dem er en forfar til den anden, så vil\n"
+"    det nye arbejdskatalog indeholde den ønskede revision sammenføjet\n"
+"    med de ikke-deponerede ændringer. Ellers vil opdateringen fejle\n"
+"    med et forslag til at bruge 'merge' eller 'update -C' i stedet.\n"
 "\n"
 "    Hvis du vil opdatere blot en enkelt fil til en ældre revision,\n"
 "    brug da revert.\n"
@@ -6729,6 +6468,9 @@
 "    Se 'hg help dates' for en liste af gyldige formater til -d/--date.\n"
 "    "
 
+msgid "uncommitted local changes"
+msgstr "udeponerede lokale ændringer"
+
 msgid ""
 "verify the integrity of the repository\n"
 "\n"
@@ -6742,11 +6484,11 @@
 msgstr ""
 
 msgid "output version and copyright information"
-msgstr ""
+msgstr "udskriv version- og copyrightinformation"
 
 #, python-format
 msgid "Mercurial Distributed SCM (version %s)\n"
-msgstr "Mercurial Distributed SCM (version %s)\n"
+msgstr "Mercurial Distribueret SCM (version %s)\n"
 
 msgid ""
 "\n"
@@ -6756,7 +6498,7 @@
 msgstr ""
 
 msgid "repository root directory or symbolic path name"
-msgstr ""
+msgstr "depotrodfolder eller symbolsk stinavn"
 
 msgid "change working directory"
 msgstr "skift arbejdskatalog"
@@ -6768,37 +6510,37 @@
 msgstr "undertryk output"
 
 msgid "enable additional output"
-msgstr ""
+msgstr "aktiver yderlig output"
 
 msgid "set/override config option"
-msgstr ""
+msgstr "sæt/overskriv konfigurationopsætning"
 
 msgid "enable debugging output"
-msgstr ""
+msgstr "aktiver fejlsøgningsinformation"
 
 msgid "start debugger"
-msgstr ""
+msgstr "start fejlsøgningsprogram"
 
 msgid "set the charset encoding"
-msgstr ""
+msgstr "angiv tegnkodningen"
 
 msgid "set the charset encoding mode"
-msgstr ""
+msgstr "angiv tegnkodningstilstand"
 
 msgid "print traceback on exception"
-msgstr ""
+msgstr "udskriv traceback ved exception"
 
 msgid "time how long the command takes"
-msgstr ""
+msgstr "tag tid på hvor lang tid kommandoen tager"
 
 msgid "print command execution profile"
 msgstr ""
 
 msgid "output version information and exit"
-msgstr ""
+msgstr "udskriv versionsinformation og afslut"
 
 msgid "display help and exit"
-msgstr ""
+msgstr "vis hjælp og afslut"
 
 msgid "do not perform actions, just print output"
 msgstr "udfør ingen handlinger, udskriv kun outputttet"
@@ -6807,7 +6549,7 @@
 msgstr "specificer ssh kommandoen som skal bruges"
 
 msgid "specify hg command to run on the remote side"
-msgstr ""
+msgstr "angiv hg kommando som skal udføres på fjernsystemet"
 
 msgid "include names matching the given patterns"
 msgstr "inkluder navne som matcher det givne mønster"
@@ -6816,52 +6558,52 @@
 msgstr "ekskluder navne som matcher det givne mønster"
 
 msgid "use <text> as commit message"
-msgstr "brug <tekst> som arkiveringsbesked"
+msgstr "brug <tekst> som deponeringsbesked"
 
 msgid "read commit message from <file>"
-msgstr "læs arkiveringsbeskeden fra <fil>"
+msgstr "læs deponeringsbeskeden fra <fil>"
 
 msgid "record datecode as commit date"
-msgstr ""
+msgstr "noter dato som integrationsdato"
 
 msgid "record the specified user as committer"
 msgstr ""
 
 msgid "display using template map file"
-msgstr ""
+msgstr "vis med skabelon-fil"
 
 msgid "display with template"
-msgstr ""
+msgstr "vis med skabelon"
 
 msgid "do not show merges"
-msgstr ""
+msgstr "vis ikke sammenføjninger"
 
 msgid "treat all files as text"
 msgstr "behandl alle filer som tekst"
 
 msgid "don't include dates in diff headers"
-msgstr ""
+msgstr "inkluder ikke datoer i diff-hoveder"
 
 msgid "show which function each change is in"
-msgstr ""
+msgstr "vis hvilken funktion hver ændring er i"
 
 msgid "ignore white space when comparing lines"
-msgstr ""
+msgstr "ignorer blanktegn når linier sammenlignes"
 
 msgid "ignore changes in the amount of white space"
-msgstr ""
+msgstr "ignorer ændringer i mængden af blanktegn"
 
 msgid "ignore changes whose lines are all blank"
-msgstr ""
+msgstr "ignorer ændringer hvis linier alle er blanke"
 
 msgid "number of lines of context to show"
-msgstr ""
+msgstr "antal linier kontekst der skal vises"
 
 msgid "guess renamed files by similarity (0<=s<=100)"
-msgstr ""
+msgstr "gæt omdøbte filer ud fra enshed (0<=s<=100)"
 
 msgid "[OPTION]... [FILE]..."
-msgstr ""
+msgstr "[TILVALG]... [FIL]..."
 
 msgid "annotate the specified revision"
 msgstr "annotér den angivne revision"
@@ -6885,22 +6627,22 @@
 msgstr "vil linienummeret for den første forekomst"
 
 msgid "[-r REV] [-f] [-a] [-u] [-d] [-n] [-c] [-l] FILE..."
-msgstr ""
+msgstr "[-r REV] [-f] [-a] [-u] [-d] [-n] [-c] [-l] FIL..."
 
 msgid "do not pass files through decoders"
-msgstr ""
+msgstr "kør ikke filerne igennem dekodere"
 
 msgid "directory prefix for files in archive"
-msgstr ""
+msgstr "katalogpræfiks for filerne i arkivet"
 
 msgid "revision to distribute"
-msgstr ""
+msgstr "revision som skal distribueres"
 
 msgid "type of distribution to create"
-msgstr ""
+msgstr "distributionstype der skal oprettes"
 
 msgid "[OPTION]... DEST"
-msgstr ""
+msgstr "[TILVALG]... MÅL"
 
 msgid "merge with old dirstate parent after backout"
 msgstr ""
@@ -6912,7 +6654,7 @@
 msgstr "revision som skal bakkes ud"
 
 msgid "[OPTION]... [-r] REV"
-msgstr ""
+msgstr "[TILVALG]... [-r] REV"
 
 msgid "reset bisect state"
 msgstr "nulstil bisect"
@@ -6924,16 +6666,16 @@
 msgstr "marker ændring som dårlig"
 
 msgid "skip testing changeset"
-msgstr ""
+msgstr "spring testen af denne ændring over"
 
 msgid "use command to check changeset state"
-msgstr "brug kommando for at tjekke tilstanden af ændringen"
+msgstr "brug kommando for at kontrollere tilstanden af ændringen"
 
 msgid "do not update to target"
 msgstr "undlad at opdatere til målet"
 
 msgid "[-gbsr] [-c CMD] [REV]"
-msgstr ""
+msgstr "[-gbsr] [-c KOMMANDO] [REV]"
 
 msgid "set branch name even if it shadows an existing branch"
 msgstr ""
@@ -6942,16 +6684,16 @@
 msgstr ""
 
 msgid "[-fC] [NAME]"
-msgstr ""
+msgstr "[-fC] [NAVN]"
 
 msgid "show only branches that have unmerged heads"
-msgstr ""
+msgstr "vil kun grene som har usammenføjne hoveder"
 
 msgid "[-a]"
-msgstr ""
+msgstr "[-a]"
 
 msgid "run even when remote repository is unrelated"
-msgstr "kør selv hvis fjernarkivet er urelateret"
+msgstr "kør selv hvis fjerndepotet er urelateret"
 
 msgid "a changeset up to which you would like to bundle"
 msgstr ""
@@ -6966,34 +6708,34 @@
 msgstr ""
 
 msgid "[-f] [-a] [-r REV]... [--base REV]... FILE [DEST]"
-msgstr ""
+msgstr "[-f] [-a] [-r REV]... [--base REV]... FIL [MÅL]"
 
 msgid "print output to file with formatted name"
 msgstr ""
 
 msgid "print the given revision"
-msgstr ""
+msgstr "udskriv den angivne revision"
 
 msgid "apply any matching decode filter"
 msgstr ""
 
 msgid "[OPTION]... FILE..."
-msgstr ""
+msgstr "[TILVALG]... FIL..."
 
 msgid "the clone will only contain a repository (no working copy)"
-msgstr ""
+msgstr "klonen vil kun indeholde et depot (intet arbejdsbibliotek)"
 
 msgid "a changeset you would like to have after cloning"
-msgstr ""
+msgstr "en ændringer du gerne vil have efter kloningen"
 
 msgid "[OPTION]... SOURCE [DEST]"
-msgstr ""
+msgstr "[TILVALG]... KILDE [MÅL]"
 
 msgid "mark new/missing files as added/removed before committing"
-msgstr ""
+msgstr "marker nye/manglende filer som tilføjede/fjernede før deponering"
 
 msgid "mark a branch as closed, hiding it from the branch list"
-msgstr ""
+msgstr "marker en gren som lukket, skuler den fra listen af grene"
 
 msgid "record a copy that has already occurred"
 msgstr ""
@@ -7002,76 +6744,73 @@
 msgstr ""
 
 msgid "[OPTION]... [SOURCE]... DEST"
-msgstr ""
+msgstr "[TILVALG]... [KILDE]... MÅL"
 
 msgid "[INDEX] REV1 REV2"
-msgstr ""
+msgstr "[INDEKS] REV1 REV2"
 
 msgid "[COMMAND]"
 msgstr "[KOMMANDO]"
 
 msgid "show the command options"
-msgstr ""
+msgstr "vis kommando-flag"
 
 msgid "[-o] CMD"
-msgstr ""
+msgstr "[-o] KOMMANDO"
 
 msgid "try extended date formats"
-msgstr ""
+msgstr "prøv udvidede datoformater"
 
 msgid "[-e] DATE [RANGE]"
-msgstr ""
+msgstr "[-e] DATO [INTERVAL]"
 
 msgid "FILE REV"
-msgstr ""
+msgstr "FIL REV"
 
 msgid "[PATH]"
-msgstr ""
+msgstr "[STI]"
 
 msgid "FILE"
-msgstr ""
-
-msgid "parent"
-msgstr ""
-
-msgid "file list"
-msgstr ""
+msgstr "FIL"
 
 msgid "revision to rebuild to"
-msgstr ""
+msgstr "revision til hvilken der skal gendannes til"
 
 msgid "[-r REV] [REV]"
-msgstr ""
+msgstr "[-r REV] [REV]"
 
 msgid "revision to debug"
-msgstr ""
+msgstr "revision der skal fejlsøges"
 
 msgid "[-r REV] FILE"
-msgstr ""
+msgstr "[-r REV] FIL"
 
 msgid "REV1 [REV2]"
-msgstr ""
+msgstr "REV1 [REV2]"
 
 msgid "do not display the saved mtime"
-msgstr ""
+msgstr "vis ikke den gemte mtime"
 
 msgid "[OPTION]..."
-msgstr ""
+msgstr "[TILVALG]..."
+
+msgid "revision to check"
+msgstr "revision som skal undersøges"
 
 msgid "[OPTION]... [-r REV1 [-r REV2]] [FILE]..."
-msgstr ""
+msgstr "[TILVALG]... [-r REV1 [-r REV2]] [FIL]..."
 
 msgid "diff against the second parent"
 msgstr ""
 
 msgid "[OPTION]... [-o OUTFILESPEC] REV..."
-msgstr ""
+msgstr "[TILVALG]... [-o UDFILSPECIFIKATION] REV..."
 
 msgid "end fields with NUL"
-msgstr ""
+msgstr "afslut felter med NUL"
 
 msgid "print all revisions that match"
-msgstr ""
+msgstr "udskriv alle revisioner som matcher"
 
 msgid "follow changeset history, or file history across copies and renames"
 msgstr ""
@@ -7080,46 +6819,49 @@
 msgstr ""
 
 msgid "print only filenames and revisions that match"
-msgstr ""
+msgstr "udskriv kun filnavne og revisioner som matcher"
 
 msgid "print matching line numbers"
-msgstr ""
+msgstr "udskriv matchende linienumre"
 
 msgid "search in given revision range"
-msgstr ""
+msgstr "søg i det angivne interval"
 
 msgid "[OPTION]... PATTERN [FILE]..."
-msgstr ""
+msgstr "[TILVALG]... MØNSTER [FIL]..."
 
 msgid "show only heads which are descendants of REV"
-msgstr ""
+msgstr "vis kun hoveder som er efterkommere af REV"
 
 msgid "show only the active heads from open branches"
-msgstr ""
-
-msgid "[-r REV] [REV]..."
-msgstr ""
+msgstr "vis kun aktive hoveder fra åbne grene"
+
+msgid "show normal and closed heads"
+msgstr "vis normale og lukkede hoveder"
+
+msgid "[-r STARTREV] [REV]..."
+msgstr "[-r STARTREV] [REV]..."
 
 msgid "[TOPIC]"
-msgstr ""
+msgstr "[EMNE]"
 
 msgid "identify the specified revision"
-msgstr ""
+msgstr "identificer den angivne revision"
 
 msgid "show local revision number"
-msgstr ""
+msgstr "vis lokalt revisionsnummer"
 
 msgid "show global revision id"
-msgstr ""
+msgstr "vis globalt revisionsnummer"
 
 msgid "show branch"
-msgstr ""
+msgstr "vis gren"
 
 msgid "show tags"
 msgstr "vis mærkater"
 
 msgid "[-nibt] [-r REV] [SOURCE]"
-msgstr ""
+msgstr "[-nibt] [-r REV] [KILDE]"
 
 msgid ""
 "directory strip option for patch. This has the same meaning as the "
@@ -7130,262 +6872,268 @@
 msgstr ""
 
 msgid "skip check for outstanding uncommitted changes"
-msgstr ""
+msgstr "spring kontrollen for udeponerede ændringer over"
 
 msgid "don't commit, just update the working directory"
-msgstr ""
+msgstr "deponer ikke, opdater blot arbejdskataloget"
 
 msgid "apply patch to the nodes from which it was generated"
-msgstr ""
+msgstr "anvend lap på den knude hvorfra den var genereret"
 
 msgid "use any branch information in patch (implied by --exact)"
 msgstr ""
 
 msgid "[OPTION]... PATCH..."
-msgstr ""
+msgstr "[TILVALG]... LAP..."
 
 msgid "show newest record first"
-msgstr ""
+msgstr "vis nyeste postering først"
 
 msgid "file to store the bundles into"
-msgstr ""
+msgstr "fil hvor bundterne skal gemmes"
 
 msgid "a specific revision up to which you would like to pull"
-msgstr ""
+msgstr "en specifik revision hvortil du gerne vil trække"
 
 msgid "[-p] [-n] [-M] [-f] [-r REV]... [--bundle FILENAME] [SOURCE]"
-msgstr ""
+msgstr "[-p] [-n] [-M] [-f] [-r REV]... [--bundle FILNAVN] [KILDE]"
 
 msgid "[-e CMD] [--remotecmd CMD] [DEST]"
-msgstr ""
+msgstr "[-e KOMMANDO] [--remotecmd KOMMANDO] [MÅL]"
 
 msgid "search the repository as it stood at REV"
 msgstr ""
 
 msgid "end filenames with NUL, for use with xargs"
-msgstr ""
+msgstr "afslut filnavne med NUL, til brug med xargs"
 
 msgid "print complete paths from the filesystem root"
-msgstr ""
+msgstr "udskriv fulde stier fra filsystemets rod"
 
 msgid "[OPTION]... [PATTERN]..."
-msgstr ""
+msgstr "[TILVALG]... [MØNSTER]..."
 
 msgid "only follow the first parent of merge changesets"
-msgstr ""
+msgstr "følg kun den første forælder for sammenføjningsændringer"
 
 msgid "show revisions matching date spec"
-msgstr ""
+msgstr "vis revisioner som matcher datoangivelsen"
 
 msgid "show copied files"
-msgstr ""
+msgstr "vis kopierede filer"
 
 msgid "do case-insensitive search for a keyword"
-msgstr ""
+msgstr "lav søgning efter nøgleord uden forskel på små/store bogstaver"
 
 msgid "include revisions where files were removed"
-msgstr ""
+msgstr "inkluder revisioner hvor filer blev slettet"
 
 msgid "show only merges"
-msgstr ""
+msgstr "vis kun sammenføjninger"
 
 msgid "revisions committed by user"
-msgstr ""
+msgstr "revisioner deponeret af bruger"
 
 msgid "show only changesets within the given named branch"
-msgstr ""
+msgstr "vis kun ændringer på den angivne navngivne gren"
 
 msgid "do not display revision or any of its ancestors"
-msgstr ""
+msgstr "vis ikke revision eller nogen af den forfædre"
 
 msgid "[OPTION]... [FILE]"
-msgstr ""
+msgstr "[TILVALG]... [FIL]"
 
 msgid "revision to display"
-msgstr ""
+msgstr "revision der skal vises"
 
 msgid "[-r REV]"
-msgstr ""
+msgstr "[-r REV]"
 
 msgid "force a merge with outstanding changes"
 msgstr ""
 
 msgid "revision to merge"
+msgstr "revision der skal sammenføjes"
+
+msgid "review revisions to merge (no merge is performed)"
 msgstr ""
 
 msgid "[-f] [[-r] REV]"
-msgstr ""
+msgstr "[-f] [[-r] REV]"
 
 msgid "a specific revision up to which you would like to push"
 msgstr ""
 
 msgid "[-M] [-p] [-n] [-f] [-r REV]... [DEST]"
-msgstr ""
+msgstr "[-M] [-p] [-n] [-f] [-r REV]... [MÅL]"
 
 msgid "show parents from the specified revision"
-msgstr ""
-
-msgid "hg parents [-r REV] [FILE]"
-msgstr ""
+msgstr "vis forældre for den angivne revision"
+
+msgid "[-r REV] [FILE]"
+msgstr "[-r REV] [FIL]"
 
 msgid "[NAME]"
-msgstr ""
+msgstr "[NAVN]"
 
 msgid "update to new tip if changesets were pulled"
-msgstr ""
+msgstr "opdater til den nye spids hvis ændringer blev trukket ned"
 
 msgid "[-u] [-f] [-r REV]... [-e CMD] [--remotecmd CMD] [SOURCE]"
-msgstr ""
+msgstr "[-u] [-f] [-r REV]... [-e KOMMANDO] [--remotecmd KOMMANDO] [KILDE]"
 
 msgid "force push"
-msgstr ""
+msgstr "gennemtving skubning"
 
 msgid "[-f] [-r REV]... [-e CMD] [--remotecmd CMD] [DEST]"
-msgstr ""
+msgstr "[-f] [-r REV]... [-e KOMMANDO] [--remotecmd KOMMANDO] [MÅL]"
 
 msgid "record delete for missing files"
 msgstr ""
 
 msgid "remove (and delete) file even if added or modified"
-msgstr ""
+msgstr "fjern (og slet) fil selv hvis tilføjet eller ændret"
 
 msgid "record a rename that has already occurred"
 msgstr ""
 
 msgid "[OPTION]... SOURCE... DEST"
-msgstr ""
+msgstr "[TILVALG]... KILDE... MÅL"
 
 msgid "remerge all unresolved files"
-msgstr ""
+msgstr "gen-sammenføj alle uløste filer"
 
 msgid "list state of files needing merge"
-msgstr ""
+msgstr "vis tilstand af filer som har brug for sammenføjning"
 
 msgid "mark files as resolved"
-msgstr ""
+msgstr "marker filer som løste"
 
 msgid "unmark files as resolved"
-msgstr ""
+msgstr "marker filer som uløste"
 
 msgid "revert all changes when no arguments given"
-msgstr ""
+msgstr "før alle ændringer tilbage når inget argument angives"
 
 msgid "tipmost revision matching date"
 msgstr ""
 
 msgid "revision to revert to"
-msgstr ""
+msgstr "revision der skal føres tilbage til"
 
 msgid "do not save backup copies of files"
-msgstr ""
+msgstr "gem ikke sikkerhedskopier af filer"
 
 msgid "[OPTION]... [-r REV] [NAME]..."
-msgstr ""
+msgstr "[TILVALG]... [-r REV] [NAVN]..."
 
 msgid "name of access log file to write to"
-msgstr ""
+msgstr "navn på adgangslogfilen der skrives til"
 
 msgid "name of error log file to write to"
-msgstr ""
+msgstr "navn på fejlllog fil der skrives til"
 
 msgid "port to listen on (default: 8000)"
-msgstr ""
+msgstr "port der skal lyttes på (standard: 8000)"
 
 msgid "address to listen on (default: all interfaces)"
-msgstr ""
+msgstr "adresse der skal lyttes til (standard: alle grænseflader)"
 
 msgid "prefix path to serve from (default: server root)"
-msgstr ""
+msgstr "prefiks sti at udstille fra (default: server-rod)"
 
 msgid "name to show in web pages (default: working directory)"
-msgstr ""
+msgstr "navn der skal vises på websider (standard: arbejdskatalog)"
 
 msgid "name of the webdir config file (serve more than one repository)"
-msgstr ""
+msgstr "navn på webdir konfigurationsfil (serve mere end et depot)"
 
 msgid "for remote clients"
-msgstr ""
+msgstr "for fjernklienter"
 
 msgid "web templates to use"
-msgstr ""
+msgstr "web-skabelon"
 
 msgid "template style to use"
-msgstr ""
+msgstr "skabelon-stil"
 
 msgid "use IPv6 in addition to IPv4"
-msgstr ""
+msgstr "brug IPv6 og IPv4"
 
 msgid "SSL certificate file"
-msgstr ""
+msgstr "SSL certifikatfil"
 
 msgid "show untrusted configuration options"
-msgstr ""
+msgstr "vis ikke-betroede konfigurationsværdier"
 
 msgid "[-u] [NAME]..."
-msgstr ""
+msgstr "[-u] [NAVN]..."
 
 msgid "show status of all files"
-msgstr ""
+msgstr "vis status på alle filer"
 
 msgid "show only modified files"
-msgstr ""
+msgstr "vis kun ændrede filer"
 
 msgid "show only added files"
-msgstr ""
+msgstr "vis kun tilføjede filer"
 
 msgid "show only removed files"
-msgstr ""
+msgstr "vis kun fjernede filer"
 
 msgid "show only deleted (but tracked) files"
-msgstr ""
+msgstr "vis kun slettede (men kendte) filer"
 
 msgid "show only files without changes"
-msgstr ""
+msgstr "vis kun filer unden ændringer"
 
 msgid "show only unknown (not tracked) files"
-msgstr ""
+msgstr "vis kun ukendte filer"
 
 msgid "show only ignored files"
-msgstr ""
+msgstr "vis kun ignorerede filer"
 
 msgid "hide status prefix"
-msgstr ""
+msgstr "skjul statuspræfix"
 
 msgid "show source of copied files"
-msgstr ""
+msgstr "vis kilder for kopierede filer"
 
 msgid "show difference from revision"
-msgstr ""
+msgstr "vis forskelle fra revision"
 
 msgid "replace existing tag"
-msgstr ""
+msgstr "erstat eksisterende mærkat"
 
 msgid "make the tag local"
-msgstr ""
+msgstr "gør mærkaten lokal"
 
 msgid "revision to tag"
-msgstr ""
+msgstr "revision der skal mærkes"
 
 msgid "remove a tag"
-msgstr ""
+msgstr "fjern en mærkat"
 
 msgid "[-l] [-m TEXT] [-d DATE] [-u USER] [-r REV] NAME..."
-msgstr ""
+msgstr "[-l] [-m TEKST] [-d DATO] [-u BRUGER] [-r REV] NAVN..."
 
 msgid "[-p]"
-msgstr ""
+msgstr "[-p]"
 
 msgid "update to new tip if changesets were unbundled"
-msgstr ""
+msgstr "opdater til ny spids hvis ændringer blev pakket ud"
 
 msgid "[-u] FILE..."
-msgstr ""
+msgstr "[-u] FIL..."
 
 msgid "overwrite locally modified files (no backup)"
-msgstr ""
+msgstr "overskrev lokalt modificerede filer (uden sikkerhedskopi)"
+
+msgid "check for uncommitted changes"
+msgstr "kontroller for udeponerede ændringer"
 
 msgid "[-C] [-d DATE] [[-r] REV]"
-msgstr ""
+msgstr "[-C] [-d DATO] [[-r] REV]"
 
 #, python-format
 msgid "config error at %s:%d: '%s'"
@@ -7395,7 +7143,7 @@
 msgstr "blev ikke fundet i manifest"
 
 msgid "branch name not in UTF-8!"
-msgstr ""
+msgstr "grennavn er ikke i UTF-8!"
 
 #, python-format
 msgid "  searching for copies back to rev %d\n"
@@ -7417,23 +7165,26 @@
 msgstr ""
 
 msgid "  checking for directory renames\n"
-msgstr ""
+msgstr "  undersøger katalogomdøbninger\n"
 
 #, python-format
 msgid "  dir %s -> %s\n"
-msgstr ""
+msgstr "  katalog %s -> %s\n"
 
 #, python-format
 msgid "  file %s -> %s\n"
-msgstr ""
+msgstr "  fil %s -> %s\n"
+
+msgid "working directory state appears damaged!"
+msgstr "arbejdskatalogtilstand virker beskadiget!"
 
 #, python-format
 msgid "'\\n' and '\\r' disallowed in filenames: %r"
-msgstr ""
+msgstr "'\\n' og '\\r' må ikke forekomme i filnavne: %r"
 
 #, python-format
 msgid "directory %r already in dirstate"
-msgstr ""
+msgstr "katalog %r er allerede i dirstate"
 
 #, python-format
 msgid "file %r in dirstate clashes with %r"
@@ -7441,29 +7192,29 @@
 
 #, python-format
 msgid "not in dirstate: %s\n"
-msgstr ""
+msgstr "ikke i dirstate: %s\n"
 
 msgid "unknown"
 msgstr "ukendt"
 
 msgid "character device"
-msgstr ""
+msgstr "tegn-specialfil"
 
 msgid "block device"
-msgstr ""
+msgstr "blok-specialfil"
 
 msgid "fifo"
-msgstr ""
+msgstr "fifo"
 
 msgid "socket"
-msgstr ""
+msgstr "sokkel"
 
 msgid "directory"
-msgstr ""
-
-#, python-format
-msgid "%s: unsupported file type (type is %s)\n"
-msgstr ""
+msgstr "katalog"
+
+#, python-format
+msgid "unsupported file type (type is %s)"
+msgstr "usupporteret filtype (typen er %s)"
 
 #, python-format
 msgid "abort: %s\n"
@@ -7483,11 +7234,11 @@
 
 #, python-format
 msgid "timed out waiting for lock held by %s"
-msgstr ""
+msgstr "tiden løb ud ved vent på lås holdt af %s"
 
 #, python-format
 msgid "lock held by %s"
-msgstr ""
+msgstr "lås holdt af %s"
 
 #, python-format
 msgid "abort: %s: %s\n"
@@ -7531,10 +7282,10 @@
 
 #, python-format
 msgid "abort: error: %s\n"
-msgstr ""
+msgstr "afbrudt: fejl: %s\n"
 
 msgid "broken pipe\n"
-msgstr ""
+msgstr "afbrudt pipe\n"
 
 msgid "interrupted!\n"
 msgstr "standset!\n"
@@ -7543,6 +7294,8 @@
 "\n"
 "broken pipe\n"
 msgstr ""
+"\n"
+"afbrudt pipe\n"
 
 msgid "abort: out of memory\n"
 msgstr "afbrudt: løbet tør for hukommelse\n"
@@ -7550,8 +7303,8 @@
 msgid "** unknown exception encountered, details follow\n"
 msgstr "** der opstod en ukendt fejl, detaljer følger\n"
 
-msgid "** report bug details to http://www.selenic.com/mercurial/bts\n"
-msgstr "** angiv fejldetaljer på http://www.selenic.com/mercurial/bts\n"
+msgid "** report bug details to http://mercurial.selenic.com/bts/\n"
+msgstr "** angiv fejldetaljer på http://mercurial.selenic.com/bts/\n"
 
 msgid "** or mercurial@selenic.com\n"
 msgstr "** eller mercurial@selenic.com\n"
@@ -7562,28 +7315,44 @@
 
 #, python-format
 msgid "** Extensions loaded: %s\n"
-msgstr ""
+msgstr "** Udvidelser indlæst: %s\n"
+
+#, python-format
+msgid "no definition for alias '%s'\n"
+msgstr "ingen definition for alias '%s'\n"
+
+#, python-format
+msgid "alias '%s' resolves to unknown command '%s'\n"
+msgstr "alias '%s' oversætter til ukendt kommando '%s'\n"
+
+#, python-format
+msgid "alias '%s' resolves to ambiguous command '%s'\n"
+msgstr "alias '%s' oversætter til tvetydig kommando '%s'\n"
+
+#, python-format
+msgid "alias '%s' shadows command\n"
+msgstr "alias '%s' skygger for en kommando\n"
 
 #, python-format
 msgid "malformed --config option: %s"
-msgstr ""
+msgstr "misdannet --config tilvalg: %s"
 
 #, python-format
 msgid "extension '%s' overrides commands: %s\n"
-msgstr ""
+msgstr "udvidelse '%s' overskriver kommandoer: %s\n"
 
 msgid "Option --config may not be abbreviated!"
-msgstr "tilvalget --config må ikke forkortes!"
+msgstr "Tilvalget --config må ikke forkortes!"
 
 msgid "Option --cwd may not be abbreviated!"
-msgstr "tilvalget --cwd må ikke forkortes!"
-
-msgid ""
-"Option -R has to be separated from other options (i.e. not -qR) and --"
+msgstr "Tilvalget --cwd må ikke forkortes!"
+
+msgid ""
+"Option -R has to be separated from other options (e.g. not -qR) and --"
 "repository may only be abbreviated as --repo!"
 msgstr ""
-"tilvalget -R skal adskilles fra andre tilvalg (i.e. ikke -qR) og --"
-"repository må kun forkortes som --repo!"
+"Tilvalget -R skal adskilles fra andre tilvalg (fx ikke -qR) og --repository "
+"må kun forkortes som --repo!"
 
 #, python-format
 msgid "Time: real %.3f secs (user %.3f+%.3f sys %.3f+%.3f)\n"
@@ -7591,14 +7360,14 @@
 
 #, python-format
 msgid "repository '%s' is not local"
-msgstr "arkiv '%s' er ikke lokalt"
+msgstr "depot '%s' er ikke lokalt"
 
 msgid "invalid arguments"
-msgstr "ugyldige argumenter"
+msgstr "ugyldige parametre"
 
 #, python-format
 msgid "unrecognized profiling format '%s' - Ignored\n"
-msgstr ""
+msgstr "profileringsformat '%s' ikke genkendt - Ignoreret\n"
 
 msgid ""
 "lsprof not available - install from http://codespeak.net/svn/user/arigo/hack/"
@@ -7648,7 +7417,7 @@
 msgstr ""
 
 msgid "l"
-msgstr ""
+msgstr "l"
 
 #, python-format
 msgid "merging %s and %s to %s\n"
@@ -7660,7 +7429,7 @@
 
 #, python-format
 msgid "my %s other %s ancestor %s\n"
-msgstr ""
+msgstr "min %s anden %s forfar %s\n"
 
 msgid " premerge successful\n"
 msgstr "præ-sammenføjning succesfuld\n"
@@ -7682,7 +7451,7 @@
 
 #, python-format
 msgid "merging %s failed!\n"
-msgstr ""
+msgstr "sammenføjning af %s fejlede!\n"
 
 #, python-format
 msgid "Inconsistent state, %s:%s is good and bad"
@@ -7692,6 +7461,47 @@
 msgid "unknown bisect kind %s"
 msgstr ""
 
+msgid ""
+"\n"
+"    Mercurial has the ability to add new features through the use of\n"
+"    extensions. Extensions may add new commands, add options to\n"
+"    existing commands, change the default behavior of commands, or\n"
+"    implement hooks.\n"
+"\n"
+"    Extensions are not loaded by default for a variety of reasons:\n"
+"    they can increase startup overhead; they may be meant for\n"
+"    advanced usage only; they may provide potentially dangerous\n"
+"    abilities (such as letting you destroy or modify history); they\n"
+"    might not be ready for prime time; or they may alter some\n"
+"    usual behaviors of stock Mercurial. It is thus up to the user to\n"
+"    activate extensions as needed.\n"
+"\n"
+"    To enable the \"foo\" extension, either shipped with Mercurial\n"
+"    or in the Python search path, create an entry for it in your\n"
+"    hgrc, like this:\n"
+"\n"
+"      [extensions]\n"
+"      foo =\n"
+"\n"
+"    You may also specify the full path to an extension:\n"
+"\n"
+"      [extensions]\n"
+"      myfeature = ~/.hgext/myfeature.py\n"
+"\n"
+"    To explicitly disable an extension enabled in an hgrc of broader\n"
+"    scope, prepend its path with !:\n"
+"\n"
+"      [extensions]\n"
+"      # disabling extension bar residing in /path/to/extension/bar.py\n"
+"      hgext.bar = !/path/to/extension/bar.py\n"
+"      # ditto, but no path was supplied for extension baz\n"
+"      hgext.baz = !\n"
+"    "
+msgstr ""
+
+msgid "disabled extensions:"
+msgstr "deaktiverede udvidelser:"
+
 msgid "Date Formats"
 msgstr "Datoformater"
 
@@ -7773,7 +7583,7 @@
 "    "
 
 msgid "File Name Patterns"
-msgstr ""
+msgstr "Mønstre for filnavne"
 
 msgid ""
 "\n"
@@ -8006,7 +7816,7 @@
 msgstr ""
 
 msgid "Template Usage"
-msgstr ""
+msgstr "Brug af skabeloner"
 
 msgid ""
 "\n"
@@ -8069,7 +7879,7 @@
 "          the given date/time and the current date/time.\n"
 "    - basename: Any text. Treats the text as a path, and returns the\n"
 "          last component of the path after splitting by the path\n"
-"          separator (ignoring trailing seprators). For example,\n"
+"          separator (ignoring trailing separators). For example,\n"
 "          \"foo/bar/baz\" becomes \"baz\" and \"foo/bar//\" becomes \"bar"
 "\".\n"
 "    - stripdir: Treat the text as path and strip a directory level, if\n"
@@ -8091,6 +7901,7 @@
 "    - hgdate: Date. Returns the date as a pair of numbers:\n"
 "          \"1157407993 25200\" (Unix timestamp, timezone offset).\n"
 "    - isodate: Date. Returns the date in ISO 8601 format.\n"
+"    - localdate: Date. Converts a date to local date.\n"
 "    - obfuscate: Any text. Returns the input text rendered as a\n"
 "          sequence of XML entities.\n"
 "    - person: Any text. Returns the text before an email address.\n"
@@ -8174,17 +7985,29 @@
 "    "
 msgstr ""
 
+msgid "Using additional features"
+msgstr "Brug af yderligere funktioner"
+
+msgid "can only share local repositories"
+msgstr "kan kun dele lokale depoter"
+
+msgid "destination already exists"
+msgstr "destinationen eksisterer allerede"
+
+msgid "updating working directory\n"
+msgstr "opdaterer arbejdskatalog\n"
+
 #, python-format
 msgid "destination directory: %s\n"
-msgstr ""
+msgstr "målkatalog: %s\n"
 
 #, python-format
 msgid "destination '%s' already exists"
-msgstr ""
+msgstr "målet '%s' eksisterer allerede"
 
 #, python-format
 msgid "destination '%s' is not empty"
-msgstr ""
+msgstr "målet '%s' er ikke tomt"
 
 msgid ""
 "src repository does not support revision lookup and so doesn't support clone "
@@ -8192,10 +8015,7 @@
 msgstr ""
 
 msgid "clone from remote to remote not supported"
-msgstr ""
-
-msgid "updating working directory\n"
-msgstr "opdaterer arbejdskatalog\n"
+msgstr "kloning fra fjerndepot til fjerndepot er ikke understøttet"
 
 msgid "updated"
 msgstr "opdateret"
@@ -8214,19 +8034,21 @@
 msgstr "%d filer %s"
 
 msgid "use 'hg resolve' to retry unresolved file merges\n"
-msgstr ""
+msgstr "brug 'hg resolve' for at prøve at sammenføje uløste filer igen\n"
 
 msgid ""
 "use 'hg resolve' to retry unresolved file merges or 'hg up --clean' to "
 "abandon\n"
 msgstr ""
+"brug 'hg resolve' for at prøve at sammenføje uløste filer igen eller 'hg up "
+"--clean' for at opgive\n"
 
 msgid "(branch merge, don't forget to commit)\n"
-msgstr ""
+msgstr "(grensammenføjning, glem ikke at deponere)\n"
 
 #, python-format
 msgid "error reading %s/.hg/hgrc: %s\n"
-msgstr ""
+msgstr "fejl ved læsning af %s/.hg/hgrc: %s\n"
 
 msgid "SSL support is unavailable"
 msgstr "understøttelse for SSL er ikke tilstede"
@@ -8317,10 +8139,10 @@
 
 #, python-format
 msgid "http error while sending %s command\n"
-msgstr ""
+msgstr "http-fejl mens %s kommandoen blev sendt\n"
 
 msgid "http error, possibly caused by proxy setting"
-msgstr ""
+msgstr "http-fejl, skyldes muligvis proxy-indstillinger"
 
 #, python-format
 msgid "real URL is %s\n"
@@ -8332,11 +8154,11 @@
 
 #, python-format
 msgid "'%s' does not appear to be an hg repository"
-msgstr ""
+msgstr "'%s' ser ikke ud til at være et hg depot"
 
 #, python-format
 msgid "'%s' sent a broken Content-Type header (%s)"
-msgstr ""
+msgstr "'%s' sendte ødelagt Content-Type header (%s)"
 
 #, python-format
 msgid "'%s' uses newer protocol %s"
@@ -8346,23 +8168,23 @@
 msgstr ""
 
 msgid "unexpected response:"
-msgstr ""
+msgstr "uventet svar:"
 
 msgid "look up remote changes"
 msgstr ""
 
 msgid "push failed (unexpected response):"
-msgstr ""
+msgstr "skub fejlede (uventet svar):"
 
 #, python-format
 msgid "push failed: %s"
 msgstr "skub fejlede: %s"
 
 msgid "Python support for SSL and HTTPS is not installed"
-msgstr ""
+msgstr "Python support for SSL og HTTPS er ikke installeret"
 
 msgid "cannot create new http repository"
-msgstr "kan ikke lave nyt http arkiv"
+msgstr "kan ikke lave nyt http depot"
 
 #, python-format
 msgid "%s: ignoring invalid syntax '%s'\n"
@@ -8370,26 +8192,30 @@
 
 #, python-format
 msgid "skipping unreadable ignore file '%s': %s\n"
-msgstr ""
+msgstr "springer ulæselig ignorefil '%s' over: %s\n"
 
 #, python-format
 msgid "repository %s not found"
-msgstr "arkivet %s blev ikke fundet"
+msgstr "depotet %s blev ikke fundet"
 
 #, python-format
 msgid "repository %s already exists"
-msgstr "arkivet %s eksisterer allerede"
+msgstr "depotet %s eksisterer allerede"
 
 #, python-format
 msgid "requirement '%s' not supported"
 msgstr "betingelse '%s' er ikke understøttet"
 
 #, python-format
+msgid ".hg/sharedpath points to nonexistent directory %s"
+msgstr ".hg/sharedpath peger på et ikke-eksisterende katalog %s"
+
+#, python-format
 msgid "%r cannot be used in a tag name"
 msgstr "%r kan ikke bruges i et mærkatnavnet"
 
 msgid "working copy of .hgtags is changed (please commit .hgtags manually)"
-msgstr ""
+msgstr "arbejdskopien af .hgtags er ændret (deponer venligst .hgtags manuelt)"
 
 #, python-format
 msgid "%s, line %s: %s\n"
@@ -8400,11 +8226,11 @@
 
 #, python-format
 msgid "node '%s' is not well formed"
-msgstr ""
-
-#, python-format
-msgid "tag '%s' refers to unknown node"
-msgstr "mærkaten '%s' henviser til en ukendt knude"
+msgstr "knude '%s' er ikke korrekt formet"
+
+#, python-format
+msgid "working directory has unknown parent '%s'!"
+msgstr "arbejdsbiblioteket har ukendt forældre '%s'!"
 
 #, python-format
 msgid "unknown revision '%s'"
@@ -8415,31 +8241,32 @@
 msgstr "filtrerer %s gennem %s\n"
 
 msgid "journal already exists - run hg recover"
-msgstr ""
+msgstr "journalen eksisterer allerede -- kør hg recover"
 
 msgid "rolling back interrupted transaction\n"
-msgstr ""
+msgstr "ruller afbrudt transaktion tilbage\n"
 
 msgid "no interrupted transaction available\n"
-msgstr ""
+msgstr "ingen afbrudt transaktion tilgængelig\n"
 
 msgid "rolling back last transaction\n"
-msgstr "ruller sidst transaktion tilbage\n"
+msgstr "ruller sidste transaktion tilbage\n"
 
 #, python-format
 msgid "Named branch could not be reset, current branch still is: %s\n"
 msgstr ""
+"Navngiven gren kunne ikke nulstilles, den nuværende gren er stadig: %s\n"
 
 msgid "no rollback information available\n"
-msgstr ""
+msgstr "ingen tilbagerulningsinformation til stede\n"
 
 #, python-format
 msgid "waiting for lock on %s held by %r\n"
-msgstr ""
+msgstr "venter på lås af %s holdt af %r\n"
 
 #, python-format
 msgid "repository %s"
-msgstr "arkiv %s"
+msgstr "depot %s"
 
 #, python-format
 msgid "working directory of %s"
@@ -8456,52 +8283,28 @@
 msgid "cannot partially commit a merge (do not specify files or patterns)"
 msgstr ""
 
-#, python-format
-msgid "%s not tracked!\n"
-msgstr "%s følges ikke\n"
-
-msgid "unresolved merge conflicts (see hg resolve)"
-msgstr ""
+msgid "file not found!"
+msgstr "filen blev ikke fundet!"
+
+msgid "no match under directory!"
+msgstr "ingen træffer under kataloget!"
+
+msgid "file not tracked!"
+msgstr "filen følges ikke!"
 
 msgid "nothing changed\n"
 msgstr "ingen ændringer\n"
 
+msgid "unresolved merge conflicts (see hg resolve)"
+msgstr "uløste sammenføjningskonflikter (se hg resolve)"
+
+#, python-format
+msgid "committing subrepository %s\n"
+msgstr "deponerer underdepot %s\n"
+
 #, python-format
 msgid "trouble committing %s!\n"
-msgstr "problem ved arkivering %s!\n"
-
-msgid "HG: Enter commit message.  Lines beginning with 'HG:' are removed."
-msgstr ""
-"HG: Skriv arkiveringsbesked. Linier som starter med 'HG:' bliver fjernet."
-
-#, python-format
-msgid "HG: user: %s"
-msgstr "HG: bruger: %s"
-
-msgid "HG: branch merge"
-msgstr ""
-
-#, python-format
-msgid "HG: branch '%s'"
-msgstr "HG: gren '%s'"
-
-#, python-format
-msgid "HG: added %s"
-msgstr "HG: tilføjet %s"
-
-#, python-format
-msgid "HG: changed %s"
-msgstr "HG: ændret %s"
-
-#, python-format
-msgid "HG: removed %s"
-msgstr "HG: fjernet %s"
-
-msgid "HG: no files changed"
-msgstr "HG: ingen filændringer"
-
-msgid "empty commit message"
-msgstr "tom arkiveringsbesked"
+msgstr "problem ved deponering %s!\n"
 
 #, python-format
 msgid "%s does not exist!\n"
@@ -8516,6 +8319,7 @@
 #, python-format
 msgid "%s not added: only files and symlinks supported currently\n"
 msgstr ""
+"%s ikke tilføjet: i øjeblikket understøttes kun filer og symbolske lænker\n"
 
 #, python-format
 msgid "%s already tracked!\n"
@@ -8530,6 +8334,10 @@
 msgstr "%s eksisterer stadig!\n"
 
 #, python-format
+msgid "%s not tracked!\n"
+msgstr "%s følges ikke\n"
+
+#, python-format
 msgid "%s not removed!\n"
 msgstr "%s ikke fjernet!\n"
 
@@ -8579,10 +8387,10 @@
 msgstr "har allerede ændringen "
 
 msgid "warning: repository is unrelated\n"
-msgstr "advarsel: arkivet er urelateret\n"
+msgstr "advarsel: depotet er urelateret\n"
 
 msgid "repository is unrelated"
-msgstr "arkivet er urelateret"
+msgstr "depotet er urelateret"
 
 msgid "found new changesets starting at "
 msgstr "fandt nye ændringer startende ved "
@@ -8602,25 +8410,29 @@
 "changegroupsubset."
 msgstr ""
 
+#, python-format
+msgid "abort: push creates new remote branch '%s'!\n"
+msgstr "afbrudt: skub laver ny gren '%s' i fjerndepotet!\n"
+
 msgid "abort: push creates new remote heads!\n"
-msgstr ""
+msgstr "afbrudt: skub laver nye fjern-hoveder!\n"
 
 msgid "(did you forget to merge? use push -f to force)\n"
-msgstr ""
+msgstr "(glemte du at sammenføje? brug push -f for at gennemtvinge)\n"
 
 msgid "note: unsynced remote changes!\n"
 msgstr ""
 
 #, python-format
 msgid "%d changesets found\n"
-msgstr ""
+msgstr "fandt %d ændringer\n"
 
 msgid "list of changesets:\n"
-msgstr ""
+msgstr "liste af ændringer:\n"
 
 #, python-format
 msgid "empty or missing revlog for %s"
-msgstr ""
+msgstr "tom eller manglende revlog for %s"
 
 #, python-format
 msgid "add changeset %s\n"
@@ -8630,7 +8442,7 @@
 msgstr "tilføjer ændringer\n"
 
 msgid "received changelog group is empty"
-msgstr ""
+msgstr "modtagen changelog-gruppe er tom"
 
 msgid "adding manifests\n"
 msgstr "tilføjer manifester\n"
@@ -8657,13 +8469,13 @@
 msgstr ""
 
 msgid "Unexpected response from remote server:"
-msgstr ""
+msgstr "Uventet svar fra fjernserver:"
 
 msgid "operation forbidden by server"
-msgstr ""
+msgstr "operationen er forbudt af serveren"
 
 msgid "locking the remote repository failed"
-msgstr ""
+msgstr "låsning af fjerndepotet fejlede"
 
 msgid "the server sent an unknown error code"
 msgstr ""
@@ -8673,7 +8485,7 @@
 
 #, python-format
 msgid "%d files to transfer, %s of data\n"
-msgstr ""
+msgstr "%d filer at overføre, %s data\n"
 
 #, python-format
 msgid "adding %s (%s)\n"
@@ -8681,7 +8493,7 @@
 
 #, python-format
 msgid "transferred %s in %.1f seconds (%s/sec)\n"
-msgstr ""
+msgstr "overførte %s i %.1f sekunder (%s/sek)\n"
 
 msgid "no [smtp]host in hgrc - cannot send mail"
 msgstr ""
@@ -8691,18 +8503,18 @@
 msgstr ""
 
 msgid "can't use TLS: Python SSL support not installed"
-msgstr ""
+msgstr "kan ikke bruge TLS: Python SSL support er ikke installeret"
 
 msgid "(using tls)\n"
-msgstr ""
+msgstr "(bruger tsl)\n"
 
 #, python-format
 msgid "(authenticating to mail server as %s)\n"
-msgstr ""
+msgstr "(autentificerer til mailserver som %s)\n"
 
 #, python-format
 msgid "sending mail: %s\n"
-msgstr ""
+msgstr "sender post: %s\n"
 
 msgid "smtp specified as email transport, but no smtp host configured"
 msgstr ""
@@ -8717,15 +8529,15 @@
 
 #, python-format
 msgid "invalid email address: %s"
-msgstr ""
+msgstr "ugyldig e-post-adresse: %s"
 
 #, python-format
 msgid "invalid local address: %s"
-msgstr ""
+msgstr "ugyldig lokal adresse: %s"
 
 #, python-format
 msgid "failed to remove %s from manifest"
-msgstr ""
+msgstr "kunne ikke fjerne %s fra manifest"
 
 #, python-format
 msgid "diff context lines count must be an integer, not %r"
@@ -8741,17 +8553,6 @@
 msgid "case-folding collision between %s and %s"
 msgstr ""
 
-msgid "resolving manifests\n"
-msgstr ""
-
-#, python-format
-msgid " overwrite %s partial %s\n"
-msgstr ""
-
-#, python-format
-msgid " ancestor %s local %s remote %s\n"
-msgstr ""
-
 #, python-format
 msgid ""
 " conflicting flags for %s\n"
@@ -8767,6 +8568,17 @@
 msgid "Sym&link"
 msgstr ""
 
+msgid "resolving manifests\n"
+msgstr "løser manifester\n"
+
+#, python-format
+msgid " overwrite %s partial %s\n"
+msgstr ""
+
+#, python-format
+msgid " ancestor %s local %s remote %s\n"
+msgstr ""
+
 #, python-format
 msgid ""
 " local changed %s which remote deleted\n"
@@ -8797,7 +8609,7 @@
 
 #, python-format
 msgid "update failed to remove %s: %s!\n"
-msgstr ""
+msgstr "opdatering kunne ikke fjerne %s: %s!\n"
 
 #, python-format
 msgid "getting %s\n"
@@ -8805,7 +8617,7 @@
 
 #, python-format
 msgid "getting %s to %s\n"
-msgstr ""
+msgstr "henter %s til %s\n"
 
 #, python-format
 msgid "warning: detected divergent renames of %s to:\n"
@@ -8813,41 +8625,48 @@
 
 #, python-format
 msgid "branch %s not found"
-msgstr ""
+msgstr "gren %s blev ikke fundet"
 
 msgid "can't merge with ancestor"
-msgstr ""
+msgstr "kan ikke sammenføje med forfader"
 
 msgid "nothing to merge (use 'hg update' or check 'hg heads')"
-msgstr ""
+msgstr "intet at sammenføje (brug 'hg update' eller kontroller 'hg heads')"
+
+msgid "outstanding uncommitted changes (use 'hg status' to list changes)"
+msgstr ""
+"udestående ikke-deponerede ændringer (brug 'hg status' for at se ændringer)"
 
 msgid "crosses branches (use 'hg merge' or 'hg update -C' to discard changes)"
 msgstr ""
+"krydser grene (brug 'hg merge' eller 'hg update -C' for at kassere "
+"ændringerne)"
 
 msgid "crosses branches (use 'hg merge' or 'hg update -C')"
-msgstr ""
+msgstr "krydser grene (brug 'hg merge' eller 'hg update -C')"
 
 msgid "crosses named branches (use 'hg update -C' to discard changes)"
 msgstr ""
+"krydser navngivne grene (brug 'hg update -C' for at kassere ændringerne)"
 
 #, python-format
 msgid "cannot create %s: destination already exists"
-msgstr ""
+msgstr "kan ikke oprette %s: destinationen findes allerede"
 
 #, python-format
 msgid "cannot create %s: unable to create destination directory"
-msgstr ""
+msgstr "kan ikke oprette %s: ikke i stand til at oprette biblioteket"
 
 #, python-format
 msgid "found patch at byte %d\n"
 msgstr ""
 
 msgid "patch generated by hg export\n"
-msgstr ""
+msgstr "lap genereret af hg export\n"
 
 #, python-format
 msgid "unable to find '%s' for patching\n"
-msgstr ""
+msgstr "kan ikke finde '%s' til lapning\n"
 
 #, python-format
 msgid "patching file %s\n"
@@ -8890,11 +8709,11 @@
 
 #, python-format
 msgid "binary patch is %d bytes, not %d"
-msgstr ""
+msgstr "binær lap er %d byte, ikke %d"
 
 #, python-format
 msgid "unable to strip away %d dirs from %s"
-msgstr ""
+msgstr "kan ikke strippe %d kataloger fra %s"
 
 msgid "undefined source and destination files"
 msgstr ""
@@ -8909,7 +8728,11 @@
 
 #, python-format
 msgid "patch command failed: %s"
-msgstr ""
+msgstr "patch kommando fejlede: %s"
+
+#, python-format
+msgid "Unsupported line endings type: %s"
+msgstr "Linieendelse %s understøttes ikke"
 
 #, python-format
 msgid "no valid hunks found; trying with %r instead\n"
@@ -8932,30 +8755,30 @@
 
 #, python-format
 msgid "saving bundle to %s\n"
-msgstr ""
+msgstr "gemmer bundt i %s\n"
 
 msgid "adding branch\n"
 msgstr "tilføjer gren\n"
 
 #, python-format
 msgid "cannot %s; remote repository does not support the %r capability"
-msgstr ""
+msgstr "kan ikke %s: fjerdepotet understøtter ikke %r egenskaben"
 
 #, python-format
 msgid "unknown compression type %r"
-msgstr ""
+msgstr "ukendt kompressionstype %r"
 
 #, python-format
 msgid "index %s unknown flags %#04x for format v0"
-msgstr ""
+msgstr "indeks %s ukendt flag %#04x for format v0"
 
 #, python-format
 msgid "index %s unknown flags %#04x for revlogng"
-msgstr ""
+msgstr "indeks %s ukendt flag %#04x for revlogng"
 
 #, python-format
 msgid "index %s unknown format %d"
-msgstr ""
+msgstr "indeks %s ukendt format %d"
 
 #, python-format
 msgid "index %s is corrupted"
@@ -8976,71 +8799,111 @@
 
 #, python-format
 msgid "%s not found in the transaction"
-msgstr ""
+msgstr "%s ikke fundet i transaktionen"
 
 msgid "unknown base"
 msgstr ""
 
 msgid "consistency error adding group"
-msgstr ""
+msgstr "konsistensfejl ved tilføjelse af gruppe"
 
 #, python-format
 msgid "%s looks like a binary file."
-msgstr ""
+msgstr "%s ser ud som en binær fil."
 
 msgid "can only specify two labels."
 msgstr ""
 
 msgid "warning: conflicts during merge.\n"
-msgstr ""
+msgstr "advarsel: konflikter ved sammenføjning.\n"
 
 #, python-format
 msgid "couldn't parse location %s"
 msgstr ""
 
 msgid "could not create remote repo"
-msgstr ""
+msgstr "kunne ikke oprette fjerndepot"
 
 msgid "remote: "
-msgstr "fjern: "
+msgstr "fjernsystem: "
 
 msgid "no suitable response from remote hg"
-msgstr ""
+msgstr "intet brugbart svar fra fjernsystemets hg"
 
 #, python-format
 msgid "push refused: %s"
-msgstr ""
+msgstr "skub afvist: %s"
 
 msgid "unsynced changes"
 msgstr ""
 
 msgid "cannot lock static-http repository"
-msgstr ""
+msgstr "kan ikke låse static-http depot"
 
 msgid "cannot create new static-http repository"
-msgstr ""
+msgstr "kan ikke oprette nyt static-http depot"
 
 #, python-format
 msgid "invalid entry in fncache, line %s"
 msgstr ""
 
 msgid "scanning\n"
-msgstr ""
+msgstr "skanner\n"
 
 #, python-format
 msgid "%d files, %d bytes to transfer\n"
-msgstr "%d filer, skal overføre %d bytes\n"
+msgstr "%d filer, skal overføre %d byte\n"
 
 #, python-format
 msgid "sending %s (%d bytes)\n"
-msgstr ""
+msgstr "sender %s (%d byte)\n"
+
+#, python-format
+msgid ""
+" subrepository sources for %s differ\n"
+"use (l)ocal source (%s) or (r)emote source (%s)?"
+msgstr ""
+
+msgid "&Remote"
+msgstr ""
+
+msgid "r"
+msgstr ""
+
+#, python-format
+msgid ""
+" local changed subrepository %s which remote removed\n"
+"use (c)hanged version or (d)elete?"
+msgstr ""
+
+#, python-format
+msgid ""
+" remote changed subrepository %s which local removed\n"
+"use (c)hanged version or (d)elete?"
+msgstr ""
+
+#, python-format
+msgid "removing subrepo %s\n"
+msgstr "fjerner underdepot %s\n"
+
+#, python-format
+msgid "pulling subrepo %s\n"
+msgstr "hiver fra underdepot %s\n"
+
+#, python-format
+msgid "pushing subrepo %s\n"
+msgstr "skubber til underdepot %s\n"
 
 msgid "unmatched quotes"
 msgstr ""
 
 #, python-format
-msgid "Error expanding '%s%%%s'"
-msgstr ""
+msgid "error expanding '%s%%%s'"
+msgstr "fejl ved ekspansion af '%s%%%s'"
+
+#, python-format
+msgid "unknown filter '%s'"
+msgstr "ukendt filter '%s'"
 
 #, python-format
 msgid "style not found: %s"
@@ -9048,7 +8911,7 @@
 
 #, python-format
 msgid "template file %s: %s"
-msgstr ""
+msgstr "skabelon-fil %s: %s"
 
 msgid "cannot use transaction when it is already committed/aborted"
 msgstr ""
@@ -9083,7 +8946,7 @@
 msgstr "%s.%s er ikke en sandhedsværdi ('%s')"
 
 msgid "enter a commit username:"
-msgstr "angiv et arkiveringsbrugernavn:"
+msgstr "angiv et deponeringsbrugernavn:"
 
 #, python-format
 msgid "No username found, using '%s' instead\n"
@@ -9097,10 +8960,10 @@
 msgstr "brugernavn %s indeholder et linieskift\n"
 
 msgid "unrecognized response\n"
-msgstr ""
+msgstr "svar ikke genkendt\n"
 
 msgid "response expected"
-msgstr ""
+msgstr "svar forventet"
 
 msgid "password: "
 msgstr "kodeord: "
@@ -9116,7 +8979,7 @@
 
 #, python-format
 msgid "realm: %s\n"
-msgstr ""
+msgstr "realm: %s\n"
 
 #, python-format
 msgid "user: %s\n"
@@ -9170,7 +9033,7 @@
 
 #, python-format
 msgid "invalid day spec: %s"
-msgstr ""
+msgstr "ugyldig datospecifikation: %s"
 
 #, python-format
 msgid "%.0f GB"
@@ -9213,22 +9076,22 @@
 msgstr "%.0f byte"
 
 msgid "cannot verify bundle or remote repos"
-msgstr ""
+msgstr "kan ikke verificere bundt eller fjerndepoter"
 
 msgid "interrupted"
 msgstr "afbrudt"
 
 #, python-format
 msgid "empty or missing %s"
-msgstr "tom eller mangler %s"
+msgstr "tom eller manglende %s"
 
 #, python-format
 msgid "data length off by %d bytes"
-msgstr ""
+msgstr "datalænge er %d byte forkert"
 
 #, python-format
 msgid "index contains %d extra bytes"
-msgstr "indekset indeholder %d ekstra bytes"
+msgstr "indekset indeholder %d ekstra byte"
 
 #, python-format
 msgid "warning: `%s' uses revlog format 1"
@@ -9240,11 +9103,11 @@
 
 #, python-format
 msgid "rev %d points to nonexistent changeset %d"
-msgstr ""
+msgstr "rev %d peger på ikke eksisterende ændring %d"
 
 #, python-format
 msgid "rev %d points to unexpected changeset %d"
-msgstr ""
+msgstr "rev %d peger på uventet ændring %d"
 
 #, python-format
 msgid " (expected %s)"
@@ -9252,15 +9115,15 @@
 
 #, python-format
 msgid "unknown parent 1 %s of %s"
-msgstr "ukendt forældre 1 %s til %s"
+msgstr "ukendt forælder 1 %s til %s"
 
 #, python-format
 msgid "unknown parent 2 %s of %s"
-msgstr "ukendt forældre 2 %s til %s"
+msgstr "ukendt forælder 2 %s til %s"
 
 #, python-format
 msgid "checking parents of %s"
-msgstr "tjekkre forældrene til %s"
+msgstr "kontrollerer forældre til %s"
 
 #, python-format
 msgid "duplicate revision %d (%d)"
@@ -9268,40 +9131,44 @@
 
 #, python-format
 msgid "repository uses revlog format %d\n"
-msgstr "arkivet bruger revlog format %d\n"
+msgstr "depotet bruger revlog format %d\n"
 
 msgid "checking changesets\n"
-msgstr "tjekker ændringer\n"
+msgstr "kontrollerer ændringer\n"
 
 #, python-format
 msgid "unpacking changeset %s"
 msgstr "udpakker ændring %s"
 
 msgid "checking manifests\n"
-msgstr ""
+msgstr "kontrollerer manifester\n"
+
+#, python-format
+msgid "%s not in changesets"
+msgstr "%s ikke i ændringer"
 
 msgid "file without name in manifest"
-msgstr ""
+msgstr "fil uden navn i manifest"
 
 #, python-format
 msgid "reading manifest delta %s"
-msgstr ""
+msgstr "læser manifestforskel %s"
 
 msgid "crosschecking files in changesets and manifests\n"
-msgstr ""
+msgstr "krydstjekker filer i ændringer og manifester\n"
 
 #, python-format
 msgid "changeset refers to unknown manifest %s"
-msgstr ""
+msgstr "ændring refererer til et ukendt manifest %s"
 
 msgid "in changeset but not in manifest"
-msgstr ""
+msgstr "i ændring men ikke i manifest"
 
 msgid "in manifest but not in changeset"
-msgstr ""
+msgstr "i manifest men ikke i ændring"
 
 msgid "checking files\n"
-msgstr "tjekker filer\n"
+msgstr "kontrollerer filer\n"
 
 #, python-format
 msgid "cannot decode filename '%s'"
@@ -9309,7 +9176,7 @@
 
 #, python-format
 msgid "broken revlog! (%s)"
-msgstr ""
+msgstr "beskadiget revlog! (%s)"
 
 msgid "missing revlog!"
 msgstr "manglende revlog!"
@@ -9336,7 +9203,7 @@
 
 #, python-format
 msgid "checking rename of %s"
-msgstr "tjekker omdøbning af %s"
+msgstr "kontrollerer omdøbning af %s"
 
 #, python-format
 msgid "%s in manifests not found"
@@ -9352,7 +9219,7 @@
 
 #, python-format
 msgid "%d warnings encountered!\n"
-msgstr "mødte %d advarsler!\n"
+msgstr "fandt %d advarsler!\n"
 
 #, python-format
 msgid "%d integrity errors encountered!\n"
--- a/i18n/de.po	Wed Jul 08 17:01:18 2009 -0700
+++ b/i18n/de.po	Wed Jul 08 17:03:16 2009 -0700
@@ -21,8 +21,8 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: Mercurial\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-04-10 10:49+0200\n"
+"Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n"
+"POT-Creation-Date: 2009-06-08 07:35+0200\n"
 "PO-Revision-Date: 2009-04-22 08:04+0200\n"
 "Last-Translator: Tobias Bell <tobias.bell@gmail.com>\n"
 "Language-Team: German (Tobias Bell, Fabian Kreutz, Lutz Horn)\n"
@@ -52,10 +52,6 @@
 "    Aliase: %s\n"
 "\n"
 
-# Nicht übersetzen
-msgid "return tuple of (match function, list enabled)."
-msgstr ""
-
 #, python-format
 msgid "acl: %s not enabled\n"
 msgstr "acl: %s nicht aktiviert\n"
@@ -91,43 +87,6 @@
 msgstr "acl: Gestatte Version %s\n"
 
 msgid ""
-"allow user-defined command aliases\n"
-"\n"
-"To use, create entries in your hgrc of the form\n"
-"\n"
-"[alias]\n"
-"mycmd = cmd --args\n"
-msgstr ""
-"Ermöglicht benutzerdefinierte Befehls-Aliase\n"
-"\n"
-"Um sie zu nutzen, erzeuge Einträge folgender Form in deiner hgrc\n"
-"\n"
-"[alias]\n"
-"mycmd = cmd --args\n"
-
-# Nicht übersetzen
-msgid ""
-"defer command lookup until needed, so that extensions loaded\n"
-"    after alias can be aliased"
-msgstr ""
-
-#, python-format
-msgid "*** [alias] %s: command %s is unknown"
-msgstr "*** [alias] %s: Befehl %s ist unbekannt"
-
-#, python-format
-msgid "*** [alias] %s: command %s is ambiguous"
-msgstr "*** [alias] %s: Befehl %s ist zweideutig"
-
-#, python-format
-msgid "*** [alias] %s: circular dependency on %s"
-msgstr "*** [alias] %s: zirkuläre Abhängigkeit auf %s"
-
-#, python-format
-msgid "*** [alias] %s: no definition\n"
-msgstr "*** [alias] %s: nicht definiert\n"
-
-msgid ""
 "mercurial bookmarks\n"
 "\n"
 "Mercurial bookmarks are local moveable pointers to changesets. Every\n"
@@ -148,50 +107,27 @@
 "on, and just updates it. This is similar to git's approach of\n"
 "branching.\n"
 msgstr ""
-
-# Nicht übersetzen
-msgid ""
-"Parse .hg/bookmarks file and return a dictionary\n"
-"\n"
-"    Bookmarks are stored as {HASH}\\s{NAME}\\n (localtags format) values\n"
-"    in the .hg/bookmarks file. They are read by the parse() method and\n"
-"    returned as a dictionary with name => hash values.\n"
-"\n"
-"    The parsed dictionary is cached until a write() operation is done.\n"
-"    "
-msgstr ""
-
-# Nicht übersetzen
-msgid ""
-"Write bookmarks\n"
-"\n"
-"    Write the given bookmark => hash dictionary to the .hg/bookmarks file\n"
-"    in a format equal to those of localtags.\n"
-"\n"
-"    We also store a backup of the previous state in undo.bookmarks that\n"
-"    can be copied back on rollback.\n"
-"    "
-msgstr ""
-
-# Nicht übersetzen
-msgid ""
-"Get the current bookmark\n"
-"\n"
-"    If we use gittishsh branches we have a current bookmark that\n"
-"    we are on. This function returns the name of the bookmark. It\n"
-"    is stored in .hg/bookmarks.current\n"
-"    "
-msgstr ""
-
-# Nicht übersetzen
-msgid ""
-"Set the name of the bookmark that we are currently on\n"
-"\n"
-"    Set the name of the bookmark that we are on (hg update <bookmark>).\n"
-"    The name is recoreded in .hg/bookmarks.current\n"
-"    "
-msgstr ""
-
+"Mercurial-Lesezeichen\n"
+"\n"
+"Mercurial-Lesezeichen sind lokale, bewegliche Zeiger auf Änderungssätze.\n"
+"Jedes Lesezeichen bezeichnet einen Änderungssatz identifiziert durch seine\n"
+"Prüfsumme. Wenn ein Änderungssatz, der auf einem anderen Änderungssatz mit\n"
+"einem Lesezeichen basiert, übernommen wird, so wird das Lesezeichen auf den\n"
+"neuen Satz verschoben.\n"
+"\n"
+"Ein Lesezeichenname kann für jede Form von Revisionssuche (z.B. hg merge,\n"
+"hg update) verwendet werden.\n"
+"\n"
+"Durch diese Erweiterung ist eine eher git-ähnliche Arbeitsform möglich,\n"
+"indem die folgende Konfigurationsoption in die .hgrc eingefügt wird:\n"
+"\n"
+"[bookmarks]\n"
+"track.current = True\n"
+"\n"
+"Dadurch wird das Lesezeichen bei Aktualisierungen automatisch verschoben.\n"
+"Dies entspricht gits Form von Verzweigungen (branching).\n"
+
+#, fuzzy
 msgid ""
 "mercurial bookmarks\n"
 "\n"
@@ -200,10 +136,10 @@
 "    deleted. It is possible to use bookmark names in 'hg merge' and\n"
 "    'hg update' to update to a given bookmark.\n"
 "\n"
-"    You can use 'hg bookmark NAME' to set a bookmark on the current\n"
-"    tip with the given name. If you specify a revision using -r REV\n"
-"    (where REV may be an existing bookmark), the bookmark is set to\n"
-"    that revision.\n"
+"    You can use 'hg bookmark NAME' to set a bookmark on the working\n"
+"    directory's parent revision with the given name. If you specify\n"
+"    a revision using -r REV (where REV may be an existing bookmark),\n"
+"    the bookmark is assigned to that revision.\n"
 "    "
 msgstr ""
 "Mercurial Lesezeichen\n"
@@ -241,32 +177,6 @@
 msgstr ""
 "Ein Lesezeichen darf nicht denselben Namen wie ein existierender Zweig haben"
 
-# Nicht übersetzen
-msgid ""
-"Strip bookmarks if revisions are stripped using\n"
-"    the mercurial.strip method. This usually happens during\n"
-"    qpush and qpop"
-msgstr ""
-
-# Nicht übersetzen
-msgid ""
-"Add a revision to the repository and\n"
-"            move the bookmark"
-msgstr ""
-
-# Nicht übersetzen
-msgid "Merge bookmarks with normal tags"
-msgstr ""
-
-# Nicht übersetzen
-msgid ""
-"Set the current bookmark\n"
-"\n"
-"    If the user updates to a bookmark we update the .hg/bookmarks.current\n"
-"    file.\n"
-"    "
-msgstr ""
-
 msgid "force"
 msgstr "erzwinge"
 
@@ -396,16 +306,10 @@
 "    Changeset commit comment. Bug 1234.\n"
 msgstr ""
 
-msgid "support for bugzilla version 2.16."
-msgstr "Unterstützung für Bugzilla-Version 2.16"
-
 #, python-format
 msgid "connecting to %s:%s as %s, password %s\n"
 msgstr "Verbinde mit %s:%s als %s, Passwort %s\n"
 
-msgid "run a query."
-msgstr ""
-
 #, python-format
 msgid "query: %s %s\n"
 msgstr ""
@@ -414,25 +318,13 @@
 msgid "failed query: %s %s\n"
 msgstr ""
 
-msgid "get identity of longdesc field"
-msgstr ""
-
 msgid "unknown database schema"
 msgstr ""
 
-msgid "filter not-existing bug ids from list."
-msgstr ""
-
-msgid "filter bug ids from list that already refer to this changeset."
-msgstr ""
-
 #, python-format
 msgid "bug %d already knows about changeset %s\n"
 msgstr ""
 
-msgid "tell bugzilla to send mail."
-msgstr ""
-
 msgid "telling bugzilla to send mail:\n"
 msgstr ""
 
@@ -451,22 +343,10 @@
 msgid "done\n"
 msgstr "erledigt\n"
 
-msgid "look up numeric bugzilla user id."
-msgstr ""
-
 #, python-format
 msgid "looking up user %s\n"
 msgstr ""
 
-msgid "map name of committer to bugzilla user name."
-msgstr ""
-
-msgid ""
-"see if committer is a registered bugzilla user. Return\n"
-"        bugzilla username and userid if so. If not, return default\n"
-"        bugzilla username and userid."
-msgstr ""
-
 #, python-format
 msgid "cannot find bugzilla user id for %s"
 msgstr ""
@@ -475,52 +355,16 @@
 msgid "cannot find bugzilla user id for %s or %s"
 msgstr ""
 
-msgid ""
-"add comment to bug. try adding comment as committer of\n"
-"        changeset, otherwise as default bugzilla user."
-msgstr ""
-
-msgid "support for bugzilla 2.18 series."
-msgstr ""
-
-msgid "support for bugzilla 3.0 series."
-msgstr ""
-
-msgid ""
-"return object that knows how to talk to bugzilla version in\n"
-"        use."
-msgstr ""
-
 #, python-format
 msgid "bugzilla version %s not supported"
 msgstr ""
 
 msgid ""
-"find valid bug ids that are referred to in changeset\n"
-"        comments and that do not already have references to this\n"
-"        changeset."
-msgstr ""
-
-msgid "update bugzilla bug with reference to changeset."
-msgstr ""
-
-msgid ""
-"strip leading prefix of repo root and turn into\n"
-"            url-safe path."
-msgstr ""
-
-msgid ""
 "changeset {node|short} in repo {root} refers to bug {bug}.\n"
 "details:\n"
 "\t{desc|tabindent}"
 msgstr ""
 
-msgid ""
-"add comment to bugzilla for each changeset that refers to a\n"
-"    bugzilla bug id. only add a comment once per bug, so same change\n"
-"    seen multiple times does not fill bug with duplicate data."
-msgstr ""
-
 #, python-format
 msgid "python mysql support not available: %s"
 msgstr ""
@@ -533,13 +377,14 @@
 msgid "database error: %s"
 msgstr ""
 
+#, fuzzy
 msgid ""
 "show the children of the given or working directory revision\n"
 "\n"
 "    Print the children of the working directory's revisions. If a\n"
-"    revision is given via --rev, the children of that revision will be\n"
-"    printed. If a file argument is given, revision in which the file\n"
-"    was last changed (after the working directory revision or the\n"
+"    revision is given via -r/--rev, the children of that revision will\n"
+"    be printed. If a file argument is given, revision in which the\n"
+"    file was last changed (after the working directory revision or the\n"
 "    argument to --rev if given) is printed.\n"
 "    "
 msgstr ""
@@ -563,15 +408,12 @@
 msgid "command to show certain statistics about revision history"
 msgstr ""
 
-msgid "Calculate stats"
-msgstr ""
-
 #, python-format
 msgid "Revision %d is a merge, ignoring...\n"
 msgstr "Revision %d ist eine Zusammenführung, wird ignoriert...\n"
 
 #, python-format
-msgid "\rgenerating stats: %d%%"
+msgid "generating stats: %d%%"
 msgstr ""
 
 msgid ""
@@ -599,7 +441,11 @@
 "\n"
 "    The map file format used to specify aliases is fairly simple:\n"
 "\n"
-"    <alias email> <actual email>"
+"    <alias email> <actual email>\n"
+"\n"
+"    By default .hgchurn in the working directory root will be used, if\n"
+"    it exists. Use the --aliases option to override this.\n"
+"    "
 msgstr ""
 
 #, python-format
@@ -651,7 +497,7 @@
 "[extensions]\n"
 "color =\n"
 "\n"
-"Default effects my be overriden from the .hgrc file:\n"
+"Default effects may be overridden from the .hgrc file:\n"
 "\n"
 "[color]\n"
 "status.modified = blue bold underline red_background\n"
@@ -680,30 +526,6 @@
 "diff.trailingwhitespace = bold red_background\n"
 msgstr ""
 
-msgid "Wrap text in commands to turn on each effect."
-msgstr ""
-
-msgid "run the status command with colored output"
-msgstr ""
-
-msgid "run the qseries command with colored output"
-msgstr ""
-
-msgid "wrap ui.write for colored diff output"
-msgstr ""
-
-msgid "wrap cmdutil.changeset_printer.showpatch with colored output"
-msgstr ""
-
-msgid "run the diff command with colored output"
-msgstr ""
-
-msgid "Initialize the extension."
-msgstr ""
-
-msgid "patch in command to command table and load effect map"
-msgstr ""
-
 msgid "when to colorize (always, auto, or never)"
 msgstr "Wann soll eingefärbt werden (always, auto oder never)"
 
@@ -739,6 +561,18 @@
 "    basename of the source with '-hg' appended. If the destination\n"
 "    repository doesn't exist, it will be created.\n"
 "\n"
+"    By default, all sources except Mercurial will use\n"
+"    --branchsort. Mercurial uses --sourcesort to preserve original\n"
+"    revision numbers order. Sort modes have the following effects:\n"
+"      --branchsort: convert from parent to child revision when\n"
+"        possible, which means branches are usually converted one after\n"
+"        the other. It generates more compact repositories.\n"
+"      --datesort: sort revisions by date. Converted repositories have\n"
+"        good-looking changelogs but are often an order of magnitude\n"
+"        larger than the same ones generated by --branchsort.\n"
+"      --sourcesort: try to preserve source revisions order, only\n"
+"        supported by Mercurial sources.\n"
+"\n"
 "    If <REVMAP> isn't given, it will be put in a default location\n"
 "    (<dest>/.hg/shamap by default). The <REVMAP> is a simple text file\n"
 "    that maps each source commit ID to the destination ID for that\n"
@@ -767,7 +601,7 @@
 "\n"
 "    The 'include' directive causes a file, or all files under a\n"
 "    directory, to be included in the destination repository, and the\n"
-"    exclusion of all other files and directories not explicitely included.\n"
+"    exclusion of all other files and directories not explicitly included.\n"
 "    The 'exclude' directive causes files or directories to be omitted.\n"
 "    The 'rename' directive renames a file or directory. To rename from\n"
 "    a subdirectory into the root of the repository, use '.' as the\n"
@@ -784,6 +618,17 @@
 "    (in either the source or destination revision control system) that\n"
 "    should be used as the new parents for that node.\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"
+"    conjunction with a splicemap, it allows for a powerful combination\n"
+"    to help fix even the most badly mismanaged repositories and turn them\n"
+"    into nicely structured Mercurial repositories. The branchmap contains\n"
+"    lines of the form \"original_branch_name new_branch_name\".\n"
+"    \"original_branch_name\" is the name of the branch in the source\n"
+"    repository, and \"new_branch_name\" is the name of the branch is the\n"
+"    destination repository. This can be used to (for instance) move code\n"
+"    in one repository from \"default\" to a named branch.\n"
+"\n"
 "    Mercurial Source\n"
 "    -----------------\n"
 "\n"
@@ -807,7 +652,7 @@
 "    in the sandbox to find the CVS repository, and then uses CVS rlog\n"
 "    commands to find files to convert. This means that unless a\n"
 "    filemap is given, all files under the starting directory will be\n"
-"    converted, and that any directory reorganisation in the CVS\n"
+"    converted, and that any directory reorganization in the CVS\n"
 "    sandbox is ignored.\n"
 "\n"
 "    Because CVS does not have changesets, it is necessary to collect\n"
@@ -815,13 +660,16 @@
 "    source uses its internal changeset merging code by default but can\n"
 "    be configured to call the external 'cvsps' program by setting:\n"
 "        --config convert.cvsps='cvsps -A -u --cvs-direct -q'\n"
-"    This is a legacy option and may be removed in future.\n"
+"    This option is deprecated and will be removed in Mercurial 1.4.\n"
 "\n"
 "    The options shown are the defaults.\n"
 "\n"
 "    Internal cvsps is selected by setting\n"
 "        --config convert.cvsps=builtin\n"
 "    and has a few more configurable options:\n"
+"        --config convert.cvsps.cache=True     (boolean)\n"
+"            Set to False to disable remote log caching, for testing and\n"
+"            debugging purposes.\n"
 "        --config convert.cvsps.fuzz=60        (integer)\n"
 "            Specify the maximum time (in seconds) that is allowed\n"
 "            between commits with identical user and log message in a\n"
@@ -855,9 +703,9 @@
 "    its subdirectories are listed as possible branches. If\n"
 "    \"svn://repo/path/tags\" exists, it is looked for tags referencing\n"
 "    converted branches. Default \"trunk\", \"branches\" and \"tags\" values\n"
-"    can be overriden with following options. Set them to paths\n"
-"    relative to the source URL, or leave them blank to disable\n"
-"    autodetection.\n"
+"    can be overridden with following options. Set them to paths\n"
+"    relative to the source URL, or leave them blank to disable auto\n"
+"    detection.\n"
 "\n"
 "    --config convert.svn.branches=branches    (directory name)\n"
 "        specify the directory containing branches\n"
@@ -934,9 +782,18 @@
 msgid "splice synthesized history into place"
 msgstr ""
 
+msgid "change branch names while converting"
+msgstr ""
+
+msgid "try to sort changesets by branches"
+msgstr ""
+
 msgid "try to sort changesets by date"
 msgstr ""
 
+msgid "preserve source changesets order"
+msgstr ""
+
 msgid "hg convert [OPTION]... SOURCE [DEST [REVMAP]]"
 msgstr ""
 
@@ -973,6 +830,14 @@
 msgid "hg debugcvsps [OPTION]... [PATH]..."
 msgstr ""
 
+msgid ""
+"warning: lightweight checkouts may cause conversion failures, try with a "
+"regular branch instead.\n"
+msgstr ""
+
+msgid "bzr source type could not be determined\n"
+msgstr ""
+
 #, python-format
 msgid "%s is not a valid revision in current branch"
 msgstr ""
@@ -982,6 +847,10 @@
 msgstr ""
 
 #, python-format
+msgid "%s.%s symlink has no target"
+msgstr ""
+
+#, python-format
 msgid "cannot find required \"%s\" tool"
 msgstr ""
 
@@ -998,6 +867,10 @@
 msgstr ""
 
 #, python-format
+msgid "syntax error in %s(%d): key/value pair expected"
+msgstr ""
+
+#, python-format
 msgid "could not open map file %r: %s"
 msgstr ""
 
@@ -1014,6 +887,10 @@
 msgstr ""
 
 #, python-format
+msgid "unknown sort mode: %s"
+msgstr "Unbekannter Sortiermodus: %s"
+
+#, python-format
 msgid "cycle detected between %s and %s"
 msgstr ""
 
@@ -1057,6 +934,17 @@
 msgid "assuming destination %s\n"
 msgstr ""
 
+msgid "more than one sort mode specified"
+msgstr "Mehr als ein Sortiermodus angegeben"
+
+msgid "--sourcesort is not supported by this data source"
+msgstr ""
+
+msgid ""
+"warning: support for external cvsps is deprecated and will be removed in "
+"Mercurial 1.4\n"
+msgstr ""
+
 #, python-format
 msgid "revision %s is not a patchset number or date"
 msgstr ""
@@ -1140,6 +1028,12 @@
 msgstr ""
 
 #, python-format
+msgid ""
+"warning: CVS commit message references non-existent branch %r:\n"
+"%s\n"
+msgstr ""
+
+#, python-format
 msgid "%d changeset entries\n"
 msgstr ""
 
@@ -1196,8 +1090,8 @@
 msgstr ""
 
 #, python-format
-msgid "analysing revision %s...\n"
-msgstr ""
+msgid "analyzing revision %s...\n"
+msgstr "Analysiere Revision %s...\n"
 
 #, python-format
 msgid "could not parse cat-log of %s"
@@ -1221,6 +1115,9 @@
 msgid "pulling from %s into %s\n"
 msgstr ""
 
+msgid "filtering out empty revision\n"
+msgstr "Leere Revision wird ausgefiltert\n"
+
 msgid "updating tags\n"
 msgstr ""
 
@@ -1290,7 +1187,7 @@
 msgid "found branch %s at %d\n"
 msgstr ""
 
-msgid "svn: start revision is not supported with with more than one branch"
+msgid "svn: start revision is not supported with more than one branch"
 msgstr ""
 
 #, python-format
@@ -1427,7 +1324,7 @@
 "\n"
 "  # add new command called vimdiff, runs gvimdiff with DirDiff plugin\n"
 "  # (see http://www.vim.org/scripts/script.php?script_id=102)\n"
-"  # Non english user, be sure to put \"let g:DirDiffDynamicDiffText = 1\" "
+"  # Non English user, be sure to put \"let g:DirDiffDynamicDiffText = 1\" "
 "in\n"
 "  # your .vimrc\n"
 "  vimdiff = gvim -f '+next' '+execute \"DirDiff\" argv(0) argv(1)'\n"
@@ -1438,33 +1335,14 @@
 "fast (at least faster than having to compare the entire tree).\n"
 msgstr ""
 
-msgid "snapshot files as of some revision"
-msgstr ""
-
 #, python-format
 msgid "making snapshot of %d files from rev %s\n"
 msgstr ""
 
-msgid ""
-"snapshot files from working directory.\n"
-"    if not using snapshot, -I/-X does not work and recursive diff\n"
-"    in tools like kdiff3 and meld displays too many files."
-msgstr ""
-
 #, python-format
 msgid "making snapshot of %d files from working directory\n"
 msgstr ""
 
-msgid ""
-"Do the actuall diff:\n"
-"\n"
-"    - copy to a temp structure if diffing 2 internal revisions\n"
-"    - copy to a temp structure if diffing working revision with\n"
-"      another one and more than 1 file is changed\n"
-"    - just invoke the diff for a single file in the working dir\n"
-"    "
-msgstr ""
-
 msgid "cannot specify --rev and --change at the same time"
 msgstr "--rev und --change können nicht gleichzeitig angegeben werden"
 
@@ -1486,10 +1364,10 @@
 "    an external program. The default program used is diff, with\n"
 "    default options \"-Npru\".\n"
 "\n"
-"    To select a different program, use the -p option. The program will\n"
-"    be passed the names of two directories to compare. To pass\n"
-"    additional options to the program, use the -o option. These will\n"
-"    be passed before the names of the directories to compare.\n"
+"    To select a different program, use the -p/--program option. The\n"
+"    program will be passed the names of two directories to compare. To\n"
+"    pass additional options to the program, use -o/--option. These\n"
+"    will be passed before the names of the directories to compare.\n"
 "\n"
 "    When two revision arguments are given, then changes are shown\n"
 "    between those revisions. If only one revision is specified then\n"
@@ -1510,9 +1388,6 @@
 msgid "hg extdiff [OPT]... [FILE]..."
 msgstr ""
 
-msgid "use closure to save diff command to use"
-msgstr ""
-
 #, python-format
 msgid "hg %s [OPTION]... [FILE]..."
 msgstr ""
@@ -1520,7 +1395,6 @@
 msgid "pulling, updating and merging in one command"
 msgstr "Hole, aktualisiere und führe zusammen in einem Befehl"
 
-
 msgid ""
 "pull changes from a remote repository, merge new changes if needed.\n"
 "\n"
@@ -1588,8 +1462,12 @@
 msgid "pulling from %s\n"
 msgstr "Hole von %s\n"
 
-msgid "fetch -r doesn't work for remote repositories yet"
-msgstr "fetch -r funktioniert noch nicht auf entfernten Archiven"
+msgid ""
+"Other repository doesn't support revision lookup, so a rev cannot be "
+"specified."
+msgstr ""
+"Das andere Projektarchiv unterstützt keine Revisionsabfragen, daher kann "
+"keine Revision angegeben werden."
 
 #, python-format
 msgid ""
@@ -1631,25 +1509,9 @@
 msgid "hg fetch [SOURCE]"
 msgstr "hg fetch [QUELLE]"
 
-msgid " returns of the good and bad signatures"
-msgstr ""
-
 msgid "error while verifying signature"
 msgstr ""
 
-msgid "create a new gpg instance"
-msgstr ""
-
-msgid ""
-"\n"
-"    walk over every sigs, yields a couple\n"
-"    ((node, version, sig), (filename, linenumber))\n"
-"    "
-msgstr ""
-
-msgid "get the keys who signed a data"
-msgstr ""
-
 #, python-format
 msgid "%s Bad signature from \"%s\"\n"
 msgstr ""
@@ -1676,9 +1538,6 @@
 msgid "No valid signature for %s\n"
 msgstr ""
 
-msgid "associate a string to a key (username, comment)"
-msgstr ""
-
 msgid ""
 "add a signature for the current or given revision\n"
 "\n"
@@ -1704,9 +1563,6 @@
 msgid "Added signature for changeset %s"
 msgstr ""
 
-msgid "map a manifest into some text"
-msgstr ""
-
 msgid "unknown signature version"
 msgstr ""
 
@@ -1738,57 +1594,10 @@
 "show revision graphs in terminal windows\n"
 "\n"
 "This extension adds a --graph option to the incoming, outgoing and log\n"
-"commands. When this options is given, an ascii representation of the\n"
+"commands. When this options is given, an ASCII representation of the\n"
 "revision graph is also shown.\n"
 msgstr ""
 
-msgid ""
-"cset DAG generator yielding (rev, node, [parents]) tuples\n"
-"\n"
-"    This generator function walks through the revision history from "
-"revision\n"
-"    start to revision stop (which must be less than or equal to start).\n"
-"    "
-msgstr ""
-
-msgid ""
-"file cset DAG generator yielding (rev, node, [parents]) tuples\n"
-"\n"
-"    This generator function walks through the revision history of a single\n"
-"    file from revision start to revision stop (which must be less than or\n"
-"    equal to start).\n"
-"    "
-msgstr ""
-
-msgid ""
-"grapher for asciigraph on a list of nodes and their parents\n"
-"\n"
-"    nodes must generate tuples (node, parents, char, lines) where\n"
-"     - parents must generate the parents of node, in sorted order,\n"
-"       and max length 2,\n"
-"     - char is the char to print as the node symbol, and\n"
-"     - lines are the lines to display next to the node.\n"
-"    "
-msgstr ""
-
-msgid ""
-"prints an ASCII graph of the DAG returned by the grapher\n"
-"\n"
-"    grapher is a generator that emits tuples with the following elements:\n"
-"\n"
-"      - Character to use as node's symbol.\n"
-"      - List of lines to display as the node's text.\n"
-"      - Column of the current node in the set of ongoing edges.\n"
-"      - Edges; a list of (col, next_col) indicating the edges between\n"
-"        the current node and its parents.\n"
-"      - Number of columns (ongoing edges) in the current revision.\n"
-"      - The difference between the number of columns (ongoing edges)\n"
-"        in the next revision and the number of columns (ongoing edges)\n"
-"        in the current revision. That is: -1 means one column removed;\n"
-"        0 means no columns added or removed; 1 means one column added.\n"
-"    "
-msgstr ""
-
 #, python-format
 msgid "--graph option is incompatible with --%s"
 msgstr ""
@@ -1804,17 +1613,6 @@
 "    "
 msgstr ""
 
-msgid ""
-"show the outgoing changesets alongside an ASCII revision graph\n"
-"\n"
-"    Print the outgoing changesets alongside a revision graph drawn with\n"
-"    ASCII characters.\n"
-"\n"
-"    Nodes printed as an @ character are parents of the working\n"
-"    directory.\n"
-"    "
-msgstr ""
-
 #, python-format
 msgid "comparing with %s\n"
 msgstr "Vergleiche mit %s\n"
@@ -1822,20 +1620,6 @@
 msgid "no changes found\n"
 msgstr "Keine Änderungen gefunden\n"
 
-msgid ""
-"show the incoming changesets alongside an ASCII revision graph\n"
-"\n"
-"    Print the incoming changesets alongside a revision graph drawn with\n"
-"    ASCII characters.\n"
-"\n"
-"    Nodes printed as an @ character are parents of the working\n"
-"    directory.\n"
-"    "
-msgstr ""
-
-msgid "wrap the command"
-msgstr ""
-
 msgid "show the revision DAG"
 msgstr ""
 
@@ -1867,8 +1651,7 @@
 "# Append a diffstat to the log message (optional)\n"
 "#diffstat = False\n"
 "# Template to use for log messages (optional)\n"
-"#template = {desc}\n"
-"{baseurl}/rev/{node}-- {diffstat}\n"
+"#template = {desc}\\n{baseurl}/rev/{node}-- {diffstat}\n"
 "# Style to use (optional)\n"
 "#style = foo\n"
 "# The URL of the CIA notification service (optional)\n"
@@ -1889,19 +1672,10 @@
 "baseurl = http://server/path/to/repo\n"
 msgstr ""
 
-msgid " A CIA message "
-msgstr ""
-
-msgid " CIA notification class "
-msgstr ""
-
 #, python-format
 msgid "hgcia: sending update to %s\n"
 msgstr ""
 
-msgid " send CIA notification "
-msgstr ""
-
 msgid "email.from must be defined when sending by email"
 msgstr ""
 
@@ -2037,7 +1811,7 @@
 msgid ""
 "syntax highlighting in hgweb, based on Pygments\n"
 "\n"
-"It depends on the pygments syntax highlighting library:\n"
+"It depends on the Pygments syntax highlighting library:\n"
 "http://pygments.org/\n"
 "\n"
 "To enable the extension add this to hgrc:\n"
@@ -2061,6 +1835,31 @@
 msgid "start an inotify server for this repository"
 msgstr ""
 
+msgid ""
+"debugging information for inotify extension\n"
+"\n"
+"    Prints the list of directories being watched by the inotify server.\n"
+"    "
+msgstr ""
+
+msgid "directories being watched:\n"
+msgstr "Überwachte Verzeichnisse:\n"
+
+msgid "run server in background"
+msgstr "Server im Hintergrund ausführen"
+
+msgid "used internally by daemon mode"
+msgstr "Wird intern im Server-Modus genutzt"
+
+msgid "minutes to sit idle before exiting"
+msgstr ""
+
+msgid "name of file to write process ID to"
+msgstr "Dateiname für Prozess-ID"
+
+msgid "hg inserve [OPT]..."
+msgstr ""
+
 msgid "(found dead inotify server socket; removing it)\n"
 msgstr ""
 
@@ -2082,25 +1881,14 @@
 msgid "failed to contact inotify server: %s\n"
 msgstr ""
 
-msgid "run server in background"
-msgstr "Server im Hintergrund ausführen"
-
-msgid "used internally by daemon mode"
-msgstr "Wird intern im Server-Modus genutzt"
-
-msgid "minutes to sit idle before exiting"
-msgstr ""
-
-msgid "name of file to write process ID to"
-msgstr "Dateiname für Prozess-ID"
-
-msgid "hg inserve [OPT]..."
-msgstr ""
-
 #, python-format
 msgid "(inotify: received response from incompatible server version %d)\n"
 msgstr ""
 
+#, python-format
+msgid "(inotify: received '%s' response when expecting '%s')\n"
+msgstr ""
+
 msgid "this system does not seem to support inotify"
 msgstr ""
 
@@ -2194,20 +1982,20 @@
 msgstr ""
 
 #, python-format
-msgid "%s processing %d deferred events as %d\n"
-msgstr ""
-
-#, python-format
 msgid "could not start server: %s"
 msgstr ""
 
 #, python-format
+msgid "answering query for %r\n"
+msgstr ""
+
+#, python-format
 msgid "received query from incompatible client version %d\n"
 msgstr ""
 
 #, python-format
-msgid "answering query for %r\n"
-msgstr ""
+msgid "unrecognized query type: %s\n"
+msgstr "Unbekannte Abfrageart: %s\n"
 
 msgid "finished setup\n"
 msgstr ""
@@ -2260,7 +2048,7 @@
 "kwdemo\" to control the results of your config changes.\n"
 "\n"
 "Before changing/disabling active keywords, run \"hg kwshrink\" to avoid\n"
-"the risk of inadvertedly storing expanded keywords in the change\n"
+"the risk of inadvertently storing expanded keywords in the change\n"
 "history.\n"
 "\n"
 "To force expansion after enabling it, or a configuration change, run\n"
@@ -2276,68 +2064,12 @@
 "\"Log = {desc}\" expands to the first line of the changeset description.\n"
 msgstr ""
 
-msgid "Returns hgdate in cvs-like UTC format."
-msgstr ""
-
-msgid ""
-"\n"
-"    Sets up keyword templates, corresponding keyword regex, and\n"
-"    provides keyword substitution functions.\n"
-"    "
-msgstr ""
-
-msgid "Replaces keywords in data with expanded template."
-msgstr ""
-
-msgid "Returns data with keywords expanded."
-msgstr ""
-
-msgid ""
-"Returns true if path matches [keyword] pattern\n"
-"        and is not a symbolic link.\n"
-"        Caveat: localrepository._link fails on Windows."
-msgstr ""
-
-msgid "Overwrites selected files expanding/shrinking keywords."
-msgstr ""
-
-#, python-format
-msgid "overwriting %s %s keywords\n"
-msgstr ""
-
-msgid "Unconditionally removes all keyword substitutions from text."
-msgstr ""
-
-msgid "Returns text with all keyword substitutions removed."
-msgstr ""
-
-msgid "Returns lines with keyword substitutions removed."
-msgstr ""
-
-msgid ""
-"If in restricted mode returns data read from wdir with\n"
-"        keyword substitutions removed."
-msgstr ""
-
-msgid ""
-"\n"
-"    Subclass of filelog to hook into its read, add, cmp methods.\n"
-"    Keywords are \"stored\" unexpanded, and processed on reading.\n"
-"    "
-msgstr ""
-
-msgid "Expands keywords when reading filelog."
-msgstr ""
-
-msgid "Removes keyword substitutions when adding to filelog."
-msgstr ""
-
-msgid "Removes keyword substitutions for comparison."
-msgstr ""
-
-msgid ""
-"Bails out if [keyword] configuration is not active.\n"
-"    Returns status of working directory."
+#, python-format
+msgid "overwriting %s expanding keywords\n"
+msgstr ""
+
+#, python-format
+msgid "overwriting %s shrinking keywords\n"
 msgstr ""
 
 msgid "[keyword] patterns cannot match"
@@ -2346,9 +2078,6 @@
 msgid "no [keyword] patterns configured"
 msgstr ""
 
-msgid "Selects files and passes them to kwtemplater.overwrite."
-msgstr ""
-
 msgid ""
 "print [keywordmaps] configuration and an expansion example\n"
 "\n"
@@ -2415,36 +2144,6 @@
 "    "
 msgstr ""
 
-msgid ""
-"Collects [keyword] config in kwtools.\n"
-"    Monkeypatches dispatch._parse if needed."
-msgstr ""
-
-msgid "Monkeypatch dispatch._parse to obtain running hg command."
-msgstr ""
-
-msgid ""
-"Sets up repo as kwrepo for keyword substitution.\n"
-"    Overrides file method to return kwfilelog instead of filelog\n"
-"    if file matches user configuration.\n"
-"    Wraps commit to overwrite configured files with updated\n"
-"    keyword substitutions.\n"
-"    Monkeypatches patch and webcommands."
-msgstr ""
-
-msgid ""
-"Monkeypatch/wrap patch.patchfile.__init__ to avoid\n"
-"        rejects or conflicts due to expanded keywords in working dir."
-msgstr ""
-
-msgid ""
-"Monkeypatch patch.diff to avoid expansion except when\n"
-"        comparing against working dir."
-msgstr ""
-
-msgid "Wraps webcommands.x turning off keyword expansion."
-msgstr ""
-
 msgid "show default keyword template maps"
 msgstr ""
 
@@ -2497,17 +2196,6 @@
 "refresh contents of top applied patch     qrefresh\n"
 msgstr ""
 
-msgid ""
-"Update all references to a field in the patch header.\n"
-"        If none found, add it email style."
-msgstr ""
-
-msgid ""
-"Remove existing message, keeping the rest of the comments fields.\n"
-"        If comments contains 'subject: ', message will prepend\n"
-"        the field and a blank line."
-msgstr ""
-
 #, python-format
 msgid "%s appears more than once in %s"
 msgstr ""
@@ -2586,11 +2274,6 @@
 msgid "patch %s is not applied\n"
 msgstr ""
 
-msgid ""
-"Apply patchfile  to the working directory.\n"
-"        patchfile: file name of patch"
-msgstr ""
-
 msgid "patch failed, unable to continue (try -v)\n"
 msgstr ""
 
@@ -2657,12 +2340,6 @@
 msgid "\"%s\" cannot be used as the name of a patch"
 msgstr ""
 
-msgid ""
-"options:\n"
-"           msg: a string or a no-argument function returning a string\n"
-"        "
-msgstr ""
-
 #, python-format
 msgid "patch \"%s\" already exists"
 msgstr ""
@@ -2671,9 +2348,6 @@
 msgid "error unlinking %s\n"
 msgstr ""
 
-msgid "returns (index, rev, patch)"
-msgstr ""
-
 #, python-format
 msgid "patch name \"%s\" is ambiguous:\n"
 msgstr ""
@@ -2682,8 +2356,8 @@
 msgid "patch %s not in series"
 msgstr ""
 
-msgid "(working directory not at tip)\n"
-msgstr ""
+msgid "(working directory not at a head)\n"
+msgstr "(Arbeitsverzeichnis ist keine Kopfversion)\n"
 
 msgid "no patches in series\n"
 msgstr ""
@@ -2802,14 +2476,6 @@
 msgid "repo commit failed\n"
 msgstr ""
 
-msgid ""
-"If all_patches is False, return the index of the next pushable patch\n"
-"        in the series, or the series length. If all_patches is True, return "
-"the\n"
-"        index of the first patch past the last applied one.\n"
-"        "
-msgstr ""
-
 #, python-format
 msgid "patch %s is already in the series file"
 msgstr ""
@@ -2862,14 +2528,14 @@
 "remove patches from queue\n"
 "\n"
 "    The patches must not be applied, unless they are arguments to the\n"
-"    --rev parameter. At least one patch or revision is required.\n"
+"    -r/--rev parameter. At least one patch or revision is required.\n"
 "\n"
 "    With --rev, mq will stop managing the named revisions (converting\n"
 "    them to regular mercurial changesets). The qfinish command should\n"
-"    be used as an alternative for qdel -r, as the latter option is\n"
+"    be used as an alternative for qdelete -r, as the latter option is\n"
 "    deprecated.\n"
 "\n"
-"    With --keep, the patch files are preserved in the patch\n"
+"    With -k/--keep, the patch files are preserved in the patch\n"
 "    directory."
 msgstr ""
 
@@ -2887,31 +2553,35 @@
 "    to the series.\n"
 "\n"
 "    The patch will have the same name as its source file unless you\n"
-"    give it a new one with --name.\n"
+"    give it a new one with -n/--name.\n"
 "\n"
 "    You can register an existing patch inside the patch directory with\n"
-"    the --existing flag.\n"
-"\n"
-"    With --force, an existing patch of the same name will be\n"
+"    the -e/--existing flag.\n"
+"\n"
+"    With -f/--force, an existing patch of the same name will be\n"
 "    overwritten.\n"
 "\n"
-"    An existing changeset may be placed under mq control with --rev\n"
+"    An existing changeset may be placed under mq control with -r/--rev\n"
 "    (e.g. qimport --rev tip -n patch will place tip under mq control).\n"
-"    With --git, patches imported with --rev will use the git diff\n"
+"    With -g/--git, patches imported with --rev will use the git diff\n"
 "    format. See the diffs help topic for information on why this is\n"
 "    important for preserving rename/copy information and permission\n"
 "    changes.\n"
+"\n"
+"    To import a patch from standard input, pass - as the patch file.\n"
+"    When importing from standard input, a patch name must be specified\n"
+"    using the --name flag.\n"
 "    "
 msgstr ""
 
 msgid ""
 "init a new queue repository\n"
 "\n"
-"    The queue repository is unversioned by default. If -c is\n"
-"    specified, qinit will create a separate nested repository for\n"
-"    patches (qinit -c may also be run later to convert an unversioned\n"
-"    patch repository into a versioned one). You can use qcommit to\n"
-"    commit changes to this queue repository."
+"    The queue repository is unversioned by default. If\n"
+"    -c/--create-repo is specified, qinit will create a separate nested\n"
+"    repository for patches (qinit -c may also be run later to convert\n"
+"    an unversioned patch repository into a versioned one). You can use\n"
+"    qcommit to commit changes to this queue repository."
 msgstr ""
 
 msgid ""
@@ -2972,19 +2642,21 @@
 "\n"
 "    qnew creates a new patch on top of the currently-applied patch (if\n"
 "    any). It will refuse to run if there are any outstanding changes\n"
-"    unless -f is specified, in which case the patch will be\n"
-"    initialized with them. You may also use -I, -X, and/or a list of\n"
-"    files after the patch name to add only changes to matching files\n"
-"    to the new patch, leaving the rest as uncommitted modifications.\n"
-"\n"
-"    -u and -d can be used to set the (given) user and date, respectively.\n"
-"    -U and -D set user to current user and date to current date.\n"
-"\n"
-"    -e, -m or -l set the patch header as well as the commit message.\n"
-"    If none is specified, the header is empty and the commit message\n"
-"    is '[mq]: PATCH'.\n"
-"\n"
-"    Use the --git option to keep the patch in the git extended diff\n"
+"    unless -f/--force is specified, in which case the patch will be\n"
+"    initialized with them. You may also use -I/--include,\n"
+"    -X/--exclude, and/or a list of files after the patch name to add\n"
+"    only changes to matching files to the new patch, leaving the rest\n"
+"    as uncommitted modifications.\n"
+"\n"
+"    -u/--user and -d/--date can be used to set the (given) user and\n"
+"    date, respectively. -U/--currentuser and -D/--currentdate set user\n"
+"    to current user and date to current date.\n"
+"\n"
+"    -e/--edit, -m/--message or -l/--logfile set the patch header as\n"
+"    well as the commit message. If none is specified, the header is\n"
+"    empty and the commit message is '[mq]: PATCH'.\n"
+"\n"
+"    Use the -g/--git option to keep the patch in the git extended diff\n"
 "    format. Read the diffs help topic for more information on why this\n"
 "    is important for preserving permission changes and copy/rename\n"
 "    information.\n"
@@ -2998,13 +2670,13 @@
 "    contain only the modifications that match those patterns; the\n"
 "    remaining modifications will remain in the working directory.\n"
 "\n"
-"    If --short is specified, files currently included in the patch\n"
+"    If -s/--short is specified, files currently included in the patch\n"
 "    will be refreshed just like matched files and remain in the patch.\n"
 "\n"
 "    hg add/remove/copy/rename work as usual, though you might want to\n"
-"    use git-style patches (--git or [diff] git=1) to track copies and\n"
-"    renames. See the diffs help topic for more information on the git\n"
-"    diff format.\n"
+"    use git-style patches (-g/--git or [diff] git=1) to track copies\n"
+"    and renames. See the diffs help topic for more information on the\n"
+"    git diff format.\n"
 "    "
 msgstr ""
 
@@ -3095,8 +2767,8 @@
 msgid ""
 "push the next patch onto the stack\n"
 "\n"
-"    When --force is applied, all local changes in patched files will\n"
-"    be lost.\n"
+"    When -f/--force is applied, all local changes in patched files\n"
+"    will be lost.\n"
 "    "
 msgstr ""
 
@@ -3232,10 +2904,10 @@
 "    patches) by moving them out of mq control into regular repository\n"
 "    history.\n"
 "\n"
-"    Accepts a revision range or the --applied option. If --applied is\n"
-"    specified, all applied mq revisions are removed from mq control.\n"
-"    Otherwise, the given revisions must be at the base of the stack of\n"
-"    applied patches.\n"
+"    Accepts a revision range or the -a/--applied option. If --applied\n"
+"    is specified, all applied mq revisions are removed from mq\n"
+"    control. Otherwise, the given revisions must be at the base of the\n"
+"    stack of applied patches.\n"
 "\n"
 "    This can be especially useful if your changes have been applied to\n"
 "    an upstream repository, or if you are about to push your changes\n"
@@ -3341,8 +3013,11 @@
 msgid "use git extended diff format"
 msgstr "Verwende git-erweitertes diff-Format"
 
-msgid "hg qimport [-e] [-n NAME] [-f] [-g] [-r REV]... FILE..."
-msgstr ""
+msgid "qpush after importing"
+msgstr ""
+
+msgid "hg qimport [-e] [-n NAME] [-f] [-g] [-P] [-r REV]... FILE..."
+msgstr "hg qimport [-e] [-n NAME] [-f] [-g] [-P] [-r REV]... DATEI..."
 
 msgid "create queue repository"
 msgstr ""
@@ -3558,27 +3233,6 @@
 " can push changes to, they can manage their own subscriptions."
 msgstr ""
 
-msgid "email notification class."
-msgstr ""
-
-msgid "strip leading slashes from local path, turn into web-safe path."
-msgstr ""
-
-msgid "try to clean up email addresses."
-msgstr ""
-
-msgid "return list of email addresses of subscribers to this repo."
-msgstr ""
-
-msgid "format one changeset."
-msgstr ""
-
-msgid "true if incoming changes from this source should be skipped."
-msgstr ""
-
-msgid "send message."
-msgstr ""
-
 #, python-format
 msgid "%s: %d new changesets"
 msgstr ""
@@ -3601,13 +3255,6 @@
 "\n"
 msgstr ""
 
-msgid ""
-"send email notifications to interested subscribers.\n"
-"\n"
-"    if used as changegroup hook, send one email for all changesets in\n"
-"    changegroup. else send one email per changeset."
-msgstr ""
-
 #, python-format
 msgid "notify: no subscribers to repository %s\n"
 msgstr ""
@@ -3659,7 +3306,7 @@
 "\n"
 "For example, if you can refer to a revision as \"foo\", then:\n"
 "\n"
-"- foo^N = Nth parent of foo:\n"
+"- foo^N = Nth parent of foo\n"
 "  foo^0 = foo\n"
 "  foo^1 = first parent of foo\n"
 "  foo^2 = second parent of foo\n"
@@ -3681,19 +3328,19 @@
 "first line of the changeset description as the subject text. The\n"
 "message contains two or three body parts:\n"
 "\n"
-"  The remainder of the changeset description.\n"
+"  The changeset description.\n"
 "\n"
 "  [Optional] The result of running diffstat on the patch.\n"
 "\n"
 "  The patch itself, as generated by \"hg export\".\n"
 "\n"
-"Each message refers to all of its predecessors using the In-Reply-To\n"
+"Each message refers to the first in the series using the In-Reply-To\n"
 "and References headers, so they will show up as a sequence in threaded\n"
 "mail and news readers, and in mail archives.\n"
 "\n"
-"For each changeset, you will be prompted with a diffstat summary and\n"
-"the changeset summary, so you can be sure you are sending the right\n"
-"changes.\n"
+"With the -d/--diffstat option, you will be prompted for each changeset\n"
+"with a diffstat summary and the changeset summary, so you can be sure\n"
+"you are sending the right changes.\n"
 "\n"
 "To enable this extension:\n"
 "\n"
@@ -3714,13 +3361,13 @@
 "\n"
 "To avoid sending patches prematurely, it is a good idea to first run\n"
 "the \"email\" command with the \"-n\" option (test only). You will be\n"
-"prompted for an email recipient address, a subject an an introductory\n"
+"prompted for an email recipient address, a subject and an introductory\n"
 "message describing the patches of your patchbomb. Then when all is\n"
-"done, patchbomb messages are displayed. If PAGER environment variable\n"
-"is set, your pager will be fired up once for each patchbomb message,\n"
-"so you can verify everything is alright.\n"
-"\n"
-"The \"-m\" (mbox) option is also very useful. Instead of previewing each\n"
+"done, patchbomb messages are displayed. If the PAGER environment\n"
+"variable is set, your pager will be fired up once for each patchbomb\n"
+"message, so you can verify everything is alright.\n"
+"\n"
+"The -m/--mbox option is also very useful. Instead of previewing each\n"
 "patchbomb message in a pager or sending the messages directly, it will\n"
 "create a UNIX mailbox file with the patch emails. This mailbox file\n"
 "can be previewed with any mail user agent which supports UNIX mbox\n"
@@ -3737,7 +3384,7 @@
 "That should be all. Now your patchbomb is on its way out.\n"
 "\n"
 "You can also either configure the method option in the email section\n"
-"to be a sendmail compatable mailer or fill out the [smtp] section so\n"
+"to be a sendmail compatible mailer or fill out the [smtp] section so\n"
 "that the patchbomb extension can automatically send patchbombs\n"
 "directly from the commandline. See the [email] and [smtp] sections in\n"
 "hgrc(5) for details."
@@ -3761,16 +3408,22 @@
 "\n"
 "    Each patch email has a Subject line of \"[PATCH M of N] ...\", using\n"
 "    the first line of the changeset description as the subject text.\n"
-"    The message contains two or three body parts. First, the rest of\n"
-"    the changeset description. Next, (optionally) if the diffstat\n"
-"    program is installed, the result of running diffstat on the patch.\n"
-"    Finally, the patch itself, as generated by \"hg export\".\n"
-"\n"
-"    With --outgoing, emails will be generated for patches not found in\n"
-"    the destination repository (or only those which are ancestors of\n"
-"    the specified revisions if any are provided)\n"
-"\n"
-"    With --bundle, changesets are selected as for --outgoing, but a\n"
+"    The message contains two or three parts. First, the changeset\n"
+"    description. Next, (optionally) if the diffstat program is\n"
+"    installed and -d/--diffstat is used, the result of running\n"
+"    diffstat on the patch. Finally, the patch itself, as generated by\n"
+"    \"hg export\".\n"
+"\n"
+"    By default the patch is included as text in the email body for\n"
+"    easy reviewing. Using the -a/--attach option will instead create\n"
+"    an attachment for the patch. With -i/--inline an inline attachment\n"
+"    will be created.\n"
+"\n"
+"    With -o/--outgoing, emails will be generated for patches not found\n"
+"    in the destination repository (or only those which are ancestors\n"
+"    of the specified revisions if any are provided)\n"
+"\n"
+"    With -b/--bundle, changesets are selected as for --outgoing, but a\n"
 "    single email containing a binary Mercurial bundle as an attachment\n"
 "    will be sent.\n"
 "\n"
@@ -3797,9 +3450,6 @@
 "    "
 msgstr ""
 
-msgid "Return the revisions present locally but not in dest"
-msgstr ""
-
 msgid "specify at least one changeset with -r or -o"
 msgstr ""
 
@@ -3869,7 +3519,7 @@
 msgid "subject of first message (intro or single patch)"
 msgstr ""
 
-msgid "\"message identifier to reply to\""
+msgid "message identifier to reply to"
 msgstr ""
 
 msgid "email addresses of recipients"
@@ -3890,10 +3540,11 @@
 msgid "a revision to send"
 msgstr ""
 
-msgid "run even when remote repository is unrelated (with -b)"
-msgstr ""
-
-msgid "a base changeset to specify instead of a destination (with -b)"
+msgid "run even when remote repository is unrelated (with -b/--bundle)"
+msgstr ""
+"Auch ausführen wenn das entfernte Archiv keinen Bezug hat (mit -b/--bundle)"
+
+msgid "a base changeset to specify instead of a destination (with -b/--bundle)"
 msgstr ""
 
 msgid "send an introduction email for a single patch"
@@ -3911,7 +3562,7 @@
 "    This means that purge will delete:\n"
 "     - Unknown files: files marked with \"?\" by \"hg status\"\n"
 "     - Empty directories: in fact Mercurial ignores directories unless\n"
-"       they contain files under source control managment\n"
+"       they contain files under source control management\n"
 "    But it will leave untouched:\n"
 "     - Modified and unmodified tracked files\n"
 "     - Ignored files (unless --all is specified)\n"
@@ -3952,8 +3603,9 @@
 msgid "print the file names instead of deleting them"
 msgstr ""
 
-msgid "end filenames with NUL, for use with xargs (implies -p)"
-msgstr "Beendet Dateinamen mit NUL zur Nutzung mit xargs (implizert -p)"
+msgid "end filenames with NUL, for use with xargs (implies -p/--print)"
+msgstr ""
+"Beendet Dateinamen mit NUL zur Nutzung mit xargs (implizert -p/--print)"
 
 msgid "hg purge [OPTION]... [DIR]..."
 msgstr ""
@@ -3968,13 +3620,10 @@
 "http://www.selenic.com/mercurial/wiki/index.cgi/RebaseProject\n"
 msgstr ""
 
-# Nicht übersetzen
-msgid "return the correct ancestor"
-msgstr ""
-
 msgid "first revision, do not change ancestor\n"
 msgstr "Erste Revision, ändere den Vorgänger nicht\n"
 
+#, fuzzy
 msgid ""
 "move changeset (and descendants) to a different branch\n"
 "\n"
@@ -3983,7 +3632,7 @@
 "    changes relative to a master development tree.\n"
 "\n"
 "    If a rebase is interrupted to manually resolve a merge, it can be\n"
-"    continued with --continue or aborted with --abort.\n"
+"    continued with --continue/-c or aborted with --abort/-a.\n"
 "    "
 msgstr ""
 "Verschiebt Versionen (und ihre Nachfolger) auf einen abweichenden Zweig\n"
@@ -4030,20 +3679,9 @@
 msgid "%d revisions have been skipped\n"
 msgstr "%d Revisionen wurden übersprungen\n"
 
-# Nicht übersetzen
-msgid ""
-"Skip commit if collapsing has been required and rev is not the last\n"
-"    revision, commit otherwise\n"
-"    "
-msgstr ""
-
 msgid " set parents\n"
 msgstr " setzt die Vorgänger\n"
 
-# Nicht übersetzen
-msgid "Rebase a single revision"
-msgstr "Rebase einer einzigen Revision"
-
 #, python-format
 msgid "rebasing %d:%s\n"
 msgstr "Rebase von %d:%s\n"
@@ -4079,23 +3717,12 @@
 msgid "next revision set to %s\n"
 msgstr "nächste Revision auf %s gesetzt\n"
 
-# Nicht übersetzen
-msgid "Return the new parent relationship of the revision that will be rebased"
-msgstr ""
-
 #, python-format
 msgid "cannot use revision %d as base, result would have 3 parents"
 msgstr ""
 "Revision %d kann nicht als Basis genutzt werden, das Ergebnis hätte 3 "
 "Vorgänger"
 
-msgid "Return true if the given patch is in git format"
-msgstr ""
-
-# Nicht übersetzen
-msgid "Update rebased mq patches - finalize and then import them"
-msgstr ""
-
 #, python-format
 msgid "revision %d is an mq patch (%s), finalize it.\n"
 msgstr "Revision %d ist ein MQ-Patch (%s) und muss finalisiert werden.\n"
@@ -4104,41 +3731,21 @@
 msgid "import mq patch %d (%s)\n"
 msgstr "Importiere MQ Patch %d (%s)\n"
 
-# Nicht übersetzen
-msgid "Store the current status to allow recovery"
-msgstr ""
-
 msgid "rebase status stored\n"
 msgstr "Rebase-Zustand gesichert\n"
 
-# Nicht übersetzen
-msgid "Remove the status files"
-msgstr ""
-
-# Nicht übersetzen
-msgid "Restore a previously stored status"
-msgstr ""
-
 msgid "rebase status resumed\n"
 msgstr "Rebase-Zustand wieder aufgenommen\n"
 
 msgid "no rebase in progress"
 msgstr "Kein vorheriger Rebase zur Wiederaufnahme"
 
-# Nicht übersetzen
-msgid "Restore the repository to its original state"
-msgstr ""
-
 msgid "warning: new changesets detected on target branch, not stripping\n"
 msgstr "Warnung: Neue Änderungssätze auf Zielzweig gefunden, lösche nicht\n"
 
 msgid "rebase aborted\n"
 msgstr "Rebase abgebrochen\n"
 
-# Nicht übersetzen
-msgid "Define which revisions are going to be rebased and where"
-msgstr ""
-
 msgid "cannot rebase onto an applied mq patch"
 msgstr "Rebase kann auf einem angewandten MQ-Patch nicht aufsetzen"
 
@@ -4162,17 +3769,9 @@
 msgstr ""
 "Zusammenfalten nicht möglich, es gibt mehr als einen externen Vorgänger"
 
-# Nicht übersetzen
-msgid "Call rebase after pull if the latter has been invoked with --rebase"
-msgstr ""
-
 msgid "--update and --rebase are not compatible, ignoring the update flag\n"
 msgstr "--update und --rebase sind nicht kompatibel, ignoriere --update\n"
 
-# Nicht übersetzen
-msgid "Replace pull with a decorator to provide --rebase option"
-msgstr ""
-
 msgid "rebase working directory to branch head"
 msgstr "Führt Rebase zu einem Zweigkopf auf dem Arbeitsverzeichnis aus"
 
@@ -4209,29 +3808,6 @@
 msgid "interactive change selection during commit or qrefresh"
 msgstr ""
 
-# Nicht übersetzen
-msgid ""
-"like patch.iterhunks, but yield different events\n"
-"\n"
-"    - ('file',    [header_lines + fromfile + tofile])\n"
-"    - ('context', [context_lines])\n"
-"    - ('hunk',    [hunk_lines])\n"
-"    - ('range',   (-start,len, +start,len, diffp))\n"
-"    "
-msgstr ""
-
-# Nicht übersetzen
-msgid "scan lr while predicate holds"
-msgstr ""
-
-# Nicht übersetzen
-msgid ""
-"patch header\n"
-"\n"
-"    XXX shoudn't we move this to mercurial/patch.py ?\n"
-"    "
-msgstr ""
-
 msgid "this modifies a binary file (all or nothing)\n"
 msgstr "Dies modifiziert eine Binärdatei (alles oder nicht)\n"
 
@@ -4242,53 +3818,33 @@
 msgid "%d hunks, %d lines changed\n"
 msgstr "%d Hunks, %d Zeilen geändert\n"
 
-# Nicht übersetzen
-msgid "hunk -> (n+,n-)"
-msgstr ""
-
-# Nicht übersetzen
-msgid ""
-"patch hunk\n"
-"\n"
-"    XXX shouldn't we merge this with patch.hunk ?\n"
-"    "
-msgstr ""
-
-# Nicht übersetzen
-msgid "patch -> [] of hunks "
-msgstr ""
-
-# Nicht übersetzen
-msgid "patch parsing state machine"
-msgstr ""
-
-# Nicht übersetzen
-msgid "Interactively filter patch chunks into applied-only chunks"
-msgstr ""
-
-# Nicht übersetzen
-msgid ""
-"fetch next portion from chunks until a 'header' is seen\n"
-"        NB: header == new-file mark\n"
-"        "
-msgstr ""
-
-# Nicht übersetzen
-msgid ""
-"prompt query, and process base inputs\n"
-"\n"
-"        - y/n for the rest of file\n"
-"        - y/n for the rest\n"
-"        - ? (help)\n"
-"        - q (quit)\n"
-"\n"
-"        else, input is returned to the caller.\n"
-"        "
-msgstr ""
-
 msgid "[Ynsfdaq?]"
 msgstr ""
 
+msgid "&Yes, record this change"
+msgstr "&Yes - übernimmt diese Änderung"
+
+msgid "&No, skip this change"
+msgstr "&No, überspringt diese Änderung"
+
+msgid "&Skip remaining changes to this file"
+msgstr ""
+
+msgid "Record remaining changes to this &file"
+msgstr ""
+
+msgid "&Done, skip remaining changes and files"
+msgstr ""
+
+msgid "Record &all changes to all remaining files"
+msgstr "Übernimmt &alle Änderungen aller restlichen Dateien"
+
+msgid "&Quit, recording no changes"
+msgstr "&Quit, übernimmt keine Änderungen"
+
+msgid "&?"
+msgstr ""
+
 msgid "y"
 msgstr ""
 
@@ -4379,42 +3935,12 @@
 "\n"
 "    ? - zeigt Hilfe an"
 
-msgid ""
-"interactively record a new patch\n"
-"\n"
-"    see 'hg help qnew' & 'hg help record' for more information and usage\n"
-"    "
-msgstr ""
-"Interaktive Auswahl eines neuen Patches\n"
-"\n"
-"    Siehe 'hg help qnew' & 'hg help record' für weitere Informationen und\n"
-"    die Verwendung\n"
-"    "
-
 msgid "'mq' extension not loaded"
 msgstr "'mq' Erweiterung nicht geladen"
 
 msgid "running non-interactively, use commit instead"
 msgstr "Nicht-interaktive Ausführung, nutze stattdessen 'commit'"
 
-# Nicht übersetzen
-msgid ""
-"This is generic record driver.\n"
-"\n"
-"        It's job is to interactively filter local changes, and accordingly\n"
-"        prepare working dir into a state, where the job can be delegated to\n"
-"        non-interactive commit command such as 'commit' or 'qrefresh'.\n"
-"\n"
-"        After the actual job is done by non-interactive command, working "
-"dir\n"
-"        state is restored to original.\n"
-"\n"
-"        In the end we'll record intresting changes, and everything else will "
-"be\n"
-"        left in place, so the user can continue his work.\n"
-"        "
-msgstr ""
-
 msgid "no changes to record\n"
 msgstr "Keine Änderungen zu übernehmen\n"
 
@@ -4447,14 +3973,6 @@
 "map from a changeset hash to its hash in the source repository.\n"
 msgstr ""
 
-msgid ""
-"returns True if a node is already an ancestor of parent\n"
-"        or has already been transplanted"
-msgstr ""
-
-msgid "apply the revisions in revmap one by one in revision order"
-msgstr ""
-
 #, python-format
 msgid "skipping already applied revision %s\n"
 msgstr ""
@@ -4471,9 +3989,6 @@
 msgid "%s transplanted to %s\n"
 msgstr ""
 
-msgid "arbitrarily rewrite changeset before applying it"
-msgstr ""
-
 #, python-format
 msgid "filtering %s\n"
 msgstr ""
@@ -4481,9 +3996,6 @@
 msgid "filter failed"
 msgstr ""
 
-msgid "apply the patch in patchfile to the repository as a transplant"
-msgstr ""
-
 msgid "can only omit patchfile if merging"
 msgstr ""
 
@@ -4494,16 +4006,10 @@
 msgid "Fix up the merge and run hg transplant --continue"
 msgstr ""
 
-msgid "recover last transaction and apply remaining changesets"
-msgstr ""
-
 #, python-format
 msgid "%s transplanted as %s\n"
 msgstr ""
 
-msgid "commit working directory using journal metadata"
-msgstr ""
-
 msgid "transplant log file is corrupt"
 msgstr ""
 
@@ -4514,15 +4020,6 @@
 msgid "commit failed"
 msgstr ""
 
-msgid "journal changelog metadata for later recover"
-msgstr ""
-
-msgid "remove changelog journal"
-msgstr ""
-
-msgid "interactively transplant changesets"
-msgstr ""
-
 msgid "apply changeset? [ynmpcq?]:"
 msgstr ""
 
@@ -4539,11 +4036,12 @@
 "    Its argument will be invoked with the current changelog message as\n"
 "    $1 and the patch as $2.\n"
 "\n"
-"    If --source is specified, selects changesets from the named\n"
-"    repository. If --branch is specified, selects changesets from the\n"
-"    branch holding the named revision, up to that revision. If --all\n"
-"    is specified, all changesets on the branch will be transplanted,\n"
-"    otherwise you will be prompted to select the changesets you want.\n"
+"    If --source/-s is specified, selects changesets from the named\n"
+"    repository. If --branch/-b is specified, selects changesets from\n"
+"    the branch holding the named revision, up to that revision. If\n"
+"    --all/-a is specified, all changesets on the branch will be\n"
+"    transplanted, otherwise you will be prompted to select the\n"
+"    changesets you want.\n"
 "\n"
 "    hg transplant --branch REVISION --all will rebase the selected\n"
 "    branch (up to the named revision) onto your current working\n"
@@ -4559,7 +4057,7 @@
 "\n"
 "    If a changeset application fails, you can fix the merge by hand\n"
 "    and then resume where you left off by calling hg transplant\n"
-"    --continue.\n"
+"    --continue/-c.\n"
 "    "
 msgstr ""
 
@@ -4619,17 +4117,17 @@
 "splitting path, case conversion, etc.) with its encoded bytes. We call\n"
 "such a encoding (i.e. shift_jis and big5) as \"problematic encoding\".\n"
 "This extension can be used to fix the issue with those encodings by\n"
-"wrapping some functions to convert to unicode string before path\n"
+"wrapping some functions to convert to Unicode string before path\n"
 "operation.\n"
 "\n"
-"This extension is usefull for:\n"
+"This extension is useful for:\n"
 " * Japanese Windows users using shift_jis encoding.\n"
 " * Chinese Windows users using big5 encoding.\n"
 " * All users who use a repository with one of problematic encodings on\n"
 "   case-insensitive file system.\n"
 "\n"
 "This extension is not needed for:\n"
-" * Any user who use only ascii chars in path.\n"
+" * Any user who use only ASCII chars in path.\n"
 " * Any user who do not use any of problematic encodings.\n"
 "\n"
 "Note that there are some limitations on using this extension:\n"
@@ -4642,7 +4140,7 @@
 "  [extensions]\n"
 "  hgext.win32mbcs =\n"
 "\n"
-"Path encoding conversion are done between unicode and\n"
+"Path encoding conversion are done between Unicode and\n"
 "encoding.encoding which is decided by mercurial from current locale\n"
 "setting or HGENCODING.\n"
 "\n"
@@ -4758,6 +4256,9 @@
 msgid "premature EOF reading chunk (got %d bytes, expected %d)"
 msgstr "vorzeitiges Dateiende beim Lesen (%d Byte erhalten, %d erwartet)"
 
+msgid "empty username"
+msgstr "Leerere Benutzername"
+
 #, python-format
 msgid "username %s contains a newline"
 msgstr "Benutzername %s enthält einen Zeilenumbruch"
@@ -4935,21 +4436,42 @@
 msgstr ""
 "Kopien/Umbenennungen können nur zu expliziten Dateinamen verfolgt werden"
 
-#, python-format
-msgid "file %s not found!"
-msgstr "Datei %s nicht gefunden!"
-
-#, python-format
-msgid "no match under directory %s!"
-msgstr "Kein Treffer unterhalb des Verzeichnisses %s!"
-
-#, python-format
-msgid "can't commit %s: unsupported file type!"
-msgstr "Kann %s nicht übernehmen: nicht unterstützter Dateityp!"
-
-#, python-format
-msgid "file %s not tracked!"
-msgstr "Datei %s steht nicht unter Versionskontrolle!"
+msgid "HG: Enter commit message.  Lines beginning with 'HG:' are removed."
+msgstr ""
+"HG: Bitte gib eine Versions-Meldung ein. Zeilen beginnend mit 'HG:' werden "
+"entfernt."
+
+msgid "HG: Leave message empty to abort commit."
+msgstr ""
+
+#, python-format
+msgid "HG: user: %s"
+msgstr "HG: Benutzer: %s"
+
+msgid "HG: branch merge"
+msgstr ""
+
+#, python-format
+msgid "HG: branch '%s'"
+msgstr ""
+
+#, python-format
+msgid "HG: added %s"
+msgstr ""
+
+#, python-format
+msgid "HG: changed %s"
+msgstr "HG: Geändert %s"
+
+#, python-format
+msgid "HG: removed %s"
+msgstr "HG: entfernt %s"
+
+msgid "HG: no files changed"
+msgstr "HG: Keine Dateiänderungen"
+
+msgid "empty commit message"
+msgstr "Leere Versions-Meldung"
 
 msgid ""
 "add the specified files on the next commit\n"
@@ -5240,14 +4762,20 @@
 "    Fehler (schlechte Revision).\n"
 "    "
 
-#, python-format
-msgid "The first %s revision is:\n"
-msgstr "Die erste %s Revision ist:\n"
-
-#, python-format
-msgid "Due to skipped revisions, the first %s revision could be any of:\n"
-msgstr ""
-"Aufgrund übersprungener Revisionen könnte die erste %s Revision\n"
+msgid "The first good revision is:\n"
+msgstr "Die erste gute Revision ist:\n"
+
+msgid "The first bad revision is:\n"
+msgstr "Die erste schlechte Revision ist:\n"
+
+msgid "Due to skipped revisions, the first good revision could be any of:\n"
+msgstr ""
+"Aufgrund übersprungener Revisionen könnte die erste gute Revision\n"
+"eine der folgenden sein:\n"
+
+msgid "Due to skipped revisions, the first bad revision could be any of:\n"
+msgstr ""
+"Aufgrund übersprungener Revisionen könnte die erste schlechte Revision\n"
 "eine der folgenden sein:\n"
 
 msgid "cannot bisect (no known good revisions)"
@@ -5392,7 +4920,7 @@
 "Revisionshistorie.\n"
 "    "
 
-msgid "--base is incompatible with specifiying a destination"
+msgid "--base is incompatible with specifying a destination"
 msgstr "Bei Nutzung von --base kann kein Zielarchiv angegeben werden"
 
 msgid "unknown bundle type specified with --type"
@@ -5431,7 +4959,6 @@
 "    %p   Pfad und Dateiname relativ zur Archiv-Wurzel\n"
 "    "
 
-
 msgid ""
 "make a copy of an existing repository\n"
 "\n"
@@ -5625,7 +5152,7 @@
 msgstr "Entweder zwei oder drei Parameter angeben"
 
 msgid "returns the completion list associated with the given command"
-msgstr "Listet mögliche Kommandos zu gegebener Abkürzung auf"
+msgstr "Listet mögliche Befehle zu gegebener Abkürzung auf"
 
 msgid "rebuild the dirstate as it would look like for the given revision"
 msgstr ""
@@ -5661,16 +5188,21 @@
 msgid ".hg/dirstate inconsistent with current parent's manifest"
 msgstr ".hg/dirstate inkonsistent mit dem Manifest des aktuellen Vorgängers"
 
+#, fuzzy
 msgid ""
 "show combined config settings from all hgrc files\n"
 "\n"
-"    With no args, print names and values of all config items.\n"
-"\n"
-"    With one arg of the form section.name, print just the value of\n"
-"    that config item.\n"
-"\n"
-"    With multiple args, print names and values of all config items\n"
-"    with matching section names."
+"    With no arguments, print names and values of all config items.\n"
+"\n"
+"    With one argument of the form section.name, print just the value\n"
+"    of that config item.\n"
+"\n"
+"    With multiple arguments, print names and values of all config\n"
+"    items with matching section names.\n"
+"\n"
+"    With the --debug flag, the source (filename and line number) is\n"
+"    printed for each config item.\n"
+"    "
 msgstr ""
 "Zeigt die kombinierten Konfigurationswerte aller hgrc-Dateien an\n"
 "\n"
@@ -5866,7 +5398,6 @@
 "aufschlussreich.\n"
 "    "
 
-
 msgid ""
 "dump the header and diffs for one or more changesets\n"
 "\n"
@@ -5967,7 +5498,7 @@
 "\n"
 "    Durchsucht Dateien in der Versionshistorie nach einem gegebenen Muster.\n"
 "\n"
-"    Dieses Kommando unterscheidet sich von Unix grep, da es Reguläre "
+"    Dieser Befehl unterscheidet sich von Unix grep, da es Reguläre "
 "Ausdrücke\n"
 "    in Python/Perl Format erwartet und ausserdem nur die übernommenen "
 "Revisionen\n"
@@ -6108,7 +5639,7 @@
 msgstr "%s Erweiterung - %s\n"
 
 msgid "Mercurial Distributed SCM\n"
-msgstr "Mercurial Distributed SCM\n"
+msgstr ""
 
 msgid ""
 "basic commands:\n"
@@ -6126,7 +5657,6 @@
 "Zusätzliche Hilfethemen:\n"
 "\n"
 
-
 msgid ""
 "identify the working copy or specified revision\n"
 "\n"
@@ -6156,7 +5686,6 @@
 "    falls nicht der 'default'-Zweig vorliegt.\n"
 "    "
 
-
 msgid ""
 "import an ordered set of patches\n"
 "\n"
@@ -6247,7 +5776,6 @@
 msgid "patch is damaged or loses information"
 msgstr "Prüfsumme stimmt nicht überein: Patch korrumpiert"
 
-
 msgid ""
 "show new changesets found in source\n"
 "\n"
@@ -6299,7 +5827,6 @@
 "    Siehe 'hg help urls' für mehr Informationen.\n"
 "    "
 
-
 msgid ""
 "locate files matching specific patterns\n"
 "\n"
@@ -6331,13 +5858,12 @@
 "    Ohne angegebenes Suchmuster werden alle Dateinamen ausgegeben.\n"
 "\n"
 "    Um die Ausgabe besser in Verbindung mit \"xargs\" verwenden zu können,\n"
-"    sollte die Option \"-0\" (Null) in beiden Kommandos angegeben werden.\n"
+"    sollte die Option \"-0\" (Null) in beiden Befehle angegeben werden.\n"
 "    Dadurch werden die Dateinamen mit einem Null-Byte getrennt, was "
 "Probleme\n"
 "    mit Leerzeichen in Dateinamen vermeidet.\n"
 "    "
 
-
 msgid ""
 "show revision history of entire repository or files\n"
 "\n"
@@ -6402,20 +5928,13 @@
 "\n"
 "    "
 
-# Nicht übersetzen
-msgid ""
-"looks up all renames for a file (up to endrev) the first\n"
-"        time the file is given. It indexes on the changerev and only\n"
-"        parses the manifest if linkrev != changerev.\n"
-"        Returns rename info for fn at changerev rev."
-msgstr ""
-
+#, fuzzy
 msgid ""
 "output the current or given revision of the project manifest\n"
 "\n"
 "    Print a list of version controlled files for the given revision.\n"
 "    If no revision is given, the first parent of the working directory\n"
-"    is used, or tip if no revision is checked out.\n"
+"    is used, or the null revision if none is checked out.\n"
 "\n"
 "    With -v flag, print file permissions, symlink and executable bits.\n"
 "    With --debug flag, print file revision hashes.\n"
@@ -6493,7 +6012,6 @@
 "Arbeitsverzeichnis ist keine Kopfversion - Nutze \"hg update\" oder gib eine "
 "explizite Revision an"
 
-
 msgid ""
 "show changesets not found in destination\n"
 "\n"
@@ -6513,7 +6031,6 @@
 "    Siehe Hilfe zu 'pull' für das Format der Zieladresse.\n"
 "    "
 
-
 msgid ""
 "show the parents of the working directory or revision\n"
 "\n"
@@ -6613,13 +6130,6 @@
 "    "
 
 msgid ""
-"Other repository doesn't support revision lookup, so a rev cannot be "
-"specified."
-msgstr ""
-"Das andere Projektarchiv unterstützt keine Revisionsabfragen, daher kann "
-"keine Revision angegeben werden."
-
-msgid ""
 "push changes to the specified destination\n"
 "\n"
 "    Push changes from the local repository to the given destination.\n"
@@ -6668,25 +6178,6 @@
 msgstr "Übertrage nach %s\n"
 
 msgid ""
-"raw commit interface (DEPRECATED)\n"
-"\n"
-"    (DEPRECATED)\n"
-"    Lowlevel commit, for use in helper scripts.\n"
-"\n"
-"    This command is not intended to be used by normal users, as it is\n"
-"    primarily useful for importing from other SCMs.\n"
-"\n"
-"    This command is now deprecated and will be removed in a future\n"
-"    release, please use debugsetparents and commit instead.\n"
-"    "
-msgstr ""
-"Interner commit Befehl (VERALTET)\n"
-"    "
-
-msgid "(the rawcommit command is deprecated)\n"
-msgstr "(der Befehl rawcommit ist veraltet)\n"
-
-msgid ""
 "roll back an interrupted transaction\n"
 "\n"
 "    Recover from an interrupted commit or pull.\n"
@@ -6706,7 +6197,6 @@
 "    nur dann nötig sein, wenn eine Meldung von Mercurial es vorschlägt.\n"
 "    "
 
-
 msgid ""
 "remove the specified files on the next commit\n"
 "\n"
@@ -6759,13 +6249,18 @@
 "    -Af    E  E  E  E\n"
 "\n"
 "    Die Dateien werden im Projektarchiv beim nächsten Übernehmen (commit)\n"
-"    entfernt. Um diese Aktion vorher rückgängig zu machen, siehe 'hg revert'.\n"
+"    entfernt. Um diese Aktion vorher rückgängig zu machen, siehe 'hg "
+"revert'.\n"
 "    "
 
 msgid "no files specified"
 msgstr "Keine Dateien angegeben"
 
 #, python-format
+msgid "not removing %s: file is untracked\n"
+msgstr "Entferne %s nicht: Datei ist nicht versioniert\n"
+
+#, python-format
 msgid "not removing %s: file %s (use -f to force removal)\n"
 msgstr "Entferne nicht %s: Datei %s (Nutze -f um Entfernung zu erzwingen)\n"
 
@@ -6778,7 +6273,6 @@
 msgid "has been marked for add"
 msgstr "Wurde als hinzugefügt markiert"
 
-
 msgid ""
 "rename files; equivalent of copy + remove\n"
 "\n"
@@ -6835,11 +6329,13 @@
 msgstr ""
 "Wiederholt eine Dateizusammenführung oder Aktualisierung\n"
 "\n"
-"    Der Prozess, zwei Versionen automatisch zusammenzuführen (nach expliziter\n"
+"    Der Prozess, zwei Versionen automatisch zusammenzuführen (nach "
+"expliziter\n"
 "    Zusammenführung oder nach Aktualisierung mit lokalen Änderungen), wird\n"
 "    erneut auf die ursprünglichen Versionen angewendet. Dies macht manuelle\n"
 "    Versuche, den Konflikt zu lösen, rückgängig.\n"
-"    Mit der Option -a/--all wird dies an allen markierten Dateien ausgeführt.\n"
+"    Mit der Option -a/--all wird dies an allen markierten Dateien "
+"ausgeführt.\n"
 "\n"
 "    Nach der automatischen Zusammenführung werden Konflikte intern markiert\n"
 "    und erlauben kein Übernehmen der Änderungen, bis sie mit der Option\n"
@@ -6860,11 +6356,12 @@
 msgid "no files or directories specified; use --all to remerge all files"
 msgstr "Keine Dateien oder Verzeichnisse angegeben; nutze --all für alle"
 
+#, fuzzy
 msgid ""
 "restore individual files or directories to an earlier state\n"
 "\n"
-"    (use update -r to check out earlier revisions, revert does not\n"
-"    change the working directory parents)\n"
+"    (Use update -r to check out earlier revisions, revert does not\n"
+"    change the working directory parents.)\n"
 "\n"
 "    With no revision specified, revert the named files or directories\n"
 "    to the contents they had in the parent of the working directory.\n"
@@ -6908,15 +6405,18 @@
 "\n"
 "    Mit der -r/--rev Option werden die Dateien oder Verzeichnisse auf die\n"
 "    gegebene Revision zurückgesetzt. Auf diese Weise können ungewollte\n"
-"    Änderungen rückgängig gemacht werden. Die betroffenen Dateien gelten dann\n"
+"    Änderungen rückgängig gemacht werden. Die betroffenen Dateien gelten "
+"dann\n"
 "    als modifiziert (seit dem Vorgänger) und müssen per 'commit' als neue\n"
-"    Revision übernommen werden. Siehe auch 'hg help dates' für erlaubte Formate\n"
+"    Revision übernommen werden. Siehe auch 'hg help dates' für erlaubte "
+"Formate\n"
 "    der -d/--date Option.\n"
 "\n"
 "    Eine gelöschte Datei wird wieder hergestellt. Wurde die Ausführbarkeit\n"
 "    einer Datei verändert, wird auch dieser Wert zurückgesetzt.\n"
 "\n"
-"    Nur die angegebenen Dateien und Verzeichnisse werden zurückgesetzt. Ohne\n"
+"    Nur die angegebenen Dateien und Verzeichnisse werden zurückgesetzt. "
+"Ohne\n"
 "    Angabe werden keine Dateien verändert.\n"
 "\n"
 "    Modifizierte Dateien werden vor der Änderung mit der Endung .orig\n"
@@ -6927,8 +6427,9 @@
 msgstr "ungültige Angabe von Revision und Datum gleichzeitig"
 
 msgid "no files or directories specified; use --all to revert the whole repo"
-msgstr "keine Dateien oder Verzeichnisse angegeben; nutze --all um das gesamte"
-" Arbeitsverzeichnis zurückzusetzen"
+msgstr ""
+"keine Dateien oder Verzeichnisse angegeben; nutze --all um das gesamte "
+"Arbeitsverzeichnis zurückzusetzen"
 
 #, python-format
 msgid "forgetting %s\n"
@@ -6983,14 +6484,16 @@
 msgstr ""
 "Rollt die letzte Transaktion zurück\n"
 "\n"
-"    Dieses Kommando muss mit Vorsicht verwendet werden. Es gibt keine ver-\n"
-"    schachtelten Transaktionen und ein Rückrollen kann selber nicht rückgängig\n"
+"    Dieser Befehl muss mit Vorsicht verwendet werden. Es gibt keine ver-\n"
+"    schachtelten Transaktionen und ein Rückrollen kann selber nicht "
+"rückgängig\n"
 "    gemacht werden. Der aktuelle Status (dirstate) im .hg Verzeichnis wird\n"
 "    auf die letzte Transaktion zurückgesetzt. Neuere Änderungen gehen damit\n"
 "    verloren.\n"
 "\n"
-"    Transaktionen werden verwendet um den Effekt aller Kommandos, die Änderungs-\n"
-"    sätze erstellen oder verteilen, zu kapseln. Die folgenden Kommandos\n"
+"    Transaktionen werden verwendet um den Effekt aller Befehle, die "
+"Änderungs-\n"
+"    sätze erstellen oder verteilen, zu kapseln. Die folgenden Befehle\n"
 "    werden durch Transaktionen geschützt:\n"
 "\n"
 "      commit\n"
@@ -6999,10 +6502,14 @@
 "      push (mit diesem Archiv als Ziel)\n"
 "      unbundle\n"
 "\n"
-"    Dieses Kommando ist nicht für öffentliche Archive gedacht. Sobald Änderungen\n"
-"    für Andere sichtbar sind ist ein Zurückrollen unnütz, da jemand sie bereits\n"
-"    zu sich übertragen haben könnte. Weiterhin entsteht eine Wettlaufsituation,\n"
-"    wenn beispielsweise ein Zurückrollen ausgeführt wird, während jemand anders\n"
+"    Dieser Befehl ist nicht für öffentliche Archive gedacht. Sobald "
+"Änderungen\n"
+"    für Andere sichtbar sind ist ein Zurückrollen unnütz, da jemand sie "
+"bereits\n"
+"    zu sich übertragen haben könnte. Weiterhin entsteht eine "
+"Wettlaufsituation,\n"
+"    wenn beispielsweise ein Zurückrollen ausgeführt wird, während jemand "
+"anders\n"
 "    ein 'pull' ausführt.\n"
 "    "
 
@@ -7017,13 +6524,15 @@
 "    Gibt das Wurzelverzeichnis des aktuellen Arbeitsverzeichnisses aus.\n"
 "    "
 
+#, fuzzy
 msgid ""
 "export the repository via HTTP\n"
 "\n"
 "    Start a local HTTP repository browser and pull server.\n"
 "\n"
 "    By default, the server logs accesses to stdout and errors to\n"
-"    stderr. Use the -A and -E options to log to files.\n"
+"    stderr. Use the -A/--accesslog and -E/--errorlog options to log to\n"
+"    files.\n"
 "    "
 msgstr ""
 "Exportiert das Projektarchiv via HTTP\n"
@@ -7077,8 +6586,10 @@
 "    wird, werden nur zutreffende Dateien angezeigt. Es werden keine Dateien\n"
 "    angezeigt die unverändert, ignoriert oder Quelle einer Kopier/"
 "Verschiebe\n"
-"    Operation sind, es sei denn -c (unverändert), -i (ignoriert), -C (Kopien)\n"
-"    order -A wurde angegeben. Außer bei Angabe von Optionen, die mit \"Zeigt\n"
+"    Operation sind, es sei denn -c (unverändert), -i (ignoriert), -C "
+"(Kopien)\n"
+"    order -A wurde angegeben. Außer bei Angabe von Optionen, die mit "
+"\"Zeigt\n"
 "    nur ...\" beschrieben werden, werden die Optionen -mardu genutzt.\n"
 "\n"
 "    Die Option -q/--quiet blendet unüberwachte (unbekannte und ignorierte)\n"
@@ -7133,17 +6644,21 @@
 "\n"
 "    Benennt eine bestimmte Revision mit <name>.\n"
 "\n"
-"    Etiketten sind nützlich um somit benannte Revisionen später in Vergleichen\n"
-"    zu verwenden, in der Historie dorthin zurückzugehen oder wichtige Zweig-\n"
+"    Etiketten sind nützlich um somit benannte Revisionen später in "
+"Vergleichen\n"
+"    zu verwenden, in der Historie dorthin zurückzugehen oder wichtige "
+"Zweig-\n"
 "    stellen zu markieren.\n"
 "\n"
 "    Wenn keine Revision angegeben ist, wird der Vorgänger des Arbeits-\n"
 "    verzeichnisses (oder - falls keines existiert - die Spitze) benannt.\n"
 "\n"
 "    Um die Versionskontrolle, Verteilung und Zusammenführung von Etiketten\n"
-"    möglich zu machen, werden sie in einer Datei '.hgtags' gespeichert, welche\n"
+"    möglich zu machen, werden sie in einer Datei '.hgtags' gespeichert, "
+"welche\n"
 "    zusammen mit den anderen Projektdateien überwacht wird und manuell be-\n"
-"    arbeitet werden kann. Lokale Etiketten (nicht mit anderen Archiven geteilt)\n"
+"    arbeitet werden kann. Lokale Etiketten (nicht mit anderen Archiven "
+"geteilt)\n"
 "    liegen in der Datei .hg/localtags.\n"
 "\n"
 "    Siehe auch 'hg help dates' für erlaubte Formate der -d/--date Option.\n"
@@ -7192,7 +6707,8 @@
 msgstr ""
 "Liste alle Etiketten des Archivs auf\n"
 "\n"
-"    Listet sowohl globale wie auch lokale Etiketten auf. Mit dem Schalter -v/\n"
+"    Listet sowohl globale wie auch lokale Etiketten auf. Mit dem Schalter -"
+"v/\n"
 "    --verbose werden lokale in einer dritten Spalte als solche markiert.\n"
 "    "
 
@@ -7214,7 +6730,8 @@
 "    Die Spitze (tip) bezeichnet den zuletzt hinzugefügten Änderungssatz und\n"
 "    damit den zuletzt geänderten Kopf.\n"
 "\n"
-"    Nach einem Übernehmen mit commit wird die neue Revision die Spitze. Nach\n"
+"    Nach einem Übernehmen mit commit wird die neue Revision die Spitze. "
+"Nach\n"
 "    einem Holen mit pull wird die Spitze des anderen Archives übernommen.\n"
 "    Als Etikettname ist 'tip' ein Spezialfall und kann nicht umbenannt oder\n"
 "    manuell einem anderen Änderungssatz angehängt werden.\n"
@@ -7230,9 +6747,10 @@
 "Wendet eine oder mehrere Änderungsgruppendateien an\n"
 "\n"
 "    Die angegebenen Dateien müssen komprimierte Änderungsgruppen enthalten,\n"
-"    wie sie durch das Kommando 'bundle' erzeugt werden\n"
-"    "
-
+"    wie sie durch den Befehl 'bundle' erzeugt werden\n"
+"    "
+
+#, fuzzy
 msgid ""
 "update working directory\n"
 "\n"
@@ -7247,16 +6765,16 @@
 "    the working directory will additionally be switched to that\n"
 "    branch.\n"
 "\n"
-"    When there are uncommitted changes, use option -C to discard them,\n"
-"    forcibly replacing the state of the working directory with the\n"
-"    requested revision.\n"
-"\n"
-"    When there are uncommitted changes and option -C is not used, and\n"
-"    the parent revision and requested revision are on the same branch,\n"
-"    and one of them is an ancestor of the other, then the new working\n"
-"    directory will contain the requested revision merged with the\n"
-"    uncommitted changes. Otherwise, the update will fail with a\n"
-"    suggestion to use 'merge' or 'update -C' instead.\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.\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"
@@ -7309,7 +6827,8 @@
 msgstr ""
 "Prüft die Integrität des Projektarchivs\n"
 "\n"
-"    Führt eine umfassende Prüfung des aktuellen Proektarchivs durch, rechnet\n"
+"    Führt eine umfassende Prüfung des aktuellen Proektarchivs durch, "
+"rechnet\n"
 "    alle Prüfsummen in Historie, Manifest und überwachten Dateien nach.\n"
 "    Auch die Integrität von Referenzen und Indizes wird geprüft.\n"
 "    "
@@ -7402,8 +6921,8 @@
 msgid "record datecode as commit date"
 msgstr "Protokolliert Datumscode als Versionsdatum"
 
-msgid "record user as committer"
-msgstr "Protokolliert Nutzer als Versionsersteller"
+msgid "record the specified user as committer"
+msgstr "Protokolliert den angegebenen Nutzer als Versionsersteller"
 
 msgid "display using template map file"
 msgstr "Anzeige unter Nutzung der Vorlagenzuordnungsdatei"
@@ -7505,13 +7024,13 @@
 msgstr "Überspringt das Testen dieses Änderungssatzes"
 
 msgid "use command to check changeset state"
-msgstr "Nutzt Kommando um den Fehlerstatus des Änderungssatzes zu bestimmen"
+msgstr "Nutzt eine Programm um den Fehlerstatus zu bestimmen"
 
 msgid "do not update to target"
 msgstr "Führe keine Aktualisierung der Dateien durch"
 
 msgid "[-gbsr] [-c CMD] [REV]"
-msgstr "[-gbsr] [-c KOMMANDO] [REV]"
+msgstr "[-gbsr] [-c PROGRAMM] [REV]"
 
 msgid "set branch name even if it shadows an existing branch"
 msgstr "Setzt Zweignamen, selbst wenn es bestehenden Zweig verschattet"
@@ -7523,7 +7042,7 @@
 msgstr ""
 
 msgid "show only branches that have unmerged heads"
-msgstr "Zeigt nur Zweige mir nicht mehreren Köpfen"
+msgstr "Zeigt nur Zweige mit mehreren Köpfen"
 
 msgid "[-a]"
 msgstr ""
@@ -7532,16 +7051,16 @@
 msgstr "Auch ausführen wenn das entfernte Archiv keinen Bezug hat"
 
 msgid "a changeset up to which you would like to bundle"
-msgstr "Der Änderungssatz bis zu dem gebündelt werden soll"
+msgstr "Der Änderungssatz bis zu dem gruppiert werden soll"
 
 msgid "a base changeset to specify instead of a destination"
-msgstr ""
+msgstr "Ein Basisänderungssatz anstelle eines Ziels"
 
 msgid "bundle all changesets in the repository"
-msgstr ""
+msgstr "Gruppiert alle Änderungssätze des Archivs"
 
 msgid "bundle compression type to use"
-msgstr ""
+msgstr "Kompressionstyp für die Ausgabedatei"
 
 msgid "[-f] [-a] [-r REV]... [--base REV]... FILE [DEST]"
 msgstr "[-f] [-a] [-r REV]... [--base REV]... DATEI [ZIEL]"
@@ -7550,10 +7069,10 @@
 msgstr "Schreibt Ausgabe in Datei mit formatiertem Namen"
 
 msgid "print the given revision"
-msgstr ""
+msgstr "Gibt die gegebene Revision aus"
 
 msgid "apply any matching decode filter"
-msgstr ""
+msgstr "Führt alle passenden Dekodier-Filter aus"
 
 msgid "[OPTION]... FILE..."
 msgstr "[OPTION]... DATEI..."
@@ -7574,10 +7093,10 @@
 msgstr "Markiert einen Zweig als beendet und blendet ihn in der Zweigliste aus"
 
 msgid "record a copy that has already occurred"
-msgstr ""
+msgstr "Identifiziert eine Kopie, die bereits stattgefunden hat"
 
 msgid "forcibly copy over an existing managed file"
-msgstr ""
+msgstr "Erzwingt ein Überschreiben des Kopierziels"
 
 msgid "[OPTION]... [SOURCE]... DEST"
 msgstr "[OPTION]... [QUELLE]... ZIEL"
@@ -7589,34 +7108,28 @@
 msgstr "[BEFEHL]"
 
 msgid "show the command options"
-msgstr ""
+msgstr "Zeigt alle Optionen des Befehls"
 
 msgid "[-o] CMD"
-msgstr ""
+msgstr "[-o] BEFEHL"
 
 msgid "try extended date formats"
-msgstr ""
+msgstr "Erlaubt erweiterte Datumsformate"
 
 msgid "[-e] DATE [RANGE]"
-msgstr ""
+msgstr "[-e] DATUM [PRÜFDATUM]"
 
 msgid "FILE REV"
-msgstr ""
+msgstr "DATEI REV"
 
 msgid "[PATH]"
-msgstr ""
+msgstr "[PFAD]"
 
 msgid "FILE"
-msgstr ""
-
-msgid "parent"
-msgstr ""
-
-msgid "file list"
-msgstr ""
+msgstr "DATEI"
 
 msgid "revision to rebuild to"
-msgstr ""
+msgstr "Basisrevision für die Änderungen"
 
 msgid "[-r REV] [REV]"
 msgstr ""
@@ -7625,31 +7138,31 @@
 msgstr ""
 
 msgid "[-r REV] FILE"
-msgstr ""
+msgstr "[-r REV] DATEI"
 
 msgid "REV1 [REV2]"
 msgstr ""
 
 msgid "do not display the saved mtime"
-msgstr ""
+msgstr "Zeigt gespeicherte Modifikationszeit nicht an"
 
 msgid "[OPTION]..."
 msgstr ""
 
 msgid "[OPTION]... [-r REV1 [-r REV2]] [FILE]..."
-msgstr ""
+msgstr "[OPTION]... [-r REV1 [-r REV2]] [DATEI]..."
 
 msgid "diff against the second parent"
 msgstr "Vergleicht mit der zweiten Vorgängerversion"
 
 msgid "[OPTION]... [-o OUTFILESPEC] REV..."
-msgstr ""
+msgstr "[OPTION]... [-o DATEINAMENMUSTER] REV..."
 
 msgid "end fields with NUL"
-msgstr ""
+msgstr "Trennt Einträge mit NULL statt Leerzeichen"
 
 msgid "print all revisions that match"
-msgstr ""
+msgstr "Zeigt alle zutreffenden Revisionen"
 
 msgid "follow changeset history, or file history across copies and renames"
 msgstr ""
@@ -7657,66 +7170,71 @@
 "hinweg"
 
 msgid "ignore case when matching"
-msgstr ""
+msgstr "Ignoriert Groß- und Kleinschreibung"
 
 msgid "print only filenames and revisions that match"
-msgstr ""
+msgstr "Zeigt nur zutreffende Dateinamen und Revisionen"
 
 msgid "print matching line numbers"
-msgstr ""
+msgstr "Zeigt zutreffende Zeilennummern"
 
 msgid "search in given revision range"
-msgstr ""
+msgstr "Sucht in gegebenem Revisionsintervall"
 
 msgid "[OPTION]... PATTERN [FILE]..."
-msgstr ""
+msgstr "[OPTION]... MUSTER [DATEI]..."
 
 msgid "show only heads which are descendants of REV"
-msgstr ""
+msgstr "Zeigt nur Köpfe, die Nachkommen dieser Revision sind"
 
 msgid "show only the active heads from open branches"
-msgstr ""
+msgstr "Zeigt nur aktive Köpfe von offenen Zweigen"
+
+msgid "show normal and closed heads"
+msgstr "Zeigt normale und abgeschlossene Kopfversionen"
 
 msgid "[-r REV] [REV]..."
 msgstr ""
 
 msgid "[TOPIC]"
-msgstr ""
+msgstr "[THEMA]"
 
 msgid "identify the specified revision"
 msgstr "Identifiziert die angegebene Revision"
 
 msgid "show local revision number"
-msgstr ""
+msgstr "Zeigt die lokale Revisionsnummer"
 
 msgid "show global revision id"
-msgstr ""
+msgstr "Zeigt die globale Revisions-ID"
 
 msgid "show branch"
-msgstr ""
+msgstr "Zeigt gegebenen Zweig"
 
 msgid "show tags"
-msgstr ""
+msgstr "Zeigt Etiketten"
 
 msgid "[-nibt] [-r REV] [SOURCE]"
-msgstr ""
+msgstr "[-nibt] [-r REV] [QUELLE]"
 
 msgid ""
 "directory strip option for patch. This has the same meaning as the "
 "corresponding patch option"
 msgstr ""
+"Entfernt führende Verzeichnisnamen. Dies hat dieselbe Bedeutung wie die "
+"gleichnamige Option von patch"
 
 msgid "base path"
-msgstr ""
+msgstr "Basispfad"
 
 msgid "skip check for outstanding uncommitted changes"
-msgstr ""
+msgstr "Erzwingt trotz lokaler Änderungen im Arbeitsverzeichnis"
 
 msgid "don't commit, just update the working directory"
-msgstr ""
+msgstr "Kein Übernehmen, nur Aktualisierung des Arbeitsverzeichnisses"
 
 msgid "apply patch to the nodes from which it was generated"
-msgstr ""
+msgstr "Wendet patch auf die Knoten an, von denen er erstellt wurde"
 
 msgid "use any branch information in patch (implied by --exact)"
 msgstr ""
@@ -7725,31 +7243,31 @@
 msgstr ""
 
 msgid "show newest record first"
-msgstr ""
+msgstr "Zeigt neuste Änderung zuerst"
 
 msgid "file to store the bundles into"
-msgstr ""
+msgstr "Dateiname zum Zwischenspeichern"
 
 msgid "a specific revision up to which you would like to pull"
 msgstr "eine bestimmte Revision bis zu der geholt werden soll"
 
 msgid "[-p] [-n] [-M] [-f] [-r REV]... [--bundle FILENAME] [SOURCE]"
-msgstr ""
+msgstr "[-p] [-n] [-M] [-f] [-r REV]... [--bundle DATEINAME] [QUELLE]"
 
 msgid "[-e CMD] [--remotecmd CMD] [DEST]"
 msgstr ""
 
 msgid "search the repository as it stood at REV"
-msgstr ""
+msgstr "Durchsucht nur die Revision REV"
 
 msgid "end filenames with NUL, for use with xargs"
 msgstr "Beendet Dateinamen mit NUL zur Nutzung mit xargs"
 
 msgid "print complete paths from the filesystem root"
-msgstr ""
+msgstr "Gibt absolute Dateinamen aus"
 
 msgid "[OPTION]... [PATTERN]..."
-msgstr ""
+msgstr "[OPTION]... [MUSTER]..."
 
 msgid "only follow the first parent of merge changesets"
 msgstr "Folgt nur dem ersten Vorgänger einer Zusammenführungsversion"
@@ -7782,7 +7300,7 @@
 msgstr "[OPTION]... [DATEI]"
 
 msgid "revision to display"
-msgstr ""
+msgstr "Auszugebende Revision"
 
 msgid "[-r REV]"
 msgstr ""
@@ -7793,6 +7311,9 @@
 msgid "revision to merge"
 msgstr "Zusammenzuführende Revision"
 
+msgid "review revisions to merge (no merge is performed)"
+msgstr ""
+
 msgid "[-f] [[-r] REV]"
 msgstr ""
 
@@ -7805,8 +7326,8 @@
 msgid "show parents from the specified revision"
 msgstr "Zeigt die Vorgänger der angegeben Revision"
 
-msgid "hg parents [-r REV] [FILE]"
-msgstr ""
+msgid "[-r REV] [FILE]"
+msgstr "[-r REV] [DATEI]"
 
 msgid "[NAME]"
 msgstr ""
@@ -7833,31 +7354,31 @@
 msgstr ""
 
 msgid "[OPTION]... SOURCE... DEST"
-msgstr ""
+msgstr "[OPTION]... QUELLE... ZIEL"
 
 msgid "remerge all unresolved files"
-msgstr ""
+msgstr "Wiederhole automatische Zusammenführung"
 
 msgid "list state of files needing merge"
-msgstr ""
+msgstr "Zeigt Dateien, deren automatische Zusammenführung fehlschlug"
 
 msgid "mark files as resolved"
-msgstr ""
+msgstr "Markiert eine Datei als konfliktfrei"
 
 msgid "unmark files as resolved"
-msgstr ""
+msgstr "Markiert eine Datei als konfliktbehaftet"
 
 msgid "revert all changes when no arguments given"
-msgstr ""
+msgstr "Nimmt alle lokalen Änderungen zurück (ohne andere Parameter)"
 
 msgid "tipmost revision matching date"
 msgstr "der Spitze (tip) nächste Revision mit passendem Datum"
 
 msgid "revision to revert to"
-msgstr ""
+msgstr "Revision, bis zu der Änderungen zurückgenommen werden"
 
 msgid "do not save backup copies of files"
-msgstr ""
+msgstr "Keine Sicherheitskopien (.orig) anlegen"
 
 msgid "[OPTION]... [-r REV] [NAME]..."
 msgstr ""
@@ -7891,7 +7412,7 @@
 msgstr "Zu nutzende Web-Vorlagen"
 
 msgid "template style to use"
-msgstr ""
+msgstr "Zu verwendender Stil"
 
 msgid "use IPv6 in addition to IPv4"
 msgstr "Nutzt IPv6 zusätzlich zu IPv4"
@@ -7939,28 +7460,28 @@
 msgstr "Zeigt die Differenz zu einer Revision"
 
 msgid "replace existing tag"
-msgstr ""
+msgstr "Ersetzt bereits gesetztes Etikett"
 
 msgid "make the tag local"
-msgstr ""
+msgstr "Etikett wird nur lokal gesetzt"
 
 msgid "revision to tag"
-msgstr ""
+msgstr "Zu etikettierende Revision"
 
 msgid "remove a tag"
-msgstr ""
+msgstr "Entfernt ein Etikett"
 
 msgid "[-l] [-m TEXT] [-d DATE] [-u USER] [-r REV] NAME..."
-msgstr ""
+msgstr "[-l] [-m TEXT] [-d DATUM] [-u BENUTZER] [-r REV] NAME..."
 
 msgid "[-p]"
 msgstr ""
 
 msgid "update to new tip if changesets were unbundled"
-msgstr ""
+msgstr "Aktualisiert das Arbeitsverzeichnis auf die neue Spitze"
 
 msgid "[-u] FILE..."
-msgstr ""
+msgstr "[-u] DATEI..."
 
 msgid "overwrite locally modified files (no backup)"
 msgstr "Überschreibt lokale Modifikationen von Dateien (keine Sicherung)"
@@ -7968,6 +7489,10 @@
 msgid "[-C] [-d DATE] [[-r] REV]"
 msgstr "[-C] [-d DATUM] [[-r] REV]"
 
+#, python-format
+msgid "config error at %s:%d: '%s'"
+msgstr ""
+
 msgid "not found in manifest"
 msgstr "nicht im Manifest gefunden"
 
@@ -7997,10 +7522,6 @@
 msgid "  all copies found (* = to merge, ! = divergent):\n"
 msgstr "  alle Kopien gefunden (* = zusammenzuführen, ! = abweichend):\n"
 
-#, python-format
-msgid "   %s -> %s %s\n"
-msgstr ""
-
 msgid "  checking for directory renames\n"
 msgstr "  suche Umbenennungen von Verzeichnissen\n"
 
@@ -8012,129 +7533,139 @@
 msgid "  file %s -> %s\n"
 msgstr "  Datei %s -> %s\n"
 
+msgid "working directory state appears damaged!"
+msgstr "Status des Arbeitsverzeichnis scheint beschädigt zu sein!"
+
 #, python-format
 msgid "'\\n' and '\\r' disallowed in filenames: %r"
 msgstr "'\\n' und '\\r' sind nicht in Dateinamen erlaubt: %r"
 
 #, python-format
 msgid "directory %r already in dirstate"
-msgstr ""
+msgstr "Verzeichnis %r ist bereits im dirstate"
 
 #, python-format
 msgid "file %r in dirstate clashes with %r"
-msgstr ""
+msgstr "Datei %r im dirstate steht im Konflikt mit %r"
 
 #, python-format
 msgid "not in dirstate: %s\n"
-msgstr ""
+msgstr "nicht im dirstate: %s\n"
+
+msgid "unknown"
+msgstr "Unbekannt"
 
 msgid "character device"
-msgstr ""
+msgstr "Zeichenorientiertes Gerät"
 
 msgid "block device"
-msgstr ""
+msgstr "Blockorientiertes Gerät"
 
 msgid "fifo"
-msgstr ""
+msgstr "FIFO"
 
 msgid "socket"
-msgstr ""
+msgstr "Sockel"
 
 msgid "directory"
-msgstr ""
-
-#, python-format
-msgid "%s: unsupported file type (type is %s)\n"
-msgstr ""
+msgstr "Verzeichnis"
+
+#, python-format
+msgid "unsupported file type (type is %s)"
+msgstr "nicht unterstützter Dateityp (Typ %s)"
 
 #, python-format
 msgid "abort: %s\n"
-msgstr ""
+msgstr "Abbruch: %s\n"
 
 #, python-format
 msgid ""
 "hg: command '%s' is ambiguous:\n"
 "    %s\n"
 msgstr ""
+"hg: Kommando '%s' ist mehrdeutig:\n"
+"    %s\n"
+
+#, python-format
+msgid "hg: %s\n"
+msgstr ""
 
 #, python-format
 msgid "timed out waiting for lock held by %s"
-msgstr ""
+msgstr "Zeitüberschreitung beim Warten auf %s"
 
 #, python-format
 msgid "lock held by %s"
-msgstr ""
+msgstr "Zur Zeit von %s reserviert"
 
 #, python-format
 msgid "abort: %s: %s\n"
-msgstr ""
+msgstr "Abbruch: %s: %s\n"
 
 #, python-format
 msgid "abort: could not lock %s: %s\n"
-msgstr ""
+msgstr "Abbruch: Kann %s nicht reservieren: %s\n"
 
 #, python-format
 msgid "hg %s: %s\n"
 msgstr ""
 
 #, python-format
-msgid "hg: %s\n"
-msgstr ""
-
-#, python-format
 msgid "abort: %s!\n"
-msgstr ""
+msgstr "Abbruch: %s!\n"
 
 #, python-format
 msgid "abort: %s"
-msgstr ""
+msgstr "Abbruch: %s"
 
 msgid " empty string\n"
-msgstr ""
+msgstr " leere Zeichenkette\n"
 
 msgid "killed!\n"
-msgstr ""
+msgstr " getötet!\n"
 
 #, python-format
 msgid "hg: unknown command '%s'\n"
-msgstr ""
+msgstr "hg: unbekanntes Kommando '%s'\n"
 
 #, python-format
 msgid "abort: could not import module %s!\n"
-msgstr ""
+msgstr "Abbruch: Kann Modul %s nicht importieren!\n"
 
 msgid "(did you forget to compile extensions?)\n"
-msgstr ""
+msgstr "(Erweiterungen nicht compiliert?)\n"
 
 msgid "(is your Python install correct?)\n"
-msgstr ""
+msgstr "(Python Installation korrekt?)\n"
 
 #, python-format
 msgid "abort: error: %s\n"
-msgstr ""
+msgstr "Abbruch: Fehler: %s\n"
 
 msgid "broken pipe\n"
-msgstr ""
+msgstr "Datenübergabe unterbrochen\n"
 
 msgid "interrupted!\n"
-msgstr ""
+msgstr "unterbrochen!\n"
 
 msgid ""
 "\n"
 "broken pipe\n"
 msgstr ""
+"\n"
+"Datenübergabe unterbrochen\n"
 
 msgid "abort: out of memory\n"
-msgstr ""
+msgstr "Abbruch: Unzureichender Speicherplatz\n"
 
 msgid "** unknown exception encountered, details follow\n"
-msgstr ""
+msgstr "** Unbekannter Fehler, Details folgen\n"
 
 msgid "** report bug details to http://www.selenic.com/mercurial/bts\n"
-msgstr ""
+msgstr "** Problemdetails bitte bei http://www.selenic.com/mercurial/bts\n"
 
 msgid "** or mercurial@selenic.com\n"
-msgstr ""
+msgstr "** oder mercurial@selenic.com melden\n"
 
 #, python-format
 msgid "** Mercurial Distributed SCM (version %s)\n"
@@ -8142,26 +7673,44 @@
 
 #, python-format
 msgid "** Extensions loaded: %s\n"
-msgstr ""
+msgstr "** Erweiterungen geladen: %s\n"
+
+#, python-format
+msgid "no definition for alias '%s'\n"
+msgstr ""
+
+#, python-format
+msgid "alias '%s' resolves to unknown command '%s'\n"
+msgstr "Alias '%s' verweist auf unbekannten Befehl '%s'\n"
+
+#, python-format
+msgid "alias '%s' resolves to ambiguous command '%s'\n"
+msgstr ""
+
+#, python-format
+msgid "alias '%s' shadows command\n"
+msgstr "Alias '%s' verdeckt einen Befehl\n"
 
 #, python-format
 msgid "malformed --config option: %s"
-msgstr ""
+msgstr "missgebildete --config Option: %s"
 
 #, python-format
 msgid "extension '%s' overrides commands: %s\n"
-msgstr ""
+msgstr "Erweiterung '%s' überschreibt die Kommandos: %s\n"
 
 msgid "Option --config may not be abbreviated!"
-msgstr ""
+msgstr "Option --config kann nicht abgekürzt werden!"
 
 msgid "Option --cwd may not be abbreviated!"
-msgstr ""
+msgstr "Option --cwd kann nicht abgekürzt werden!"
 
 msgid ""
 "Option -R has to be separated from other options (i.e. not -qR) and --"
 "repository may only be abbreviated as --repo!"
 msgstr ""
+"Option -R muss von anderen Optionen getrennt werden (also z.B. nicht -qR) "
+"und --repository kann nur als --repo abgekürzt werden!"
 
 #, python-format
 msgid "Time: real %.3f secs (user %.3f+%.3f sys %.3f+%.3f)\n"
@@ -8169,10 +7718,10 @@
 
 #, python-format
 msgid "repository '%s' is not local"
-msgstr ""
+msgstr "Projektarchiv '%s' is nicht lokal"
 
 msgid "invalid arguments"
-msgstr ""
+msgstr "ungültige Parameter"
 
 #, python-format
 msgid "unrecognized profiling format '%s' - Ignored\n"
@@ -8217,7 +7766,10 @@
 "keep (l)ocal or take (o)ther?"
 msgstr ""
 
-msgid "[lo]"
+msgid "&Local"
+msgstr ""
+
+msgid "&Other"
 msgstr ""
 
 msgid "l"
@@ -8244,7 +7796,10 @@
 "was merge successful (yn)?"
 msgstr ""
 
-msgid "[yn]"
+msgid "&No"
+msgstr ""
+
+msgid "&Yes"
 msgstr ""
 
 msgid "n"
@@ -8265,7 +7820,6 @@
 msgid "Date Formats"
 msgstr "Datumsformate"
 
-
 msgid ""
 "\n"
 "    Some commands allow the user to specify a date, e.g.:\n"
@@ -8538,7 +8092,6 @@
 msgid "Specifying Single Revisions"
 msgstr "Angabe Einzelner Revisionen"
 
-
 msgid ""
 "\n"
 "    Mercurial supports several ways to specify individual revisions.\n"
@@ -8613,7 +8166,6 @@
 msgid "Specifying Multiple Revisions"
 msgstr "Angabe Mehrerer Revisionen"
 
-
 msgid ""
 "\n"
 "    When Mercurial accepts more than one revision, they may be\n"
@@ -8756,9 +8308,11 @@
 "          the given date/time and the current date/time.\n"
 "    - basename: Any text. Treats the text as a path, and returns the\n"
 "          last component of the path after splitting by the path\n"
-"          separator (ignoring trailing seprators). For example,\n"
+"          separator (ignoring trailing separators). For example,\n"
 "          \"foo/bar/baz\" becomes \"baz\" and \"foo/bar//\" becomes \"bar"
 "\".\n"
+"    - stripdir: Treat the text as path and strip a directory level, if\n"
+"          possible. For example, \"foo\" and \"foo/bar\" becomes \"foo\".\n"
 "    - date: Date. Returns a date in a Unix date format, including\n"
 "          the timezone: \"Mon Sep 04 15:13:13 2006 0700\".\n"
 "    - domain: Any text. Finds the first string that looks like an\n"
@@ -8772,9 +8326,11 @@
 "    - fill68: Any text. Wraps the text to fit in 68 columns.\n"
 "    - fill76: Any text. Wraps the text to fit in 76 columns.\n"
 "    - firstline: Any text. Returns the first line of text.\n"
+"    - nonempty: Any text. Returns '(none)' if the string is empty.\n"
 "    - hgdate: Date. Returns the date as a pair of numbers:\n"
 "          \"1157407993 25200\" (Unix timestamp, timezone offset).\n"
 "    - isodate: Date. Returns the date in ISO 8601 format.\n"
+"    - localdate: Date. Converts a date to local date.\n"
 "    - obfuscate: Any text. Returns the input text rendered as a\n"
 "          sequence of XML entities.\n"
 "    - person: Any text. Returns the text before an email address.\n"
@@ -9162,6 +8718,10 @@
 msgstr "Tag '%s' verweist auf unbekannten Knoten"
 
 #, python-format
+msgid "working directory has unknown parent '%s'!"
+msgstr "Arbeitsverzeichnis hat unbekannte Vaterversion '%s'!"
+
+#, python-format
 msgid "unknown revision '%s'"
 msgstr "Unbekannte Revision '%s'"
 
@@ -9214,28 +8774,25 @@
 "Eine Zusammenführung kann nicht teilweise versioniert werden (Gib keine "
 "Dateien oder Muster an)"
 
-#, python-format
-msgid "%s not tracked!\n"
-msgstr "%s nicht versioniert!\n"
+msgid "file not found!"
+msgstr "Datei nicht gefunden!"
+
+msgid "no match under directory!"
+msgstr "Kein Treffer unterhalb des Verzeichnisses!"
+
+msgid "file not tracked!"
+msgstr "Datei wird nicht nachverfolgt!"
+
+msgid "nothing changed\n"
+msgstr "Keine Änderung\n"
 
 msgid "unresolved merge conflicts (see hg resolve)"
 msgstr "Ungelöster Zusammenführungs-Konflikt (siehe hg resolve)"
 
-msgid "nothing changed\n"
-msgstr "Keine Änderung\n"
-
 #, python-format
 msgid "trouble committing %s!\n"
 msgstr "Problem bei Erstellen der neuen Version von %s!\n"
 
-msgid "HG: Enter commit message.  Lines beginning with 'HG:' are removed."
-msgstr ""
-"HG: Bitte gib eine Versions-Meldung ein. Zeilen beginnend mit 'HG:' werden "
-"entfernt."
-
-msgid "empty commit message"
-msgstr "Leere Versions-Meldung"
-
 #, python-format
 msgid "%s does not exist!\n"
 msgstr "%s existiert nicht!\n"
@@ -9267,6 +8824,10 @@
 msgstr "%s existiert noch!\n"
 
 #, python-format
+msgid "%s not tracked!\n"
+msgstr "%s nicht versioniert!\n"
+
+#, python-format
 msgid "%s not removed!\n"
 msgstr "%s nicht entfernt!\n"
 
@@ -9343,6 +8904,10 @@
 "Teilweise Holen kann nicht ausgeführt werden, da das andere Projektarchiv "
 "keine Teilmengen von Änderungsgruppen unterstützt."
 
+#, python-format
+msgid "abort: push creates new remote branch '%s'!\n"
+msgstr "Abbruch: Ausliefern erzeugt neuen entfernten Zweig '%s'!\n"
+
 msgid "abort: push creates new remote heads!\n"
 msgstr "Abbruch: Ausliefern erzeugt neue entfernte Köpfe!\n"
 
@@ -9464,9 +9029,6 @@
 msgid "invalid local address: %s"
 msgstr ""
 
-msgid "'\\n' and '\\r' disallowed in filenames"
-msgstr ""
-
 #, python-format
 msgid "failed to remove %s from manifest"
 msgstr ""
@@ -9502,13 +9064,25 @@
 "(n)one, e(x)ec or sym(l)ink?"
 msgstr ""
 
+msgid "&None"
+msgstr "&Nichts"
+
+msgid "E&xec"
+msgstr ""
+
+msgid "Sym&link"
+msgstr ""
+
 #, python-format
 msgid ""
 " local changed %s which remote deleted\n"
 "use (c)hanged version or (d)elete?"
 msgstr ""
 
-msgid "[cd]"
+msgid "&Changed"
+msgstr ""
+
+msgid "&Delete"
 msgstr ""
 
 msgid "c"
@@ -9520,6 +9094,9 @@
 "use (c)hanged version or leave (d)eleted?"
 msgstr ""
 
+msgid "&Deleted"
+msgstr ""
+
 #, python-format
 msgid "preserving %s for resolve of %s\n"
 msgstr ""
@@ -9550,6 +9127,11 @@
 msgid "nothing to merge (use 'hg update' or check 'hg heads')"
 msgstr ""
 
+msgid "outstanding uncommitted changes (use 'hg status' to list changes)"
+msgstr ""
+"Ausstehende nicht versionierte Änderungen (Nutze 'hg status' zur Auflistung "
+"der Änderungen)"
+
 msgid "crosses branches (use 'hg merge' or 'hg update -C' to discard changes)"
 msgstr ""
 
@@ -9595,7 +9177,11 @@
 msgstr ""
 
 #, python-format
-msgid "Hunk #%d succeeded at %d %s(offset %d %s).\n"
+msgid "Hunk #%d succeeded at %d %s(offset %d line).\n"
+msgstr ""
+
+#, python-format
+msgid "Hunk #%d succeeded at %d %s(offset %d lines).\n"
 msgstr ""
 
 #, python-format
@@ -9764,78 +9350,52 @@
 msgstr ""
 
 #, python-format
+msgid "error expanding '%s%%%s'"
+msgstr "Fehler bei Auflösung von '%s%%%s'"
+
+#, python-format
+msgid "unknown filter '%s'"
+msgstr "Unbekannter Filter '%s'"
+
+#, python-format
 msgid "style not found: %s"
 msgstr ""
 
 #, python-format
-msgid "%s:%s: parse error"
-msgstr ""
-
-#, python-format
 msgid "template file %s: %s"
 msgstr ""
 
-#, python-format
-msgid "Error expanding '%s%%%s'"
-msgstr ""
-
-msgid "transaction abort!\n"
+msgid "cannot use transaction when it is already committed/aborted"
 msgstr ""
 
 #, python-format
 msgid "failed to truncate %s\n"
 msgstr ""
 
+msgid "transaction abort!\n"
+msgstr ""
+
 msgid "rollback completed\n"
 msgstr ""
 
+msgid "rollback failed - please run hg recover\n"
+msgstr "Rücksetzen fehlgeschlagen - bitte führe hg recover aus\n"
+
 #, python-format
 msgid "Not trusting file %s from untrusted user %s, group %s\n"
 msgstr "Nicht vertrauenswürdige Datei %s vom Nutzer %s, Gruppe %s\n"
 
 #, python-format
-msgid ""
-"Failed to parse %s\n"
-"%s"
-msgstr ""
-"Fehler beim Parsen von %s\n"
-"%s"
-
-#, python-format
 msgid "Ignored: %s\n"
 msgstr "Ignoriere: %s\n"
 
 #, python-format
-msgid "unable to open %s: %s"
-msgstr "Fehler beim Öffnen %s: %s"
-
-#, python-format
-msgid ""
-"failed to parse %s\n"
-"%s"
-msgstr ""
-"Fehler beim Parsen von %s\n"
-"%s"
-
-#, python-format
-msgid ""
-"Error in configuration section [%s] parameter '%s':\n"
-"%s"
-msgstr ""
-"Fehler in Konfiguration Abschnitt [%s] Eintrag '%s':\n"
-"%s"
-
-#, python-format
-msgid "Ignoring untrusted configuration option %s.%s = %s\n"
+msgid "ignoring untrusted configuration option %s.%s = %s\n"
 msgstr "Ignoriere nicht vertrauenswürdigen Konfigurationseintrag %s.%s = %s\n"
 
 #, python-format
-msgid ""
-"Error in configuration section [%s]:\n"
-"%s"
-msgstr ""
-"Fehler bei Konfigurationsabschnitt [%s]:\n"
-"%s"
+msgid "%s.%s not a boolean ('%s')"
+msgstr "%s.%s ist kein bool'scher Wert ('%s')"
 
 msgid "enter a commit username:"
 msgstr "Gib einen Benutzernamen für die Version ein:"
@@ -9881,14 +9441,14 @@
 msgstr "Benutzer:"
 
 #, python-format
+msgid "http auth: user %s, password %s\n"
+msgstr "HTTP Auth: Benutzer %s, Passwort%s\n"
+
+#, python-format
 msgid "proxying through http://%s:%s\n"
 msgstr "Verwende Proxy http://%s:%s\n"
 
 #, python-format
-msgid "http auth: user %s, password %s\n"
-msgstr "HTTP Auth: Benutzer %s, Passwort%s\n"
-
-#, python-format
 msgid "command '%s' failed: %s"
 msgstr "Befehl '%s' fehlgeschlagen: %s"
 
@@ -10035,6 +9595,10 @@
 msgid "checking manifests\n"
 msgstr ""
 
+#, python-format
+msgid "%s not in changesets"
+msgstr "%s nicht in den Änderungssätzen vorhanden"
+
 msgid "file without name in manifest"
 msgstr ""
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/i18n/el.po	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,8779 @@
+# Greek translations for Mercurial
+# Ελληνική μετάφραση των μηνυμάτων του Mercurial
+#
+# Copyright (C) 2009 Matt Mackall και άλλοι
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Mercurial\n"
+"Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n"
+"POT-Creation-Date: 2009-06-21 04:21+0300\n"
+"PO-Revision-Date: 2009-02-13 16:27+0200\n"
+"Last-Translator: <keramida@ceid.upatras.gr>\n"
+"Language-Team: Greek\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: pygettext.py 1.5\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#, python-format
+msgid " (default: %s)"
+msgstr " (προκαθορισμένο: %s)"
+
+msgid "OPTIONS"
+msgstr "ΕΠΙΛΟΓΕΣ"
+
+msgid "COMMANDS"
+msgstr "ΕΝΤΟΛΕΣ"
+
+msgid "    options:\n"
+msgstr "    επιλογές:\n"
+
+#, python-format
+msgid ""
+"    aliases: %s\n"
+"\n"
+msgstr ""
+"    ψευδώνυμα: %s\n"
+"\n"
+
+#, python-format
+msgid "acl: %s not enabled\n"
+msgstr "acl: %s ανενεργό\n"
+
+#, python-format
+msgid "acl: %s enabled, %d entries for user %s\n"
+msgstr "acl: %s ενεργό, %d εγγραφές για τον χρήστη %s\n"
+
+#, python-format
+msgid "config error - hook type \"%s\" cannot stop incoming changesets"
+msgstr ""
+"πρόβλημα ρυθμίσεων - το hook \"%s\" δε μπορεί να εμποδίσει εισερχόμενες "
+"αλλαγές"
+
+#, python-format
+msgid "acl: changes have source \"%s\" - skipping\n"
+msgstr "acl: αλλαγές από \"%s\" - εξαίρεση αλλαγών\n"
+
+#, python-format
+msgid "acl: user %s denied on %s\n"
+msgstr "acl: ο χρήστης %s δεν επιτρέπεται να κάνει αλλαγές στο %s\n"
+
+#, python-format
+msgid "acl: access denied for changeset %s"
+msgstr "acl: η πρόσβαση για την αλλαγή %s δεν επιτρέπεται"
+
+#, python-format
+msgid "acl: user %s not allowed on %s\n"
+msgstr "acl: ο χρήστης %s δεν επιτρέπεται στο %s\n"
+
+#, python-format
+msgid "acl: allowing changeset %s\n"
+msgstr "acl: αποδοχή αλλαγής %s\n"
+
+msgid ""
+"Mercurial bookmarks\n"
+"\n"
+"Mercurial bookmarks are local moveable pointers to changesets. Every\n"
+"bookmark points to a changeset identified by its hash. If you commit a\n"
+"changeset that is based on a changeset that has a bookmark on it, the\n"
+"bookmark is forwarded to the new changeset.\n"
+"\n"
+"It is possible to use bookmark names in every revision lookup (e.g. hg\n"
+"merge, hg update).\n"
+"\n"
+"The bookmark extension offers the possiblity to have a more git-like\n"
+"experience by adding the following configuration option to your .hgrc:\n"
+"\n"
+"[bookmarks]\n"
+"track.current = True\n"
+"\n"
+"This will cause bookmarks to track the bookmark that you are currently\n"
+"on, and just updates it. This is similar to git's approach to\n"
+"branching.\n"
+msgstr ""
+
+msgid ""
+"Mercurial bookmarks\n"
+"\n"
+"    Bookmarks are pointers to certain commits that move when\n"
+"    commiting. Bookmarks are local. They can be renamed, copied and\n"
+"    deleted. It is possible to use bookmark names in 'hg merge' and\n"
+"    'hg update' to merge and update respectively to a given bookmark.\n"
+"\n"
+"    You can use 'hg bookmark NAME' to set a bookmark on the working\n"
+"    directory's parent revision with the given name. If you specify\n"
+"    a revision using -r REV (where REV may be an existing bookmark),\n"
+"    the bookmark is assigned to that revision.\n"
+"    "
+msgstr ""
+
+msgid "a bookmark of this name does not exist"
+msgstr "δεν υπάρχει σελιδοδείκτης με αυτό το όνομα"
+
+msgid "a bookmark of the same name already exists"
+msgstr "υπάρχει ήδη σελιδοδείκτης με αυτό το όνομα"
+
+msgid "new bookmark name required"
+msgstr "απαιτείται ένα όνομα νέου σελιδοδείκτη"
+
+msgid "bookmark name required"
+msgstr "απαιτείται όνομα σελιδοδείκτη"
+
+msgid "bookmark name cannot contain newlines"
+msgstr ""
+"το όνομα ενός σελιδοδείκτη δεν επιτρέπεται να περιέχει χαρακτήρεςαλλαγής "
+"γραμμής"
+
+msgid "a bookmark cannot have the name of an existing branch"
+msgstr ""
+"οι σελιδοδείκτες δεν επιτρέπεται να έχουν το όνομα ενός υπάρχοντος κλάδου"
+
+msgid "force"
+msgstr ""
+
+msgid "revision"
+msgstr "αλλαγή"
+
+msgid "delete a given bookmark"
+msgstr "διαγραφή ενός σελιδοδείκτη"
+
+msgid "rename a given bookmark"
+msgstr "μετονομασία ενός σελιδοδείκτη"
+
+#, fuzzy
+msgid "hg bookmarks [-f] [-d] [-m NAME] [-r REV] [NAME]"
+msgstr "hg bookmarks [-d] [-m ΟΝΟΜΑ] [-r ΟΝΟΜΑ] [ΟΝΟΜΑ]"
+
+msgid ""
+"Bugzilla integration\n"
+"\n"
+"This hook extension adds comments on bugs in Bugzilla when changesets\n"
+"that refer to bugs by Bugzilla ID are seen. The hook does not change\n"
+"bug status.\n"
+"\n"
+"The hook updates the Bugzilla database directly. Only Bugzilla\n"
+"installations using MySQL are supported.\n"
+"\n"
+"The hook relies on a Bugzilla script to send bug change notification\n"
+"emails. That script changes between Bugzilla versions; the\n"
+"'processmail' script used prior to 2.18 is replaced in 2.18 and\n"
+"subsequent versions by 'config/sendbugmail.pl'. Note that these will\n"
+"be run by Mercurial as the user pushing the change; you will need to\n"
+"ensure the Bugzilla install file permissions are set appropriately.\n"
+"\n"
+"Configuring the extension:\n"
+"\n"
+"    [bugzilla]\n"
+"\n"
+"    host       Hostname of the MySQL server holding the Bugzilla\n"
+"               database.\n"
+"    db         Name of the Bugzilla database in MySQL. Default 'bugs'.\n"
+"    user       Username to use to access MySQL server. Default 'bugs'.\n"
+"    password   Password to use to access MySQL server.\n"
+"    timeout    Database connection timeout (seconds). Default 5.\n"
+"    version    Bugzilla version. Specify '3.0' for Bugzilla versions\n"
+"               3.0 and later, '2.18' for Bugzilla versions from 2.18\n"
+"               and '2.16' for versions prior to 2.18.\n"
+"    bzuser     Fallback Bugzilla user name to record comments with, if\n"
+"               changeset committer cannot be found as a Bugzilla user.\n"
+"    bzdir      Bugzilla install directory. Used by default notify.\n"
+"               Default '/var/www/html/bugzilla'.\n"
+"    notify     The command to run to get Bugzilla to send bug change\n"
+"               notification emails. Substitutes from a map with 3\n"
+"               keys, 'bzdir', 'id' (bug id) and 'user' (committer\n"
+"               bugzilla email). Default depends on version; from 2.18\n"
+"               it is \"cd %(bzdir)s && perl -T contrib/sendbugmail.pl\n"
+"               %(id)s %(user)s\".\n"
+"    regexp     Regular expression to match bug IDs in changeset commit\n"
+"               message. Must contain one \"()\" group. The default\n"
+"               expression matches 'Bug 1234', 'Bug no. 1234', 'Bug\n"
+"               number 1234', 'Bugs 1234,5678', 'Bug 1234 and 5678' and\n"
+"               variations thereof. Matching is case insensitive.\n"
+"    style      The style file to use when formatting comments.\n"
+"    template   Template to use when formatting comments. Overrides\n"
+"               style if specified. In addition to the usual Mercurial\n"
+"               keywords, the extension specifies:\n"
+"                   {bug}       The Bugzilla bug ID.\n"
+"                   {root}      The full pathname of the Mercurial\n"
+"                               repository.\n"
+"                   {webroot}   Stripped pathname of the Mercurial\n"
+"                               repository.\n"
+"                   {hgweb}     Base URL for browsing Mercurial\n"
+"                               repositories.\n"
+"               Default 'changeset {node|short} in repo {root} refers '\n"
+"                       'to bug {bug}.\\ndetails:\\n\\t{desc|tabindent}'\n"
+"    strip      The number of slashes to strip from the front of {root}\n"
+"               to produce {webroot}. Default 0.\n"
+"    usermap    Path of file containing Mercurial committer ID to\n"
+"               Bugzilla user ID mappings. If specified, the file\n"
+"               should contain one mapping per line,\n"
+"               \"committer\"=\"Bugzilla user\". See also the [usermap]\n"
+"               section.\n"
+"\n"
+"    [usermap]\n"
+"    Any entries in this section specify mappings of Mercurial\n"
+"    committer ID to Bugzilla user ID. See also [bugzilla].usermap.\n"
+"    \"committer\"=\"Bugzilla user\"\n"
+"\n"
+"    [web]\n"
+"    baseurl    Base URL for browsing Mercurial repositories. Reference\n"
+"               from templates as {hgweb}.\n"
+"\n"
+"Activating the extension:\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"
+"Example configuration:\n"
+"\n"
+"This example configuration is for a collection of Mercurial\n"
+"repositories in /var/local/hg/repos/ used with a local Bugzilla 3.2\n"
+"installation in /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=Changeset {node|short} in {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"
+"Commits add a comment to the Bugzilla bug record of the form:\n"
+"\n"
+"    Changeset 3b16791d6642 in repository-name.\n"
+"    http://dev.domain.com/hg/repository-name/rev/3b16791d6642\n"
+"\n"
+"    Changeset commit comment. Bug 1234.\n"
+msgstr ""
+
+#, python-format
+msgid "connecting to %s:%s as %s, password %s\n"
+msgstr "σύνδεση στο %s:%s ως %s, κωδικός %s\n"
+
+#, python-format
+msgid "query: %s %s\n"
+msgstr "αίτηση: %s %s\n"
+
+#, python-format
+msgid "failed query: %s %s\n"
+msgstr "αποτυχία αίτησης: %s %s\n"
+
+msgid "unknown database schema"
+msgstr "άγνωστο σχήμα βάσης"
+
+#, python-format
+msgid "bug %d already knows about changeset %s\n"
+msgstr "το πρόβλημα %d έχει ενημερωθεί ήδη για την αλλαγή %s\n"
+
+msgid "telling bugzilla to send mail:\n"
+msgstr ""
+
+#, python-format
+msgid "  bug %s\n"
+msgstr "  πρόβλημα %s\n"
+
+#, python-format
+msgid "running notify command %s\n"
+msgstr ""
+
+#, python-format
+msgid "bugzilla notify command %s"
+msgstr ""
+
+msgid "done\n"
+msgstr "ολοκληρώθηκε\n"
+
+#, python-format
+msgid "looking up user %s\n"
+msgstr "αναζήτηση χρήστη %s\n"
+
+#, python-format
+msgid "cannot find bugzilla user id for %s"
+msgstr "δε βρέθηκε χρήστης bugzilla με το αναγνωριστικό %s"
+
+#, python-format
+msgid "cannot find bugzilla user id for %s or %s"
+msgstr "δε βρέθηκε χρήστης bugzilla με το αναγνωριστικό %s ή %s"
+
+#, python-format
+msgid "bugzilla version %s not supported"
+msgstr "η έκδοση %s του bugzilla δεν υποστηρίζεται"
+
+msgid ""
+"changeset {node|short} in repo {root} refers to bug {bug}.\n"
+"details:\n"
+"\t{desc|tabindent}"
+msgstr ""
+
+#, python-format
+msgid "python mysql support not available: %s"
+msgstr "δεν έχει εγκατασταθεί η υποστήριξη mysql για την python: %s"
+
+#, python-format
+msgid "hook type %s does not pass a changeset id"
+msgstr "τα hooks τύπου %s δεν περνούν αναγνωριστικό αλλαγής"
+
+#, python-format
+msgid "database error: %s"
+msgstr "σφάλμα βάσης δεδομένων: %s"
+
+msgid ""
+"show the children of the given or working directory revision\n"
+"\n"
+"    Print the children of the working directory's revisions. If a\n"
+"    revision is given via -r/--rev, the children of that revision will\n"
+"    be printed. If a file argument is given, revision in which the\n"
+"    file was last changed (after the working directory revision or the\n"
+"    argument to --rev if given) is printed.\n"
+"    "
+msgstr ""
+
+#, fuzzy
+msgid "show children of the specified revision"
+msgstr "lav statistik for de specificerede revisioner"
+
+msgid "hg children [-r REV] [FILE]"
+msgstr "hg children [-r ΕΚΔΟΣΗ] [ΑΡΧΕΙΟ]"
+
+msgid "command to show certain statistics about revision history"
+msgstr ""
+"εντολή η οποία δείχνει κάποια στατιστικά για το ιστορικό του αποθετηρίου"
+
+#, python-format
+msgid "Revision %d is a merge, ignoring...\n"
+msgstr ""
+
+#, python-format
+msgid "generating stats: %d%%"
+msgstr ""
+
+#, fuzzy
+msgid ""
+"histogram of changes to the repository\n"
+"\n"
+"    This command will display a histogram representing the number\n"
+"    of changed lines or revisions, grouped according to the given\n"
+"    template. The default template will group changes by author.\n"
+"    The --dateformat option may be used to group the results by\n"
+"    date instead.\n"
+"\n"
+"    Statistics are based on the number of changed lines, or\n"
+"    alternatively the number of matching revisions if the\n"
+"    --changesets option is specified.\n"
+"\n"
+"    Examples:\n"
+"\n"
+"      # display count of changed lines for every committer\n"
+"      hg churn -t '{author|email}'\n"
+"\n"
+"      # display daily activity graph\n"
+"      hg churn -f '%H' -s -c\n"
+"\n"
+"      # display activity of developers by month\n"
+"      hg churn -f '%Y-%m' -s -c\n"
+"\n"
+"      # display count of lines changed in every year\n"
+"      hg churn -f '%Y' -s\n"
+"\n"
+"    It is possible to map alternate email addresses to a main address\n"
+"    by providing a file using the following format:\n"
+"    \n"
+"    <alias email> <actual email>\n"
+"\n"
+"    Such a file may be specified with the --aliases option, otherwise a\n"
+"    .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>"
+
+#, python-format
+msgid "assuming %i character terminal\n"
+msgstr ""
+
+msgid "count rate for the specified revision or range"
+msgstr ""
+
+#, fuzzy
+msgid "count rate for revisions matching date spec"
+msgstr ""
+
+msgid "template to group changesets"
+msgstr ""
+
+msgid "strftime-compatible format for grouping by date"
+msgstr ""
+
+msgid "count rate by number of changesets"
+msgstr ""
+
+msgid "sort by key (default: sort by count)"
+msgstr ""
+
+msgid "file with email aliases"
+msgstr ""
+
+msgid "show progress"
+msgstr ""
+
+msgid "hg churn [-d DATE] [-r REV] [--aliases FILE] [--progress] [FILE]"
+msgstr ""
+
+msgid ""
+"add color output to status, qseries, and diff-related commands\n"
+"\n"
+"This extension modifies the status command to add color to its output\n"
+"to reflect file status, the qseries command to add color to reflect\n"
+"patch status (applied, unapplied, missing), and to diff-related\n"
+"commands to highlight additions, removals, diff headers, and trailing\n"
+"whitespace.\n"
+"\n"
+"Other effects in addition to color, like bold and underlined text, are\n"
+"also available. Effects are rendered with the ECMA-48 SGR control\n"
+"function (aka ANSI escape codes). This module also provides the\n"
+"render_text function, which can be used to add effects to any text.\n"
+"\n"
+"To enable this extension, add this to your .hgrc file:\n"
+"[extensions]\n"
+"color =\n"
+"\n"
+"Default effects may be overridden from the .hgrc file:\n"
+"\n"
+"[color]\n"
+"status.modified = blue bold underline red_background\n"
+"status.added = green bold\n"
+"status.removed = red bold blue_background\n"
+"status.deleted = cyan bold underline\n"
+"status.unknown = magenta bold underline\n"
+"status.ignored = black bold\n"
+"\n"
+"# 'none' turns off all effects\n"
+"status.clean = none\n"
+"status.copied = none\n"
+"\n"
+"qseries.applied = blue bold underline\n"
+"qseries.unapplied = black bold\n"
+"qseries.missing = red bold\n"
+"\n"
+"diff.diffline = bold\n"
+"diff.extended = cyan bold\n"
+"diff.file_a = red bold\n"
+"diff.file_b = green bold\n"
+"diff.hunk = magenta\n"
+"diff.deleted = red\n"
+"diff.inserted = green\n"
+"diff.changed = white\n"
+"diff.trailingwhitespace = bold red_background\n"
+msgstr ""
+
+msgid "when to colorize (always, auto, or never)"
+msgstr ""
+
+msgid "don't colorize output"
+msgstr ""
+
+msgid "converting foreign VCS repositories to Mercurial"
+msgstr ""
+
+msgid ""
+"convert a foreign SCM repository to a Mercurial one.\n"
+"\n"
+"    Accepted source formats [identifiers]:\n"
+"    - Mercurial [hg]\n"
+"    - CVS [cvs]\n"
+"    - Darcs [darcs]\n"
+"    - git [git]\n"
+"    - Subversion [svn]\n"
+"    - Monotone [mtn]\n"
+"    - GNU Arch [gnuarch]\n"
+"    - Bazaar [bzr]\n"
+"    - Perforce [p4]\n"
+"\n"
+"    Accepted destination formats [identifiers]:\n"
+"    - Mercurial [hg]\n"
+"    - Subversion [svn] (history on branches is not preserved)\n"
+"\n"
+"    If no revision is given, all revisions will be converted.\n"
+"    Otherwise, convert will only import up to the named revision\n"
+"    (given in a format understood by the source).\n"
+"\n"
+"    If no destination directory name is specified, it defaults to the\n"
+"    basename of the source with '-hg' appended. If the destination\n"
+"    repository doesn't exist, it will be created.\n"
+"\n"
+"    By default, all sources except Mercurial will use\n"
+"    --branchsort. Mercurial uses --sourcesort to preserve original\n"
+"    revision numbers order. Sort modes have the following effects:\n"
+"      --branchsort: convert from parent to child revision when\n"
+"        possible, which means branches are usually converted one after\n"
+"        the other. It generates more compact repositories.\n"
+"      --datesort: sort revisions by date. Converted repositories have\n"
+"        good-looking changelogs but are often an order of magnitude\n"
+"        larger than the same ones generated by --branchsort.\n"
+"      --sourcesort: try to preserve source revisions order, only\n"
+"        supported by Mercurial sources.\n"
+"\n"
+"    If <REVMAP> isn't given, it will be put in a default location\n"
+"    (<dest>/.hg/shamap by default). The <REVMAP> is a simple text file\n"
+"    that maps each source commit ID to the destination ID for that\n"
+"    revision, like so:\n"
+"    <source ID> <destination ID>\n"
+"\n"
+"    If the file doesn't exist, it's automatically created. It's\n"
+"    updated on each commit copied, so convert-repo can be interrupted\n"
+"    and can be run repeatedly to copy new commits.\n"
+"\n"
+"    The [username mapping] file is a simple text file that maps each\n"
+"    source commit author to a destination commit author. It is handy\n"
+"    for source SCMs that use unix logins to identify authors (eg:\n"
+"    CVS). One line per author mapping and the line format is:\n"
+"    srcauthor=whatever string you want\n"
+"\n"
+"    The filemap is a file that allows filtering and remapping of files\n"
+"    and directories. Comment lines start with '#'. Each line can\n"
+"    contain one of the following directives:\n"
+"\n"
+"      include path/to/file\n"
+"\n"
+"      exclude path/to/file\n"
+"\n"
+"      rename from/file to/file\n"
+"\n"
+"    The 'include' directive causes a file, or all files under a\n"
+"    directory, to be included in the destination repository, and the\n"
+"    exclusion of all other files and directories not explicitly included.\n"
+"    The 'exclude' directive causes files or directories to be omitted.\n"
+"    The 'rename' directive renames a file or directory. To rename from\n"
+"    a subdirectory into the root of the repository, use '.' as the\n"
+"    path to rename to.\n"
+"\n"
+"    The splicemap is a file that allows insertion of synthetic\n"
+"    history, letting you specify the parents of a revision. This is\n"
+"    useful if you want to e.g. give a Subversion merge two parents, or\n"
+"    graft two disconnected series of history together. Each entry\n"
+"    contains a key, followed by a space, followed by one or two\n"
+"    comma-separated values. The key is the revision ID in the source\n"
+"    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"
+"\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"
+"    conjunction with a splicemap, it allows for a powerful combination\n"
+"    to help fix even the most badly mismanaged repositories and turn them\n"
+"    into nicely structured Mercurial repositories. The branchmap contains\n"
+"    lines of the form \"original_branch_name new_branch_name\".\n"
+"    \"original_branch_name\" is the name of the branch in the source\n"
+"    repository, and \"new_branch_name\" is the name of the branch is the\n"
+"    destination repository. This can be used to (for instance) move code\n"
+"    in one repository from \"default\" to a named branch.\n"
+"\n"
+"    Mercurial Source\n"
+"    -----------------\n"
+"\n"
+"    --config convert.hg.ignoreerrors=False    (boolean)\n"
+"        ignore integrity errors when reading. Use it to fix Mercurial\n"
+"        repositories with missing revlogs, by converting from and to\n"
+"        Mercurial.\n"
+"    --config convert.hg.saverev=False         (boolean)\n"
+"        store original revision ID in changeset (forces target IDs to\n"
+"        change)\n"
+"    --config convert.hg.startrev=0            (hg revision identifier)\n"
+"        convert start revision and its descendants\n"
+"\n"
+"    CVS Source\n"
+"    ----------\n"
+"\n"
+"    CVS source will use a sandbox (i.e. a checked-out copy) from CVS\n"
+"    to indicate the starting point of what will be converted. Direct\n"
+"    access to the repository files is not needed, unless of course the\n"
+"    repository is :local:. The conversion uses the top level directory\n"
+"    in the sandbox to find the CVS repository, and then uses CVS rlog\n"
+"    commands to find files to convert. This means that unless a\n"
+"    filemap is given, all files under the starting directory will be\n"
+"    converted, and that any directory reorganization in the CVS\n"
+"    sandbox is ignored.\n"
+"\n"
+"    Because CVS does not have changesets, it is necessary to collect\n"
+"    individual commits to CVS and merge them into changesets. CVS\n"
+"    source uses its internal changeset merging code by default but can\n"
+"    be configured to call the external 'cvsps' program by setting:\n"
+"        --config convert.cvsps='cvsps -A -u --cvs-direct -q'\n"
+"    This option is deprecated and will be removed in Mercurial 1.4.\n"
+"\n"
+"    The options shown are the defaults.\n"
+"\n"
+"    Internal cvsps is selected by setting\n"
+"        --config convert.cvsps=builtin\n"
+"    and has a few more configurable options:\n"
+"        --config convert.cvsps.cache=True     (boolean)\n"
+"            Set to False to disable remote log caching, for testing and\n"
+"            debugging purposes.\n"
+"        --config convert.cvsps.fuzz=60        (integer)\n"
+"            Specify the maximum time (in seconds) that is allowed\n"
+"            between commits with identical user and log message in a\n"
+"            single changeset. When very large files were checked in as\n"
+"            part of a changeset then the default may not be long\n"
+"            enough.\n"
+"        --config convert.cvsps.mergeto='{{mergetobranch ([-\\w]+)}}'\n"
+"            Specify a regular expression to which commit log messages\n"
+"            are matched. If a match occurs, then the conversion\n"
+"            process will insert a dummy revision merging the branch on\n"
+"            which this log message occurs to the branch indicated in\n"
+"            the regex.\n"
+"        --config convert.cvsps.mergefrom='{{mergefrombranch ([-\\w]+)}}'\n"
+"            Specify a regular expression to which commit log messages\n"
+"            are matched. If a match occurs, then the conversion\n"
+"            process will add the most recent revision on the branch\n"
+"            indicated in the regex as the second parent of the\n"
+"            changeset.\n"
+"\n"
+"    The hgext/convert/cvsps wrapper script allows the builtin\n"
+"    changeset merging code to be run without doing a conversion. Its\n"
+"    parameters and output are similar to that of cvsps 2.1.\n"
+"\n"
+"    Subversion Source\n"
+"    -----------------\n"
+"\n"
+"    Subversion source detects classical trunk/branches/tags layouts.\n"
+"    By default, the supplied \"svn://repo/path/\" source URL is\n"
+"    converted as a single branch. If \"svn://repo/path/trunk\" exists it\n"
+"    replaces the default branch. If \"svn://repo/path/branches\" exists,\n"
+"    its subdirectories are listed as possible branches. If\n"
+"    \"svn://repo/path/tags\" exists, it is looked for tags referencing\n"
+"    converted branches. Default \"trunk\", \"branches\" and \"tags\" values\n"
+"    can be overridden with following options. Set them to paths\n"
+"    relative to the source URL, or leave them blank to disable auto\n"
+"    detection.\n"
+"\n"
+"    --config convert.svn.branches=branches    (directory name)\n"
+"        specify the directory containing branches\n"
+"    --config convert.svn.tags=tags            (directory name)\n"
+"        specify the directory containing tags\n"
+"    --config convert.svn.trunk=trunk          (directory name)\n"
+"        specify the name of the trunk branch\n"
+"\n"
+"    Source history can be retrieved starting at a specific revision,\n"
+"    instead of being integrally converted. Only single branch\n"
+"    conversions are supported.\n"
+"\n"
+"    --config convert.svn.startrev=0           (svn revision number)\n"
+"        specify start Subversion revision.\n"
+"\n"
+"    Perforce Source\n"
+"    ---------------\n"
+"\n"
+"    The Perforce (P4) importer can be given a p4 depot path or a\n"
+"    client specification as source. It will convert all files in the\n"
+"    source to a flat Mercurial repository, ignoring labels, branches\n"
+"    and integrations. Note that when a depot path is given you then\n"
+"    usually should specify a target directory, because otherwise the\n"
+"    target may be named ...-hg.\n"
+"\n"
+"    It is possible to limit the amount of source history to be\n"
+"    converted by specifying an initial Perforce revision.\n"
+"\n"
+"    --config convert.p4.startrev=0            (perforce changelist number)\n"
+"        specify initial Perforce revision.\n"
+"\n"
+"\n"
+"    Mercurial Destination\n"
+"    ---------------------\n"
+"\n"
+"    --config convert.hg.clonebranches=False   (boolean)\n"
+"        dispatch source branches in separate clones.\n"
+"    --config convert.hg.tagsbranch=default    (branch name)\n"
+"        tag revisions branch name\n"
+"    --config convert.hg.usebranchnames=True   (boolean)\n"
+"        preserve branch names\n"
+"\n"
+"    "
+msgstr ""
+
+msgid ""
+"create changeset information from CVS\n"
+"\n"
+"    This command is intended as a debugging tool for the CVS to\n"
+"    Mercurial converter, and can be used as a direct replacement for\n"
+"    cvsps.\n"
+"\n"
+"    Hg debugcvsps reads the CVS rlog for current directory (or any\n"
+"    named directory) in the CVS repository, and converts the log to a\n"
+"    series of changesets based on matching commit log entries and\n"
+"    dates."
+msgstr ""
+
+msgid "username mapping filename"
+msgstr ""
+
+msgid "destination repository type"
+msgstr ""
+
+msgid "remap file names using contents of file"
+msgstr ""
+
+msgid "import up to target revision REV"
+msgstr ""
+
+msgid "source repository type"
+msgstr ""
+
+msgid "splice synthesized history into place"
+msgstr ""
+
+msgid "change branch names while converting"
+msgstr ""
+
+msgid "try to sort changesets by branches"
+msgstr ""
+
+msgid "try to sort changesets by date"
+msgstr ""
+
+msgid "preserve source changesets order"
+msgstr ""
+
+msgid "hg convert [OPTION]... SOURCE [DEST [REVMAP]]"
+msgstr ""
+
+msgid "only return changes on specified branches"
+msgstr ""
+
+msgid "prefix to remove from file names"
+msgstr ""
+
+msgid "only return changes after or between specified tags"
+msgstr ""
+
+msgid "update cvs log cache"
+msgstr ""
+
+msgid "create new cvs log cache"
+msgstr ""
+
+msgid "set commit time fuzz in seconds"
+msgstr ""
+
+msgid "specify cvsroot"
+msgstr ""
+
+msgid "show parent changesets"
+msgstr ""
+
+msgid "show current changeset in ancestor branches"
+msgstr ""
+
+msgid "ignored for compatibility"
+msgstr ""
+
+msgid "hg debugcvsps [OPTION]... [PATH]..."
+msgstr ""
+
+msgid ""
+"warning: lightweight checkouts may cause conversion failures, try with a "
+"regular branch instead.\n"
+msgstr ""
+
+msgid "bzr source type could not be determined\n"
+msgstr ""
+
+#, python-format
+msgid "%s is not a valid revision in current branch"
+msgstr ""
+
+#, python-format
+msgid "%s is not available in %s anymore"
+msgstr ""
+
+#, python-format
+msgid "%s.%s symlink has no target"
+msgstr ""
+
+#, python-format
+msgid "cannot find required \"%s\" tool"
+msgstr ""
+
+#, python-format
+msgid "running: %s\n"
+msgstr ""
+
+#, python-format
+msgid "%s error:\n"
+msgstr ""
+
+#, python-format
+msgid "%s %s"
+msgstr ""
+
+#, python-format
+msgid "syntax error in %s(%d): key/value pair expected"
+msgstr ""
+
+#, python-format
+msgid "could not open map file %r: %s"
+msgstr ""
+
+#, python-format
+msgid "%s: missing or unsupported repository"
+msgstr ""
+
+#, python-format
+msgid "convert: %s\n"
+msgstr ""
+
+#, python-format
+msgid "%s: unknown repository type"
+msgstr ""
+
+#, fuzzy, python-format
+msgid "unknown sort mode: %s"
+msgstr ""
+
+#, python-format
+msgid "cycle detected between %s and %s"
+msgstr ""
+
+msgid "not all revisions were sorted"
+msgstr ""
+
+#, python-format
+msgid "Writing author map file %s\n"
+msgstr ""
+
+#, python-format
+msgid "Ignoring bad line in author map file %s: %s\n"
+msgstr ""
+
+#, python-format
+msgid "mapping author %s to %s\n"
+msgstr ""
+
+#, python-format
+msgid "overriding mapping for author %s, was %s, will be %s\n"
+msgstr ""
+
+#, python-format
+msgid "spliced in %s as parents of %s\n"
+msgstr ""
+
+msgid "scanning source...\n"
+msgstr ""
+
+msgid "sorting...\n"
+msgstr ""
+
+msgid "converting...\n"
+msgstr ""
+
+#, python-format
+msgid "source: %s\n"
+msgstr ""
+
+#, python-format
+msgid "assuming destination %s\n"
+msgstr ""
+
+msgid "more than one sort mode specified"
+msgstr ""
+
+msgid "--sourcesort is not supported by this data source"
+msgstr ""
+
+msgid ""
+"warning: support for external cvsps is deprecated and will be removed in "
+"Mercurial 1.4\n"
+msgstr ""
+
+#, python-format
+msgid "revision %s is not a patchset number or date"
+msgstr ""
+
+msgid "using builtin cvsps\n"
+msgstr ""
+
+#, python-format
+msgid "connecting to %s\n"
+msgstr ""
+
+msgid "CVS pserver authentication failed"
+msgstr ""
+
+msgid "server sucks"
+msgstr ""
+
+#, python-format
+msgid "%d bytes missing from remote file"
+msgstr ""
+
+#, python-format
+msgid "cvs server: %s\n"
+msgstr ""
+
+#, python-format
+msgid "unknown CVS response: %s"
+msgstr ""
+
+msgid "collecting CVS rlog\n"
+msgstr ""
+
+#, python-format
+msgid "reading cvs log cache %s\n"
+msgstr ""
+
+#, python-format
+msgid "cache has %d log entries\n"
+msgstr ""
+
+#, python-format
+msgid "error reading cache: %r\n"
+msgstr ""
+
+#, python-format
+msgid "running %s\n"
+msgstr "εκτέλεση %s\n"
+
+#, python-format
+msgid "prefix=%r directory=%r root=%r\n"
+msgstr "πρόθεμα=%r κατάλογος=%r αρχικός-κατάλογος=%r\n"
+
+msgid "RCS file must be followed by working file"
+msgstr "το αρχείο RCS πρέπει να ακολουθείται από ένα αρχείο εργασίας"
+
+msgid "must have at least some revisions"
+msgstr "πρέπει να υπάρχουν κάποιες εκδόσεις αρχείων"
+
+msgid "expected revision number"
+msgstr "αναμένεται αριθμός έκδοσης αρχείου"
+
+msgid "revision must be followed by date line"
+msgstr "η έκδοση αρχείου πρέπει να ακολουθείται από γραμμή ημερομηνίας"
+
+#, fuzzy, python-format
+msgid "found synthetic revision in %s: %r\n"
+msgstr ""
+
+#, python-format
+msgid "writing cvs log cache %s\n"
+msgstr "αποθήκευση προσωρινού αντιγράφου cvs log %s\n"
+
+#, python-format
+msgid "%d log entries\n"
+msgstr "%d εκδόσεις αρχείων\n"
+
+msgid "creating changesets\n"
+msgstr "δημιουργία αλλαγών\n"
+
+msgid "synthetic changeset cannot have multiple parents"
+msgstr ""
+
+#, python-format
+msgid ""
+"warning: CVS commit message references non-existent branch %r:\n"
+"%s\n"
+msgstr ""
+
+#, python-format
+msgid "%d changeset entries\n"
+msgstr "%d αλλαγές\n"
+
+msgid "Python ElementTree module is not available"
+msgstr "δεν είναι διαθέσιμο το άρθρωμα ElementTree της Python"
+
+#, python-format
+msgid "cleaning up %s\n"
+msgstr "καθαρισμός %s\n"
+
+msgid "internal calling inconsistency"
+msgstr "εσωτερικό πρόβλημα κλήσης"
+
+msgid "errors in filemap"
+msgstr "λάθη στο filemap"
+
+#, python-format
+msgid "%s:%d: %r already in %s list\n"
+msgstr "%s:%d: η εγγραφή %r υπάρχει ήδη στη λίστα %s\n"
+
+#, python-format
+msgid "%s:%d: unknown directive %r\n"
+msgstr "%s:%d: άγνωστη εντολή %r\n"
+
+msgid "source repository doesn't support --filemap"
+msgstr "το αποθετήριο πηγής δεν υποστηρίζει την επιλογή --filemap"
+
+#, python-format
+msgid "%s does not look like a GNU Arch repo"
+msgstr "το %s δε φαίνεται να είναι αποθετήριο Arch"
+
+msgid "cannot find a GNU Arch tool"
+msgstr "δεν είναι διαθέσιμο το εργαλείο GNU Arch"
+
+#, python-format
+msgid "analyzing tree version %s...\n"
+msgstr "ανάλυση καταλόγου αρχείων για την έκδοση %s...\n"
+
+#, python-format
+msgid ""
+"tree analysis stopped because it points to an unregistered archive %s...\n"
+msgstr ""
+"η ανάλυση καταλόγου διακόπηκε επειδή περιέχει αναφορά στην συλλογή αρχείων %"
+"s, η οποία δεν υπάρχει ή δεν είναι διαθέσιμη...\n"
+
+#, python-format
+msgid "applying revision %s...\n"
+msgstr ""
+
+#, python-format
+msgid "computing changeset between %s and %s...\n"
+msgstr ""
+
+#, python-format
+msgid "obtaining revision %s...\n"
+msgstr ""
+
+#, fuzzy, python-format
+msgid "analyzing revision %s...\n"
+msgstr "ανάλυση καταλόγου αρχείων για την έκδοση %s...\n"
+
+#, python-format
+msgid "could not parse cat-log of %s"
+msgstr ""
+
+#, python-format
+msgid "%s is not a local Mercurial repo"
+msgstr ""
+
+#, python-format
+msgid "initializing destination %s repository\n"
+msgstr ""
+
+msgid "run hg sink pre-conversion action\n"
+msgstr ""
+
+msgid "run hg sink post-conversion action\n"
+msgstr ""
+
+#, python-format
+msgid "pulling from %s into %s\n"
+msgstr ""
+
+msgid "filtering out empty revision\n"
+msgstr ""
+
+msgid "updating tags\n"
+msgstr ""
+
+#, python-format
+msgid "%s is not a valid start revision"
+msgstr ""
+
+#, python-format
+msgid "ignoring: %s\n"
+msgstr ""
+
+msgid "run hg source pre-conversion action\n"
+msgstr ""
+
+msgid "run hg source post-conversion action\n"
+msgstr ""
+
+#, python-format
+msgid "%s does not look like a monotone repo"
+msgstr ""
+
+#, python-format
+msgid "copying file in renamed directory from '%s' to '%s'"
+msgstr ""
+
+#, fuzzy
+msgid "reading p4 views\n"
+msgstr "καθαρισμός %s\n"
+
+#, fuzzy
+msgid "collecting p4 changelists\n"
+msgstr "δημιουργία αλλαγών\n"
+
+msgid "Subversion python bindings could not be loaded"
+msgstr ""
+
+#, python-format
+msgid "Subversion python bindings %d.%d found, 1.4 or later required"
+msgstr ""
+
+msgid "Subversion python bindings are too old, 1.4 or later required"
+msgstr ""
+
+#, python-format
+msgid "svn: revision %s is not an integer"
+msgstr ""
+
+#, python-format
+msgid "svn: start revision %s is not an integer"
+msgstr ""
+
+#, python-format
+msgid "no revision found in module %s"
+msgstr ""
+
+#, python-format
+msgid "expected %s to be at %r, but not found"
+msgstr ""
+
+#, python-format
+msgid "found %s at %r\n"
+msgstr ""
+
+#, python-format
+msgid "ignoring empty branch %s\n"
+msgstr ""
+
+#, python-format
+msgid "found branch %s at %d\n"
+msgstr ""
+
+msgid "svn: start revision is not supported with more than one branch"
+msgstr ""
+
+#, python-format
+msgid "svn: no revision found after start revision %d"
+msgstr ""
+
+#, python-format
+msgid "no tags found at revision %d\n"
+msgstr ""
+
+#, python-format
+msgid "ignoring foreign branch %r\n"
+msgstr ""
+
+#, python-format
+msgid "%s not found up to revision %d"
+msgstr ""
+
+#, python-format
+msgid "branch renamed from %s to %s at %d\n"
+msgstr ""
+
+#, python-format
+msgid "reparent to %s\n"
+msgstr ""
+
+#, python-format
+msgid "copied to %s from %s@%s\n"
+msgstr ""
+
+#, python-format
+msgid "gone from %s\n"
+msgstr ""
+
+#, python-format
+msgid "found parent directory %s\n"
+msgstr ""
+
+#, python-format
+msgid "base, entry %s %s\n"
+msgstr ""
+
+msgid "munge-o-matic\n"
+msgstr ""
+
+#, python-format
+msgid "info: %s %s %s %s\n"
+msgstr ""
+
+#, python-format
+msgid "unknown path in revision %d: %s\n"
+msgstr ""
+
+#, python-format
+msgid "mark %s came from %s:%d\n"
+msgstr ""
+
+#, python-format
+msgid "parsing revision %d (%d changes)\n"
+msgstr ""
+
+#, python-format
+msgid "found parent of branch %s at %d: %s\n"
+msgstr ""
+
+msgid "no copyfrom path, don't know what to do.\n"
+msgstr ""
+
+#, python-format
+msgid "fetching revision log for \"%s\" from %d to %d\n"
+msgstr ""
+
+#, python-format
+msgid "skipping blacklisted revision %d\n"
+msgstr ""
+
+#, python-format
+msgid "revision %d has no entries\n"
+msgstr ""
+
+#, python-format
+msgid "svn: branch has no revision %s"
+msgstr ""
+
+#, python-format
+msgid "%r is not under %r, ignoring\n"
+msgstr ""
+
+#, python-format
+msgid "initializing svn repo %r\n"
+msgstr ""
+
+#, python-format
+msgid "initializing svn wc %r\n"
+msgstr ""
+
+msgid "unexpected svn output:\n"
+msgstr ""
+
+msgid "unable to cope with svn output"
+msgstr ""
+
+msgid "XXX TAGS NOT IMPLEMENTED YET\n"
+msgstr ""
+
+msgid ""
+"\n"
+"The `extdiff' Mercurial extension allows you to use external programs\n"
+"to compare revisions, or revision with working directory. The external diff\n"
+"programs are called with a configurable set of options and two\n"
+"non-option arguments: paths to directories containing snapshots of\n"
+"files to compare.\n"
+"\n"
+"To enable this extension:\n"
+"\n"
+"  [extensions]\n"
+"  hgext.extdiff =\n"
+"\n"
+"The `extdiff' extension also allows to configure new diff commands, so\n"
+"you do not need to type \"hg extdiff -p kdiff3\" always.\n"
+"\n"
+"  [extdiff]\n"
+"  # add new command that runs GNU diff(1) in 'context diff' mode\n"
+"  cdiff = gdiff -Nprc5\n"
+"  ## or the old way:\n"
+"  #cmd.cdiff = gdiff\n"
+"  #opts.cdiff = -Nprc5\n"
+"\n"
+"  # add new command called vdiff, runs kdiff3\n"
+"  vdiff = kdiff3\n"
+"\n"
+"  # add new command called meld, runs meld (no need to name twice)\n"
+"  meld =\n"
+"\n"
+"  # add new command called vimdiff, runs gvimdiff with DirDiff plugin\n"
+"  # (see http://www.vim.org/scripts/script.php?script_id=102)\n"
+"  # Non English user, be sure to put \"let g:DirDiffDynamicDiffText = 1\" "
+"in\n"
+"  # your .vimrc\n"
+"  vimdiff = gvim -f '+next' '+execute \"DirDiff\" argv(0) argv(1)'\n"
+"\n"
+"You can use -I/-X and list of file or directory names like normal \"hg\n"
+"diff\" command. The `extdiff' extension makes snapshots of only needed\n"
+"files, so running the external diff program will actually be pretty\n"
+"fast (at least faster than having to compare the entire tree).\n"
+msgstr ""
+
+#, python-format
+msgid "making snapshot of %d files from rev %s\n"
+msgstr ""
+
+#, python-format
+msgid "making snapshot of %d files from working directory\n"
+msgstr ""
+
+msgid "cannot specify --rev and --change at the same time"
+msgstr ""
+
+#, python-format
+msgid "running %r in %s\n"
+msgstr ""
+
+#, python-format
+msgid "file changed while diffing. Overwriting: %s (src: %s)\n"
+msgstr ""
+
+msgid "cleaning up temp directory\n"
+msgstr ""
+
+msgid ""
+"use external program to diff repository (or selected files)\n"
+"\n"
+"    Show differences between revisions for the specified files, using\n"
+"    an external program. The default program used is diff, with\n"
+"    default options \"-Npru\".\n"
+"\n"
+"    To select a different program, use the -p/--program option. The\n"
+"    program will be passed the names of two directories to compare. To\n"
+"    pass additional options to the program, use -o/--option. These\n"
+"    will be passed before the names of the directories to compare.\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 ""
+
+msgid "comparison program to run"
+msgstr ""
+
+msgid "pass option to comparison program"
+msgstr ""
+
+msgid "change made by revision"
+msgstr ""
+
+msgid "hg extdiff [OPT]... [FILE]..."
+msgstr ""
+
+#, python-format
+msgid "hg %s [OPTION]... [FILE]..."
+msgstr ""
+
+msgid "pulling, updating and merging in one command"
+msgstr ""
+
+msgid ""
+"pull changes from a remote repository, merge new changes if needed.\n"
+"\n"
+"    This finds all changes from the repository at the specified path\n"
+"    or URL and adds them to the local repository.\n"
+"\n"
+"    If the pulled changes add a new branch head, the head is\n"
+"    automatically merged, and the result of the merge is committed.\n"
+"    Otherwise, the working directory is updated to include the new\n"
+"    changes.\n"
+"\n"
+"    When a merge occurs, the newly pulled changes are assumed to be\n"
+"    \"authoritative\". The head of the new changes is used as the first\n"
+"    parent, with local changes as the second. To switch the merge\n"
+"    order, use --switch-parent.\n"
+"\n"
+"    See 'hg help dates' for a list of formats valid for -d/--date.\n"
+"    "
+msgstr ""
+
+msgid ""
+"working dir not at branch tip (use \"hg update\" to check out branch tip)"
+msgstr ""
+
+msgid "outstanding uncommitted merge"
+msgstr ""
+
+msgid "outstanding uncommitted changes"
+msgstr "υπάρχουν τοπικές αλλαγές ακόμη"
+
+msgid "working directory is missing some files"
+msgstr "λείπουν ορισμένα αρχεία από το χώρο εργασίας"
+
+msgid ""
+"multiple heads in this branch (use \"hg heads .\" and \"hg merge\" to merge)"
+msgstr ""
+
+#, python-format
+msgid "pulling from %s\n"
+msgstr ""
+
+msgid ""
+"Other repository doesn't support revision lookup, so a rev cannot be "
+"specified."
+msgstr ""
+
+#, python-format
+msgid ""
+"not merging with %d other new branch heads (use \"hg heads .\" and \"hg merge"
+"\" to merge them)\n"
+msgstr ""
+
+#, python-format
+msgid "updating to %d:%s\n"
+msgstr ""
+
+#, python-format
+msgid "merging with %d:%s\n"
+msgstr ""
+
+#, python-format
+msgid "Automated merge with %s"
+msgstr ""
+
+#, python-format
+msgid "new changeset %d:%s merges remote changes with local\n"
+msgstr ""
+
+msgid "a specific revision you would like to pull"
+msgstr ""
+
+msgid "edit commit message"
+msgstr ""
+
+msgid "edit commit message (DEPRECATED)"
+msgstr ""
+
+msgid "switch parents when merging"
+msgstr ""
+
+msgid "hg fetch [SOURCE]"
+msgstr ""
+
+msgid "error while verifying signature"
+msgstr ""
+
+#, python-format
+msgid "%s Bad signature from \"%s\"\n"
+msgstr ""
+
+#, python-format
+msgid "%s Note: Signature has expired (signed by: \"%s\")\n"
+msgstr ""
+
+#, python-format
+msgid "%s Note: This key has expired (signed by: \"%s\")\n"
+msgstr ""
+
+msgid "list signed changesets"
+msgstr ""
+
+#, python-format
+msgid "%s:%d node does not exist\n"
+msgstr ""
+
+msgid "verify all the signatures there may be for a particular revision"
+msgstr ""
+
+#, python-format
+msgid "No valid signature for %s\n"
+msgstr ""
+
+msgid ""
+"add a signature for the current or given revision\n"
+"\n"
+"    If no revision is given, the parent of the working directory is used,\n"
+"    or tip if no revision is checked out.\n"
+"\n"
+"    See 'hg help dates' for a list of formats valid for -d/--date.\n"
+"    "
+msgstr ""
+
+msgid "uncommitted merge - please provide a specific revision"
+msgstr ""
+
+msgid "Error while signing"
+msgstr ""
+
+msgid ""
+"working copy of .hgsigs is changed (please commit .hgsigs manually or use --"
+"force)"
+msgstr ""
+
+#, python-format
+msgid "Added signature for changeset %s"
+msgstr ""
+
+msgid "unknown signature version"
+msgstr ""
+
+msgid "make the signature local"
+msgstr ""
+
+msgid "sign even if the sigfile is modified"
+msgstr ""
+
+msgid "do not commit the sigfile after signing"
+msgstr ""
+
+msgid "the key id to sign with"
+msgstr ""
+
+msgid "commit message"
+msgstr ""
+
+msgid "hg sign [OPTION]... [REVISION]..."
+msgstr ""
+
+msgid "hg sigcheck REVISION"
+msgstr ""
+
+msgid "hg sigs"
+msgstr ""
+
+msgid ""
+"show revision graphs in terminal windows\n"
+"\n"
+"This extension adds a --graph option to the incoming, outgoing and log\n"
+"commands. When this options is given, an ASCII representation of the\n"
+"revision graph is also shown.\n"
+msgstr ""
+
+#, python-format
+msgid "--graph option is incompatible with --%s"
+msgstr ""
+
+msgid ""
+"show revision history alongside an ASCII revision graph\n"
+"\n"
+"    Print a revision history alongside a revision graph drawn with\n"
+"    ASCII characters.\n"
+"\n"
+"    Nodes printed as an @ character are parents of the working\n"
+"    directory.\n"
+"    "
+msgstr ""
+
+#, python-format
+msgid "comparing with %s\n"
+msgstr "σύγκριση με %s\n"
+
+msgid "no changes found\n"
+msgstr "δεν υπάρχουν αλλαγές\n"
+
+msgid "show the revision DAG"
+msgstr ""
+
+msgid "limit number of changes displayed"
+msgstr ""
+
+msgid "show patch"
+msgstr "προβολή patch"
+
+msgid "show the specified revision or range"
+msgstr ""
+
+msgid "hg glog [OPTION]... [FILE]"
+msgstr ""
+
+msgid ""
+"CIA notification\n"
+"\n"
+"This is meant to be run as a changegroup or incoming hook.\n"
+"To configure it, set the following options in your hgrc:\n"
+"\n"
+"[cia]\n"
+"# your registered CIA user name\n"
+"user = foo\n"
+"# the name of the project in CIA\n"
+"project = foo\n"
+"# the module (subproject) (optional)\n"
+"#module = foo\n"
+"# Append a diffstat to the log message (optional)\n"
+"#diffstat = False\n"
+"# Template to use for log messages (optional)\n"
+"#template = {desc}\\n{baseurl}/rev/{node}-- {diffstat}\n"
+"# Style to use (optional)\n"
+"#style = foo\n"
+"# The URL of the CIA notification service (optional)\n"
+"# You can use mailto: URLs to send by email, eg\n"
+"# mailto:cia@cia.vc\n"
+"# Make sure to set email.from if you do this.\n"
+"#url = http://cia.vc/\n"
+"# print message instead of sending it (optional)\n"
+"#test = False\n"
+"\n"
+"[hooks]\n"
+"# one of these:\n"
+"changegroup.cia = python:hgcia.hook\n"
+"#incoming.cia = python:hgcia.hook\n"
+"\n"
+"[web]\n"
+"# If you want hyperlinks (optional)\n"
+"baseurl = http://server/path/to/repo\n"
+msgstr ""
+
+#, python-format
+msgid "hgcia: sending update to %s\n"
+msgstr ""
+
+msgid "email.from must be defined when sending by email"
+msgstr ""
+
+msgid "cia: no user specified"
+msgstr ""
+
+msgid "cia: no project specified"
+msgstr ""
+
+msgid ""
+"browsing the repository in a graphical way\n"
+"\n"
+"The hgk extension allows browsing the history of a repository in a\n"
+"graphical way. It requires Tcl/Tk version 8.4 or later. (Tcl/Tk is not\n"
+"distributed with Mercurial.)\n"
+"\n"
+"hgk consists of two parts: a Tcl script that does the displaying and\n"
+"querying of information, and an extension to Mercurial named hgk.py,\n"
+"which provides hooks for hgk to get information. hgk can be found in\n"
+"the contrib directory, and hgk.py can be found in the hgext directory.\n"
+"\n"
+"To load the hgext.py extension, add it to your .hgrc file (you have to\n"
+"use your global $HOME/.hgrc file, not one in a repository). You can\n"
+"specify an absolute path:\n"
+"\n"
+"  [extensions]\n"
+"  hgk=/usr/local/lib/hgk.py\n"
+"\n"
+"Mercurial can also scan the default python library path for a file\n"
+"named 'hgk.py' if you set hgk empty:\n"
+"\n"
+"  [extensions]\n"
+"  hgk=\n"
+"\n"
+"The hg view command will launch the hgk Tcl script. For this command\n"
+"to work, hgk must be in your search path. Alternately, you can specify\n"
+"the path to hgk in your .hgrc file:\n"
+"\n"
+"  [hgk]\n"
+"  path=/location/of/hgk\n"
+"\n"
+"hgk can make use of the extdiff extension to visualize revisions.\n"
+"Assuming you had already configured extdiff vdiff command, just add:\n"
+"\n"
+"  [hgk]\n"
+"  vdiff=vdiff\n"
+"\n"
+"Revisions context menu will now display additional entries to fire\n"
+"vdiff on hovered and selected revisions."
+msgstr ""
+
+msgid "diff trees from two commits"
+msgstr ""
+
+msgid "output common ancestor information"
+msgstr ""
+
+msgid "cat a specific revision"
+msgstr ""
+
+msgid "cat-file: type or revision not supplied\n"
+msgstr ""
+
+msgid "aborting hg cat-file only understands commits\n"
+msgstr ""
+
+msgid "parse given revisions"
+msgstr ""
+
+msgid "print revisions"
+msgstr ""
+
+msgid "print extension options"
+msgstr ""
+
+msgid "start interactive history viewer"
+msgstr ""
+
+msgid "hg view [-l LIMIT] [REVRANGE]"
+msgstr ""
+
+msgid "generate patch"
+msgstr ""
+
+msgid "recursive"
+msgstr ""
+
+msgid "pretty"
+msgstr ""
+
+msgid "stdin"
+msgstr ""
+
+msgid "detect copies"
+msgstr ""
+
+msgid "search"
+msgstr ""
+
+msgid "hg git-diff-tree [OPTION]... NODE1 NODE2 [FILE]..."
+msgstr ""
+
+msgid "hg debug-cat-file [OPTION]... TYPE FILE"
+msgstr ""
+
+msgid "hg debug-config"
+msgstr ""
+
+msgid "hg debug-merge-base node node"
+msgstr ""
+
+msgid "ignored"
+msgstr ""
+
+msgid "hg debug-rev-parse REV"
+msgstr ""
+
+msgid "header"
+msgstr ""
+
+msgid "topo-order"
+msgstr ""
+
+msgid "parents"
+msgstr ""
+
+msgid "max-count"
+msgstr ""
+
+msgid "hg debug-rev-list [options] revs"
+msgstr ""
+
+msgid ""
+"syntax highlighting in hgweb, based on Pygments\n"
+"\n"
+"It depends on the Pygments syntax highlighting library:\n"
+"http://pygments.org/\n"
+"\n"
+"To enable the extension add this to hgrc:\n"
+"\n"
+"[extensions]\n"
+"hgext.highlight =\n"
+"\n"
+"There is a single configuration option:\n"
+"\n"
+"[web]\n"
+"pygments_style = <style>\n"
+"\n"
+"The default is 'colorful'.\n"
+"\n"
+"-- Adam Hupp <adam@hupp.org>\n"
+msgstr ""
+
+msgid "inotify-based status acceleration for Linux systems\n"
+msgstr ""
+
+msgid "start an inotify server for this repository"
+msgstr ""
+
+msgid ""
+"debugging information for inotify extension\n"
+"\n"
+"    Prints the list of directories being watched by the inotify server.\n"
+"    "
+msgstr ""
+
+msgid "directories being watched:\n"
+msgstr ""
+
+msgid "run server in background"
+msgstr ""
+
+msgid "used internally by daemon mode"
+msgstr ""
+
+msgid "minutes to sit idle before exiting"
+msgstr ""
+
+msgid "name of file to write process ID to"
+msgstr ""
+
+msgid "hg inserve [OPT]..."
+msgstr ""
+
+msgid "(found dead inotify server socket; removing it)\n"
+msgstr ""
+
+msgid "(starting inotify server)\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 ""
+
+msgid "(inotify server not running)\n"
+msgstr ""
+
+#, python-format
+msgid "failed to contact inotify server: %s\n"
+msgstr ""
+
+msgid "received empty answer from inotify server"
+msgstr ""
+
+#, python-format
+msgid "(inotify: received response from incompatible server version %d)\n"
+msgstr ""
+
+#, python-format
+msgid "(inotify: received '%s' response when expecting '%s')\n"
+msgstr ""
+
+msgid "this system does not seem to support inotify"
+msgstr ""
+
+#, python-format
+msgid "*** the current per-user limit on the number of inotify watches is %s\n"
+msgstr ""
+
+msgid "*** this limit is too low to watch every directory in this repository\n"
+msgstr ""
+
+msgid "*** counting directories: "
+msgstr ""
+
+#, python-format
+msgid "found %d\n"
+msgstr ""
+
+#, python-format
+msgid "*** to raise the limit from %d to %d (run as root):\n"
+msgstr ""
+
+#, python-format
+msgid "***  echo %d > %s\n"
+msgstr ""
+
+#, python-format
+msgid "cannot watch %s until inotify watch limit is raised"
+msgstr ""
+
+#, python-format
+msgid "inotify service not available: %s"
+msgstr ""
+
+#, python-format
+msgid "watching %r\n"
+msgstr ""
+
+#, python-format
+msgid "watching directories under %r\n"
+msgstr ""
+
+#, python-format
+msgid "status: %r dir(%d) -> %s\n"
+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 ""
+
+#, python-format
+msgid "%s event: deleted %s\n"
+msgstr ""
+
+#, python-format
+msgid "%s event: modified %s\n"
+msgstr ""
+
+#, python-format
+msgid "filesystem containing %s was unmounted\n"
+msgstr ""
+
+#, python-format
+msgid "%s readable: %d bytes\n"
+msgstr ""
+
+#, python-format
+msgid "%s below threshold - unhooking\n"
+msgstr ""
+
+#, python-format
+msgid "%s reading %d events\n"
+msgstr ""
+
+#, python-format
+msgid "%s hooking back up with %d bytes readable\n"
+msgstr ""
+
+#, python-format
+msgid "could not start server: %s"
+msgstr ""
+
+#, python-format
+msgid "answering query for %r\n"
+msgstr ""
+
+#, python-format
+msgid "received query from incompatible client version %d\n"
+msgstr ""
+
+#, python-format
+msgid "unrecognized query type: %s\n"
+msgstr ""
+
+msgid "finished setup\n"
+msgstr ""
+
+msgid ""
+"expand expressions into changelog and summaries\n"
+"\n"
+"This extension allows the use of a special syntax in summaries,\n"
+"which will be automatically expanded into links or any other\n"
+"arbitrary expression, much like InterWiki does.\n"
+"\n"
+"To enable this extension, add the following lines to your hgrc:\n"
+"\n"
+"  [extensions]\n"
+"  interhg =\n"
+"\n"
+"A few example patterns (link to bug tracking, etc.):\n"
+"\n"
+"  [interhg]\n"
+"  issues = s!issue(\\d+)!<a href=\"http://bts/issue\\1\">issue\\1</a>!\n"
+"  bugzilla = s!((?:bug|b=|(?=#?\\d{4,}))(?:\\s*#?)(\\d+))!<a..=\\2\">\\1</a>!"
+"i\n"
+"  boldify = s!(^|\\s)#(\\d+)\\b! <b>#\\2</b>!\n"
+msgstr ""
+
+#, python-format
+msgid "interhg: invalid pattern for %s: %s\n"
+msgstr ""
+
+#, python-format
+msgid "interhg: invalid regexp for %s: %s\n"
+msgstr ""
+
+msgid ""
+"keyword expansion in tracked files\n"
+"\n"
+"This extension expands RCS/CVS-like or self-customized $Keywords$ in\n"
+"tracked text files selected by your configuration.\n"
+"\n"
+"Keywords are only expanded in local repositories and not stored in the\n"
+"change history. The mechanism can be regarded as a convenience for the\n"
+"current user or for archive distribution.\n"
+"\n"
+"Configuration is done in the [keyword] and [keywordmaps] sections of\n"
+"hgrc files.\n"
+"\n"
+"Example:\n"
+"\n"
+"    [keyword]\n"
+"    # expand keywords in every python file except those matching \"x*\"\n"
+"    **.py =\n"
+"    x*    = ignore\n"
+"\n"
+"Note: the more specific you are in your filename patterns\n"
+"      the less you lose speed in huge repositories.\n"
+"\n"
+"For [keywordmaps] template mapping and expansion demonstration and\n"
+"control run \"hg kwdemo\".\n"
+"\n"
+"An additional date template filter {date|utcdate} is provided.\n"
+"\n"
+"The default template mappings (view with \"hg kwdemo -d\") can be\n"
+"replaced with customized keywords and templates. Again, run \"hg\n"
+"kwdemo\" to control the results of your config changes.\n"
+"\n"
+"Before changing/disabling active keywords, run \"hg kwshrink\" to avoid\n"
+"the risk of inadvertently storing expanded keywords in the change\n"
+"history.\n"
+"\n"
+"To force expansion after enabling it, or a configuration change, run\n"
+"\"hg kwexpand\".\n"
+"\n"
+"Also, when committing with the record extension or using mq's qrecord,\n"
+"be aware that keywords cannot be updated. Again, run \"hg kwexpand\" on\n"
+"the files in question to update keyword expansions after all changes\n"
+"have been checked in.\n"
+"\n"
+"Expansions spanning more than one line and incremental expansions,\n"
+"like CVS' $Log$, are not supported. A keyword template map\n"
+"\"Log = {desc}\" expands to the first line of the changeset description.\n"
+msgstr ""
+
+#, python-format
+msgid "overwriting %s expanding keywords\n"
+msgstr ""
+
+#, python-format
+msgid "overwriting %s shrinking keywords\n"
+msgstr ""
+
+msgid "[keyword] patterns cannot match"
+msgstr ""
+
+msgid "no [keyword] patterns configured"
+msgstr ""
+
+msgid ""
+"print [keywordmaps] configuration and an expansion example\n"
+"\n"
+"    Show current, custom, or default keyword template maps and their\n"
+"    expansions.\n"
+"\n"
+"    Extend current configuration by specifying maps as arguments and\n"
+"    optionally by reading from an additional hgrc file.\n"
+"\n"
+"    Override current keyword template maps with \"default\" option.\n"
+"    "
+msgstr ""
+
+#, python-format
+msgid ""
+"\n"
+"\t%s\n"
+msgstr ""
+
+#, fuzzy, python-format
+msgid "creating temporary repository at %s\n"
+msgstr "δημιουργία αποθετηρίου για το queue"
+
+#, python-format
+msgid ""
+"\n"
+"%s keywords written to %s:\n"
+msgstr ""
+
+msgid "unhooked all commit hooks\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"\n"
+"removing temporary repository %s\n"
+msgstr ""
+
+msgid ""
+"expand keywords in the working directory\n"
+"\n"
+"    Run after (re)enabling keyword expansion.\n"
+"\n"
+"    kwexpand refuses to run if given files contain local changes.\n"
+"    "
+msgstr ""
+
+msgid ""
+"print files currently configured for keyword expansion\n"
+"\n"
+"    Crosscheck which files in working directory are potential targets\n"
+"    for keyword expansion. That is, files matched by [keyword] config\n"
+"    patterns but not symlinks.\n"
+"    "
+msgstr ""
+
+msgid ""
+"revert expanded keywords in the working directory\n"
+"\n"
+"    Run before changing/disabling active keywords or if you experience\n"
+"    problems with \"hg import\" or \"hg merge\".\n"
+"\n"
+"    kwshrink refuses to run if given files contain local changes.\n"
+"    "
+msgstr ""
+
+msgid "show default keyword template maps"
+msgstr ""
+
+msgid "read maps from rcfile"
+msgstr ""
+
+msgid "hg kwdemo [-d] [-f RCFILE] [TEMPLATEMAP]..."
+msgstr ""
+
+msgid "hg kwexpand [OPTION]... [FILE]..."
+msgstr ""
+
+msgid "show keyword status flags of all files"
+msgstr ""
+
+msgid "show files excluded from expansion"
+msgstr ""
+
+msgid "additionally show untracked files"
+msgstr ""
+
+msgid "hg kwfiles [OPTION]... [FILE]..."
+msgstr ""
+
+msgid "hg kwshrink [OPTION]... [FILE]..."
+msgstr ""
+
+#, fuzzy
+msgid ""
+"patch management and development\n"
+"\n"
+"This extension lets you work with a stack of patches in a Mercurial\n"
+"repository. It manages two stacks of patches - all known patches, and\n"
+"applied patches (subset of known patches).\n"
+"\n"
+"Known patches are represented as patch files in the .hg/patches\n"
+"directory. Applied patches are both patch files and changesets.\n"
+"\n"
+"Common tasks (use \"hg help command\" for more details):\n"
+"\n"
+"prepare repository to work with patches   qinit\n"
+"create new patch                          qnew\n"
+"import existing patch                     qimport\n"
+"\n"
+"print patch series                        qseries\n"
+"print applied patches                     qapplied\n"
+"print name of top applied patch           qtop\n"
+"\n"
+"add known patch to applied stack          qpush\n"
+"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"
+msgstr ""
+
+msgid "guard cannot be an empty string"
+msgstr ""
+
+#, python-format
+msgid "guard %r starts with invalid character: %r"
+msgstr ""
+
+#, python-format
+msgid "invalid character in guard %r: %r"
+msgstr ""
+
+#, python-format
+msgid "active guards: %s\n"
+msgstr ""
+
+#, python-format
+msgid "guard %r too short"
+msgstr ""
+
+#, python-format
+msgid "guard %r starts with invalid char"
+msgstr ""
+
+#, python-format
+msgid "allowing %s - no guards in effect\n"
+msgstr ""
+
+#, python-format
+msgid "allowing %s - no matching negative guards\n"
+msgstr ""
+
+#, python-format
+msgid "allowing %s - guarded by %r\n"
+msgstr ""
+
+#, python-format
+msgid "skipping %s - guarded by %r\n"
+msgstr ""
+
+#, python-format
+msgid "skipping %s - no matching guards\n"
+msgstr ""
+
+#, python-format
+msgid "error removing undo: %s\n"
+msgstr ""
+
+#, python-format
+msgid "apply failed for patch %s"
+msgstr ""
+
+#, python-format
+msgid "patch didn't work out, merging %s\n"
+msgstr ""
+
+#, python-format
+msgid "update returned %d"
+msgstr ""
+
+msgid "repo commit failed"
+msgstr ""
+
+#, python-format
+msgid "unable to read %s"
+msgstr ""
+
+#, python-format
+msgid "patch %s does not exist\n"
+msgstr ""
+
+#, python-format
+msgid "patch %s is not applied\n"
+msgstr ""
+
+msgid "patch failed, unable to continue (try -v)\n"
+msgstr ""
+
+#, python-format
+msgid "applying %s\n"
+msgstr ""
+
+#, python-format
+msgid "Unable to read %s\n"
+msgstr ""
+
+#, python-format
+msgid "imported patch %s\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"\n"
+"imported patch %s"
+msgstr ""
+
+#, python-format
+msgid "patch %s is empty\n"
+msgstr ""
+
+msgid "patch failed, rejects left in working dir\n"
+msgstr ""
+
+msgid "fuzz found when applying patch, stopping\n"
+msgstr ""
+
+#, python-format
+msgid "revision %d is not managed"
+msgstr ""
+
+#, python-format
+msgid "cannot delete revision %d above applied patches"
+msgstr ""
+
+msgid "qdelete requires at least one revision or patch name"
+msgstr ""
+
+#, python-format
+msgid "cannot delete applied patch %s"
+msgstr ""
+
+#, python-format
+msgid "patch %s not in series file"
+msgstr ""
+
+msgid "no patches applied"
+msgstr ""
+
+msgid "working directory revision is not qtip"
+msgstr ""
+
+msgid "local changes found, refresh first"
+msgstr ""
+
+msgid "local changes found"
+msgstr ""
+
+#, python-format
+msgid "\"%s\" cannot be used as the name of a patch"
+msgstr ""
+
+#, python-format
+msgid "patch \"%s\" already exists"
+msgstr ""
+
+#, python-format
+msgid "error unlinking %s\n"
+msgstr ""
+
+#, python-format
+msgid "patch name \"%s\" is ambiguous:\n"
+msgstr ""
+
+#, python-format
+msgid "patch %s not in series"
+msgstr ""
+
+#, fuzzy
+msgid "(working directory not at a head)\n"
+msgstr "χώρος εργασίας του %s"
+
+msgid "no patches in series\n"
+msgstr ""
+
+#, python-format
+msgid "cannot push to a previous patch: %s"
+msgstr ""
+
+#, python-format
+msgid "qpush: %s is already at the top\n"
+msgstr ""
+
+#, python-format
+msgid "guarded by %r"
+msgstr ""
+
+msgid "no matching guards"
+msgstr ""
+
+#, python-format
+msgid "cannot push '%s' - %s\n"
+msgstr ""
+
+msgid "all patches are currently applied\n"
+msgstr ""
+
+msgid "patch series already fully applied\n"
+msgstr ""
+
+msgid "cleaning up working directory..."
+msgstr ""
+
+#, python-format
+msgid "errors during apply, please fix and refresh %s\n"
+msgstr ""
+
+#, python-format
+msgid "now at: %s\n"
+msgstr "τώρα στο: %s\n"
+
+#, python-format
+msgid "patch %s is not applied"
+msgstr ""
+
+msgid "no patches applied\n"
+msgstr ""
+
+#, python-format
+msgid "qpop: %s is already at the top\n"
+msgstr ""
+
+msgid "qpop: forcing dirstate update\n"
+msgstr ""
+
+#, python-format
+msgid "trying to pop unknown node %s"
+msgstr ""
+
+msgid "popping would remove a revision not managed by this patch queue"
+msgstr ""
+
+msgid "deletions found between repo revs"
+msgstr ""
+
+msgid "patch queue now empty\n"
+msgstr ""
+
+msgid "cannot refresh a revision with children"
+msgstr ""
+
+msgid ""
+"refresh interrupted while patch was popped! (revert --all, qpush to "
+"recover)\n"
+msgstr ""
+
+msgid "patch queue directory already exists"
+msgstr ""
+
+#, python-format
+msgid "patch %s is not in series file"
+msgstr ""
+
+msgid "No saved patch data found\n"
+msgstr ""
+
+#, python-format
+msgid "restoring status: %s\n"
+msgstr ""
+
+msgid "save entry has children, leaving it alone\n"
+msgstr ""
+
+#, python-format
+msgid "removing save entry %s\n"
+msgstr ""
+
+#, python-format
+msgid "saved queue repository parents: %s %s\n"
+msgstr ""
+
+msgid "queue directory updating\n"
+msgstr ""
+
+msgid "Unable to load queue repository\n"
+msgstr ""
+
+msgid "save: no patches applied, exiting\n"
+msgstr ""
+
+msgid "status is already saved\n"
+msgstr ""
+
+msgid "hg patches saved state"
+msgstr ""
+
+msgid "repo commit failed\n"
+msgstr ""
+
+#, python-format
+msgid "patch %s is already in the series file"
+msgstr ""
+
+msgid "option \"-r\" not valid when importing files"
+msgstr ""
+
+msgid "option \"-n\" not valid when importing multiple patches"
+msgstr ""
+
+#, python-format
+msgid "revision %d is the root of more than one branch"
+msgstr ""
+
+#, python-format
+msgid "revision %d is already managed"
+msgstr ""
+
+#, python-format
+msgid "revision %d is not the parent of the queue"
+msgstr ""
+
+#, python-format
+msgid "revision %d has unmanaged children"
+msgstr ""
+
+#, python-format
+msgid "cannot import merge revision %d"
+msgstr ""
+
+#, python-format
+msgid "revision %d is not the parent of %d"
+msgstr ""
+
+msgid "-e is incompatible with import from -"
+msgstr ""
+
+#, python-format
+msgid "patch %s does not exist"
+msgstr ""
+
+msgid "need --name to import a patch from -"
+msgstr ""
+
+#, python-format
+msgid "adding %s to series file\n"
+msgstr ""
+
+msgid ""
+"remove patches from queue\n"
+"\n"
+"    The patches must not be applied, unless they are arguments to the\n"
+"    -r/--rev parameter. At least one patch or revision is required.\n"
+"\n"
+"    With --rev, mq will stop managing the named revisions (converting\n"
+"    them to regular Mercurial changesets). The qfinish command should\n"
+"    be used as an alternative for qdelete -r, as the latter option is\n"
+"    deprecated.\n"
+"\n"
+"    With -k/--keep, the patch files are preserved in the patch\n"
+"    directory."
+msgstr ""
+
+msgid "print the patches already applied"
+msgstr ""
+
+msgid "print the patches not yet applied"
+msgstr ""
+
+msgid ""
+"import a patch\n"
+"\n"
+"    The patch is inserted into the series after the last applied\n"
+"    patch. If no patches have been applied, qimport prepends the patch\n"
+"    to the series.\n"
+"\n"
+"    The patch will have the same name as its source file unless you\n"
+"    give it a new one with -n/--name.\n"
+"\n"
+"    You can register an existing patch inside the patch directory with\n"
+"    the -e/--existing flag.\n"
+"\n"
+"    With -f/--force, an existing patch of the same name will be\n"
+"    overwritten.\n"
+"\n"
+"    An existing changeset may be placed under mq control with -r/--rev\n"
+"    (e.g. qimport --rev tip -n patch will place tip under mq control).\n"
+"    With -g/--git, patches imported with --rev will use the git diff\n"
+"    format. See the diffs help topic for information on why this is\n"
+"    important for preserving rename/copy information and permission\n"
+"    changes.\n"
+"\n"
+"    To import a patch from standard input, pass - as the patch file.\n"
+"    When importing from standard input, a patch name must be specified\n"
+"    using the --name flag.\n"
+"    "
+msgstr ""
+
+msgid ""
+"init a new queue repository\n"
+"\n"
+"    The queue repository is unversioned by default. If\n"
+"    -c/--create-repo is specified, qinit will create a separate nested\n"
+"    repository for patches (qinit -c may also be run later to convert\n"
+"    an unversioned patch repository into a versioned one). You can use\n"
+"    qcommit to commit changes to this queue repository."
+msgstr ""
+
+msgid ""
+"clone main and patch repository at same time\n"
+"\n"
+"    If source is local, destination will have no patches applied. If\n"
+"    source is remote, this command can not check if patches are\n"
+"    applied in source, so cannot guarantee that patches are not\n"
+"    applied in destination. If you clone remote repository, be sure\n"
+"    before that it has no patches applied.\n"
+"\n"
+"    Source patch repository is looked for in <src>/.hg/patches by\n"
+"    default. Use -p <url> to change.\n"
+"\n"
+"    The patch directory must be a nested Mercurial repository, as\n"
+"    would be created by qinit -c.\n"
+"    "
+msgstr ""
+
+msgid "versioned patch repository not found (see qinit -c)"
+msgstr ""
+
+#, fuzzy
+msgid "cloning main repository\n"
+msgstr ""
+
+#, fuzzy
+msgid "cloning patch repository\n"
+msgstr "δε μπορεί να δημιουργηθεί ένα νέο αποθετήριο μέσω http"
+
+msgid "stripping applied patches from destination repository\n"
+msgstr ""
+
+#, fuzzy
+msgid "updating destination repository\n"
+msgstr ""
+
+msgid "commit changes in the queue repository"
+msgstr ""
+
+msgid "print the entire series file"
+msgstr ""
+
+msgid "print the name of the current patch"
+msgstr ""
+
+msgid "print the name of the next patch"
+msgstr ""
+
+msgid "all patches applied\n"
+msgstr "όλα τα patches έχουν εφαρμοστεί\n"
+
+msgid "print the name of the previous patch"
+msgstr "προβολή του ονόματος του προηγούμενου patch"
+
+msgid "only one patch applied\n"
+msgstr "μόνο ένα patch έχει εφαρμοστεί\n"
+
+msgid ""
+"create a new patch\n"
+"\n"
+"    qnew creates a new patch on top of the currently-applied patch (if\n"
+"    any). It will refuse to run if there are any outstanding changes\n"
+"    unless -f/--force is specified, in which case the patch will be\n"
+"    initialized with them. You may also use -I/--include,\n"
+"    -X/--exclude, and/or a list of files after the patch name to add\n"
+"    only changes to matching files to the new patch, leaving the rest\n"
+"    as uncommitted modifications.\n"
+"\n"
+"    -u/--user and -d/--date can be used to set the (given) user and\n"
+"    date, respectively. -U/--currentuser and -D/--currentdate set user\n"
+"    to current user and date to current date.\n"
+"\n"
+"    -e/--edit, -m/--message or -l/--logfile set the patch header as\n"
+"    well as the commit message. If none is specified, the header is\n"
+"    empty and the commit message is '[mq]: PATCH'.\n"
+"\n"
+"    Use the -g/--git option to keep the patch in the git extended diff\n"
+"    format. Read the diffs help topic for more information on why this\n"
+"    is important for preserving permission changes and copy/rename\n"
+"    information.\n"
+"    "
+msgstr ""
+
+msgid ""
+"update the current patch\n"
+"\n"
+"    If any file patterns are provided, the refreshed patch will\n"
+"    contain only the modifications that match those patterns; the\n"
+"    remaining modifications will remain in the working directory.\n"
+"\n"
+"    If -s/--short is specified, files currently included in the patch\n"
+"    will be refreshed just like matched files and remain in the patch.\n"
+"\n"
+"    hg add/remove/copy/rename work as usual, though you might want to\n"
+"    use git-style patches (-g/--git or [diff] git=1) to track copies\n"
+"    and renames. See the diffs help topic for more information on the\n"
+"    git diff format.\n"
+"    "
+msgstr ""
+
+msgid "option \"-e\" incompatible with \"-m\" or \"-l\""
+msgstr ""
+
+msgid ""
+"diff of the current patch and subsequent modifications\n"
+"\n"
+"    Shows a diff which includes the current patch as well as any\n"
+"    changes which have been made in the working directory since the\n"
+"    last refresh (thus showing what the current patch would become\n"
+"    after a qrefresh).\n"
+"\n"
+"    Use 'hg diff' if you only want to see the changes made since the\n"
+"    last qrefresh, or 'hg export qtip' if you want to see changes made\n"
+"    by the current patch without including changes made since the\n"
+"    qrefresh.\n"
+"    "
+msgstr ""
+
+msgid ""
+"fold the named patches into the current patch\n"
+"\n"
+"    Patches must not yet be applied. Each patch will be successively\n"
+"    applied to the current patch in the order given. If all the\n"
+"    patches apply successfully, the current patch will be refreshed\n"
+"    with the new cumulative patch, and the folded patches will be\n"
+"    deleted. With -k/--keep, the folded patch files will not be\n"
+"    removed afterwards.\n"
+"\n"
+"    The header for each folded patch will be concatenated with the\n"
+"    current patch header, separated by a line of '* * *'."
+msgstr ""
+
+msgid "qfold requires at least one patch name"
+msgstr ""
+
+msgid "No patches applied"
+msgstr ""
+
+#, python-format
+msgid "Skipping already folded patch %s"
+msgstr ""
+
+#, python-format
+msgid "qfold cannot fold already applied patch %s"
+msgstr ""
+
+#, python-format
+msgid "Error folding patch %s"
+msgstr ""
+
+msgid "push or pop patches until named patch is at top of stack"
+msgstr ""
+
+msgid ""
+"set or print guards for a patch\n"
+"\n"
+"    Guards control whether a patch can be pushed. A patch with no\n"
+"    guards is always pushed. A patch with a positive guard (\"+foo\") is\n"
+"    pushed only if the qselect command has activated it. A patch with\n"
+"    a negative guard (\"-foo\") is never pushed if the qselect command\n"
+"    has activated it.\n"
+"\n"
+"    With no arguments, print the currently active guards.\n"
+"    With arguments, set guards for the named patch.\n"
+"    NOTE: Specifying negative guards now requires '--'.\n"
+"\n"
+"    To set guards on another patch:\n"
+"      hg qguard -- other.patch +2.6.17 -stable\n"
+"    "
+msgstr ""
+
+msgid "cannot mix -l/--list with options or arguments"
+msgstr ""
+
+msgid "no patch to work with"
+msgstr ""
+
+#, python-format
+msgid "no patch named %s"
+msgstr ""
+
+msgid "print the header of the topmost or specified patch"
+msgstr ""
+
+msgid ""
+"push the next patch onto the stack\n"
+"\n"
+"    When -f/--force is applied, all local changes in patched files\n"
+"    will be lost.\n"
+"    "
+msgstr ""
+
+msgid "no saved queues found, please use -n\n"
+msgstr ""
+
+#, python-format
+msgid "merging with queue at: %s\n"
+msgstr ""
+
+msgid ""
+"pop the current patch off the stack\n"
+"\n"
+"    By default, pops off the top of the patch stack. If given a patch\n"
+"    name, keeps popping off patches until the named patch is at the\n"
+"    top of the stack.\n"
+"    "
+msgstr ""
+
+#, python-format
+msgid "using patch queue: %s\n"
+msgstr ""
+
+msgid ""
+"rename a patch\n"
+"\n"
+"    With one argument, renames the current patch to PATCH1.\n"
+"    With two arguments, renames PATCH1 to PATCH2."
+msgstr ""
+
+#, python-format
+msgid "%s already exists"
+msgstr ""
+
+#, python-format
+msgid "A patch named %s already exists in the series file"
+msgstr ""
+
+msgid "restore the queue state saved by a revision"
+msgstr ""
+
+msgid "save current queue state"
+msgstr ""
+
+#, python-format
+msgid "destination %s exists and is not a directory"
+msgstr ""
+
+#, python-format
+msgid "destination %s exists, use -f to force"
+msgstr ""
+
+#, python-format
+msgid "copy %s to %s\n"
+msgstr ""
+
+msgid ""
+"strip a revision and all its descendants from the repository\n"
+"\n"
+"    If one of the working directory's parent revisions is stripped, the\n"
+"    working directory will be updated to the parent of the stripped\n"
+"    revision.\n"
+"    "
+msgstr ""
+
+msgid ""
+"set or print guarded patches to push\n"
+"\n"
+"    Use the qguard command to set or print guards on patch, then use\n"
+"    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"
+"\n"
+"        qguard foo.patch -stable    (negative guard)\n"
+"        qguard bar.patch +stable    (positive guard)\n"
+"        qselect stable\n"
+"\n"
+"    This activates the \"stable\" guard. mq will skip foo.patch (because\n"
+"    it has a negative match) but push bar.patch (because it has a\n"
+"    positive match).\n"
+"\n"
+"    With no arguments, prints the currently active guards.\n"
+"    With one argument, sets the active guard.\n"
+"\n"
+"    Use -n/--none to deactivate guards (no other arguments needed).\n"
+"    When no guards are active, patches with positive guards are\n"
+"    skipped and patches with negative guards are pushed.\n"
+"\n"
+"    qselect can change the guards on applied patches. It does not pop\n"
+"    guarded patches by default. Use --pop to pop back to the last\n"
+"    applied patch that is not guarded. Use --reapply (which implies\n"
+"    --pop) to push back to the current patch afterwards, but skip\n"
+"    guarded patches.\n"
+"\n"
+"    Use -s/--series to print a list of all guards in the series file\n"
+"    (no other arguments needed). Use -v for more information."
+msgstr ""
+
+msgid "guards deactivated\n"
+msgstr ""
+
+#, python-format
+msgid "number of unguarded, unapplied patches has changed from %d to %d\n"
+msgstr ""
+
+#, python-format
+msgid "number of guarded, applied patches has changed from %d to %d\n"
+msgstr ""
+
+msgid "guards in series file:\n"
+msgstr ""
+
+msgid "no guards in series file\n"
+msgstr ""
+
+msgid "active guards:\n"
+msgstr ""
+
+msgid "no active guards\n"
+msgstr ""
+
+msgid "popping guarded patches\n"
+msgstr ""
+
+msgid "reapplying unguarded patches\n"
+msgstr ""
+
+msgid ""
+"move applied patches into repository history\n"
+"\n"
+"    Finishes the specified revisions (corresponding to applied\n"
+"    patches) by moving them out of mq control into regular repository\n"
+"    history.\n"
+"\n"
+"    Accepts a revision range or the -a/--applied option. If --applied\n"
+"    is specified, all applied mq revisions are removed from mq\n"
+"    control. Otherwise, the given revisions must be at the base of the\n"
+"    stack of applied patches.\n"
+"\n"
+"    This can be especially useful if your changes have been applied to\n"
+"    an upstream repository, or if you are about to push your changes\n"
+"    to upstream.\n"
+"    "
+msgstr ""
+
+msgid "no revisions specified"
+msgstr ""
+
+msgid "cannot commit over an applied mq patch"
+msgstr ""
+
+msgid "source has mq patches applied"
+msgstr ""
+
+#, python-format
+msgid "mq status file refers to unknown node %s\n"
+msgstr ""
+
+#, python-format
+msgid "Tag %s overrides mq patch of the same name\n"
+msgstr ""
+
+msgid "cannot import over an applied patch"
+msgstr ""
+
+msgid "print first line of patch header"
+msgstr ""
+
+msgid "hg qapplied [-s] [PATCH]"
+msgstr ""
+
+msgid "use pull protocol to copy metadata"
+msgstr ""
+
+msgid "do not update the new working directories"
+msgstr ""
+
+msgid "use uncompressed transfer (fast over LAN)"
+msgstr ""
+
+#, fuzzy
+msgid "location of source patch repository"
+msgstr "δε μπορεί να δημιουργηθεί ένα νέο αποθετήριο μέσω http"
+
+msgid "hg qclone [OPTION]... SOURCE [DEST]"
+msgstr ""
+
+msgid "hg qcommit [OPTION]... [FILE]..."
+msgstr ""
+
+msgid "hg qdiff [OPTION]... [FILE]..."
+msgstr ""
+
+msgid "keep patch file"
+msgstr ""
+
+msgid "stop managing a revision"
+msgstr ""
+
+msgid "hg qdelete [-k] [-r REV]... [PATCH]..."
+msgstr ""
+
+msgid "edit patch header"
+msgstr ""
+
+msgid "keep folded patch files"
+msgstr ""
+
+msgid "hg qfold [-e] [-k] [-m TEXT] [-l FILE] PATCH..."
+msgstr ""
+
+msgid "overwrite any local changes"
+msgstr ""
+
+msgid "hg qgoto [OPTION]... PATCH"
+msgstr ""
+
+msgid "list all patches and guards"
+msgstr ""
+
+msgid "drop all guards"
+msgstr ""
+
+msgid "hg qguard [-l] [-n] -- [PATCH] [+GUARD]... [-GUARD]..."
+msgstr ""
+
+msgid "hg qheader [PATCH]"
+msgstr ""
+
+msgid "import file in patch directory"
+msgstr ""
+
+#, fuzzy
+msgid "name of patch file"
+msgstr ""
+
+msgid "overwrite existing files"
+msgstr ""
+
+msgid "place existing revisions under mq control"
+msgstr ""
+
+msgid "use git extended diff format"
+msgstr "χρήση των επεκτάσεων του git για τα αρχεία diff"
+
+msgid "qpush after importing"
+msgstr ""
+
+msgid "hg qimport [-e] [-n NAME] [-f] [-g] [-P] [-r REV]... FILE..."
+msgstr ""
+
+msgid "create queue repository"
+msgstr "δημιουργία αποθετηρίου για το queue"
+
+msgid "hg qinit [-c]"
+msgstr ""
+
+msgid "import uncommitted changes into patch"
+msgstr "ενσωμάτωση τοπικών αλλαγών στο patch"
+
+msgid "add \"From: <current user>\" to patch"
+msgstr ""
+
+msgid "add \"From: <given user>\" to patch"
+msgstr ""
+
+msgid "add \"Date: <current date>\" to patch"
+msgstr ""
+
+msgid "add \"Date: <given date>\" to patch"
+msgstr ""
+
+msgid "hg qnew [-e] [-m TEXT] [-l FILE] [-f] PATCH [FILE]..."
+msgstr ""
+
+msgid "hg qnext [-s]"
+msgstr ""
+
+msgid "hg qprev [-s]"
+msgstr ""
+
+msgid "pop all patches"
+msgstr "αφαίρεση όλων των patches"
+
+msgid "queue name to pop"
+msgstr ""
+
+msgid "forget any local changes"
+msgstr "ακύρωση όλων των τοπικών αλλαγών"
+
+msgid "hg qpop [-a] [-n NAME] [-f] [PATCH | INDEX]"
+msgstr ""
+
+msgid "apply if the patch has rejects"
+msgstr ""
+
+msgid "list patch name in commit text"
+msgstr ""
+
+msgid "apply all patches"
+msgstr ""
+
+msgid "merge from another queue"
+msgstr ""
+
+msgid "merge queue name"
+msgstr ""
+
+msgid "hg qpush [-f] [-l] [-a] [-m] [-n NAME] [PATCH | INDEX]"
+msgstr ""
+
+msgid "refresh only files already in the patch and specified files"
+msgstr ""
+
+msgid "add/update \"From: <current user>\" in patch"
+msgstr ""
+
+msgid "add/update \"From: <given user>\" in patch"
+msgstr ""
+
+msgid "update \"Date: <current date>\" in patch (if present)"
+msgstr ""
+
+msgid "update \"Date: <given date>\" in patch (if present)"
+msgstr ""
+
+msgid "hg qrefresh [-I] [-X] [-e] [-m TEXT] [-l FILE] [-s] [FILE]..."
+msgstr ""
+
+msgid "hg qrename PATCH1 [PATCH2]"
+msgstr ""
+
+msgid "delete save entry"
+msgstr ""
+
+#, fuzzy
+msgid "update queue working directory"
+msgstr "χώρος εργασίας του %s"
+
+msgid "hg qrestore [-d] [-u] REV"
+msgstr ""
+
+msgid "copy patch directory"
+msgstr ""
+
+msgid "copy directory name"
+msgstr ""
+
+msgid "clear queue status file"
+msgstr ""
+
+msgid "force copy"
+msgstr ""
+
+msgid "hg qsave [-m TEXT] [-l FILE] [-c] [-n NAME] [-e] [-f]"
+msgstr ""
+
+msgid "disable all guards"
+msgstr ""
+
+msgid "list all guards in series file"
+msgstr ""
+
+msgid "pop to before first guarded applied patch"
+msgstr ""
+
+msgid "pop, then reapply patches"
+msgstr ""
+
+msgid "hg qselect [OPTION]... [GUARD]..."
+msgstr ""
+
+msgid "print patches not in series"
+msgstr ""
+
+msgid "hg qseries [-ms]"
+msgstr ""
+
+msgid "force removal with local changes"
+msgstr ""
+
+msgid "bundle unrelated changesets"
+msgstr ""
+
+msgid "no backups"
+msgstr ""
+
+msgid "hg strip [-f] [-b] [-n] REV"
+msgstr ""
+
+msgid "hg qtop [-s]"
+msgstr ""
+
+msgid "hg qunapplied [-s] [PATCH]"
+msgstr ""
+
+msgid "finish all applied changesets"
+msgstr ""
+
+msgid "hg qfinish [-a] [REV...]"
+msgstr ""
+
+msgid ""
+"hook extension to email notifications on commits/pushes\n"
+"\n"
+"Subscriptions can be managed through hgrc. Default mode is to print\n"
+"messages to stdout, for testing and configuring.\n"
+"\n"
+"To use, configure notify extension and enable in hgrc like this:\n"
+"\n"
+"   [extensions]\n"
+"   hgext.notify =\n"
+"\n"
+"   [hooks]\n"
+"   # one email for each incoming changeset\n"
+"   incoming.notify = python:hgext.notify.hook\n"
+"   # batch emails when many changesets incoming at one time\n"
+"   changegroup.notify = python:hgext.notify.hook\n"
+"\n"
+"   [notify]\n"
+"   # config items go in here\n"
+"\n"
+" config items:\n"
+"\n"
+" REQUIRED:\n"
+"   config = /path/to/file # file containing subscriptions\n"
+"\n"
+" OPTIONAL:\n"
+"   test = True            # print messages to stdout for testing\n"
+"   strip = 3              # number of slashes to strip for url paths\n"
+"   domain = example.com   # domain to use if committer missing domain\n"
+"   style = ...            # style file to use when formatting email\n"
+"   template = ...         # template to use when formatting email\n"
+"   incoming = ...         # template to use when run as incoming hook\n"
+"   changegroup = ...      # template when run as changegroup hook\n"
+"   maxdiff = 300          # max lines of diffs to include (0=none, -1=all)\n"
+"   maxsubject = 67        # truncate subject line longer than this\n"
+"   diffstat = True        # add a diffstat before the diff content\n"
+"   sources = serve        # notify if source of incoming changes in this "
+"list\n"
+"                          # (serve == ssh or http, push, pull, bundle)\n"
+"   [email]\n"
+"   from = user@host.com   # email address to send as if none given\n"
+"   [web]\n"
+"   baseurl = http://hgserver/... # root of hg web site for browsing commits\n"
+"\n"
+" notify config file has same format as regular hgrc. it has two\n"
+" sections so you can express subscriptions in whatever way is handier\n"
+" for you.\n"
+"\n"
+"   [usersubs]\n"
+"   # key is subscriber email, value is \",\"-separated list of glob "
+"patterns\n"
+"   user@host = pattern\n"
+"\n"
+"   [reposubs]\n"
+"   # key is glob pattern, value is \",\"-separated list of subscriber "
+"emails\n"
+"   pattern = user@host\n"
+"\n"
+" glob patterns are matched against path to repository root.\n"
+"\n"
+" if you like, you can put notify config file in repository that users\n"
+" can push changes to, they can manage their own subscriptions."
+msgstr ""
+
+#, python-format
+msgid "%s: %d new changesets"
+msgstr ""
+
+#, python-format
+msgid "notify: sending %d subscribers %d changes\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"\n"
+"diffs (truncated from %d to %d lines):\n"
+"\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"\n"
+"diffs (%d lines):\n"
+"\n"
+msgstr ""
+
+#, python-format
+msgid "notify: no subscribers to repository %s\n"
+msgstr ""
+
+#, python-format
+msgid "notify: changes have source \"%s\" - skipping\n"
+msgstr ""
+
+msgid ""
+"browse command output with external pager\n"
+"\n"
+"To set the pager that should be used, set the application variable:\n"
+"\n"
+"  [pager]\n"
+"  pager = LESS='FSRX' less\n"
+"\n"
+"If no pager is set, the pager extensions uses the environment variable\n"
+"$PAGER. If neither pager.pager, nor $PAGER is set, no pager is used.\n"
+"\n"
+"If you notice \"BROKEN PIPE\" error messages, you can disable them by\n"
+"setting:\n"
+"\n"
+"  [pager]\n"
+"  quiet = True\n"
+"\n"
+"You can disable the pager for certain commands by adding them to the\n"
+"pager.ignore list:\n"
+"\n"
+"  [pager]\n"
+"  ignore = version, help, update\n"
+"\n"
+"You can also enable the pager only for certain commands using\n"
+"pager.attend:\n"
+"\n"
+"  [pager]\n"
+"  attend = log\n"
+"\n"
+"If pager.attend is present, pager.ignore will be ignored.\n"
+"\n"
+"To ignore global commands like \"hg version\" or \"hg help\", you have to\n"
+"specify them in the global .hgrc\n"
+msgstr ""
+
+msgid ""
+"use suffixes to refer to ancestor revisions\n"
+"\n"
+"This extension allows you to use git-style suffixes to refer to the\n"
+"ancestors of a specific revision.\n"
+"\n"
+"For example, if you can refer to a revision as \"foo\", then:\n"
+"\n"
+"- foo^N = Nth parent of foo\n"
+"  foo^0 = foo\n"
+"  foo^1 = first parent of foo\n"
+"  foo^2 = second parent of foo\n"
+"  foo^  = foo^1\n"
+"\n"
+"- foo~N = Nth first grandparent of foo\n"
+"  foo~0 = foo\n"
+"  foo~1 = foo^1 = foo^ = first parent of foo\n"
+"  foo~2 = foo^1^1 = foo^^ = first parent of first parent of foo\n"
+msgstr ""
+
+msgid ""
+"sending Mercurial changesets as a series of patch emails\n"
+"\n"
+"The series is started off with a \"[PATCH 0 of N]\" introduction, which\n"
+"describes the series as a whole.\n"
+"\n"
+"Each patch email has a Subject line of \"[PATCH M of N] ...\", using the\n"
+"first line of the changeset description as the subject text. The\n"
+"message contains two or three body parts:\n"
+"\n"
+"  The changeset description.\n"
+"\n"
+"  [Optional] The result of running diffstat on the patch.\n"
+"\n"
+"  The patch itself, as generated by \"hg export\".\n"
+"\n"
+"Each message refers to the first in the series using the In-Reply-To\n"
+"and References headers, so they will show up as a sequence in threaded\n"
+"mail and news readers, and in mail archives.\n"
+"\n"
+"With the -d/--diffstat option, you will be prompted for each changeset\n"
+"with a diffstat summary and the changeset summary, so you can be sure\n"
+"you are sending the right changes.\n"
+"\n"
+"To enable this extension:\n"
+"\n"
+"  [extensions]\n"
+"  hgext.patchbomb =\n"
+"\n"
+"To configure other defaults, add a section like this to your hgrc\n"
+"file:\n"
+"\n"
+"  [email]\n"
+"  from = My Name <my@email>\n"
+"  to = recipient1, recipient2, ...\n"
+"  cc = cc1, cc2, ...\n"
+"  bcc = bcc1, bcc2, ...\n"
+"\n"
+"Then you can use the \"hg email\" command to mail a series of changesets\n"
+"as a patchbomb.\n"
+"\n"
+"To avoid sending patches prematurely, it is a good idea to first run\n"
+"the \"email\" command with the \"-n\" option (test only). You will be\n"
+"prompted for an email recipient address, a subject and an introductory\n"
+"message describing the patches of your patchbomb. Then when all is\n"
+"done, patchbomb messages are displayed. If the PAGER environment\n"
+"variable is set, your pager will be fired up once for each patchbomb\n"
+"message, so you can verify everything is alright.\n"
+"\n"
+"The -m/--mbox option is also very useful. Instead of previewing each\n"
+"patchbomb message in a pager or sending the messages directly, it will\n"
+"create a UNIX mailbox file with the patch emails. This mailbox file\n"
+"can be previewed with any mail user agent which supports UNIX mbox\n"
+"files, e.g. with mutt:\n"
+"\n"
+"  % mutt -R -f mbox\n"
+"\n"
+"When you are previewing the patchbomb messages, you can use `formail'\n"
+"(a utility that is commonly installed as part of the procmail\n"
+"package), to send each message out:\n"
+"\n"
+"  % formail -s sendmail -bm -t < mbox\n"
+"\n"
+"That should be all. Now your patchbomb is on its way out.\n"
+"\n"
+"You can also either configure the method option in the email section\n"
+"to be a sendmail compatible mailer or fill out the [smtp] section so\n"
+"that the patchbomb extension can automatically send patchbombs\n"
+"directly from the commandline. See the [email] and [smtp] sections in\n"
+"hgrc(5) for details."
+msgstr ""
+
+msgid "Please enter a valid value.\n"
+msgstr ""
+
+msgid "does the diffstat above look okay? "
+msgstr ""
+
+msgid "diffstat rejected"
+msgstr ""
+
+msgid ""
+"send changesets by email\n"
+"\n"
+"    By default, diffs are sent in the format generated by hg export,\n"
+"    one per message. The series starts with a \"[PATCH 0 of N]\"\n"
+"    introduction, which describes the series as a whole.\n"
+"\n"
+"    Each patch email has a Subject line of \"[PATCH M of N] ...\", using\n"
+"    the first line of the changeset description as the subject text.\n"
+"    The message contains two or three parts. First, the changeset\n"
+"    description. Next, (optionally) if the diffstat program is\n"
+"    installed and -d/--diffstat is used, the result of running\n"
+"    diffstat on the patch. Finally, the patch itself, as generated by\n"
+"    \"hg export\".\n"
+"\n"
+"    By default the patch is included as text in the email body for\n"
+"    easy reviewing. Using the -a/--attach option will instead create\n"
+"    an attachment for the patch. With -i/--inline an inline attachment\n"
+"    will be created.\n"
+"\n"
+"    With -o/--outgoing, emails will be generated for patches not found\n"
+"    in the destination repository (or only those which are ancestors\n"
+"    of the specified revisions if any are provided)\n"
+"\n"
+"    With -b/--bundle, changesets are selected as for --outgoing, but a\n"
+"    single email containing a binary Mercurial bundle as an attachment\n"
+"    will be sent.\n"
+"\n"
+"    Examples:\n"
+"\n"
+"    hg email -r 3000          # send patch 3000 only\n"
+"    hg email -r 3000 -r 3001  # send patches 3000 and 3001\n"
+"    hg email -r 3000:3005     # send patches 3000 through 3005\n"
+"    hg email 3000             # send patch 3000 (deprecated)\n"
+"\n"
+"    hg email -o               # send all patches not in default\n"
+"    hg email -o DEST          # send all patches not in DEST\n"
+"    hg email -o -r 3000       # send all ancestors of 3000 not in default\n"
+"    hg email -o -r 3000 DEST  # send all ancestors of 3000 not in DEST\n"
+"\n"
+"    hg email -b               # send bundle of all patches not in default\n"
+"    hg email -b DEST          # send bundle of all patches not in DEST\n"
+"    hg email -b -r 3000       # bundle of all ancestors of 3000 not in "
+"default\n"
+"    hg email -b -r 3000 DEST  # bundle of all ancestors of 3000 not in DEST\n"
+"\n"
+"    Before using this command, you will need to enable email in your\n"
+"    hgrc. See the [email] section in hgrc(5) for details.\n"
+"    "
+msgstr ""
+
+msgid "specify at least one changeset with -r or -o"
+msgstr "ορίστε τουλάχιστον μια αλλαγή με -r ή -o"
+
+msgid "--outgoing mode always on with --bundle; do not re-specify --outgoing"
+msgstr ""
+
+msgid "too many destinations"
+msgstr "πολύ μεγάλος αριθμός παραληπτών"
+
+msgid "use only one form to specify the revision"
+msgstr ""
+
+msgid ""
+"\n"
+"Write the introductory message for the patch series.\n"
+"\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"This patch series consists of %d patches.\n"
+"\n"
+msgstr ""
+
+msgid "Final summary:\n"
+msgstr ""
+
+msgid "Displaying "
+msgstr ""
+
+msgid "Writing "
+msgstr ""
+
+msgid "Sending "
+msgstr ""
+
+msgid "send patches as attachments"
+msgstr ""
+
+msgid "send patches as inline attachments"
+msgstr ""
+
+msgid "email addresses of blind carbon copy recipients"
+msgstr ""
+
+msgid "email addresses of copy recipients"
+msgstr ""
+
+msgid "add diffstat output to messages"
+msgstr ""
+
+msgid "use the given date as the sending date"
+msgstr ""
+
+msgid "use the given file as the series description"
+msgstr ""
+
+msgid "email address of sender"
+msgstr ""
+
+msgid "print messages that would be sent"
+msgstr ""
+
+msgid "write messages to mbox file instead of sending them"
+msgstr ""
+
+msgid "subject of first message (intro or single patch)"
+msgstr ""
+
+msgid "message identifier to reply to"
+msgstr ""
+
+msgid "email addresses of recipients"
+msgstr ""
+
+msgid "omit hg patch header"
+msgstr ""
+
+msgid "send changes not found in the target repository"
+msgstr ""
+
+msgid "send changes not in target as a binary bundle"
+msgstr ""
+
+msgid "name of the bundle attachment file"
+msgstr ""
+
+msgid "a revision to send"
+msgstr ""
+
+msgid "run even when remote repository is unrelated (with -b/--bundle)"
+msgstr ""
+
+msgid "a base changeset to specify instead of a destination (with -b/--bundle)"
+msgstr ""
+
+msgid "send an introduction email for a single patch"
+msgstr ""
+
+msgid "hg email [OPTION]... [DEST]..."
+msgstr ""
+
+msgid ""
+"removes files not tracked by Mercurial\n"
+"\n"
+"    Delete files not known to Mercurial. This is useful to test local\n"
+"    and uncommitted changes in an otherwise-clean source tree.\n"
+"\n"
+"    This means that purge will delete:\n"
+"     - Unknown files: files marked with \"?\" by \"hg status\"\n"
+"     - Empty directories: in fact Mercurial ignores directories unless\n"
+"       they contain files under source control management\n"
+"    But it will leave untouched:\n"
+"     - Modified and unmodified tracked files\n"
+"     - Ignored files (unless --all is specified)\n"
+"     - New files added to the repository (with \"hg add\")\n"
+"\n"
+"    If directories are given on the command line, only files in these\n"
+"    directories are considered.\n"
+"\n"
+"    Be careful with purge, as you could irreversibly delete some files\n"
+"    you forgot to add to the repository. If you only want to print the\n"
+"    list of files that this program would delete, use the --print\n"
+"    option.\n"
+"    "
+msgstr ""
+
+#, python-format
+msgid "%s cannot be removed"
+msgstr ""
+
+#, python-format
+msgid "warning: %s\n"
+msgstr ""
+
+#, python-format
+msgid "Removing file %s\n"
+msgstr ""
+
+#, python-format
+msgid "Removing directory %s\n"
+msgstr ""
+
+msgid "abort if an error occurs"
+msgstr ""
+
+msgid "purge ignored files too"
+msgstr ""
+
+msgid "print filenames instead of deleting them"
+msgstr ""
+
+msgid "end filenames with NUL, for use with xargs (implies -p/--print)"
+msgstr ""
+
+msgid "hg purge [OPTION]... [DIR]..."
+msgstr ""
+
+msgid ""
+"move sets of revisions to a different ancestor\n"
+"\n"
+"This extension lets you rebase changesets in an existing Mercurial\n"
+"repository.\n"
+"\n"
+"For more information:\n"
+"http://www.selenic.com/mercurial/wiki/index.cgi/RebaseProject\n"
+msgstr ""
+
+msgid "first revision, do not change ancestor\n"
+msgstr ""
+
+msgid ""
+"move changeset (and descendants) to a different branch\n"
+"\n"
+"    Rebase uses repeated merging to graft changesets from one part of\n"
+"    history onto another. This can be useful for linearizing local\n"
+"    changes relative to a master development tree.\n"
+"\n"
+"    If a rebase is interrupted to manually resolve a merge, it can be\n"
+"    continued with --continue/-c or aborted with --abort/-a.\n"
+"    "
+msgstr ""
+
+msgid "cannot use both abort and continue"
+msgstr ""
+
+msgid "cannot use collapse with continue or abort"
+msgstr ""
+
+msgid "abort and continue do not allow specifying revisions"
+msgstr ""
+
+msgid "cannot specify both a revision and a base"
+msgstr ""
+
+msgid "nothing to rebase\n"
+msgstr ""
+
+msgid "cannot use both keepbranches and extrafn"
+msgstr ""
+
+msgid "rebase merging completed\n"
+msgstr ""
+
+msgid "warning: new changesets detected on source branch, not stripping\n"
+msgstr ""
+
+msgid "rebase completed\n"
+msgstr ""
+
+#, python-format
+msgid "%d revisions have been skipped\n"
+msgstr ""
+
+msgid " set parents\n"
+msgstr ""
+
+#, python-format
+msgid "rebasing %d:%s\n"
+msgstr ""
+
+#, python-format
+msgid " future parents are %d and %d\n"
+msgstr ""
+
+#, python-format
+msgid " update to %d:%s\n"
+msgstr " ενημέρωση σε %d:%s\n"
+
+msgid " already in target\n"
+msgstr ""
+
+#, python-format
+msgid " merge against %d:%s\n"
+msgstr ""
+
+msgid "fix unresolved conflicts with hg resolve then run hg rebase --continue"
+msgstr ""
+
+msgid "resuming interrupted rebase\n"
+msgstr ""
+
+#, python-format
+msgid "no changes, revision %d skipped\n"
+msgstr ""
+
+#, python-format
+msgid "next revision set to %s\n"
+msgstr ""
+
+#, python-format
+msgid "cannot use revision %d as base, result would have 3 parents"
+msgstr ""
+
+#, python-format
+msgid "revision %d is an mq patch (%s), finalize it.\n"
+msgstr ""
+
+#, python-format
+msgid "import mq patch %d (%s)\n"
+msgstr ""
+
+msgid "rebase status stored\n"
+msgstr ""
+
+msgid "rebase status resumed\n"
+msgstr ""
+
+msgid "no rebase in progress"
+msgstr ""
+
+msgid "warning: new changesets detected on target branch, not stripping\n"
+msgstr ""
+
+msgid "rebase aborted\n"
+msgstr ""
+
+msgid "cannot rebase onto an applied mq patch"
+msgstr ""
+
+msgid "cannot rebase an ancestor"
+msgstr ""
+
+msgid "cannot rebase a descendant"
+msgstr ""
+
+msgid "already working on current\n"
+msgstr ""
+
+msgid "already working on the current branch\n"
+msgstr ""
+
+#, python-format
+msgid "rebase onto %d starting from %d\n"
+msgstr ""
+
+msgid "unable to collapse, there is more than one external parent"
+msgstr ""
+
+msgid "--update and --rebase are not compatible, ignoring the update flag\n"
+msgstr ""
+
+msgid "rebase working directory to branch head"
+msgstr ""
+
+msgid "rebase from a given revision"
+msgstr ""
+
+msgid "rebase from the base of a given revision"
+msgstr ""
+
+msgid "rebase onto a given revision"
+msgstr ""
+
+msgid "collapse the rebased revisions"
+msgstr ""
+
+msgid "keep original revisions"
+msgstr ""
+
+msgid "keep original branches"
+msgstr ""
+
+msgid "continue an interrupted rebase"
+msgstr ""
+
+msgid "abort an interrupted rebase"
+msgstr ""
+
+msgid ""
+"hg rebase [-s REV | -b REV] [-d REV] [--collapse] [--keep] [--keepbranches] "
+"| [-c] | [-a]"
+msgstr ""
+
+msgid "interactive change selection during commit or qrefresh"
+msgstr ""
+
+msgid "this modifies a binary file (all or nothing)\n"
+msgstr ""
+
+msgid "this is a binary file\n"
+msgstr ""
+
+#, python-format
+msgid "%d hunks, %d lines changed\n"
+msgstr ""
+
+msgid "[Ynsfdaq?]"
+msgstr ""
+
+msgid "&Yes, record this change"
+msgstr ""
+
+msgid "&No, skip this change"
+msgstr ""
+
+msgid "&Skip remaining changes to this file"
+msgstr ""
+
+msgid "Record remaining changes to this &file"
+msgstr ""
+
+msgid "&Done, skip remaining changes and files"
+msgstr ""
+
+msgid "Record &all changes to all remaining files"
+msgstr ""
+
+#, fuzzy
+msgid "&Quit, recording no changes"
+msgstr ""
+
+msgid "&?"
+msgstr ""
+
+msgid "y"
+msgstr ""
+
+msgid "?"
+msgstr ""
+
+msgid "y - record this change"
+msgstr ""
+
+msgid "s"
+msgstr ""
+
+msgid "f"
+msgstr ""
+
+msgid "d"
+msgstr ""
+
+msgid "a"
+msgstr ""
+
+msgid "q"
+msgstr ""
+
+msgid "user quit"
+msgstr ""
+
+#, python-format
+msgid "examine changes to %s?"
+msgstr ""
+
+msgid " and "
+msgstr ""
+
+#, python-format
+msgid "record this change to %r?"
+msgstr ""
+
+#, python-format
+msgid "record change %d/%d to %r?"
+msgstr ""
+
+msgid ""
+"interactively select changes to commit\n"
+"\n"
+"    If a list of files is omitted, all changes reported by \"hg status\"\n"
+"    will be candidates for recording.\n"
+"\n"
+"    See 'hg help dates' for a list of formats valid for -d/--date.\n"
+"\n"
+"    You will be prompted for whether to record changes to each\n"
+"    modified file, and for files with multiple changes, for each\n"
+"    change to use. For each query, the following responses are\n"
+"    possible:\n"
+"\n"
+"    y - record this change\n"
+"    n - skip this change\n"
+"\n"
+"    s - skip remaining changes to this file\n"
+"    f - record remaining changes to this file\n"
+"\n"
+"    d - done, skip remaining changes and files\n"
+"    a - record all changes to all remaining files\n"
+"    q - quit, recording no changes\n"
+"\n"
+"    ? - display help"
+msgstr ""
+
+msgid "'mq' extension not loaded"
+msgstr ""
+
+msgid "running non-interactively, use commit instead"
+msgstr ""
+
+msgid "no changes to record\n"
+msgstr ""
+
+#, python-format
+msgid "backup %r as %r\n"
+msgstr ""
+
+msgid "applying patch\n"
+msgstr ""
+
+msgid "patch failed to apply"
+msgstr ""
+
+#, python-format
+msgid "restoring %r to %r\n"
+msgstr ""
+
+msgid "hg record [OPTION]... [FILE]..."
+msgstr ""
+
+msgid "hg qrecord [OPTION]... PATCH [FILE]..."
+msgstr ""
+
+msgid ""
+"create a new shared repository (experimental)\n"
+"\n"
+"    Initialize a new repository and working directory that shares its\n"
+"    history with another repository.\n"
+"\n"
+"    NOTE: actions that change history such as rollback or moving the\n"
+"    source may confuse sharers.\n"
+"    "
+msgstr ""
+
+#, fuzzy
+msgid "do not create a working copy"
+msgstr "(δώστε 'hg update' για να εξάγετε αντίγραφο εργασίας)\n"
+
+msgid "[-U] SOURCE [DEST]"
+msgstr ""
+
+msgid ""
+"patch transplanting tool\n"
+"\n"
+"This extension allows you to transplant patches from another branch.\n"
+"\n"
+"Transplanted patches are recorded in .hg/transplant/transplants, as a\n"
+"map from a changeset hash to its hash in the source repository.\n"
+msgstr ""
+
+#, python-format
+msgid "skipping already applied revision %s\n"
+msgstr ""
+
+#, python-format
+msgid "skipping merge changeset %s:%s\n"
+msgstr ""
+
+#, python-format
+msgid "%s merged at %s\n"
+msgstr ""
+
+#, python-format
+msgid "%s transplanted to %s\n"
+msgstr ""
+
+#, python-format
+msgid "filtering %s\n"
+msgstr ""
+
+msgid "filter failed"
+msgstr ""
+
+msgid "can only omit patchfile if merging"
+msgstr ""
+
+#, python-format
+msgid "%s: empty changeset"
+msgstr ""
+
+msgid "Fix up the merge and run hg transplant --continue"
+msgstr ""
+
+#, python-format
+msgid "%s transplanted as %s\n"
+msgstr ""
+
+msgid "transplant log file is corrupt"
+msgstr ""
+
+#, python-format
+msgid "working dir not at transplant parent %s"
+msgstr ""
+
+msgid "commit failed"
+msgstr ""
+
+msgid "apply changeset? [ynmpcq?]:"
+msgstr ""
+
+msgid ""
+"transplant changesets from another branch\n"
+"\n"
+"    Selected changesets will be applied on top of the current working\n"
+"    directory with the log of the original changeset. If --log is\n"
+"    specified, log messages will have a comment appended of the form:\n"
+"\n"
+"    (transplanted from CHANGESETHASH)\n"
+"\n"
+"    You can rewrite the changelog message with the --filter option.\n"
+"    Its argument will be invoked with the current changelog message as\n"
+"    $1 and the patch as $2.\n"
+"\n"
+"    If --source/-s is specified, selects changesets from the named\n"
+"    repository. If --branch/-b is specified, selects changesets from\n"
+"    the branch holding the named revision, up to that revision. If\n"
+"    --all/-a is specified, all changesets on the branch will be\n"
+"    transplanted, otherwise you will be prompted to select the\n"
+"    changesets you want.\n"
+"\n"
+"    hg transplant --branch REVISION --all will rebase the selected\n"
+"    branch (up to the named revision) onto your current working\n"
+"    directory.\n"
+"\n"
+"    You can optionally mark selected transplanted changesets as merge\n"
+"    changesets. You will not be prompted to transplant any ancestors\n"
+"    of a merged transplant, and you can merge descendants of them\n"
+"    normally instead of transplanting them.\n"
+"\n"
+"    If no merges or revisions are provided, hg transplant will start\n"
+"    an interactive changeset browser.\n"
+"\n"
+"    If a changeset application fails, you can fix the merge by hand\n"
+"    and then resume where you left off by calling hg transplant\n"
+"    --continue/-c.\n"
+"    "
+msgstr ""
+
+msgid "--continue is incompatible with branch, all or merge"
+msgstr ""
+
+msgid "no source URL, branch tag or revision list provided"
+msgstr ""
+
+msgid "--all requires a branch revision"
+msgstr ""
+
+msgid "--all is incompatible with a revision list"
+msgstr ""
+
+msgid "no revision checked out"
+msgstr ""
+
+msgid "outstanding uncommitted merges"
+msgstr ""
+
+msgid "outstanding local changes"
+msgstr ""
+
+msgid "pull patches from REPOSITORY"
+msgstr ""
+
+msgid "pull patches from branch BRANCH"
+msgstr ""
+
+msgid "pull all changesets up to BRANCH"
+msgstr ""
+
+msgid "skip over REV"
+msgstr ""
+
+msgid "merge at REV"
+msgstr ""
+
+msgid "append transplant info to log message"
+msgstr ""
+
+msgid "continue last transplant session after repair"
+msgstr ""
+
+msgid "filter changesets through FILTER"
+msgstr ""
+
+msgid ""
+"hg transplant [-s REPOSITORY] [-b BRANCH [-a]] [-p REV] [-m REV] [REV]..."
+msgstr ""
+
+msgid ""
+"allow to use MBCS path with problematic encoding.\n"
+"\n"
+"Some MBCS encodings are not good for some path operations (i.e.\n"
+"splitting path, case conversion, etc.) with its encoded bytes. We call\n"
+"such a encoding (i.e. shift_jis and big5) as \"problematic encoding\".\n"
+"This extension can be used to fix the issue with those encodings by\n"
+"wrapping some functions to convert to Unicode string before path\n"
+"operation.\n"
+"\n"
+"This extension is useful for:\n"
+" * Japanese Windows users using shift_jis encoding.\n"
+" * Chinese Windows users using big5 encoding.\n"
+" * All users who use a repository with one of problematic encodings on\n"
+"   case-insensitive file system.\n"
+"\n"
+"This extension is not needed for:\n"
+" * Any user who use only ASCII chars in path.\n"
+" * Any user who do not use any of problematic encodings.\n"
+"\n"
+"Note that there are some limitations on using this extension:\n"
+" * You should use single encoding in one repository.\n"
+" * You should set same encoding for the repository by locale or\n"
+"   HGENCODING.\n"
+"\n"
+"To use this extension, enable the extension in .hg/hgrc or ~/.hgrc:\n"
+"\n"
+"  [extensions]\n"
+"  hgext.win32mbcs =\n"
+"\n"
+"Path encoding conversion are done between Unicode and\n"
+"encoding.encoding which is decided by Mercurial from current locale\n"
+"setting or HGENCODING.\n"
+"\n"
+msgstr ""
+
+#, python-format
+msgid "[win32mbcs] filename conversion fail with %s encoding\n"
+msgstr ""
+
+msgid "[win32mbcs] cannot activate on this platform.\n"
+msgstr ""
+
+#, python-format
+msgid "[win32mbcs] activated with encoding: %s\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"WARNING: %s already has %s line endings\n"
+"and does not need EOL conversion by the win32text plugin.\n"
+"Before your next commit, please reconsider your encode/decode settings in \n"
+"Mercurial.ini or %s.\n"
+msgstr ""
+
+#, python-format
+msgid "Attempt to commit or push text file(s) using %s line endings\n"
+msgstr ""
+
+#, python-format
+msgid "in %s: %s\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"\n"
+"To prevent this mistake in your local repository,\n"
+"add to Mercurial.ini or .hg/hgrc:\n"
+"\n"
+"[hooks]\n"
+"pretxncommit.%s = python:hgext.win32text.forbid%s\n"
+"\n"
+"and also consider adding:\n"
+"\n"
+"[extensions]\n"
+"hgext.win32text =\n"
+"[encode]\n"
+"** = %sencode:\n"
+"[decode]\n"
+"** = %sdecode:\n"
+msgstr ""
+
+msgid ""
+"zeroconf support for Mercurial repositories\n"
+"\n"
+"Zeroconf enabled repositories will be announced in a network without\n"
+"the need to configure a server or a service. They can be discovered\n"
+"without knowing their actual IP address.\n"
+"\n"
+"To use the zeroconf extension add the following entry to your hgrc\n"
+"file:\n"
+"\n"
+"[extensions]\n"
+"hgext.zeroconf =\n"
+"\n"
+"To allow other people to discover your repository using run \"hg serve\"\n"
+"in your repository.\n"
+"\n"
+" $ cd test\n"
+" $ hg serve\n"
+"\n"
+"You can discover zeroconf enabled repositories by running \"hg paths\".\n"
+"\n"
+" $ hg paths\n"
+" zc-test = http://example.com:8000/test\n"
+msgstr ""
+
+msgid "archive prefix contains illegal components"
+msgstr ""
+
+msgid "cannot give prefix when archiving to files"
+msgstr ""
+
+#, python-format
+msgid "unknown archive type '%s'"
+msgstr ""
+
+msgid "invalid changegroup"
+msgstr ""
+
+msgid "unknown parent"
+msgstr ""
+
+#, python-format
+msgid "integrity check failed on %s:%d"
+msgstr ""
+
+#, python-format
+msgid "%s: not a Mercurial bundle file"
+msgstr ""
+
+#, python-format
+msgid "%s: unknown bundle version"
+msgstr ""
+
+#, python-format
+msgid "%s: unknown bundle compression type"
+msgstr ""
+
+msgid "cannot create new bundle repository"
+msgstr ""
+
+#, python-format
+msgid "premature EOF reading chunk (got %d bytes, expected %d)"
+msgstr ""
+
+#, fuzzy
+msgid "empty username"
+msgstr ""
+
+#, python-format
+msgid "username %s contains a newline"
+msgstr ""
+
+msgid "options --message and --logfile are mutually exclusive"
+msgstr ""
+
+#, python-format
+msgid "can't read commit message '%s': %s"
+msgstr ""
+
+msgid "limit must be a positive integer"
+msgstr ""
+
+msgid "limit must be positive"
+msgstr ""
+
+msgid "too many revisions specified"
+msgstr ""
+
+#, python-format
+msgid "invalid format spec '%%%s' in output filename"
+msgstr ""
+
+#, python-format
+msgid "adding %s\n"
+msgstr "προσθήκη του %s\n"
+
+#, python-format
+msgid "removing %s\n"
+msgstr "αφαίρεση του %s\n"
+
+#, python-format
+msgid "recording removal of %s as rename to %s (%d%% similar)\n"
+msgstr ""
+
+#, python-format
+msgid "%s: not copying - file is not managed\n"
+msgstr ""
+
+#, python-format
+msgid "%s: not copying - file has been marked for remove\n"
+msgstr ""
+
+#, python-format
+msgid "%s: not overwriting - %s collides with %s\n"
+msgstr ""
+
+#, python-format
+msgid "%s: not overwriting - file exists\n"
+msgstr ""
+
+#, python-format
+msgid "%s: deleted in working copy\n"
+msgstr ""
+
+#, python-format
+msgid "%s: cannot copy - %s\n"
+msgstr ""
+
+#, python-format
+msgid "moving %s to %s\n"
+msgstr "μετακίνηση του %s στο %s\n"
+
+#, fuzzy, python-format
+msgid "copying %s to %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 ""
+
+msgid "no destination specified"
+msgstr ""
+
+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"
+msgstr ""
+
+msgid "no files to copy"
+msgstr ""
+
+msgid "(consider using --after)\n"
+msgstr ""
+
+#, python-format
+msgid "changeset:   %d:%s\n"
+msgstr ""
+
+#, python-format
+msgid "branch:      %s\n"
+msgstr ""
+
+#, python-format
+msgid "tag:         %s\n"
+msgstr ""
+
+#, python-format
+msgid "parent:      %d:%s\n"
+msgstr ""
+
+#, python-format
+msgid "manifest:    %d:%s\n"
+msgstr ""
+
+#, python-format
+msgid "user:        %s\n"
+msgstr ""
+
+#, python-format
+msgid "date:        %s\n"
+msgstr ""
+
+msgid "files+:"
+msgstr ""
+
+msgid "files-:"
+msgstr ""
+
+msgid "files:"
+msgstr ""
+
+#, python-format
+msgid "files:       %s\n"
+msgstr ""
+
+#, python-format
+msgid "copies:      %s\n"
+msgstr ""
+
+#, python-format
+msgid "extra:       %s=%s\n"
+msgstr ""
+
+msgid "description:\n"
+msgstr ""
+
+#, python-format
+msgid "summary:     %s\n"
+msgstr ""
+
+#, python-format
+msgid "%s: no key named '%s'"
+msgstr ""
+
+#, python-format
+msgid "%s: %s"
+msgstr ""
+
+#, python-format
+msgid "Found revision %s from %s\n"
+msgstr ""
+
+msgid "revision matching date not found"
+msgstr ""
+
+#, python-format
+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 ""
+
+msgid "HG: Enter commit message.  Lines beginning with 'HG:' are removed."
+msgstr ""
+
+msgid "HG: Leave message empty to abort commit."
+msgstr ""
+
+#, python-format
+msgid "HG: user: %s"
+msgstr ""
+
+msgid "HG: branch merge"
+msgstr ""
+
+#, python-format
+msgid "HG: branch '%s'"
+msgstr ""
+
+#, python-format
+msgid "HG: added %s"
+msgstr ""
+
+#, fuzzy, python-format
+msgid "HG: changed %s"
+msgstr "προσθήκη αλλαγής %s\n"
+
+#, fuzzy, python-format
+msgid "HG: removed %s"
+msgstr ""
+
+msgid "HG: no files changed"
+msgstr ""
+
+msgid "empty commit message"
+msgstr ""
+
+#, fuzzy
+msgid ""
+"add the specified files on the next commit\n"
+"\n"
+"    Schedule files to be version controlled and added to the\n"
+"    repository.\n"
+"\n"
+"    The files will be added to the repository at the next commit. To\n"
+"    undo an add before that, see hg revert.\n"
+"\n"
+"    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"
+"\n"
+"    Add all new files and remove all missing files from the\n"
+"    repository.\n"
+"\n"
+"    New files are ignored if they match any of the patterns in\n"
+"    .hgignore. As with add, these changes take effect at the next\n"
+"    commit.\n"
+"\n"
+"    Use the -s/--similarity option to detect renamed files. With a\n"
+"    parameter > 0, this compares every removed file with every added\n"
+"    file and records those similar enough as renames. This option\n"
+"    takes a percentage between 0 (disabled) and 100 (files must be\n"
+"    identical) as its parameter. Detecting renamed files this way can\n"
+"    be expensive.\n"
+"    "
+msgstr ""
+
+msgid "similarity must be a number"
+msgstr ""
+
+msgid "similarity must be between 0 and 100"
+msgstr ""
+
+msgid ""
+"show changeset information by line for each file\n"
+"\n"
+"    List changes in files, showing the revision id responsible for\n"
+"    each line\n"
+"\n"
+"    This command is useful for discovering when a change was made and\n"
+"    by whom.\n"
+"\n"
+"    Without the -a/--text option, annotate will avoid processing files\n"
+"    it detects as binary. With -a, annotate will annotate the file\n"
+"    anyway, although the results will probably be neither useful\n"
+"    nor desirable.\n"
+"    "
+msgstr ""
+
+msgid "at least one filename or pattern is required"
+msgstr ""
+
+msgid "at least one of -n/-c is required for -l"
+msgstr ""
+
+#, python-format
+msgid "%s: binary file\n"
+msgstr ""
+
+msgid ""
+"create an unversioned archive of a repository revision\n"
+"\n"
+"    By default, the revision used is the parent of the working\n"
+"    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"
+"\n"
+"    The exact name of the destination archive or directory is given\n"
+"    using a format string; see 'hg help export' for details.\n"
+"\n"
+"    Each member added to an archive file has a directory prefix\n"
+"    prepended. Use -p/--prefix to specify a format string for the\n"
+"    prefix. The default is the basename of the archive, with suffixes\n"
+"    removed.\n"
+"    "
+msgstr ""
+
+msgid "no working directory: please specify a revision"
+msgstr ""
+
+msgid "repository root cannot be destination"
+msgstr ""
+
+msgid "cannot archive plain files to stdout"
+msgstr ""
+
+msgid ""
+"reverse effect of earlier changeset\n"
+"\n"
+"    Commit the backed out changes as a new changeset. The new\n"
+"    changeset is a child of the backed out changeset.\n"
+"\n"
+"    If you backout a changeset other than the tip, a new head is\n"
+"    created. This head will be the new tip and you should merge this\n"
+"    backout changeset with another head.\n"
+"\n"
+"    The --merge option remembers the parent of the working directory\n"
+"    before starting the backout, then merges the new head with that\n"
+"    changeset afterwards. This saves you from doing the merge by hand.\n"
+"    The result of this merge is not committed, as with a normal merge.\n"
+"\n"
+"    See 'hg help dates' for a list of formats valid for -d/--date.\n"
+"    "
+msgstr ""
+
+msgid "please specify just one revision"
+msgstr "παρακαλώ ορίστε μόνο μία αλλαγή"
+
+msgid "please specify a revision to backout"
+msgstr ""
+
+msgid "cannot backout change on a different branch"
+msgstr ""
+
+msgid "cannot backout a change with no parents"
+msgstr ""
+
+msgid "cannot backout a merge changeset without --parent"
+msgstr ""
+
+#, python-format
+msgid "%s is not a parent of %s"
+msgstr "η αλλαγή %s δεν είναι γονική αλλαγή της %s"
+
+msgid "cannot use --parent on non-merge changeset"
+msgstr ""
+
+#, python-format
+msgid "Backed out changeset %s"
+msgstr ""
+
+#, python-format
+msgid "changeset %s backs out changeset %s\n"
+msgstr ""
+
+#, python-format
+msgid "merging with changeset %s\n"
+msgstr ""
+
+msgid "the backout changeset is a new head - do not forget to merge\n"
+msgstr ""
+
+msgid "(use \"backout --merge\" if you want to auto-merge)\n"
+msgstr ""
+
+msgid ""
+"subdivision search of changesets\n"
+"\n"
+"    This command helps to find changesets which introduce problems. To\n"
+"    use, mark the earliest changeset you know exhibits the problem as\n"
+"    bad, then mark the latest changeset which is free from the problem\n"
+"    as good. Bisect will update your working directory to a revision\n"
+"    for testing (unless the -U/--noupdate option is specified). Once\n"
+"    you have performed tests, mark the working directory as good or\n"
+"    bad, and bisect will either update to another candidate changeset\n"
+"    or announce that it has found the bad revision.\n"
+"\n"
+"    As a shortcut, you can also use the revision argument to mark a\n"
+"    revision as good or bad without checking it out first.\n"
+"\n"
+"    If you supply a command, it will be used for automatic bisection.\n"
+"    Its exit status will be used to mark revisions as good or bad:\n"
+"    status 0 means good, 125 means to skip the revision, 127\n"
+"    (command not found) will abort the bisection, and any other\n"
+"    non-zero exit status means the revision is bad.\n"
+"    "
+msgstr ""
+
+#, fuzzy
+msgid "The first good revision is:\n"
+msgstr "Η πρώτη %s αλλαγή είναι:\n"
+
+#, fuzzy
+msgid "The first bad revision is:\n"
+msgstr "Η πρώτη %s αλλαγή είναι:\n"
+
+msgid "Due to skipped revisions, the first good revision could be any of:\n"
+msgstr ""
+
+msgid "Due to skipped revisions, the first bad revision could be any of:\n"
+msgstr ""
+
+msgid "cannot bisect (no known good revisions)"
+msgstr ""
+
+msgid "cannot bisect (no known bad revisions)"
+msgstr ""
+
+msgid "(use of 'hg bisect <cmd>' is deprecated)\n"
+msgstr ""
+
+msgid "incompatible arguments"
+msgstr ""
+
+#, python-format
+msgid "cannot find executable: %s"
+msgstr ""
+
+#, python-format
+msgid "failed to execute %s"
+msgstr ""
+
+#, python-format
+msgid "%s killed"
+msgstr ""
+
+#, fuzzy, python-format
+msgid "Changeset %d:%s: %s\n"
+msgstr "Αλλαγή: %s: %s\n"
+
+#, python-format
+msgid "Testing changeset %s:%s (%s changesets remaining, ~%s tests)\n"
+msgstr ""
+
+msgid ""
+"set or show the current branch name\n"
+"\n"
+"    With no argument, show the current branch name. With one argument,\n"
+"    set the working directory branch name (the branch will not exist\n"
+"    in the repository until the next commit). Standard practice\n"
+"    recommends that primary development take place on the 'default'\n"
+"    branch.\n"
+"\n"
+"    Unless -f/--force is specified, branch will not let you set a\n"
+"    branch name that already exists, even if it's inactive.\n"
+"\n"
+"    Use -C/--clean to reset the working directory branch to that of\n"
+"    the parent of the working directory, negating a previous branch\n"
+"    change.\n"
+"\n"
+"    Use the command 'hg update' to switch to an existing branch.\n"
+"    "
+msgstr ""
+
+#, python-format
+msgid "reset working directory to branch %s\n"
+msgstr ""
+
+msgid "a branch of the same name already exists (use --force to override)"
+msgstr ""
+
+#, python-format
+msgid "marked working directory as branch %s\n"
+msgstr ""
+
+msgid ""
+"list repository named branches\n"
+"\n"
+"    List the repository's named branches, indicating which ones are\n"
+"    inactive. If active is specified, only show active branches.\n"
+"\n"
+"    A branch is considered active if it contains repository heads.\n"
+"\n"
+"    Use the command 'hg update' to switch to an existing branch.\n"
+"    "
+msgstr ""
+
+msgid ""
+"create a changegroup file\n"
+"\n"
+"    Generate a compressed changegroup file collecting changesets not\n"
+"    known to be in another repository.\n"
+"\n"
+"    If no destination repository is specified the destination is\n"
+"    assumed to have all the nodes specified by one or more --base\n"
+"    parameters. To create a bundle containing all changesets, use\n"
+"    -a/--all (or --base null). To change the compression method\n"
+"    applied, use the -t/--type option (by default, bundles are\n"
+"    compressed using bz2).\n"
+"\n"
+"    The bundle file can then be transferred using conventional means\n"
+"    and applied to another repository with the unbundle or pull\n"
+"    command. This is useful when direct push and pull are not\n"
+"    available or when exporting an entire repository is undesirable.\n"
+"\n"
+"    Applying bundles preserves all changeset contents including\n"
+"    permissions, copy/rename information, and revision history.\n"
+"    "
+msgstr ""
+
+msgid "--base is incompatible with specifying a destination"
+msgstr ""
+
+msgid "unknown bundle type specified with --type"
+msgstr ""
+
+msgid ""
+"output the current or given revision of files\n"
+"\n"
+"    Print the specified files as they were at the given revision. If\n"
+"    no revision is given, the parent of the working directory is used,\n"
+"    or tip if no revision is checked out.\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 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"
+"    "
+msgstr ""
+
+msgid ""
+"make a copy of an existing repository\n"
+"\n"
+"    Create a copy of an existing repository in a new directory.\n"
+"\n"
+"    If no destination directory name is specified, it defaults to the\n"
+"    basename of the source.\n"
+"\n"
+"    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"
+"    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"
+"    filesystems, such as AFS, implement hardlinking incorrectly, but\n"
+"    do not report errors. In these cases, use the --pull option to\n"
+"    avoid hardlinking.\n"
+"\n"
+"    In some cases, you can clone repositories and checked out files\n"
+"    using full hardlinks with\n"
+"\n"
+"      $ cp -al REPO REPOCLONE\n"
+"\n"
+"    This is the fastest way to clone, but it is not always safe. The\n"
+"    operation is not atomic (making sure REPO is not modified during\n"
+"    the operation is up to you) and you have to make sure your editor\n"
+"    breaks hardlinks (Emacs and most Linux Kernel tools do so). Also,\n"
+"    this is not compatible with certain extensions that place their\n"
+"    metadata under the .hg directory, such as mq.\n"
+"\n"
+"    "
+msgstr ""
+
+msgid ""
+"commit the specified files or all outstanding changes\n"
+"\n"
+"    Commit changes to the given files into the repository. Unlike a\n"
+"    centralized RCS, this operation is a local operation. See hg push\n"
+"    for a way to actively distribute your changes.\n"
+"\n"
+"    If a list of files is omitted, all changes reported by \"hg status\"\n"
+"    will be committed.\n"
+"\n"
+"    If you are committing the result of a merge, do not provide any\n"
+"    filenames or -I/-X filters.\n"
+"\n"
+"    If no commit message is specified, the configured editor is\n"
+"    started to prompt you for a message.\n"
+"\n"
+"    See 'hg help dates' for a list of formats valid for -d/--date.\n"
+"    "
+msgstr ""
+
+msgid "created new head\n"
+msgstr "δημιουργήθηκε νέο παρακλάδι\n"
+
+#, python-format
+msgid "committed changeset %d:%s\n"
+msgstr "αποθηκεύθηκε η αλλαγή %d:%s\n"
+
+msgid ""
+"mark files as copied for the next commit\n"
+"\n"
+"    Mark dest as having copies of source files. If dest is a\n"
+"    directory, copies are put in that directory. If dest is a file,\n"
+"    the source must be a single file.\n"
+"\n"
+"    By default, this command copies the contents of files as they\n"
+"    exist in the working directory. If invoked with -A/--after, the\n"
+"    operation is recorded, but no copying is performed.\n"
+"\n"
+"    This command takes effect with the next commit. To undo a copy\n"
+"    before that, see hg revert.\n"
+"    "
+msgstr ""
+
+msgid "find the ancestor revision of two revisions in a given index"
+msgstr ""
+
+msgid "There is no Mercurial repository here (.hg not found)"
+msgstr "Δεν υπάρχει αποθετήριο Mercurial εδώ (δε βρέθηκε υποκατάλογος .hg)"
+
+msgid "either two or three arguments required"
+msgstr "απαιτούνται είτε δύο ή τρία ορίσματα"
+
+msgid "returns the completion list associated with the given command"
+msgstr ""
+
+msgid "rebuild the dirstate as it would look like for the given revision"
+msgstr ""
+
+msgid "validate the correctness of the current dirstate"
+msgstr ""
+
+#, python-format
+msgid "%s in state %s, but not in manifest1\n"
+msgstr ""
+
+#, python-format
+msgid "%s in state %s, but also in manifest1\n"
+msgstr ""
+
+#, python-format
+msgid "%s in state %s, but not in either manifest\n"
+msgstr ""
+
+#, python-format
+msgid "%s in manifest1, but listed as state %s"
+msgstr ""
+
+msgid ".hg/dirstate inconsistent with current parent's manifest"
+msgstr ""
+
+msgid ""
+"show combined config settings from all hgrc files\n"
+"\n"
+"    With no arguments, print names and values of all config items.\n"
+"\n"
+"    With one argument of the form section.name, print just the value\n"
+"    of that config item.\n"
+"\n"
+"    With multiple arguments, print names and values of all config\n"
+"    items with matching section names.\n"
+"\n"
+"    With --debug, the source (filename and line number) is printed\n"
+"    for each config item.\n"
+"    "
+msgstr ""
+
+msgid "only one config item permitted"
+msgstr ""
+
+msgid ""
+"manually set the parents of the current working directory\n"
+"\n"
+"    This is useful for writing repository conversion tools, but should\n"
+"    be used with care.\n"
+"    "
+msgstr ""
+
+msgid "show the contents of the current dirstate"
+msgstr ""
+
+#, python-format
+msgid "copy: %s -> %s\n"
+msgstr "αντιγραφή: %s -> %s\n"
+
+msgid "dump the contents of a data file revision"
+msgstr ""
+
+#, python-format
+msgid "invalid revision identifier %s"
+msgstr "μη έγκυρο όνομα αλλαγής: %s"
+
+msgid "parse and display a date"
+msgstr ""
+
+msgid "dump the contents of an index file"
+msgstr ""
+
+msgid "dump an index DAG as a graphviz dot file"
+msgstr ""
+
+msgid "test Mercurial installation"
+msgstr ""
+
+#, python-format
+msgid "Checking encoding (%s)...\n"
+msgstr ""
+
+msgid " (check that your locale is properly set)\n"
+msgstr ""
+
+msgid "Checking extensions...\n"
+msgstr ""
+
+msgid " One or more extensions could not be found"
+msgstr ""
+
+msgid " (check that you compiled the extensions)\n"
+msgstr ""
+
+msgid "Checking templates...\n"
+msgstr ""
+
+msgid " (templates seem to have been installed incorrectly)\n"
+msgstr ""
+
+msgid "Checking patch...\n"
+msgstr ""
+
+msgid " patch call failed:\n"
+msgstr ""
+
+msgid " unexpected patch output!\n"
+msgstr ""
+
+msgid " patch test failed!\n"
+msgstr ""
+
+msgid ""
+" (Current patch tool may be incompatible with patch, or misconfigured. "
+"Please check your .hgrc file)\n"
+msgstr ""
+
+msgid ""
+" Internal patcher failure, please report this error to http://www.selenic."
+"com/mercurial/bts\n"
+msgstr ""
+
+msgid "Checking commit editor...\n"
+msgstr ""
+
+msgid " No commit editor set and can't find vi in PATH\n"
+msgstr ""
+
+msgid " (specify a commit editor in your .hgrc file)\n"
+msgstr ""
+
+#, python-format
+msgid " Can't find editor '%s' in PATH\n"
+msgstr ""
+
+msgid "Checking username...\n"
+msgstr ""
+
+msgid " (specify a username in your .hgrc file)\n"
+msgstr ""
+
+msgid "No problems detected\n"
+msgstr "Δε βρέθηκε κανένα πρόβλημα\n"
+
+#, python-format
+msgid "%s problems detected, please check your install!\n"
+msgstr ""
+
+msgid "dump rename information"
+msgstr ""
+
+#, python-format
+msgid "%s renamed from %s:%s\n"
+msgstr "το %s μετονομάστηκε από το %s:%s\n"
+
+#, python-format
+msgid "%s not renamed\n"
+msgstr "το %s δε μετονομάστηκε\n"
+
+msgid "show how files match on given patterns"
+msgstr ""
+
+msgid ""
+"diff repository (or selected files)\n"
+"\n"
+"    Show differences between revisions for the specified files.\n"
+"\n"
+"    Differences between files are shown using the unified diff format.\n"
+"\n"
+"    NOTE: diff may generate unexpected results for merges, as it will\n"
+"    default to comparing against the working directory's first parent\n"
+"    changeset if no revisions are specified.\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.\n"
+"\n"
+"    Without the -a/--text option, diff will avoid generating diffs of\n"
+"    files it detects as binary. With -a, diff will generate a diff\n"
+"    anyway, probably with undesirable results.\n"
+"\n"
+"    Use the -g/--git option to generate diffs in the git extended diff\n"
+"    format. For more information, read 'hg help diffs'.\n"
+"    "
+msgstr ""
+
+msgid ""
+"dump the header and diffs for one or more changesets\n"
+"\n"
+"    Print the changeset header and diffs for one or more revisions.\n"
+"\n"
+"    The information shown in the changeset header is: author,\n"
+"    changeset hash, parent(s) and commit comment.\n"
+"\n"
+"    NOTE: export may generate unexpected diff output for merge\n"
+"    changesets, as it will compare the merge changeset against its\n"
+"    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"
+"\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"
+"    diff anyway, probably with undesirable results.\n"
+"\n"
+"    Use the -g/--git option to generate diffs in the git extended diff\n"
+"    format. See 'hg help diffs' for more information.\n"
+"\n"
+"    With the --switch-parent option, the diff will be against the\n"
+"    second parent. It can be useful to review a merge.\n"
+"    "
+msgstr ""
+
+msgid "export requires at least one changeset"
+msgstr ""
+
+msgid "exporting patches:\n"
+msgstr ""
+
+msgid "exporting patch:\n"
+msgstr ""
+
+msgid ""
+"search for a pattern in specified files and revisions\n"
+"\n"
+"    Search revisions of files for a regular expression.\n"
+"\n"
+"    This command behaves differently than Unix grep. It only accepts\n"
+"    Python/Perl regexps. It searches repository history, not the\n"
+"    working directory. It always prints the revision number in which a\n"
+"    match appears.\n"
+"\n"
+"    By default, grep only prints output for the first revision of a\n"
+"    file in which it finds a match. To get it to print every revision\n"
+"    that contains a change in match status (\"-\" for a match that\n"
+"    becomes a non-match, or \"+\" for a non-match that becomes a match),\n"
+"    use the --all flag.\n"
+"    "
+msgstr ""
+
+#, python-format
+msgid "grep: invalid match pattern: %s\n"
+msgstr ""
+
+msgid ""
+"show current repository heads or show branch heads\n"
+"\n"
+"    With no arguments, show all repository head changesets.\n"
+"\n"
+"    Repository \"heads\" are changesets that don't have child\n"
+"    changesets. They are where development generally takes place and\n"
+"    are the usual targets for update and merge operations.\n"
+"\n"
+"    If one or more REV is given, the \"branch heads\" will be shown for\n"
+"    the named branch associated with that revision. The name of the\n"
+"    branch is called the revision's branch tag.\n"
+"\n"
+"    Branch heads are revisions on a given named branch that do not have\n"
+"    any children on the same branch. A branch head could be a true head\n"
+"    or it could be the last changeset on a branch before a new branch\n"
+"    was created. If none of the branch heads are true heads, the branch\n"
+"    is considered inactive.\n"
+"\n"
+"    If STARTREV is specified only those heads (or branch heads) that\n"
+"    are descendants of STARTREV will be displayed.\n"
+"    "
+msgstr ""
+
+#, python-format
+msgid "no open branch heads on branch %s\n"
+msgstr ""
+
+#, python-format
+msgid "no changes on branch %s containing %s are reachable from %s\n"
+msgstr ""
+
+#, python-format
+msgid "no changes on branch %s are reachable from %s\n"
+msgstr ""
+
+msgid ""
+"show help for a given topic or a help overview\n"
+"\n"
+"    With no arguments, print a list of commands with short help messages.\n"
+"\n"
+"    Given a topic, extension, or command name, print help for that\n"
+"    topic."
+msgstr ""
+
+msgid "global options:"
+msgstr ""
+
+msgid "use \"hg help\" for the full list of commands"
+msgstr "δείτε τη βοήθεια \"hg help\" για την πλήρη λίστα εντολών"
+
+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"
+msgstr ""
+"δώστε \"hg -v help%s\" για τη λίστα εικονικών εντολών και κεντρικών επιλογών"
+
+#, python-format
+msgid "use \"hg -v help %s\" to show global options"
+msgstr "δώστε \"hg -v help %s\" για τη λίστα κεντρικών επιλογών"
+
+msgid ""
+"list of commands:\n"
+"\n"
+msgstr ""
+"λίστα εντολών:\n"
+"\n"
+
+#, python-format
+msgid ""
+"\n"
+"aliases: %s\n"
+msgstr ""
+"\n"
+"εικονικές εντολές %s:\n"
+
+msgid "(no help text available)"
+msgstr "(δεν υπάρχει κείμενο βοήθειας)"
+
+msgid "options:\n"
+msgstr "επιλογές:\n"
+
+msgid "no commands defined\n"
+msgstr "δεν έχει οριστεί καμία εντολή\n"
+
+msgid ""
+"\n"
+"enabled extensions:\n"
+"\n"
+msgstr ""
+"\n"
+"ενεργές επεκτάσεις:\n"
+"\n"
+
+#, python-format
+msgid " %s   %s\n"
+msgstr ""
+
+msgid "no help text available"
+msgstr "δεν υπάρχει κείμενο βοήθειας"
+
+#, python-format
+msgid "%s extension - %s\n"
+msgstr ""
+
+msgid "Mercurial Distributed SCM\n"
+msgstr "Mercurial Κατανεμημένο SCM\n"
+
+msgid ""
+"basic commands:\n"
+"\n"
+msgstr ""
+"βασικές εντολές:\n"
+"\n"
+
+msgid ""
+"\n"
+"additional help topics:\n"
+"\n"
+msgstr ""
+"\n"
+"περισσότερα θέματα βοήθειας:\n"
+"\n"
+
+msgid ""
+"identify the working copy or specified revision\n"
+"\n"
+"    With no revision, print a summary of the current state of the\n"
+"    repository.\n"
+"\n"
+"    Specifying a path to a repository root or Mercurial bundle will\n"
+"    cause lookup to operate on that repository/bundle.\n"
+"\n"
+"    This summary identifies the repository state using one or two\n"
+"    parent hash identifiers, followed by a \"+\" if there are\n"
+"    uncommitted changes in the working directory, a list of tags for\n"
+"    this revision and a branch name for non-default branches.\n"
+"    "
+msgstr ""
+
+msgid ""
+"import an ordered set of patches\n"
+"\n"
+"    Import a list of patches and commit them individually.\n"
+"\n"
+"    If there are outstanding changes in the working directory, import\n"
+"    will abort unless given the -f/--force flag.\n"
+"\n"
+"    You can import a patch straight from a mail message. Even patches\n"
+"    as attachments work (to use the body part, it must have type\n"
+"    text/plain or text/x-patch). From and Subject headers of email\n"
+"    message are used as default committer and commit message. All\n"
+"    text/plain body parts before first diff are added to commit\n"
+"    message.\n"
+"\n"
+"    If the imported patch was generated by hg export, user and\n"
+"    description from patch override values from message headers and\n"
+"    body. Values given on command line with -m/--message and -u/--user\n"
+"    override these.\n"
+"\n"
+"    If --exact is specified, import will set the working directory to\n"
+"    the parent of each patch before applying it, and will abort if the\n"
+"    resulting changeset has a different ID than the one recorded in\n"
+"    the patch. This may happen due to character set problems or other\n"
+"    deficiencies in the text patch format.\n"
+"\n"
+"    With -s/--similarity, hg will attempt to discover renames and\n"
+"    copies in the patch in the same way as 'addremove'.\n"
+"\n"
+"    To read a patch from standard input, use \"-\" as the patch name.\n"
+"    See 'hg help dates' for a list of formats valid for -d/--date.\n"
+"    "
+msgstr ""
+
+msgid "applying patch from stdin\n"
+msgstr ""
+
+msgid "no diffs found"
+msgstr ""
+
+#, python-format
+msgid ""
+"message:\n"
+"%s\n"
+msgstr ""
+"meddelse:\n"
+"%s\n"
+
+msgid "not a Mercurial patch"
+msgstr ""
+
+msgid "patch is damaged or loses information"
+msgstr ""
+
+msgid ""
+"show new changesets found in source\n"
+"\n"
+"    Show new changesets found in the specified path/URL or the default\n"
+"    pull location. These are the changesets that would have been pulled\n"
+"    if a pull at the time you issued this command.\n"
+"\n"
+"    For remote repository, using --bundle avoids downloading the\n"
+"    changesets twice if the incoming is followed by a pull.\n"
+"\n"
+"    See pull for valid source format details.\n"
+"    "
+msgstr ""
+
+msgid ""
+"create a new repository in the given directory\n"
+"\n"
+"    Initialize a new repository in the given directory. If the given\n"
+"    directory does not exist, it will be created.\n"
+"\n"
+"    If no directory is given, the current directory is used.\n"
+"\n"
+"    It is possible to specify an ssh:// URL as the destination.\n"
+"    See 'hg help urls' for more information.\n"
+"    "
+msgstr ""
+
+msgid ""
+"locate files matching specific patterns\n"
+"\n"
+"    Print files under Mercurial control in the working directory whose\n"
+"    names match the given patterns.\n"
+"\n"
+"    By default, this command searches all directories in the working\n"
+"    directory. To search just the current directory and its\n"
+"    subdirectories, use \"--include .\".\n"
+"\n"
+"    If no patterns are given to match, this command prints the names\n"
+"    of all files under Mercurial control in the working directory.\n"
+"\n"
+"    If you want to feed the output of this command into the \"xargs\"\n"
+"    command, use the -0 option to both this command and \"xargs\". This\n"
+"    will avoid the problem of \"xargs\" treating single filenames that\n"
+"    contain whitespace as multiple filenames.\n"
+"    "
+msgstr ""
+
+msgid ""
+"show revision history of entire repository or files\n"
+"\n"
+"    Print the revision history of the specified files or the entire\n"
+"    project.\n"
+"\n"
+"    File history is shown without following rename or copy history of\n"
+"    files. Use -f/--follow with a filename to follow history across\n"
+"    renames and copies. --follow without a filename will only show\n"
+"    ancestors or descendants of the starting revision. --follow-first\n"
+"    only follows the first parent of merge revisions.\n"
+"\n"
+"    If no revision range is specified, the default is tip:0 unless\n"
+"    --follow is set, in which case the working directory parent is\n"
+"    used as the starting revision.\n"
+"\n"
+"    See 'hg help dates' for a list of formats valid for -d/--date.\n"
+"\n"
+"    By default this command prints revision number and changeset id,\n"
+"    tags, non-trivial parents, user, date and time, and a summary for\n"
+"    each commit. When the -v/--verbose switch is used, the list of\n"
+"    changed files and full commit message are shown.\n"
+"\n"
+"    NOTE: log -p/--patch may generate unexpected diff output for merge\n"
+"    changesets, as it will only compare the merge changeset against\n"
+"    its first parent. Also, only files different from BOTH parents\n"
+"    will appear in files:.\n"
+"    "
+msgstr ""
+
+msgid ""
+"output the current or given revision of the project manifest\n"
+"\n"
+"    Print a list of version controlled files for the given revision.\n"
+"    If no revision is given, the first parent of the working directory\n"
+"    is used, or the null revision if no revision is checked out.\n"
+"\n"
+"    With -v, print file permissions, symlink and executable bits.\n"
+"    With --debug, print file revision hashes.\n"
+"    "
+msgstr ""
+
+msgid ""
+"merge working directory with another revision\n"
+"\n"
+"    The current working directory is updated with all changes made in\n"
+"    the requested revision since the last common predecessor revision.\n"
+"\n"
+"    Files that changed between either parent are marked as changed for\n"
+"    the next commit and a commit must be performed before any further\n"
+"    updates to the repository are allowed. The next commit will have\n"
+"    two parents.\n"
+"\n"
+"    If no revision is specified, the working directory's parent is a\n"
+"    head revision, and the current branch contains exactly one other\n"
+"    head, the other head is merged with by default. Otherwise, an\n"
+"    explicit revision with which to merge with must be provided.\n"
+"    "
+msgstr ""
+
+#, python-format
+msgid "branch '%s' has %d heads - please merge with an explicit rev"
+msgstr ""
+
+#, python-format
+msgid "branch '%s' has one head - please merge with an explicit rev"
+msgstr ""
+
+msgid "there is nothing to merge"
+msgstr ""
+
+#, python-format
+msgid "%s - use \"hg update\" instead"
+msgstr "%s - δώστε \"hg update\" καλύτερα"
+
+msgid ""
+"working dir not at a head rev - use \"hg update\" or merge with an explicit "
+"rev"
+msgstr ""
+
+msgid ""
+"show changesets not found in destination\n"
+"\n"
+"    Show changesets not found in the specified destination repository\n"
+"    or the default push location. These are the changesets that would\n"
+"    be pushed if a push was requested.\n"
+"\n"
+"    See pull for valid destination format details.\n"
+"    "
+msgstr ""
+
+msgid ""
+"show the parents of the working directory or revision\n"
+"\n"
+"    Print the working directory's parent revisions. If a revision is\n"
+"    given via -r/--rev, the parent of that revision will be printed.\n"
+"    If a file argument is given, the revision in which the file was\n"
+"    last changed (before the working directory revision or the\n"
+"    argument to --rev if given) is printed.\n"
+"    "
+msgstr ""
+
+msgid "can only specify an explicit filename"
+msgstr ""
+
+#, python-format
+msgid "'%s' not found in manifest!"
+msgstr ""
+
+msgid ""
+"show aliases for remote repositories\n"
+"\n"
+"    Show definition of symbolic path name NAME. If no name is given,\n"
+"    show definition of all available names.\n"
+"\n"
+"    Path names are defined in the [paths] section of /etc/mercurial/hgrc\n"
+"    and $HOME/.hgrc. If run inside a repository, .hg/hgrc is used, too.\n"
+"\n"
+"    See 'hg help urls' for more information.\n"
+"    "
+msgstr ""
+
+msgid "not found!\n"
+msgstr "δε βρέθηκε!\n"
+
+msgid "not updating, since new heads added\n"
+msgstr "δεν εξάγεται κάποια αλλαγή, επειδή δημιουργήθηκε νέο παρακλάδι\n"
+
+msgid "(run 'hg heads' to see heads, 'hg merge' to merge)\n"
+msgstr ""
+"(δώστε 'hg heads' για να δείτε τα παρακλάδια, 'hg merge' για συγχώνευση)\n"
+
+msgid "(run 'hg update' to get a working copy)\n"
+msgstr "(δώστε 'hg update' για να εξάγετε αντίγραφο εργασίας)\n"
+
+msgid ""
+"pull changes from the specified source\n"
+"\n"
+"    Pull changes from a remote repository to a local one.\n"
+"\n"
+"    This finds all changes from the repository at the specified path\n"
+"    or URL and adds them to a local repository (the current one unless\n"
+"    -R is specified). By default, this does not update the copy of the\n"
+"    project in the working directory.\n"
+"\n"
+"    Use hg incoming if you want to see what would have been added by a\n"
+"    pull at the time you issued this command. If you then decide to\n"
+"    added those changes to the repository, you should use pull -r X\n"
+"    where X is the last changeset listed by hg incoming.\n"
+"\n"
+"    If SOURCE is omitted, the 'default' path will be used.\n"
+"    See 'hg help urls' for more information.\n"
+"    "
+msgstr ""
+
+msgid ""
+"push changes to the specified destination\n"
+"\n"
+"    Push changes from the local repository to the given destination.\n"
+"\n"
+"    This is the symmetrical operation for pull. It moves changes from\n"
+"    the current repository to a different one. If the destination is\n"
+"    local this is identical to a pull in that directory from the\n"
+"    current one.\n"
+"\n"
+"    By default, push will refuse to run if it detects the result would\n"
+"    increase the number of remote heads. This generally indicates the\n"
+"    user forgot to pull and merge before pushing.\n"
+"\n"
+"    If -r/--rev is used, the named revision and all its ancestors will\n"
+"    be pushed to the remote repository.\n"
+"\n"
+"    Please see 'hg help urls' for important details about ssh://\n"
+"    URLs. If DESTINATION is omitted, a default path will be used.\n"
+"    See 'hg help urls' for more information.\n"
+"    "
+msgstr ""
+
+#, python-format
+msgid "pushing to %s\n"
+msgstr ""
+
+msgid ""
+"roll back an interrupted transaction\n"
+"\n"
+"    Recover from an interrupted commit or pull.\n"
+"\n"
+"    This command tries to fix the repository status after an\n"
+"    interrupted operation. It should only be necessary when Mercurial\n"
+"    suggests it.\n"
+"    "
+msgstr ""
+
+msgid ""
+"remove the specified files on the next commit\n"
+"\n"
+"    Schedule the indicated files for removal from the repository.\n"
+"\n"
+"    This only removes files from the current branch, not from the\n"
+"    entire project history. -A/--after can be used to remove only\n"
+"    files that have already been deleted, -f/--force can be used to\n"
+"    force deletion, and -Af can be used to remove files from the next\n"
+"    revision without deleting them from the working directory.\n"
+"\n"
+"    The following table details the behavior of remove for different\n"
+"    file states (columns) and option combinations (rows). The file\n"
+"    states are Added [A], Clean [C], Modified [M] and Missing [!]\n"
+"    (as reported by hg status). The actions are Warn, Remove (from\n"
+"    branch) and Delete (from disk).\n"
+"\n"
+"           A  C  M  !\n"
+"    none   W  RD W  R\n"
+"    -f     R  RD RD R\n"
+"    -A     W  W  W  R\n"
+"    -Af    R  R  R  R\n"
+"\n"
+"    This command schedules the files to be removed at the next commit.\n"
+"    To undo a remove before that, see hg revert.\n"
+"    "
+msgstr ""
+
+msgid "no files specified"
+msgstr ""
+
+#, python-format
+msgid "not removing %s: file is untracked\n"
+msgstr ""
+
+#, python-format
+msgid "not removing %s: file %s (use -f to force removal)\n"
+msgstr ""
+
+msgid "still exists"
+msgstr "υπάρχει ακόμη"
+
+msgid "is modified"
+msgstr "έχει τροποποιηθεί"
+
+msgid "has been marked for add"
+msgstr "έχει σημειωθεί για προσθήκη"
+
+msgid ""
+"rename files; equivalent of copy + remove\n"
+"\n"
+"    Mark dest as copies of sources; mark sources for deletion. If dest\n"
+"    is a directory, copies are put in that directory. If dest is a\n"
+"    file, there can only be one source.\n"
+"\n"
+"    By default, this command copies the contents of files as they\n"
+"    exist in the working directory. If invoked with -A/--after, the\n"
+"    operation is recorded, but no copying is performed.\n"
+"\n"
+"    This command takes effect at the next commit. To undo a rename\n"
+"    before that, see hg revert.\n"
+"    "
+msgstr ""
+
+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"
+"\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"
+"    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"
+"\n"
+"    The codes used to show the status of files are:\n"
+"    U = unresolved\n"
+"    R = resolved\n"
+"    "
+msgstr ""
+
+msgid "too many options specified"
+msgstr ""
+
+msgid "can't specify --all and patterns"
+msgstr ""
+
+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"
+
+msgid ""
+"restore individual files or directories to an earlier state\n"
+"\n"
+"    (Use update -r to check out earlier revisions, revert does not\n"
+"    change the working directory parents.)\n"
+"\n"
+"    With no revision specified, revert the named files or directories\n"
+"    to the contents they had in the parent of the working directory.\n"
+"    This restores the contents of the affected files to an unmodified\n"
+"    state and unschedules adds, removes, copies, and renames. If the\n"
+"    working directory has two parents, you must explicitly specify the\n"
+"    revision to revert to.\n"
+"\n"
+"    Using the -r/--rev option, revert the given files or directories\n"
+"    to their contents as of a specific revision. This can be helpful\n"
+"    to \"roll back\" some or all of an earlier change. See 'hg help\n"
+"    dates' for a list of formats valid for -d/--date.\n"
+"\n"
+"    Revert modifies the working directory. It does not commit any\n"
+"    changes, or change the parent of the working directory. If you\n"
+"    revert to a revision other than the parent of the working\n"
+"    directory, the reverted files will thus appear modified\n"
+"    afterwards.\n"
+"\n"
+"    If a file has been deleted, it is restored. If the executable mode\n"
+"    of a file was changed, it is reset.\n"
+"\n"
+"    If names are given, all files matching the names are reverted.\n"
+"    If no arguments are given, no files are reverted.\n"
+"\n"
+"    Modified files are saved with a .orig suffix before reverting.\n"
+"    To disable these backups, use --no-backup.\n"
+"    "
+msgstr ""
+
+msgid "you can't specify a revision and a date"
+msgstr "δεν επιτρέπεται η χρήση αλλαγής και ημερομηνίας ταυτόχρονα"
+
+msgid "no files or directories specified; use --all to revert the whole repo"
+msgstr ""
+
+#, python-format
+msgid "forgetting %s\n"
+msgstr ""
+
+#, python-format
+msgid "reverting %s\n"
+msgstr "επαναφορά %s\n"
+
+#, python-format
+msgid "undeleting %s\n"
+msgstr "επανάκτηση %s\n"
+
+#, python-format
+msgid "saving current version of %s as %s\n"
+msgstr ""
+
+#, python-format
+msgid "file not managed: %s\n"
+msgstr ""
+
+#, python-format
+msgid "no changes needed to %s\n"
+msgstr ""
+
+msgid ""
+"roll back the last transaction\n"
+"\n"
+"    This command should be used with care. There is only one level of\n"
+"    rollback, and there is no way to undo a rollback. It will also\n"
+"    restore the dirstate at the time of the last transaction, losing\n"
+"    any dirstate changes since that time.\n"
+"\n"
+"    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"
+"\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"
+"    back locally is ineffective (someone else may already have pulled\n"
+"    the changes). Furthermore, a race is possible with readers of the\n"
+"    repository; for example an in-progress pull from the repository\n"
+"    may fail if a rollback is performed.\n"
+"    "
+msgstr ""
+
+msgid ""
+"print the root (top) of the current working directory\n"
+"\n"
+"    Print the root directory of the current repository.\n"
+"    "
+msgstr ""
+
+msgid ""
+"export the repository via HTTP\n"
+"\n"
+"    Start a local HTTP repository browser and pull server.\n"
+"\n"
+"    By default, the server logs accesses to stdout and errors to\n"
+"    stderr. Use the -A/--accesslog and -E/--errorlog options to log to\n"
+"    files.\n"
+"    "
+msgstr ""
+
+#, python-format
+msgid "listening at http://%s%s/%s (bound to %s:%d)\n"
+msgstr ""
+
+msgid ""
+"show changed files in the working directory\n"
+"\n"
+"    Show status of files in the repository. If names are given, only\n"
+"    files that match are shown. Files that are clean or ignored or\n"
+"    the source of a copy/move operation, are not listed unless\n"
+"    -c/--clean, -i/--ignored, -C/--copies or -A/--all are given.\n"
+"    Unless options described with \"show only ...\" are given, the\n"
+"    options -mardu are used.\n"
+"\n"
+"    Option -q/--quiet hides untracked (unknown and ignored) files\n"
+"    unless explicitly requested with -u/--unknown or -i/--ignored.\n"
+"\n"
+"    NOTE: status may appear to disagree with diff if permissions have\n"
+"    changed or a merge has occurred. The standard diff format does not\n"
+"    report permission changes and diff only reports changes relative\n"
+"    to one merge parent.\n"
+"\n"
+"    If one revision is given, it is used as the base revision.\n"
+"    If two revisions are given, the differences between them are\n"
+"    shown.\n"
+"\n"
+"    The codes used to show the status of files are:\n"
+"    M = modified\n"
+"    A = added\n"
+"    R = removed\n"
+"    C = clean\n"
+"    ! = missing (deleted by non-hg command, but still tracked)\n"
+"    ? = not tracked\n"
+"    I = ignored\n"
+"      = origin of the previous file listed as A (added)\n"
+"    "
+msgstr ""
+
+#, fuzzy
+msgid ""
+"add one or more tags for the current or given revision\n"
+"\n"
+"    Name a particular revision using <name>.\n"
+"\n"
+"    Tags are used to name particular revisions of the repository and are\n"
+"    very useful to compare different revisions, to go back to significant\n"
+"    earlier versions or to mark branch points as releases, etc.\n"
+"\n"
+"    If no revision is given, the parent of the working directory is\n"
+"    used, or tip if no revision is checked out.\n"
+"\n"
+"    To facilitate version control, distribution, and merging of tags,\n"
+"    they are stored as a file named \".hgtags\" which is managed\n"
+"    similarly to other project files and can be hand-edited if\n"
+"    necessary. The file '.hg/localtags' is used for local tags (not\n"
+"    shared among repositories).\n"
+"\n"
+"    See 'hg help dates' for a list of formats valid for -d/--date.\n"
+"    "
+msgstr ""
+"προσθήκη μιας ή περισσότερων ετικετών για την τρέχουσα ή κάποια άλλη έκδοση\n"
+"\n"
+"    Ονομασία μιας συγκεκριμένης αλλαγής με ένα νέο <όνομα>.\n"
+"\n"
+"    Οι ετικέτες μπορούν να χρησιμοποιηθούν ως συμβολικά ονόματα των αλλαγών\n"
+"    ενός αποθετηρίου και είναι πολύ χρήσιμες για την προβολή των διαφορών\n"
+"    μεταξύ δύο σημαντικών εκδόσεων, για να επιστρέφει κανείς σε πιο παλιές\n"
+"    εκδόσεις ή για την καταγραφή της αρχής ενός κλάδου, του σημείου στο\n"
+"    οποίο έγινε μια επίσημη έκδοση, κλπ.\n"
+"\n"
+"    Οταν δεν έχει οριστεί συγκεκριμένη αλλαγή, τότε η νέα ετικέτα τίθεται\n"
+"    στη γονική αλλαγή του χώρου εργασίας, ή στο tip όταν δεν υπάρχουν στο\n"
+"    χώρο εργασίας τα αρχεία κάποιας έκδοσης.\n"
+"\n"
+"    Για να διατηρείται το ιστορικό των ετικετών, να διανέμονται σε άλλους\n"
+"    κλώνους του αποθετηρίου και να μπορεί να γίνει συγχώνευσή τους, όλες\n"
+"    οι ετικέτες αποθηκεύονται σε ένα αρχείο με το όνομα \".hgtags\", το\n"
+"    οποίο συντηρείται όπως και κάθε άλλο αρχείο του αποθετηρίου και μπορεί\n"
+"    να το επεξεργαστεί κανείς ως απλό αρχείο κειμένου αν χρειαστεί.  Το\n"
+"    αρχείο '.hg/localtags' χρησιμοποιείται για τις τοπικές ετικέτες\n"
+"    (αυτές που δε διανέμονται σε άλλους κλώνους του αποθετηρίου).\n"
+"\n"
+"    Δείτε επίσης: 'hg help dates' για μια λίστα μορφών ημερομηνίας τις\n"
+"    οποίες δέχονται οι επιλογές -d/--date.\n"
+"    "
+
+msgid "tag names must be unique"
+msgstr ""
+
+#, python-format
+msgid "the name '%s' is reserved"
+msgstr ""
+
+msgid "--rev and --remove are incompatible"
+msgstr ""
+
+#, python-format
+msgid "tag '%s' does not exist"
+msgstr ""
+
+#, python-format
+msgid "tag '%s' is not a global tag"
+msgstr ""
+
+#, python-format
+msgid "tag '%s' is not a local tag"
+msgstr ""
+
+#, python-format
+msgid "Removed tag %s"
+msgstr ""
+
+#, python-format
+msgid "tag '%s' already exists (use -f to force)"
+msgstr ""
+
+#, python-format
+msgid "Added tag %s for changeset %s"
+msgstr ""
+
+msgid ""
+"list repository tags\n"
+"\n"
+"    This lists both regular and local tags. When the -v/--verbose\n"
+"    switch is used, a third column \"local\" is printed for local tags.\n"
+"    "
+msgstr ""
+
+msgid ""
+"show the tip revision\n"
+"\n"
+"    The tip revision (usually just called the tip) is the changeset\n"
+"    most recently added to the repository (and therefore the most\n"
+"    recently changed head).\n"
+"\n"
+"    If you have just made a commit, that commit will be the tip. If\n"
+"    you have just pulled changes from another repository, the tip of\n"
+"    that repository becomes the current tip. The \"tip\" tag is special\n"
+"    and cannot be renamed or assigned to a different changeset.\n"
+"    "
+msgstr ""
+
+msgid ""
+"apply one or more changegroup files\n"
+"\n"
+"    Apply one or more compressed changegroup files generated by the\n"
+"    bundle command.\n"
+"    "
+msgstr ""
+
+msgid ""
+"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"
+"    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.\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"
+"\n"
+"    See 'hg help dates' for a list of formats valid for -d/--date.\n"
+"    "
+msgstr ""
+
+msgid ""
+"verify the integrity of the repository\n"
+"\n"
+"    Verify the integrity of the current repository.\n"
+"\n"
+"    This will perform an extensive check of the repository's\n"
+"    integrity, validating the hashes and checksums of each entry in\n"
+"    the changelog, manifest, and tracked files, as well as the\n"
+"    integrity of their crosslinks and indices.\n"
+"    "
+msgstr ""
+
+msgid "output version and copyright information"
+msgstr ""
+
+#, python-format
+msgid "Mercurial Distributed SCM (version %s)\n"
+msgstr "Mercurial Κατανεμημένο SCM (version %s)\n"
+
+msgid ""
+"\n"
+"Copyright (C) 2005-2009 Matt Mackall <mpm@selenic.com> and others\n"
+"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 ""
+
+msgid "repository root directory or symbolic path name"
+msgstr ""
+
+msgid "change working directory"
+msgstr ""
+
+msgid "do not prompt, assume 'yes' for any required answers"
+msgstr ""
+
+msgid "suppress output"
+msgstr ""
+
+msgid "enable additional output"
+msgstr ""
+
+msgid "set/override config option"
+msgstr ""
+
+msgid "enable debugging output"
+msgstr ""
+
+msgid "start debugger"
+msgstr ""
+
+msgid "set the charset encoding"
+msgstr ""
+
+msgid "set the charset encoding mode"
+msgstr ""
+
+msgid "print traceback on exception"
+msgstr ""
+
+msgid "time how long the command takes"
+msgstr ""
+
+msgid "print command execution profile"
+msgstr ""
+
+msgid "output version information and exit"
+msgstr ""
+
+msgid "display help and exit"
+msgstr ""
+
+msgid "do not perform actions, just print output"
+msgstr ""
+
+msgid "specify ssh command to use"
+msgstr ""
+
+msgid "specify hg command to run on the remote side"
+msgstr ""
+
+msgid "include names matching the given patterns"
+msgstr ""
+
+msgid "exclude names matching the given patterns"
+msgstr ""
+
+msgid "use <text> as commit message"
+msgstr ""
+
+msgid "read commit message from <file>"
+msgstr ""
+
+msgid "record datecode as commit date"
+msgstr ""
+
+msgid "record the specified user as committer"
+msgstr ""
+
+msgid "display using template map file"
+msgstr ""
+
+msgid "display with template"
+msgstr ""
+
+msgid "do not show merges"
+msgstr ""
+
+msgid "treat all files as text"
+msgstr ""
+
+msgid "don't include dates in diff headers"
+msgstr ""
+
+msgid "show which function each change is in"
+msgstr ""
+
+msgid "ignore white space when comparing lines"
+msgstr ""
+
+msgid "ignore changes in the amount of white space"
+msgstr ""
+
+msgid "ignore changes whose lines are all blank"
+msgstr ""
+
+msgid "number of lines of context to show"
+msgstr ""
+
+msgid "guess renamed files by similarity (0<=s<=100)"
+msgstr ""
+
+msgid "[OPTION]... [FILE]..."
+msgstr ""
+
+msgid "annotate the specified revision"
+msgstr ""
+
+msgid "follow file copies and renames"
+msgstr ""
+
+msgid "list the author (long with -v)"
+msgstr ""
+
+msgid "list the date (short with -q)"
+msgstr ""
+
+msgid "list the revision number (default)"
+msgstr ""
+
+msgid "list the changeset"
+msgstr ""
+
+msgid "show line number at the first appearance"
+msgstr ""
+
+msgid "[-r REV] [-f] [-a] [-u] [-d] [-n] [-c] [-l] FILE..."
+msgstr ""
+
+msgid "do not pass files through decoders"
+msgstr ""
+
+msgid "directory prefix for files in archive"
+msgstr ""
+
+msgid "revision to distribute"
+msgstr ""
+
+msgid "type of distribution to create"
+msgstr ""
+
+msgid "[OPTION]... DEST"
+msgstr ""
+
+msgid "merge with old dirstate parent after backout"
+msgstr ""
+
+msgid "parent to choose when backing out merge"
+msgstr ""
+
+msgid "revision to backout"
+msgstr ""
+
+msgid "[OPTION]... [-r] REV"
+msgstr ""
+
+msgid "reset bisect state"
+msgstr ""
+
+msgid "mark changeset good"
+msgstr ""
+
+msgid "mark changeset bad"
+msgstr ""
+
+msgid "skip testing changeset"
+msgstr ""
+
+msgid "use command to check changeset state"
+msgstr ""
+
+msgid "do not update to target"
+msgstr ""
+
+msgid "[-gbsr] [-c CMD] [REV]"
+msgstr ""
+
+msgid "set branch name even if it shadows an existing branch"
+msgstr ""
+
+msgid "reset branch name to parent branch name"
+msgstr ""
+
+msgid "[-fC] [NAME]"
+msgstr ""
+
+msgid "show only branches that have unmerged heads"
+msgstr ""
+
+msgid "[-a]"
+msgstr ""
+
+msgid "run even when remote repository is unrelated"
+msgstr ""
+
+msgid "a changeset up to which you would like to bundle"
+msgstr ""
+
+msgid "a base changeset to specify instead of a destination"
+msgstr ""
+
+msgid "bundle all changesets in the repository"
+msgstr ""
+
+msgid "bundle compression type to use"
+msgstr ""
+
+msgid "[-f] [-a] [-r REV]... [--base REV]... FILE [DEST]"
+msgstr ""
+
+msgid "print output to file with formatted name"
+msgstr ""
+
+msgid "print the given revision"
+msgstr ""
+
+msgid "apply any matching decode filter"
+msgstr ""
+
+msgid "[OPTION]... FILE..."
+msgstr ""
+
+msgid "the clone will only contain a repository (no working copy)"
+msgstr ""
+
+msgid "a changeset you would like to have after cloning"
+msgstr ""
+
+msgid "[OPTION]... SOURCE [DEST]"
+msgstr ""
+
+msgid "mark new/missing files as added/removed before committing"
+msgstr ""
+
+msgid "mark a branch as closed, hiding it from the branch list"
+msgstr ""
+
+msgid "record a copy that has already occurred"
+msgstr ""
+
+msgid "forcibly copy over an existing managed file"
+msgstr ""
+
+msgid "[OPTION]... [SOURCE]... DEST"
+msgstr ""
+
+msgid "[INDEX] REV1 REV2"
+msgstr ""
+
+#, fuzzy
+msgid "[COMMAND]"
+msgstr "ΕΝΤΟΛΕΣ"
+
+msgid "show the command options"
+msgstr ""
+
+msgid "[-o] CMD"
+msgstr ""
+
+msgid "try extended date formats"
+msgstr ""
+
+msgid "[-e] DATE [RANGE]"
+msgstr ""
+
+msgid "FILE REV"
+msgstr ""
+
+msgid "[PATH]"
+msgstr ""
+
+msgid "FILE"
+msgstr ""
+
+msgid "revision to rebuild to"
+msgstr ""
+
+msgid "[-r REV] [REV]"
+msgstr ""
+
+msgid "revision to debug"
+msgstr ""
+
+msgid "[-r REV] FILE"
+msgstr ""
+
+msgid "REV1 [REV2]"
+msgstr ""
+
+msgid "do not display the saved mtime"
+msgstr ""
+
+msgid "[OPTION]..."
+msgstr ""
+
+#, fuzzy
+msgid "revision to check"
+msgstr "αλλαγή"
+
+msgid "[OPTION]... [-r REV1 [-r REV2]] [FILE]..."
+msgstr ""
+
+msgid "diff against the second parent"
+msgstr ""
+
+msgid "[OPTION]... [-o OUTFILESPEC] REV..."
+msgstr ""
+
+msgid "end fields with NUL"
+msgstr ""
+
+msgid "print all revisions that match"
+msgstr ""
+
+msgid "follow changeset history, or file history across copies and renames"
+msgstr ""
+
+msgid "ignore case when matching"
+msgstr ""
+
+msgid "print only filenames and revisions that match"
+msgstr ""
+
+msgid "print matching line numbers"
+msgstr ""
+
+msgid "search in given revision range"
+msgstr ""
+
+msgid "[OPTION]... PATTERN [FILE]..."
+msgstr ""
+
+msgid "show only heads which are descendants of REV"
+msgstr ""
+
+msgid "show only the active heads from open branches"
+msgstr ""
+
+msgid "show normal and closed heads"
+msgstr ""
+
+msgid "[-r STARTREV] [REV]..."
+msgstr ""
+
+msgid "[TOPIC]"
+msgstr ""
+
+#, fuzzy
+msgid "identify the specified revision"
+msgstr ""
+
+msgid "show local revision number"
+msgstr ""
+
+msgid "show global revision id"
+msgstr ""
+
+msgid "show branch"
+msgstr ""
+
+msgid "show tags"
+msgstr ""
+
+msgid "[-nibt] [-r REV] [SOURCE]"
+msgstr ""
+
+msgid ""
+"directory strip option for patch. This has the same meaning as the "
+"corresponding patch option"
+msgstr ""
+
+msgid "base path"
+msgstr ""
+
+msgid "skip check for outstanding uncommitted changes"
+msgstr ""
+
+msgid "don't commit, just update the working directory"
+msgstr ""
+
+msgid "apply patch to the nodes from which it was generated"
+msgstr ""
+
+msgid "use any branch information in patch (implied by --exact)"
+msgstr ""
+
+msgid "[OPTION]... PATCH..."
+msgstr ""
+
+msgid "show newest record first"
+msgstr ""
+
+msgid "file to store the bundles into"
+msgstr ""
+
+msgid "a specific revision up to which you would like to pull"
+msgstr ""
+
+msgid "[-p] [-n] [-M] [-f] [-r REV]... [--bundle FILENAME] [SOURCE]"
+msgstr ""
+
+msgid "[-e CMD] [--remotecmd CMD] [DEST]"
+msgstr ""
+
+msgid "search the repository as it stood at REV"
+msgstr ""
+
+msgid "end filenames with NUL, for use with xargs"
+msgstr ""
+
+msgid "print complete paths from the filesystem root"
+msgstr ""
+
+msgid "[OPTION]... [PATTERN]..."
+msgstr ""
+
+msgid "only follow the first parent of merge changesets"
+msgstr ""
+
+#, fuzzy
+msgid "show revisions matching date spec"
+msgstr ""
+
+msgid "show copied files"
+msgstr ""
+
+msgid "do case-insensitive search for a keyword"
+msgstr ""
+
+msgid "include revisions where files were removed"
+msgstr ""
+
+msgid "show only merges"
+msgstr ""
+
+msgid "revisions committed by user"
+msgstr ""
+
+msgid "show only changesets within the given named branch"
+msgstr ""
+
+msgid "do not display revision or any of its ancestors"
+msgstr ""
+
+msgid "[OPTION]... [FILE]"
+msgstr ""
+
+msgid "revision to display"
+msgstr ""
+
+msgid "[-r REV]"
+msgstr ""
+
+msgid "force a merge with outstanding changes"
+msgstr ""
+
+msgid "revision to merge"
+msgstr ""
+
+msgid "review revisions to merge (no merge is performed)"
+msgstr ""
+
+msgid "[-f] [[-r] REV]"
+msgstr ""
+
+msgid "a specific revision up to which you would like to push"
+msgstr ""
+
+msgid "[-M] [-p] [-n] [-f] [-r REV]... [DEST]"
+msgstr ""
+
+#, fuzzy
+msgid "show parents from the specified revision"
+msgstr ""
+
+#, fuzzy
+msgid "[-r REV] [FILE]"
+msgstr "[-r ΕΚΔΟΣΗ] [ΑΡΧΕΙΟ]"
+
+msgid "[NAME]"
+msgstr ""
+
+msgid "update to new tip if changesets were pulled"
+msgstr ""
+
+msgid "[-u] [-f] [-r REV]... [-e CMD] [--remotecmd CMD] [SOURCE]"
+msgstr ""
+
+msgid "force push"
+msgstr ""
+
+msgid "[-f] [-r REV]... [-e CMD] [--remotecmd CMD] [DEST]"
+msgstr ""
+
+msgid "record delete for missing files"
+msgstr ""
+
+msgid "remove (and delete) file even if added or modified"
+msgstr ""
+
+msgid "record a rename that has already occurred"
+msgstr ""
+
+msgid "[OPTION]... SOURCE... DEST"
+msgstr ""
+
+msgid "remerge all unresolved files"
+msgstr ""
+
+msgid "list state of files needing merge"
+msgstr ""
+
+msgid "mark files as resolved"
+msgstr ""
+
+msgid "unmark files as resolved"
+msgstr ""
+
+msgid "revert all changes when no arguments given"
+msgstr ""
+
+msgid "tipmost revision matching date"
+msgstr ""
+
+msgid "revision to revert to"
+msgstr ""
+
+msgid "do not save backup copies of files"
+msgstr ""
+
+msgid "[OPTION]... [-r REV] [NAME]..."
+msgstr ""
+
+msgid "name of access log file to write to"
+msgstr ""
+
+msgid "name of error log file to write to"
+msgstr ""
+
+msgid "port to listen on (default: 8000)"
+msgstr ""
+
+msgid "address to listen on (default: all interfaces)"
+msgstr ""
+
+msgid "prefix path to serve from (default: server root)"
+msgstr ""
+
+msgid "name to show in web pages (default: working directory)"
+msgstr ""
+
+msgid "name of the webdir config file (serve more than one repository)"
+msgstr ""
+
+msgid "for remote clients"
+msgstr ""
+
+msgid "web templates to use"
+msgstr ""
+
+msgid "template style to use"
+msgstr ""
+
+msgid "use IPv6 in addition to IPv4"
+msgstr ""
+
+msgid "SSL certificate file"
+msgstr ""
+
+msgid "show untrusted configuration options"
+msgstr ""
+
+msgid "[-u] [NAME]..."
+msgstr ""
+
+msgid "show status of all files"
+msgstr ""
+
+msgid "show only modified files"
+msgstr ""
+
+msgid "show only added files"
+msgstr ""
+
+msgid "show only removed files"
+msgstr ""
+
+msgid "show only deleted (but tracked) files"
+msgstr ""
+
+msgid "show only files without changes"
+msgstr ""
+
+msgid "show only unknown (not tracked) files"
+msgstr ""
+
+msgid "show only ignored files"
+msgstr ""
+
+msgid "hide status prefix"
+msgstr ""
+
+msgid "show source of copied files"
+msgstr ""
+
+msgid "show difference from revision"
+msgstr ""
+
+msgid "replace existing tag"
+msgstr ""
+
+msgid "make the tag local"
+msgstr ""
+
+msgid "revision to tag"
+msgstr ""
+
+msgid "remove a tag"
+msgstr ""
+
+msgid "[-l] [-m TEXT] [-d DATE] [-u USER] [-r REV] NAME..."
+msgstr ""
+
+msgid "[-p]"
+msgstr ""
+
+msgid "update to new tip if changesets were unbundled"
+msgstr ""
+
+msgid "[-u] FILE..."
+msgstr ""
+
+msgid "overwrite locally modified files (no backup)"
+msgstr ""
+
+msgid "[-C] [-d DATE] [[-r] REV]"
+msgstr ""
+
+#, fuzzy, python-format
+msgid "config error at %s:%d: '%s'"
+msgstr ""
+
+msgid "not found in manifest"
+msgstr ""
+
+msgid "branch name not in UTF-8!"
+msgstr ""
+
+#, python-format
+msgid "  searching for copies back to rev %d\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"  unmatched files in local:\n"
+"   %s\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"  unmatched files in other:\n"
+"   %s\n"
+msgstr ""
+
+msgid "  all copies found (* = to merge, ! = divergent):\n"
+msgstr ""
+
+msgid "  checking for directory renames\n"
+msgstr ""
+
+#, python-format
+msgid "  dir %s -> %s\n"
+msgstr ""
+
+#, python-format
+msgid "  file %s -> %s\n"
+msgstr ""
+
+#, fuzzy
+msgid "working directory state appears damaged!"
+msgstr "χώρος εργασίας του %s"
+
+#, python-format
+msgid "'\\n' and '\\r' disallowed in filenames: %r"
+msgstr ""
+
+#, python-format
+msgid "directory %r already in dirstate"
+msgstr ""
+
+#, python-format
+msgid "file %r in dirstate clashes with %r"
+msgstr ""
+
+#, python-format
+msgid "not in dirstate: %s\n"
+msgstr ""
+
+msgid "unknown"
+msgstr ""
+
+msgid "character device"
+msgstr ""
+
+msgid "block device"
+msgstr ""
+
+msgid "fifo"
+msgstr ""
+
+msgid "socket"
+msgstr ""
+
+msgid "directory"
+msgstr ""
+
+#, python-format
+msgid "unsupported file type (type is %s)"
+msgstr ""
+
+#, python-format
+msgid "abort: %s\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"hg: command '%s' is ambiguous:\n"
+"    %s\n"
+msgstr ""
+"hg: kommandoen '%s' is tvetydig:\n"
+"    %s\n"
+
+#, python-format
+msgid "hg: %s\n"
+msgstr ""
+
+#, python-format
+msgid "timed out waiting for lock held by %s"
+msgstr ""
+
+#, python-format
+msgid "lock held by %s"
+msgstr ""
+
+#, python-format
+msgid "abort: %s: %s\n"
+msgstr ""
+
+#, python-format
+msgid "abort: could not lock %s: %s\n"
+msgstr ""
+
+#, python-format
+msgid "hg %s: %s\n"
+msgstr ""
+
+#, python-format
+msgid "abort: %s!\n"
+msgstr ""
+
+#, python-format
+msgid "abort: %s"
+msgstr ""
+
+msgid " empty string\n"
+msgstr ""
+
+msgid "killed!\n"
+msgstr ""
+
+#, python-format
+msgid "hg: unknown command '%s'\n"
+msgstr ""
+
+#, python-format
+msgid "abort: could not import module %s!\n"
+msgstr ""
+
+msgid "(did you forget to compile extensions?)\n"
+msgstr ""
+
+msgid "(is your Python install correct?)\n"
+msgstr ""
+
+#, python-format
+msgid "abort: error: %s\n"
+msgstr ""
+
+msgid "broken pipe\n"
+msgstr ""
+
+msgid "interrupted!\n"
+msgstr ""
+
+msgid ""
+"\n"
+"broken pipe\n"
+msgstr ""
+
+msgid "abort: out of memory\n"
+msgstr ""
+
+msgid "** unknown exception encountered, details follow\n"
+msgstr ""
+
+msgid "** report bug details to http://www.selenic.com/mercurial/bts\n"
+msgstr ""
+
+msgid "** or mercurial@selenic.com\n"
+msgstr ""
+
+#, python-format
+msgid "** Mercurial Distributed SCM (version %s)\n"
+msgstr "** Mercurial Κατανεμημένο SCM (έκδοση %s)\n"
+
+#, python-format
+msgid "** Extensions loaded: %s\n"
+msgstr "** Ενεργές επεκτάσεις: %s\n"
+
+#, python-format
+msgid "no definition for alias '%s'\n"
+msgstr ""
+
+#, fuzzy, python-format
+msgid "alias '%s' resolves to unknown command '%s'\n"
+msgstr "η αλλαγή αναφέρεται σε άγνωστο manifest %s"
+
+#, python-format
+msgid "alias '%s' resolves to ambiguous command '%s'\n"
+msgstr ""
+
+#, fuzzy, python-format
+msgid "alias '%s' shadows command\n"
+msgstr ""
+"λίστα εντολών:\n"
+"\n"
+
+#, python-format
+msgid "malformed --config option: %s"
+msgstr ""
+
+#, python-format
+msgid "extension '%s' overrides commands: %s\n"
+msgstr ""
+
+msgid "Option --config may not be abbreviated!"
+msgstr ""
+
+msgid "Option --cwd may not be abbreviated!"
+msgstr ""
+
+msgid ""
+"Option -R has to be separated from other options (e.g. not -qR) and --"
+"repository may only be abbreviated as --repo!"
+msgstr ""
+
+#, python-format
+msgid "Time: real %.3f secs (user %.3f+%.3f sys %.3f+%.3f)\n"
+msgstr ""
+
+#, python-format
+msgid "repository '%s' is not local"
+msgstr ""
+
+msgid "invalid arguments"
+msgstr ""
+
+#, python-format
+msgid "unrecognized profiling format '%s' - Ignored\n"
+msgstr ""
+
+msgid ""
+"lsprof not available - install from http://codespeak.net/svn/user/arigo/hack/"
+"misc/lsprof/"
+msgstr ""
+
+#, python-format
+msgid "*** failed to import extension %s from %s: %s\n"
+msgstr ""
+
+#, python-format
+msgid "*** failed to import extension %s: %s\n"
+msgstr ""
+
+#, python-format
+msgid "couldn't find merge tool %s\n"
+msgstr ""
+
+#, python-format
+msgid "tool %s can't handle symlinks\n"
+msgstr ""
+
+#, python-format
+msgid "tool %s can't handle binary\n"
+msgstr ""
+
+#, python-format
+msgid "tool %s requires a GUI\n"
+msgstr ""
+
+#, python-format
+msgid "picked tool '%s' for %s (binary %s symlink %s)\n"
+msgstr ""
+
+#, python-format
+msgid ""
+" no tool found to merge %s\n"
+"keep (l)ocal or take (o)ther?"
+msgstr ""
+
+msgid "&Local"
+msgstr ""
+
+msgid "&Other"
+msgstr ""
+
+msgid "l"
+msgstr ""
+
+#, python-format
+msgid "merging %s and %s to %s\n"
+msgstr ""
+
+#, python-format
+msgid "merging %s\n"
+msgstr ""
+
+#, python-format
+msgid "my %s other %s ancestor %s\n"
+msgstr ""
+
+msgid " premerge successful\n"
+msgstr ""
+
+#, python-format
+msgid ""
+" output file %s appears unchanged\n"
+"was merge successful (yn)?"
+msgstr ""
+
+msgid "&No"
+msgstr ""
+
+msgid "&Yes"
+msgstr ""
+
+msgid "n"
+msgstr ""
+
+#, python-format
+msgid "merging %s failed!\n"
+msgstr ""
+
+#, python-format
+msgid "Inconsistent state, %s:%s is good and bad"
+msgstr ""
+
+#, python-format
+msgid "unknown bisect kind %s"
+msgstr ""
+
+msgid "Date Formats"
+msgstr ""
+
+#, fuzzy
+msgid ""
+"\n"
+"    Some commands allow the user to specify a date, e.g.:\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"
+"\n"
+"    This is the internal representation format for dates. unixtime is\n"
+"    the number of seconds since the epoch (1970-01-01 00:00 UTC).\n"
+"    offset is the offset of the local timezone, in seconds west of UTC\n"
+"    (negative if 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"
+"    "
+
+msgid "File Name Patterns"
+msgstr ""
+
+msgid ""
+"\n"
+"    Mercurial accepts several notations for identifying one or more\n"
+"    files at a time.\n"
+"\n"
+"    By default, Mercurial treats filenames as shell-style extended\n"
+"    glob patterns.\n"
+"\n"
+"    Alternate pattern notations must be specified explicitly.\n"
+"\n"
+"    To use a plain path name without any pattern matching, start it\n"
+"    with \"path:\". These path names must completely match starting at\n"
+"    the current repository root.\n"
+"\n"
+"    To use an extended glob, start a name with \"glob:\". Globs are\n"
+"    rooted at the current directory; a glob such as \"*.c\" will only\n"
+"    match files in the current directory ending with \".c\".\n"
+"\n"
+"    The supported glob syntax extensions are \"**\" to match any string\n"
+"    across path separators and \"{a,b}\" to mean \"a or b\".\n"
+"\n"
+"    To use a Perl/Python regular expression, start a name with \"re:\".\n"
+"    Regexp pattern matching is anchored at the root of the repository.\n"
+"\n"
+"    Plain examples:\n"
+"\n"
+"    path:foo/bar   a name bar in a directory named foo in the root of\n"
+"                   the repository\n"
+"    path:path:name a file or directory named \"path:name\"\n"
+"\n"
+"    Glob examples:\n"
+"\n"
+"    glob:*.c       any name ending in \".c\" in the current directory\n"
+"    *.c            any name ending in \".c\" in the current directory\n"
+"    **.c           any name ending in \".c\" in any subdirectory of the\n"
+"                   current directory including itself.\n"
+"    foo/*.c        any name ending in \".c\" in the directory foo\n"
+"    foo/**.c       any name ending in \".c\" in any subdirectory of foo\n"
+"                   including itself.\n"
+"\n"
+"    Regexp examples:\n"
+"\n"
+"    re:.*\\.c$      any name ending in \".c\", anywhere in the repository\n"
+"\n"
+"    "
+msgstr ""
+
+msgid "Environment Variables"
+msgstr ""
+
+msgid ""
+"\n"
+"HG::\n"
+"    Path to the 'hg' executable, automatically passed when running\n"
+"    hooks, extensions or external tools. If unset or empty, this is\n"
+"    the hg executable's name if it's frozen, or an executable named\n"
+"    'hg' (with %PATHEXT% [defaulting to COM/EXE/BAT/CMD] extensions on\n"
+"    Windows) is searched.\n"
+"\n"
+"HGEDITOR::\n"
+"    This is the name of the editor to run when committing. See EDITOR.\n"
+"\n"
+"    (deprecated, use .hgrc)\n"
+"\n"
+"HGENCODING::\n"
+"    This overrides the default locale setting detected by Mercurial.\n"
+"    This setting is used to convert data including usernames,\n"
+"    changeset descriptions, tag names, and branches. This setting can\n"
+"    be overridden with the --encoding command-line option.\n"
+"\n"
+"HGENCODINGMODE::\n"
+"    This sets Mercurial's behavior for handling unknown characters\n"
+"    while transcoding user input. The default is \"strict\", which\n"
+"    causes Mercurial to abort if it can't map a character. Other\n"
+"    settings include \"replace\", which replaces unknown characters, and\n"
+"    \"ignore\", which drops them. This setting can be overridden with\n"
+"    the --encodingmode command-line option.\n"
+"\n"
+"HGMERGE::\n"
+"    An executable to use for resolving merge conflicts. The program\n"
+"    will be executed with three arguments: local file, remote file,\n"
+"    ancestor file.\n"
+"\n"
+"    (deprecated, use .hgrc)\n"
+"\n"
+"HGRCPATH::\n"
+"    A list of files or directories to search for hgrc files. Item\n"
+"    separator is \":\" on Unix, \";\" on Windows. If HGRCPATH is not set,\n"
+"    platform default search path is used. If empty, only the .hg/hgrc\n"
+"    from the current repository is read.\n"
+"\n"
+"    For each element in HGRCPATH:\n"
+"    * if it's a directory, all files ending with .rc are added\n"
+"    * otherwise, the file itself will be added\n"
+"\n"
+"HGUSER::\n"
+"    This is the string used as the author of a commit. If not set,\n"
+"    available values will be considered in this order:\n"
+"\n"
+"    * HGUSER (deprecated)\n"
+"    * hgrc files from the HGRCPATH\n"
+"    * EMAIL\n"
+"    * interactive prompt\n"
+"    * LOGNAME (with '@hostname' appended)\n"
+"\n"
+"    (deprecated, use .hgrc)\n"
+"\n"
+"EMAIL::\n"
+"    May be used as the author of a commit; see HGUSER.\n"
+"\n"
+"LOGNAME::\n"
+"    May be used as the author of a commit; see HGUSER.\n"
+"\n"
+"VISUAL::\n"
+"    This is the name of the editor to use when committing. See EDITOR.\n"
+"\n"
+"EDITOR::\n"
+"    Sometimes Mercurial needs to open a text file in an editor for a\n"
+"    user to modify, for example when writing commit messages. The\n"
+"    editor it uses is determined by looking at the environment\n"
+"    variables HGEDITOR, VISUAL and EDITOR, in that order. The first\n"
+"    non-empty one is chosen. If all of them are empty, the editor\n"
+"    defaults to 'vi'.\n"
+"\n"
+"PYTHONPATH::\n"
+"    This is used by Python to find imported modules and may need to be\n"
+"    set appropriately if this Mercurial is not installed system-wide.\n"
+"    "
+msgstr ""
+
+msgid "Specifying Single Revisions"
+msgstr ""
+
+msgid ""
+"\n"
+"    Mercurial supports several ways to specify individual revisions.\n"
+"\n"
+"    A plain integer is treated as a revision number. Negative integers\n"
+"    are treated as topological offsets from the tip, with -1 denoting\n"
+"    the tip. As such, negative numbers are only useful if you've\n"
+"    memorized your local tree numbers and want to save typing a single\n"
+"    digit. This editor suggests copy and paste.\n"
+"\n"
+"    A 40-digit hexadecimal string is treated as a unique revision\n"
+"    identifier.\n"
+"\n"
+"    A hexadecimal string less than 40 characters long is treated as a\n"
+"    unique revision identifier, and referred to as a short-form\n"
+"    identifier. A short-form identifier is only valid if it is the\n"
+"    prefix of exactly one full-length identifier.\n"
+"\n"
+"    Any other string is treated as a tag name, which is a symbolic\n"
+"    name associated with a revision identifier. Tag names may not\n"
+"    contain the \":\" character.\n"
+"\n"
+"    The reserved name \"tip\" is a special tag that always identifies\n"
+"    the most recent revision.\n"
+"\n"
+"    The reserved name \"null\" indicates the null revision. This is the\n"
+"    revision of an empty repository, and the parent of revision 0.\n"
+"\n"
+"    The reserved name \".\" indicates the working directory parent. If\n"
+"    no working directory is checked out, it is equivalent to null. If\n"
+"    an uncommitted merge is in progress, \".\" is the revision of the\n"
+"    first parent.\n"
+"    "
+msgstr ""
+
+msgid "Specifying Multiple Revisions"
+msgstr ""
+
+msgid ""
+"\n"
+"    When Mercurial accepts more than one revision, they may be\n"
+"    specified individually, or provided as a topologically continuous\n"
+"    range, separated by the \":\" character.\n"
+"\n"
+"    The syntax of range notation is [BEGIN]:[END], where BEGIN and END\n"
+"    are revision identifiers. Both BEGIN and END are optional. If\n"
+"    BEGIN is not specified, it defaults to revision number 0. If END\n"
+"    is not specified, it defaults to the tip. The range \":\" thus means\n"
+"    \"all revisions\".\n"
+"\n"
+"    If BEGIN is greater than END, revisions are treated in reverse\n"
+"    order.\n"
+"\n"
+"    A range acts as a closed interval. This means that a range of 3:5\n"
+"    gives 3, 4 and 5. Similarly, a range of 9:6 gives 9, 8, 7, and 6.\n"
+"    "
+msgstr ""
+
+msgid "Diff Formats"
+msgstr ""
+
+msgid ""
+"\n"
+"    Mercurial's default format for showing changes between two\n"
+"    versions of a file is compatible with the unified format of GNU\n"
+"    diff, which can be used by GNU patch and many other standard\n"
+"    tools.\n"
+"\n"
+"    While this standard format is often enough, it does not encode the\n"
+"    following information:\n"
+"\n"
+"     - executable status and other permission bits\n"
+"     - copy or rename information\n"
+"     - changes in binary files\n"
+"     - creation or deletion of empty files\n"
+"\n"
+"    Mercurial also supports the extended diff format from the git VCS\n"
+"    which addresses these limitations. The git diff format is not\n"
+"    produced by default because a few widespread tools still do not\n"
+"    understand this format.\n"
+"\n"
+"    This means that when generating diffs from a Mercurial repository\n"
+"    (e.g. with \"hg export\"), you should be careful about things like\n"
+"    file copies and renames or other things mentioned above, because\n"
+"    when applying a standard diff to a different repository, this\n"
+"    extra information is lost. Mercurial's internal operations (like\n"
+"    push and pull) are not affected by this, because they use an\n"
+"    internal binary format for communicating changes.\n"
+"\n"
+"    To make Mercurial produce the git extended diff format, use the\n"
+"    --git option available for many commands, or set 'git = True' in\n"
+"    the [diff] section of your hgrc. You do not need to set this\n"
+"    option when importing diffs in this format or using them in the mq\n"
+"    extension.\n"
+"    "
+msgstr ""
+
+msgid "Template Usage"
+msgstr ""
+
+msgid ""
+"\n"
+"    Mercurial allows you to customize output of commands through\n"
+"    templates. You can either pass in a template from the command\n"
+"    line, via the --template option, or select an existing\n"
+"    template-style (--style).\n"
+"\n"
+"    You can customize output for any \"log-like\" command: log,\n"
+"    outgoing, incoming, tip, parents, heads and glog.\n"
+"\n"
+"    Three styles are packaged with Mercurial: default (the style used\n"
+"    when no explicit preference is passed), compact and changelog.\n"
+"    Usage:\n"
+"\n"
+"        $ hg log -r1 --style changelog\n"
+"\n"
+"    A template is a piece of text, with markup to invoke variable\n"
+"    expansion:\n"
+"\n"
+"        $ hg log -r1 --template \"{node}\\n\"\n"
+"        b56ce7b07c52de7d5fd79fb89701ea538af65746\n"
+"\n"
+"    Strings in curly braces are called keywords. The availability of\n"
+"    keywords depends on the exact context of the templater. These\n"
+"    keywords are usually available for templating a log-like command:\n"
+"\n"
+"    - author: String. The unmodified author of the changeset.\n"
+"    - branches: String. The name of the branch on which the changeset\n"
+"          was committed. Will be empty if the branch name was default.\n"
+"    - date: Date information. The date when the changeset was committed.\n"
+"    - desc: String. The text of the changeset description.\n"
+"    - diffstat: String. Statistics of changes with the following\n"
+"          format: \"modified files: +added/-removed lines\"\n"
+"    - files: List of strings. All files modified, added, or removed by\n"
+"          this changeset.\n"
+"    - file_adds: List of strings. Files added by this changeset.\n"
+"    - file_mods: List of strings. Files modified by this changeset.\n"
+"    - file_dels: List of strings. Files removed by this changeset.\n"
+"    - node: String. The changeset identification hash, as a\n"
+"          40-character hexadecimal string.\n"
+"    - parents: List of strings. The parents of the changeset.\n"
+"    - rev: Integer. The repository-local changeset revision number.\n"
+"    - tags: List of strings. Any tags associated with the changeset.\n"
+"\n"
+"    The \"date\" keyword does not produce human-readable output. If you\n"
+"    want to use a date in your output, you can use a filter to process\n"
+"    it. Filters are functions which return a string based on the input\n"
+"    variable. You can also use a chain of filters to get the desired\n"
+"    output:\n"
+"\n"
+"       $ hg tip --template \"{date|isodate}\\n\"\n"
+"       2008-08-21 18:22 +0000\n"
+"\n"
+"    List of filters:\n"
+"\n"
+"    - addbreaks: Any text. Add an XHTML \"<br />\" tag before the end of\n"
+"          every line except the last.\n"
+"    - age: Date. Returns a human-readable date/time difference between\n"
+"          the given date/time and the current date/time.\n"
+"    - basename: Any text. Treats the text as a path, and returns the\n"
+"          last component of the path after splitting by the path\n"
+"          separator (ignoring trailing separators). For example,\n"
+"          \"foo/bar/baz\" becomes \"baz\" and \"foo/bar//\" becomes \"bar"
+"\".\n"
+"    - stripdir: Treat the text as path and strip a directory level, if\n"
+"          possible. For example, \"foo\" and \"foo/bar\" becomes \"foo\".\n"
+"    - date: Date. Returns a date in a Unix date format, including\n"
+"          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 component.\n"
+"          Example: 'User <user@example.com>' becomes 'example.com'.\n"
+"    - email: Any text. Extracts the first string that looks like an\n"
+"          email address. Example: 'User <user@example.com>' becomes\n"
+"          '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"
+"    - fill76: Any text. Wraps the text to fit in 76 columns.\n"
+"    - firstline: Any text. Returns the first line of text.\n"
+"    - nonempty: Any text. Returns '(none)' if the string is empty.\n"
+"    - hgdate: Date. Returns the date as a pair of numbers:\n"
+"          \"1157407993 25200\" (Unix timestamp, timezone offset).\n"
+"    - isodate: Date. Returns the date in ISO 8601 format.\n"
+"    - localdate: Date. Converts a date to local date.\n"
+"    - obfuscate: Any text. Returns the input text rendered as a\n"
+"          sequence of XML entities.\n"
+"    - person: Any text. Returns the text before an email address.\n"
+"    - rfc822date: Date. Returns a date using the same format used\n"
+"          in email headers.\n"
+"    - short: Changeset hash. Returns the short form of a changeset\n"
+"          hash, i.e. a 12-byte hexadecimal string.\n"
+"    - shortdate: Date. Returns a date like \"2006-09-18\".\n"
+"    - strip: Any text. Strips all leading and trailing whitespace.\n"
+"    - tabindent: Any text. Returns the text, with every line except\n"
+"          the first starting with a tab character.\n"
+"    - urlescape: Any text. Escapes all \"special\" characters. For\n"
+"          example, \"foo bar\" becomes \"foo%20bar\".\n"
+"    - user: Any text. Returns the user portion of an email address.\n"
+"    "
+msgstr ""
+
+msgid "URL Paths"
+msgstr ""
+
+msgid ""
+"\n"
+"    Valid URLs are of the form:\n"
+"\n"
+"      local/filesystem/path (or file://local/filesystem/path)\n"
+"      http://[user[:pass]@]host[:port]/[path]\n"
+"      https://[user[:pass]@]host[:port]/[path]\n"
+"      ssh://[user[:pass]@]host[:port]/[path]\n"
+"\n"
+"    Paths in the local filesystem can either point to Mercurial\n"
+"    repositories or to bundle files (as created by 'hg bundle' or\n"
+"    'hg incoming --bundle').\n"
+"\n"
+"    An optional identifier after # indicates a particular branch, tag,\n"
+"    or changeset to use from the remote repository.\n"
+"\n"
+"    Some features, such as pushing to http:// and https:// URLs are\n"
+"    only possible if the feature is explicitly enabled on the remote\n"
+"    Mercurial server.\n"
+"\n"
+"    Some notes about using SSH with Mercurial:\n"
+"    - SSH requires an accessible shell account on the destination\n"
+"      machine and a copy of hg in the remote path or specified with as\n"
+"      remotecmd.\n"
+"    - path is relative to the remote user's home directory by default.\n"
+"      Use an extra slash at the start of a path to specify an absolute "
+"path:\n"
+"        ssh://example.com//tmp/repository\n"
+"    - Mercurial doesn't use its own compression via SSH; the right\n"
+"      thing to do is to configure it in your ~/.ssh/config, e.g.:\n"
+"        Host *.mylocalnetwork.example.com\n"
+"          Compression no\n"
+"        Host *\n"
+"          Compression yes\n"
+"      Alternatively specify \"ssh -C\" as your ssh command in your hgrc\n"
+"      or with the --ssh command line option.\n"
+"\n"
+"    These URLs can all be stored in your hgrc with path aliases under\n"
+"    the [paths] section like so:\n"
+"    [paths]\n"
+"    alias1 = URL1\n"
+"    alias2 = URL2\n"
+"    ...\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"
+"\n"
+"    Two path aliases are special because they are used as defaults\n"
+"    when you do not provide the URL to a command:\n"
+"\n"
+"    default:\n"
+"      When you create a repository with hg clone, the clone command\n"
+"      saves the location of the source repository as the new\n"
+"      repository's 'default' path. This is then used when you omit\n"
+"      path from push- and pull-like commands (including incoming and\n"
+"      outgoing).\n"
+"\n"
+"    default-push:\n"
+"      The push command will look for a path named 'default-push', and\n"
+"      prefer it over 'default' if both are defined.\n"
+"    "
+msgstr ""
+
+msgid "can only share local repositories"
+msgstr ""
+
+#, fuzzy
+msgid "destination already exists"
+msgstr ""
+
+msgid "updating working directory\n"
+msgstr ""
+
+#, python-format
+msgid "destination directory: %s\n"
+msgstr ""
+
+#, python-format
+msgid "destination '%s' already exists"
+msgstr ""
+
+#, fuzzy, python-format
+msgid "destination '%s' is not empty"
+msgstr ""
+
+msgid ""
+"src repository does not support revision lookup and so doesn't support clone "
+"by revision"
+msgstr ""
+
+msgid "clone from remote to remote not supported"
+msgstr ""
+
+msgid "updated"
+msgstr ""
+
+msgid "merged"
+msgstr ""
+
+msgid "removed"
+msgstr ""
+
+msgid "unresolved"
+msgstr ""
+
+#, python-format
+msgid "%d files %s"
+msgstr ""
+
+msgid "use 'hg resolve' to retry unresolved file merges\n"
+msgstr ""
+
+msgid ""
+"use 'hg resolve' to retry unresolved file merges or 'hg up --clean' to "
+"abandon\n"
+msgstr ""
+
+msgid "(branch merge, don't forget to commit)\n"
+msgstr ""
+
+#, python-format
+msgid "error reading %s/.hg/hgrc: %s\n"
+msgstr ""
+
+msgid "SSL support is unavailable"
+msgstr ""
+
+#, fuzzy
+msgid "IPv6 is not available on this system"
+msgstr ""
+
+#, python-format
+msgid "cannot start server at '%s:%d': %s"
+msgstr ""
+
+#, python-format
+msgid "calling hook %s: %s\n"
+msgstr ""
+
+#, python-format
+msgid "%s hook is invalid (\"%s\" not in a module)"
+msgstr ""
+
+#, python-format
+msgid "%s hook is invalid (import of \"%s\" failed)"
+msgstr ""
+
+#, python-format
+msgid "%s hook is invalid (\"%s\" is not defined)"
+msgstr ""
+
+#, python-format
+msgid "%s hook is invalid (\"%s\" is not callable)"
+msgstr ""
+
+#, python-format
+msgid "error: %s hook failed: %s\n"
+msgstr ""
+
+#, python-format
+msgid "error: %s hook raised an exception: %s\n"
+msgstr ""
+
+#, python-format
+msgid "%s hook failed"
+msgstr ""
+
+#, python-format
+msgid "warning: %s hook failed\n"
+msgstr ""
+
+#, python-format
+msgid "running hook %s: %s\n"
+msgstr ""
+
+#, python-format
+msgid "%s hook %s"
+msgstr ""
+
+#, python-format
+msgid "warning: %s hook %s\n"
+msgstr ""
+
+msgid "connection ended unexpectedly"
+msgstr ""
+
+#, python-format
+msgid "unsupported URL component: \"%s\""
+msgstr ""
+
+#, python-format
+msgid "using %s\n"
+msgstr ""
+
+#, python-format
+msgid "capabilities: %s\n"
+msgstr ""
+
+msgid "operation not supported over http"
+msgstr ""
+
+#, python-format
+msgid "sending %s command\n"
+msgstr ""
+
+#, python-format
+msgid "sending %s bytes\n"
+msgstr ""
+
+msgid "authorization failed"
+msgstr ""
+
+#, python-format
+msgid "http error while sending %s command\n"
+msgstr ""
+
+msgid "http error, possibly caused by proxy setting"
+msgstr ""
+
+#, python-format
+msgid "real URL is %s\n"
+msgstr ""
+
+#, python-format
+msgid "requested URL: '%s'\n"
+msgstr ""
+
+#, python-format
+msgid "'%s' does not appear to be an hg repository"
+msgstr ""
+
+#, python-format
+msgid "'%s' sent a broken Content-Type header (%s)"
+msgstr ""
+
+#, python-format
+msgid "'%s' uses newer protocol %s"
+msgstr ""
+
+msgid "look up remote revision"
+msgstr ""
+
+msgid "unexpected response:"
+msgstr ""
+
+msgid "look up remote changes"
+msgstr ""
+
+msgid "push failed (unexpected response):"
+msgstr ""
+
+#, python-format
+msgid "push failed: %s"
+msgstr ""
+
+msgid "Python support for SSL and HTTPS is not installed"
+msgstr "δεν έχει εγκατασταθεί υποστήριξη SSL και HTTPS για την Python"
+
+msgid "cannot create new http repository"
+msgstr "δε μπορεί να δημιουργηθεί ένα νέο αποθετήριο μέσω http"
+
+#, python-format
+msgid "%s: ignoring invalid syntax '%s'\n"
+msgstr ""
+
+#, python-format
+msgid "skipping unreadable ignore file '%s': %s\n"
+msgstr ""
+
+#, python-format
+msgid "repository %s not found"
+msgstr "το αποθετήριο %s δε βρέθηκε"
+
+#, python-format
+msgid "repository %s already exists"
+msgstr "το αποθετήριο %s υπάρχει ήδη"
+
+#, python-format
+msgid "requirement '%s' not supported"
+msgstr ""
+
+#, python-format
+msgid ".hg/sharedpath points to nonexistent directory %s"
+msgstr ""
+
+#, python-format
+msgid "%r cannot be used in a tag name"
+msgstr "το %r δε μπορεί να χρησιμοποιηθεί ως όνομα ετικέτας"
+
+msgid "working copy of .hgtags is changed (please commit .hgtags manually)"
+msgstr ""
+
+#, python-format
+msgid "%s, line %s: %s\n"
+msgstr "%s, γραμμή %s: %s\n"
+
+msgid "cannot parse entry"
+msgstr ""
+
+#, python-format
+msgid "node '%s' is not well formed"
+msgstr ""
+
+#, python-format
+msgid "tag '%s' refers to unknown node"
+msgstr ""
+
+#, fuzzy, python-format
+msgid "working directory has unknown parent '%s'!"
+msgstr "χώρος εργασίας του %s"
+
+#, python-format
+msgid "unknown revision '%s'"
+msgstr ""
+
+#, python-format
+msgid "filtering %s through %s\n"
+msgstr ""
+
+msgid "journal already exists - run hg recover"
+msgstr ""
+
+msgid "rolling back interrupted transaction\n"
+msgstr ""
+
+msgid "no interrupted transaction available\n"
+msgstr ""
+
+msgid "rolling back last transaction\n"
+msgstr ""
+
+#, python-format
+msgid "Named branch could not be reset, current branch still is: %s\n"
+msgstr ""
+
+msgid "no rollback information available\n"
+msgstr ""
+
+#, python-format
+msgid "waiting for lock on %s held by %r\n"
+msgstr ""
+
+#, python-format
+msgid "repository %s"
+msgstr ""
+
+#, python-format
+msgid "working directory of %s"
+msgstr "χώρος εργασίας του %s"
+
+#, python-format
+msgid " %s: searching for copy revision for %s\n"
+msgstr ""
+
+#, python-format
+msgid " %s: copy %s:%s\n"
+msgstr ""
+
+msgid "cannot partially commit a merge (do not specify files or patterns)"
+msgstr ""
+
+#, fuzzy
+msgid "file not found!"
+msgstr "δε βρέθηκε!\n"
+
+msgid "no match under directory!"
+msgstr ""
+
+msgid "file not tracked!"
+msgstr ""
+
+msgid "nothing changed\n"
+msgstr ""
+
+msgid "unresolved merge conflicts (see hg resolve)"
+msgstr ""
+
+#, python-format
+msgid "committing subrepository %s\n"
+msgstr ""
+
+#, python-format
+msgid "trouble committing %s!\n"
+msgstr ""
+
+#, python-format
+msgid "%s does not exist!\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"%s: files over 10MB may cause memory and performance problems\n"
+"(use 'hg revert %s' to unadd the file)\n"
+msgstr ""
+
+#, python-format
+msgid "%s not added: only files and symlinks supported currently\n"
+msgstr ""
+
+#, python-format
+msgid "%s already tracked!\n"
+msgstr ""
+
+#, python-format
+msgid "%s not added!\n"
+msgstr ""
+
+#, python-format
+msgid "%s still exists!\n"
+msgstr ""
+
+#, python-format
+msgid "%s not tracked!\n"
+msgstr ""
+
+#, python-format
+msgid "%s not removed!\n"
+msgstr ""
+
+#, python-format
+msgid "copy failed: %s is not a file or a symbolic link\n"
+msgstr ""
+
+msgid "searching for changes\n"
+msgstr ""
+
+#, python-format
+msgid "examining %s:%s\n"
+msgstr ""
+
+msgid "branch already found\n"
+msgstr ""
+
+#, python-format
+msgid "found incomplete branch %s:%s\n"
+msgstr ""
+
+#, python-format
+msgid "found new changeset %s\n"
+msgstr ""
+
+#, python-format
+msgid "request %d: %s\n"
+msgstr ""
+
+#, python-format
+msgid "received %s:%s\n"
+msgstr ""
+
+#, python-format
+msgid "narrowing %d:%d %s\n"
+msgstr ""
+
+#, python-format
+msgid "found new branch changeset %s\n"
+msgstr ""
+
+#, python-format
+msgid "narrowed branch search to %s:%s\n"
+msgstr ""
+
+msgid "already have changeset "
+msgstr ""
+
+msgid "warning: repository is unrelated\n"
+msgstr ""
+
+msgid "repository is unrelated"
+msgstr ""
+
+msgid "found new changesets starting at "
+msgstr ""
+
+#, python-format
+msgid "%d total queries\n"
+msgstr ""
+
+msgid "common changesets up to "
+msgstr ""
+
+msgid "requesting all changes\n"
+msgstr ""
+
+msgid ""
+"Partial pull cannot be done because other repository doesn't support "
+"changegroupsubset."
+msgstr ""
+
+#, python-format
+msgid "abort: push creates new remote branch '%s'!\n"
+msgstr ""
+
+msgid "abort: push creates new remote heads!\n"
+msgstr ""
+
+msgid "(did you forget to merge? use push -f to force)\n"
+msgstr ""
+
+msgid "note: unsynced remote changes!\n"
+msgstr ""
+
+#, python-format
+msgid "%d changesets found\n"
+msgstr ""
+
+msgid "list of changesets:\n"
+msgstr ""
+
+#, python-format
+msgid "empty or missing revlog for %s"
+msgstr ""
+
+#, python-format
+msgid "add changeset %s\n"
+msgstr "προσθήκη αλλαγής %s\n"
+
+msgid "adding changesets\n"
+msgstr "προσθήκη αλλαγών\n"
+
+msgid "received changelog group is empty"
+msgstr ""
+
+msgid "adding manifests\n"
+msgstr ""
+
+msgid "adding file changes\n"
+msgstr ""
+
+#, python-format
+msgid "adding %s revisions\n"
+msgstr ""
+
+msgid "received file revlog group is empty"
+msgstr ""
+
+#, python-format
+msgid " (%+d heads)"
+msgstr ""
+
+#, python-format
+msgid "added %d changesets with %d changes to %d files%s\n"
+msgstr ""
+
+msgid "updating the branch cache\n"
+msgstr ""
+
+msgid "Unexpected response from remote server:"
+msgstr ""
+
+msgid "operation forbidden by server"
+msgstr ""
+
+msgid "locking the remote repository failed"
+msgstr ""
+
+msgid "the server sent an unknown error code"
+msgstr ""
+
+msgid "streaming all changes\n"
+msgstr ""
+
+#, python-format
+msgid "%d files to transfer, %s of data\n"
+msgstr ""
+
+#, python-format
+msgid "adding %s (%s)\n"
+msgstr ""
+
+#, python-format
+msgid "transferred %s in %.1f seconds (%s/sec)\n"
+msgstr ""
+
+msgid "no [smtp]host in hgrc - cannot send mail"
+msgstr ""
+
+#, python-format
+msgid "sending mail: smtp host %s, port %s\n"
+msgstr ""
+
+msgid "can't use TLS: Python SSL support not installed"
+msgstr ""
+
+msgid "(using tls)\n"
+msgstr ""
+
+#, python-format
+msgid "(authenticating to mail server as %s)\n"
+msgstr ""
+
+#, python-format
+msgid "sending mail: %s\n"
+msgstr ""
+
+msgid "smtp specified as email transport, but no smtp host configured"
+msgstr ""
+
+#, python-format
+msgid "%r specified as email transport, but not in PATH"
+msgstr ""
+
+#, python-format
+msgid "ignoring invalid sendcharset: %s\n"
+msgstr ""
+
+#, python-format
+msgid "invalid email address: %s"
+msgstr ""
+
+#, python-format
+msgid "invalid local address: %s"
+msgstr ""
+
+#, python-format
+msgid "failed to remove %s from manifest"
+msgstr ""
+
+#, python-format
+msgid "diff context lines count must be an integer, not %r"
+msgstr ""
+
+#, python-format
+msgid ""
+"untracked file in working directory differs from file in requested revision: "
+"'%s'"
+msgstr ""
+
+#, python-format
+msgid "case-folding collision between %s and %s"
+msgstr ""
+
+#, python-format
+msgid ""
+" conflicting flags for %s\n"
+"(n)one, e(x)ec or sym(l)ink?"
+msgstr ""
+
+#, fuzzy
+msgid "&None"
+msgstr "ολοκληρώθηκε\n"
+
+msgid "E&xec"
+msgstr ""
+
+msgid "Sym&link"
+msgstr ""
+
+msgid "resolving manifests\n"
+msgstr ""
+
+#, python-format
+msgid " overwrite %s partial %s\n"
+msgstr ""
+
+#, python-format
+msgid " ancestor %s local %s remote %s\n"
+msgstr ""
+
+#, python-format
+msgid ""
+" local changed %s which remote deleted\n"
+"use (c)hanged version or (d)elete?"
+msgstr ""
+
+msgid "&Changed"
+msgstr ""
+
+msgid "&Delete"
+msgstr ""
+
+msgid "c"
+msgstr ""
+
+#, python-format
+msgid ""
+"remote changed %s which local deleted\n"
+"use (c)hanged version or leave (d)eleted?"
+msgstr ""
+
+msgid "&Deleted"
+msgstr ""
+
+#, python-format
+msgid "preserving %s for resolve of %s\n"
+msgstr ""
+
+#, python-format
+msgid "update failed to remove %s: %s!\n"
+msgstr ""
+
+#, python-format
+msgid "getting %s\n"
+msgstr "λήψη του %s\n"
+
+#, python-format
+msgid "getting %s to %s\n"
+msgstr "λήψη του %s στο %s\n"
+
+#, python-format
+msgid "warning: detected divergent renames of %s to:\n"
+msgstr ""
+
+#, python-format
+msgid "branch %s not found"
+msgstr ""
+
+msgid "can't merge with ancestor"
+msgstr ""
+
+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 ""
+
+#, python-format
+msgid "cannot create %s: destination already exists"
+msgstr ""
+
+#, python-format
+msgid "cannot create %s: unable to create destination directory"
+msgstr ""
+
+#, python-format
+msgid "found patch at byte %d\n"
+msgstr ""
+
+msgid "patch generated by hg export\n"
+msgstr ""
+
+#, python-format
+msgid "unable to find '%s' for patching\n"
+msgstr ""
+
+#, python-format
+msgid "patching file %s\n"
+msgstr ""
+
+#, python-format
+msgid "%d out of %d hunks FAILED -- saving rejects to file %s\n"
+msgstr ""
+
+#, python-format
+msgid "bad hunk #%d %s (%d %d %d %d)"
+msgstr ""
+
+#, python-format
+msgid "file %s already exists\n"
+msgstr ""
+
+#, python-format
+msgid "Hunk #%d succeeded at %d %s(offset %d line).\n"
+msgstr ""
+
+#, python-format
+msgid "Hunk #%d succeeded at %d %s(offset %d lines).\n"
+msgstr ""
+
+#, python-format
+msgid "Hunk #%d FAILED at %d\n"
+msgstr ""
+
+#, python-format
+msgid "bad hunk #%d"
+msgstr ""
+
+#, python-format
+msgid "bad hunk #%d old text line %d"
+msgstr ""
+
+msgid "could not extract binary patch"
+msgstr ""
+
+#, python-format
+msgid "binary patch is %d bytes, not %d"
+msgstr ""
+
+#, python-format
+msgid "unable to strip away %d dirs from %s"
+msgstr ""
+
+msgid "undefined source and destination files"
+msgstr ""
+
+#, python-format
+msgid "malformed patch %s %s"
+msgstr ""
+
+#, python-format
+msgid "unsupported parser state: %s"
+msgstr ""
+
+#, python-format
+msgid "patch command failed: %s"
+msgstr ""
+
+#, python-format
+msgid "Unsupported line endings type: %s"
+msgstr ""
+
+#, python-format
+msgid "no valid hunks found; trying with %r instead\n"
+msgstr ""
+
+#, python-format
+msgid "exited with status %d"
+msgstr ""
+
+#, python-format
+msgid "killed by signal %d"
+msgstr ""
+
+#, python-format
+msgid "stopped by signal %d"
+msgstr ""
+
+msgid "invalid exit code"
+msgstr ""
+
+#, python-format
+msgid "saving bundle to %s\n"
+msgstr ""
+
+msgid "adding branch\n"
+msgstr ""
+
+#, python-format
+msgid "cannot %s; remote repository does not support the %r capability"
+msgstr ""
+
+#, python-format
+msgid "unknown compression type %r"
+msgstr ""
+
+#, python-format
+msgid "index %s unknown flags %#04x for format v0"
+msgstr ""
+
+#, python-format
+msgid "index %s unknown flags %#04x for revlogng"
+msgstr ""
+
+#, python-format
+msgid "index %s unknown format %d"
+msgstr ""
+
+#, fuzzy, python-format
+msgid "index %s is corrupted"
+msgstr ""
+
+msgid "no node"
+msgstr ""
+
+msgid "ambiguous identifier"
+msgstr ""
+
+msgid "no match found"
+msgstr ""
+
+#, python-format
+msgid "incompatible revision flag %x"
+msgstr ""
+
+#, python-format
+msgid "%s not found in the transaction"
+msgstr ""
+
+msgid "unknown base"
+msgstr ""
+
+msgid "consistency error adding group"
+msgstr ""
+
+#, python-format
+msgid "%s looks like a binary file."
+msgstr ""
+
+msgid "can only specify two labels."
+msgstr ""
+
+msgid "warning: conflicts during merge.\n"
+msgstr ""
+
+#, python-format
+msgid "couldn't parse location %s"
+msgstr ""
+
+msgid "could not create remote repo"
+msgstr ""
+
+msgid "remote: "
+msgstr "απομακρυσμένο:"
+
+msgid "no suitable response from remote hg"
+msgstr ""
+
+#, python-format
+msgid "push refused: %s"
+msgstr ""
+
+msgid "unsynced changes"
+msgstr ""
+
+msgid "cannot lock static-http repository"
+msgstr ""
+
+msgid "cannot create new static-http repository"
+msgstr ""
+
+#, python-format
+msgid "invalid entry in fncache, line %s"
+msgstr ""
+
+msgid "scanning\n"
+msgstr ""
+
+#, python-format
+msgid "%d files, %d bytes to transfer\n"
+msgstr ""
+
+#, python-format
+msgid "sending %s (%d bytes)\n"
+msgstr ""
+
+#, python-format
+msgid ""
+" subrepository sources for %s differ\n"
+"use (l)ocal source (%s) or (r)emote source (%s)?"
+msgstr ""
+
+#, fuzzy
+msgid "&Remote"
+msgstr "απομακρυσμένο:"
+
+msgid "r"
+msgstr ""
+
+#, python-format
+msgid ""
+" local changed subrepository %s which remote removed\n"
+"use (c)hanged version or (d)elete?"
+msgstr ""
+
+#, python-format
+msgid ""
+" remote changed subrepository %s which local removed\n"
+"use (c)hanged version or (d)elete?"
+msgstr ""
+
+#, fuzzy, python-format
+msgid "removing subrepo %s\n"
+msgstr "αφαίρεση του %s\n"
+
+#, fuzzy, python-format
+msgid "pulling subrepo %s\n"
+msgstr "καθαρισμός %s\n"
+
+#, fuzzy, python-format
+msgid "pushing subrepo %s\n"
+msgstr ""
+
+msgid "unmatched quotes"
+msgstr ""
+
+#, fuzzy, python-format
+msgid "error expanding '%s%%%s'"
+msgstr ""
+
+#, python-format
+msgid "unknown filter '%s'"
+msgstr ""
+
+#, python-format
+msgid "style not found: %s"
+msgstr ""
+
+#, python-format
+msgid "template file %s: %s"
+msgstr ""
+
+msgid "cannot use transaction when it is already committed/aborted"
+msgstr ""
+
+#, python-format
+msgid "failed to truncate %s\n"
+msgstr ""
+
+msgid "transaction abort!\n"
+msgstr ""
+
+msgid "rollback completed\n"
+msgstr ""
+
+msgid "rollback failed - please run hg recover\n"
+msgstr ""
+
+#, python-format
+msgid "Not trusting file %s from untrusted user %s, group %s\n"
+msgstr ""
+
+#, python-format
+msgid "Ignored: %s\n"
+msgstr ""
+
+#, python-format
+msgid "ignoring untrusted configuration option %s.%s = %s\n"
+msgstr ""
+
+#, fuzzy, python-format
+msgid "%s.%s not a boolean ('%s')"
+msgstr "η αλλαγή %s δεν είναι γονική αλλαγή της %s"
+
+msgid "enter a commit username:"
+msgstr ""
+
+#, python-format
+msgid "No username found, using '%s' instead\n"
+msgstr ""
+
+msgid "Please specify a username."
+msgstr ""
+
+#, python-format
+msgid "username %s contains a newline\n"
+msgstr ""
+
+msgid "unrecognized response\n"
+msgstr ""
+
+msgid "response expected"
+msgstr ""
+
+msgid "password: "
+msgstr "κωδικός: "
+
+msgid "edit failed"
+msgstr "η επεξεργασία απέτυχε"
+
+msgid "http authorization required"
+msgstr ""
+
+msgid "http authorization required\n"
+msgstr ""
+
+#, python-format
+msgid "realm: %s\n"
+msgstr ""
+
+#, python-format
+msgid "user: %s\n"
+msgstr ""
+
+msgid "user:"
+msgstr ""
+
+#, python-format
+msgid "http auth: user %s, password %s\n"
+msgstr ""
+
+#, python-format
+msgid "proxying through http://%s:%s\n"
+msgstr ""
+
+#, python-format
+msgid "command '%s' failed: %s"
+msgstr ""
+
+#, python-format
+msgid "path contains illegal component: %s"
+msgstr ""
+
+#, python-format
+msgid "path %r is inside repo %r"
+msgstr ""
+
+#, python-format
+msgid "path %r traverses symbolic link %r"
+msgstr ""
+
+msgid "Hardlinks not supported"
+msgstr ""
+
+#, python-format
+msgid "could not symlink to %r: %s"
+msgstr ""
+
+#, python-format
+msgid "invalid date: %r "
+msgstr ""
+
+#, python-format
+msgid "date exceeds 32 bits: %d"
+msgstr ""
+
+#, python-format
+msgid "impossible time zone offset: %d"
+msgstr ""
+
+#, python-format
+msgid "invalid day spec: %s"
+msgstr ""
+
+#, python-format
+msgid "%.0f GB"
+msgstr "%.0f GB"
+
+#, python-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
+#, python-format
+msgid "%.2f GB"
+msgstr "%.2f GB"
+
+#, python-format
+msgid "%.0f MB"
+msgstr "%.0f MB"
+
+#, python-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#, python-format
+msgid "%.2f MB"
+msgstr "%.2f MB"
+
+#, python-format
+msgid "%.0f KB"
+msgstr "%.0f KB"
+
+#, python-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#, python-format
+msgid "%.2f KB"
+msgstr "%.2f KB"
+
+#, python-format
+msgid "%.0f bytes"
+msgstr "%.0f bytes"
+
+msgid "cannot verify bundle or remote repos"
+msgstr ""
+
+msgid "interrupted"
+msgstr ""
+
+#, python-format
+msgid "empty or missing %s"
+msgstr "κενό ή μη υπαρκτό %s"
+
+#, python-format
+msgid "data length off by %d bytes"
+msgstr "το μέγεθος των δεδομένων διαφέρει κατά %d bytes"
+
+#, python-format
+msgid "index contains %d extra bytes"
+msgstr ""
+
+#, python-format
+msgid "warning: `%s' uses revlog format 1"
+msgstr "προειδοποίηση: το '%s' χρησιμοποιεί revlog έκδοσης 1"
+
+#, python-format
+msgid "warning: `%s' uses revlog format 0"
+msgstr "προειδοποίηση: το '%s' χρησιμοποιεί revlog έκδοσης 0"
+
+#, fuzzy, python-format
+msgid "rev %d points to nonexistent changeset %d"
+msgstr "η έκδοση %d αναφέρεται στο %s της αλλαγής %d"
+
+#, fuzzy, python-format
+msgid "rev %d points to unexpected changeset %d"
+msgstr "η έκδοση %d αναφέρεται στο %s της αλλαγής %d"
+
+#, python-format
+msgid " (expected %s)"
+msgstr " (αναμενόταν %s)"
+
+#, python-format
+msgid "unknown parent 1 %s of %s"
+msgstr ""
+
+#, python-format
+msgid "unknown parent 2 %s of %s"
+msgstr ""
+
+#, python-format
+msgid "checking parents of %s"
+msgstr ""
+
+#, python-format
+msgid "duplicate revision %d (%d)"
+msgstr "διπλή έκδοση %d (%d)"
+
+#, python-format
+msgid "repository uses revlog format %d\n"
+msgstr "το αποθετήριο χρησιμοποιεί τη μορφή revlog %d\n"
+
+msgid "checking changesets\n"
+msgstr "έλεγχος αλλαγών\n"
+
+#, python-format
+msgid "unpacking changeset %s"
+msgstr "εξαγωγή αλλαγής %s"
+
+msgid "checking manifests\n"
+msgstr "έλεγχος manifests\n"
+
+#, fuzzy, python-format
+msgid "%s not in changesets"
+msgstr "το %s δεν υπάρχει στα manifests"
+
+msgid "file without name in manifest"
+msgstr "αρχείο χωρίς όνομα στο manifest"
+
+#, python-format
+msgid "reading manifest delta %s"
+msgstr "ανάγνωση αλλαγής manifest %s"
+
+msgid "crosschecking files in changesets and manifests\n"
+msgstr "διασταύρωση αρχείων στις αλλαγές και τα manifests\n"
+
+#, python-format
+msgid "changeset refers to unknown manifest %s"
+msgstr "η αλλαγή αναφέρεται σε άγνωστο manifest %s"
+
+msgid "in changeset but not in manifest"
+msgstr "υπάρχει στην αλλαγή αλλά όχι στο manifest"
+
+msgid "in manifest but not in changeset"
+msgstr "υπάρχει στο manifest αλλά όχι στην αλλαγή"
+
+msgid "checking files\n"
+msgstr "έλεγχος αρχείων\n"
+
+#, python-format
+msgid "cannot decode filename '%s'"
+msgstr "δε μπορεί να αποκωδικοποιηθεί το όνομα αρχείου '%s'"
+
+#, python-format
+msgid "broken revlog! (%s)"
+msgstr "μη έγκυρο revlog! (%s)"
+
+msgid "missing revlog!"
+msgstr "δεν υπάρχει αυτό το revlog!"
+
+#, python-format
+msgid "%s not in manifests"
+msgstr "το %s δεν υπάρχει στα manifests"
+
+#, python-format
+msgid "unpacked size is %s, %s expected"
+msgstr "μέγεθος εξαγόμενων δεδομένων %s, αναμενόταν %s"
+
+#, python-format
+msgid "unpacking %s"
+msgstr "εξαγωγή του %s"
+
+#, python-format
+msgid "empty or missing copy source revlog %s:%s"
+msgstr "κενό ή μη έγκυρο revlog προέλευσης %s:%s"
+
+#, python-format
+msgid "warning: %s@%s: copy source revision is nullid %s:%s"
+msgstr ""
+"προειδοποίηση: %s@%s: η έκδοση προέλευσης της αντιγραφής αρχείου είναι το "
+"nullid %s:%s"
+
+#, python-format
+msgid "checking rename of %s"
+msgstr "έλεγχος μετονομασίας του %s"
+
+#, python-format
+msgid "%s in manifests not found"
+msgstr ""
+
+#, python-format
+msgid "warning: orphan revlog '%s'"
+msgstr "προειδοποίηση: ορφανό revlog '%s'"
+
+#, python-format
+msgid "%d files, %d changesets, %d total revisions\n"
+msgstr "%d αρχεία, %d αλλαγές, %d εκδόσεις αρχείων\n"
+
+#, python-format
+msgid "%d warnings encountered!\n"
+msgstr "%d ειδοποιήσεις λάθους!\n"
+
+#, python-format
+msgid "%d integrity errors encountered!\n"
+msgstr "βρέθηκαν %d λάθη!\n"
+
+#, python-format
+msgid "(first damaged changeset appears to be %d)\n"
+msgstr "(η πρώτη προβληματική αλλαγή φαίνεται να είναι η %d)\n"
+
+msgid "user name not available - set USERNAME environment variable"
+msgstr ""
+
+#~ msgid "return tuple of (match function, list enabled)."
+#~ msgstr "επιστρέφει ένα tuple (match function, list enabled)."
+
+#~ msgid ""
+#~ "allow user-defined command aliases\n"
+#~ "\n"
+#~ "To use, create entries in your hgrc of the form\n"
+#~ "\n"
+#~ "[alias]\n"
+#~ "mycmd = cmd --args\n"
+#~ msgstr ""
+#~ "ορισμός προσαρμοσμένων εντολών\n"
+#~ "\n"
+#~ "Για να ορίσετε δικές σας εντολές, προσθέστε στο αρχείο hgrc ένα τμήμα\n"
+#~ "σαν το παρακάτω\n"
+#~ "\n"
+#~ "[alias]\n"
+#~ "mycmd = cmd --args\n"
+
+#~ msgid ""
+#~ "defer command lookup until needed, so that extensions loaded\n"
+#~ "    after alias can be aliased"
+#~ msgstr ""
+#~ "καθυστέρηση ελέγχου εντολών μέχρι να έχουν φορτωθεί όλες οι\n"
+#~ "    επεκτάσεις και να ορισθούν όλα τα aliases"
+
+#~ msgid "*** [alias] %s: command %s is unknown"
+#~ msgstr "*** [alias] %s: η εντολή %s είναι άγνωστη"
+
+#~ msgid "*** [alias] %s: command %s is ambiguous"
+#~ msgstr "*** [alias] %s: η εντολή %s είναι ασαφής"
+
+#~ msgid "*** [alias] %s: circular dependency on %s"
+#~ msgstr "*** [alias] %s: κυκλική εξάρτηση από την εντολή %s"
+
+#~ msgid "*** [alias] %s: no definition\n"
+#~ msgstr "*** [alias] %s: δεν υπάρχει ορισμός\n"
+
+#~ msgid ""
+#~ "Strip bookmarks if revisions are stripped using\n"
+#~ "    the mercurial.strip method. This usually happens during\n"
+#~ "    qpush and qpop"
+#~ msgstr ""
+#~ "Αφαίρεση των σελιδοδεικτών όταν αφαιρούνται κάποιες\n"
+#~ "    αλλαγές από το αποθετήριο με τη μέθοδο mercurial.strip.\n"
+#~ "    Αυτό γίνεται συνήθως με τις εντολές qpush και qpop"
+
+#~ msgid ""
+#~ "Add a revision to the repository and\n"
+#~ "            move the bookmark"
+#~ msgstr ""
+#~ "Προσθήκη μιας αλλαγής στο αποθετήριο και\n"
+#~ "            μετακίνηση του σελιδοδείκτη"
+
+#~ msgid "Merge bookmarks with normal tags"
+#~ msgstr "Συγχώνευση σελιδοδεικτών με τα κανονικά tags"
+
+#~ msgid ""
+#~ "Set the current bookmark\n"
+#~ "\n"
+#~ "    If the user updates to a bookmark we update the .hg/bookmarks."
+#~ "current\n"
+#~ "    file.\n"
+#~ "    "
+#~ msgstr ""
+#~ "Ορισμός ενεργού σελιδοδείκτη\n"
+#~ "\n"
+#~ "    Αυτόματη ενημέρωση του .hg/bookmarks.current κάθε φορά που ο χρήστης\n"
+#~ "    εξάγει τα αρχεία με βάση ένα σελιδοδείκτη.\n"
+#~ "    "
+
+#~ msgid "support for bugzilla version 2.16."
+#~ msgstr "υποστήριξη για το buzgilla 2.16."
+
+#~ msgid "run a query."
+#~ msgstr "εκτέλεση μιας αίτησης."
+
+#~ msgid "look up numeric bugzilla user id."
+#~ msgstr "αναζήτηση χρήστη με βάση τον αριθμό id του."
+
+#~ msgid "map name of committer to bugzilla user name."
+#~ msgstr ""
+#~ "αντιστοίχηση ονόματος συγγραφέα αλλαγών με όνομα χρήστη στο bugzilla."
+
+#~ msgid "support for bugzilla 2.18 series."
+#~ msgstr "υποστήριξη για τη σειρά bugzilla 2.18."
+
+#~ msgid "support for bugzilla 3.0 series."
+#~ msgstr "υποστήριξη για τη σειρά bugzilla 3.0."
+
+#~ msgid "unable to open %s: %s"
+#~ msgstr ""
+
+#~ msgid "%s, please check your locale settings"
+#~ msgstr ""
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/i18n/fr.po	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,9090 @@
+# French translations for Mercurial
+# Traductions françaises de Mercurial
+# Copyright (C) 2009 Matt Mackall <mpm@selenic.com> and others
+#
+# Quelques règles :
+# - dans l'aide d'une commande, la première ligne descriptive
+#   commence par un verbe au présent sans majuscule
+# - dans l'aide d'une commande, la description des options
+#   utilise un verbe à l'infinitif
+#
+# Note : la terminologie ci-dessous est loin d'être complète, figée ou
+#        parfaite. À compléter et à améliorer, particulièrement les
+#        termes comportant un point d'interrogation...
+#
+# Dictionnaire de termes courants :
+#  - to  apply a patch        appliquer un patch
+#  - a   branch               une branche
+#  - to  check out            extraire (terminologie utilisée par svn)
+#  -     children             des rejetons ? des descendants ?
+#  - to  clone                clôner
+#  - a   conflict             un conflit
+#  - an  extension            une extension (au sens de module Mercurial)
+#  - to  fold patches         agréger des patchs (replier des patch ?? bof)
+#  - an  integrity check      une vérification d'intégrité (ou de cohérence ?)
+#  - a   mail                 un courriel, un courrier électronique
+#  - a   merge                une fusion
+#  - to  merge                fusionner
+#  - a   node                 un nœud ?
+#  - a   patch queue/stack    une pile de patchs (mq)
+#                             - à l'utilisation c'est vraiment une _pile_
+#                               (on y empile et dépile des patchs)
+#                             - l'unique cas où _file_ conviendrait est dans le
+#                               contexte de la commande qfinish
+#                             => terme unique de pile pour plus de cohérence
+#  - the patch series         la série (complète) de patchs (suite ?)
+#  -     rejects              des rejets ? (à propos de l'application d'un
+#                             patch)
+#  - a   repository           un dépôt
+#  - to  revert               annuler des modifications (ou défaire ?)
+#  - a   revision             une révision
+#  - the topmost patch        le dernier patch appliqué
+#  - a   tree                 une arborescence
+#  - an  unrelated repository un dépôt non apparenté
+#  -     unversioned
+#        unmanaged
+#        untracked            non suivi, non géré, pas sous contrôle du dépôt,
+#                             hors révision ?
+#  - the working directory    le répertoire de travail
+#
+# Termes très courants repris de l'anglais - à utiliser sans guillemets
+# pour ne pas alourdir inutilement la traduction :
+#  - a   diff                 un diff ? (ou également un patch ? synonymes...)
+#  - a   hook                 un hook
+#  - a   patch                un patch
+#  - a   tag                  un tag
+#  - to  tag                  taguer
+#
+# Termes anglais avec une signification très spécifique, difficile à
+# paraphraser sans alourdir ou perdre le sens - à utiliser avec guillemets :
+#  - a   bundle               un \"bundle\"
+#  - to  bundle               créer un \"bundle\" ?
+#  - a   changeset            un \"changeset\"
+#  - a   changegroup          un \"changegroup\"
+#  - the tip                  la révision \"tip\"
+#
+# Termes dont le classement / la traduction sont à déterminer :
+#  - a   commit               un commit, un \"commit\"
+#  - to  commit               \"committer\" ? (beuark, même dit tous les jours)
+#  - a   guard                une \"garde\" ? (une protection ?)
+#  - to  guard a patch        \"garder\" un patch ?
+#  - to  pull                 rapatrier des \"changesets\" ? effectuer une
+#                             opération de \"pull\" ? \"puller\" ?? (argh !)
+#  - to  push                 propager ? (utilisé par svn pour commit)
+#                             publier ? pousser ?? envoyer ??
+#  - the series file (mq)     ?
+#
+# Notes :
+#  - (cédric) je verrais bien l'ajout d'une rubrique générale dans l'aide
+#    (par exemple 'hg help glossary') librement remplissable par chaque équipe
+#    de traduction, qui introduirait succintement à l'utilisateur les termes
+#    qui vont être rencontrés dans mercurial - et en particulier permettrait
+#    de faire le lien avec des termes franglisants parfois utilisés
+#    (par ex. fusionner = "merger", etc.) ... ?
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Mercurial\n"
+"Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n"
+"POT-Creation-Date: 2009-07-01 08:41+0200\n"
+"PO-Revision-Date: 2009-05-14 13:06+0200\n"
+"Last-Translator: Cedric Duval <cedricduval@free.fr>\n"
+"Language-Team: French\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#, python-format
+msgid " (default: %s)"
+msgstr " (défaut: %s)"
+
+msgid "OPTIONS"
+msgstr ""
+
+msgid "COMMANDS"
+msgstr ""
+
+msgid "    options:\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"    aliases: %s\n"
+"\n"
+msgstr ""
+
+msgid ""
+"hooks for controlling repository access\n"
+"\n"
+"This hook makes it possible to allow or deny write access to portions\n"
+"of a repository when receiving incoming changesets.\n"
+"\n"
+"The authorization is matched based on the local user name on the\n"
+"system where the hook runs, and not the committer of the original\n"
+"changeset (since the latter is merely informative).\n"
+"\n"
+"The acl hook is best used along with a restricted shell like hgsh,\n"
+"preventing authenticating users from doing anything other than\n"
+"pushing or pulling. The hook is not safe to use if users have\n"
+"interactive shell access, as they can then disable the hook.\n"
+"Nor is it safe if remote users share an account, because then there\n"
+"is no way to distinguish them.\n"
+"\n"
+"To use this hook, configure the acl extension in your hgrc like this:\n"
+"\n"
+"  [extensions]\n"
+"  hgext.acl =\n"
+"\n"
+"  [hooks]\n"
+"  pretxnchangegroup.acl = python:hgext.acl.hook\n"
+"\n"
+"  [acl]\n"
+"  # Check whether the source of incoming changes is in this list\n"
+"  # (\"serve\" == ssh or http, \"push\", \"pull\", \"bundle\")\n"
+"  sources = serve\n"
+"\n"
+"The allow and deny sections take a subtree pattern as key (with a\n"
+"glob syntax by default), and a comma separated list of users as\n"
+"the corresponding value. The deny list is checked before the allow\n"
+"list is.\n"
+"\n"
+"  [acl.allow]\n"
+"  # If acl.allow is not present, all users are allowed by default.\n"
+"  # An empty acl.allow section means no users allowed.\n"
+"  docs/** = doc_writer\n"
+"  .hgtags = release_engineer\n"
+"\n"
+"  [acl.deny]\n"
+"  # If acl.deny is not present, no users are refused by default.\n"
+"  # An empty acl.deny section means all users allowed.\n"
+"  glob pattern = user4, user5\n"
+"   ** = user6\n"
+msgstr ""
+
+#, python-format
+msgid "acl: %s not enabled\n"
+msgstr ""
+
+#, python-format
+msgid "acl: %s enabled, %d entries for user %s\n"
+msgstr ""
+
+#, python-format
+msgid "config error - hook type \"%s\" cannot stop incoming changesets"
+msgstr ""
+
+#, python-format
+msgid "acl: changes have source \"%s\" - skipping\n"
+msgstr ""
+
+#, python-format
+msgid "acl: user %s denied on %s\n"
+msgstr ""
+
+#, python-format
+msgid "acl: access denied for changeset %s"
+msgstr ""
+
+#, python-format
+msgid "acl: user %s not allowed on %s\n"
+msgstr ""
+
+#, python-format
+msgid "acl: allowing changeset %s\n"
+msgstr ""
+
+msgid ""
+"track a line of development with movable markers\n"
+"\n"
+"Bookmarks are local movable markers to changesets. Every bookmark\n"
+"points to a changeset identified by its hash. If you commit a\n"
+"changeset that is based on a changeset that has a bookmark on it,\n"
+"the bookmark shifts to the new changeset.\n"
+"\n"
+"It is possible to use bookmark names in every revision lookup\n"
+"(e.g. hg merge, hg update).\n"
+"\n"
+"By default, when several bookmarks point to the same changeset, they\n"
+"will all move forward together. It is possible to obtain a more\n"
+"git-like experience by adding the following configuration option to\n"
+"your .hgrc:\n"
+"\n"
+"  [bookmarks]\n"
+"  track.current = True\n"
+"\n"
+"This will cause Mercurial to track the bookmark that you are currently\n"
+"using, and only update it. This is similar to git's approach to\n"
+"branching.\n"
+msgstr ""
+
+msgid ""
+"track a line of development with movable markers\n"
+"\n"
+"    Bookmarks are pointers to certain commits that move when\n"
+"    committing. Bookmarks are local. They can be renamed, copied and\n"
+"    deleted. It is possible to use bookmark names in 'hg merge' and\n"
+"    'hg update' to merge and update respectively to a given bookmark.\n"
+"\n"
+"    You can use 'hg bookmark NAME' to set a bookmark on the working\n"
+"    directory's parent revision with the given name. If you specify\n"
+"    a revision using -r REV (where REV may be an existing bookmark),\n"
+"    the bookmark is assigned to that revision.\n"
+"    "
+msgstr ""
+
+msgid "a bookmark of this name does not exist"
+msgstr ""
+
+msgid "a bookmark of the same name already exists"
+msgstr ""
+
+msgid "new bookmark name required"
+msgstr ""
+
+msgid "bookmark name required"
+msgstr ""
+
+msgid "bookmark name cannot contain newlines"
+msgstr ""
+
+msgid "a bookmark cannot have the name of an existing branch"
+msgstr ""
+
+msgid "force"
+msgstr ""
+
+msgid "revision"
+msgstr ""
+
+msgid "delete a given bookmark"
+msgstr ""
+
+msgid "rename a given bookmark"
+msgstr ""
+
+msgid "hg bookmarks [-f] [-d] [-m NAME] [-r REV] [NAME]"
+msgstr ""
+
+msgid ""
+"hooks for integrating with the Bugzilla bug tracker\n"
+"\n"
+"This hook extension adds comments on bugs in Bugzilla when changesets\n"
+"that refer to bugs by Bugzilla ID are seen. The hook does not change\n"
+"bug status.\n"
+"\n"
+"The hook updates the Bugzilla database directly. Only Bugzilla\n"
+"installations using MySQL are supported.\n"
+"\n"
+"The hook relies on a Bugzilla script to send bug change notification\n"
+"emails. That script changes between Bugzilla versions; the\n"
+"'processmail' script used prior to 2.18 is replaced in 2.18 and\n"
+"subsequent versions by 'config/sendbugmail.pl'. Note that these will\n"
+"be run by Mercurial as the user pushing the change; you will need to\n"
+"ensure the Bugzilla install file permissions are set appropriately.\n"
+"\n"
+"Configuring the extension:\n"
+"\n"
+"    [bugzilla]\n"
+"\n"
+"    host       Hostname of the MySQL server holding the Bugzilla\n"
+"               database.\n"
+"    db         Name of the Bugzilla database in MySQL. Default 'bugs'.\n"
+"    user       Username to use to access MySQL server. Default 'bugs'.\n"
+"    password   Password to use to access MySQL server.\n"
+"    timeout    Database connection timeout (seconds). Default 5.\n"
+"    version    Bugzilla version. Specify '3.0' for Bugzilla versions\n"
+"               3.0 and later, '2.18' for Bugzilla versions from 2.18\n"
+"               and '2.16' for versions prior to 2.18.\n"
+"    bzuser     Fallback Bugzilla user name to record comments with, if\n"
+"               changeset committer cannot be found as a Bugzilla user.\n"
+"    bzdir      Bugzilla install directory. Used by default notify.\n"
+"               Default '/var/www/html/bugzilla'.\n"
+"    notify     The command to run to get Bugzilla to send bug change\n"
+"               notification emails. Substitutes from a map with 3\n"
+"               keys, 'bzdir', 'id' (bug id) and 'user' (committer\n"
+"               bugzilla email). Default depends on version; from 2.18\n"
+"               it is \"cd %(bzdir)s && perl -T contrib/sendbugmail.pl\n"
+"               %(id)s %(user)s\".\n"
+"    regexp     Regular expression to match bug IDs in changeset commit\n"
+"               message. Must contain one \"()\" group. The default\n"
+"               expression matches 'Bug 1234', 'Bug no. 1234', 'Bug\n"
+"               number 1234', 'Bugs 1234,5678', 'Bug 1234 and 5678' and\n"
+"               variations thereof. Matching is case insensitive.\n"
+"    style      The style file to use when formatting comments.\n"
+"    template   Template to use when formatting comments. Overrides\n"
+"               style if specified. In addition to the usual Mercurial\n"
+"               keywords, the extension specifies:\n"
+"                   {bug}       The Bugzilla bug ID.\n"
+"                   {root}      The full pathname of the Mercurial\n"
+"                               repository.\n"
+"                   {webroot}   Stripped pathname of the Mercurial\n"
+"                               repository.\n"
+"                   {hgweb}     Base URL for browsing Mercurial\n"
+"                               repositories.\n"
+"               Default 'changeset {node|short} in repo {root} refers '\n"
+"                       'to bug {bug}.\\ndetails:\\n\\t{desc|tabindent}'\n"
+"    strip      The number of slashes to strip from the front of {root}\n"
+"               to produce {webroot}. Default 0.\n"
+"    usermap    Path of file containing Mercurial committer ID to\n"
+"               Bugzilla user ID mappings. If specified, the file\n"
+"               should contain one mapping per line,\n"
+"               \"committer\"=\"Bugzilla user\". See also the [usermap]\n"
+"               section.\n"
+"\n"
+"    [usermap]\n"
+"    Any entries in this section specify mappings of Mercurial\n"
+"    committer ID to Bugzilla user ID. See also [bugzilla].usermap.\n"
+"    \"committer\"=\"Bugzilla user\"\n"
+"\n"
+"    [web]\n"
+"    baseurl    Base URL for browsing Mercurial repositories. Reference\n"
+"               from templates as {hgweb}.\n"
+"\n"
+"Activating the extension:\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"
+"Example configuration:\n"
+"\n"
+"This example configuration is for a collection of Mercurial\n"
+"repositories in /var/local/hg/repos/ used with a local Bugzilla 3.2\n"
+"installation in /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=Changeset {node|short} in {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"
+"Commits add a comment to the Bugzilla bug record of the form:\n"
+"\n"
+"    Changeset 3b16791d6642 in repository-name.\n"
+"    http://dev.domain.com/hg/repository-name/rev/3b16791d6642\n"
+"\n"
+"    Changeset commit comment. Bug 1234.\n"
+msgstr ""
+
+#, python-format
+msgid "connecting to %s:%s as %s, password %s\n"
+msgstr ""
+
+#, python-format
+msgid "query: %s %s\n"
+msgstr ""
+
+#, python-format
+msgid "failed query: %s %s\n"
+msgstr ""
+
+msgid "unknown database schema"
+msgstr ""
+
+#, python-format
+msgid "bug %d already knows about changeset %s\n"
+msgstr ""
+
+msgid "telling bugzilla to send mail:\n"
+msgstr ""
+
+#, python-format
+msgid "  bug %s\n"
+msgstr ""
+
+#, python-format
+msgid "running notify command %s\n"
+msgstr ""
+
+#, python-format
+msgid "bugzilla notify command %s"
+msgstr ""
+
+msgid "done\n"
+msgstr "effectué\n"
+
+#, python-format
+msgid "looking up user %s\n"
+msgstr ""
+
+#, python-format
+msgid "cannot find bugzilla user id for %s"
+msgstr ""
+
+#, python-format
+msgid "cannot find bugzilla user id for %s or %s"
+msgstr ""
+
+#, python-format
+msgid "bugzilla version %s not supported"
+msgstr ""
+
+msgid ""
+"changeset {node|short} in repo {root} refers to bug {bug}.\n"
+"details:\n"
+"\t{desc|tabindent}"
+msgstr ""
+
+#, python-format
+msgid "python mysql support not available: %s"
+msgstr ""
+
+#, python-format
+msgid "hook type %s does not pass a changeset id"
+msgstr ""
+
+#, python-format
+msgid "database error: %s"
+msgstr ""
+
+msgid "command to display child changesets"
+msgstr ""
+
+msgid ""
+"show the children of the given or working directory revision\n"
+"\n"
+"    Print the children of the working directory's revisions. If a\n"
+"    revision is given via -r/--rev, the children of that revision will\n"
+"    be printed. If a file argument is given, revision in which the\n"
+"    file was last changed (after the working directory revision or the\n"
+"    argument to --rev if given) is printed.\n"
+"    "
+msgstr ""
+
+msgid "show children of the specified revision"
+msgstr ""
+
+msgid "hg children [-r REV] [FILE]"
+msgstr ""
+
+msgid "command to display statistics about repository history"
+msgstr ""
+
+#, python-format
+msgid "Revision %d is a merge, ignoring...\n"
+msgstr ""
+
+#, python-format
+msgid "generating stats: %d%%"
+msgstr ""
+
+msgid ""
+"histogram of changes to the repository\n"
+"\n"
+"    This command will display a histogram representing the number\n"
+"    of changed lines or revisions, grouped according to the given\n"
+"    template. The default template will group changes by author.\n"
+"    The --dateformat option may be used to group the results by\n"
+"    date instead.\n"
+"\n"
+"    Statistics are based on the number of changed lines, or\n"
+"    alternatively the number of matching revisions if the\n"
+"    --changesets option is specified.\n"
+"\n"
+"    Examples:\n"
+"\n"
+"      # display count of changed lines for every committer\n"
+"      hg churn -t '{author|email}'\n"
+"\n"
+"      # display daily activity graph\n"
+"      hg churn -f '%H' -s -c\n"
+"\n"
+"      # display activity of developers by month\n"
+"      hg churn -f '%Y-%m' -s -c\n"
+"\n"
+"      # display count of lines changed in every year\n"
+"      hg churn -f '%Y' -s\n"
+"\n"
+"    It is possible to map alternate email addresses to a main address\n"
+"    by providing a file using the following format:\n"
+"\n"
+"    <alias email> <actual email>\n"
+"\n"
+"    Such a file may be specified with the --aliases option, otherwise a\n"
+"    .hgchurn file will be looked for in the working directory root.\n"
+"    "
+msgstr ""
+
+#, python-format
+msgid "assuming %i character terminal\n"
+msgstr ""
+
+msgid "count rate for the specified revision or range"
+msgstr ""
+
+msgid "count rate for revisions matching date spec"
+msgstr ""
+
+msgid "template to group changesets"
+msgstr ""
+
+msgid "strftime-compatible format for grouping by date"
+msgstr ""
+
+msgid "count rate by number of changesets"
+msgstr ""
+
+msgid "sort by key (default: sort by count)"
+msgstr ""
+
+msgid "file with email aliases"
+msgstr ""
+
+msgid "show progress"
+msgstr ""
+
+msgid "hg churn [-d DATE] [-r REV] [--aliases FILE] [--progress] [FILE]"
+msgstr ""
+
+msgid ""
+"colorize output from some commands\n"
+"\n"
+"This extension modifies the status command to add color to its output\n"
+"to reflect file status, the qseries command to add color to reflect\n"
+"patch status (applied, unapplied, missing), and to diff-related\n"
+"commands to highlight additions, removals, diff headers, and trailing\n"
+"whitespace.\n"
+"\n"
+"Other effects in addition to color, like bold and underlined text, are\n"
+"also available. Effects are rendered with the ECMA-48 SGR control\n"
+"function (aka ANSI escape codes). This module also provides the\n"
+"render_text function, which can be used to add effects to any text.\n"
+"\n"
+"Default effects may be overridden from the .hgrc file:\n"
+"\n"
+"[color]\n"
+"status.modified = blue bold underline red_background\n"
+"status.added = green bold\n"
+"status.removed = red bold blue_background\n"
+"status.deleted = cyan bold underline\n"
+"status.unknown = magenta bold underline\n"
+"status.ignored = black bold\n"
+"\n"
+"# 'none' turns off all effects\n"
+"status.clean = none\n"
+"status.copied = none\n"
+"\n"
+"qseries.applied = blue bold underline\n"
+"qseries.unapplied = black bold\n"
+"qseries.missing = red bold\n"
+"\n"
+"diff.diffline = bold\n"
+"diff.extended = cyan bold\n"
+"diff.file_a = red bold\n"
+"diff.file_b = green bold\n"
+"diff.hunk = magenta\n"
+"diff.deleted = red\n"
+"diff.inserted = green\n"
+"diff.changed = white\n"
+"diff.trailingwhitespace = bold red_background\n"
+msgstr ""
+
+msgid "when to colorize (always, auto, or never)"
+msgstr ""
+
+msgid "don't colorize output"
+msgstr ""
+
+#, python-format
+msgid "ignoring unknown color/effect %r (configured in color.%s)\n"
+msgstr ""
+
+msgid "import revisions from foreign VCS repositories into Mercurial"
+msgstr ""
+
+msgid ""
+"convert a foreign SCM repository to a Mercurial one.\n"
+"\n"
+"    Accepted source formats [identifiers]:\n"
+"    - Mercurial [hg]\n"
+"    - CVS [cvs]\n"
+"    - Darcs [darcs]\n"
+"    - git [git]\n"
+"    - Subversion [svn]\n"
+"    - Monotone [mtn]\n"
+"    - GNU Arch [gnuarch]\n"
+"    - Bazaar [bzr]\n"
+"    - Perforce [p4]\n"
+"\n"
+"    Accepted destination formats [identifiers]:\n"
+"    - Mercurial [hg]\n"
+"    - Subversion [svn] (history on branches is not preserved)\n"
+"\n"
+"    If no revision is given, all revisions will be converted.\n"
+"    Otherwise, convert will only import up to the named revision\n"
+"    (given in a format understood by the source).\n"
+"\n"
+"    If no destination directory name is specified, it defaults to the\n"
+"    basename of the source with '-hg' appended. If the destination\n"
+"    repository doesn't exist, it will be created.\n"
+"\n"
+"    By default, all sources except Mercurial will use\n"
+"    --branchsort. Mercurial uses --sourcesort to preserve original\n"
+"    revision numbers order. Sort modes have the following effects:\n"
+"      --branchsort: convert from parent to child revision when\n"
+"        possible, which means branches are usually converted one after\n"
+"        the other. It generates more compact repositories.\n"
+"      --datesort: sort revisions by date. Converted repositories have\n"
+"        good-looking changelogs but are often an order of magnitude\n"
+"        larger than the same ones generated by --branchsort.\n"
+"      --sourcesort: try to preserve source revisions order, only\n"
+"        supported by Mercurial sources.\n"
+"\n"
+"    If <REVMAP> isn't given, it will be put in a default location\n"
+"    (<dest>/.hg/shamap by default). The <REVMAP> is a simple text file\n"
+"    that maps each source commit ID to the destination ID for that\n"
+"    revision, like so:\n"
+"    <source ID> <destination ID>\n"
+"\n"
+"    If the file doesn't exist, it's automatically created. It's\n"
+"    updated on each commit copied, so convert-repo can be interrupted\n"
+"    and can be run repeatedly to copy new commits.\n"
+"\n"
+"    The [username mapping] file is a simple text file that maps each\n"
+"    source commit author to a destination commit author. It is handy\n"
+"    for source SCMs that use unix logins to identify authors (eg:\n"
+"    CVS). One line per author mapping and the line format is:\n"
+"    srcauthor=whatever string you want\n"
+"\n"
+"    The filemap is a file that allows filtering and remapping of files\n"
+"    and directories. Comment lines start with '#'. Each line can\n"
+"    contain one of the following directives:\n"
+"\n"
+"      include path/to/file\n"
+"\n"
+"      exclude path/to/file\n"
+"\n"
+"      rename from/file to/file\n"
+"\n"
+"    The 'include' directive causes a file, or all files under a\n"
+"    directory, to be included in the destination repository, and the\n"
+"    exclusion of all other files and directories not explicitly included.\n"
+"    The 'exclude' directive causes files or directories to be omitted.\n"
+"    The 'rename' directive renames a file or directory. To rename from\n"
+"    a subdirectory into the root of the repository, use '.' as the\n"
+"    path to rename to.\n"
+"\n"
+"    The splicemap is a file that allows insertion of synthetic\n"
+"    history, letting you specify the parents of a revision. This is\n"
+"    useful if you want to e.g. give a Subversion merge two parents, or\n"
+"    graft two disconnected series of history together. Each entry\n"
+"    contains a key, followed by a space, followed by one or two\n"
+"    comma-separated values. The key is the revision ID in the source\n"
+"    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"
+"\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"
+"    conjunction with a splicemap, it allows for a powerful combination\n"
+"    to help fix even the most badly mismanaged repositories and turn them\n"
+"    into nicely structured Mercurial repositories. The branchmap contains\n"
+"    lines of the form \"original_branch_name new_branch_name\".\n"
+"    \"original_branch_name\" is the name of the branch in the source\n"
+"    repository, and \"new_branch_name\" is the name of the branch is the\n"
+"    destination repository. This can be used to (for instance) move code\n"
+"    in one repository from \"default\" to a named branch.\n"
+"\n"
+"    Mercurial Source\n"
+"    -----------------\n"
+"\n"
+"    --config convert.hg.ignoreerrors=False    (boolean)\n"
+"        ignore integrity errors when reading. Use it to fix Mercurial\n"
+"        repositories with missing revlogs, by converting from and to\n"
+"        Mercurial.\n"
+"    --config convert.hg.saverev=False         (boolean)\n"
+"        store original revision ID in changeset (forces target IDs to\n"
+"        change)\n"
+"    --config convert.hg.startrev=0            (hg revision identifier)\n"
+"        convert start revision and its descendants\n"
+"\n"
+"    CVS Source\n"
+"    ----------\n"
+"\n"
+"    CVS source will use a sandbox (i.e. a checked-out copy) from CVS\n"
+"    to indicate the starting point of what will be converted. Direct\n"
+"    access to the repository files is not needed, unless of course the\n"
+"    repository is :local:. The conversion uses the top level directory\n"
+"    in the sandbox to find the CVS repository, and then uses CVS rlog\n"
+"    commands to find files to convert. This means that unless a\n"
+"    filemap is given, all files under the starting directory will be\n"
+"    converted, and that any directory reorganization in the CVS\n"
+"    sandbox is ignored.\n"
+"\n"
+"    Because CVS does not have changesets, it is necessary to collect\n"
+"    individual commits to CVS and merge them into changesets. CVS\n"
+"    source uses its internal changeset merging code by default but can\n"
+"    be configured to call the external 'cvsps' program by setting:\n"
+"        --config convert.cvsps='cvsps -A -u --cvs-direct -q'\n"
+"    This option is deprecated and will be removed in Mercurial 1.4.\n"
+"\n"
+"    The options shown are the defaults.\n"
+"\n"
+"    Internal cvsps is selected by setting\n"
+"        --config convert.cvsps=builtin\n"
+"    and has a few more configurable options:\n"
+"        --config convert.cvsps.cache=True     (boolean)\n"
+"            Set to False to disable remote log caching, for testing and\n"
+"            debugging purposes.\n"
+"        --config convert.cvsps.fuzz=60        (integer)\n"
+"            Specify the maximum time (in seconds) that is allowed\n"
+"            between commits with identical user and log message in a\n"
+"            single changeset. When very large files were checked in as\n"
+"            part of a changeset then the default may not be long\n"
+"            enough.\n"
+"        --config convert.cvsps.mergeto='{{mergetobranch ([-\\w]+)}}'\n"
+"            Specify a regular expression to which commit log messages\n"
+"            are matched. If a match occurs, then the conversion\n"
+"            process will insert a dummy revision merging the branch on\n"
+"            which this log message occurs to the branch indicated in\n"
+"            the regex.\n"
+"        --config convert.cvsps.mergefrom='{{mergefrombranch ([-\\w]+)}}'\n"
+"            Specify a regular expression to which commit log messages\n"
+"            are matched. If a match occurs, then the conversion\n"
+"            process will add the most recent revision on the branch\n"
+"            indicated in the regex as the second parent of the\n"
+"            changeset.\n"
+"\n"
+"    The hgext/convert/cvsps wrapper script allows the builtin\n"
+"    changeset merging code to be run without doing a conversion. Its\n"
+"    parameters and output are similar to that of cvsps 2.1.\n"
+"\n"
+"    Subversion Source\n"
+"    -----------------\n"
+"\n"
+"    Subversion source detects classical trunk/branches/tags layouts.\n"
+"    By default, the supplied \"svn://repo/path/\" source URL is\n"
+"    converted as a single branch. If \"svn://repo/path/trunk\" exists it\n"
+"    replaces the default branch. If \"svn://repo/path/branches\" exists,\n"
+"    its subdirectories are listed as possible branches. If\n"
+"    \"svn://repo/path/tags\" exists, it is looked for tags referencing\n"
+"    converted branches. Default \"trunk\", \"branches\" and \"tags\" values\n"
+"    can be overridden with following options. Set them to paths\n"
+"    relative to the source URL, or leave them blank to disable auto\n"
+"    detection.\n"
+"\n"
+"    --config convert.svn.branches=branches    (directory name)\n"
+"        specify the directory containing branches\n"
+"    --config convert.svn.tags=tags            (directory name)\n"
+"        specify the directory containing tags\n"
+"    --config convert.svn.trunk=trunk          (directory name)\n"
+"        specify the name of the trunk branch\n"
+"\n"
+"    Source history can be retrieved starting at a specific revision,\n"
+"    instead of being integrally converted. Only single branch\n"
+"    conversions are supported.\n"
+"\n"
+"    --config convert.svn.startrev=0           (svn revision number)\n"
+"        specify start Subversion revision.\n"
+"\n"
+"    Perforce Source\n"
+"    ---------------\n"
+"\n"
+"    The Perforce (P4) importer can be given a p4 depot path or a\n"
+"    client specification as source. It will convert all files in the\n"
+"    source to a flat Mercurial repository, ignoring labels, branches\n"
+"    and integrations. Note that when a depot path is given you then\n"
+"    usually should specify a target directory, because otherwise the\n"
+"    target may be named ...-hg.\n"
+"\n"
+"    It is possible to limit the amount of source history to be\n"
+"    converted by specifying an initial Perforce revision.\n"
+"\n"
+"    --config convert.p4.startrev=0            (perforce changelist number)\n"
+"        specify initial Perforce revision.\n"
+"\n"
+"\n"
+"    Mercurial Destination\n"
+"    ---------------------\n"
+"\n"
+"    --config convert.hg.clonebranches=False   (boolean)\n"
+"        dispatch source branches in separate clones.\n"
+"    --config convert.hg.tagsbranch=default    (branch name)\n"
+"        tag revisions branch name\n"
+"    --config convert.hg.usebranchnames=True   (boolean)\n"
+"        preserve branch names\n"
+"\n"
+"    "
+msgstr ""
+
+msgid ""
+"create changeset information from CVS\n"
+"\n"
+"    This command is intended as a debugging tool for the CVS to\n"
+"    Mercurial converter, and can be used as a direct replacement for\n"
+"    cvsps.\n"
+"\n"
+"    Hg debugcvsps reads the CVS rlog for current directory (or any\n"
+"    named directory) in the CVS repository, and converts the log to a\n"
+"    series of changesets based on matching commit log entries and\n"
+"    dates."
+msgstr ""
+
+msgid "username mapping filename"
+msgstr ""
+
+msgid "destination repository type"
+msgstr ""
+
+msgid "remap file names using contents of file"
+msgstr ""
+
+msgid "import up to target revision REV"
+msgstr ""
+
+msgid "source repository type"
+msgstr ""
+
+msgid "splice synthesized history into place"
+msgstr ""
+
+msgid "change branch names while converting"
+msgstr ""
+
+msgid "try to sort changesets by branches"
+msgstr ""
+
+msgid "try to sort changesets by date"
+msgstr ""
+
+msgid "preserve source changesets order"
+msgstr ""
+
+msgid "hg convert [OPTION]... SOURCE [DEST [REVMAP]]"
+msgstr ""
+
+msgid "only return changes on specified branches"
+msgstr ""
+
+msgid "prefix to remove from file names"
+msgstr ""
+
+msgid "only return changes after or between specified tags"
+msgstr ""
+
+msgid "update cvs log cache"
+msgstr ""
+
+msgid "create new cvs log cache"
+msgstr ""
+
+msgid "set commit time fuzz in seconds"
+msgstr ""
+
+msgid "specify cvsroot"
+msgstr ""
+
+msgid "show parent changesets"
+msgstr ""
+
+msgid "show current changeset in ancestor branches"
+msgstr ""
+
+msgid "ignored for compatibility"
+msgstr ""
+
+msgid "hg debugcvsps [OPTION]... [PATH]..."
+msgstr ""
+
+msgid ""
+"warning: lightweight checkouts may cause conversion failures, try with a "
+"regular branch instead.\n"
+msgstr ""
+
+msgid "bzr source type could not be determined\n"
+msgstr ""
+
+#, python-format
+msgid "%s is not a valid revision in current branch"
+msgstr ""
+
+#, python-format
+msgid "%s is not available in %s anymore"
+msgstr ""
+
+#, python-format
+msgid "%s.%s symlink has no target"
+msgstr ""
+
+#, python-format
+msgid "cannot find required \"%s\" tool"
+msgstr ""
+
+#, python-format
+msgid "running: %s\n"
+msgstr ""
+
+#, python-format
+msgid "%s error:\n"
+msgstr ""
+
+#, python-format
+msgid "syntax error in %s(%d): key/value pair expected"
+msgstr ""
+
+#, python-format
+msgid "could not open map file %r: %s"
+msgstr ""
+
+#, python-format
+msgid "%s: missing or unsupported repository"
+msgstr ""
+
+#, python-format
+msgid "convert: %s\n"
+msgstr ""
+
+#, python-format
+msgid "%s: unknown repository type"
+msgstr ""
+
+#, python-format
+msgid "unknown sort mode: %s"
+msgstr ""
+
+#, python-format
+msgid "cycle detected between %s and %s"
+msgstr ""
+
+msgid "not all revisions were sorted"
+msgstr ""
+
+#, python-format
+msgid "Writing author map file %s\n"
+msgstr ""
+
+#, python-format
+msgid "Ignoring bad line in author map file %s: %s\n"
+msgstr ""
+
+#, python-format
+msgid "mapping author %s to %s\n"
+msgstr ""
+
+#, python-format
+msgid "overriding mapping for author %s, was %s, will be %s\n"
+msgstr ""
+
+#, python-format
+msgid "spliced in %s as parents of %s\n"
+msgstr ""
+
+msgid "scanning source...\n"
+msgstr ""
+
+msgid "sorting...\n"
+msgstr ""
+
+msgid "converting...\n"
+msgstr ""
+
+#, python-format
+msgid "source: %s\n"
+msgstr ""
+
+#, python-format
+msgid "assuming destination %s\n"
+msgstr ""
+
+msgid "more than one sort mode specified"
+msgstr ""
+
+msgid "--sourcesort is not supported by this data source"
+msgstr ""
+
+msgid ""
+"warning: support for external cvsps is deprecated and will be removed in "
+"Mercurial 1.4\n"
+msgstr ""
+
+#, python-format
+msgid "revision %s is not a patchset number or date"
+msgstr ""
+
+msgid "using builtin cvsps\n"
+msgstr ""
+
+#, python-format
+msgid "connecting to %s\n"
+msgstr ""
+
+msgid "CVS pserver authentication failed"
+msgstr ""
+
+msgid "server sucks"
+msgstr ""
+
+#, python-format
+msgid "%d bytes missing from remote file"
+msgstr ""
+
+#, python-format
+msgid "cvs server: %s\n"
+msgstr ""
+
+#, python-format
+msgid "unknown CVS response: %s"
+msgstr ""
+
+msgid "collecting CVS rlog\n"
+msgstr ""
+
+#, python-format
+msgid "reading cvs log cache %s\n"
+msgstr ""
+
+#, python-format
+msgid "cache has %d log entries\n"
+msgstr ""
+
+#, python-format
+msgid "error reading cache: %r\n"
+msgstr ""
+
+#, python-format
+msgid "running %s\n"
+msgstr ""
+
+#, python-format
+msgid "prefix=%r directory=%r root=%r\n"
+msgstr ""
+
+msgid "RCS file must be followed by working file"
+msgstr ""
+
+msgid "must have at least some revisions"
+msgstr ""
+
+msgid "expected revision number"
+msgstr ""
+
+msgid "revision must be followed by date line"
+msgstr ""
+
+#, python-format
+msgid "found synthetic revision in %s: %r\n"
+msgstr ""
+
+#, python-format
+msgid "writing cvs log cache %s\n"
+msgstr ""
+
+#, python-format
+msgid "%d log entries\n"
+msgstr ""
+
+msgid "creating changesets\n"
+msgstr ""
+
+msgid "synthetic changeset cannot have multiple parents"
+msgstr ""
+
+#, python-format
+msgid ""
+"warning: CVS commit message references non-existent branch %r:\n"
+"%s\n"
+msgstr ""
+
+#, python-format
+msgid "%d changeset entries\n"
+msgstr ""
+
+msgid "Python ElementTree module is not available"
+msgstr ""
+
+#, python-format
+msgid "cleaning up %s\n"
+msgstr ""
+
+msgid "internal calling inconsistency"
+msgstr ""
+
+msgid "errors in filemap"
+msgstr ""
+
+#, python-format
+msgid "%s:%d: %r already in %s list\n"
+msgstr ""
+
+#, python-format
+msgid "%s:%d: unknown directive %r\n"
+msgstr ""
+
+msgid "source repository doesn't support --filemap"
+msgstr ""
+
+#, python-format
+msgid "%s does not look like a GNU Arch repo"
+msgstr ""
+
+msgid "cannot find a GNU Arch tool"
+msgstr ""
+
+#, python-format
+msgid "analyzing tree version %s...\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"tree analysis stopped because it points to an unregistered archive %s...\n"
+msgstr ""
+
+#, python-format
+msgid "applying revision %s...\n"
+msgstr ""
+
+#, python-format
+msgid "computing changeset between %s and %s...\n"
+msgstr ""
+
+#, python-format
+msgid "obtaining revision %s...\n"
+msgstr ""
+
+#, python-format
+msgid "analyzing revision %s...\n"
+msgstr ""
+
+#, python-format
+msgid "could not parse cat-log of %s"
+msgstr ""
+
+#, python-format
+msgid "%s is not a local Mercurial repo"
+msgstr ""
+
+#, python-format
+msgid "initializing destination %s repository\n"
+msgstr ""
+
+msgid "run hg sink pre-conversion action\n"
+msgstr ""
+
+msgid "run hg sink post-conversion action\n"
+msgstr ""
+
+#, python-format
+msgid "pulling from %s into %s\n"
+msgstr ""
+
+msgid "filtering out empty revision\n"
+msgstr ""
+
+msgid "updating tags\n"
+msgstr ""
+
+#, python-format
+msgid "%s is not a valid start revision"
+msgstr ""
+
+#, python-format
+msgid "ignoring: %s\n"
+msgstr ""
+
+msgid "run hg source pre-conversion action\n"
+msgstr ""
+
+msgid "run hg source post-conversion action\n"
+msgstr ""
+
+#, python-format
+msgid "%s does not look like a monotone repo"
+msgstr ""
+
+#, python-format
+msgid "copying file in renamed directory from '%s' to '%s'"
+msgstr ""
+
+msgid "reading p4 views\n"
+msgstr ""
+
+msgid "collecting p4 changelists\n"
+msgstr ""
+
+msgid "Subversion python bindings could not be loaded"
+msgstr ""
+
+#, python-format
+msgid "Subversion python bindings %d.%d found, 1.4 or later required"
+msgstr ""
+
+msgid "Subversion python bindings are too old, 1.4 or later required"
+msgstr ""
+
+#, python-format
+msgid "svn: revision %s is not an integer"
+msgstr ""
+
+#, python-format
+msgid "svn: start revision %s is not an integer"
+msgstr ""
+
+#, python-format
+msgid "no revision found in module %s"
+msgstr ""
+
+#, python-format
+msgid "expected %s to be at %r, but not found"
+msgstr ""
+
+#, python-format
+msgid "found %s at %r\n"
+msgstr ""
+
+#, python-format
+msgid "ignoring empty branch %s\n"
+msgstr ""
+
+#, python-format
+msgid "found branch %s at %d\n"
+msgstr ""
+
+msgid "svn: start revision is not supported with more than one branch"
+msgstr ""
+
+#, python-format
+msgid "svn: no revision found after start revision %d"
+msgstr ""
+
+#, python-format
+msgid "no tags found at revision %d\n"
+msgstr ""
+
+#, python-format
+msgid "ignoring foreign branch %r\n"
+msgstr ""
+
+#, python-format
+msgid "%s not found up to revision %d"
+msgstr ""
+
+#, python-format
+msgid "branch renamed from %s to %s at %d\n"
+msgstr ""
+
+#, python-format
+msgid "reparent to %s\n"
+msgstr ""
+
+#, python-format
+msgid "copied to %s from %s@%s\n"
+msgstr ""
+
+#, python-format
+msgid "gone from %s\n"
+msgstr ""
+
+#, python-format
+msgid "entry %s\n"
+msgstr ""
+
+#, python-format
+msgid "unknown path in revision %d: %s\n"
+msgstr ""
+
+#, python-format
+msgid "mark %s came from %s:%d\n"
+msgstr ""
+
+#, python-format
+msgid "parsing revision %d (%d changes)\n"
+msgstr ""
+
+#, python-format
+msgid "found parent of branch %s at %d: %s\n"
+msgstr ""
+
+msgid "no copyfrom path, don't know what to do.\n"
+msgstr ""
+
+#, python-format
+msgid "fetching revision log for \"%s\" from %d to %d\n"
+msgstr ""
+
+#, python-format
+msgid "revision %d has no entries\n"
+msgstr ""
+
+#, python-format
+msgid "svn: branch has no revision %s"
+msgstr ""
+
+#, python-format
+msgid "%r is not under %r, ignoring\n"
+msgstr ""
+
+#, python-format
+msgid "initializing svn repo %r\n"
+msgstr ""
+
+#, python-format
+msgid "initializing svn wc %r\n"
+msgstr ""
+
+msgid "unexpected svn output:\n"
+msgstr ""
+
+msgid "unable to cope with svn output"
+msgstr ""
+
+msgid "XXX TAGS NOT IMPLEMENTED YET\n"
+msgstr ""
+
+msgid ""
+"command to allow external programs to compare revisions\n"
+"\n"
+"The `extdiff' Mercurial extension allows you to use external programs\n"
+"to compare revisions, or revision with working directory. The external diff\n"
+"programs are called with a configurable set of options and two\n"
+"non-option arguments: paths to directories containing snapshots of\n"
+"files to compare.\n"
+"\n"
+"The `extdiff' extension also allows to configure new diff commands, so\n"
+"you do not need to type \"hg extdiff -p kdiff3\" always.\n"
+"\n"
+"  [extdiff]\n"
+"  # add new command that runs GNU diff(1) in 'context diff' mode\n"
+"  cdiff = gdiff -Nprc5\n"
+"  ## or the old way:\n"
+"  #cmd.cdiff = gdiff\n"
+"  #opts.cdiff = -Nprc5\n"
+"\n"
+"  # add new command called vdiff, runs kdiff3\n"
+"  vdiff = kdiff3\n"
+"\n"
+"  # add new command called meld, runs meld (no need to name twice)\n"
+"  meld =\n"
+"\n"
+"  # add new command called vimdiff, runs gvimdiff with DirDiff plugin\n"
+"  # (see http://www.vim.org/scripts/script.php?script_id=102)\n"
+"  # Non English user, be sure to put \"let g:DirDiffDynamicDiffText = 1\" "
+"in\n"
+"  # your .vimrc\n"
+"  vimdiff = gvim -f '+next' '+execute \"DirDiff\" argv(0) argv(1)'\n"
+"\n"
+"You can use -I/-X and list of file or directory names like normal \"hg\n"
+"diff\" command. The `extdiff' extension makes snapshots of only needed\n"
+"files, so running the external diff program will actually be pretty\n"
+"fast (at least faster than having to compare the entire tree).\n"
+msgstr ""
+
+#, python-format
+msgid "making snapshot of %d files from rev %s\n"
+msgstr ""
+
+#, python-format
+msgid "making snapshot of %d files from working directory\n"
+msgstr ""
+
+msgid "cannot specify --rev and --change at the same time"
+msgstr ""
+
+#, python-format
+msgid "running %r in %s\n"
+msgstr ""
+
+#, python-format
+msgid "file changed while diffing. Overwriting: %s (src: %s)\n"
+msgstr ""
+
+msgid "cleaning up temp directory\n"
+msgstr ""
+
+msgid ""
+"use external program to diff repository (or selected files)\n"
+"\n"
+"    Show differences between revisions for the specified files, using\n"
+"    an external program. The default program used is diff, with\n"
+"    default options \"-Npru\".\n"
+"\n"
+"    To select a different program, use the -p/--program option. The\n"
+"    program will be passed the names of two directories to compare. To\n"
+"    pass additional options to the program, use -o/--option. These\n"
+"    will be passed before the names of the directories to compare.\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 ""
+
+msgid "comparison program to run"
+msgstr ""
+
+msgid "pass option to comparison program"
+msgstr ""
+
+msgid "change made by revision"
+msgstr ""
+
+msgid "hg extdiff [OPT]... [FILE]..."
+msgstr ""
+
+#, python-format
+msgid "hg %s [OPTION]... [FILE]..."
+msgstr ""
+
+msgid "pull, update and merge in one command"
+msgstr ""
+
+msgid ""
+"pull changes from a remote repository, merge new changes if needed.\n"
+"\n"
+"    This finds all changes from the repository at the specified path\n"
+"    or URL and adds them to the local repository.\n"
+"\n"
+"    If the pulled changes add a new branch head, the head is\n"
+"    automatically merged, and the result of the merge is committed.\n"
+"    Otherwise, the working directory is updated to include the new\n"
+"    changes.\n"
+"\n"
+"    When a merge occurs, the newly pulled changes are assumed to be\n"
+"    \"authoritative\". The head of the new changes is used as the first\n"
+"    parent, with local changes as the second. To switch the merge\n"
+"    order, use --switch-parent.\n"
+"\n"
+"    See 'hg help dates' for a list of formats valid for -d/--date.\n"
+"    "
+msgstr ""
+
+msgid ""
+"working dir not at branch tip (use \"hg update\" to check out branch tip)"
+msgstr ""
+
+msgid "outstanding uncommitted merge"
+msgstr ""
+
+msgid "outstanding uncommitted changes"
+msgstr ""
+
+msgid "working directory is missing some files"
+msgstr ""
+
+msgid ""
+"multiple heads in this branch (use \"hg heads .\" and \"hg merge\" to merge)"
+msgstr ""
+
+#, python-format
+msgid "pulling from %s\n"
+msgstr ""
+
+msgid ""
+"Other repository doesn't support revision lookup, so a rev cannot be "
+"specified."
+msgstr ""
+
+#, python-format
+msgid ""
+"not merging with %d other new branch heads (use \"hg heads .\" and \"hg merge"
+"\" to merge them)\n"
+msgstr ""
+
+#, python-format
+msgid "updating to %d:%s\n"
+msgstr ""
+
+#, python-format
+msgid "merging with %d:%s\n"
+msgstr ""
+
+#, python-format
+msgid "Automated merge with %s"
+msgstr ""
+
+#, python-format
+msgid "new changeset %d:%s merges remote changes with local\n"
+msgstr ""
+
+msgid "a specific revision you would like to pull"
+msgstr ""
+
+msgid "edit commit message"
+msgstr ""
+
+msgid "edit commit message (DEPRECATED)"
+msgstr ""
+
+msgid "switch parents when merging"
+msgstr ""
+
+msgid "hg fetch [SOURCE]"
+msgstr ""
+
+msgid "commands to sign and verify changesets"
+msgstr ""
+
+msgid "error while verifying signature"
+msgstr ""
+
+#, python-format
+msgid "%s Bad signature from \"%s\"\n"
+msgstr ""
+
+#, python-format
+msgid "%s Note: Signature has expired (signed by: \"%s\")\n"
+msgstr ""
+
+#, python-format
+msgid "%s Note: This key has expired (signed by: \"%s\")\n"
+msgstr ""
+
+msgid "list signed changesets"
+msgstr ""
+
+#, python-format
+msgid "%s:%d node does not exist\n"
+msgstr ""
+
+msgid "verify all the signatures there may be for a particular revision"
+msgstr ""
+
+#, python-format
+msgid "No valid signature for %s\n"
+msgstr ""
+
+msgid ""
+"add a signature for the current or given revision\n"
+"\n"
+"    If no revision is given, the parent of the working directory is used,\n"
+"    or tip if no revision is checked out.\n"
+"\n"
+"    See 'hg help dates' for a list of formats valid for -d/--date.\n"
+"    "
+msgstr ""
+
+msgid "uncommitted merge - please provide a specific revision"
+msgstr ""
+
+msgid "Error while signing"
+msgstr ""
+
+msgid ""
+"working copy of .hgsigs is changed (please commit .hgsigs manually or use --"
+"force)"
+msgstr ""
+
+#, python-format
+msgid "Added signature for changeset %s"
+msgstr ""
+
+msgid "unknown signature version"
+msgstr ""
+
+msgid "make the signature local"
+msgstr ""
+
+msgid "sign even if the sigfile is modified"
+msgstr ""
+
+msgid "do not commit the sigfile after signing"
+msgstr ""
+
+msgid "the key id to sign with"
+msgstr ""
+
+msgid "commit message"
+msgstr ""
+
+msgid "hg sign [OPTION]... [REVISION]..."
+msgstr ""
+
+msgid "hg sigcheck REVISION"
+msgstr ""
+
+msgid "hg sigs"
+msgstr ""
+
+msgid ""
+"command to view revision graphs from a shell\n"
+"\n"
+"This extension adds a --graph option to the incoming, outgoing and log\n"
+"commands. When this options is given, an ASCII representation of the\n"
+"revision graph is also shown.\n"
+msgstr ""
+
+#, python-format
+msgid "--graph option is incompatible with --%s"
+msgstr ""
+
+msgid ""
+"show revision history alongside an ASCII revision graph\n"
+"\n"
+"    Print a revision history alongside a revision graph drawn with\n"
+"    ASCII characters.\n"
+"\n"
+"    Nodes printed as an @ character are parents of the working\n"
+"    directory.\n"
+"    "
+msgstr ""
+
+#, python-format
+msgid "comparing with %s\n"
+msgstr "comparaison avec %s\n"
+
+msgid "no changes found\n"
+msgstr "aucun changement trouvé\n"
+
+msgid "show the revision DAG"
+msgstr ""
+
+msgid "limit number of changes displayed"
+msgstr ""
+
+msgid "show patch"
+msgstr ""
+
+msgid "show the specified revision or range"
+msgstr ""
+
+msgid "hg glog [OPTION]... [FILE]"
+msgstr ""
+
+msgid ""
+"hooks for integrating with the CIA.vc notification service\n"
+"\n"
+"This is meant to be run as a changegroup or incoming hook.\n"
+"To configure it, set the following options in your hgrc:\n"
+"\n"
+"[cia]\n"
+"# your registered CIA user name\n"
+"user = foo\n"
+"# the name of the project in CIA\n"
+"project = foo\n"
+"# the module (subproject) (optional)\n"
+"#module = foo\n"
+"# Append a diffstat to the log message (optional)\n"
+"#diffstat = False\n"
+"# Template to use for log messages (optional)\n"
+"#template = {desc}\\n{baseurl}/rev/{node}-- {diffstat}\n"
+"# Style to use (optional)\n"
+"#style = foo\n"
+"# The URL of the CIA notification service (optional)\n"
+"# You can use mailto: URLs to send by email, eg\n"
+"# mailto:cia@cia.vc\n"
+"# Make sure to set email.from if you do this.\n"
+"#url = http://cia.vc/\n"
+"# print message instead of sending it (optional)\n"
+"#test = False\n"
+"\n"
+"[hooks]\n"
+"# one of these:\n"
+"changegroup.cia = python:hgcia.hook\n"
+"#incoming.cia = python:hgcia.hook\n"
+"\n"
+"[web]\n"
+"# If you want hyperlinks (optional)\n"
+"baseurl = http://server/path/to/repo\n"
+msgstr ""
+
+#, python-format
+msgid "hgcia: sending update to %s\n"
+msgstr ""
+
+msgid "email.from must be defined when sending by email"
+msgstr ""
+
+msgid "cia: no user specified"
+msgstr ""
+
+msgid "cia: no project specified"
+msgstr ""
+
+msgid ""
+"browse the repository in a graphical way\n"
+"\n"
+"The hgk extension allows browsing the history of a repository in a\n"
+"graphical way. It requires Tcl/Tk version 8.4 or later. (Tcl/Tk is not\n"
+"distributed with Mercurial.)\n"
+"\n"
+"hgk consists of two parts: a Tcl script that does the displaying and\n"
+"querying of information, and an extension to Mercurial named hgk.py,\n"
+"which provides hooks for hgk to get information. hgk can be found in\n"
+"the contrib directory, and the extension is shipped in the hgext\n"
+"repository, and needs to be enabled.\n"
+"\n"
+"The hg view command will launch the hgk Tcl script. For this command\n"
+"to work, hgk must be in your search path. Alternately, you can specify\n"
+"the path to hgk in your .hgrc file:\n"
+"\n"
+"  [hgk]\n"
+"  path=/location/of/hgk\n"
+"\n"
+"hgk can make use of the extdiff extension to visualize revisions.\n"
+"Assuming you had already configured extdiff vdiff command, just add:\n"
+"\n"
+"  [hgk]\n"
+"  vdiff=vdiff\n"
+"\n"
+"Revisions context menu will now display additional entries to fire\n"
+"vdiff on hovered and selected revisions."
+msgstr ""
+
+msgid "diff trees from two commits"
+msgstr ""
+
+msgid "output common ancestor information"
+msgstr ""
+
+msgid "cat a specific revision"
+msgstr ""
+
+msgid "cat-file: type or revision not supplied\n"
+msgstr ""
+
+msgid "aborting hg cat-file only understands commits\n"
+msgstr ""
+
+msgid "parse given revisions"
+msgstr ""
+
+msgid "print revisions"
+msgstr ""
+
+msgid "print extension options"
+msgstr ""
+
+msgid "start interactive history viewer"
+msgstr ""
+
+msgid "hg view [-l LIMIT] [REVRANGE]"
+msgstr ""
+
+msgid "generate patch"
+msgstr ""
+
+msgid "recursive"
+msgstr ""
+
+msgid "pretty"
+msgstr ""
+
+msgid "stdin"
+msgstr ""
+
+msgid "detect copies"
+msgstr ""
+
+msgid "search"
+msgstr ""
+
+msgid "hg git-diff-tree [OPTION]... NODE1 NODE2 [FILE]..."
+msgstr ""
+
+msgid "hg debug-cat-file [OPTION]... TYPE FILE"
+msgstr ""
+
+msgid "hg debug-config"
+msgstr ""
+
+msgid "hg debug-merge-base REV REV"
+msgstr ""
+
+msgid "ignored"
+msgstr ""
+
+msgid "hg debug-rev-parse REV"
+msgstr ""
+
+msgid "header"
+msgstr ""
+
+msgid "topo-order"
+msgstr ""
+
+msgid "parents"
+msgstr ""
+
+msgid "max-count"
+msgstr ""
+
+msgid "hg debug-rev-list [OPTION]... REV..."
+msgstr "hg debug-rev-list [OPTION]... REV..."
+
+msgid ""
+"syntax highlighting for hgweb (requires Pygments)\n"
+"\n"
+"It depends on the Pygments syntax highlighting library:\n"
+"http://pygments.org/\n"
+"\n"
+"There is a single configuration option:\n"
+"\n"
+"[web]\n"
+"pygments_style = <style>\n"
+"\n"
+"The default is 'colorful'.\n"
+msgstr ""
+
+msgid "accelerate status report using Linux's inotify service"
+msgstr ""
+
+msgid "start an inotify server for this repository"
+msgstr ""
+
+msgid ""
+"debugging information for inotify extension\n"
+"\n"
+"    Prints the list of directories being watched by the inotify server.\n"
+"    "
+msgstr ""
+
+msgid "directories being watched:\n"
+msgstr ""
+
+msgid "run server in background"
+msgstr ""
+
+msgid "used internally by daemon mode"
+msgstr ""
+
+msgid "minutes to sit idle before exiting"
+msgstr ""
+
+msgid "name of file to write process ID to"
+msgstr ""
+
+msgid "hg inserve [OPTION]..."
+msgstr "hg inserve [OPTION]..."
+
+msgid "(found dead inotify server socket; removing it)\n"
+msgstr ""
+
+msgid "(starting inotify server)\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 ""
+
+msgid "(inotify server not running)\n"
+msgstr ""
+
+#, python-format
+msgid "failed to contact inotify server: %s\n"
+msgstr ""
+
+msgid "received empty answer from inotify server"
+msgstr ""
+
+#, python-format
+msgid "(inotify: received response from incompatible server version %d)\n"
+msgstr ""
+
+#, python-format
+msgid "(inotify: received '%s' response when expecting '%s')\n"
+msgstr ""
+
+msgid "this system does not seem to support inotify"
+msgstr ""
+
+#, python-format
+msgid "*** the current per-user limit on the number of inotify watches is %s\n"
+msgstr ""
+
+msgid "*** this limit is too low to watch every directory in this repository\n"
+msgstr ""
+
+msgid "*** counting directories: "
+msgstr ""
+
+#, python-format
+msgid "found %d\n"
+msgstr ""
+
+#, python-format
+msgid "*** to raise the limit from %d to %d (run as root):\n"
+msgstr ""
+
+#, python-format
+msgid "***  echo %d > %s\n"
+msgstr ""
+
+#, python-format
+msgid "cannot watch %s until inotify watch limit is raised"
+msgstr ""
+
+#, python-format
+msgid "inotify service not available: %s"
+msgstr ""
+
+#, python-format
+msgid "watching %r\n"
+msgstr ""
+
+#, python-format
+msgid "watching directories under %r\n"
+msgstr ""
+
+#, python-format
+msgid "status: %r dir(%d) -> %s\n"
+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 ""
+
+#, python-format
+msgid "%s event: deleted %s\n"
+msgstr ""
+
+#, python-format
+msgid "%s event: modified %s\n"
+msgstr ""
+
+#, python-format
+msgid "filesystem containing %s was unmounted\n"
+msgstr ""
+
+#, python-format
+msgid "%s readable: %d bytes\n"
+msgstr ""
+
+#, python-format
+msgid "%s below threshold - unhooking\n"
+msgstr ""
+
+#, python-format
+msgid "%s reading %d events\n"
+msgstr ""
+
+#, python-format
+msgid "%s hooking back up with %d bytes readable\n"
+msgstr ""
+
+#, python-format
+msgid "could not start server: %s"
+msgstr ""
+
+#, python-format
+msgid "answering query for %r\n"
+msgstr ""
+
+#, python-format
+msgid "received query from incompatible client version %d\n"
+msgstr ""
+
+#, python-format
+msgid "unrecognized query type: %s\n"
+msgstr ""
+
+msgid "finished setup\n"
+msgstr ""
+
+msgid ""
+"expand expressions into changelog and summaries\n"
+"\n"
+"This extension allows the use of a special syntax in summaries,\n"
+"which will be automatically expanded into links or any other\n"
+"arbitrary expression, much like InterWiki does.\n"
+"\n"
+"A few example patterns (link to bug tracking, etc.) that may\n"
+"be used in your hgrc:\n"
+"\n"
+"  [interhg]\n"
+"  issues = s!issue(\\d+)!<a href=\"http://bts/issue\\1\">issue\\1</a>!\n"
+"  bugzilla = s!((?:bug|b=|(?=#?\\d{4,}))(?:\\s*#?)(\\d+))!<a..=\\2\">\\1</a>!"
+"i\n"
+"  boldify = s!(^|\\s)#(\\d+)\\b! <b>#\\2</b>!\n"
+msgstr ""
+
+#, python-format
+msgid "interhg: invalid pattern for %s: %s\n"
+msgstr ""
+
+#, python-format
+msgid "interhg: invalid regexp for %s: %s\n"
+msgstr ""
+
+msgid ""
+"expand keywords in tracked files\n"
+"\n"
+"This extension expands RCS/CVS-like or self-customized $Keywords$ in\n"
+"tracked text files selected by your configuration.\n"
+"\n"
+"Keywords are only expanded in local repositories and not stored in the\n"
+"change history. The mechanism can be regarded as a convenience for the\n"
+"current user or for archive distribution.\n"
+"\n"
+"Configuration is done in the [keyword] and [keywordmaps] sections of\n"
+"hgrc files.\n"
+"\n"
+"Example:\n"
+"\n"
+"    [keyword]\n"
+"    # expand keywords in every python file except those matching \"x*\"\n"
+"    **.py =\n"
+"    x*    = ignore\n"
+"\n"
+"Note: the more specific you are in your filename patterns\n"
+"      the less you lose speed in huge repositories.\n"
+"\n"
+"For [keywordmaps] template mapping and expansion demonstration and\n"
+"control run \"hg kwdemo\".\n"
+"\n"
+"An additional date template filter {date|utcdate} is provided.\n"
+"\n"
+"The default template mappings (view with \"hg kwdemo -d\") can be\n"
+"replaced with customized keywords and templates. Again, run \"hg\n"
+"kwdemo\" to control the results of your config changes.\n"
+"\n"
+"Before changing/disabling active keywords, run \"hg kwshrink\" to avoid\n"
+"the risk of inadvertently storing expanded keywords in the change\n"
+"history.\n"
+"\n"
+"To force expansion after enabling it, or a configuration change, run\n"
+"\"hg kwexpand\".\n"
+"\n"
+"Also, when committing with the record extension or using mq's qrecord,\n"
+"be aware that keywords cannot be updated. Again, run \"hg kwexpand\" on\n"
+"the files in question to update keyword expansions after all changes\n"
+"have been checked in.\n"
+"\n"
+"Expansions spanning more than one line and incremental expansions,\n"
+"like CVS' $Log$, are not supported. A keyword template map\n"
+"\"Log = {desc}\" expands to the first line of the changeset description.\n"
+msgstr ""
+
+#, python-format
+msgid "overwriting %s expanding keywords\n"
+msgstr ""
+
+#, python-format
+msgid "overwriting %s shrinking keywords\n"
+msgstr ""
+
+msgid "[keyword] patterns cannot match"
+msgstr ""
+
+msgid "no [keyword] patterns configured"
+msgstr ""
+
+msgid ""
+"print [keywordmaps] configuration and an expansion example\n"
+"\n"
+"    Show current, custom, or default keyword template maps and their\n"
+"    expansions.\n"
+"\n"
+"    Extend current configuration by specifying maps as arguments and\n"
+"    optionally by reading from an additional hgrc file.\n"
+"\n"
+"    Override current keyword template maps with \"default\" option.\n"
+"    "
+msgstr ""
+
+#, python-format
+msgid "creating temporary repository at %s\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"\n"
+"\tconfig using %s keyword template maps\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"\n"
+"%s keywords written to %s:\n"
+msgstr ""
+
+msgid "unhooked all commit hooks\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"\n"
+"\t%s keywords expanded%s\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"\n"
+"removing temporary repository %s\n"
+msgstr ""
+
+msgid ""
+"expand keywords in the working directory\n"
+"\n"
+"    Run after (re)enabling keyword expansion.\n"
+"\n"
+"    kwexpand refuses to run if given files contain local changes.\n"
+"    "
+msgstr ""
+
+msgid ""
+"show files configured for keyword expansion\n"
+"\n"
+"    List which files in the working directory are matched by the\n"
+"    [keyword] configuration patterns.\n"
+"\n"
+"    Useful to prevent inadvertent keyword expansion and to speed up\n"
+"    execution by including only files that are actual candidates\n"
+"    for expansion.\n"
+"\n"
+"    See \"hg help keyword\" on how to construct patterns both for\n"
+"    inclusion and exclusion of files.\n"
+"\n"
+"    Use -u/--untracked to list untracked files as well.\n"
+"\n"
+"    With -a/--all and -v/--verbose the codes used to show the status\n"
+"    of files are:\n"
+"    K = keyword expansion candidate\n"
+"    k = keyword expansion candidate (untracked)\n"
+"    I = ignored\n"
+"    i = ignored (untracked)\n"
+"    "
+msgstr ""
+
+msgid ""
+"revert expanded keywords in the working directory\n"
+"\n"
+"    Run before changing/disabling active keywords or if you experience\n"
+"    problems with \"hg import\" or \"hg merge\".\n"
+"\n"
+"    kwshrink refuses to run if given files contain local changes.\n"
+"    "
+msgstr ""
+
+msgid "show default keyword template maps"
+msgstr ""
+
+msgid "read maps from rcfile"
+msgstr ""
+
+msgid "hg kwdemo [-d] [-f RCFILE] [TEMPLATEMAP]..."
+msgstr ""
+
+msgid "hg kwexpand [OPTION]... [FILE]..."
+msgstr ""
+
+msgid "show keyword status flags of all files"
+msgstr ""
+
+msgid "show files excluded from expansion"
+msgstr ""
+
+msgid "additionally show untracked files"
+msgstr ""
+
+msgid "hg kwfiles [OPTION]... [FILE]..."
+msgstr ""
+
+msgid "hg kwshrink [OPTION]... [FILE]..."
+msgstr ""
+
+msgid ""
+"manage a stack of patches\n"
+"\n"
+"This extension lets you work with a stack of patches in a Mercurial\n"
+"repository. It manages two stacks of patches - all known patches, and\n"
+"applied patches (subset of known patches).\n"
+"\n"
+"Known patches are represented as patch files in the .hg/patches\n"
+"directory. Applied patches are both patch files and changesets.\n"
+"\n"
+"Common tasks (use \"hg help command\" for more details):\n"
+"\n"
+"prepare repository to work with patches   qinit\n"
+"create new patch                          qnew\n"
+"import existing patch                     qimport\n"
+"\n"
+"print patch series                        qseries\n"
+"print applied patches                     qapplied\n"
+"print name of top applied patch           qtop\n"
+"\n"
+"add known patch to applied stack          qpush\n"
+"remove patch from applied stack           qpop\n"
+"refresh contents of top applied patch     qrefresh\n"
+msgstr ""
+"gestion et utilisation d'une pile de patchs\n"
+"\n"
+"Cette extension permet de travailler avec une pile de patchs au\n"
+"dessus d'un dépôt Mercurial. Deux piles de patchs sont gérées :\n"
+"l'ensemble des patchs référencés, et le sous-ensemble des patchs\n"
+"qui ont été appliqués.\n"
+"\n"
+"Les patchs référencés sont stockés en tant que fichiers au format\n"
+"patch au sein du répertoire .hg/patches, tandis que les patchs\n"
+"appliqués sont présents à la fois sous forme de fichier et de\n"
+"\"changesets\".\n"
+"\n"
+"Tâches usuelles (utiliser \"hg help commande\" pour plus de détails):\n"
+"\n"
+"préparer un dépôt pour utilisation avec des patchs   qinit\n"
+"créer un nouveau patch                               qnew\n"
+"importer un patch existant                           qimport\n"
+"\n"
+"afficher la série de patchs complète                 qseries\n"
+"afficher les patchs appliqués                        qapplied\n"
+"afficher le nom du dernier patch appliqué            qtop\n"
+"\n"
+"empiler/appliquer un patch référencé sur la pile     qpush\n"
+"dépiler/ôter un patch de la pile                     qpop\n"
+"rafraîchir le contenu du dernier patch appliqué      qrefresh\n"
+
+#, python-format
+msgid "%s appears more than once in %s"
+msgstr "%s apparaît plus d'une fois dans %s"
+
+msgid "guard cannot be an empty string"
+msgstr ""
+
+#, python-format
+msgid "guard %r starts with invalid character: %r"
+msgstr ""
+
+#, python-format
+msgid "invalid character in guard %r: %r"
+msgstr ""
+
+#, python-format
+msgid "active guards: %s\n"
+msgstr ""
+
+#, python-format
+msgid "guard %r too short"
+msgstr ""
+
+#, python-format
+msgid "guard %r starts with invalid char"
+msgstr ""
+
+#, python-format
+msgid "allowing %s - no guards in effect\n"
+msgstr ""
+
+#, python-format
+msgid "allowing %s - no matching negative guards\n"
+msgstr ""
+
+#, python-format
+msgid "allowing %s - guarded by %r\n"
+msgstr ""
+
+#, python-format
+msgid "skipping %s - guarded by %r\n"
+msgstr ""
+
+#, python-format
+msgid "skipping %s - no matching guards\n"
+msgstr ""
+
+#, python-format
+msgid "error removing undo: %s\n"
+msgstr ""
+
+#, python-format
+msgid "apply failed for patch %s"
+msgstr "l'application du patch %s a échoué"
+
+#, python-format
+msgid "patch didn't work out, merging %s\n"
+msgstr "l'application simple du patch a échoué, fusion de %s\n"
+
+#, python-format
+msgid "update returned %d"
+msgstr ""
+
+msgid "repo commit failed"
+msgstr ""
+
+#, python-format
+msgid "unable to read %s"
+msgstr "impossible de lire %s"
+
+#, python-format
+msgid "patch %s does not exist\n"
+msgstr "le patch %s n'existe pas\n"
+
+#, python-format
+msgid "patch %s is not applied\n"
+msgstr "le patch %s n'est pas appliqué\n"
+
+msgid "patch failed, unable to continue (try -v)\n"
+msgstr ""
+"l'application du patch a échoué, impossible de continuer (essayez avec -v)\n"
+
+#, python-format
+msgid "applying %s\n"
+msgstr "application de %s\n"
+
+#, python-format
+msgid "unable to read %s\n"
+msgstr "impossible de lire %s\n"
+
+#, python-format
+msgid "imported patch %s\n"
+msgstr "le patch %s a été importé\n"
+
+#, python-format
+msgid ""
+"\n"
+"imported patch %s"
+msgstr ""
+"\n"
+"le patch %s a été importé"
+
+#, python-format
+msgid "patch %s is empty\n"
+msgstr "le patch %s est vide\n"
+
+msgid "patch failed, rejects left in working dir\n"
+msgstr ""
+
+msgid "fuzz found when applying patch, stopping\n"
+msgstr ""
+
+#, python-format
+msgid "revision %d is not managed"
+msgstr "la révision %d n'est pas gérée"
+
+#, python-format
+msgid "cannot delete revision %d above applied patches"
+msgstr "impossible de supprimer la révision %d au-dessus de patchs appliqués"
+
+#, python-format
+msgid "patch %s finalized without changeset message\n"
+msgstr ""
+
+msgid "qdelete requires at least one revision or patch name"
+msgstr "qdelete requiert au moins une révision ou le nom d'un patch"
+
+#, python-format
+msgid "cannot delete applied patch %s"
+msgstr "impossible de supprimer le patch appliqué %s"
+
+#, python-format
+msgid "patch %s not in series file"
+msgstr "le patch %s n'est pas listé (fichier \"series\")"
+
+msgid "no patches applied"
+msgstr "pas de patchs appliqués"
+
+msgid "working directory revision is not qtip"
+msgstr "le répertoire de travail n'est pas à la révision qtip"
+
+msgid "local changes found, refresh first"
+msgstr "modifications locales trouvées, veuillez d'abord rafraîchir le patch"
+
+msgid "local changes found"
+msgstr "modifications locales trouvées"
+
+#, python-format
+msgid "\"%s\" cannot be used as the name of a patch"
+msgstr "\"%s\" ne peut être utilisé comme nom de patch"
+
+#, python-format
+msgid "patch \"%s\" already exists"
+msgstr "le patch \"%s\" existe déjà"
+
+#, python-format
+msgid "error unlinking %s\n"
+msgstr "erreur lors de la suppression de %s\n"
+
+#, python-format
+msgid "patch name \"%s\" is ambiguous:\n"
+msgstr "\"%s\" est un nom de patch ambigu :\n"
+
+#, python-format
+msgid "patch %s not in series"
+msgstr "le patch %s ne figure pas dans la série"
+
+#, fuzzy
+msgid "(working directory not at a head)\n"
+msgstr "(le répertoire de travail est à une révision différente de tip)\n"
+
+msgid "no patches in series\n"
+msgstr "pas de patchs dans la série\n"
+
+#, python-format
+msgid "cannot push to a previous patch: %s"
+msgstr "impossible d'empiler un patch déjà appliqué : %s"
+
+#, python-format
+msgid "qpush: %s is already at the top\n"
+msgstr "qpush: %s est déjà le dernier patch appliqué\n"
+
+#, python-format
+msgid "guarded by %r"
+msgstr ""
+
+msgid "no matching guards"
+msgstr ""
+
+#, python-format
+msgid "cannot push '%s' - %s\n"
+msgstr "impossible d'empiler '%s' - %s\n"
+
+msgid "all patches are currently applied\n"
+msgstr "tous les patchs sont actuellement appliqués\n"
+
+msgid "patch series already fully applied\n"
+msgstr "la série de patchs est déjà complètement appliquée\n"
+
+msgid "cleaning up working directory..."
+msgstr "nettoyage du répertoire de travail..."
+
+#, python-format
+msgid "errors during apply, please fix and refresh %s\n"
+msgstr ""
+"des erreurs se sont produites durant l'application, veuillez corriger puis "
+"rafraîchir %s\n"
+
+#, python-format
+msgid "now at: %s\n"
+msgstr "actuellement à : %s\n"
+
+#, python-format
+msgid "patch %s is not applied"
+msgstr "le patch %s n'est pas appliqué"
+
+msgid "no patches applied\n"
+msgstr "aucun patch appliqué\n"
+
+#, python-format
+msgid "qpop: %s is already at the top\n"
+msgstr "qpop: %s est déjà le dernier patch appliqué\n"
+
+msgid "qpop: forcing dirstate update\n"
+msgstr ""
+"qpop: mise à jour de l'état du répertoire de travail (dirstate) forcée\n"
+
+#, python-format
+msgid "trying to pop unknown node %s"
+msgstr "tentative de dépilement d'un nœud inconnu : %s"
+
+msgid "popping would remove a revision not managed by this patch queue"
+msgstr ""
+"le dépilement enlèverait une révision non gérée par cette pile de patchs"
+
+msgid "deletions found between repo revs"
+msgstr "suppressions trouvées entre des révisions du dépôt"
+
+msgid "patch queue now empty\n"
+msgstr "la pile de patchs est maintenant vide\n"
+
+msgid "cannot refresh a revision with children"
+msgstr "impossible de rafraîchir une révision possédant des révisions filles"
+
+# restaurer/récupérer ? pas satisfait...
+msgid ""
+"refresh interrupted while patch was popped! (revert --all, qpush to "
+"recover)\n"
+msgstr ""
+"rafraîchissement interrompu alors qu'un patch était en cours de dépilement "
+"(utiliser revert --all, ou qpush pour restaurer l'état)\n"
+
+msgid "patch queue directory already exists"
+msgstr "la pile de patchs existe déjà"
+
+#, python-format
+msgid "patch %s is not in series file"
+msgstr "le patch %s n'est pas dans la liste (fichier \"series\")"
+
+msgid "No saved patch data found\n"
+msgstr ""
+
+#, python-format
+msgid "restoring status: %s\n"
+msgstr "rétablissement de l'état : %s\n"
+
+msgid "save entry has children, leaving it alone\n"
+msgstr ""
+
+#, python-format
+msgid "removing save entry %s\n"
+msgstr ""
+
+#, python-format
+msgid "saved queue repository parents: %s %s\n"
+msgstr ""
+
+msgid "queue directory updating\n"
+msgstr "mise à jour du répertoire de patchs\n"
+
+msgid "Unable to load queue repository\n"
+msgstr "Impossible de charger le dépôt de patchs\n"
+
+msgid "save: no patches applied, exiting\n"
+msgstr ""
+
+msgid "status is already saved\n"
+msgstr "l'état a déjà été sauvegardé\n"
+
+msgid "hg patches saved state"
+msgstr ""
+
+msgid "repo commit failed\n"
+msgstr ""
+
+#, python-format
+msgid "patch %s is already in the series file"
+msgstr "le patch %s est déjà dans la liste (fichier \"series\")"
+
+msgid "option \"-r\" not valid when importing files"
+msgstr "l'option \"-r\" n'est pas utilisable lors de l'importation de fichiers"
+
+msgid "option \"-n\" not valid when importing multiple patches"
+msgstr ""
+"l'option \"-n\" n'est pas utilisable lors de l'importation de plusieurs "
+"patchs"
+
+# origine/base/racine ?
+#, python-format
+msgid "revision %d is the root of more than one branch"
+msgstr "la révision %d est à l'origine de plus d'une branche"
+
+#, python-format
+msgid "revision %d is already managed"
+msgstr "la révision %d est déjà gérée"
+
+#, python-format
+msgid "revision %d is not the parent of the queue"
+msgstr "la révision %d n'est pas parente de la pile"
+
+#, python-format
+msgid "revision %d has unmanaged children"
+msgstr "la révision %d possède des révisions filles non gérées"
+
+#, python-format
+msgid "cannot import merge revision %d"
+msgstr "impossible d'importer la révision fusionnée %d"
+
+#, python-format
+msgid "revision %d is not the parent of %d"
+msgstr "%d n'est pas la révision parente de %d"
+
+msgid "-e is incompatible with import from -"
+msgstr "-e n'est pas compatible avec l'importation depuis -"
+
+#, python-format
+msgid "patch %s does not exist"
+msgstr "le patch %s n'existe pas"
+
+msgid "need --name to import a patch from -"
+msgstr "il est nécessaire d'utiliser --name pour importer un patch depuis -"
+
+#, python-format
+msgid "adding %s to series file\n"
+msgstr "ajout de %s à la liste de patchs (fichier \"series\")\n"
+
+msgid ""
+"remove patches from queue\n"
+"\n"
+"    The patches must not be applied, and at least one patch is required. "
+"With\n"
+"    -k/--keep, the patch files are preserved in the patch directory.\n"
+"\n"
+"    To stop managing a patch and move it into permanent history,\n"
+"    use the qfinish command."
+
+msgstr ""
+"supprime des patchs de la pile\n"
+"\n"
+"    Les patchs ne doivent pas avoir été appliqués, et il est\n"
+"    nécessaire de fournir au moins un patch.\n"
+"\n"
+"    Avec -k/--keep, les fichiers sont préservés au sein du répertoire\n"
+"    de patchs.\n"
+"\n"
+"    Pour arrêter de gérer un patch et le déplacer de manière\n"
+"    permanente vers l'historique du dépôt, utilisez la commande\n"
+"    qfinish."
+
+msgid "print the patches already applied"
+msgstr "affiche les patchs déjà appliqués"
+
+msgid "print the patches not yet applied"
+msgstr "affiche les patchs non encore appliqués"
+
+msgid ""
+"import a patch\n"
+"\n"
+"    The patch is inserted into the series after the last applied\n"
+"    patch. If no patches have been applied, qimport prepends the patch\n"
+"    to the series.\n"
+"\n"
+"    The patch will have the same name as its source file unless you\n"
+"    give it a new one with -n/--name.\n"
+"\n"
+"    You can register an existing patch inside the patch directory with\n"
+"    the -e/--existing flag.\n"
+"\n"
+"    With -f/--force, an existing patch of the same name will be\n"
+"    overwritten.\n"
+"\n"
+"    An existing changeset may be placed under mq control with -r/--rev\n"
+"    (e.g. qimport --rev tip -n patch will place tip under mq control).\n"
+"    With -g/--git, patches imported with --rev will use the git diff\n"
+"    format. See the diffs help topic for information on why this is\n"
+"    important for preserving rename/copy information and permission\n"
+"    changes.\n"
+"\n"
+"    To import a patch from standard input, pass - as the patch file.\n"
+"    When importing from standard input, a patch name must be specified\n"
+"    using the --name flag.\n"
+"    "
+msgstr ""
+"importe un patch\n"
+"\n"
+"    Le patch est inséré dans la série à la suite du dernier patch\n"
+"    appliqué. Si aucun patch n'a encore été appliqué, le patch sera\n"
+"    ajouté en tête de série.\n"
+"\n"
+"    Le patch portera le même nom que le fichier dont il provient,\n"
+"    à moins qu'un autre nom ne soit spécifié à l'aide de -n/--name.\n"
+"\n"
+"    Vous pouvez enregistrer un patch déjà présent dans le répertoire\n"
+"    de patchs à l'aide de l'option -e/--existing.\n"
+"\n"
+"    Avec -f/--force, un patch déjà présent du même nom sera écrasé.\n"
+"\n"
+"    Un \"changeset\" existant peut-être placé sous le contrôle de mq\n"
+"    à l'aide de -r/--rev (par exemple qimport --rev tip -n patch\n"
+"    placera la révision tip sous le contrôle de mq).\n"
+"    Avec -g/--git, les patchs importés à l'aide de --rev seront\n"
+"    enregistrés au format \"git diff\". La section \"diffs\" de\n"
+"    l'aide explique l'importance de cette option pour la\n"
+"    préservation des informations de copie/renommage et des\n"
+"    modifications de permissions.\n"
+"\n"
+"    Pour importer un patch depuis l'entrée standard, utilisez -\n"
+"    comme nom de fichier. Il sera alors nécessaire de nommer le\n"
+"    patch à l'aide de l'option --name.\n"
+"    "
+
+msgid ""
+"init a new queue repository\n"
+"\n"
+"    The queue repository is unversioned by default. If\n"
+"    -c/--create-repo is specified, qinit will create a separate nested\n"
+"    repository for patches (qinit -c may also be run later to convert\n"
+"    an unversioned patch repository into a versioned one). You can use\n"
+"    qcommit to commit changes to this queue repository."
+msgstr ""
+
+msgid ""
+"clone main and patch repository at same time\n"
+"\n"
+"    If source is local, destination will have no patches applied. If\n"
+"    source is remote, this command can not check if patches are\n"
+"    applied in source, so cannot guarantee that patches are not\n"
+"    applied in destination. If you clone remote repository, be sure\n"
+"    before that it has no patches applied.\n"
+"\n"
+"    Source patch repository is looked for in <src>/.hg/patches by\n"
+"    default. Use -p <url> to change.\n"
+"\n"
+"    The patch directory must be a nested Mercurial repository, as\n"
+"    would be created by qinit -c.\n"
+"    "
+msgstr ""
+"clône simultanément le dépôt principal et le dépôt des patchs\n"
+"\n"
+"    Si la source est locale, aucun patch ne sera appliqué sur la\n"
+"    cible. En revanche, si la source est distante, cette commande\n"
+"    n'est pas en mesure de vérifier si des patchs y ont été\n"
+"    empilés, et par conséquent ne peut garantir qu'aucun patch\n"
+"    ne sera appliqué au dessus de la cible. Autrement dit, si vous\n"
+"    clônez un dépôt distant, assurez-vous auparavant qu'il n'ait\n"
+"    aucun patch d'appliqué.\n"
+"\n"
+"    Le dépôt de patchs est recherché dans <src>/.hg/patches par\n"
+"    défaut, à moins que -p <url> ne soit utilisé pour spécifier\n"
+"    un chemin différent.\n"
+"\n"
+"    Le répertoire de patchs doit être contenu dans le dépôt\n"
+"    principal, tel que créé par qinit -c.\n"
+"    "
+
+msgid "versioned patch repository not found (see qinit -c)"
+msgstr "aucun dépôt de patch trouvé (voir qinit -c)"
+
+msgid "cloning main repository\n"
+msgstr "clônage du dépôt principal\n"
+
+msgid "cloning patch repository\n"
+msgstr "clônage du dépôt des patchs\n"
+
+msgid "stripping applied patches from destination repository\n"
+msgstr "enlèvement des patchs appliqués du dépôt cible\n"
+
+msgid "updating destination repository\n"
+msgstr "mise à jour du dépôt cible\n"
+
+msgid "commit changes in the queue repository"
+msgstr ""
+
+msgid "print the entire series file"
+msgstr "afficher la liste complète de patchs (fichier \"series\")"
+
+msgid "print the name of the current patch"
+msgstr "affiche le nom du dernier patch appliqué"
+
+msgid "print the name of the next patch"
+msgstr "affiche le nom du prochain patch"
+
+msgid "all patches applied\n"
+msgstr "tous les patchs ont été appliqués\n"
+
+msgid "print the name of the previous patch"
+msgstr "affiche le nom du patch précédent"
+
+msgid "only one patch applied\n"
+msgstr "un seul patch d'appliqué\n"
+
+msgid ""
+"create a new patch\n"
+"\n"
+"    qnew creates a new patch on top of the currently-applied patch (if\n"
+"    any). It will refuse to run if there are any outstanding changes\n"
+"    unless -f/--force is specified, in which case the patch will be\n"
+"    initialized with them. You may also use -I/--include,\n"
+"    -X/--exclude, and/or a list of files after the patch name to add\n"
+"    only changes to matching files to the new patch, leaving the rest\n"
+"    as uncommitted modifications.\n"
+"\n"
+"    -u/--user and -d/--date can be used to set the (given) user and\n"
+"    date, respectively. -U/--currentuser and -D/--currentdate set user\n"
+"    to current user and date to current date.\n"
+"\n"
+"    -e/--edit, -m/--message or -l/--logfile set the patch header as\n"
+"    well as the commit message. If none is specified, the header is\n"
+"    empty and the commit message is '[mq]: PATCH'.\n"
+"\n"
+"    Use the -g/--git option to keep the patch in the git extended diff\n"
+"    format. Read the diffs help topic for more information on why this\n"
+"    is important for preserving permission changes and copy/rename\n"
+"    information.\n"
+"    "
+msgstr ""
+"crée un nouveau patch\n"
+"\n"
+"    qnew crée un nouveau patch au-dessus du dernier patch\n"
+"    actuellement appliqué, le cas échéant. Si le répertoire\n"
+"    de travail comporte des modifications non enregistrées,\n"
+"    la création du patch sera refusée, à moins d'utiliser\n"
+"    -f/--force auquel cas le contenu du nouveau patch sera\n"
+"    initialisé avec ces modifications. Il est également\n"
+"    possible d'utiliser -I/--include, -X/--exclude ou une liste\n"
+"    de noms de fichiers après le nom du patch, afin de n'inclure\n"
+"    que les changements des fichiers concernés, et laisser le\n"
+"    reste dans le répertoire de travail en tant que modifications\n"
+"    non enregistrées.\n"
+"\n"
+"    Le nom d'utilisateur et la date peuvent être spécifiés à\n"
+"    l'aide de -u/--user et -d/--date respectivement.\n"
+"    -U/--currentuser et -D/--currentdate positionnent le nom\n"
+"    d'utilisateur et la date à leur valeur actuelle.\n"
+"\n"
+"    L'en-tête du patch et le message de \"commit\" peuvent être\n"
+"    spécifiés à l'aide de -e/--edit, -m/--message ou -l/--logfile.\n"
+"    Si aucune de ces options n'est utilisée, l'en-tête restera\n"
+"    vierge et le message de \"commit\" sera '[mq]: PATCH'.\n"
+"\n"
+"    Utilisez -g/--git pour garder le patch au format étendu de\n"
+"    \"git\". La section \"diffs\" de l'aide explique l'importance\n"
+"    de cette option pour la préservation des informations de\n"
+"    copie/renommage et des modifications de permissions.\n"
+"    "
+
+msgid ""
+"update the current patch\n"
+"\n"
+"    If any file patterns are provided, the refreshed patch will\n"
+"    contain only the modifications that match those patterns; the\n"
+"    remaining modifications will remain in the working directory.\n"
+"\n"
+"    If -s/--short is specified, files currently included in the patch\n"
+"    will be refreshed just like matched files and remain in the patch.\n"
+"\n"
+"    hg add/remove/copy/rename work as usual, though you might want to\n"
+"    use git-style patches (-g/--git or [diff] git=1) to track copies\n"
+"    and renames. See the diffs help topic for more information on the\n"
+"    git diff format.\n"
+"    "
+msgstr ""
+
+msgid "option \"-e\" incompatible with \"-m\" or \"-l\""
+msgstr "l'option \"-e\" est incompatible avec \"-m\" ou \"-l\""
+
+msgid ""
+"diff of the current patch and subsequent modifications\n"
+"\n"
+"    Shows a diff which includes the current patch as well as any\n"
+"    changes which have been made in the working directory since the\n"
+"    last refresh (thus showing what the current patch would become\n"
+"    after a qrefresh).\n"
+"\n"
+"    Use 'hg diff' if you only want to see the changes made since the\n"
+"    last qrefresh, or 'hg export qtip' if you want to see changes made\n"
+"    by the current patch without including changes made since the\n"
+"    qrefresh.\n"
+"    "
+msgstr ""
+
+msgid ""
+"fold the named patches into the current patch\n"
+"\n"
+"    Patches must not yet be applied. Each patch will be successively\n"
+"    applied to the current patch in the order given. If all the\n"
+"    patches apply successfully, the current patch will be refreshed\n"
+"    with the new cumulative patch, and the folded patches will be\n"
+"    deleted. With -k/--keep, the folded patch files will not be\n"
+"    removed afterwards.\n"
+"\n"
+"    The header for each folded patch will be concatenated with the\n"
+"    current patch header, separated by a line of '* * *'."
+msgstr ""
+
+msgid "qfold requires at least one patch name"
+msgstr "qfold a besoin au minimum du nom d'un patch"
+
+msgid "No patches applied"
+msgstr "Aucun patch d'appliqué"
+
+#, python-format
+msgid "Skipping already folded patch %s"
+msgstr ""
+
+#, python-format
+msgid "qfold cannot fold already applied patch %s"
+msgstr ""
+
+#, python-format
+msgid "Error folding patch %s"
+msgstr ""
+
+msgid "push or pop patches until named patch is at top of stack"
+msgstr "empile ou dépile les patchs jusqu'à arriver au patch indiqué"
+
+msgid ""
+"set or print guards for a patch\n"
+"\n"
+"    Guards control whether a patch can be pushed. A patch with no\n"
+"    guards is always pushed. A patch with a positive guard (\"+foo\") is\n"
+"    pushed only if the qselect command has activated it. A patch with\n"
+"    a negative guard (\"-foo\") is never pushed if the qselect command\n"
+"    has activated it.\n"
+"\n"
+"    With no arguments, print the currently active guards.\n"
+"    With arguments, set guards for the named patch.\n"
+"    NOTE: Specifying negative guards now requires '--'.\n"
+"\n"
+"    To set guards on another patch:\n"
+"      hg qguard -- other.patch +2.6.17 -stable\n"
+"    "
+msgstr ""
+
+msgid "cannot mix -l/--list with options or arguments"
+msgstr "impossible d'utiliser -l/--list avec d'autres options ou paramètres"
+
+msgid "no patch to work with"
+msgstr "aucun patch avec lequel travailler"
+
+#, python-format
+msgid "no patch named %s"
+msgstr "aucun patch du nom de %s"
+
+msgid "print the header of the topmost or specified patch"
+msgstr "affiche l'en-tête du dernier patch appliqué"
+
+msgid ""
+"push the next patch onto the stack\n"
+"\n"
+"    When -f/--force is applied, all local changes in patched files\n"
+"    will be lost.\n"
+"    "
+msgstr ""
+"applique le patch suivant sur la pile\n"
+"\n"
+"    Si -f/--force est utilisé, tout changement local dans les\n"
+"    fichiers concernés par le patch seront perdus.\n"
+"    "
+
+msgid "no saved queues found, please use -n\n"
+msgstr "aucune ssauvegarde de pile de patchs trouvée, veuillez utiliser -n\n"
+
+#, python-format
+msgid "merging with queue at: %s\n"
+msgstr "fusion avec la pile située à %s\n"
+
+msgid ""
+"pop the current patch off the stack\n"
+"\n"
+"    By default, pops off the top of the patch stack. If given a patch\n"
+"    name, keeps popping off patches until the named patch is at the\n"
+"    top of the stack.\n"
+"    "
+msgstr ""
+"dépile le dernier patch appliqué\n"
+"\n"
+"    Par défaut, le dernier patch appliqué est ôté de la pile. Si\n"
+"    un nom de patch est fourni, les patchs seront dépilés en\n"
+"    séquence jusqu'à arriver au patch demandé.\n"
+"    "
+
+#, python-format
+msgid "using patch queue: %s\n"
+msgstr "utilisation de la pile de patchs %s\n"
+
+msgid ""
+"rename a patch\n"
+"\n"
+"    With one argument, renames the current patch to PATCH1.\n"
+"    With two arguments, renames PATCH1 to PATCH2."
+msgstr ""
+"renomme un patch\n"
+"\n"
+"    Avec un seul argument, le patch actuel est renommé PATCH1.\n"
+"    Avec deux arguments, PATCH1 devient PATCH2."
+
+#, python-format
+msgid "%s already exists"
+msgstr "%s existe déjà"
+
+#, python-format
+msgid "A patch named %s already exists in the series file"
+msgstr "Il existe déjà un patch du nom de %s (dans le fichier \"series\")"
+
+msgid "restore the queue state saved by a revision"
+msgstr "rétablissement d'un état sauvegardé de la pile"
+
+msgid "save current queue state"
+msgstr "sauvegarde de l'étatt de la pile de patchs"
+
+#, python-format
+msgid "destination %s exists and is not a directory"
+msgstr "%s: la cible existe et n'est pas un répertoire"
+
+#, python-format
+msgid "destination %s exists, use -f to force"
+msgstr "%s: la cible existe, utilisez -f pour forcer l'action"
+
+#, python-format
+msgid "copy %s to %s\n"
+msgstr "copie de %s vers %s\n"
+
+msgid ""
+"strip a revision and all its descendants from the repository\n"
+"\n"
+"    If one of the working directory's parent revisions is stripped, the\n"
+"    working directory will be updated to the parent of the stripped\n"
+"    revision.\n"
+"    "
+msgstr ""
+
+msgid ""
+"set or print guarded patches to push\n"
+"\n"
+"    Use the qguard command to set or print guards on patch, then use\n"
+"    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"
+"\n"
+"        qguard foo.patch -stable    (negative guard)\n"
+"        qguard bar.patch +stable    (positive guard)\n"
+"        qselect stable\n"
+"\n"
+"    This activates the \"stable\" guard. mq will skip foo.patch (because\n"
+"    it has a negative match) but push bar.patch (because it has a\n"
+"    positive match).\n"
+"\n"
+"    With no arguments, prints the currently active guards.\n"
+"    With one argument, sets the active guard.\n"
+"\n"
+"    Use -n/--none to deactivate guards (no other arguments needed).\n"
+"    When no guards are active, patches with positive guards are\n"
+"    skipped and patches with negative guards are pushed.\n"
+"\n"
+"    qselect can change the guards on applied patches. It does not pop\n"
+"    guarded patches by default. Use --pop to pop back to the last\n"
+"    applied patch that is not guarded. Use --reapply (which implies\n"
+"    --pop) to push back to the current patch afterwards, but skip\n"
+"    guarded patches.\n"
+"\n"
+"    Use -s/--series to print a list of all guards in the series file\n"
+"    (no other arguments needed). Use -v for more information."
+msgstr ""
+
+msgid "guards deactivated\n"
+msgstr ""
+
+#, python-format
+msgid "number of unguarded, unapplied patches has changed from %d to %d\n"
+msgstr ""
+
+#, python-format
+msgid "number of guarded, applied patches has changed from %d to %d\n"
+msgstr ""
+
+msgid "guards in series file:\n"
+msgstr ""
+
+msgid "no guards in series file\n"
+msgstr ""
+
+msgid "active guards:\n"
+msgstr ""
+
+msgid "no active guards\n"
+msgstr ""
+
+msgid "popping guarded patches\n"
+msgstr ""
+
+msgid "reapplying unguarded patches\n"
+msgstr ""
+
+msgid ""
+"move applied patches into repository history\n"
+"\n"
+"    Finishes the specified revisions (corresponding to applied\n"
+"    patches) by moving them out of mq control into regular repository\n"
+"    history.\n"
+"\n"
+"    Accepts a revision range or the -a/--applied option. If --applied\n"
+"    is specified, all applied mq revisions are removed from mq\n"
+"    control. Otherwise, the given revisions must be at the base of the\n"
+"    stack of applied patches.\n"
+"\n"
+"    This can be especially useful if your changes have been applied to\n"
+"    an upstream repository, or if you are about to push your changes\n"
+"    to upstream.\n"
+"    "
+msgstr ""
+"déplacement des patchs vers l'historique du dépôt\n"
+"\n"
+"    Achève le développement des révisions spécifiées (qui doivent\n"
+"    correspondre à des patch appliqués) en les retirant du contrôle\n"
+"    de mq, pour les transformer en \"changeset\" ordinaires dans\n"
+"    l'historique du dépôt.\n"
+"\n"
+"    Il est possible d'utiliser l'option -a/--applied, ou de fournir\n"
+"    une plage de révisions. Avec --applied, tous les patchs\n"
+"    appliqués seront retirés du contrôle de mq. Autrement, les\n"
+"    révisions fournies doivent être situées à la base de la pile de\n"
+"    patchs appliqués.\n"
+"\n"
+"    Ceci est utile en particulier si vos changements ont été adoptés\n"
+"    dans un dépôt amont, ou si vous vous apprêtez à les y envoyer.\n"
+"    "
+
+msgid "no revisions specified"
+msgstr "aucune révision spécifiée"
+
+msgid "cannot commit over an applied mq patch"
+msgstr ""
+
+msgid "source has mq patches applied"
+msgstr ""
+
+#, python-format
+msgid "mq status file refers to unknown node %s\n"
+msgstr "le fichier d'état de mq fait référence à un nœud inconnu : %s\n"
+
+#, python-format
+msgid "Tag %s overrides mq patch of the same name\n"
+msgstr ""
+
+msgid "cannot import over an applied patch"
+msgstr "impossible d'importer au-dessus d'un patch appliqué"
+
+msgid "print first line of patch header"
+msgstr "affiche la première ligne de l'en-tête d'un patch"
+
+msgid "hg qapplied [-s] [PATCH]"
+msgstr "hg qapplied [-s] [PATCH]"
+
+msgid "use pull protocol to copy metadata"
+msgstr ""
+
+msgid "do not update the new working directories"
+msgstr "ne pas mettre à jour le répertoire de travail"
+
+msgid "use uncompressed transfer (fast over LAN)"
+msgstr "transférer sans compression (rapide sur un réseau local)"
+
+msgid "location of source patch repository"
+msgstr "emplacement du dépôt de patchs"
+
+msgid "hg qclone [OPTION]... SOURCE [DEST]"
+msgstr "hg qclone [OPTION]... SOURCE [DEST]"
+
+msgid "hg qcommit [OPTION]... [FILE]..."
+msgstr "hg qcommit [OPTION]... [FICHIER]..."
+
+msgid "hg qdiff [OPTION]... [FILE]..."
+msgstr "hg qdiff [OPTION]... [FICHIER]..."
+
+msgid "keep patch file"
+msgstr "garder le fichier du patch"
+
+msgid "stop managing a revision (DEPRECATED)"
+msgstr "arrêter de gérer une révision"
+
+msgid "hg qdelete [-k] [-r REV]... [PATCH]..."
+msgstr "hg qdelete [-k] [-r REV]... [PATCH]..."
+
+msgid "edit patch header"
+msgstr "éditer l'en-tête du patch"
+
+msgid "keep folded patch files"
+msgstr ""
+
+msgid "hg qfold [-e] [-k] [-m TEXT] [-l FILE] PATCH..."
+msgstr "hg qfold [-e] [-k] [-m TEXTE] [-l FICHIER] PATCH..."
+
+msgid "overwrite any local changes"
+msgstr "écraser tout modification locale"
+
+msgid "hg qgoto [OPTION]... PATCH"
+msgstr "hg qgoto [OPTION]... PATCH"
+
+msgid "list all patches and guards"
+msgstr ""
+
+msgid "drop all guards"
+msgstr ""
+
+msgid "hg qguard [-l] [-n] -- [PATCH] [+GUARD]... [-GUARD]..."
+msgstr ""
+
+msgid "hg qheader [PATCH]"
+msgstr "hg qheader [PATCH]"
+
+msgid "import file in patch directory"
+msgstr "importer un fichier résidant dans le répertoire de patchs"
+
+msgid "name of patch file"
+msgstr "nom du fichier de patch"
+
+msgid "overwrite existing files"
+msgstr "écraser les fichiers existant"
+
+msgid "place existing revisions under mq control"
+msgstr "placer des révisions existantes sous le contrôle de mq"
+
+msgid "use git extended diff format"
+msgstr "utiliser le format de patch étendu de git"
+
+msgid "qpush after importing"
+msgstr "qpush après l'importation"
+
+msgid "hg qimport [-e] [-n NAME] [-f] [-g] [-P] [-r REV]... FILE..."
+msgstr "hg qimport [-e] [-n NOM] [-f] [-g] [-P] [-r REV]... FICHIER..."
+
+msgid "create queue repository"
+msgstr "crée un dépôt de patchs"
+
+msgid "hg qinit [-c]"
+msgstr "hg qinit [-c]"
+
+msgid "import uncommitted changes into patch"
+msgstr "importer les modifications locales dans le patch"
+
+msgid "add \"From: <current user>\" to patch"
+msgstr "ajout de \"From: <utilisateur actuel>\" au patch"
+
+msgid "add \"From: <given user>\" to patch"
+msgstr "ajout de \"From: <utilisateur spécifié>\" au patch"
+
+msgid "add \"Date: <current date>\" to patch"
+msgstr "ajout de \"Date: <date actuelle>\" au patch"
+
+msgid "add \"Date: <given date>\" to patch"
+msgstr "ajout de \"Date: <date spécifiée>\" au patch"
+
+msgid "hg qnew [-e] [-m TEXT] [-l FILE] [-f] PATCH [FILE]..."
+msgstr "hg qnew [-e] [-m TEXTE] [-l FICHIER] [-f] PATCH [FICHIER]..."
+
+msgid "hg qnext [-s]"
+msgstr "hg qnext [-s]"
+
+msgid "hg qprev [-s]"
+msgstr "hg qprev [-s]"
+
+msgid "pop all patches"
+msgstr "dépiler tous les patchs"
+
+msgid "queue name to pop"
+msgstr "nom de la pile à dépiler"
+
+msgid "forget any local changes"
+msgstr "oublier toute modification locale"
+
+msgid "hg qpop [-a] [-n NAME] [-f] [PATCH | INDEX]"
+msgstr "hg qpop [-a] [-n NOM] [-f] [PATCH | INDEX]"
+
+msgid "apply if the patch has rejects"
+msgstr ""
+
+msgid "list patch name in commit text"
+msgstr ""
+
+msgid "apply all patches"
+msgstr "appliquer tous les patchs"
+
+msgid "merge from another queue"
+msgstr "fusionner avec une autre pile de patchs"
+
+msgid "merge queue name"
+msgstr "nom de la pile à fusionner"
+
+msgid "hg qpush [-f] [-l] [-a] [-m] [-n NAME] [PATCH | INDEX]"
+msgstr "hg qpush [-f] [-l] [-a] [-m] [-n NOM] [PATCH | INDEX]"
+
+msgid "refresh only files already in the patch and specified files"
+msgstr ""
+"ne rafraîchir que les fichiers déjà présent dans le patch et ceux "
+"explicitement spécifiés"
+
+msgid "add/update \"From: <current user>\" in patch"
+msgstr "ajouter/mettre à jour \"From: <utilisateur actuel>\" dans le patch"
+
+msgid "add/update \"From: <given user>\" in patch"
+msgstr "ajouter/mettre à jour \"From: <utilisateur spécifié>\" dans le patch"
+
+msgid "update \"Date: <current date>\" in patch (if present)"
+msgstr "mettre à jour \"Date: <date actuelle>\" dans le patch (si présente)"
+
+msgid "update \"Date: <given date>\" in patch (if present)"
+msgstr "mettre à jour \"Date: <date spécifiée>\" dans le patch (si présente)"
+
+msgid "hg qrefresh [-I] [-X] [-e] [-m TEXT] [-l FILE] [-s] [FILE]..."
+msgstr "hg qrefresh [-I] [-X] [-e] [-m TEXTE] [-l FICHIER] [-s] [FICHIER]..."
+
+msgid "hg qrename PATCH1 [PATCH2]"
+msgstr "hg qrename PATCH1 [PATCH2]"
+
+msgid "delete save entry"
+msgstr ""
+
+msgid "update queue working directory"
+msgstr ""
+
+msgid "hg qrestore [-d] [-u] REV"
+msgstr ""
+
+msgid "copy patch directory"
+msgstr ""
+
+msgid "copy directory name"
+msgstr ""
+
+msgid "clear queue status file"
+msgstr ""
+
+msgid "force copy"
+msgstr ""
+
+msgid "hg qsave [-m TEXT] [-l FILE] [-c] [-n NAME] [-e] [-f]"
+msgstr "hg qsave [-m TEXT] [-l FILE] [-c] [-n NOM] [-e] [-f]"
+
+msgid "disable all guards"
+msgstr ""
+
+msgid "list all guards in series file"
+msgstr ""
+
+msgid "pop to before first guarded applied patch"
+msgstr ""
+
+msgid "pop, then reapply patches"
+msgstr "dépiler, puis appliquer à nouveau les patchs"
+
+msgid "hg qselect [OPTION]... [GUARD]..."
+msgstr ""
+
+msgid "print patches not in series"
+msgstr "afficher les patchs absents de la série"
+
+msgid "hg qseries [-ms]"
+msgstr "hg qseries [-ms]"
+
+msgid "force removal with local changes"
+msgstr "forcer la suppression malgré les modifications locales"
+
+msgid "bundle unrelated changesets"
+msgstr ""
+
+msgid "no backups"
+msgstr ""
+
+msgid "hg strip [-f] [-b] [-n] REV"
+msgstr "hg strip [-f] [-b] [-n] REV"
+
+msgid "hg qtop [-s]"
+msgstr "hg qtop [-s]"
+
+msgid "hg qunapplied [-s] [PATCH]"
+msgstr "hg qunapplied [-s] [PATCH]"
+
+msgid "finish all applied changesets"
+msgstr ""
+
+msgid "hg qfinish [-a] [REV]..."
+msgstr "hg qfinish [-a] [REV]..."
+
+msgid ""
+"hooks for sending email notifications at commit/push time\n"
+"\n"
+"Subscriptions can be managed through hgrc. Default mode is to print\n"
+"messages to stdout, for testing and configuring.\n"
+"\n"
+"To use, configure notify extension and enable in hgrc like this:\n"
+"\n"
+"   [extensions]\n"
+"   hgext.notify =\n"
+"\n"
+"   [hooks]\n"
+"   # one email for each incoming changeset\n"
+"   incoming.notify = python:hgext.notify.hook\n"
+"   # batch emails when many changesets incoming at one time\n"
+"   changegroup.notify = python:hgext.notify.hook\n"
+"\n"
+"   [notify]\n"
+"   # config items go in here\n"
+"\n"
+" config items:\n"
+"\n"
+" REQUIRED:\n"
+"   config = /path/to/file # file containing subscriptions\n"
+"\n"
+" OPTIONAL:\n"
+"   test = True            # print messages to stdout for testing\n"
+"   strip = 3              # number of slashes to strip for url paths\n"
+"   domain = example.com   # domain to use if committer missing domain\n"
+"   style = ...            # style file to use when formatting email\n"
+"   template = ...         # template to use when formatting email\n"
+"   incoming = ...         # template to use when run as incoming hook\n"
+"   changegroup = ...      # template when run as changegroup hook\n"
+"   maxdiff = 300          # max lines of diffs to include (0=none, -1=all)\n"
+"   maxsubject = 67        # truncate subject line longer than this\n"
+"   diffstat = True        # add a diffstat before the diff content\n"
+"   sources = serve        # notify if source of incoming changes in this "
+"list\n"
+"                          # (serve == ssh or http, push, pull, bundle)\n"
+"   [email]\n"
+"   from = user@host.com   # email address to send as if none given\n"
+"   [web]\n"
+"   baseurl = http://hgserver/... # root of hg web site for browsing commits\n"
+"\n"
+" notify config file has same format as regular hgrc. it has two\n"
+" sections so you can express subscriptions in whatever way is handier\n"
+" for you.\n"
+"\n"
+"   [usersubs]\n"
+"   # key is subscriber email, value is \",\"-separated list of glob "
+"patterns\n"
+"   user@host = pattern\n"
+"\n"
+"   [reposubs]\n"
+"   # key is glob pattern, value is \",\"-separated list of subscriber "
+"emails\n"
+"   pattern = user@host\n"
+"\n"
+" glob patterns are matched against path to repository root.\n"
+"\n"
+" if you like, you can put notify config file in repository that users\n"
+" can push changes to, they can manage their own subscriptions."
+msgstr ""
+
+#, python-format
+msgid "%s: %d new changesets"
+msgstr ""
+
+#, python-format
+msgid "notify: sending %d subscribers %d changes\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"\n"
+"diffs (truncated from %d to %d lines):\n"
+"\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"\n"
+"diffs (%d lines):\n"
+"\n"
+msgstr ""
+
+#, python-format
+msgid "notify: no subscribers to repository %s\n"
+msgstr ""
+
+#, python-format
+msgid "notify: changes have source \"%s\" - skipping\n"
+msgstr ""
+
+msgid ""
+"browse command output with an external pager\n"
+"\n"
+"To set the pager that should be used, set the application variable:\n"
+"\n"
+"  [pager]\n"
+"  pager = LESS='FSRX' less\n"
+"\n"
+"If no pager is set, the pager extensions uses the environment variable\n"
+"$PAGER. If neither pager.pager, nor $PAGER is set, no pager is used.\n"
+"\n"
+"If you notice \"BROKEN PIPE\" error messages, you can disable them by\n"
+"setting:\n"
+"\n"
+"  [pager]\n"
+"  quiet = True\n"
+"\n"
+"You can disable the pager for certain commands by adding them to the\n"
+"pager.ignore list:\n"
+"\n"
+"  [pager]\n"
+"  ignore = version, help, update\n"
+"\n"
+"You can also enable the pager only for certain commands using\n"
+"pager.attend:\n"
+"\n"
+"  [pager]\n"
+"  attend = log\n"
+"\n"
+"If pager.attend is present, pager.ignore will be ignored.\n"
+"\n"
+"To ignore global commands like \"hg version\" or \"hg help\", you have to\n"
+"specify them in the global .hgrc\n"
+msgstr ""
+
+# première ligne trop longue -> traduction abrégée (à retraduire quand hg
+# sera capable de replier automatiquement la première ligne d'aide)
+msgid ""
+"interpret suffixes to refer to ancestor revisions\n"
+"\n"
+"This extension allows you to use git-style suffixes to refer to the\n"
+"ancestors of a specific revision.\n"
+"\n"
+"For example, if you can refer to a revision as \"foo\", then:\n"
+"\n"
+"- foo^N = Nth parent of foo\n"
+"  foo^0 = foo\n"
+"  foo^1 = first parent of foo\n"
+"  foo^2 = second parent of foo\n"
+"  foo^  = foo^1\n"
+"\n"
+"- foo~N = Nth first grandparent of foo\n"
+"  foo~0 = foo\n"
+"  foo~1 = foo^1 = foo^ = first parent of foo\n"
+"  foo~2 = foo^1^1 = foo^^ = first parent of first parent of foo\n"
+msgstr ""
+"suffixes faisant référence à des révisions antérieures\n"
+"\n"
+"Cette extension permet d'utiliser des suffixes à la mode git pour\n"
+"faire référence aux ancêtres d'une révision donnée.\n"
+"\n"
+"Par exemple, si \"foo\" désigne une révision, alors :\n"
+"\n"
+"- foo^N = Nième parent de foo\n"
+"  foo^0 = foo\n"
+"  foo^1 = premier parent de foo\n"
+"  foo^2 = second parent de foo\n"
+"  foo^  = foo^1\n"
+"\n"
+"- foo~N = Nième premier grand-parent de foo\n"
+"  foo~0 = foo\n"
+"  foo~1 = foo^1 = foo^ = premier parent de foo\n"
+"  foo~2 = foo^1^1 = foo^^ = premier parent du premier parent de foo\n"
+
+# première ligne trop longue -> traduction abrégée (à retraduire quand hg
+# sera capable de replier automatiquement la première ligne d'aide)
+msgid ""
+"command to send changesets as (a series of) patch emails\n"
+"\n"
+"The series is started off with a \"[PATCH 0 of N]\" introduction, which\n"
+"describes the series as a whole.\n"
+"\n"
+"Each patch email has a Subject line of \"[PATCH M of N] ...\", using the\n"
+"first line of the changeset description as the subject text. The\n"
+"message contains two or three body parts:\n"
+"\n"
+"  The changeset description.\n"
+"\n"
+"  [Optional] The result of running diffstat on the patch.\n"
+"\n"
+"  The patch itself, as generated by \"hg export\".\n"
+"\n"
+"Each message refers to the first in the series using the In-Reply-To\n"
+"and References headers, so they will show up as a sequence in threaded\n"
+"mail and news readers, and in mail archives.\n"
+"\n"
+"With the -d/--diffstat option, you will be prompted for each changeset\n"
+"with a diffstat summary and the changeset summary, so you can be sure\n"
+"you are sending the right changes.\n"
+"\n"
+"To configure other defaults, add a section like this to your hgrc\n"
+"file:\n"
+"\n"
+"  [email]\n"
+"  from = My Name <my@email>\n"
+"  to = recipient1, recipient2, ...\n"
+"  cc = cc1, cc2, ...\n"
+"  bcc = bcc1, bcc2, ...\n"
+"\n"
+"Then you can use the \"hg email\" command to mail a series of changesets\n"
+"as a patchbomb.\n"
+"\n"
+"To avoid sending patches prematurely, it is a good idea to first run\n"
+"the \"email\" command with the \"-n\" option (test only). You will be\n"
+"prompted for an email recipient address, a subject and an introductory\n"
+"message describing the patches of your patchbomb. Then when all is\n"
+"done, patchbomb messages are displayed. If the PAGER environment\n"
+"variable is set, your pager will be fired up once for each patchbomb\n"
+"message, so you can verify everything is alright.\n"
+"\n"
+"The -m/--mbox option is also very useful. Instead of previewing each\n"
+"patchbomb message in a pager or sending the messages directly, it will\n"
+"create a UNIX mailbox file with the patch emails. This mailbox file\n"
+"can be previewed with any mail user agent which supports UNIX mbox\n"
+"files, e.g. with mutt:\n"
+"\n"
+"  % mutt -R -f mbox\n"
+"\n"
+"When you are previewing the patchbomb messages, you can use `formail'\n"
+"(a utility that is commonly installed as part of the procmail\n"
+"package), to send each message out:\n"
+"\n"
+"  % formail -s sendmail -bm -t < mbox\n"
+"\n"
+"That should be all. Now your patchbomb is on its way out.\n"
+"\n"
+"You can also either configure the method option in the email section\n"
+"to be a sendmail compatible mailer or fill out the [smtp] section so\n"
+"that the patchbomb extension can automatically send patchbombs\n"
+"directly from the commandline. See the [email] and [smtp] sections in\n"
+"hgrc(5) for details."
+msgstr ""
+"envoi d'une série de \"changesets\" par courrier électronique\n"
+"\n"
+"La série débute par un message d'introduction \"[PATCH 0 of N]\" la\n"
+"décrivant dans son ensemble.\n"
+"\n"
+"Ensuite, pour chaque patch est créé un courriel dont le sujet est\n"
+"la première ligne du commentaire du \"changeset\", préfixée par\n"
+"\"[PATCH M of N] \". Le corps du message comporte deux ou trois\n"
+"parties :\n"
+"\n"
+"  La description du \"changeset\".\n"
+"\n"
+"  Optionnellement, un résumé des modifications généré par le\n"
+"  programme diffstat.\n"
+"\n"
+"  Le patch proprement dit, tel que généré par \"hg export\".\n"
+"\n"
+"Chaque message fait référence au premier de la série (à l'aide\n"
+"des en-têtes de message In-Reply-To et References) de manière à\n"
+"apparaître comme un fil de discussion dans les lecteurs de courrier\n"
+"électronique et de nouvelles, ainsi que dans les archives de\n"
+"messagerie.\n"
+"\n"
+"Avec l'option -d/--diffstat, il vous sera demandé pour chaque\n"
+"\"changeset\" d'en confirmer l'envoi après avoir vu un résumé des\n"
+"modifications (par diffstat) et le commentaire associé ; ceci afin\n"
+"d'être certain de bien envoyer les bonnes modifications.\n"
+"\n"
+"Pour configurer les valeurs par défaut d'autres options d'envoi,\n"
+"ajoutez à votre fichier hgrc une section telle ci-dessous :\n"
+"\n"
+"  [email]\n"
+"  from = Mon Nom <mon@adresse_de_courriel>\n"
+"  to = destinataire1, destinataire2, ...\n"
+"  cc = cc1, cc2, ...\n"
+"  bcc = bcc1, bcc2, ...\n"
+"\n"
+"Après cela il vous sera possible d'utiliser la commande \"hg email\"\n"
+"pour envoyer par courrier électronique une série de \"changesets\".\n"
+"\n"
+"Pour éviter d'envoyer des patchs prématurément, utiliser tout d'abord\n"
+"l'option \"-n\" (simple test) s'avère être une bonne idée. Il vous\n"
+"sera demandé l'adresse du destinataire ainsi qu'un sujet et un\n"
+"message d'introduction pour la série de patchs. Lorsque tout est\n"
+"prêt, les messages seront affichés. Si la variable d'environnement\n"
+"PAGER a été définie, le programme qu'elle indique sera utilisé pour\n"
+"l'affichage chaque message, permettant de vérifier que tout est\n"
+"correct.\n"
+"\n"
+"L'option -m/--mbox est également très utile : au lieu que les\n"
+"messages soient affichés ou envoyés directement, ils seront écrits\n"
+"dans un fichier (au format de boîte aux lettres UNIX). Cette boîte\n"
+"aux lettres peut alors être consultée pour vérification par n'importe\n"
+"quel lecteur de courrier électronique comprenant le format UNIX mbox,\n"
+"comme par exemple mutt :\n"
+"\n"
+"  % mutt -R -f mbox\n"
+"\n"
+"Lors de votre vérification, vous pouvez envoyer chaque message en\n"
+"utilisant formail (un outil généralement installé en même temps que\n"
+"procmail) :\n"
+"\n"
+"  % formail -s sendmail -bm -t < mbox\n"
+"\n"
+"Et voilà, vos patchs sont en route vers leur destination.\n"
+"\n"
+"Vous pouvez aussi configurer l'option \"method\" de la section\n"
+"[email] pour utiliser un programme compatible avec sendmail, ou\n"
+"alors remplir la section [smtp] de telle sorte que l'extension\n"
+"patchbomb puisse automatiquement envoyer les messages depuis la\n"
+"ligne de commande. Consulter les sections [email] et [smtp] dans la\n"
+"page de manuel hgrc(5) pour plus de détails."
+
+msgid "Please enter a valid value.\n"
+msgstr "Veuillez fournir une valeur valide.\n"
+
+msgid "does the diffstat above look okay? "
+msgstr "le résumé des modifications ci-dessus semble-t-il correct ?"
+
+msgid "diffstat rejected"
+msgstr "résumé des modifications rejeté"
+
+msgid ""
+"send changesets by email\n"
+"\n"
+"    By default, diffs are sent in the format generated by hg export,\n"
+"    one per message. The series starts with a \"[PATCH 0 of N]\"\n"
+"    introduction, which describes the series as a whole.\n"
+"\n"
+"    Each patch email has a Subject line of \"[PATCH M of N] ...\", using\n"
+"    the first line of the changeset description as the subject text.\n"
+"    The message contains two or three parts. First, the changeset\n"
+"    description. Next, (optionally) if the diffstat program is\n"
+"    installed and -d/--diffstat is used, the result of running\n"
+"    diffstat on the patch. Finally, the patch itself, as generated by\n"
+"    \"hg export\".\n"
+"\n"
+"    By default the patch is included as text in the email body for\n"
+"    easy reviewing. Using the -a/--attach option will instead create\n"
+"    an attachment for the patch. With -i/--inline an inline attachment\n"
+"    will be created.\n"
+"\n"
+"    With -o/--outgoing, emails will be generated for patches not found\n"
+"    in the destination repository (or only those which are ancestors\n"
+"    of the specified revisions if any are provided)\n"
+"\n"
+"    With -b/--bundle, changesets are selected as for --outgoing, but a\n"
+"    single email containing a binary Mercurial bundle as an attachment\n"
+"    will be sent.\n"
+"\n"
+"    Examples:\n"
+"\n"
+"    hg email -r 3000          # send patch 3000 only\n"
+"    hg email -r 3000 -r 3001  # send patches 3000 and 3001\n"
+"    hg email -r 3000:3005     # send patches 3000 through 3005\n"
+"    hg email 3000             # send patch 3000 (deprecated)\n"
+"\n"
+"    hg email -o               # send all patches not in default\n"
+"    hg email -o DEST          # send all patches not in DEST\n"
+"    hg email -o -r 3000       # send all ancestors of 3000 not in default\n"
+"    hg email -o -r 3000 DEST  # send all ancestors of 3000 not in DEST\n"
+"\n"
+"    hg email -b               # send bundle of all patches not in default\n"
+"    hg email -b DEST          # send bundle of all patches not in DEST\n"
+"    hg email -b -r 3000       # bundle of all ancestors of 3000 not in "
+"default\n"
+"    hg email -b -r 3000 DEST  # bundle of all ancestors of 3000 not in DEST\n"
+"\n"
+"    Before using this command, you will need to enable email in your\n"
+"    hgrc. See the [email] section in hgrc(5) for details.\n"
+"    "
+msgstr ""
+"envoi de \"changesets\" par courrier électronique\n"
+"\n"
+"    Par défaut, les modifications sont envoyées au format généré par\n"
+"    \"hg export\", une par message. La série débute par un message\n"
+"    la décrivant dans son ensemble, intitulé \"[PATCH 0 of N]\".\n"
+"\n"
+"    Chaque courriel a pour sujet un résumé des modifications\n"
+"    apportées par le patch (pris en première ligne de la description\n"
+"    du \"changeset\"), préfixé par \"[PATCH M of N] \".\n"
+"    Le message est constitué de deux ou trois parties. D'abord,\n"
+"    le texte décrivant le \"changeset\". Puis, (optionnellement)\n"
+"    un résumé des modifications généré par le programme diffstat si\n"
+"    celui-ci est installé et que l'option -d/--diffstat a été\n"
+"    spécifiée. Et enfin le patch, tel que généré par \"hg export\".\n"
+"\n"
+"    Par défaut le patch est inclus textuellement dans le corps du\n"
+"    message afin de faciliter les relectures et commentaires.\n"
+"    Cela peut être changé avec l'option -a/--attach qui crée une\n"
+"    pièce jointe séparée pour le patch, ou avec -i/--inline qui\n"
+"    insère celle-ci dans le corps.\n"
+"\n"
+"    Avec -o/--outgoing, des courriels seront générés pour chaque\n"
+"    révision non trouvée dans le dépôt cible (ou seulement pour les\n"
+"    ancêtres des révisions spécifiées, le cas échéant).\n"
+"\n"
+"    Avec -b/--bundle, les \"changesets\" sont sélectionnés de la\n"
+"    même manière que pour --outgoing, mais il seront envoyés via\n"
+"    un unique courriel dans un \"bundle\" Mercurial binaire joint.\n"
+"\n"
+"    Exemples :\n"
+"\n"
+"    hg email -r 3000         # envoyer uniquement le patch 3000\n"
+"    hg email -r 3000 -r 3001 # envoyer les patchs 3000 et 3001\n"
+"    hg email -r 3000:3005    # envoyer les patchs 3000 à 3005\n"
+"    hg email 3000            # envoyer le patch 3000 (déprécié)\n"
+"\n"
+"    hg email -o              # envoyer les patchs absents de la\n"
+"                               destination par défaut\n"
+"    hg email -o DEST         # envoyer les patchs absents de DEST\n"
+"    hg email -o -r 3000      # envoyer les ancêtres de 3000 absents\n"
+"                               de la destination par défaut\n"
+"    hg email -o -r 3000 DEST # envoyer les ancêtres de 3000 absents\n"
+"                               de DEST\n"
+"\n"
+"    Afin de pouvoir utiliser cette commande, il est nécessaire\n"
+"    d'activer préalablement l'envoi de courriel dans le fichier\n"
+"    de configuration (hgrc). Consulter hgrc(5) à la section\n"
+"    [email] pour plus de détails.\n"
+"    "
+
+msgid "specify at least one changeset with -r or -o"
+msgstr "veuillez spécifier au minimum un \"changeset\", à l'aide de -r ou -o"
+
+msgid "--outgoing mode always on with --bundle; do not re-specify --outgoing"
+msgstr ""
+"ne pas spécifier --outgoing, qui est systématiquement activé lorsque --"
+"bundle est utilisé"
+
+msgid "too many destinations"
+msgstr "trop de destinations"
+
+msgid "use only one form to specify the revision"
+msgstr "veuillez ne spécifier les révisions que d'une seule manière"
+
+msgid ""
+"\n"
+"Write the introductory message for the patch series.\n"
+"\n"
+msgstr ""
+"\n"
+"Veuillez écrire le message d'introduction de la série de patchs.\n"
+"\n"
+
+#, python-format
+msgid ""
+"This patch series consists of %d patches.\n"
+"\n"
+msgstr ""
+"Cette série comporte %d patchs.\n"
+"\n"
+
+# diffstat sur l'ensemble des patchs
+msgid "Final summary:\n"
+msgstr "Résumé complet des modifications :\n"
+
+# mode --test
+msgid "Displaying "
+msgstr "Affichage de "
+
+# mode --mbox
+msgid "Writing "
+msgstr "Écriture de "
+
+# mode d'envoi par défaut
+msgid "Sending "
+msgstr "Envoi de "
+
+msgid "send patches as attachments"
+msgstr "envoyer les patchs en tant que pièces jointes"
+
+msgid "send patches as inline attachments"
+msgstr "envoyer les patchs comme pièces insérées dans le corps du message"
+
+msgid "email addresses of blind carbon copy recipients"
+msgstr "adresses électroniques des destinataires en copie carbone invisible"
+
+msgid "email addresses of copy recipients"
+msgstr "adresses électroniques des destinataires en copie carbone"
+
+msgid "add diffstat output to messages"
+msgstr "ajouter un résumé des modifications avec diffstat dans les messages"
+
+msgid "use the given date as the sending date"
+msgstr "utiliser la date fournie comme date d'envoi"
+
+msgid "use the given file as the series description"
+msgstr "lire le message d'introduction à la série dans le fichier fourni"
+
+msgid "email address of sender"
+msgstr "adresse électronique de l'expéditeur"
+
+msgid "print messages that would be sent"
+msgstr "afficher les messages tels qu'ils seraient envoyés"
+
+msgid "write messages to mbox file instead of sending them"
+msgstr ""
+"écrire les messages dans un fichier au format \"mbox\" au lieu de les envoyer"
+
+msgid "subject of first message (intro or single patch)"
+msgstr "sujet du premier message (intro ou patch unique)"
+
+msgid "message identifier to reply to"
+msgstr "identifiant du message auquel répondre"
+
+msgid "email addresses of recipients"
+msgstr "adresses électroniques des destinataires"
+
+msgid "omit hg patch header"
+msgstr "omettre l'en-tête de patch spécifique à Mercurial"
+
+msgid "send changes not found in the target repository"
+msgstr "envoyer les modifications non présentes dans le dépôt cible"
+
+msgid "send changes not in target as a binary bundle"
+msgstr ""
+"envoyer les modifications non présentes dans le dépôt cible sous forme de "
+"\"bundle\" binaire"
+
+msgid "name of the bundle attachment file"
+msgstr "nom à donner au fichier \"bundle\" envoyé"
+
+msgid "a revision to send"
+msgstr "une révision à envoyer"
+
+msgid "run even when remote repository is unrelated (with -b/--bundle)"
+msgstr "procéder même si le dépôt cible n'est pas apparenté (avec -b/--bundle)"
+
+msgid "a base changeset to specify instead of a destination (with -b/--bundle)"
+msgstr ""
+"un \"changeset\" à utiliser comme point de départ, au lieu d'une destination "
+"(avec -b/--bundle)"
+
+msgid "send an introduction email for a single patch"
+msgstr "envoyer un courriel d'introduction pour un patch seul"
+
+msgid "hg email [OPTION]... [DEST]..."
+msgstr "hg email [OPTION]... [DEST]..."
+
+msgid "command to delete untracked files from the working directory"
+msgstr ""
+
+msgid ""
+"removes files not tracked by Mercurial\n"
+"\n"
+"    Delete files not known to Mercurial. This is useful to test local\n"
+"    and uncommitted changes in an otherwise-clean source tree.\n"
+"\n"
+"    This means that purge will delete:\n"
+"     - Unknown files: files marked with \"?\" by \"hg status\"\n"
+"     - Empty directories: in fact Mercurial ignores directories unless\n"
+"       they contain files under source control management\n"
+"    But it will leave untouched:\n"
+"     - Modified and unmodified tracked files\n"
+"     - Ignored files (unless --all is specified)\n"
+"     - New files added to the repository (with \"hg add\")\n"
+"\n"
+"    If directories are given on the command line, only files in these\n"
+"    directories are considered.\n"
+"\n"
+"    Be careful with purge, as you could irreversibly delete some files\n"
+"    you forgot to add to the repository. If you only want to print the\n"
+"    list of files that this program would delete, use the --print\n"
+"    option.\n"
+"    "
+msgstr ""
+"retire les fichiers non suivis par Mercurial\n"
+"\n"
+"    Supprime les fichiers non connus de Mercurial, ce qui peut être\n"
+"    utile pour tester des changements locaux non enregistrés à\n"
+"    l'intérieur d'une arborescence de sources propre.\n"
+"\n"
+"    Ainsi, purge effacera :\n"
+"     - les fichiers inconnus : fichiers que \"hg status\" indique\n"
+"       par un point d'interrogation\n"
+"     - les répertoires vides : en fait Mercurial ignore complètement\n"
+"       les répertoires, à moins qu'ils ne contiennent des fichiers\n"
+"       sous son contrôle\n"
+"    Seront par contre laissés intacts :\n"
+"     - Les fichiers placés sous contrôle, qu'ils aient été modifiés\n"
+"       ou non\n"
+"     - Les fichiers ignorés (sauf si --all est utilisé)\n"
+"     - Les fichiers nouvellement ajoutés au dépôt (avec \"hg add\")\n"
+"\n"
+"    Si des répertoires sont spécifiés sur la ligne de commande,\n"
+"    seuls les fichiers qu'ils contiennent seront considérés.\n"
+"\n"
+"    Soyez prudent en utilisant purge, si vous avez oublié d'ajouter\n"
+"    des fichiers au dépôt, ils seront perdus irrémédiablement.\n"
+"    Si vous souhaitez seulement afficher la liste des fichiers qui\n"
+"    seraient effacés par purge, utilisez l'option --print.\n"
+"    "
+
+#, python-format
+msgid "%s cannot be removed"
+msgstr "%s ne peut être supprimé"
+
+#, python-format
+msgid "warning: %s\n"
+msgstr "attention: %s\n"
+
+#, python-format
+msgid "Removing file %s\n"
+msgstr "Suppression du fichier %s\n"
+
+#, python-format
+msgid "Removing directory %s\n"
+msgstr "Suppression du répertoire %s\n"
+
+msgid "abort if an error occurs"
+msgstr "abandonner en cas d'erreur"
+
+msgid "purge ignored files too"
+msgstr "supprimer également les fichiers ignorés"
+
+msgid "print filenames instead of deleting them"
+msgstr "afficher les nom des fichiers au lieu de les supprimer"
+
+msgid "end filenames with NUL, for use with xargs (implies -p/--print)"
+msgstr ""
+"terminer les noms de fichiers par un caractère nul, pour utilisation avec "
+"xargs (implique -p/--print)"
+
+msgid "hg purge [OPTION]... [DIR]..."
+msgstr "hg purge [OPTION]... [RÉPERTOIRE]..."
+
+msgid ""
+"command to move sets of revisions to a different ancestor\n"
+"\n"
+"This extension lets you rebase changesets in an existing Mercurial\n"
+"repository.\n"
+"\n"
+"For more information:\n"
+"http://mercurial.selenic.com/wiki/RebaseProject\n"
+msgstr ""
+
+msgid "first revision, do not change ancestor\n"
+msgstr ""
+
+msgid ""
+"move changeset (and descendants) to a different branch\n"
+"\n"
+"    Rebase uses repeated merging to graft changesets from one part of\n"
+"    history onto another. This can be useful for linearizing local\n"
+"    changes relative to a master development tree.\n"
+"\n"
+"    If a rebase is interrupted to manually resolve a merge, it can be\n"
+"    continued with --continue/-c or aborted with --abort/-a.\n"
+"    "
+msgstr ""
+
+msgid "cannot use both abort and continue"
+msgstr ""
+
+msgid "cannot use collapse with continue or abort"
+msgstr ""
+
+msgid "abort and continue do not allow specifying revisions"
+msgstr ""
+
+msgid "cannot specify both a revision and a base"
+msgstr ""
+
+msgid "nothing to rebase\n"
+msgstr ""
+
+msgid "cannot use both keepbranches and extrafn"
+msgstr ""
+
+msgid "rebase merging completed\n"
+msgstr ""
+
+msgid "warning: new changesets detected on source branch, not stripping\n"
+msgstr ""
+
+msgid "rebase completed\n"
+msgstr ""
+
+#, python-format
+msgid "%d revisions have been skipped\n"
+msgstr ""
+
+msgid " set parents\n"
+msgstr ""
+
+#, python-format
+msgid "rebasing %d:%s\n"
+msgstr ""
+
+#, python-format
+msgid " future parents are %d and %d\n"
+msgstr ""
+
+#, python-format
+msgid " update to %d:%s\n"
+msgstr ""
+
+msgid " already in target\n"
+msgstr ""
+
+#, python-format
+msgid " merge against %d:%s\n"
+msgstr ""
+
+msgid "fix unresolved conflicts with hg resolve then run hg rebase --continue"
+msgstr ""
+
+msgid "resuming interrupted rebase\n"
+msgstr ""
+
+#, python-format
+msgid "no changes, revision %d skipped\n"
+msgstr ""
+
+#, python-format
+msgid "next revision set to %s\n"
+msgstr ""
+
+#, python-format
+msgid "cannot use revision %d as base, result would have 3 parents"
+msgstr ""
+
+#, python-format
+msgid "revision %d is an mq patch (%s), finalize it.\n"
+msgstr ""
+
+#, python-format
+msgid "import mq patch %d (%s)\n"
+msgstr ""
+
+msgid "rebase status stored\n"
+msgstr ""
+
+msgid "rebase status resumed\n"
+msgstr ""
+
+msgid "no rebase in progress"
+msgstr ""
+
+msgid "warning: new changesets detected on target branch, not stripping\n"
+msgstr ""
+
+msgid "rebase aborted\n"
+msgstr ""
+
+msgid "cannot rebase onto an applied mq patch"
+msgstr ""
+
+msgid "cannot rebase an ancestor"
+msgstr ""
+
+msgid "cannot rebase a descendant"
+msgstr ""
+
+msgid "already working on current\n"
+msgstr ""
+
+msgid "already working on the current branch\n"
+msgstr ""
+
+#, python-format
+msgid "rebase onto %d starting from %d\n"
+msgstr ""
+
+msgid "unable to collapse, there is more than one external parent"
+msgstr ""
+
+msgid "--update and --rebase are not compatible, ignoring the update flag\n"
+msgstr ""
+
+msgid "rebase working directory to branch head"
+msgstr ""
+
+msgid "rebase from a given revision"
+msgstr ""
+
+msgid "rebase from the base of a given revision"
+msgstr ""
+
+msgid "rebase onto a given revision"
+msgstr ""
+
+msgid "collapse the rebased revisions"
+msgstr ""
+
+msgid "keep original revisions"
+msgstr ""
+
+msgid "keep original branches"
+msgstr ""
+
+msgid "continue an interrupted rebase"
+msgstr ""
+
+msgid "abort an interrupted rebase"
+msgstr ""
+
+msgid ""
+"hg rebase [-s REV | -b REV] [-d REV] [--collapse] [--keep] [--keepbranches] "
+"| [-c] | [-a]"
+msgstr ""
+
+msgid "commands to interactively select changes for commit/qrefresh"
+msgstr ""
+
+msgid "this modifies a binary file (all or nothing)\n"
+msgstr ""
+
+msgid "this is a binary file\n"
+msgstr ""
+
+#, python-format
+msgid "%d hunks, %d lines changed\n"
+msgstr ""
+
+msgid "[Ynsfdaq?]"
+msgstr ""
+
+msgid "&Yes, record this change"
+msgstr ""
+
+msgid "&No, skip this change"
+msgstr ""
+
+msgid "&Skip remaining changes to this file"
+msgstr ""
+
+msgid "Record remaining changes to this &file"
+msgstr ""
+
+msgid "&Done, skip remaining changes and files"
+msgstr ""
+
+msgid "Record &all changes to all remaining files"
+msgstr ""
+
+msgid "&Quit, recording no changes"
+msgstr ""
+
+msgid "&?"
+msgstr ""
+
+msgid "y"
+msgstr ""
+
+msgid "?"
+msgstr ""
+
+msgid "y - record this change"
+msgstr ""
+
+msgid "s"
+msgstr ""
+
+msgid "f"
+msgstr ""
+
+msgid "d"
+msgstr ""
+
+msgid "a"
+msgstr ""
+
+msgid "q"
+msgstr ""
+
+msgid "user quit"
+msgstr ""
+
+#, python-format
+msgid "examine changes to %s?"
+msgstr ""
+
+msgid " and "
+msgstr ""
+
+#, python-format
+msgid "record this change to %r?"
+msgstr ""
+
+#, python-format
+msgid "record change %d/%d to %r?"
+msgstr ""
+
+msgid ""
+"interactively select changes to commit\n"
+"\n"
+"    If a list of files is omitted, all changes reported by \"hg status\"\n"
+"    will be candidates for recording.\n"
+"\n"
+"    See 'hg help dates' for a list of formats valid for -d/--date.\n"
+"\n"
+"    You will be prompted for whether to record changes to each\n"
+"    modified file, and for files with multiple changes, for each\n"
+"    change to use. For each query, the following responses are\n"
+"    possible:\n"
+"\n"
+"    y - record this change\n"
+"    n - skip this change\n"
+"\n"
+"    s - skip remaining changes to this file\n"
+"    f - record remaining changes to this file\n"
+"\n"
+"    d - done, skip remaining changes and files\n"
+"    a - record all changes to all remaining files\n"
+"    q - quit, recording no changes\n"
+"\n"
+"    ? - display help"
+msgstr ""
+
+msgid "'mq' extension not loaded"
+msgstr ""
+
+msgid "running non-interactively, use commit instead"
+msgstr ""
+
+msgid "no changes to record\n"
+msgstr ""
+
+#, python-format
+msgid "backup %r as %r\n"
+msgstr ""
+
+msgid "applying patch\n"
+msgstr ""
+
+msgid "patch failed to apply"
+msgstr ""
+
+#, python-format
+msgid "restoring %r to %r\n"
+msgstr ""
+
+msgid "hg record [OPTION]... [FILE]..."
+msgstr ""
+
+msgid "hg qrecord [OPTION]... PATCH [FILE]..."
+msgstr ""
+
+msgid "share a common history between several working directories"
+msgstr ""
+
+msgid ""
+"create a new shared repository (experimental)\n"
+"\n"
+"    Initialize a new repository and working directory that shares its\n"
+"    history with another repository.\n"
+"\n"
+"    NOTE: actions that change history such as rollback or moving the\n"
+"    source may confuse sharers.\n"
+"    "
+msgstr ""
+
+msgid "do not create a working copy"
+msgstr ""
+
+msgid "[-U] SOURCE [DEST]"
+msgstr ""
+
+msgid ""
+"command to transplant changesets from another branch\n"
+"\n"
+"This extension allows you to transplant patches from another branch.\n"
+"\n"
+"Transplanted patches are recorded in .hg/transplant/transplants, as a\n"
+"map from a changeset hash to its hash in the source repository.\n"
+msgstr ""
+
+#, python-format
+msgid "skipping already applied revision %s\n"
+msgstr ""
+
+#, python-format
+msgid "skipping merge changeset %s:%s\n"
+msgstr ""
+
+#, python-format
+msgid "%s merged at %s\n"
+msgstr ""
+
+#, python-format
+msgid "%s transplanted to %s\n"
+msgstr ""
+
+#, python-format
+msgid "filtering %s\n"
+msgstr ""
+
+msgid "filter failed"
+msgstr ""
+
+msgid "can only omit patchfile if merging"
+msgstr ""
+
+#, python-format
+msgid "%s: empty changeset"
+msgstr ""
+
+msgid "Fix up the merge and run hg transplant --continue"
+msgstr ""
+
+#, python-format
+msgid "%s transplanted as %s\n"
+msgstr ""
+
+msgid "transplant log file is corrupt"
+msgstr ""
+
+#, python-format
+msgid "working dir not at transplant parent %s"
+msgstr ""
+
+msgid "commit failed"
+msgstr ""
+
+msgid "apply changeset? [ynmpcq?]:"
+msgstr ""
+
+msgid ""
+"transplant changesets from another branch\n"
+"\n"
+"    Selected changesets will be applied on top of the current working\n"
+"    directory with the log of the original changeset. If --log is\n"
+"    specified, log messages will have a comment appended of the form:\n"
+"\n"
+"    (transplanted from CHANGESETHASH)\n"
+"\n"
+"    You can rewrite the changelog message with the --filter option.\n"
+"    Its argument will be invoked with the current changelog message as\n"
+"    $1 and the patch as $2.\n"
+"\n"
+"    If --source/-s is specified, selects changesets from the named\n"
+"    repository. If --branch/-b is specified, selects changesets from\n"
+"    the branch holding the named revision, up to that revision. If\n"
+"    --all/-a is specified, all changesets on the branch will be\n"
+"    transplanted, otherwise you will be prompted to select the\n"
+"    changesets you want.\n"
+"\n"
+"    hg transplant --branch REVISION --all will rebase the selected\n"
+"    branch (up to the named revision) onto your current working\n"
+"    directory.\n"
+"\n"
+"    You can optionally mark selected transplanted changesets as merge\n"
+"    changesets. You will not be prompted to transplant any ancestors\n"
+"    of a merged transplant, and you can merge descendants of them\n"
+"    normally instead of transplanting them.\n"
+"\n"
+"    If no merges or revisions are provided, hg transplant will start\n"
+"    an interactive changeset browser.\n"
+"\n"
+"    If a changeset application fails, you can fix the merge by hand\n"
+"    and then resume where you left off by calling hg transplant\n"
+"    --continue/-c.\n"
+"    "
+msgstr ""
+
+msgid "--continue is incompatible with branch, all or merge"
+msgstr ""
+
+msgid "no source URL, branch tag or revision list provided"
+msgstr ""
+
+msgid "--all requires a branch revision"
+msgstr ""
+
+msgid "--all is incompatible with a revision list"
+msgstr ""
+
+msgid "no revision checked out"
+msgstr ""
+
+msgid "outstanding uncommitted merges"
+msgstr ""
+
+msgid "outstanding local changes"
+msgstr ""
+
+msgid "pull patches from REPOSITORY"
+msgstr ""
+
+msgid "pull patches from branch BRANCH"
+msgstr ""
+
+msgid "pull all changesets up to BRANCH"
+msgstr ""
+
+msgid "skip over REV"
+msgstr ""
+
+msgid "merge at REV"
+msgstr ""
+
+msgid "append transplant info to log message"
+msgstr ""
+
+msgid "continue last transplant session after repair"
+msgstr ""
+
+msgid "filter changesets through FILTER"
+msgstr ""
+
+msgid ""
+"hg transplant [-s REPOSITORY] [-b BRANCH [-a]] [-p REV] [-m REV] [REV]..."
+msgstr ""
+
+msgid ""
+"allow the use of MBCS paths with problematic encodings\n"
+"\n"
+"Some MBCS encodings are not good for some path operations (i.e.\n"
+"splitting path, case conversion, etc.) with its encoded bytes. We call\n"
+"such a encoding (i.e. shift_jis and big5) as \"problematic encoding\".\n"
+"This extension can be used to fix the issue with those encodings by\n"
+"wrapping some functions to convert to Unicode string before path\n"
+"operation.\n"
+"\n"
+"This extension is useful for:\n"
+" * Japanese Windows users using shift_jis encoding.\n"
+" * Chinese Windows users using big5 encoding.\n"
+" * All users who use a repository with one of problematic encodings on\n"
+"   case-insensitive file system.\n"
+"\n"
+"This extension is not needed for:\n"
+" * Any user who use only ASCII chars in path.\n"
+" * Any user who do not use any of problematic encodings.\n"
+"\n"
+"Note that there are some limitations on using this extension:\n"
+" * You should use single encoding in one repository.\n"
+" * You should set same encoding for the repository by locale or\n"
+"   HGENCODING.\n"
+"\n"
+"Path encoding conversion are done between Unicode and\n"
+"encoding.encoding which is decided by Mercurial from current locale\n"
+"setting or HGENCODING.\n"
+msgstr ""
+
+#, python-format
+msgid "[win32mbcs] filename conversion fail with %s encoding\n"
+msgstr ""
+
+msgid "[win32mbcs] cannot activate on this platform.\n"
+msgstr ""
+
+#, python-format
+msgid "[win32mbcs] activated with encoding: %s\n"
+msgstr ""
+
+msgid ""
+"perform automatic newline conversion\n"
+"\n"
+"To perform automatic newline conversion, use:\n"
+"\n"
+"[extensions]\n"
+"hgext.win32text =\n"
+"[encode]\n"
+"** = cleverencode:\n"
+"# or ** = macencode:\n"
+"\n"
+"[decode]\n"
+"** = cleverdecode:\n"
+"# or ** = macdecode:\n"
+"\n"
+"If not doing conversion, to make sure you do not commit CRLF/CR by "
+"accident:\n"
+"\n"
+"[hooks]\n"
+"pretxncommit.crlf = python:hgext.win32text.forbidcrlf\n"
+"# or pretxncommit.cr = python:hgext.win32text.forbidcr\n"
+"\n"
+"To do the same check on a server to prevent CRLF/CR from being\n"
+"pushed or pulled:\n"
+"\n"
+"[hooks]\n"
+"pretxnchangegroup.crlf = python:hgext.win32text.forbidcrlf\n"
+"# or pretxnchangegroup.cr = python:hgext.win32text.forbidcr\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"WARNING: %s already has %s line endings\n"
+"and does not need EOL conversion by the win32text plugin.\n"
+"Before your next commit, please reconsider your encode/decode settings in \n"
+"Mercurial.ini or %s.\n"
+msgstr ""
+
+#, python-format
+msgid "Attempt to commit or push text file(s) using %s line endings\n"
+msgstr ""
+
+#, python-format
+msgid "in %s: %s\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"\n"
+"To prevent this mistake in your local repository,\n"
+"add to Mercurial.ini or .hg/hgrc:\n"
+"\n"
+"[hooks]\n"
+"pretxncommit.%s = python:hgext.win32text.forbid%s\n"
+"\n"
+"and also consider adding:\n"
+"\n"
+"[extensions]\n"
+"hgext.win32text =\n"
+"[encode]\n"
+"** = %sencode:\n"
+"[decode]\n"
+"** = %sdecode:\n"
+msgstr ""
+
+msgid ""
+"discover and advertise repositories on the local network\n"
+"\n"
+"Zeroconf enabled repositories will be announced in a network without\n"
+"the need to configure a server or a service. They can be discovered\n"
+"without knowing their actual IP address.\n"
+"\n"
+"To allow other people to discover your repository using run \"hg serve\"\n"
+"in your repository.\n"
+"\n"
+" $ cd test\n"
+" $ hg serve\n"
+"\n"
+"You can discover zeroconf enabled repositories by running \"hg paths\".\n"
+"\n"
+" $ hg paths\n"
+" zc-test = http://example.com:8000/test\n"
+msgstr ""
+"découverte et annonce de dépôts sur le réseau local\n"
+"\n"
+"Les dépôts utilisant zeroconf seront visibles sur le réseau sans\n"
+"qu'il n'y ait besoin de configurer un serveur ou service\n"
+"particuliers, et ils peuvent être accédés simplement, sans\n"
+"connaissance de leur adresse IP.\n"
+"\n"
+"Pour permettre à d'autres personnes de découvrir votre dépôt,\n"
+"lancez-y la commande \"hg serve\" :\n"
+"\n"
+" $ cd test\n"
+" $ hg serve\n"
+"\n"
+"Vous pouvez découvrir les dépôts utilisant zeroconf en utilisant\n"
+"la commande \"hg paths\", par exemple :\n"
+"\n"
+" $ hg paths\n"
+" zc-test = http://example.com:8000/test\n"
+
+msgid "archive prefix contains illegal components"
+msgstr ""
+
+msgid "cannot give prefix when archiving to files"
+msgstr ""
+
+#, python-format
+msgid "unknown archive type '%s'"
+msgstr ""
+
+msgid "invalid changegroup"
+msgstr ""
+
+msgid "unknown parent"
+msgstr ""
+
+#, python-format
+msgid "integrity check failed on %s:%d"
+msgstr ""
+
+#, python-format
+msgid "%s: not a Mercurial bundle file"
+msgstr ""
+
+#, python-format
+msgid "%s: unknown bundle version"
+msgstr ""
+
+#, python-format
+msgid "%s: unknown bundle compression type"
+msgstr ""
+
+msgid "cannot create new bundle repository"
+msgstr ""
+
+#, python-format
+msgid "premature EOF reading chunk (got %d bytes, expected %d)"
+msgstr ""
+
+msgid "empty username"
+msgstr ""
+
+#, python-format
+msgid "username %s contains a newline"
+msgstr ""
+
+msgid "options --message and --logfile are mutually exclusive"
+msgstr ""
+
+#, python-format
+msgid "can't read commit message '%s': %s"
+msgstr ""
+
+msgid "limit must be a positive integer"
+msgstr ""
+
+msgid "limit must be positive"
+msgstr ""
+
+msgid "too many revisions specified"
+msgstr ""
+
+#, python-format
+msgid "invalid format spec '%%%s' in output filename"
+msgstr ""
+
+#, python-format
+msgid "adding %s\n"
+msgstr ""
+
+#, python-format
+msgid "removing %s\n"
+msgstr ""
+
+#, python-format
+msgid "recording removal of %s as rename to %s (%d%% similar)\n"
+msgstr ""
+
+#, python-format
+msgid "%s: not copying - file is not managed\n"
+msgstr ""
+
+#, python-format
+msgid "%s: not copying - file has been marked for remove\n"
+msgstr ""
+
+#, python-format
+msgid "%s: not overwriting - %s collides with %s\n"
+msgstr ""
+
+#, python-format
+msgid "%s: not overwriting - file exists\n"
+msgstr ""
+
+#, python-format
+msgid "%s: deleted in working copy\n"
+msgstr ""
+
+#, python-format
+msgid "%s: cannot copy - %s\n"
+msgstr ""
+
+#, python-format
+msgid "moving %s to %s\n"
+msgstr ""
+
+#, python-format
+msgid "copying %s to %s\n"
+msgstr ""
+
+#, python-format
+msgid "%s has not been committed yet, so no copy data will be stored for %s.\n"
+msgstr ""
+
+msgid "no source or destination specified"
+msgstr ""
+
+msgid "no destination specified"
+msgstr ""
+
+msgid "with multiple sources, destination must be an existing directory"
+msgstr ""
+
+#, python-format
+msgid "destination %s is not a directory"
+msgstr ""
+
+msgid "no files to copy"
+msgstr ""
+
+msgid "(consider using --after)\n"
+msgstr ""
+
+#, python-format
+msgid "changeset:   %d:%s\n"
+msgstr ""
+
+#, python-format
+msgid "branch:      %s\n"
+msgstr ""
+
+#, python-format
+msgid "tag:         %s\n"
+msgstr ""
+
+#, python-format
+msgid "parent:      %d:%s\n"
+msgstr ""
+
+#, python-format
+msgid "manifest:    %d:%s\n"
+msgstr ""
+
+#, python-format
+msgid "user:        %s\n"
+msgstr ""
+
+#, python-format
+msgid "date:        %s\n"
+msgstr ""
+
+msgid "files+:"
+msgstr ""
+
+msgid "files-:"
+msgstr ""
+
+msgid "files:"
+msgstr ""
+
+#, python-format
+msgid "files:       %s\n"
+msgstr ""
+
+#, python-format
+msgid "copies:      %s\n"
+msgstr ""
+
+#, python-format
+msgid "extra:       %s=%s\n"
+msgstr ""
+
+msgid "description:\n"
+msgstr ""
+
+#, python-format
+msgid "summary:     %s\n"
+msgstr ""
+
+#, python-format
+msgid "%s: no key named '%s'"
+msgstr ""
+
+#, python-format
+msgid "%s: %s"
+msgstr ""
+
+#, python-format
+msgid "Found revision %s from %s\n"
+msgstr ""
+
+msgid "revision matching date not found"
+msgstr ""
+
+#, python-format
+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 ""
+
+msgid "HG: Enter commit message.  Lines beginning with 'HG:' are removed."
+msgstr ""
+
+msgid "HG: Leave message empty to abort commit."
+msgstr ""
+
+#, python-format
+msgid "HG: user: %s"
+msgstr ""
+
+msgid "HG: branch merge"
+msgstr ""
+
+#, python-format
+msgid "HG: branch '%s'"
+msgstr ""
+
+#, python-format
+msgid "HG: added %s"
+msgstr ""
+
+#, python-format
+msgid "HG: changed %s"
+msgstr ""
+
+#, python-format
+msgid "HG: removed %s"
+msgstr ""
+
+msgid "HG: no files changed"
+msgstr ""
+
+msgid "empty commit message"
+msgstr ""
+
+msgid ""
+"add the specified files on the next commit\n"
+"\n"
+"    Schedule files to be version controlled and added to the\n"
+"    repository.\n"
+"\n"
+"    The files will be added to the repository at the next commit. To\n"
+"    undo an add before that, see hg forget.\n"
+"\n"
+"    If no names are given, add all files to the repository.\n"
+"    "
+msgstr ""
+
+msgid ""
+"add all new files, delete all missing files\n"
+"\n"
+"    Add all new files and remove all missing files from the\n"
+"    repository.\n"
+"\n"
+"    New files are ignored if they match any of the patterns in\n"
+"    .hgignore. As with add, these changes take effect at the next\n"
+"    commit.\n"
+"\n"
+"    Use the -s/--similarity option to detect renamed files. With a\n"
+"    parameter > 0, this compares every removed file with every added\n"
+"    file and records those similar enough as renames. This option\n"
+"    takes a percentage between 0 (disabled) and 100 (files must be\n"
+"    identical) as its parameter. Detecting renamed files this way can\n"
+"    be expensive.\n"
+"    "
+msgstr ""
+
+msgid "similarity must be a number"
+msgstr ""
+
+msgid "similarity must be between 0 and 100"
+msgstr ""
+
+msgid ""
+"show changeset information by line for each file\n"
+"\n"
+"    List changes in files, showing the revision id responsible for\n"
+"    each line\n"
+"\n"
+"    This command is useful for discovering when a change was made and\n"
+"    by whom.\n"
+"\n"
+"    Without the -a/--text option, annotate will avoid processing files\n"
+"    it detects as binary. With -a, annotate will annotate the file\n"
+"    anyway, although the results will probably be neither useful\n"
+"    nor desirable.\n"
+"    "
+msgstr ""
+
+msgid "at least one filename or pattern is required"
+msgstr ""
+
+msgid "at least one of -n/-c is required for -l"
+msgstr ""
+
+#, python-format
+msgid "%s: binary file\n"
+msgstr ""
+
+msgid ""
+"create an unversioned archive of a repository revision\n"
+"\n"
+"    By default, the revision used is the parent of the working\n"
+"    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"
+"\n"
+"    The exact name of the destination archive or directory is given\n"
+"    using a format string; see 'hg help export' for details.\n"
+"\n"
+"    Each member added to an archive file has a directory prefix\n"
+"    prepended. Use -p/--prefix to specify a format string for the\n"
+"    prefix. The default is the basename of the archive, with suffixes\n"
+"    removed.\n"
+"    "
+msgstr ""
+
+msgid "no working directory: please specify a revision"
+msgstr ""
+
+msgid "repository root cannot be destination"
+msgstr ""
+
+msgid "cannot archive plain files to stdout"
+msgstr ""
+
+msgid ""
+"reverse effect of earlier changeset\n"
+"\n"
+"    Commit the backed out changes as a new changeset. The new\n"
+"    changeset is a child of the backed out changeset.\n"
+"\n"
+"    If you backout a changeset other than the tip, a new head is\n"
+"    created. This head will be the new tip and you should merge this\n"
+"    backout changeset with another head.\n"
+"\n"
+"    The --merge option remembers the parent of the working directory\n"
+"    before starting the backout, then merges the new head with that\n"
+"    changeset afterwards. This saves you from doing the merge by hand.\n"
+"    The result of this merge is not committed, as with a normal merge.\n"
+"\n"
+"    See 'hg help dates' for a list of formats valid for -d/--date.\n"
+"    "
+msgstr ""
+
+msgid "please specify just one revision"
+msgstr ""
+
+msgid "please specify a revision to backout"
+msgstr ""
+
+msgid "cannot backout change on a different branch"
+msgstr ""
+
+msgid "cannot backout a change with no parents"
+msgstr ""
+
+msgid "cannot backout a merge changeset without --parent"
+msgstr ""
+
+#, python-format
+msgid "%s is not a parent of %s"
+msgstr ""
+
+msgid "cannot use --parent on non-merge changeset"
+msgstr ""
+
+#, python-format
+msgid "Backed out changeset %s"
+msgstr ""
+
+#, python-format
+msgid "changeset %s backs out changeset %s\n"
+msgstr ""
+
+#, python-format
+msgid "merging with changeset %s\n"
+msgstr ""
+
+msgid "the backout changeset is a new head - do not forget to merge\n"
+msgstr ""
+
+msgid "(use \"backout --merge\" if you want to auto-merge)\n"
+msgstr ""
+
+msgid ""
+"subdivision search of changesets\n"
+"\n"
+"    This command helps to find changesets which introduce problems. To\n"
+"    use, mark the earliest changeset you know exhibits the problem as\n"
+"    bad, then mark the latest changeset which is free from the problem\n"
+"    as good. Bisect will update your working directory to a revision\n"
+"    for testing (unless the -U/--noupdate option is specified). Once\n"
+"    you have performed tests, mark the working directory as good or\n"
+"    bad, and bisect will either update to another candidate changeset\n"
+"    or announce that it has found the bad revision.\n"
+"\n"
+"    As a shortcut, you can also use the revision argument to mark a\n"
+"    revision as good or bad without checking it out first.\n"
+"\n"
+"    If you supply a command, it will be used for automatic bisection.\n"
+"    Its exit status will be used to mark revisions as good or bad:\n"
+"    status 0 means good, 125 means to skip the revision, 127\n"
+"    (command not found) will abort the bisection, and any other\n"
+"    non-zero exit status means the revision is bad.\n"
+"    "
+msgstr ""
+
+msgid "The first good revision is:\n"
+msgstr ""
+
+msgid "The first bad revision is:\n"
+msgstr ""
+
+msgid "Due to skipped revisions, the first good revision could be any of:\n"
+msgstr ""
+
+msgid "Due to skipped revisions, the first bad revision could be any of:\n"
+msgstr ""
+
+msgid "cannot bisect (no known good revisions)"
+msgstr ""
+
+msgid "cannot bisect (no known bad revisions)"
+msgstr ""
+
+msgid "(use of 'hg bisect <cmd>' is deprecated)\n"
+msgstr ""
+
+msgid "incompatible arguments"
+msgstr ""
+
+#, python-format
+msgid "cannot find executable: %s"
+msgstr ""
+
+#, python-format
+msgid "failed to execute %s"
+msgstr ""
+
+#, python-format
+msgid "%s killed"
+msgstr ""
+
+#, python-format
+msgid "Changeset %d:%s: %s\n"
+msgstr ""
+
+#, python-format
+msgid "Testing changeset %s:%s (%s changesets remaining, ~%s tests)\n"
+msgstr ""
+
+msgid ""
+"set or show the current branch name\n"
+"\n"
+"    With no argument, show the current branch name. With one argument,\n"
+"    set the working directory branch name (the branch will not exist\n"
+"    in the repository until the next commit). Standard practice\n"
+"    recommends that primary development take place on the 'default'\n"
+"    branch.\n"
+"\n"
+"    Unless -f/--force is specified, branch will not let you set a\n"
+"    branch name that already exists, even if it's inactive.\n"
+"\n"
+"    Use -C/--clean to reset the working directory branch to that of\n"
+"    the parent of the working directory, negating a previous branch\n"
+"    change.\n"
+"\n"
+"    Use the command 'hg update' to switch to an existing branch.\n"
+"    "
+msgstr ""
+
+#, python-format
+msgid "reset working directory to branch %s\n"
+msgstr ""
+
+msgid "a branch of the same name already exists (use --force to override)"
+msgstr ""
+
+#, python-format
+msgid "marked working directory as branch %s\n"
+msgstr ""
+
+msgid ""
+"list repository named branches\n"
+"\n"
+"    List the repository's named branches, indicating which ones are\n"
+"    inactive. If -a/--active is specified, only show active branches.\n"
+"\n"
+"    A branch is considered active if it contains repository heads.\n"
+"\n"
+"    Use the command 'hg update' to switch to an existing branch.\n"
+"    "
+msgstr ""
+
+msgid ""
+"create a changegroup file\n"
+"\n"
+"    Generate a compressed changegroup file collecting changesets not\n"
+"    known to be in another repository.\n"
+"\n"
+"    If no destination repository is specified the destination is\n"
+"    assumed to have all the nodes specified by one or more --base\n"
+"    parameters. To create a bundle containing all changesets, use\n"
+"    -a/--all (or --base null).\n"
+"\n"
+"    You can change compression method with the -t/--type option.\n"
+"    The available compression methods are: none, bzip2, and\n"
+"    gzip (by default, bundles are compressed using bzip2).\n"
+"\n"
+"    The bundle file can then be transferred using conventional means\n"
+"    and applied to another repository with the unbundle or pull\n"
+"    command. This is useful when direct push and pull are not\n"
+"    available or when exporting an entire repository is undesirable.\n"
+"\n"
+"    Applying bundles preserves all changeset contents including\n"
+"    permissions, copy/rename information, and revision history.\n"
+"    "
+msgstr ""
+
+msgid "--base is incompatible with specifying a destination"
+msgstr ""
+
+msgid "unknown bundle type specified with --type"
+msgstr ""
+
+msgid ""
+"output the current or given revision of files\n"
+"\n"
+"    Print the specified files as they were at the given revision. If\n"
+"    no revision is given, the parent of the working directory is used,\n"
+"    or tip if no revision is checked out.\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 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"
+"    "
+msgstr ""
+
+msgid ""
+"make a copy of an existing repository\n"
+"\n"
+"    Create a copy of an existing repository in a new directory.\n"
+"\n"
+"    If no destination directory name is specified, it defaults to the\n"
+"    basename of the source.\n"
+"\n"
+"    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"
+"    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"
+"    filesystems, such as AFS, implement hardlinking incorrectly, but\n"
+"    do not report errors. In these cases, use the --pull option to\n"
+"    avoid hardlinking.\n"
+"\n"
+"    In some cases, you can clone repositories and checked out files\n"
+"    using full hardlinks with\n"
+"\n"
+"      $ cp -al REPO REPOCLONE\n"
+"\n"
+"    This is the fastest way to clone, but it is not always safe. The\n"
+"    operation is not atomic (making sure REPO is not modified during\n"
+"    the operation is up to you) and you have to make sure your editor\n"
+"    breaks hardlinks (Emacs and most Linux Kernel tools do so). Also,\n"
+"    this is not compatible with certain extensions that place their\n"
+"    metadata under the .hg directory, such as mq.\n"
+"\n"
+"    "
+msgstr ""
+
+msgid ""
+"commit the specified files or all outstanding changes\n"
+"\n"
+"    Commit changes to the given files into the repository. Unlike a\n"
+"    centralized RCS, this operation is a local operation. See hg push\n"
+"    for a way to actively distribute your changes.\n"
+"\n"
+"    If a list of files is omitted, all changes reported by \"hg status\"\n"
+"    will be committed.\n"
+"\n"
+"    If you are committing the result of a merge, do not provide any\n"
+"    filenames or -I/-X filters.\n"
+"\n"
+"    If no commit message is specified, the configured editor is\n"
+"    started to prompt you for a message.\n"
+"\n"
+"    See 'hg help dates' for a list of formats valid for -d/--date.\n"
+"    "
+msgstr ""
+
+msgid "created new head\n"
+msgstr ""
+
+#, python-format
+msgid "committed changeset %d:%s\n"
+msgstr ""
+
+msgid ""
+"mark files as copied for the next commit\n"
+"\n"
+"    Mark dest as having copies of source files. If dest is a\n"
+"    directory, copies are put in that directory. If dest is a file,\n"
+"    the source must be a single file.\n"
+"\n"
+"    By default, this command copies the contents of files as they\n"
+"    exist in the working directory. If invoked with -A/--after, the\n"
+"    operation is recorded, but no copying is performed.\n"
+"\n"
+"    This command takes effect with the next commit. To undo a copy\n"
+"    before that, see hg revert.\n"
+"    "
+msgstr ""
+
+msgid "find the ancestor revision of two revisions in a given index"
+msgstr ""
+
+msgid "There is no Mercurial repository here (.hg not found)"
+msgstr ""
+
+msgid "either two or three arguments required"
+msgstr ""
+
+msgid "returns the completion list associated with the given command"
+msgstr ""
+
+msgid "rebuild the dirstate as it would look like for the given revision"
+msgstr ""
+
+msgid "validate the correctness of the current dirstate"
+msgstr ""
+
+#, python-format
+msgid "%s in state %s, but not in manifest1\n"
+msgstr ""
+
+#, python-format
+msgid "%s in state %s, but also in manifest1\n"
+msgstr ""
+
+#, python-format
+msgid "%s in state %s, but not in either manifest\n"
+msgstr ""
+
+#, python-format
+msgid "%s in manifest1, but listed as state %s"
+msgstr ""
+
+msgid ".hg/dirstate inconsistent with current parent's manifest"
+msgstr ""
+
+msgid ""
+"show combined config settings from all hgrc files\n"
+"\n"
+"    With no arguments, print names and values of all config items.\n"
+"\n"
+"    With one argument of the form section.name, print just the value\n"
+"    of that config item.\n"
+"\n"
+"    With multiple arguments, print names and values of all config\n"
+"    items with matching section names.\n"
+"\n"
+"    With --debug, the source (filename and line number) is printed\n"
+"    for each config item.\n"
+"    "
+msgstr ""
+
+msgid "only one config item permitted"
+msgstr ""
+
+msgid ""
+"manually set the parents of the current working directory\n"
+"\n"
+"    This is useful for writing repository conversion tools, but should\n"
+"    be used with care.\n"
+"    "
+msgstr ""
+
+msgid "show the contents of the current dirstate"
+msgstr ""
+
+#, python-format
+msgid "copy: %s -> %s\n"
+msgstr ""
+
+msgid "dump the contents of a data file revision"
+msgstr ""
+
+#, python-format
+msgid "invalid revision identifier %s"
+msgstr ""
+
+msgid "parse and display a date"
+msgstr ""
+
+msgid "dump the contents of an index file"
+msgstr ""
+
+msgid "dump an index DAG as a graphviz dot file"
+msgstr ""
+
+msgid "test Mercurial installation"
+msgstr ""
+
+#, python-format
+msgid "Checking encoding (%s)...\n"
+msgstr ""
+
+msgid " (check that your locale is properly set)\n"
+msgstr ""
+
+msgid "Checking extensions...\n"
+msgstr ""
+
+msgid " One or more extensions could not be found"
+msgstr ""
+
+msgid " (check that you compiled the extensions)\n"
+msgstr ""
+
+msgid "Checking templates...\n"
+msgstr ""
+
+msgid " (templates seem to have been installed incorrectly)\n"
+msgstr ""
+
+msgid "Checking patch...\n"
+msgstr ""
+
+msgid " patch call failed:\n"
+msgstr ""
+
+msgid " unexpected patch output!\n"
+msgstr ""
+
+msgid " patch test failed!\n"
+msgstr ""
+
+msgid ""
+" (Current patch tool may be incompatible with patch, or misconfigured. "
+"Please check your .hgrc file)\n"
+msgstr ""
+
+msgid ""
+" Internal patcher failure, please report this error to http://mercurial."
+"selenic.com/bts/\n"
+msgstr ""
+
+msgid "Checking commit editor...\n"
+msgstr ""
+
+msgid " No commit editor set and can't find vi in PATH\n"
+msgstr ""
+
+msgid " (specify a commit editor in your .hgrc file)\n"
+msgstr ""
+
+#, python-format
+msgid " Can't find editor '%s' in PATH\n"
+msgstr ""
+
+msgid "Checking username...\n"
+msgstr ""
+
+msgid " (specify a username in your .hgrc file)\n"
+msgstr ""
+
+msgid "No problems detected\n"
+msgstr ""
+
+#, python-format
+msgid "%s problems detected, please check your install!\n"
+msgstr ""
+
+msgid "dump rename information"
+msgstr ""
+
+#, python-format
+msgid "%s renamed from %s:%s\n"
+msgstr ""
+
+#, python-format
+msgid "%s not renamed\n"
+msgstr ""
+
+msgid "show how files match on given patterns"
+msgstr ""
+
+msgid ""
+"diff repository (or selected files)\n"
+"\n"
+"    Show differences between revisions for the specified files.\n"
+"\n"
+"    Differences between files are shown using the unified diff format.\n"
+"\n"
+"    NOTE: diff may generate unexpected results for merges, as it will\n"
+"    default to comparing against the working directory's first parent\n"
+"    changeset if no revisions are specified.\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.\n"
+"\n"
+"    Without the -a/--text option, diff will avoid generating diffs of\n"
+"    files it detects as binary. With -a, diff will generate a diff\n"
+"    anyway, probably with undesirable results.\n"
+"\n"
+"    Use the -g/--git option to generate diffs in the git extended diff\n"
+"    format. For more information, read 'hg help diffs'.\n"
+"    "
+msgstr ""
+
+msgid ""
+"dump the header and diffs for one or more changesets\n"
+"\n"
+"    Print the changeset header and diffs for one or more revisions.\n"
+"\n"
+"    The information shown in the changeset header is: author,\n"
+"    changeset hash, parent(s) and commit comment.\n"
+"\n"
+"    NOTE: export may generate unexpected diff output for merge\n"
+"    changesets, as it will compare the merge changeset against its\n"
+"    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"
+"\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"
+"    diff anyway, probably with undesirable results.\n"
+"\n"
+"    Use the -g/--git option to generate diffs in the git extended diff\n"
+"    format. See 'hg help diffs' for more information.\n"
+"\n"
+"    With the --switch-parent option, the diff will be against the\n"
+"    second parent. It can be useful to review a merge.\n"
+"    "
+msgstr ""
+
+msgid "export requires at least one changeset"
+msgstr ""
+
+msgid "exporting patches:\n"
+msgstr ""
+
+msgid "exporting patch:\n"
+msgstr ""
+
+msgid ""
+"forget the specified files on the next commit\n"
+"\n"
+"    Mark the specified files so they will no longer be tracked\n"
+"    after the next commit.\n"
+"\n"
+"    This only removes files from the current branch, not from the\n"
+"    entire project history, and it does not delete them from the\n"
+"    working directory.\n"
+"\n"
+"    To undo a forget before the next commit, see hg add.\n"
+"    "
+msgstr ""
+
+msgid "no files specified"
+msgstr ""
+
+#, python-format
+msgid "not removing %s: file is already untracked\n"
+msgstr ""
+
+msgid ""
+"search for a pattern in specified files and revisions\n"
+"\n"
+"    Search revisions of files for a regular expression.\n"
+"\n"
+"    This command behaves differently than Unix grep. It only accepts\n"
+"    Python/Perl regexps. It searches repository history, not the\n"
+"    working directory. It always prints the revision number in which a\n"
+"    match appears.\n"
+"\n"
+"    By default, grep only prints output for the first revision of a\n"
+"    file in which it finds a match. To get it to print every revision\n"
+"    that contains a change in match status (\"-\" for a match that\n"
+"    becomes a non-match, or \"+\" for a non-match that becomes a match),\n"
+"    use the --all flag.\n"
+"    "
+msgstr ""
+
+#, python-format
+msgid "grep: invalid match pattern: %s\n"
+msgstr ""
+
+msgid ""
+"show current repository heads or show branch heads\n"
+"\n"
+"    With no arguments, show all repository head changesets.\n"
+"\n"
+"    Repository \"heads\" are changesets that don't have child\n"
+"    changesets. They are where development generally takes place and\n"
+"    are the usual targets for update and merge operations.\n"
+"\n"
+"    If one or more REV is given, the \"branch heads\" will be shown for\n"
+"    the named branch associated with that revision. The name of the\n"
+"    branch is called the revision's branch tag.\n"
+"\n"
+"    Branch heads are revisions on a given named branch that do not have\n"
+"    any descendants on the same branch. A branch head could be a true head\n"
+"    or it could be the last changeset on a branch before a new branch\n"
+"    was created. If none of the branch heads are true heads, the branch\n"
+"    is considered inactive.\n"
+"\n"
+"    If STARTREV is specified only those heads (or branch heads) that\n"
+"    are descendants of STARTREV will be displayed.\n"
+"    "
+msgstr ""
+
+#, python-format
+msgid "no open branch heads on branch %s\n"
+msgstr ""
+
+#, python-format
+msgid "no changes on branch %s containing %s are reachable from %s\n"
+msgstr ""
+
+#, python-format
+msgid "no changes on branch %s are reachable from %s\n"
+msgstr ""
+
+msgid ""
+"show help for a given topic or a help overview\n"
+"\n"
+"    With no arguments, print a list of commands with short help messages.\n"
+"\n"
+"    Given a topic, extension, or command name, print help for that\n"
+"    topic."
+msgstr ""
+
+msgid "global options:"
+msgstr "options globales :"
+
+msgid "use \"hg help\" for the full list of commands"
+msgstr "utiliser \"hg help\" pour la liste complète des commandes"
+
+msgid "use \"hg help\" for the full list of commands or \"hg -v\" for details"
+msgstr ""
+"utiliser \"hg help\" pour la liste complète des commandes ou \"hg -v\" pour "
+"plus de détails"
+
+# la chaîne passée est préfixée par un espace
+#, python-format
+msgid "use \"hg -v help%s\" to show aliases and global options"
+msgstr ""
+"utiliser \"hg -v help%s\" pour afficher les alias et les options globales"
+
+#, python-format
+msgid "use \"hg -v help %s\" to show global options"
+msgstr "utiliser \"hg -v help %s\" pour afficher les options globales"
+
+msgid ""
+"list of commands:\n"
+"\n"
+msgstr ""
+"liste des commandes :\n"
+"\n"
+
+#, python-format
+msgid ""
+"\n"
+"aliases: %s\n"
+msgstr ""
+"\n"
+"alias : %s\n"
+
+msgid "(no help text available)"
+msgstr "(pas d'aide disponible)"
+
+msgid "options:\n"
+msgstr "options :\n"
+
+msgid "no commands defined\n"
+msgstr "pas de commandes définies\n"
+
+msgid "enabled extensions:"
+msgstr "extensions activées :"
+
+msgid "no help text available"
+msgstr "pas d'aide disponible"
+
+#, python-format
+msgid "%s extension - %s\n"
+msgstr "extension %s - %s\n"
+
+msgid "Mercurial Distributed SCM\n"
+msgstr "Mercurial, système de gestion de sources distribué\n"
+
+msgid ""
+"basic commands:\n"
+"\n"
+msgstr ""
+"commandes de base :\n"
+"\n"
+
+msgid ""
+"\n"
+"additional help topics:\n"
+"\n"
+msgstr ""
+"\n"
+"sujets d'aide supplémentaires :\n"
+"\n"
+
+msgid ""
+"identify the working copy or specified revision\n"
+"\n"
+"    With no revision, print a summary of the current state of the\n"
+"    repository.\n"
+"\n"
+"    Specifying a path to a repository root or Mercurial bundle will\n"
+"    cause lookup to operate on that repository/bundle.\n"
+"\n"
+"    This summary identifies the repository state using one or two\n"
+"    parent hash identifiers, followed by a \"+\" if there are\n"
+"    uncommitted changes in the working directory, a list of tags for\n"
+"    this revision and a branch name for non-default branches.\n"
+"    "
+msgstr ""
+
+msgid ""
+"import an ordered set of patches\n"
+"\n"
+"    Import a list of patches and commit them individually.\n"
+"\n"
+"    If there are outstanding changes in the working directory, import\n"
+"    will abort unless given the -f/--force flag.\n"
+"\n"
+"    You can import a patch straight from a mail message. Even patches\n"
+"    as attachments work (to use the body part, it must have type\n"
+"    text/plain or text/x-patch). From and Subject headers of email\n"
+"    message are used as default committer and commit message. All\n"
+"    text/plain body parts before first diff are added to commit\n"
+"    message.\n"
+"\n"
+"    If the imported patch was generated by hg export, user and\n"
+"    description from patch override values from message headers and\n"
+"    body. Values given on command line with -m/--message and -u/--user\n"
+"    override these.\n"
+"\n"
+"    If --exact is specified, import will set the working directory to\n"
+"    the parent of each patch before applying it, and will abort if the\n"
+"    resulting changeset has a different ID than the one recorded in\n"
+"    the patch. This may happen due to character set problems or other\n"
+"    deficiencies in the text patch format.\n"
+"\n"
+"    With -s/--similarity, hg will attempt to discover renames and\n"
+"    copies in the patch in the same way as 'addremove'.\n"
+"\n"
+"    To read a patch from standard input, use \"-\" as the patch name. If\n"
+"    a URL is specified, the patch will be downloaded from it.\n"
+"    See 'hg help dates' for a list of formats valid for -d/--date.\n"
+"    "
+msgstr ""
+
+msgid "applying patch from stdin\n"
+msgstr ""
+
+msgid "no diffs found"
+msgstr ""
+
+#, python-format
+msgid ""
+"message:\n"
+"%s\n"
+msgstr ""
+
+msgid "not a Mercurial patch"
+msgstr ""
+
+msgid "patch is damaged or loses information"
+msgstr ""
+
+msgid ""
+"show new changesets found in source\n"
+"\n"
+"    Show new changesets found in the specified path/URL or the default\n"
+"    pull location. These are the changesets that would have been pulled\n"
+"    if a pull at the time you issued this command.\n"
+"\n"
+"    For remote repository, using --bundle avoids downloading the\n"
+"    changesets twice if the incoming is followed by a pull.\n"
+"\n"
+"    See pull for valid source format details.\n"
+"    "
+msgstr ""
+
+msgid ""
+"create a new repository in the given directory\n"
+"\n"
+"    Initialize a new repository in the given directory. If the given\n"
+"    directory does not exist, it will be created.\n"
+"\n"
+"    If no directory is given, the current directory is used.\n"
+"\n"
+"    It is possible to specify an ssh:// URL as the destination.\n"
+"    See 'hg help urls' for more information.\n"
+"    "
+msgstr ""
+
+msgid ""
+"locate files matching specific patterns\n"
+"\n"
+"    Print files under Mercurial control in the working directory whose\n"
+"    names match the given patterns.\n"
+"\n"
+"    By default, this command searches all directories in the working\n"
+"    directory. To search just the current directory and its\n"
+"    subdirectories, use \"--include .\".\n"
+"\n"
+"    If no patterns are given to match, this command prints the names\n"
+"    of all files under Mercurial control in the working directory.\n"
+"\n"
+"    If you want to feed the output of this command into the \"xargs\"\n"
+"    command, use the -0 option to both this command and \"xargs\". This\n"
+"    will avoid the problem of \"xargs\" treating single filenames that\n"
+"    contain whitespace as multiple filenames.\n"
+"    "
+msgstr ""
+
+msgid ""
+"show revision history of entire repository or files\n"
+"\n"
+"    Print the revision history of the specified files or the entire\n"
+"    project.\n"
+"\n"
+"    File history is shown without following rename or copy history of\n"
+"    files. Use -f/--follow with a filename to follow history across\n"
+"    renames and copies. --follow without a filename will only show\n"
+"    ancestors or descendants of the starting revision. --follow-first\n"
+"    only follows the first parent of merge revisions.\n"
+"\n"
+"    If no revision range is specified, the default is tip:0 unless\n"
+"    --follow is set, in which case the working directory parent is\n"
+"    used as the starting revision.\n"
+"\n"
+"    See 'hg help dates' for a list of formats valid for -d/--date.\n"
+"\n"
+"    By default this command prints revision number and changeset id,\n"
+"    tags, non-trivial parents, user, date and time, and a summary for\n"
+"    each commit. When the -v/--verbose switch is used, the list of\n"
+"    changed files and full commit message are shown.\n"
+"\n"
+"    NOTE: log -p/--patch may generate unexpected diff output for merge\n"
+"    changesets, as it will only compare the merge changeset against\n"
+"    its first parent. Also, only files different from BOTH parents\n"
+"    will appear in files:.\n"
+"    "
+msgstr ""
+
+msgid ""
+"output the current or given revision of the project manifest\n"
+"\n"
+"    Print a list of version controlled files for the given revision.\n"
+"    If no revision is given, the first parent of the working directory\n"
+"    is used, or the null revision if no revision is checked out.\n"
+"\n"
+"    With -v, print file permissions, symlink and executable bits.\n"
+"    With --debug, print file revision hashes.\n"
+"    "
+msgstr ""
+
+msgid ""
+"merge working directory with another revision\n"
+"\n"
+"    The current working directory is updated with all changes made in\n"
+"    the requested revision since the last common predecessor revision.\n"
+"\n"
+"    Files that changed between either parent are marked as changed for\n"
+"    the next commit and a commit must be performed before any further\n"
+"    updates to the repository are allowed. The next commit will have\n"
+"    two parents.\n"
+"\n"
+"    If no revision is specified, the working directory's parent is a\n"
+"    head revision, and the current branch contains exactly one other\n"
+"    head, the other head is merged with by default. Otherwise, an\n"
+"    explicit revision with which to merge with must be provided.\n"
+"    "
+msgstr ""
+
+#, python-format
+msgid "branch '%s' has %d heads - please merge with an explicit rev"
+msgstr ""
+
+#, python-format
+msgid "branch '%s' has one head - please merge with an explicit rev"
+msgstr ""
+
+msgid "there is nothing to merge"
+msgstr ""
+
+#, python-format
+msgid "%s - use \"hg update\" instead"
+msgstr ""
+
+msgid ""
+"working dir not at a head rev - use \"hg update\" or merge with an explicit "
+"rev"
+msgstr ""
+
+msgid ""
+"show changesets not found in destination\n"
+"\n"
+"    Show changesets not found in the specified destination repository\n"
+"    or the default push location. These are the changesets that would\n"
+"    be pushed if a push was requested.\n"
+"\n"
+"    See pull for valid destination format details.\n"
+"    "
+msgstr ""
+
+msgid ""
+"show the parents of the working directory or revision\n"
+"\n"
+"    Print the working directory's parent revisions. If a revision is\n"
+"    given via -r/--rev, the parent of that revision will be printed.\n"
+"    If a file argument is given, the revision in which the file was\n"
+"    last changed (before the working directory revision or the\n"
+"    argument to --rev if given) is printed.\n"
+"    "
+msgstr ""
+
+msgid "can only specify an explicit filename"
+msgstr ""
+
+#, python-format
+msgid "'%s' not found in manifest!"
+msgstr ""
+
+msgid ""
+"show aliases for remote repositories\n"
+"\n"
+"    Show definition of symbolic path name NAME. If no name is given,\n"
+"    show definition of all available names.\n"
+"\n"
+"    Path names are defined in the [paths] section of /etc/mercurial/hgrc\n"
+"    and $HOME/.hgrc. If run inside a repository, .hg/hgrc is used, too.\n"
+"\n"
+"    See 'hg help urls' for more information.\n"
+"    "
+msgstr ""
+
+msgid "not found!\n"
+msgstr ""
+
+msgid "not updating, since new heads added\n"
+msgstr ""
+
+msgid "(run 'hg heads' to see heads, 'hg merge' to merge)\n"
+msgstr ""
+
+msgid "(run 'hg update' to get a working copy)\n"
+msgstr ""
+
+msgid ""
+"pull changes from the specified source\n"
+"\n"
+"    Pull changes from a remote repository to a local one.\n"
+"\n"
+"    This finds all changes from the repository at the specified path\n"
+"    or URL and adds them to a local repository (the current one unless\n"
+"    -R is specified). By default, this does not update the copy of the\n"
+"    project in the working directory.\n"
+"\n"
+"    Use hg incoming if you want to see what would have been added by a\n"
+"    pull at the time you issued this command. If you then decide to\n"
+"    added those changes to the repository, you should use pull -r X\n"
+"    where X is the last changeset listed by hg incoming.\n"
+"\n"
+"    If SOURCE is omitted, the 'default' path will be used.\n"
+"    See 'hg help urls' for more information.\n"
+"    "
+msgstr ""
+
+msgid ""
+"push changes to the specified destination\n"
+"\n"
+"    Push changes from the local repository to the given destination.\n"
+"\n"
+"    This is the symmetrical operation for pull. It moves changes from\n"
+"    the current repository to a different one. If the destination is\n"
+"    local this is identical to a pull in that directory from the\n"
+"    current one.\n"
+"\n"
+"    By default, push will refuse to run if it detects the result would\n"
+"    increase the number of remote heads. This generally indicates the\n"
+"    user forgot to pull and merge before pushing.\n"
+"\n"
+"    If -r/--rev is used, the named revision and all its ancestors will\n"
+"    be pushed to the remote repository.\n"
+"\n"
+"    Please see 'hg help urls' for important details about ssh://\n"
+"    URLs. If DESTINATION is omitted, a default path will be used.\n"
+"    "
+msgstr ""
+
+#, python-format
+msgid "pushing to %s\n"
+msgstr ""
+
+msgid ""
+"roll back an interrupted transaction\n"
+"\n"
+"    Recover from an interrupted commit or pull.\n"
+"\n"
+"    This command tries to fix the repository status after an\n"
+"    interrupted operation. It should only be necessary when Mercurial\n"
+"    suggests it.\n"
+"    "
+msgstr ""
+
+msgid ""
+"remove the specified files on the next commit\n"
+"\n"
+"    Schedule the indicated files for removal from the repository.\n"
+"\n"
+"    This only removes files from the current branch, not from the\n"
+"    entire project history. -A/--after can be used to remove only\n"
+"    files that have already been deleted, -f/--force can be used to\n"
+"    force deletion, and -Af can be used to remove files from the next\n"
+"    revision without deleting them from the working directory.\n"
+"\n"
+"    The following table details the behavior of remove for different\n"
+"    file states (columns) and option combinations (rows). The file\n"
+"    states are Added [A], Clean [C], Modified [M] and Missing [!]\n"
+"    (as reported by hg status). The actions are Warn, Remove (from\n"
+"    branch) and Delete (from disk).\n"
+"\n"
+"           A  C  M  !\n"
+"    none   W  RD W  R\n"
+"    -f     R  RD RD R\n"
+"    -A     W  W  W  R\n"
+"    -Af    R  R  R  R\n"
+"\n"
+"    This command schedules the files to be removed at the next commit.\n"
+"    To undo a remove before that, see hg revert.\n"
+"    "
+msgstr ""
+
+#, python-format
+msgid "not removing %s: file is untracked\n"
+msgstr ""
+
+#, python-format
+msgid "not removing %s: file %s (use -f to force removal)\n"
+msgstr ""
+
+msgid "still exists"
+msgstr ""
+
+msgid "is modified"
+msgstr ""
+
+msgid "has been marked for add"
+msgstr ""
+
+msgid ""
+"rename files; equivalent of copy + remove\n"
+"\n"
+"    Mark dest as copies of sources; mark sources for deletion. If dest\n"
+"    is a directory, copies are put in that directory. If dest is a\n"
+"    file, there can only be one source.\n"
+"\n"
+"    By default, this command copies the contents of files as they\n"
+"    exist in the working directory. If invoked with -A/--after, the\n"
+"    operation is recorded, but no copying is performed.\n"
+"\n"
+"    This command takes effect at the next commit. To undo a rename\n"
+"    before that, see hg revert.\n"
+"    "
+msgstr ""
+
+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"
+"\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"
+"    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"
+"\n"
+"    The codes used to show the status of files are:\n"
+"    U = unresolved\n"
+"    R = resolved\n"
+"    "
+msgstr ""
+
+msgid "too many options specified"
+msgstr ""
+
+msgid "can't specify --all and patterns"
+msgstr ""
+
+msgid "no files or directories specified; use --all to remerge all files"
+msgstr ""
+
+msgid ""
+"restore individual files or directories to an earlier state\n"
+"\n"
+"    (Use update -r to check out earlier revisions, revert does not\n"
+"    change the working directory parents.)\n"
+"\n"
+"    With no revision specified, revert the named files or directories\n"
+"    to the contents they had in the parent of the working directory.\n"
+"    This restores the contents of the affected files to an unmodified\n"
+"    state and unschedules adds, removes, copies, and renames. If the\n"
+"    working directory has two parents, you must explicitly specify the\n"
+"    revision to revert to.\n"
+"\n"
+"    Using the -r/--rev option, revert the given files or directories\n"
+"    to their contents as of a specific revision. This can be helpful\n"
+"    to \"roll back\" some or all of an earlier change. See 'hg help\n"
+"    dates' for a list of formats valid for -d/--date.\n"
+"\n"
+"    Revert modifies the working directory. It does not commit any\n"
+"    changes, or change the parent of the working directory. If you\n"
+"    revert to a revision other than the parent of the working\n"
+"    directory, the reverted files will thus appear modified\n"
+"    afterwards.\n"
+"\n"
+"    If a file has been deleted, it is restored. If the executable mode\n"
+"    of a file was changed, it is reset.\n"
+"\n"
+"    If names are given, all files matching the names are reverted.\n"
+"    If no arguments are given, no files are reverted.\n"
+"\n"
+"    Modified files are saved with a .orig suffix before reverting.\n"
+"    To disable these backups, use --no-backup.\n"
+"    "
+msgstr ""
+
+msgid "you can't specify a revision and a date"
+msgstr ""
+
+msgid "no files or directories specified; use --all to revert the whole repo"
+msgstr ""
+
+#, python-format
+msgid "forgetting %s\n"
+msgstr ""
+
+#, python-format
+msgid "reverting %s\n"
+msgstr ""
+
+#, python-format
+msgid "undeleting %s\n"
+msgstr ""
+
+#, python-format
+msgid "saving current version of %s as %s\n"
+msgstr ""
+
+#, python-format
+msgid "file not managed: %s\n"
+msgstr ""
+
+#, python-format
+msgid "no changes needed to %s\n"
+msgstr ""
+
+msgid ""
+"roll back the last transaction\n"
+"\n"
+"    This command should be used with care. There is only one level of\n"
+"    rollback, and there is no way to undo a rollback. It will also\n"
+"    restore the dirstate at the time of the last transaction, losing\n"
+"    any dirstate changes since that time. This command does not alter\n"
+"    the working directory.\n"
+"\n"
+"    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"
+"\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"
+"    back locally is ineffective (someone else may already have pulled\n"
+"    the changes). Furthermore, a race is possible with readers of the\n"
+"    repository; for example an in-progress pull from the repository\n"
+"    may fail if a rollback is performed.\n"
+"    "
+msgstr ""
+
+msgid ""
+"print the root (top) of the current working directory\n"
+"\n"
+"    Print the root directory of the current repository.\n"
+"    "
+msgstr ""
+
+msgid ""
+"export the repository via HTTP\n"
+"\n"
+"    Start a local HTTP repository browser and pull server.\n"
+"\n"
+"    By default, the server logs accesses to stdout and errors to\n"
+"    stderr. Use the -A/--accesslog and -E/--errorlog options to log to\n"
+"    files.\n"
+"    "
+msgstr ""
+
+#, python-format
+msgid "listening at http://%s%s/%s (bound to %s:%d)\n"
+msgstr ""
+
+msgid ""
+"show changed files in the working directory\n"
+"\n"
+"    Show status of files in the repository. If names are given, only\n"
+"    files that match are shown. Files that are clean or ignored or\n"
+"    the source of a copy/move operation, are not listed unless\n"
+"    -c/--clean, -i/--ignored, -C/--copies or -A/--all are given.\n"
+"    Unless options described with \"show only ...\" are given, the\n"
+"    options -mardu are used.\n"
+"\n"
+"    Option -q/--quiet hides untracked (unknown and ignored) files\n"
+"    unless explicitly requested with -u/--unknown or -i/--ignored.\n"
+"\n"
+"    NOTE: status may appear to disagree with diff if permissions have\n"
+"    changed or a merge has occurred. The standard diff format does not\n"
+"    report permission changes and diff only reports changes relative\n"
+"    to one merge parent.\n"
+"\n"
+"    If one revision is given, it is used as the base revision.\n"
+"    If two revisions are given, the differences between them are\n"
+"    shown.\n"
+"\n"
+"    The codes used to show the status of files are:\n"
+"    M = modified\n"
+"    A = added\n"
+"    R = removed\n"
+"    C = clean\n"
+"    ! = missing (deleted by non-hg command, but still tracked)\n"
+"    ? = not tracked\n"
+"    I = ignored\n"
+"      = origin of the previous file listed as A (added)\n"
+"    "
+msgstr ""
+
+msgid ""
+"add one or more tags for the current or given revision\n"
+"\n"
+"    Name a particular revision using <name>.\n"
+"\n"
+"    Tags are used to name particular revisions of the repository and are\n"
+"    very useful to compare different revisions, to go back to significant\n"
+"    earlier versions or to mark branch points as releases, etc.\n"
+"\n"
+"    If no revision is given, the parent of the working directory is\n"
+"    used, or tip if no revision is checked out.\n"
+"\n"
+"    To facilitate version control, distribution, and merging of tags,\n"
+"    they are stored as a file named \".hgtags\" which is managed\n"
+"    similarly to other project files and can be hand-edited if\n"
+"    necessary. The file '.hg/localtags' is used for local tags (not\n"
+"    shared among repositories).\n"
+"\n"
+"    See 'hg help dates' for a list of formats valid for -d/--date.\n"
+"    "
+msgstr ""
+
+msgid "tag names must be unique"
+msgstr ""
+
+#, python-format
+msgid "the name '%s' is reserved"
+msgstr ""
+
+msgid "--rev and --remove are incompatible"
+msgstr ""
+
+#, python-format
+msgid "tag '%s' does not exist"
+msgstr ""
+
+#, python-format
+msgid "tag '%s' is not a global tag"
+msgstr ""
+
+#, python-format
+msgid "tag '%s' is not a local tag"
+msgstr ""
+
+#, python-format
+msgid "Removed tag %s"
+msgstr ""
+
+#, python-format
+msgid "tag '%s' already exists (use -f to force)"
+msgstr ""
+
+#, python-format
+msgid "Added tag %s for changeset %s"
+msgstr ""
+
+msgid ""
+"list repository tags\n"
+"\n"
+"    This lists both regular and local tags. When the -v/--verbose\n"
+"    switch is used, a third column \"local\" is printed for local tags.\n"
+"    "
+msgstr ""
+
+msgid ""
+"show the tip revision\n"
+"\n"
+"    The tip revision (usually just called the tip) is the changeset\n"
+"    most recently added to the repository (and therefore the most\n"
+"    recently changed head).\n"
+"\n"
+"    If you have just made a commit, that commit will be the tip. If\n"
+"    you have just pulled changes from another repository, the tip of\n"
+"    that repository becomes the current tip. The \"tip\" tag is special\n"
+"    and cannot be renamed or assigned to a different changeset.\n"
+"    "
+msgstr ""
+
+msgid ""
+"apply one or more changegroup files\n"
+"\n"
+"    Apply one or more compressed changegroup files generated by the\n"
+"    bundle command.\n"
+"    "
+msgstr ""
+
+msgid ""
+"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"
+"    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"
+"\n"
+"    See 'hg help dates' for a list of formats valid for -d/--date.\n"
+"    "
+msgstr ""
+
+msgid "uncommitted local changes"
+msgstr ""
+
+msgid ""
+"verify the integrity of the repository\n"
+"\n"
+"    Verify the integrity of the current repository.\n"
+"\n"
+"    This will perform an extensive check of the repository's\n"
+"    integrity, validating the hashes and checksums of each entry in\n"
+"    the changelog, manifest, and tracked files, as well as the\n"
+"    integrity of their crosslinks and indices.\n"
+"    "
+msgstr ""
+
+msgid "output version and copyright information"
+msgstr ""
+
+#, python-format
+msgid "Mercurial Distributed SCM (version %s)\n"
+msgstr ""
+
+msgid ""
+"\n"
+"Copyright (C) 2005-2009 Matt Mackall <mpm@selenic.com> and others\n"
+"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 ""
+
+msgid "repository root directory or symbolic path name"
+msgstr ""
+
+msgid "change working directory"
+msgstr ""
+
+msgid "do not prompt, assume 'yes' for any required answers"
+msgstr ""
+
+msgid "suppress output"
+msgstr ""
+
+msgid "enable additional output"
+msgstr ""
+
+msgid "set/override config option"
+msgstr ""
+
+msgid "enable debugging output"
+msgstr ""
+
+msgid "start debugger"
+msgstr ""
+
+msgid "set the charset encoding"
+msgstr ""
+
+msgid "set the charset encoding mode"
+msgstr ""
+
+msgid "print traceback on exception"
+msgstr ""
+
+msgid "time how long the command takes"
+msgstr ""
+
+msgid "print command execution profile"
+msgstr ""
+
+msgid "output version information and exit"
+msgstr ""
+
+msgid "display help and exit"
+msgstr ""
+
+msgid "do not perform actions, just print output"
+msgstr ""
+
+msgid "specify ssh command to use"
+msgstr ""
+
+msgid "specify hg command to run on the remote side"
+msgstr ""
+
+msgid "include names matching the given patterns"
+msgstr ""
+
+msgid "exclude names matching the given patterns"
+msgstr ""
+
+msgid "use <text> as commit message"
+msgstr ""
+
+msgid "read commit message from <file>"
+msgstr ""
+
+msgid "record datecode as commit date"
+msgstr ""
+
+msgid "record the specified user as committer"
+msgstr ""
+
+msgid "display using template map file"
+msgstr ""
+
+msgid "display with template"
+msgstr ""
+
+msgid "do not show merges"
+msgstr ""
+
+msgid "treat all files as text"
+msgstr ""
+
+msgid "don't include dates in diff headers"
+msgstr ""
+
+msgid "show which function each change is in"
+msgstr ""
+
+msgid "ignore white space when comparing lines"
+msgstr ""
+
+msgid "ignore changes in the amount of white space"
+msgstr ""
+
+msgid "ignore changes whose lines are all blank"
+msgstr ""
+
+msgid "number of lines of context to show"
+msgstr ""
+
+msgid "guess renamed files by similarity (0<=s<=100)"
+msgstr ""
+
+msgid "[OPTION]... [FILE]..."
+msgstr ""
+
+msgid "annotate the specified revision"
+msgstr ""
+
+msgid "follow file copies and renames"
+msgstr ""
+
+msgid "list the author (long with -v)"
+msgstr ""
+
+msgid "list the date (short with -q)"
+msgstr ""
+
+msgid "list the revision number (default)"
+msgstr ""
+
+msgid "list the changeset"
+msgstr ""
+
+msgid "show line number at the first appearance"
+msgstr ""
+
+msgid "[-r REV] [-f] [-a] [-u] [-d] [-n] [-c] [-l] FILE..."
+msgstr ""
+
+msgid "do not pass files through decoders"
+msgstr ""
+
+msgid "directory prefix for files in archive"
+msgstr ""
+
+msgid "revision to distribute"
+msgstr ""
+
+msgid "type of distribution to create"
+msgstr ""
+
+msgid "[OPTION]... DEST"
+msgstr ""
+
+msgid "merge with old dirstate parent after backout"
+msgstr ""
+
+msgid "parent to choose when backing out merge"
+msgstr ""
+
+msgid "revision to backout"
+msgstr ""
+
+msgid "[OPTION]... [-r] REV"
+msgstr ""
+
+msgid "reset bisect state"
+msgstr ""
+
+msgid "mark changeset good"
+msgstr ""
+
+msgid "mark changeset bad"
+msgstr ""
+
+msgid "skip testing changeset"
+msgstr ""
+
+msgid "use command to check changeset state"
+msgstr ""
+
+msgid "do not update to target"
+msgstr ""
+
+msgid "[-gbsr] [-c CMD] [REV]"
+msgstr ""
+
+msgid "set branch name even if it shadows an existing branch"
+msgstr ""
+
+msgid "reset branch name to parent branch name"
+msgstr ""
+
+msgid "[-fC] [NAME]"
+msgstr ""
+
+msgid "show only branches that have unmerged heads"
+msgstr ""
+
+msgid "[-a]"
+msgstr ""
+
+msgid "run even when remote repository is unrelated"
+msgstr ""
+
+msgid "a changeset up to which you would like to bundle"
+msgstr ""
+
+msgid "a base changeset to specify instead of a destination"
+msgstr ""
+
+msgid "bundle all changesets in the repository"
+msgstr ""
+
+msgid "bundle compression type to use"
+msgstr ""
+
+msgid "[-f] [-a] [-r REV]... [--base REV]... FILE [DEST]"
+msgstr ""
+
+msgid "print output to file with formatted name"
+msgstr ""
+
+msgid "print the given revision"
+msgstr ""
+
+msgid "apply any matching decode filter"
+msgstr ""
+
+msgid "[OPTION]... FILE..."
+msgstr ""
+
+msgid "the clone will only contain a repository (no working copy)"
+msgstr ""
+
+msgid "a changeset you would like to have after cloning"
+msgstr ""
+
+msgid "[OPTION]... SOURCE [DEST]"
+msgstr ""
+
+msgid "mark new/missing files as added/removed before committing"
+msgstr ""
+
+msgid "mark a branch as closed, hiding it from the branch list"
+msgstr ""
+
+msgid "record a copy that has already occurred"
+msgstr ""
+
+msgid "forcibly copy over an existing managed file"
+msgstr ""
+
+msgid "[OPTION]... [SOURCE]... DEST"
+msgstr ""
+
+msgid "[INDEX] REV1 REV2"
+msgstr ""
+
+msgid "[COMMAND]"
+msgstr ""
+
+msgid "show the command options"
+msgstr ""
+
+msgid "[-o] CMD"
+msgstr ""
+
+msgid "try extended date formats"
+msgstr ""
+
+msgid "[-e] DATE [RANGE]"
+msgstr ""
+
+msgid "FILE REV"
+msgstr ""
+
+msgid "[PATH]"
+msgstr ""
+
+msgid "FILE"
+msgstr ""
+
+msgid "revision to rebuild to"
+msgstr ""
+
+msgid "[-r REV] [REV]"
+msgstr ""
+
+msgid "revision to debug"
+msgstr ""
+
+msgid "[-r REV] FILE"
+msgstr ""
+
+msgid "REV1 [REV2]"
+msgstr ""
+
+msgid "do not display the saved mtime"
+msgstr ""
+
+msgid "[OPTION]..."
+msgstr ""
+
+msgid "revision to check"
+msgstr ""
+
+msgid "[OPTION]... [-r REV1 [-r REV2]] [FILE]..."
+msgstr ""
+
+msgid "diff against the second parent"
+msgstr ""
+
+msgid "[OPTION]... [-o OUTFILESPEC] REV..."
+msgstr ""
+
+msgid "end fields with NUL"
+msgstr ""
+
+msgid "print all revisions that match"
+msgstr ""
+
+msgid "follow changeset history, or file history across copies and renames"
+msgstr ""
+
+msgid "ignore case when matching"
+msgstr ""
+
+msgid "print only filenames and revisions that match"
+msgstr ""
+
+msgid "print matching line numbers"
+msgstr ""
+
+msgid "search in given revision range"
+msgstr ""
+
+msgid "[OPTION]... PATTERN [FILE]..."
+msgstr ""
+
+msgid "show only heads which are descendants of REV"
+msgstr ""
+
+msgid "show only the active heads from open branches"
+msgstr ""
+
+msgid "show normal and closed heads"
+msgstr ""
+
+msgid "[-r STARTREV] [REV]..."
+msgstr ""
+
+msgid "[TOPIC]"
+msgstr ""
+
+msgid "identify the specified revision"
+msgstr ""
+
+msgid "show local revision number"
+msgstr ""
+
+msgid "show global revision id"
+msgstr ""
+
+msgid "show branch"
+msgstr ""
+
+msgid "show tags"
+msgstr ""
+
+msgid "[-nibt] [-r REV] [SOURCE]"
+msgstr ""
+
+msgid ""
+"directory strip option for patch. This has the same meaning as the "
+"corresponding patch option"
+msgstr ""
+
+msgid "base path"
+msgstr ""
+
+msgid "skip check for outstanding uncommitted changes"
+msgstr ""
+
+msgid "don't commit, just update the working directory"
+msgstr ""
+
+msgid "apply patch to the nodes from which it was generated"
+msgstr ""
+
+msgid "use any branch information in patch (implied by --exact)"
+msgstr ""
+
+msgid "[OPTION]... PATCH..."
+msgstr ""
+
+msgid "show newest record first"
+msgstr ""
+
+msgid "file to store the bundles into"
+msgstr ""
+
+msgid "a specific revision up to which you would like to pull"
+msgstr ""
+
+msgid "[-p] [-n] [-M] [-f] [-r REV]... [--bundle FILENAME] [SOURCE]"
+msgstr ""
+
+msgid "[-e CMD] [--remotecmd CMD] [DEST]"
+msgstr ""
+
+msgid "search the repository as it stood at REV"
+msgstr ""
+
+msgid "end filenames with NUL, for use with xargs"
+msgstr ""
+
+msgid "print complete paths from the filesystem root"
+msgstr ""
+
+msgid "[OPTION]... [PATTERN]..."
+msgstr ""
+
+msgid "only follow the first parent of merge changesets"
+msgstr ""
+
+msgid "show revisions matching date spec"
+msgstr ""
+
+msgid "show copied files"
+msgstr ""
+
+msgid "do case-insensitive search for a keyword"
+msgstr ""
+
+msgid "include revisions where files were removed"
+msgstr ""
+
+msgid "show only merges"
+msgstr ""
+
+msgid "revisions committed by user"
+msgstr ""
+
+msgid "show only changesets within the given named branch"
+msgstr ""
+
+msgid "do not display revision or any of its ancestors"
+msgstr ""
+
+msgid "[OPTION]... [FILE]"
+msgstr ""
+
+msgid "revision to display"
+msgstr ""
+
+msgid "[-r REV]"
+msgstr ""
+
+msgid "force a merge with outstanding changes"
+msgstr ""
+
+msgid "revision to merge"
+msgstr ""
+
+msgid "review revisions to merge (no merge is performed)"
+msgstr ""
+
+msgid "[-f] [[-r] REV]"
+msgstr ""
+
+msgid "a specific revision up to which you would like to push"
+msgstr ""
+
+msgid "[-M] [-p] [-n] [-f] [-r REV]... [DEST]"
+msgstr ""
+
+msgid "show parents from the specified revision"
+msgstr ""
+
+msgid "[-r REV] [FILE]"
+msgstr ""
+
+msgid "[NAME]"
+msgstr ""
+
+msgid "update to new tip if changesets were pulled"
+msgstr ""
+
+msgid "[-u] [-f] [-r REV]... [-e CMD] [--remotecmd CMD] [SOURCE]"
+msgstr ""
+
+msgid "force push"
+msgstr ""
+
+msgid "[-f] [-r REV]... [-e CMD] [--remotecmd CMD] [DEST]"
+msgstr ""
+
+msgid "record delete for missing files"
+msgstr ""
+
+msgid "remove (and delete) file even if added or modified"
+msgstr ""
+
+msgid "record a rename that has already occurred"
+msgstr ""
+
+msgid "[OPTION]... SOURCE... DEST"
+msgstr ""
+
+msgid "remerge all unresolved files"
+msgstr ""
+
+msgid "list state of files needing merge"
+msgstr ""
+
+msgid "mark files as resolved"
+msgstr ""
+
+msgid "unmark files as resolved"
+msgstr ""
+
+msgid "revert all changes when no arguments given"
+msgstr ""
+
+msgid "tipmost revision matching date"
+msgstr ""
+
+msgid "revision to revert to"
+msgstr ""
+
+msgid "do not save backup copies of files"
+msgstr ""
+
+msgid "[OPTION]... [-r REV] [NAME]..."
+msgstr ""
+
+msgid "name of access log file to write to"
+msgstr ""
+
+msgid "name of error log file to write to"
+msgstr ""
+
+msgid "port to listen on (default: 8000)"
+msgstr ""
+
+msgid "address to listen on (default: all interfaces)"
+msgstr ""
+
+msgid "prefix path to serve from (default: server root)"
+msgstr ""
+
+msgid "name to show in web pages (default: working directory)"
+msgstr ""
+
+msgid "name of the webdir config file (serve more than one repository)"
+msgstr ""
+
+msgid "for remote clients"
+msgstr ""
+
+msgid "web templates to use"
+msgstr ""
+
+msgid "template style to use"
+msgstr ""
+
+msgid "use IPv6 in addition to IPv4"
+msgstr ""
+
+msgid "SSL certificate file"
+msgstr ""
+
+msgid "show untrusted configuration options"
+msgstr ""
+
+msgid "[-u] [NAME]..."
+msgstr ""
+
+msgid "show status of all files"
+msgstr ""
+
+msgid "show only modified files"
+msgstr ""
+
+msgid "show only added files"
+msgstr ""
+
+msgid "show only removed files"
+msgstr ""
+
+msgid "show only deleted (but tracked) files"
+msgstr ""
+
+msgid "show only files without changes"
+msgstr ""
+
+msgid "show only unknown (not tracked) files"
+msgstr ""
+
+msgid "show only ignored files"
+msgstr ""
+
+msgid "hide status prefix"
+msgstr ""
+
+msgid "show source of copied files"
+msgstr ""
+
+msgid "show difference from revision"
+msgstr ""
+
+msgid "replace existing tag"
+msgstr ""
+
+msgid "make the tag local"
+msgstr ""
+
+msgid "revision to tag"
+msgstr ""
+
+msgid "remove a tag"
+msgstr ""
+
+msgid "[-l] [-m TEXT] [-d DATE] [-u USER] [-r REV] NAME..."
+msgstr ""
+
+msgid "[-p]"
+msgstr ""
+
+msgid "update to new tip if changesets were unbundled"
+msgstr ""
+
+msgid "[-u] FILE..."
+msgstr ""
+
+msgid "overwrite locally modified files (no backup)"
+msgstr ""
+
+msgid "check for uncommitted changes"
+msgstr ""
+
+msgid "[-C] [-d DATE] [[-r] REV]"
+msgstr ""
+
+#, python-format
+msgid "config error at %s:%d: '%s'"
+msgstr ""
+
+msgid "not found in manifest"
+msgstr ""
+
+msgid "branch name not in UTF-8!"
+msgstr ""
+
+#, python-format
+msgid "  searching for copies back to rev %d\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"  unmatched files in local:\n"
+"   %s\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"  unmatched files in other:\n"
+"   %s\n"
+msgstr ""
+
+msgid "  all copies found (* = to merge, ! = divergent):\n"
+msgstr ""
+
+msgid "  checking for directory renames\n"
+msgstr ""
+
+#, python-format
+msgid "  dir %s -> %s\n"
+msgstr ""
+
+#, python-format
+msgid "  file %s -> %s\n"
+msgstr ""
+
+msgid "working directory state appears damaged!"
+msgstr ""
+
+#, python-format
+msgid "'\\n' and '\\r' disallowed in filenames: %r"
+msgstr ""
+
+#, python-format
+msgid "directory %r already in dirstate"
+msgstr ""
+
+#, python-format
+msgid "file %r in dirstate clashes with %r"
+msgstr ""
+
+#, python-format
+msgid "not in dirstate: %s\n"
+msgstr ""
+
+msgid "unknown"
+msgstr ""
+
+msgid "character device"
+msgstr ""
+
+msgid "block device"
+msgstr ""
+
+msgid "fifo"
+msgstr ""
+
+msgid "socket"
+msgstr ""
+
+msgid "directory"
+msgstr ""
+
+#, python-format
+msgid "unsupported file type (type is %s)"
+msgstr ""
+
+#, python-format
+msgid "abort: %s\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"hg: command '%s' is ambiguous:\n"
+"    %s\n"
+msgstr ""
+
+#, python-format
+msgid "hg: %s\n"
+msgstr ""
+
+#, python-format
+msgid "timed out waiting for lock held by %s"
+msgstr ""
+
+#, python-format
+msgid "lock held by %s"
+msgstr ""
+
+#, python-format
+msgid "abort: %s: %s\n"
+msgstr ""
+
+#, python-format
+msgid "abort: could not lock %s: %s\n"
+msgstr ""
+
+#, python-format
+msgid "hg %s: %s\n"
+msgstr ""
+
+#, python-format
+msgid "abort: %s!\n"
+msgstr ""
+
+#, python-format
+msgid "abort: %s"
+msgstr ""
+
+msgid " empty string\n"
+msgstr ""
+
+msgid "killed!\n"
+msgstr ""
+
+#, python-format
+msgid "hg: unknown command '%s'\n"
+msgstr ""
+
+#, python-format
+msgid "abort: could not import module %s!\n"
+msgstr ""
+
+msgid "(did you forget to compile extensions?)\n"
+msgstr ""
+
+msgid "(is your Python install correct?)\n"
+msgstr ""
+
+#, python-format
+msgid "abort: error: %s\n"
+msgstr ""
+
+msgid "broken pipe\n"
+msgstr ""
+
+msgid "interrupted!\n"
+msgstr ""
+
+msgid ""
+"\n"
+"broken pipe\n"
+msgstr ""
+
+msgid "abort: out of memory\n"
+msgstr ""
+
+msgid "** unknown exception encountered, details follow\n"
+msgstr ""
+
+msgid "** report bug details to http://mercurial.selenic.com/bts/\n"
+msgstr ""
+
+msgid "** or mercurial@selenic.com\n"
+msgstr ""
+
+#, python-format
+msgid "** Mercurial Distributed SCM (version %s)\n"
+msgstr ""
+
+#, python-format
+msgid "** Extensions loaded: %s\n"
+msgstr ""
+
+#, python-format
+msgid "no definition for alias '%s'\n"
+msgstr ""
+
+#, python-format
+msgid "alias '%s' resolves to unknown command '%s'\n"
+msgstr ""
+
+#, python-format
+msgid "alias '%s' resolves to ambiguous command '%s'\n"
+msgstr ""
+
+#, python-format
+msgid "alias '%s' shadows command\n"
+msgstr ""
+
+#, python-format
+msgid "malformed --config option: %s"
+msgstr ""
+
+#, python-format
+msgid "extension '%s' overrides commands: %s\n"
+msgstr ""
+
+msgid "Option --config may not be abbreviated!"
+msgstr ""
+
+msgid "Option --cwd may not be abbreviated!"
+msgstr ""
+
+msgid ""
+"Option -R has to be separated from other options (e.g. not -qR) and --"
+"repository may only be abbreviated as --repo!"
+msgstr ""
+
+#, python-format
+msgid "Time: real %.3f secs (user %.3f+%.3f sys %.3f+%.3f)\n"
+msgstr ""
+
+#, python-format
+msgid "repository '%s' is not local"
+msgstr ""
+
+msgid "invalid arguments"
+msgstr ""
+
+#, python-format
+msgid "unrecognized profiling format '%s' - Ignored\n"
+msgstr ""
+
+msgid ""
+"lsprof not available - install from http://codespeak.net/svn/user/arigo/hack/"
+"misc/lsprof/"
+msgstr ""
+
+#, python-format
+msgid "*** failed to import extension %s from %s: %s\n"
+msgstr ""
+
+#, python-format
+msgid "*** failed to import extension %s: %s\n"
+msgstr ""
+
+#, python-format
+msgid "couldn't find merge tool %s\n"
+msgstr ""
+
+#, python-format
+msgid "tool %s can't handle symlinks\n"
+msgstr ""
+
+#, python-format
+msgid "tool %s can't handle binary\n"
+msgstr ""
+
+#, python-format
+msgid "tool %s requires a GUI\n"
+msgstr ""
+
+#, python-format
+msgid "picked tool '%s' for %s (binary %s symlink %s)\n"
+msgstr ""
+
+#, python-format
+msgid ""
+" no tool found to merge %s\n"
+"keep (l)ocal or take (o)ther?"
+msgstr ""
+
+msgid "&Local"
+msgstr ""
+
+msgid "&Other"
+msgstr ""
+
+msgid "l"
+msgstr ""
+
+#, python-format
+msgid "merging %s and %s to %s\n"
+msgstr ""
+
+#, python-format
+msgid "merging %s\n"
+msgstr ""
+
+#, python-format
+msgid "my %s other %s ancestor %s\n"
+msgstr ""
+
+msgid " premerge successful\n"
+msgstr ""
+
+#, python-format
+msgid ""
+" output file %s appears unchanged\n"
+"was merge successful (yn)?"
+msgstr ""
+
+msgid "&No"
+msgstr ""
+
+msgid "&Yes"
+msgstr ""
+
+msgid "n"
+msgstr ""
+
+#, python-format
+msgid "merging %s failed!\n"
+msgstr ""
+
+#, python-format
+msgid "Inconsistent state, %s:%s is good and bad"
+msgstr ""
+
+#, python-format
+msgid "unknown bisect kind %s"
+msgstr ""
+
+msgid ""
+"\n"
+"    Mercurial has the ability to add new features through the use of\n"
+"    extensions. Extensions may add new commands, add options to\n"
+"    existing commands, change the default behavior of commands, or\n"
+"    implement hooks.\n"
+"\n"
+"    Extensions are not loaded by default for a variety of reasons:\n"
+"    they can increase startup overhead; they may be meant for\n"
+"    advanced usage only; they may provide potentially dangerous\n"
+"    abilities (such as letting you destroy or modify history); they\n"
+"    might not be ready for prime time; or they may alter some\n"
+"    usual behaviors of stock Mercurial. It is thus up to the user to\n"
+"    activate extensions as needed.\n"
+"\n"
+"    To enable the \"foo\" extension, either shipped with Mercurial\n"
+"    or in the Python search path, create an entry for it in your\n"
+"    hgrc, like this:\n"
+"\n"
+"      [extensions]\n"
+"      foo =\n"
+"\n"
+"    You may also specify the full path to an extension:\n"
+"\n"
+"      [extensions]\n"
+"      myfeature = ~/.hgext/myfeature.py\n"
+"\n"
+"    To explicitly disable an extension enabled in an hgrc of broader\n"
+"    scope, prepend its path with !:\n"
+"\n"
+"      [extensions]\n"
+"      # disabling extension bar residing in /path/to/extension/bar.py\n"
+"      hgext.bar = !/path/to/extension/bar.py\n"
+"      # ditto, but no path was supplied for extension baz\n"
+"      hgext.baz = !\n"
+"    "
+msgstr ""
+"\n"
+"    Mercurial a la capacité de s'enrichir de nouvelles\n"
+"    fonctionnalités par le biais d'extensions. Les extensions\n"
+"    permettent d'ajouter des nouvelles commandes, de changer le\n"
+"    comportement de commandes existantes ou leur ajouter des\n"
+"    options, ou encore d'implémenter de nouveaux \"hooks\".\n"
+"\n"
+"    Les extensions ne sont pas chargées automatiquement par défaut\n"
+"    pour diverses raisons : elles peuvent accroître la latence\n"
+"    de lancement de Mercurial ; elle peuvent n'être destinées qu'à\n"
+"    une utilisation avancée ; elle peuvent fournir des\n"
+"    fonctionnalités potentiellement dangereuses, comme de vous\n"
+"    permettre de modifier ou détruire l'historique du dépôt ; elles\n"
+"    peuvent ne pas être encore prêtes à être utilisées par le plus\n"
+"    grand nombre ; ou encore elles peuvent modifier certains des\n"
+"    comportements habituels de Mercurial.\n"
+"    Il appartient donc à l'utilisateur de les activer en fonction\n"
+"    de ses besoins.\n"
+"\n"
+"    Pour activer l'extension \"truc\" fournie avec Mercurial ou\n"
+"    présente dans le chemin de recherche de Python, déclarez-la\n"
+"    dans votre fichier de configuration hgrc comme suit :\n"
+"\n"
+"      [extensions]\n"
+"      truc =\n"
+"\n"
+"    Vous pouvez aussi indiquer l'endroit où elle se trouve :\n"
+"\n"
+"      [extensions]\n"
+"      monbidule = ~/.hgext/monbidule.py\n"
+"\n"
+"    Pour forcer la désactivation d'une extension activée par un\n"
+"    autre hgrc, précédez son chemin d'un point d'exclamation :\n"
+"\n"
+"      [extensions]\n"
+"      # désactivation de machin qui se trouve dans /vers/machin.py\n"
+"      hgext.bar = !/vers/machin.py\n"
+"      # idem, mais aucun chemin n'avait été donné pour chose \n"
+"      hgext.chose = !\n"
+"    "
+
+msgid "disabled extensions:"
+msgstr "extensions désactivées :"
+
+msgid "Date Formats"
+msgstr ""
+
+msgid ""
+"\n"
+"    Some commands allow the user to specify a date, e.g.:\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"
+"\n"
+"    This is the internal representation format for dates. unixtime is\n"
+"    the number of seconds since the epoch (1970-01-01 00:00 UTC).\n"
+"    offset is the offset of the local timezone, in seconds west of UTC\n"
+"    (negative if 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 ""
+
+msgid "File Name Patterns"
+msgstr ""
+
+msgid ""
+"\n"
+"    Mercurial accepts several notations for identifying one or more\n"
+"    files at a time.\n"
+"\n"
+"    By default, Mercurial treats filenames as shell-style extended\n"
+"    glob patterns.\n"
+"\n"
+"    Alternate pattern notations must be specified explicitly.\n"
+"\n"
+"    To use a plain path name without any pattern matching, start it\n"
+"    with \"path:\". These path names must completely match starting at\n"
+"    the current repository root.\n"
+"\n"
+"    To use an extended glob, start a name with \"glob:\". Globs are\n"
+"    rooted at the current directory; a glob such as \"*.c\" will only\n"
+"    match files in the current directory ending with \".c\".\n"
+"\n"
+"    The supported glob syntax extensions are \"**\" to match any string\n"
+"    across path separators and \"{a,b}\" to mean \"a or b\".\n"
+"\n"
+"    To use a Perl/Python regular expression, start a name with \"re:\".\n"
+"    Regexp pattern matching is anchored at the root of the repository.\n"
+"\n"
+"    Plain examples:\n"
+"\n"
+"    path:foo/bar   a name bar in a directory named foo in the root of\n"
+"                   the repository\n"
+"    path:path:name a file or directory named \"path:name\"\n"
+"\n"
+"    Glob examples:\n"
+"\n"
+"    glob:*.c       any name ending in \".c\" in the current directory\n"
+"    *.c            any name ending in \".c\" in the current directory\n"
+"    **.c           any name ending in \".c\" in any subdirectory of the\n"
+"                   current directory including itself.\n"
+"    foo/*.c        any name ending in \".c\" in the directory foo\n"
+"    foo/**.c       any name ending in \".c\" in any subdirectory of foo\n"
+"                   including itself.\n"
+"\n"
+"    Regexp examples:\n"
+"\n"
+"    re:.*\\.c$      any name ending in \".c\", anywhere in the repository\n"
+"\n"
+"    "
+msgstr ""
+
+msgid "Environment Variables"
+msgstr ""
+
+msgid ""
+"\n"
+"HG::\n"
+"    Path to the 'hg' executable, automatically passed when running\n"
+"    hooks, extensions or external tools. If unset or empty, this is\n"
+"    the hg executable's name if it's frozen, or an executable named\n"
+"    'hg' (with %PATHEXT% [defaulting to COM/EXE/BAT/CMD] extensions on\n"
+"    Windows) is searched.\n"
+"\n"
+"HGEDITOR::\n"
+"    This is the name of the editor to run when committing. See EDITOR.\n"
+"\n"
+"    (deprecated, use .hgrc)\n"
+"\n"
+"HGENCODING::\n"
+"    This overrides the default locale setting detected by Mercurial.\n"
+"    This setting is used to convert data including usernames,\n"
+"    changeset descriptions, tag names, and branches. This setting can\n"
+"    be overridden with the --encoding command-line option.\n"
+"\n"
+"HGENCODINGMODE::\n"
+"    This sets Mercurial's behavior for handling unknown characters\n"
+"    while transcoding user input. The default is \"strict\", which\n"
+"    causes Mercurial to abort if it can't map a character. Other\n"
+"    settings include \"replace\", which replaces unknown characters, and\n"
+"    \"ignore\", which drops them. This setting can be overridden with\n"
+"    the --encodingmode command-line option.\n"
+"\n"
+"HGMERGE::\n"
+"    An executable to use for resolving merge conflicts. The program\n"
+"    will be executed with three arguments: local file, remote file,\n"
+"    ancestor file.\n"
+"\n"
+"    (deprecated, use .hgrc)\n"
+"\n"
+"HGRCPATH::\n"
+"    A list of files or directories to search for hgrc files. Item\n"
+"    separator is \":\" on Unix, \";\" on Windows. If HGRCPATH is not set,\n"
+"    platform default search path is used. If empty, only the .hg/hgrc\n"
+"    from the current repository is read.\n"
+"\n"
+"    For each element in HGRCPATH:\n"
+"    * if it's a directory, all files ending with .rc are added\n"
+"    * otherwise, the file itself will be added\n"
+"\n"
+"HGUSER::\n"
+"    This is the string used as the author of a commit. If not set,\n"
+"    available values will be considered in this order:\n"
+"\n"
+"    * HGUSER (deprecated)\n"
+"    * hgrc files from the HGRCPATH\n"
+"    * EMAIL\n"
+"    * interactive prompt\n"
+"    * LOGNAME (with '@hostname' appended)\n"
+"\n"
+"    (deprecated, use .hgrc)\n"
+"\n"
+"EMAIL::\n"
+"    May be used as the author of a commit; see HGUSER.\n"
+"\n"
+"LOGNAME::\n"
+"    May be used as the author of a commit; see HGUSER.\n"
+"\n"
+"VISUAL::\n"
+"    This is the name of the editor to use when committing. See EDITOR.\n"
+"\n"
+"EDITOR::\n"
+"    Sometimes Mercurial needs to open a text file in an editor for a\n"
+"    user to modify, for example when writing commit messages. The\n"
+"    editor it uses is determined by looking at the environment\n"
+"    variables HGEDITOR, VISUAL and EDITOR, in that order. The first\n"
+"    non-empty one is chosen. If all of them are empty, the editor\n"
+"    defaults to 'vi'.\n"
+"\n"
+"PYTHONPATH::\n"
+"    This is used by Python to find imported modules and may need to be\n"
+"    set appropriately if this Mercurial is not installed system-wide.\n"
+"    "
+msgstr ""
+
+msgid "Specifying Single Revisions"
+msgstr ""
+
+msgid ""
+"\n"
+"    Mercurial supports several ways to specify individual revisions.\n"
+"\n"
+"    A plain integer is treated as a revision number. Negative integers\n"
+"    are treated as topological offsets from the tip, with -1 denoting\n"
+"    the tip. As such, negative numbers are only useful if you've\n"
+"    memorized your local tree numbers and want to save typing a single\n"
+"    digit. This editor suggests copy and paste.\n"
+"\n"
+"    A 40-digit hexadecimal string is treated as a unique revision\n"
+"    identifier.\n"
+"\n"
+"    A hexadecimal string less than 40 characters long is treated as a\n"
+"    unique revision identifier, and referred to as a short-form\n"
+"    identifier. A short-form identifier is only valid if it is the\n"
+"    prefix of exactly one full-length identifier.\n"
+"\n"
+"    Any other string is treated as a tag name, which is a symbolic\n"
+"    name associated with a revision identifier. Tag names may not\n"
+"    contain the \":\" character.\n"
+"\n"
+"    The reserved name \"tip\" is a special tag that always identifies\n"
+"    the most recent revision.\n"
+"\n"
+"    The reserved name \"null\" indicates the null revision. This is the\n"
+"    revision of an empty repository, and the parent of revision 0.\n"
+"\n"
+"    The reserved name \".\" indicates the working directory parent. If\n"
+"    no working directory is checked out, it is equivalent to null. If\n"
+"    an uncommitted merge is in progress, \".\" is the revision of the\n"
+"    first parent.\n"
+"    "
+msgstr ""
+
+msgid "Specifying Multiple Revisions"
+msgstr ""
+
+msgid ""
+"\n"
+"    When Mercurial accepts more than one revision, they may be\n"
+"    specified individually, or provided as a topologically continuous\n"
+"    range, separated by the \":\" character.\n"
+"\n"
+"    The syntax of range notation is [BEGIN]:[END], where BEGIN and END\n"
+"    are revision identifiers. Both BEGIN and END are optional. If\n"
+"    BEGIN is not specified, it defaults to revision number 0. If END\n"
+"    is not specified, it defaults to the tip. The range \":\" thus means\n"
+"    \"all revisions\".\n"
+"\n"
+"    If BEGIN is greater than END, revisions are treated in reverse\n"
+"    order.\n"
+"\n"
+"    A range acts as a closed interval. This means that a range of 3:5\n"
+"    gives 3, 4 and 5. Similarly, a range of 9:6 gives 9, 8, 7, and 6.\n"
+"    "
+msgstr ""
+
+msgid "Diff Formats"
+msgstr ""
+
+msgid ""
+"\n"
+"    Mercurial's default format for showing changes between two\n"
+"    versions of a file is compatible with the unified format of GNU\n"
+"    diff, which can be used by GNU patch and many other standard\n"
+"    tools.\n"
+"\n"
+"    While this standard format is often enough, it does not encode the\n"
+"    following information:\n"
+"\n"
+"     - executable status and other permission bits\n"
+"     - copy or rename information\n"
+"     - changes in binary files\n"
+"     - creation or deletion of empty files\n"
+"\n"
+"    Mercurial also supports the extended diff format from the git VCS\n"
+"    which addresses these limitations. The git diff format is not\n"
+"    produced by default because a few widespread tools still do not\n"
+"    understand this format.\n"
+"\n"
+"    This means that when generating diffs from a Mercurial repository\n"
+"    (e.g. with \"hg export\"), you should be careful about things like\n"
+"    file copies and renames or other things mentioned above, because\n"
+"    when applying a standard diff to a different repository, this\n"
+"    extra information is lost. Mercurial's internal operations (like\n"
+"    push and pull) are not affected by this, because they use an\n"
+"    internal binary format for communicating changes.\n"
+"\n"
+"    To make Mercurial produce the git extended diff format, use the\n"
+"    --git option available for many commands, or set 'git = True' in\n"
+"    the [diff] section of your hgrc. You do not need to set this\n"
+"    option when importing diffs in this format or using them in the mq\n"
+"    extension.\n"
+"    "
+msgstr ""
+
+msgid "Template Usage"
+msgstr ""
+
+msgid ""
+"\n"
+"    Mercurial allows you to customize output of commands through\n"
+"    templates. You can either pass in a template from the command\n"
+"    line, via the --template option, or select an existing\n"
+"    template-style (--style).\n"
+"\n"
+"    You can customize output for any \"log-like\" command: log,\n"
+"    outgoing, incoming, tip, parents, heads and glog.\n"
+"\n"
+"    Three styles are packaged with Mercurial: default (the style used\n"
+"    when no explicit preference is passed), compact and changelog.\n"
+"    Usage:\n"
+"\n"
+"        $ hg log -r1 --style changelog\n"
+"\n"
+"    A template is a piece of text, with markup to invoke variable\n"
+"    expansion:\n"
+"\n"
+"        $ hg log -r1 --template \"{node}\\n\"\n"
+"        b56ce7b07c52de7d5fd79fb89701ea538af65746\n"
+"\n"
+"    Strings in curly braces are called keywords. The availability of\n"
+"    keywords depends on the exact context of the templater. These\n"
+"    keywords are usually available for templating a log-like command:\n"
+"\n"
+"    - author: String. The unmodified author of the changeset.\n"
+"    - branches: String. The name of the branch on which the changeset\n"
+"          was committed. Will be empty if the branch name was default.\n"
+"    - date: Date information. The date when the changeset was committed.\n"
+"    - desc: String. The text of the changeset description.\n"
+"    - diffstat: String. Statistics of changes with the following\n"
+"          format: \"modified files: +added/-removed lines\"\n"
+"    - files: List of strings. All files modified, added, or removed by\n"
+"          this changeset.\n"
+"    - file_adds: List of strings. Files added by this changeset.\n"
+"    - file_mods: List of strings. Files modified by this changeset.\n"
+"    - file_dels: List of strings. Files removed by this changeset.\n"
+"    - node: String. The changeset identification hash, as a\n"
+"          40-character hexadecimal string.\n"
+"    - parents: List of strings. The parents of the changeset.\n"
+"    - rev: Integer. The repository-local changeset revision number.\n"
+"    - tags: List of strings. Any tags associated with the changeset.\n"
+"\n"
+"    The \"date\" keyword does not produce human-readable output. If you\n"
+"    want to use a date in your output, you can use a filter to process\n"
+"    it. Filters are functions which return a string based on the input\n"
+"    variable. You can also use a chain of filters to get the desired\n"
+"    output:\n"
+"\n"
+"       $ hg tip --template \"{date|isodate}\\n\"\n"
+"       2008-08-21 18:22 +0000\n"
+"\n"
+"    List of filters:\n"
+"\n"
+"    - addbreaks: Any text. Add an XHTML \"<br />\" tag before the end of\n"
+"          every line except the last.\n"
+"    - age: Date. Returns a human-readable date/time difference between\n"
+"          the given date/time and the current date/time.\n"
+"    - basename: Any text. Treats the text as a path, and returns the\n"
+"          last component of the path after splitting by the path\n"
+"          separator (ignoring trailing separators). For example,\n"
+"          \"foo/bar/baz\" becomes \"baz\" and \"foo/bar//\" becomes \"bar"
+"\".\n"
+"    - stripdir: Treat the text as path and strip a directory level, if\n"
+"          possible. For example, \"foo\" and \"foo/bar\" becomes \"foo\".\n"
+"    - date: Date. Returns a date in a Unix date format, including\n"
+"          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 component.\n"
+"          Example: 'User <user@example.com>' becomes 'example.com'.\n"
+"    - email: Any text. Extracts the first string that looks like an\n"
+"          email address. Example: 'User <user@example.com>' becomes\n"
+"          '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"
+"    - fill76: Any text. Wraps the text to fit in 76 columns.\n"
+"    - firstline: Any text. Returns the first line of text.\n"
+"    - nonempty: Any text. Returns '(none)' if the string is empty.\n"
+"    - hgdate: Date. Returns the date as a pair of numbers:\n"
+"          \"1157407993 25200\" (Unix timestamp, timezone offset).\n"
+"    - isodate: Date. Returns the date in ISO 8601 format.\n"
+"    - localdate: Date. Converts a date to local date.\n"
+"    - obfuscate: Any text. Returns the input text rendered as a\n"
+"          sequence of XML entities.\n"
+"    - person: Any text. Returns the text before an email address.\n"
+"    - rfc822date: Date. Returns a date using the same format used\n"
+"          in email headers.\n"
+"    - short: Changeset hash. Returns the short form of a changeset\n"
+"          hash, i.e. a 12-byte hexadecimal string.\n"
+"    - shortdate: Date. Returns a date like \"2006-09-18\".\n"
+"    - strip: Any text. Strips all leading and trailing whitespace.\n"
+"    - tabindent: Any text. Returns the text, with every line except\n"
+"          the first starting with a tab character.\n"
+"    - urlescape: Any text. Escapes all \"special\" characters. For\n"
+"          example, \"foo bar\" becomes \"foo%20bar\".\n"
+"    - user: Any text. Returns the user portion of an email address.\n"
+"    "
+msgstr ""
+
+msgid "URL Paths"
+msgstr ""
+
+msgid ""
+"\n"
+"    Valid URLs are of the form:\n"
+"\n"
+"      local/filesystem/path (or file://local/filesystem/path)\n"
+"      http://[user[:pass]@]host[:port]/[path]\n"
+"      https://[user[:pass]@]host[:port]/[path]\n"
+"      ssh://[user[:pass]@]host[:port]/[path]\n"
+"\n"
+"    Paths in the local filesystem can either point to Mercurial\n"
+"    repositories or to bundle files (as created by 'hg bundle' or\n"
+"    'hg incoming --bundle').\n"
+"\n"
+"    An optional identifier after # indicates a particular branch, tag,\n"
+"    or changeset to use from the remote repository.\n"
+"\n"
+"    Some features, such as pushing to http:// and https:// URLs are\n"
+"    only possible if the feature is explicitly enabled on the remote\n"
+"    Mercurial server.\n"
+"\n"
+"    Some notes about using SSH with Mercurial:\n"
+"    - SSH requires an accessible shell account on the destination\n"
+"      machine and a copy of hg in the remote path or specified with as\n"
+"      remotecmd.\n"
+"    - path is relative to the remote user's home directory by default.\n"
+"      Use an extra slash at the start of a path to specify an absolute "
+"path:\n"
+"        ssh://example.com//tmp/repository\n"
+"    - Mercurial doesn't use its own compression via SSH; the right\n"
+"      thing to do is to configure it in your ~/.ssh/config, e.g.:\n"
+"        Host *.mylocalnetwork.example.com\n"
+"          Compression no\n"
+"        Host *\n"
+"          Compression yes\n"
+"      Alternatively specify \"ssh -C\" as your ssh command in your hgrc\n"
+"      or with the --ssh command line option.\n"
+"\n"
+"    These URLs can all be stored in your hgrc with path aliases under\n"
+"    the [paths] section like so:\n"
+"    [paths]\n"
+"    alias1 = URL1\n"
+"    alias2 = URL2\n"
+"    ...\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"
+"\n"
+"    Two path aliases are special because they are used as defaults\n"
+"    when you do not provide the URL to a command:\n"
+"\n"
+"    default:\n"
+"      When you create a repository with hg clone, the clone command\n"
+"      saves the location of the source repository as the new\n"
+"      repository's 'default' path. This is then used when you omit\n"
+"      path from push- and pull-like commands (including incoming and\n"
+"      outgoing).\n"
+"\n"
+"    default-push:\n"
+"      The push command will look for a path named 'default-push', and\n"
+"      prefer it over 'default' if both are defined.\n"
+"    "
+msgstr ""
+
+msgid "Using additional features"
+msgstr ""
+
+msgid "can only share local repositories"
+msgstr ""
+
+msgid "destination already exists"
+msgstr ""
+
+msgid "updating working directory\n"
+msgstr ""
+
+#, python-format
+msgid "destination directory: %s\n"
+msgstr ""
+
+#, python-format
+msgid "destination '%s' already exists"
+msgstr ""
+
+#, python-format
+msgid "destination '%s' is not empty"
+msgstr ""
+
+msgid ""
+"src repository does not support revision lookup and so doesn't support clone "
+"by revision"
+msgstr ""
+
+msgid "clone from remote to remote not supported"
+msgstr ""
+
+msgid "updated"
+msgstr ""
+
+msgid "merged"
+msgstr ""
+
+msgid "removed"
+msgstr ""
+
+msgid "unresolved"
+msgstr ""
+
+#, python-format
+msgid "%d files %s"
+msgstr ""
+
+msgid "use 'hg resolve' to retry unresolved file merges\n"
+msgstr ""
+
+msgid ""
+"use 'hg resolve' to retry unresolved file merges or 'hg up --clean' to "
+"abandon\n"
+msgstr ""
+
+msgid "(branch merge, don't forget to commit)\n"
+msgstr ""
+
+#, python-format
+msgid "error reading %s/.hg/hgrc: %s\n"
+msgstr ""
+
+msgid "SSL support is unavailable"
+msgstr ""
+
+msgid "IPv6 is not available on this system"
+msgstr ""
+
+#, python-format
+msgid "cannot start server at '%s:%d': %s"
+msgstr ""
+
+#, python-format
+msgid "calling hook %s: %s\n"
+msgstr ""
+
+#, python-format
+msgid "%s hook is invalid (\"%s\" not in a module)"
+msgstr ""
+
+#, python-format
+msgid "%s hook is invalid (import of \"%s\" failed)"
+msgstr ""
+
+#, python-format
+msgid "%s hook is invalid (\"%s\" is not defined)"
+msgstr ""
+
+#, python-format
+msgid "%s hook is invalid (\"%s\" is not callable)"
+msgstr ""
+
+#, python-format
+msgid "error: %s hook failed: %s\n"
+msgstr ""
+
+#, python-format
+msgid "error: %s hook raised an exception: %s\n"
+msgstr ""
+
+#, python-format
+msgid "%s hook failed"
+msgstr ""
+
+#, python-format
+msgid "warning: %s hook failed\n"
+msgstr ""
+
+#, python-format
+msgid "running hook %s: %s\n"
+msgstr ""
+
+#, python-format
+msgid "%s hook %s"
+msgstr ""
+
+#, python-format
+msgid "warning: %s hook %s\n"
+msgstr ""
+
+msgid "connection ended unexpectedly"
+msgstr ""
+
+#, python-format
+msgid "unsupported URL component: \"%s\""
+msgstr ""
+
+#, python-format
+msgid "using %s\n"
+msgstr ""
+
+#, python-format
+msgid "capabilities: %s\n"
+msgstr ""
+
+msgid "operation not supported over http"
+msgstr ""
+
+#, python-format
+msgid "sending %s command\n"
+msgstr ""
+
+#, python-format
+msgid "sending %s bytes\n"
+msgstr ""
+
+msgid "authorization failed"
+msgstr ""
+
+#, python-format
+msgid "http error while sending %s command\n"
+msgstr ""
+
+msgid "http error, possibly caused by proxy setting"
+msgstr ""
+
+#, python-format
+msgid "real URL is %s\n"
+msgstr ""
+
+#, python-format
+msgid "requested URL: '%s'\n"
+msgstr ""
+
+#, python-format
+msgid "'%s' does not appear to be an hg repository"
+msgstr ""
+
+#, python-format
+msgid "'%s' sent a broken Content-Type header (%s)"
+msgstr ""
+
+#, python-format
+msgid "'%s' uses newer protocol %s"
+msgstr ""
+
+msgid "look up remote revision"
+msgstr ""
+
+msgid "unexpected response:"
+msgstr ""
+
+msgid "look up remote changes"
+msgstr ""
+
+msgid "push failed (unexpected response):"
+msgstr ""
+
+#, python-format
+msgid "push failed: %s"
+msgstr ""
+
+msgid "Python support for SSL and HTTPS is not installed"
+msgstr ""
+
+msgid "cannot create new http repository"
+msgstr ""
+
+#, python-format
+msgid "%s: ignoring invalid syntax '%s'\n"
+msgstr ""
+
+#, python-format
+msgid "skipping unreadable ignore file '%s': %s\n"
+msgstr ""
+
+#, python-format
+msgid "repository %s not found"
+msgstr ""
+
+#, python-format
+msgid "repository %s already exists"
+msgstr ""
+
+#, python-format
+msgid "requirement '%s' not supported"
+msgstr ""
+
+#, python-format
+msgid ".hg/sharedpath points to nonexistent directory %s"
+msgstr ""
+
+#, python-format
+msgid "%r cannot be used in a tag name"
+msgstr ""
+
+msgid "working copy of .hgtags is changed (please commit .hgtags manually)"
+msgstr ""
+
+#, python-format
+msgid "%s, line %s: %s\n"
+msgstr ""
+
+msgid "cannot parse entry"
+msgstr ""
+
+#, python-format
+msgid "node '%s' is not well formed"
+msgstr ""
+
+#, python-format
+msgid "working directory has unknown parent '%s'!"
+msgstr ""
+
+#, python-format
+msgid "unknown revision '%s'"
+msgstr ""
+
+#, python-format
+msgid "filtering %s through %s\n"
+msgstr ""
+
+msgid "journal already exists - run hg recover"
+msgstr ""
+
+msgid "rolling back interrupted transaction\n"
+msgstr ""
+
+msgid "no interrupted transaction available\n"
+msgstr ""
+
+msgid "rolling back last transaction\n"
+msgstr ""
+
+#, python-format
+msgid "Named branch could not be reset, current branch still is: %s\n"
+msgstr ""
+
+msgid "no rollback information available\n"
+msgstr ""
+
+#, python-format
+msgid "waiting for lock on %s held by %r\n"
+msgstr ""
+
+#, python-format
+msgid "repository %s"
+msgstr ""
+
+#, python-format
+msgid "working directory of %s"
+msgstr ""
+
+#, python-format
+msgid " %s: searching for copy revision for %s\n"
+msgstr ""
+
+#, python-format
+msgid " %s: copy %s:%s\n"
+msgstr ""
+
+msgid "cannot partially commit a merge (do not specify files or patterns)"
+msgstr ""
+
+msgid "file not found!"
+msgstr ""
+
+msgid "no match under directory!"
+msgstr ""
+
+msgid "file not tracked!"
+msgstr ""
+
+msgid "nothing changed\n"
+msgstr ""
+
+msgid "unresolved merge conflicts (see hg resolve)"
+msgstr ""
+
+#, python-format
+msgid "committing subrepository %s\n"
+msgstr ""
+
+#, python-format
+msgid "trouble committing %s!\n"
+msgstr ""
+
+#, python-format
+msgid "%s does not exist!\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"%s: files over 10MB may cause memory and performance problems\n"
+"(use 'hg revert %s' to unadd the file)\n"
+msgstr ""
+
+#, python-format
+msgid "%s not added: only files and symlinks supported currently\n"
+msgstr ""
+
+#, python-format
+msgid "%s already tracked!\n"
+msgstr ""
+
+#, python-format
+msgid "%s not added!\n"
+msgstr ""
+
+#, python-format
+msgid "%s still exists!\n"
+msgstr ""
+
+#, python-format
+msgid "%s not tracked!\n"
+msgstr ""
+
+#, python-format
+msgid "%s not removed!\n"
+msgstr ""
+
+#, python-format
+msgid "copy failed: %s is not a file or a symbolic link\n"
+msgstr ""
+
+msgid "searching for changes\n"
+msgstr ""
+
+#, python-format
+msgid "examining %s:%s\n"
+msgstr ""
+
+msgid "branch already found\n"
+msgstr ""
+
+#, python-format
+msgid "found incomplete branch %s:%s\n"
+msgstr ""
+
+#, python-format
+msgid "found new changeset %s\n"
+msgstr ""
+
+#, python-format
+msgid "request %d: %s\n"
+msgstr ""
+
+#, python-format
+msgid "received %s:%s\n"
+msgstr ""
+
+#, python-format
+msgid "narrowing %d:%d %s\n"
+msgstr ""
+
+#, python-format
+msgid "found new branch changeset %s\n"
+msgstr ""
+
+#, python-format
+msgid "narrowed branch search to %s:%s\n"
+msgstr ""
+
+msgid "already have changeset "
+msgstr ""
+
+msgid "warning: repository is unrelated\n"
+msgstr ""
+
+msgid "repository is unrelated"
+msgstr ""
+
+msgid "found new changesets starting at "
+msgstr ""
+
+#, python-format
+msgid "%d total queries\n"
+msgstr ""
+
+msgid "common changesets up to "
+msgstr ""
+
+msgid "requesting all changes\n"
+msgstr ""
+
+msgid ""
+"Partial pull cannot be done because other repository doesn't support "
+"changegroupsubset."
+msgstr ""
+
+#, python-format
+msgid "abort: push creates new remote branch '%s'!\n"
+msgstr ""
+
+msgid "abort: push creates new remote heads!\n"
+msgstr ""
+
+msgid "(did you forget to merge? use push -f to force)\n"
+msgstr ""
+
+msgid "note: unsynced remote changes!\n"
+msgstr ""
+
+#, python-format
+msgid "%d changesets found\n"
+msgstr ""
+
+msgid "list of changesets:\n"
+msgstr ""
+
+#, python-format
+msgid "empty or missing revlog for %s"
+msgstr ""
+
+#, python-format
+msgid "add changeset %s\n"
+msgstr ""
+
+msgid "adding changesets\n"
+msgstr ""
+
+msgid "received changelog group is empty"
+msgstr ""
+
+msgid "adding manifests\n"
+msgstr ""
+
+msgid "adding file changes\n"
+msgstr ""
+
+#, python-format
+msgid "adding %s revisions\n"
+msgstr ""
+
+msgid "received file revlog group is empty"
+msgstr ""
+
+#, python-format
+msgid " (%+d heads)"
+msgstr ""
+
+#, python-format
+msgid "added %d changesets with %d changes to %d files%s\n"
+msgstr ""
+
+msgid "updating the branch cache\n"
+msgstr ""
+
+msgid "Unexpected response from remote server:"
+msgstr ""
+
+msgid "operation forbidden by server"
+msgstr ""
+
+msgid "locking the remote repository failed"
+msgstr ""
+
+msgid "the server sent an unknown error code"
+msgstr ""
+
+msgid "streaming all changes\n"
+msgstr ""
+
+#, python-format
+msgid "%d files to transfer, %s of data\n"
+msgstr ""
+
+#, python-format
+msgid "adding %s (%s)\n"
+msgstr ""
+
+#, python-format
+msgid "transferred %s in %.1f seconds (%s/sec)\n"
+msgstr ""
+
+msgid "no [smtp]host in hgrc - cannot send mail"
+msgstr ""
+
+#, python-format
+msgid "sending mail: smtp host %s, port %s\n"
+msgstr ""
+
+msgid "can't use TLS: Python SSL support not installed"
+msgstr ""
+
+msgid "(using tls)\n"
+msgstr ""
+
+#, python-format
+msgid "(authenticating to mail server as %s)\n"
+msgstr ""
+
+#, python-format
+msgid "sending mail: %s\n"
+msgstr ""
+
+msgid "smtp specified as email transport, but no smtp host configured"
+msgstr ""
+
+#, python-format
+msgid "%r specified as email transport, but not in PATH"
+msgstr ""
+
+#, python-format
+msgid "ignoring invalid sendcharset: %s\n"
+msgstr ""
+
+#, python-format
+msgid "invalid email address: %s"
+msgstr ""
+
+#, python-format
+msgid "invalid local address: %s"
+msgstr ""
+
+#, python-format
+msgid "failed to remove %s from manifest"
+msgstr ""
+
+#, python-format
+msgid "diff context lines count must be an integer, not %r"
+msgstr ""
+
+#, python-format
+msgid ""
+"untracked file in working directory differs from file in requested revision: "
+"'%s'"
+msgstr ""
+
+#, python-format
+msgid "case-folding collision between %s and %s"
+msgstr ""
+
+#, python-format
+msgid ""
+" conflicting flags for %s\n"
+"(n)one, e(x)ec or sym(l)ink?"
+msgstr ""
+
+msgid "&None"
+msgstr ""
+
+msgid "E&xec"
+msgstr ""
+
+msgid "Sym&link"
+msgstr ""
+
+msgid "resolving manifests\n"
+msgstr ""
+
+#, python-format
+msgid " overwrite %s partial %s\n"
+msgstr ""
+
+#, python-format
+msgid " ancestor %s local %s remote %s\n"
+msgstr ""
+
+#, python-format
+msgid ""
+" local changed %s which remote deleted\n"
+"use (c)hanged version or (d)elete?"
+msgstr ""
+
+msgid "&Changed"
+msgstr ""
+
+msgid "&Delete"
+msgstr ""
+
+msgid "c"
+msgstr ""
+
+#, python-format
+msgid ""
+"remote changed %s which local deleted\n"
+"use (c)hanged version or leave (d)eleted?"
+msgstr ""
+
+msgid "&Deleted"
+msgstr ""
+
+#, python-format
+msgid "preserving %s for resolve of %s\n"
+msgstr ""
+
+#, python-format
+msgid "update failed to remove %s: %s!\n"
+msgstr ""
+
+#, python-format
+msgid "getting %s\n"
+msgstr ""
+
+#, python-format
+msgid "getting %s to %s\n"
+msgstr ""
+
+#, python-format
+msgid "warning: detected divergent renames of %s to:\n"
+msgstr ""
+
+#, python-format
+msgid "branch %s not found"
+msgstr ""
+
+msgid "can't merge with ancestor"
+msgstr ""
+
+msgid "nothing to merge (use 'hg update' or check 'hg heads')"
+msgstr ""
+
+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 ""
+
+#, python-format
+msgid "cannot create %s: destination already exists"
+msgstr ""
+
+#, python-format
+msgid "cannot create %s: unable to create destination directory"
+msgstr ""
+
+#, python-format
+msgid "found patch at byte %d\n"
+msgstr ""
+
+msgid "patch generated by hg export\n"
+msgstr ""
+
+#, python-format
+msgid "unable to find '%s' for patching\n"
+msgstr ""
+
+#, python-format
+msgid "patching file %s\n"
+msgstr ""
+
+#, python-format
+msgid "%d out of %d hunks FAILED -- saving rejects to file %s\n"
+msgstr ""
+
+#, python-format
+msgid "bad hunk #%d %s (%d %d %d %d)"
+msgstr ""
+
+#, python-format
+msgid "file %s already exists\n"
+msgstr ""
+
+#, python-format
+msgid "Hunk #%d succeeded at %d %s(offset %d line).\n"
+msgstr ""
+
+#, python-format
+msgid "Hunk #%d succeeded at %d %s(offset %d lines).\n"
+msgstr ""
+
+#, python-format
+msgid "Hunk #%d FAILED at %d\n"
+msgstr ""
+
+#, python-format
+msgid "bad hunk #%d"
+msgstr ""
+
+#, python-format
+msgid "bad hunk #%d old text line %d"
+msgstr ""
+
+msgid "could not extract binary patch"
+msgstr ""
+
+#, python-format
+msgid "binary patch is %d bytes, not %d"
+msgstr ""
+
+#, python-format
+msgid "unable to strip away %d dirs from %s"
+msgstr ""
+
+msgid "undefined source and destination files"
+msgstr ""
+
+#, python-format
+msgid "malformed patch %s %s"
+msgstr ""
+
+#, python-format
+msgid "unsupported parser state: %s"
+msgstr ""
+
+#, python-format
+msgid "patch command failed: %s"
+msgstr ""
+
+#, python-format
+msgid "Unsupported line endings type: %s"
+msgstr ""
+
+#, python-format
+msgid "no valid hunks found; trying with %r instead\n"
+msgstr ""
+
+#, python-format
+msgid "exited with status %d"
+msgstr ""
+
+#, python-format
+msgid "killed by signal %d"
+msgstr ""
+
+#, python-format
+msgid "stopped by signal %d"
+msgstr ""
+
+msgid "invalid exit code"
+msgstr ""
+
+#, python-format
+msgid "saving bundle to %s\n"
+msgstr ""
+
+msgid "adding branch\n"
+msgstr ""
+
+#, python-format
+msgid "cannot %s; remote repository does not support the %r capability"
+msgstr ""
+
+#, python-format
+msgid "unknown compression type %r"
+msgstr ""
+
+#, python-format
+msgid "index %s unknown flags %#04x for format v0"
+msgstr ""
+
+#, python-format
+msgid "index %s unknown flags %#04x for revlogng"
+msgstr ""
+
+#, python-format
+msgid "index %s unknown format %d"
+msgstr ""
+
+#, python-format
+msgid "index %s is corrupted"
+msgstr ""
+
+msgid "no node"
+msgstr ""
+
+msgid "ambiguous identifier"
+msgstr ""
+
+msgid "no match found"
+msgstr ""
+
+#, python-format
+msgid "incompatible revision flag %x"
+msgstr ""
+
+#, python-format
+msgid "%s not found in the transaction"
+msgstr ""
+
+msgid "unknown base"
+msgstr ""
+
+msgid "consistency error adding group"
+msgstr ""
+
+#, python-format
+msgid "%s looks like a binary file."
+msgstr ""
+
+msgid "can only specify two labels."
+msgstr ""
+
+msgid "warning: conflicts during merge.\n"
+msgstr ""
+
+#, python-format
+msgid "couldn't parse location %s"
+msgstr ""
+
+msgid "could not create remote repo"
+msgstr ""
+
+msgid "remote: "
+msgstr ""
+
+msgid "no suitable response from remote hg"
+msgstr ""
+
+#, python-format
+msgid "push refused: %s"
+msgstr ""
+
+msgid "unsynced changes"
+msgstr ""
+
+msgid "cannot lock static-http repository"
+msgstr ""
+
+msgid "cannot create new static-http repository"
+msgstr ""
+
+#, python-format
+msgid "invalid entry in fncache, line %s"
+msgstr ""
+
+msgid "scanning\n"
+msgstr ""
+
+#, python-format
+msgid "%d files, %d bytes to transfer\n"
+msgstr ""
+
+#, python-format
+msgid "sending %s (%d bytes)\n"
+msgstr ""
+
+#, python-format
+msgid ""
+" subrepository sources for %s differ\n"
+"use (l)ocal source (%s) or (r)emote source (%s)?"
+msgstr ""
+
+msgid "&Remote"
+msgstr ""
+
+msgid "r"
+msgstr ""
+
+#, python-format
+msgid ""
+" local changed subrepository %s which remote removed\n"
+"use (c)hanged version or (d)elete?"
+msgstr ""
+
+#, python-format
+msgid ""
+" remote changed subrepository %s which local removed\n"
+"use (c)hanged version or (d)elete?"
+msgstr ""
+
+#, python-format
+msgid "removing subrepo %s\n"
+msgstr ""
+
+#, python-format
+msgid "pulling subrepo %s\n"
+msgstr ""
+
+#, python-format
+msgid "pushing subrepo %s\n"
+msgstr ""
+
+msgid "unmatched quotes"
+msgstr ""
+
+#, python-format
+msgid "error expanding '%s%%%s'"
+msgstr ""
+
+#, python-format
+msgid "unknown filter '%s'"
+msgstr ""
+
+#, python-format
+msgid "style not found: %s"
+msgstr ""
+
+#, python-format
+msgid "template file %s: %s"
+msgstr ""
+
+msgid "cannot use transaction when it is already committed/aborted"
+msgstr ""
+
+#, python-format
+msgid "failed to truncate %s\n"
+msgstr ""
+
+msgid "transaction abort!\n"
+msgstr ""
+
+msgid "rollback completed\n"
+msgstr ""
+
+msgid "rollback failed - please run hg recover\n"
+msgstr ""
+
+#, python-format
+msgid "Not trusting file %s from untrusted user %s, group %s\n"
+msgstr ""
+
+#, python-format
+msgid "Ignored: %s\n"
+msgstr ""
+
+#, python-format
+msgid "ignoring untrusted configuration option %s.%s = %s\n"
+msgstr ""
+
+#, python-format
+msgid "%s.%s not a boolean ('%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 ""
+
+#, python-format
+msgid "username %s contains a newline\n"
+msgstr ""
+
+msgid "unrecognized response\n"
+msgstr ""
+
+msgid "response expected"
+msgstr ""
+
+msgid "password: "
+msgstr ""
+
+msgid "edit failed"
+msgstr ""
+
+msgid "http authorization required"
+msgstr ""
+
+msgid "http authorization required\n"
+msgstr ""
+
+#, python-format
+msgid "realm: %s\n"
+msgstr ""
+
+#, python-format
+msgid "user: %s\n"
+msgstr ""
+
+msgid "user:"
+msgstr ""
+
+#, python-format
+msgid "http auth: user %s, password %s\n"
+msgstr ""
+
+#, python-format
+msgid "proxying through http://%s:%s\n"
+msgstr ""
+
+#, python-format
+msgid "command '%s' failed: %s"
+msgstr ""
+
+#, python-format
+msgid "path contains illegal component: %s"
+msgstr ""
+
+#, python-format
+msgid "path %r is inside repo %r"
+msgstr ""
+
+#, python-format
+msgid "path %r traverses symbolic link %r"
+msgstr ""
+
+msgid "Hardlinks not supported"
+msgstr ""
+
+#, python-format
+msgid "could not symlink to %r: %s"
+msgstr ""
+
+#, python-format
+msgid "invalid date: %r "
+msgstr ""
+
+#, python-format
+msgid "date exceeds 32 bits: %d"
+msgstr ""
+
+#, python-format
+msgid "impossible time zone offset: %d"
+msgstr ""
+
+#, python-format
+msgid "invalid day spec: %s"
+msgstr ""
+
+#, python-format
+msgid "%.0f GB"
+msgstr ""
+
+#, python-format
+msgid "%.1f GB"
+msgstr ""
+
+#, python-format
+msgid "%.2f GB"
+msgstr ""
+
+#, python-format
+msgid "%.0f MB"
+msgstr ""
+
+#, python-format
+msgid "%.1f MB"
+msgstr ""
+
+#, python-format
+msgid "%.2f MB"
+msgstr ""
+
+#, python-format
+msgid "%.0f KB"
+msgstr ""
+
+#, python-format
+msgid "%.1f KB"
+msgstr ""
+
+#, python-format
+msgid "%.2f KB"
+msgstr ""
+
+#, python-format
+msgid "%.0f bytes"
+msgstr ""
+
+msgid "cannot verify bundle or remote repos"
+msgstr ""
+
+msgid "interrupted"
+msgstr ""
+
+#, python-format
+msgid "empty or missing %s"
+msgstr ""
+
+#, python-format
+msgid "data length off by %d bytes"
+msgstr ""
+
+#, python-format
+msgid "index contains %d extra bytes"
+msgstr ""
+
+#, python-format
+msgid "warning: `%s' uses revlog format 1"
+msgstr ""
+
+#, python-format
+msgid "warning: `%s' uses revlog format 0"
+msgstr ""
+
+#, python-format
+msgid "rev %d points to nonexistent changeset %d"
+msgstr ""
+
+#, python-format
+msgid "rev %d points to unexpected changeset %d"
+msgstr ""
+
+#, python-format
+msgid " (expected %s)"
+msgstr ""
+
+#, python-format
+msgid "unknown parent 1 %s of %s"
+msgstr ""
+
+#, python-format
+msgid "unknown parent 2 %s of %s"
+msgstr ""
+
+#, python-format
+msgid "checking parents of %s"
+msgstr ""
+
+#, python-format
+msgid "duplicate revision %d (%d)"
+msgstr ""
+
+#, python-format
+msgid "repository uses revlog format %d\n"
+msgstr ""
+
+msgid "checking changesets\n"
+msgstr ""
+
+#, python-format
+msgid "unpacking changeset %s"
+msgstr ""
+
+msgid "checking manifests\n"
+msgstr ""
+
+#, python-format
+msgid "%s not in changesets"
+msgstr ""
+
+msgid "file without name in manifest"
+msgstr ""
+
+#, python-format
+msgid "reading manifest delta %s"
+msgstr ""
+
+msgid "crosschecking files in changesets and manifests\n"
+msgstr ""
+
+#, python-format
+msgid "changeset refers to unknown manifest %s"
+msgstr ""
+
+msgid "in changeset but not in manifest"
+msgstr ""
+
+msgid "in manifest but not in changeset"
+msgstr ""
+
+msgid "checking files\n"
+msgstr ""
+
+#, python-format
+msgid "cannot decode filename '%s'"
+msgstr ""
+
+#, python-format
+msgid "broken revlog! (%s)"
+msgstr ""
+
+msgid "missing revlog!"
+msgstr ""
+
+#, python-format
+msgid "%s not in manifests"
+msgstr ""
+
+#, python-format
+msgid "unpacked size is %s, %s expected"
+msgstr ""
+
+#, python-format
+msgid "unpacking %s"
+msgstr ""
+
+#, python-format
+msgid "empty or missing copy source revlog %s:%s"
+msgstr ""
+
+#, python-format
+msgid "warning: %s@%s: copy source revision is nullid %s:%s"
+msgstr ""
+
+#, python-format
+msgid "checking rename of %s"
+msgstr ""
+
+#, python-format
+msgid "%s in manifests not found"
+msgstr ""
+
+#, python-format
+msgid "warning: orphan revlog '%s'"
+msgstr ""
+
+#, python-format
+msgid "%d files, %d changesets, %d total revisions\n"
+msgstr ""
+
+#, python-format
+msgid "%d warnings encountered!\n"
+msgstr ""
+
+#, python-format
+msgid "%d integrity errors encountered!\n"
+msgstr ""
+
+#, python-format
+msgid "(first damaged changeset appears to be %d)\n"
+msgstr ""
+
+msgid "user name not available - set USERNAME environment variable"
+msgstr ""
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/i18n/hggettext	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,123 @@
+#!/usr/bin/env python
+#
+# hggettext - carefully extract docstrings for Mercurial
+#
+# 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.
+
+# The normalize function is taken from pygettext which is distributed
+# with Python under the Python License, which is GPL compatible.
+
+"""Extract docstrings from Mercurial commands.
+
+Compared to pygettext, this script knows about the cmdtable and table
+dictionaries used by Mercurial, and will only extract docstrings from
+functions mentioned therein.
+
+Use xgettext like normal to extract strings marked as translatable and
+join the message cataloges to get the final catalog.
+"""
+
+import os, sys, inspect
+
+
+def escape(s):
+    # The order is important, the backslash must be escaped first
+    # since the other replacements introduce new backslashes
+    # themselves.
+    s = s.replace('\\', '\\\\')
+    s = s.replace('\n', '\\n')
+    s = s.replace('\r', '\\r')
+    s = s.replace('\t', '\\t')
+    s = s.replace('"', '\\"')
+    return s
+
+
+def normalize(s):
+    # This converts the various Python string types into a format that
+    # is appropriate for .po files, namely much closer to C style.
+    lines = s.split('\n')
+    if len(lines) == 1:
+        s = '"' + escape(s) + '"'
+    else:
+        if not lines[-1]:
+            del lines[-1]
+            lines[-1] = lines[-1] + '\n'
+        lines = map(escape, lines)
+        lineterm = '\\n"\n"'
+        s = '""\n"' + lineterm.join(lines) + '"'
+    return s
+
+
+def poentry(path, lineno, s):
+    return ('#: %s:%d\n' % (path, lineno) +
+            'msgid %s\n' % normalize(s) +
+            'msgstr ""\n')
+
+
+def offset(src, doc, name, default):
+    """Compute offset or issue a warning on stdout."""
+    # Backslashes in doc appear doubled in src.
+    end = src.find(doc.replace('\\', '\\\\'))
+    if end == -1:
+        # This can happen if the docstring contains unnecessary escape
+        # sequences such as \" in a triple-quoted string. The problem
+        # is that \" is turned into " and so doc wont appear in src.
+        sys.stderr.write("warning: unknown offset in %s, assuming %d lines\n"
+                         % (name, default))
+        return default
+    else:
+        return src.count('\n', 0, end)
+
+
+def importpath(path):
+    """Import a path like foo/bar/baz.py and return the baz module."""
+    if path.endswith('.py'):
+        path = path[:-3]
+    if path.endswith('/__init__'):
+        path = path[:-9]
+    path = path.replace('/', '.')
+    mod = __import__(path)
+    for comp in path.split('.')[1:]:
+        mod = getattr(mod, comp)
+    return mod
+
+
+def docstrings(path):
+    """Extract docstrings from path.
+
+    This respects the Mercurial cmdtable/table convention and will
+    only extract docstrings from functions mentioned in these tables.
+    """
+    mod = importpath(path)
+    if mod.__doc__:
+        src = open(path).read()
+        lineno = 1 + offset(src, mod.__doc__, path, 7)
+        print poentry(path, lineno, mod.__doc__)
+
+    cmdtable = getattr(mod, 'cmdtable', {})
+    if not cmdtable:
+        # Maybe we are processing mercurial.commands?
+        cmdtable = getattr(mod, 'table', {})
+
+    for entry in cmdtable.itervalues():
+        func = entry[0]
+        if func.__doc__:
+            src = inspect.getsource(func)
+            name = "%s.%s" % (path, func.__name__)
+            lineno = func.func_code.co_firstlineno
+            lineno += offset(src, func.__doc__, name, 1)
+            print poentry(path, lineno, func.__doc__)
+
+
+if __name__ == "__main__":
+    # It is very important that we import the Mercurial modules from
+    # the source tree where hggettext is executed. Otherwise we might
+    # accidentally import and extract strings from a Mercurial
+    # installation mentioned in PYTHONPATH.
+    sys.path.insert(0, os.getcwd())
+    from mercurial import demandimport; demandimport.enable()
+    for path in sys.argv[1:]:
+        docstrings(path)
--- a/i18n/ja.po	Wed Jul 08 17:01:18 2009 -0700
+++ b/i18n/ja.po	Wed Jul 08 17:03:16 2009 -0700
@@ -4,83 +4,102 @@
 # Copyright (C) 2009 the Mercurial team
 #
 # ========================================
-# 【翻訳作業手順】
+# 【翻訳用語集】
 #
-#     ※ 必要に応じて crew リポジトリから最新成果を取得 & hg update
-#     # メッセージ DB の更新
-#     $ make update-pot
-#     # '#: filename:line' 情報を残す場合は --no-location を省略
-#     $ msgmerge --update --no-location i18n/ja.po i18n/hg.pot
-#
-#     ※ 翻訳作業実施(i18n/ja.po の変更)
+# 言い回し:
 #
-#     # 形式確認(置換指定の間違い等)
-#     $ msgfmt --check i18n/ja.po
-#     # '#: filename:line' 情報が残っている場合は取り除く
-#     $ msgcat --no-location -o i18n/ja.po i18n/ja.po
+# no XXXX avairable     XXXX がありません
+# XXXX found            XXXX が存在します
+# XXXX exists           XXXX が存在します
+# do not XXXX           XXXX できません ※ 「XXXX してはいけない」の意
+# XXXX failed           XXXX が(or に)失敗
+# error XXXX-ing        XXXX が(or に)失敗
+# error while XXXX      XXXX が(or に)失敗
+# XXXX-ing YYYY         YYYY を XXXX 中 ※ メッセージ冒頭から始まる場合
+#                       YYYY を XXXX    ※ 「以後の処理は YYYY を XXXX とする」
+#                                           というニュアンスン場合
+# --XXXX option         --XXXX ※ 「オプション」であることが自明なので
+# option --XXXX         --XXXX ※ 「オプション」であることが自明なので
+# invalid XXXX          XXXX が不正です or 不正な XXXX
+# malformed XXXX        XXXX が不正です or 不正な XXXX
 #
-#     ※ 翻訳成果の公開
-#
-# ========================================
-# 【翻訳用語集】
+# 単語:
 #
 # Distributed SCM       分散構成管理ツール
 #
+# abort                 中断
 # add                   (構成管理への)追加登録
 # apply                 適用
 # archive               アーカイブ
-# (with no)argument(s)  引数(指定が無い場合)
+# argument(, with no)   引数(指定が無い場合)
 # author                作成者
 # backout               打ち消し
 # basename              ベース名
+# binary                バイナリ
 # branch                ブランチ
 # bundle( file)         バンドルファイル
+# change                チェンジセット/差分
 # changegroup( file)    バンドルファイル
-# change(set)           チェンジセット
+# changeset             チェンジセット
 # changeset hash        ハッシュ値
 # changeset header      ヘッダ情報
 # checkout/update       (作業領域の)更新              
-# (this)command         (本)コマンド
+# command(, this)       (本)コマンド
 # commit                コミット
 # commit comment        コミットログ
-# (by)default           指定が無い場合/通常は
+# default(, by)         指定が無い場合/通常は
 # delete/remove         (構成管理からの)登録除外
 # diff                  差分
+# directory             ディレクトリ
 # dirstate              dirstate
+# entry                 エントリ
 # extend(ed)            拡張
-# extensiohn            (Mercurialの)エクステンション
+# extension             (Mercurialの)エクステンション
 # hash identifier(s)    ハッシュ値
 # head                  ヘッド
 # head changeset(s)     ヘッド
-# (revision)history     変更履歴
-# import                取り込み
+# header                ヘッダ
+# history(, revision)   変更履歴
+# import                取り込み(patch 系)/読み込み(module/extension)
+# interrupt             中断
 # list of ....          列挙された..../.... の一覧
-# manifest              マニフェスト
+# local (repo)          手元(のリポジトリ)
+# manifest              マニフェスト or 管理対象(一覧)
 # merge                 マージ
+# node                  リビジョン
 # note                  備考
 # patch                 パッチ
 # platform              稼働環境
+# pop(patch)            (パッチの)適用解除
 # pull                  (追加リビジョンの)取り込み
 # push                  (追加リビジョンの)反映
+# push(patch)           (パッチの)適用
 # remote(repo)          連携先(リポジトリ)
 # rename                改名
-# repo(sitory)          リポジトリ
+# repo(sitory)          リポジトリ/(.hg を指す場合は)管理領域
+# resolve/unresolve     (衝突)解消/(衝突)未解消
 # revert/undo           取り消し
 # revision              リビジョン
 # schedule              (add/remove の)予約
 # search                探索
+# server                サーバ
 # summary               要約(情報)
 # tag                   タグ
+# tracked xxxx          構成管理対象の xxxx
+# xxxxx type            xxxx 種別
+# user                  ユーザ
+# unknown xxxx          未知の xxxx
+# working copy(of xxx)  作業領域(中の xxx)
 # working directory     作業領域
 # ========================================
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: Mercurial\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-03-07 21:22+0900\n"
-"PO-Revision-Date: 2009-03-07 23:30+0900\n"
-"Last-Translator: FUJIWARA Katsunori <foozy@lares.dti.ne.jp>\n"
+"Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n"
+"POT-Creation-Date: 2009-07-01 11:25+0900\n"
+"PO-Revision-Date: 2009-07-01 18:00+0900\n"
+"Last-Translator: Japanese translation team <mercurial-ja@googlegroups.com>\n"
 "Language-Team: Japanese\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -90,7 +109,7 @@
 
 #, python-format
 msgid " (default: %s)"
-msgstr " (規定値: %s)"
+msgstr " (既定値: %s)"
 
 msgid "OPTIONS"
 msgstr ""
@@ -106,8 +125,55 @@
 "    aliases: %s\n"
 "\n"
 msgstr ""
-
-msgid "return tuple of (match function, list enabled)."
+"    別名: %s\n"
+"\n"
+
+msgid ""
+"hooks for controlling repository access\n"
+"\n"
+"This hook makes it possible to allow or deny write access to portions\n"
+"of a repository when receiving incoming changesets.\n"
+"\n"
+"The authorization is matched based on the local user name on the\n"
+"system where the hook runs, and not the committer of the original\n"
+"changeset (since the latter is merely informative).\n"
+"\n"
+"The acl hook is best used along with a restricted shell like hgsh,\n"
+"preventing authenticating users from doing anything other than\n"
+"pushing or pulling. The hook is not safe to use if users have\n"
+"interactive shell access, as they can then disable the hook.\n"
+"Nor is it safe if remote users share an account, because then there\n"
+"is no way to distinguish them.\n"
+"\n"
+"To use this hook, configure the acl extension in your hgrc like this:\n"
+"\n"
+"  [extensions]\n"
+"  hgext.acl =\n"
+"\n"
+"  [hooks]\n"
+"  pretxnchangegroup.acl = python:hgext.acl.hook\n"
+"\n"
+"  [acl]\n"
+"  # Check whether the source of incoming changes is in this list\n"
+"  # (\"serve\" == ssh or http, \"push\", \"pull\", \"bundle\")\n"
+"  sources = serve\n"
+"\n"
+"The allow and deny sections take a subtree pattern as key (with a\n"
+"glob syntax by default), and a comma separated list of users as\n"
+"the corresponding value. The deny list is checked before the allow\n"
+"list is.\n"
+"\n"
+"  [acl.allow]\n"
+"  # If acl.allow is not present, all users are allowed by default.\n"
+"  # An empty acl.allow section means no users allowed.\n"
+"  docs/** = doc_writer\n"
+"  .hgtags = release_engineer\n"
+"\n"
+"  [acl.deny]\n"
+"  # If acl.deny is not present, no users are refused by default.\n"
+"  # An empty acl.deny section means all users allowed.\n"
+"  glob pattern = user4, user5\n"
+"   ** = user6\n"
 msgstr ""
 
 #, python-format
@@ -128,167 +194,77 @@
 
 #, python-format
 msgid "acl: user %s denied on %s\n"
-msgstr ""
+msgstr "acl: ユーザ %s は %s に拒否されました\n"
 
 #, python-format
 msgid "acl: access denied for changeset %s"
-msgstr ""
+msgstr "acl: チェンジセット %s のアクセスは拒否されました"
 
 #, python-format
 msgid "acl: user %s not allowed on %s\n"
-msgstr ""
+msgstr "acl: ユーザ %s は %s で許可されていません\n"
 
 #, python-format
 msgid "acl: allowing changeset %s\n"
-msgstr ""
-
-msgid ""
-"allow user-defined command aliases\n"
-"\n"
-"To use, create entries in your hgrc of the form\n"
-"\n"
-"[alias]\n"
-"mycmd = cmd --args\n"
-msgstr ""
-
-msgid ""
-"defer command lookup until needed, so that extensions loaded\n"
-"    after alias can be aliased"
-msgstr ""
-
-#, python-format
-msgid "*** [alias] %s: command %s is unknown"
-msgstr ""
-
-#, python-format
-msgid "*** [alias] %s: command %s is ambiguous"
-msgstr ""
-
-#, python-format
-msgid "*** [alias] %s: circular dependency on %s"
-msgstr ""
-
-#, python-format
-msgid "*** [alias] %s: no definition\n"
-msgstr ""
-
-msgid ""
-"mercurial bookmarks\n"
-"\n"
-"Mercurial bookmarks are local moveable pointers to changesets. Every\n"
-"bookmark points to a changeset identified by its hash. If you commit a\n"
-"changeset that is based on a changeset that has a bookmark on it, the\n"
-"bookmark is forwarded to the new changeset.\n"
-"\n"
-"It is possible to use bookmark names in every revision lookup (e.g. hg\n"
-"merge, hg update).\n"
-"\n"
-"The bookmark extension offers the possiblity to have a more git-like "
-"experience\n"
-"by adding the following configuration option to your .hgrc:\n"
-"\n"
-"[bookmarks]\n"
-"track.current = True\n"
-"\n"
-"This will cause bookmarks to track the bookmark that you are currently on, "
-"and\n"
-"just updates it. This is similar to git's approach of branching.\n"
-msgstr ""
-
-msgid ""
-"Parse .hg/bookmarks file and return a dictionary\n"
-"\n"
-"    Bookmarks are stored as {HASH}\\s{NAME}\\n (localtags format) values\n"
-"    in the .hg/bookmarks file. They are read by the parse() method and\n"
-"    returned as a dictionary with name => hash values.\n"
-"\n"
-"    The parsed dictionary is cached until a write() operation is done.\n"
-"    "
-msgstr ""
-
-msgid ""
-"Write bookmarks\n"
-"\n"
-"    Write the given bookmark => hash dictionary to the .hg/bookmarks file\n"
-"    in a format equal to those of localtags.\n"
-"\n"
-"    We also store a backup of the previous state in undo.bookmarks that\n"
-"    can be copied back on rollback.\n"
-"    "
-msgstr ""
-
-msgid ""
-"Get the current bookmark\n"
-"\n"
-"    If we use gittishsh branches we have a current bookmark that\n"
-"    we are on. This function returns the name of the bookmark. It\n"
-"    is stored in .hg/bookmarks.current\n"
-"    "
-msgstr ""
-
-msgid ""
-"Set the name of the bookmark that we are currently on\n"
-"\n"
-"    Set the name of the bookmark that we are on (hg update <bookmark>).\n"
-"    The name is recoreded in .hg/bookmarks.current\n"
-"    "
-msgstr ""
-
-msgid ""
-"mercurial bookmarks\n"
+msgstr "acl: 許可済みのチェンジセット %s\n"
+
+msgid ""
+"track a line of development with movable markers\n"
+"\n"
+"Bookmarks are local movable markers to changesets. Every bookmark\n"
+"points to a changeset identified by its hash. If you commit a\n"
+"changeset that is based on a changeset that has a bookmark on it,\n"
+"the bookmark shifts to the new changeset.\n"
+"\n"
+"It is possible to use bookmark names in every revision lookup\n"
+"(e.g. hg merge, hg update).\n"
+"\n"
+"By default, when several bookmarks point to the same changeset, they\n"
+"will all move forward together. It is possible to obtain a more\n"
+"git-like experience by adding the following configuration option to\n"
+"your .hgrc:\n"
+"\n"
+"  [bookmarks]\n"
+"  track.current = True\n"
+"\n"
+"This will cause Mercurial to track the bookmark that you are currently\n"
+"using, and only update it. This is similar to git's approach to\n"
+"branching.\n"
+msgstr ""
+
+msgid ""
+"track a line of development with movable markers\n"
 "\n"
 "    Bookmarks are pointers to certain commits that move when\n"
-"    commiting. Bookmarks are local. They can be renamed, copied and\n"
-"    deleted. It is possible to use bookmark names in 'hg merge' and 'hg\n"
-"    update' to update to a given bookmark.\n"
-"\n"
-"    You can use 'hg bookmark NAME' to set a bookmark on the current\n"
-"    tip with the given name. If you specify a revision using -r REV\n"
-"    (where REV may be an existing bookmark), the bookmark is set to\n"
-"    that revision.\n"
+"    committing. Bookmarks are local. They can be renamed, copied and\n"
+"    deleted. It is possible to use bookmark names in 'hg merge' and\n"
+"    'hg update' to merge and update respectively to a given bookmark.\n"
+"\n"
+"    You can use 'hg bookmark NAME' to set a bookmark on the working\n"
+"    directory's parent revision with the given name. If you specify\n"
+"    a revision using -r REV (where REV may be an existing bookmark),\n"
+"    the bookmark is assigned to that revision.\n"
 "    "
 msgstr ""
 
 msgid "a bookmark of this name does not exist"
-msgstr ""
+msgstr "この名前のブックマークは存在しません"
 
 msgid "a bookmark of the same name already exists"
-msgstr ""
+msgstr "同じ名前のブックマークがすでに存在します"
 
 msgid "new bookmark name required"
-msgstr ""
+msgstr "新しいブックマーク名を要求しました"
 
 msgid "bookmark name required"
-msgstr ""
+msgstr "ブックマーク名を要求しました"
 
 msgid "bookmark name cannot contain newlines"
-msgstr ""
+msgstr "ブックマーク名に改行を含めません"
 
 msgid "a bookmark cannot have the name of an existing branch"
 msgstr ""
 
-msgid ""
-"Strip bookmarks if revisions are stripped using\n"
-"    the mercurial.strip method. This usually happens during\n"
-"    qpush and qpop"
-msgstr ""
-
-msgid ""
-"Add a revision to the repository and\n"
-"            move the bookmark"
-msgstr ""
-
-msgid "Merge bookmarks with normal tags"
-msgstr ""
-
-msgid ""
-"Set the current bookmark\n"
-"\n"
-"    If the user updates to a bookmark we update the .hg/bookmarks.current\n"
-"    file.\n"
-"    "
-msgstr ""
-
 msgid "force"
 msgstr ""
 
@@ -305,87 +281,79 @@
 msgstr ""
 
 msgid ""
-"Bugzilla integration\n"
+"hooks for integrating with the Bugzilla bug tracker\n"
 "\n"
 "This hook extension adds comments on bugs in Bugzilla when changesets\n"
-"that refer to bugs by Bugzilla ID are seen. The hook does not change bug\n"
-"status.\n"
-"\n"
-"The hook updates the Bugzilla database directly. Only Bugzilla "
-"installations\n"
-"using MySQL are supported.\n"
-"\n"
-"The hook relies on a Bugzilla script to send bug change notification "
-"emails.\n"
-"That script changes between Bugzilla versions; the 'processmail' script "
-"used\n"
-"prior to 2.18 is replaced in 2.18 and subsequent versions by\n"
-"'config/sendbugmail.pl'. Note that these will be run by Mercurial as the "
-"user\n"
-"pushing the change; you will need to ensure the Bugzilla install file\n"
-"permissions are set appropriately.\n"
+"that refer to bugs by Bugzilla ID are seen. The hook does not change\n"
+"bug status.\n"
+"\n"
+"The hook updates the Bugzilla database directly. Only Bugzilla\n"
+"installations using MySQL are supported.\n"
+"\n"
+"The hook relies on a Bugzilla script to send bug change notification\n"
+"emails. That script changes between Bugzilla versions; the\n"
+"'processmail' script used prior to 2.18 is replaced in 2.18 and\n"
+"subsequent versions by 'config/sendbugmail.pl'. Note that these will\n"
+"be run by Mercurial as the user pushing the change; you will need to\n"
+"ensure the Bugzilla install file permissions are set appropriately.\n"
 "\n"
 "Configuring the extension:\n"
 "\n"
 "    [bugzilla]\n"
-"    host       Hostname of the MySQL server holding the Bugzilla database.\n"
+"\n"
+"    host       Hostname of the MySQL server holding the Bugzilla\n"
+"               database.\n"
 "    db         Name of the Bugzilla database in MySQL. Default 'bugs'.\n"
 "    user       Username to use to access MySQL server. Default 'bugs'.\n"
 "    password   Password to use to access MySQL server.\n"
 "    timeout    Database connection timeout (seconds). Default 5.\n"
-"    version    Bugzilla version. Specify '3.0' for Bugzilla versions 3.0 "
-"and\n"
-"               later, '2.18' for Bugzilla versions from 2.18 and '2.16' for\n"
-"               versions prior to 2.18.\n"
+"    version    Bugzilla version. Specify '3.0' for Bugzilla versions\n"
+"               3.0 and later, '2.18' for Bugzilla versions from 2.18\n"
+"               and '2.16' for versions prior to 2.18.\n"
 "    bzuser     Fallback Bugzilla user name to record comments with, if\n"
 "               changeset committer cannot be found as a Bugzilla user.\n"
 "    bzdir      Bugzilla install directory. Used by default notify.\n"
 "               Default '/var/www/html/bugzilla'.\n"
 "    notify     The command to run to get Bugzilla to send bug change\n"
-"               notification emails. Substitutes from a map with 3 keys,\n"
-"               'bzdir', 'id' (bug id) and 'user' (committer bugzilla "
-"email).\n"
-"               Default depends on version; from 2.18 it is\n"
-"               \"cd %(bzdir)s && perl -T contrib/sendbugmail.pl %(id)s %"
-"(user)s\".\n"
-"    regexp     Regular expression to match bug IDs in changeset commit "
-"message.\n"
-"               Must contain one \"()\" group. The default expression "
-"matches\n"
-"               'Bug 1234', 'Bug no. 1234', 'Bug number 1234',\n"
-"               'Bugs 1234,5678', 'Bug 1234 and 5678' and variations "
-"thereof.\n"
-"               Matching is case insensitive.\n"
+"               notification emails. Substitutes from a map with 3\n"
+"               keys, 'bzdir', 'id' (bug id) and 'user' (committer\n"
+"               bugzilla email). Default depends on version; from 2.18\n"
+"               it is \"cd %(bzdir)s && perl -T contrib/sendbugmail.pl\n"
+"               %(id)s %(user)s\".\n"
+"    regexp     Regular expression to match bug IDs in changeset commit\n"
+"               message. Must contain one \"()\" group. The default\n"
+"               expression matches 'Bug 1234', 'Bug no. 1234', 'Bug\n"
+"               number 1234', 'Bugs 1234,5678', 'Bug 1234 and 5678' and\n"
+"               variations thereof. Matching is case insensitive.\n"
 "    style      The style file to use when formatting comments.\n"
 "    template   Template to use when formatting comments. Overrides\n"
 "               style if specified. In addition to the usual Mercurial\n"
 "               keywords, the extension specifies:\n"
 "                   {bug}       The Bugzilla bug ID.\n"
-"                   {root}      The full pathname of the Mercurial "
-"repository.\n"
-"                   {webroot}   Stripped pathname of the Mercurial "
-"repository.\n"
-"                   {hgweb}     Base URL for browsing Mercurial "
-"repositories.\n"
+"                   {root}      The full pathname of the Mercurial\n"
+"                               repository.\n"
+"                   {webroot}   Stripped pathname of the Mercurial\n"
+"                               repository.\n"
+"                   {hgweb}     Base URL for browsing Mercurial\n"
+"                               repositories.\n"
 "               Default 'changeset {node|short} in repo {root} refers '\n"
 "                       'to bug {bug}.\\ndetails:\\n\\t{desc|tabindent}'\n"
 "    strip      The number of slashes to strip from the front of {root}\n"
 "               to produce {webroot}. Default 0.\n"
-"    usermap    Path of file containing Mercurial committer ID to Bugzilla "
-"user\n"
-"               ID mappings. If specified, the file should contain one "
-"mapping\n"
-"               per line, \"committer\"=\"Bugzilla user\". See also the\n"
-"               [usermap] section.\n"
+"    usermap    Path of file containing Mercurial committer ID to\n"
+"               Bugzilla user ID mappings. If specified, the file\n"
+"               should contain one mapping per line,\n"
+"               \"committer\"=\"Bugzilla user\". See also the [usermap]\n"
+"               section.\n"
 "\n"
 "    [usermap]\n"
-"    Any entries in this section specify mappings of Mercurial committer ID\n"
-"    to Bugzilla user ID. See also [bugzilla].usermap.\n"
+"    Any entries in this section specify mappings of Mercurial\n"
+"    committer ID to Bugzilla user ID. See also [bugzilla].usermap.\n"
 "    \"committer\"=\"Bugzilla user\"\n"
 "\n"
 "    [web]\n"
-"    baseurl    Base URL for browsing Mercurial repositories. Reference from\n"
-"               templates as {hgweb}.\n"
+"    baseurl    Base URL for browsing Mercurial repositories. Reference\n"
+"               from templates as {hgweb}.\n"
 "\n"
 "Activating the extension:\n"
 "\n"
@@ -398,9 +366,9 @@
 "\n"
 "Example configuration:\n"
 "\n"
-"This example configuration is for a collection of Mercurial repositories\n"
-"in /var/local/hg/repos/ used with a local Bugzilla 3.2 installation in\n"
-"/opt/bugzilla-3.2.\n"
+"This example configuration is for a collection of Mercurial\n"
+"repositories in /var/local/hg/repos/ used with a local Bugzilla 3.2\n"
+"installation in /opt/bugzilla-3.2.\n"
 "\n"
 "    [bugzilla]\n"
 "    host=localhost\n"
@@ -426,118 +394,58 @@
 "    Changeset commit comment. Bug 1234.\n"
 msgstr ""
 
-msgid "support for bugzilla version 2.16."
-msgstr ""
-
 #, python-format
 msgid "connecting to %s:%s as %s, password %s\n"
-msgstr ""
-
-msgid "run a query."
-msgstr ""
+msgstr "%s:%s に %s として接続しています (パスワード:%s)\n"
 
 #, python-format
 msgid "query: %s %s\n"
-msgstr ""
+msgstr "問い合わせ: %s %s\n"
 
 #, python-format
 msgid "failed query: %s %s\n"
-msgstr ""
-
-msgid "get identity of longdesc field"
-msgstr ""
+msgstr "問い合わせに失敗: %s %s\n"
 
 msgid "unknown database schema"
-msgstr ""
-
-msgid "filter not-existing bug ids from list."
-msgstr ""
-
-msgid "filter bug ids from list that already refer to this changeset."
-msgstr ""
+msgstr "未知のデータベーススキーマ"
 
 #, python-format
 msgid "bug %d already knows about changeset %s\n"
 msgstr ""
 
-msgid "tell bugzilla to send mail."
-msgstr ""
-
 msgid "telling bugzilla to send mail:\n"
 msgstr ""
 
 #, python-format
 msgid "  bug %s\n"
-msgstr ""
+msgstr "  バグ %s\n"
 
 #, python-format
 msgid "running notify command %s\n"
-msgstr ""
+msgstr "通知コマンド %s 実行中\n"
 
 #, python-format
 msgid "bugzilla notify command %s"
 msgstr ""
 
 msgid "done\n"
-msgstr ""
-
-msgid "look up numeric bugzilla user id."
-msgstr ""
+msgstr "完了\n"
 
 #, python-format
 msgid "looking up user %s\n"
-msgstr ""
-
-msgid "map name of committer to bugzilla user name."
-msgstr ""
-
-msgid ""
-"see if committer is a registered bugzilla user. Return\n"
-"        bugzilla username and userid if so. If not, return default\n"
-"        bugzilla username and userid."
-msgstr ""
+msgstr "ユーザ %s を検索しています\n"
 
 #, python-format
 msgid "cannot find bugzilla user id for %s"
-msgstr ""
+msgstr "%s の buzilla ユーザ ID を見つけることができません"
 
 #, python-format
 msgid "cannot find bugzilla user id for %s or %s"
-msgstr ""
-
-msgid ""
-"add comment to bug. try adding comment as committer of\n"
-"        changeset, otherwise as default bugzilla user."
-msgstr ""
-
-msgid "support for bugzilla 2.18 series."
-msgstr ""
-
-msgid "support for bugzilla 3.0 series."
-msgstr ""
-
-msgid ""
-"return object that knows how to talk to bugzilla version in\n"
-"        use."
-msgstr ""
+msgstr "%s か %s の buzilla ユーザ ID を見つけることができません"
 
 #, python-format
 msgid "bugzilla version %s not supported"
-msgstr ""
-
-msgid ""
-"find valid bug ids that are referred to in changeset\n"
-"        comments and that do not already have references to this\n"
-"        changeset."
-msgstr ""
-
-msgid "update bugzilla bug with reference to changeset."
-msgstr ""
-
-msgid ""
-"strip leading prefix of repo root and turn into\n"
-"            url-safe path."
-msgstr ""
+msgstr "bugzilla のバージョン %s をサポートしていません"
 
 msgid ""
 "changeset {node|short} in repo {root} refers to bug {bug}.\n"
@@ -545,15 +453,9 @@
 "\t{desc|tabindent}"
 msgstr ""
 
-msgid ""
-"add comment to bugzilla for each changeset that refers to a\n"
-"    bugzilla bug id. only add a comment once per bug, so same change\n"
-"    seen multiple times does not fill bug with duplicate data."
-msgstr ""
-
 #, python-format
 msgid "python mysql support not available: %s"
-msgstr ""
+msgstr "python mysql のサポートが利用できません: %s"
 
 #, python-format
 msgid "hook type %s does not pass a changeset id"
@@ -561,48 +463,59 @@
 
 #, python-format
 msgid "database error: %s"
-msgstr ""
-
-msgid ""
-"show the children of the given or working dir revision\n"
-"\n"
-"    Print the children of the working directory's revisions.\n"
-"    If a revision is given via --rev, the children of that revision\n"
-"    will be printed. If a file argument is given, revision in\n"
-"    which the file was last changed (after the working directory\n"
-"    revision or the argument to --rev if given) is printed.\n"
-"    "
-msgstr ""
-
-msgid "show children of the specified rev"
-msgstr ""
+msgstr "データベースエラー: %s"
+
+msgid "command to display child changesets"
+msgstr "子チェンジセット表示のコマンド"
+
+msgid ""
+"show the children of the given or working directory revision\n"
+"\n"
+"    Print the children of the working directory's revisions. If a\n"
+"    revision is given via -r/--rev, the children of that revision will\n"
+"    be printed. If a file argument is given, revision in which the\n"
+"    file was last changed (after the working directory revision or the\n"
+"    argument to --rev if given) is printed.\n"
+"    "
+msgstr ""
+"指定リビジョンの子リビジョンの表示\n"
+"\n"
+"    作業領域の子リビジョンを表示します。-r/--rev によるリビジョン指定が\n"
+"    ある場合は、指定リビジョンの子リビジョンを表示します。引数として\n"
+"    ファイルが指定された場合、ファイルが(作業領域のリビジョンないし\n"
+"    --rev で指定されたリビジョンの後で)最後に変更されたリビジョンを表示\n"
+"   します。\n"
+"    "
+
+msgid "show children of the specified revision"
+msgstr "指定リビジョンの子リビジョンの表示"
 
 msgid "hg children [-r REV] [FILE]"
-msgstr ""
-
-msgid "command to show certain statistics about revision history"
-msgstr ""
-
-msgid "Calculate stats"
-msgstr ""
+msgstr "hg children [-r REV] [FILE]"
+
+msgid "command to display statistics about repository history"
+msgstr "変更履歴の統計情報表示のコマンド"
 
 #, python-format
 msgid "Revision %d is a merge, ignoring...\n"
-msgstr ""
-
-#, python-format
-msgid "\rgenerating stats: %d%%"
-msgstr ""
-
-msgid ""
-"graph count of revisions grouped by template\n"
-"\n"
-"    Will graph count of changed lines or revisions grouped by template or\n"
-"    alternatively by date, if dateformat is used. In this case it will "
-"override\n"
-"    template.\n"
-"\n"
-"    By default statistics are counted for number of changed lines.\n"
+msgstr "マージ実施リビジョン %d を無視...\n"
+
+#, python-format
+msgid "generating stats: %d%%"
+msgstr "統計作業中: %d%%"
+
+msgid ""
+"histogram of changes to the repository\n"
+"\n"
+"    This command will display a histogram representing the number\n"
+"    of changed lines or revisions, grouped according to the given\n"
+"    template. The default template will group changes by author.\n"
+"    The --dateformat option may be used to group the results by\n"
+"    date instead.\n"
+"\n"
+"    Statistics are based on the number of changed lines, or\n"
+"    alternatively the number of matching revisions if the\n"
+"    --changesets option is specified.\n"
 "\n"
 "    Examples:\n"
 "\n"
@@ -618,61 +531,96 @@
 "      # display count of lines changed in every year\n"
 "      hg churn -f '%Y' -s\n"
 "\n"
-"    The map file format used to specify aliases is fairly simple:\n"
-"\n"
-"    <alias email> <actual email>"
-msgstr ""
+"    It is possible to map alternate email addresses to a main address\n"
+"    by providing a file using the following format:\n"
+"\n"
+"    <alias email> <actual email>\n"
+"\n"
+"    Such a file may be specified with the --aliases option, otherwise a\n"
+"    .hgchurn file will be looked for in the working directory root.\n"
+"    "
+msgstr ""
+"リポジトリにおける変更の統計分布表示\n"
+"\n"
+"    本コマンドは、変更行数ないしリビジョン数の度数分布を、テンプレート\n"
+"    指定ないし日時によってグループ化したものをグラフ表示します。特に\n"
+"    指定の無い場合、リビジョン作成者毎に変更行数をグループ化します。\n"
+"    --dateformat が指定された場合、度数分布は日時でグループ化されます。\n"
+"\n"
+"    特に指定の無い場合、度数分布の統計対象は変更行数となりますが、\n"
+"    --changesets が指定された場合は、対象リビジョンの数が統計対象と\n"
+"    なります。\n"
+"\n"
+"    例:\n"
+"\n"
+"      # ユーザ毎の変更行数の表示\n"
+"      hg churn -t '{author|email}'\n"
+"\n"
+"      # 日毎の活発度(コミット実施数)を表示\n"
+"      hg churn -f '%H' -s -c\n"
+"\n"
+"      # 月毎の活発度を表示\n"
+"      hg churn -f '%Y-%m' -s -c\n"
+"\n"
+"      # 年毎の変更行数を表示\n"
+"      hg churn -f '%Y' -s\n"
+"\n"
+"    以下の形式のファイルを指定することで、リビジョンに記録された電子\n"
+"    メールアドレスを別のものに変換することが可能です:\n"
+"\n"
+"    <別名> <実名>\n"
+"\n"
+"    上記形式のファイルは、--aliases が指定された場合は指定された\n"
+"    ファイルが読み込まれますが、特に指定が無い場合、リポジトリのルート\n"
+"    直下に .hgchurn というファイルがあれば、これが使用されます。\n"
+"    "
 
 #, python-format
 msgid "assuming %i character terminal\n"
-msgstr ""
+msgstr "画面の横幅を %i 文字と仮定\n"
 
 msgid "count rate for the specified revision or range"
-msgstr ""
-
-msgid "count rate for revs matching date spec"
-msgstr ""
+msgstr "処理対象とする特定リビジョン/範囲の指定"
+
+msgid "count rate for revisions matching date spec"
+msgstr "指定日時と一致したリビジョンを処理対象とする"
 
 msgid "template to group changesets"
-msgstr ""
+msgstr "表示をグループ化するためのテンプレート"
 
 msgid "strftime-compatible format for grouping by date"
-msgstr ""
+msgstr "日時グループ化のための strftime 互換形式フォーマット"
 
 msgid "count rate by number of changesets"
-msgstr ""
+msgstr "チェンジセット数で統計"
 
 msgid "sort by key (default: sort by count)"
-msgstr ""
+msgstr "キーによる整列(無指定時: 統計量で整列)"
 
 msgid "file with email aliases"
-msgstr ""
+msgstr "ユーザ名変換用ファイル"
 
 msgid "show progress"
-msgstr ""
+msgstr "進捗状況の表示"
 
 msgid "hg churn [-d DATE] [-r REV] [--aliases FILE] [--progress] [FILE]"
-msgstr ""
-
-msgid ""
-"add color output to status, qseries, and diff-related commands\n"
-"\n"
-"This extension modifies the status command to add color to its output to\n"
-"reflect file status, the qseries command to add color to reflect patch "
-"status\n"
-"(applied, unapplied, missing), and to diff-related commands to highlight\n"
-"additions, removals, diff headers, and trailing whitespace.\n"
-"\n"
-"Other effects in addition to color, like bold and underlined text, are also\n"
-"available.  Effects are rendered with the ECMA-48 SGR control function (aka\n"
-"ANSI escape codes).  This module also provides the render_text function,\n"
-"which can be used to add effects to any text.\n"
-"\n"
-"To enable this extension, add this to your .hgrc file:\n"
-"[extensions]\n"
-"color =\n"
-"\n"
-"Default effects my be overriden from the .hgrc file:\n"
+msgstr "hg churn [-d DATE] [-r REV] [--aliases FILE] [--progress] [FILE]"
+
+msgid ""
+"colorize output from some commands\n"
+"\n"
+"This extension modifies the status command to add color to its output\n"
+"to reflect file status, the qseries command to add color to reflect\n"
+"patch status (applied, unapplied, missing), and to diff-related\n"
+"commands to highlight additions, removals, diff headers, and trailing\n"
+"whitespace.\n"
+"\n"
+"Other effects in addition to color, like bold and underlined text, are\n"
+"also available. Effects are rendered with the ECMA-48 SGR control\n"
+"function (aka ANSI escape codes). This module also provides the\n"
+"render_text function, which can be used to add effects to any text.\n"
+"\n"
+"Default effects may be overridden from the .hgrc file:\n"
 "\n"
 "[color]\n"
 "status.modified = blue bold underline red_background\n"
@@ -701,38 +649,18 @@
 "diff.trailingwhitespace = bold red_background\n"
 msgstr ""
 
-msgid "Wrap text in commands to turn on each effect."
-msgstr ""
-
-msgid "run the status command with colored output"
-msgstr ""
-
-msgid "run the qseries command with colored output"
-msgstr ""
-
-msgid "wrap ui.write for colored diff output"
-msgstr ""
-
-msgid "wrap cmdutil.changeset_printer.showpatch with colored output"
-msgstr ""
-
-msgid "run the diff command with colored output"
-msgstr ""
-
-msgid "Initialize the extension."
-msgstr ""
-
-msgid "patch in command to command table and load effect map"
-msgstr ""
-
 msgid "when to colorize (always, auto, or never)"
 msgstr ""
 
 msgid "don't colorize output"
-msgstr ""
-
-msgid "converting foreign VCS repositories to Mercurial"
-msgstr ""
+msgstr "出力を色づけ市内"
+
+#, python-format
+msgid "ignoring unknown color/effect %r (configured in color.%s)\n"
+msgstr ""
+
+msgid "import revisions from foreign VCS repositories into Mercurial"
+msgstr "他の構成管理ツールから Mercurial への履歴取り込み"
 
 msgid ""
 "convert a foreign SCM repository to a Mercurial one.\n"
@@ -752,33 +680,44 @@
 "    - Mercurial [hg]\n"
 "    - Subversion [svn] (history on branches is not preserved)\n"
 "\n"
-"    If no revision is given, all revisions will be converted. Otherwise,\n"
-"    convert will only import up to the named revision (given in a format\n"
-"    understood by the source).\n"
+"    If no revision is given, all revisions will be converted.\n"
+"    Otherwise, convert will only import up to the named revision\n"
+"    (given in a format understood by the source).\n"
 "\n"
 "    If no destination directory name is specified, it defaults to the\n"
-"    basename of the source with '-hg' appended.  If the destination\n"
+"    basename of the source with '-hg' appended. If the destination\n"
 "    repository doesn't exist, it will be created.\n"
 "\n"
+"    By default, all sources except Mercurial will use\n"
+"    --branchsort. Mercurial uses --sourcesort to preserve original\n"
+"    revision numbers order. Sort modes have the following effects:\n"
+"      --branchsort: convert from parent to child revision when\n"
+"        possible, which means branches are usually converted one after\n"
+"        the other. It generates more compact repositories.\n"
+"      --datesort: sort revisions by date. Converted repositories have\n"
+"        good-looking changelogs but are often an order of magnitude\n"
+"        larger than the same ones generated by --branchsort.\n"
+"      --sourcesort: try to preserve source revisions order, only\n"
+"        supported by Mercurial sources.\n"
+"\n"
 "    If <REVMAP> isn't given, it will be put in a default location\n"
-"    (<dest>/.hg/shamap by default).  The <REVMAP> is a simple text\n"
-"    file that maps each source commit ID to the destination ID for\n"
-"    that revision, like so:\n"
+"    (<dest>/.hg/shamap by default). The <REVMAP> is a simple text file\n"
+"    that maps each source commit ID to the destination ID for that\n"
+"    revision, like so:\n"
 "    <source ID> <destination ID>\n"
 "\n"
-"    If the file doesn't exist, it's automatically created.  It's updated\n"
-"    on each commit copied, so convert-repo can be interrupted and can\n"
-"    be run repeatedly to copy new commits.\n"
-"\n"
-"    The [username mapping] file is a simple text file that maps each source\n"
-"    commit author to a destination commit author. It is handy for source "
-"SCMs\n"
-"    that use unix logins to identify authors (eg: CVS). One line per author\n"
-"    mapping and the line format is:\n"
+"    If the file doesn't exist, it's automatically created. It's\n"
+"    updated on each commit copied, so convert-repo can be interrupted\n"
+"    and can be run repeatedly to copy new commits.\n"
+"\n"
+"    The [username mapping] file is a simple text file that maps each\n"
+"    source commit author to a destination commit author. It is handy\n"
+"    for source SCMs that use unix logins to identify authors (eg:\n"
+"    CVS). One line per author mapping and the line format is:\n"
 "    srcauthor=whatever string you want\n"
 "\n"
 "    The filemap is a file that allows filtering and remapping of files\n"
-"    and directories.  Comment lines start with '#'.  Each line can\n"
+"    and directories. Comment lines start with '#'. Each line can\n"
 "    contain one of the following directives:\n"
 "\n"
 "      include path/to/file\n"
@@ -789,33 +728,44 @@
 "\n"
 "    The 'include' directive causes a file, or all files under a\n"
 "    directory, to be included in the destination repository, and the\n"
-"    exclusion of all other files and dirs not explicitely included.\n"
+"    exclusion of all other files and directories not explicitly included.\n"
 "    The 'exclude' directive causes files or directories to be omitted.\n"
-"    The 'rename' directive renames a file or directory.  To rename from a\n"
-"    subdirectory into the root of the repository, use '.' as the path to\n"
-"    rename to.\n"
+"    The 'rename' directive renames a file or directory. To rename from\n"
+"    a subdirectory into the root of the repository, use '.' as the\n"
+"    path to rename to.\n"
 "\n"
 "    The splicemap is a file that allows insertion of synthetic\n"
-"    history, letting you specify the parents of a revision.  This is\n"
+"    history, letting you specify the parents of a revision. This is\n"
 "    useful if you want to e.g. give a Subversion merge two parents, or\n"
-"    graft two disconnected series of history together.  Each entry\n"
+"    graft two disconnected series of history together. Each entry\n"
 "    contains a key, followed by a space, followed by one or two\n"
-"    values, separated by spaces.  The key is the revision ID in the\n"
-"    source revision control system whose parents should be modified\n"
-"    (same format as a key in .hg/shamap).  The values are the revision\n"
-"    IDs (in either the source or destination revision control system)\n"
-"    that should be used as the new parents for that node.\n"
+"    comma-separated values. The key is the revision ID in the source\n"
+"    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"
+"\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"
+"    conjunction with a splicemap, it allows for a powerful combination\n"
+"    to help fix even the most badly mismanaged repositories and turn them\n"
+"    into nicely structured Mercurial repositories. The branchmap contains\n"
+"    lines of the form \"original_branch_name new_branch_name\".\n"
+"    \"original_branch_name\" is the name of the branch in the source\n"
+"    repository, and \"new_branch_name\" is the name of the branch is the\n"
+"    destination repository. This can be used to (for instance) move code\n"
+"    in one repository from \"default\" to a named branch.\n"
 "\n"
 "    Mercurial Source\n"
 "    -----------------\n"
 "\n"
-"    --config convert.hg.ignoreerrors=False (boolean)\n"
+"    --config convert.hg.ignoreerrors=False    (boolean)\n"
 "        ignore integrity errors when reading. Use it to fix Mercurial\n"
 "        repositories with missing revlogs, by converting from and to\n"
 "        Mercurial.\n"
-"    --config convert.hg.saverev=False          (boolean)\n"
-"        store original revision ID in changeset (forces target IDs to "
-"change)\n"
+"    --config convert.hg.saverev=False         (boolean)\n"
+"        store original revision ID in changeset (forces target IDs to\n"
+"        change)\n"
 "    --config convert.hg.startrev=0            (hg revision identifier)\n"
 "        convert start revision and its descendants\n"
 "\n"
@@ -824,12 +774,12 @@
 "\n"
 "    CVS source will use a sandbox (i.e. a checked-out copy) from CVS\n"
 "    to indicate the starting point of what will be converted. Direct\n"
-"    access to the repository files is not needed, unless of course\n"
-"    the repository is :local:. The conversion uses the top level\n"
-"    directory in the sandbox to find the CVS repository, and then uses\n"
-"    CVS rlog commands to find files to convert. This means that unless\n"
-"    a filemap is given, all files under the starting directory will be\n"
-"    converted, and that any directory reorganisation in the CVS\n"
+"    access to the repository files is not needed, unless of course the\n"
+"    repository is :local:. The conversion uses the top level directory\n"
+"    in the sandbox to find the CVS repository, and then uses CVS rlog\n"
+"    commands to find files to convert. This means that unless a\n"
+"    filemap is given, all files under the starting directory will be\n"
+"    converted, and that any directory reorganization in the CVS\n"
 "    sandbox is ignored.\n"
 "\n"
 "    Because CVS does not have changesets, it is necessary to collect\n"
@@ -837,46 +787,52 @@
 "    source uses its internal changeset merging code by default but can\n"
 "    be configured to call the external 'cvsps' program by setting:\n"
 "        --config convert.cvsps='cvsps -A -u --cvs-direct -q'\n"
-"    This is a legacy option and may be removed in future.\n"
+"    This option is deprecated and will be removed in Mercurial 1.4.\n"
 "\n"
 "    The options shown are the defaults.\n"
 "\n"
 "    Internal cvsps is selected by setting\n"
 "        --config convert.cvsps=builtin\n"
 "    and has a few more configurable options:\n"
-"        --config convert.cvsps.fuzz=60   (integer)\n"
-"            Specify the maximum time (in seconds) that is allowed between\n"
-"            commits with identical user and log message in a single\n"
-"            changeset. When very large files were checked in as part\n"
-"            of a changeset then the default may not be long enough.\n"
+"        --config convert.cvsps.cache=True     (boolean)\n"
+"            Set to False to disable remote log caching, for testing and\n"
+"            debugging purposes.\n"
+"        --config convert.cvsps.fuzz=60        (integer)\n"
+"            Specify the maximum time (in seconds) that is allowed\n"
+"            between commits with identical user and log message in a\n"
+"            single changeset. When very large files were checked in as\n"
+"            part of a changeset then the default may not be long\n"
+"            enough.\n"
 "        --config convert.cvsps.mergeto='{{mergetobranch ([-\\w]+)}}'\n"
-"            Specify a regular expression to which commit log messages are\n"
-"            matched. If a match occurs, then the conversion process will\n"
-"            insert a dummy revision merging the branch on which this log\n"
-"            message occurs to the branch indicated in the regex.\n"
+"            Specify a regular expression to which commit log messages\n"
+"            are matched. If a match occurs, then the conversion\n"
+"            process will insert a dummy revision merging the branch on\n"
+"            which this log message occurs to the branch indicated in\n"
+"            the regex.\n"
 "        --config convert.cvsps.mergefrom='{{mergefrombranch ([-\\w]+)}}'\n"
-"            Specify a regular expression to which commit log messages are\n"
-"            matched. If a match occurs, then the conversion process will\n"
-"            add the most recent revision on the branch indicated in the\n"
-"            regex as the second parent of the changeset.\n"
-"\n"
-"    The hgext/convert/cvsps wrapper script allows the builtin changeset\n"
-"    merging code to be run without doing a conversion. Its parameters and\n"
-"    output are similar to that of cvsps 2.1.\n"
+"            Specify a regular expression to which commit log messages\n"
+"            are matched. If a match occurs, then the conversion\n"
+"            process will add the most recent revision on the branch\n"
+"            indicated in the regex as the second parent of the\n"
+"            changeset.\n"
+"\n"
+"    The hgext/convert/cvsps wrapper script allows the builtin\n"
+"    changeset merging code to be run without doing a conversion. Its\n"
+"    parameters and output are similar to that of cvsps 2.1.\n"
 "\n"
 "    Subversion Source\n"
 "    -----------------\n"
 "\n"
 "    Subversion source detects classical trunk/branches/tags layouts.\n"
 "    By default, the supplied \"svn://repo/path/\" source URL is\n"
-"    converted as a single branch. If \"svn://repo/path/trunk\" exists\n"
-"    it replaces the default branch. If \"svn://repo/path/branches\"\n"
-"    exists, its subdirectories are listed as possible branches. If\n"
+"    converted as a single branch. If \"svn://repo/path/trunk\" exists it\n"
+"    replaces the default branch. If \"svn://repo/path/branches\" exists,\n"
+"    its subdirectories are listed as possible branches. If\n"
 "    \"svn://repo/path/tags\" exists, it is looked for tags referencing\n"
 "    converted branches. Default \"trunk\", \"branches\" and \"tags\" values\n"
-"    can be overriden with following options. Set them to paths\n"
-"    relative to the source URL, or leave them blank to disable\n"
-"    autodetection.\n"
+"    can be overridden with following options. Set them to paths\n"
+"    relative to the source URL, or leave them blank to disable auto\n"
+"    detection.\n"
 "\n"
 "    --config convert.svn.branches=branches    (directory name)\n"
 "        specify the directory containing branches\n"
@@ -895,17 +851,17 @@
 "    Perforce Source\n"
 "    ---------------\n"
 "\n"
-"    The Perforce (P4) importer can be given a p4 depot path or a client\n"
-"    specification as source. It will convert all files in the source to\n"
-"    a flat Mercurial repository, ignoring labels, branches and "
-"integrations.\n"
-"    Note that when a depot path is given you then usually should specify a\n"
-"    target directory, because otherwise the target may be named ...-hg.\n"
-"\n"
-"    It is possible to limit the amount of source history to be converted\n"
-"    by specifying an initial Perforce revision.\n"
-"\n"
-"    --config convert.p4.startrev=0           (perforce changelist number)\n"
+"    The Perforce (P4) importer can be given a p4 depot path or a\n"
+"    client specification as source. It will convert all files in the\n"
+"    source to a flat Mercurial repository, ignoring labels, branches\n"
+"    and integrations. Note that when a depot path is given you then\n"
+"    usually should specify a target directory, because otherwise the\n"
+"    target may be named ...-hg.\n"
+"\n"
+"    It is possible to limit the amount of source history to be\n"
+"    converted by specifying an initial Perforce revision.\n"
+"\n"
+"    --config convert.p4.startrev=0            (perforce changelist number)\n"
 "        specify initial Perforce revision.\n"
 "\n"
 "\n"
@@ -925,500 +881,545 @@
 msgid ""
 "create changeset information from CVS\n"
 "\n"
-"    This command is intended as a debugging tool for the CVS to Mercurial\n"
-"    converter, and can be used as a direct replacement for cvsps.\n"
-"\n"
-"    Hg debugcvsps reads the CVS rlog for current directory (or any named\n"
-"    directory) in the CVS repository, and converts the log to a series of\n"
-"    changesets based on matching commit log entries and dates."
-msgstr ""
+"    This command is intended as a debugging tool for the CVS to\n"
+"    Mercurial converter, and can be used as a direct replacement for\n"
+"    cvsps.\n"
+"\n"
+"    Hg debugcvsps reads the CVS rlog for current directory (or any\n"
+"    named directory) in the CVS repository, and converts the log to a\n"
+"    series of changesets based on matching commit log entries and\n"
+"    dates."
+msgstr ""
+"CVS からのチェンジセット情報作成\n"
+"\n"
+"    本コマンドの位置付けは、CVS から Mercurial への変換におけるデバッグ\n"
+"    ツールであり、cvsps の代替ツールとして使用可能です。\n"
+"\n"
+"    本コマンドは、現ディレクトリ(ないし指定ディレクトリ)中の CVS rlog を\n"
+"    読み込み、コミットログの内容と日付を元に推測されるチェンジセットへと\n"
+"    変換します。"
 
 msgid "username mapping filename"
-msgstr ""
+msgstr "ユーザ名対応付けファイルの指定"
 
 msgid "destination repository type"
-msgstr ""
+msgstr "変換先のリポジトリ種別"
 
 msgid "remap file names using contents of file"
-msgstr ""
+msgstr "変換時のファイル名変換用ファイル"
 
 msgid "import up to target revision REV"
-msgstr ""
+msgstr "指定リビジョンまでの取り込み"
 
 msgid "source repository type"
-msgstr ""
+msgstr "変換元リポジトリ種別"
 
 msgid "splice synthesized history into place"
-msgstr ""
+msgstr "履歴の合成"
+
+msgid "change branch names while converting"
+msgstr "変換時のブランチ名変換用ファイル"
+
+msgid "try to sort changesets by branches"
+msgstr "ブランチによるチェンジセットの並び替えを試す"
 
 msgid "try to sort changesets by date"
-msgstr ""
+msgstr "日付によるチェンジセットの並び替えを試す"
+
+msgid "preserve source changesets order"
+msgstr "元リポジトリでのチェンジセット並び順を尊重"
 
 msgid "hg convert [OPTION]... SOURCE [DEST [REVMAP]]"
-msgstr ""
+msgstr "hg convert [OPTION]... SOURCE [DEST [REVMAP]]"
 
 msgid "only return changes on specified branches"
-msgstr ""
+msgstr "指定ブランチのみの変換"
 
 msgid "prefix to remove from file names"
-msgstr ""
+msgstr "ファイル名から除外する接頭辞"
 
 msgid "only return changes after or between specified tags"
-msgstr ""
+msgstr "指定リビジョンのみの変換"
 
 msgid "update cvs log cache"
-msgstr ""
+msgstr "cvs ログキャッシュの更新"
 
 msgid "create new cvs log cache"
-msgstr ""
+msgstr "cvs ログキャッシュの新規作成"
 
 msgid "set commit time fuzz in seconds"
-msgstr ""
+msgstr "秒の位が不明な日時に設定する秒値"
 
 msgid "specify cvsroot"
-msgstr ""
+msgstr "cvsroot の指定"
 
 msgid "show parent changesets"
-msgstr ""
+msgstr "親チェンジセットの表示"
 
 msgid "show current changeset in ancestor branches"
-msgstr ""
+msgstr "祖先のブランチにおける現行チェンジセットの表示"
 
 msgid "ignored for compatibility"
-msgstr ""
+msgstr "※ 後方互換性のためのオプション"
 
 msgid "hg debugcvsps [OPTION]... [PATH]..."
-msgstr ""
+msgstr "hg debugcvsps [OPTION]... [PATH]..."
+
+msgid ""
+"warning: lightweight checkouts may cause conversion failures, try with a "
+"regular branch instead.\n"
+msgstr "警告: 簡易チェックアウトは失敗要因となるため通常ブランチを使います\n"
+
+msgid "bzr source type could not be determined\n"
+msgstr "変換元の種別が bzr であると特定できません\n"
 
 #, python-format
 msgid "%s is not a valid revision in current branch"
-msgstr ""
+msgstr "%s は現在のブランチの正しいリビジョンではありません"
 
 #, python-format
 msgid "%s is not available in %s anymore"
-msgstr ""
+msgstr "%s は %s において存在しません"
+
+#, python-format
+msgid "%s.%s symlink has no target"
+msgstr "%s.%s はシンボリックリンク先がありません"
 
 #, python-format
 msgid "cannot find required \"%s\" tool"
-msgstr ""
+msgstr "要求されたツール '%s' を見つけることができません"
 
 #, python-format
 msgid "running: %s\n"
-msgstr ""
+msgstr "実行しています: %s\n"
 
 #, python-format
 msgid "%s error:\n"
-msgstr ""
-
-#, python-format
-msgid "%s %s"
-msgstr ""
+msgstr "%s エラー:\n"
+
+#, python-format
+msgid "syntax error in %s(%d): key/value pair expected"
+msgstr "%s(%d) での文法エラー: key/value の組が必要です"
 
 #, python-format
 msgid "could not open map file %r: %s"
-msgstr ""
+msgstr "変換ファイル %r を開くことができません: %s"
 
 #, python-format
 msgid "%s: missing or unsupported repository"
-msgstr ""
+msgstr "%s: リポジトリが見つからないか、サポートされていない形式です"
 
 #, python-format
 msgid "convert: %s\n"
-msgstr ""
+msgstr "変換: %s\n"
 
 #, python-format
 msgid "%s: unknown repository type"
-msgstr ""
+msgstr "%s: 未知のリポジトリ形式"
+
+#, python-format
+msgid "unknown sort mode: %s"
+msgstr "未知の整列方式 %s"
 
 #, python-format
 msgid "cycle detected between %s and %s"
-msgstr ""
+msgstr "%s と %s の間で巡回を検出しました"
 
 msgid "not all revisions were sorted"
-msgstr ""
+msgstr "格納されていないリビジョンがあります"
 
 #, python-format
 msgid "Writing author map file %s\n"
-msgstr ""
-
-#, python-format
-msgid "Overriding mapping for author %s, was %s, will be %s\n"
-msgstr ""
+msgstr "作成者名変換ファイル %s への書き込み中\n"
+
+#, python-format
+msgid "Ignoring bad line in author map file %s: %s\n"
+msgstr "作成者名変換ファイル %s の不正な行を無視: %s\n"
 
 #, python-format
 msgid "mapping author %s to %s\n"
-msgstr ""
-
-#, python-format
-msgid "Ignoring bad line in author map file %s: %s\n"
-msgstr ""
+msgstr "作成者 %s を %s に変換\n"
+
+#, python-format
+msgid "overriding mapping for author %s, was %s, will be %s\n"
+msgstr "作成者 %s の %s への変換を、%s への変換で上書きします\n"
 
 #, python-format
 msgid "spliced in %s as parents of %s\n"
-msgstr ""
+msgstr "%s を %s の親として合成\n"
 
 msgid "scanning source...\n"
-msgstr ""
+msgstr "変換元リポジトリの走査中...\n"
 
 msgid "sorting...\n"
-msgstr ""
+msgstr "並べ替え中...\n"
 
 msgid "converting...\n"
-msgstr ""
+msgstr "変換中...\n"
 
 #, python-format
 msgid "source: %s\n"
-msgstr ""
+msgstr "変換元: %s\n"
 
 #, python-format
 msgid "assuming destination %s\n"
-msgstr ""
+msgstr "変換先として %s を想定\n"
+
+msgid "more than one sort mode specified"
+msgstr "整列オプションの指定が過剰です"
+
+msgid "--sourcesort is not supported by this data source"
+msgstr "指定の変換元では --sourcesort を指定できません"
+
+msgid ""
+"warning: support for external cvsps is deprecated and will be removed in "
+"Mercurial 1.4\n"
+msgstr "警告: 外部 cvsps は Mercurial 1.4 でサポート打ち切り予定です\n"
 
 #, python-format
 msgid "revision %s is not a patchset number or date"
-msgstr ""
+msgstr "%s はリビジョン名でも日付でもありません"
 
 msgid "using builtin cvsps\n"
-msgstr ""
+msgstr "組み込み cvsps を使用します\n"
 
 #, python-format
 msgid "connecting to %s\n"
-msgstr ""
+msgstr "%s へ接続中\n"
 
 msgid "CVS pserver authentication failed"
-msgstr ""
+msgstr "CVS pserver の認証に失敗"
 
 msgid "server sucks"
-msgstr ""
+msgstr "サーバ応答が不正です"
 
 #, python-format
 msgid "%d bytes missing from remote file"
-msgstr ""
+msgstr "リモートファイルと %d バイト違います"
 
 #, python-format
 msgid "cvs server: %s\n"
-msgstr ""
+msgstr "cvs サーバ: %s\n"
 
 #, python-format
 msgid "unknown CVS response: %s"
-msgstr ""
+msgstr "未知の CVS レスポンス: %s"
 
 msgid "collecting CVS rlog\n"
-msgstr ""
+msgstr "CVS rlog 収集中\n"
 
 #, python-format
 msgid "reading cvs log cache %s\n"
-msgstr ""
+msgstr "CVS ログキャッシュ %s 読み込み中\n"
 
 #, python-format
 msgid "cache has %d log entries\n"
-msgstr ""
+msgstr "キャッシュには %d 件のログエントリがあります\n"
 
 #, python-format
 msgid "error reading cache: %r\n"
-msgstr ""
+msgstr "キャッシュ読み込みの失敗: %r\n"
 
 #, python-format
 msgid "running %s\n"
-msgstr ""
+msgstr "%s の実行中\n"
 
 #, python-format
 msgid "prefix=%r directory=%r root=%r\n"
-msgstr ""
+msgstr "接頭辞=%r ディレクトリ=%r ルート=%r\n"
 
 msgid "RCS file must be followed by working file"
-msgstr ""
+msgstr "RCS ファイルはワーキングファイル情報を伴う筈です"
 
 msgid "must have at least some revisions"
-msgstr ""
+msgstr "リビジョン指定が足りません"
 
 msgid "expected revision number"
-msgstr ""
+msgstr "リビジョン番号がありません"
 
 msgid "revision must be followed by date line"
-msgstr ""
+msgstr "リビジョン情報は日付情報を伴う筈です"
+
+#, python-format
+msgid "found synthetic revision in %s: %r\n"
+msgstr "%s で合成リビジョン %r を検出\n"
 
 #, python-format
 msgid "writing cvs log cache %s\n"
-msgstr ""
+msgstr "cvs ログキャッシュ %s の書き込み中\n"
 
 #, python-format
 msgid "%d log entries\n"
-msgstr ""
+msgstr "%d 件のログエントリ\n"
 
 msgid "creating changesets\n"
-msgstr ""
+msgstr "チェンジセット作成中\n"
+
+msgid "synthetic changeset cannot have multiple parents"
+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"
-msgstr ""
+msgstr "%d 件のチェンジセットエントリ\n"
 
 msgid "Python ElementTree module is not available"
-msgstr ""
+msgstr "Python の ElementTree モジュールが利用できません"
 
 #, python-format
 msgid "cleaning up %s\n"
-msgstr ""
+msgstr "%s を整理中\n"
 
 msgid "internal calling inconsistency"
-msgstr ""
+msgstr "内部不整合"
 
 msgid "errors in filemap"
-msgstr ""
+msgstr "ファイルマップでの解析エラー"
 
 #, python-format
 msgid "%s:%d: %r already in %s list\n"
-msgstr ""
+msgstr "%s:%d: %r は既に %s 中にあります\n"
 
 #, python-format
 msgid "%s:%d: unknown directive %r\n"
-msgstr ""
+msgstr "%s:%d: %r は未知のディレクティブです\n"
 
 msgid "source repository doesn't support --filemap"
-msgstr ""
+msgstr "変換元リポジトリは  --filemap をサポートしていません"
 
 #, python-format
 msgid "%s does not look like a GNU Arch repo"
-msgstr ""
+msgstr "%s は GNU Arch 形式ではないと思われます"
 
 msgid "cannot find a GNU Arch tool"
-msgstr ""
+msgstr "GNU Arch ツールを見つけることができません"
 
 #, python-format
 msgid "analyzing tree version %s...\n"
-msgstr ""
+msgstr "ツリーバージョン %s の解析中...\n"
 
 #, python-format
 msgid ""
 "tree analysis stopped because it points to an unregistered archive %s...\n"
-msgstr ""
+msgstr "未登録アーカイブ %s の参照によりツリー解析を中断...\n"
 
 #, python-format
 msgid "applying revision %s...\n"
-msgstr ""
+msgstr "リビジョン %s の適用中...\n"
 
 #, python-format
 msgid "computing changeset between %s and %s...\n"
-msgstr ""
+msgstr "%s と %s との間のチェンジセットを算出中...\n"
 
 #, python-format
 msgid "obtaining revision %s...\n"
-msgstr ""
-
-#, python-format
-msgid "analysing revision %s...\n"
-msgstr ""
+msgstr "リビジョン %s の取得中...\n"
+
+#, python-format
+msgid "analyzing revision %s...\n"
+msgstr "リビジョン %s の解析中...\n"
 
 #, python-format
 msgid "could not parse cat-log of %s"
-msgstr ""
+msgstr "リビジョン %s の cat-log の解析に失敗"
 
 #, python-format
 msgid "%s is not a local Mercurial repo"
-msgstr ""
+msgstr "%s はローカルの Mercurial リポジトリではありません"
 
 #, python-format
 msgid "initializing destination %s repository\n"
-msgstr ""
+msgstr "変換先リポジトリ %s の初期化中\n"
 
 msgid "run hg sink pre-conversion action\n"
-msgstr ""
+msgstr "変換先での前処理を実施\n"
 
 msgid "run hg sink post-conversion action\n"
-msgstr ""
+msgstr "変換先での後処理を実施\n"
 
 #, python-format
 msgid "pulling from %s into %s\n"
-msgstr ""
+msgstr "%s から %s に取り込み中\n"
+
+msgid "filtering out empty revision\n"
+msgstr "空リビジョンの除外中\n"
 
 msgid "updating tags\n"
-msgstr ""
+msgstr "タグの更新中\n"
 
 #, python-format
 msgid "%s is not a valid start revision"
-msgstr ""
+msgstr "%s は正しい開始リビジョンではありません"
 
 #, python-format
 msgid "ignoring: %s\n"
-msgstr ""
+msgstr "例外を無視します: %s\n"
 
 msgid "run hg source pre-conversion action\n"
-msgstr ""
+msgstr "変換元での前処理を実施\n"
 
 msgid "run hg source post-conversion action\n"
-msgstr ""
+msgstr "変換元での後処理を実施\n"
 
 #, python-format
 msgid "%s does not look like a monotone repo"
-msgstr ""
-
-#, python-format
-msgid "copying file in renamed dir from '%s' to '%s'"
-msgstr ""
+msgstr "%s は monotone のリポジトリとは思われません"
+
+#, python-format
+msgid "copying file in renamed directory from '%s' to '%s'"
+msgstr "改名先ディレクトリの '%s' から '%s' へファイルを複製中"
 
 msgid "reading p4 views\n"
-msgstr ""
+msgstr "p4 ビューの読み込み中\n"
 
 msgid "collecting p4 changelists\n"
-msgstr ""
+msgstr "p4 チェンジリストの収集中\n"
 
 msgid "Subversion python bindings could not be loaded"
-msgstr ""
+msgstr "Subversion python バインディングが読み込めません"
 
 #, python-format
 msgid "Subversion python bindings %d.%d found, 1.4 or later required"
-msgstr ""
+msgstr "Subversion python バインディングは 1.4 以上が必要です(%d.%d を検出)"
 
 msgid "Subversion python bindings are too old, 1.4 or later required"
-msgstr ""
+msgstr "Subversion python バインディングは 1.4 以上が必要です"
 
 #, python-format
 msgid "svn: revision %s is not an integer"
-msgstr ""
+msgstr "svn: リビジョン %s が数字ではありません"
 
 #, python-format
 msgid "svn: start revision %s is not an integer"
-msgstr ""
+msgstr "svn: 開始リビジョン %s が数字ではありません"
 
 #, python-format
 msgid "no revision found in module %s"
-msgstr ""
+msgstr "モジュール %s でリビジョンが見つかりません"
 
 #, python-format
 msgid "expected %s to be at %r, but not found"
-msgstr ""
+msgstr "%s が %r にありません"
 
 #, python-format
 msgid "found %s at %r\n"
-msgstr ""
+msgstr "%s が %r にありました\n"
 
 #, python-format
 msgid "ignoring empty branch %s\n"
-msgstr ""
+msgstr "空ブランチ %s を無視します\n"
 
 #, python-format
 msgid "found branch %s at %d\n"
-msgstr ""
-
-msgid "svn: start revision is not supported with with more than one branch"
-msgstr ""
+msgstr "ブランチ %s を %d で見つけました\n"
+
+msgid "svn: start revision is not supported with more than one branch"
+msgstr "svn: 複数ブランチに対する開始リビジョンは未サポートです"
 
 #, python-format
 msgid "svn: no revision found after start revision %d"
-msgstr ""
+msgstr "svn: 開始リビジョン %d 以降にリビジョンはありません"
 
 #, python-format
 msgid "no tags found at revision %d\n"
-msgstr ""
+msgstr "リビジョン %d にタグはありません\n"
 
 #, python-format
 msgid "ignoring foreign branch %r\n"
-msgstr ""
+msgstr "外部ブランチ %r を無視します\n"
 
 #, python-format
 msgid "%s not found up to revision %d"
-msgstr ""
+msgstr "リビジョン %s は %d までのりビジョンに見当たりません"
 
 #, python-format
 msgid "branch renamed from %s to %s at %d\n"
-msgstr ""
+msgstr "ブランチ %s から %s への %d における改名\n"
 
 #, python-format
 msgid "reparent to %s\n"
-msgstr ""
+msgstr "%s へのリペアレント\n"
 
 #, python-format
 msgid "copied to %s from %s@%s\n"
-msgstr ""
+msgstr "%s に %s@%s から複製\n"
 
 #, python-format
 msgid "gone from %s\n"
-msgstr ""
-
-#, python-format
-msgid "found parent directory %s\n"
-msgstr ""
-
-#, python-format
-msgid "base, entry %s %s\n"
-msgstr ""
-
-msgid "munge-o-matic\n"
-msgstr ""
-
-#, python-format
-msgid "info: %s %s %s %s\n"
-msgstr ""
+msgstr "%s を去ります\n"
+
+#, python-format
+msgid "entry %s\n"
+msgstr "エントリ=%s\n"
 
 #, python-format
 msgid "unknown path in revision %d: %s\n"
-msgstr ""
+msgstr "リビジョン %d に未知のパス: %s\n"
 
 #, python-format
 msgid "mark %s came from %s:%d\n"
-msgstr ""
+msgstr "%s を %s:%d 由来とみなす\n"
 
 #, python-format
 msgid "parsing revision %d (%d changes)\n"
-msgstr ""
+msgstr "リビジョン %d の解析中(%d 件の変更)\n"
 
 #, python-format
 msgid "found parent of branch %s at %d: %s\n"
-msgstr ""
+msgstr "ブランチ %s の親を %d:%s で検出\n"
 
 msgid "no copyfrom path, don't know what to do.\n"
-msgstr ""
+msgstr "複製元パスが不明なため、対処不能\n"
 
 #, python-format
 msgid "fetching revision log for \"%s\" from %d to %d\n"
-msgstr ""
-
-#, python-format
-msgid "skipping blacklisted revision %d\n"
-msgstr ""
+msgstr "\"%s\" の変更履歴(%d から %d)の先読み中\n"
 
 #, python-format
 msgid "revision %d has no entries\n"
-msgstr ""
+msgstr "リビジョン %d はエントリを持っていません\n"
 
 #, python-format
 msgid "svn: branch has no revision %s"
-msgstr ""
+msgstr "svn: ブランチにはリビジョン %s がありません"
 
 #, python-format
 msgid "%r is not under %r, ignoring\n"
-msgstr ""
+msgstr "%r は %r 配下にないため無視します\n"
 
 #, python-format
 msgid "initializing svn repo %r\n"
-msgstr ""
+msgstr "svn リポジトリ %r の初期化中\n"
 
 #, python-format
 msgid "initializing svn wc %r\n"
-msgstr ""
+msgstr "svn ワーキングコピー %r を初期化しています\n"
 
 msgid "unexpected svn output:\n"
-msgstr ""
+msgstr "予期せぬ svn の出力:\n"
 
 msgid "unable to cope with svn output"
-msgstr ""
+msgstr "予期せぬ svn 出力のため継続できません"
 
 msgid "XXX TAGS NOT IMPLEMENTED YET\n"
-msgstr ""
-
-msgid ""
+msgstr "XXX タグ付けはまだ実装されていません\n"
+
+msgid ""
+"command to allow external programs to compare revisions\n"
 "\n"
 "The `extdiff' Mercurial extension allows you to use external programs\n"
-"to compare revisions, or revision with working dir.  The external diff\n"
+"to compare revisions, or revision with working directory. The external diff\n"
 "programs are called with a configurable set of options and two\n"
 "non-option arguments: paths to directories containing snapshots of\n"
 "files to compare.\n"
 "\n"
-"To enable this extension:\n"
-"\n"
-"  [extensions]\n"
-"  hgext.extdiff =\n"
-"\n"
 "The `extdiff' extension also allows to configure new diff commands, so\n"
 "you do not need to type \"hg extdiff -p kdiff3\" always.\n"
 "\n"
@@ -1436,47 +1437,28 @@
 "  meld =\n"
 "\n"
 "  # add new command called vimdiff, runs gvimdiff with DirDiff plugin\n"
-"  #(see http://www.vim.org/scripts/script.php?script_id=102)\n"
-"  # Non english user, be sure to put \"let g:DirDiffDynamicDiffText = 1\" "
+"  # (see http://www.vim.org/scripts/script.php?script_id=102)\n"
+"  # Non English user, be sure to put \"let g:DirDiffDynamicDiffText = 1\" "
 "in\n"
 "  # your .vimrc\n"
 "  vimdiff = gvim -f '+next' '+execute \"DirDiff\" argv(0) argv(1)'\n"
 "\n"
-"You can use -I/-X and list of file or directory names like normal\n"
-"\"hg diff\" command.  The `extdiff' extension makes snapshots of only\n"
-"needed files, so running the external diff program will actually be\n"
-"pretty fast (at least faster than having to compare the entire tree).\n"
-msgstr ""
-
-msgid "snapshot files as of some revision"
+"You can use -I/-X and list of file or directory names like normal \"hg\n"
+"diff\" command. The `extdiff' extension makes snapshots of only needed\n"
+"files, so running the external diff program will actually be pretty\n"
+"fast (at least faster than having to compare the entire tree).\n"
 msgstr ""
 
 #, python-format
 msgid "making snapshot of %d files from rev %s\n"
 msgstr ""
 
-msgid ""
-"snapshot files from working directory.\n"
-"    if not using snapshot, -I/-X does not work and recursive diff\n"
-"    in tools like kdiff3 and meld displays too many files."
-msgstr ""
-
-#, python-format
-msgid "making snapshot of %d files from working dir\n"
-msgstr ""
-
-msgid ""
-"Do the actuall diff:\n"
-"\n"
-"    - copy to a temp structure if diffing 2 internal revisions\n"
-"    - copy to a temp structure if diffing working revision with\n"
-"      another one and more than 1 file is changed\n"
-"    - just invoke the diff for a single file in the working dir\n"
-"    "
+#, python-format
+msgid "making snapshot of %d files from working directory\n"
 msgstr ""
 
 msgid "cannot specify --rev and --change at the same time"
-msgstr ""
+msgstr "--rev と --change は同時には指定出来ません"
 
 #, python-format
 msgid "running %r in %s\n"
@@ -1487,25 +1469,25 @@
 msgstr ""
 
 msgid "cleaning up temp directory\n"
-msgstr ""
+msgstr "一時ディレクトリの整理をしています\n"
 
 msgid ""
 "use external program to diff repository (or selected files)\n"
 "\n"
 "    Show differences between revisions for the specified files, using\n"
-"    an external program.  The default program used is diff, with\n"
+"    an external program. The default program used is diff, with\n"
 "    default options \"-Npru\".\n"
 "\n"
-"    To select a different program, use the -p option.  The program\n"
-"    will be passed the names of two directories to compare.  To pass\n"
-"    additional options to the program, use the -o option.  These will\n"
-"    be passed before the names of the directories to compare.\n"
-"\n"
-"    When two revision arguments are given, then changes are\n"
-"    shown between those revisions. If only one revision is\n"
-"    specified then that revision is compared to the working\n"
-"    directory, and, when no revisions are specified, the\n"
-"    working directory files are compared to its parent."
+"    To select a different program, use the -p/--program option. The\n"
+"    program will be passed the names of two directories to compare. To\n"
+"    pass additional options to the program, use -o/--option. These\n"
+"    will be passed before the names of the directories to compare.\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 ""
 
 msgid "comparison program to run"
@@ -1515,19 +1497,16 @@
 msgstr ""
 
 msgid "change made by revision"
-msgstr ""
+msgstr "当該リビジョンにおける変更内容の表示"
 
 msgid "hg extdiff [OPT]... [FILE]..."
 msgstr ""
 
-msgid "use closure to save diff command to use"
-msgstr ""
-
 #, python-format
 msgid "hg %s [OPTION]... [FILE]..."
 msgstr ""
 
-msgid "pulling, updating and merging in one command"
+msgid "pull, update and merge in one command"
 msgstr ""
 
 msgid ""
@@ -1536,13 +1515,14 @@
 "    This finds all changes from the repository at the specified path\n"
 "    or URL and adds them to the local repository.\n"
 "\n"
-"    If the pulled changes add a new branch head, the head is automatically\n"
-"    merged, and the result of the merge is committed.  Otherwise, the\n"
-"    working directory is updated to include the new changes.\n"
+"    If the pulled changes add a new branch head, the head is\n"
+"    automatically merged, and the result of the merge is committed.\n"
+"    Otherwise, the working directory is updated to include the new\n"
+"    changes.\n"
 "\n"
 "    When a merge occurs, the newly pulled changes are assumed to be\n"
-"    \"authoritative\".  The head of the new changes is used as the first\n"
-"    parent, with local changes as the second.  To switch the merge\n"
+"    \"authoritative\". The head of the new changes is used as the first\n"
+"    parent, with local changes as the second. To switch the merge\n"
 "    order, use --switch-parent.\n"
 "\n"
 "    See 'hg help dates' for a list of formats valid for -d/--date.\n"
@@ -1554,13 +1534,13 @@
 msgstr ""
 
 msgid "outstanding uncommitted merge"
-msgstr ""
+msgstr "マージが未コミットです"
 
 msgid "outstanding uncommitted changes"
-msgstr ""
+msgstr "未コミットの変更があります"
 
 msgid "working directory is missing some files"
-msgstr ""
+msgstr "作業領域に存在しないファイルがあります"
 
 msgid ""
 "multiple heads in this branch (use \"hg heads .\" and \"hg merge\" to merge)"
@@ -1570,8 +1550,10 @@
 msgid "pulling from %s\n"
 msgstr "%s から取り込み中\n"
 
-msgid "fetch -r doesn't work for remote repositories yet"
-msgstr ""
+msgid ""
+"Other repository doesn't support revision lookup, so a rev cannot be "
+"specified."
+msgstr "連携先でリビジョンが特定出来ないため、リビジョンは指定できません"
 
 #, python-format
 msgid ""
@@ -1581,11 +1563,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 "Automated merge with %s"
@@ -1599,7 +1581,7 @@
 msgstr ""
 
 msgid "edit commit message"
-msgstr ""
+msgstr "コミットメッセージの編集"
 
 msgid "edit commit message (DEPRECATED)"
 msgstr ""
@@ -1610,25 +1592,12 @@
 msgid "hg fetch [SOURCE]"
 msgstr ""
 
-msgid " returns of the good and bad signatures"
-msgstr ""
+msgid "commands to sign and verify changesets"
+msgstr "チェンジセットの署名および検証のコマンド"
 
 msgid "error while verifying signature"
 msgstr ""
 
-msgid "create a new gpg instance"
-msgstr ""
-
-msgid ""
-"\n"
-"    walk over every sigs, yields a couple\n"
-"    ((node, version, sig), (filename, linenumber))\n"
-"    "
-msgstr ""
-
-msgid "get the keys who signed a data"
-msgstr ""
-
 #, python-format
 msgid "%s Bad signature from \"%s\"\n"
 msgstr ""
@@ -1642,21 +1611,18 @@
 msgstr ""
 
 msgid "list signed changesets"
-msgstr ""
+msgstr "署名済みリビジョンの一覧表示"
 
 #, python-format
 msgid "%s:%d node does not exist\n"
-msgstr ""
+msgstr "%s:%d ノードは存在しません\n"
 
 msgid "verify all the signatures there may be for a particular revision"
 msgstr ""
 
 #, python-format
 msgid "No valid signature for %s\n"
-msgstr ""
-
-msgid "associate a string to a key (username, comment)"
-msgstr ""
+msgstr "%s の正しい署名ではありません\n"
 
 msgid ""
 "add a signature for the current or given revision\n"
@@ -1669,10 +1635,10 @@
 msgstr ""
 
 msgid "uncommitted merge - please provide a specific revision"
-msgstr "マージが未コミットです - リビジョンを指定してください"
+msgstr "マージが未コミットです - 対象リビジョンを指定してください"
 
 msgid "Error while signing"
-msgstr ""
+msgstr "署名処理の失敗"
 
 msgid ""
 "working copy of .hgsigs is changed (please commit .hgsigs manually or use --"
@@ -1681,13 +1647,10 @@
 
 #, python-format
 msgid "Added signature for changeset %s"
-msgstr ""
-
-msgid "map a manifest into some text"
-msgstr ""
+msgstr "チェンジセット %s の署名を追加しました"
 
 msgid "unknown signature version"
-msgstr ""
+msgstr "未知の署名バージョン"
 
 msgid "make the signature local"
 msgstr ""
@@ -1702,75 +1665,33 @@
 msgstr ""
 
 msgid "commit message"
-msgstr ""
+msgstr "コミットメッセージ"
 
 msgid "hg sign [OPTION]... [REVISION]..."
-msgstr ""
+msgstr "hg sign [OPTION]... [REVISION]..."
 
 msgid "hg sigcheck REVISION"
-msgstr ""
+msgstr "hg sigcheck REVISION"
 
 msgid "hg sigs"
-msgstr ""
-
-msgid ""
-"show revision graphs in terminal windows\n"
+msgstr "hg sigs"
+
+msgid ""
+"command to view revision graphs from a shell\n"
 "\n"
 "This extension adds a --graph option to the incoming, outgoing and log\n"
-"commands. When this options is given, an ascii representation of the\n"
+"commands. When this options is given, an ASCII representation of the\n"
 "revision graph is also shown.\n"
 msgstr ""
-
-msgid ""
-"cset DAG generator yielding (rev, node, [parents]) tuples\n"
-"\n"
-"    This generator function walks through the revision history from "
-"revision\n"
-"    start to revision stop (which must be less than or equal to start).\n"
-"    "
-msgstr ""
-
-msgid ""
-"file cset DAG generator yielding (rev, node, [parents]) tuples\n"
-"\n"
-"    This generator function walks through the revision history of a single\n"
-"    file from revision start to revision stop (which must be less than or\n"
-"    equal to start).\n"
-"    "
-msgstr ""
-
-msgid ""
-"grapher for asciigraph on a list of nodes and their parents\n"
-"\n"
-"    nodes must generate tuples (node, parents, char, lines) where\n"
-"     - parents must generate the parents of node, in sorted order,\n"
-"       and max length 2,\n"
-"     - char is the char to print as the node symbol, and\n"
-"     - lines are the lines to display next to the node.\n"
-"    "
-msgstr ""
-
-msgid ""
-"prints an ASCII graph of the DAG returned by the grapher\n"
-"\n"
-"    grapher is a generator that emits tuples with the following elements:\n"
-"\n"
-"      - Character to use as node's symbol.\n"
-"      - List of lines to display as the node's text.\n"
-"      - Column of the current node in the set of ongoing edges.\n"
-"      - Edges; a list of (col, next_col) indicating the edges between\n"
-"        the current node and its parents.\n"
-"      - Number of columns (ongoing edges) in the current revision.\n"
-"      - The difference between the number of columns (ongoing edges)\n"
-"        in the next revision and the number of columns (ongoing edges)\n"
-"        in the current revision. That is: -1 means one column removed;\n"
-"        0 means no columns added or removed; 1 means one column added.\n"
-"    "
-msgstr ""
+"端末でのリビジョングラフ表示のコマンド\n"
+"\n"
+"本エクステンションは、incoming, outgoing および log コマンドに --graph\n"
+"オプションを付与します。このオプションが指定された場合、ASCII 文字による\n"
+"リビジョングラフが表示されます。\n"
 
 #, python-format
 msgid "--graph option is incompatible with --%s"
-msgstr ""
+msgstr "--graph と --%s は非互換です"
 
 msgid ""
 "show revision history alongside an ASCII revision graph\n"
@@ -1782,56 +1703,37 @@
 "    directory.\n"
 "    "
 msgstr ""
-
-msgid ""
-"show the outgoing changesets alongside an ASCII revision graph\n"
-"\n"
-"    Print the outgoing changesets alongside a revision graph drawn with\n"
-"    ASCII characters.\n"
-"\n"
-"    Nodes printed as an @ character are parents of the working\n"
-"    directory.\n"
-"    "
-msgstr ""
+"ASCII 文字によるリビジョングラフ表示を持つ履歴表示\n"
+"\n"
+"    ASCII 文字によるリビジョングラフ表示を伴った変更履歴を表示します。\n"
+"\n"
+"    @ 文字で表示されるリビジョンは、作業領域の親リビジョンです。\n"
+"    "
 
 #, python-format
 msgid "comparing with %s\n"
 msgstr "%s と比較中\n"
 
 msgid "no changes found\n"
-msgstr "新たなチェンジセットはありません\n"
-
-msgid ""
-"show the incoming changesets alongside an ASCII revision graph\n"
-"\n"
-"    Print the incoming changesets alongside a revision graph drawn with\n"
-"    ASCII characters.\n"
-"\n"
-"    Nodes printed as an @ character are parents of the working\n"
-"    directory.\n"
-"    "
-msgstr ""
-
-msgid "wrap the command"
-msgstr ""
+msgstr "差分はありません\n"
 
 msgid "show the revision DAG"
-msgstr ""
+msgstr "リビジョングラフの表示"
 
 msgid "limit number of changes displayed"
-msgstr "チェンジセット表示数の制限"
+msgstr "最大表示リビジョン数"
 
 msgid "show patch"
 msgstr "パッチ形式での表示"
 
 msgid "show the specified revision or range"
-msgstr "指定された単一ないし範囲内のリビジョンの表示"
+msgstr "指定された単一、ないしリビジョン区間の表示"
 
 msgid "hg glog [OPTION]... [FILE]"
-msgstr ""
-
-msgid ""
-"CIA notification\n"
+msgstr "hg glog [OPTION]... [FILE]"
+
+msgid ""
+"hooks for integrating with the CIA.vc notification service\n"
 "\n"
 "This is meant to be run as a changegroup or incoming hook.\n"
 "To configure it, set the following options in your hgrc:\n"
@@ -1846,8 +1748,7 @@
 "# Append a diffstat to the log message (optional)\n"
 "#diffstat = False\n"
 "# Template to use for log messages (optional)\n"
-"#template = {desc}\n"
-"{baseurl}/rev/{node}-- {diffstat}\n"
+"#template = {desc}\\n{baseurl}/rev/{node}-- {diffstat}\n"
 "# Style to use (optional)\n"
 "#style = foo\n"
 "# The URL of the CIA notification service (optional)\n"
@@ -1868,56 +1769,35 @@
 "baseurl = http://server/path/to/repo\n"
 msgstr ""
 
-msgid " A CIA message "
-msgstr ""
-
-msgid " CIA notification class "
-msgstr ""
-
 #, python-format
 msgid "hgcia: sending update to %s\n"
-msgstr ""
-
-msgid " send CIA notification "
-msgstr ""
+msgstr "hgcia: %s に更新を送信しています\n"
 
 msgid "email.from must be defined when sending by email"
 msgstr ""
 
 msgid "cia: no user specified"
-msgstr ""
+msgstr "cia: ユーザが指定されていません"
 
 msgid "cia: no project specified"
-msgstr ""
-
-msgid ""
-"browsing the repository in a graphical way\n"
+msgstr "cia: プロジェクトが指定されていません"
+
+msgid ""
+"browse the repository in a graphical way\n"
 "\n"
 "The hgk extension allows browsing the history of a repository in a\n"
-"graphical way. It requires Tcl/Tk version 8.4 or later. (Tcl/Tk is\n"
-"not distributed with Mercurial.)\n"
+"graphical way. It requires Tcl/Tk version 8.4 or later. (Tcl/Tk is not\n"
+"distributed with Mercurial.)\n"
 "\n"
 "hgk consists of two parts: a Tcl script that does the displaying and\n"
-"querying of information, and an extension to mercurial named hgk.py,\n"
+"querying of information, and an extension to Mercurial named hgk.py,\n"
 "which provides hooks for hgk to get information. hgk can be found in\n"
-"the contrib directory, and hgk.py can be found in the hgext directory.\n"
-"\n"
-"To load the hgext.py extension, add it to your .hgrc file (you have\n"
-"to use your global $HOME/.hgrc file, not one in a repository). You\n"
-"can specify an absolute path:\n"
-"\n"
-"  [extensions]\n"
-"  hgk=/usr/local/lib/hgk.py\n"
-"\n"
-"Mercurial can also scan the default python library path for a file\n"
-"named 'hgk.py' if you set hgk empty:\n"
-"\n"
-"  [extensions]\n"
-"  hgk=\n"
+"the contrib directory, and the extension is shipped in the hgext\n"
+"repository, and needs to be enabled.\n"
 "\n"
 "The hg view command will launch the hgk Tcl script. For this command\n"
-"to work, hgk must be in your search path. Alternately, you can\n"
-"specify the path to hgk in your .hgrc file:\n"
+"to work, hgk must be in your search path. Alternately, you can specify\n"
+"the path to hgk in your .hgrc file:\n"
 "\n"
 "  [hgk]\n"
 "  path=/location/of/hgk\n"
@@ -1936,10 +1816,10 @@
 msgstr ""
 
 msgid "output common ancestor information"
-msgstr ""
+msgstr "共通の先祖リビジョンの情報表示"
 
 msgid "cat a specific revision"
-msgstr ""
+msgstr "指定リビジョン時点の内容表示"
 
 msgid "cat-file: type or revision not supplied\n"
 msgstr ""
@@ -1948,276 +1828,313 @@
 msgstr ""
 
 msgid "parse given revisions"
-msgstr ""
+msgstr "指定リビジョンの解析"
 
 msgid "print revisions"
-msgstr ""
+msgstr "リビジョンの表示"
 
 msgid "print extension options"
-msgstr ""
+msgstr "エクステンション設定の表示"
 
 msgid "start interactive history viewer"
 msgstr ""
 
 msgid "hg view [-l LIMIT] [REVRANGE]"
-msgstr ""
+msgstr "hg view [-l LIMIT] [REVRANGE]"
 
 msgid "generate patch"
-msgstr ""
+msgstr "パッチの生成"
 
 msgid "recursive"
-msgstr ""
+msgstr "再起"
 
 msgid "pretty"
 msgstr ""
 
 msgid "stdin"
-msgstr ""
+msgstr "標準入力"
 
 msgid "detect copies"
-msgstr ""
+msgstr "コピーの検出"
 
 msgid "search"
 msgstr ""
 
 msgid "hg git-diff-tree [OPTION]... NODE1 NODE2 [FILE]..."
-msgstr ""
+msgstr "hg git-diff-tree [OPTION]... NODE1 NODE2 [FILE]..."
 
 msgid "hg debug-cat-file [OPTION]... TYPE FILE"
-msgstr ""
+msgstr "hg debug-cat-file [OPTION]... TYPE FILE"
 
 msgid "hg debug-config"
-msgstr ""
-
-msgid "hg debug-merge-base node node"
-msgstr ""
+msgstr "hg debug-config"
+
+msgid "hg debug-merge-base REV REV"
+msgstr "hg debug-merge-base REV REV"
 
 msgid "ignored"
-msgstr ""
+msgstr "無視しました"
 
 msgid "hg debug-rev-parse REV"
-msgstr ""
+msgstr "hg debug-rev-parse REV"
 
 msgid "header"
-msgstr ""
+msgstr "ヘッダ"
 
 msgid "topo-order"
 msgstr ""
 
 msgid "parents"
-msgstr ""
+msgstr "親"
 
 msgid "max-count"
 msgstr ""
 
-msgid "hg debug-rev-list [options] revs"
-msgstr ""
-
-msgid ""
-"syntax highlighting in hgweb, based on Pygments\n"
-"\n"
-"It depends on the pygments syntax highlighting library:\n"
+msgid "hg debug-rev-list [OPTION]... REV..."
+msgstr "hg debug-rev-list [OPTION]... REV..."
+
+msgid ""
+"syntax highlighting for hgweb (requires Pygments)\n"
+"\n"
+"It depends on the Pygments syntax highlighting library:\n"
 "http://pygments.org/\n"
 "\n"
-"To enable the extension add this to hgrc:\n"
-"\n"
-"[extensions]\n"
-"hgext.highlight =\n"
-"\n"
 "There is a single configuration option:\n"
 "\n"
 "[web]\n"
 "pygments_style = <style>\n"
 "\n"
 "The default is 'colorful'.\n"
-"\n"
-"-- Adam Hupp <adam@hupp.org>\n"
-msgstr ""
-
-msgid "inotify-based status acceleration for Linux systems\n"
-msgstr ""
+msgstr ""
+
+msgid "accelerate status report using Linux's inotify service"
+msgstr "Linux の inoitfy サービスによる状態報告の高速化"
 
 msgid "start an inotify server for this repository"
-msgstr ""
-
-msgid "(found dead inotify server socket; removing it)\n"
-msgstr ""
-
-msgid "(starting inotify server)\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 ""
-
-msgid "(inotify server not running)\n"
-msgstr ""
-
-#, python-format
-msgid "failed to contact inotify server: %s\n"
-msgstr ""
+msgstr "リポジトリに対する inotify サーバの起動"
+
+msgid ""
+"debugging information for inotify extension\n"
+"\n"
+"    Prints the list of directories being watched by the inotify server.\n"
+"    "
+msgstr ""
+"inotify エクステンション向けデバッグ情報\n"
+"\n"
+"    inotify サーバの監視対象ディレクトリを一覧表示します。\n"
+"    "
+
+msgid "directories being watched:\n"
+msgstr "監視対象ディレクトリ:\n"
 
 msgid "run server in background"
 msgstr "バックグラウンドでのサーバ実行"
 
 msgid "used internally by daemon mode"
-msgstr "バックグラウンド実行時での内部用途向け"
+msgstr "(バックグラウンド実行時での内部用途向け)"
 
 msgid "minutes to sit idle before exiting"
-msgstr ""
+msgstr "終了前のアイドリング待機時間(単位:分)"
 
 msgid "name of file to write process ID to"
-msgstr "プロセスID書き出し先ファイル名"
-
-msgid "hg inserve [OPT]..."
-msgstr ""
+msgstr "プロセスIDの書き出し先ファイル"
+
+msgid "hg inserve [OPTION]..."
+msgstr "hg inserve [OPTION]..."
+
+msgid "(found dead inotify server socket; removing it)\n"
+msgstr "(終了した inotify サーバのソケットを検出したので削除します)\n"
+
+msgid "(starting inotify server)\n"
+msgstr "(inotify サーバの起動中)\n"
+
+#, python-format
+msgid "could not start inotify server: %s\n"
+msgstr "inotify サーバの起動に失敗: %s\n"
+
+#, python-format
+msgid "could not talk to new inotify server: %s\n"
+msgstr "inotify サーバとの連携に失敗: %s\n"
+
+msgid "(inotify server not running)\n"
+msgstr "(inotify サーバは起動されていません)\n"
+
+#, python-format
+msgid "failed to contact inotify server: %s\n"
+msgstr "inotify サーバとの連携に失敗: %s\n"
+
+msgid "received empty answer from inotify server"
+msgstr "inotify サーバからの空応答 "
 
 #, python-format
 msgid "(inotify: received response from incompatible server version %d)\n"
-msgstr ""
+msgstr "(inotify: 互換性の無いバージョン %d のサーバ応答を受理)\n"
+
+#, python-format
+msgid "(inotify: received '%s' response when expecting '%s')\n"
+msgstr "(inotify: 想定外の '%s' 応答を受理。想定応答は '%s')\n"
 
 msgid "this system does not seem to support inotify"
-msgstr ""
+msgstr "このシステムでは inotify は利用できないように見えます"
 
 #, python-format
 msgid "*** the current per-user limit on the number of inotify watches is %s\n"
-msgstr ""
+msgstr "*** inotify のユーザ毎監視対象上限数は %s\n"
 
 msgid "*** this limit is too low to watch every directory in this repository\n"
-msgstr ""
+msgstr "*** この上限は作業領域の全ディレクトリの監視には少なすぎます\n"
 
 msgid "*** counting directories: "
-msgstr ""
+msgstr "*** ディレクトリの計上中: "
 
 #, python-format
 msgid "found %d\n"
-msgstr ""
+msgstr "%d 個のディレクトリを検出\n"
 
 #, python-format
 msgid "*** to raise the limit from %d to %d (run as root):\n"
-msgstr ""
+msgstr "*** 上限を %d から %d に上げてください(root 権限が必要):\n"
 
 #, python-format
 msgid "***  echo %d > %s\n"
-msgstr ""
+msgstr "***  echo %d > %s\n"
 
 #, python-format
 msgid "cannot watch %s until inotify watch limit is raised"
-msgstr ""
+msgstr "inotify の監視対象上限が上がるまでは %s を監視できません"
 
 #, python-format
 msgid "inotify service not available: %s"
-msgstr ""
+msgstr "inotify サービスが使用できません: %s"
 
 #, python-format
 msgid "watching %r\n"
-msgstr ""
+msgstr "%r を監視\n"
 
 #, python-format
 msgid "watching directories under %r\n"
-msgstr ""
+msgstr "%r 配下のディレクトリを監視\n"
 
 #, python-format
 msgid "status: %r dir(%d) -> %s\n"
-msgstr ""
+msgstr "status: %r dir(%d) -> %s\n"
 
 #, python-format
 msgid "status: %r %s -> %s\n"
-msgstr ""
+msgstr "status: %r %s -> %s\n"
 
 #, python-format
 msgid "%s dirstate reload\n"
-msgstr ""
+msgstr "%s: dirstate 再読み込み中\n"
 
 #, python-format
 msgid "%s end dirstate reload\n"
-msgstr ""
+msgstr "%s: dirstate 再読み込み完了\n"
 
 msgid "rescanning due to .hgignore change\n"
-msgstr ""
+msgstr ".hgignore 変更に付き再走査中\n"
 
 #, python-format
 msgid "%s event: created %s\n"
-msgstr ""
+msgstr "%s: %s を作成\n"
 
 #, python-format
 msgid "%s event: deleted %s\n"
-msgstr ""
+msgstr "%s: %s を削除\n"
 
 #, python-format
 msgid "%s event: modified %s\n"
-msgstr ""
+msgstr "%s: %s を変更\n"
 
 #, python-format
 msgid "filesystem containing %s was unmounted\n"
-msgstr ""
+msgstr "%s を含むファイルシステムが未マウントです\n"
 
 #, python-format
 msgid "%s readable: %d bytes\n"
-msgstr ""
+msgstr "%s: 読み込み可能: %d バイト\n"
 
 #, python-format
 msgid "%s below threshold - unhooking\n"
-msgstr ""
+msgstr "%s: 閾値未満 - ロック解放\n"
 
 #, python-format
 msgid "%s reading %d events\n"
-msgstr ""
+msgstr "%s: %d 個のイベント読み込み中\n"
 
 #, python-format
 msgid "%s hooking back up with %d bytes readable\n"
-msgstr ""
-
-#, python-format
-msgid "%s processing %d deferred events as %d\n"
-msgstr ""
+msgstr "%s: 読み込み可能な %d バイトのバックアップをフック\n"
 
 #, python-format
 msgid "could not start server: %s"
-msgstr ""
-
-#, python-format
-msgid "received query from incompatible client version %d\n"
-msgstr ""
+msgstr "サーバ起動が失敗: %s"
 
 #, python-format
 msgid "answering query for %r\n"
-msgstr ""
+msgstr "%r への問い合わせに返答中\n"
+
+#, python-format
+msgid "received query from incompatible client version %d\n"
+msgstr "互換性の無いクライアントバージョン %d からの問い合わせを受信\n"
+
+#, python-format
+msgid "unrecognized query type: %s\n"
+msgstr "未知の問い合わせ種別: %s\n"
 
 msgid "finished setup\n"
-msgstr ""
-
-msgid "polling: no timeout\n"
-msgstr ""
-
-#, python-format
-msgid "polling: %sms timeout\n"
-msgstr ""
+msgstr "セットアップを終了しました\n"
+
+msgid ""
+"expand expressions into changelog and summaries\n"
+"\n"
+"This extension allows the use of a special syntax in summaries,\n"
+"which will be automatically expanded into links or any other\n"
+"arbitrary expression, much like InterWiki does.\n"
+"\n"
+"A few example patterns (link to bug tracking, etc.) that may\n"
+"be used in your hgrc:\n"
+"\n"
+"  [interhg]\n"
+"  issues = s!issue(\\d+)!<a href=\"http://bts/issue\\1\">issue\\1</a>!\n"
+"  bugzilla = s!((?:bug|b=|(?=#?\\d{4,}))(?:\\s*#?)(\\d+))!<a..=\\2\">\\1</a>!"
+"i\n"
+"  boldify = s!(^|\\s)#(\\d+)\\b! <b>#\\2</b>!\n"
+msgstr ""
+"コミットログ中の記述の展開\n"
+"\n"
+"本エクステンションは、リンクなり任意の式の形式へと自動的に変換される\n"
+"InterWiki のような特別な書式を用いたコミットログの記述を可能にします。\n"
+"\n"
+"バグ管理システムで使用されるようなパターンを設定ファイルで記述する例を\n"
+"以下に示します。\n"
+"\n"
+"  [interhg]\n"
+"  issues = s!issue(\\d+)!<a href=\"http://bts/issue\\1\">issue\\1</a>!\n"
+"  bugzilla = s!((?:bug|b=|(?=#?\\d{4,}))(?:\\s*#?)(\\d+))!<a..=\\2\">\\1</a>!"
+"i\n"
+"  boldify = s!(^|\\s)#(\\d+)\\b! <b>#\\2</b>!\n"
 
 #, python-format
 msgid "interhg: invalid pattern for %s: %s\n"
-msgstr ""
+msgstr "interhg: %s のパターンが不正です: %s\n"
 
 #, python-format
 msgid "interhg: invalid regexp for %s: %s\n"
-msgstr ""
-
-msgid ""
-"keyword expansion in local repositories\n"
-"\n"
-"This extension expands RCS/CVS-like or self-customized $Keywords$\n"
-"in tracked text files selected by your configuration.\n"
-"\n"
-"Keywords are only expanded in local repositories and not stored in\n"
-"the change history. The mechanism can be regarded as a convenience\n"
-"for the current user or for archive distribution.\n"
-"\n"
-"Configuration is done in the [keyword] and [keywordmaps] sections\n"
-"of hgrc files.\n"
+msgstr "interhg: %s の正規表現が不正です: %s\n"
+
+msgid ""
+"expand keywords in tracked files\n"
+"\n"
+"This extension expands RCS/CVS-like or self-customized $Keywords$ in\n"
+"tracked text files selected by your configuration.\n"
+"\n"
+"Keywords are only expanded in local repositories and not stored in the\n"
+"change history. The mechanism can be regarded as a convenience for the\n"
+"current user or for archive distribution.\n"
+"\n"
+"Configuration is done in the [keyword] and [keywordmaps] sections of\n"
+"hgrc files.\n"
 "\n"
 "Example:\n"
 "\n"
@@ -2227,239 +2144,267 @@
 "    x*    = ignore\n"
 "\n"
 "Note: the more specific you are in your filename patterns\n"
-"      the less you lose speed in huge repos.\n"
+"      the less you lose speed in huge repositories.\n"
 "\n"
 "For [keywordmaps] template mapping and expansion demonstration and\n"
 "control run \"hg kwdemo\".\n"
 "\n"
 "An additional date template filter {date|utcdate} is provided.\n"
 "\n"
-"The default template mappings (view with \"hg kwdemo -d\") can be replaced\n"
-"with customized keywords and templates.\n"
-"Again, run \"hg kwdemo\" to control the results of your config changes.\n"
+"The default template mappings (view with \"hg kwdemo -d\") can be\n"
+"replaced with customized keywords and templates. Again, run \"hg\n"
+"kwdemo\" to control the results of your config changes.\n"
 "\n"
 "Before changing/disabling active keywords, run \"hg kwshrink\" to avoid\n"
-"the risk of inadvertedly storing expanded keywords in the change history.\n"
+"the risk of inadvertently storing expanded keywords in the change\n"
+"history.\n"
 "\n"
 "To force expansion after enabling it, or a configuration change, run\n"
 "\"hg kwexpand\".\n"
 "\n"
-"Also, when committing with the record extension or using mq's qrecord, be "
-"aware\n"
-"that keywords cannot be updated. Again, run \"hg kwexpand\" on the files in\n"
-"question to update keyword expansions after all changes have been checked "
-"in.\n"
+"Also, when committing with the record extension or using mq's qrecord,\n"
+"be aware that keywords cannot be updated. Again, run \"hg kwexpand\" on\n"
+"the files in question to update keyword expansions after all changes\n"
+"have been checked in.\n"
 "\n"
 "Expansions spanning more than one line and incremental expansions,\n"
 "like CVS' $Log$, are not supported. A keyword template map\n"
 "\"Log = {desc}\" expands to the first line of the changeset description.\n"
 msgstr ""
-
-msgid "Returns hgdate in cvs-like UTC format."
-msgstr ""
-
-msgid ""
-"\n"
-"    Sets up keyword templates, corresponding keyword regex, and\n"
-"    provides keyword substitution functions.\n"
-"    "
-msgstr ""
-
-msgid "Replaces keywords in data with expanded template."
-msgstr ""
-
-msgid "Returns data with keywords expanded."
-msgstr ""
-
-msgid ""
-"Returns true if path matches [keyword] pattern\n"
-"        and is not a symbolic link.\n"
-"        Caveat: localrepository._link fails on Windows."
-msgstr ""
-
-msgid "Overwrites selected files expanding/shrinking keywords."
-msgstr ""
-
-#, python-format
-msgid "overwriting %s %s keywords\n"
-msgstr ""
-
-msgid "Unconditionally removes all keyword substitutions from text."
-msgstr ""
-
-msgid "Returns text with all keyword substitutions removed."
-msgstr ""
-
-msgid "Returns lines with keyword substitutions removed."
-msgstr ""
-
-msgid ""
-"If in restricted mode returns data read from wdir with\n"
-"        keyword substitutions removed."
-msgstr ""
-
-msgid ""
-"\n"
-"    Subclass of filelog to hook into its read, add, cmp methods.\n"
-"    Keywords are \"stored\" unexpanded, and processed on reading.\n"
-"    "
-msgstr ""
-
-msgid "Expands keywords when reading filelog."
-msgstr ""
-
-msgid "Removes keyword substitutions when adding to filelog."
-msgstr ""
-
-msgid "Removes keyword substitutions for comparison."
-msgstr ""
-
-msgid ""
-"Bails out if [keyword] configuration is not active.\n"
-"    Returns status of working directory."
-msgstr ""
+"構成管理対象ファイル中のキーワード展開\n"
+"\n"
+"本エクステンションは、構成管理対象ファイル中の RCS/CVS 的(カスタマイズ\n"
+"可能)な $Keywords$ を、設定ファイルでの記述に従い展開します。\n"
+"\n"
+"キーワード展開は作業領域でのみ行われ、履歴には残りません。この仕組みは\n"
+"現行ユーザやアーカイブ配布者に配慮しています。\n"
+"\n"
+"設定は、設定ファイル中の [keyword] および [keywordmaps] セクションに\n"
+"記述します。\n"
+"\n"
+"記述例:\n"
+"\n"
+"    [keyword]\n"
+"    # \"x*\" に合致「しない」 python ファイルでのみキーワード展開\n"
+"    **.py =\n"
+"    x*    = ignore\n"
+"\n"
+"備考: ファイル名パターンが更に特殊になる場合、\n"
+"      リポジトリサイズ次第では性能劣化が生じ得ます。\n"
+"\n"
+"[keywordmaps] でのテンプレート設定の展開を実演するには、'hg kwdemo' を\n"
+"実行します。\n"
+"\n"
+"日付テンプレート用フィルタとして {date|utcdate} も使用可能です。\n"
+"\n"
+"無指定時のテンプレート設定('hg kwdemo -d' で閲覧可能)は、キーワード及び\n"
+"テンプレートのカスタマイズで置き換えることが可能です。繰り返しますが\n"
+"設定変更の確認は 'hg kwdemo' で行うことができます。\n"
+"\n"
+"展開済みキーワードが意図せず履歴に記録されてしまうことを防ぐために、\n"
+"キーワードの設定変更/無効化の前には 'hg kwshrink' を実行してください。\n"
+"\n"
+"キーワードの設定変更/有効化後に、強制的に展開する場合は 'hg kwexpand'\n"
+"を実行してください。\n"
+"\n"
+"record エクステンション併用時に qrecord コマンドを使用してコミットする\n"
+"場合、キーワードは更新されない点に注意してください。全ての変更内容を\n"
+"確認した上で、当該ファイルに対して 'hg kwexpand' を実行することで\n"
+"キーワード展開を行ってください。\n"
+"\n"
+"複数行に渡る展開や、CVS の $Log$ のような増加する内容の展開はサポート\n"
+"していません。キーワードテンプレート設定 \"Log = {desc}\" は、\n"
+"コミットメッセージの最初の一行を埋め込みます。\n"
+
+#, python-format
+msgid "overwriting %s expanding keywords\n"
+msgstr "キーワード置換で %s を上書き\n"
+
+#, python-format
+msgid "overwriting %s shrinking keywords\n"
+msgstr "キーワード置換で %s を上書き\n"
 
 msgid "[keyword] patterns cannot match"
-msgstr ""
+msgstr "[keyword] パターンが合致しません"
 
 msgid "no [keyword] patterns configured"
-msgstr ""
-
-msgid "Selects files and passes them to kwtemplater.overwrite."
-msgstr ""
+msgstr "[keyword] でのパターン設定がありません"
 
 msgid ""
 "print [keywordmaps] configuration and an expansion example\n"
 "\n"
-"    Show current, custom, or default keyword template maps\n"
-"    and their expansion.\n"
-"\n"
-"    Extend current configuration by specifying maps as arguments\n"
-"    and optionally by reading from an additional hgrc file.\n"
+"    Show current, custom, or default keyword template maps and their\n"
+"    expansions.\n"
+"\n"
+"    Extend current configuration by specifying maps as arguments and\n"
+"    optionally by reading from an additional hgrc file.\n"
 "\n"
 "    Override current keyword template maps with \"default\" option.\n"
 "    "
 msgstr ""
-
-#, python-format
-msgid ""
-"\n"
-"\t%s\n"
-msgstr ""
-
-#, python-format
-msgid "creating temporary repo at %s\n"
-msgstr ""
+"[keywordmaps] での設定内容および展開例の表示\n"
+"\n"
+"    現時点のキーワードテンプレートの設定内容および展開例を表示します。\n"
+"\n"
+"    引数でのマップ指定や、設定ファイルからの付加的な読み込みにより、\n"
+"    現時点での設定を拡張することができます。\n"
+"\n"
+"    --default 指定により、現時点のキーワードテンプレート設定を\n"
+"    デフォルトのもので一時的に置き換えることもできます。\n"
+"    "
+
+#, python-format
+msgid "creating temporary repository at %s\n"
+msgstr "一時リポジトリ %s の作成中\n"
+
+#, python-format
+msgid ""
+"\n"
+"\tconfig using %s keyword template maps\n"
+msgstr ""
+"\n"
+"\t%s をキーワードのテンプレートマップとして使用\n"
 
 #, python-format
 msgid ""
 "\n"
 "%s keywords written to %s:\n"
 msgstr ""
+"\n"
+"%sキーワードを %s に書き込みました:\n"
 
 msgid "unhooked all commit hooks\n"
-msgstr ""
-
-#, python-format
-msgid ""
-"\n"
-"removing temporary repo %s\n"
-msgstr ""
-
-msgid ""
-"expand keywords in working directory\n"
+msgstr "全ての commit フックを無効化\n"
+
+#, python-format
+msgid ""
+"\n"
+"\t%s keywords expanded%s\n"
+msgstr ""
+"\n"
+"%s キーワードを展開: %s\n"
+
+#, python-format
+msgid ""
+"\n"
+"removing temporary repository %s\n"
+msgstr ""
+"\n"
+"一時リポジトリ %s の削除中\n"
+
+msgid ""
+"expand keywords in the working directory\n"
 "\n"
 "    Run after (re)enabling keyword expansion.\n"
 "\n"
 "    kwexpand refuses to run if given files contain local changes.\n"
 "    "
 msgstr ""
-
-msgid ""
-"print files currently configured for keyword expansion\n"
-"\n"
-"    Crosscheck which files in working directory are potential targets for\n"
-"    keyword expansion.\n"
-"    That is, files matched by [keyword] config patterns but not symlinks.\n"
-"    "
-msgstr ""
-
-msgid ""
-"revert expanded keywords in working directory\n"
-"\n"
-"    Run before changing/disabling active keywords\n"
-"    or if you experience problems with \"hg import\" or \"hg merge\".\n"
+"作業領域におけるキーワードの展開\n"
+"\n"
+"    キーワード埋め込みが(再)有効化されてから実行してください。\n"
+"\n"
+"    指定されたファイルに未コミット変更がある場合、実行は中断されます。\n"
+"    "
+
+msgid ""
+"show files configured for keyword expansion\n"
+"\n"
+"    List which files in the working directory are matched by the\n"
+"    [keyword] configuration patterns.\n"
+"\n"
+"    Useful to prevent inadvertent keyword expansion and to speed up\n"
+"    execution by including only files that are actual candidates\n"
+"    for expansion.\n"
+"\n"
+"    See \"hg help keyword\" on how to construct patterns both for\n"
+"    inclusion and exclusion of files.\n"
+"\n"
+"    Use -u/--untracked to list untracked files as well.\n"
+"\n"
+"    With -a/--all and -v/--verbose the codes used to show the status\n"
+"    of files are:\n"
+"    K = keyword expansion candidate\n"
+"    k = keyword expansion candidate (untracked)\n"
+"    I = ignored\n"
+"    i = ignored (untracked)\n"
+"    "
+msgstr ""
+"キーワード展開設定のあるファイルの表示\n"
+"\n"
+"    作業領域中のファイルで、[keyword]  設定でのパターンに合致する\n"
+"    ファイルの一覧を表示します。\n"
+"\n"
+"    予期せぬキーワード展開の防止と、実行性能向上のために、実際の\n"
+"    埋め込み対象となるファイルのみを設定することをお勧めします。\n"
+"\n"
+"    パターン合致に関する詳細は、'hg help keyword' を参照してください。\n"
+"\n"
+"    -u/--untracked 指定のある場合、構成管理対象外のファイルも列挙\n"
+"    されます。\n"
+"\n"
+"    -a/--all および -v/--verbose 指定のある場合、各ファイルの状況は\n"
+"    以下の記号で表現されます。\n"
+"\n"
+"      K = キーワード展開候補\n"
+"      k = キーワード展開候補(構成管理対象外)\n"
+"      I = 無視\n"
+"      i = 無視(構成管理対象外)\n"
+"    "
+
+msgid ""
+"revert expanded keywords in the working directory\n"
+"\n"
+"    Run before changing/disabling active keywords or if you experience\n"
+"    problems with \"hg import\" or \"hg merge\".\n"
 "\n"
 "    kwshrink refuses to run if given files contain local changes.\n"
 "    "
 msgstr ""
-
-msgid ""
-"Collects [keyword] config in kwtools.\n"
-"    Monkeypatches dispatch._parse if needed."
-msgstr ""
-
-msgid "Monkeypatch dispatch._parse to obtain running hg command."
-msgstr ""
-
-msgid ""
-"Sets up repo as kwrepo for keyword substitution.\n"
-"    Overrides file method to return kwfilelog instead of filelog\n"
-"    if file matches user configuration.\n"
-"    Wraps commit to overwrite configured files with updated\n"
-"    keyword substitutions.\n"
-"    Monkeypatches patch and webcommands."
-msgstr ""
-
-msgid ""
-"Monkeypatch/wrap patch.patchfile.__init__ to avoid\n"
-"        rejects or conflicts due to expanded keywords in working dir."
-msgstr ""
-
-msgid ""
-"Monkeypatch patch.diff to avoid expansion except when\n"
-"        comparing against working dir."
-msgstr ""
-
-msgid "Wraps webcommands.x turning off keyword expansion."
-msgstr ""
+"作業領域中のキーワード展開の取り消し\n"
+"\n"
+"    キーワード設定の変更前や、'hg import' ないし 'hg merge' で問題が\n"
+"    発生した経験がある場合に実行してください。\n"
+"\n"
+"    指定されたファイルに未コミット変更がある場合、実行は中断されます。\n"
+"    "
 
 msgid "show default keyword template maps"
-msgstr ""
+msgstr "デフォルトのテンプレートマップで表示"
 
 msgid "read maps from rcfile"
-msgstr ""
+msgstr "設定ファイルからのマップ設定の読み込み"
 
 msgid "hg kwdemo [-d] [-f RCFILE] [TEMPLATEMAP]..."
-msgstr ""
+msgstr "hg kwdemo [-d] [-f RCFILE] [TEMPLATEMAP]..."
 
 msgid "hg kwexpand [OPTION]... [FILE]..."
-msgstr ""
+msgstr "hg kwexpand [OPTION]... [FILE]..."
 
 msgid "show keyword status flags of all files"
-msgstr ""
+msgstr "全ファイルのキーワード展開設定を表示"
 
 msgid "show files excluded from expansion"
-msgstr ""
+msgstr "キーワード展開対象外のファイルを表示"
 
 msgid "additionally show untracked files"
-msgstr ""
+msgstr "未登録ファイルの表示"
 
 msgid "hg kwfiles [OPTION]... [FILE]..."
-msgstr ""
+msgstr "hg kwfiles [OPTION]... [FILE]..."
 
 msgid "hg kwshrink [OPTION]... [FILE]..."
-msgstr ""
-
-msgid ""
-"patch management and development\n"
+msgstr "hg kwshrink [OPTION]... [FILE]..."
+
+msgid ""
+"manage a stack of patches\n"
 "\n"
 "This extension lets you work with a stack of patches in a Mercurial\n"
-"repository.  It manages two stacks of patches - all known patches, and\n"
+"repository. It manages two stacks of patches - all known patches, and\n"
 "applied patches (subset of known patches).\n"
 "\n"
 "Known patches are represented as patch files in the .hg/patches\n"
-"directory.  Applied patches are both patch files and changesets.\n"
+"directory. Applied patches are both patch files and changesets.\n"
 "\n"
 "Common tasks (use \"hg help command\" for more details):\n"
 "\n"
@@ -2475,534 +2420,633 @@
 "remove patch from applied stack           qpop\n"
 "refresh contents of top applied patch     qrefresh\n"
 msgstr ""
-
-msgid ""
-"Update all references to a field in the patch header.\n"
-"        If none found, add it email style."
-msgstr ""
-
-msgid ""
-"Remove existing message, keeping the rest of the comments fields.\n"
-"        If comments contains 'subject: ', message will prepend\n"
-"        the field and a blank line."
-msgstr ""
+"パッチ併用の管理\n"
+"\n"
+"本エクステンションは、Mercurial リポジトリの作業領域において、パッチを\n"
+"併用した作業を可能にします。本エクステンションでは、「既知のパッチ」と\n"
+"「適用中のパッチ」(「既知のパッチ」の部分集合)の2つの集合を、スタック\n"
+"を用いて管理します。\n"
+"\n"
+"「既知のパッチ」は、.hg/patches ディレクトリ配下に置かれたパッチファイル\n"
+"に相当します。「適用中のパッチ」は、「既知のパッチ」のうち、対応する\n"
+"リビジョンがリポジトリの履歴に(一時的に)記録されているものを指します。\n"
+"\n"
+"良く使用される機能(詳細は \"hg help コマンド名\" を参照):\n"
+"\n"
+"  パッチ管理領域の初期化                 qinit\n"
+"  新規パッチの作成                       qnew\n"
+"  外部からのパッチファイルの取り込み     qimport\n"
+"\n"
+"  既知のパッチ一覧の表示                 qseries\n"
+"  適用中のパッチ一覧の表示               qapplied\n"
+"  適用中の最上位パッチ名の表示           qtop\n"
+"\n"
+"  既知のパッチの適用                     qpush\n"
+"  パッチ適用の解除                       qpop\n"
+"  適用中の最上位パッチの内容更新         qrefresh\n"
 
 #, python-format
 msgid "%s appears more than once in %s"
-msgstr ""
+msgstr "%s は %s 中に複数回登場しています"
 
 msgid "guard cannot be an empty string"
-msgstr ""
+msgstr "ガードに空文字列を指定することはできません"
 
 #, python-format
 msgid "guard %r starts with invalid character: %r"
-msgstr ""
+msgstr "ガード %r の冒頭文字は不適切な文字です: %r"
 
 #, python-format
 msgid "invalid character in guard %r: %r"
-msgstr ""
+msgstr "ガード %r 中に不適切な文字があります: %r"
 
 #, python-format
 msgid "active guards: %s\n"
-msgstr ""
+msgstr "有効なガード: %s\n"
 
 #, python-format
 msgid "guard %r too short"
-msgstr ""
+msgstr "ガード名 %r は短過ぎます"
 
 #, python-format
 msgid "guard %r starts with invalid char"
-msgstr ""
+msgstr "ガード %r の冒頭文字は不適切な文字です"
 
 #, python-format
 msgid "allowing %s - no guards in effect\n"
-msgstr ""
+msgstr "%s を適用 - 合致するガードはありません\n"
 
 #, python-format
 msgid "allowing %s - no matching negative guards\n"
-msgstr ""
+msgstr "%s を適用 - 合致するネガティブガードはありません\n"
 
 #, python-format
 msgid "allowing %s - guarded by %r\n"
-msgstr ""
+msgstr "%s を適用 - ガード %r が適用されました\n"
 
 #, python-format
 msgid "skipping %s - guarded by %r\n"
-msgstr ""
+msgstr "%s を抑止 - ガード %r が適用されました\n"
 
 #, python-format
 msgid "skipping %s - no matching guards\n"
-msgstr ""
+msgstr "%s を抑止 - 合致するガードはありません\n"
 
 #, python-format
 msgid "error removing undo: %s\n"
-msgstr ""
+msgstr "取り消し情報の破棄に失敗: %s\n"
 
 #, python-format
 msgid "apply failed for patch %s"
-msgstr ""
+msgstr "パッチ %s の適用に失敗"
 
 #, python-format
 msgid "patch didn't work out, merging %s\n"
-msgstr ""
+msgstr "パッチ %s が適用できないのでマージ実施中\n"
 
 #, python-format
 msgid "update returned %d"
-msgstr ""
+msgstr "作業領域の更新がエラー %d で終了しました"
 
 msgid "repo commit failed"
-msgstr ""
+msgstr "リポジトリのコミット操作に失敗"
 
 #, python-format
 msgid "unable to read %s"
-msgstr ""
+msgstr "ファイル %s が読み込めません"
 
 #, python-format
 msgid "patch %s does not exist\n"
-msgstr ""
+msgstr "パッチ %s は存在しません\n"
 
 #, python-format
 msgid "patch %s is not applied\n"
-msgstr ""
-
-msgid ""
-"Apply patchfile  to the working directory.\n"
-"        patchfile: file name of patch"
-msgstr ""
+msgstr "パッチ %s は未適用です\n"
 
 msgid "patch failed, unable to continue (try -v)\n"
-msgstr ""
+msgstr "パッチ適用の失敗のため処理が継続できません(-v 付き実行で詳細表示)\n"
 
 #, python-format
 msgid "applying %s\n"
 msgstr "%s を適用中\n"
 
 #, python-format
-msgid "Unable to read %s\n"
-msgstr ""
+msgid "unable to read %s\n"
+msgstr "ファイル %s が読み込めません\n"
 
 #, python-format
 msgid "imported patch %s\n"
-msgstr ""
+msgstr "パッチ %s の取り込み\n"
 
 #, python-format
 msgid ""
 "\n"
 "imported patch %s"
 msgstr ""
+"\n"
+"パッチ %s の取り込み"
 
 #, python-format
 msgid "patch %s is empty\n"
-msgstr ""
+msgstr "パッチ %s は空です\n"
 
 msgid "patch failed, rejects left in working dir\n"
-msgstr ""
+msgstr "パッチ適用が失敗し、却下差分は作業領域に残されています\n"
 
 msgid "fuzz found when applying patch, stopping\n"
-msgstr ""
+msgstr "パッチが曖昧なため、適用を中止\n"
 
 #, python-format
 msgid "revision %d is not managed"
-msgstr ""
+msgstr "リビジョン %d は MQ 管理下にありません"
 
 #, python-format
 msgid "cannot delete revision %d above applied patches"
-msgstr ""
+msgstr "適用中の最下位パッチから連続していないリビジョン %d は削除できません"
+
+#, python-format
+msgid "patch %s finalized without changeset message\n"
+msgstr "パッチ %s をメッセージ無しで通常リビジョン化しました\n"
 
 msgid "qdelete requires at least one revision or patch name"
-msgstr ""
+msgstr "qdelete には最低1つのリビジョン(又はパッチ名)指定が必要です"
 
 #, python-format
 msgid "cannot delete applied patch %s"
-msgstr ""
+msgstr "適用中のパッチ %s は削除できません"
 
 #, python-format
 msgid "patch %s not in series file"
-msgstr ""
+msgstr "パッチ %s は未知のパッチです"
 
 msgid "no patches applied"
-msgstr ""
+msgstr "適用中のパッチはありません"
 
 msgid "working directory revision is not qtip"
-msgstr ""
+msgstr "作業領域の親リビジョンは qtip ではありません"
 
 msgid "local changes found, refresh first"
-msgstr ""
+msgstr "作業領域の内容は変更されていますので qrefresh を実施してください"
 
 msgid "local changes found"
-msgstr ""
+msgstr "作業領域の内容は変更されています"
 
 #, python-format
 msgid "\"%s\" cannot be used as the name of a patch"
-msgstr ""
-
-msgid ""
-"options:\n"
-"           msg: a string or a no-argument function returning a string\n"
-"        "
-msgstr ""
+msgstr "\"%s\" はパッチ名として使用できません"
 
 #, python-format
 msgid "patch \"%s\" already exists"
-msgstr ""
+msgstr "パッチ \"%s\" は既に存在します"
 
 #, python-format
 msgid "error unlinking %s\n"
-msgstr ""
-
-msgid "returns (index, rev, patch)"
-msgstr ""
+msgstr "%s の unlink に失敗\n"
 
 #, python-format
 msgid "patch name \"%s\" is ambiguous:\n"
-msgstr ""
+msgstr "パッチ名 \"%s\" は曖昧です:\n"
 
 #, python-format
 msgid "patch %s not in series"
-msgstr ""
-
-msgid "(working directory not at tip)\n"
-msgstr ""
+msgstr "パッチ %s は未知のパッチです"
+
+msgid "(working directory not at a head)\n"
+msgstr "(作業領域の親リビジョンはヘッドではありません)\n"
 
 msgid "no patches in series\n"
-msgstr ""
+msgstr "既知のパッチはありません\n"
 
 #, python-format
 msgid "cannot push to a previous patch: %s"
-msgstr ""
+msgstr "適用中のパッチ %s の再適用はできません"
 
 #, python-format
 msgid "qpush: %s is already at the top\n"
-msgstr ""
+msgstr "qpush: パッチ %s は既に適用中の最上位パッチです\n"
 
 #, python-format
 msgid "guarded by %r"
-msgstr ""
+msgstr "ガード %r が適用されました"
 
 msgid "no matching guards"
-msgstr ""
+msgstr "合致するガードはありません"
 
 #, python-format
 msgid "cannot push '%s' - %s\n"
-msgstr ""
+msgstr "パッチ '%s' は適用できませんでした - %s\n"
 
 msgid "all patches are currently applied\n"
-msgstr ""
+msgstr "全てのパッチが適用中です\n"
 
 msgid "patch series already fully applied\n"
-msgstr ""
+msgstr "全てのパッチが適用中です\n"
 
 msgid "cleaning up working directory..."
-msgstr ""
+msgstr "作業領域の整理中..."
 
 #, python-format
 msgid "errors during apply, please fix and refresh %s\n"
-msgstr ""
+msgstr "適用が失敗したため、対処後に %s への qrefresh を実施してください\n"
 
 #, python-format
 msgid "now at: %s\n"
-msgstr ""
+msgstr "適用中の最上位パッチは %s です\n"
 
 #, python-format
 msgid "patch %s is not applied"
-msgstr ""
+msgstr "パッチ %s は未適用です"
 
 msgid "no patches applied\n"
-msgstr ""
+msgstr "適用中のパッチはありません\n"
 
 #, python-format
 msgid "qpop: %s is already at the top\n"
-msgstr ""
+msgstr "qpop: パッチ %s は既に適用中の最上位パッチです\n"
 
 msgid "qpop: forcing dirstate update\n"
-msgstr ""
+msgstr "qpop: 作業領域状態の更新を強行します\n"
 
 #, python-format
 msgid "trying to pop unknown node %s"
-msgstr ""
+msgstr "未知のリビジョン %s が解除対象に指定されました"
 
 msgid "popping would remove a revision not managed by this patch queue"
-msgstr ""
+msgstr "管理対象外のリビジョンが解除対象に指定されました"
 
 msgid "deletions found between repo revs"
-msgstr ""
+msgstr "リビジョン間で削除が検出されました"
 
 msgid "patch queue now empty\n"
-msgstr ""
+msgstr "全てのパッチの適用が解除されました\n"
 
 msgid "cannot refresh a revision with children"
-msgstr ""
+msgstr "ヘッド以外は qrefresh の対象に指定できません"
 
 msgid ""
 "refresh interrupted while patch was popped! (revert --all, qpush to "
 "recover)\n"
-msgstr ""
+msgstr "パッチ解除中に中断されました!(revert --all および qpush で復旧)\n"
 
 msgid "patch queue directory already exists"
-msgstr ""
+msgstr "パッチ管理領域は既に存在します"
 
 #, python-format
 msgid "patch %s is not in series file"
-msgstr ""
+msgstr "パッチ %s は未知のパッチです"
 
 msgid "No saved patch data found\n"
-msgstr ""
+msgstr "保存されたパッチ状態データが見つかりません\n"
 
 #, python-format
 msgid "restoring status: %s\n"
-msgstr ""
+msgstr "パッチ状態 %s の復旧中\n"
 
 msgid "save entry has children, leaving it alone\n"
-msgstr ""
+msgstr "パッチ状態保存リビジョンはヘッドでないので削除できません\n"
 
 #, python-format
 msgid "removing save entry %s\n"
-msgstr ""
+msgstr "パッチ状態保存リビジョン %s の削除中\n"
 
 #, python-format
 msgid "saved queue repository parents: %s %s\n"
-msgstr ""
+msgstr "パッチ状態保存リビジョンの親: %s %s\n"
 
 msgid "queue directory updating\n"
-msgstr ""
+msgstr "パッチ管理領域の更新中\n"
 
 msgid "Unable to load queue repository\n"
-msgstr ""
+msgstr "パッチ管理領域を読み込めません\n"
 
 msgid "save: no patches applied, exiting\n"
-msgstr ""
+msgstr "save: 適用中のパッチが無いため終了します\n"
 
 msgid "status is already saved\n"
-msgstr ""
+msgstr "パッチ状態は保存済みです\n"
 
 msgid "hg patches saved state"
-msgstr ""
+msgstr "パッチ状態保存用リビジョン"
 
 msgid "repo commit failed\n"
-msgstr ""
-
-msgid ""
-"If all_patches is False, return the index of the next pushable patch\n"
-"        in the series, or the series length. If all_patches is True, return "
-"the\n"
-"        index of the first patch past the last applied one.\n"
-"        "
-msgstr ""
+msgstr "リポジトリのコミット操作に失敗\n"
 
 #, python-format
 msgid "patch %s is already in the series file"
-msgstr ""
+msgstr "同名のパッチ %s が既に存在します"
 
 msgid "option \"-r\" not valid when importing files"
-msgstr ""
+msgstr "ファイル取り込みの際の \"-r\" 指定は不適切です"
 
 msgid "option \"-n\" not valid when importing multiple patches"
-msgstr ""
+msgstr "複数パッチ取り込みの際の \"-n\" 指定は不適切です"
 
 #, python-format
 msgid "revision %d is the root of more than one branch"
-msgstr ""
+msgstr "リビジョン %d は1つ以上のブランチの分岐点です"
 
 #, python-format
 msgid "revision %d is already managed"
-msgstr ""
+msgstr "リビジョン %d は既に MQ 管理下にあります"
 
 #, python-format
 msgid "revision %d is not the parent of the queue"
-msgstr ""
+msgstr "リビジョン %d はパッチ適用の起点ではありません"
 
 #, python-format
 msgid "revision %d has unmanaged children"
-msgstr ""
+msgstr "リビジョン %d には MQ 管理下に無い子リビジョンがあります"
 
 #, python-format
 msgid "cannot import merge revision %d"
-msgstr ""
+msgstr "マージ実施リビジョン %d は取り込めません"
 
 #, python-format
 msgid "revision %d is not the parent of %d"
-msgstr ""
+msgstr "リビジョン %d は、%d の親リビジョンではありません"
 
 msgid "-e is incompatible with import from -"
-msgstr ""
+msgstr "標準入力(-)からの取り込みの際の -e 指定は不適切です"
 
 #, python-format
 msgid "patch %s does not exist"
-msgstr ""
+msgstr "パッチ %s は存在しません"
 
 msgid "need --name to import a patch from -"
-msgstr ""
+msgstr "標準入力(-)からの取り込みの際には --name 指定が必要です"
 
 #, python-format
 msgid "adding %s to series file\n"
-msgstr ""
+msgstr "パッチ %s を追加中\n"
 
 msgid ""
 "remove patches from queue\n"
 "\n"
-"    The patches must not be applied, unless they are arguments to\n"
-"    the --rev parameter. At least one patch or revision is required.\n"
-"\n"
-"    With --rev, mq will stop managing the named revisions (converting\n"
-"    them to regular mercurial changesets). The qfinish command should be\n"
-"    used as an alternative for qdel -r, as the latter option is deprecated.\n"
-"\n"
-"    With --keep, the patch files are preserved in the patch directory."
-msgstr ""
+"    The patches must not be applied, and at least one patch is required. "
+"With\n"
+"    -k/--keep, the patch files are preserved in the patch directory.\n"
+"\n"
+"    To stop managing a patch and move it into permanent history,\n"
+"    use the qfinish command."
+msgstr ""
+"管理対象からのパッチ除外\n"
+"\n"
+"    対象パッチは未適用でなければならず、最低1つのパッチ名の指定が\n"
+"    必要です。-k/--keep を指定した場合、パッチファイルそのものは\n"
+"    管理領域に残されたままとなります。\n"
+"\n"
+"    管理対象外となったパッチを通常リビジョン化する場合は qfinish を\n"
+"    使用してください。"
 
 msgid "print the patches already applied"
-msgstr ""
+msgstr "適用中のパッチ一覧の表示"
 
 msgid "print the patches not yet applied"
-msgstr ""
+msgstr "未適用のパッチ一覧の表示"
 
 msgid ""
 "import a patch\n"
 "\n"
-"    The patch is inserted into the series after the last applied patch.\n"
-"    If no patches have been applied, qimport prepends the patch\n"
+"    The patch is inserted into the series after the last applied\n"
+"    patch. If no patches have been applied, qimport prepends the patch\n"
 "    to the series.\n"
 "\n"
 "    The patch will have the same name as its source file unless you\n"
-"    give it a new one with --name.\n"
-"\n"
-"    You can register an existing patch inside the patch directory\n"
-"    with the --existing flag.\n"
-"\n"
-"    With --force, an existing patch of the same name will be overwritten.\n"
-"\n"
-"    An existing changeset may be placed under mq control with --rev\n"
+"    give it a new one with -n/--name.\n"
+"\n"
+"    You can register an existing patch inside the patch directory with\n"
+"    the -e/--existing flag.\n"
+"\n"
+"    With -f/--force, an existing patch of the same name will be\n"
+"    overwritten.\n"
+"\n"
+"    An existing changeset may be placed under mq control with -r/--rev\n"
 "    (e.g. qimport --rev tip -n patch will place tip under mq control).\n"
-"    With --git, patches imported with --rev will use the git diff\n"
+"    With -g/--git, patches imported with --rev will use the git diff\n"
 "    format. See the diffs help topic for information on why this is\n"
-"    important for preserving rename/copy information and permission "
-"changes.\n"
-"    "
-msgstr ""
+"    important for preserving rename/copy information and permission\n"
+"    changes.\n"
+"\n"
+"    To import a patch from standard input, pass - as the patch file.\n"
+"    When importing from standard input, a patch name must be specified\n"
+"    using the --name flag.\n"
+"    "
+msgstr ""
+"パッチの取り込み\n"
+"\n"
+"    取り込まれたパッチの適用順序は、現在適用中の最上位パッチの次に\n"
+"    なります。適用中のパッチが無い場合、取り込まれたパッチの適用順序は\n"
+"    一番最初になります。\n"
+"\n"
+"    -n/--name による名前の指定が無い場合、取り込み対象のファイル名が\n"
+"    そのままパッチ名となります。\n"
+"\n"
+"    -e/--existing を指定することで、パッチ管理領域中の既存ファイルを\n"
+"    取り込み対象とすることができます。\n"
+"\n"
+"    -f/--force が指定された場合、同名の既存パッチを上書きします。\n"
+"\n"
+"    -r/--rev を指定することで、既存の通常リビジョンを MQ 管理下に置く\n"
+"    ことができます(例: 'qimport --rev tip -n patch' は、tip を MQ 管理\n"
+"    下に置きます)。-g/--git 指定は、--rev 指定による取り込みの際に git\n"
+"    差分形式を使用します。改名/複製情報や、権限設定の情報保持にとっての\n"
+"    git 差分形式の有用性に関しては、'help diffs' を参照してください。\n"
+"\n"
+"    標準入力からパッチを取り込む場合、ファイル名に '-' を指定します。\n"
+"    標準入力からの取り込みの際には、--name でのパッチ名指定が必須です。\n"
+"    "
 
 msgid ""
 "init a new queue repository\n"
 "\n"
-"    The queue repository is unversioned by default. If -c is\n"
-"    specified, qinit will create a separate nested repository\n"
-"    for patches (qinit -c may also be run later to convert\n"
-"    an unversioned patch repository into a versioned one).\n"
-"    You can use qcommit to commit changes to this queue repository."
-msgstr ""
+"    The queue repository is unversioned by default. If\n"
+"    -c/--create-repo is specified, qinit will create a separate nested\n"
+"    repository for patches (qinit -c may also be run later to convert\n"
+"    an unversioned patch repository into a versioned one). You can use\n"
+"    qcommit to commit changes to this queue repository."
+msgstr ""
+"パッチ管理領域の初期化\n"
+"\n"
+"    特に指定が無い場合、パッチ管理領域は構成管理されません。\n"
+"    -c/--create-repo が指定された場合、本コマンドはパッチ管理領域自体を\n"
+"    Mercurial のリポジトリとして作成します(既存のパッチ管理領域を後から\n"
+"    Mercurial リポジトリ化するのにも使用できます)。管理領域の変更内容は\n"
+"    qcommit によってコミットすることができます。"
 
 msgid ""
 "clone main and patch repository at same time\n"
 "\n"
-"    If source is local, destination will have no patches applied.  If\n"
+"    If source is local, destination will have no patches applied. If\n"
 "    source is remote, this command can not check if patches are\n"
 "    applied in source, so cannot guarantee that patches are not\n"
-"    applied in destination.  If you clone remote repository, be sure\n"
+"    applied in destination. If you clone remote repository, be sure\n"
 "    before that it has no patches applied.\n"
 "\n"
 "    Source patch repository is looked for in <src>/.hg/patches by\n"
-"    default.  Use -p <url> to change.\n"
-"\n"
-"    The patch directory must be a nested mercurial repository, as\n"
+"    default. Use -p <url> to change.\n"
+"\n"
+"    The patch directory must be a nested Mercurial repository, as\n"
 "    would be created by qinit -c.\n"
 "    "
 msgstr ""
+"リポジトリとパッチ管理領域の同時複製\n"
+"\n"
+"    複製元が同一ホスト上にある場合、複製先リポジトリでは、全てのパッチが\n"
+"    未適用な状態となります。複製元が遠隔ホストにある場合、複製元での\n"
+"    パッチ適用状況が不明なので、複製先でのパッチ適用状況は未保証です。\n"
+"    遠隔ホスト上のリポジトリを複製する場合、パッチが未適用であることを\n"
+"    確認してください。\n"
+"\n"
+"    特に指定が無い場合、パッチ管理領域は <src>/.hg/patches から複製され\n"
+"    ます。変更する場合は -p <url> を使用します。\n"
+"\n"
+"    パッチ管理領域は、'qinit -c' によって生成された、入れ子になった\n"
+"    Mercurial リポジトリでなければなりません。\n"
+"    "
 
 msgid "versioned patch repository not found (see qinit -c)"
-msgstr ""
-
-msgid "cloning main repo\n"
-msgstr ""
-
-msgid "cloning patch repo\n"
-msgstr ""
-
-msgid "stripping applied patches from destination repo\n"
-msgstr ""
-
-msgid "updating destination repo\n"
-msgstr ""
+msgstr "構成管理されたパッチ領域が見つかりません(qinit -c 参照)"
+
+msgid "cloning main repository\n"
+msgstr "主リポジトリを複製中\n"
+
+msgid "cloning patch repository\n"
+msgstr "パッチ管理リポジトリを複製中\n"
+
+msgid "stripping applied patches from destination repository\n"
+msgstr "複製先リポジトリにおいてパッチ適用を解除中\n"
+
+msgid "updating destination repository\n"
+msgstr "複製先の作業領域を更新中\n"
 
 msgid "commit changes in the queue repository"
-msgstr ""
+msgstr "パッチ管理領域の変更をコミット"
 
 msgid "print the entire series file"
-msgstr ""
+msgstr "既知のパッチ一覧の表示"
 
 msgid "print the name of the current patch"
-msgstr ""
+msgstr "現行パッチの名前表示"
 
 msgid "print the name of the next patch"
-msgstr ""
+msgstr "現行パッチの「次」の既知のパッチの名前表示"
 
 msgid "all patches applied\n"
-msgstr ""
+msgstr "全てのパッチが適用中です\n"
 
 msgid "print the name of the previous patch"
-msgstr ""
+msgstr "現行パッチの「前」の既知のパッチの名前表示"
 
 msgid "only one patch applied\n"
-msgstr ""
+msgstr "単一のパッチだけが適用中です\n"
 
 msgid ""
 "create a new patch\n"
 "\n"
-"    qnew creates a new patch on top of the currently-applied patch (if "
-"any).\n"
-"    It will refuse to run if there are any outstanding changes unless -f is\n"
-"    specified, in which case the patch will be initialized with them. You\n"
-"    may also use -I, -X, and/or a list of files after the patch name to add\n"
-"    only changes to matching files to the new patch, leaving the rest as\n"
-"    uncommitted modifications.\n"
-"\n"
-"    -u and -d can be used to set the (given) user and date, respectively.\n"
-"    -U and -D set user to current user and date to current date.\n"
-"\n"
-"    -e, -m or -l set the patch header as well as the commit message. If "
-"none\n"
-"    is specified, the header is empty and the commit message is '[mq]: "
-"PATCH'.\n"
-"\n"
-"    Use the --git option to keep the patch in the git extended diff\n"
+"    qnew creates a new patch on top of the currently-applied patch (if\n"
+"    any). It will refuse to run if there are any outstanding changes\n"
+"    unless -f/--force is specified, in which case the patch will be\n"
+"    initialized with them. You may also use -I/--include,\n"
+"    -X/--exclude, and/or a list of files after the patch name to add\n"
+"    only changes to matching files to the new patch, leaving the rest\n"
+"    as uncommitted modifications.\n"
+"\n"
+"    -u/--user and -d/--date can be used to set the (given) user and\n"
+"    date, respectively. -U/--currentuser and -D/--currentdate set user\n"
+"    to current user and date to current date.\n"
+"\n"
+"    -e/--edit, -m/--message or -l/--logfile set the patch header as\n"
+"    well as the commit message. If none is specified, the header is\n"
+"    empty and the commit message is '[mq]: PATCH'.\n"
+"\n"
+"    Use the -g/--git option to keep the patch in the git extended diff\n"
 "    format. Read the diffs help topic for more information on why this\n"
 "    is important for preserving permission changes and copy/rename\n"
 "    information.\n"
 "    "
 msgstr ""
+"新規パッチの作成\n"
+"\n"
+"    本コマンドは、(パッチ適用中の場合は)適用中パッチの最上位の位置に\n"
+"    新規パッチを作成します。作業領域に変更がある場合、本コマンドは実行を\n"
+"    中断しますが、-f/--force が指定された場合、作業領域中の変更を取り\n"
+"    込んで新規パッチが作成されます。-I/--include、-X/--exclude および\n"
+"    ファイル名指定の組み合わせによって、変更を新規パッチに取り込む\n"
+"    ファイルが限定され、それ以外のファイルに対する変更は未コミットな\n"
+"    変更のままとなります。\n"
+"\n"
+"    -u/--user および -d/--date は、それぞれ指定のユーザ名/日時の記録に\n"
+"    使用できます。 -U/--currentuser および -D/--currendate は、それぞれ\n"
+"    現ユーザ名/現在日時を記録します。\n"
+"\n"
+"    -e/--edit, -m/--message ないし -l/--logfile は、コミットメッセージと\n"
+"    同様に、パッチのヘッダに記録する情報を指定します。指定が無い場合は、\n"
+"    ヘッダは空のまま、コミットメッセージが '[mq]: パッチ名' となります。\n"
+"\n"
+"    git 拡張差分形式を使用する場合は、-g/--git を指定します。改名/複製\n"
+"    情報や、権限設定の情報保持にとっての git 差分形式の有用性に関しては、\n"
+"    'help diffs' を参照してください。\n"
+"    "
 
 msgid ""
 "update the current patch\n"
 "\n"
-"    If any file patterns are provided, the refreshed patch will contain "
-"only\n"
-"    the modifications that match those patterns; the remaining "
-"modifications\n"
-"    will remain in the working directory.\n"
-"\n"
-"    If --short is specified, files currently included in the patch will\n"
-"    be refreshed just like matched files and remain in the patch.\n"
-"\n"
-"    hg add/remove/copy/rename work as usual, though you might want to use\n"
-"    git-style patches (--git or [diff] git=1) to track copies and renames.\n"
-"    See the diffs help topic for more information on the git diff format.\n"
-"    "
-msgstr ""
+"    If any file patterns are provided, the refreshed patch will\n"
+"    contain only the modifications that match those patterns; the\n"
+"    remaining modifications will remain in the working directory.\n"
+"\n"
+"    If -s/--short is specified, files currently included in the patch\n"
+"    will be refreshed just like matched files and remain in the patch.\n"
+"\n"
+"    hg add/remove/copy/rename work as usual, though you might want to\n"
+"    use git-style patches (-g/--git or [diff] git=1) to track copies\n"
+"    and renames. See the diffs help topic for more information on the\n"
+"    git diff format.\n"
+"    "
+msgstr ""
+"現行パッチの更新\n"
+"\n"
+"    何らかのパターンが指定された場合、更新後のパッチは当該パターンに\n"
+"    合致するファイルの変更内容だけを含み、他のファイルの変更内容は作業\n"
+"    領域に残ったままとなります。\n"
+"\n"
+"    -s/--short が指定された場合、現行パッチが変更を保持するファイルのみが\n"
+"    パッチ内容更新の対象となって、パッチにとどまり続けます。\n"
+"\n"
+"    複製/改名に関する履歴保存のために git 差分形式を使用(-g/--git 指定や\n"
+"    設定ファイルでの [diff] git=1 記述)するのであれば、\n"
+"    add/remove/copy/rename といった hg のコマンドによる履歴記録も、\n"
+"    通常と変わりなく機能します。git 差分形式の詳細に関しては、\n"
+"    'help diffs' を参照してください。\n"
+"    "
 
 msgid "option \"-e\" incompatible with \"-m\" or \"-l\""
-msgstr ""
+msgstr "\"-e\" は、\"-m\" ないし \"-l\" と併用できません"
 
 msgid ""
 "diff of the current patch and subsequent modifications\n"
 "\n"
-"    Shows a diff which includes the current patch as well as any changes "
-"which\n"
-"    have been made in the working directory since the last refresh (thus\n"
-"    showing what the current patch would become after a qrefresh).\n"
-"\n"
-"    Use 'hg diff' if you only want to see the changes made since the last\n"
-"    qrefresh, or 'hg export qtip' if you want to see changes made by the\n"
-"    current patch without including changes made since the qrefresh.\n"
-"    "
-msgstr ""
+"    Shows a diff which includes the current patch as well as any\n"
+"    changes which have been made in the working directory since the\n"
+"    last refresh (thus showing what the current patch would become\n"
+"    after a qrefresh).\n"
+"\n"
+"    Use 'hg diff' if you only want to see the changes made since the\n"
+"    last qrefresh, or 'hg export qtip' if you want to see changes made\n"
+"    by the current patch without including changes made since the\n"
+"    qrefresh.\n"
+"    "
+msgstr ""
+"現行パッチと作業領域変更の結合結果の表示\n"
+"\n"
+"    現行パッチの変更内容と、前回の qrefresh 実施以後の作業領域における\n"
+"    変更内容を合わせた差分(= 現時点での qrefresh 実施によるパッチ内容の\n"
+"    更新結果)を表示します。\n"
+"\n"
+"    前回の qrefresh 実施以後の作業領域における変更内容を見たい場合は\n"
+"    'hg diff' を、作業領域の変更内容を含まない現行パッチの内容のみを\n"
+"    見たい場合は 'hg export qtip' を使用してください。\n"
+"    "
 
 msgid ""
 "fold the named patches into the current patch\n"
@@ -3010,34 +3054,44 @@
 "    Patches must not yet be applied. Each patch will be successively\n"
 "    applied to the current patch in the order given. If all the\n"
 "    patches apply successfully, the current patch will be refreshed\n"
-"    with the new cumulative patch, and the folded patches will\n"
-"    be deleted. With -k/--keep, the folded patch files will not\n"
-"    be removed afterwards.\n"
-"\n"
-"    The header for each folded patch will be concatenated with\n"
-"    the current patch header, separated by a line of '* * *'."
-msgstr ""
+"    with the new cumulative patch, and the folded patches will be\n"
+"    deleted. With -k/--keep, the folded patch files will not be\n"
+"    removed afterwards.\n"
+"\n"
+"    The header for each folded patch will be concatenated with the\n"
+"    current patch header, separated by a line of '* * *'."
+msgstr ""
+"指定パッチの現行パッチへの統合\n"
+"\n"
+"    対象パッチは未適用でなければなりません。それぞれのパッチは指定された\n"
+"    順序で連続的に現行パッチに適用されます。全ての適用が成功した場合は、\n"
+"    現行パッチが全てのパッチの累積として更新され、統合されたパッチは削除\n"
+"    されます。-k/--keep が指定された場合は、統合実施後も統合されtパッチの\n"
+"    ファイルは残されます。\n"
+"\n"
+"    統合対象パッチのヘッダ情報は、'* * *' 行を区切り記号として、現行の\n"
+"    パッチに追加されます。"
 
 msgid "qfold requires at least one patch name"
-msgstr ""
+msgstr "統合実施には最低1つのパッチ名指定が必要です"
 
 msgid "No patches applied"
-msgstr ""
+msgstr "適用中のパッチはありません"
 
 #, python-format
 msgid "Skipping already folded patch %s"
-msgstr ""
+msgstr "既に統合済みのパッチ %s は無視します"
 
 #, python-format
 msgid "qfold cannot fold already applied patch %s"
-msgstr ""
+msgstr "パッチ %s は適用中なので統合できません"
 
 #, python-format
 msgid "Error folding patch %s"
-msgstr ""
+msgstr "パッチ %s の統合に失敗"
 
 msgid "push or pop patches until named patch is at top of stack"
-msgstr ""
+msgstr "指定パッチを適用パッチの最上位にする qpush/qpop の実施"
 
 msgid ""
 "set or print guards for a patch\n"
@@ -3056,47 +3110,73 @@
 "      hg qguard -- other.patch +2.6.17 -stable\n"
 "    "
 msgstr ""
+"パッチのガード設定ないし表示\n"
+"\n"
+"    「ガード」はパッチ適用の可否を制御します。ガードが設定されていない\n"
+"    パッチは常に適用されます。「正」のガード(例: \"+foo\")が設定された\n"
+"    パッチは、qselect によって当該ガードが設定されている場合にのみ適用\n"
+"    されます。「負」のガード(例: \"-foo\")が設定されているパッチは、\n"
+"    qselect によって当該ガードが設定されている場合には適用されません。\n"
+"\n"
+"    本コマンドが引数無しで実行された場合、現行のガード設定を表示します。\n"
+"    引数有りで実行された場合、指定のパッチに対するガード設定を行います。\n"
+"    備考: 負のガードの設定には '--' が必要です。\n"
+"\n"
+"    現行パッチ以外にガードを設定するには:\n"
+"      hg qguard -- 対象パッチ名 +2.6.17 -stable\n"
+"    "
 
 msgid "cannot mix -l/--list with options or arguments"
-msgstr ""
+msgstr "-l/--list は、他のオプションや引数と同時に指定できません"
 
 msgid "no patch to work with"
-msgstr ""
+msgstr "対象とすべきパッチがありません"
 
 #, python-format
 msgid "no patch named %s"
-msgstr ""
+msgstr "パッチ %s は未知のパッチです"
 
 msgid "print the header of the topmost or specified patch"
-msgstr ""
+msgstr "現行パッチないし指定パッチのヘッダ表示"
 
 msgid ""
 "push the next patch onto the stack\n"
 "\n"
-"    When --force is applied, all local changes in patched files will be "
-"lost.\n"
-"    "
-msgstr ""
+"    When -f/--force is applied, all local changes in patched files\n"
+"    will be lost.\n"
+"    "
+msgstr ""
+"次のパッチの適用\n"
+"\n"
+"    -f/--force が指定された場合、パッチ適用対象ファイルの、作業領域に\n"
+"    おける変更内容は破棄されます。\n"
+"    "
 
 msgid "no saved queues found, please use -n\n"
-msgstr ""
+msgstr "保存されたパッチ管理領域がありません。-n を使用してください\n"
 
 #, python-format
 msgid "merging with queue at: %s\n"
-msgstr ""
+msgstr "パッチ管理領域 %s とマージ中\n"
 
 msgid ""
 "pop the current patch off the stack\n"
 "\n"
-"    By default, pops off the top of the patch stack. If given a patch name,\n"
-"    keeps popping off patches until the named patch is at the top of the "
-"stack.\n"
-"    "
-msgstr ""
+"    By default, pops off the top of the patch stack. If given a patch\n"
+"    name, keeps popping off patches until the named patch is at the\n"
+"    top of the stack.\n"
+"    "
+msgstr ""
+"現行パッチの適用解除\n"
+"\n"
+"    特に指定が無い場合、適用中の最上位パッチを解除します。パッチ名が指定\n"
+"    された場合、当該パッチが適用中の最上位パッチになるまで、他のパッチの\n"
+"    適用解除を行います。\n"
+"    "
 
 #, python-format
 msgid "using patch queue: %s\n"
-msgstr ""
+msgstr "パッチ管理領域 %s を使用中\n"
 
 msgid ""
 "rename a patch\n"
@@ -3104,374 +3184,434 @@
 "    With one argument, renames the current patch to PATCH1.\n"
 "    With two arguments, renames PATCH1 to PATCH2."
 msgstr ""
+"パッチの改名\n"
+"\n"
+"    引数が1つの場合、現行パッチを指定された名前に改名します。\n"
+"    引数が2つの場合、1つ目のパッチの名前を2つ目に改名します。"
 
 #, python-format
 msgid "%s already exists"
-msgstr ""
+msgstr "ファイル %s は既に存在します"
 
 #, python-format
 msgid "A patch named %s already exists in the series file"
-msgstr ""
-
-msgid "restore the queue state saved by a rev"
-msgstr ""
+msgstr "同名のパッチ %s が既に存在します"
+
+msgid "restore the queue state saved by a revision"
+msgstr "指定リビジョンによって保存されたパッチ管理状態の復旧"
 
 msgid "save current queue state"
-msgstr ""
+msgstr "パッチ管理状態の保存"
 
 #, python-format
 msgid "destination %s exists and is not a directory"
-msgstr ""
+msgstr "保存先 %s は既存のファイルです"
 
 #, python-format
 msgid "destination %s exists, use -f to force"
-msgstr ""
+msgstr "保存先 %s が存在します。実施する場合は -f を指定してください"
 
 #, 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"
 "\n"
-"    If one of the working dir's parent revisions is stripped, the working\n"
-"    directory will be updated to the parent of the stripped revision.\n"
-"    "
-msgstr ""
+"    If one of the working directory's parent revisions is stripped, the\n"
+"    working directory will be updated to the parent of the stripped\n"
+"    revision.\n"
+"    "
+msgstr ""
+"リポジトリからの、特定リビジョンおよびその子孫の除外\n"
+"\n"
+"    作業領域の親リビジョンが除外対象になった場合、作業領域は除外対象の\n"
+"    親リビジョンの内容で更新されます。\n"
+"    "
 
 msgid ""
 "set or print guarded patches to push\n"
 "\n"
 "    Use the qguard command to set or print guards on patch, then use\n"
-"    qselect to tell mq which guards to use. A patch will be pushed if it\n"
-"    has no guards or any positive guards match the currently selected "
-"guard,\n"
-"    but will not be pushed if any negative guards match the current guard.\n"
-"    For example:\n"
+"    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"
 "\n"
 "        qguard foo.patch -stable    (negative guard)\n"
 "        qguard bar.patch +stable    (positive guard)\n"
 "        qselect stable\n"
 "\n"
 "    This activates the \"stable\" guard. mq will skip foo.patch (because\n"
-"    it has a negative match) but push bar.patch (because it\n"
-"    has a positive match).\n"
+"    it has a negative match) but push bar.patch (because it has a\n"
+"    positive match).\n"
 "\n"
 "    With no arguments, prints the currently active guards.\n"
 "    With one argument, sets the active guard.\n"
 "\n"
 "    Use -n/--none to deactivate guards (no other arguments needed).\n"
-"    When no guards are active, patches with positive guards are skipped\n"
-"    and patches with negative guards are pushed.\n"
+"    When no guards are active, patches with positive guards are\n"
+"    skipped and patches with negative guards are pushed.\n"
 "\n"
 "    qselect can change the guards on applied patches. It does not pop\n"
-"    guarded patches by default. Use --pop to pop back to the last applied\n"
-"    patch that is not guarded. Use --reapply (which implies --pop) to push\n"
-"    back to the current patch afterwards, but skip guarded patches.\n"
-"\n"
-"    Use -s/--series to print a list of all guards in the series file (no\n"
-"    other arguments needed). Use -v for more information."
-msgstr ""
+"    guarded patches by default. Use --pop to pop back to the last\n"
+"    applied patch that is not guarded. Use --reapply (which implies\n"
+"    --pop) to push back to the current patch afterwards, but skip\n"
+"    guarded patches.\n"
+"\n"
+"    Use -s/--series to print a list of all guards in the series file\n"
+"    (no other arguments needed). Use -v for more information."
+msgstr ""
+"作業領域におけるガード選択の設定ないし表示\n"
+"\n"
+"    パッチ毎のガード設定ないし表示には qguard を使用しますが、作業領域に\n"
+"    おけるガード選択ないし表示には qselect を使用します。ガードが設定\n"
+"    されていないか、いずれかの「正」のガードがガード選択に合致する場合、\n"
+"    パッチは適用されますが、いずれかの「負」のガードがガード選択に合致\n"
+"    する場合、パッチは適用されません。例えば:\n"
+"\n"
+"        qguard foo.patch -stable    (「負」のガード)\n"
+"        qguard bar.patch +stable    (「正」のガード)\n"
+"        qselect stable\n"
+"\n"
+"    上記の qselect 実行により、\"stable\" ガードが選択されます。MQ は\n"
+"    foo.patch の適用を(「負」のガードに合致するため)見送りますが、\n"
+"    bar.patch の適用は(「正」のガードに合致するため)実施します。\n"
+"\n"
+"    本コマンドが引数無しで実行された場合、現在のガード選択状況を表示\n"
+"    します。引数が指定された場合、ガード選択を設定します。\n"
+"\n"
+"    -n/--none を指定することで、ガード選択を無効化します(他の引数は必要\n"
+"    ありません)。いずれのガードも選択されていない場合、「正」のガードが\n"
+"    設定されたパッチの適用は見送られますが、「負」のガードが設定された\n"
+"    パッチは適用されます。\n"
+"\n"
+"    本コマンドの実行により、適用中のパッチの適用可否も変化し得ます。特に\n"
+"    指定が無い場合、ガードが有効なパッチの適用解除は行われません。 \n"
+"    --pop が指定された場合、適用可否が変わる最初のパッチまでのパッチが\n"
+"    適用解除されます。--reapply が指定された場合、--pop 相当の処理後に、\n"
+"    ガードが有効なパッチの適用を見送りつつ、現行パッチに至るまでパッチを\n"
+"    再適用します。\n"
+"\n"
+"    -s/--series が指定された場合、パッチに設定されたガードを一覧化して\n"
+"    表示します(他の引数は不要)。詳細表示には -v を指定してください。"
 
 msgid "guards deactivated\n"
-msgstr ""
+msgstr "ガード設定を無効化します\n"
 
 #, python-format
 msgid "number of unguarded, unapplied patches has changed from %d to %d\n"
-msgstr ""
+msgstr "ガード設定の変更により、適用除外パッチ数が %d から %d になりました\n"
 
 #, python-format
 msgid "number of guarded, applied patches has changed from %d to %d\n"
-msgstr ""
+msgstr "ガード設定の変更により、適用対象パッチ数が %d から %d になりました\n"
 
 msgid "guards in series file:\n"
-msgstr ""
+msgstr "パッチに設定されているガードの一覧:\n"
 
 msgid "no guards in series file\n"
-msgstr ""
+msgstr "ガードが設定されたパッチはありません\n"
 
 msgid "active guards:\n"
-msgstr ""
+msgstr "有効なガード:\n"
 
 msgid "no active guards\n"
-msgstr ""
+msgstr "有効なガードはありません\n"
 
 msgid "popping guarded patches\n"
-msgstr ""
+msgstr "ガードが有効なパッチを解除中\n"
 
 msgid "reapplying unguarded patches\n"
-msgstr ""
+msgstr "ガードが無効なパッチを再適用中\n"
 
 msgid ""
 "move applied patches into repository history\n"
 "\n"
-"    Finishes the specified revisions (corresponding to applied patches) by\n"
-"    moving them out of mq control into regular repository history.\n"
-"\n"
-"    Accepts a revision range or the --applied option. If --applied is\n"
-"    specified, all applied mq revisions are removed from mq control.\n"
-"    Otherwise, the given revisions must be at the base of the stack of\n"
-"    applied patches.\n"
-"\n"
-"    This can be especially useful if your changes have been applied to an\n"
-"    upstream repository, or if you are about to push your changes to "
-"upstream.\n"
-"    "
-msgstr ""
+"    Finishes the specified revisions (corresponding to applied\n"
+"    patches) by moving them out of mq control into regular repository\n"
+"    history.\n"
+"\n"
+"    Accepts a revision range or the -a/--applied option. If --applied\n"
+"    is specified, all applied mq revisions are removed from mq\n"
+"    control. Otherwise, the given revisions must be at the base of the\n"
+"    stack of applied patches.\n"
+"\n"
+"    This can be especially useful if your changes have been applied to\n"
+"    an upstream repository, or if you are about to push your changes\n"
+"    to upstream.\n"
+"    "
+msgstr ""
+"適用中パッチの通常リビジョン化\n"
+"\n"
+"    指定されたリビジョン(適用中パッチに相当)を、MQ 管理下から除外し、\n"
+"    通常のリビジョンとしてリポジトリに記録します。\n"
+"\n"
+"    リビジョン範囲指定や、-a/--applied が指定可能です。--applied が指定\n"
+"    された場合、全ての適用中パッチが MQ 管理下から除外されます。それ\n"
+"    以外の場合、指定されたリビジョンは、適用中スタックの最下位からの\n"
+"    一連のリビジョンでなければなりません。\n"
+"\n"
+"    この機能は、上流のリポジトリでパッチが受理された場合や、パッチ内容を\n"
+"    上流リポジトリに反映しようとしている場合などに有用です。\n"
+"    "
 
 msgid "no revisions specified"
-msgstr ""
+msgstr "リビジョン指定がありません"
 
 msgid "cannot commit over an applied mq patch"
-msgstr ""
+msgstr "MQ パッチ適用中はコミットを実施できません"
 
 msgid "source has mq patches applied"
-msgstr ""
+msgstr "元リポジトリでは MQ パッチが適用中です"
 
 #, python-format
 msgid "mq status file refers to unknown node %s\n"
-msgstr ""
+msgstr "MQ の状態管理ファイルが未知のリビジョン %s を参照しています\n"
 
 #, python-format
 msgid "Tag %s overrides mq patch of the same name\n"
-msgstr ""
+msgstr "タグ %s は MQ パッチの同名タグを上書きします\n"
 
 msgid "cannot import over an applied patch"
-msgstr ""
+msgstr "パッチ適用中の import による取り込みはできません"
 
 msgid "print first line of patch header"
-msgstr ""
+msgstr "パッチヘッダの最初の行を表示"
 
 msgid "hg qapplied [-s] [PATCH]"
-msgstr ""
+msgstr "hg qapplied [-s] [PATCH]"
 
 msgid "use pull protocol to copy metadata"
 msgstr "メタデータ複製に pull プロトコルを使用"
 
 msgid "do not update the new working directories"
-msgstr ""
+msgstr "新規作業領域の更新を抑止"
 
 msgid "use uncompressed transfer (fast over LAN)"
 msgstr "非圧縮での転送(LAN での高速転送用)"
 
-msgid "location of source patch repo"
-msgstr ""
+msgid "location of source patch repository"
+msgstr "複製元パッチ管理領域位置"
 
 msgid "hg qclone [OPTION]... SOURCE [DEST]"
-msgstr ""
+msgstr "hg qclone [OPTION]... SOURCE [DEST]"
 
 msgid "hg qcommit [OPTION]... [FILE]..."
-msgstr ""
+msgstr "hg qcommit [OPTION]... [FILE]..."
 
 msgid "hg qdiff [OPTION]... [FILE]..."
-msgstr ""
+msgstr "hg qdiff [OPTION]... [FILE]..."
 
 msgid "keep patch file"
-msgstr ""
-
-msgid "stop managing a revision"
-msgstr ""
+msgstr "パッチファイルの削除を抑止"
+
+msgid "stop managing a revision (DEPRECATED)"
+msgstr "指定リビジョンを管理対象から除外(非推奨)"
 
 msgid "hg qdelete [-k] [-r REV]... [PATCH]..."
-msgstr ""
+msgstr "hg qdelete [-k] [-r REV]... [PATCH]..."
 
 msgid "edit patch header"
-msgstr ""
+msgstr "パッチヘッダ内容の編集"
 
 msgid "keep folded patch files"
-msgstr ""
+msgstr "結合対象パッチのパッチファイル削除を抑止"
 
 msgid "hg qfold [-e] [-k] [-m TEXT] [-l FILE] PATCH..."
-msgstr ""
+msgstr "hg qfold [-e] [-k] [-m TEXT] [-l FILE] PATCH..."
 
 msgid "overwrite any local changes"
-msgstr ""
+msgstr "作業領域中の変更を上書き"
 
 msgid "hg qgoto [OPTION]... PATCH"
-msgstr ""
+msgstr "hg qgoto [OPTION]... PATCH"
 
 msgid "list all patches and guards"
-msgstr ""
+msgstr "全てのパッチのガード状況を一覧表示"
 
 msgid "drop all guards"
-msgstr ""
+msgstr "全てのガード設定を破棄"
 
 msgid "hg qguard [-l] [-n] -- [PATCH] [+GUARD]... [-GUARD]..."
-msgstr ""
+msgstr "hg qguard [-l] [-n] -- [PATCH] [+GUARD]... [-GUARD]..."
 
 msgid "hg qheader [PATCH]"
-msgstr ""
-
-msgid "import file in patch dir"
-msgstr ""
-
-msgid "patch file name"
-msgstr ""
+msgstr "hg qheader [PATCH]"
+
+msgid "import file in patch directory"
+msgstr "パッチ管理領域中のファイルから取り込み"
+
+msgid "name of patch file"
+msgstr "パッチファイル名"
 
 msgid "overwrite existing files"
-msgstr ""
+msgstr "既存ファイルの上書き"
 
 msgid "place existing revisions under mq control"
-msgstr ""
+msgstr "既存リビジョンを MQ 管理下に移行"
 
 msgid "use git extended diff format"
-msgstr "git 拡張差分形式を使用"
-
-msgid "hg qimport [-e] [-n NAME] [-f] [-g] [-r REV]... FILE..."
-msgstr ""
+msgstr "git 拡張差分形式の使用"
+
+msgid "qpush after importing"
+msgstr "パッチ取り込み後にパッチ適用(qpush)を実施"
+
+msgid "hg qimport [-e] [-n NAME] [-f] [-g] [-P] [-r REV]... FILE..."
+msgstr "hg qimport [-e] [-n NAME] [-f] [-g] [-P] [-r REV]... FILE..."
 
 msgid "create queue repository"
-msgstr ""
+msgstr "パッチ管理自身を Mercurial で構成管理"
 
 msgid "hg qinit [-c]"
-msgstr ""
+msgstr "hg qinit [-c]"
 
 msgid "import uncommitted changes into patch"
-msgstr ""
+msgstr "作業領域の変更内容のパッチへの取り込み"
 
 msgid "add \"From: <current user>\" to patch"
-msgstr ""
+msgstr "\"From: <現ユーザ名>\" をパッチに追加"
 
 msgid "add \"From: <given user>\" to patch"
-msgstr ""
+msgstr "\"From: <指定ユーザ名>\" をパッチに追加"
 
 msgid "add \"Date: <current date>\" to patch"
-msgstr ""
+msgstr "\"Date: <現在時刻>\" をパッチに追加"
 
 msgid "add \"Date: <given date>\" to patch"
-msgstr ""
+msgstr "\"Date: <指定日時>\" をパッチに追加"
 
 msgid "hg qnew [-e] [-m TEXT] [-l FILE] [-f] PATCH [FILE]..."
-msgstr ""
+msgstr "hg qnew [-e] [-m TEXT] [-l FILE] [-f] PATCH [FILE]..."
 
 msgid "hg qnext [-s]"
-msgstr ""
+msgstr "hg qnext [-s]"
 
 msgid "hg qprev [-s]"
-msgstr ""
+msgstr "hg qprev [-s]"
 
 msgid "pop all patches"
-msgstr ""
+msgstr "全てのパッチの適用を解除"
 
 msgid "queue name to pop"
-msgstr ""
+msgstr "パッチ解除先のパッチ管理領域名"
 
 msgid "forget any local changes"
-msgstr ""
+msgstr "作業領域中の変更を破棄"
 
 msgid "hg qpop [-a] [-n NAME] [-f] [PATCH | INDEX]"
-msgstr ""
+msgstr "hg qpop [-a] [-n NAME] [-f] [PATCH | INDEX]"
 
 msgid "apply if the patch has rejects"
-msgstr ""
+msgstr "パッチ適用が拒否されても続行"
 
 msgid "list patch name in commit text"
-msgstr ""
+msgstr "コミットメッセージとしてパッチ名を列挙"
 
 msgid "apply all patches"
-msgstr ""
+msgstr "全てのパッチを適用"
 
 msgid "merge from another queue"
-msgstr ""
+msgstr "他のパッチ管理領域とのマージ"
 
 msgid "merge queue name"
-msgstr ""
+msgstr "マージ対象のパッチ管理領域名"
 
 msgid "hg qpush [-f] [-l] [-a] [-m] [-n NAME] [PATCH | INDEX]"
-msgstr ""
+msgstr "hg qpush [-f] [-l] [-a] [-m] [-n NAME] [PATCH | INDEX]"
 
 msgid "refresh only files already in the patch and specified files"
-msgstr ""
+msgstr "パッチ対象か、明示指定のあったファイルのみを処理対象にする"
 
 msgid "add/update \"From: <current user>\" in patch"
-msgstr ""
+msgstr "パッチ中の \"From:\" を「現行ユーザ」で更新(ないし追加)"
 
 msgid "add/update \"From: <given user>\" in patch"
-msgstr ""
+msgstr "パッチ中の \"From:\" を指定ユーザで更新(ないし追加)"
 
 msgid "update \"Date: <current date>\" in patch (if present)"
-msgstr ""
+msgstr "パッチ中の \"Date:\" を現在日時で更新"
 
 msgid "update \"Date: <given date>\" in patch (if present)"
-msgstr ""
+msgstr "パッチ中の \"Date:\" を指定日時で更新"
 
 msgid "hg qrefresh [-I] [-X] [-e] [-m TEXT] [-l FILE] [-s] [FILE]..."
-msgstr ""
+msgstr "hg qrefresh [-I] [-X] [-e] [-m TEXT] [-l FILE] [-s] [FILE]..."
 
 msgid "hg qrename PATCH1 [PATCH2]"
-msgstr ""
+msgstr "hg qrename PATCH1 [PATCH2]"
 
 msgid "delete save entry"
-msgstr ""
-
-msgid "update queue working dir"
-msgstr ""
+msgstr "保存エントリの破棄"
+
+msgid "update queue working directory"
+msgstr "パッチ管理領域の更新"
 
 msgid "hg qrestore [-d] [-u] REV"
-msgstr ""
+msgstr "hg qrestore [-d] [-u] REV"
 
 msgid "copy patch directory"
-msgstr ""
+msgstr "パッチ管理領域の複製"
 
 msgid "copy directory name"
-msgstr ""
+msgstr "複製先ディレクトリ名"
 
 msgid "clear queue status file"
-msgstr ""
+msgstr "パッチ状態ファイル(status)のクリア"
 
 msgid "force copy"
-msgstr ""
+msgstr "複製の強行"
 
 msgid "hg qsave [-m TEXT] [-l FILE] [-c] [-n NAME] [-e] [-f]"
-msgstr ""
+msgstr "hg qsave [-m TEXT] [-l FILE] [-c] [-n NAME] [-e] [-f]"
 
 msgid "disable all guards"
-msgstr ""
+msgstr "全てのガード設定を破棄"
 
 msgid "list all guards in series file"
-msgstr ""
+msgstr "各パッチに設定されたガードを一覧化"
 
 msgid "pop to before first guarded applied patch"
-msgstr ""
+msgstr "適用可否が変化するパッチの適用を解除"
 
 msgid "pop, then reapply patches"
-msgstr ""
+msgstr "qpop 実施後に再度パッチを適用"
 
 msgid "hg qselect [OPTION]... [GUARD]..."
-msgstr ""
+msgstr "hg qselect [OPTION]... [GUARD]..."
 
 msgid "print patches not in series"
-msgstr ""
+msgstr "パッチ管理領域中の未知のパッチファイルを表示"
 
 msgid "hg qseries [-ms]"
-msgstr ""
+msgstr "hg qseries [-ms]"
 
 msgid "force removal with local changes"
-msgstr ""
+msgstr "作業領域に変更があっても削除を強行"
 
 msgid "bundle unrelated changesets"
-msgstr ""
+msgstr "無関係のリビジョンをバンドル化"
 
 msgid "no backups"
-msgstr ""
+msgstr "バックアップ作成の抑止"
 
 msgid "hg strip [-f] [-b] [-n] REV"
-msgstr ""
+msgstr "hg strip [-f] [-b] [-n] REV"
 
 msgid "hg qtop [-s]"
-msgstr ""
+msgstr "hg qtop [-s]"
 
 msgid "hg qunapplied [-s] [PATCH]"
-msgstr ""
+msgstr "hg qunapplied [-s] [PATCH]"
 
 msgid "finish all applied changesets"
-msgstr ""
-
-msgid "hg qfinish [-a] [REV...]"
-msgstr ""
-
-msgid ""
-"hook extension to email notifications on commits/pushes\n"
+msgstr "全ての適用中パッチを通常リビジョン化"
+
+msgid "hg qfinish [-a] [REV]..."
+msgstr "hg qfinish [-a] [REV]..."
+
+msgid ""
+"hooks for sending email notifications at commit/push time\n"
 "\n"
 "Subscriptions can be managed through hgrc. Default mode is to print\n"
 "messages to stdout, for testing and configuring.\n"
@@ -3528,36 +3668,15 @@
 "emails\n"
 "   pattern = user@host\n"
 "\n"
-" glob patterns are matched against path to repo root.\n"
-"\n"
-" if you like, you can put notify config file in repo that users can\n"
-" push changes to, they can manage their own subscriptions."
-msgstr ""
-
-msgid "email notification class."
-msgstr ""
-
-msgid "strip leading slashes from local path, turn into web-safe path."
-msgstr ""
-
-msgid "try to clean up email addresses."
-msgstr ""
-
-msgid "return list of email addresses of subscribers to this repo."
-msgstr ""
-
-msgid "format one changeset."
-msgstr ""
-
-msgid "true if incoming changes from this source should be skipped."
-msgstr ""
-
-msgid "send message."
+" glob patterns are matched against path to repository root.\n"
+"\n"
+" if you like, you can put notify config file in repository that users\n"
+" can push changes to, they can manage their own subscriptions."
 msgstr ""
 
 #, python-format
 msgid "%s: %d new changesets"
-msgstr ""
+msgstr "%s: %d 件の新しいチェンジセット"
 
 #, python-format
 msgid "notify: sending %d subscribers %d changes\n"
@@ -3577,15 +3696,8 @@
 "\n"
 msgstr ""
 
-msgid ""
-"send email notifications to interested subscribers.\n"
-"\n"
-"    if used as changegroup hook, send one email for all changesets in\n"
-"    changegroup. else send one email per changeset."
-msgstr ""
-
-#, python-format
-msgid "notify: no subscribers to repo %s\n"
+#, python-format
+msgid "notify: no subscribers to repository %s\n"
 msgstr ""
 
 #, python-format
@@ -3593,19 +3705,18 @@
 msgstr ""
 
 msgid ""
-"browse command output with external pager\n"
+"browse command output with an external pager\n"
 "\n"
 "To set the pager that should be used, set the application variable:\n"
 "\n"
 "  [pager]\n"
 "  pager = LESS='FSRX' less\n"
 "\n"
-"If no pager is set, the pager extensions uses the environment\n"
-"variable $PAGER. If neither pager.pager, nor $PAGER is set, no pager\n"
-"is used.\n"
-"\n"
-"If you notice \"BROKEN PIPE\" error messages, you can disable them\n"
-"by setting:\n"
+"If no pager is set, the pager extensions uses the environment variable\n"
+"$PAGER. If neither pager.pager, nor $PAGER is set, no pager is used.\n"
+"\n"
+"If you notice \"BROKEN PIPE\" error messages, you can disable them by\n"
+"setting:\n"
 "\n"
 "  [pager]\n"
 "  quiet = True\n"
@@ -3616,27 +3727,27 @@
 "  [pager]\n"
 "  ignore = version, help, update\n"
 "\n"
-"You can also enable the pager only for certain commands using pager.attend:\n"
+"You can also enable the pager only for certain commands using\n"
+"pager.attend:\n"
 "\n"
 "  [pager]\n"
 "  attend = log\n"
 "\n"
 "If pager.attend is present, pager.ignore will be ignored.\n"
 "\n"
-"To ignore global commands like \"hg version\" or \"hg help\", you have to "
-"specify\n"
-"them in the global .hgrc\n"
-msgstr ""
-
-msgid ""
-"use suffixes to refer to ancestor revisions\n"
-"\n"
-"This extension allows you to use git-style suffixes to refer to\n"
-"the ancestors of a specific revision.\n"
+"To ignore global commands like \"hg version\" or \"hg help\", you have to\n"
+"specify them in the global .hgrc\n"
+msgstr ""
+
+msgid ""
+"interpret suffixes to refer to ancestor revisions\n"
+"\n"
+"This extension allows you to use git-style suffixes to refer to the\n"
+"ancestors of a specific revision.\n"
 "\n"
 "For example, if you can refer to a revision as \"foo\", then:\n"
 "\n"
-"- foo^N = Nth parent of foo:\n"
+"- foo^N = Nth parent of foo\n"
 "  foo^0 = foo\n"
 "  foo^1 = first parent of foo\n"
 "  foo^2 = second parent of foo\n"
@@ -3649,35 +3760,31 @@
 msgstr ""
 
 msgid ""
-"sending Mercurial changesets as a series of patch emails\n"
-"\n"
-"The series is started off with a \"[PATCH 0 of N]\" introduction,\n"
-"which describes the series as a whole.\n"
-"\n"
-"Each patch email has a Subject line of \"[PATCH M of N] ...\", using\n"
-"the first line of the changeset description as the subject text.\n"
-"The message contains two or three body parts:\n"
-"\n"
-"  The remainder of the changeset description.\n"
+"command to send changesets as (a series of) patch emails\n"
+"\n"
+"The series is started off with a \"[PATCH 0 of N]\" introduction, which\n"
+"describes the series as a whole.\n"
+"\n"
+"Each patch email has a Subject line of \"[PATCH M of N] ...\", using the\n"
+"first line of the changeset description as the subject text. The\n"
+"message contains two or three body parts:\n"
+"\n"
+"  The changeset description.\n"
 "\n"
 "  [Optional] The result of running diffstat on the patch.\n"
 "\n"
 "  The patch itself, as generated by \"hg export\".\n"
 "\n"
-"Each message refers to all of its predecessors using the In-Reply-To\n"
-"and References headers, so they will show up as a sequence in\n"
-"threaded mail and news readers, and in mail archives.\n"
-"\n"
-"For each changeset, you will be prompted with a diffstat summary and\n"
-"the changeset summary, so you can be sure you are sending the right "
-"changes.\n"
-"\n"
-"To enable this extension:\n"
-"\n"
-"  [extensions]\n"
-"  hgext.patchbomb =\n"
-"\n"
-"To configure other defaults, add a section like this to your hgrc file:\n"
+"Each message refers to the first in the series using the In-Reply-To\n"
+"and References headers, so they will show up as a sequence in threaded\n"
+"mail and news readers, and in mail archives.\n"
+"\n"
+"With the -d/--diffstat option, you will be prompted for each changeset\n"
+"with a diffstat summary and the changeset summary, so you can be sure\n"
+"you are sending the right changes.\n"
+"\n"
+"To configure other defaults, add a section like this to your hgrc\n"
+"file:\n"
 "\n"
 "  [email]\n"
 "  from = My Name <my@email>\n"
@@ -3689,66 +3796,134 @@
 "as a patchbomb.\n"
 "\n"
 "To avoid sending patches prematurely, it is a good idea to first run\n"
-"the \"email\" command with the \"-n\" option (test only).  You will be\n"
-"prompted for an email recipient address, a subject an an introductory\n"
-"message describing the patches of your patchbomb.  Then when all is\n"
-"done, patchbomb messages are displayed. If PAGER environment variable\n"
-"is set, your pager will be fired up once for each patchbomb message, so\n"
-"you can verify everything is alright.\n"
-"\n"
-"The \"-m\" (mbox) option is also very useful.  Instead of previewing\n"
-"each patchbomb message in a pager or sending the messages directly,\n"
-"it will create a UNIX mailbox file with the patch emails.  This\n"
-"mailbox file can be previewed with any mail user agent which supports\n"
-"UNIX mbox files, e.g. with mutt:\n"
+"the \"email\" command with the \"-n\" option (test only). You will be\n"
+"prompted for an email recipient address, a subject and an introductory\n"
+"message describing the patches of your patchbomb. Then when all is\n"
+"done, patchbomb messages are displayed. If the PAGER environment\n"
+"variable is set, your pager will be fired up once for each patchbomb\n"
+"message, so you can verify everything is alright.\n"
+"\n"
+"The -m/--mbox option is also very useful. Instead of previewing each\n"
+"patchbomb message in a pager or sending the messages directly, it will\n"
+"create a UNIX mailbox file with the patch emails. This mailbox file\n"
+"can be previewed with any mail user agent which supports UNIX mbox\n"
+"files, e.g. with mutt:\n"
 "\n"
 "  % mutt -R -f mbox\n"
 "\n"
 "When you are previewing the patchbomb messages, you can use `formail'\n"
-"(a utility that is commonly installed as part of the procmail package),\n"
-"to send each message out:\n"
+"(a utility that is commonly installed as part of the procmail\n"
+"package), to send each message out:\n"
 "\n"
 "  % formail -s sendmail -bm -t < mbox\n"
 "\n"
 "That should be all. Now your patchbomb is on its way out.\n"
 "\n"
 "You can also either configure the method option in the email section\n"
-"to be a sendmail compatable mailer or fill out the [smtp] section so\n"
-"that the patchbomb extension can automatically send patchbombs directly\n"
-"from the commandline. See the [email] and [smtp] sections in hgrc(5)\n"
-"for details."
-msgstr ""
+"to be a sendmail compatible mailer or fill out the [smtp] section so\n"
+"that the patchbomb extension can automatically send patchbombs\n"
+"directly from the commandline. See the [email] and [smtp] sections in\n"
+"hgrc(5) for details."
+msgstr ""
+"電子メールによる変更内容パッチ送付のコマンド\n"
+"\n"
+"一連のメールは、\"[PATCH 0 of N]\" を Subject ヘッダに持つ、説明メール\n"
+"から始まります。\n"
+"\n"
+"個々のメールの Subject ヘッダは、\"[PATCH M of N]\" で始まり、対応する\n"
+"リビジョンのコミットメッセージの最初の行の内容が記載されます。メールの\n"
+"本文は、以下の様な2ないし3の部位から構成されます:\n"
+"\n"
+"    - コミットメッセージ\n"
+"\n"
+"    - パッチの差分統計(diffstat)結果 [省略可能]\n"
+"\n"
+"    - \"hg export\" 形式と同様のパッチ内容\n"
+"\n"
+"個々のメールは、In-Reply-To および References ヘッダを使用して、1通目の\n"
+"メールを参照しますので、メールリーダーやニュースリーダーでの参照時や、\n"
+"メールアーカイブにおいては、一連のスレッドとして扱われます。\n"
+"\n"
+"-d/--diffstat を指定した場合、差分統計結果やコミットメッセージを伴って\n"
+"送信の有無の問い合わせがありますので、確認しながら送信できます。\n"
+"\n"
+"以下の様な記述を設定ファイルに追加することで、無指定時の設定を変更でき\n"
+"ます:\n"
+"\n"
+"  [email]\n"
+"  from = My Name <my@email>\n"
+"  to = recipient1, recipient2, ...\n"
+"  cc = cc1, cc2, ...\n"
+"  bcc = bcc1, bcc2, ...\n"
+"\n"
+"ここまで設定できたなら、\"hg email\" コマンドを使用して、一連の\n"
+"リビジョンをパッチ爆弾(patchbomb)としてメール送信することができます。\n"
+"\n"
+"不完全なパッチの送信を防ぐ上で、まずは \"-n\"(=「表示のみ」)指定付きで\n"
+"\"email\" コマンドを実行するのがお勧めです。これを指定した実行の際には、\n"
+"送信先アドレスや、一連のパッチから成るパッチ爆弾の説明文等の入力が促され\n"
+"ます。必要な入力が完了すると、送信されるメールの内容が表示されます。\n"
+"PAGER 環境変数が設定されている場合、パッチ爆弾を構成するメールごとに、\n"
+"環境変数に設定されたプログラムが起動されますので、内容を確認することが\n"
+"出来ます。\n"
+"\n"
+"-m/--mbox も有用です。PAGER での表示やメール送信の代わりに、パッチの\n"
+"メールを格納した UNIX mailbox 形式のファイルを作成します。このファイルは\n"
+"UNIX  mailbox 形式ファイルに対応している任意のツールで閲覧することができ\n"
+"ます。例えば mutt というツールの場合:\n"
+"\n"
+"  % mutt -R -f mbox\n"
+"\n"
+"パッチ爆弾の内容を閲覧中に、`formail'(procmail パッケージの一部として\n"
+"大抵のシステムにインストールされているユーティリティです)を使用して\n"
+"メールを送信することができます:\n"
+"\n"
+"  % formail -s sendmail -bm -t < mbox\n"
+"\n"
+"以上で完了です。これでパッチ爆弾が送信されました。\n"
+"\n"
+"設定ファイルの [email] セクションで method 指定を行うことで、sendmail\n"
+"互換のメール送信プログラムを指定することもできれば、[smtp] セクションに\n"
+"必要な情報を記述することで、外部プログラムの助けを借りずに Mercurial から\n"
+"直接パッチ爆弾を送信することも可能です。これらのセクションに関する詳細は\n"
+"設定ファイルに関するドキュメント(hgrc(5))を参照してください。"
 
 msgid "Please enter a valid value.\n"
-msgstr ""
+msgstr "適切な値を入力してください。\n"
 
 msgid "does the diffstat above look okay? "
-msgstr ""
+msgstr "上記の差分統計で間違いありませんか? "
 
 msgid "diffstat rejected"
-msgstr ""
+msgstr "差分統計が却下されました"
 
 msgid ""
 "send changesets by email\n"
 "\n"
 "    By default, diffs are sent in the format generated by hg export,\n"
-"    one per message.  The series starts with a \"[PATCH 0 of N]\"\n"
+"    one per message. The series starts with a \"[PATCH 0 of N]\"\n"
 "    introduction, which describes the series as a whole.\n"
 "\n"
 "    Each patch email has a Subject line of \"[PATCH M of N] ...\", using\n"
 "    the first line of the changeset description as the subject text.\n"
-"    The message contains two or three body parts.  First, the rest of\n"
-"    the changeset description.  Next, (optionally) if the diffstat\n"
-"    program is installed, the result of running diffstat on the patch.\n"
-"    Finally, the patch itself, as generated by \"hg export\".\n"
-"\n"
-"    With --outgoing, emails will be generated for patches not\n"
-"    found in the destination repository (or only those which are\n"
-"    ancestors of the specified revisions if any are provided)\n"
-"\n"
-"    With --bundle, changesets are selected as for --outgoing,\n"
-"    but a single email containing a binary Mercurial bundle as an\n"
-"    attachment will be sent.\n"
+"    The message contains two or three parts. First, the changeset\n"
+"    description. Next, (optionally) if the diffstat program is\n"
+"    installed and -d/--diffstat is used, the result of running\n"
+"    diffstat on the patch. Finally, the patch itself, as generated by\n"
+"    \"hg export\".\n"
+"\n"
+"    By default the patch is included as text in the email body for\n"
+"    easy reviewing. Using the -a/--attach option will instead create\n"
+"    an attachment for the patch. With -i/--inline an inline attachment\n"
+"    will be created.\n"
+"\n"
+"    With -o/--outgoing, emails will be generated for patches not found\n"
+"    in the destination repository (or only those which are ancestors\n"
+"    of the specified revisions if any are provided)\n"
+"\n"
+"    With -b/--bundle, changesets are selected as for --outgoing, but a\n"
+"    single email containing a binary Mercurial bundle as an attachment\n"
+"    will be sent.\n"
 "\n"
 "    Examples:\n"
 "\n"
@@ -3768,120 +3943,178 @@
 "default\n"
 "    hg email -b -r 3000 DEST  # bundle of all ancestors of 3000 not in DEST\n"
 "\n"
-"    Before using this command, you will need to enable email in your hgrc.\n"
-"    See the [email] section in hgrc(5) for details.\n"
-"    "
-msgstr ""
-
-msgid "Return the revisions present locally but not in dest"
-msgstr ""
+"    Before using this command, you will need to enable email in your\n"
+"    hgrc. See the [email] section in hgrc(5) for details.\n"
+"    "
+msgstr ""
+"電子メールによる変更内容のパッチ送付\n"
+"\n"
+"    特に指定の無い場合、'hg export' の生成する差分形式で、リビジョン毎に\n"
+"    メールが送信されます。一連のメールは、\"[PATCH 0 of N]\" を Subject\n"
+"    ヘッダに持つ、説明メールから始まります。\n"
+"\n"
+"    個々のメールの Subject ヘッダは、\"[PATCH M of N]\" で始まり、対応\n"
+"    するリビジョンのコミットメッセージの最初の行の内容が記載されます。\n"
+"    メール本文は、2ないし3の部位から構成されます。最初の部位にはコミット\n"
+"    メッセージの続きが配置されます。次の部位には、diffstat コマンドが\n"
+"    利用可能で且つ -d/--diffstat が指定された場合に、パッチの差分統計が\n"
+"    配置されます。最後の部位には、'hg export' の生成する差分による\n"
+"    パッチが配置されます。\n"
+"\n"
+"    特に指定の無い場合、パッチはメール本文中に通常テキストとして埋め込ま\n"
+"    れます。-a/--attach 指定により、パッチが添付ファイル化されます。\n"
+"    -i/--inline 指定により、インライン添付ファイルとなります。\n"
+"\n"
+"    -o/--outgoing 指定がある場合、連携対象リポジトリに存在しない\n"
+"    (あるいは、指定リビジョンの子孫となる)リビジョンのためのパッチのみが\n"
+"    メールで送信されます。\n"
+"\n"
+"    -b/--bundle 指定がある場合、対象リビジョンの選択は --outgoing 指定\n"
+"    時と同様に行われますが、Mercurial のバンドル形式ファイルを添付\n"
+"    ファイルとする単一のメールとして送信されます。\n"
+"\n"
+"    実行例:\n"
+"\n"
+"    hg email -r 3000          # リビジョン 3000 \n"
+"    hg email -r 3000 -r 3001  # リビジョン 3000 および 3001\n"
+"    hg email -r 3000:3005     # リビジョン 3000 から 3005 まで\n"
+"    hg email 3000             # リビジョン 3000 (非推奨形式)\n"
+"\n"
+"    hg email -o               # default に無いリビジョン\n"
+"    hg email -o DEST          # DEST に無いリビジョン\n"
+"    hg email -o -r 3000       # default に無い 3000 以後\n"
+"    hg email -o -r 3000 DEST  # DEST に無い 3000 以後\n"
+"\n"
+"    hg email -b               # default に無いものを bundle 形式で\n"
+"    hg email -b DEST          # DEST に無いものを bundle 形式で\n"
+"    hg email -b -r 3000       # default に無い 3000 以後を bundle 形式で\n"
+"    hg email -b -r 3000 DEST  # DEST に無い 3000 以後を bundle 形式で\n"
+"\n"
+"    本コマンドを使用する前に、設定ファイルに電子メール関連設定を記述する\n"
+"    必要があります。設定ファイルに関するドキュメント(hgrc(5))を参照して\n"
+"    ください。\n"
+"    "
 
 msgid "specify at least one changeset with -r or -o"
-msgstr ""
+msgstr "-r 又は -o を使用してリビジョンを指定してください"
 
 msgid "--outgoing mode always on with --bundle; do not re-specify --outgoing"
-msgstr ""
+msgstr "--bundle 指定で暗黙に有効となりますので --outgoing 指定は不要です"
 
 msgid "too many destinations"
-msgstr ""
+msgstr "対象指定が多過ぎです"
 
 msgid "use only one form to specify the revision"
-msgstr ""
+msgstr "リビジョン指定は単一の形式で行ってください"
 
 msgid ""
 "\n"
 "Write the introductory message for the patch series.\n"
 "\n"
 msgstr ""
+"\n"
+"一連のパッチのための説明文を記述してください。\n"
+"\n"
 
 #, python-format
 msgid ""
 "This patch series consists of %d patches.\n"
 "\n"
 msgstr ""
+"一連のパッチは %d 個のパッチから構成されています。\n"
+"\n"
 
 msgid "Final summary:\n"
-msgstr ""
+msgstr "統計結果:\n"
 
 msgid "Displaying "
-msgstr ""
+msgstr "表示中 "
 
 msgid "Writing "
-msgstr ""
+msgstr "書き出し中 "
 
 msgid "Sending "
-msgstr ""
+msgstr "送信中 "
 
 msgid "send patches as attachments"
-msgstr ""
+msgstr "添付ファイルとしてパッチを送信"
 
 msgid "send patches as inline attachments"
-msgstr ""
+msgstr "インライン添付ファイルとしてパッチを送信"
 
 msgid "email addresses of blind carbon copy recipients"
-msgstr ""
+msgstr "BCC 宛先のメールアドレス"
 
 msgid "email addresses of copy recipients"
-msgstr ""
+msgstr "CC 宛先のメールアドレス"
 
 msgid "add diffstat output to messages"
-msgstr ""
+msgstr "差分統計を出力に追加"
 
 msgid "use the given date as the sending date"
-msgstr ""
+msgstr "メールの Date ヘッダ値に指定日時を設定"
 
 msgid "use the given file as the series description"
-msgstr ""
+msgstr "指定ファイルの内容を説明文として使用"
 
 msgid "email address of sender"
-msgstr ""
+msgstr "メールの From ヘッダ値"
 
 msgid "print messages that would be sent"
-msgstr ""
+msgstr "送信予定のメールの内容を表示"
 
 msgid "write messages to mbox file instead of sending them"
-msgstr ""
+msgstr "メール送信の代わりに、mbox ファイルに書き出す"
 
 msgid "subject of first message (intro or single patch)"
-msgstr ""
+msgstr "説明文ないし単一パッチ送信メールの Subject ヘッダ値"
+
+msgid "message identifier to reply to"
+msgstr "返信対象のメッセージID"
 
 msgid "email addresses of recipients"
-msgstr ""
+msgstr "TO 宛先のメールアドレス"
 
 msgid "omit hg patch header"
-msgstr ""
+msgstr "Mercurial 固有のパッチヘッダを省略"
 
 msgid "send changes not found in the target repository"
-msgstr ""
+msgstr "対象リポジトリに無いリビジョンをパッチ形式で送信"
 
 msgid "send changes not in target as a binary bundle"
-msgstr ""
+msgstr "対象リポジトリに無いリビジョンをバンドル形式で送信"
+
+msgid "name of the bundle attachment file"
+msgstr "バンドル形式添付ファイルのファイル名"
 
 msgid "a revision to send"
-msgstr ""
-
-msgid "run even when remote repository is unrelated (with -b)"
-msgstr ""
-
-msgid "a base changeset to specify instead of a destination (with -b)"
-msgstr ""
+msgstr "送信するリビジョン"
+
+msgid "run even when remote repository is unrelated (with -b/--bundle)"
+msgstr "連携先が無関係なリポジトリでも送信(-b/--bundle 指定時)"
+
+msgid "a base changeset to specify instead of a destination (with -b/--bundle)"
+msgstr "連携先指定の代わりとなる基底リビジョン(-b/--bundle 指定時)"
 
 msgid "send an introduction email for a single patch"
-msgstr ""
+msgstr "説明文を独立したメールで送信"
 
 msgid "hg email [OPTION]... [DEST]..."
-msgstr ""
+msgstr "hg email [OPTION]... [DEST]...\""
+
+msgid "command to delete untracked files from the working directory"
+msgstr "作業領域中の未登録ファイルを削除するコマンド"
 
 msgid ""
 "removes files not tracked by Mercurial\n"
 "\n"
-"    Delete files not known to Mercurial. This is useful to test local and\n"
-"    uncommitted changes in an otherwise-clean source tree.\n"
+"    Delete files not known to Mercurial. This is useful to test local\n"
+"    and uncommitted changes in an otherwise-clean source tree.\n"
 "\n"
 "    This means that purge will delete:\n"
 "     - Unknown files: files marked with \"?\" by \"hg status\"\n"
-"     - Empty directories: in fact Mercurial ignores directories unless they\n"
-"       contain files under source control managment\n"
+"     - Empty directories: in fact Mercurial ignores directories unless\n"
+"       they contain files under source control management\n"
 "    But it will leave untouched:\n"
 "     - Modified and unmodified tracked files\n"
 "     - Ignored files (unless --all is specified)\n"
@@ -3890,370 +4123,320 @@
 "    If directories are given on the command line, only files in these\n"
 "    directories are considered.\n"
 "\n"
-"    Be careful with purge, as you could irreversibly delete some files you\n"
-"    forgot to add to the repository. If you only want to print the list of\n"
-"    files that this program would delete, use the --print option.\n"
+"    Be careful with purge, as you could irreversibly delete some files\n"
+"    you forgot to add to the repository. If you only want to print the\n"
+"    list of files that this program would delete, use the --print\n"
+"    option.\n"
 "    "
 msgstr ""
 
 #, python-format
 msgid "%s cannot be removed"
-msgstr ""
+msgstr "%s を削除できませんでした"
 
 #, python-format
 msgid "warning: %s\n"
-msgstr ""
+msgstr "警告: %s\n"
 
 #, python-format
 msgid "Removing file %s\n"
-msgstr ""
+msgstr "ファイル %s を削除しています\n"
 
 #, python-format
 msgid "Removing directory %s\n"
-msgstr ""
+msgstr "ディレクトリ %s を削除しています\n"
 
 msgid "abort if an error occurs"
-msgstr ""
+msgstr "エラーが発生した場合、中断する"
 
 msgid "purge ignored files too"
-msgstr ""
-
-msgid "print the file names instead of deleting them"
-msgstr ""
-
-msgid "end filenames with NUL, for use with xargs (implies -p)"
-msgstr ""
+msgstr "無視したファイルも削除する"
+
+msgid "print filenames instead of deleting them"
+msgstr "ファイル削除の変わりにファイル名表示を実施"
+
+msgid "end filenames with NUL, for use with xargs (implies -p/--print)"
+msgstr "ファイル名をNUL文字(0x00)で終端(xargs -p/--print との併用向け)"
 
 msgid "hg purge [OPTION]... [DIR]..."
-msgstr ""
-
-msgid ""
-"move sets of revisions to a different ancestor\n"
-"\n"
-"This extension lets you rebase changesets in an existing Mercurial "
+msgstr "hg purge [OPTION]... [DIR]...\""
+
+msgid ""
+"command to move sets of revisions to a different ancestor\n"
+"\n"
+"This extension lets you rebase changesets in an existing Mercurial\n"
 "repository.\n"
 "\n"
 "For more information:\n"
+"http://mercurial.selenic.com/wiki/RebaseProject\n"
+msgstr ""
+"一連のリビジョンを異なる履歴ツリー上の位置に移動させるコマンド\n"
+"\n"
+"本エクステンションは、既存の Mercurial リポジトリにおけるリビジョンの\n"
+"リベースを可能にします。\n"
+"\n"
+"詳細は以下を参照してください:\n"
 "http://www.selenic.com/mercurial/wiki/index.cgi/RebaseProject\n"
-msgstr ""
-
-msgid "return the correct ancestor"
-msgstr ""
 
 msgid "first revision, do not change ancestor\n"
-msgstr ""
+msgstr "初期リビジョンのため、祖先を変更しません\n"
 
 msgid ""
 "move changeset (and descendants) to a different branch\n"
 "\n"
-"    Rebase uses repeated merging to graft changesets from one part of "
-"history\n"
-"    onto another. This can be useful for linearizing local changes relative "
-"to\n"
-"    a master development tree.\n"
-"\n"
-"    If a rebase is interrupted to manually resolve a merge, it can be "
-"continued\n"
-"    with --continue or aborted with --abort.\n"
-"    "
-msgstr ""
-
-msgid "cannot use both keepbranches and extrafn"
-msgstr ""
+"    Rebase uses repeated merging to graft changesets from one part of\n"
+"    history onto another. This can be useful for linearizing local\n"
+"    changes relative to a master development tree.\n"
+"\n"
+"    If a rebase is interrupted to manually resolve a merge, it can be\n"
+"    continued with --continue/-c or aborted with --abort/-a.\n"
+"    "
+msgstr ""
+"別な履歴位置へのリビジョン(およびその子孫)の移動\n"
+"\n"
+"    ある履歴位置から別な位置へとリビジョンを移植するため、本コマンドは\n"
+"    反復的なマージを行ないます。この機能は、作業領域における成果を開発\n"
+"    用のマスターリポジトリに反映する際に、枝分かれの無い状態にするような\n"
+"    場合に有用です。\n"
+"\n"
+"    手動マージによる衝突解消の必要から中断された場合、--continue/-c で\n"
+"    処理を継続したり、--abort/-a で処理を終了させたりできます。\n"
+"    "
 
 msgid "cannot use both abort and continue"
-msgstr ""
+msgstr "--abort と --continue は併用できません"
 
 msgid "cannot use collapse with continue or abort"
-msgstr ""
+msgstr "--collapse は --abort や --continue と併用できません"
 
 msgid "abort and continue do not allow specifying revisions"
-msgstr ""
+msgstr "--abort や --continue は、りビジョン指定と併用できません"
 
 msgid "cannot specify both a revision and a base"
-msgstr ""
+msgstr "--soruce と --base は併用できません"
 
 msgid "nothing to rebase\n"
-msgstr ""
+msgstr "リベースの必要はありません\n"
+
+msgid "cannot use both keepbranches and extrafn"
+msgstr "--keepbranches と --extrafn は併用できません"
 
 msgid "rebase merging completed\n"
-msgstr ""
+msgstr "リベースのマージ処理が完了\n"
 
 msgid "warning: new changesets detected on source branch, not stripping\n"
-msgstr ""
+msgstr "警告: リベース元に新規リビジョンを検出したので、破棄しません\n"
 
 msgid "rebase completed\n"
-msgstr ""
+msgstr "リベース完了\n"
 
 #, python-format
 msgid "%d revisions have been skipped\n"
-msgstr ""
-
-msgid ""
-"Skip commit if collapsing has been required and rev is not the last\n"
-"    revision, commit otherwise\n"
-"    "
-msgstr ""
+msgstr "%d 個のリビジョンをスキップ\n"
 
 msgid " set parents\n"
-msgstr ""
-
-msgid "Rebase a single revision"
-msgstr ""
+msgstr " 親リビジョンの設定\n"
 
 #, python-format
 msgid "rebasing %d:%s\n"
-msgstr ""
+msgstr " %d:%s のリベース中\n"
 
 #, python-format
 msgid " future parents are %d and %d\n"
-msgstr ""
+msgstr " リベース後の親リビジョンは %d と %d\n"
 
 #, python-format
 msgid " update to %d:%s\n"
-msgstr ""
+msgstr " %d:%s へと更新\n"
 
 msgid " already in target\n"
-msgstr ""
+msgstr " 既に対象内\n"
 
 #, python-format
 msgid " merge against %d:%s\n"
-msgstr ""
+msgstr " %d:%s に対してマージ\n"
 
 msgid "fix unresolved conflicts with hg resolve then run hg rebase --continue"
-msgstr ""
+msgstr " 'hg resolve' で衝突解消してから 'hg rebase --continue' してください"
 
 msgid "resuming interrupted rebase\n"
-msgstr ""
+msgstr "中断されたリベースの再開中\n"
 
 #, python-format
 msgid "no changes, revision %d skipped\n"
-msgstr ""
+msgstr "変更がないので、リビジョン %d をスキップ\n"
 
 #, python-format
 msgid "next revision set to %s\n"
-msgstr ""
-
-msgid "Return the new parent relationship of the revision that will be rebased"
-msgstr ""
+msgstr "次のリビジョンを %s に設定\n"
 
 #, python-format
 msgid "cannot use revision %d as base, result would have 3 parents"
-msgstr ""
-
-msgid "Update rebased mq patches - finalize and then import them"
-msgstr ""
+msgstr "親リビジョンが 3 つになるので、リビジョン %d をベースにできません"
 
 #, python-format
 msgid "revision %d is an mq patch (%s), finalize it.\n"
-msgstr ""
+msgstr "リビジョン %d は MQ パッチ(%s)なので、通常リビジョン化\n"
 
 #, python-format
 msgid "import mq patch %d (%s)\n"
-msgstr ""
-
-msgid "Store the current status to allow recovery"
-msgstr ""
+msgstr "MQ パッチ %d(%s) の取り込み\n"
 
 msgid "rebase status stored\n"
-msgstr ""
-
-msgid "Remove the status files"
-msgstr ""
-
-msgid "Restore a previously stored status"
-msgstr ""
+msgstr "リベース状態が保存されました\n"
 
 msgid "rebase status resumed\n"
-msgstr ""
+msgstr "リベース状態を復旧しました\n"
 
 msgid "no rebase in progress"
-msgstr ""
-
-msgid "Restore the repository to its original state"
-msgstr ""
+msgstr "進行中のリベース状態はありません"
 
 msgid "warning: new changesets detected on target branch, not stripping\n"
-msgstr ""
+msgstr "警告: 新規リビジョンが対象ブランチに検出されたので、破棄しません\n"
 
 msgid "rebase aborted\n"
-msgstr ""
-
-msgid "Define which revisions are going to be rebased and where"
-msgstr ""
+msgstr "リベースが中断されました\n"
 
 msgid "cannot rebase onto an applied mq patch"
-msgstr ""
+msgstr "MQ パッチ上へのリベースはできません"
 
 msgid "cannot rebase an ancestor"
-msgstr ""
+msgstr "先祖へのリベースはできません"
 
 msgid "cannot rebase a descendant"
-msgstr ""
+msgstr "子孫へのリベースはできません"
 
 msgid "already working on current\n"
-msgstr ""
+msgstr "既に現行位置で作業中\n"
 
 msgid "already working on the current branch\n"
-msgstr ""
+msgstr "既に現行ブランチで作業中\n"
 
 #, python-format
 msgid "rebase onto %d starting from %d\n"
-msgstr ""
+msgstr "%d へのリベースを %d から開始\n"
 
 msgid "unable to collapse, there is more than one external parent"
-msgstr ""
-
-msgid "Call rebase after pull if the latter has been invoked with --rebase"
-msgstr ""
+msgstr "複数の親との関係から、--collapse は指定できません"
 
 msgid "--update and --rebase are not compatible, ignoring the update flag\n"
-msgstr ""
-
-msgid "Replace pull with a decorator to provide --rebase option"
-msgstr ""
+msgstr "--update と --rebase は非互換のため、--update は無視します\n"
 
 msgid "rebase working directory to branch head"
-msgstr ""
-
-msgid "keep original revisions"
-msgstr ""
-
-msgid "keep original branches"
-msgstr ""
+msgstr "作業領域をブランチヘッドにリベース"
 
 msgid "rebase from a given revision"
-msgstr ""
+msgstr "指定リビジョンをリベース"
 
 msgid "rebase from the base of a given revision"
-msgstr ""
+msgstr "指定リビジョンから先をリベース"
 
 msgid "rebase onto a given revision"
-msgstr ""
+msgstr "リベース先リビジョンの指定"
 
 msgid "collapse the rebased revisions"
-msgstr ""
+msgstr "リベース後にリビジョンを一体化"
+
+msgid "keep original revisions"
+msgstr "元リビジョンの維持"
+
+msgid "keep original branches"
+msgstr "元ブランチの維持"
 
 msgid "continue an interrupted rebase"
-msgstr ""
+msgstr "中断されたリベースを再開"
 
 msgid "abort an interrupted rebase"
-msgstr ""
-
-msgid ""
-"hg rebase [-s rev | -b rev] [-d rev] [--collapse] | [-c] | [-a] | [--keep]"
-msgstr ""
-
-msgid "interactive change selection during commit or qrefresh"
-msgstr ""
-
-msgid ""
-"like patch.iterhunks, but yield different events\n"
-"\n"
-"    - ('file',    [header_lines + fromfile + tofile])\n"
-"    - ('context', [context_lines])\n"
-"    - ('hunk',    [hunk_lines])\n"
-"    - ('range',   (-start,len, +start,len, diffp))\n"
-"    "
-msgstr ""
-
-msgid "scan lr while predicate holds"
-msgstr ""
-
-msgid ""
-"patch header\n"
-"\n"
-"    XXX shoudn't we move this to mercurial/patch.py ?\n"
-"    "
-msgstr ""
+msgstr "中断されたリベースを中止"
+
+msgid ""
+"hg rebase [-s REV | -b REV] [-d REV] [--collapse] [--keep] [--keepbranches] "
+"| [-c] | [-a]"
+msgstr ""
+"hg rebase [-s REV | -b REV] [-d REV] [--collapse] [--keep] [--keepbranches] "
+"| [-c] | [-a]"
+
+msgid "commands to interactively select changes for commit/qrefresh"
+msgstr "commit または qrefresh 実行時に対話的な変更選択を行うコマンド"
 
 msgid "this modifies a binary file (all or nothing)\n"
-msgstr ""
+msgstr "これはバイナリファイルに対する変更です(部分的な選択は不可能)\n"
 
 msgid "this is a binary file\n"
-msgstr ""
+msgstr "これはバイナリファイルです\n"
 
 #, python-format
 msgid "%d hunks, %d lines changed\n"
-msgstr ""
-
-msgid "hunk -> (n+,n-)"
-msgstr ""
-
-msgid ""
-"patch hunk\n"
-"\n"
-"    XXX shouldn't we merge this with patch.hunk ?\n"
-"    "
-msgstr ""
-
-msgid "patch -> [] of hunks "
-msgstr ""
-
-msgid "patch parsing state machine"
-msgstr ""
-
-msgid "Interactively filter patch chunks into applied-only chunks"
-msgstr ""
-
-msgid ""
-"fetch next portion from chunks until a 'header' is seen\n"
-"        NB: header == new-file mark\n"
-"        "
-msgstr ""
-
-msgid ""
-"prompt query, and process base inputs\n"
-"\n"
-"        - y/n for the rest of file\n"
-"        - y/n for the rest\n"
-"        - ? (help)\n"
-"        - q (quit)\n"
-"\n"
-"        else, input is returned to the caller.\n"
-"        "
-msgstr ""
+msgstr "%d 個のハンク、%d 行の変更\n"
 
 msgid "[Ynsfdaq?]"
-msgstr ""
+msgstr "[Ynsfdaq?]"
+
+msgid "&Yes, record this change"
+msgstr "&Yes - この変更を記録します"
+
+msgid "&No, skip this change"
+msgstr "&No - この変更をスキップします"
+
+msgid "&Skip remaining changes to this file"
+msgstr "&Skip - このファイルの残りの変更を全てスキップします"
+
+msgid "Record remaining changes to this &file"
+msgstr "&File - このファイルの残りの変更を全て記録します"
+
+msgid "&Done, skip remaining changes and files"
+msgstr "&Done - 残りの変更およびファイルを全てスキップして終了します"
+
+msgid "Record &all changes to all remaining files"
+msgstr "&All - 残りの変更およびファイルを全て記録します"
+
+msgid "&Quit, recording no changes"
+msgstr "&Quit - 変更を記録しないで終了します"
+
+msgid "&?"
+msgstr "&?"
 
 msgid "y"
-msgstr ""
+msgstr "y"
 
 msgid "?"
-msgstr ""
+msgstr "?"
 
 msgid "y - record this change"
-msgstr ""
+msgstr "y - この変更を記録します"
 
 msgid "s"
-msgstr ""
+msgstr "s"
 
 msgid "f"
-msgstr ""
+msgstr "f"
 
 msgid "d"
-msgstr ""
+msgstr "d"
 
 msgid "a"
-msgstr ""
+msgstr "a"
 
 msgid "q"
-msgstr ""
+msgstr "q"
 
 msgid "user quit"
-msgstr ""
+msgstr "ユーザの指示により終了します"
 
 #, python-format
 msgid "examine changes to %s?"
-msgstr ""
+msgstr "%s の変更点を調べますか?"
 
 msgid " and "
-msgstr ""
+msgstr " と "
 
 #, python-format
 msgid "record this change to %r?"
-msgstr ""
+msgstr "この変更を %r に記録しますか?"
+
+#, python-format
+msgid "record change %d/%d to %r?"
+msgstr "この変更 (%d 件目 / %d 件中) を %r に記録しますか?"
 
 msgid ""
 "interactively select changes to commit\n"
@@ -4265,7 +4448,7 @@
 "\n"
 "    You will be prompted for whether to record changes to each\n"
 "    modified file, and for files with multiple changes, for each\n"
-"    change to use.  For each query, the following responses are\n"
+"    change to use. For each query, the following responses are\n"
 "    possible:\n"
 "\n"
 "    y - record this change\n"
@@ -4280,147 +4463,142 @@
 "\n"
 "    ? - display help"
 msgstr ""
-
-msgid ""
-"interactively record a new patch\n"
-"\n"
-"    see 'hg help qnew' & 'hg help record' for more information and usage\n"
-"    "
-msgstr ""
+"コミットする内容を対話的に選択します\n"
+"\n"
+"    ファイル一覧が指定されなかった場合は \"hg status\" で表示される\n"
+"    全てのファイルが記録の対象となります。\n"
+"\n"
+"    -d/--date で使用する日時表記は 'he help dates' を参照してください。\n"
+"\n"
+"    変更されたファイルの変更箇所ごとに記録するかどうか質問されます。\n"
+"    それに対して以下の操作が可能です:\n"
+"\n"
+"    y - この変更を記録します\n"
+"    n - この変更をスキップします\n"
+"\n"
+"    s - このファイルの残りの変更を全てスキップします\n"
+"    f - このファイルの残りの変更を全て記録します\n"
+"\n"
+"    d - 残りの変更およびファイルをスキップして終了します\n"
+"    a - 残り全てのファイルの変更を記録します\n"
+"    q - 変更を記録しないで終了します\n"
+"\n"
+"    ? - ヘルプを表示します"
 
 msgid "'mq' extension not loaded"
-msgstr ""
+msgstr "'mq' エクステンションが読み込まれていません"
 
 msgid "running non-interactively, use commit instead"
-msgstr ""
-
-msgid ""
-"This is generic record driver.\n"
-"\n"
-"        It's job is to interactively filter local changes, and accordingly\n"
-"        prepare working dir into a state, where the job can be delegated to\n"
-"        non-interactive commit command such as 'commit' or 'qrefresh'.\n"
-"\n"
-"        After the actual job is done by non-interactive command, working "
-"dir\n"
-"        state is restored to original.\n"
-"\n"
-"        In the end we'll record intresting changes, and everything else will "
-"be\n"
-"        left in place, so the user can continue his work.\n"
-"        "
-msgstr ""
+msgstr "非対話的に実行する場合は commit を使用してください"
 
 msgid "no changes to record\n"
-msgstr ""
+msgstr "記録可能な変更がありません\n"
 
 #, python-format
 msgid "backup %r as %r\n"
-msgstr ""
+msgstr "%r を %r としてバックアップします\n"
 
 msgid "applying patch\n"
-msgstr ""
+msgstr "パッチを適用中\n"
 
 msgid "patch failed to apply"
-msgstr ""
+msgstr "パッチの適用に失敗"
 
 #, python-format
 msgid "restoring %r to %r\n"
-msgstr ""
+msgstr "%r から %r に復元中\n"
 
 msgid "hg record [OPTION]... [FILE]..."
-msgstr ""
+msgstr "hg record [OPTION]... [FILE]..."
 
 msgid "hg qrecord [OPTION]... PATCH [FILE]..."
-msgstr ""
-
-msgid ""
-"patch transplanting tool\n"
+msgstr "hg qrecord [OPTION]... PATCH [FILE]..."
+
+msgid "share a common history between several working directories"
+msgstr ""
+
+msgid ""
+"create a new shared repository (experimental)\n"
+"\n"
+"    Initialize a new repository and working directory that shares its\n"
+"    history with another repository.\n"
+"\n"
+"    NOTE: actions that change history such as rollback or moving the\n"
+"    source may confuse sharers.\n"
+"    "
+msgstr ""
+
+msgid "do not create a working copy"
+msgstr "作業領域の更新を抑止します"
+
+msgid "[-U] SOURCE [DEST]"
+msgstr "[-U] SOURCE [DEST]"
+
+msgid ""
+"command to transplant changesets from another branch\n"
 "\n"
 "This extension allows you to transplant patches from another branch.\n"
 "\n"
-"Transplanted patches are recorded in .hg/transplant/transplants, as a map\n"
-"from a changeset hash to its hash in the source repository.\n"
-msgstr ""
-
-msgid ""
-"returns True if a node is already an ancestor of parent\n"
-"        or has already been transplanted"
-msgstr ""
-
-msgid "apply the revisions in revmap one by one in revision order"
-msgstr ""
+"Transplanted patches are recorded in .hg/transplant/transplants, as a\n"
+"map from a changeset hash to its hash in the source repository.\n"
+msgstr ""
+"別ブランチからパッチを移植するコマンド\n"
+"\n"
+"本エクステンションは、別ブランチからのパッチの移植を可能にします。\n"
+"\n"
+"移植されたパッチの情報は、移植先リビジョンのハッシュ値から、移植元\n"
+"リポジトリにおけるハッシュ値への変換として、.hg/transplant/transplants\n"
+"に記録されます。\n"
 
 #, python-format
 msgid "skipping already applied revision %s\n"
-msgstr ""
+msgstr "すでに適用したりビジョン %s を飛ばしています\n"
 
 #, python-format
 msgid "skipping merge changeset %s:%s\n"
-msgstr ""
+msgstr "チェンジセット %s:%s のマージを飛ばしています\n"
 
 #, python-format
 msgid "%s merged at %s\n"
-msgstr ""
+msgstr "%s を %s にマージ\n"
 
 #, python-format
 msgid "%s transplanted to %s\n"
-msgstr ""
-
-msgid "arbitrarily rewrite changeset before applying it"
-msgstr ""
+msgstr "%s を %s に移植\n"
 
 #, python-format
 msgid "filtering %s\n"
-msgstr ""
+msgstr "%s をフィルタリング中\n"
 
 msgid "filter failed"
-msgstr ""
-
-msgid "apply the patch in patchfile to the repository as a transplant"
-msgstr ""
+msgstr "フィルターに失敗"
 
 msgid "can only omit patchfile if merging"
-msgstr ""
+msgstr "マージの場合のみパッチファイルを省略可能"
 
 #, python-format
 msgid "%s: empty changeset"
-msgstr ""
+msgstr "%s: 空のチェンジセット"
 
 msgid "Fix up the merge and run hg transplant --continue"
-msgstr ""
-
-msgid "recover last transaction and apply remaining changesets"
-msgstr ""
+msgstr "衝突解消後に 'hg transplant --continue' してください"
 
 #, python-format
 msgid "%s transplanted as %s\n"
-msgstr ""
-
-msgid "commit working directory using journal metadata"
-msgstr ""
+msgstr "%s が %s として移植されました\n"
 
 msgid "transplant log file is corrupt"
-msgstr ""
+msgstr "移植ログファイルが破損しています"
 
 #, python-format
 msgid "working dir not at transplant parent %s"
-msgstr ""
+msgstr "作業領域が移植親 %s ではありません"
 
 msgid "commit failed"
-msgstr ""
-
-msgid "journal changelog metadata for later recover"
-msgstr ""
-
-msgid "remove changelog journal"
-msgstr ""
-
-msgid "interactively transplant changesets"
-msgstr ""
+msgstr "コミットに失敗"
 
 msgid "apply changeset? [ynmpcq?]:"
-msgstr ""
+msgstr "チェンジセットを適用しますか? [ynmpcq?]:"
 
 msgid ""
 "transplant changesets from another branch\n"
@@ -4432,124 +4610,239 @@
 "    (transplanted from CHANGESETHASH)\n"
 "\n"
 "    You can rewrite the changelog message with the --filter option.\n"
-"    Its argument will be invoked with the current changelog message\n"
-"    as $1 and the patch as $2.\n"
-"\n"
-"    If --source is specified, selects changesets from the named\n"
-"    repository. If --branch is specified, selects changesets from the\n"
-"    branch holding the named revision, up to that revision. If --all\n"
-"    is specified, all changesets on the branch will be transplanted,\n"
-"    otherwise you will be prompted to select the changesets you want.\n"
-"\n"
-"    hg transplant --branch REVISION --all will rebase the selected branch\n"
-"    (up to the named revision) onto your current working directory.\n"
-"\n"
-"    You can optionally mark selected transplanted changesets as\n"
-"    merge changesets. You will not be prompted to transplant any\n"
-"    ancestors of a merged transplant, and you can merge descendants\n"
-"    of them normally instead of transplanting them.\n"
+"    Its argument will be invoked with the current changelog message as\n"
+"    $1 and the patch as $2.\n"
+"\n"
+"    If --source/-s is specified, selects changesets from the named\n"
+"    repository. If --branch/-b is specified, selects changesets from\n"
+"    the branch holding the named revision, up to that revision. If\n"
+"    --all/-a is specified, all changesets on the branch will be\n"
+"    transplanted, otherwise you will be prompted to select the\n"
+"    changesets you want.\n"
+"\n"
+"    hg transplant --branch REVISION --all will rebase the selected\n"
+"    branch (up to the named revision) onto your current working\n"
+"    directory.\n"
+"\n"
+"    You can optionally mark selected transplanted changesets as merge\n"
+"    changesets. You will not be prompted to transplant any ancestors\n"
+"    of a merged transplant, and you can merge descendants of them\n"
+"    normally instead of transplanting them.\n"
 "\n"
 "    If no merges or revisions are provided, hg transplant will start\n"
 "    an interactive changeset browser.\n"
 "\n"
-"    If a changeset application fails, you can fix the merge by hand and\n"
-"    then resume where you left off by calling hg transplant --continue.\n"
-"    "
-msgstr ""
+"    If a changeset application fails, you can fix the merge by hand\n"
+"    and then resume where you left off by calling hg transplant\n"
+"    --continue/-c.\n"
+"    "
+msgstr ""
+"別のブランチへのチェンジセットの移植\n"
+"\n"
+"    選択されたチェンジセットは、元チェンジセットのコミットログと一緒に\n"
+"    現在の作業領域上に適用されます。--log 指定がある場合、以下の形式の\n"
+"    メッセージが追加されます:\n"
+"\n"
+"    (transplanted from CHANGESETHASH)\n"
+"\n"
+"    --filter によりコミットログを改変することができます。指定された値は\n"
+"    コマンド起動に使用され、第1引数にはコミットメッセージ、第2引数には\n"
+"    パッチが指定されます。\n"
+"\n"
+"    --source/-s が指定された場合、指定のリポジトリから移植されます。\n"
+"    --branch/-b が指定された場合、指定の名前を持つブランチから移植\n"
+"    されます。--all/-a が指定された場合、指定されたブランチ中の全ての\n"
+"    チェンジセットが移植対処となり、それ以外の場合は移植対象とする\n"
+"    チェンジセットの問い合わせがあります。\n"
+"\n"
+"    hg transplant --branch REVISION --all 形式での起動の場合、指定された\n"
+"    REVISION の属するブランチ中の全てのチェンジセットが、現在の作業領域\n"
+"    上に移植されます。\n"
+"\n"
+"    選択した対象チェンジセットの移植を、マージ実施とみなすことも可能\n"
+"    です。移植の際にマージ対象リビジョンに関する問い合わせは無く、移植\n"
+"    後の移植元の子孫に対しては、移植ではなく通常のマージが可能です。\n"
+"\n"
+"    マージ対象もリビジョン指定もない場合、本コマンドは対話的に移植を\n"
+"    行ないます。\n"
+"\n"
+"    移植に失敗した場合、手動での衝突解消後に --continue/-c を指定して\n"
+"    本コマンドを再実行することで、中断された移植を再開可能ですす。\n"
+"    "
 
 msgid "--continue is incompatible with branch, all or merge"
-msgstr ""
+msgstr "--continue は --branch、--all、--merge と併用できません"
 
 msgid "no source URL, branch tag or revision list provided"
-msgstr ""
+msgstr "元 URL、ブランチタグ、リビジョン指定のいずれも指定されていません"
 
 msgid "--all requires a branch revision"
-msgstr ""
+msgstr "--all 指定にはブランチリビジョンが必要です"
 
 msgid "--all is incompatible with a revision list"
-msgstr ""
+msgstr "--all とリビジョン指定は併用できません"
 
 msgid "no revision checked out"
-msgstr ""
+msgstr "作業領域が未更新です"
 
 msgid "outstanding uncommitted merges"
-msgstr ""
+msgstr "マージが未コミットです"
 
 msgid "outstanding local changes"
-msgstr ""
+msgstr "未コミットの変更があります"
 
 msgid "pull patches from REPOSITORY"
-msgstr ""
+msgstr "パッチ取り込み元リポジトリの指定"
 
 msgid "pull patches from branch BRANCH"
-msgstr ""
+msgstr "パッチ取り込み元ブランチの指定"
 
 msgid "pull all changesets up to BRANCH"
-msgstr ""
+msgstr "指定ブランチの全てを取り込む"
 
 msgid "skip over REV"
-msgstr ""
+msgstr "指定リビジョンのスキップ"
 
 msgid "merge at REV"
-msgstr ""
+msgstr "指定リビジョンにおけるマージ"
 
 msgid "append transplant info to log message"
-msgstr ""
+msgstr "コミットログへの移植情報の付与"
 
 msgid "continue last transplant session after repair"
-msgstr ""
+msgstr "中断された直前の移植作業の再開"
 
 msgid "filter changesets through FILTER"
-msgstr ""
+msgstr "チェンジセットのフィルタ指定"
 
 msgid ""
 "hg transplant [-s REPOSITORY] [-b BRANCH [-a]] [-p REV] [-m REV] [REV]..."
 msgstr ""
-
-msgid ""
-"allow to use MBCS path with problematic encoding.\n"
-"\n"
-"Some MBCS encodings are not good for some path operations\n"
-"(i.e. splitting path, case conversion, etc.) with its encoded bytes.\n"
-"We call such a encoding (i.e. shift_jis and big5) as \"problematic\n"
-"encoding\".  This extension can be used to fix the issue with those\n"
-"encodings by wrapping some functions to convert to unicode string\n"
-"before path operation.\n"
-"\n"
-"This extension is usefull for:\n"
+"hg transplant [-s REPOSITORY] [-b BRANCH [-a]] [-p REV] [-m REV] [REV]..."
+
+msgid ""
+"allow the use of MBCS paths with problematic encodings\n"
+"\n"
+"Some MBCS encodings are not good for some path operations (i.e.\n"
+"splitting path, case conversion, etc.) with its encoded bytes. We call\n"
+"such a encoding (i.e. shift_jis and big5) as \"problematic encoding\".\n"
+"This extension can be used to fix the issue with those encodings by\n"
+"wrapping some functions to convert to Unicode string before path\n"
+"operation.\n"
+"\n"
+"This extension is useful for:\n"
 " * Japanese Windows users using shift_jis encoding.\n"
 " * Chinese Windows users using big5 encoding.\n"
-" * All users who use a repository with one of problematic encodings\n"
-"   on case-insensitive file system.\n"
+" * All users who use a repository with one of problematic encodings on\n"
+"   case-insensitive file system.\n"
 "\n"
 "This extension is not needed for:\n"
-" * Any user who use only ascii chars in path.\n"
+" * Any user who use only ASCII chars in path.\n"
 " * Any user who do not use any of problematic encodings.\n"
 "\n"
 "Note that there are some limitations on using this extension:\n"
 " * You should use single encoding in one repository.\n"
-" * You should set same encoding for the repository by locale or HGENCODING.\n"
-"\n"
-"To use this extension, enable the extension in .hg/hgrc or ~/.hgrc:\n"
-"\n"
-"  [extensions]\n"
-"  hgext.win32mbcs =\n"
-"\n"
-"Path encoding conversion are done between unicode and util._encoding\n"
-"which is decided by mercurial from current locale setting or HGENCODING.\n"
-"\n"
-msgstr ""
+" * You should set same encoding for the repository by locale or\n"
+"   HGENCODING.\n"
+"\n"
+"Path encoding conversion are done between Unicode and\n"
+"encoding.encoding which is decided by Mercurial from current locale\n"
+"setting or HGENCODING.\n"
+msgstr ""
+"問題のある文字コードでの多バイト符号化文字を使用したパス名の有効化\n"
+"\n"
+"パス名の取り扱い(例: パス要素の分割、文字大小変換等)上、不適切な文字を\n"
+"含む多バイト符号化文字セット(MBCS)が存在します。ここではそのような文字\n"
+"セット(例: shift_jis および big5)を「問題文字コード」と呼びます。\n"
+"本エクステンションは、パス操作の実施前に unicode 文字列化する処理を\n"
+"割り込ませることで、問題文字コードによって発生する障害を防ぎます。\n"
+"\n"
+"このエクステンションは以下の場合に有用です:\n"
+"\n"
+"  * shift_jis 文字コードを使用する日本語 Windows のユーザ\n"
+"  * big5 文字コードを使用する中国語 Windows のユーザ\n"
+"  * 文字大小を区別できないファイルシステム上で、問題文字コードを\n"
+"    使用したリポジトリを運用するユーザ\n"
+"\n"
+"このエクステンションは以下の場合には不要です:\n"
+"\n"
+"  * パス名に ascii 文字しか使用しないユーザ\n"
+"  * 問題文字コードを使用しないユーザ\n"
+"\n"
+"このエクステンションの利用には幾つかの制限があります:\n"
+"\n"
+"  * リポジトリ内では単一の文字コードを使用してください\n"
+"  * ロケール設定なり HGENCODING 環境変数なりの設定を、リポジトリで\n"
+"    使用する文字コードと同じものにしてください\n"
+"\n"
+"パス名の文字コード変換は、unicode と、ロケール設定ないし HGENCODING\n"
+"環境変数によって Mercurial が決定する文字コードとの間で行なわれます。\n"
 
 #, python-format
 msgid "[win32mbcs] filename conversion fail with %s encoding\n"
-msgstr ""
+msgstr "[win32mbcs] 文字コード '%s' との間での変換に失敗\n"
 
 msgid "[win32mbcs] cannot activate on this platform.\n"
-msgstr ""
+msgstr "[win32mbcs] このプラットフォームでは実行できません。\n"
 
 #, python-format
 msgid "[win32mbcs] activated with encoding: %s\n"
-msgstr ""
+msgstr "[win32mbcs] 文字コード %s との間での変換を有効化\n"
+
+msgid ""
+"perform automatic newline conversion\n"
+"\n"
+"To perform automatic newline conversion, use:\n"
+"\n"
+"[extensions]\n"
+"hgext.win32text =\n"
+"[encode]\n"
+"** = cleverencode:\n"
+"# or ** = macencode:\n"
+"\n"
+"[decode]\n"
+"** = cleverdecode:\n"
+"# or ** = macdecode:\n"
+"\n"
+"If not doing conversion, to make sure you do not commit CRLF/CR by "
+"accident:\n"
+"\n"
+"[hooks]\n"
+"pretxncommit.crlf = python:hgext.win32text.forbidcrlf\n"
+"# or pretxncommit.cr = python:hgext.win32text.forbidcr\n"
+"\n"
+"To do the same check on a server to prevent CRLF/CR from being\n"
+"pushed or pulled:\n"
+"\n"
+"[hooks]\n"
+"pretxnchangegroup.crlf = python:hgext.win32text.forbidcrlf\n"
+"# or pretxnchangegroup.cr = python:hgext.win32text.forbidcr\n"
+msgstr ""
+"改行形式の自動変換\n"
+"\n"
+"改行形式の自動変換を行う場合、以下のように設定します:\n"
+"\n"
+"[extensions]\n"
+"hgext.win32text =\n"
+"[encode]\n"
+"** = cleverencode:\n"
+"# ないし ** = macencode:\n"
+"\n"
+"[decode]\n"
+"** = cleverdecode:\n"
+"# ないし ** = macdecode:\n"
+"\n"
+"変換はしないものの、間違った改行形式でのコミットを防止したい場合は:\n"
+"\n"
+"[hooks]\n"
+"pretxncommit.crlf = python:hgext.win32text.forbidcrlf\n"
+"# ないし pretxncommit.cr = python:hgext.win32text.forbidcr\n"
+"\n"
+"意図せぬ履歴反映の防止のために、サーバ側で同様の確認を行いたい場合は:\n"
+"\n"
+"[hooks]\n"
+"pretxnchangegroup.crlf = python:hgext.win32text.forbidcrlf\n"
+"# ないし pretxnchangegroup.cr = python:hgext.win32text.forbidcr\n"
 
 #, python-format
 msgid ""
@@ -4558,14 +4851,18 @@
 "Before your next commit, please reconsider your encode/decode settings in \n"
 "Mercurial.ini or %s.\n"
 msgstr ""
+"警告: %s は既に行末が %s 形式です\n"
+"そのため win32text による行末形式変換は不要です。\n"
+"次回の commit までに、Mercurial.ini なり %s における encode/decode 設定を\n"
+"見直すことをお勧めします。\n"
 
 #, python-format
 msgid "Attempt to commit or push text file(s) using %s line endings\n"
-msgstr ""
+msgstr "テキストファイルの行末形式 %s による commit ないし履歴反映を実施\n"
 
 #, python-format
 msgid "in %s: %s\n"
-msgstr ""
+msgstr "リビジョン %s: %s\n"
 
 #, python-format
 msgid ""
@@ -4585,23 +4882,31 @@
 "[decode]\n"
 "** = %sdecode:\n"
 msgstr ""
-
-msgid ""
-"zeroconf support for mercurial repositories\n"
-"\n"
-"Zeroconf enabled repositories will be announced in a network without the "
-"need\n"
-"to configure a server or a service. They can be discovered without knowing\n"
-"their actual IP address.\n"
-"\n"
-"To use the zeroconf extension add the following entry to your hgrc file:\n"
+"\n"
+"同様の間違いを防ぐには、以下の設定を Mercurial.ini ないし .hg/hgrc に\n"
+"以下の記述を追加してください:\n"
+"\n"
+"[hooks]\n"
+"pretxncommit.%s = python:hgext.win32text.forbid%s\n"
+"\n"
+"必要であれば以下の記述も追加してください:\n"
 "\n"
 "[extensions]\n"
-"hgext.zeroconf =\n"
-"\n"
-"To allow other people to discover your repository using run \"hg serve\" in "
-"your\n"
-"repository.\n"
+"hgext.win32text =\n"
+"[encode]\n"
+"** = %sencode:\n"
+"[decode]\n"
+"** = %sdecode:\n"
+
+msgid ""
+"discover and advertise repositories on the local network\n"
+"\n"
+"Zeroconf enabled repositories will be announced in a network without\n"
+"the need to configure a server or a service. They can be discovered\n"
+"without knowing their actual IP address.\n"
+"\n"
+"To allow other people to discover your repository using run \"hg serve\"\n"
+"in your repository.\n"
 "\n"
 " $ cd test\n"
 " $ hg serve\n"
@@ -4613,67 +4918,70 @@
 msgstr ""
 
 msgid "archive prefix contains illegal components"
-msgstr ""
+msgstr "アーカイブの接頭辞が不正なコンポーネントを含みます"
 
 msgid "cannot give prefix when archiving to files"
-msgstr ""
+msgstr "アーカイブにファイルを追加するときは接頭辞を指定できません"
 
 #, python-format
 msgid "unknown archive type '%s'"
-msgstr ""
+msgstr "未知のアーカイブ種別 '%s'"
 
 msgid "invalid changegroup"
-msgstr ""
+msgstr "チェンジグループが不正です"
 
 msgid "unknown parent"
-msgstr ""
+msgstr "未知の親"
 
 #, python-format
 msgid "integrity check failed on %s:%d"
-msgstr ""
+msgstr "%s:%d の一貫性チェックに失敗"
 
 #, python-format
 msgid "%s: not a Mercurial bundle file"
-msgstr ""
+msgstr "%s: Mercurial にバンドルされたファイルではありません"
 
 #, python-format
 msgid "%s: unknown bundle version"
-msgstr ""
+msgstr "%s: 未知のバンドルバージョン"
 
 #, python-format
 msgid "%s: unknown bundle compression type"
-msgstr ""
+msgstr "%s: 未知のバンドル圧縮方法"
 
 msgid "cannot create new bundle repository"
-msgstr ""
+msgstr "バンドルリポジトリの新規作成はできません"
 
 #, python-format
 msgid "premature EOF reading chunk (got %d bytes, expected %d)"
-msgstr ""
+msgstr "予期しない EOF (%d バイトのみ読込済、本当は %d バイト)"
+
+msgid "empty username"
+msgstr "ユーザ名が空です"
 
 #, python-format
 msgid "username %s contains a newline"
-msgstr ""
+msgstr "ユーザ名 %s が改行を含んでいます"
 
 msgid "options --message and --logfile are mutually exclusive"
-msgstr ""
+msgstr "--message と --logfile は同時に指定できません"
 
 #, python-format
 msgid "can't read commit message '%s': %s"
-msgstr ""
+msgstr "コミットメッセージ '%s' を読み込むことができません: %s"
 
 msgid "limit must be a positive integer"
-msgstr ""
+msgstr "制限は正数でなければなりません"
 
 msgid "limit must be positive"
-msgstr ""
+msgstr "制限は正数でなければなりません"
 
 msgid "too many revisions specified"
-msgstr ""
-
-#, python-format
-msgid "invalid format spec '%%%s' in output file name"
-msgstr ""
+msgstr "リビジョンの指定が多すぎます"
+
+#, python-format
+msgid "invalid format spec '%%%s' in output filename"
+msgstr "出力ファイル名に不正なフォーマット '%%%s' 指定"
 
 #, python-format
 msgid "adding %s\n"
@@ -4681,196 +4989,225 @@
 
 #, python-format
 msgid "removing %s\n"
-msgstr "%s を登録解除中\n"
+msgstr "%s を登録除外中\n"
 
 #, python-format
 msgid "recording removal of %s as rename to %s (%d%% similar)\n"
-msgstr ""
+msgstr "%s の削除を %s へのファイル名変更として記録中 (類似度 %d%%)\n"
 
 #, python-format
 msgid "%s: not copying - file is not managed\n"
-msgstr ""
+msgstr "%s: コピー失敗 - ファイルは登録されていません\n"
 
 #, python-format
 msgid "%s: not copying - file has been marked for remove\n"
-msgstr ""
+msgstr "%s: コピー失敗 - 削除予定のファイルです\n"
 
 #, python-format
 msgid "%s: not overwriting - %s collides with %s\n"
-msgstr ""
+msgstr "%s: 上書き失敗 - %s は %s と衝突\n"
 
 #, python-format
 msgid "%s: not overwriting - file exists\n"
-msgstr ""
+msgstr "%s: 上書きしません - ファイルが存在します\n"
 
 #, python-format
 msgid "%s: deleted in working copy\n"
-msgstr ""
+msgstr "%s: 作業コピーから削除しました\n"
 
 #, python-format
 msgid "%s: cannot copy - %s\n"
-msgstr ""
-
-#, python-format
-msgid "%s %s to %s\n"
-msgstr ""
+msgstr "%s: コピー失敗 - %s\n"
+
+#, python-format
+msgid "moving %s to %s\n"
+msgstr "%s を %s に移動中\n"
+
+#, python-format
+msgid "copying %s to %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 ""
+msgstr "%s は未コミットなので、%s のコピーデータは残りません\n"
 
 msgid "no source or destination specified"
-msgstr ""
+msgstr "作業元もしくは作業先を指定していません"
 
 msgid "no destination specified"
-msgstr ""
+msgstr "作業先を指定していません"
 
 msgid "with multiple sources, destination must be an existing directory"
-msgstr ""
+msgstr "複数の作業元の場合、作業先は存在するディレクトリでなければなりません"
 
 #, python-format
 msgid "destination %s is not a directory"
-msgstr ""
+msgstr "作業先 %s はディレクトリではありません"
 
 msgid "no files to copy"
-msgstr ""
+msgstr "コピーするファイルがありません"
 
 msgid "(consider using --after)\n"
-msgstr ""
+msgstr "( --after を使ってみては? )\n"
 
 #, python-format
 msgid "changeset:   %d:%s\n"
-msgstr ""
+msgstr "チェンジセット:   %d:%s\n"
 
 #, python-format
 msgid "branch:      %s\n"
-msgstr ""
+msgstr "ブランチ:         %s\n"
 
 #, python-format
 msgid "tag:         %s\n"
-msgstr ""
+msgstr "タグ:             %s\n"
 
 #, python-format
 msgid "parent:      %d:%s\n"
-msgstr ""
+msgstr "親:               %d:%s\n"
 
 #, python-format
 msgid "manifest:    %d:%s\n"
-msgstr ""
+msgstr "管理ファイル一覧: %d:%s\n"
 
 #, python-format
 msgid "user:        %s\n"
-msgstr ""
+msgstr "ユーザ:         %s\n"
 
 #, python-format
 msgid "date:        %s\n"
-msgstr ""
+msgstr "日付:             %s\n"
 
 msgid "files+:"
-msgstr ""
+msgstr "ファイル追加:"
 
 msgid "files-:"
-msgstr ""
+msgstr "ファイル削除:"
 
 msgid "files:"
-msgstr ""
+msgstr "ファイル:"
 
 #, python-format
 msgid "files:       %s\n"
-msgstr ""
+msgstr "ファイル:        %s\n"
 
 #, python-format
 msgid "copies:      %s\n"
-msgstr ""
+msgstr "コピー           %s\n"
 
 #, python-format
 msgid "extra:       %s=%s\n"
-msgstr ""
+msgstr "その他:       %s=%s\n"
 
 msgid "description:\n"
-msgstr ""
+msgstr "説明:\n"
 
 #, python-format
 msgid "summary:     %s\n"
-msgstr ""
+msgstr "要約:             %s\n"
 
 #, python-format
 msgid "%s: no key named '%s'"
-msgstr ""
+msgstr "%s: '%s' というキーはありません"
 
 #, python-format
 msgid "%s: %s"
-msgstr ""
+msgstr "%s: %s"
 
 #, python-format
 msgid "Found revision %s from %s\n"
-msgstr ""
+msgstr "リビジョン %s を %s で見つけました\n"
 
 msgid "revision matching date not found"
-msgstr ""
+msgstr "リビジョンに一致する日付がありません"
 
 #, python-format
 msgid "cannot follow nonexistent file: \"%s\""
-msgstr ""
+msgstr "存在しないファイルを追跡できません: \"%s\""
 
 #, python-format
 msgid "%s:%s copy source revision cannot be found!\n"
-msgstr ""
-
-msgid "can only follow copies/renames for explicit file names"
-msgstr ""
-
-#, python-format
-msgid "file %s not found!"
-msgstr ""
-
-#, python-format
-msgid "no match under directory %s!"
-msgstr ""
-
-#, python-format
-msgid "can't commit %s: unsupported file type!"
-msgstr ""
-
-#, python-format
-msgid "file %s not tracked!"
-msgstr ""
+msgstr "%s:%s コピー元のリビジョンがありません!\n"
+
+msgid "can only follow copies/renames for explicit filenames"
+msgstr "ファイル名が明示された場合のみ複製/改名を追跡可能です"
+
+msgid "HG: Enter commit message.  Lines beginning with 'HG:' are removed."
+msgstr ""
+"HG: コミットメッセージを入力してください。 HG: で始まる行は無視されます。"
+
+msgid "HG: Leave message empty to abort commit."
+msgstr "HG: メッセージが空だとコミットできません。"
+
+#, python-format
+msgid "HG: user: %s"
+msgstr "HG: ユーザ: %s"
+
+msgid "HG: branch merge"
+msgstr "HG: ブランチのマージ"
+
+#, python-format
+msgid "HG: branch '%s'"
+msgstr "HG: ブランチ '%s'"
+
+#, python-format
+msgid "HG: added %s"
+msgstr "HG: %s を追加"
+
+#, python-format
+msgid "HG: changed %s"
+msgstr "HG: %s を変更"
+
+#, python-format
+msgid "HG: removed %s"
+msgstr "HG: %s を削除"
+
+#
+msgid "HG: no files changed"
+msgstr "HG: ファイル変更なし"
+
+msgid "empty commit message"
+msgstr "コミットメッセージがありません"
 
 msgid ""
 "add the specified files on the next commit\n"
 "\n"
-"    Schedule files to be version controlled and added to the repository.\n"
+"    Schedule files to be version controlled and added to the\n"
+"    repository.\n"
 "\n"
 "    The files will be added to the repository at the next commit. To\n"
-"    undo an add before that, see hg revert.\n"
+"    undo an add before that, see hg forget.\n"
 "\n"
 "    If no names are given, add all files to the repository.\n"
 "    "
 msgstr ""
-"指定されたファイルを次回コミットから構成管理に追加登録\n"
+"指定ファイルの追加登録予約\n"
 "\n"
 "    構成管理へのファイルの追加登録を予約します。\n"
 "\n"
-"    指定されたファイルは次回のコミットの際にリポジトリに追加されます。\n"
-"    コミット前に追加登録を取り消す方法は、hg revert を参照してください。\n"
-"\n"
-"    ファイル名指定が無い場合、作業領域中の全てのファイルを追加登録します。\n"
+"    指定されたファイルは次回のコミットから構成管理対象となります。\n"
+"    コミット前の追加登録の取り消しは、'hg help revert' を参照して\n"
+"    ください。\n"
+"\n"
+"    ファイル名指定が無い場合、作業領域中の全ファイルが対象となります。\n"
 "    "
 
 msgid ""
 "add all new files, delete all missing files\n"
 "\n"
-"    Add all new files and remove all missing files from the repository.\n"
-"\n"
-"    New files are ignored if they match any of the patterns in .hgignore. "
-"As\n"
-"    with add, these changes take effect at the next commit.\n"
-"\n"
-"    Use the -s option to detect renamed files. With a parameter > 0,\n"
-"    this compares every removed file with every added file and records\n"
-"    those similar enough as renames. This option takes a percentage\n"
-"    between 0 (disabled) and 100 (files must be identical) as its\n"
-"    parameter. Detecting renamed files this way can be expensive.\n"
+"    Add all new files and remove all missing files from the\n"
+"    repository.\n"
+"\n"
+"    New files are ignored if they match any of the patterns in\n"
+"    .hgignore. As with add, these changes take effect at the next\n"
+"    commit.\n"
+"\n"
+"    Use the -s/--similarity option to detect renamed files. With a\n"
+"    parameter > 0, this compares every removed file with every added\n"
+"    file and records those similar enough as renames. This option\n"
+"    takes a percentage between 0 (disabled) and 100 (files must be\n"
+"    identical) as its parameter. Detecting renamed files this way can\n"
+"    be expensive.\n"
 "    "
 msgstr ""
 "新規ファイルの追加登録、および不在ファイルの登録除外\n"
@@ -4879,14 +5216,13 @@
 "    行ないます。\n"
 "\n"
 "    .hgignore に記述されたパターンに合致する新規ファイルは無視されます。\n"
-"    hg add コマンドと同様に、このコマンドの実行が効果を発揮するのは、\n"
-"    次回のコミット実施後です。\n"
-"\n"
-"    ファイルの改名を検知するには -s オプションを使用します。\n"
-"    0 より大きな値が指定された場合、追加・除外ファイルの全てが比較され、\n"
-"    改名とみなせるか否かが判定されます。このオプションには、0(改名比較無効)\n"
-"    から 100 (完全一致)までの範囲でパーセンテージを指定します。\n"
-"    改名判定には実行時間を要する可能性があります。\n"
+"    'hg add' と同様に、実行効果が発揮されるのは次回コミット時点です。\n"
+"\n"
+"    ファイルの改名を検知するには -s/--similarity を使用します。0 より\n"
+"    大きな値が指定された場合、追加・除外ファイルの全てが比較され、改名と\n"
+"    みなせるか否かが判定されます。このオプションには、0(改名比較無効)\n"
+"    から 100 (完全一致)までの範囲でパーセンテージを指定します。改名判定\n"
+"    には実行時間を要する可能性があります。\n"
 "    "
 
 msgid "similarity must be a number"
@@ -4896,32 +5232,32 @@
 msgstr "類似度は0から100の間でなければなりません"
 
 msgid ""
-"show changeset information per file line\n"
-"\n"
-"    List changes in files, showing the revision id responsible for each "
-"line\n"
-"\n"
-"    This command is useful to discover who did a change or when a change "
-"took\n"
-"    place.\n"
-"\n"
-"    Without the -a option, annotate will avoid processing files it\n"
-"    detects as binary. With -a, annotate will generate an annotation\n"
-"    anyway, probably with undesirable results.\n"
-"    "
-msgstr ""
-"ファイル行毎のチェンジセット情報表示\n"
+"show changeset information by line for each file\n"
+"\n"
+"    List changes in files, showing the revision id responsible for\n"
+"    each line\n"
+"\n"
+"    This command is useful for discovering when a change was made and\n"
+"    by whom.\n"
+"\n"
+"    Without the -a/--text option, annotate will avoid processing files\n"
+"    it detects as binary. With -a, annotate will annotate the file\n"
+"    anyway, although the results will probably be neither useful\n"
+"    nor desirable.\n"
+"    "
+msgstr ""
+"ファイル行毎のリビジョン情報表示\n"
 "\n"
 "    ファイルの各行毎に、その内容が由来するリビジョンIDを表示します。\n"
 "\n"
-"    本コマンドは、変更の実施者ないし実施次期を特定するのに有用です。\n"
-"\n"
-"    -a オプション指定が無い場合、バイナリと思しきファイルは処理対象から\n"
-"    除外します。-a オプション指定が有る場合、想定外の結果になろうとも、\n"
-"    全てのファイルに処理を実施します。\n"
-"    "
-
-msgid "at least one file name or pattern required"
+"    本コマンドは、変更の実施者ないし実施時期を特定するのに有用です。\n"
+"\n"
+"    -a/--text 指定が無い場合、バイナリと思しきファイルは処理対象から\n"
+"    除外されます。-a 指定が有る場合、結果に関わらず全てのファイルが\n"
+"    処理対象となります。\n"
+"    "
+
+msgid "at least one filename or pattern is required"
 msgstr "ファイル名ないしパターンを最低1つ指定してください"
 
 msgid "at least one of -n/-c is required for -l"
@@ -4932,12 +5268,12 @@
 msgstr "%s: バイナリファイルです\n"
 
 msgid ""
-"create unversioned archive of a repository revision\n"
+"create an unversioned archive of a repository revision\n"
 "\n"
 "    By default, the revision used is the parent of the working\n"
-"    directory; use \"-r\" to specify a different revision.\n"
-"\n"
-"    To specify the type of archive to create, use \"-t\". Valid\n"
+"    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"
@@ -4948,46 +5284,46 @@
 "    \"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"
+"    using a format string; see 'hg help export' for details.\n"
 "\n"
 "    Each member added to an archive file has a directory prefix\n"
-"    prepended. Use \"-p\" to specify a format string for the prefix.\n"
-"    The default is the basename of the archive, with suffixes removed.\n"
+"    prepended. Use -p/--prefix to specify a format string for the\n"
+"    prefix. The default is the basename of the archive, with suffixes\n"
+"    removed.\n"
 "    "
 msgstr ""
 "リポジトリ外へのアーカイブの生成\n"
 "\n"
-"    指定が無い場合、作業領域の親リビジョンが使用されます。\n"
-"    他のリビジョンを指定する場合は \"-r\" を使用します。\n"
-"\n"
-"    生成するアーカイブの種別を指定する場合は、\"-t\" を使用します。\n"
+"    特に指定が無い場合、作業領域の親リビジョンが使用されます。\n"
+"    他のリビジョンを指定する場合は -r/--rev を使用します。\n"
+"\n"
+"    生成するアーカイブの種別を指定する場合は、-t/--type を使用します。\n"
 "    使用可能な種別は:\n"
 "\n"
-"    \"files\" (無指定時): a directory full of files\n"
-"    \"tar\": 非圧縮の tar アーカイブ形式\n"
-"    \"tbz2\": bzip2 圧縮の tar アーカイブ形式\n"
-"    \"tgz\": gzip 圧縮の tar アーカイブ形式\n"
-"    \"uzip\": 非圧縮の zip アーカイブ形式\n"
-"    \"zip\": 圧縮有り zip アーカイブ形式\n"
-"\n"
-"    最終的なアーカイブ生成先となるファイル名ないしディレクトリ名は、\n"
-"    置換指定を使用して指定することができます。\n"
-"    置換指定に関する詳細は \"hg help export\" を参照してください。\n"
-"\n"
-"    アーカイブに包含されるファイルには、展開時格納先を指定するための\n"
-"    ディレクトリ前置詞が付与されます。 \"-p\" により前置詞を指定可能です。\n"
-"    ディレクトリ前置詞が無指定の時は、アーカイブファイルのファイル名から\n"
-"    接尾辞を除いたものが使用されます。\n"
+"    \"files\": 展開済みアーカイブのイメージ(無指定時)\n"
+"    \"tar\"  : 非圧縮の tar アーカイブ形式\n"
+"    \"tbz2\" : bzip2 圧縮の tar アーカイブ形式\n"
+"    \"tgz\"  : gzip 圧縮の tar アーカイブ形式\n"
+"    \"uzip\" : 非圧縮の zip アーカイブ形式\n"
+"    \"zip\"  : deflate 圧縮の zip アーカイブ形式\n"
+"\n"
+"    アーカイブ生成先となるファイル名ないしディレクトリ名の指定には\n"
+"    置換指定を使用することができます。置換指定に関する詳細は \n"
+"    'hg help export' を参照してください。\n"
+"\n"
+"    アーカイブ生成の際には、展開時の格納先ディレクトリ名が記録されます。\n"
+"    -p/--prefix によりディレクトリ名を指定できます(置換指定可能)。特に\n"
+"    指定が無い場合は、アーカイブ名から拡張子を除いたものが記録されます。\n"
 "    "
 
 msgid "no working directory: please specify a revision"
-msgstr "作業領域からリビジョンを特定できません。リビジョンを指定してください。"
+msgstr "作業領域による暗黙指定ができませんのでリビジョンを明示してください"
 
 msgid "repository root cannot be destination"
-msgstr "リポジトリのルートを作成先に指定することはできません。"
+msgstr "リポジトリのルートを作成先に指定することはできません"
 
 msgid "cannot archive plain files to stdout"
-msgstr "通常ファイルのアーカイブを標準出力に出力することはできません。"
+msgstr "通常ファイルのアーカイブ先に標準出力を指定することはできません"
 
 msgid ""
 "reverse effect of earlier changeset\n"
@@ -4995,31 +5331,30 @@
 "    Commit the backed out changes as a new changeset. The new\n"
 "    changeset is a child of the backed out changeset.\n"
 "\n"
-"    If you back out a changeset other than the tip, a new head is\n"
+"    If you backout a changeset other than the tip, a new head is\n"
 "    created. This head will be the new tip and you should merge this\n"
-"    backout changeset with another head (current one by default).\n"
+"    backout changeset with another head.\n"
 "\n"
 "    The --merge option remembers the parent of the working directory\n"
 "    before starting the backout, then merges the new head with that\n"
-"    changeset afterwards. This saves you from doing the merge by\n"
-"    hand. The result of this merge is not committed, as with a normal\n"
-"    merge.\n"
+"    changeset afterwards. This saves you from doing the merge by hand.\n"
+"    The result of this merge is not committed, as with a normal merge.\n"
 "\n"
 "    See 'hg help dates' for a list of formats valid for -d/--date.\n"
 "    "
 msgstr ""
-"以前のチェンジセットの効果の打ち消し\n"
+"以前のチェンジセットにおける変更の打ち消し\n"
 "\n"
 "    打ち消し用チェンジセットを新規チェンジセットとしてコミットします。\n"
-"    新規チェンジセットは、打消し対象チェンジセットの子チェンジセットとして\n"
-"    作成されます。\n"
+"    新規チェンジセットは、打消し対象チェンジセットの子チェンジセット\n"
+"    として作成されます。\n"
 "\n"
 "    tip 以外のチェンジセットを打ち消す場合、新規ヘッドが生成されます。\n"
 "    このヘッドは新規 tip となりますので、この打ち消しチェンジセットと\n"
 "    他のヘッド(通常は打ち消し実施前のヘッド)をマージしてください。\n"
 "\n"
-"    --merge オプション指定時は、実施前に作業領域の親チェンジセットが\n"
-"    記録され、実施後に新たなヘッドとそのチェンジセットがマージされます。\n"
+"    --merge 指定時は、処理実施前に作業領域の親チェンジセットが記録され、\n"
+"    処理実施後に新たなヘッドとそのチェンジセットがマージされます。\n"
 "    これにより手動マージの手間が省けます。通常の merge と同様に、\n"
 "    このマージ結果は自動的には commit されません。\n"
 "\n"
@@ -5032,147 +5367,157 @@
 msgid "please specify a revision to backout"
 msgstr "打ち消し対象リビジョンを指定してください"
 
-msgid "cannot back out change on a different branch"
-msgstr "異なるブランチのチェンジセットを打ち消すことはできません"
-
-msgid "cannot back out a change with no parents"
-msgstr "親の無いチェンジセットを打ち消すことはできません"
-
-msgid "cannot back out a merge changeset without --parent"
-msgstr "--parent 指定が無いとマージチェンジセットは打ち消せません"
+msgid "cannot backout change on a different branch"
+msgstr "異なるブランチに属するリビジョンを打ち消すことはできません"
+
+msgid "cannot backout a change with no parents"
+msgstr "親の無いリビジョンを打ち消すことはできません"
+
+msgid "cannot backout a merge changeset without --parent"
+msgstr "マージリビジョンの打消しには --parent 指定が必要です"
 
 #, python-format
 msgid "%s is not a parent of %s"
-msgstr "%s は %s の親チェンジセットではありません"
+msgstr "%s は %s の親リビジョンではありません"
 
 msgid "cannot use --parent on non-merge changeset"
-msgstr "非マージチェンジセットには --parent を指定できません"
+msgstr "非マージリビジョンには --parent を指定できません"
 
 #, python-format
 msgid "Backed out changeset %s"
-msgstr "チェンジセット %s の打ち消し"
+msgstr "リビジョン %s の打ち消し"
 
 #, python-format
 msgid "changeset %s backs out changeset %s\n"
-msgstr "チェンジセット %s はチェンジセット %s を打ち消します\n"
+msgstr "リビジョン %s はリビジョン %s を打ち消します\n"
 
 #, python-format
 msgid "merging with changeset %s\n"
-msgstr "チェンジセット %s とマージ中\n"
+msgstr "リビジョン %s とマージ中\n"
 
 msgid "the backout changeset is a new head - do not forget to merge\n"
-msgstr "打ち消しチェンジセットによりヘッドが増えます - マージを忘れずに\n"
+msgstr "打ち消しリビジョンによりヘッドが増えます - マージを忘れずに\n"
 
 msgid "(use \"backout --merge\" if you want to auto-merge)\n"
-msgstr "(自動的にマージしたい場合は \"backout --merge\")\n"
+msgstr "(自動的にマージする場合は \"backout --merge\" してください)\n"
 
 msgid ""
 "subdivision search of changesets\n"
 "\n"
-"    This command helps to find changesets which introduce problems.\n"
-"    To use, mark the earliest changeset you know exhibits the problem\n"
-"    as bad, then mark the latest changeset which is free from the\n"
-"    problem as good. Bisect will update your working directory to a\n"
-"    revision for testing (unless the --noupdate option is specified).\n"
-"    Once you have performed tests, mark the working directory as bad\n"
-"    or good and bisect will either update to another candidate changeset\n"
+"    This command helps to find changesets which introduce problems. To\n"
+"    use, mark the earliest changeset you know exhibits the problem as\n"
+"    bad, then mark the latest changeset which is free from the problem\n"
+"    as good. Bisect will update your working directory to a revision\n"
+"    for testing (unless the -U/--noupdate option is specified). Once\n"
+"    you have performed tests, mark the working directory as good or\n"
+"    bad, and bisect will either update to another candidate changeset\n"
 "    or announce that it has found the bad revision.\n"
 "\n"
 "    As a shortcut, you can also use the revision argument to mark a\n"
 "    revision as good or bad without checking it out first.\n"
 "\n"
-"    If you supply a command it will be used for automatic bisection. Its "
-"exit\n"
-"    status will be used as flag to mark revision as bad or good. In case "
-"exit\n"
-"    status is 0 the revision is marked as good, 125 - skipped, 127 (command "
-"not\n"
-"    found) - bisection will be aborted; any other status bigger than 0 will\n"
-"    mark revision as bad.\n"
-"    "
-msgstr ""
-"チェンジセットの分割探索\n"
-"\n"
-"    問題発生契機となるチェンジセットの特定を補助します。\n"
-"    使用開始の際には、問題が発生するのが既知の最古のチェンジセットを\n"
-"    bad とマークし、問題の発生しない最も新しいチェンジセットを\n"
-"    good とマークします。bisect コマンドは作業領域を検証対象チェンジセット\n"
-"    へと更新します(--noupdate 指定時除く)。\n"
-"    当該チェンジセットを検証したなら、作業領域(のチェンジセット)を bad \n"
-"    あるいは good でマークしてください。bisect は作業領域を次の検証候補\n"
-"    チェンジセットで更新するか、bad リビジョンを特定できた旨を出力します。\n"
-"\n"
-"    手短には、リビジョン指定を使用して、作業領域の更新無しでリビジョンを\n"
-"    good ないし bad にマークすることもできます。\n"
-"\n"
-"    コマンドを指定した場合は、自動的な分割探索に使用されます。\n"
+"    If you supply a command, it will be used for automatic bisection.\n"
+"    Its exit status will be used to mark revisions as good or bad:\n"
+"    status 0 means good, 125 means to skip the revision, 127\n"
+"    (command not found) will abort the bisection, and any other\n"
+"    non-zero exit status means the revision is bad.\n"
+"    "
+msgstr ""
+"リビジョンの分割探索\n"
+"\n"
+"    問題発生契機となるリビジョンの特定を補助します。使用開始の際には、\n"
+"    問題が発生する既知のリビジョンのうち、最古のものを bad とマークし、\n"
+"    問題が発生しない既知のリビジョンのうち、最新のものを good とマーク\n"
+"    します。本コマンドは、検証対象リビジョンで作業領域を更新します(-U/\n"
+"    --noupdate 指定時除く)。当該リビジョンを検証したなら、bad あるいは\n"
+"    good でマークしてください。本コマンドは、次の検証候補リビジョンで\n"
+"    作業領域を更新するか、問題契機リビジョンを特定できた旨を出力します。\n"
+"\n"
+"    てみじかな手順としては、作業領域を更新せずに、リビジョン指定を使用\n"
+"    してリビジョンを good ないし bad にマークすることもできます。\n"
+"\n"
+"    コマンドが指定された場合、自動的なリビジョン検証に使用されます。\n"
 "    コマンドの終了コードはリビジョンに対する bad ないし good のマーク付け\n"
 "    に使用されます。終了コード 0 は good、125 はスキップ、127(コマンドが\n"
-"    見つからない場合)は分割検索中断、それ以外の 0 より大きい終了コードは\n"
+"    見つからない場合)は分割探索中断、それ以外の 0 より大きい終了コードは\n"
 "    bad のマーク付けとみなされます。\n"
 "    "
 
-#, python-format
-msgid "The first %s revision is:\n"
-msgstr ""
-
-#, python-format
-msgid "Due to skipped revisions, the first %s revision could be any of:\n"
-msgstr ""
+msgid "The first good revision is:\n"
+msgstr "最初の good なリビジョンは:\n"
+
+msgid "The first bad revision is:\n"
+msgstr "最初の bad なリビジョンは:\n"
+
+msgid "Due to skipped revisions, the first good revision could be any of:\n"
+msgstr "検証省略により、最初の good なリビジョンは以下から選択可能です:\n"
+
+msgid "Due to skipped revisions, the first bad revision could be any of:\n"
+msgstr "検証省略により、最初の bad なリビジョンは以下から選択可能です:\n"
 
 msgid "cannot bisect (no known good revisions)"
-msgstr ""
+msgstr "分割探索出来ません(good リビジョンが未指定です)"
 
 msgid "cannot bisect (no known bad revisions)"
-msgstr ""
+msgstr "分割探索出来ません(bad リビジョンが未指定です)"
 
 msgid "(use of 'hg bisect <cmd>' is deprecated)\n"
-msgstr ""
+msgstr "('hg bisect <cmd>' 形式の実行は推奨されません)\n"
 
 msgid "incompatible arguments"
-msgstr ""
+msgstr "不正な引数の組み合わせです"
+
+#, python-format
+msgid "cannot find executable: %s"
+msgstr "実行可能ファイル '%s' が見つかりません"
 
 #, python-format
 msgid "failed to execute %s"
-msgstr ""
+msgstr "%s の実行に失敗"
 
 #, python-format
 msgid "%s killed"
-msgstr ""
-
-#, python-format
-msgid "Changeset %s: %s\n"
-msgstr ""
+msgstr "%s プロセスは中断されました"
+
+#, python-format
+msgid "Changeset %d:%s: %s\n"
+msgstr "リビジョン %d:%s: %s\n"
 
 #, python-format
 msgid "Testing changeset %s:%s (%s changesets remaining, ~%s tests)\n"
-msgstr ""
+msgstr "リビジョン %s:%s を検証中(検証残 %s、検証済み %s)\n"
 
 msgid ""
 "set or show the current branch name\n"
 "\n"
 "    With no argument, show the current branch name. With one argument,\n"
-"    set the working directory branch name (the branch does not exist in\n"
-"    the repository until the next commit).\n"
-"\n"
-"    Unless --force is specified, branch will not let you set a\n"
-"    branch name that shadows an existing branch.\n"
-"\n"
-"    Use --clean to reset the working directory branch to that of the\n"
-"    parent of the working directory, negating a previous branch change.\n"
+"    set the working directory branch name (the branch will not exist\n"
+"    in the repository until the next commit). Standard practice\n"
+"    recommends that primary development take place on the 'default'\n"
+"    branch.\n"
+"\n"
+"    Unless -f/--force is specified, branch will not let you set a\n"
+"    branch name that already exists, even if it's inactive.\n"
+"\n"
+"    Use -C/--clean to reset the working directory branch to that of\n"
+"    the parent of the working directory, negating a previous branch\n"
+"    change.\n"
 "\n"
 "    Use the command 'hg update' to switch to an existing branch.\n"
 "    "
 msgstr ""
-"現ブランチ名の設定ないし表示\n"
-"\n"
-"    引数無しの場合、現ブランチ名を表示します。引数有りの場合、\n"
-"    作業領域のブランチ名を設定します(ブランチ生成は次回コミット時)。\n"
-"\n"
-"    --force 指定が無い場合、既存ブランチを隠すブランチ名は設定できません。\n"
-"\n"
-"    --clean 指定により、以前のブランチ名設定を無効にして、作業領域の\n"
-"    親リビジョンのブランチ名に戻します。\n"
+"ブランチ名の設定、ないし現ブランチ名の表示\n"
+"\n"
+"    引数無しの場合、現ブランチ名を表示します。引数が1つ指定された場合、\n"
+"    作業領域のブランチ名を設定します(次回コミット時まで、ブランチは生成\n"
+"    されません)。作業時に基本とするブランチには、'default' ブランチを\n"
+"    使用することをお勧めします。\n"
+"\n"
+"    -f/--force 指定が無い場合、例えそれが非アクティブなものであっても、\n"
+"    既存ブランチと同じ名前は設定できません。\n"
+"\n"
+"    -C/--clean を指定することで、以前のブランチ名設定を無効にして、作業\n"
+"    領域の親リビジョンのブランチ名に戻します。\n"
 "\n"
 "    作業領域の内容を既存ブランチのもので更新する場合は 'hg update' を\n"
 "    使用してください。\n"
@@ -5180,20 +5525,20 @@
 
 #, python-format
 msgid "reset working directory to branch %s\n"
-msgstr ""
+msgstr "作業領域のブランチを %s にリセット\n"
 
 msgid "a branch of the same name already exists (use --force to override)"
-msgstr ""
+msgstr "同名のブランチが存在します(強行する場合は --force 指定が必要です)"
 
 #, python-format
 msgid "marked working directory as branch %s\n"
-msgstr ""
+msgstr "作業領域をブランチ %s に設定\n"
 
 msgid ""
 "list repository named branches\n"
 "\n"
 "    List the repository's named branches, indicating which ones are\n"
-"    inactive. If active is specified, only show active branches.\n"
+"    inactive. If -a/--active is specified, only show active branches.\n"
 "\n"
 "    A branch is considered active if it contains repository heads.\n"
 "\n"
@@ -5202,8 +5547,9 @@
 msgstr ""
 "リポジトリ中の名前付きブランチの一覧\n"
 "\n"
-"    リポジトリ中の名前付きブランチを、非活性(inactive)のものも含め\n"
-"    一覧表示します。--active 指定時には、活性のもののみ表示されます。\n"
+"    リポジトリ中の名前付きブランチを、非活性(inactive)か否かと共に\n"
+"    一覧表示します。-a/--active 指定時には、活性のもののみが表示さ\n"
+"    れます。\n"
 "\n"
 "    リポジトリ中にヘッドを持つブランチは活性とみなされます。\n"
 "\n"
@@ -5220,13 +5566,16 @@
 "    If no destination repository is specified the destination is\n"
 "    assumed to have all the nodes specified by one or more --base\n"
 "    parameters. To create a bundle containing all changesets, use\n"
-"    --all (or --base null). To change the compression method applied,\n"
-"    use the -t option (by default, bundles are compressed using bz2).\n"
-"\n"
-"    The bundle file can then be transferred using conventional means and\n"
-"    applied to another repository with the unbundle or pull command.\n"
-"    This is useful when direct push and pull are not available or when\n"
-"    exporting an entire repository is undesirable.\n"
+"    -a/--all (or --base null).\n"
+"\n"
+"    You can change compression method with the -t/--type option.\n"
+"    The available compression methods are: none, bzip2, and\n"
+"    gzip (by default, bundles are compressed using bzip2).\n"
+"\n"
+"    The bundle file can then be transferred using conventional means\n"
+"    and applied to another repository with the unbundle or pull\n"
+"    command. This is useful when direct push and pull are not\n"
+"    available or when exporting an entire repository is undesirable.\n"
 "\n"
 "    Applying bundles preserves all changeset contents including\n"
 "    permissions, copy/rename information, and revision history.\n"
@@ -5234,35 +5583,37 @@
 msgstr ""
 "バンドルファイルの生成\n"
 "\n"
-"    比較対象リポジトリに存在しないチェンジセットの情報をまとめた、圧縮付き\n"
-"    バンドルファイルを生成します。\n"
-"\n"
-"    比較対象リポジトリが指定されない場合、1つ以上の --base で指定された\n"
-"    全てのチェンジセットを持つリポジトリが想定されます。\n"
-"    全てのチェンジセットを含むバンドルファイルを生成するには、--all \n"
-"    (ないし \"--base null\") を指定してください。圧縮方式を変更する場合は\n"
-"     -t オプションを使用します(無指定時は bz2 圧縮)。\n"
-"\n"
-"    生成されたバンドルファイルは、任意の方法で転送し、他のリポジトリ上で\n"
-"    unbundle ないし pull コマンドにより適用可能です。\n"
-"    push/pull による直接転送ができない場合や、リポジトリ全体の公開が\n"
-"    望ましく無い場合に、バンドルファイルは有用です。\n"
-"\n"
-"    バンドルの適用により、権限設定、複製/改名、変更履歴といった情報を含む\n"
-"    全ての更新内容が取り込まれます。\n"
-"    "
-
-msgid "--base is incompatible with specifiying a destination"
-msgstr ""
+"    連携対象リポジトリに存在しないリビジョンの情報をまとめて、圧縮\n"
+"    付きバンドルファイルを生成します。\n"
+"\n"
+"    連携対象リポジトリが指定されない場合、1つ以上の --base で指定\n"
+"    されたリビジョンを持つリポジトリが想定されます。全てのリビジョンを\n"
+"    含むバンドルファイルを生成するには、-a/--all (ないし --base null)を\n"
+"    指定します。\n"
+"\n"
+"    圧縮方式を変更する場合は -t/--type を使用します。利用可能な圧縮\n"
+"    形式は none(無圧縮), bzip2, gzip です(無指定時は bzip2 圧縮)。\n"
+"\n"
+"    任意の方法で転送したバンドルファイルは、他のリポジトリ上で\n"
+"    'hg unbundle' ないし 'hg pull' により適用可能です。バンドルによる\n"
+"    伝播は、 'hg push/pull' による直接転送ができない場合や、リポジトリ\n"
+"    全体の公開が望ましく無い場合に有用です。\n"
+"\n"
+"    バンドルの適用では、権限設定、複製/改名、変更履歴といった情報を\n"
+"    含む全ての更新内容が取り込まれます。\n"
+"    "
+
+msgid "--base is incompatible with specifying a destination"
+msgstr "--base と連携対象は同時には指定できません"
 
 msgid "unknown bundle type specified with --type"
-msgstr ""
+msgstr "--type に未知のバンドル種別が指定されました"
 
 msgid ""
 "output the current or given revision of files\n"
 "\n"
-"    Print the specified files as they were at the given revision.\n"
-"    If no revision is given, the parent of the working directory is used,\n"
+"    Print the specified files as they were at the given revision. If\n"
+"    no revision is given, the parent of the working directory is used,\n"
 "    or tip if no revision is checked out.\n"
 "\n"
 "    Output may be to a file, in which case the name of the file is\n"
@@ -5270,19 +5621,19 @@
 "    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 repo root\n"
+"    %d   dirname of file being printed, or '.' if in repository root\n"
 "    %p   root-relative path name of file being printed\n"
 "    "
 msgstr ""
-"指定されたリビジョンのファイル内容の出力\n"
-"\n"
-"    特定のファイルの指定されたリビジョンにおける内容を出力します。\n"
-"    リビジョン指定が無い場合、作業領域の親リビジョンか、\n"
-"    作業領域の更新前なら tip が使用されます。\n"
-"\n"
-"    (置換指定可能な)出力先指定がある場合、出力はファイルに保存されます。\n"
-"    置換指定は export コマンドで指定可能なものに加え、\n"
-"    以下のものが指定可能です。\n"
+"指定されたリビジョン時点のファイル内容の出力\n"
+"\n"
+"    指定されたリビジョンにおける、ファイル内容を出力します。リビジョン\n"
+"    指定が無い場合は作業領域の親リビジョンが、作業領域の更新前なら tip\n"
+"    が使用されます。\n"
+"\n"
+"    出力先指定(置換指定可能)がある場合、出力はファイルに保存されます。\n"
+"    置換指定には 'hg export' で可能な指定と、以下のものを指定できます。\n"
+"    \n"
 "\n"
 "    %s   対象ファイルのベース名\n"
 "    %d   対象ファイルの格納ディレクトリ、ないし '.'\n"
@@ -5300,6 +5651,22 @@
 "    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"
 "    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"
@@ -5312,96 +5679,92 @@
 "\n"
 "      $ cp -al REPO REPOCLONE\n"
 "\n"
-"    This is the fastest way to clone, but it is not always safe.  The\n"
+"    This is the fastest way to clone, but it is not always safe. The\n"
 "    operation is not atomic (making sure REPO is not modified during\n"
 "    the operation is up to you) and you have to make sure your editor\n"
-"    breaks hardlinks (Emacs and most Linux Kernel tools do so).  Also,\n"
+"    breaks hardlinks (Emacs and most Linux Kernel tools do so). Also,\n"
 "    this is not compatible with certain extensions that place their\n"
 "    metadata under the .hg directory, such as mq.\n"
 "\n"
-"    If you use the -r option to clone up to a specific revision, no\n"
-"    subsequent revisions will be present in the cloned repository.\n"
-"    This option implies --pull, even on local repositories.\n"
-"\n"
-"    If the -U option is used, the new clone will contain only a repository\n"
-"    (.hg) and no working copy (the working copy 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"
-"    Look at the help text for urls for important details about ssh:// URLs.\n"
 "    "
 msgstr ""
 "既存リポジトリの複製\n"
 "\n"
 "    既存リポジトリを、新規ディレクトリに複製します。\n"
 "\n"
-"    複製先ディレクトリが指定されない場合、複製元のベース名を使用します。\n"
-"\n"
-"    複製元リポジトリ位置は、複製先リポジトリの .hg/hgrc ファイルに対して\n"
-"    将来的な pull 実施に備えて default 名義で記録されます。\n"
+"    複製先ディレクトリが指定されない場合、複製元のベース名(パス名の\n"
+"    末尾要素)を使用します。\n"
+"\n"
+"    将来的な 'hg pull' 実施に備えて、複製先リポジトリの .hg/hgrc \n"
+"    ファイルには、複製元リポジトリ位置が default 名義で記録されます。\n"
+"\n"
+"    -r/--rev によるリビジョン指定複製を行なう場合、複製先リポジトリには\n"
+"    指定リビジョン以後のリビジョン(タグ付けリビジョン含む)は複製されま\n"
+"    せん。リビジョン指定複製の場合は、同一ファイルシステム上での複製で\n"
+"    あっても、暗黙的に --pull 指定を伴います。\n"
+"\n"
+"    特に指定の無い場合、本コマンドは 'default' ブランチのヘッドで作業\n"
+"    領域を更新します。-U/--noupdate が指定された場合、新規複製先は、\n"
+"    管理領域(.hg)のみを保持し、作業領域の更新は行われません(作業領域の\n"
+"    親リビジョンは null リビジョンとなります)。\n"
+"\n"
+"    有効な複製元指定形式は 'hg help urls' を参照してください。\n"
+"\n"
+"    複製先として ssh:// URL 形式を指定することも可能ですが、遠隔ホスト\n"
+"    では、.hg/hgrc の作成も、作業領域の更新も行われません。ssh:// URL\n"
+"    形式の詳細に関しては、'hg help urls' を参照してください。\n"
 "\n"
 "    効率上の理由から、複製元/複製先が同一ファイルシステム上にある場合、\n"
 "    (リポジトリの内部データに対してのみ)ハードリンクが使用されます。\n"
 "    AFS を含む幾つかのファイルシステムは、ハードリンク実装が不適切である\n"
-"    にも関わらず、エラー通知がありません。このような場合にハードリンクを\n"
-"    抑止するには --pull オプションを使用します。\n"
-"\n"
-"    リポジトリの内部データと作業領域中のファイル全てに対して、ハードリンク\n"
-"    による複製を作成するには、以下の方法が使えるかも知れません。\n"
+"    にも関わらず、エラー通知がありません。このような場合には --pull を\n"
+"    指定することで、ハードリンクを抑止します。\n"
+"\n"
+"    リポジトリの内部データと作業領域中のファイル全てに対して、ハード\n"
+"    リンクによる複製を作成するには、以下の方法が使えるかも知れません。\n"
 "\n"
 "      $ cp -al REPO REPOCLONE\n"
 "\n"
 "    この方法は最速の複製方法かもしれませんが、常に安全とは限りません。\n"
-"    操作の単一性は保障されません(REPO の複製中改変の防止は利用者の責務)し、\n"
-"    利用するエディタに改変時のハードリンク破棄をさせる必要があります\n"
-"    (Emacs および多くの Linux Kernel ツールはそのように振舞います)。\n"
-"    この制約は、.hg ディレクトリ配下にメタデータを配置する、MQ のような\n"
+"    操作の単一性は保障されません(REPO の複製中改変の防止は利用者責務)し、\n"
+"    利用するエディタが、改変時にハードリンクを破棄する必要があります\n"
+"    (Emacs および多くの Linux 系ツールはそのように振舞います)。この制約は\n"
+"    .hg ディレクトリ配下にメタデータを配置する、MQ のような\n"
 "    エクステンションとは相容れないものです。\n"
 "\n"
-"    -r オプションによるリビジョン指定複製を行なう場合、複製先リポジトリには\n"
-"    指定リビジョン以後のリビジョンは存在しません。\n"
-"    このオプションは、同一ファイルシステム上での複製であっても、暗黙的に\n"
-"    --pull 指定を伴います。\n"
-"\n"
-"    -U オプション指定時は、管理領域(.hg)の複製は行なわれますが、\n"
-"    複製後の作業領域更新は行なわれません(親リビジョンが無い状態)。\n"
-"\n"
-"    有効な複製元指定形式は 'hg help urls' を参照してください。\n"
-"\n"
-"    複製先として ssh:// URL 形式を指定することも可能ですが、\n"
-"    .hg/hgrc および作業領域は遠隔ホストに作成されます。\n"
-"    ssh:// URL 形式の詳細に関しては、'hg help urls' を参照してください。\n"
 "    "
 
 msgid ""
 "commit the specified files or all outstanding changes\n"
 "\n"
-"    Commit changes to the given files into the repository.\n"
+"    Commit changes to the given files into the repository. Unlike a\n"
+"    centralized RCS, this operation is a local operation. See hg push\n"
+"    for a way to actively distribute your changes.\n"
 "\n"
 "    If a list of files is omitted, all changes reported by \"hg status\"\n"
 "    will be committed.\n"
 "\n"
 "    If you are committing the result of a merge, do not provide any\n"
-"    file names or -I/-X filters.\n"
-"\n"
-"    If no commit message is specified, the configured editor is started to\n"
-"    prompt you for a message.\n"
+"    filenames or -I/-X filters.\n"
+"\n"
+"    If no commit message is specified, the configured editor is\n"
+"    started to prompt you for a message.\n"
 "\n"
 "    See 'hg help dates' for a list of formats valid for -d/--date.\n"
 "    "
 msgstr ""
-"変更内容のリポジトリへの記録(コミット)\n"
-"\n"
-"    指定されたファイルの変更内容をリポジトリに記録(コミット)します。\n"
-"\n"
-"    ファイル指定が省略された場合、\"hg status\" により検出される全ての\n"
+"指定ファイルないし全ての変更内容のリポジトリへの記録\n"
+"\n"
+"    指定されたファイルの変更内容を管理領域に記録(コミット)します。\n"
+"    RCS のような中央集権的なツールと異なり、この操作は手元の管理領域に\n"
+"    対する記録しか行いません。変更を能動的に公開する方法に関しては\n"
+"    'hg help push' を参照してください。\n"
+"\n"
+"    ファイル指定が省略された場合、'hg status' により検出される全ての\n"
 "    変更内容がコミットされます。\n"
 "\n"
-"    \"hg merge\" 結果のコミットの場合、ファイル名ないし -I/-X オプションの\n"
-"    いずれも指定しないでください。\n"
+"    'hg merge' 結果をコミットする場合、ファイル名ないし -I/-X のいずれも\n"
+"    指定しないでください。\n"
 "\n"
 "    コミットメッセージが指定されない場合、設定に従ってメッセージ入力用の\n"
 "    プログラムが起動されます。\n"
@@ -5410,11 +5773,11 @@
 "    "
 
 msgid "created new head\n"
-msgstr ""
+msgstr "新規ヘッドが増えました\n"
 
 #, python-format
 msgid "committed changeset %d:%s\n"
-msgstr ""
+msgstr "コミット対象リビジョン %d:%s\n"
 
 msgid ""
 "mark files as copied for the next commit\n"
@@ -5424,7 +5787,7 @@
 "    the source must be a single file.\n"
 "\n"
 "    By default, this command copies the contents of files as they\n"
-"    stand in the working directory. If invoked with --after, the\n"
+"    exist in the working directory. If invoked with -A/--after, the\n"
 "    operation is recorded, but no copying is performed.\n"
 "\n"
 "    This command takes effect with the next commit. To undo a copy\n"
@@ -5433,78 +5796,86 @@
 msgstr ""
 "指定されたファイルの複製\n"
 "\n"
-"    対象ファイルが複製元の複製であることを記録します。複製先指定が\n"
-"    ディレクトリの場合、ディレクトリ内に複製が作成されます。\n"
-"    複製先指定がファイルの場合、複製元は1つしか指定できません。\n"
-"\n"
-"    特に指定が無い場合本コマンドは、複製元ファイルの内容で作業領域に\n"
-"    指定された名前のファイルを作成します。--after 指定がある場合、「複製」\n"
-"    操作は記録されますが、ファイルの複製は行われません。\n"
-"\n"
-"    本コマンドの実行結果は次回のコミットの際にリポジトリに記録されます。\n"
-"    コミット前に複製操作を取り消す方法は hg revert を参照してください。\n"
+"    対象ファイルが複製元からの複製であることを記録します。複製先指定が\n"
+"    ディレクトリの場合、ディレクトリ内に複製が作成されます。複製先指定が\n"
+"    ファイルの場合、複製元は1つしか指定できません。\n"
+"\n"
+"    特に指定が無い場合、複製元ファイルの内容を持つ複製先ファイルを作業\n"
+"    領域に作成します。-A/--after 指定がある場合、「複製」操作は記録され\n"
+"    ますが、ファイルの複製は行われません。\n"
+"\n"
+"    本コマンドの実行結果は次回のコミットの際に効果を発揮します。コミット\n"
+"    前に複製操作を取り消す方法は 'hg help revert' を参照してください。\n"
 "    "
 
 msgid "find the ancestor revision of two revisions in a given index"
-msgstr ""
+msgstr "指定範囲における2つのリビジョンの祖先リビジョンの検索"
 
 msgid "There is no Mercurial repository here (.hg not found)"
-msgstr ""
+msgstr "Mercurial リポジトリが見つかりません(.hg が不在です)"
 
 msgid "either two or three arguments required"
-msgstr ""
+msgstr "2ないし3の引数が必要です"
 
 msgid "returns the completion list associated with the given command"
-msgstr ""
+msgstr "指定コマンドの補完リストの作成"
 
 msgid "rebuild the dirstate as it would look like for the given revision"
-msgstr ""
+msgstr "指定リビジョン時点相当の dirstate の再構築"
 
 msgid "validate the correctness of the current dirstate"
-msgstr ""
+msgstr "現時点の dirstate の整合性検証"
 
 #, python-format
 msgid "%s in state %s, but not in manifest1\n"
-msgstr ""
+msgstr "%s の状態は %s ですが、管理対象ではありません\n"
 
 #, python-format
 msgid "%s in state %s, but also in manifest1\n"
-msgstr ""
+msgstr "%s の状態は %s ですが、既に管理対象になっています\n"
 
 #, python-format
 msgid "%s in state %s, but not in either manifest\n"
-msgstr ""
+msgstr "%s の状態は %s ですが、管理対象ではありません\n"
 
 #, python-format
 msgid "%s in manifest1, but listed as state %s"
-msgstr ""
+msgstr "%s は管理対象ですが、状態 %s です"
 
 msgid ".hg/dirstate inconsistent with current parent's manifest"
-msgstr ""
+msgstr "親リビジョンの管理情報と .hg/dirstate の間に不整合があります"
 
 msgid ""
 "show combined config settings from all hgrc files\n"
 "\n"
-"    With no args, print names and values of all config items.\n"
-"\n"
-"    With one arg of the form section.name, print just the value of\n"
-"    that config item.\n"
-"\n"
-"    With multiple args, print names and values of all config items\n"
-"    with matching section names."
+"    With no arguments, print names and values of all config items.\n"
+"\n"
+"    With one argument of the form section.name, print just the value\n"
+"    of that config item.\n"
+"\n"
+"    With multiple arguments, print names and values of all config\n"
+"    items with matching section names.\n"
+"\n"
+"    With --debug, the source (filename and line number) is printed\n"
+"    for each config item.\n"
+"    "
 msgstr ""
 "全設定ファイルによる最終的な設定内容の表示\n"
 "\n"
 "    引数指定が無い場合、全ての設定項目に対して、名前と値を表示します。\n"
 "\n"
-"    section.name 形式に合致する引数を1つだけ指定した場合、その設定項目の\n"
+"    'section.name' 形式に合致する引数を1つだけ指定した場合、その設定項目\n"
 "    値のみを表示します。\n"
 "\n"
 "    複数の引数が指定された場合、それらをセクション名とみなし、該当する\n"
-"    セクションの設定項目を全て表示します。"
+"    セクションの設定項目を全て表示します。\n"
+"\n"
+"    --debug 指定がある場合、設定項目毎に記述位置(ファイル名と行番号)が\n"
+"    表示されます。\n"
+"    "
 
 msgid "only one config item permitted"
-msgstr ""
+msgstr "複数の設定項目指定は無効です"
 
 msgid ""
 "manually set the parents of the current working directory\n"
@@ -5513,116 +5884,123 @@
 "    be used with care.\n"
 "    "
 msgstr ""
+"作業領域の親リビジョンの手動設定\n"
+"\n"
+"    本コマンドはリポジトリ変換ツールの作成に有用ですが、利用には注意が\n"
+"    必要です。\n"
+"    "
 
 msgid "show the contents of the current dirstate"
-msgstr ""
+msgstr "現時点の dirstate 内容の表示"
 
 #, python-format
 msgid "copy: %s -> %s\n"
-msgstr ""
+msgstr "%s から %s に複製\n"
 
 msgid "dump the contents of a data file revision"
-msgstr ""
+msgstr "データファイルリビジョンの内容表示"
 
 #, python-format
 msgid "invalid revision identifier %s"
-msgstr ""
+msgstr "リビジョン指定 %s は不正です"
 
 msgid "parse and display a date"
-msgstr ""
+msgstr "日付の解析および表示"
 
 msgid "dump the contents of an index file"
-msgstr ""
-
-msgid "dump an index DAG as a .dot file"
-msgstr ""
+msgstr "インデックスファイルの内容表示"
+
+msgid "dump an index DAG as a graphviz dot file"
+msgstr "インデックス DAG の 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 "パッチの検証中...\n"
 
 msgid " patch call failed:\n"
-msgstr ""
+msgstr " パッチ適用が失敗\n"
 
 msgid " unexpected patch output!\n"
-msgstr ""
+msgstr " 想定と異なるパッチ出力です\n"
 
 msgid " patch test failed!\n"
-msgstr ""
+msgstr " パッチ適用試験が失敗\n"
 
 msgid ""
 " (Current patch tool may be incompatible with patch, or misconfigured. "
 "Please check your .hgrc file)\n"
-msgstr ""
-
-msgid ""
-" Internal patcher failure, please report this error to http://www.selenic."
-"com/mercurial/bts\n"
-msgstr ""
+msgstr " (ツールが未対応なパッチ形式か、設定ミスです。設定確認が必要です)\n"
+
+msgid ""
+" Internal patcher failure, please report this error to http://mercurial."
+"selenic.com/bts/\n"
+msgstr ""
+" 内部パッチツールが機能しません。\n"
+"http://mercurial.selenic.com/bts へのエラー報告にご協力ください\n"
 
 msgid "Checking commit editor...\n"
-msgstr ""
+msgstr "メッセージ入力用エディタの検証中...\n"
 
 msgid " No commit editor set and can't find vi in PATH\n"
-msgstr ""
+msgstr " エディタが起動できません(vi にも PATH が通っていません)\n"
 
 msgid " (specify a commit editor in your .hgrc file)\n"
-msgstr ""
+msgstr " (コミットメッセージ用エディタを設定ファイルで設定してください)\n"
 
 #, python-format
 msgid " Can't find editor '%s' in PATH\n"
-msgstr ""
+msgstr " エディタ '%s' に PATH が通っていません\n"
 
 msgid "Checking username...\n"
-msgstr ""
+msgstr "ユーザ名の検証中...\n"
 
 msgid " (specify a username in your .hgrc file)\n"
-msgstr ""
+msgstr " (設定ファイルでユーザ名を設定してください)\n"
 
 msgid "No problems detected\n"
-msgstr ""
+msgstr "障害は検出されませんでした\n"
 
 #, python-format
 msgid "%s problems detected, please check your install!\n"
-msgstr ""
+msgstr "障害が%s件検出されました。インストール内容を確認してください\n"
 
 msgid "dump rename information"
-msgstr ""
+msgstr "改名情報の表示"
 
 #, python-format
 msgid "%s renamed from %s:%s\n"
-msgstr ""
+msgstr "%s は %s:%s で改名されました\n"
 
 #, python-format
 msgid "%s not renamed\n"
-msgstr ""
+msgstr "%s は改名されていません\n"
 
 msgid "show how files match on given patterns"
-msgstr ""
+msgstr "指定パターンへのファイル合致状況の表示"
 
 msgid ""
 "diff repository (or selected files)\n"
@@ -5641,12 +6019,12 @@
 "    revisions are specified, the working directory files are compared\n"
 "    to its parent.\n"
 "\n"
-"    Without the -a option, diff will avoid generating diffs of files\n"
-"    it detects as binary. With -a, diff will generate a diff anyway,\n"
-"    probably with undesirable results.\n"
-"\n"
-"    Use the --git option to generate diffs in the git extended diff\n"
-"    format. For more information, read hg help diffs.\n"
+"    Without the -a/--text option, diff will avoid generating diffs of\n"
+"    files it detects as binary. With -a, diff will generate a diff\n"
+"    anyway, probably with undesirable results.\n"
+"\n"
+"    Use the -g/--git option to generate diffs in the git extended diff\n"
+"    format. For more information, read 'hg help diffs'.\n"
 "    "
 msgstr ""
 "作業領域全体(ないし指定ファイル)の差分抽出\n"
@@ -5655,20 +6033,20 @@
 "\n"
 "    差分は unified diff 形式で表示されます。\n"
 "\n"
-"    備考: マージに対する差分表示が期待と異なる場合があるのは、\n"
-"    無指定時に比較対象となるのが作業領域の第1親リビジョンであるためです。\n"
+"    備考: マージに対する差分表示が期待と異なる場合があるのは、無指定時に\n"
+"    比較対象となるのが、作業領域の第1親であるためです。\n"
 "\n"
 "    リビジョンが2つ指定された場合、両リビジョン間の差分が表示されます。\n"
 "    リビジョンが1つ指定された場合、当該リビジョンと作業領域の内容が比較\n"
 "    され、リビジョンが1つも指定されない場合は、作業領域の内容と\n"
 "    親リビジョンとが比較されます。\n"
 "\n"
-"    -a オプション指定が無い場合、バイナリと思しきファイルは処理対象から\n"
-"    除外します。-a オプション指定が有る場合、想定外の結果になろうとも、\n"
-"    全てのファイルに処理を実施します。\n"
-"\n"
-"    git 拡張差分形式で表示するには --git オプションを指定します。\n"
-"    詳細は \"hg help diffs\" を参照してください。\n"
+"    -a/--text 指定が無い場合、バイナリと思しきファイルは処理対象から\n"
+"    除外されます。-a 指定が有る場合、結果に関わらず全てのファイルが\n"
+"    処理対象となります。\n"
+"\n"
+"    git 拡張差分形式で表示するには -g/--git を指定します。詳細は\n"
+"    'hg help diffs' を参照してください。\n"
 "    "
 
 msgid ""
@@ -5679,8 +6057,9 @@
 "    The information shown in the changeset header is: author,\n"
 "    changeset hash, parent(s) and commit comment.\n"
 "\n"
-"    NOTE: export may generate unexpected diff output for merge changesets,\n"
-"    as it will compare the merge changeset against its first parent only.\n"
+"    NOTE: export may generate unexpected diff output for merge\n"
+"    changesets, as it will compare the merge changeset against its\n"
+"    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"
@@ -5694,28 +6073,28 @@
 "    %n   zero-padded sequence number, starting at 1\n"
 "    %r   zero-padded changeset revision number\n"
 "\n"
-"    Without the -a option, export will avoid generating diffs of files\n"
-"    it detects as binary. With -a, export will generate a diff anyway,\n"
-"    probably with undesirable results.\n"
-"\n"
-"    Use the --git option to generate diffs in the git extended diff\n"
-"    format. Read the diffs help topic for more information.\n"
-"\n"
-"    With the --switch-parent option, the diff will be against the second\n"
-"    parent. It can be useful to review a merge.\n"
-"    "
-msgstr ""
-"1つ以上のチェンジセットに対するヘッダおよび変更内容の出力\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"
+"    diff anyway, probably with undesirable results.\n"
+"\n"
+"    Use the -g/--git option to generate diffs in the git extended diff\n"
+"    format. See 'hg help diffs' for more information.\n"
+"\n"
+"    With the --switch-parent option, the diff will be against the\n"
+"    second parent. It can be useful to review a merge.\n"
+"    "
+msgstr ""
+"1つ以上のリビジョンに対するヘッダおよび変更内容の出力\n"
 "\n"
 "    1つ以上のリビジョンに対して、ヘッダ情報および変更内容を表示します。\n"
 "\n"
 "    ヘッダ情報には以下の情報が含まれます: \n"
-"    作成者/ハッシュ値/親リビジョン/コミットログ\n"
-"\n"
-"    備考: 本コマンドがマージ実施チェンジセットに対して、期待と異なる差分を\n"
+"        作成者/ハッシュ値/親リビジョン/コミットログ\n"
+"\n"
+"    備考: 本コマンドがマージ実施リビジョンに対して、期待と異なる差分を\n"
 "    出力するのは、第1親との差分のみを出力するためです。\n"
 "\n"
-"    (置換指定可能な)出力先指定がある場合、出力はファイルに保存されます。\n"
+"    出力先指定(置換指定可能)がある場合、出力はファイルに保存されます。\n"
 "    置換指定として以下のものが使用可能です:\n"
 "\n"
 "    %%   \"%\" 文字そのもの\n"
@@ -5727,25 +6106,55 @@
 "    %n   1から始まるゼロ詰めの通し番号\n"
 "    %r   ゼロ詰めのリビジョン番号\n"
 "\n"
-"    -a オプション指定が無い場合、バイナリと思しきファイルは処理対象から\n"
-"    除外します。-a オプション指定が有る場合、想定外の結果になろうとも、\n"
-"    全てのファイルに処理を実施します。\n"
-"\n"
-"    git 拡張差分形式で表示するには --git オプションを指定します。\n"
-"    詳細は \"hg help diffs\" を参照してください。\n"
-"\n"
-"    --switch-parent オプションを指定することで、比較対象が第2親になります。\n"
+"    -a/--text 指定が無い場合、バイナリと思しきファイルは処理対象から\n"
+"    除外されます。-a 指定が有る場合、結果に関わらず全てのファイルが\n"
+"    処理対象となります。\n"
+"\n"
+"    git 拡張差分形式で出力するには -g/--git を指定します。詳細は\n"
+"    'hg help diffs' を参照してください。\n"
+"\n"
+"    --switch-parent を指定することで、比較対象が第2親になります。\n"
 "    これはマージのレビューの際などに有効です。\n"
 "    "
 
 msgid "export requires at least one changeset"
-msgstr ""
+msgstr "最低1つのリビジョン指定が必要です"
 
 msgid "exporting patches:\n"
-msgstr ""
+msgstr "パッチの作成中:\n"
 
 msgid "exporting patch:\n"
-msgstr ""
+msgstr "パッチの作成中:\n"
+
+msgid ""
+"forget the specified files on the next commit\n"
+"\n"
+"    Mark the specified files so they will no longer be tracked\n"
+"    after the next commit.\n"
+"\n"
+"    This only removes files from the current branch, not from the\n"
+"    entire project history, and it does not delete them from the\n"
+"    working directory.\n"
+"\n"
+"    To undo a forget before the next commit, see hg add.\n"
+"    "
+msgstr ""
+"次回コミットにおける指定ファイルの登録除外\n"
+"\n"
+"    指定ファイルの次回コミットにおける登録除外を予約します。\n"
+"\n"
+"    本コマンドでの登録除外は、現ブランチにおける登録除外のみを意味し、\n"
+"    履歴そのものは保持され続けますし、作業領域からも削除されません。\n"
+"\n"
+"    コミット前の登録除外の取り消しは 'hg help add' を参照してください。\n"
+"    "
+
+msgid "no files specified"
+msgstr "ファイル名指定がありません"
+
+#, python-format
+msgid "not removing %s: file is already untracked\n"
+msgstr "%s は削除されません: 既に構成管理対象ではありません\n"
 
 msgid ""
 "search for a pattern in specified files and revisions\n"
@@ -5754,8 +6163,8 @@
 "\n"
 "    This command behaves differently than Unix grep. It only accepts\n"
 "    Python/Perl regexps. It searches repository history, not the\n"
-"    working directory. It always prints the revision number in which\n"
-"    a match appears.\n"
+"    working directory. It always prints the revision number in which a\n"
+"    match appears.\n"
 "\n"
 "    By default, grep only prints output for the first revision of a\n"
 "    file in which it finds a match. To get it to print every revision\n"
@@ -5775,64 +6184,79 @@
 "\n"
 "    指定が無い場合本コマンドは、パターンに合致する内容が最小に現れた\n"
 "    リビジョンを各ファイル毎に表示します。パターンに合致する変更のあった\n"
-"    全てのリビジョンを表示する場合、--all オプションを指定します\n"
-"    (パターン合致部分の削除は \"-\"、登場は \"+\" を表示することで区別)。\n"
+"    全てのリビジョンを表示する場合、--all を指定します(パターン合致部分に\n"
+"    対する削除は \"-\"、追加は \"+\" を検索結果に表示することで区別)。\n"
 "    "
 
 #, python-format
 msgid "grep: invalid match pattern: %s\n"
-msgstr ""
+msgstr "grep: '%s' は不正なパターンです\n"
 
 msgid ""
 "show current repository heads or show branch heads\n"
 "\n"
 "    With no arguments, show all repository head changesets.\n"
 "\n"
-"    If branch or revisions names are given this will show the heads of\n"
-"    the specified branches or the branches those revisions are tagged\n"
-"    with.\n"
-"\n"
 "    Repository \"heads\" are changesets that don't have child\n"
 "    changesets. They are where development generally takes place and\n"
 "    are the usual targets for update and merge operations.\n"
 "\n"
-"    Branch heads are changesets that have a given branch tag, but have\n"
-"    no child changesets with that tag. They are usually where\n"
-"    development on the given branch takes place.\n"
+"    If one or more REV is given, the \"branch heads\" will be shown for\n"
+"    the named branch associated with that revision. The name of the\n"
+"    branch is called the revision's branch tag.\n"
+"\n"
+"    Branch heads are revisions on a given named branch that do not have\n"
+"    any descendants on the same branch. A branch head could be a true head\n"
+"    or it could be the last changeset on a branch before a new branch\n"
+"    was created. If none of the branch heads are true heads, the branch\n"
+"    is considered inactive.\n"
+"\n"
+"    If STARTREV is specified only those heads (or branch heads) that\n"
+"    are descendants of STARTREV will be displayed.\n"
 "    "
 msgstr ""
 "現時点でのリポジトリ(ないしブランチ)のヘッド表示\n"
 "\n"
 "    引数指定が無い場合、リポジトリ中の全てのヘッドを表示します。\n"
 "\n"
-"    ブランチないしリビジョンが指定された場合本コマンドは、指定された\n"
-"    ブランチ、ないし指定リビジョンが属するブランチのヘッドを表示します。\n"
-"\n"
-"    リポジトリの「ヘッド」とは、子チェンジセットを持たないチェンジセットの\n"
+"    リポジトリの「ヘッド」とは、子リビジョンを持たないリビジョンの\n"
 "    ことを指します。改変作業の実施や、update/merge コマンド実施の際には\n"
-"    このチェンジセットを対象とするのが一般的です。\n"
-"\n"
-"    ブランチのヘッドは、当該ブランチに属しつつ、そのブランチに属する\n"
-"    子チェンジセットを持たないチェンジセットのことを指します。\n"
-"    当該ブランチでの作業はこのチェンジセットを対象とするのが一般的です。\n"
-"    "
+"    このリビジョンを対象とするのが一般的です。\n"
+"\n"
+"    1つ以上のリビジョンが指定された場合、本コマンドは指定リビジョンの属\n"
+"    する名前付きブランチの「ブランチヘッド」を表示します。\n"
+"\n"
+"    ブランチのヘッドとは、当該ブランチに属しつつ、そのブランチに属する\n"
+"    子リビジョンを持たないリビジョンのことを指します。ブランチヘッドは\n"
+"    真のヘッドである場合と、新たな枝分かれやマージの直前のリビジョンで\n"
+"    ある場合のいずれかです。いずれのヘッドも真のヘッドで無い場合、その\n"
+"    ブランチは非アクティブとみなされます。\n"
+"\n"
+"    開始リビジョンが指定された場合、指定リビジョンの子孫となるヘッド\n"
+"    のみが表示されます。\n"
+"    "
+
+#, python-format
+msgid "no open branch heads on branch %s\n"
+msgstr "ブランチ %s にはオープンなヘッドがありません\n"
 
 #, python-format
 msgid "no changes on branch %s containing %s are reachable from %s\n"
-msgstr ""
+msgstr "ブランチ %s のリビジョンは(%s も含めて) %s から到達できません\n"
 
 #, python-format
 msgid "no changes on branch %s are reachable from %s\n"
-msgstr ""
+msgstr "ブランチ %s のリビジョンは %s から到達できません\n"
 
 msgid ""
 "show help for a given topic or a help overview\n"
 "\n"
-"    With no arguments, print a list of commands and short help.\n"
-"\n"
-"    Given a topic, extension, or command name, print help for that topic."
-msgstr ""
-"指定されたトピックのヘルプやヘルプ概要の表示\n"
+"    With no arguments, print a list of commands with short help messages.\n"
+"\n"
+"    Given a topic, extension, or command name, print help for that\n"
+"    topic."
+msgstr ""
+"指定されたトピックのヘルプや、ヘルプ概要の表示\n"
 "\n"
 "    引数指定が無い場合、コマンドの一覧と概要を表示します。\n"
 "\n"
@@ -5872,33 +6296,23 @@
 "別名: %s\n"
 
 msgid "(no help text available)"
-msgstr ""
+msgstr "(ヘルプはありません)"
 
 msgid "options:\n"
 msgstr "オプション:\n"
 
 msgid "no commands defined\n"
-msgstr ""
-
-msgid ""
-"\n"
-"enabled extensions:\n"
-"\n"
-msgstr ""
-"\n"
-"利用可能な拡張機能:\n"
-"\n"
-
-#, python-format
-msgid " %s   %s\n"
-msgstr ""
+msgstr "コマンドが定義されていません\n"
+
+msgid "enabled extensions:"
+msgstr "有効化されているエクステンション:"
 
 msgid "no help text available"
-msgstr ""
+msgstr "ヘルプはありません"
 
 #, python-format
 msgid "%s extension - %s\n"
-msgstr ""
+msgstr "%s エクステンション - %s\n"
 
 msgid "Mercurial Distributed SCM\n"
 msgstr "Mercurial - 分散構成管理ツール\n"
@@ -5922,26 +6336,30 @@
 msgid ""
 "identify the working copy or specified revision\n"
 "\n"
-"    With no revision, print a summary of the current state of the repo.\n"
-"\n"
-"    With a path, do a lookup in another repository.\n"
-"\n"
-"    This summary identifies the repository state using one or two parent\n"
-"    hash identifiers, followed by a \"+\" if there are uncommitted changes\n"
-"    in the working directory, a list of tags for this revision and a branch\n"
-"    name for non-default branches.\n"
+"    With no revision, print a summary of the current state of the\n"
+"    repository.\n"
+"\n"
+"    Specifying a path to a repository root or Mercurial bundle will\n"
+"    cause lookup to operate on that repository/bundle.\n"
+"\n"
+"    This summary identifies the repository state using one or two\n"
+"    parent hash identifiers, followed by a \"+\" if there are\n"
+"    uncommitted changes in the working directory, a list of tags for\n"
+"    this revision and a branch name for non-default branches.\n"
 "    "
 msgstr ""
 "作業領域ないし特定リビジョンの識別情報表示\n"
 "\n"
-"    リビジョン指定無しの起動では、作業領域の状態を表示します。\n"
-"\n"
-"    パス指定有りでの起動の場合は、他のリポジトリを参照します。\n"
-"\n"
-"    本コマンドの出力する要約情報は、1つないし2つの親リビジョンハッシュ値を\n"
-"    使用して、作業領域の状態を識別します。ハッシュ値の後ろには、作業領域に\n"
-"    未コミットの変更がある場合は \"+\"、当該リビジョンに付いているタグの\n"
-"    一覧、default 以外のブランチの場合にはブランチ名が続きます。\n"
+"    リビジョン指定無しの起動の際には、作業領域の状態を表示します。\n"
+"\n"
+"    パス指定有りでの起動の際には、他のリポジトリないしバンドルファイルの\n"
+"    状態を表示します。\n"
+"\n"
+"    本コマンドの出力する要約情報は、1つないし2つの親リビジョンのハッシュ\n"
+"    値を使用して、作業領域の状態を識別します。作業領域に未コミットの\n"
+"    変更がある場合は \"+\"、当該リビジョンにタグが付いている場合はタグの\n"
+"    一覧、default 以外のブランチの場合にはブランチ名が、ハッシュ値の後に\n"
+"    続きます。\n"
 "    "
 
 msgid ""
@@ -5950,29 +6368,31 @@
 "    Import a list of patches and commit them individually.\n"
 "\n"
 "    If there are outstanding changes in the working directory, import\n"
-"    will abort unless given the -f flag.\n"
+"    will abort unless given the -f/--force flag.\n"
 "\n"
 "    You can import a patch straight from a mail message. Even patches\n"
-"    as attachments work (body part must be type text/plain or\n"
-"    text/x-patch to be used). From and Subject headers of email\n"
+"    as attachments work (to use the body part, it must have type\n"
+"    text/plain or text/x-patch). From and Subject headers of email\n"
 "    message are used as default committer and commit message. All\n"
 "    text/plain body parts before first diff are added to commit\n"
 "    message.\n"
 "\n"
-"    If the imported patch was generated by hg export, user and description\n"
-"    from patch override values from message headers and body. Values\n"
-"    given on command line with -m and -u override these.\n"
-"\n"
-"    If --exact is specified, import will set the working directory\n"
-"    to the parent of each patch before applying it, and will abort\n"
-"    if the resulting changeset has a different ID than the one\n"
-"    recorded in the patch. This may happen due to character set\n"
-"    problems or other deficiencies in the text patch format.\n"
-"\n"
-"    With --similarity, hg will attempt to discover renames and copies\n"
-"    in the patch in the same way as 'addremove'.\n"
-"\n"
-"    To read a patch from standard input, use patch name \"-\".\n"
+"    If the imported patch was generated by hg export, user and\n"
+"    description from patch override values from message headers and\n"
+"    body. Values given on command line with -m/--message and -u/--user\n"
+"    override these.\n"
+"\n"
+"    If --exact is specified, import will set the working directory to\n"
+"    the parent of each patch before applying it, and will abort if the\n"
+"    resulting changeset has a different ID than the one recorded in\n"
+"    the patch. This may happen due to character set problems or other\n"
+"    deficiencies in the text patch format.\n"
+"\n"
+"    With -s/--similarity, hg will attempt to discover renames and\n"
+"    copies in the patch in the same way as 'addremove'.\n"
+"\n"
+"    To read a patch from standard input, use \"-\" as the patch name. If\n"
+"    a URL is specified, the patch will be downloaded from it.\n"
 "    See 'hg help dates' for a list of formats valid for -d/--date.\n"
 "    "
 msgstr ""
@@ -5980,81 +6400,85 @@
 "\n"
 "    列挙されたパッチの取り込みおよびコミットを個別に行います。\n"
 "\n"
-"    作業領域に未コミットの変更がある場合、-f フラグが指定されない限り\n"
-"    取り込みは中断されます。\n"
-"\n"
-"    電子メールから直接パッチを取り込むことも可能です。添付ファイル形式の\n"
-"    パッチであっても取り込み可能です(text/plain ないし text/x-patch 型\n"
-"    でなければなりません)。電子メールの From および Subject ヘッダは\n"
-"    無指定時の作成者およびコミットログとして使用されます。\n"
-"    最初のパッチデータよりも前の text/plain 型ボディの内容は、\n"
-"    コミットログに対して追加されます。\n"
-"\n"
-"    hg export により生成されたパッチを取り込む場合、電子メールのヘッダや\n"
-"    ボディ部分の情報よりも、パッチに含まれる情報の方が優先します。\n"
-"    コマンドラインでの -m ないし -u 指定は、これらよりも優先します。\n"
-"\n"
-"    --exact が指定された際には、作業領域をそれぞれのパッチの親リビジョンで\n"
-"    更新してからパッチの適用を実施しますが、作成されたチェンジセットのIDが\n"
-"    パッチに記録された ID と異なる場合、パッチの適用を中断します。\n"
-"    この中断は、利用する文字符号化の問題や、パッチのテキスト部分の不足\n"
-"    といったことが原因で発生する可能性もあります。\n"
-"\n"
-"    --similarity が指定された際には、パッチによる変更における改名や複製を\n"
-"    hg addremove と同様な方針で特定します。\n"
-"\n"
-"    標準入力からパッチを取り込むには、パッチ名に \"-\" を指定してください。\n"
+"    作業領域に未コミットの変更がある場合、-f/--force が指定されない限り\n"
+"    取り込みは実施されません。\n"
+"\n"
+"    電子メールから直接パッチを取り込むことも可能です。添付ファイル\n"
+"    形式のパッチであっても取り込み可能です(text/plain ないし \n"
+"    text/x-patch 型でなければなりません)。作成者およびコミットログが無い\n"
+"    場合、電子メールの From および Subject ヘッダ値が使用されます。\n"
+"    最初のパッチデータに先立つ text/plain ボディは、コミットログに追記\n"
+"    されます。\n"
+"\n"
+"    'hg export' により生成されたパッチを取り込む場合、電子メールの\n"
+"    ヘッダやボディの情報よりも、パッチに含まれる情報の方が優先します。\n"
+"    コマンドラインでの -m/--message ないし -u/--user 指定はこれらよりも\n"
+"    優先します。\n"
+"\n"
+"    --exact が指定された場合、作業領域をパッチの親リビジョンに更新して\n"
+"    からパッチを適用しますが、作成されたリビジョンのハッシュ値が、パッチ\n"
+"    に記録された値と異なる場合、取り込みは実施されません。この現象は、\n"
+"    利用する文字符号化の問題や、パッチのテキスト部分の不足などが原因で\n"
+"    発生する可能性があります。\n"
+"\n"
+"    -s/--similarity が指定された場合、'hg addremove' と同様な方針で、\n"
+"    パッチによる変更内容から、改名や複製を検出します。\n"
+"\n"
+"    標準入力からパッチを取り込むには、パッチ名に \"-\" を指定します。\n"
+"    URL が指定された場合、パッチを当該 URL からダウンロードします。\n"
 "    -d/--date への指定に関しては、'hg help dates' を参照してください。\n"
 "    "
 
 msgid "applying patch from stdin\n"
-msgstr ""
+msgstr "標準入力からのパッチを適用中\n"
 
 msgid "no diffs found"
-msgstr ""
+msgstr "差分がありません"
 
 #, python-format
 msgid ""
 "message:\n"
 "%s\n"
 msgstr ""
-
-msgid "not a mercurial patch"
-msgstr ""
+"メッセージ:\n"
+"%s\n"
+
+msgid "not a Mercurial patch"
+msgstr "Mercurial 向けのパッチではありません"
 
 msgid "patch is damaged or loses information"
-msgstr ""
+msgstr "パッチには破損ないし情報の欠落があります"
 
 msgid ""
 "show new changesets found in source\n"
 "\n"
 "    Show new changesets found in the specified path/URL or the default\n"
-"    pull location. These are the changesets that would be pulled if a pull\n"
-"    was requested.\n"
-"\n"
-"    For remote repository, using --bundle avoids downloading the changesets\n"
-"    twice if the incoming is followed by a pull.\n"
+"    pull location. These are the changesets that would have been pulled\n"
+"    if a pull at the time you issued this command.\n"
+"\n"
+"    For remote repository, using --bundle avoids downloading the\n"
+"    changesets twice if the incoming is followed by a pull.\n"
 "\n"
 "    See pull for valid source format details.\n"
 "    "
 msgstr ""
-"指定リポジトリ中の未取り込みチェンジセットの検索\n"
-"\n"
-"    ファイルパスや URL、hg pull の default 取り込み対象により指定される\n"
-"    リポジトリ中の、未取り込みチェンジセットを検索します。\n"
-"    これらは、hg pull を実行した際に取り込まれる予定のチェンジセットです。\n"
+"指定リポジトリ中の未取り込みリビジョンの検索\n"
+"\n"
+"    ファイルパスや URL、'hg pull' の default 取り込み対象により指定\n"
+"    されるリポジトリ中の、未取り込みリビジョンを検索します。\n"
+"    これらは、'hg pull' を実行した際の取り込み対象リビジョンです。\n"
 "\n"
 "    遠隔ホストのリポジトリの場合、--bundle を使用することで、本コマンド\n"
-"    実行後の hg pull 実施の際に、再度のチェンジセット検索を抑止できます。\n"
-"\n"
-"    対象リポジトリの指定形式の詳細は hg pull のヘルプを参照してください。\n"
+"    実行後の 'hg pull' 実施の際に、再度のリビジョン検索を抑止できます。\n"
+"\n"
+"    対象リポジトリの指定形式は 'hg help pull' を参照してください。\n"
 "    "
 
 msgid ""
 "create a new repository in the given directory\n"
 "\n"
 "    Initialize a new repository in the given directory. If the given\n"
-"    directory does not exist, it is created.\n"
+"    directory does not exist, it will be created.\n"
 "\n"
 "    If no directory is given, the current directory is used.\n"
 "\n"
@@ -6064,7 +6488,7 @@
 msgstr ""
 "指定されたディレクトリでの新規リポジトリの作成\n"
 "\n"
-"    指定されたリポジトリを新規リポジトリとして初期化します。指定された\n"
+"    指定されたディレクトリに新規リポジトリを作成します。指定された\n"
 "    ディレクトリが存在しない場合には、ディレクトリを作成します。\n"
 "\n"
 "    ディレクトリが指定されない場合、現ディレクトリが初期化されます。\n"
@@ -6076,37 +6500,38 @@
 msgid ""
 "locate files matching specific patterns\n"
 "\n"
-"    Print all files under Mercurial control whose names match the\n"
-"    given patterns.\n"
-"\n"
-"    This command searches the entire repository by default. To search\n"
-"    just the current directory and its subdirectories, use\n"
-"    \"--include .\".\n"
-"\n"
-"    If no patterns are given to match, this command prints all file\n"
-"    names.\n"
+"    Print files under Mercurial control in the working directory whose\n"
+"    names match the given patterns.\n"
+"\n"
+"    By default, this command searches all directories in the working\n"
+"    directory. To search just the current directory and its\n"
+"    subdirectories, use \"--include .\".\n"
+"\n"
+"    If no patterns are given to match, this command prints the names\n"
+"    of all files under Mercurial control in the working directory.\n"
 "\n"
 "    If you want to feed the output of this command into the \"xargs\"\n"
-"    command, use the \"-0\" option to both this command and \"xargs\".\n"
-"    This will avoid the problem of \"xargs\" treating single filenames\n"
-"    that contain white space as multiple filenames.\n"
+"    command, use the -0 option to both this command and \"xargs\". This\n"
+"    will avoid the problem of \"xargs\" treating single filenames that\n"
+"    contain whitespace as multiple filenames.\n"
 "    "
 msgstr ""
 "指定されたパターンに合致する名前を持つファイルの特定\n"
 "\n"
-"    構成管理対象となるファイルの中から、指定されたパターンに合致する名前を\n"
-"    持つファイルを特定します。\n"
+"    構成管理対象となるファイルの中から、指定されたパターンに合致する\n"
+"    名前のファイルを特定します。\n"
 "\n"
 "    特に指定が無い場合、本コマンドは構成管理対象となる作業領域中の\n"
-"    全ファイルを検索対象とします。現ディレクトリとサブディレクトリのみを\n"
-"    検索対象とするには、\"--include .\" を使用してください。\n"
-"\n"
-"    パターン指定が無い場合、本コマンドは全てのファイル名を表示します。\n"
+"    全ディレクトリを検索対象とします。現ディレクトリとその配下のみを検索\n"
+"    対象とする場合は \"--include .\" を指定します。\n"
+"\n"
+"    パターン指定が無い場合、本コマンドは構成管理対象下にある作業領域中の\n"
+"    全てのファイル名を表示します。\n"
 "\n"
 "    本コマンドの出力を \"xargs\" コマンドへと渡す場合、本コマンドと\n"
-"    \"xargs\" コマンドの両方への \"-0\" オプション指定をお勧めします。\n"
-"    空白文字を含む単一のファイル名が、複数のファイル名に解釈されてしまう\n"
-"    \"xargs\" の問題は、このオプションにより解決することができます。\n"
+"    \"xargs\" コマンドの両方に \"-0\" を指定することをお勧めします。\n"
+"    空白文字を含む単一のファイル名を、\"xargs\" が複数のファイル名に解釈\n"
+"    してしまう問題は、このオプションにより解消されます。\n"
 "    "
 
 msgid ""
@@ -6116,8 +6541,8 @@
 "    project.\n"
 "\n"
 "    File history is shown without following rename or copy history of\n"
-"    files. Use -f/--follow with a file name to follow history across\n"
-"    renames and copies. --follow without a file name will only show\n"
+"    files. Use -f/--follow with a filename to follow history across\n"
+"    renames and copies. --follow without a filename will only show\n"
 "    ancestors or descendants of the starting revision. --follow-first\n"
 "    only follows the first parent of merge revisions.\n"
 "\n"
@@ -6127,102 +6552,96 @@
 "\n"
 "    See 'hg help dates' for a list of formats valid for -d/--date.\n"
 "\n"
-"    By default this command outputs: changeset id and hash, tags,\n"
-"    non-trivial parents, user, date and time, and a summary for each\n"
-"    commit. When the -v/--verbose switch is used, the list of changed\n"
-"    files and full commit message is shown.\n"
-"\n"
-"    NOTE: log -p may generate unexpected diff output for merge\n"
+"    By default this command prints revision number and changeset id,\n"
+"    tags, non-trivial parents, user, date and time, and a summary for\n"
+"    each commit. When the -v/--verbose switch is used, the list of\n"
+"    changed files and full commit message are shown.\n"
+"\n"
+"    NOTE: log -p/--patch may generate unexpected diff output for merge\n"
 "    changesets, as it will only compare the merge changeset against\n"
-"    its first parent. Also, the files: list will only reflect files\n"
-"    that are different from BOTH parents.\n"
-"\n"
+"    its first parent. Also, only files different from BOTH parents\n"
+"    will appear in files:.\n"
 "    "
 msgstr ""
 "リポジトリ全体ないしファイルの変更履歴の表示\n"
 "\n"
 "    特定のファイルないしリポジトリ全体の変更履歴を表示します。\n"
 "\n"
-"    ファイルの履歴表示では、改名や複製における元ファイルにまでさかのぼった\n"
-"    履歴は表示しません。元ファイルの履歴までさかのぼる場合は、ファイル名と\n"
-"    一緒に -f/--follow オプションを指定してください。--follow 指定の際に\n"
-"    ファイル名を指定しない場合は、開始リビジョンの先祖ないし子孫リビジョン\n"
-"    のみを表示します。--follow-first 指定は、マージリビジョンにおいて\n"
-"    第1親の履歴のみをさかのぼります。\n"
-"\n"
-"    対象リビジョンの範囲が指定されない場合、対象となるリビジョンの範囲は\n"
-"    tip:0 とみなされますが、--follow が指定された場合は、作業領域の\n"
-"    親リビジョンが開始リビジョンとみなされます。\n"
+"    ファイルの履歴表示では、改名/複製時の元ファイルにまでさかのぼった\n"
+"    履歴は表示しません。元ファイルの履歴をさかのぼる場合は、ファイル\n"
+"    名と一緒に -f/--follow を使用します。--follow 指定の際にファイル\n"
+"    名が指定されない場合は、開始リビジョンに連なるリビジョンのみを表示\n"
+"    します。--follow-first 指定は、マージリビジョンにおいて第1親の履歴\n"
+"    のみをさかのぼります。\n"
+"\n"
+"    特に指定されない場合、対象となるリビジョンの範囲はtip:0 とみなされ\n"
+"    ますが、--follow が指定された場合は、作業領域の親リビジョンが開始\n"
+"    リビジョンとみなされます。\n"
 "\n"
 "    -d/--date への指定に関しては、'hg help dates' を参照してください。\n"
 "\n"
 "    特に指定が無い場合、本コマンドは以下の情報を出力します:\n"
-"    リビジョン番号、ハッシュID、タグ、(リビジョン番号の離れた),\n"
-"    親リビジョン、作成者、作成日時およびコミットログの1行目。\n"
-"    -v/--verbose が指定された場合、変更対象ファイル一覧と、コミットログの\n"
-"    全文が表示されます。\n"
-"\n"
-"    備考: -p オプションがマージチェンジセットに対して予期せぬ差分を出力\n"
-"    するのは、常に第1親との差分を表示するためです。ファイル一覧が予期せぬ\n"
-"    内容となるのは、両方の親と異なるファイルのみが列挙されるためです。\n"
-"\n"
-"    "
-
-msgid ""
-"looks up all renames for a file (up to endrev) the first\n"
-"        time the file is given. It indexes on the changerev and only\n"
-"        parses the manifest if linkrev != changerev.\n"
-"        Returns rename info for fn at changerev rev."
-msgstr ""
+"\n"
+"        リビジョン番号、ハッシュ値、タグ、(リビジョン番号の離れた)\n"
+"        親リビジョン、作成者、作成日時およびコミットログの1行目\n"
+"\n"
+"    -v/--verbose が指定された場合、変更対象ファイル一覧と、コミット\n"
+"    ログの全文も表示されます。\n"
+"\n"
+"    備考: マージ実施リビジョンに対する -p/--patch が予期せぬ出力を生成\n"
+"    するのは、常に第1親との差分を表示するためです。ファイル一覧が予期\n"
+"    せぬ内容となるのは、両方の親と異なるファイルが列挙されるためです。\n"
+"    "
 
 msgid ""
 "output the current or given revision of the project manifest\n"
 "\n"
 "    Print a list of version controlled files for the given revision.\n"
-"    If no revision is given, the parent of the working directory is used,\n"
-"    or tip if no revision is checked out.\n"
-"\n"
-"    The manifest is the list of files being version controlled. If no "
-"revision\n"
-"    is given then the first parent of the working directory is used.\n"
-"\n"
-"    With -v flag, print file permissions, symlink and executable bits. With\n"
-"    --debug flag, print file revision hashes.\n"
+"    If no revision is given, the first parent of the working directory\n"
+"    is used, or the null revision if no revision is checked out.\n"
+"\n"
+"    With -v, print file permissions, symlink and executable bits.\n"
+"    With --debug, print file revision hashes.\n"
 "    "
 msgstr ""
 "現時点ないし指定時点でのリポジトリマニフェストの出力\n"
 "\n"
-"    指定リビジョンでの構成管理対象ファイルの一覧を表示します。\n"
+"    指定リビジョンにおける構成管理対象ファイルの一覧を表示します。\n"
 "    リビジョン指定が無い場合、作業領域の(第1)親リビジョンか、\n"
-"    作業領域の更新前なら tip が使用されます。\n"
-"\n"
-"    「マニフェスト」とは、構成管理対象ファイルの一覧を指します。\n"
+"    作業領域の更新前なら null が使用されます。\n"
 "\n"
 "    -v が指定された場合、ファイルアクセス権やシンボリックリンク、\n"
 "    実行可能ビットといったものも表示されます。\n"
-"    --debug が指定された場合、リビジョンのハッシュ値が表示されます。\n"
+"    --debug が指定された場合、各ファイルのリビジョンのハッシュ値が\n"
+"    表示されます。\n"
 "    "
 
 msgid ""
 "merge working directory with another revision\n"
 "\n"
-"    Merge the contents of the current working directory and the\n"
-"    requested revision. Files that changed between either parent are\n"
-"    marked as changed for the next commit and a commit must be\n"
-"    performed before any further updates are allowed.\n"
+"    The current working directory is updated with all changes made in\n"
+"    the requested revision since the last common predecessor revision.\n"
+"\n"
+"    Files that changed between either parent are marked as changed for\n"
+"    the next commit and a commit must be performed before any further\n"
+"    updates to the repository are allowed. The next commit will have\n"
+"    two parents.\n"
 "\n"
 "    If no revision is specified, the working directory's parent is a\n"
-"    head revision, and the current branch contains exactly one other head,\n"
-"    the other head is merged with by default. Otherwise, an explicit\n"
-"    revision to merge with must be provided.\n"
+"    head revision, and the current branch contains exactly one other\n"
+"    head, the other head is merged with by default. Otherwise, an\n"
+"    explicit revision with which to merge with must be provided.\n"
 "    "
 msgstr ""
 "作業領域の内容と他のリビジョンのマージ\n"
 "\n"
-"    現時点での作業領域の内容を、指定されたリビジョンとマージします。\n"
-"    両方の親リビジョンに対して変更のあるファイルは、次回コミットの際には\n"
-"    更新として記録されますので、それ以上の変更が実施される前に\n"
-"    コミットを実施してください。\n"
+"    現時点での作業領域の内容を、指定されたリビジョンへと至るまでの\n"
+"    共通の親リビジョンからの変更内容とマージします。\n"
+"\n"
+"    両方の親リビジョンに対して差分のあるファイルは、次回コミットの際には\n"
+"    変更されたものとして記録されますので、必要以上の変更が実施される前に\n"
+"    コミットを実施してください。このコミット時に生成されるリビジョンは、\n"
+"    親リビジョンを2つ持つリビジョンとなります。\n"
 "\n"
 "    マージ対象リビジョンの指定が無く、作業領域の親リビジョンがヘッドで、\n"
 "    且つ現行ブランチがもう1つだけヘッドを持つ場合、そのヘッドがマージ対象\n"
@@ -6231,31 +6650,33 @@
 
 #, python-format
 msgid "branch '%s' has %d heads - please merge with an explicit rev"
-msgstr ""
+msgstr "ブランチ '%s' にはヘッドが %d あります - マージ対象を明示してください"
 
 #, python-format
 msgid "branch '%s' has one head - please merge with an explicit rev"
 msgstr ""
+"ブランチ '%s' にはヘッドが1しかありません - マージ対象を明示してください"
 
 msgid "there is nothing to merge"
-msgstr ""
+msgstr "マージの必要がありません"
 
 #, python-format
 msgid "%s - use \"hg update\" instead"
-msgstr ""
+msgstr "%s - \"hg update\" を使用してください"
 
 msgid ""
 "working dir not at a head rev - use \"hg update\" or merge with an explicit "
 "rev"
 msgstr ""
+"作業領域の親リビジョンはヘッドではありません。\n"
+"リビジョンを明示しての \"hg update\" ないしマージを実施してください。"
 
 msgid ""
 "show changesets not found in destination\n"
 "\n"
-"    Show changesets not found in the specified destination repository or\n"
-"    the default push location. These are the changesets that would be "
-"pushed\n"
-"    if a push was requested.\n"
+"    Show changesets not found in the specified destination repository\n"
+"    or the default push location. These are the changesets that would\n"
+"    be pushed if a push was requested.\n"
 "\n"
 "    See pull for valid destination format details.\n"
 "    "
@@ -6270,35 +6691,35 @@
 "    "
 
 msgid ""
-"show the parents of the working dir or revision\n"
-"\n"
-"    Print the working directory's parent revisions. If a\n"
-"    revision is given via --rev, the parent of that revision\n"
-"    will be printed. If a file argument is given, revision in\n"
-"    which the file was last changed (before the working directory\n"
-"    revision or the argument to --rev if given) is printed.\n"
+"show the parents of the working directory or revision\n"
+"\n"
+"    Print the working directory's parent revisions. If a revision is\n"
+"    given via -r/--rev, the parent of that revision will be printed.\n"
+"    If a file argument is given, the revision in which the file was\n"
+"    last changed (before the working directory revision or the\n"
+"    argument to --rev if given) is printed.\n"
 "    "
 msgstr ""
 "作業領域(ないし指定リビジョン)の親リビジョンの表示\n"
 "\n"
-"    作業領域の親リビジョンを表示します。--rev でのリビジョン指定がある場合\n"
-"    指定リビジョンの親リビジョンを表示します。ファイルが指定された場合、\n"
-"    (作業領域の親リビジョン、ないし --rev による指定リビジョン以前のもので)\n"
-"    そのファイルを最後に更新したリビジョンを表示します。\n"
-"    "
-
-msgid "can only specify an explicit file name"
-msgstr ""
+"    作業領域の親リビジョンを表示します。-r/--rev でのリビジョン指定が\n"
+"    ある場合、指定リビジョンの親リビジョンを表示します。ファイルが指定\n"
+"    された場合、(作業領域の親リビジョン、ないし --rev 指定のリビジョン\n"
+"    以前のもので)そのファイルを最後に更新したリビジョンを表示します。\n"
+"    "
+
+msgid "can only specify an explicit filename"
+msgstr "明示的なファイル名以外は指定できません"
 
 #, python-format
 msgid "'%s' not found in manifest!"
-msgstr ""
+msgstr "'%s' は管理対象ではありません"
 
 msgid ""
 "show aliases for remote repositories\n"
 "\n"
-"    Show definition of symbolic path name NAME. If no name is given, show\n"
-"    definition of available names.\n"
+"    Show definition of symbolic path name NAME. If no name is given,\n"
+"    show definition of all available names.\n"
 "\n"
 "    Path names are defined in the [paths] section of /etc/mercurial/hgrc\n"
 "    and $HOME/.hgrc. If run inside a repository, .hg/hgrc is used, too.\n"
@@ -6319,16 +6740,16 @@
 "    "
 
 msgid "not found!\n"
-msgstr ""
+msgstr "指定シンボルは不明です\n"
 
 msgid "not updating, since new heads added\n"
-msgstr ""
+msgstr "新規ヘッドが追加されたため、作業領域は更新しません\n"
 
 msgid "(run 'hg heads' to see heads, 'hg merge' to merge)\n"
-msgstr ""
+msgstr "(ヘッド一覧表示は 'hg heads'、マージ実施は 'hg merge')\n"
 
 msgid "(run 'hg update' to get a working copy)\n"
-msgstr ""
+msgstr "(作業領域の更新は 'hg update')\n"
 
 msgid ""
 "pull changes from the specified source\n"
@@ -6336,101 +6757,90 @@
 "    Pull changes from a remote repository to a local one.\n"
 "\n"
 "    This finds all changes from the repository at the specified path\n"
-"    or URL and adds them to the local repository. By default, this\n"
-"    does not update the copy of the project in the working directory.\n"
+"    or URL and adds them to a local repository (the current one unless\n"
+"    -R is specified). By default, this does not update the copy of the\n"
+"    project in the working directory.\n"
+"\n"
+"    Use hg incoming if you want to see what would have been added by a\n"
+"    pull at the time you issued this command. If you then decide to\n"
+"    added those changes to the repository, you should use pull -r X\n"
+"    where X is the last changeset listed by hg incoming.\n"
 "\n"
 "    If SOURCE is omitted, the 'default' path will be used.\n"
 "    See 'hg help urls' for more information.\n"
 "    "
 msgstr ""
-"指定されたリポジトリからのチェンジセット取り込み\n"
-"\n"
-"    連携先リポジトリからローカルリポジトリにチェンジセットを取り込みます。\n"
-"\n"
-"    パスや URL で指定される連携先リポジトリ中の、全てのチェンジセットが\n"
-"    取り込み対象となります。指定が無い場合、このコマンドを実行しても\n"
-"    作業領域の内容は更新されません。\n"
+"指定リポジトリからの変更履歴の取り込み\n"
+"\n"
+"    連携先リポジトリから手元のリポジトリに変更履歴を取り込みます。\n"
+"\n"
+"    パスや URL で指定される連携先リポジトリ中の、全てのリビジョンが\n"
+"    (-R 指定が無い場合は現在の)リポジトリへの取り込み対象となります。\n"
+"    特に指定が無い場合、このコマンドを実行しても、作業領域の内容は更新\n"
+"    されません。\n"
+"\n"
+"    'hg incoming' を使用することで、実際の取り込みをせずに、'hg pull' に\n"
+"    よる取り込み対象を確認することができます。表示された内容の取り込みを\n"
+"    決断したならば、先に表示された最後のリビジョンを '-r' の引数にして\n"
+"    'hg pull' を実行しましょう。\n"
 "\n"
 "    連携先が省略された場合、'default' パスが連携先として使用されます。\n"
 "    詳細は 'hg help urls' を参照してください。\n"
 "    "
 
 msgid ""
-"Other repository doesn't support revision lookup, so a rev cannot be "
-"specified."
-msgstr ""
-
-msgid ""
 "push changes to the specified destination\n"
 "\n"
 "    Push changes from the local repository to the given destination.\n"
 "\n"
-"    This is the symmetrical operation for pull. It helps to move\n"
-"    changes from the current repository to a different one. If the\n"
-"    destination is local this is identical to a pull in that directory\n"
-"    from the current one.\n"
+"    This is the symmetrical operation for pull. It moves changes from\n"
+"    the current repository to a different one. If the destination is\n"
+"    local this is identical to a pull in that directory from the\n"
+"    current one.\n"
 "\n"
 "    By default, push will refuse to run if it detects the result would\n"
 "    increase the number of remote heads. This generally indicates the\n"
-"    the client has forgotten to pull and merge before pushing.\n"
-"\n"
-"    If -r is used, the named changeset and all its ancestors will be pushed\n"
-"    to the remote repository.\n"
-"\n"
-"    Look at the help text for urls for important details about ssh:// URLs.\n"
-"    If DESTINATION is omitted, a default path will be used.\n"
-"    See 'hg help urls' for more information.\n"
-"    "
-msgstr ""
-"指定されたリポジトリへのチェンジセット反映\n"
-"\n"
-"    ローカルリポジトリから連携先リポジトリへとチェンジセットを反映します。\n"
-"\n"
-"    これは hg pull と対称的な操作です。現在のリポジトリから連携先へと、\n"
-"    チェンジセットを簡単に移動させることができます。連携先リポジトリが\n"
-"    同一ホスト上にある場合は、現リポジトリに対する連携先リポジトリでの\n"
-"    hg pull 実行と同一の効果を持ちます。\n"
-"\n"
-"    通常は、連携先リポジトリにヘッドが増える実行は拒絶されます。\n"
-"    このような場合、大概は hg push 前の hg pull および hg merge 実行を\n"
-"    忘れていることが殆どです。\n"
-"\n"
-"    -r が指定された場合、指定されたチェンジセットとその祖先が連携先\n"
-"    リポジトリへと反映されます。\n"
+"    user forgot to pull and merge before pushing.\n"
+"\n"
+"    If -r/--rev is used, the named revision and all its ancestors will\n"
+"    be pushed to the remote repository.\n"
+"\n"
+"    Please see 'hg help urls' for important details about ssh://\n"
+"    URLs. If DESTINATION is omitted, a default path will be used.\n"
+"    "
+msgstr ""
+"指定リポジトリへの変更履歴の反映\n"
+"\n"
+"    手元のリポジトリから連携先リポジトリに変更履歴を反映します。\n"
+"\n"
+"    これは 'hg pull' と対称的な操作です。現在のリポジトリから連携先へと\n"
+"    変更履歴を反映させることができます。連携先が同一ホスト上のリポジトリ\n"
+"    であれば、連携先リポジトリにおいて、現リポジトリに対する 'hg pull'\n"
+"    を行った場合と同一の効果を持ちます。\n"
+"\n"
+"    連携先リポジトリにヘッドが増える実行は、通常は拒絶されます。\n"
+"    このような場合、大概は 'hg push' 前の 'hg pull' および 'hg merge'\n"
+"    実行を忘れていることが殆どです。\n"
+"\n"
+"    -r/--rev が指定された場合、指定されたものと、その祖先となる\n"
+"    リビジョンが連携先リポジトリへと反映されます。\n"
 "\n"
 "    ssh:// URL 形式の詳細に関しては、'hg help urls' を参照してください。\n"
 "    連携先が省略された場合、'default' パスが連携先として使用されます。\n"
-"    詳細に関しては、'hg help urls' を参照してください。\n"
 "    "
 
 #, python-format
 msgid "pushing to %s\n"
-msgstr ""
-
-msgid ""
-"raw commit interface (DEPRECATED)\n"
-"\n"
-"    (DEPRECATED)\n"
-"    Lowlevel commit, for use in helper scripts.\n"
-"\n"
-"    This command is not intended to be used by normal users, as it is\n"
-"    primarily useful for importing from other SCMs.\n"
-"\n"
-"    This command is now deprecated and will be removed in a future\n"
-"    release, please use debugsetparents and commit instead.\n"
-"    "
-msgstr ""
-
-msgid "(the rawcommit command is deprecated)\n"
-msgstr ""
+msgstr "%s への反映中\n"
 
 msgid ""
 "roll back an interrupted transaction\n"
 "\n"
 "    Recover from an interrupted commit or pull.\n"
 "\n"
-"    This command tries to fix the repository status after an interrupted\n"
-"    operation. It should only be necessary when Mercurial suggests it.\n"
+"    This command tries to fix the repository status after an\n"
+"    interrupted operation. It should only be necessary when Mercurial\n"
+"    suggests it.\n"
 "    "
 msgstr ""
 "中断されたトランザクションの取り消し\n"
@@ -6446,15 +6856,17 @@
 "\n"
 "    Schedule the indicated files for removal from the repository.\n"
 "\n"
-"    This only removes files from the current branch, not from the entire\n"
-"    project history. -A can be used to remove only files that have already\n"
-"    been deleted, -f can be used to force deletion, and -Af can be used\n"
-"    to remove files from the next revision without deleting them.\n"
-"\n"
-"    The following table details the behavior of remove for different file\n"
-"    states (columns) and option combinations (rows). The file states are\n"
-"    Added, Clean, Modified and Missing (as reported by hg status). The\n"
-"    actions are Warn, Remove (from branch) and Delete (from disk).\n"
+"    This only removes files from the current branch, not from the\n"
+"    entire project history. -A/--after can be used to remove only\n"
+"    files that have already been deleted, -f/--force can be used to\n"
+"    force deletion, and -Af can be used to remove files from the next\n"
+"    revision without deleting them from the working directory.\n"
+"\n"
+"    The following table details the behavior of remove for different\n"
+"    file states (columns) and option combinations (rows). The file\n"
+"    states are Added [A], Clean [C], Modified [M] and Missing [!]\n"
+"    (as reported by hg status). The actions are Warn, Remove (from\n"
+"    branch) and Delete (from disk).\n"
 "\n"
 "           A  C  M  !\n"
 "    none   W  RD W  R\n"
@@ -6466,20 +6878,20 @@
 "    To undo a remove before that, see hg revert.\n"
 "    "
 msgstr ""
-"次回コミットにおける指定されたファイルの登録除外\n"
-"\n"
-"    構成管理対象からの除外を予約します。\n"
-"\n"
-"    この操作による登録除外の対称は現行ブランチのみで、他ブランチにおいては\n"
-"    ファイルは存続し続けます。手動で削除したファイルの登録除外には -A、\n"
-"    強制的な登録除外には -f、作業領域中のファイルを削除することなく登録解除\n"
-"    するには -Af 指定が有効です。\n"
-"\n"
-"    ファイルの状態(横)とオプション指定(縦)の組み合わせにおける挙動の一覧を\n"
-"    以下に示します。ファイルの状態は、hg status が表示する A(Add:追加)、\n"
-"    C(Clean:改変無し)、M(Modified:改変有り)および !(不明)で表します。\n"
-"    挙動は W(Warn:警告)、R(Remove:構成管理からの登録除外)および\n"
-"    D(Delete:作業領域からの削除)で表します。\n"
+"次回コミットにおける指定ファイルの登録除外\n"
+"\n"
+"    構成管理対象からの指定ファイルの登録除外を予約します。\n"
+"\n"
+"    登録除外は現行ブランチのみが対象となるため、他のブランチにおいては\n"
+"    ファイルは存続し続けます。手動で削除したファイルを登録除外するには\n"
+"    -A/--after を、強制的に登録除外するには -f/--force を、作業領域中の\n"
+"    ファイルを削除することなく登録除外するには -Af を指定します。\n"
+"\n"
+"    ファイルの状態(横)とオプション指定(縦)の組み合わせにおける挙動は、\n"
+"    以下の一覧を参照してください。ファイルの状態は、'hg status' が表示\n"
+"    する A(Add:追加登録)、C(Clean:改変無し)、M(Modified:改変有り)および\n"
+"    !(不明)で表します。挙動は W(Warn:警告)、R(Remove:構成管理からの登録\n"
+"    除外)および D(Delete:作業領域からの削除)で表します。\n"
 "\n"
 "            A  C  M  !\n"
 "    無指定  W  RD W  R\n"
@@ -6487,35 +6899,38 @@
 "    -A      W  W  W  R\n"
 "    -Af     R  R  R  R\n"
 "\n"
-"    指定されたファイルは次回のコミットの際に登録が除外されます。\n"
-"    コミット前に登録解除を取り消す方法は、hg revert を参照してください。\n"
-"    "
-
-msgid "no files specified"
-msgstr ""
+"    指定ファイルは、次回のコミットの際に登録除外されます。コミット前に\n"
+"    登録除外を取り消す方法は 'hg help revert' を参照してください。\n"
+"    "
+
+#, python-format
+msgid "not removing %s: file is untracked\n"
+msgstr "%s は削除されません: 構成管理対象ではありません\n"
 
 #, python-format
 msgid "not removing %s: file %s (use -f to force removal)\n"
 msgstr ""
+"ファイル %s は削除されません。\n"
+"%s (強行する場合は -f を指定してください)XXXX\n"
 
 msgid "still exists"
-msgstr ""
+msgstr "まだファイルが存在しています"
 
 msgid "is modified"
-msgstr ""
+msgstr "ファイルが変更されています"
 
 msgid "has been marked for add"
-msgstr ""
+msgstr "追加登録対象です"
 
 msgid ""
 "rename files; equivalent of copy + remove\n"
 "\n"
-"    Mark dest as copies of sources; mark sources for deletion. If\n"
-"    dest is a directory, copies are put in that directory. If dest is\n"
-"    a file, there can only be one source.\n"
+"    Mark dest as copies of sources; mark sources for deletion. If dest\n"
+"    is a directory, copies are put in that directory. If dest is a\n"
+"    file, there can only be one source.\n"
 "\n"
 "    By default, this command copies the contents of files as they\n"
-"    exist in the working directory. If invoked with --after, the\n"
+"    exist in the working directory. If invoked with -A/--after, the\n"
 "    operation is recorded, but no copying is performed.\n"
 "\n"
 "    This command takes effect at the next commit. To undo a rename\n"
@@ -6524,16 +6939,16 @@
 msgstr ""
 "ファイルの改名(copy + remove と等価)\n"
 "\n"
-"    複製先ファイルを、複製元の複製であると記録し、複製元を登録解除します。\n"
-"    複製先指定がディレクトリの場合、ディレクトリ内に複製が作成されます。\n"
-"    複製先指定がファイルの場合、複製元は1つしか指定できません。\n"
-"\n"
-"    特に指定が無い場合本コマンドは、複製元ファイルの内容で作業領域に\n"
-"    指定された名前のファイルを作成します。--after 指定がある場合、「複製」\n"
-"    操作は記録されますが、ファイルの複製は行われません。\n"
-"\n"
-"    本コマンドの実行結果は次回のコミットの際にリポジトリに記録されます。\n"
-"    コミット前に改名操作を取り消す方法は hg revert を参照してください。\n"
+"    改名元の複製として改名先を追加登録し、改名元を登録除外します。\n"
+"    改名先がディレクトリの場合、ディレクトリ内に複製が作成されます。\n"
+"    改名先がファイルの場合、改名元は1つしか指定できません。\n"
+"\n"
+"    特に指定が無い場合、改名元ファイルの内容を持つ改名先ファイルを\n"
+"    作業領域に作成します。-A/--after 指定がある場合、「改名」操作は\n"
+"    記録されますが、ファイルの複製は行われません。\n"
+"\n"
+"    本コマンドの実行結果は次回のコミットの際に効果を発揮します。コミット\n"
+"    前に改名操作を取り消す方法は 'hg help revert' を参照してください。\n"
 "    "
 
 msgid ""
@@ -6541,45 +6956,56 @@
 "\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 switch.\n"
-"\n"
-"    This command will also allow listing resolved files and manually\n"
-"    marking and unmarking files as resolved.\n"
+"    resolve all unresolved files, use the -a/--all switch.\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"
+"    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"
 "\n"
 "    The codes used to show the status of files are:\n"
 "    U = unresolved\n"
 "    R = resolved\n"
 "    "
 msgstr ""
-"hg merge や hg update におけるファイルマージの再実施\n"
-"\n"
-"    直前の hg merge や hg update の際に保存されたファイルの内容を用いた\n"
-"    綺麗な状態でのマージを、衝突未解消のファイルに対して実施します。\n"
-"    全ての衝突未解消ファイルを実施対象にする場合は、-a オプションを指定\n"
-"    してください。\n"
-"\n"
-"    本コマンドは、ファイルの衝突解消状態の一覧表示や、解消済み・未解消の\n"
-"    状態区分の手動指定をすることもできます。\n"
+"merge や update におけるファイルマージの再実施\n"
+"\n"
+"    衝突が「未解消」のファイルに対し、直前の 'hg merge' や 'hg update'\n"
+"    時点におけるファイルの内容を用いて、綺麗な状態からのマージ処理を実施\n"
+"    します。衝突が「未解消」な全てのファイルを実施対象にする場合は、\n"
+"    -a/--all を指定します。\n"
+"\n"
+"    衝突を手動で解消した場合、本コマンドでマージ処理が再実行されると、\n"
+"    手動で変更した解消内容が上書きされてしまいます。手動で衝突を解消した\n"
+"    場合、-m/--mark を指定して本コマンドを実行することで、ファイルの衝突\n"
+"    解消状態を「解消済み」にしてください。\n"
+"\n"
+"    本コマンドは、ファイルの衝突解消状態の一覧表示や、「解消済み」/\n"
+"   「未解消」といった衝突解消状態の手動変更もできます。全てのファイルの\n"
+"    衝突解消状態が「解消済み」になるまでは、コミットができません。\n"
 "\n"
 "    ファイルの衝突解消状態表示には以下の記号が使用されます:\n"
-"    U = 未解消\n"
-"    R = 解消済み\n"
+"      U = 未解消(Unresolved)\n"
+"      R = 解消済み(Resolved)\n"
 "    "
 
 msgid "too many options specified"
-msgstr ""
+msgstr "オプション指定が過剰です"
 
 msgid "can't specify --all and patterns"
-msgstr ""
+msgstr "--all とパターンは同時に指定出来ません"
 
 msgid "no files or directories specified; use --all to remerge all files"
-msgstr ""
-
-msgid ""
-"restore individual files or dirs to an earlier state\n"
-"\n"
-"    (use update -r to check out earlier revisions, revert does not\n"
-"    change the working dir parents)\n"
+msgstr "再マージには、ファイル/ディレクトリか、--all を指定してください"
+
+msgid ""
+"restore individual files or directories to an earlier state\n"
+"\n"
+"    (Use update -r to check out earlier revisions, revert does not\n"
+"    change the working directory parents.)\n"
 "\n"
 "    With no revision specified, revert the named files or directories\n"
 "    to the contents they had in the parent of the working directory.\n"
@@ -6588,10 +7014,10 @@
 "    working directory has two parents, you must explicitly specify the\n"
 "    revision to revert to.\n"
 "\n"
-"    Using the -r option, revert the given files or directories to their\n"
-"    contents as of a specific revision. This can be helpful to \"roll\n"
-"    back\" some or all of an earlier change.\n"
-"    See 'hg help dates' for a list of formats valid for -d/--date.\n"
+"    Using the -r/--rev option, revert the given files or directories\n"
+"    to their contents as of a specific revision. This can be helpful\n"
+"    to \"roll back\" some or all of an earlier change. See 'hg help\n"
+"    dates' for a list of formats valid for -d/--date.\n"
 "\n"
 "    Revert modifies the working directory. It does not commit any\n"
 "    changes, or change the parent of the working directory. If you\n"
@@ -6599,8 +7025,8 @@
 "    directory, the reverted files will thus appear modified\n"
 "    afterwards.\n"
 "\n"
-"    If a file has been deleted, it is restored. If the executable\n"
-"    mode of a file was changed, it is reset.\n"
+"    If a file has been deleted, it is restored. If the executable mode\n"
+"    of a file was changed, it is reset.\n"
 "\n"
 "    If names are given, all files matching the names are reverted.\n"
 "    If no arguments are given, no files are reverted.\n"
@@ -6609,68 +7035,67 @@
 "    To disable these backups, use --no-backup.\n"
 "    "
 msgstr ""
-"各ファイル/ディレクトリ状態の復旧\n"
-"\n"
-"    (hg revert は作業領域の親リビジョンを変更しないので、作業領域の状態を\n"
-"    以前の版に戻す場合は、hg update を使用してください)\n"
-"\n"
-"    リビジョン指定が無い場合、指定されたファイル/ディレクトリを作業領域の\n"
-"    親リビジョン時点の内容へと復旧します。\n"
-"    本コマンドは対象となるファイルに対して、状態を「改変無し」とし、\n"
-"    add/remove/copy/rename による次回コミット向けの操作予約を取り消します。\n"
-"    作業領域の親リビジョンが2つある場合、どちらの内容で復旧するのかを\n"
-"    明示的に指定する必要があります。\n"
-"\n"
-"    -r オプションが指定された場合、指定されたファイル/ディレクトリを、\n"
-"    指定されたリビジョン時点の内容へと復旧します。以前の変更内容の一部、\n"
-"    ないし全部を取り消す用途にも使用できます。\n"
-"    -d/--date への指定に関しては、'hg help dates' を参照してください。\n"
-"\n"
-"    本コマンドは作業領域の内容を変更しますが、変更のコミットや、作業領域の\n"
-"    親リビジョンの変更は行いません。そのため、作業領域の親リビジョン以外の\n"
-"    リビジョンを指定して復旧した場合、復旧後のファイルの状態は「改変有り」\n"
-"    となります。\n"
-"\n"
-"    ファイルが削除されていた場合、ファイルは復旧されます。実行権限ビットが\n"
-"    変更されていた場合、変更前の状態に復旧されます。\n"
-"\n"
-"    復旧対象が指定された場合、指定された名前に合致する全てのファイルが復旧\n"
-"    対象となります。復旧対象が指定されなかった場合は、いずれのファイルも\n"
-"    復旧されません。\n"
-"\n"
-"    改変されたファイルの復旧の際には、復旧前の内容が .orig 拡張子が付いた\n"
-"    ファイルに保存されます。この保存は --no-backup 指定で無効化可能です。\n"
+"ファイル/ディレクトリ状態の復旧\n"
+"\n"
+"    ('hg revert' は作業領域の親リビジョンを変更しないので、作業領域の\n"
+"    状態を以前の版に戻す場合は、'hg update' を使用してください)\n"
+"\n"
+"    リビジョン指定が無い場合、指定されたファイル/ディレクトリを作業\n"
+"    領域の親リビジョン時点の内容へと復旧します。本コマンドは対象\n"
+"    ファイルに対して、状態を「改変無し」とし、add/remove/copy/rename\n"
+"    実行の効果を打ち消します。作業領域の親リビジョンが2つある場合は、\n"
+"    どちらの内容で復旧するのかを明示的に指定する必要があります。\n"
+"\n"
+"    -r/--rev が指定された場合、指定されたファイル/ディレクトリを、\n"
+"    指定されたリビジョン時点の内容へと復旧します。以前の変更内容の一部\n"
+"    ないし全部を取り消す用途にも使用できます。-d/--date の指定に関しては\n"
+"    'hg help dates' を参照してください。\n"
+"\n"
+"    本コマンドは作業領域の内容は変更しますが、変更のコミットや、作業\n"
+"    領域の親リビジョンは変更しません。そのため、作業領域の親リビジョン\n"
+"    以外のリビジョンを指定して復旧した場合、復旧後のファイルの状態は\n"
+"    「改変有り」として扱われます。\n"
+"\n"
+"    ファイルが削除されていた場合、ファイルは復旧されます。実行権限が変更\n"
+"    されていた場合、変更前の状態に復旧されます。\n"
+"\n"
+"    復旧対象が指定された場合、指定された名前に合致する全てのファイルが\n"
+"    復旧対象となります。復旧対象が指定されなかった場合は、いずれの\n"
+"    ファイルも復旧されません。\n"
+"\n"
+"    改変されたファイルの復旧では、復旧前の内容が .orig 拡張子を付けた\n"
+"    ファイルに保存されます。この保存は --no-backup で無効化されます。\n"
 "    "
 
 msgid "you can't specify a revision and a date"
-msgstr ""
+msgstr "リビジョンと日時は同時には指定出来ません"
 
 msgid "no files or directories specified; use --all to revert the whole repo"
-msgstr ""
+msgstr "復旧には、ファイル/ディレクトリか、--all を指定してください"
 
 #, python-format
 msgid "forgetting %s\n"
-msgstr ""
+msgstr "%s の追加登録を取り消し中\n"
 
 #, python-format
 msgid "reverting %s\n"
-msgstr ""
+msgstr "%s の復旧中\n"
 
 #, python-format
 msgid "undeleting %s\n"
-msgstr ""
+msgstr "%s の復旧中\n"
 
 #, python-format
 msgid "saving current version of %s as %s\n"
-msgstr ""
+msgstr "現行版の %s を %s に保存中\n"
 
 #, python-format
 msgid "file not managed: %s\n"
-msgstr ""
+msgstr "ファイル %s は管理対象ではありません\n"
 
 #, python-format
 msgid "no changes needed to %s\n"
-msgstr ""
+msgstr "%s には改変の必要がありません\n"
 
 msgid ""
 "roll back the last transaction\n"
@@ -6678,7 +7103,8 @@
 "    This command should be used with care. There is only one level of\n"
 "    rollback, and there is no way to undo a rollback. It will also\n"
 "    restore the dirstate at the time of the last transaction, losing\n"
-"    any dirstate changes since that time.\n"
+"    any dirstate changes since that time. This command does not alter\n"
+"    the working directory.\n"
 "\n"
 "    Transactions are used to encapsulate the effects of all commands\n"
 "    that create new changesets or propagate existing changesets into a\n"
@@ -6701,15 +7127,15 @@
 msgstr ""
 "直前のトランザクションの巻き戻し\n"
 "\n"
-"    本コマンドの使用に当たっては注意が必要です。巻き戻しは1段階限りで、\n"
-"    巻き戻したトランザクションの再実施はできません。本コマンドは、\n"
-"    直前のトランザクション実施時点の dirstate を復元し、その時点以後の\n"
-"    変更は全て失われます。\n"
-"\n"
-"    トランザクションとは、新規チェンジセットの作成、ないし外部からの既存\n"
-"    チェンジセットの取り込みに要するコマンドの効果を一括化するものです。\n"
+"    本コマンドの使用には注意が必要です。巻き戻しは1段階限りで、巻き\n"
+"    戻したトランザクションの再実施はできません。本コマンドは、直前の\n"
+"    トランザクション実施時点の dirstate を復元し、その時点以後の変更は\n"
+"    全て失われます。\n"
+"\n"
+"    トランザクションとは、新規リビジョンの作成、ないし外部からの既存\n"
+"    リビジョンの取り込みに要するコマンドの効果を一括化するものです。\n"
 "    例えば、以下のコマンドはいずれもトランザクションを形成するもので、\n"
-"    その効果は巻き戻し可能です。\n"
+"    その効果は本コマンドにより巻き戻し可能です。\n"
 "\n"
 "      commit\n"
 "      import\n"
@@ -6717,17 +7143,16 @@
 "      push (rollback 可能なのは反映先リポジトリ側)\n"
 "      unbundle\n"
 "\n"
-"    本コマンドは、公開リポジトリでの実行を想定していません。\n"
-"    他のユーザに対して一旦 pull 可能な状態になってしまったなら、\n"
-"    公開リポジトリでの rollback は(既に他のユーザによって取り込まれている\n"
-"    可能性があるので)効果を持ちません。\n"
-"    その上、リポジトリからの情報読み取りに際して、競合が発生し得ます。\n"
-"    例えば、巻き戻し操作によって、進行中のリポジトリからの取り込みが\n"
-"    失敗してしまう可能性があります。\n"
-"    "
-
-msgid ""
-"print the root (top) of the current working dir\n"
+"    本コマンドは、公開リポジトリでの実行を想定していません。他のユーザ\n"
+"    から 'hg pull' 可能な状態になってしまったなら、公開リポジトリでの\n"
+"    rollback は(既に他のユーザによって複製されている可能性があるので)\n"
+"    効果を持ちません。その上、リポジトリからの情報読み取りに際して、\n"
+"    競合が発生し得ます。例えば、進行中のリポジトリからの取り込みが、\n"
+"    巻き戻しによって失敗してしまう可能性があります。\n"
+"    "
+
+msgid ""
+"print the root (top) of the current working directory\n"
 "\n"
 "    Print the root directory of the current repository.\n"
 "    "
@@ -6743,33 +7168,35 @@
 "    Start a local HTTP repository browser and pull server.\n"
 "\n"
 "    By default, the server logs accesses to stdout and errors to\n"
-"    stderr. Use the \"-A\" and \"-E\" options to log to files.\n"
+"    stderr. Use the -A/--accesslog and -E/--errorlog options to log to\n"
+"    files.\n"
 "    "
 msgstr ""
 "HTTP 経由でのリポジトリの公開\n"
 "\n"
-"    HTTP 経由でのリポジトリ参照と hg pull を可能にするサーバを起動します。\n"
-"\n"
-"    特に指定が無い場合、サーバはアクセスログを標準出力へ、エラーは標準\n"
-"    エラー出力に出力します。ログをファイルに記録する場合は、\"-A\" や \n"
-"    \"-E\" オプションを使用してください。\n"
+"    リポジトリ参照と 'hg pull' のための HTTP サーバを起動します。\n"
+"\n"
+"    特に指定が無い場合、サーバはアクセスログを標準出力に、エラーを\n"
+"    標準エラー出力に表示します。ログをファイルに記録する場合は、\n"
+"    -A/--accesslog や -E/--errorlog で指定します。\n"
 "    "
 
 #, python-format
 msgid "listening at http://%s%s/%s (bound to %s:%d)\n"
-msgstr ""
+msgstr "http://%s%s/%s で待ち受け開始(バインド先は %s:%d)\n"
 
 msgid ""
 "show changed files in the working directory\n"
 "\n"
 "    Show status of files in the repository. If names are given, only\n"
 "    files that match are shown. Files that are clean or ignored or\n"
-"    source of a copy/move operation, are not listed unless -c (clean),\n"
-"    -i (ignored), -C (copies) or -A is given. Unless options described\n"
-"    with \"show only ...\" are given, the options -mardu are used.\n"
+"    the source of a copy/move operation, are not listed unless\n"
+"    -c/--clean, -i/--ignored, -C/--copies or -A/--all are given.\n"
+"    Unless options described with \"show only ...\" are given, the\n"
+"    options -mardu are used.\n"
 "\n"
 "    Option -q/--quiet hides untracked (unknown and ignored) files\n"
-"    unless explicitly requested with -u/--unknown or -i/-ignored.\n"
+"    unless explicitly requested with -u/--unknown or -i/--ignored.\n"
 "\n"
 "    NOTE: status may appear to disagree with diff if permissions have\n"
 "    changed or a merge has occurred. The standard diff format does not\n"
@@ -6777,49 +7204,49 @@
 "    to one merge parent.\n"
 "\n"
 "    If one revision is given, it is used as the base revision.\n"
-"    If two revisions are given, the difference between them is shown.\n"
+"    If two revisions are given, the differences between them are\n"
+"    shown.\n"
 "\n"
 "    The codes used to show the status of files are:\n"
 "    M = modified\n"
 "    A = added\n"
 "    R = removed\n"
 "    C = clean\n"
-"    ! = deleted, but still tracked\n"
+"    ! = missing (deleted by non-hg command, but still tracked)\n"
 "    ? = not tracked\n"
 "    I = ignored\n"
-"      = the previous added file was copied from here\n"
+"      = origin of the previous file listed as A (added)\n"
 "    "
 msgstr ""
 "作業領域のファイル操作状況の表示\n"
 "\n"
-"    作業領域のファイル状態を表示します。名前(パターン)が指定された場合、\n"
-"    その名前に合致するファイルのみが表示されます。改変無し(clean)、\n"
+"    作業領域のファイル状態を表示します。名前(パターン)指定のある場合、\n"
+"    その名前に合致するファイルのみが表示されます。変更無し(clean)、\n"
 "    無視(ignored)ないし複製(copy)・改名(rename)の元ファイルに関しては、\n"
-"    それぞれ -c (clean)、-i (ignored) ないし -C (copy) が指定されるか、\n"
-"    -A(all) が指定されない限り表示されません。表示対象選択のオプションが\n"
-"    何も指定されない場合、-m -a -r -d -u が指定されたものとして動作します。\n"
-"\n"
-"    -q/--quiet オプション指定がある場合、明示的に -u/--unknown ないし\n"
-"    -i/-ignored が指定されない限り、構成管理対象外(unknown と ignored)\n"
-"    のファイルを表示対象外とします。\n"
-"\n"
-"    備考:権限設定の変更やマージが行われた場合、差分表示から期待される結果\n"
-"    とは異なる状態が表示される可能性があります。標準的な差分出力形式は、\n"
-"    権限変更の情報を含みませんし、マージにおける一方の親リビジョンとの\n"
+"    それぞれ -c/--clean、-i/--ignored ないし -C/--copy が指定されるか、\n"
+"    -A/--all が指定されない限り表示されません。表示対象選択オプションが\n"
+"    何も指定されない場合、-m -a -r -d -u が指定されたものとみなします。\n"
+"\n"
+"    -q/--quiet 指定がある場合、-u/--unknown ないし -i/-ignored が明示\n"
+"    的に指定されない限り、構成管理対象外のファイルは表示されません。\n"
+"\n"
+"    備考:権限設定の変更やマージが行われた場合、差分表示から期待される\n"
+"    結果とは異なる状態が表示される可能性があります。標準的な差分形式は\n"
+"    権限変更の情報を含みませんし、マージの際には一方の親リビジョンとの\n"
 "    差分しか表示しません。\n"
 "\n"
 "    1つのリビジョンが指定された場合、比較元リビジョンとして扱われます。\n"
-"    2つのリビジョンが指定された場合、両リビジョンの間で状態が比較されます。\n"
+"    2つのリビジョンが指定された場合、両リビジョン間で状態比較されます。\n"
 "\n"
 "    ファイルの状態を表す記号は以下の通り:\n"
-"    M = 改変有り(modified)\n"
-"    A = 新規登録(added)\n"
-"    R = 登録解除(removed)\n"
-"    C = 改変無し(clean)\n"
-"    ! = 作業領域にファイルが無い(missing)\n"
+"    M = 改変有り(Modified)\n"
+"    A = 追加登録予定(Added)\n"
+"    R = 登録除外予定(Removed)\n"
+"    C = 変更無し(Clean)\n"
+"    ! = 構成管理対象にも関わらず作業領域にファイルが無い(missing)\n"
 "    ? = 構成管理対象外(unknown)\n"
-"    I = 無視(ignored)\n"
-"      = 直前に表示される新規登録ファイルの複製元\n"
+"    I = 無視(Ignored)\n"
+"      = 直前に表示される新規登録予定ファイルの複製元\n"
 "    "
 
 msgid ""
@@ -6831,8 +7258,8 @@
 "    very useful to compare different revisions, to go back to significant\n"
 "    earlier versions or to mark branch points as releases, etc.\n"
 "\n"
-"    If no revision is given, the parent of the working directory is used,\n"
-"    or tip if no revision is checked out.\n"
+"    If no revision is given, the parent of the working directory is\n"
+"    used, or tip if no revision is checked out.\n"
 "\n"
 "    To facilitate version control, distribution, and merging of tags,\n"
 "    they are stored as a file named \".hgtags\" which is managed\n"
@@ -6863,55 +7290,59 @@
 "    "
 
 msgid "tag names must be unique"
-msgstr ""
+msgstr "タグ名が重複しています"
 
 #, python-format
 msgid "the name '%s' is reserved"
-msgstr ""
+msgstr "タグ名 '%s' はシステムで予約されています"
 
 msgid "--rev and --remove are incompatible"
-msgstr ""
+msgstr "--rev と --remove は同時に使用できません"
 
 #, python-format
 msgid "tag '%s' does not exist"
-msgstr ""
-
-#, python-format
-msgid "tag '%s' is not a %s tag"
-msgstr ""
+msgstr "タグ '%s' は存在しません"
+
+#, python-format
+msgid "tag '%s' is not a global tag"
+msgstr "タグ '%s' はグローバルなタグではありません"
+
+#, python-format
+msgid "tag '%s' is not a local tag"
+msgstr "タグ '%s' はローカルなタグではありません"
 
 #, python-format
 msgid "Removed tag %s"
-msgstr ""
+msgstr "タグ %s の削除"
 
 #, python-format
 msgid "tag '%s' already exists (use -f to force)"
-msgstr ""
+msgstr "タグ '%s' は存在します(強行する場合は -f を指定してください)"
 
 #, python-format
 msgid "Added tag %s for changeset %s"
-msgstr ""
+msgstr "リビジョン %s へタグ %s を付与"
 
 msgid ""
 "list repository tags\n"
 "\n"
-"    This lists both regular and local tags. When the -v/--verbose switch\n"
-"    is used, a third column \"local\" is printed for local tags.\n"
+"    This lists both regular and local tags. When the -v/--verbose\n"
+"    switch is used, a third column \"local\" is printed for local tags.\n"
 "    "
 msgstr ""
 "リポジトリ中のタグ一覧の表示\n"
 "\n"
 "    本コマンドは、通常のタグおよびローカルタグの両方を一覧表示します。\n"
-"    -v/--verbose オプションが指定された場合、ローカルタグの識別情報用に、\n"
-"    \"local\" カラムが追加表示されます。\n"
+"    -v/--verbose が指定された場合、ローカルタグの識別情報用に \"local\"\n"
+"    カラムが追加表示されます。\n"
 "    "
 
 msgid ""
 "show the tip revision\n"
 "\n"
-"    The tip revision (usually just called the tip) is the most\n"
-"    recently added changeset in the repository, the most recently\n"
-"    changed head.\n"
+"    The tip revision (usually just called the tip) is the changeset\n"
+"    most recently added to the repository (and therefore the most\n"
+"    recently changed head).\n"
 "\n"
 "    If you have just made a commit, that commit will be the tip. If\n"
 "    you have just pulled changes from another repository, the tip of\n"
@@ -6921,13 +7352,13 @@
 msgstr ""
 "tip リビジョンの表示\n"
 "\n"
-"    tip リビジョン(一般に tip と表記)とは、リポジトリおいて最も新しく追加\n"
-"    されたチェンジセットによるリビジョンであると同時に、最も新しく変更\n"
-"    されたヘッドのことでもあります。\n"
-"\n"
-"    コミットした直後であれば、生成されたチェンジセットが tip となります。\n"
-"    他のリポジトリからチェンジセットの取り込みをした直後であれば、取り込み\n"
-"    対象リポジトリでの tip が現リポジトリの tip となります。\"tip\" タグは\n"
+"    tip リビジョン(一般には単に tip と表記)とは、リポジトリおいて最も\n"
+"    新しく追加されたリビジョンであると同時に、最も新しく変更されたヘッド\n"
+"    のことでもあります。\n"
+"\n"
+"    コミットした直後であれば、生成されたリビジョンが tip となります。\n"
+"    他のリポジトリから変更履歴の取り込みをした直後であれば、連携先\n"
+"    リポジトリでの tip が現リポジトリの tip となります。\"tip\" タグは\n"
 "    特別なタグで、改名や、他のリビジョンへの付け替えはできません。\n"
 "    "
 
@@ -6946,57 +7377,65 @@
 msgid ""
 "update working directory\n"
 "\n"
-"    Update the repository's working directory to the specified revision,\n"
-"    or the tip of the current branch if none is specified. Use null as\n"
-"    the revision to remove the working copy (like 'hg clone -U').\n"
-"\n"
-"    When the working dir contains no uncommitted changes, it will be\n"
-"    replaced by the state of the requested revision from the repo.  When\n"
-"    the requested revision is on a different branch, the working dir\n"
-"    will additionally be switched to that branch.\n"
-"\n"
-"    When there are uncommitted changes, use option -C to discard them,\n"
-"    forcibly replacing the state of the working dir with the requested\n"
-"    revision.\n"
-"\n"
-"    When there are uncommitted changes and option -C is not used, and\n"
-"    the parent revision and requested revision are on the same branch,\n"
-"    and one of them is an ancestor of the other, then the new working\n"
-"    directory will contain the requested revision merged with the\n"
-"    uncommitted changes.  Otherwise, the update will fail with a\n"
-"    suggestion to use 'merge' or 'update -C' instead.\n"
-"\n"
-"    If you want to update just one file to an older revision, use revert.\n"
-"\n"
-"    See 'hg help dates' for a list of formats valid for --date.\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"
+"    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"
+"\n"
+"    See 'hg help dates' for a list of formats valid for -d/--date.\n"
 "    "
 msgstr ""
 "作業領域の更新\n"
 "\n"
-"    指定されたリビジョン時点の内容で、作業領域を更新します。\n"
-"    リビジョン指定が無い場合は、現ブランチの最新リビジョンで更新します。\n"
-"    作業領域中のファイルを削除する場合は、リビジョンに null を指定します\n"
-"    ('hg clone -U' と同様の状態になります)。\n"
-"\n"
-"    作業領域中に未コミットの変更が無い場合は、リポジトリに記録されている\n"
-"    指定リビジョン時点の内容で、作業領域が更新されます。指定リビジョンが\n"
-"    作業領域の親リビジョンと異なるブランチのものである場合、作業領域は\n"
+"    指定されたリビジョン(指定が無い場合は現ブランチの最新リビジョン)\n"
+"    時点の内容で、作業領域を更新します。作業領域中のファイルを削除する\n"
+"    場合は、リビジョンに null を指定します('hg clone -U' と同等)。\n"
+"\n"
+"    作業領域中に未コミットの変更が無い場合は、リポジトリに記録されて\n"
+"    いる指定リビジョン時点の内容で、作業領域が更新されます。指定リビジョン\n"
+"    が作業領域の親リビジョンと異なるブランチのものである場合、作業領域は\n"
 "    別ブランチへと移行します。\n"
 "\n"
-"    未コミットの変更が有る場合、-C オプションを指定することで、変更内容を\n"
-"    破棄し、指定リビジョン時点の内容で作業領域を強制的に更新します。\n"
-"\n"
-"    未コミットの変更が有り、且つ -C オプションが指定されなかった場合は、\n"
-"    親リビジョンと指定リビジョンが同一ブランチに属し、且つお互いが直系の\n"
-"    関係にある時に限り、未コミットの変更内容と指定リビジョンをマージした\n"
-"    結果で作業領域が更新されます。それ以外の場合は、'merge' ないし \n"
-"    'update -C' の使用を促した上で、コマンド実行は中断されます。\n"
-"\n"
-"    1つのファイルだけを以前の状態に戻す場合は revert を使用してください。\n"
+"    未コミットの変更が有る場合、-C/--clean を指定することで、変更内容を\n"
+"    破棄し、指定リビジョン時点の内容で作業領域を強制的に更新することが\n"
+"    できます。\n"
+"\n"
+"    未コミットの変更が有り、且つ -C/--clean が指定されなかった場合は、\n"
+"    作業領域の親リビジョンと指定リビジョンが同一ブランチに属し、且つ\n"
+"    両方の履歴が直系にあたる関係である時に限り、未コミットの変更内容と\n"
+"    指定リビジョンをマージした結果で作業領域が更新されます。それ以外の\n"
+"    場合は 'hg merge' ないし 'hg update -C' の使用を促した上でコマンド\n"
+"    実行は失敗します。\n"
+"\n"
+"    特定のファイルを以前の状態に戻す場合は 'hg revert' を使用します。\n"
 "\n"
 "    -d/--date への指定に関しては、'hg help dates' を参照してください。\n"
 "    "
 
+msgid "uncommitted local changes"
+msgstr "作業領域に未コミットの変更があります"
+
 msgid ""
 "verify the integrity of the repository\n"
 "\n"
@@ -7030,802 +7469,826 @@
 "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"
 
 msgid "repository root directory or symbolic path name"
-msgstr ""
+msgstr "リポジトリのルート位置、ないしパス定義名"
 
 msgid "change working directory"
-msgstr ""
+msgstr "作業領域の変更"
 
 msgid "do not prompt, assume 'yes' for any required answers"
-msgstr ""
+msgstr "問い合わせをせず、確認事項は全て 'yes' とみなす"
 
 msgid "suppress output"
-msgstr ""
+msgstr "出力を抑止"
 
 msgid "enable additional output"
-msgstr ""
+msgstr "付加的な出力を有効化"
 
 msgid "set/override config option"
-msgstr ""
+msgstr "オプション設定を指定/上書き"
 
 msgid "enable debugging output"
-msgstr ""
+msgstr "デバッグ出力を有効化"
 
 msgid "start debugger"
-msgstr ""
+msgstr "デバッガを開始"
 
 msgid "set the charset encoding"
-msgstr ""
+msgstr "文字エンコーディング"
 
 msgid "set the charset encoding mode"
-msgstr ""
-
-msgid "print improved command execution profile"
-msgstr ""
+msgstr "文字エンコーディングモード"
 
 msgid "print traceback on exception"
-msgstr ""
+msgstr "例外浮揚の際にトレースバックを表示"
 
 msgid "time how long the command takes"
-msgstr ""
+msgstr "コマンド実行の所要時間を計測"
 
 msgid "print command execution profile"
-msgstr ""
+msgstr "コマンド実行のプロファイルを表示"
 
 msgid "output version information and exit"
-msgstr ""
+msgstr "バージョン情報を表示して終了"
 
 msgid "display help and exit"
-msgstr ""
+msgstr "ヘルプ情報を表示して終了"
 
 msgid "do not perform actions, just print output"
-msgstr ""
+msgstr "実施予定の処理内容の表示のみで処理実施は抑止"
 
 msgid "specify ssh command to use"
-msgstr ""
+msgstr "SSH 連携で使用する ssh コマンド"
 
 msgid "specify hg command to run on the remote side"
-msgstr ""
+msgstr "遠隔ホスト側で実行される hg コマンド"
 
 msgid "include names matching the given patterns"
-msgstr ""
+msgstr "パターンに合致したファイルを処理対象に追加"
 
 msgid "exclude names matching the given patterns"
-msgstr ""
+msgstr "パターンに合致したファイルを処理対象から除外"
 
 msgid "use <text> as commit message"
-msgstr ""
+msgstr "コミットメッセージ"
 
 msgid "read commit message from <file>"
-msgstr ""
+msgstr "コミットメッセージをファイルから読み込み"
 
 msgid "record datecode as commit date"
-msgstr ""
-
-msgid "record user as committer"
-msgstr ""
+msgstr "記録される日時情報"
+
+msgid "record the specified user as committer"
+msgstr "記録される作成者情報"
 
 msgid "display using template map file"
-msgstr ""
+msgstr "当該スタイルで表示をカスタマイズ"
 
 msgid "display with template"
-msgstr ""
+msgstr "当該テンプレートで表示をカスタマイズ"
 
 msgid "do not show merges"
-msgstr ""
+msgstr "マージ実施リビジョンの表示抑止"
 
 msgid "treat all files as text"
-msgstr ""
+msgstr "全ファイルをテキストファイルと仮定"
 
 msgid "don't include dates in diff headers"
-msgstr ""
+msgstr "差分表示の際に日付情報を抑止"
 
 msgid "show which function each change is in"
-msgstr ""
+msgstr "差分表示の際に関数名情報を表示"
 
 msgid "ignore white space when comparing lines"
-msgstr ""
+msgstr "差分判定の際に空白文字を無視"
 
 msgid "ignore changes in the amount of white space"
-msgstr ""
+msgstr "差分判定の際に空白文字の数を無視"
 
 msgid "ignore changes whose lines are all blank"
-msgstr ""
+msgstr "差分判定の際に空白行を無視"
 
 msgid "number of lines of context to show"
-msgstr ""
+msgstr "差分コンテキストの行数"
 
 msgid "guess renamed files by similarity (0<=s<=100)"
-msgstr ""
+msgstr "ファイル改名推定の際の類似度(0 以上 100 以下)"
 
 msgid "[OPTION]... [FILE]..."
-msgstr ""
+msgstr "[OPTION]... [FILE]..."
 
 msgid "annotate the specified revision"
-msgstr ""
+msgstr "当該リビジョン時点での由来情報を表示"
 
 msgid "follow file copies and renames"
-msgstr ""
+msgstr "複製/改名元ファイルの履歴も追跡"
 
 msgid "list the author (long with -v)"
-msgstr ""
+msgstr "ユーザ名を表示(-v 指定時は詳細表示)"
 
 msgid "list the date (short with -q)"
-msgstr ""
+msgstr "日付を表示(-q 指定時は簡略表示)"
 
 msgid "list the revision number (default)"
-msgstr ""
+msgstr "リビジョン番号を表示(既定動作)"
 
 msgid "list the changeset"
-msgstr ""
+msgstr "ハッシュ値を表示"
 
 msgid "show line number at the first appearance"
-msgstr ""
+msgstr "由来リビジョンでの初出時の行番号を表示"
 
 msgid "[-r REV] [-f] [-a] [-u] [-d] [-n] [-c] [-l] FILE..."
-msgstr ""
+msgstr "[-r REV] [-f] [-a] [-u] [-d] [-n] [-c] [-l] FILE..."
 
 msgid "do not pass files through decoders"
-msgstr ""
+msgstr "デコード処理を回避"
 
 msgid "directory prefix for files in archive"
-msgstr ""
+msgstr "アーカイブファイルのディレクトリ前置詞"
 
 msgid "revision to distribute"
-msgstr ""
+msgstr "アーカイブ対象リビジョン"
 
 msgid "type of distribution to create"
-msgstr ""
+msgstr "アーカイブ種別"
 
 msgid "[OPTION]... DEST"
-msgstr ""
+msgstr "[OPTION]... DEST"
 
 msgid "merge with old dirstate parent after backout"
-msgstr ""
+msgstr "打ち消しリビジョンを現親リビジョンとマージ"
 
 msgid "parent to choose when backing out merge"
-msgstr ""
+msgstr "打ち消しリビジョンとのマージ対象"
 
 msgid "revision to backout"
-msgstr ""
+msgstr "打ち消し対象リビジョン"
 
 msgid "[OPTION]... [-r] REV"
-msgstr ""
+msgstr "[OPTION]... [-r] REV"
 
 msgid "reset bisect state"
-msgstr ""
+msgstr "探索状態のリセット"
 
 msgid "mark changeset good"
-msgstr ""
+msgstr "対象リビジョンの探索状態を good 化"
 
 msgid "mark changeset bad"
-msgstr ""
+msgstr "対象リビジョンの探索状態を bad 化"
 
 msgid "skip testing changeset"
-msgstr ""
+msgstr "対象リビジョンの判定作業を省略"
 
 msgid "use command to check changeset state"
-msgstr ""
+msgstr "good/bad 判定用コマンド"
 
 msgid "do not update to target"
-msgstr ""
+msgstr "対象リビジョンによる作業領域内容の更新を抑止"
 
 msgid "[-gbsr] [-c CMD] [REV]"
-msgstr ""
+msgstr "[-gbsr] [-c CMD] [REV]"
 
 msgid "set branch name even if it shadows an existing branch"
-msgstr ""
+msgstr "同名既存ブランチが存在する場合でもブランチ作成を実施"
 
 msgid "reset branch name to parent branch name"
-msgstr ""
+msgstr "ブランチ名設定を解消し、親リビジョンのブランチに戻る"
 
 msgid "[-fC] [NAME]"
-msgstr ""
+msgstr "[-fC] [NAME]"
 
 msgid "show only branches that have unmerged heads"
-msgstr ""
+msgstr "未マージなヘッドを持つブランチのみを表示"
 
 msgid "[-a]"
-msgstr ""
+msgstr "[-a]"
 
 msgid "run even when remote repository is unrelated"
-msgstr ""
+msgstr "連携先が無関係なリポジトリでも実行"
 
 msgid "a changeset up to which you would like to bundle"
-msgstr ""
+msgstr "バンドルファイルに含める上限のリビジョン"
 
 msgid "a base changeset to specify instead of a destination"
-msgstr ""
+msgstr "連携先指定の代わりとなる基底リビジョン"
 
 msgid "bundle all changesets in the repository"
-msgstr ""
+msgstr "リポジトリ中の全リビジョンをバンドルに含める"
 
 msgid "bundle compression type to use"
-msgstr ""
+msgstr "バンドルファイルの圧縮形式"
 
 msgid "[-f] [-a] [-r REV]... [--base REV]... FILE [DEST]"
-msgstr ""
+msgstr "[-f] [-a] [-r REV]... [--base REV]... FILE [DEST]"
 
 msgid "print output to file with formatted name"
-msgstr ""
+msgstr "ファイル内容の保存先"
 
 msgid "print the given revision"
-msgstr ""
+msgstr "出力対象リビジョン"
 
 msgid "apply any matching decode filter"
-msgstr ""
+msgstr "デコード処理を実施"
 
 msgid "[OPTION]... FILE..."
-msgstr ""
+msgstr "[OPTION]... FILE..."
 
 msgid "the clone will only contain a repository (no working copy)"
-msgstr ""
+msgstr "管理領域のみの複製(作業領域の更新無し)"
 
 msgid "a changeset you would like to have after cloning"
-msgstr ""
+msgstr "複製における上限のリビジョン"
 
 msgid "[OPTION]... SOURCE [DEST]"
-msgstr ""
+msgstr "[OPTION]... SOURCE [DEST]"
 
 msgid "mark new/missing files as added/removed before committing"
-msgstr ""
+msgstr "コミット前に、新規/不在ファイルを登録/除外"
 
 msgid "mark a branch as closed, hiding it from the branch list"
-msgstr ""
+msgstr "ブランチを閉鎖し、ブランチ一覧での表示から除外"
 
 msgid "record a copy that has already occurred"
-msgstr ""
+msgstr "手動で複製済みのファイルに対して、複製の旨を記録"
 
 msgid "forcibly copy over an existing managed file"
-msgstr ""
+msgstr "同名の登録済みファイルが存在しても複製を実施"
 
 msgid "[OPTION]... [SOURCE]... DEST"
-msgstr ""
+msgstr "[OPTION]... [SOURCE]... DEST"
 
 msgid "[INDEX] REV1 REV2"
-msgstr ""
+msgstr "[INDEX] REV1 REV2"
+
+msgid "[COMMAND]"
+msgstr "[COMMAND]"
 
 msgid "show the command options"
-msgstr ""
+msgstr "当該コマンドのオプション一覧の表示"
 
 msgid "[-o] CMD"
-msgstr ""
+msgstr "[-o] CMD"
 
 msgid "try extended date formats"
-msgstr ""
+msgstr "拡張日時形式の使用"
 
 msgid "[-e] DATE [RANGE]"
-msgstr ""
+msgstr "[-e] DATE [RANGE]"
 
 msgid "FILE REV"
-msgstr ""
+msgstr "FILE REV"
 
 msgid "[PATH]"
-msgstr ""
+msgstr "[PATH]"
 
 msgid "FILE"
-msgstr ""
-
-msgid "parent"
-msgstr ""
-
-msgid "file list"
-msgstr ""
+msgstr "FILE"
 
 msgid "revision to rebuild to"
-msgstr ""
+msgstr "再構築対象リビジョン"
 
 msgid "[-r REV] [REV]"
-msgstr ""
+msgstr "[-r REV] [REV]"
 
 msgid "revision to debug"
-msgstr ""
+msgstr "デバッグ対象リビジョン"
 
 msgid "[-r REV] FILE"
-msgstr ""
+msgstr "[-r REV] FILE"
 
 msgid "REV1 [REV2]"
-msgstr ""
+msgstr "REV1 [REV2]"
 
 msgid "do not display the saved mtime"
-msgstr ""
+msgstr "記録された mtime 情報の表示抑止"
 
 msgid "[OPTION]..."
-msgstr ""
+msgstr "[OPTION]..."
+
+msgid "revision to check"
+msgstr "確認対象リビジョン"
 
 msgid "[OPTION]... [-r REV1 [-r REV2]] [FILE]..."
-msgstr ""
+msgstr "[OPTION]... [-r REV1 [-r REV2]] [FILE]..."
 
 msgid "diff against the second parent"
-msgstr ""
+msgstr "第2親との差分を使用"
 
 msgid "[OPTION]... [-o OUTFILESPEC] REV..."
-msgstr ""
+msgstr "[OPTION]... [-o OUTFILESPEC] REV..."
 
 msgid "end fields with NUL"
-msgstr ""
+msgstr "各フィールドの区切りにNUL文字(0x00)を使用"
 
 msgid "print all revisions that match"
-msgstr ""
+msgstr "合致するリビジョンを全て表示"
 
 msgid "follow changeset history, or file history across copies and renames"
-msgstr ""
+msgstr "複製元や改名元の履歴も遡る"
 
 msgid "ignore case when matching"
-msgstr ""
-
-msgid "print only filenames and revs that match"
-msgstr ""
+msgstr "大文字小文字を無視して検索"
+
+msgid "print only filenames and revisions that match"
+msgstr "合致の際にファイル名とリビジョンのみを表示"
 
 msgid "print matching line numbers"
-msgstr ""
+msgstr "合致した行番号を表示"
 
 msgid "search in given revision range"
-msgstr ""
+msgstr "当該リビジョン範囲を検索"
 
 msgid "[OPTION]... PATTERN [FILE]..."
-msgstr ""
-
-msgid "show only heads which are descendants of rev"
-msgstr ""
+msgstr "[OPTION]... PATTERN [FILE]..."
+
+msgid "show only heads which are descendants of REV"
+msgstr "当該リビジョンの子孫となるヘッドのみを表示"
 
 msgid "show only the active heads from open branches"
-msgstr ""
-
-msgid "[-r REV] [REV]..."
-msgstr ""
+msgstr "アクティブなブランチのヘッドのみを表示"
+
+msgid "show normal and closed heads"
+msgstr "通常の閉じたヘッドを表示"
+
+msgid "[-r STARTREV] [REV]..."
+msgstr "[-r STARTREV] [REV]..."
 
 msgid "[TOPIC]"
-msgstr ""
-
-msgid "identify the specified rev"
-msgstr ""
+msgstr "[TOPIC]"
+
+msgid "identify the specified revision"
+msgstr "当該リビジョンの識別情報を表示"
 
 msgid "show local revision number"
-msgstr ""
+msgstr "リビジョン番号を表示"
 
 msgid "show global revision id"
-msgstr ""
+msgstr "ハッシュ値を表示"
 
 msgid "show branch"
-msgstr ""
+msgstr "ブランチ名を表示"
 
 msgid "show tags"
-msgstr ""
+msgstr "タグを表示"
 
 msgid "[-nibt] [-r REV] [SOURCE]"
-msgstr ""
-
-msgid ""
-"directory strip option for patch. This has the same\n"
-"meaning as the corresponding patch option"
-msgstr ""
+msgstr "[-nibt] [-r REV] [SOURCE]"
+
+msgid ""
+"directory strip option for patch. This has the same meaning as the "
+"corresponding patch option"
+msgstr "パス要素除去数(patch コマンドの同名オプションと同機能)"
 
 msgid "base path"
-msgstr ""
+msgstr "基底パス"
 
 msgid "skip check for outstanding uncommitted changes"
-msgstr ""
+msgstr "作業領域中の未コミット変更の確認を省略"
 
 msgid "don't commit, just update the working directory"
-msgstr ""
+msgstr "作業領域の更新のみで、コミット実施を抑止"
 
 msgid "apply patch to the nodes from which it was generated"
-msgstr ""
-
-msgid "Use any branch information in patch (implied by --exact)"
-msgstr ""
+msgstr "パッチ作成時と同じ親リビジョンに対して適用"
+
+msgid "use any branch information in patch (implied by --exact)"
+msgstr "パッチ中のブランチ情報を利用(--exact 指定時は自動適用)"
 
 msgid "[OPTION]... PATCH..."
-msgstr ""
+msgstr "[OPTION]... PATCH..."
 
 msgid "show newest record first"
-msgstr ""
+msgstr "新しいリビジョンから先に表示"
 
 msgid "file to store the bundles into"
-msgstr ""
+msgstr "バンドルファイルの書き出し先"
 
 msgid "a specific revision up to which you would like to pull"
-msgstr ""
+msgstr "取り込み対象とする上限のリビジョン"
 
 msgid "[-p] [-n] [-M] [-f] [-r REV]... [--bundle FILENAME] [SOURCE]"
-msgstr ""
+msgstr "[-p] [-n] [-M] [-f] [-r REV]... [--bundle FILENAME] [SOURCE]"
 
 msgid "[-e CMD] [--remotecmd CMD] [DEST]"
-msgstr ""
-
-msgid "search the repository as it stood at rev"
-msgstr ""
+msgstr "[-e CMD] [--remotecmd CMD] [DEST]"
+
+msgid "search the repository as it stood at REV"
+msgstr "当該リビジョン時点のファイル一覧から検索"
 
 msgid "end filenames with NUL, for use with xargs"
-msgstr ""
+msgstr "ファイル名をNUL文字(0x00)で終端(xargs との併用向け)"
 
 msgid "print complete paths from the filesystem root"
-msgstr ""
+msgstr "ファイルシステムのルートからの絶対パスで表示"
 
 msgid "[OPTION]... [PATTERN]..."
-msgstr ""
+msgstr "[OPTION]... [PATTERN]..."
 
 msgid "only follow the first parent of merge changesets"
-msgstr ""
-
-msgid "show revs matching date spec"
-msgstr ""
+msgstr "マージの際には第1親のみを遡る"
+
+msgid "show revisions matching date spec"
+msgstr "指定日時に合致するリビジョンを表示"
 
 msgid "show copied files"
-msgstr ""
+msgstr "複製されたファイルを表示"
 
 msgid "do case-insensitive search for a keyword"
-msgstr ""
-
-msgid "include revs where files were removed"
-msgstr ""
+msgstr "キーワードによる検索(大文字小文字は無視)"
+
+msgid "include revisions where files were removed"
+msgstr "ファイルが登録除外されたリビジョンを含める"
 
 msgid "show only merges"
-msgstr ""
-
-msgid "revs committed by user"
-msgstr ""
+msgstr "マージ実施リビジョンのみを表示"
+
+msgid "revisions committed by user"
+msgstr "当該ユーザによってコミットされたリビジョンを表示"
 
 msgid "show only changesets within the given named branch"
-msgstr ""
+msgstr "当該名前付きブランチに属するリビジョンを表示"
 
 msgid "do not display revision or any of its ancestors"
-msgstr ""
+msgstr "当該リビジョンとその祖先の表示を抑止"
 
 msgid "[OPTION]... [FILE]"
-msgstr ""
+msgstr "[OPTION]... [FILE]"
 
 msgid "revision to display"
-msgstr ""
+msgstr "表示対象リビジョン"
 
 msgid "[-r REV]"
-msgstr ""
+msgstr "[-r REV]"
 
 msgid "force a merge with outstanding changes"
-msgstr ""
+msgstr "作業領域中の未コミット変更ごとマージを実施"
 
 msgid "revision to merge"
-msgstr ""
+msgstr "マージ対象リビジョン"
+
+msgid "review revisions to merge (no merge is performed)"
+msgstr "マージ対象リビジョンの確認(マージ処理は未実施)"
 
 msgid "[-f] [[-r] REV]"
-msgstr ""
+msgstr "[-f] [[-r] REV]"
 
 msgid "a specific revision up to which you would like to push"
-msgstr ""
+msgstr "反映対象とする上限のリビジョン"
 
 msgid "[-M] [-p] [-n] [-f] [-r REV]... [DEST]"
-msgstr ""
-
-msgid "show parents from the specified rev"
-msgstr ""
-
-msgid "hg parents [-r REV] [FILE]"
-msgstr ""
+msgstr "[-M] [-p] [-n] [-f] [-r REV]... [DEST]"
+
+msgid "show parents from the specified revision"
+msgstr "当該リビジョンの親リビジョンを表示"
+
+msgid "[-r REV] [FILE]"
+msgstr "[-r REV] [FILE]"
 
 msgid "[NAME]"
-msgstr ""
+msgstr "[NAME]"
 
 msgid "update to new tip if changesets were pulled"
-msgstr ""
+msgstr "新規取り込みの際には作業領域を tip で更新"
 
 msgid "[-u] [-f] [-r REV]... [-e CMD] [--remotecmd CMD] [SOURCE]"
-msgstr ""
+msgstr "[-u] [-f] [-r REV]... [-e CMD] [--remotecmd CMD] [SOURCE]"
 
 msgid "force push"
-msgstr ""
+msgstr "反映先にヘッドが増える場合でも実施"
 
 msgid "[-f] [-r REV]... [-e CMD] [--remotecmd CMD] [DEST]"
-msgstr ""
+msgstr "[-f] [-r REV]... [-e CMD] [--remotecmd CMD] [DEST]"
 
 msgid "record delete for missing files"
-msgstr ""
+msgstr "手動で削除済みのファイルに対して、登録除外の旨を記録"
 
 msgid "remove (and delete) file even if added or modified"
-msgstr ""
+msgstr "追加登録/変更対象であっても登録除外(ファイルは削除)"
 
 msgid "record a rename that has already occurred"
-msgstr ""
+msgstr "手動で改名済みのファイルに対して、改名の旨を記録"
 
 msgid "[OPTION]... SOURCE... DEST"
-msgstr ""
+msgstr "[OPTION]... SOURCE... DEST"
 
 msgid "remerge all unresolved files"
-msgstr ""
+msgstr "衝突未解消の全ファイルを再マージ"
 
 msgid "list state of files needing merge"
-msgstr ""
+msgstr "マージの必要なファイルの解消状態一覧"
 
 msgid "mark files as resolved"
-msgstr ""
+msgstr "当該ファイルを衝突解消済み状態に設定"
 
 msgid "unmark files as resolved"
-msgstr ""
+msgstr "当該ファイルを衝突未解消状態に設定"
 
 msgid "revert all changes when no arguments given"
-msgstr ""
+msgstr "引数指定が無い場合に、全ファイルの内容を復旧"
 
 msgid "tipmost revision matching date"
-msgstr ""
+msgstr "当該日時の最新リビジョンを使用"
 
 msgid "revision to revert to"
-msgstr ""
+msgstr "当該リビジョンの内容で復旧"
 
 msgid "do not save backup copies of files"
-msgstr ""
+msgstr "取り消し実施前内容のバックアップを抑止"
 
 msgid "[OPTION]... [-r REV] [NAME]..."
-msgstr ""
+msgstr "[OPTION]... [-r REV] [NAME]..."
 
 msgid "name of access log file to write to"
-msgstr ""
+msgstr "アクセスログの書き出し先ファイル"
 
 msgid "name of error log file to write to"
-msgstr ""
+msgstr "エラーログの書き出し先ファイル"
 
 msgid "port to listen on (default: 8000)"
-msgstr ""
+msgstr "要求受け付けポート番号(既定値: 8000)"
 
 msgid "address to listen on (default: all interfaces)"
-msgstr ""
+msgstr "要求受け付けアドレス(既定値: 全インタフェース)"
 
 msgid "prefix path to serve from (default: server root)"
-msgstr ""
-
-msgid "name to show in web pages (default: working dir)"
-msgstr ""
-
-msgid "name of the webdir config file (serve more than one repo)"
-msgstr ""
+msgstr "公開パス前置詞(既定値: ルート)"
+
+msgid "name to show in web pages (default: working directory)"
+msgstr "表示名(既定値: 作業領域のパス)"
+
+msgid "name of the webdir config file (serve more than one repository)"
+msgstr "webdir 設定ファイル位置(複数リポジトリの公開)"
 
 msgid "for remote clients"
-msgstr ""
+msgstr "(ホスト間連携での内部用途向け)"
 
 msgid "web templates to use"
-msgstr ""
+msgstr "当該テンプレートで表示をカスタマイズ"
 
 msgid "template style to use"
-msgstr ""
+msgstr "当該スタイルで表示をカスタマイズ"
 
 msgid "use IPv6 in addition to IPv4"
-msgstr ""
+msgstr "IPv4 に加えて IPv6 を使用"
 
 msgid "SSL certificate file"
-msgstr ""
+msgstr "SSL 証明書ファイル"
 
 msgid "show untrusted configuration options"
-msgstr ""
+msgstr "信頼できない設定項目も表示"
 
 msgid "[-u] [NAME]..."
-msgstr ""
+msgstr "[-u] [NAME]..."
 
 msgid "show status of all files"
-msgstr ""
+msgstr "全ての状態を表示"
 
 msgid "show only modified files"
-msgstr ""
+msgstr "変更されたファイルを表示"
 
 msgid "show only added files"
-msgstr ""
+msgstr "追加登録されたファイルを表示"
 
 msgid "show only removed files"
-msgstr ""
+msgstr "登録除外されたファイルを表示"
 
 msgid "show only deleted (but tracked) files"
-msgstr ""
+msgstr "削除されたファイル(登録除外は未実施)を表示"
 
 msgid "show only files without changes"
-msgstr ""
+msgstr "変更の無いファイルを表示"
 
 msgid "show only unknown (not tracked) files"
-msgstr ""
+msgstr "構成管理対象外のファイルを表示"
 
 msgid "show only ignored files"
-msgstr ""
+msgstr "無視対象のファイルを表示"
 
 msgid "hide status prefix"
-msgstr ""
+msgstr "状態記号の表示を抑止"
 
 msgid "show source of copied files"
-msgstr ""
+msgstr "複製元ファイルを表示"
 
 msgid "show difference from revision"
-msgstr ""
+msgstr "当該リビジョンとの差分で状態を判定"
 
 msgid "replace existing tag"
-msgstr ""
+msgstr "既存のタグを置き換え"
 
 msgid "make the tag local"
-msgstr ""
+msgstr "ローカルタグとして作成"
 
 msgid "revision to tag"
-msgstr ""
+msgstr "タグ付け対象リビジョン"
 
 msgid "remove a tag"
-msgstr ""
+msgstr "タグの削除"
 
 msgid "[-l] [-m TEXT] [-d DATE] [-u USER] [-r REV] NAME..."
-msgstr ""
+msgstr "[-l] [-m TEXT] [-d DATE] [-u USER] [-r REV] NAME..."
 
 msgid "[-p]"
-msgstr ""
+msgstr "[-p]"
 
 msgid "update to new tip if changesets were unbundled"
-msgstr ""
+msgstr "新規取り込みの際には作業領域を tip で更新"
 
 msgid "[-u] FILE..."
-msgstr ""
+msgstr "[-u] FILE..."
 
 msgid "overwrite locally modified files (no backup)"
-msgstr ""
+msgstr "作業領域中の内容を上書き(バックアップ作成無し)"
+
+msgid "check for uncommitted changes"
+msgstr "未コミット変更を確認"
 
 msgid "[-C] [-d DATE] [[-r] REV]"
-msgstr ""
+msgstr "[-C] [-d DATE] [[-r] REV]"
+
+#, python-format
+msgid "config error at %s:%d: '%s'"
+msgstr "%s:%d:設定エラー:%s"
 
 msgid "not found in manifest"
-msgstr ""
+msgstr "マニフェストにありません"
 
 msgid "branch name not in UTF-8!"
-msgstr ""
+msgstr "ブランチ名が UTF-8 ではありません!"
 
 #, python-format
 msgid "  searching for copies back to rev %d\n"
-msgstr ""
+msgstr "リビジョン %d まで遡ってコピーを探索中\n"
 
 #, python-format
 msgid ""
 "  unmatched files in local:\n"
 "   %s\n"
 msgstr ""
+"  ローカルで照合に失敗したファイル:\n"
+"   %s\n"
 
 #, python-format
 msgid ""
 "  unmatched files in other:\n"
 "   %s\n"
 msgstr ""
+"  連携先で照合に失敗したファイル:\n"
+"   %s\n"
 
 msgid "  all copies found (* = to merge, ! = divergent):\n"
-msgstr ""
-
-#, python-format
-msgid "   %s -> %s %s\n"
-msgstr ""
+msgstr "  全コピー発見 (* = マージ, ! = 分岐):\n"
 
 msgid "  checking for directory renames\n"
-msgstr ""
+msgstr "  ディレクトリ名の変更を確認しています\n"
 
 #, python-format
 msgid "  dir %s -> %s\n"
-msgstr ""
+msgstr " ディレクトリ %s -> %s\n"
 
 #, python-format
 msgid "  file %s -> %s\n"
-msgstr ""
+msgstr " ファイル %s -> %s\n"
+
+msgid "working directory state appears damaged!"
+msgstr "作業領域の状態管理に問題があります!"
 
 #, python-format
 msgid "'\\n' and '\\r' disallowed in filenames: %r"
-msgstr ""
+msgstr "'\\n' と '\\r' はファイル名で使用しないでください: %r"
 
 #, python-format
 msgid "directory %r already in dirstate"
-msgstr ""
+msgstr "ディレクトリ %r は既に管理対象に含まれています"
 
 #, python-format
 msgid "file %r in dirstate clashes with %r"
-msgstr ""
+msgstr "管理情報中のファイル %r は %r によって破壊されます"
 
 #, python-format
 msgid "not in dirstate: %s\n"
-msgstr ""
+msgstr "%s は管理情報中にありません\n"
+
+msgid "unknown"
+msgstr "未知"
 
 msgid "character device"
-msgstr ""
+msgstr "キャラクタデバイス"
 
 msgid "block device"
-msgstr ""
+msgstr "ブロックデバイス"
 
 msgid "fifo"
-msgstr ""
+msgstr "FIFO(パイプ)"
 
 msgid "socket"
-msgstr ""
+msgstr "ソケット"
 
 msgid "directory"
-msgstr ""
-
-#, python-format
-msgid "%s: unsupported file type (type is %s)\n"
-msgstr ""
+msgstr "ディレクトリ"
+
+#, python-format
+msgid "unsupported file type (type is %s)"
+msgstr "未サポートのファイル種別(%s)"
 
 #, python-format
 msgid "abort: %s\n"
-msgstr ""
+msgstr "中止: %s\n"
 
 #, python-format
 msgid ""
 "hg: command '%s' is ambiguous:\n"
 "    %s\n"
 msgstr ""
+"hg: コマンド指定 '%s' は曖昧です:\n"
+"    %s\n"
+
+#, python-format
+msgid "hg: %s\n"
+msgstr "hg: %s\n"
 
 #, python-format
 msgid "timed out waiting for lock held by %s"
-msgstr ""
+msgstr "%s のロック解放待ちを断念"
 
 #, python-format
 msgid "lock held by %s"
-msgstr ""
+msgstr "%s によるロック保持"
 
 #, python-format
 msgid "abort: %s: %s\n"
-msgstr ""
+msgstr "中止: %s: %s\n"
 
 #, python-format
 msgid "abort: could not lock %s: %s\n"
-msgstr ""
+msgstr "中止: %s のロックに失敗: %s\n"
 
 #, python-format
 msgid "hg %s: %s\n"
-msgstr ""
-
-#, python-format
-msgid "hg: %s\n"
-msgstr ""
+msgstr "hg %s: %s\n"
 
 #, python-format
 msgid "abort: %s!\n"
-msgstr ""
+msgstr "中止: %s!\n"
 
 #, python-format
 msgid "abort: %s"
-msgstr ""
+msgstr "中止: %s"
 
 msgid " empty string\n"
-msgstr ""
+msgstr " 空文字列\n"
 
 msgid "killed!\n"
-msgstr ""
+msgstr "強制終了されました!\n"
 
 #, python-format
 msgid "hg: unknown command '%s'\n"
-msgstr ""
+msgstr "hg: 未知のコマンド '%s'\n"
 
 #, python-format
 msgid "abort: could not import module %s!\n"
-msgstr ""
+msgstr "中断: モジュール %s の読み込みに失敗!\n"
 
 msgid "(did you forget to compile extensions?)\n"
-msgstr ""
+msgstr "(エクステンションのコンパイルを忘れていませんか?)\n"
 
 msgid "(is your Python install correct?)\n"
-msgstr ""
+msgstr "(Python は正しくインストールされていますか?)\n"
 
 #, python-format
 msgid "abort: error: %s\n"
-msgstr ""
+msgstr "中止: エラー: %s\n"
 
 msgid "broken pipe\n"
-msgstr ""
+msgstr "パイプ破壊(EPIPE)\n"
 
 msgid "interrupted!\n"
-msgstr ""
+msgstr "中断されました!\n"
 
 msgid ""
 "\n"
 "broken pipe\n"
 msgstr ""
+"\n"
+"パイプ破壊(EPIPE)\n"
 
 msgid "abort: out of memory\n"
-msgstr ""
+msgstr "中断: メモリ不足\n"
 
 msgid "** unknown exception encountered, details follow\n"
-msgstr ""
-
-msgid "** report bug details to http://www.selenic.com/mercurial/bts\n"
-msgstr ""
+msgstr "** 予期せぬ例外が浮揚されました\n"
+
+msgid "** report bug details to http://mercurial.selenic.com/bts/\n"
+msgstr "** 障害詳細を http://mercurial.selenic.com/bts に報告してください\n"
 
 msgid "** or mercurial@selenic.com\n"
-msgstr ""
+msgstr "** ないし mercurial@selenic.com に報告してください\n"
 
 #, python-format
 msgid "** Mercurial Distributed SCM (version %s)\n"
@@ -7833,124 +8296,228 @@
 
 #, python-format
 msgid "** Extensions loaded: %s\n"
-msgstr ""
+msgstr "** 読み込み済みエクステンション: %s\n"
+
+#, python-format
+msgid "no definition for alias '%s'\n"
+msgstr "'%s' を別名に持つコマンドはありません\n"
+
+#, python-format
+msgid "alias '%s' resolves to unknown command '%s'\n"
+msgstr "'%s' が未知のコマンド '%s' の別名とみなされました\n"
+
+#, python-format
+msgid "alias '%s' resolves to ambiguous command '%s'\n"
+msgstr "'%s' が曖昧なコマンド '%s' の別名とみなされました\n"
+
+#, python-format
+msgid "alias '%s' shadows command\n"
+msgstr "別名 '%s' は既存のコマンドを隠します\n"
 
 #, python-format
 msgid "malformed --config option: %s"
-msgstr ""
+msgstr "不正な --config 指定: %s"
 
 #, python-format
 msgid "extension '%s' overrides commands: %s\n"
-msgstr ""
+msgstr "エクステンション '%s' がコマンドを上書きします: %s\n"
 
 msgid "Option --config may not be abbreviated!"
-msgstr ""
+msgstr "--config 指定値が未解析の可能性があります!"
 
 msgid "Option --cwd may not be abbreviated!"
-msgstr ""
-
-msgid ""
-"Option -R has to be separated from other options (i.e. not -qR) and --"
+msgstr "--cwd 指定値が未解析の可能性があります!"
+
+msgid ""
+"Option -R has to be separated from other options (e.g. not -qR) and --"
 "repository may only be abbreviated as --repo!"
-msgstr ""
+msgstr "-R は独立記述(例: '-dR' は不可)、--repository の略記は --repo のみ"
 
 #, python-format
 msgid "Time: real %.3f secs (user %.3f+%.3f sys %.3f+%.3f)\n"
-msgstr ""
+msgstr "所要時間: 実時間 %.3f 秒 (ユーザ %.3f+%.3f システム %.3f+%.3f)\n"
 
 #, python-format
 msgid "repository '%s' is not local"
-msgstr ""
+msgstr "リポジトリ '%s' はローカルリポジトリではありません"
 
 msgid "invalid arguments"
-msgstr ""
-
-msgid "exception raised - generating profile anyway\n"
-msgstr ""
+msgstr "引数が不正です"
+
+#, python-format
+msgid "unrecognized profiling format '%s' - Ignored\n"
+msgstr "不正なプロファイル形式 '%s' を無視します\n"
 
 msgid ""
 "lsprof not available - install from http://codespeak.net/svn/user/arigo/hack/"
 "misc/lsprof/"
 msgstr ""
+"lsprof が利用できません - http://codespeak.net/svn/user/arigo/hack/misc/"
+"lsprof/ からインストールしてください"
 
 #, python-format
 msgid "*** failed to import extension %s from %s: %s\n"
-msgstr ""
+msgstr "*** %s のインポートに失敗 (%s): %s\n"
 
 #, python-format
 msgid "*** failed to import extension %s: %s\n"
-msgstr ""
+msgstr "*** %s のインポートに失敗: %s\n"
 
 #, python-format
 msgid "couldn't find merge tool %s\n"
-msgstr ""
+msgstr "マージツール %s が見つかりません\n"
 
 #, python-format
 msgid "tool %s can't handle symlinks\n"
-msgstr ""
+msgstr "ツール %s はシンボリックリンクを扱えません\n"
 
 #, python-format
 msgid "tool %s can't handle binary\n"
-msgstr ""
+msgstr "ツール %s はバイナリを扱えません\n"
 
 #, python-format
 msgid "tool %s requires a GUI\n"
-msgstr ""
+msgstr "ツール %s は GUI が必要です\n"
 
 #, python-format
 msgid "picked tool '%s' for %s (binary %s symlink %s)\n"
-msgstr ""
+msgstr "%s のマージ用に '%s' が選択(バイナリ %s シンボリックリンク %s)\n"
 
 #, python-format
 msgid ""
 " no tool found to merge %s\n"
 "keep (l)ocal or take (o)ther?"
 msgstr ""
-
-msgid "[lo]"
-msgstr ""
+" %s のマージに適切なツールが見つかりません\n"
+"どうしますか? 作業領域の内容:(l)ocal、マージ対象の内容:(o)ther"
+
+msgid "&Local"
+msgstr "&Local"
+
+msgid "&Other"
+msgstr "&Other"
 
 msgid "l"
-msgstr ""
+msgstr "l"
 
 #, python-format
 msgid "merging %s and %s to %s\n"
-msgstr ""
+msgstr "%s と %s を %s にマージ中\n"
 
 #, python-format
 msgid "merging %s\n"
-msgstr ""
+msgstr "%s をマージ中\n"
 
 #, python-format
 msgid "my %s other %s ancestor %s\n"
-msgstr ""
+msgstr "作業領域 %s マージ対象 %s 共通祖先 %s\n"
 
 msgid " premerge successful\n"
-msgstr ""
+msgstr " 事前マージ成功\n"
 
 #, python-format
 msgid ""
 " output file %s appears unchanged\n"
 "was merge successful (yn)?"
 msgstr ""
-
-msgid "[yn]"
-msgstr ""
+" マージ結果ファイル %s は未変更に見えます\n"
+"マージ成功とみなしますか? (yn)"
+
+msgid "&No"
+msgstr "&No"
+
+msgid "&Yes"
+msgstr "&Yes"
 
 msgid "n"
-msgstr ""
+msgstr "n"
 
 #, python-format
 msgid "merging %s failed!\n"
-msgstr ""
+msgstr "%s のマージに失敗!\n"
 
 #, python-format
 msgid "Inconsistent state, %s:%s is good and bad"
-msgstr ""
+msgstr "状態が矛盾 - %s:%s は判定不能"
 
 #, python-format
 msgid "unknown bisect kind %s"
-msgstr ""
+msgstr "未知の分岐種類 %s"
+
+msgid ""
+"\n"
+"    Mercurial has the ability to add new features through the use of\n"
+"    extensions. Extensions may add new commands, add options to\n"
+"    existing commands, change the default behavior of commands, or\n"
+"    implement hooks.\n"
+"\n"
+"    Extensions are not loaded by default for a variety of reasons:\n"
+"    they can increase startup overhead; they may be meant for\n"
+"    advanced usage only; they may provide potentially dangerous\n"
+"    abilities (such as letting you destroy or modify history); they\n"
+"    might not be ready for prime time; or they may alter some\n"
+"    usual behaviors of stock Mercurial. It is thus up to the user to\n"
+"    activate extensions as needed.\n"
+"\n"
+"    To enable the \"foo\" extension, either shipped with Mercurial\n"
+"    or in the Python search path, create an entry for it in your\n"
+"    hgrc, like this:\n"
+"\n"
+"      [extensions]\n"
+"      foo =\n"
+"\n"
+"    You may also specify the full path to an extension:\n"
+"\n"
+"      [extensions]\n"
+"      myfeature = ~/.hgext/myfeature.py\n"
+"\n"
+"    To explicitly disable an extension enabled in an hgrc of broader\n"
+"    scope, prepend its path with !:\n"
+"\n"
+"      [extensions]\n"
+"      # disabling extension bar residing in /path/to/extension/bar.py\n"
+"      hgext.bar = !/path/to/extension/bar.py\n"
+"      # ditto, but no path was supplied for extension baz\n"
+"      hgext.baz = !\n"
+"    "
+msgstr ""
+"\n"
+"    Mercurial には、新規機能を「エクステンション」という機構を用いて\n"
+"    追加する仕組みが備わっています。エクステンションでは、コマンドの\n"
+"    新規追加、既存コマンドへのオプションの追加、コマンドの挙動の変更、\n"
+"    フックの実装といったことが可能です。\n"
+"\n"
+"    様々な事情から、特に指定の無い場合にはエクステンションは読み込まれ\n"
+"    ません。付加的な読み込みは、起動時間の増加を意味します。上級用途\n"
+"    限定のものもあります。(履歴の破壊や改変などの)潜在的な危険性を持つ\n"
+"    場合もあります。実験的なものであるかもしれません。これまでの\n"
+"    Mercurial の振る舞いを変えてしまうかもしれません。エクステンションを\n"
+"    必要に応じて有効化するのは利用者の責務です。\n"
+"\n"
+"    \"foo\" というエクステンションを有効化するには、Mercurial 同梱の\n"
+"    ものであろうと、Python の検索パス中のものであろうと、設定ファイル\n"
+"    において以下のような記述が必要です。\n"
+"\n"
+"      [extensions]\n"
+"      foo =\n"
+"\n"
+"    エクステンションへのフルパスを記述することも可能です。\n"
+"\n"
+"      [extensions]\n"
+"      myfeature = ~/.hgext/myfeature.py\n"
+"\n"
+"    明示的にエクステンションを無効化する場合、適切な設定ファイルにおいて\n"
+"    パス指定の冒頭に '!' を付与します。\n"
+"\n"
+"      [extensions]\n"
+"      # /path/to/extension/bar.py にあるエクステンション bar の無効化\n"
+"      hgext.bar = !/path/to/extension/bar.py\n"
+"      # こちらはパス指定無しでの baz エクステンションの無効化\n"
+"      hgext.baz = !\n"
+"    "
+
+msgid "disabled extensions:"
+msgstr "無効化されているエクステンション:"
 
 msgid "Date Formats"
 msgstr "日時表記"
@@ -7982,9 +8549,9 @@
 "    \"1165432709 0\" (Wed Dec 6 13:18:29 2006 UTC)\n"
 "\n"
 "    This is the internal representation format for dates. unixtime is\n"
-"    the number of seconds since the epoch (1970-01-01 00:00 UTC). offset\n"
-"    is the offset of the local timezone, in seconds west of UTC (negative\n"
-"    if the timezone is east of UTC).\n"
+"    the number of seconds since the epoch (1970-01-01 00:00 UTC).\n"
+"    offset is the offset of the local timezone, in seconds west of UTC\n"
+"    (negative if the timezone is east of UTC).\n"
 "\n"
 "    The log command also accepts date ranges:\n"
 "\n"
@@ -8131,10 +8698,10 @@
 msgid ""
 "\n"
 "HG::\n"
-"    Path to the 'hg' executable, automatically passed when running hooks,\n"
-"    extensions or external tools. If unset or empty, this is the hg\n"
-"    executable's name if it's frozen, or an executable named 'hg'\n"
-"    (with %PATHEXT% [defaulting to COM/EXE/BAT/CMD] extensions on\n"
+"    Path to the 'hg' executable, automatically passed when running\n"
+"    hooks, extensions or external tools. If unset or empty, this is\n"
+"    the hg executable's name if it's frozen, or an executable named\n"
+"    'hg' (with %PATHEXT% [defaulting to COM/EXE/BAT/CMD] extensions on\n"
 "    Windows) is searched.\n"
 "\n"
 "HGEDITOR::\n"
@@ -8170,8 +8737,8 @@
 "    from the current repository is read.\n"
 "\n"
 "    For each element in HGRCPATH:\n"
-"    * if it's a directory, all directories ending with .rc are added\n"
-"    * otherwise, the directory itself will be added\n"
+"    * if it's a directory, all files ending with .rc are added\n"
+"    * otherwise, the file itself will be added\n"
 "\n"
 "HGUSER::\n"
 "    This is the string used as the author of a commit. If not set,\n"
@@ -8195,16 +8762,16 @@
 "    This is the name of the editor to use when committing. See EDITOR.\n"
 "\n"
 "EDITOR::\n"
-"    Sometimes Mercurial needs to open a text file in an editor\n"
-"    for a user to modify, for example when writing commit messages.\n"
-"    The editor it uses is determined by looking at the environment\n"
+"    Sometimes Mercurial needs to open a text file in an editor for a\n"
+"    user to modify, for example when writing commit messages. The\n"
+"    editor it uses is determined by looking at the environment\n"
 "    variables HGEDITOR, VISUAL and EDITOR, in that order. The first\n"
 "    non-empty one is chosen. If all of them are empty, the editor\n"
 "    defaults to 'vi'.\n"
 "\n"
 "PYTHONPATH::\n"
-"    This is used by Python to find imported modules and may need to be set\n"
-"    appropriately if this Mercurial is not installed system-wide.\n"
+"    This is used by Python to find imported modules and may need to be\n"
+"    set appropriately if this Mercurial is not installed system-wide.\n"
 "    "
 msgstr ""
 "\n"
@@ -8225,7 +8792,7 @@
 "    Mercurial によるロケール自動検出の上書き。この設定は、ユーザ名、\n"
 "    コミットメッセージ、タグ名およびブランチ名を内部データ形式に変換する\n"
 "    際に使用されます。この環境変数設定は、コマンドラインでの --encoding\n"
-"    オプションの使用により、更に上書きすることが出来ます。\n"
+"    使用により、更に上書きすることが出来ます。\n"
 "\n"
 "HGENCODINGMODE::\n"
 "    ユーザからの指定値を内部データ形式に変換する際に、指定の符号化と\n"
@@ -8234,7 +8801,7 @@
 "    されたものとみなします。他には、「未知の文字の置き換え」を意味する\n"
 "    \"replace\" と、「未知の文字の切り捨て」を意味する \"ignore\" が指定\n"
 "    出来ます。この環境変数設定は、コマンドラインでの --encodingmode\n"
-"    オプションの使用により、更に上書きすることが出来ます。\n"
+"    使用により、更に上書きすることが出来ます。\n"
 "\n"
 "HGMERGE::\n"
 "    マージの際の衝突解消に使用するコマンド。指定されたコマンドの起動には、\n"
@@ -8287,7 +8854,7 @@
 "\n"
 "PYTHONPATH::\n"
 "    Mercurial が当該システムの共有領域にインストールされていない場合、\n"
-"    Python が必要なモジュールを読み込むためには、この変数変数の設定が\n"
+"    Python が必要なモジュールを読み込むためには、この環境変数の設定が\n"
 "    必要です。\n"
 "    "
 
@@ -8296,14 +8863,13 @@
 
 msgid ""
 "\n"
-"    Mercurial supports several ways to specify individual\n"
-"    revisions.\n"
-"\n"
-"    A plain integer is treated as a revision number. Negative\n"
-"    integers are treated as toplogical offsets from the tip, with\n"
-"    -1 denoting the tip. As such, negative numbers are only useful\n"
-"    if you've memorized your local tree numbers and want to save\n"
-"    typing a single digit. This editor suggests copy and paste.\n"
+"    Mercurial supports several ways to specify individual revisions.\n"
+"\n"
+"    A plain integer is treated as a revision number. Negative integers\n"
+"    are treated as topological offsets from the tip, with -1 denoting\n"
+"    the tip. As such, negative numbers are only useful if you've\n"
+"    memorized your local tree numbers and want to save typing a single\n"
+"    digit. This editor suggests copy and paste.\n"
 "\n"
 "    A 40-digit hexadecimal string is treated as a unique revision\n"
 "    identifier.\n"
@@ -8324,9 +8890,9 @@
 "    revision of an empty repository, and the parent of revision 0.\n"
 "\n"
 "    The reserved name \".\" indicates the working directory parent. If\n"
-"    no working directory is checked out, it is equivalent to null.\n"
-"    If an uncommitted merge is in progress, \".\" is the revision of\n"
-"    the first parent.\n"
+"    no working directory is checked out, it is equivalent to null. If\n"
+"    an uncommitted merge is in progress, \".\" is the revision of the\n"
+"    first parent.\n"
 "    "
 msgstr ""
 "\n"
@@ -8369,8 +8935,8 @@
 "    The syntax of range notation is [BEGIN]:[END], where BEGIN and END\n"
 "    are revision identifiers. Both BEGIN and END are optional. If\n"
 "    BEGIN is not specified, it defaults to revision number 0. If END\n"
-"    is not specified, it defaults to the tip. The range \":\" thus\n"
-"    means \"all revisions\".\n"
+"    is not specified, it defaults to the tip. The range \":\" thus means\n"
+"    \"all revisions\".\n"
 "\n"
 "    If BEGIN is greater than END, revisions are treated in reverse\n"
 "    order.\n"
@@ -8404,9 +8970,10 @@
 
 msgid ""
 "\n"
-"    Mercurial's default format for showing changes between two versions\n"
-"    of a file is compatible with the unified format of GNU diff, which\n"
-"    can be used by GNU patch and many other standard tools.\n"
+"    Mercurial's default format for showing changes between two\n"
+"    versions of a file is compatible with the unified format of GNU\n"
+"    diff, which can be used by GNU patch and many other standard\n"
+"    tools.\n"
 "\n"
 "    While this standard format is often enough, it does not encode the\n"
 "    following information:\n"
@@ -8424,15 +8991,16 @@
 "    This means that when generating diffs from a Mercurial repository\n"
 "    (e.g. with \"hg export\"), you should be careful about things like\n"
 "    file copies and renames or other things mentioned above, because\n"
-"    when applying a standard diff to a different repository, this extra\n"
-"    information is lost. Mercurial's internal operations (like push and\n"
-"    pull) are not affected by this, because they use an internal binary\n"
-"    format for communicating changes.\n"
+"    when applying a standard diff to a different repository, this\n"
+"    extra information is lost. Mercurial's internal operations (like\n"
+"    push and pull) are not affected by this, because they use an\n"
+"    internal binary format for communicating changes.\n"
 "\n"
 "    To make Mercurial produce the git extended diff format, use the\n"
-"    --git option available for many commands, or set 'git = True' in the\n"
-"    [diff] section of your hgrc. You do not need to set this option when\n"
-"    importing diffs in this format or using them in the mq extension.\n"
+"    --git option available for many commands, or set 'git = True' in\n"
+"    the [diff] section of your hgrc. You do not need to set this\n"
+"    option when importing diffs in this format or using them in the mq\n"
+"    extension.\n"
 "    "
 msgstr ""
 "\n"
@@ -8460,7 +9028,7 @@
 "    ことから、情報の欠落に関しては心配する必要はありません。\n"
 "\n"
 "    Mercurial から git 拡張差分形式の出力を得るには、受理可能なコマンドに\n"
-"    対して --git オプションを指定するか、設定ファイルの [diff] セクションに\n"
+"    対して --git を指定するか、設定ファイルの [diff] セクションに\n"
 "    'git = True' 記述を追加してください。hg import や mq エクステンションを\n"
 "    使用する場合は、この指定は不要です。\n"
 "    "
@@ -8471,49 +9039,52 @@
 msgid ""
 "\n"
 "    Mercurial allows you to customize output of commands through\n"
-"    templates. You can either pass in a template from the command line,\n"
-"    via the --template option, or select an existing template-style (--"
-"style).\n"
-"\n"
-"    You can customize output for any \"log-like\" command: log, outgoing,\n"
-"    incoming, tip, parents, heads and glog.\n"
+"    templates. You can either pass in a template from the command\n"
+"    line, via the --template option, or select an existing\n"
+"    template-style (--style).\n"
+"\n"
+"    You can customize output for any \"log-like\" command: log,\n"
+"    outgoing, incoming, tip, parents, heads and glog.\n"
 "\n"
 "    Three styles are packaged with Mercurial: default (the style used\n"
-"    when no explicit preference is passed), compact and changelog. Usage:\n"
+"    when no explicit preference is passed), compact and changelog.\n"
+"    Usage:\n"
 "\n"
 "        $ hg log -r1 --style changelog\n"
 "\n"
-"    A template is a piece of text, with markup to invoke variable "
-"expansion:\n"
+"    A template is a piece of text, with markup to invoke variable\n"
+"    expansion:\n"
 "\n"
 "        $ hg log -r1 --template \"{node}\\n\"\n"
 "        b56ce7b07c52de7d5fd79fb89701ea538af65746\n"
 "\n"
 "    Strings in curly braces are called keywords. The availability of\n"
-"    keywords depends on the exact context of the templater. These keywords\n"
-"    are usually available for templating a log-like command:\n"
+"    keywords depends on the exact context of the templater. These\n"
+"    keywords are usually available for templating a log-like command:\n"
 "\n"
 "    - author: String. The unmodified author of the changeset.\n"
 "    - branches: String. The name of the branch on which the changeset\n"
 "          was committed. Will be empty if the branch name was default.\n"
 "    - date: Date information. The date when the changeset was committed.\n"
 "    - desc: String. The text of the changeset description.\n"
+"    - diffstat: String. Statistics of changes with the following\n"
+"          format: \"modified files: +added/-removed lines\"\n"
 "    - files: List of strings. All files modified, added, or removed by\n"
 "          this changeset.\n"
 "    - file_adds: List of strings. Files added by this changeset.\n"
 "    - file_mods: List of strings. Files modified by this changeset.\n"
 "    - file_dels: List of strings. Files removed by this changeset.\n"
-"    - node: String. The changeset identification hash, as a 40-character\n"
-"          hexadecimal string.\n"
+"    - node: String. The changeset identification hash, as a\n"
+"          40-character hexadecimal string.\n"
 "    - parents: List of strings. The parents of the changeset.\n"
 "    - rev: Integer. The repository-local changeset revision number.\n"
 "    - tags: List of strings. Any tags associated with the changeset.\n"
 "\n"
 "    The \"date\" keyword does not produce human-readable output. If you\n"
-"    want to use a date in your output, you can use a filter to process it.\n"
-"    Filters are functions which return a string based on the input "
-"variable.\n"
-"    You can also use a chain of filters to get the desired output:\n"
+"    want to use a date in your output, you can use a filter to process\n"
+"    it. Filters are functions which return a string based on the input\n"
+"    variable. You can also use a chain of filters to get the desired\n"
+"    output:\n"
 "\n"
 "       $ hg tip --template \"{date|isodate}\\n\"\n"
 "       2008-08-21 18:22 +0000\n"
@@ -8526,43 +9097,136 @@
 "          the given date/time and the current date/time.\n"
 "    - basename: Any text. Treats the text as a path, and returns the\n"
 "          last component of the path after splitting by the path\n"
-"          separator (ignoring trailing seprators). For example,\n"
+"          separator (ignoring trailing separators). For example,\n"
 "          \"foo/bar/baz\" becomes \"baz\" and \"foo/bar//\" becomes \"bar"
 "\".\n"
+"    - stripdir: Treat the text as path and strip a directory level, if\n"
+"          possible. For example, \"foo\" and \"foo/bar\" becomes \"foo\".\n"
 "    - date: Date. Returns a date in a Unix date format, including\n"
 "          the timezone: \"Mon Sep 04 15:13:13 2006 0700\".\n"
-"    - domain: Any text. Finds the first string that looks like an email\n"
-"          address, and extracts just the domain component.\n"
+"    - domain: Any text. Finds the first string that looks like an\n"
+"          email address, and extracts just the domain component.\n"
 "          Example: 'User <user@example.com>' becomes 'example.com'.\n"
-"    - email: Any text. Extracts the first string that looks like an email\n"
-"          address. Example: 'User <user@example.com>' becomes\n"
+"    - email: Any text. Extracts the first string that looks like an\n"
+"          email address. Example: 'User <user@example.com>' becomes\n"
 "          '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"
 "    - fill76: Any text. Wraps the text to fit in 76 columns.\n"
 "    - firstline: Any text. Returns the first line of text.\n"
+"    - nonempty: Any text. Returns '(none)' if the string is empty.\n"
 "    - hgdate: Date. Returns the date as a pair of numbers:\n"
 "          \"1157407993 25200\" (Unix timestamp, timezone offset).\n"
 "    - isodate: Date. Returns the date in ISO 8601 format.\n"
-"    - obfuscate: Any text. Returns the input text rendered as a sequence\n"
-"          of XML entities.\n"
+"    - localdate: Date. Converts a date to local date.\n"
+"    - obfuscate: Any text. Returns the input text rendered as a\n"
+"          sequence of XML entities.\n"
 "    - person: Any text. Returns the text before an email address.\n"
 "    - rfc822date: Date. Returns a date using the same format used\n"
 "          in email headers.\n"
-"    - short: Changeset hash. Returns the short form of a changeset hash,\n"
-"          i.e. a 12-byte hexadecimal string.\n"
+"    - short: Changeset hash. Returns the short form of a changeset\n"
+"          hash, i.e. a 12-byte hexadecimal string.\n"
 "    - shortdate: Date. Returns a date like \"2006-09-18\".\n"
 "    - strip: Any text. Strips all leading and trailing whitespace.\n"
-"    - tabindent: Any text. Returns the text, with every line except the\n"
-"          first starting with a tab character.\n"
-"    - urlescape: Any text. Escapes all \"special\" characters. For example,\n"
-"          \"foo bar\" becomes \"foo%20bar\".\n"
+"    - tabindent: Any text. Returns the text, with every line except\n"
+"          the first starting with a tab character.\n"
+"    - urlescape: Any text. Escapes all \"special\" characters. For\n"
+"          example, \"foo bar\" becomes \"foo%20bar\".\n"
 "    - user: Any text. Returns the user portion of an email address.\n"
 "    "
 msgstr ""
-
-msgid "Url Paths"
+"\n"
+"    Mercurial では、テンプレート機能によってコマンドの出力をカスタマイズ\n"
+"    することができます。コマンドラインからの指定では、--template による\n"
+"    テンプレート指定と、--style によるスタイル指定の両方が使用できます。\n"
+"\n"
+"    「log 的」な出力を行う以下のコマンドの出力をカスタマイズ可能です:\n"
+"        log, outgoing, incoming, tip, parents, heads, glog\n"
+"\n"
+"    Mercurial には(明示的な指定が無い場合に使用される)default、compact\n"
+"    および changelog の3つのスタイル設定が同梱されています。利用方法は:\n"
+"\n"
+"        $ hg log -r1 --style changelog\n"
+"\n"
+"    テンプレートとは、変数展開マークアップ機能を備えたテキストです。\n"
+"\n"
+"        $ hg log -r1 --template \"{node}\\n\"\n"
+"        b56ce7b07c52de7d5fd79fb89701ea538af65746\n"
+"\n"
+"    波括弧で囲まれた部分は「キーワード」と呼ばれます。キーワード利用の\n"
+"    可否は、テンプレートの利用される状況に依存します。以下のキーワードは\n"
+"    log 的なコマンドでのテンプレート利用の際には常に使用可能です。\n"
+"\n"
+"    - author:    文字列。リビジョンの作者名(記録情報そのまま)。\n"
+"    - branches:  文字列。リビジョンの属するブランチ名。所属ブランチが\n"
+"                   default の場合は空文字列。\n"
+"    - date:      日時情報。リビジョンが記録された日時。\n"
+"    - desc:      文字列。リビジョンのコミットメッセージ。\n"
+"    - diffstat:  文字列。以下の形式での変更概要。\n"
+"                   \"変更対象ファイル: +追加行数/-削除行数\"\n"
+"    - files:     文字列列挙。当該リビジョンでの、変更/追加登録ないし\n"
+"                   登録除外ファイルの一覧。\n"
+"    - file_adds: 文字列列挙。当該リビジョンでの追加ファイル一覧。\n"
+"    - file_mods: 文字列列挙。当該リビジョンでの変更ファイル一覧。\n"
+"    - file_dels: 文字列列挙。当該リビジョンでの登録除外ファイル一覧。\n"
+"    - node:      文字列。リビジョン識別用の 40 桁 16 進数ハッシュ値。\n"
+"    - parents:   文字列列挙。リビジョンの親。\n"
+"    - rev:       整数。各リポジトリ固有のリビジョン番号。\n"
+"    - tags:      文字列列挙。当該リビジョンに付与されたタグの一覧。\n"
+"\n"
+"    \"date\" キーワードの出力は可読形式ではありません。出力に日時情報を\n"
+"    含めたい場合、可読化するために「フィルター」を使用します。\n"
+"    「フィルター」とは、指定値に基づいて文字列を生成する機能です。複数の\n"
+"    フィルターを連ねることで、様々な出力を得ることができます。\n"
+"\n"
+"       $ hg tip --template \"{date|isodate}\\n\"\n"
+"       2008-08-21 18:22 +0000\n"
+"\n"
+"    フィルター一覧(入力と、それに対する出力):\n"
+"\n"
+"    - addbreaks: 文字列。最終行を除く各行の行末に XHTML の \n"
+"                   \"<br />\" タグを追加します。\n"
+"    - age:       日時情報。与えられた日時と、現在日時との差分を表す\n"
+"                   可読形式の文字列を生成します。\n"
+"    - basename:  文字列。与えられた文字列をパスとみなし、パス区切りで\n"
+"                   区切られた最後の要素だけを取り出します(末尾パス\n"
+"                   区切りは無視されます)。例えば、\"foo/bar/baz\" は\n"
+"                    \"baz\" に、\"foo/bar//\" は \"bar\" になります。\n"
+"    - stripdir:  文字列。与えられた文字列をパスとみなし、ディレクトリ\n"
+"                   要素があればそれを取り除きます。例えば、\"foo\"\n"
+"                   および \"foo/bar\" は \"foo\" となります。\n"
+"    - date:      日時情報。タイムゾーンを含んだ、Unix の date コマンド\n"
+"                   形式で可読化します: \"Mon Sep 04 15:13:13 2006 0700\"\n"
+"    - domain:    文字列。メールアドレスと思しき最初の文字列部分から\n"
+"                   ドメイン部分だけを取り出します。例えば、\n"
+"                   'User <user@example.com>' は 'example.com' です。\n"
+"    - email:     文字列。メールアドレスと思しき最初の部分を取り出します。\n"
+"                   例えば 'User <user@example.com>' は\n"
+"                   'user@example.com' となります。\n"
+"    - escape:    文字列。XML/XHTML の特殊文字である \"&\"、\"<\" および\n"
+"                   \">\" を XML のエンティティ形式に変換します。\n"
+"    - fill68:    文字列。68 桁に収まるように文字列を折り返します。\n"
+"    - fill76:    文字列。76 桁に収まるように文字列を折り返します。\n"
+"    - firstline: 文字列。最初の行のみを取り出します。\n"
+"    - nonempty:  文字列。与えられた文字列が空の場合 '(none)'となります。\n"
+"    - hgdate:    日時情報。Unix タイムスタンプとタイムゾーンオフセット\n"
+"                   による数値対形式で可読化します: \"1157407993 25200\"\n"
+"    - isodate:   日時情報。ISO 8601 形式で可読化します。\n"
+"    - localdate: 日時情報。ローカル日時で可読化します。\n"
+"    - obfuscate: 文字列。全ての文字を XML エンティティ形式に変換します。\n"
+"    - person:    文字列。メールアドレス直前の部分だけを取り出します。\n"
+"    - rfc822date:日時情報。メールのヘッダと同形式で可読化します。\n"
+"    - short:     リビジョンハッシュ 値。12 桁程度の短縮形式にします。\n"
+"    - shortdate: 日時情報。\"2006-09-18\" 形式で可読化します。\n"
+"    - strip:     文字列。先頭/末尾の空白文字を取り除きます。\n"
+"    - tabindent: 文字列。先頭行以外をタブ文字で字下げします。\n"
+"    - urlescape: 文字列。全ての「特殊」文字を変換します。\n"
+"                   例えば \"foo bar\" は \"foo%20bar\" となります。\n"
+"    - user:      文字列。メールアドレスのユーザ名部分を取り出します。\n"
+"    "
+
+msgid "URL Paths"
 msgstr "URLのパス指定"
 
 msgid ""
@@ -8582,43 +9246,45 @@
 "    or changeset to use from the remote repository.\n"
 "\n"
 "    Some features, such as pushing to http:// and https:// URLs are\n"
-"    only possible if the feature is explicitly enabled on the\n"
-"    remote Mercurial server.\n"
+"    only possible if the feature is explicitly enabled on the remote\n"
+"    Mercurial server.\n"
 "\n"
 "    Some notes about using SSH with Mercurial:\n"
-"    - SSH requires an accessible shell account on the destination machine\n"
-"      and a copy of hg in the remote path or specified with as remotecmd.\n"
+"    - SSH requires an accessible shell account on the destination\n"
+"      machine and a copy of hg in the remote path or specified with as\n"
+"      remotecmd.\n"
 "    - path is relative to the remote user's home directory by default.\n"
 "      Use an extra slash at the start of a path to specify an absolute "
 "path:\n"
 "        ssh://example.com//tmp/repository\n"
-"    - Mercurial doesn't use its own compression via SSH; the right thing\n"
-"      to do is to configure it in your ~/.ssh/config, e.g.:\n"
+"    - Mercurial doesn't use its own compression via SSH; the right\n"
+"      thing to do is to configure it in your ~/.ssh/config, e.g.:\n"
 "        Host *.mylocalnetwork.example.com\n"
 "          Compression no\n"
 "        Host *\n"
 "          Compression yes\n"
-"      Alternatively specify \"ssh -C\" as your ssh command in your hgrc or\n"
-"      with the --ssh command line option.\n"
-"\n"
-"    These urls can all be stored in your hgrc with path aliases under the\n"
-"    [paths] section like so:\n"
+"      Alternatively specify \"ssh -C\" as your ssh command in your hgrc\n"
+"      or with the --ssh command line option.\n"
+"\n"
+"    These URLs can all be stored in your hgrc with path aliases under\n"
+"    the [paths] section like so:\n"
 "    [paths]\n"
 "    alias1 = URL1\n"
 "    alias2 = URL2\n"
 "    ...\n"
 "\n"
-"    You can then use the alias for any command that uses a url (for example\n"
-"    'hg pull alias1' would pull from the 'alias1' path).\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"
 "\n"
 "    Two path aliases are special because they are used as defaults\n"
-"    when you do not provide the url to a command:\n"
+"    when you do not provide the URL to a command:\n"
 "\n"
 "    default:\n"
-"      When you create a repository with hg clone, the clone command saves\n"
-"      the location of the source repository as the new repository's\n"
-"      'default' path. This is then used when you omit path from push-\n"
-"      and pull-like commands (including in and out).\n"
+"      When you create a repository with hg clone, the clone command\n"
+"      saves the location of the source repository as the new\n"
+"      repository's 'default' path. This is then used when you omit\n"
+"      path from push- and pull-like commands (including incoming and\n"
+"      outgoing).\n"
 "\n"
 "    default-push:\n"
 "      The push command will look for a path named 'default-push', and\n"
@@ -8648,7 +9314,7 @@
 "    Mercurial と SSH を併用する場合の注意点:\n"
 "    - SSH アクセス先ホスト上に、shell アカウントと hg コマンドが必要です。\n"
 "      hg コマンドがアクセス先ホストの PATH 設定で利用可能になっていない\n"
-"      場合は、--remotecmd オプションで明示的に指定してください。\n"
+"      場合は、--remotecmd で明示的に指定してください。\n"
 "    - URL 中のパス指定は、アクセス先ホスト上のユーザのホームディレクトリ\n"
 "      からの相対パスとみなされます。絶対パスを指定する場合は、パスの先頭に\n"
 "      更にスラッシュ('/')を付与してください。\n"
@@ -8660,7 +9326,7 @@
 "         Host *\n"
 "           Compression yes\n"
 "      あるいは、設定ファイルにおける ssh コマンド指定や、コマンドラインでの\n"
-"      --ssh オプションに対して、'ssh -C' を指定する方法もあります。\n"
+"      --ssh に対して、'ssh -C' を指定する方法もあります。\n"
 "\n"
 "    連携先 URL は、設定ファイルの [paths] セクションで、別名を付けて記述\n"
 "    することが出来ます。\n"
@@ -8687,1164 +9353,1253 @@
 "      こちらが優先されます。\n"
 "    "
 
+msgid "Using additional features"
+msgstr "付加機能の使用"
+
+msgid "can only share local repositories"
+msgstr "共有可能なのはローカルリポジトリのみです"
+
+msgid "destination already exists"
+msgstr "複製先 '%s' は既に存在します"
+
+msgid "updating working directory\n"
+msgstr "作業領域の更新中\n"
+
 #, python-format
 msgid "destination directory: %s\n"
-msgstr ""
+msgstr "複製先ディレクトリ: %s\n"
 
 #, python-format
 msgid "destination '%s' already exists"
-msgstr ""
+msgstr "複製先 '%s' は既に存在します"
+
+#, python-format
+msgid "destination '%s' is not empty"
+msgstr "複製先 '%s' は空ではありません"
 
 msgid ""
 "src repository does not support revision lookup and so doesn't support clone "
 "by revision"
-msgstr ""
+msgstr "指定の複製元では、リビジョン指定付きでの複製ができません"
 
 msgid "clone from remote to remote not supported"
-msgstr ""
-
-msgid "updating working directory\n"
-msgstr ""
+msgstr "リモートからリモートの複製はサポートしていません"
 
 msgid "updated"
-msgstr ""
+msgstr "更新"
 
 msgid "merged"
-msgstr ""
+msgstr "マージ"
 
 msgid "removed"
-msgstr ""
+msgstr "削除"
 
 msgid "unresolved"
-msgstr ""
+msgstr "衝突未解決"
 
 #, python-format
 msgid "%d files %s"
-msgstr ""
+msgstr "%d 個のファイルが%s"
 
 msgid "use 'hg resolve' to retry unresolved file merges\n"
-msgstr ""
+msgstr "'hg resolve' でマージの衝突を解消してください\n"
 
 msgid ""
 "use 'hg resolve' to retry unresolved file merges or 'hg up --clean' to "
 "abandon\n"
-msgstr ""
+msgstr "'hg resolve' で再度衝突解消するか、'hg up --clean' で変更破棄を。\n"
 
 msgid "(branch merge, don't forget to commit)\n"
-msgstr ""
+msgstr "(マージ結果の commit を忘れずに)\n"
 
 #, python-format
 msgid "error reading %s/.hg/hgrc: %s\n"
-msgstr ""
+msgstr "%s/.hg/hgrc の読み込みに失敗: %s\n"
 
 msgid "SSL support is unavailable"
-msgstr ""
-
-msgid "IPv6 not available on this system"
-msgstr ""
+msgstr "SSL サポートが利用できません"
+
+msgid "IPv6 is not available on this system"
+msgstr "このシステムでは IPv6 を利用できません"
 
 #, python-format
 msgid "cannot start server at '%s:%d': %s"
-msgstr ""
+msgstr "'%s:%d' でのサーバ起動に失敗: %s"
 
 #, python-format
 msgid "calling hook %s: %s\n"
-msgstr ""
+msgstr "フック %s:%s 呼び出し中\n"
 
 #, python-format
 msgid "%s hook is invalid (\"%s\" not in a module)"
-msgstr ""
+msgstr "フック %s は不正です(モジュール中に \"%s\" がありません)"
 
 #, python-format
 msgid "%s hook is invalid (import of \"%s\" failed)"
-msgstr ""
+msgstr "フック %s は不正です(\"%s\" の読み込みに失敗)"
 
 #, python-format
 msgid "%s hook is invalid (\"%s\" is not defined)"
-msgstr ""
+msgstr "フック %s は不正です(\"%s\" は未定義です)"
 
 #, python-format
 msgid "%s hook is invalid (\"%s\" is not callable)"
-msgstr ""
+msgstr "フック %s は不正です(\"%s\" は呼び出し可能ではありません)"
 
 #, python-format
 msgid "error: %s hook failed: %s\n"
-msgstr ""
+msgstr "エラー: フック %s の失敗: %s\n"
 
 #, python-format
 msgid "error: %s hook raised an exception: %s\n"
-msgstr ""
+msgstr "エラー: フック %s による例外浮揚: %s\n"
 
 #, python-format
 msgid "%s hook failed"
-msgstr ""
+msgstr "フック %s の失敗"
 
 #, python-format
 msgid "warning: %s hook failed\n"
-msgstr ""
+msgstr "警告: フック %s の失敗\n"
 
 #, python-format
 msgid "running hook %s: %s\n"
-msgstr ""
+msgstr "フック %s: %s の実行中\n"
 
 #, python-format
 msgid "%s hook %s"
-msgstr ""
+msgstr "%s フック %s"
 
 #, python-format
 msgid "warning: %s hook %s\n"
-msgstr ""
+msgstr "警告: %s フック %s\n"
 
 msgid "connection ended unexpectedly"
-msgstr ""
+msgstr "予期せぬ接続終了"
 
 #, python-format
 msgid "unsupported URL component: \"%s\""
-msgstr ""
+msgstr "URL 要素 \"%s\" はサポートされていません"
 
 #, python-format
 msgid "using %s\n"
-msgstr ""
+msgstr "%s を用います\n"
 
 #, python-format
 msgid "capabilities: %s\n"
-msgstr ""
+msgstr "機能: %s\n"
 
 msgid "operation not supported over http"
-msgstr ""
+msgstr "http リポジトリでは使用できない機能を必要としています"
 
 #, python-format
 msgid "sending %s command\n"
-msgstr ""
+msgstr "コマンド %s 送信中\n"
 
 #, python-format
 msgid "sending %s bytes\n"
-msgstr ""
+msgstr "%s バイトのデータ送信中\n"
 
 msgid "authorization failed"
-msgstr ""
+msgstr "認証に失敗"
 
 #, python-format
 msgid "http error while sending %s command\n"
-msgstr ""
+msgstr "コマンド %s 送信中の HTTP エラー\n"
 
 msgid "http error, possibly caused by proxy setting"
-msgstr ""
+msgstr "HTTP エラー(おそらくプロキシー設定に起因)"
 
 #, python-format
 msgid "real URL is %s\n"
-msgstr ""
-
-#, python-format
-msgid "Requested URL: '%s'\n"
-msgstr ""
+msgstr "実際の URL: %s\n"
+
+#, python-format
+msgid "requested URL: '%s'\n"
+msgstr "要求 URL: '%s'\n"
 
 #, python-format
 msgid "'%s' does not appear to be an hg repository"
-msgstr ""
+msgstr "'%s' は Mercurial リポジトリ形式とは思われません"
 
 #, python-format
 msgid "'%s' sent a broken Content-Type header (%s)"
-msgstr ""
+msgstr "'%s' は壊れた Content-Type ヘッダ(%s)を送信しました"
 
 #, python-format
 msgid "'%s' uses newer protocol %s"
-msgstr ""
+msgstr "'%s' は新しいプロトコル %s を使います"
 
 msgid "look up remote revision"
-msgstr ""
+msgstr "連携先でのリビジョンの検索"
 
 msgid "unexpected response:"
-msgstr ""
+msgstr "未知の応答:"
 
 msgid "look up remote changes"
-msgstr ""
+msgstr "連携先での変更の検索"
 
 msgid "push failed (unexpected response):"
-msgstr ""
+msgstr "履歴反映に失敗(未知のレスポンス):"
 
 #, python-format
 msgid "push failed: %s"
-msgstr ""
+msgstr "履歴反映に失敗: %s"
 
 msgid "Python support for SSL and HTTPS is not installed"
-msgstr ""
+msgstr "SSL と HTTPS をサポートした Python がインストールされていません"
 
 msgid "cannot create new http repository"
-msgstr ""
+msgstr "http リポジトリの新規作成はできません"
 
 #, python-format
 msgid "%s: ignoring invalid syntax '%s'\n"
-msgstr ""
+msgstr "%s: 文法不正の '%s' を無視します\n"
 
 #, python-format
 msgid "skipping unreadable ignore file '%s': %s\n"
-msgstr ""
+msgstr "読込不可の ignore ファイル '%s' をスキップします: %s\n"
 
 #, python-format
 msgid "repository %s not found"
-msgstr ""
+msgstr "リポジトリ '%s' が見つかりません"
 
 #, python-format
 msgid "repository %s already exists"
-msgstr ""
+msgstr "%sというリポジトリは既に存在しています"
 
 #, python-format
 msgid "requirement '%s' not supported"
-msgstr ""
+msgstr "必須機能 '%s' はサポートされていません"
+
+#, python-format
+msgid ".hg/sharedpath points to nonexistent directory %s"
+msgstr ".hg/sharedpath の参照先 %s は存在しません"
 
 #, python-format
 msgid "%r cannot be used in a tag name"
-msgstr ""
+msgstr "%r はタグ名に使用できません"
 
 msgid "working copy of .hgtags is changed (please commit .hgtags manually)"
-msgstr ""
+msgstr "作業領域の .hgtags が変更されています(手動でコミットしてください)"
 
 #, python-format
 msgid "%s, line %s: %s\n"
-msgstr ""
+msgstr "%s %s行目: %s\n"
 
 msgid "cannot parse entry"
-msgstr ""
+msgstr "エントリを読み込めません"
 
 #, python-format
 msgid "node '%s' is not well formed"
-msgstr ""
-
-#, python-format
-msgid "tag '%s' refers to unknown node"
-msgstr ""
+msgstr "'%s' というノードはフォーマットが不適切です"
+
+#, python-format
+msgid "working directory has unknown parent '%s'!"
+msgstr "作業領域の親 '%s' が未知のディレクトリです!"
 
 #, python-format
 msgid "unknown revision '%s'"
-msgstr ""
+msgstr "'%s' は未知のリビジョンです"
 
 #, python-format
 msgid "filtering %s through %s\n"
-msgstr ""
+msgstr "%s を %s で処理中\n"
 
 msgid "journal already exists - run hg recover"
-msgstr ""
+msgstr "ジャーナルが既に存在しています。 hg recoverを実行してください"
 
 msgid "rolling back interrupted transaction\n"
-msgstr ""
+msgstr "中断されたトランザクションをロールバックしています\n"
 
 msgid "no interrupted transaction available\n"
-msgstr ""
+msgstr "中断されたトランザクションはありません\n"
 
 msgid "rolling back last transaction\n"
-msgstr ""
+msgstr "最新のトランザクションをロールバックしています\n"
 
 #, python-format
 msgid "Named branch could not be reset, current branch still is: %s\n"
-msgstr ""
+msgstr "名前つきブランチはリセットできませんので、%s のままです\n"
 
 msgid "no rollback information available\n"
-msgstr ""
+msgstr "利用可能なロールバック情報がありません\n"
 
 #, python-format
 msgid "waiting for lock on %s held by %r\n"
-msgstr ""
+msgstr "%s のロック (%rが保持) の解放を待っています\n"
 
 #, python-format
 msgid "repository %s"
-msgstr ""
+msgstr "リポジトリ '%s'"
 
 #, python-format
 msgid "working directory of %s"
-msgstr ""
+msgstr "%s の作業領域"
 
 #, python-format
 msgid " %s: searching for copy revision for %s\n"
-msgstr ""
+msgstr "%s: コピー時点の %s を検索中\n"
 
 #, python-format
 msgid " %s: copy %s:%s\n"
-msgstr ""
+msgstr "%s: コピー %s:%s\n"
 
 msgid "cannot partially commit a merge (do not specify files or patterns)"
-msgstr ""
-
-#, python-format
-msgid "%s not tracked!\n"
-msgstr ""
+msgstr "マージの部分コミットはできません(ファイル名/パターンは指定できません)"
+
+msgid "file not found!"
+msgstr "ファイルが見つかりません!"
+
+msgid "no match under directory!"
+msgstr "ディレクト配下に一致するものがありません!"
+
+msgid "file not tracked!"
+msgstr "ファイルは未登録です!"
+
+msgid "nothing changed\n"
+msgstr "変更なし\n"
 
 msgid "unresolved merge conflicts (see hg resolve)"
-msgstr ""
-
-msgid "nothing changed\n"
-msgstr ""
+msgstr "未解決の衝突が残っています (hg resolveを参照してください)"
+
+#, python-format
+msgid "committing subrepository %s\n"
+msgstr "副リポジトリ %s でのコミット中\n"
 
 #, python-format
 msgid "trouble committing %s!\n"
-msgstr ""
-
-msgid "HG: Enter commit message.  Lines beginning with 'HG:' are removed."
-msgstr ""
-
-msgid "empty commit message"
-msgstr ""
+msgstr "%s のコミットに失敗しました!\n"
 
 #, python-format
 msgid "%s does not exist!\n"
-msgstr ""
+msgstr "%s はありません!\n"
 
 #, python-format
 msgid ""
 "%s: files over 10MB may cause memory and performance problems\n"
 "(use 'hg revert %s' to unadd the file)\n"
 msgstr ""
+"%s: 10MBを超えるファイルはメモリや性能の問題要因となり得ます\n"
+"(ファイルの登録を解除するには 'hg revert %s')\n"
 
 #, python-format
 msgid "%s not added: only files and symlinks supported currently\n"
-msgstr ""
+msgstr "%s は追加登録されません: ファイルとシンボリックリンクのみ登録可能\n"
 
 #, python-format
 msgid "%s already tracked!\n"
-msgstr ""
+msgstr "%s は登録済です!\n"
 
 #, python-format
 msgid "%s not added!\n"
-msgstr ""
+msgstr "%s は追加登録されません\n"
 
 #, python-format
 msgid "%s still exists!\n"
-msgstr ""
+msgstr "%s の削除に失敗しました!\n"
+
+#, python-format
+msgid "%s not tracked!\n"
+msgstr "%s は管理されていません!\n"
 
 #, python-format
 msgid "%s not removed!\n"
-msgstr ""
+msgstr "%s は削除されませんでした!\n"
 
 #, python-format
 msgid "copy failed: %s is not a file or a symbolic link\n"
-msgstr ""
+msgstr "コピー失敗: %s はファイルでもシンボリックリンクでもありません\n"
 
 msgid "searching for changes\n"
-msgstr ""
+msgstr "変更点を探索中\n"
 
 #, python-format
 msgid "examining %s:%s\n"
-msgstr ""
+msgstr "%s:%s をチェックしています\n"
 
 msgid "branch already found\n"
-msgstr ""
+msgstr "ブランチはすでに見つかっています\n"
 
 #, python-format
 msgid "found incomplete branch %s:%s\n"
-msgstr ""
+msgstr "不完全なブランチ: %s:%s\n"
 
 #, python-format
 msgid "found new changeset %s\n"
-msgstr ""
+msgstr "新しいチェンジセット '%s' を発見\n"
 
 #, python-format
 msgid "request %d: %s\n"
-msgstr ""
+msgstr "リクエスト %d: %s\n"
 
 #, python-format
 msgid "received %s:%s\n"
-msgstr ""
+msgstr "%s:%s を受信\n"
 
 #, python-format
 msgid "narrowing %d:%d %s\n"
-msgstr ""
+msgstr "%d:%d %s を探索中\n"
 
 #, python-format
 msgid "found new branch changeset %s\n"
-msgstr ""
+msgstr "新しいブランチのチェンジセット %s を発見\n"
 
 #, python-format
 msgid "narrowed branch search to %s:%s\n"
-msgstr ""
+msgstr "ブランチの探索を %s:%s へ絞りました\n"
 
 msgid "already have changeset "
-msgstr ""
+msgstr "既にチェンジセットがあります "
 
 msgid "warning: repository is unrelated\n"
-msgstr ""
+msgstr "警告: 無関係なリポジトリです\n"
 
 msgid "repository is unrelated"
-msgstr ""
+msgstr "無関係なリポジトリです"
 
 msgid "found new changesets starting at "
-msgstr ""
+msgstr "以下を起点とする新規変更の検出: "
 
 #, python-format
 msgid "%d total queries\n"
-msgstr ""
+msgstr "合計 %d のクエリ\n"
 
 msgid "common changesets up to "
-msgstr ""
+msgstr "以下を終点とする共通履歴: "
 
 msgid "requesting all changes\n"
-msgstr ""
+msgstr "全チェンジセットを取得中\n"
 
 msgid ""
 "Partial pull cannot be done because other repository doesn't support "
 "changegroupsubset."
-msgstr ""
+msgstr "連携先の changegroupsubset 機能未対応により、部分取り込みできません。"
+
+#, python-format
+msgid "abort: push creates new remote branch '%s'!\n"
+msgstr "中断: 反映によって連携先に新しいブランチ '%s' が作成されます!\n"
 
 msgid "abort: push creates new remote heads!\n"
-msgstr ""
+msgstr "中断: 反映によって連携先に新しいヘッドが作成されます!\n"
 
 msgid "(did you forget to merge? use push -f to force)\n"
-msgstr ""
+msgstr "(マージは済んでいますか? push -f で強制実行できます)\n"
 
 msgid "note: unsynced remote changes!\n"
-msgstr ""
+msgstr "注意: 連携先での変更点が取り込まれていません!\n"
 
 #, python-format
 msgid "%d changesets found\n"
-msgstr ""
+msgstr "%d 個のチェンジセット\n"
 
 msgid "list of changesets:\n"
-msgstr ""
+msgstr "チェンジセット一覧:\n"
 
 #, python-format
 msgid "empty or missing revlog for %s"
-msgstr ""
+msgstr "%s に対するリビジョンログが空ないし不在です"
 
 #, python-format
 msgid "add changeset %s\n"
-msgstr ""
+msgstr "チェンジセット %s を追加\n"
 
 msgid "adding changesets\n"
-msgstr ""
+msgstr "チェンジセットを追加中\n"
 
 msgid "received changelog group is empty"
-msgstr ""
+msgstr "受信した変更履歴は空です"
 
 msgid "adding manifests\n"
-msgstr ""
+msgstr "マニフェストを追加中\n"
 
 msgid "adding file changes\n"
-msgstr ""
+msgstr "ファイルの変更を追加中\n"
 
 #, python-format
 msgid "adding %s revisions\n"
-msgstr ""
+msgstr "%s 個のリビジョンを追加中\n"
 
 msgid "received file revlog group is empty"
-msgstr ""
+msgstr "ファイルのリビジョンログが空です"
 
 #, python-format
 msgid " (%+d heads)"
-msgstr ""
+msgstr "(%+d個のヘッド)"
 
 #, python-format
 msgid "added %d changesets with %d changes to %d files%s\n"
-msgstr ""
+msgstr "%d のチェンジセット(%d の変更を %d ファイルに適用)を追加%s\n"
 
 msgid "updating the branch cache\n"
-msgstr ""
+msgstr "ブランチのキャッシュを更新中\n"
 
 msgid "Unexpected response from remote server:"
-msgstr ""
+msgstr "連携先のサーバから予期しない返信: "
 
 msgid "operation forbidden by server"
-msgstr ""
+msgstr "その処理はサーバで禁止されています"
 
 msgid "locking the remote repository failed"
-msgstr ""
+msgstr "連携先リポジトリをロックできませんでした"
 
 msgid "the server sent an unknown error code"
-msgstr ""
+msgstr "サーバが未知のエラーコードを返却しました"
 
 msgid "streaming all changes\n"
-msgstr ""
+msgstr "チェンジセットを転送中\n"
 
 #, python-format
 msgid "%d files to transfer, %s of data\n"
-msgstr ""
+msgstr "%d 個のファイル転送(データ量 %s)\n"
 
 #, python-format
 msgid "adding %s (%s)\n"
-msgstr ""
+msgstr "%s を追加しています(%s)\n"
 
 #, python-format
 msgid "transferred %s in %.1f seconds (%s/sec)\n"
-msgstr ""
+msgstr "%s を %.1f 秒で送信しました(%s/秒)\n"
 
 msgid "no [smtp]host in hgrc - cannot send mail"
-msgstr ""
+msgstr "設定ファイルに [smtp] host 指定がありません - メール送信に失敗"
 
 #, python-format
 msgid "sending mail: smtp host %s, port %s\n"
-msgstr ""
+msgstr "メール送信中: SMTP ホスト %s、ポート番号 %s\n"
 
 msgid "can't use TLS: Python SSL support not installed"
-msgstr ""
+msgstr "TLS を利用できません: Python SSL サポートがインストールされていません"
 
 msgid "(using tls)\n"
-msgstr ""
+msgstr "(TLS を使用中)\n"
 
 #, python-format
 msgid "(authenticating to mail server as %s)\n"
-msgstr ""
+msgstr "(%s としてメールサーバの認証中)\n"
 
 #, python-format
 msgid "sending mail: %s\n"
-msgstr ""
+msgstr "メール送信中: %s\n"
 
 msgid "smtp specified as email transport, but no smtp host configured"
-msgstr ""
+msgstr "メール転送方式の 'smtp' 指定にも関わらず、SMTP ホストが未設定です"
 
 #, python-format
 msgid "%r specified as email transport, but not in PATH"
-msgstr ""
+msgstr "メール転送コマンドで指定されたプログラム %r が見つかりません"
 
 #, python-format
 msgid "ignoring invalid sendcharset: %s\n"
-msgstr ""
+msgstr "不正な文字セットを無視します: %s\n"
 
 #, python-format
 msgid "invalid email address: %s"
-msgstr ""
+msgstr "不正なメールアドレス: %s"
 
 #, python-format
 msgid "invalid local address: %s"
-msgstr ""
-
-msgid "'\\n' and '\\r' disallowed in filenames"
-msgstr ""
+msgstr "不正なローカルアドレス: %s"
 
 #, python-format
 msgid "failed to remove %s from manifest"
-msgstr ""
+msgstr "マニフェストから %s を削除できませんでした"
 
 #, python-format
 msgid "diff context lines count must be an integer, not %r"
-msgstr ""
+msgstr "差分コンテキストでの行数指定が不正です: %r"
 
 #, python-format
 msgid ""
 "untracked file in working directory differs from file in requested revision: "
 "'%s'"
-msgstr ""
+msgstr "未登録ファイル %s は指定リビジョンでの記録内容と異なります"
 
 #, python-format
 msgid "case-folding collision between %s and %s"
-msgstr ""
-
-msgid "resolving manifests\n"
-msgstr ""
-
-#, python-format
-msgid " overwrite %s partial %s\n"
-msgstr ""
-
-#, python-format
-msgid " ancestor %s local %s remote %s\n"
-msgstr ""
+msgstr "ファイル名の文字大小の問題で %s と %s が衝突します"
 
 #, python-format
 msgid ""
 " conflicting flags for %s\n"
 "(n)one, e(x)ec or sym(l)ink?"
 msgstr ""
+"ファイル %s のビット設定に衝突があります\n"
+"どの設定にしますか?無効:(n)one, 実行可能:e(x)ec, リンク:sym(l)ink"
+
+msgid "&None"
+msgstr "なし (&N)"
+
+msgid "E&xec"
+msgstr "実行 (&X)"
+
+msgid "Sym&link"
+msgstr "シンボリックリンク (&L)"
+
+msgid "resolving manifests\n"
+msgstr "管理ファイル一覧を解決しています\n"
+
+#, python-format
+msgid " overwrite %s partial %s\n"
+msgstr " 上書き:%s, 対象限定:%s\n"
+
+#, python-format
+msgid " ancestor %s local %s remote %s\n"
+msgstr " 祖先 %s ローカル %s リモート %s\n"
 
 #, python-format
 msgid ""
 " local changed %s which remote deleted\n"
 "use (c)hanged version or (d)elete?"
 msgstr ""
-
-msgid "[cd]"
-msgstr ""
+"変更したファイル %s は別リビジョンで登録除外されています\n"
+"どちらを採用しますか?変更:(c)hange, 登録除外:(d)elete"
+
+msgid "&Changed"
+msgstr "&Changed"
+
+msgid "&Delete"
+msgstr "&Delete"
 
 msgid "c"
-msgstr ""
+msgstr "c"
 
 #, python-format
 msgid ""
 "remote changed %s which local deleted\n"
 "use (c)hanged version or leave (d)eleted?"
 msgstr ""
+"リモートで変更された %s はローカルで削除されています\n"
+"変更されたもの(c)hangedを使用しますか?それとも削除(d)eleteしますか?"
+
+msgid "&Deleted"
+msgstr "&Deleted"
 
 #, python-format
 msgid "preserving %s for resolve of %s\n"
-msgstr ""
+msgstr "%s の保存中(%s の衝突解消用)\n"
 
 #, python-format
 msgid "update failed to remove %s: %s!\n"
-msgstr ""
+msgstr "%s の削除に失敗: %s!\n"
 
 #, python-format
 msgid "getting %s\n"
-msgstr ""
-
-#, python-format
-msgid "moving %s to %s\n"
-msgstr ""
+msgstr "%s を取得しています\n"
 
 #, python-format
 msgid "getting %s to %s\n"
-msgstr ""
+msgstr "%s から %s に複製中\n"
 
 #, python-format
 msgid "warning: detected divergent renames of %s to:\n"
-msgstr ""
+msgstr "警告: %s の改名先が異なります:\n"
 
 #, python-format
 msgid "branch %s not found"
-msgstr ""
+msgstr "ブランチ %s が見つかりません"
 
 msgid "can't merge with ancestor"
-msgstr ""
+msgstr "祖先とマージできません"
 
 msgid "nothing to merge (use 'hg update' or check 'hg heads')"
-msgstr ""
+msgstr "マージは不要です('hg update' か 'hg heads' を使用してください)"
+
+msgid "outstanding uncommitted changes (use 'hg status' to list changes)"
+msgstr "未コミット変更があります('hg status' で変更一覧表示可能)"
 
 msgid "crosses branches (use 'hg merge' or 'hg update -C' to discard changes)"
-msgstr ""
+msgstr "ブランチの横断(マージするか、'hg update -C' で変更を破棄できます)"
 
 msgid "crosses branches (use 'hg merge' or 'hg update -C')"
-msgstr ""
+msgstr "ブランチの横断(マージするか、'hg update -C' で変更を破棄できます)"
 
 msgid "crosses named branches (use 'hg update -C' to discard changes)"
-msgstr ""
+msgstr "名前付きブランチの横断('hg update -C' で変更を破棄できます)"
 
 #, python-format
 msgid "cannot create %s: destination already exists"
-msgstr ""
+msgstr "%s を作成できません: 作業先にすでに存在します"
 
 #, python-format
 msgid "cannot create %s: unable to create destination directory"
-msgstr ""
+msgstr "%s を作成できません: ディレクトリを作成できません"
 
 #, python-format
 msgid "found patch at byte %d\n"
-msgstr ""
+msgstr "%d バイト目にパッチが見つかりました\n"
 
 msgid "patch generated by hg export\n"
-msgstr ""
+msgstr "hg export にてパッチを生成しました\n"
 
 #, python-format
 msgid "unable to find '%s' for patching\n"
-msgstr ""
+msgstr "パッチ適用対象の '%s' が不在です\n"
 
 #, python-format
 msgid "patching file %s\n"
-msgstr ""
+msgstr "ファイル %s をパッチ適用しています\n"
 
 #, python-format
 msgid "%d out of %d hunks FAILED -- saving rejects to file %s\n"
-msgstr ""
+msgstr "%d 個のハンク(総数 %d)が適用失敗 -- 失敗ハンクは %s に保存\n"
 
 #, python-format
 msgid "bad hunk #%d %s (%d %d %d %d)"
-msgstr ""
+msgstr "不正なハンク: #%d %s (%d %d %d %d)"
 
 #, python-format
 msgid "file %s already exists\n"
-msgstr ""
-
-#, python-format
-msgid "Hunk #%d succeeded at %d %s(offset %d %s).\n"
-msgstr ""
+msgstr "ファイル %s は既に存在します\n"
+
+#, python-format
+msgid "Hunk #%d succeeded at %d %s(offset %d line).\n"
+msgstr "ハンク #%d の適用成功:%d 行目 %s 補正行数 %d\n"
+
+#, python-format
+msgid "Hunk #%d succeeded at %d %s(offset %d lines).\n"
+msgstr "ハンク #%d の適用成功:%d 行目 %s 補正行数 %d\n"
 
 #, python-format
 msgid "Hunk #%d FAILED at %d\n"
-msgstr ""
+msgstr "ハンク #%d の適用失敗:%d 行目\n"
 
 #, python-format
 msgid "bad hunk #%d"
-msgstr ""
+msgstr "不正なハンク: #%d"
 
 #, python-format
 msgid "bad hunk #%d old text line %d"
-msgstr ""
+msgstr "不正なハンク: #%d 元テキスト %d 行目"
 
 msgid "could not extract binary patch"
-msgstr ""
+msgstr "バイナリパッチの適用に失敗"
 
 #, python-format
 msgid "binary patch is %d bytes, not %d"
-msgstr ""
+msgstr "バイナリパッチのサイズ不正: 実サイズ %d, 想定サイズ %d"
 
 #, python-format
 msgid "unable to strip away %d dirs from %s"
-msgstr ""
+msgstr "%d 個のパス要素除外に失敗:%s"
 
 msgid "undefined source and destination files"
-msgstr ""
+msgstr "パッチ対象のファイル名が指定されていません"
 
 #, python-format
 msgid "malformed patch %s %s"
-msgstr ""
+msgstr "不正なパッチ: %s %s"
 
 #, python-format
 msgid "unsupported parser state: %s"
-msgstr ""
+msgstr "サポートしていないパーサの状態です: %s"
 
 #, python-format
 msgid "patch command failed: %s"
-msgstr ""
+msgstr "patch コマンドが失敗: %s"
+
+#, python-format
+msgid "Unsupported line endings type: %s"
+msgstr "未サポートの行末種別: %s"
 
 #, python-format
 msgid "no valid hunks found; trying with %r instead\n"
-msgstr ""
+msgstr "有効なハンクがありません: %r で再試行中\n"
+
+#, python-format
+msgid "exited with status %d"
+msgstr "終了コード %d で終了しました"
+
+#, python-format
+msgid "killed by signal %d"
+msgstr "%d のシグナルで強制終了しました"
+
+#, python-format
+msgid "stopped by signal %d"
+msgstr "%d のシグナルで停止しました"
+
+msgid "invalid exit code"
+msgstr "終了コードが不正です"
 
 #, python-format
 msgid "saving bundle to %s\n"
-msgstr ""
+msgstr "バンドルを %s に保存中\n"
 
 msgid "adding branch\n"
-msgstr ""
+msgstr "ブランチを追加中\n"
 
 #, python-format
 msgid "cannot %s; remote repository does not support the %r capability"
-msgstr ""
+msgstr "%s できません。機能 %s はリモートリポジトリでは未サポートです"
 
 #, python-format
 msgid "unknown compression type %r"
-msgstr ""
+msgstr "%r は未知の圧縮形式です"
 
 #, python-format
 msgid "index %s unknown flags %#04x for format v0"
-msgstr ""
+msgstr "インデックス %s: %#04x は未知のフラグです(フォーマット v0)"
 
 #, python-format
 msgid "index %s unknown flags %#04x for revlogng"
-msgstr ""
+msgstr "インデックス %s: %#04x は未知のフラグです(revlogng)"
 
 #, python-format
 msgid "index %s unknown format %d"
-msgstr ""
+msgstr "インデックス %s: %d は未知のフォーマットです"
+
+#, python-format
+msgid "index %s is corrupted"
+msgstr "インデックス %s は破損しています"
 
 msgid "no node"
-msgstr ""
+msgstr "ノードがありません"
 
 msgid "ambiguous identifier"
-msgstr ""
+msgstr "曖昧な識別子です"
 
 msgid "no match found"
-msgstr ""
+msgstr "該当する ID はありませんでした"
 
 #, python-format
 msgid "incompatible revision flag %x"
-msgstr ""
+msgstr "%x は互換性のないリビジョンフラグです"
 
 #, python-format
 msgid "%s not found in the transaction"
-msgstr ""
+msgstr "トランザクション中に %s は見つかりませんでした"
 
 msgid "unknown base"
-msgstr ""
+msgstr "未知のベースリビジョン"
 
 msgid "consistency error adding group"
-msgstr ""
+msgstr "グループの追加に失敗"
 
 #, python-format
 msgid "%s looks like a binary file."
-msgstr ""
+msgstr "%s はバイナリファイルのようです。"
 
 msgid "can only specify two labels."
-msgstr ""
+msgstr "ラベルは二つのみ指定可。"
 
 msgid "warning: conflicts during merge.\n"
-msgstr ""
+msgstr "警告: マージ中に衝突を発見。\n"
 
 #, python-format
 msgid "couldn't parse location %s"
-msgstr ""
+msgstr "URL %s の解析に失敗"
 
 msgid "could not create remote repo"
-msgstr ""
+msgstr "遠隔ホストとの連携に失敗"
 
 msgid "remote: "
-msgstr ""
+msgstr "遠隔ホスト: "
 
 msgid "no suitable response from remote hg"
-msgstr ""
+msgstr "遠隔ホストの応答が不適切"
 
 #, python-format
 msgid "push refused: %s"
-msgstr ""
+msgstr "履歴反映が拒否されました: %s"
 
 msgid "unsynced changes"
-msgstr ""
+msgstr "未取り込みの変更があります"
 
 msgid "cannot lock static-http repository"
-msgstr ""
+msgstr "static-http リポジトリはロックできません"
 
 msgid "cannot create new static-http repository"
-msgstr ""
+msgstr "static-http リポジトリの新規作成はできません"
 
 #, python-format
 msgid "invalid entry in fncache, line %s"
-msgstr ""
+msgstr "ファイル名キャッシュに不正なエントリ: %s 行目"
 
 msgid "scanning\n"
-msgstr ""
+msgstr "走査中\n"
 
 #, python-format
 msgid "%d files, %d bytes to transfer\n"
-msgstr ""
+msgstr "%d 個のファイル、%d バイトの送信\n"
 
 #, python-format
 msgid "sending %s (%d bytes)\n"
-msgstr ""
+msgstr "%s の送信中(%d バイト)\n"
+
+#, python-format
+msgid ""
+" subrepository sources for %s differ\n"
+"use (l)ocal source (%s) or (r)emote source (%s)?"
+msgstr ""
+
+msgid "&Remote"
+msgstr "&Remote"
+
+msgid "r"
+msgstr ""
+
+#, python-format
+msgid ""
+" local changed subrepository %s which remote removed\n"
+"use (c)hanged version or (d)elete?"
+msgstr ""
+"ローカル副リポジトリで変更したファイル %s は他方で登録除外されています\n"
+"どちらを採用しますか?変更:(c)hange, 登録除外:(d)elete"
+
+#, python-format
+msgid ""
+" remote changed subrepository %s which local removed\n"
+"use (c)hanged version or (d)elete?"
+msgstr ""
+"ローカル副リポジトリで登録除外されたファイル %s は他方で変更されています\n"
+"どちらを採用しますか?変更:(c)hange, 登録除外:(d)elete"
+
+#, python-format
+msgid "removing subrepo %s\n"
+msgstr "副リポジトリの %s を登録除外中\n"
+
+#, python-format
+msgid "pulling subrepo %s\n"
+msgstr "副リポジトリに %s から取り込み中\n"
+
+#, python-format
+msgid "pushing subrepo %s\n"
+msgstr "副リポジトリを %s へ反映中\n"
 
 msgid "unmatched quotes"
-msgstr ""
+msgstr "引用符の対応関係が不正です"
+
+#, python-format
+msgid "error expanding '%s%%%s'"
+msgstr "'%s%%%s' 展開の失敗"
+
+#, python-format
+msgid "unknown filter '%s'"
+msgstr "'%s' は未知のフィルタです"
 
 #, python-format
 msgid "style not found: %s"
-msgstr ""
-
-#, python-format
-msgid "%s:%s: parse error"
-msgstr ""
+msgstr "スタイルが見つかりません: %s"
 
 #, python-format
 msgid "template file %s: %s"
-msgstr ""
-
-#, python-format
-msgid "Error expanding '%s%%%s'"
-msgstr ""
-
-msgid "transaction abort!\n"
-msgstr ""
+msgstr "テンプレートファイル %s: %s"
+
+msgid "cannot use transaction when it is already committed/aborted"
+msgstr "既に完了/中止されているためトランザクションを利用できません"
 
 #, python-format
 msgid "failed to truncate %s\n"
-msgstr ""
+msgstr "%s の切り詰めに失敗\n"
+
+msgid "transaction abort!\n"
+msgstr "トランザクションを中断します!\n"
 
 msgid "rollback completed\n"
-msgstr ""
+msgstr "ロールバックを完了しました\n"
+
+msgid "rollback failed - please run hg recover\n"
+msgstr "ロールバックに失敗しました - 'hg recover' してください\n"
 
 #, python-format
 msgid "Not trusting file %s from untrusted user %s, group %s\n"
-msgstr ""
-
-#, python-format
-msgid ""
-"Failed to parse %s\n"
-"%s"
-msgstr ""
+msgstr "信頼できないファイル %s (信頼できないユーザ %s, グループ %s)\n"
 
 #, python-format
 msgid "Ignored: %s\n"
-msgstr ""
-
-#, python-format
-msgid "unable to open %s: %s"
-msgstr ""
-
-#, python-format
-msgid ""
-"failed to parse %s\n"
-"%s"
-msgstr ""
-
-#, python-format
-msgid ""
-"Error in configuration section [%s] parameter '%s':\n"
-"%s"
-msgstr ""
-
-#, python-format
-msgid "Ignoring untrusted configuration option %s.%s = %s\n"
-msgstr ""
-
-#, python-format
-msgid ""
-"Error in configuration section [%s]:\n"
-"%s"
-msgstr ""
+msgstr "無視しました: %s\n"
+
+#, python-format
+msgid "ignoring untrusted configuration option %s.%s = %s\n"
+msgstr "信頼できない設定ファイル中の '%s.%s = %s' 設定を無視\n"
+
+#, python-format
+msgid "%s.%s not a boolean ('%s')"
+msgstr "%s.%s の値 '%s' は真偽値ではありません"
 
 msgid "enter a commit username:"
-msgstr ""
+msgstr "コミットするユーザ名を入力してください:"
 
 #, python-format
 msgid "No username found, using '%s' instead\n"
-msgstr ""
+msgstr "ユーザ名が不明のため、'%s' を使用\n"
 
 msgid "Please specify a username."
-msgstr ""
+msgstr "ユーザ名を指定してください。"
 
 #, python-format
 msgid "username %s contains a newline\n"
-msgstr ""
+msgstr "ユーザ名 %s は改行を含んでいます\n"
 
 msgid "unrecognized response\n"
-msgstr ""
+msgstr "認識できないレスポンス\n"
 
 msgid "response expected"
-msgstr ""
+msgstr "レスポンスがありません"
 
 msgid "password: "
-msgstr ""
+msgstr "パスワード: "
 
 msgid "edit failed"
-msgstr ""
+msgstr "編集に失敗"
 
 msgid "http authorization required"
-msgstr ""
+msgstr "HTTP 認証に失敗"
 
 msgid "http authorization required\n"
-msgstr ""
+msgstr "HTTP 認証を要求しました\n"
 
 #, python-format
 msgid "realm: %s\n"
-msgstr ""
+msgstr "認証領域: %s\n"
 
 #, python-format
 msgid "user: %s\n"
-msgstr ""
+msgstr "ユーザ: %s\n"
 
 msgid "user:"
-msgstr ""
-
-#, python-format
-msgid "proxying through http://%s:%s\n"
-msgstr ""
+msgstr "ユーザ:"
 
 #, python-format
 msgid "http auth: user %s, password %s\n"
-msgstr ""
-
-#, python-format
-msgid "%s, please check your locale settings"
-msgstr ""
+msgstr "HTTP 認証: ユーザ名 %s, パスワード %s\n"
+
+#, python-format
+msgid "proxying through http://%s:%s\n"
+msgstr "プロキシ 'http://%s:%s' を経由しています\n"
 
 #, 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"
-msgstr ""
+msgstr "パス %r はリポジトリ %r 内にあります"
 
 #, python-format
 msgid "path %r traverses symbolic link %r"
-msgstr ""
+msgstr "パス %r はシンボリックリンク '%r' が含まれています"
 
 msgid "Hardlinks not supported"
-msgstr ""
-
-msgid "user name not available - set USERNAME environment variable"
-msgstr ""
-
-#, python-format
-msgid "exited with status %d"
-msgstr ""
-
-#, python-format
-msgid "killed by signal %d"
-msgstr ""
-
-#, python-format
-msgid "stopped by signal %d"
-msgstr ""
-
-msgid "invalid exit code"
-msgstr ""
+msgstr "ハードリンクはサポートしていません"
 
 #, 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"
-msgstr ""
+msgstr "不正な日付の指定です: %s"
 
 #, python-format
 msgid "%.0f GB"
-msgstr ""
+msgstr "%.0f GB"
 
 #, python-format
 msgid "%.1f GB"
-msgstr ""
+msgstr "%.1f GB"
 
 #, python-format
 msgid "%.2f GB"
-msgstr ""
+msgstr "%.2f GB"
 
 #, python-format
 msgid "%.0f MB"
-msgstr ""
+msgstr "%.0f MB"
 
 #, python-format
 msgid "%.1f MB"
-msgstr ""
+msgstr "%.1f MB"
 
 #, python-format
 msgid "%.2f MB"
-msgstr ""
+msgstr "%.2f MB"
 
 #, python-format
 msgid "%.0f KB"
-msgstr ""
+msgstr "%.0f KB"
 
 #, python-format
 msgid "%.1f KB"
-msgstr ""
+msgstr "%.1f KB"
 
 #, python-format
 msgid "%.2f KB"
-msgstr ""
+msgstr "%.2f KB"
 
 #, python-format
 msgid "%.0f bytes"
-msgstr ""
+msgstr "%.0f バイト"
 
 msgid "cannot verify bundle or remote repos"
-msgstr ""
+msgstr "ローカルリポジトリ以外は検証できません"
 
 msgid "interrupted"
-msgstr ""
+msgstr "中断されました"
 
 #, python-format
 msgid "empty or missing %s"
-msgstr ""
+msgstr "%s は、空か見つかりません"
 
 #, python-format
 msgid "data length off by %d bytes"
-msgstr ""
+msgstr "データ長: %d バイト"
 
 #, python-format
 msgid "index contains %d extra bytes"
-msgstr ""
+msgstr "インデックスの拡張データ: %d バイト"
 
 #, python-format
 msgid "warning: `%s' uses revlog format 1"
-msgstr ""
+msgstr "警告: `%s' は revlog 形式 1 です"
 
 #, python-format
 msgid "warning: `%s' uses revlog format 0"
-msgstr ""
-
-#, python-format
-msgid "rev %d point to %s changeset %d"
-msgstr ""
+msgstr "警告: `%s' は revlog 形式 0 です"
+
+#, python-format
+msgid "rev %d points to nonexistent changeset %d"
+msgstr "リビジョン %d は未知のリビジョン %d を参照しています"
+
+#, python-format
+msgid "rev %d points to unexpected changeset %d"
+msgstr "リビジョン %d は想定外のリビジョン %d を参照しています"
 
 #, python-format
 msgid " (expected %s)"
-msgstr ""
+msgstr " (想定対象 %s)"
 
 #, 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 ""
+msgstr "%d と重複するリビジョン %d があります"
 
 #, python-format
 msgid "repository uses revlog format %d\n"
-msgstr ""
+msgstr "リポジトリは revlog 形式 %d です\n"
 
 msgid "checking changesets\n"
-msgstr ""
+msgstr "チェンジセットの確認中\n"
 
 #, python-format
 msgid "unpacking changeset %s"
-msgstr ""
+msgstr "リビジョン %s の展開中"
 
 msgid "checking manifests\n"
-msgstr ""
+msgstr "管理ファイル一覧の確認中\n"
+
+#, python-format
+msgid "%s not in changesets"
+msgstr "リビジョン %s は未知のリビジョンです"
 
 msgid "file without name in manifest"
-msgstr ""
+msgstr "名前を持たないファイルがあります"
 
 #, python-format
 msgid "reading manifest delta %s"
-msgstr ""
+msgstr "管理対象一覧の差分 %s の読み込み中"
 
 msgid "crosschecking files in changesets and manifests\n"
-msgstr ""
+msgstr "チェンジセットとマニフェストによるファイルのクロスチェック中\n"
 
 #, python-format
 msgid "changeset refers to unknown manifest %s"
-msgstr ""
+msgstr "未知のマニフェスト %s が参照されています"
 
 msgid "in changeset but not in manifest"
-msgstr ""
+msgstr "マニフェストから参照されていないファイル"
 
 msgid "in manifest but not in changeset"
-msgstr ""
+msgstr "チェンジセットから参照されていないファイル"
 
 msgid "checking files\n"
-msgstr ""
+msgstr "ファイルの確認中\n"
 
 #, python-format
 msgid "cannot decode filename '%s'"
-msgstr ""
+msgstr "ファイル名 '%s' のデコードに失敗"
+
+#, python-format
+msgid "broken revlog! (%s)"
+msgstr "不正な revlog! (%s)"
 
 msgid "missing revlog!"
-msgstr ""
+msgstr "revlog が見つかりません!"
 
 #, python-format
 msgid "%s not in manifests"
-msgstr ""
+msgstr "%s は管理対象ではありません"
 
 #, python-format
 msgid "unpacked size is %s, %s expected"
-msgstr ""
+msgstr "展開後サイズ %s は想定外です(期待値:%s)"
 
 #, python-format
 msgid "unpacking %s"
-msgstr ""
+msgstr "%s の展開中"
 
 #, python-format
 msgid "empty or missing copy source revlog %s:%s"
-msgstr ""
+msgstr "複製元 revlog %s:%s は、空か見つかりません"
 
 #, python-format
 msgid "warning: %s@%s: copy source revision is nullid %s:%s"
-msgstr ""
+msgstr "警告: %s@%s: 複製元リビジョンが nullid %s:%s"
 
 #, python-format
 msgid "checking rename of %s"
-msgstr ""
+msgstr "%s の改名を確認中"
 
 #, python-format
 msgid "%s in manifests not found"
-msgstr ""
+msgstr "管理対象一覧中の %s は存在しません"
 
 #, python-format
 msgid "warning: orphan revlog '%s'"
-msgstr ""
+msgstr "警告: revlog '%s' はどこからも参照されていません"
 
 #, python-format
 msgid "%d files, %d changesets, %d total revisions\n"
-msgstr ""
+msgstr "%d 個のファイル、%d 件のチェンジセット、合計 %d 件のリビジョン\n"
 
 #, python-format
 msgid "%d warnings encountered!\n"
-msgstr ""
+msgstr "警告が %d 件あります!\n"
 
 #, python-format
 msgid "%d integrity errors encountered!\n"
-msgstr ""
+msgstr "不整合が %d 件あります!\n"
 
 #, python-format
 msgid "(first damaged changeset appears to be %d)\n"
-msgstr ""
+msgstr "(最初の不整合は %d の模様)\n"
+
+msgid "user name not available - set USERNAME environment variable"
+msgstr "ユーザ名が利用できません - 環境変数 USERNAME を設定してください"
--- a/i18n/pt_BR.po	Wed Jul 08 17:01:18 2009 -0700
+++ b/i18n/pt_BR.po	Wed Jul 08 17:03:16 2009 -0700
@@ -30,8 +30,8 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: Mercurial\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-04-21 15:12-0300\n"
+"Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n"
+"POT-Creation-Date: 2009-06-08 11:30-0300\n"
 "PO-Revision-Date: 2009-04-16 14:29-0300\n"
 "Last-Translator: Wagner Bruna <wbruna@yahoo.com>\n"
 "Language-Team: Brazilian Portuguese\n"
@@ -65,9 +65,100 @@
 "    apelidos: %s\n"
 "\n"
 
-# internal string, no need to translate
-msgid "return tuple of (match function, list enabled)."
-msgstr "retorna uma tupla (funções correspondentes, lista habilitada)."
+msgid ""
+"hooks for controlling repository access\n"
+"\n"
+"This hook makes it possible to allow or deny write access to portions\n"
+"of a repository when receiving incoming changesets.\n"
+"\n"
+"The authorization is matched based on the local user name on the\n"
+"system where the hook runs, and not the committer of the original\n"
+"changeset (since the latter is merely informative).\n"
+"\n"
+"The acl hook is best used along with a restricted shell like hgsh,\n"
+"preventing authenticating users from doing anything other than\n"
+"pushing or pulling. The hook is not safe to use if users have\n"
+"interactive shell access, as they can then disable the hook.\n"
+"Nor is it safe if remote users share an account, because then there\n"
+"is no way to distinguish them.\n"
+"\n"
+"To use this hook, configure the acl extension in your hgrc like this:\n"
+"\n"
+"  [extensions]\n"
+"  hgext.acl =\n"
+"\n"
+"  [hooks]\n"
+"  pretxnchangegroup.acl = python:hgext.acl.hook\n"
+"\n"
+"  [acl]\n"
+"  # Check whether the source of incoming changes is in this list\n"
+"  # (\"serve\" == ssh or http, \"push\", \"pull\", \"bundle\")\n"
+"  sources = serve\n"
+"\n"
+"The allow and deny sections take a subtree pattern as key (with a\n"
+"glob syntax by default), and a comma separated list of users as\n"
+"the corresponding value. The deny list is checked before the allow\n"
+"list is.\n"
+"\n"
+"  [acl.allow]\n"
+"  # If acl.allow is not present, all users are allowed by default.\n"
+"  # An empty acl.allow section means no users allowed.\n"
+"  docs/** = doc_writer\n"
+"  .hgtags = release_engineer\n"
+"\n"
+"  [acl.deny]\n"
+"  # If acl.deny is not present, no users are refused by default.\n"
+"  # An empty acl.deny section means all users allowed.\n"
+"  glob pattern = user4, user5\n"
+"   ** = user6\n"
+msgstr ""
+"ganchos para controlar o acesso a um repositório\n"
+"\n"
+"Este gancho possibilita permitir ou recusar acesso de escrita a\n"
+"porções de um repositório ao receber changesets.\n"
+"\n"
+"A autorização é feita com relação ao nome de usuário local no sistema\n"
+"onde o gancho é executado, e não ao autor do changeset original (já\n"
+"que este pode ser alterado facilmente).\n"
+"\n"
+"O gancho acl funciona melhor se você usar um shell restrito (como\n"
+"por exemplo o hgsh), impedindo que usuários autenticados usem outros\n"
+"comandos além de push e pull. Ele não é seguro se os usuários tiverem\n"
+"acesso a um shell interativo, pois eles então poderão desabilitar o\n"
+"gancho. Também não é seguro se usuários remotos compartilharem uma\n"
+"conta local, pois não haverá maneira de distingüí-los.\n"
+"\n"
+"Para usar, configure a extensão acl em seu hgrc da seguinte forma:\n"
+"\n"
+"  [extensions]\n"
+"  hgext.acl =\n"
+"\n"
+"  [hooks]\n"
+"  pretxnchangegroup.acl = python:hgext.acl.hook\n"
+"\n"
+"  [acl]\n"
+"  # verifica se a origem de changesets # está nessa lista\n"
+"  # (\"serve\" == ssh ou http, \"push\", \"pull\", \"bundle\")\n"
+"  sources = serve\n"
+"\n"
+"As seções allow (permissões) e deny (restrições) usam um padrão de\n"
+"sub-árvore como chave (a sintaxe padrão é a glob), e uma lista de\n"
+"usuários separada por vírgulas como valor correspondente. A lista de\n"
+"restrição é verificada antes da lista de permissão.\n"
+"\n"
+"  [acl.allow]\n"
+"  # Se acl.allow não estiver presente, todos os usuários são\n"
+"  # por padrão permitidos\n"
+"  # uma acl.allow vazia faz com que nenhum usuário seja permitido\n"
+"  docs/** = doc_writer\n"
+"  .hgtags = release_engineer\n"
+"\n"
+"  [acl.deny]\n"
+"  # Se acl.deny não estiver presente, nenhum usuário é recusado\n"
+"  # por padrão\n"
+"  # Uma acl.deny vazia faz com que todos os usuários sejam permitidos\n"
+"  glob pattern = user4, user5\n"
+"   ** = user6\n"
 
 #, python-format
 msgid "acl: %s not enabled\n"
@@ -79,7 +170,9 @@
 
 #, python-format
 msgid "config error - hook type \"%s\" cannot stop incoming changesets"
-msgstr "erro de configuração - tipo de gancho \"%s\" não pode interromper a chegada dos changesets"
+msgstr ""
+"erro de configuração - tipo de gancho \"%s\" não pode interromper a chegada "
+"dos changesets"
 
 #, python-format
 msgid "acl: changes have source \"%s\" - skipping\n"
@@ -102,170 +195,77 @@
 msgstr "acl: permitindo changeset %s\n"
 
 msgid ""
-"allow user-defined command aliases\n"
-"\n"
-"To use, create entries in your hgrc of the form\n"
-"\n"
-"[alias]\n"
-"mycmd = cmd --args\n"
-msgstr ""
-"permite que o usuário defina apelidos para comandos\n"
-"\n"
-"Para usar, defina entradas no hgrc da forma\n"
-"\n"
-"[alias]\n"
-"meucomando = comando --argumentos\n"
-
-# internal string, no need to translate
-msgid ""
-"defer command lookup until needed, so that extensions loaded\n"
-"    after alias can be aliased"
-msgstr ""
-"retarda a resolução do comando até que seja necessário, de forma que\n"
-"    a extensão seja carregada antes do apelido ser executado"
-
-#, python-format
-msgid "*** [alias] %s: command %s is unknown"
-msgstr "*** [alias] %s: o comando %s é desconhecido"
-
-#, python-format
-msgid "*** [alias] %s: command %s is ambiguous"
-msgstr "*** [alias] %s: o comando %s é ambíguo"
-
-#, python-format
-msgid "*** [alias] %s: circular dependency on %s"
-msgstr "*** [alias] %s: dependência circular em %s"
-
-#, python-format
-msgid "*** [alias] %s: no definition\n"
-msgstr "*** [alias] %s: indefinido\n"
-
-msgid ""
-"mercurial bookmarks\n"
-"\n"
-"Mercurial bookmarks are local moveable pointers to changesets. Every\n"
-"bookmark points to a changeset identified by its hash. If you commit a\n"
-"changeset that is based on a changeset that has a bookmark on it, the\n"
-"bookmark is forwarded to the new changeset.\n"
-"\n"
-"It is possible to use bookmark names in every revision lookup (e.g. hg\n"
-"merge, hg update).\n"
-"\n"
-"The bookmark extension offers the possiblity to have a more git-like\n"
-"experience by adding the following configuration option to your .hgrc:\n"
-"\n"
-"[bookmarks]\n"
-"track.current = True\n"
-"\n"
-"This will cause bookmarks to track the bookmark that you are currently\n"
-"on, and just updates it. This is similar to git's approach of\n"
+"track a line of development with movable markers\n"
+"\n"
+"Bookmarks are local movable markers to changesets. Every bookmark\n"
+"points to a changeset identified by its hash. If you commit a\n"
+"changeset that is based on a changeset that has a bookmark on it,\n"
+"the bookmark shifts to the new changeset.\n"
+"\n"
+"It is possible to use bookmark names in every revision lookup\n"
+"(e.g. hg merge, hg update).\n"
+"\n"
+"By default, when several bookmarks point to the same changeset, they\n"
+"will all move forward together. It is possible to obtain a more\n"
+"git-like experience by adding the following configuration option to\n"
+"your .hgrc:\n"
+"\n"
+"  [bookmarks]\n"
+"  track.current = True\n"
+"\n"
+"This will cause Mercurial to track the bookmark that you are currently\n"
+"using, and only update it. This is similar to git's approach to\n"
 "branching.\n"
 msgstr ""
+"rastreia uma linha de desenvolvimento com marcadores móveis\n"
 "marcadores do Mercurial\n"
 "\n"
-"Marcadores do mercurial são ponteiros locais móveis para alterações.\n"
-"Todos os marcadores apontam para um changeset identificado por sua\n"
-"assinatura. Se você consolidar um changeset que se baseie em outro\n"
-"que contenha um marcador, o marcador é repassado para o novo\n"
-"changeset.\n"
+"Marcadores são ponteiros locais móveis para changesets. Todo\n"
+"marcador aponta para um changeset identificado por seu hash. Se você\n"
+"consolidar um changeset que se baseie em um changeset que contenha um\n"
+"marcador, o marcador é transferido para o novo changeset.\n"
 "\n"
 "É possível utilizar nomes de marcadores em toda referência a revisões\n"
 "(por exemplo: hg merge, hg update).\n"
 "\n"
-"A extensão de marcadores pode proporcionar um uso mais semelhante ao\n"
-"do sistema git com a adição das seguintes opções de configuração ao\n"
-"seu .hgrc:\n"
-"\n"
-"[bookmarks]\n"
-"track.current = True\n"
-"\n"
-"Isto fará com que a extensão rastreie o marcador no qual você está\n"
-"no momento, e simplesmente o atualize. Isto é semelhante à abordagem\n"
+"Por padrão, quando vários marcadores apontam para o mesmo changeset,\n"
+"todos serão movidos para a frente juntos. É possível obter um\n"
+"funcionamento mais semelhante ao do sistema git com a adição das\n"
+"seguintes opções de configuração ao seu .hgrc:\n"
+"\n"
+"  [bookmarks]\n"
+"  track.current = True\n"
+"\n"
+"Isto fará com que o Mercurial rastreie o marcador que você estiver\n"
+"usando no momento, e apenas o atualize. Isto é semelhante à abordagem\n"
 "do git para ramos.\n"
 
-# internal string, no need to translate
-msgid ""
-"Parse .hg/bookmarks file and return a dictionary\n"
-"\n"
-"    Bookmarks are stored as {HASH}\\s{NAME}\\n (localtags format) values\n"
-"    in the .hg/bookmarks file. They are read by the parse() method and\n"
-"    returned as a dictionary with name => hash values.\n"
-"\n"
-"    The parsed dictionary is cached until a write() operation is done.\n"
-"    "
-msgstr ""
-
-# internal string, no need to translate
-msgid ""
-"Write bookmarks\n"
-"\n"
-"    Write the given bookmark => hash dictionary to the .hg/bookmarks file\n"
-"    in a format equal to those of localtags.\n"
-"\n"
-"    We also store a backup of the previous state in undo.bookmarks that\n"
-"    can be copied back on rollback.\n"
-"    "
-msgstr ""
-"Escreve anotações\n"
-"\n"
-"    Escreve uma dada anotação => hash do dicionário para o arquivo .hg/bookmarks\n"
-"    no mesmo formato do localtags.\n"
-"\n"
-"    Também armazena uma copia do estado anterior em undo.bookmarks que pode\n"
-"    ser copiado de volta em um rollback.\n"
-"    "
-
-# internal string, no need to translate
-msgid ""
-"Get the current bookmark\n"
-"\n"
-"    If we use gittishsh branches we have a current bookmark that\n"
-"    we are on. This function returns the name of the bookmark. It\n"
-"    is stored in .hg/bookmarks.current\n"
-"    "
-msgstr ""
-"Pega a anotação atual\n"
-"\n"
-"    Se estiver sendo utilizado galhos no estilo do git há uma anotação\n"
-"    corrente. Essa função retorna o nome da anotação. Essa informação está\n"
-"    armazenada em .hg/bookmarks.current\n"
-"    "
-
-# internal string, no need to translate
-msgid ""
-"Set the name of the bookmark that we are currently on\n"
-"\n"
-"    Set the name of the bookmark that we are on (hg update <bookmark>).\n"
-"    The name is recorded in .hg/bookmarks.current\n"
-"    "
-msgstr ""
-
-msgid ""
-"mercurial bookmarks\n"
+msgid ""
+"track a line of development with movable markers\n"
 "\n"
 "    Bookmarks are pointers to certain commits that move when\n"
-"    commiting. Bookmarks are local. They can be renamed, copied and\n"
+"    committing. Bookmarks are local. They can be renamed, copied and\n"
 "    deleted. It is possible to use bookmark names in 'hg merge' and\n"
-"    'hg update' to update to a given bookmark.\n"
-"\n"
-"    You can use 'hg bookmark NAME' to set a bookmark on the current\n"
-"    tip with the given name. If you specify a revision using -r REV\n"
-"    (where REV may be an existing bookmark), the bookmark is set to\n"
-"    that revision.\n"
-"    "
-msgstr ""
-"marcadores do mercurial\n"
+"    'hg update' to merge and update respectively to a given bookmark.\n"
+"\n"
+"    You can use 'hg bookmark NAME' to set a bookmark on the working\n"
+"    directory's parent revision with the given name. If you specify\n"
+"    a revision using -r REV (where REV may be an existing bookmark),\n"
+"    the bookmark is assigned to that revision.\n"
+"    "
+msgstr ""
+"rastreia uma linha de desenvolvimento com marcadores móveis\n"
 "\n"
 "    Marcadores são ponteiros para certas consolidações que se movem\n"
-"    em novas consolidações. Marcadores são locais. Eles podem ser\n"
-"    renomeados, copiados e removidos. É possível utilizar o nome\n"
-"    de um marcador em 'hg merge' e 'hg update' no lugar da revisão\n"
-"    para a qual ele aponta.\n"
-"\n"
-"    Você pode usar 'hg bookmark NOME' para definir um marcador\n"
-"    na tip atual com o nome informado. Se você especificar a\n"
-"    revisão usando -r REV (onde REV pode ser o nome de um marcador\n"
-"    existente), o marcador é apontado para tal revisão.\n"
+"    quando novas consolidações forem feitas. Marcadores são locais.\n"
+"    Eles podem ser renomeados, copiados e removidos. É possível usar\n"
+"    o nome de um marcador em 'hg merge' e 'hg update' para\n"
+"    respectivamente mesclar ou atualizar para um marcador dado.\n"
+"\n"
+"    Você pode usar 'hg bookmark NOME' para definir um marcador na\n"
+"    revisão do diretório de trabalho com o nome informado. Se você\n"
+"    especificar a revisão usando -r REV (onde REV pode ser o nome de\n"
+"    um marcador existente), o marcador é apontado para tal revisão.\n"
 "    "
 
 msgid "a bookmark of this name does not exist"
@@ -286,40 +286,6 @@
 msgid "a bookmark cannot have the name of an existing branch"
 msgstr "um marcador não pode ter o mesmo nome de um ramo existente"
 
-msgid ""
-"Strip bookmarks if revisions are stripped using\n"
-"    the mercurial.strip method. This usually happens during\n"
-"    qpush and qpop"
-msgstr ""
-"Remove o marcador se a revisão for removida usando\n"
-"    o método mercurial.strip. Isso normalmente acontece\n"
-"    durante qpush e qpop."
-
-msgid ""
-"Add a revision to the repository and\n"
-"            move the bookmark"
-msgstr ""
-"Adiciona uma revisão no repositório e\n"
-"            move o marcador"
-
-# internal string, no need to translate
-msgid "Merge bookmarks with normal tags"
-msgstr "Mescla os marcadores com as etiquetas normais"
-
-# internal string, no need to translate
-msgid ""
-"Set the current bookmark\n"
-"\n"
-"    If the user updates to a bookmark we update the .hg/bookmarks.current\n"
-"    file.\n"
-"    "
-msgstr ""
-"Define a anotação corrente\n"
-"\n"
-"    Se o usuário atualizar para uma anotação nos atualizaremos o arquivo\n"
-"    .hg/bookmark.current.\n"
-"    "
-
 msgid "force"
 msgstr "forçar"
 
@@ -336,7 +302,7 @@
 msgstr "hg bookmarks [-f] [-d] [-m NOME] [-r REV] [NOME]"
 
 msgid ""
-"Bugzilla integration\n"
+"hooks for integrating with the Bugzilla bug tracker\n"
 "\n"
 "This hook extension adds comments on bugs in Bugzilla when changesets\n"
 "that refer to bugs by Bugzilla ID are seen. The hook does not change\n"
@@ -431,7 +397,8 @@
 "    version=3.0\n"
 "    bzuser=unknown@domain.com\n"
 "    bzdir=/opt/bugzilla-3.2\n"
-"    template=Changeset {node|short} in {root|basename}.\\n{hgweb}/{webroot}/rev/{node|short}\\n\\n{desc}\\n\n"
+"    template=Changeset {node|short} in {root|basename}.\\n{hgweb}/{webroot}/"
+"rev/{node|short}\\n\\n{desc}\\n\n"
 "    strip=5\n"
 "\n"
 "    [web]\n"
@@ -447,7 +414,7 @@
 "\n"
 "    Changeset commit comment. Bug 1234.\n"
 msgstr ""
-"integração com o Bugzilla\n"
+"ganchos para integração com um bug tracker Bugzilla\n"
 "\n"
 "Essa extensão adiciona comentários a bugs do Bugzilla quando\n"
 "forem encontrados changesets que se refiram a esses bugs pelo ID.\n"
@@ -459,7 +426,7 @@
 "O gancho se baseia em um script do Bugzilla para enviar emails de\n"
 "notificação de alterações de bugs. Esse script muda entre versões do\n"
 "Bugzilla; o script 'processmail' usado antes da 2.18 é substituído na\n"
-"2.18 e subsequentes por 'config/sendbugmail.pl'. Note que esse script\n"
+"2.18 e subseqüentes por 'config/sendbugmail.pl'. Note que esse script\n"
 "será executado pelo Mercurial assim que o usuário enviar o changeset;\n"
 "você terá que assegurar que as permissões de arquivo da instalação\n"
 "do Bugzilla estejam configuradas apropriadamente.\n"
@@ -509,8 +476,8 @@
 "                   {webroot}   O caminho do repositório do Mercurial.\n"
 "                   {hgweb}     URL base para visualizar o repositório\n"
 "                               do Mercurial via http.\n"
-"               Padrão  'changeset {node|short} in repo {root} refers '\n"
-"                       'to bug {bug}.\\ndetails:\\n\\t{desc|tabindent}'\n"
+"               Padrão 'changeset {node|short} in repo {root} refers '\n"
+"                      'to bug {bug}.\\ndetails:\\n\\t{desc|tabindent}'\n"
 "    strip      O número de barras que devem ser retiradas do início\n"
 "               do {root} para produzir o {webroot}. Padrão 0.\n"
 "    usermap    Caminho para o arquivo que contem o mapeamento do\n"
@@ -527,7 +494,7 @@
 "\n"
 "    [web]\n"
 "    baseurl    URL base para visualização de repositórios do\n"
-"               Mercurial. Usada em templates como {hgweb}.\n"
+"               Mercurial. Usada em modelos como {hgweb}.\n"
 "\n"
 "Para ativar a extensão:\n"
 "\n"
@@ -535,7 +502,7 @@
 "    hgext.bugzilla =\n"
 "\n"
 "    [hooks]\n"
-"    # executa o gancho bugzilla a cada mudança puxada ou empurrada\n"
+"    # executa o gancho bugzilla a cada mudança trazida\n"
 "    # para cá\n"
 "    incoming.bugzilla = python:hgext.bugzilla.hook\n"
 "\n"
@@ -551,7 +518,8 @@
 "    version=3.0\n"
 "    bzuser=unknown@domain.com\n"
 "    bzdir=/opt/bugzilla-3.2\n"
-"    template=Changeset {node|short} in {root|basename}.\\n{hgweb}/{webroot}/rev/{node|short}\\n\\n{desc}\\n\n"
+"    template=Changeset {node|short} in {root|basename}.\\n{hgweb}/{webroot}/"
+"rev/{node|short}\\n\\n{desc}\\n\n"
 "    strip=5\n"
 "\n"
 "    [web]\n"
@@ -560,7 +528,7 @@
 "    [usermap]\n"
 "    user@emaildomain.com=user.name@bugzilladomain.com\n"
 "\n"
-"Commits adicionam um comentário ao registro de bug do Bugzilla\n"
+"Consolidações adicionam um comentário ao registro de bug do Bugzilla\n"
 "com a forma:\n"
 "\n"
 "    Changeset 3b16791d6642 in repository-name.\n"
@@ -568,16 +536,10 @@
 "\n"
 "    Changeset commit comment. Bug 1234.\n"
 
-msgid "support for bugzilla version 2.16."
-msgstr "suporte à versão 2.16 do bugzilla."
-
 #, python-format
 msgid "connecting to %s:%s as %s, password %s\n"
 msgstr "conectando a %s:%s como %s, senha %s\n"
 
-msgid "run a query."
-msgstr "executa uma consulta"
-
 #, python-format
 msgid "query: %s %s\n"
 msgstr "consulta: %s %s\n"
@@ -586,26 +548,13 @@
 msgid "failed query: %s %s\n"
 msgstr "falha na consulta: %s %s\n"
 
-msgid "get identity of longdesc field"
-msgstr "resgata a identidade da descrição longa de um campo"
-
 msgid "unknown database schema"
 msgstr "esquema de banco de dados desconhecido"
 
-msgid "filter not-existing bug ids from list."
-msgstr "filtro de id de bug desconhecido da lista."
-
-msgid "filter bug ids from list that already refer to this changeset."
-msgstr "filtro de id de bug da lista que já se refere a esse changeset."
-
 #, python-format
 msgid "bug %d already knows about changeset %s\n"
 msgstr "o bug %d já sabe sobre o changeset %s\n"
 
-# internal string, no need to translate
-msgid "tell bugzilla to send mail."
-msgstr ""
-
 msgid "telling bugzilla to send mail:\n"
 msgstr "falando para o bugzilla enviar email:\n"
 
@@ -624,25 +573,10 @@
 msgid "done\n"
 msgstr "feito\n"
 
-# internal string, no need to translate
-msgid "look up numeric bugzilla user id."
-msgstr ""
-
 #, python-format
 msgid "looking up user %s\n"
 msgstr "procurando usuário %s\n"
 
-# internal string, no need to translate
-msgid "map name of committer to bugzilla user name."
-msgstr ""
-
-# internal string, no need to translate
-msgid ""
-"see if committer is a registered bugzilla user. Return\n"
-"        bugzilla username and userid if so. If not, return default\n"
-"        bugzilla username and userid."
-msgstr ""
-
 #, python-format
 msgid "cannot find bugzilla user id for %s"
 msgstr "não é possível encontrar o id do usuário no bugzilla para %s"
@@ -651,49 +585,11 @@
 msgid "cannot find bugzilla user id for %s or %s"
 msgstr "não é possível encontrar o id do usuário no bugzilla para %s ou %s"
 
-msgid ""
-"add comment to bug. try adding comment as committer of\n"
-"        changeset, otherwise as default bugzilla user."
-msgstr ""
-"adiciona comentário ao bug. Tenta adicionar comentário como consolidador\n"
-"        do changeset, caso contrário como usuário padrão do bugzilla."
-
-msgid "support for bugzilla 2.18 series."
-msgstr "suporte para a série 2.18 do bugzilla."
-
-msgid "support for bugzilla 3.0 series."
-msgstr "suporte para a série 3.0 do bugzilla."
-
-msgid ""
-"return object that knows how to talk to bugzilla version in\n"
-"        use."
-msgstr ""
-"retorna o objeto que sabe como conversar com a verão em uso do\n"
-"        bugzilla."
-
 #, python-format
 msgid "bugzilla version %s not supported"
 msgstr "versão %s do bugzilla não suportada"
 
 msgid ""
-"find valid bug ids that are referred to in changeset\n"
-"        comments and that do not already have references to this\n"
-"        changeset."
-msgstr ""
-"encontra os identificadores dos bugs que são referenciados no comentário\n"
-"        do changeset e que ainda não tenham referencias a ele."
-
-msgid "update bugzilla bug with reference to changeset."
-msgstr "atualiza o bug do bugzilla com referencia para o changeset."
-
-msgid ""
-"strip leading prefix of repo root and turn into\n"
-"            url-safe path."
-msgstr ""
-"remove o prefixos iniciais de um repositório e transforma em\n"
-"            um caminho de url válido."
-
-msgid ""
 "changeset {node|short} in repo {root} refers to bug {bug}.\n"
 "details:\n"
 "\t{desc|tabindent}"
@@ -702,16 +598,6 @@
 "detalhes:\n"
 "\t{desc|tabindent}"
 
-msgid ""
-"add comment to bugzilla for each changeset that refers to a\n"
-"    bugzilla bug id. only add a comment once per bug, so same change\n"
-"    seen multiple times does not fill bug with duplicate data."
-msgstr ""
-"adiciona comentários ao bugzilla para cada changeset que se\n"
-"    refere a um id de bug do bugzilla. Adiciona somente um\n"
-"    comentário por bug, de forma que o mesmo changeset visto\n"
-"    várias vezes não enche o bug com dados duplicados."
-
 #, python-format
 msgid "python mysql support not available: %s"
 msgstr "indisponível suporte ao mysql no python: %s"
@@ -724,11 +610,14 @@
 msgid "database error: %s"
 msgstr "erro de banco de dados: %s"
 
+msgid "command to display child changesets"
+msgstr "comando para exibir changesets filhos"
+
 msgid ""
 "show the children of the given or working directory revision\n"
 "\n"
 "    Print the children of the working directory's revisions. If a\n"
-"    revision is given via --rev/-r, the children of that revision will\n"
+"    revision is given via -r/--rev, the children of that revision will\n"
 "    be printed. If a file argument is given, revision in which the\n"
 "    file was last changed (after the working directory revision or the\n"
 "    argument to --rev if given) is printed.\n"
@@ -749,11 +638,8 @@
 msgid "hg children [-r REV] [FILE]"
 msgstr "hg children [-r REV] [ARQUIVO]"
 
-msgid "command to show certain statistics about revision history"
-msgstr "comando que mostra estatísticas sobre o histórico de revisões"
-
-msgid "Calculate stats"
-msgstr "Calcula dados"
+msgid "command to display statistics about repository history"
+msgstr "comando para mostrar estatísticas do histórico do repositório"
 
 #, python-format
 msgid "Revision %d is a merge, ignoring...\n"
@@ -764,13 +650,17 @@
 msgstr "gerando estatísticas: %d%%"
 
 msgid ""
-"graph count of revisions grouped by template\n"
-"\n"
-"    Will graph count of changed lines or revisions grouped by template\n"
-"    or alternatively by date, if dateformat is used. In this case it\n"
-"    will override template.\n"
-"\n"
-"    By default statistics are counted for number of changed lines.\n"
+"histogram of changes to the repository\n"
+"\n"
+"    This command will display a histogram representing the number\n"
+"    of changed lines or revisions, grouped according to the given\n"
+"    template. The default template will group changes by author.\n"
+"    The --dateformat option may be used to group the results by\n"
+"    date instead.\n"
+"\n"
+"    Statistics are based on the number of changed lines, or\n"
+"    alternatively the number of matching revisions if the\n"
+"    --changesets option is specified.\n"
 "\n"
 "    Examples:\n"
 "\n"
@@ -786,18 +676,26 @@
 "      # display count of lines changed in every year\n"
 "      hg churn -f '%Y' -s\n"
 "\n"
-"    The map file format used to specify aliases is fairly simple:\n"
-"\n"
-"    <alias email> <actual email>"
-msgstr ""
-"Contagem gráfica de revisões, agrupadas por um modelo\n"
-"\n"
-"    Irá contar graficamente as linhas alteradas ou revisões,\n"
-"    agrupadas de acordo com um modelo, ou alternativamente por\n"
-"    data (se for utilizado algum formato de data).\n"
-"\n"
-"    Por padrão as estatísticas são contadas por número de linhas\n"
-"    alteradas.\n"
+"    It is possible to map alternate email addresses to a main address\n"
+"    by providing a file using the following format:\n"
+"\n"
+"    <alias email> <actual email>\n"
+"\n"
+"    Such a file may be specified with the --aliases option, otherwise a\n"
+"    .hgchurn file will be looked for in the working directory root.\n"
+"    "
+msgstr ""
+"Histograma de mudanças do repositório\n"
+"\n"
+"    Este comando exibe um histograma representando o número de linhas\n"
+"    alteradas ou revisões, agrupadas de acordo com o modelo pedido.\n"
+"    O modelo padrão agrupa mudanças por autor. Alternativamente, a\n"
+"    opção --dateformat pode ser usada para agrupar os resultados por\n"
+"    data.\n"
+"\n"
+"    As estatísticas se baseiam no número de linhas modificadas, ou\n"
+"    alternativamente no número de revisões, se for usada a opção\n"
+"    --changesets.\n"
 "\n"
 "    Exemplos:\n"
 "\n"
@@ -807,32 +705,38 @@
 "      # exibe o gráfico de atividades diárias\n"
 "      hg churn -f '%H' -s -c\n"
 "\n"
-"      # exibe atividades do desenvolvedores por mês\n"
+"      # exibe atividades dos desenvolvedores por mês\n"
 "      hg churn -f '%Y-%m' -s -c\n"
 "\n"
-"    O formato do arquivo de mapeamento usado para especificar\n"
-"    apelidos é bem simples:\n"
-"\n"
-"    <e-mail apelido> <e-mail real>"
+"    É possível mapear endereços de email alternativos para um\n"
+"    endereço principal provendo um arquivo usando o seguinte\n"
+"    formato:\n"
+"\n"
+"    <email alternativo> <email principal>\n"
+"\n"
+"    Esse arquivo pode ser especificado com a opção --aliases; de\n"
+"    outro modo, será usado um arquivo .hgchurn no raiz do diretório\n"
+"    de trabalho, se existir.\n"
+"    "
 
 #, python-format
 msgid "assuming %i character terminal\n"
 msgstr "assumindo terminal de %i caracteres\n"
 
 msgid "count rate for the specified revision or range"
-msgstr "conta a frequência para uma revisão ou faixa especificada"
+msgstr "conta a freqüência para uma revisão ou faixa especificada"
 
 msgid "count rate for revisions matching date spec"
-msgstr "conta a frequência das revisões que casem com a data especificada"
+msgstr "conta a freqüência das revisões que casem com a data especificada"
 
 msgid "template to group changesets"
-msgstr "modelo para agrupar os changsets"
+msgstr "modelo para agrupar os changesets"
 
 msgid "strftime-compatible format for grouping by date"
 msgstr "formato compatível com o strftime para agrupar por data"
 
 msgid "count rate by number of changesets"
-msgstr "conta a frequência pelo numero de changsets"
+msgstr "conta a freqüência pelo numero de changesets"
 
 msgid "sort by key (default: sort by count)"
 msgstr "ordenar pela chave (padrão: ordenar pela contagem)"
@@ -844,10 +748,10 @@
 msgstr "exibir progresso"
 
 msgid "hg churn [-d DATE] [-r REV] [--aliases FILE] [--progress] [FILE]"
-msgstr "hg churn [-d DATA] [-r REVISAO] [--aliases ARQUIVO] [--progress] [ARQUIVO]"
-
-msgid ""
-"add color output to status, qseries, and diff-related commands\n"
+msgstr "hg churn [-d DATA] [-r REVISÃO] [--aliases ARQUIVO] [--progress] [ARQUIVO]"
+
+msgid ""
+"colorize output from some commands\n"
 "\n"
 "This extension modifies the status command to add color to its output\n"
 "to reflect file status, the qseries command to add color to reflect\n"
@@ -860,11 +764,7 @@
 "function (aka ANSI escape codes). This module also provides the\n"
 "render_text function, which can be used to add effects to any text.\n"
 "\n"
-"To enable this extension, add this to your .hgrc file:\n"
-"[extensions]\n"
-"color =\n"
-"\n"
-"Default effects my be overriden from the .hgrc file:\n"
+"Default effects may be overridden from the .hgrc file:\n"
 "\n"
 "[color]\n"
 "status.modified = blue bold underline red_background\n"
@@ -892,7 +792,7 @@
 "diff.changed = white\n"
 "diff.trailingwhitespace = bold red_background\n"
 msgstr ""
-"coloriza a saída de status, qseries e comandos que geram diffs\n"
+"colore a saída de alguns comandos\n"
 "\n"
 "Essa extensão colore a saída dos comandos para realçar diversas\n"
 "informações: no comando status, reflete os estados dos arquivos; no\n"
@@ -907,10 +807,6 @@
 "Esse modulo também provê a função render_text, que pode ser utilizada\n"
 "para adicionar efeitos a qualquer texto.\n"
 "\n"
-"Para habilitar essa extensão, adicione isto no seu arquivo .hgrc:\n"
-"[extensions]\n"
-"color =\n"
-"\n"
 "Os efeitos padrão podem ser sobrepostos pelo arquivo .hgrc:\n"
 "\n"
 "[color]\n"
@@ -939,38 +835,20 @@
 "diff.changed = white\n"
 "diff.trailingwhitespace = bold red_background\n"
 
-msgid "Wrap text in commands to turn on each effect."
-msgstr "Quebra o texto nos comandos para acionar cada efeito. "
-
-msgid "run the status command with colored output"
-msgstr "executa o comando status com a saída colorida"
-
-msgid "run the qseries command with colored output"
-msgstr "executa o comando qseries com a saída colorida"
-
-msgid "wrap ui.write for colored diff output"
-msgstr "engloba ui.write para saída de diff colorido "
-
-msgid "wrap cmdutil.changeset_printer.showpatch with colored output"
-msgstr "engloba cmdutil.changeset_printer.showpatch com saída colorida"
-
-msgid "run the diff command with colored output"
-msgstr "roda o comando diff com saída colorida"
-
-msgid "Initialize the extension."
-msgstr "Inicializa a extensão"
-
-msgid "patch in command to command table and load effect map"
-msgstr "remenda o comando para a tabela de comandos e carrega o mapa de efeitos"
-
 msgid "when to colorize (always, auto, or never)"
-msgstr "quando colorir (sempre, automático ou nunca)"
+msgstr ""
+"quando colorir (\"always\": sempre, \"never\": nunca ou \"auto\": "
+"automaticamente)"
 
 msgid "don't colorize output"
-msgstr "não colorir a saída"
-
-msgid "converting foreign VCS repositories to Mercurial"
-msgstr "conversão de repositórios de outros VCSs para o Mercurial"
+msgstr "não colore a saída"
+
+#, python-format
+msgid "ignoring unknown color/effect %r (configured in color.%s)\n"
+msgstr "ignorando cor/efeito desconhecido %r (configurado em color.%s)\n"
+
+msgid "import revisions from foreign VCS repositories into Mercurial"
+msgstr "importa revisões de repositórios de outros sistemas para o Mercurial"
 
 msgid ""
 "convert a foreign SCM repository to a Mercurial one.\n"
@@ -998,6 +876,18 @@
 "    basename of the source with '-hg' appended. If the destination\n"
 "    repository doesn't exist, it will be created.\n"
 "\n"
+"    By default, all sources except Mercurial will use\n"
+"    --branchsort. Mercurial uses --sourcesort to preserve original\n"
+"    revision numbers order. Sort modes have the following effects:\n"
+"      --branchsort: convert from parent to child revision when\n"
+"        possible, which means branches are usually converted one after\n"
+"        the other. It generates more compact repositories.\n"
+"      --datesort: sort revisions by date. Converted repositories have\n"
+"        good-looking changelogs but are often an order of magnitude\n"
+"        larger than the same ones generated by --branchsort.\n"
+"      --sourcesort: try to preserve source revisions order, only\n"
+"        supported by Mercurial sources.\n"
+"\n"
 "    If <REVMAP> isn't given, it will be put in a default location\n"
 "    (<dest>/.hg/shamap by default). The <REVMAP> is a simple text file\n"
 "    that maps each source commit ID to the destination ID for that\n"
@@ -1026,7 +916,7 @@
 "\n"
 "    The 'include' directive causes a file, or all files under a\n"
 "    directory, to be included in the destination repository, and the\n"
-"    exclusion of all other files and directories not explicitely included.\n"
+"    exclusion of all other files and directories not explicitly included.\n"
 "    The 'exclude' directive causes files or directories to be omitted.\n"
 "    The 'rename' directive renames a file or directory. To rename from\n"
 "    a subdirectory into the root of the repository, use '.' as the\n"
@@ -1043,6 +933,17 @@
 "    (in either the source or destination revision control system) that\n"
 "    should be used as the new parents for that node.\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"
+"    conjunction with a splicemap, it allows for a powerful combination\n"
+"    to help fix even the most badly mismanaged repositories and turn them\n"
+"    into nicely structured Mercurial repositories. The branchmap contains\n"
+"    lines of the form \"original_branch_name new_branch_name\".\n"
+"    \"original_branch_name\" is the name of the branch in the source\n"
+"    repository, and \"new_branch_name\" is the name of the branch is the\n"
+"    destination repository. This can be used to (for instance) move code\n"
+"    in one repository from \"default\" to a named branch.\n"
+"\n"
 "    Mercurial Source\n"
 "    -----------------\n"
 "\n"
@@ -1066,7 +967,7 @@
 "    in the sandbox to find the CVS repository, and then uses CVS rlog\n"
 "    commands to find files to convert. This means that unless a\n"
 "    filemap is given, all files under the starting directory will be\n"
-"    converted, and that any directory reorganisation in the CVS\n"
+"    converted, and that any directory reorganization in the CVS\n"
 "    sandbox is ignored.\n"
 "\n"
 "    Because CVS does not have changesets, it is necessary to collect\n"
@@ -1074,13 +975,16 @@
 "    source uses its internal changeset merging code by default but can\n"
 "    be configured to call the external 'cvsps' program by setting:\n"
 "        --config convert.cvsps='cvsps -A -u --cvs-direct -q'\n"
-"    This is a legacy option and may be removed in future.\n"
+"    This option is deprecated and will be removed in Mercurial 1.4.\n"
 "\n"
 "    The options shown are the defaults.\n"
 "\n"
 "    Internal cvsps is selected by setting\n"
 "        --config convert.cvsps=builtin\n"
 "    and has a few more configurable options:\n"
+"        --config convert.cvsps.cache=True     (boolean)\n"
+"            Set to False to disable remote log caching, for testing and\n"
+"            debugging purposes.\n"
 "        --config convert.cvsps.fuzz=60        (integer)\n"
 "            Specify the maximum time (in seconds) that is allowed\n"
 "            between commits with identical user and log message in a\n"
@@ -1114,9 +1018,9 @@
 "    its subdirectories are listed as possible branches. If\n"
 "    \"svn://repo/path/tags\" exists, it is looked for tags referencing\n"
 "    converted branches. Default \"trunk\", \"branches\" and \"tags\" values\n"
-"    can be overriden with following options. Set them to paths\n"
-"    relative to the source URL, or leave them blank to disable\n"
-"    autodetection.\n"
+"    can be overridden with following options. Set them to paths\n"
+"    relative to the source URL, or leave them blank to disable auto\n"
+"    detection.\n"
 "\n"
 "    --config convert.svn.branches=branches    (directory name)\n"
 "        specify the directory containing branches\n"
@@ -1186,13 +1090,28 @@
 "    será o nome base com '-hg' anexado. Se o repositório de destino\n"
 "    não existir, ele será criado.\n"
 "\n"
-"    Se não for dado o <REVMAP>, ele será colocado em uma localização\n"
-"    padrão (<dest>/.hg/shamap por padrão). O <REVMAP> é um simples\n"
-"    arquivo texto que mapeia cada ID de commit da origem para o ID de\n"
-"    destino para aquela revisão, dessa forma:\n"
+"    Por padrão, a conversão de todas as origens exceto do Mercurial\n"
+"    usará --branchsort. O Mercurial usa --sourcesort para preservar\n"
+"    a ordem de números de revisão original. Modos de ordenação têm\n"
+"    os seguintes efeitos:\n"
+"      --branchsort: converte de revisão pai para filha quando\n"
+"        possível, o que faz com que ramos sejam usualmente\n"
+"        convertidos um após o outro. Esta opção gera repositórios\n"
+"        mais compactos.\n"
+"      --datesort: ordena revisões por data. Os repositórios\n"
+"        convertidos tendem a ter changelogs de boa aparência, mas\n"
+"        algumas vezes são uma ordem de grandeza maiores que os\n"
+"        mesmos gerados por --branchsort.\n"
+"      --sourcesort: tenta preservar a ordem de revisões da origem,\n"
+"        suportada apenas pela origem Mercurial.\n"
+"\n"
+"    Se não for dado o <REVMAP>, ele será posto em um local padrão\n"
+"    (<destino>/.hg/shamap). O <REVMAP> é um simples arquivo texto\n"
+"    que mapeia cada ID de commit da origem para o ID de destino para\n"
+"    aquela revisão, da seguinte forma:\n"
 "    <ID origem> <ID destino>\n"
 "\n"
-"    Se o arquivo não existir, ele é automaticamente criado. Ele é\n"
+"    Se o arquivo não existir, será automaticamente criado. Ele é\n"
 "    atualizado a cada commit copiado, assim a conversão pode ser\n"
 "    interrompida e executada repetidamente para copiar novos commits.\n"
 "\n"
@@ -1201,7 +1120,7 @@
 "    no destino. Isso é uma ajuda para sistemas de origem que utilizam\n"
 "    logins unix para identificar os autores (ex: CVS). Uma linha por\n"
 "    mapeamento de autor no formato:\n"
-"    autor_origem=qualquer string que voce quiser\n"
+"    autor_origem=qualquer string que você quiser\n"
 "\n"
 "    O filemap é um arquivo que permite filtrar e remapear arquivos e\n"
 "    diretórios. Linhas de comentário iniciam com '#'. Cada linha\n"
@@ -1233,6 +1152,18 @@
 "    revisão (no sistema de origem ou no de destino) que devem ser\n"
 "    usados como os novos pais daquele nó.\n"
 "\n"
+"    O branchmap é um arquivo que permite a renomeação de um ramo\n"
+"    quando este for trazido de um repositório externo qualquer. Se\n"
+"    usado em conjunto com um splicemap, fornece uma poderosa\n"
+"    combinação que auxilia o conserto de repositórios mal\n"
+"    gerenciados, transformando-os em repositórios Mercurial\n"
+"    estruturados apropriadamente. O branchmap contém linhas da forma\n"
+"    \"nome_ramo_original nome_novo_ramo\". \"nome_ramo_original\" é\n"
+"    o nome do ramo no repositório de origem, e \"nome_novo_ramo\" é\n"
+"    o nome do ramo no repositório de destino. Isto pode ser usado\n"
+"    para por exemplo mover código em um repositório de \"default\"\n"
+"    para um ramo nomeado.\n"
+"\n"
 "    Origem Mercurial\n"
 "    -----------------\n"
 "\n"
@@ -1264,13 +1195,16 @@
 "    seu código interno de mesclagem por padrão, mas pode ser\n"
 "    configurada para chamar o utilitário externo 'cvsps' definindo:\n"
 "        --config convert.cvsps='cvsps -A -u --cvs-direct -q'\n"
-"    Esta é uma opção legada que pode ser futuramente removida.\n"
+"    Esta opção é obsoleta e será removida no Mercurial 1.4.\n"
 "\n"
 "    As opções exibidas são os valores padrão.\n"
 "\n"
 "    O cvsps interno é selecionado com\n"
 "        --config convert.cvsps=builtin\n"
 "    e possui algumas outras opções de configuração:\n"
+"        --config convert.cvsps.cache=True     (booleana)\n"
+"            Defina como False para desabilitar o cache do log\n"
+"            remoto, para teste ou depuração.\n"
 "        --config convert.cvsps.fuzz=60        (inteiro)\n"
 "            Especifica o tempo máximo (em segundos) permitido entre\n"
 "            commits com usuário e mensagem de log em um único\n"
@@ -1309,11 +1243,11 @@
 "    opções. Defina-os como caminhos relativos à URL de origem, ou\n"
 "    deixe-os em branco para desabilitar a auto-detecção.\n"
 "\n"
-"    --config convert.svn.branches=branches    (directory name)\n"
+"    --config convert.svn.branches=branches    (nome de diretório)\n"
 "        especifica o diretório contendo ramos\n"
-"    --config convert.svn.tags=tags            (directory name)\n"
+"    --config convert.svn.tags=tags            (nome de diretório)\n"
 "        especifica o diretório contendo tags\n"
-"    --config convert.svn.trunk=trunk          (directory name)\n"
+"    --config convert.svn.trunk=trunk          (nome de diretório)\n"
 "        especifica o nome do ramo trunk\n"
 "\n"
 "    O histórico de origem pode ser recuperado a partir de uma revisão\n"
@@ -1365,7 +1299,7 @@
 "    series of changesets based on matching commit log entries and\n"
 "    dates."
 msgstr ""
-"cria uma informação de changset do CVS\n"
+"cria uma informação de changeset do CVS\n"
 "\n"
 "    Esse comando serve como ferramenta de depuração para o conversor\n"
 "    do CVS para o Mercurial e pode ser usado como um substituto\n"
@@ -1373,20 +1307,20 @@
 "\n"
 "    Hg debugcvsps lê o rlog do CVS para o diretório atual (ou\n"
 "    qualquer diretório nomeado) no repositório do CVS e converte o\n"
-"    log em uma série de changsets baseado na correspondência das\n"
+"    log em uma série de changesets baseado na correspondência das\n"
 "    entradas no log de commit e datas."
 
 msgid "username mapping filename"
-msgstr "arquivo de mapeamento de nome de usuário"
+msgstr "arquivo de mapeamento de nomes de usuário"
 
 msgid "destination repository type"
 msgstr "tipo de repositório de destino"
 
 msgid "remap file names using contents of file"
-msgstr "remapenado nomes de arquivo usando o conteúdo do arquivo"
+msgstr "arquivo de mapeamento de nomes de arquivo"
 
 msgid "import up to target revision REV"
-msgstr "importação pronta para a revisão REV alvo."
+msgstr "importa até a revisão REV do alvo."
 
 msgid "source repository type"
 msgstr "tipo de repositório de origem"
@@ -1394,8 +1328,17 @@
 msgid "splice synthesized history into place"
 msgstr "junta o histórico sintetizado no lugar"
 
+msgid "change branch names while converting"
+msgstr "muda nomes de ramos durante a conversão"
+
+msgid "try to sort changesets by branches"
+msgstr "tenta ordenar os changesets por ramos"
+
 msgid "try to sort changesets by date"
-msgstr "tenta ordenar os changsets por data"
+msgstr "tenta ordenar os changesets por data"
+
+msgid "preserve source changesets order"
+msgstr "preserva a ordem de changesets da origem"
 
 msgid "hg convert [OPTION]... SOURCE [DEST [REVMAP]]"
 msgstr "hg convert [OPÇÃO]... ORIGEM [DESTINO [REVMAP]]"
@@ -1407,7 +1350,7 @@
 msgstr "prefixo para remover dos nomes dos arquivos"
 
 msgid "only return changes after or between specified tags"
-msgstr "só retorna alterações antes ou entre tags"
+msgstr "só retorna alterações anteriores ou entre as tags especificadas"
 
 msgid "update cvs log cache"
 msgstr "atualiza a cache do log do cvs"
@@ -1433,6 +1376,16 @@
 msgid "hg debugcvsps [OPTION]... [PATH]..."
 msgstr "hg debugcvsps [OPÇÃO]... [CAMINHO]..."
 
+msgid ""
+"warning: lightweight checkouts may cause conversion failures, try with a "
+"regular branch instead.\n"
+msgstr ""
+"aviso: checkouts \"lightweight\" podem causar falhas de conversão, tente com "
+"um branch comum.\n"
+
+msgid "bzr source type could not be determined\n"
+msgstr "o tipo de origem bzr não pôde ser determinado\n"
+
 #, python-format
 msgid "%s is not a valid revision in current branch"
 msgstr "%s não é uma revisão válida no ramo atual"
@@ -1442,6 +1395,10 @@
 msgstr "%s não está mais disponível em %s"
 
 #, python-format
+msgid "%s.%s symlink has no target"
+msgstr "%s.%s link simbólico não possui alvo"
+
+#, python-format
 msgid "cannot find required \"%s\" tool"
 msgstr "não foi possível encontrar ferramenta \"%s\" necessária"
 
@@ -1454,10 +1411,6 @@
 msgstr "erro no comando %s:\n"
 
 #, python-format
-msgid "%s %s"
-msgstr "%s %s"
-
-#, python-format
 msgid "syntax error in %s(%d): key/value pair expected"
 msgstr "erro de sintaxe em %s(%d): esperado par chave/valor"
 
@@ -1478,6 +1431,10 @@
 msgstr "%s: tipo de repositório desconhecido"
 
 #, python-format
+msgid "unknown sort mode: %s"
+msgstr "modo de ordenação desconhecido: %s"
+
+#, python-format
 msgid "cycle detected between %s and %s"
 msgstr "ciclo detectado entre %s e %s"
 
@@ -1515,12 +1472,25 @@
 
 #, python-format
 msgid "source: %s\n"
-msgstr "fonte: %s\n"
+msgstr "origem: %s\n"
 
 #, python-format
 msgid "assuming destination %s\n"
 msgstr "assumindo destino %s\n"
 
+msgid "more than one sort mode specified"
+msgstr "mais de um modo de ordenação especificado"
+
+msgid "--sourcesort is not supported by this data source"
+msgstr "--sourcesort não é suportado para esta origem de dados"
+
+msgid ""
+"warning: support for external cvsps is deprecated and will be removed in "
+"Mercurial 1.4\n"
+msgstr ""
+"aviso: o suporte para o cvsps externo é obsoleto e será removido no "
+"Mercurial 1.4\n"
+
 #, python-format
 msgid "revision %s is not a patchset number or date"
 msgstr "revisão %s não é um número de patchset ou data"
@@ -1604,6 +1574,14 @@
 msgstr "um changeset sintético não pode ter múltiplos pais"
 
 #, python-format
+msgid ""
+"warning: CVS commit message references non-existent branch %r:\n"
+"%s\n"
+msgstr ""
+"aviso: a mensagem de commit do CVS se refere a um branch inexistente %r:\n"
+"%s\n"
+
+#, python-format
 msgid "%d changeset entries\n"
 msgstr "%d entradas de changeset\n"
 
@@ -1644,7 +1622,9 @@
 
 #, python-format
 msgid "tree analysis stopped because it points to an unregistered archive %s...\n"
-msgstr "análise da árvore parou porque esta aponta para um arquivo não registrado %s...\n"
+msgstr ""
+"análise da árvore parou porque esta aponta para um arquivo não registrado %"
+"s...\n"
 
 #, python-format
 msgid "applying revision %s...\n"
@@ -1659,7 +1639,7 @@
 msgstr "obtendo revisão %s...\n"
 
 #, python-format
-msgid "analysing revision %s...\n"
+msgid "analyzing revision %s...\n"
 msgstr "analisando revisão %s...\n"
 
 #, python-format
@@ -1675,15 +1655,18 @@
 msgstr "iniciando repositório de destino %s\n"
 
 msgid "run hg sink pre-conversion action\n"
-msgstr "executa acão pré-conversão do destino hg\n"
+msgstr "executa ação pré-conversão do destino hg\n"
 
 msgid "run hg sink post-conversion action\n"
-msgstr "executa acão pós-conversão do destino hg\n"
+msgstr "executa ação pós-conversão do destino hg\n"
 
 #, python-format
 msgid "pulling from %s into %s\n"
 msgstr "trazendo de %s para %s\n"
 
+msgid "filtering out empty revision\n"
+msgstr "filtrando revisão vazia\n"
+
 msgid "updating tags\n"
 msgstr "atualizando tags\n"
 
@@ -1696,10 +1679,10 @@
 msgstr "ignorando: %s\n"
 
 msgid "run hg source pre-conversion action\n"
-msgstr "executa acão pré-conversão da origem hg\n"
+msgstr "executa ação pré-conversão da origem hg\n"
 
 msgid "run hg source post-conversion action\n"
-msgstr "executa acão pós-conversão da origem hg\n"
+msgstr "executa ação pós-conversão da origem hg\n"
 
 #, python-format
 msgid "%s does not look like a monotone repo"
@@ -1720,10 +1703,14 @@
 
 #, python-format
 msgid "Subversion python bindings %d.%d found, 1.4 or later required"
-msgstr "Encontrados módulos Python para o Subversion %d.%d, requerida a versão 1.4 ou posterior"
+msgstr ""
+"Encontrados módulos Python para o Subversion %d.%d, requerida a versão 1.4 "
+"ou posterior"
 
 msgid "Subversion python bindings are too old, 1.4 or later required"
-msgstr "Módulos Python para o Subversion são antigos demais, requerida a versão 1.4 ou posterior"
+msgstr ""
+"Módulos Python para o Subversion são antigos demais, requerida a versão 1.4 "
+"ou posterior"
 
 #, python-format
 msgid "svn: revision %s is not an integer"
@@ -1789,19 +1776,8 @@
 msgstr "ido de %s\n"
 
 #, python-format
-msgid "found parent directory %s\n"
-msgstr "encontrado diretório pai %s\n"
-
-#, python-format
-msgid "base, entry %s %s\n"
-msgstr "base, entrada %s %s\n"
-
-msgid "munge-o-matic\n"
-msgstr "munge-o-matic\n"
-
-#, python-format
-msgid "info: %s %s %s %s\n"
-msgstr "info: %s %s %s %s\n"
+msgid "entry %s\n"
+msgstr "entrada %s\n"
 
 #, python-format
 msgid "unknown path in revision %d: %s\n"
@@ -1827,10 +1803,6 @@
 msgstr "obtendo log da revisão para \"%s\" de %d até %d\n"
 
 #, python-format
-msgid "skipping blacklisted revision %d\n"
-msgstr "ignorando revisão %d na lista negra\n"
-
-#, python-format
 msgid "revision %d has no entries\n"
 msgstr "revisão %d não tem entradas\n"
 
@@ -1859,8 +1831,8 @@
 msgid "XXX TAGS NOT IMPLEMENTED YET\n"
 msgstr "XXX TAGS AINDA NÃO IMPLEMENTADAS\n"
 
-# internal string, no need to translate
-msgid ""
+msgid ""
+"command to allow external programs to compare revisions\n"
 "\n"
 "The `extdiff' Mercurial extension allows you to use external programs\n"
 "to compare revisions, or revision with working directory. The external diff\n"
@@ -1868,11 +1840,6 @@
 "non-option arguments: paths to directories containing snapshots of\n"
 "files to compare.\n"
 "\n"
-"To enable this extension:\n"
-"\n"
-"  [extensions]\n"
-"  hgext.extdiff =\n"
-"\n"
 "The `extdiff' extension also allows to configure new diff commands, so\n"
 "you do not need to type \"hg extdiff -p kdiff3\" always.\n"
 "\n"
@@ -1891,7 +1858,8 @@
 "\n"
 "  # add new command called vimdiff, runs gvimdiff with DirDiff plugin\n"
 "  # (see http://www.vim.org/scripts/script.php?script_id=102)\n"
-"  # Non english user, be sure to put \"let g:DirDiffDynamicDiffText = 1\" in\n"
+"  # Non English user, be sure to put \"let g:DirDiffDynamicDiffText = 1\" "
+"in\n"
 "  # your .vimrc\n"
 "  vimdiff = gvim -f '+next' '+execute \"DirDiff\" argv(0) argv(1)'\n"
 "\n"
@@ -1900,13 +1868,45 @@
 "files, so running the external diff program will actually be pretty\n"
 "fast (at least faster than having to compare the entire tree).\n"
 msgstr ""
-
-# internal string, no need to translate
-msgid ""
-"snapshot files as of some revision\n"
-"    if not using snapshot, -I/-X does not work and recursive diff\n"
-"    in tools like kdiff3 and meld displays too many files."
-msgstr ""
+"comando que usa programas externos para comparar revisões\n"
+"\n"
+"A extensão `extdiff' do Mercurial permite o uso de programas externos\n"
+"para comparar revisões ou revisões e a cópia local. Os programas de\n"
+"diff externos são chamados com um conjunto configurável de opções e\n"
+"dois argumentos: caminhos para diretórios contendo cópias temporárias\n"
+"dos arquivos a serem comparados.\n"
+"\n"
+"A extensão `extdiff' também permite configurar novos comandos\n"
+"de diff, de modo que você não precise sempre digitar\n"
+"\"hg extdiff -p kdiff3\".\n"
+"\n"
+"  [extdiff]\n"
+"  # adiciona um novo comando que executa o GNU diff(1) em modo\n"
+"  # 'context diff'\n"
+"  cdiff = gdiff -Nprc5\n"
+"  ## ou do modo antigo:\n"
+"  #cmd.cdiff = gdiff\n"
+"  #opts.cdiff = -Nprc5\n"
+"\n"
+"  # adiciona um novo comando chamado vdiff, executa o kdiff3\n"
+"  vdiff = kdiff3\n"
+"\n"
+"  # adiciona um novo comando chamado meld, executa o meld\n"
+"  # (não é necessário nomeá-lo duas vezes)\n"
+"  meld =\n"
+"\n"
+"  # adiciona um novo comando chamado vimdiff, executa gvimdiff\n"
+"  # com o plugin DirDiff\n"
+"  #(veja http://www.vim.org/scripts/script.php?script_id=102)\n"
+"  # Esteja certo de colocar \"let g:DirDiffDynamicDiffText = 1\"\n"
+"  # em seu .vimrc\n"
+"  vimdiff = gvim -f '+next' '+execute \"DirDiff\" argv(0) argv(1)'\n"
+"\n"
+"Você pode usar -I/-X e uma lista de nomes de arquivos ou diretórios\n"
+"como no comando \"hg diff\" normal. A extensão `extdiff' faz cópias\n"
+"temporárias apenas dos arquivos necessários, de modo que a execução\n"
+"do diff externo seja rápida (ao menos mais rápida que comparar a\n"
+"árvore completa).\n"
 
 #, python-format
 msgid "making snapshot of %d files from rev %s\n"
@@ -1916,17 +1916,6 @@
 msgid "making snapshot of %d files from working directory\n"
 msgstr "fazendo fotografia de %d arquivos do diretório de trabalho\n"
 
-# internal string, no need to translate
-msgid ""
-"Do the actuall diff:\n"
-"\n"
-"    - copy to a temp structure if diffing 2 internal revisions\n"
-"    - copy to a temp structure if diffing working revision with\n"
-"      another one and more than 1 file is changed\n"
-"    - just invoke the diff for a single file in the working dir\n"
-"    "
-msgstr ""
-
 msgid "cannot specify --rev and --change at the same time"
 msgstr "não é possível especificar simultaneamente --rev e --change"
 
@@ -1936,7 +1925,9 @@
 
 #, python-format
 msgid "file changed while diffing. Overwriting: %s (src: %s)\n"
-msgstr "arquivo modificado durante execução do diff. Sobrescrevendo: %s (origem: %s)\n"
+msgstr ""
+"arquivo modificado durante execução do diff. Sobrescrevendo: %s (origem: %"
+"s)\n"
 
 msgid "cleaning up temp directory\n"
 msgstr "limpando o diretório temporário\n"
@@ -1989,16 +1980,12 @@
 msgid "hg extdiff [OPT]... [FILE]..."
 msgstr "hg extdiff [OPÇÃO]... [ARQUIVO]..."
 
-# internal string, no need to translate
-msgid "use closure to save diff command to use"
-msgstr ""
-
 #, python-format
 msgid "hg %s [OPTION]... [FILE]..."
 msgstr "hg %s [OPÇÃO]... [ARQUIVO]..."
 
-msgid "pulling, updating and merging in one command"
-msgstr "puxando, atualizando e mesclando em um comando"
+msgid "pull, update and merge in one command"
+msgstr "pull, update e merge em um comando"
 
 msgid ""
 "pull changes from a remote repository, merge new changes if needed.\n"
@@ -2022,7 +2009,7 @@
 "traz mudanças de um repositório remoto, mesclando se necessário\n"
 "\n"
 "    Este comando localiza todas as mudanças do repositório na URL ou\n"
-"    caminho especificado e as adicona ao repositório local.\n"
+"    caminho especificado e as adiciona ao repositório local.\n"
 "\n"
 "    Se as mudanças trazidas adicionarem uma nova cabeça de ramo, essa\n"
 "    cabeça será automaticamente mesclada, e o resultado da mesclagem\n"
@@ -2039,7 +2026,9 @@
 "    "
 
 msgid "working dir not at branch tip (use \"hg update\" to check out branch tip)"
-msgstr "o diretório de trabalho não está no ramo da ponta (use \"hg update\" para obter o ramo da ponta)"
+msgstr ""
+"o diretório de trabalho não está na tip do ramo (use \"hg update\" para "
+"obter a tip do ramo)"
 
 msgid "outstanding uncommitted merge"
 msgstr "mesclagem não consolidada pendente"
@@ -2051,18 +2040,26 @@
 msgstr "estão faltando alguns arquivos no diretório de trabalho"
 
 msgid "multiple heads in this branch (use \"hg heads .\" and \"hg merge\" to merge)"
-msgstr "múltiplas cabeças nesse ramo (use \"hg heads .\" e \"hg merge\" para mescla-los)"
+msgstr "múltiplas cabeças nesse ramo (use \"hg heads .\" e \"hg merge\" para mesclar"
 
 #, python-format
 msgid "pulling from %s\n"
-msgstr "puxando de %s\n"
-
-msgid "fetch -r doesn't work for remote repositories yet"
-msgstr "fetch -r ainda não funciona para repositórios remotos"
-
-#, python-format
-msgid "not merging with %d other new branch heads (use \"hg heads .\" and \"hg merge\" to merge them)\n"
-msgstr "não mesclando com %d outros novas cabeças de ramo (use \"hg heads .\" e \"hg merge\" para mescla-los)\n"
+msgstr "trazendo revisões de %s\n"
+
+msgid ""
+"Other repository doesn't support revision lookup, so a rev cannot be "
+"specified."
+msgstr ""
+"O outro repositório não suporta busca por revisão, portanto uma revisão não "
+"pode ser especificada."
+
+#, python-format
+msgid ""
+"not merging with %d other new branch heads (use \"hg heads .\" and \"hg merge"
+"\" to merge them)\n"
+msgstr ""
+"não mesclando com %d outros novas cabeças de ramo (use \"hg heads .\" e \"hg "
+"merge\" para mescla-los)\n"
 
 #, python-format
 msgid "updating to %d:%s\n"
@@ -2078,7 +2075,7 @@
 
 #, python-format
 msgid "new changeset %d:%s merges remote changes with local\n"
-msgstr "novo changset %d:%s mescla alterações remotas com local\n"
+msgstr "novo changeset %d:%s mescla alterações remotas com local\n"
 
 msgid "a specific revision you would like to pull"
 msgstr "uma revisão específica que você gostaria de trazer"
@@ -2095,26 +2092,12 @@
 msgid "hg fetch [SOURCE]"
 msgstr "hg fetch [ORIGEM]"
 
-msgid " returns of the good and bad signatures"
-msgstr " retornos das assinaturas boas e ruins"
+msgid "commands to sign and verify changesets"
+msgstr "comando para assinar e verificar changesets"
 
 msgid "error while verifying signature"
 msgstr "erro verificando assinatura"
 
-msgid "create a new gpg instance"
-msgstr "cria uma nova instancia gpg"
-
-# internal string, no need to translate
-msgid ""
-"\n"
-"    walk over every sigs, yields a couple\n"
-"    ((node, version, sig), (filename, linenumber))\n"
-"    "
-msgstr ""
-
-msgid "get the keys who signed a data"
-msgstr "pega a chave que assina os dados"
-
 #, python-format
 msgid "%s Bad signature from \"%s\"\n"
 msgstr "Assinatura %s ruim de \"%s\"\n"
@@ -2128,23 +2111,21 @@
 msgstr "%s Nota: Esta chave expirou (assinada por: \"%s\")\n"
 
 msgid "list signed changesets"
-msgstr "lista os changsets assinados"
+msgstr "lista os changesets assinados"
 
 #, python-format
 msgid "%s:%d node does not exist\n"
 msgstr "nó %s:%d não existe\n"
 
 msgid "verify all the signatures there may be for a particular revision"
-msgstr "verifica todas as assinaturas que podem ser para uma revisão em particular"
+msgstr ""
+"verifica todas as assinaturas que podem existir para uma revisão em "
+"particular"
 
 #, python-format
 msgid "No valid signature for %s\n"
 msgstr "Assinatura inválida para %s \n"
 
-# internal string, no need to translate
-msgid "associate a string to a key (username, comment)"
-msgstr ""
-
 msgid ""
 "add a signature for the current or given revision\n"
 "\n"
@@ -2156,10 +2137,12 @@
 msgstr ""
 "adiciona uma assinatura para a versão atual ou uma informada\n"
 "\n"
-"    Se não for dada uma versão, os pais do diretório de trabalho são usados\n"
-"    ou a ponta se nenhuma revisão tiver sido pega.\n"
-"\n"
-"    Veja 'hg help dates' para uma lista de formatos validos para -d/--date.\n"
+"    Se não for dada uma versão, será usado o pai do diretório de\n"
+"    trabalho, ou a tip se o diretório de trabalho não estiver em\n"
+"    nenhuma revisão.\n"
+"\n"
+"    Veja 'hg help dates' para uma lista de formatos validos para\n"
+"    -d/--date.\n"
 "    "
 
 msgid "uncommitted merge - please provide a specific revision"
@@ -2168,17 +2151,17 @@
 msgid "Error while signing"
 msgstr "Erro ao assinar"
 
-msgid "working copy of .hgsigs is changed (please commit .hgsigs manually or use --force)"
-msgstr "a cópia de trabalho de .hgsigs foi mudada (por favor consolide .hgsigs manualmente ou use --force)"
+msgid ""
+"working copy of .hgsigs is changed (please commit .hgsigs manually or use --"
+"force)"
+msgstr ""
+"a cópia de trabalho de .hgsigs foi mudada (por favor consolide .hgsigs "
+"manualmente ou use --force)"
 
 #, python-format
 msgid "Added signature for changeset %s"
 msgstr "Adicionada assinatura para o changeset %s"
 
-# internal string, no need to translate
-msgid "map a manifest into some text"
-msgstr ""
-
 msgid "unknown signature version"
 msgstr "versão de assinatura desconhecida"
 
@@ -2207,67 +2190,17 @@
 msgstr "hg sigs"
 
 msgid ""
-"show revision graphs in terminal windows\n"
+"command to view revision graphs from a shell\n"
 "\n"
 "This extension adds a --graph option to the incoming, outgoing and log\n"
-"commands. When this options is given, an ascii representation of the\n"
+"commands. When this options is given, an ASCII representation of the\n"
 "revision graph is also shown.\n"
 msgstr ""
-"exibe grafos de revisão em janelas de terminal\n"
+"comando para exibir grafos de revisão em terminais modo texto\n"
 "\n"
 "Esta extensão adiciona uma opção --graph aos comandos incoming,\n"
 "outgoing e log. Quando esta opção for passada, também será mostrada\n"
-"uma representação ascii do grafo de revisões.\n"
-
-# internal string, no need to translate
-msgid ""
-"cset DAG generator yielding (rev, node, [parents]) tuples\n"
-"\n"
-"    This generator function walks through the revision history from revision\n"
-"    start to revision stop (which must be less than or equal to start).\n"
-"    "
-msgstr ""
-
-# internal string, no need to translate
-msgid ""
-"file cset DAG generator yielding (rev, node, [parents]) tuples\n"
-"\n"
-"    This generator function walks through the revision history of a single\n"
-"    file from revision start to revision stop (which must be less than or\n"
-"    equal to start).\n"
-"    "
-msgstr ""
-
-# internal string, no need to translate
-msgid ""
-"grapher for asciigraph on a list of nodes and their parents\n"
-"\n"
-"    nodes must generate tuples (node, parents, char, lines) where\n"
-"     - parents must generate the parents of node, in sorted order,\n"
-"       and max length 2,\n"
-"     - char is the char to print as the node symbol, and\n"
-"     - lines are the lines to display next to the node.\n"
-"    "
-msgstr ""
-
-# internal string, no need to translate
-msgid ""
-"prints an ASCII graph of the DAG returned by the grapher\n"
-"\n"
-"    grapher is a generator that emits tuples with the following elements:\n"
-"\n"
-"      - Character to use as node's symbol.\n"
-"      - List of lines to display as the node's text.\n"
-"      - Column of the current node in the set of ongoing edges.\n"
-"      - Edges; a list of (col, next_col) indicating the edges between\n"
-"        the current node and its parents.\n"
-"      - Number of columns (ongoing edges) in the current revision.\n"
-"      - The difference between the number of columns (ongoing edges)\n"
-"        in the next revision and the number of columns (ongoing edges)\n"
-"        in the current revision. That is: -1 means one column removed;\n"
-"        0 means no columns added or removed; 1 means one column added.\n"
-"    "
-msgstr ""
+"uma representação ASCII do grafo de revisões.\n"
 
 #, python-format
 msgid "--graph option is incompatible with --%s"
@@ -2292,25 +2225,6 @@
 "    trabalho.\n"
 "    "
 
-msgid ""
-"show the outgoing changesets alongside an ASCII revision graph\n"
-"\n"
-"    Print the outgoing changesets alongside a revision graph drawn with\n"
-"    ASCII characters.\n"
-"\n"
-"    Nodes printed as an @ character are parents of the working\n"
-"    directory.\n"
-"    "
-msgstr ""
-"mostra os changesets de saída ao lado de um grafo ASCII de revisões\n"
-"\n"
-"    Imprime os changesets a serem enviados ao lado de um grafo de\n"
-"    revisões desenhado com caracteres ASCII.\n"
-"\n"
-"    Nós impressos como um caractere @ são pais do diretório de\n"
-"    trabalho.\n"
-"    "
-
 #, python-format
 msgid "comparing with %s\n"
 msgstr "comparando com %s\n"
@@ -2318,29 +2232,6 @@
 msgid "no changes found\n"
 msgstr "nenhuma alteração encontrada\n"
 
-msgid ""
-"show the incoming changesets alongside an ASCII revision graph\n"
-"\n"
-"    Print the incoming changesets alongside a revision graph drawn with\n"
-"    ASCII characters.\n"
-"\n"
-"    Nodes printed as an @ character are parents of the working\n"
-"    directory.\n"
-"    "
-msgstr ""
-"mostra os changesets de entrada ao lado de um grafo ASCII de revisões\n"
-"\n"
-"    Imprime os changesets a serem recebidos ao lado de um grafo de\n"
-"    revisões desenhado com caracteres ASCII.\n"
-"\n"
-"    Nós impressos como um caractere @ são pais do diretório de\n"
-"    trabalho.\n"
-"    "
-
-# internal string, no need to translate
-msgid "wrap the command"
-msgstr ""
-
 msgid "show the revision DAG"
 msgstr "mostra o grafo de revisões"
 
@@ -2351,14 +2242,13 @@
 msgstr "mostra o patch"
 
 msgid "show the specified revision or range"
-msgstr "mostra a revisão ou sequência de revisões especificada"
+msgstr "mostra a revisão ou seqüência de revisões especificada"
 
 msgid "hg glog [OPTION]... [FILE]"
 msgstr "hg glog [OPÇÃO]... [ARQUIVO]"
 
-# internal string, no need to translate
-msgid ""
-"CIA notification\n"
+msgid ""
+"hooks for integrating with the CIA.vc notification service\n"
 "\n"
 "This is meant to be run as a changegroup or incoming hook.\n"
 "To configure it, set the following options in your hgrc:\n"
@@ -2373,8 +2263,7 @@
 "# Append a diffstat to the log message (optional)\n"
 "#diffstat = False\n"
 "# Template to use for log messages (optional)\n"
-"#template = {desc}\n"
-"{baseurl}/rev/{node}-- {diffstat}\n"
+"#template = {desc}\\n{baseurl}/rev/{node}-- {diffstat}\n"
 "# Style to use (optional)\n"
 "#style = foo\n"
 "# The URL of the CIA notification service (optional)\n"
@@ -2394,23 +2283,45 @@
 "# If you want hyperlinks (optional)\n"
 "baseurl = http://server/path/to/repo\n"
 msgstr ""
-
-# internal string, no need to translate
-msgid " A CIA message "
-msgstr ""
-
-# internal string, no need to translate
-msgid " CIA notification class "
-msgstr ""
+"ganchos para integração com o serviço de notificação CIA.vc\n"
+"\n"
+"Isto deve ser executado como um gancho changegroup ou incoming.\n"
+"Para configurá-lo, defina as seguintes opções em seu hgrc:\n"
+"\n"
+"[cia]\n"
+"# seu nome de usuário CIA registrado\n"
+"user = foo\n"
+"# o nome do projeto CIA\n"
+"project = foo\n"
+"# o módulo (subprojeto) (opcional)\n"
+"#module = foo\n"
+"# Anexa um diffstat à mensagem de log (opcional)\n"
+"#diffstat = False\n"
+"# Modelo a ser usado em mensagens de log (opcional)\n"
+"#template = {desc}\\n{baseurl}/rev/{node}-- {diffstat}\n"
+"# Estilo a ser usado (opcional)\n"
+"#style = foo\n"
+"# A URL do serviço de notificação CIA (opcional)\n"
+"# Você pode usar URLs mailto: para enviar por e-mail, por exemplo\n"
+"# mailto:cia@cia.vc\n"
+"# Certifique-se de definir email.from se você fizer isso.\n"
+"#url = http://cia.vc/\n"
+"# imprime a mensagem ao invés de enviá-la (opcional)\n"
+"#test = False\n"
+"\n"
+"[hooks]\n"
+"# um destes:\n"
+"changegroup.cia = python:hgcia.hook\n"
+"#incoming.cia = python:hgcia.hook\n"
+"\n"
+"[web]\n"
+"# Se você desejar hyperlinks (opcional)\n"
+"baseurl = http://server/path/to/repo\n"
 
 #, python-format
 msgid "hgcia: sending update to %s\n"
 msgstr "hgcia: enviando atualização para %s\n"
 
-# internal string, no need to translate
-msgid " send CIA notification "
-msgstr ""
-
 msgid "email.from must be defined when sending by email"
 msgstr "email.from deve estar definido ao enviar por e-mail"
 
@@ -2421,29 +2332,17 @@
 msgstr "cia: nenhum projeto especificado"
 
 msgid ""
-"browsing the repository in a graphical way\n"
+"browse the repository in a graphical way\n"
 "\n"
 "The hgk extension allows browsing the history of a repository in a\n"
 "graphical way. It requires Tcl/Tk version 8.4 or later. (Tcl/Tk is not\n"
 "distributed with Mercurial.)\n"
 "\n"
 "hgk consists of two parts: a Tcl script that does the displaying and\n"
-"querying of information, and an extension to mercurial named hgk.py,\n"
+"querying of information, and an extension to Mercurial named hgk.py,\n"
 "which provides hooks for hgk to get information. hgk can be found in\n"
-"the contrib directory, and hgk.py can be found in the hgext directory.\n"
-"\n"
-"To load the hgext.py extension, add it to your .hgrc file (you have to\n"
-"use your global $HOME/.hgrc file, not one in a repository). You can\n"
-"specify an absolute path:\n"
-"\n"
-"  [extensions]\n"
-"  hgk=/usr/local/lib/hgk.py\n"
-"\n"
-"Mercurial can also scan the default python library path for a file\n"
-"named 'hgk.py' if you set hgk empty:\n"
-"\n"
-"  [extensions]\n"
-"  hgk=\n"
+"the contrib directory, and the extension is shipped in the hgext\n"
+"repository, and needs to be enabled.\n"
 "\n"
 "The hg view command will launch the hgk Tcl script. For this command\n"
 "to work, hgk must be in your search path. Alternately, you can specify\n"
@@ -2471,21 +2370,7 @@
 "consulta de informações, e uma extensão do Mercurial chamada hgk.py,\n"
 "que provê ganchos para o hgk obter informações. O hgk pode ser\n"
 "encontrado no diretório contrib, e o hgk.py pode ser encontrado no\n"
-"diretório hgext.\n"
-"\n"
-"Para carrefar a extensão hgext.py, adicione-a ao seu arquivo .hgrc\n"
-"(você precisa usar seu $HOME/.hgrc global, não um hgrc de um\n"
-"repositório). Você pode especificar um caminho absoluto:\n"
-"\n"
-"  [extensions]\n"
-"  hgk=/usr/local/lib/hgk.py\n"
-"\n"
-"O Mercurial também pode varrer o caminho padrão de bibliotecas do\n"
-"Python para localizar um arquivo chamado 'hgk.py' se você deixar\n"
-"hgk vazio:\n"
-"\n"
-"  [extensions]\n"
-"  hgk=\n"
+"diretório hgext (e precisa ser habilitado).\n"
 "\n"
 "O comando hg view irá lançar o script Tcl hgk. Para esse comando\n"
 "funcionar, hgk deve estar em seu caminho de busca. Alternativamente,\n"
@@ -2504,13 +2389,11 @@
 "Os menus de contexto das revisões vão agora mostrar entradas\n"
 "adicionais para disparar o vdiff em revisões selecionadas."
 
-# internal string, no need to translate
 msgid "diff trees from two commits"
-msgstr ""
-
-# internal string, no need to translate
+msgstr "calcula a diferença entre duas revisões"
+
 msgid "output common ancestor information"
-msgstr ""
+msgstr "exibe informação de ancestral comum"
 
 msgid "cat a specific revision"
 msgstr "copia para a saída uma revisão específica"
@@ -2521,9 +2404,8 @@
 msgid "aborting hg cat-file only understands commits\n"
 msgstr "abortando; hg cat-file entende apenas commits\n"
 
-# internal string, no need to translate
 msgid "parse given revisions"
-msgstr ""
+msgstr "decodifica as revisões dadas"
 
 msgid "print revisions"
 msgstr "imprime as revisões"
@@ -2564,8 +2446,8 @@
 msgid "hg debug-config"
 msgstr "hg debug-config"
 
-msgid "hg debug-merge-base node node"
-msgstr "hg debug-merge-base nó nó"
+msgid "hg debug-merge-base REV REV"
+msgstr "hg debug-merge-base REV REV"
 
 msgid "ignored"
 msgstr "ignorado"
@@ -2585,54 +2467,69 @@
 msgid "max-count"
 msgstr "número máximo"
 
-msgid "hg debug-rev-list [options] revs"
-msgstr "hg debug-rev-list [OPÇÕES] REVISÕES"
-
-msgid ""
-"syntax highlighting in hgweb, based on Pygments\n"
-"\n"
-"It depends on the pygments syntax highlighting library:\n"
+msgid "hg debug-rev-list [OPTION]... REV..."
+msgstr "hg debug-rev-list [OPÇÃO]... REV..."
+
+msgid ""
+"syntax highlighting for hgweb (requires Pygments)\n"
+"\n"
+"It depends on the Pygments syntax highlighting library:\n"
 "http://pygments.org/\n"
 "\n"
-"To enable the extension add this to hgrc:\n"
-"\n"
-"[extensions]\n"
-"hgext.highlight =\n"
-"\n"
 "There is a single configuration option:\n"
 "\n"
 "[web]\n"
 "pygments_style = <style>\n"
 "\n"
 "The default is 'colorful'.\n"
-"\n"
-"-- Adam Hupp <adam@hupp.org>\n"
-msgstr ""
-"realce de sintaxe no hgweb, baseada em Pygments\n"
-"\n"
-"Esta extensão depende da biblioteca pygments de realce de sintaxe:\n"
+msgstr ""
+"realce de sintaxe para o hgweb (requer Pygments)\n"
+"\n"
+"Esta extensão depende da biblioteca Pygments de realce de sintaxe:\n"
 "http://pygments.org/\n"
 "\n"
-"Para habilitar a extensão adicione ao hgrc:\n"
-"\n"
-"[extensions]\n"
-"hgext.highlight =\n"
-"\n"
 "Há uma única opção de configuração:\n"
 "\n"
 "[web]\n"
 "pygments_style = <estilo>\n"
 "\n"
 "O padrão é 'colorful'.\n"
-"\n"
-"-- Adam Hupp <adam@hupp.org>\n"
-
-msgid "inotify-based status acceleration for Linux systems\n"
-msgstr "aceleração de status baseada em inotify para sistemas Linux\n"
+
+msgid "accelerate status report using Linux's inotify service"
+msgstr "acelera informações de status usando o serviço inotify do Linux"
 
 msgid "start an inotify server for this repository"
 msgstr "inicia um servidor inotify para este repositório"
 
+msgid ""
+"debugging information for inotify extension\n"
+"\n"
+"    Prints the list of directories being watched by the inotify server.\n"
+"    "
+msgstr ""
+"informação de depuração para a extensão inotify\n"
+"\n"
+"    Imprime a lista de diretórios monitorados pelo servidor inotify.\n"
+"    "
+
+msgid "directories being watched:\n"
+msgstr "diretórios monitorados:\n"
+
+msgid "run server in background"
+msgstr "executa o servidor em segundo plano"
+
+msgid "used internally by daemon mode"
+msgstr "usado internamente pelo modo daemon"
+
+msgid "minutes to sit idle before exiting"
+msgstr "minutos a aguardar antes de sair"
+
+msgid "name of file to write process ID to"
+msgstr "nome do arquivo no qual escrever o ID do processo"
+
+msgid "hg inserve [OPTION]..."
+msgstr "hg inserve [OPÇÃO]..."
+
 msgid "(found dead inotify server socket; removing it)\n"
 msgstr "(encontrado socket de um servidor inotify morto; removendo-o)\n"
 
@@ -2652,27 +2549,19 @@
 
 #, python-format
 msgid "failed to contact inotify server: %s\n"
-msgstr "falha ao contactar servidor inotify: %s\n"
-
-msgid "run server in background"
-msgstr "executa o servidor em segundo plano"
-
-msgid "used internally by daemon mode"
-msgstr "usado internamente pelo modo daemon"
-
-msgid "minutes to sit idle before exiting"
-msgstr "minutos a aguardar antes de sair"
-
-msgid "name of file to write process ID to"
-msgstr "nome do arquivo no qual escrever o ID do processo"
-
-msgid "hg inserve [OPT]..."
-msgstr "hg inserve [OPÇÕES]..."
+msgstr "falha ao contatar servidor inotify: %s\n"
+
+msgid "received empty answer from inotify server"
+msgstr "resposta vazia recebida do servidor inotify"
 
 #, python-format
 msgid "(inotify: received response from incompatible server version %d)\n"
 msgstr "(inotify: recebida resposta de uma versão de servidor incompatível %d)\n"
 
+#, python-format
+msgid "(inotify: received '%s' response when expecting '%s')\n"
+msgstr "(inotify: recebida resposta '%s' quando '%s' era esperada)\n"
+
 msgid "this system does not seem to support inotify"
 msgstr "esse sistema parece não suportar inotify"
 
@@ -2681,10 +2570,12 @@
 msgstr "*** o limite atual por usuário do número de inotify watches é %s\n"
 
 msgid "*** this limit is too low to watch every directory in this repository\n"
-msgstr "*** este limite é muito baixo para acompanhar cada diretório neste repositório\n"
+msgstr ""
+"*** este limite é muito baixo para acompanhar cada diretório neste "
+"repositório\n"
 
 msgid "*** counting directories: "
-msgstr "*** contando diretórios:"
+msgstr "*** contando diretórios: "
 
 #, python-format
 msgid "found %d\n"
@@ -2696,11 +2587,13 @@
 
 #, python-format
 msgid "***  echo %d > %s\n"
-msgstr "***  ecoando  %d > %s\n"
+msgstr "***  echo %d > %s\n"
 
 #, python-format
 msgid "cannot watch %s until inotify watch limit is raised"
-msgstr "impossível observar %s até que o limíte de observação do inotify seja alcançado"
+msgstr ""
+"impossível observar %s até que o limite de observação do inotify seja "
+"alcançado"
 
 #, python-format
 msgid "inotify service not available: %s"
@@ -2766,30 +2659,55 @@
 msgstr "%s registrando novamente com %d bytes legíveis\n"
 
 #, python-format
-msgid "%s processing %d deferred events as %d\n"
-msgstr "%s processando %d eventos adiados como %d\n"
-
-#, python-format
 msgid "could not start server: %s"
 msgstr "não foi possível iniciar servidor: %s"
 
 #, python-format
+msgid "answering query for %r\n"
+msgstr "respondendo consulta para %r\n"
+
+#, python-format
 msgid "received query from incompatible client version %d\n"
 msgstr "recebida consulta de versão de cliente incompatível %d\n"
 
 #, python-format
-msgid "answering query for %r\n"
-msgstr "respondendo consulta para %r\n"
+msgid "unrecognized query type: %s\n"
+msgstr "tipo de consulta não reconhecido: %s\n"
 
 msgid "finished setup\n"
 msgstr "setup encerrado\n"
 
-msgid "polling: no timeout\n"
-msgstr "polling: sem timeout\n"
-
-#, python-format
-msgid "polling: %sms timeout\n"
-msgstr "polling: timeout de %sms \n"
+msgid ""
+"expand expressions into changelog and summaries\n"
+"\n"
+"This extension allows the use of a special syntax in summaries,\n"
+"which will be automatically expanded into links or any other\n"
+"arbitrary expression, much like InterWiki does.\n"
+"\n"
+"A few example patterns (link to bug tracking, etc.) that may\n"
+"be used in your hgrc:\n"
+"\n"
+"  [interhg]\n"
+"  issues = s!issue(\\d+)!<a href=\"http://bts/issue\\1\">issue\\1</a>!\n"
+"  bugzilla = s!((?:bug|b=|(?=#?\\d{4,}))(?:\\s*#?)(\\d+))!<a..=\\2\">\\1</a>!"
+"i\n"
+"  boldify = s!(^|\\s)#(\\d+)\\b! <b>#\\2</b>!\n"
+msgstr ""
+"expande expressões no changelog e sumários\n"
+"\n"
+"Esta extensão permite o uso de uma sintaxe especial em sumários,\n"
+"que será expandida automaticamente para links ou qualquer outra\n"
+"expressão arbitrária, de modo muito semelhante ao que o InterWiki\n"
+"faz.\n"
+"\n"
+"Alguns exemplos de padrões (link para bug tracking, etc.) que podem\n"
+"ser usados em seu hgrc:\n"
+"\n"
+"  [interhg]\n"
+"  issues = s!issue(\\d+)!<a href=\"http://bts/issue\\1\">issue\\1</a>!\n"
+"  bugzilla = s!((?:bug|b=|(?=#?\\d{4,}))(?:\\s*#?)(\\d+))!<a..=\\2\">\\1</a>!"
+"i\n"
+"  boldify = s!(^|\\s)#(\\d+)\\b! <b>#\\2</b>!\n"
 
 #, python-format
 msgid "interhg: invalid pattern for %s: %s\n"
@@ -2800,7 +2718,7 @@
 msgstr "interhg: expressão regular inválida para %s: %s\n"
 
 msgid ""
-"keyword expansion in local repositories\n"
+"expand keywords in tracked files\n"
 "\n"
 "This extension expands RCS/CVS-like or self-customized $Keywords$ in\n"
 "tracked text files selected by your configuration.\n"
@@ -2832,55 +2750,7 @@
 "kwdemo\" to control the results of your config changes.\n"
 "\n"
 "Before changing/disabling active keywords, run \"hg kwshrink\" to avoid\n"
-"the risk of inadvertedly storing expanded keywords in the change\n"
-"history.\n"
-"\n"
-"To force expansion after enabling it, or a configuration change, run\n"
-"\"hg kwexpand\".\n"
-"\n"
-"Also, when committing with the record extension or using mq's qrecord,\n"
-"be aware that keywords cannot be updated. Again, run \"hg kwexpand\" on\n"
-"the files in question to update keyword expansions after all changes\n"
-"have been checked in.\n"
-"\n"
-"Expansions spanning more than one line and incremental expansions,\n"
-"like CVS' $Log$, are not supported. A keyword template map\n"
-"\"Log = {desc}\" expands to the first line of the changeset description.\n"
-msgstr ""
-"expansão de palavras chave em repositórios locais\n"
-"\n"
-"Esta extensão expande palavras chave RCS/CVS ou customizáveis\n"
-"($Keywords$) em arquivos texto rastreados selecionados em sua\n"
-"configuração.\n"
-"\n"
-"Keywords are only expanded in local repositories and not stored in the\n"
-"change history. The mechanism can be regarded as a convenience for the\n"
-"current user or for archive distribution.\n"
-"\n"
-"Configuration is done in the [keyword] and [keywordmaps] sections of\n"
-"hgrc files.\n"
-"\n"
-"Example:\n"
-"\n"
-"    [keyword]\n"
-"    # expand keywords in every python file except those matching \"x*\"\n"
-"    **.py =\n"
-"    x*    = ignore\n"
-"\n"
-"Note: the more specific you are in your filename patterns\n"
-"      the less you lose speed in huge repositories.\n"
-"\n"
-"For [keywordmaps] template mapping and expansion demonstration and\n"
-"control run \"hg kwdemo\".\n"
-"\n"
-"An additional date template filter {date|utcdate} is provided.\n"
-"\n"
-"The default template mappings (view with \"hg kwdemo -d\") can be\n"
-"replaced with customized keywords and templates. Again, run \"hg\n"
-"kwdemo\" to control the results of your config changes.\n"
-"\n"
-"Before changing/disabling active keywords, run \"hg kwshrink\" to avoid\n"
-"the risk of inadvertedly storing expanded keywords in the change\n"
+"the risk of inadvertently storing expanded keywords in the change\n"
 "history.\n"
 "\n"
 "To force expansion after enabling it, or a configuration change, run\n"
@@ -2894,37 +2764,59 @@
 "Expansions spanning more than one line and incremental expansions,\n"
 "like CVS' $Log$, are not supported. A keyword template map\n"
 "\"Log = {desc}\" expands to the first line of the changeset description.\n"
-
-# internal string, no need to translate
-msgid "Returns hgdate in cvs-like UTC format."
-msgstr ""
-
-# internal string, no need to translate
-msgid ""
-"\n"
-"    Sets up keyword templates, corresponding keyword regex, and\n"
-"    provides keyword substitution functions.\n"
-"    "
-msgstr ""
-
-# internal string, no need to translate
-msgid "Replaces keywords in data with expanded template."
-msgstr ""
-
-# internal string, no need to translate
-msgid "Returns data with keywords expanded."
-msgstr ""
-
-# internal string, no need to translate
-msgid ""
-"Returns true if path matches [keyword] pattern\n"
-"        and is not a symbolic link.\n"
-"        Caveat: localrepository._link fails on Windows."
-msgstr ""
-
-# internal string, no need to translate
-msgid "Overwrites selected files expanding/shrinking keywords."
-msgstr ""
+msgstr ""
+"expande palavras chave em arquivos rastreados\n"
+"\n"
+"Esta extensão expande palavras chave RCS/CVS ou customizáveis\n"
+"($Keywords$) em arquivos texto rastreados selecionados em sua\n"
+"configuração.\n"
+"\n"
+"Palavras chave são expandidas apenas em repositórios locais e não\n"
+"são guardadas no histórico de mudanças. O mecanismo pode ser\n"
+"considerado como uma conveniência para o usuário local ou para\n"
+"distribuição em arquivos.\n"
+"\n"
+"A configuração é feita nas seções [keyword] e [keywordmaps] de\n"
+"arquivos hgrc.\n"
+"\n"
+"Exemplo:\n"
+"\n"
+"    [keyword]\n"
+"    # expande palavras chave em todo arquivo python exceto\n"
+"    # naqueles que casarem com \"x*\"\n"
+"    **.py =\n"
+"    x*    = ignore\n"
+"\n"
+"Nota: quanto mais específico você for em seus padrões de arquivo\n"
+"      menos velocidade será perdida em repositórios muito grandes.\n"
+"\n"
+"Para uma demonstração da expansão e do mapeamento de modelos em\n"
+"[keywordmaps] execute \"hg kwdemo\".\n"
+"\n"
+"É fornecido um filtro {date|utcdate} adicional para modelos.\n"
+"\n"
+"Os mapeamentos de modelo padrões (veja com \"hg kwdemo -d\") podem\n"
+"ser substituídos com palavras chave customizáveis e modelos.\n"
+"Novamente, execute \"hg kwdemo\" para controlar os resultados de\n"
+" suas mudanças na configuração.\n"
+"\n"
+"Antes de mudar ou desabilitar palavras chave ativas, execute \"hg\n"
+"kwshrink\" para evitar o risco de inadvertidamente guardar no\n"
+"histórico palavras chave expandidas.\n"
+"\n"
+"Para forçar a expansão após habilitação, ou após uma mudança de\n"
+"configuração, execute \"hg kwexpand\".\n"
+"\n"
+"Além disso, ao consolidar usando a extensão record ou o comando\n"
+"qrecord da extensão mq, tenha em mente que palavras chave não podem\n"
+"ser expandidas. Novamente, execute \"hg kwexpand\" nos arquivos em\n"
+"questão para atualizar expansões de palavras chave após todas as\n"
+"mudanças terem sido selecionadas.\n"
+"\n"
+"Expansões que alcancem mais de uma linha, e expansões incrementais\n"
+"como CVS' $Log$, não são suportadas. Um modelo de expansão\n"
+"\"Log = {desc}\" expande para a primeira linha da descrição do\n"
+"changeset.\n"
 
 #, python-format
 msgid "overwriting %s expanding keywords\n"
@@ -2934,65 +2826,17 @@
 msgid "overwriting %s shrinking keywords\n"
 msgstr "sobrescrevendo %s palavras chave em redução\n"
 
-# internal string, no need to translate
-msgid "Unconditionally removes all keyword substitutions from text."
-msgstr ""
-
-# internal string, no need to translate
-msgid "Returns text with all keyword substitutions removed."
-msgstr ""
-
-# internal string, no need to translate
-msgid "Returns lines with keyword substitutions removed."
-msgstr ""
-
-# internal string, no need to translate
-msgid ""
-"If in restricted mode returns data read from wdir with\n"
-"        keyword substitutions removed."
-msgstr ""
-
-# internal string, no need to translate
-msgid ""
-"\n"
-"    Subclass of filelog to hook into its read, add, cmp methods.\n"
-"    Keywords are \"stored\" unexpanded, and processed on reading.\n"
-"    "
-msgstr ""
-
-# internal string, no need to translate
-msgid "Expands keywords when reading filelog."
-msgstr ""
-
-# internal string, no need to translate
-msgid "Removes keyword substitutions when adding to filelog."
-msgstr ""
-
-# internal string, no need to translate
-msgid "Removes keyword substitutions for comparison."
-msgstr ""
-
-# internal string, no need to translate
-msgid ""
-"Bails out if [keyword] configuration is not active.\n"
-"    Returns status of working directory."
-msgstr ""
-
 msgid "[keyword] patterns cannot match"
 msgstr "padrões [keyword] não podem casar"
 
 msgid "no [keyword] patterns configured"
 msgstr "nenhum padrão [keyword] configurado"
 
-# internal string, no need to translate
-msgid "Selects files and passes them to kwtemplater.overwrite."
-msgstr ""
-
 msgid ""
 "print [keywordmaps] configuration and an expansion example\n"
 "\n"
 "    Show current, custom, or default keyword template maps and their\n"
-"    expansion.\n"
+"    expansions.\n"
 "\n"
 "    Extend current configuration by specifying maps as arguments and\n"
 "    optionally by reading from an additional hgrc file.\n"
@@ -3013,20 +2857,18 @@
 "    "
 
 #, python-format
-msgid ""
-"\n"
-"\t%s\n"
-msgstr ""
-"\n"
-"\t%s\n"
-
-#, python-format
 msgid "creating temporary repository at %s\n"
 msgstr "criando repositório temporário em %s\n"
 
 #, python-format
 msgid ""
 "\n"
+"\tconfig using %s keyword template maps\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"\n"
 "%s keywords written to %s:\n"
 msgstr ""
 "\n"
@@ -3038,13 +2880,19 @@
 #, python-format
 msgid ""
 "\n"
+"\t%s keywords expanded%s\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"\n"
 "removing temporary repository %s\n"
 msgstr ""
 "\n"
 "removendo repositório temporário %s\n"
 
 msgid ""
-"expand keywords in working directory\n"
+"expand keywords in the working directory\n"
 "\n"
 "    Run after (re)enabling keyword expansion.\n"
 "\n"
@@ -3053,30 +2901,59 @@
 msgstr ""
 "expande palavras chave no diretório de trabalho\n"
 "\n"
-"    Execute após (re) habilitar expansão de palavras chave.\n"
+"    Execute após (re)habilitar expansão de palavras chave.\n"
 "\n"
 "    kwexpand se recusa a rodar se forem passados arquivos com\n"
 "    mudanças locais.\n"
 "    "
 
 msgid ""
-"print files currently configured for keyword expansion\n"
-"\n"
-"    Crosscheck which files in working directory are potential targets\n"
-"    for keyword expansion. That is, files matched by [keyword] config\n"
-"    patterns but not symlinks.\n"
-"    "
-msgstr ""
-"imprime arquivos configurados para expansão de palavras chave\n"
-"\n"
-"    Verifica quais arquivos do diretório de trabalho são alvos em\n"
-"    potential para expansão de palavras chave. Ou seja, arquivos que\n"
-"    casarem com padrões configurados em [keyword], mas não links\n"
-"    simbólicos.\n"
-"    "
-
-msgid ""
-"revert expanded keywords in working directory\n"
+"show files configured for keyword expansion\n"
+"\n"
+"    List which files in the working directory are matched by the\n"
+"    [keyword] configuration patterns.\n"
+"\n"
+"    Useful to prevent inadvertent keyword expansion and to speed up\n"
+"    execution by including only files that are actual candidates\n"
+"    for expansion.\n"
+"\n"
+"    See \"hg help keyword\" on how to construct patterns both for\n"
+"    inclusion and exclusion of files.\n"
+"\n"
+"    Use -u/--untracked to list untracked files as well.\n"
+"\n"
+"    With -a/--all and -v/--verbose the codes used to show the status\n"
+"    of files are:\n"
+"    K = keyword expansion candidate\n"
+"    k = keyword expansion candidate (untracked)\n"
+"    I = ignored\n"
+"    i = ignored (untracked)\n"
+"    "
+msgstr ""
+"mostra arquivos configurados para expansão de palavras chave\n"
+"\n"
+"    Lista quais arquivos no diretório de trabalho correspondem a\n"
+"    padrões de configuração em [keyword].\n"
+"\n"
+"    Útil para prevenir expansão indesejada de palavras chave e para\n"
+"    acelerar a execução examinando apenas arquivos candidatos à\n"
+"    expansão.\n"
+"\n"
+"    Veja \"hg help keyword\" para saber como construir padrões tanto\n"
+"    para inclusão como para exclusão de arquivos.\n"
+"\n"
+"    Use -u/--untracked para listar também arquivos não rastreados.\n"
+"\n"
+"    Com -a/--all e -v/--verbose os códigos usados para mostrar o\n"
+"    status dos arquivos são:\n"
+"    K = candidato à expansão de palavras chave\n"
+"    k = candidato à expansão de palavras chave (não rastreado)\n"
+"    I = ignorado\n"
+"    i = ignorado (não rastreado)\n"
+"    "
+
+msgid ""
+"revert expanded keywords in the working directory\n"
 "\n"
 "    Run before changing/disabling active keywords or if you experience\n"
 "    problems with \"hg import\" or \"hg merge\".\n"
@@ -3093,42 +2970,6 @@
 "    mudanças locais.\n"
 "    "
 
-# internal string, no need to translate
-msgid ""
-"Collects [keyword] config in kwtools.\n"
-"    Monkeypatches dispatch._parse if needed."
-msgstr ""
-
-# internal string, no need to translate
-msgid "Monkeypatch dispatch._parse to obtain running hg command."
-msgstr ""
-
-# internal string, no need to translate
-msgid ""
-"Sets up repo as kwrepo for keyword substitution.\n"
-"    Overrides file method to return kwfilelog instead of filelog\n"
-"    if file matches user configuration.\n"
-"    Wraps commit to overwrite configured files with updated\n"
-"    keyword substitutions.\n"
-"    Monkeypatches patch and webcommands."
-msgstr ""
-
-# internal string, no need to translate
-msgid ""
-"Monkeypatch/wrap patch.patchfile.__init__ to avoid\n"
-"        rejects or conflicts due to expanded keywords in working dir."
-msgstr ""
-
-# internal string, no need to translate
-msgid ""
-"Monkeypatch patch.diff to avoid expansion except when\n"
-"        comparing against working dir."
-msgstr ""
-
-# internal string, no need to translate
-msgid "Wraps webcommands.x turning off keyword expansion."
-msgstr ""
-
 msgid "show default keyword template maps"
 msgstr "exibe os mapas de modelos de teclado padrão"
 
@@ -3157,7 +2998,7 @@
 msgstr "hg kwshrink [OPÇÃO]... [ARQUIVO]..."
 
 msgid ""
-"patch management and development\n"
+"manage a stack of patches\n"
 "\n"
 "This extension lets you work with a stack of patches in a Mercurial\n"
 "repository. It manages two stacks of patches - all known patches, and\n"
@@ -3180,7 +3021,7 @@
 "remove patch from applied stack           qpop\n"
 "refresh contents of top applied patch     qrefresh\n"
 msgstr ""
-"gerenciamento e desenvolvimento de patches\n"
+"gerencia uma pilha de patches\n"
 "\n"
 "Esta extensão lhe permite trabalhar com uma pilha de patches em um\n"
 "repositório do Mercurial. Ela gerencia duas pilhas de patches - todos\n"
@@ -3205,19 +3046,6 @@
 "remove um patch da pilha de aplicados              qpop\n"
 "renova o conteúdo do patch aplicado do topo        qrefresh\n"
 
-# internal string, no need to translate
-msgid ""
-"Update all references to a field in the patch header.\n"
-"        If none found, add it email style."
-msgstr ""
-
-# internal string, no need to translate
-msgid ""
-"Remove existing message, keeping the rest of the comments fields.\n"
-"        If comments contains 'subject: ', message will prepend\n"
-"        the field and a blank line."
-msgstr ""
-
 #, python-format
 msgid "%s appears more than once in %s"
 msgstr "%s aparece mais de uma vez em %s"
@@ -3296,12 +3124,6 @@
 msgid "patch %s is not applied\n"
 msgstr "o patch %s não está aplicado\n"
 
-# internal string, no need to translate
-msgid ""
-"Apply patchfile  to the working directory.\n"
-"        patchfile: file name of patch"
-msgstr ""
-
 msgid "patch failed, unable to continue (try -v)\n"
 msgstr "o patch falhou, impossível continuar (tente -v)\n"
 
@@ -3310,8 +3132,8 @@
 msgstr "aplicando %s\n"
 
 #, python-format
-msgid "Unable to read %s\n"
-msgstr "Incapaz de ler %s\n"
+msgid "unable to read %s\n"
+msgstr "impossível ler %s\n"
 
 #, python-format
 msgid "imported patch %s\n"
@@ -3343,6 +3165,10 @@
 msgid "cannot delete revision %d above applied patches"
 msgstr "não se pode apagar a revisão %d acima de patches aplicados"
 
+#, python-format
+msgid "patch %s finalized without changeset message\n"
+msgstr "patch %s finalizado sem a mensagem de changeset\n"
+
 msgid "qdelete requires at least one revision or patch name"
 msgstr "qdelete exige ao menos uma revisão ou nome de patch"
 
@@ -3370,13 +3196,6 @@
 msgid "\"%s\" cannot be used as the name of a patch"
 msgstr "\"%s\" não pode ser usado como nome de um patch"
 
-# internal string, no need to translate
-msgid ""
-"options:\n"
-"           msg: a string or a no-argument function returning a string\n"
-"        "
-msgstr ""
-
 #, python-format
 msgid "patch \"%s\" already exists"
 msgstr "o patch \"%s\" já existe"
@@ -3385,20 +3204,16 @@
 msgid "error unlinking %s\n"
 msgstr "erro removendo %s\n"
 
-# internal string, no need to translate
-msgid "returns (index, rev, patch)"
-msgstr ""
-
 #, python-format
 msgid "patch name \"%s\" is ambiguous:\n"
-msgstr "o nome de patch \"%s\" ié ambíguo:\n"
+msgstr "o nome de patch \"%s\" é ambíguo:\n"
 
 #, python-format
 msgid "patch %s not in series"
 msgstr "o patch %s não está na série"
 
-msgid "(working directory not at tip)\n"
-msgstr "(diretório de trabalho não está na tip)\n"
+msgid "(working directory not at a head)\n"
+msgstr "(diretório de trabalho não está em uma cabeça)\n"
 
 msgid "no patches in series\n"
 msgstr "nenhum patch na série\n"
@@ -3464,13 +3279,17 @@
 msgstr "remoções encontradas entre revisões do repositório"
 
 msgid "patch queue now empty\n"
-msgstr "a fila de patches está vazia agora\n"
+msgstr "a fila de patches agora está vazia\n"
 
 msgid "cannot refresh a revision with children"
 msgstr "não se pode renovar uma revisão com filhos"
 
-msgid "refresh interrupted while patch was popped! (revert --all, qpush to recover)\n"
-msgstr "renovação interrompida enquanto o patch foi desempilhado! (revert --all, qpush para recuperar)\n"
+msgid ""
+"refresh interrupted while patch was popped! (revert --all, qpush to "
+"recover)\n"
+msgstr ""
+"renovação interrompida enquanto o patch foi desempilhado! (revert --all, "
+"qpush para recuperar)\n"
 
 msgid "patch queue directory already exists"
 msgstr "o diretório de fila de patches já existe"
@@ -3510,19 +3329,11 @@
 msgstr "o estado já foi salvo\n"
 
 msgid "hg patches saved state"
-msgstr ""
+msgstr "estado de hg patches salvo"
 
 msgid "repo commit failed\n"
 msgstr "consolidação no repositório falhou\n"
 
-# internal string, no need to translate
-msgid ""
-"If all_patches is False, return the index of the next pushable patch\n"
-"        in the series, or the series length. If all_patches is True, return the\n"
-"        index of the first patch past the last applied one.\n"
-"        "
-msgstr ""
-
 #, python-format
 msgid "patch %s is already in the series file"
 msgstr "o patch %s já está no arquivo series"
@@ -3574,30 +3385,21 @@
 msgid ""
 "remove patches from queue\n"
 "\n"
-"    The patches must not be applied, unless they are arguments to the\n"
-"    -r/--rev parameter. At least one patch or revision is required.\n"
-"\n"
-"    With --rev, mq will stop managing the named revisions (converting\n"
-"    them to regular mercurial changesets). The qfinish command should\n"
-"    be used as an alternative for qdelete -r, as the latter option is\n"
-"    deprecated.\n"
-"\n"
-"    With -k/--keep, the patch files are preserved in the patch\n"
-"    directory."
+"    The patches must not be applied, and at least one patch is required. "
+"With\n"
+"    -k/--keep, the patch files are preserved in the patch directory.\n"
+"\n"
+"    To stop managing a patch and move it into permanent history,\n"
+"    use the qfinish command."
 msgstr ""
 "remove patches da fila\n"
 "\n"
-"    Os patches não devem estar aplicados, a não ser que sejam\n"
-"    argumentos do parâmetro -r/--rev. Ao menos um patch ou revisão\n"
-"    é necessário.\n"
-"\n"
-"    Com --rev, a mq irá deixar de gerenciar as revisões pedidas\n"
-"    (convertendo-as em changesets comuns do Mercurial). O comando\n"
-"    qfinish deve ser usado como alternativa a qdelete -r, pois este\n"
-"    última é obsoleto.\n"
-"\n"
-"    Com -k/--keep, os arquivos de patch são preservados no diretório\n"
-"    de patches. "
+"    Os patches não devem estar aplicados, e ao menos um patch deve\n"
+"    ser passado. Com -k/--keep, os arquivos de patch serão\n"
+"    preservados no diretório de patches.\n"
+"\n"
+"    Para parar de gerenciar um patch e movê-lo para o histórico\n"
+"    permanente, use o comando qfinish."
 
 msgid "print the patches already applied"
 msgstr "imprime os patches já aplicados"
@@ -3690,7 +3492,7 @@
 "    Source patch repository is looked for in <src>/.hg/patches by\n"
 "    default. Use -p <url> to change.\n"
 "\n"
-"    The patch directory must be a nested mercurial repository, as\n"
+"    The patch directory must be a nested Mercurial repository, as\n"
 "    would be created by qinit -c.\n"
 "    "
 msgstr ""
@@ -3789,7 +3591,7 @@
 "\n"
 "    -e/--edit, -m/--message ou -l/--logfile definem o cabeçalho\n"
 "    do patch, bem como a mensagem de consolidação. Se não forem\n"
-"    especificados, o cabeçãlho estará vazio e a mensagem de\n"
+"    especificados, o cabeçalho estará vazio e a mensagem de\n"
 "    consolidação será '[mq]: PATCH'.\n"
 "\n"
 "    Use a opção -g/--git para manter o patch no formato estendido git\n"
@@ -3848,7 +3650,7 @@
 "    qrefresh.\n"
 "    "
 msgstr ""
-"diff do patch atual e modificações subsequentes\n"
+"diff do patch atual e modificações subseqüentes\n"
 "\n"
 "    Mostra um diff que inclui o patch atual bem como quaisquer\n"
 "    mudanças que tiverem sido feitas no diretório de trabalho desde\n"
@@ -3884,7 +3686,7 @@
 "    removidos em seguida.\n"
 "\n"
 "    O cabeçalho de cada patch incorporado será concatenado com o\n"
-"    cabçalho do patch atual, separado por uma linha de '* * *'."
+"    cabeçalho do patch atual, separado por uma linha de '* * *'."
 
 msgid "qfold requires at least one patch name"
 msgstr "qfold requer ao menos um nome de patch"
@@ -4164,13 +3966,13 @@
 "    aplicados) tirando-as do controle da mq e convertendo-as em\n"
 "    histórico comum do repositório.\n"
 "\n"
-"    Aceita uma sequência de revisões ou a opção -a/--applied. Se\n"
+"    Aceita uma seqüência de revisões ou a opção -a/--applied. Se\n"
 "    --applied for especificado, todas as revisões mq aplicadas serão\n"
 "    removidas do controle da mq. De outro modo, as revisões pedidas\n"
 "    devem estar na base da pilha de patches aplicados.\n"
 "\n"
 "    Isto pode ser especialmente útil se suas mudanças foram aplicadas\n"
-"    a um repositório ustream, ou se você pretender enviar essas\n"
+"    a um repositório upstream, ou se você pretender enviar essas\n"
 "    mudanças para upstream.\n"
 "    "
 
@@ -4181,7 +3983,7 @@
 msgstr "não se pode consolidar sobre um patch mq aplicado"
 
 msgid "source has mq patches applied"
-msgstr "a fonte tem patches mq aplicados"
+msgstr "a origem tem patches mq aplicados"
 
 #, python-format
 msgid "mq status file refers to unknown node %s\n"
@@ -4219,19 +4021,19 @@
 msgstr "hg qcommit [OPÇÃO]... [ARQUIVO]..."
 
 msgid "hg qdiff [OPTION]... [FILE]..."
-msgstr "hg qdiff [OPCÃO]... [ARQUIVO]..."
+msgstr "hg qdiff [OPÇÃO]... [ARQUIVO]..."
 
 msgid "keep patch file"
 msgstr "mantém o arquivo de patch"
 
-msgid "stop managing a revision"
-msgstr "deixa de gerenciar uma revisão"
+msgid "stop managing a revision (DEPRECATED)"
+msgstr "deixa de gerenciar uma revisão (OBSOLETO)"
 
 msgid "hg qdelete [-k] [-r REV]... [PATCH]..."
 msgstr "hg qdelete [-k] [-r REV]... [PATCH]..."
 
 msgid "edit patch header"
-msgstr "edita o header do patch"
+msgstr "edita o cabeçalho do patch"
 
 msgid "keep folded patch files"
 msgstr "mantém os arquivos dos patches incorporados"
@@ -4260,7 +4062,7 @@
 msgid "import file in patch directory"
 msgstr "importa um arquivo do diretório de patches"
 
-msgid "patch file name"
+msgid "name of patch file"
 msgstr "nome do arquivo de patch"
 
 msgid "overwrite existing files"
@@ -4272,8 +4074,11 @@
 msgid "use git extended diff format"
 msgstr "usa o formato estendido de diff do git"
 
-msgid "hg qimport [-e] [-n NAME] [-f] [-g] [-r REV]... FILE..."
-msgstr "hg qimport [-e] [-n NOME] [-f] [-g] [-r REV]... ARQUIVO..."
+msgid "qpush after importing"
+msgstr "executa qpush após importar"
+
+msgid "hg qimport [-e] [-n NAME] [-f] [-g] [-P] [-r REV]... FILE..."
+msgstr "hg qimport [-e] [-n NOME] [-f] [-g] [-P] [-r REV]... ARQUIVO..."
 
 msgid "create queue repository"
 msgstr "cria o repositório da fila"
@@ -4282,7 +4087,7 @@
 msgstr "hg qinit [-c]"
 
 msgid "import uncommitted changes into patch"
-msgstr "umporta para o patch mudanças não consolidadas"
+msgstr "importa para o patch mudanças não consolidadas"
 
 msgid "add \"From: <current user>\" to patch"
 msgstr "adiciona \"From: <usuário atual>\" ao patch"
@@ -4306,7 +4111,7 @@
 msgstr "hg qprev [-s]"
 
 msgid "pop all patches"
-msgstr "desempliha todos os patches"
+msgstr "desempilha todos os patches"
 
 msgid "queue name to pop"
 msgstr "nome da fila para desempilhar"
@@ -4422,11 +4227,11 @@
 msgid "finish all applied changesets"
 msgstr "encerra todos os changesets aplicados"
 
-msgid "hg qfinish [-a] [REV...]"
-msgstr "hg qfinish [-a] [REV...]"
-
-msgid ""
-"hook extension to email notifications on commits/pushes\n"
+msgid "hg qfinish [-a] [REV]..."
+msgstr "hg qfinish [-a] [REV]..."
+
+msgid ""
+"hooks for sending email notifications at commit/push time\n"
 "\n"
 "Subscriptions can be managed through hgrc. Default mode is to print\n"
 "messages to stdout, for testing and configuring.\n"
@@ -4461,7 +4266,8 @@
 "   maxdiff = 300          # max lines of diffs to include (0=none, -1=all)\n"
 "   maxsubject = 67        # truncate subject line longer than this\n"
 "   diffstat = True        # add a diffstat before the diff content\n"
-"   sources = serve        # notify if source of incoming changes in this list\n"
+"   sources = serve        # notify if source of incoming changes in this "
+"list\n"
 "                          # (serve == ssh or http, push, pull, bundle)\n"
 "   [email]\n"
 "   from = user@host.com   # email address to send as if none given\n"
@@ -4473,11 +4279,13 @@
 " for you.\n"
 "\n"
 "   [usersubs]\n"
-"   # key is subscriber email, value is \",\"-separated list of glob patterns\n"
+"   # key is subscriber email, value is \",\"-separated list of glob "
+"patterns\n"
 "   user@host = pattern\n"
 "\n"
 "   [reposubs]\n"
-"   # key is glob pattern, value is \",\"-separated list of subscriber emails\n"
+"   # key is glob pattern, value is \",\"-separated list of subscriber "
+"emails\n"
 "   pattern = user@host\n"
 "\n"
 " glob patterns are matched against path to repository root.\n"
@@ -4485,7 +4293,7 @@
 " if you like, you can put notify config file in repository that users\n"
 " can push changes to, they can manage their own subscriptions."
 msgstr ""
-"gancho para o envio de e-mails de notificação em commit/push\n"
+"gancho para enviar notificações por e-mail em commit/push\n"
 "\n"
 "Assinantes podem ser gerenciados através de hgrc. O modo padrão é\n"
 "imprimir as mensagens para stdout, para testes e configuração.\n"
@@ -4505,7 +4313,7 @@
 "   [notify]\n"
 "   # ítens de configuração vão aqui\n"
 "\n"
-" ítens de configuração:\n"
+" itens de configuração:\n"
 "\n"
 " NECESSÁRIOS:\n"
 "   config = /caminho/arquivo # arquivo contendo assinantes\n"
@@ -4551,33 +4359,6 @@
 " notify em um repositório com acesso de envio para os usuários,\n"
 " de modo que eles possam gerenciar suas próprias assinaturas."
 
-# internal string, no need to translate
-msgid "email notification class."
-msgstr ""
-
-# internal string, no need to translate
-msgid "strip leading slashes from local path, turn into web-safe path."
-msgstr ""
-
-# internal string, no need to translate
-msgid "try to clean up email addresses."
-msgstr ""
-
-# internal string, no need to translate
-msgid "return list of email addresses of subscribers to this repo."
-msgstr ""
-
-# internal string, no need to translate
-msgid "format one changeset."
-msgstr ""
-
-# internal string, no need to translate
-msgid "true if incoming changes from this source should be skipped."
-msgstr ""
-
-msgid "send message."
-msgstr "envia mensagem"
-
 #, python-format
 msgid "%s: %d new changesets"
 msgstr "%s: %d novos changesets"
@@ -4606,18 +4387,6 @@
 "diffs (%d linhas):\n"
 "\n"
 
-msgid ""
-"send email notifications to interested subscribers.\n"
-"\n"
-"    if used as changegroup hook, send one email for all changesets in\n"
-"    changegroup. else send one email per changeset."
-msgstr ""
-"envia notificações por e-mail a assinantes interssados.\n"
-"\n"
-"    Se usada como hook de changegroup, envia um e-mail para todos os\n"
-"    changesets no changegroup. De outro modo, envia um e-mail por\n"
-"    changeset."
-
 #, python-format
 msgid "notify: no subscribers to repository %s\n"
 msgstr "notify: nenhum assinante do repositório %s\n"
@@ -4627,7 +4396,7 @@
 msgstr "notify: mudanças têm origem \"%s\" - omitindo\n"
 
 msgid ""
-"browse command output with external pager\n"
+"browse command output with an external pager\n"
 "\n"
 "To set the pager that should be used, set the application variable:\n"
 "\n"
@@ -4695,14 +4464,14 @@
 "você precisa especificá-los no .hgrc global.\n"
 
 msgid ""
-"use suffixes to refer to ancestor revisions\n"
+"interpret suffixes to refer to ancestor revisions\n"
 "\n"
 "This extension allows you to use git-style suffixes to refer to the\n"
 "ancestors of a specific revision.\n"
 "\n"
 "For example, if you can refer to a revision as \"foo\", then:\n"
 "\n"
-"- foo^N = Nth parent of foo:\n"
+"- foo^N = Nth parent of foo\n"
 "  foo^0 = foo\n"
 "  foo^1 = first parent of foo\n"
 "  foo^2 = second parent of foo\n"
@@ -4713,7 +4482,7 @@
 "  foo~1 = foo^1 = foo^ = first parent of foo\n"
 "  foo~2 = foo^1^1 = foo^^ = first parent of first parent of foo\n"
 msgstr ""
-"use sufixos para se referir a revisões ancestrais\n"
+"interpreta sufixos para referência a revisões ancestrais\n"
 "\n"
 "Esta extensão lhe permite usar sufixos estilo git para se referir\n"
 "aos ancestrais de uma revisão específica.\n"
@@ -4721,7 +4490,7 @@
 "Por exemplo, se você puder se referir a uma revisão com \"foo\",\n"
 "então:\n"
 "\n"
-"- foo^N = N-ésimo pai de foo:\n"
+"- foo^N = N-ésimo pai de foo\n"
 "  foo^0 = foo\n"
 "  foo^1 = primeiro pai de foo\n"
 "  foo^2 = segundo pai de foo\n"
@@ -4733,7 +4502,7 @@
 "  foo~2 = foo^1^1 = foo^^ = primeiro pai do primeiro pai de foo\n"
 
 msgid ""
-"sending Mercurial changesets as a series of patch emails\n"
+"command to send changesets as (a series of) patch emails\n"
 "\n"
 "The series is started off with a \"[PATCH 0 of N]\" introduction, which\n"
 "describes the series as a whole.\n"
@@ -4742,24 +4511,19 @@
 "first line of the changeset description as the subject text. The\n"
 "message contains two or three body parts:\n"
 "\n"
-"  The remainder of the changeset description.\n"
+"  The changeset description.\n"
 "\n"
 "  [Optional] The result of running diffstat on the patch.\n"
 "\n"
 "  The patch itself, as generated by \"hg export\".\n"
 "\n"
-"Each message refers to all of its predecessors using the In-Reply-To\n"
+"Each message refers to the first in the series using the In-Reply-To\n"
 "and References headers, so they will show up as a sequence in threaded\n"
 "mail and news readers, and in mail archives.\n"
 "\n"
-"For each changeset, you will be prompted with a diffstat summary and\n"
-"the changeset summary, so you can be sure you are sending the right\n"
-"changes.\n"
-"\n"
-"To enable this extension:\n"
-"\n"
-"  [extensions]\n"
-"  hgext.patchbomb =\n"
+"With the -d/--diffstat option, you will be prompted for each changeset\n"
+"with a diffstat summary and the changeset summary, so you can be sure\n"
+"you are sending the right changes.\n"
 "\n"
 "To configure other defaults, add a section like this to your hgrc\n"
 "file:\n"
@@ -4775,11 +4539,11 @@
 "\n"
 "To avoid sending patches prematurely, it is a good idea to first run\n"
 "the \"email\" command with the \"-n\" option (test only). You will be\n"
-"prompted for an email recipient address, a subject an an introductory\n"
+"prompted for an email recipient address, a subject and an introductory\n"
 "message describing the patches of your patchbomb. Then when all is\n"
-"done, patchbomb messages are displayed. If PAGER environment variable\n"
-"is set, your pager will be fired up once for each patchbomb message,\n"
-"so you can verify everything is alright.\n"
+"done, patchbomb messages are displayed. If the PAGER environment\n"
+"variable is set, your pager will be fired up once for each patchbomb\n"
+"message, so you can verify everything is alright.\n"
 "\n"
 "The -m/--mbox option is also very useful. Instead of previewing each\n"
 "patchbomb message in a pager or sending the messages directly, it will\n"
@@ -4798,12 +4562,12 @@
 "That should be all. Now your patchbomb is on its way out.\n"
 "\n"
 "You can also either configure the method option in the email section\n"
-"to be a sendmail compatable mailer or fill out the [smtp] section so\n"
+"to be a sendmail compatible mailer or fill out the [smtp] section so\n"
 "that the patchbomb extension can automatically send patchbombs\n"
 "directly from the commandline. See the [email] and [smtp] sections in\n"
 "hgrc(5) for details."
 msgstr ""
-"envio de changesets em uma série de e-mails de patch\n"
+"comando para enviar changesets como uma série de e-mails de patch\n"
 "\n"
 "A série é iniciada por uma introdução \"[PATCH 0 of N]\", que\n"
 "descreve a série como um todo.\n"
@@ -4813,25 +4577,20 @@
 "changeset como texto do assunto. A mensagem contém dois ou três\n"
 "corpos:\n"
 "\n"
-"  O restante da descrição do changeset.\n"
+"  A descrição do changeset.\n"
 "\n"
 "  [Opcional] O resultado da execução de diffstat no patch.\n"
 "\n"
 "  O patch em si, como gerado por \"hg export\".\n"
 "\n"
-"Cada mensagem faz referência a todos os seus predecessores usando os\n"
-"cabeçalhos In-Reply-To e References, de modo que aparecerão como uma\n"
-"sequência em e-mails organizados por conversação e leitores de\n"
+"Cada mensagem faz referência à primeira da série usando os cabeçalhos\n"
+"In-Reply-To e References, de modo que as mensagens aparecerão como\n"
+"uma seqüência em e-mails organizados por conversação e leitores de\n"
 "notícias, além de mail archives.\n"
 "\n"
-"Para cada changeset, você será consultado interativamente com um\n"
-"resumo do diffstat e o resumo do changeset, para que você tenha\n"
-"certeza de enviar as mudanças corretas.\n"
-"\n"
-"Para habilitar essa extensão:\n"
-"\n"
-"  [extensions]\n"
-"  hgext.patchbomb =\n"
+"Com a opção -d/--diffstat, para cada changeset você será consultado\n"
+"interativamente com um resumo do diffstat e o resumo do changeset,\n"
+"para que você tenha certeza de enviar as mudanças corretas.\n"
 "\n"
 "Para configurar outros padrões, adicione uma seção como esta em seu\n"
 "arquivo hgrc:\n"
@@ -4881,7 +4640,7 @@
 msgstr "Por favor, entre um valor válido.\n"
 
 msgid "does the diffstat above look okay? "
-msgstr "o diffstat abaixo parece bom?"
+msgstr "o diffstat abaixo parece bom? "
 
 msgid "diffstat rejected"
 msgstr "diffstat rejeitado"
@@ -4895,10 +4654,16 @@
 "\n"
 "    Each patch email has a Subject line of \"[PATCH M of N] ...\", using\n"
 "    the first line of the changeset description as the subject text.\n"
-"    The message contains two or three body parts. First, the rest of\n"
-"    the changeset description. Next, (optionally) if the diffstat\n"
-"    program is installed, the result of running diffstat on the patch.\n"
-"    Finally, the patch itself, as generated by \"hg export\".\n"
+"    The message contains two or three parts. First, the changeset\n"
+"    description. Next, (optionally) if the diffstat program is\n"
+"    installed and -d/--diffstat is used, the result of running\n"
+"    diffstat on the patch. Finally, the patch itself, as generated by\n"
+"    \"hg export\".\n"
+"\n"
+"    By default the patch is included as text in the email body for\n"
+"    easy reviewing. Using the -a/--attach option will instead create\n"
+"    an attachment for the patch. With -i/--inline an inline attachment\n"
+"    will be created.\n"
 "\n"
 "    With -o/--outgoing, emails will be generated for patches not found\n"
 "    in the destination repository (or only those which are ancestors\n"
@@ -4922,7 +4687,8 @@
 "\n"
 "    hg email -b               # send bundle of all patches not in default\n"
 "    hg email -b DEST          # send bundle of all patches not in DEST\n"
-"    hg email -b -r 3000       # bundle of all ancestors of 3000 not in default\n"
+"    hg email -b -r 3000       # bundle of all ancestors of 3000 not in "
+"default\n"
 "    hg email -b -r 3000 DEST  # bundle of all ancestors of 3000 not in DEST\n"
 "\n"
 "    Before using this command, you will need to enable email in your\n"
@@ -4937,11 +4703,17 @@
 "\n"
 "    Cada e-mail de patch tem uma linha Assunto com a forma\n"
 "    \"[PATCH M of N] ...\", usando a primeira linha da descrição do\n"
-"    changeset como texto do assunto. A mensagem contém dois ou três\n"
-"    corpos. Em primeiro lugar, o restante da descrição do changeset.\n"
-"    Em seguida (opcionalmente), se o programa diffstat estiver\n"
-"    instalado, o resultado da execução de diffstat no patch.\n"
-"    Finalmente, o patch em si, como gerado por \"hg export\".\n"
+"    changeset como texto do assunto. A mensagem contém duas ou três\n"
+"    partes. Em primeiro lugar, a descrição do changeset. Em seguida\n"
+"    (opcionalmente), se o programa diffstat estiver instalado e a\n"
+"    opção -d/--diffstat for usada, o resultado da execução de\n"
+"    diffstat no patch. Por fim, o patch em si, como gerado por\n"
+"    \"hg export\".\n"
+"\n"
+"    Por padrão o patch é incluído como texto no corpo do e-mail para\n"
+"    facilitar a revisão. A opção -a/--attach pode ser usada para ao\n"
+"    invés disso criar um anexo para o patch. Com a opção -i/--inline\n"
+"    um anexo inline será criado.\n"
 "\n"
 "    Com -o/--outgoing, e-mails serão gerados para patches não\n"
 "    encontrados no repositório de destino (ou apenas aqueles que\n"
@@ -4980,9 +4752,6 @@
 "    seu hgrc. Veja a seção [email] em hgrc(5) para mais detalhes.\n"
 "    "
 
-msgid "Return the revisions present locally but not in dest"
-msgstr "Devolve as revisões presentes localmente mas não em dest"
-
 msgid "specify at least one changeset with -r or -o"
 msgstr "especifique ao menos um changeset com -r ou -o"
 
@@ -5016,19 +4785,19 @@
 msgstr "Sumário final:\n"
 
 msgid "Displaying "
-msgstr "Exibindo"
+msgstr "Exibindo "
 
 msgid "Writing "
-msgstr "Escrevendo"
+msgstr "Escrevendo "
 
 msgid "Sending "
-msgstr "Enviando"
+msgstr "Enviando "
 
 msgid "send patches as attachments"
-msgstr "envia patchs (remendos) como anexos"
+msgstr "envia patches como anexos"
 
 msgid "send patches as inline attachments"
-msgstr "envia patches (remendos) como anexos embutidos"
+msgstr "envia patches como anexos embutidos"
 
 msgid "email addresses of blind carbon copy recipients"
 msgstr "endereços de e-mail de destinatários para cópia oculta"
@@ -5040,7 +4809,7 @@
 msgstr "adiciona a saída do diffstat a mensagens"
 
 msgid "use the given date as the sending date"
-msgstr "us a data dada como data de envio"
+msgstr "usa a data dada como data de envio"
 
 msgid "use the given file as the series description"
 msgstr "usa o arquivo dado como descrição da série"
@@ -5057,8 +4826,8 @@
 msgid "subject of first message (intro or single patch)"
 msgstr "assunto da primeira mensagem (introdução ou único patch)"
 
-msgid "\"message identifier to reply to\""
-msgstr "\"identificador de mensagem para a qual responder\""
+msgid "message identifier to reply to"
+msgstr "identificador de mensagem para a qual responder"
 
 msgid "email addresses of recipients"
 msgstr "endereços de e-mail dos destinatários"
@@ -5072,7 +4841,7 @@
 msgid "send changes not in target as a binary bundle"
 msgstr "envia mudanças que não estão no alvo como um bundle binário"
 
-msgid "file name of the bundle attachment"
+msgid "name of the bundle attachment file"
 msgstr "nome do arquivo bundle anexado"
 
 msgid "a revision to send"
@@ -5090,6 +4859,9 @@
 msgid "hg email [OPTION]... [DEST]..."
 msgstr "hg email [OPÇÃO]... [DEST]..."
 
+msgid "command to delete untracked files from the working directory"
+msgstr "comando para apagar do diretório de trabalho arquivos não rastreados"
+
 msgid ""
 "removes files not tracked by Mercurial\n"
 "\n"
@@ -5099,7 +4871,7 @@
 "    This means that purge will delete:\n"
 "     - Unknown files: files marked with \"?\" by \"hg status\"\n"
 "     - Empty directories: in fact Mercurial ignores directories unless\n"
-"       they contain files under source control managment\n"
+"       they contain files under source control management\n"
 "    But it will leave untouched:\n"
 "     - Modified and unmodified tracked files\n"
 "     - Ignored files (unless --all is specified)\n"
@@ -5161,7 +4933,7 @@
 msgid "purge ignored files too"
 msgstr "remove também arquivos ignorados"
 
-msgid "print the file names instead of deleting them"
+msgid "print filenames instead of deleting them"
 msgstr "imprime os nomes de arquivo ao invés de removê-los"
 
 msgid "end filenames with NUL, for use with xargs (implies -p/--print)"
@@ -5171,24 +4943,21 @@
 msgstr "hg purge [OPÇÃO]... [DIR]..."
 
 msgid ""
-"move sets of revisions to a different ancestor\n"
+"command to move sets of revisions to a different ancestor\n"
 "\n"
 "This extension lets you rebase changesets in an existing Mercurial\n"
 "repository.\n"
 "\n"
 "For more information:\n"
-"http://www.selenic.com/mercurial/wiki/index.cgi/RebaseProject\n"
-msgstr ""
-"move conjuntos de revisões para um ancestral diferente\n"
-"\n"
-"Esta estensão lhe permite rebasear changesets em um repositório\n"
+"http://mercurial.selenic.com/wiki/RebaseProject\n"
+msgstr ""
+"comando para mover conjuntos de revisões para um ancestral diferente\n"
+"\n"
+"Esta extensão lhe permite rebasear changesets em um repositório\n"
 "existente do Mercurial.\n"
 "\n"
 "Para mais informações:\n"
-"http://www.selenic.com/mercurial/wiki/index.cgi/RebaseProject\n"
-
-msgid "return the correct ancestor"
-msgstr "devolve o ancestral correto"
+"http://mercurial.selenic.com/wiki/RebaseProject\n"
 
 msgid "first revision, do not change ancestor\n"
 msgstr "primeira revisão, não mude o ancestral\n"
@@ -5246,19 +5015,9 @@
 msgid "%d revisions have been skipped\n"
 msgstr "%d revisões foram omitidas\n"
 
-# internal string, no need to translate
-msgid ""
-"Skip commit if collapsing has been required and rev is not the last\n"
-"    revision, commit otherwise\n"
-"    "
-msgstr ""
-
 msgid " set parents\n"
 msgstr " define pais\n"
 
-msgid "Rebase a single revision"
-msgstr "Rebaseia uma única revisão"
-
 #, python-format
 msgid "rebasing %d:%s\n"
 msgstr "rebaseando %d:%s\n"
@@ -5279,7 +5038,9 @@
 msgstr " mesclando com %d:%s\n"
 
 msgid "fix unresolved conflicts with hg resolve then run hg rebase --continue"
-msgstr "corrija conflitos não resolvidos com hg resolve e então execute hg rebase --continue"
+msgstr ""
+"corrija conflitos não resolvidos com hg resolve e então execute hg rebase --"
+"continue"
 
 msgid "resuming interrupted rebase\n"
 msgstr "retomando rebaseamento interrompido\n"
@@ -5292,20 +5053,10 @@
 msgid "next revision set to %s\n"
 msgstr "próxima revisão definida como %s\n"
 
-msgid "Return the new parent relationship of the revision that will be rebased"
-msgstr "Devolve o novo parentesco da revisão que irá ser rebaseada"
-
 #, python-format
 msgid "cannot use revision %d as base, result would have 3 parents"
 msgstr "não se pode usar a revisão %d como base, o resultado teria 3 pais"
 
-# internal string, no need to translate
-msgid "Return true if the given patch is in git format"
-msgstr ""
-
-msgid "Update rebased mq patches - finalize and then import them"
-msgstr "Atualiza patches mq rebaseados - finaliza e então os importa"
-
 #, python-format
 msgid "revision %d is an mq patch (%s), finalize it.\n"
 msgstr "revisão %d é um patch mq (%s), finalize-o.\n"
@@ -5314,36 +5065,21 @@
 msgid "import mq patch %d (%s)\n"
 msgstr "importa patch mq %d (%s)\n"
 
-msgid "Store the current status to allow recovery"
-msgstr "Armazena o estado atual para permitir recuperação"
-
 msgid "rebase status stored\n"
 msgstr "estado de rebaseamento armazenado\n"
 
-msgid "Remove the status files"
-msgstr "Remove os arquivos de estado"
-
-msgid "Restore a previously stored status"
-msgstr "Restaura um estado armazenado anteriormente"
-
 msgid "rebase status resumed\n"
 msgstr "estado de rebaseamento retomado\n"
 
 msgid "no rebase in progress"
 msgstr "nenhum rebaseamento em progresso"
 
-msgid "Restore the repository to its original state"
-msgstr "Restaura o repositório a seu estado original"
-
 msgid "warning: new changesets detected on target branch, not stripping\n"
 msgstr "aviso: novos changesets detectados no ramo alvo, strip não realizado\n"
 
 msgid "rebase aborted\n"
 msgstr "rebaseamento abortado\n"
 
-msgid "Define which revisions are going to be rebased and where"
-msgstr "Define quais revisões serão rebaseadas e aonde"
-
 msgid "cannot rebase onto an applied mq patch"
 msgstr "não se pode rebasear para um patch mq aplicado"
 
@@ -5366,16 +5102,9 @@
 msgid "unable to collapse, there is more than one external parent"
 msgstr "incapaz de colapsar, há mais de um pai externo"
 
-msgid "Call rebase after pull if the latter has been invoked with --rebase"
-msgstr "Chama rebase após o pull se o último for chamado com --rebase"
-
 msgid "--update and --rebase are not compatible, ignoring the update flag\n"
 msgstr "--update e --rebase não são compatíveis, opção --update ignorada\n"
 
-# internal string, no need to translate
-msgid "Replace pull with a decorator to provide --rebase option"
-msgstr ""
-
 msgid "rebase working directory to branch head"
 msgstr "rebaseia o diretório de trabalho para a cabeça do ramo"
 
@@ -5403,35 +5132,15 @@
 msgid "abort an interrupted rebase"
 msgstr "aborta um rebaseamento interrompido"
 
-msgid "hg rebase [-s REV | -b REV] [-d REV] [--collapse] [--keep] [--keepbranches] | [-c] | [-a]"
-msgstr "hg rebase [-s REV | -b REV] [-d REV] [--collapse] [--keep] [--keepbranches] | [-c] | [-a]"
-
-# internal string, no need to translate
-msgid "interactive change selection during commit or qrefresh"
-msgstr ""
-
-# internal string, no need to translate
-msgid ""
-"like patch.iterhunks, but yield different events\n"
-"\n"
-"    - ('file',    [header_lines + fromfile + tofile])\n"
-"    - ('context', [context_lines])\n"
-"    - ('hunk',    [hunk_lines])\n"
-"    - ('range',   (-start,len, +start,len, diffp))\n"
-"    "
-msgstr ""
-
-# internal string, no need to translate
-msgid "scan lr while predicate holds"
-msgstr ""
-
-# internal string, no need to translate
-msgid ""
-"patch header\n"
-"\n"
-"    XXX shoudn't we move this to mercurial/patch.py ?\n"
-"    "
-msgstr ""
+msgid ""
+"hg rebase [-s REV | -b REV] [-d REV] [--collapse] [--keep] [--keepbranches] "
+"| [-c] | [-a]"
+msgstr ""
+"hg rebase [-s REV | -b REV] [-d REV] [--collapse] [--keep] [--keepbranches] "
+"| [-c] | [-a]"
+
+msgid "commands to interactively select changes for commit/qrefresh"
+msgstr "comandos para selecionar interativamente mudanças em um commit ou qrefresh"
 
 msgid "this modifies a binary file (all or nothing)\n"
 msgstr "isto modifica um arquivo binário (tudo ou nada)\n"
@@ -5443,52 +5152,33 @@
 msgid "%d hunks, %d lines changed\n"
 msgstr "%d trechos, %d linhas modificadas\n"
 
-msgid "hunk -> (n+,n-)"
-msgstr "hunk -> (n+,n-)"
-
-# internal string, no need to translate
-msgid ""
-"patch hunk\n"
-"\n"
-"    XXX shouldn't we merge this with patch.hunk ?\n"
-"    "
-msgstr ""
-
-# internal string, no need to translate
-msgid "patch -> [] of hunks "
-msgstr ""
-
-# internal string, no need to translate
-msgid "patch parsing state machine"
-msgstr ""
-
-# internal string, no need to translate
-msgid "Interactively filter patch chunks into applied-only chunks"
-msgstr ""
-
-# internal string, no need to translate
-msgid ""
-"fetch next portion from chunks until a 'header' is seen\n"
-"        NB: header == new-file mark\n"
-"        "
-msgstr ""
-
-# internal string, no need to translate
-msgid ""
-"prompt query, and process base inputs\n"
-"\n"
-"        - y/n for the rest of file\n"
-"        - y/n for the rest\n"
-"        - ? (help)\n"
-"        - q (quit)\n"
-"\n"
-"        else, input is returned to the caller.\n"
-"        "
-msgstr ""
-
 msgid "[Ynsfdaq?]"
 msgstr "[Ynsfdaq?]"
 
+msgid "&Yes, record this change"
+msgstr "(&Y) sim, grava esta mudança"
+
+msgid "&No, skip this change"
+msgstr "(&N) não, descarta essa mudança"
+
+msgid "&Skip remaining changes to this file"
+msgstr "(&S) descarta mudanças restantes neste arquivo"
+
+msgid "Record remaining changes to this &file"
+msgstr "(&F) grava as mudanças restantes deste arquivo"
+
+msgid "&Done, skip remaining changes and files"
+msgstr "(&D) terminado, descarta mudanças e arquivos restantes"
+
+msgid "Record &all changes to all remaining files"
+msgstr "(&A) grava todas as mudanças dos arquivos restantes"
+
+msgid "&Quit, recording no changes"
+msgstr "(&Q) encerra, sem gravar nenhuma mudança"
+
+msgid "&?"
+msgstr "&?"
+
 msgid "y"
 msgstr "y"
 
@@ -5562,7 +5252,7 @@
 "    informadas por \"hg status\" serão candidatas para gravação.\n"
 "\n"
 "    Veja 'hg help dates' para obter uma lista de todos os formatos\n"
-"    válidos para  -d/--date.\n"
+"    válidos para -d/--date.\n"
 "\n"
 "    Você poderá selecionar interativamente a gravação de cada\n"
 "    arquivo modificado, além de cada alteração dentro dos arquivos\n"
@@ -5581,39 +5271,12 @@
 "\n"
 "    ? - exibe o texto de ajuda"
 
-msgid ""
-"interactively record a new patch\n"
-"\n"
-"    see 'hg help qnew' & 'hg help record' for more information and usage\n"
-"    "
-msgstr ""
-"grava um novo patch interativamente\n"
-"\n"
-"    veja 'hg help qnew' & 'hg help record' para uso e mais informações\n"
-"    "
-
 msgid "'mq' extension not loaded"
 msgstr "extensão 'mq' não carregada"
 
 msgid "running non-interactively, use commit instead"
 msgstr "não está executando interativamente, use commit"
 
-# internal string, no need to translate
-msgid ""
-"This is generic record driver.\n"
-"\n"
-"        It's job is to interactively filter local changes, and accordingly\n"
-"        prepare working dir into a state, where the job can be delegated to\n"
-"        non-interactive commit command such as 'commit' or 'qrefresh'.\n"
-"\n"
-"        After the actual job is done by non-interactive command, working dir\n"
-"        state is restored to original.\n"
-"\n"
-"        In the end we'll record intresting changes, and everything else will be\n"
-"        left in place, so the user can continue his work.\n"
-"        "
-msgstr ""
-
 msgid "no changes to record\n"
 msgstr "nenhuma mudança a ser gravada\n"
 
@@ -5637,15 +5300,43 @@
 msgid "hg qrecord [OPTION]... PATCH [FILE]..."
 msgstr "hg qrecord [OPÇÃO]... PATCH [ARQUIVO]..."
 
-msgid ""
-"patch transplanting tool\n"
+msgid "share a common history between several working directories"
+msgstr "compartilha histórico comum entre vários diretórios de trabalho"
+
+msgid ""
+"create a new shared repository (experimental)\n"
+"\n"
+"    Initialize a new repository and working directory that shares its\n"
+"    history with another repository.\n"
+"\n"
+"    NOTE: actions that change history such as rollback or moving the\n"
+"    source may confuse sharers.\n"
+"    "
+msgstr ""
+"cria um novo repositório compartilhado (experimental)\n"
+"\n"
+"    Inicializa um novo repositório e diretório de trabalho que\n"
+"    compartilha seu histórico com outro repositório.\n"
+"\n"
+"    NOTA: ações que mudem o histórico, como rollback ou mover a\n"
+"    origem, podem confundir repositórios compartilhados.\n"
+"    "
+
+msgid "do not create a working copy"
+msgstr "não cria uma cópia de trabalho"
+
+msgid "[-U] SOURCE [DEST]"
+msgstr "[-U] ORIGEM [DEST]"
+
+msgid ""
+"command to transplant changesets from another branch\n"
 "\n"
 "This extension allows you to transplant patches from another branch.\n"
 "\n"
 "Transplanted patches are recorded in .hg/transplant/transplants, as a\n"
 "map from a changeset hash to its hash in the source repository.\n"
 msgstr ""
-"ferramenta de transplante de patches\n"
+"comando para transplantar changesets de um outro ramo\n"
 "\n"
 "Esta extensão lhe permite transplantar patches de outro ramo.\n"
 "\n"
@@ -5653,16 +5344,6 @@
 "como um mapeamento de um hash de changeset para seu hash no\n"
 "repositório de origem.\n"
 
-msgid ""
-"returns True if a node is already an ancestor of parent\n"
-"        or has already been transplanted"
-msgstr ""
-"devolve True se um nó já for um ancestral do pai\n"
-"        ou se já foi transplantado"
-
-msgid "apply the revisions in revmap one by one in revision order"
-msgstr "aplica as revisões no revmap uma a uma na ordem de revisão"
-
 #, python-format
 msgid "skipping already applied revision %s\n"
 msgstr "omitindo revisão %s já aplicada\n"
@@ -5679,9 +5360,6 @@
 msgid "%s transplanted to %s\n"
 msgstr "%s transplantado para %s\n"
 
-msgid "arbitrarily rewrite changeset before applying it"
-msgstr "reescreve arbitrariamente o changeset antes de aplicá-lo"
-
 #, python-format
 msgid "filtering %s\n"
 msgstr "filtrando %s\n"
@@ -5689,9 +5367,6 @@
 msgid "filter failed"
 msgstr "filtro falhou"
 
-msgid "apply the patch in patchfile to the repository as a transplant"
-msgstr "aplica o patch ao repositório como um transplante"
-
 msgid "can only omit patchfile if merging"
 msgstr "só é possível omitir arquivo de patch em uma mesclagem"
 
@@ -5702,17 +5377,10 @@
 msgid "Fix up the merge and run hg transplant --continue"
 msgstr "Conserte a mesclagem e execute hg transplant --continue"
 
-msgid "recover last transaction and apply remaining changesets"
-msgstr "recupera a última transação e aplica os changesets que faltaram"
-
 #, python-format
 msgid "%s transplanted as %s\n"
 msgstr "%s transplantado em %s\n"
 
-# internal string, no need to translate
-msgid "commit working directory using journal metadata"
-msgstr ""
-
 msgid "transplant log file is corrupt"
 msgstr "arquivo de log de transplante corrompido"
 
@@ -5723,17 +5391,6 @@
 msgid "commit failed"
 msgstr "falha ao consolidar"
 
-# internal string, no need to translate
-msgid "journal changelog metadata for later recover"
-msgstr ""
-
-# internal string, no need to translate
-msgid "remove changelog journal"
-msgstr ""
-
-msgid "interactively transplant changesets"
-msgstr "transplante interativo de changesets"
-
 msgid "apply changeset? [ynmpcq?]:"
 msgstr "aplicar changeset? [ynmpcq?]:"
 
@@ -5834,7 +5491,7 @@
 msgstr "alterações locais pendentes"
 
 msgid "pull patches from REPOSITORY"
-msgstr "traz patches do REPOSITORIO"
+msgstr "traz patches do REPOSITÓRIO"
 
 msgid "pull patches from branch BRANCH"
 msgstr "traz patches do ramo RAMO"
@@ -5858,26 +5515,26 @@
 msgstr "filtra changesets através de FILTRO"
 
 msgid "hg transplant [-s REPOSITORY] [-b BRANCH [-a]] [-p REV] [-m REV] [REV]..."
-msgstr "hg transplant [-s REPOSITORIO] [-b RAMO [-a]] [-p REV] [-m REV] [REV]..."
-
-msgid ""
-"allow to use MBCS path with problematic encoding.\n"
+msgstr "hg transplant [-s REPOSITÓRIO] [-b RAMO [-a]] [-p REV] [-m REV] [REV]..."
+
+msgid ""
+"allow the use of MBCS paths with problematic encodings\n"
 "\n"
 "Some MBCS encodings are not good for some path operations (i.e.\n"
 "splitting path, case conversion, etc.) with its encoded bytes. We call\n"
 "such a encoding (i.e. shift_jis and big5) as \"problematic encoding\".\n"
 "This extension can be used to fix the issue with those encodings by\n"
-"wrapping some functions to convert to unicode string before path\n"
+"wrapping some functions to convert to Unicode string before path\n"
 "operation.\n"
 "\n"
-"This extension is usefull for:\n"
+"This extension is useful for:\n"
 " * Japanese Windows users using shift_jis encoding.\n"
 " * Chinese Windows users using big5 encoding.\n"
 " * All users who use a repository with one of problematic encodings on\n"
 "   case-insensitive file system.\n"
 "\n"
 "This extension is not needed for:\n"
-" * Any user who use only ascii chars in path.\n"
+" * Any user who use only ASCII chars in path.\n"
 " * Any user who do not use any of problematic encodings.\n"
 "\n"
 "Note that there are some limitations on using this extension:\n"
@@ -5885,15 +5542,9 @@
 " * You should set same encoding for the repository by locale or\n"
 "   HGENCODING.\n"
 "\n"
-"To use this extension, enable the extension in .hg/hgrc or ~/.hgrc:\n"
-"\n"
-"  [extensions]\n"
-"  hgext.win32mbcs =\n"
-"\n"
-"Path encoding conversion are done between unicode and\n"
-"encoding.encoding which is decided by mercurial from current locale\n"
+"Path encoding conversion are done between Unicode and\n"
+"encoding.encoding which is decided by Mercurial from current locale\n"
 "setting or HGENCODING.\n"
-"\n"
 msgstr ""
 "permite o uso de caminhos MBCS com codificação problemática.\n"
 "\n"
@@ -5903,33 +5554,26 @@
 "Chamamos tais codificações (por exemplo, shift_jis e big5) de\n"
 "\"codificações problemáticas\". Esta extensão pode ser usada para\n"
 "corrigir esses problemas encapsulando algumas funções para as\n"
-"converter em strings unicode antes das operações de caminho.\n"
+"converter em strings Unicode antes das operações de caminho.\n"
 "\n"
 "Esta extensão é útil para:\n"
-" * usuários de Windows em japonês usando codificação shift_jis.\n"
-" * usuários de Windows em chinês usando codificação big5.\n"
+" * usuários do Windows em japonês usando codificação shift_jis.\n"
+" * usuários do Windows em chinês usando codificação big5.\n"
 " * Qualquer usuário que usam um repositório com codificação\n"
 "   problemática em sistemas de arquivo insensíveis a\n"
 "   maiúsculas / minúsculas.\n"
 "\n"
 "Esta extensão não é necessária para:\n"
-" * Qualquer usuário que use apenas caracteres ascii em caminhos.\n"
+" * Qualquer usuário que use apenas caracteres ASCII em caminhos.\n"
 " * Qualquer usuário que não use uma codificação problemática.\n"
 "\n"
 "Note que há algumas limitações no uso desta extensão:\n"
 " * Você deve usar uma única codificação em um repositório.\n"
 " * Você deve definir a mesma codificação com o locale ou HGENCODING.\n"
 "\n"
-"Para usar esta extensão, você deve habilitá-la em .hg/hgrc ou\n"
-"~/.hgrc:\n"
-"\n"
-"  [extensions]\n"
-"  hgext.win32mbcs =\n"
-"\n"
-"Conversões de codificação de caminhos são feitas entre unicode e\n"
+"Conversões de codificação de caminhos são feitas entre Unicode e\n"
 "encoding.encoding que é decidida pelo Mercurial a partir de\n"
 "configurações de locale atuais ou HGENCODING.\n"
-"\n"
 
 #, python-format
 msgid "[win32mbcs] filename conversion fail with %s encoding\n"
@@ -5942,6 +5586,63 @@
 msgid "[win32mbcs] activated with encoding: %s\n"
 msgstr "[win32mbcs] ativado com codificação: %s\n"
 
+msgid ""
+"perform automatic newline conversion\n"
+"\n"
+"To perform automatic newline conversion, use:\n"
+"\n"
+"[extensions]\n"
+"hgext.win32text =\n"
+"[encode]\n"
+"** = cleverencode:\n"
+"# or ** = macencode:\n"
+"\n"
+"[decode]\n"
+"** = cleverdecode:\n"
+"# or ** = macdecode:\n"
+"\n"
+"If not doing conversion, to make sure you do not commit CRLF/CR by "
+"accident:\n"
+"\n"
+"[hooks]\n"
+"pretxncommit.crlf = python:hgext.win32text.forbidcrlf\n"
+"# or pretxncommit.cr = python:hgext.win32text.forbidcr\n"
+"\n"
+"To do the same check on a server to prevent CRLF/CR from being\n"
+"pushed or pulled:\n"
+"\n"
+"[hooks]\n"
+"pretxnchangegroup.crlf = python:hgext.win32text.forbidcrlf\n"
+"# or pretxnchangegroup.cr = python:hgext.win32text.forbidcr\n"
+msgstr ""
+"faz conversão automática de tipo de quebras de linha\n"
+"\n"
+"Para fazer conversão automática de quebras de linha, use:\n"
+"\n"
+"[extensions]\n"
+"hgext.win32text =\n"
+"[encode]\n"
+"** = cleverencode:\n"
+"# or ** = macencode:\n"
+"\n"
+"[decode]\n"
+"** = cleverdecode:\n"
+"# or ** = macdecode:\n"
+"\n"
+"Se a conversão não estiver sendo feita, para garantir que você não\n"
+"consolide CRLF/CR acidentalmente:\n"
+"\n"
+"[hooks]\n"
+"pretxncommit.crlf = python:hgext.win32text.forbidcrlf\n"
+"# or pretxncommit.cr = python:hgext.win32text.forbidcr\n"
+"\n"
+"Para fazer a mesma verificação em um servidor para impedir que\n"
+"CRLF/CR sejam enviados ou trazidos:\n"
+"\n"
+"[hooks]\n"
+"pretxnchangegroup.crlf = python:hgext.win32text.forbidcrlf\n"
+"# or pretxnchangegroup.cr = python:hgext.win32text.forbidcr\n"
+
 #, python-format
 msgid ""
 "WARNING: %s already has %s line endings\n"
@@ -5957,7 +5658,9 @@
 
 #, python-format
 msgid "Attempt to commit or push text file(s) using %s line endings\n"
-msgstr "Tentativa de consolidação ou push de arquivo(s) texto usando quebras de linha %s\n"
+msgstr ""
+"Tentativa de consolidação ou push de arquivo(s) texto usando quebras de "
+"linha %s\n"
 
 #, python-format
 msgid "in %s: %s\n"
@@ -5998,18 +5701,12 @@
 "** = %sdecode:\n"
 
 msgid ""
-"zeroconf support for mercurial repositories\n"
+"discover and advertise repositories on the local network\n"
 "\n"
 "Zeroconf enabled repositories will be announced in a network without\n"
 "the need to configure a server or a service. They can be discovered\n"
 "without knowing their actual IP address.\n"
 "\n"
-"To use the zeroconf extension add the following entry to your hgrc\n"
-"file:\n"
-"\n"
-"[extensions]\n"
-"hgext.zeroconf =\n"
-"\n"
 "To allow other people to discover your repository using run \"hg serve\"\n"
 "in your repository.\n"
 "\n"
@@ -6021,18 +5718,12 @@
 " $ hg paths\n"
 " zc-test = http://example.com:8000/test\n"
 msgstr ""
-"suporte zeroconf para repositórios do Mercurial\n"
+"descobre e anuncia repositórios na rede local\n"
 "\n"
 "Repositórios que habilitarem zeroconf serão anunciados numa rede\n"
 "sem a necessidade de configurar um servidor ou serviço. Eles podem\n"
 "ser descobertos sem o conhecimento de seus respectivos endereços IP.\n"
 "\n"
-"Para usar a extensão zeroconf adicione as seguintes entradas ao seu\n"
-"arquivo hgrc:\n"
-"\n"
-"[extensions]\n"
-"hgext.zeroconf =\n"
-"\n"
 "Para permitir que outras pessoas encontrem seu repositório execute\n"
 "\"hg serve\" em seu repositório.\n"
 "\n"
@@ -6082,7 +5773,10 @@
 
 #, python-format
 msgid "premature EOF reading chunk (got %d bytes, expected %d)"
-msgstr "fim de arquivo prematuro lenfdo trecho (%d bytes obtidos, %d esperados)"
+msgstr "fim de arquivo prematuro lendo trecho (%d bytes obtidos, %d esperados)"
+
+msgid "empty username"
+msgstr "nome de usuário vazio"
 
 #, python-format
 msgid "username %s contains a newline"
@@ -6099,13 +5793,13 @@
 msgstr "o limite deve ser um inteiro positivo"
 
 msgid "limit must be positive"
-msgstr "o limite deve ser positivo "
+msgstr "o limite deve ser positivo"
 
 msgid "too many revisions specified"
 msgstr "especificadas revisões demais"
 
 #, python-format
-msgid "invalid format spec '%%%s' in output file name"
+msgid "invalid format spec '%%%s' in output filename"
 msgstr "especificador inválido de formato '%%%s' no nome de arquivo de saída"
 
 #, python-format
@@ -6154,10 +5848,12 @@
 
 #, python-format
 msgid "%s has not been committed yet, so no copy data will be stored for %s.\n"
-msgstr "%s ainda não foi consolidado, então dados de cópia não serão guardados para %s.\n"
+msgstr ""
+"%s ainda não foi consolidado, então dados de cópia não serão guardados para %"
+"s.\n"
 
 msgid "no source or destination specified"
-msgstr "nehnuma origem ou destino especificado"
+msgstr "nenhuma origem ou destino especificado"
 
 msgid "no destination specified"
 msgstr "nenhum destino especificado"
@@ -6233,7 +5929,7 @@
 
 #, python-format
 msgid "%s: no key named '%s'"
-msgstr "%s: nehuma chave nomeada '%s'"
+msgstr "%s: nenhuma chave nomeada '%s'"
 
 #, python-format
 msgid "%s: %s"
@@ -6254,24 +5950,47 @@
 msgid "%s:%s copy source revision cannot be found!\n"
 msgstr "%s:%s revisão fonte da cópia não pode ser encontrada!\n"
 
-msgid "can only follow copies/renames for explicit file names"
-msgstr "é possível acompanhar cópias/renomeações apenas para nomes de arquivo explícitos"
-
-#, python-format
-msgid "file %s not found!"
-msgstr "arquivo %s não encontrado!"
-
-#, python-format
-msgid "no match under directory %s!"
-msgstr "nenhuma correspondencia sobre o diretório %s!"
-
-#, python-format
-msgid "can't commit %s: unsupported file type!"
-msgstr "não é possível consolidar %s: tipo de arquivo não suportado!"
-
-#, python-format
-msgid "file %s not tracked!"
-msgstr "arquivo %s não é seguido"
+msgid "can only follow copies/renames for explicit filenames"
+msgstr ""
+"é possível acompanhar cópias/renomeações apenas para nomes de arquivo "
+"explícitos"
+
+msgid "HG: Enter commit message.  Lines beginning with 'HG:' are removed."
+msgstr ""
+"HG: Edite a mensagem de consolidação.\n"
+"HG: Linhas começadas por 'HG:' serão removidas."
+
+msgid "HG: Leave message empty to abort commit."
+msgstr "HG: Deixe a mensagem vazia para abortar a consolidação."
+
+#, python-format
+msgid "HG: user: %s"
+msgstr "HG: usuário: %s"
+
+msgid "HG: branch merge"
+msgstr "HG: mesclagem de ramos"
+
+#, python-format
+msgid "HG: branch '%s'"
+msgstr "HG: ramo '%s'"
+
+#, python-format
+msgid "HG: added %s"
+msgstr "HG: adicionou %s"
+
+#, python-format
+msgid "HG: changed %s"
+msgstr "HG: modificou %s"
+
+#, python-format
+msgid "HG: removed %s"
+msgstr "HG: removeu %s"
+
+msgid "HG: no files changed"
+msgstr "HG: nenhum arquivo mudou"
+
+msgid "empty commit message"
+msgstr "mensagem de consolidação vazia"
 
 msgid ""
 "add the specified files on the next commit\n"
@@ -6280,19 +5999,19 @@
 "    repository.\n"
 "\n"
 "    The files will be added to the repository at the next commit. To\n"
-"    undo an add before that, see hg revert.\n"
+"    undo an add before that, see hg forget.\n"
 "\n"
 "    If no names are given, add all files to the repository.\n"
 "    "
 msgstr ""
 "adiciona os arquivos especificados na próxima consolidação\n"
 "\n"
-"    Agenda arquivos para serem adicionados ao controle de versão e\n"
-"    ao repositório.\n"
+"    Agenda arquivos para serem adicionados ao controle de versão\n"
+"    e ao repositório.\n"
 "\n"
 "    Os arquivos serão adicionados ao repositório na próxima\n"
 "    consolidação. Para desfazer uma adição antes disso, veja\n"
-"    hg revert.\n"
+"    hg forget.\n"
 "\n"
 "    Se nomes não forem dados, adiciona todos os arquivos ao\n"
 "    repositório.\n"
@@ -6340,33 +6059,35 @@
 msgstr "similaridade deve ser um número entre 0 e 100"
 
 msgid ""
-"show changeset information per file line\n"
+"show changeset information by line for each file\n"
 "\n"
 "    List changes in files, showing the revision id responsible for\n"
 "    each line\n"
 "\n"
-"    This command is useful to discover who did a change or when a\n"
-"    change took place.\n"
+"    This command is useful for discovering when a change was made and\n"
+"    by whom.\n"
 "\n"
 "    Without the -a/--text option, annotate will avoid processing files\n"
-"    it detects as binary. With -a, annotate will generate an\n"
-"    annotation anyway, probably with undesirable results.\n"
-"    "
-msgstr ""
-"mostra informação de changeset por linha de arquivo\n"
+"    it detects as binary. With -a, annotate will annotate the file\n"
+"    anyway, although the results will probably be neither useful\n"
+"    nor desirable.\n"
+"    "
+msgstr ""
+"mostra informação de changeset por linha para cada arquivo\n"
 "\n"
 "    Lista as mudanças em arquivos, mostrando o identificador de\n"
-"    revisão reponsável por cada linha\n"
-"\n"
-"    Este comando é útil para descobrir quem fez uma mudança ou quando\n"
-"    uma mudança foi efetuada.\n"
+"    revisão responsável por cada linha\n"
+"\n"
+"    Este comando é útil para descobrir quando uma mudança foi feita\n"
+"    e por quem.\n"
 "\n"
 "    Sem a opção -a/--text, annotate evitará processar arquivos\n"
-"    detectados como binários. Com -a, annotate irá gerar uma anotação\n"
-"    de qualquer maneira, provavelmente com resultados não desejados.\n"
-"    "
-
-msgid "at least one file name or pattern required"
+"    detectados como binários. Com -a, annotate irá executar de\n"
+"    qualquer maneira, embora os resultados provavelmente não serão\n"
+"    úteis.\n"
+"    "
+
+msgid "at least one filename or pattern is required"
 msgstr "exigido ao menos um nome de arquivo ou padrão"
 
 msgid "at least one of -n/-c is required for -l"
@@ -6377,7 +6098,7 @@
 msgstr "%s: arquivo binário\n"
 
 msgid ""
-"create unversioned archive of a repository revision\n"
+"create an unversioned archive of a repository revision\n"
 "\n"
 "    By default, the revision used is the parent of the working\n"
 "    directory; use -r/--rev to specify a different revision.\n"
@@ -6440,9 +6161,9 @@
 "    Commit the backed out changes as a new changeset. The new\n"
 "    changeset is a child of the backed out changeset.\n"
 "\n"
-"    If you back out a changeset other than the tip, a new head is\n"
+"    If you backout a changeset other than the tip, a new head is\n"
 "    created. This head will be the new tip and you should merge this\n"
-"    backout changeset with another head (current one by default).\n"
+"    backout changeset with another head.\n"
 "\n"
 "    The --merge option remembers the parent of the working directory\n"
 "    before starting the backout, then merges the new head with that\n"
@@ -6459,7 +6180,7 @@
 "\n"
 "    Se você anular um changeset diferente da tip, uma nova cabeça é\n"
 "    criada. Esta cabeça será a nova tip e você deve mesclar esse\n"
-"    changeset de anulação com outra cabeça (por padrão a atual).\n"
+"    changeset de anulação com outra cabeça.\n"
 "\n"
 "    A opção --merge lembra do pai do diretório de trabalho antes do\n"
 "    início da anulação, e mescla a nova cabeça com esse changeset\n"
@@ -6477,13 +6198,13 @@
 msgid "please specify a revision to backout"
 msgstr "por favor especifique uma revisão a ser anulada"
 
-msgid "cannot back out change on a different branch"
+msgid "cannot backout change on a different branch"
 msgstr "não se pode anular uma mudança em um ramo diferente"
 
-msgid "cannot back out a change with no parents"
+msgid "cannot backout a change with no parents"
 msgstr "não se pode anular uma mudança sem pais"
 
-msgid "cannot back out a merge changeset without --parent"
+msgid "cannot backout a merge changeset without --parent"
 msgstr "não se pode anular um changeset de mesclagem sem --parent"
 
 #, python-format
@@ -6519,18 +6240,18 @@
 "    bad, then mark the latest changeset which is free from the problem\n"
 "    as good. Bisect will update your working directory to a revision\n"
 "    for testing (unless the -U/--noupdate option is specified). Once\n"
-"    you have performed tests, mark the working directory as bad or\n"
-"    good and bisect will either update to another candidate changeset\n"
+"    you have performed tests, mark the working directory as good or\n"
+"    bad, and bisect will either update to another candidate changeset\n"
 "    or announce that it has found the bad revision.\n"
 "\n"
 "    As a shortcut, you can also use the revision argument to mark a\n"
 "    revision as good or bad without checking it out first.\n"
 "\n"
-"    If you supply a command it will be used for automatic bisection.\n"
-"    Its exit status will be used as flag to mark revision as bad or\n"
-"    good. In case exit status is 0 the revision is marked as good, 125\n"
-"    - skipped, 127 (command not found) - bisection will be aborted;\n"
-"    any other status bigger than 0 will mark revision as bad.\n"
+"    If you supply a command, it will be used for automatic bisection.\n"
+"    Its exit status will be used to mark revisions as good or bad:\n"
+"    status 0 means good, 125 means to skip the revision, 127\n"
+"    (command not found) will abort the bisection, and any other\n"
+"    non-zero exit status means the revision is bad.\n"
 "    "
 msgstr ""
 "busca changesets por subdivisão\n"
@@ -6549,11 +6270,11 @@
 "    marcar uma revisão como boa ou ruim sem obtê-la primeiro.\n"
 "\n"
 "    Se você fornecer um comando ele será usado para bissecção\n"
-"    automática. Seu código de saída será usado como indicador para\n"
-"    marcar a revisão como boa ou ruim. O código de saída 0 fará a\n"
-"    revisão ser marcada como boa, 125 omitirá a revisão, 127 (comando\n"
-"    não encontrado) abortará a bissecção e qualquer outro código\n"
-"    maior que 0 marcará a revisão como ruim.\n"
+"    automática. Seu código de saída será usado para marcar revisões\n"
+"    como boas ou ruins: o código de saída 0 marcará a revisão como\n"
+"    boa, 125 omitirá a revisão, 127 (comando não encontrado)\n"
+"    abortará a bissecção, e qualquer outro código maior que 0\n"
+"    marcará a revisão como ruim.\n"
 "    "
 
 msgid "The first good revision is:\n"
@@ -6563,10 +6284,14 @@
 msgstr "A primeira revisão ruim é:\n"
 
 msgid "Due to skipped revisions, the first good revision could be any of:\n"
-msgstr "Devido a revisões omitidas, a primeira revisão boa pode ser qualquer uma entre:\n"
+msgstr ""
+"Devido a revisões omitidas, a primeira revisão boa pode ser qualquer uma "
+"entre:\n"
 
 msgid "Due to skipped revisions, the first bad revision could be any of:\n"
-msgstr "Devido a revisões omitidas, a primeira revisão ruim pode ser qualquer uma entre:\n"
+msgstr ""
+"Devido a revisões omitidas, a primeira revisão ruim pode ser qualquer uma "
+"entre:\n"
 
 msgid "cannot bisect (no known good revisions)"
 msgstr "não é possível fazer o bisect (nenhuma revisão boa conhecida)"
@@ -6581,6 +6306,10 @@
 msgstr "argumentos incompatíveis"
 
 #, python-format
+msgid "cannot find executable: %s"
+msgstr "não foi possível encontrar executável: %s"
+
+#, python-format
 msgid "failed to execute %s"
 msgstr "falhou ao executar %s"
 
@@ -6589,8 +6318,8 @@
 msgstr "%s morto"
 
 #, python-format
-msgid "Changeset %s: %s\n"
-msgstr "Changeset %s: %s\n"
+msgid "Changeset %d:%s: %s\n"
+msgstr "Changeset %d:%s: %s\n"
 
 #, python-format
 msgid "Testing changeset %s:%s (%s changesets remaining, ~%s tests)\n"
@@ -6600,12 +6329,13 @@
 "set or show the current branch name\n"
 "\n"
 "    With no argument, show the current branch name. With one argument,\n"
-"    set the working directory branch name (the branch does not exist\n"
-"    in the repository until the next commit). It is recommended to use\n"
-"    the 'default' branch as your primary development branch.\n"
+"    set the working directory branch name (the branch will not exist\n"
+"    in the repository until the next commit). Standard practice\n"
+"    recommends that primary development take place on the 'default'\n"
+"    branch.\n"
 "\n"
 "    Unless -f/--force is specified, branch will not let you set a\n"
-"    branch name that shadows an existing branch.\n"
+"    branch name that already exists, even if it's inactive.\n"
 "\n"
 "    Use -C/--clean to reset the working directory branch to that of\n"
 "    the parent of the working directory, negating a previous branch\n"
@@ -6617,12 +6347,13 @@
 "define ou mostra o nome de ramo atual\n"
 "\n"
 "    Sem argumentos, mostra o nome de ramo atual. Com um argumento,\n"
-"    define o nome de ramo do diretório de trabalho (o ramo não existe\n"
-"    no repositório até a próxima consolidação). Recomenda-se que se\n"
-"    use o ramo 'default' como seu ramo primário de desenvolvimento.\n"
+"    define o nome de ramo do diretório de trabalho (o ramo não\n"
+"    existirá no repositório até a próxima consolidação). Recomenda-se\n"
+"    usar o ramo 'default' como ramo primário de desenvolvimento.\n"
 "\n"
 "    A não ser que -f/--force seja especificado, o comando branch não\n"
-"    deixará você definir um nome de ramo ocultando um ramo existente.\n"
+"    deixará você definir um nome de ramo que já existe, mesmo que\n"
+"    tal ramo esteja inativo.\n"
 "\n"
 "    Use -C/--clean para redefinir o ramo do diretório de trabalho\n"
 "    para o ramo do pai do diretório de trabalho, desfazendo uma\n"
@@ -6646,7 +6377,7 @@
 "list repository named branches\n"
 "\n"
 "    List the repository's named branches, indicating which ones are\n"
-"    inactive. If active is specified, only show active branches.\n"
+"    inactive. If -a/--active is specified, only show active branches.\n"
 "\n"
 "    A branch is considered active if it contains repository heads.\n"
 "\n"
@@ -6656,7 +6387,8 @@
 "lista os ramos nomeados do repositório\n"
 "\n"
 "    Lista os ramos nomeados do repositório, indicando quais são\n"
-"    inativos. Se -a for especificado, exibe apenas ramos ativos.\n"
+"    inativos. Se -a/--active for especificado, exibe apenas ramos\n"
+"    ativos.\n"
 "\n"
 "    Um ramo é considerado ativo se contém cabeças de repositório.\n"
 "\n"
@@ -6672,9 +6404,11 @@
 "    If no destination repository is specified the destination is\n"
 "    assumed to have all the nodes specified by one or more --base\n"
 "    parameters. To create a bundle containing all changesets, use\n"
-"    -a/--all (or --base null). To change the compression method\n"
-"    applied, use the -t/--type option (by default, bundles are\n"
-"    compressed using bz2).\n"
+"    -a/--all (or --base null).\n"
+"\n"
+"    You can change compression method with the -t/--type option.\n"
+"    The available compression methods are: none, bzip2, and\n"
+"    gzip (by default, bundles are compressed using bzip2).\n"
 "\n"
 "    The bundle file can then be transferred using conventional means\n"
 "    and applied to another repository with the unbundle or pull\n"
@@ -6693,9 +6427,12 @@
 "    Se um repositório de destino não for especificado, assume que o\n"
 "    destino tem todos os nós especificados por um ou mais parâmetros\n"
 "    --base. Para criar um bundle contendo todos os changesets, use\n"
-"    -a/--all (ou --base null). Para mudar o método de compressão\n"
-"    aplicado, use a opção -t/--type (por padrão, bundles são\n"
-"    comprimidos usando bz2).\n"
+"    -a/--all (ou --base null).\n"
+"\n"
+"    Você pode mudar o método de compressão aplicado com a opção\n"
+"    -t/--type. Os métodos de compressão disponíveis são: none\n"
+"    (nenhum), bzip2 e gzip (por padrão, bundles são comprimidos\n"
+"    usando bzip2).\n"
 "\n"
 "    O arquivo bundle pode então ser transferido usando métodos\n"
 "    convencionais e aplicado a outro repositório com os comandos\n"
@@ -6708,7 +6445,7 @@
 "    de revisões.\n"
 "    "
 
-msgid "--base is incompatible with specifiying a destination"
+msgid "--base is incompatible with specifying a destination"
 msgstr "--base é incompatível com uma especificação de destino"
 
 msgid "unknown bundle type specified with --type"
@@ -6771,8 +6508,7 @@
 "\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"
-"    Look at the help text for URLs for important details about ssh://\n"
-"    URLs.\n"
+"    Please see 'hg help urls' for important details about ssh:// URLs.\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"
@@ -6807,8 +6543,8 @@
 "    pull.\n"
 "\n"
 "    Se você usar a opção -r/--rev para clonar até uma revisão\n"
-"    específica, nenhuma revisão subsequente (nem mesmo tags\n"
-"    subsequentes) estará presente no repositório clonado. Essa\n"
+"    específica, nenhuma revisão subseqüente (nem mesmo tags\n"
+"    subseqüentes) estará presente no repositório clonado. Essa\n"
 "    opção implica --pull, mesmo em repositórios locais.\n"
 "\n"
 "    Por padrão, o comando clone irá posicionar a cópia de trabalho na\n"
@@ -6821,7 +6557,7 @@
 "\n"
 "    É possível especificar uma URL ssh:// como destino, mas o\n"
 "    .hg/hgrc e a cópia de trabalho não serão criados do lado remoto.\n"
-"    Veja o texto de ajuda para URLs para detalhes importantes sobre\n"
+"    Por favor veja 'hg help URLs' para detalhes importantes sobre\n"
 "    URLs ssh:// .\n"
 "\n"
 "    Por eficiência, hardlinks são usados para a clonagem sempre que a\n"
@@ -6852,13 +6588,13 @@
 "\n"
 "    Commit changes to the given files into the repository. Unlike a\n"
 "    centralized RCS, this operation is a local operation. See hg push\n"
-"    for means to actively distribute your changes.\n"
+"    for a way to actively distribute your changes.\n"
 "\n"
 "    If a list of files is omitted, all changes reported by \"hg status\"\n"
 "    will be committed.\n"
 "\n"
 "    If you are committing the result of a merge, do not provide any\n"
-"    file names or -I/-X filters.\n"
+"    filenames or -I/-X filters.\n"
 "\n"
 "    If no commit message is specified, the configured editor is\n"
 "    started to prompt you for a message.\n"
@@ -6870,10 +6606,10 @@
 "\n"
 "    Consolida no repositório local mudanças nos arquivos dados. Ao\n"
 "    contrário do que ocorre um sistema de controle de versão\n"
-"    centralizado, esta operação é local. Veja hg push para modos de\n"
-"    distribuir ativamente suas mudanças.\n"
-"    Se uma lista de arquivos for omitida, todas as mudanças\n"
-"\n"
+"    centralizado, esta operação é local. Veja hg push para um modo\n"
+"    de distribuir ativamente suas mudanças.\n"
+"\n"
+"    Se não for passada uma lista de arquivos, todas as mudanças\n"
 "    informadas por \"hg status\" serão gravadas.\n"
 "\n"
 "    Se você estiver consolidando o resultado de uma mesclagem, não\n"
@@ -6883,7 +6619,7 @@
 "    configurado será iniciado para editar uma mensagem.\n"
 "\n"
 "    Veja 'hg help dates' para uma lista de formatos válidos para\n"
-"   -d/--date.\n"
+"    -d/--date.\n"
 "    "
 
 msgid "created new head\n"
@@ -6901,7 +6637,7 @@
 "    the source must be a single file.\n"
 "\n"
 "    By default, this command copies the contents of files as they\n"
-"    stand in the working directory. If invoked with -A/--after, the\n"
+"    exist in the working directory. If invoked with -A/--after, the\n"
 "    operation is recorded, but no copying is performed.\n"
 "\n"
 "    This command takes effect with the next commit. To undo a copy\n"
@@ -6912,7 +6648,7 @@
 "\n"
 "    Marca dest como tendo cópias de arquivos de origem. Se dest for\n"
 "    um diretório, cópias são colocadas nesse diretório. Se dest for\n"
-"    um arquivo, só pode haver uma fonte.\n"
+"    um arquivo, só pode haver uma origem.\n"
 "\n"
 "    Por padrão, este comando copia os conteúdos de arquivos como\n"
 "    estão no diretório de trabalho. Se chamado com a opção\n"
@@ -6962,27 +6698,35 @@
 msgid ""
 "show combined config settings from all hgrc files\n"
 "\n"
-"    With no args, print names and values of all config items.\n"
-"\n"
-"    With one arg of the form section.name, print just the value of\n"
-"    that config item.\n"
-"\n"
-"    With multiple args, print names and values of all config items\n"
-"    with matching section names."
+"    With no arguments, print names and values of all config items.\n"
+"\n"
+"    With one argument of the form section.name, print just the value\n"
+"    of that config item.\n"
+"\n"
+"    With multiple arguments, print names and values of all config\n"
+"    items with matching section names.\n"
+"\n"
+"    With --debug, the source (filename and line number) is printed\n"
+"    for each config item.\n"
+"    "
 msgstr ""
 "exibe opções de configuração de todos os arquivos hgrc combinados\n"
 "\n"
-"    Sem argumentos, imprime nomes e valores de todos os ítens de\n"
+"    Sem argumentos, imprime nomes e valores de todos os itens de\n"
 "    configuração.\n"
 "\n"
-"    Com um argumento da forma 'secão.nome', imprime apenas o valor\n"
-"    desse ítem de configuração.\n"
+"    Com um argumento da forma 'seção.nome', imprime apenas o valor\n"
+"    desse item de configuração.\n"
 "\n"
 "    Com múltiplos argumentos, imprime nomes e valores de todos os\n"
-"    ítens de configuração que casarem com os nomes de seção."
+"    itens de configuração que casarem com os nomes de seção.\n"
+"\n"
+"    Com --debug, é mostrada a origem (nome de arquivo e número da\n"
+"    linha) para cada item de configuração.\n"
+"    "
 
 msgid "only one config item permitted"
-msgstr "apenas um ítem de configuração permitido"
+msgstr "apenas um item de configuração permitido"
 
 msgid ""
 "manually set the parents of the current working directory\n"
@@ -6994,7 +6738,7 @@
 "muda manualmente os pais do diretório de trabalho atual\n"
 "\n"
 "    Isto é útil para escrever utilitários de conversão de repositórios, mas\n"
-"     deve ser usado com cuidado.\n"
+"    deve ser usado com cuidado.\n"
 "    "
 
 msgid "show the contents of the current dirstate"
@@ -7017,8 +6761,8 @@
 msgid "dump the contents of an index file"
 msgstr "extrai o conteúdo de um arquivo de índice"
 
-msgid "dump an index DAG as a .dot file"
-msgstr "extrai os dados de um índice DAG como um arquivo .dot"
+msgid "dump an index DAG as a graphviz dot file"
+msgstr "extrai os dados de um índice DAG como um arquivo .dot do graphviz"
 
 msgid "test Mercurial installation"
 msgstr "testa a instalação do Mercurial"
@@ -7057,17 +6801,27 @@
 msgid " patch test failed!\n"
 msgstr " patch de teste falhou!\n"
 
-msgid " (Current patch tool may be incompatible with patch, or misconfigured. Please check your .hgrc file)\n"
-msgstr " (O utilitário de patch atual pode ser incompatível com o patch, ou pode estar configurado incorretamente. Por favor verifique seu arquivo .hgrc)\n"
-
-msgid " Internal patcher failure, please report this error to http://www.selenic.com/mercurial/bts\n"
-msgstr " Falha do sistema interno de patches, por favor informe esse erro em http://www.selenic.com/mercurial/bts\n"
+msgid ""
+" (Current patch tool may be incompatible with patch, or misconfigured. "
+"Please check your .hgrc file)\n"
+msgstr ""
+" (O utilitário de patch atual pode ser incompatível com o patch, ou pode "
+"estar configurado incorretamente. Por favor verifique seu arquivo .hgrc)\n"
+
+msgid ""
+" Internal patcher failure, please report this error to http://mercurial."
+"selenic.com/bts/\n"
+msgstr ""
+" Falha do sistema interno de patches, por favor informe esse erro em http://mercurial."
+"selenic.com/bts/\n"
 
 msgid "Checking commit editor...\n"
 msgstr "Verificando editor para consolidação...\n"
 
 msgid " No commit editor set and can't find vi in PATH\n"
-msgstr " Nenhum editor para consolidação configurado, e não foi possível encontrar 'vi' no PATH\n"
+msgstr ""
+" Nenhum editor para consolidação configurado, e não foi possível encontrar "
+"'vi' no PATH\n"
 
 msgid " (specify a commit editor in your .hgrc file)\n"
 msgstr " (especifique um editor para consolidação em seu arquivo .hgrc)\n"
@@ -7182,7 +6936,7 @@
 "    diff anyway, probably with undesirable results.\n"
 "\n"
 "    Use the -g/--git option to generate diffs in the git extended diff\n"
-"    format. Read the diffs help topic for more information.\n"
+"    format. See 'hg help diffs' for more information.\n"
 "\n"
 "    With the --switch-parent option, the diff will be against the\n"
 "    second parent. It can be useful to review a merge.\n"
@@ -7210,15 +6964,15 @@
 "    %R   número de revisão do changeset\n"
 "    %b   nome base do repositório onde o export é realizado\n"
 "    %h   hash de forma curta do changeset (12 bytes hexadecimais)\n"
-"    %n   número sequencial completado com zeros, começando em 1\n"
-"    %r   número  de revisão do changeset completado com zeros\n"
+"    %n   número seqüencial completado com zeros, começando em 1\n"
+"    %r   número de revisão do changeset completado com zeros\n"
 "\n"
 "    Sem a opção -a/--text, export evitará gerar diffs de arquivos\n"
 "    detectados como binários. Com -a, export gerará um diff de\n"
 "    qualquer maneira, provavelmente com resultados não desejados.\n"
 "\n"
 "    Use a opção -g/--git para gerar diffs no formato estendido\n"
-"    \"git diff\". Leia o tópico de ajuda diffs para mais informações.\n"
+"    \"git diff\". Veja 'hg help diffs' para mais informações.\n"
 "\n"
 "    Com a opção --switch-parent, o diff será feito em relação ao\n"
 "    segundo pai. Isso pode ser útil para avaliar uma mesclagem.\n"
@@ -7234,6 +6988,38 @@
 msgstr "exportando patch:\n"
 
 msgid ""
+"forget the specified files on the next commit\n"
+"\n"
+"    Mark the specified files so they will no longer be tracked\n"
+"    after the next commit.\n"
+"\n"
+"    This only removes files from the current branch, not from the\n"
+"    entire project history, and it does not delete them from the\n"
+"    working directory.\n"
+"\n"
+"    To undo a forget before the next commit, see hg add.\n"
+"    "
+msgstr ""
+"esquece os arquivos especificados na próxima consolidação\n"
+"\n"
+"    Marca os arquivos especificados de modo que não serão mais\n"
+"    rastreados após a próxima consolidação.\n"
+"\n"
+"    Isto remove arquivos apenas do ramo atual,e não de todo o\n"
+"    histórico do projeto, nem os apaga do diretório de trabalho.\n"
+"\n"
+"    Para desfazer um forget antes da próxima consolidação, veja\n"
+"    hg add.\n"
+"    "
+
+msgid "no files specified"
+msgstr "nenhum arquivo especificado"
+
+#, python-format
+msgid "not removing %s: file is already untracked\n"
+msgstr "%s não removido: arquivo já não é rastreado\n"
+
+msgid ""
 "search for a pattern in specified files and revisions\n"
 "\n"
 "    Search revisions of files for a regular expression.\n"
@@ -7276,38 +7062,52 @@
 "\n"
 "    With no arguments, show all repository head changesets.\n"
 "\n"
-"    If branch or revisions names are given this will show the heads of\n"
-"    the specified branches or the branches those revisions are tagged\n"
-"    with.\n"
-"\n"
 "    Repository \"heads\" are changesets that don't have child\n"
 "    changesets. They are where development generally takes place and\n"
 "    are the usual targets for update and merge operations.\n"
 "\n"
-"    Branch heads are changesets that have a given branch tag, but have\n"
-"    no child changesets with that tag. They are usually where\n"
-"    development on the given branch takes place.\n"
+"    If one or more REV is given, the \"branch heads\" will be shown for\n"
+"    the named branch associated with that revision. The name of the\n"
+"    branch is called the revision's branch tag.\n"
+"\n"
+"    Branch heads are revisions on a given named branch that do not have\n"
+"    any descendants on the same branch. A branch head could be a true head\n"
+"    or it could be the last changeset on a branch before a new branch\n"
+"    was created. If none of the branch heads are true heads, the branch\n"
+"    is considered inactive.\n"
+"\n"
+"    If STARTREV is specified only those heads (or branch heads) that\n"
+"    are descendants of STARTREV will be displayed.\n"
 "    "
 msgstr ""
 "mostra as cabeças atuais do repositório ou cabeças de ramo\n"
 "\n"
-"    Sem argumentos, mostra todos os changesets de cabeça do\n"
-"    repositório.\n"
-"\n"
-"    Se nomes de ramo ou revisão forem dados, isso irá mostrar as\n"
-"    cabeças dos ramos especificados ou dos ramos que marcam tais\n"
-"    revisões.\n"
+"    Sem argumentos, mostra todas as cabeças do repositório.\n"
 "\n"
 "    \"Cabeças\" do repositório são changesets que não têm nenhum\n"
-"    changeset filho. Elas geralmente são onde o desenvolvimento\n"
+"    changeset filho. Elas são onde o desenvolvimento geralmente\n"
 "    acontece e são os alvos costumeiros para operações update e\n"
 "    merge.\n"
 "\n"
-"    Cabeças de ramo são changesets que possuem uma determinada\n"
-"    etiqueta de ramo, mas não possuem changesets filhos com essa\n"
-"    etiqueta. É nelas onde tipicamente o desenvolvimento no tal\n"
-"    ramo acontece.\n"
-"    "
+"    Se um ou mais argumentos REV forem dados, as \"cabeças de ramo\"\n"
+"    serão mostradas para os ramos nomeados associados a tais\n"
+"    revisões. O nome do ramo é chamado de etiqueta de ramo da\n"
+"    revisão.\n"
+"\n"
+"    Cabeças de ramo são revisões em um determinado ramo nomeado que\n"
+"    não têm nenhum descendente nesse mesmo ramo. Uma cabeça de\n"
+"    ramo pode ser uma cabeça verdadeira ou pode ser o último\n"
+"    changeset em um ramo antes que um novo ramo nomeado fosse criado.\n"
+"    Se nenhuma das cabeças de ramo forem cabeças verdadeiras, o ramo\n"
+"    é considerado inativo.\n"
+"\n"
+"    Se REVINICIAL for especificada, serão mostradas apenas cabeças\n"
+"    (ou cabeças de ramo) descendentes de REVINICIAL.\n"
+"    "
+
+#, python-format
+msgid "no open branch heads on branch %s\n"
+msgstr "nenhuma cabeça de ramo aberta no ramo %s\n"
 
 #, python-format
 msgid "no changes on branch %s containing %s are reachable from %s\n"
@@ -7320,15 +7120,15 @@
 msgid ""
 "show help for a given topic or a help overview\n"
 "\n"
-"    With no arguments, print a list of commands and short help.\n"
+"    With no arguments, print a list of commands with short help messages.\n"
 "\n"
 "    Given a topic, extension, or command name, print help for that\n"
 "    topic."
 msgstr ""
 "exibe o texto de ajuda geral ou de um tópico pedido\n"
 "\n"
-"    Sem argumentos, imprime uma lista de comandos e texto de ajuda\n"
-"    curto.\n"
+"    Sem argumentos, imprime uma lista de comandos com textos curtos\n"
+"    de ajuda.\n"
 "\n"
 "    Dado um tópico, extensão, ou nome de comando, imprime o texto de\n"
 "    ajuda para esse tópico."
@@ -7374,18 +7174,8 @@
 msgid "no commands defined\n"
 msgstr "nenhum comando definido\n"
 
-msgid ""
-"\n"
-"enabled extensions:\n"
-"\n"
-msgstr ""
-"\n"
-"extensões habilitadas:\n"
-"\n"
-
-#, python-format
-msgid " %s   %s\n"
-msgstr " %s   %s\n"
+msgid "enabled extensions:"
+msgstr "extensões habilitadas:"
 
 msgid "no help text available"
 msgstr "texto de ajuda não disponível"
@@ -7419,7 +7209,8 @@
 "    With no revision, print a summary of the current state of the\n"
 "    repository.\n"
 "\n"
-"    With a path, do a lookup in another repository.\n"
+"    Specifying a path to a repository root or Mercurial bundle will\n"
+"    cause lookup to operate on that repository/bundle.\n"
 "\n"
 "    This summary identifies the repository state using one or two\n"
 "    parent hash identifiers, followed by a \"+\" if there are\n"
@@ -7431,7 +7222,9 @@
 "\n"
 "    Sem a revisão, imprime um sumário do estado atual do repositório.\n"
 "\n"
-"    Com um caminho, faz uma busca em outro repositório.\n"
+"    Especificar um caminho para a raiz de um repositório ou para um\n"
+"    arquivo bundle do Mercurial faz com que a busca opere em tal\n"
+"    repositório ou bundle.\n"
 "\n"
 "    Este sumário identifica o estado do repositório usando um ou dois\n"
 "    identificadores de hash dos pais, seguidos por um \"+\" se houver\n"
@@ -7449,8 +7242,8 @@
 "    will abort unless given the -f/--force flag.\n"
 "\n"
 "    You can import a patch straight from a mail message. Even patches\n"
-"    as attachments work (body part must be type text/plain or\n"
-"    text/x-patch to be used). From and Subject headers of email\n"
+"    as attachments work (to use the body part, it must have type\n"
+"    text/plain or text/x-patch). From and Subject headers of email\n"
 "    message are used as default committer and commit message. All\n"
 "    text/plain body parts before first diff are added to commit\n"
 "    message.\n"
@@ -7469,8 +7262,9 @@
 "    With -s/--similarity, hg will attempt to discover renames and\n"
 "    copies in the patch in the same way as 'addremove'.\n"
 "\n"
-"    To read a patch from standard input, use patch name \"-\". See 'hg\n"
-"    help dates' for a list of formats valid for -d/--date.\n"
+"    To read a patch from standard input, use \"-\" as the patch name. If\n"
+"    a URL is specified, the patch will be downloaded from it.\n"
+"    See 'hg help dates' for a list of formats valid for -d/--date.\n"
 "    "
 msgstr ""
 "importa um conjunto ordenado de patches\n"
@@ -7481,16 +7275,17 @@
 "    irá abortar, a não ser que a opção -f/--force seja passada.\n"
 "\n"
 "    Você pode importar um patch direto de uma mensagem de e-mail. São\n"
-"    aceitos até mesmo patches anexados (o corpo da mensagem deve ser\n"
-"    do tipo text/plain ou text/x-patch para ser usado). Os cabeçalhos\n"
-"    From e Subject da mensagem são usados como autor e mensagem de\n"
-"    consolidação, respectivamente. Todas as partes text/plain antes\n"
-"    do primeiro diff são adicionadas à mensagem de consolidação.\n"
+"    aceitos até mesmo patches anexados (para poder usar o o corpo da\n"
+"    mensagem, ele deve ser do tipo text/plain ou text/x-patch). Os\n"
+"    cabeçalhos From e Subject da mensagem são usados como autor e\n"
+"    mensagem de consolidação, respectivamente. Todas as partes\n"
+"    text/plain antes do primeiro diff são adicionadas à mensagem de\n"
+"    consolidação.\n"
 "\n"
 "    Se o patch importado foi gerado por hg export, o usuário e\n"
 "    descrição do patch são usados ao invés dos cabeçalhos e corpo da\n"
-"    mensagem. Valores passados na linha de comando com -m and -u são\n"
-"    usados no lugar destes.\n"
+"    mensagem. Valores passados na linha de comando com -m/--message e\n"
+"    -u/--user são usados no lugar destes.\n"
 "\n"
 "    Se --exact for especificado, import irá posicionar o diretório de\n"
 "    trabalho no pai de cada patch antes de aplicá-lo, e irá abortar\n"
@@ -7502,7 +7297,8 @@
 "    cópias no patch do mesmo modo que o comando 'addremove'.\n"
 "\n"
 "    Para ler um patch da entrada padrão, use \"-\" como nome do\n"
-"    patch. Veja 'hg help dates' para uma lista de formatos válidos\n"
+"    patch. Se uma URL for especificada, o patch será obtido a partir\n"
+"    dela. Veja 'hg help dates' para uma lista de formatos válidos\n"
 "    para -d/--date.\n"
 "    "
 
@@ -7520,7 +7316,7 @@
 "mensagem:\n"
 "%s\n"
 
-msgid "not a mercurial patch"
+msgid "not a Mercurial patch"
 msgstr "não é um patch do Mercurial"
 
 msgid "patch is damaged or loses information"
@@ -7530,8 +7326,8 @@
 "show new changesets found in source\n"
 "\n"
 "    Show new changesets found in the specified path/URL or the default\n"
-"    pull location. These are the changesets that would be pulled if a\n"
-"    pull was requested.\n"
+"    pull location. These are the changesets that would have been pulled\n"
+"    if a pull at the time you issued this command.\n"
 "\n"
 "    For remote repository, using --bundle avoids downloading the\n"
 "    changesets twice if the incoming is followed by a pull.\n"
@@ -7543,7 +7339,7 @@
 "\n"
 "    Mostra novos changesets encontrados no caminho/URL especificado\n"
 "    ou na localização de pull padrão. Estes são os changesets que\n"
-"    seriam obtidos se um pull fosse executado.\n"
+"    seriam trazidos se um pull fosse executado.\n"
 "\n"
 "    Para repositórios remotos, a opção --bundle evita baixar os\n"
 "    changesets duas vezes se o comando incoming for seguido por um\n"
@@ -7556,7 +7352,7 @@
 "create a new repository in the given directory\n"
 "\n"
 "    Initialize a new repository in the given directory. If the given\n"
-"    directory does not exist, it is created.\n"
+"    directory does not exist, it will be created.\n"
 "\n"
 "    If no directory is given, the current directory is used.\n"
 "\n"
@@ -7578,38 +7374,40 @@
 msgid ""
 "locate files matching specific patterns\n"
 "\n"
-"    Print all files under Mercurial control whose names match the\n"
-"    given patterns.\n"
-"\n"
-"    This command searches the entire repository by default. To search\n"
-"    just the current directory and its subdirectories, use\n"
-"    \"--include .\".\n"
-"\n"
-"    If no patterns are given to match, this command prints all file\n"
-"    names.\n"
+"    Print files under Mercurial control in the working directory whose\n"
+"    names match the given patterns.\n"
+"\n"
+"    By default, this command searches all directories in the working\n"
+"    directory. To search just the current directory and its\n"
+"    subdirectories, use \"--include .\".\n"
+"\n"
+"    If no patterns are given to match, this command prints the names\n"
+"    of all files under Mercurial control in the working directory.\n"
 "\n"
 "    If you want to feed the output of this command into the \"xargs\"\n"
 "    command, use the -0 option to both this command and \"xargs\". This\n"
 "    will avoid the problem of \"xargs\" treating single filenames that\n"
-"    contain white space as multiple filenames.\n"
+"    contain whitespace as multiple filenames.\n"
 "    "
 msgstr ""
 "localiza arquivos que casem com os padrões especificados\n"
 "\n"
-"    Imprime todos os arquivos sob o controle do Mercurial cujos nomes\n"
-"    casem com os padrões fornecidos.\n"
-"\n"
-"    Este comando procura por padrão no repositório todo. Para procurar\n"
-"    apenas no diretório atual e subdiretórios, use\n"
-"    \"--include .\".\n"
-"\n"
-"    Se não forem passados padrões, este comando imprime todos os nomes\n"
-"    de arquivo.\n"
-"\n"
-"    Se você quiser passar a saída desse comando para o comando \"xargs\",\n"
-"    use a opção -0 tanto para este comando como para o \"xargs\".\n"
-"    Isso irá evitar que \"xargs\" trate nomes de arquivo contendo espaços\n"
-"    como múltiplos nomes de arquivo.\n"
+"    Imprime todos os arquivos sob o controle do Mercurial no\n"
+"    diretório de trabalho cujos nomes casem com os padrões\n"
+"    fornecidos.\n"
+"\n"
+"    Por padrão, este comando procura em todos os diretórios no\n"
+"    diretório de trabalho. Para procurar apenas no diretório\n"
+"    atual e subdiretórios, use \"--include .\".\n"
+"\n"
+"    Se não forem passados padrões, este comando imprime os nomes\n"
+"    de todos os arquivos sob o controle do Mercurial no diretório\n"
+"    de trabalho.\n"
+"\n"
+"    Se você quiser passar a saída desse comando para o comando\n"
+"    \"xargs\", use a opção -0 tanto para este comando como para o\n"
+"    \"xargs\". Isso irá evitar que \"xargs\" trate nomes de arquivo\n"
+"    contendo espaços como múltiplos nomes de arquivo.\n"
 "    "
 
 msgid ""
@@ -7619,8 +7417,8 @@
 "    project.\n"
 "\n"
 "    File history is shown without following rename or copy history of\n"
-"    files. Use -f/--follow with a file name to follow history across\n"
-"    renames and copies. --follow without a file name will only show\n"
+"    files. Use -f/--follow with a filename to follow history across\n"
+"    renames and copies. --follow without a filename will only show\n"
 "    ancestors or descendants of the starting revision. --follow-first\n"
 "    only follows the first parent of merge revisions.\n"
 "\n"
@@ -7630,19 +7428,18 @@
 "\n"
 "    See 'hg help dates' for a list of formats valid for -d/--date.\n"
 "\n"
-"    By default this command outputs: changeset id and hash, tags,\n"
-"    non-trivial parents, user, date and time, and a summary for each\n"
-"    commit. When the -v/--verbose switch is used, the list of changed\n"
-"    files and full commit message is shown.\n"
+"    By default this command prints revision number and changeset id,\n"
+"    tags, non-trivial parents, user, date and time, and a summary for\n"
+"    each commit. When the -v/--verbose switch is used, the list of\n"
+"    changed files and full commit message are shown.\n"
 "\n"
 "    NOTE: log -p/--patch may generate unexpected diff output for merge\n"
 "    changesets, as it will only compare the merge changeset against\n"
-"    its first parent. Also, the files: list will only reflect files\n"
-"    that are different from BOTH parents.\n"
-"\n"
-"    "
-msgstr ""
-"mostra o histórico de revisões do repositório todo ou de arquivos\n"
+"    its first parent. Also, only files different from BOTH parents\n"
+"    will appear in files:.\n"
+"    "
+msgstr ""
+"mostra o histórico de revisões do repositório ou de arquivos\n"
 "\n"
 "    Imprime o histórico de revisões dos arquivos especificados ou do\n"
 "    projeto como um todo.\n"
@@ -7661,42 +7458,31 @@
 "    Veja 'hg help dates' para uma lista de formatos válidos para\n"
 "    -d/--date.\n"
 "\n"
-"    Por padrão este comando mostra: número e identificador de\n"
-"    changeset etiquetas, pais não triviais, usuário, data e hora, e\n"
-"    um resumo de cada consolidação. Se a opção -v/--verbose for\n"
+"    Por padrão este comando mostra o número e identificador do\n"
+"    changeset, etiquetas, pais não triviais, usuário, data e hora,\n"
+"    e um resumo de cada consolidação. Se a opção -v/--verbose for\n"
 "    usada, são mostradas a lista de arquivos modificados e a\n"
 "    mensagem de consolidação completa.\n"
 "\n"
 "    NOTA: log -p/--patch pode gerar saídas de diff inesperadas para\n"
 "    mesclagens, pois irá comparar o changeset de mesclagem apenas\n"
-"    com seu primeiro pai. Além disso, a lista de arquivos irá exibir\n"
-"    apenas arquivos diferentes de ambos os pais.\n"
-"\n"
-"    "
-
-msgid ""
-"looks up all renames for a file (up to endrev) the first\n"
-"        time the file is given. It indexes on the changerev and only\n"
-"        parses the manifest if linkrev != changerev.\n"
-"        Returns rename info for fn at changerev rev."
-msgstr ""
-"procura por todas as renomeações de um arquivo (até endrev) da primeira\n"
-"        vez que o arquivo é fornecido. Cria índices do changerev e só\n"
-"        decodifica o manifesto se linkrev != changerev.\n"
-"        Devolve a informação de renomeação para o fn na revisão changerev."
+"    com seu primeiro pai. Além disso, apenas arquivos diferentes de\n"
+"    AMBOS os pais aparecerão na lista de arquivos.\n"
+"\n"
+"    "
 
 msgid ""
 "output the current or given revision of the project manifest\n"
 "\n"
 "    Print a list of version controlled files for the given revision.\n"
 "    If no revision is given, the first parent of the working directory\n"
-"    is used, or the null revision if none is checked out.\n"
-"\n"
-"    With -v flag, print file permissions, symlink and executable bits.\n"
-"    With --debug flag, print file revision hashes.\n"
-"    "
-msgstr ""
-"mostra o manifesto do projeto para a revisão atual ou pedida\n"
+"    is used, or the null revision if no revision is checked out.\n"
+"\n"
+"    With -v, print file permissions, symlink and executable bits.\n"
+"    With --debug, print file revision hashes.\n"
+"    "
+msgstr ""
+"mostra a revisão atual ou pedida do manifesto do projeto\n"
 "\n"
 "    Imprime uma lista de arquivos sob controle de versão para a\n"
 "    revisão pedida. Se a revisão não for especificada, o primeiro pai\n"
@@ -7711,30 +7497,29 @@
 msgid ""
 "merge working directory with another revision\n"
 "\n"
-"    The contents of the current working directory is updated with all\n"
-"    changes made in the requested revision since the last common\n"
-"    predecessor revision.\n"
+"    The current working directory is updated with all changes made in\n"
+"    the requested revision since the last common predecessor revision.\n"
 "\n"
 "    Files that changed between either parent are marked as changed for\n"
 "    the next commit and a commit must be performed before any further\n"
-"    updates are allowed. The next commit has two parents.\n"
+"    updates to the repository are allowed. The next commit will have\n"
+"    two parents.\n"
 "\n"
 "    If no revision is specified, the working directory's parent is a\n"
 "    head revision, and the current branch contains exactly one other\n"
 "    head, the other head is merged with by default. Otherwise, an\n"
-"    explicit revision to merge with must be provided.\n"
+"    explicit revision with which to merge with must be provided.\n"
 "    "
 msgstr ""
 "mescla o diretório de trabalho com outra revisão\n"
 "\n"
-"    O conteúdo do diretório de trabalho é atualizado com todas as\n"
-"    mudanças feitas na revisão pedida desde a última revisão\n"
-"    predecessora comum.\n"
+"    O diretório de trabalho é atualizado com todas as mudanças feitas\n"
+"    na revisão pedida desde a última revisão predecessora comum.\n"
 "\n"
 "    Arquivos que mudarem com relação a qualquer dos pais são\n"
 "    marcados como modificados para a próxima consolidação, e esta\n"
 "    deve ser feita antes que qualquer outra atualização seja\n"
-"    permitida. Ela terá dois pais.\n"
+"    permitida. Essa próxima consolidação terá dois pais.\n"
 "\n"
 "    Se a revisão não for especificada, o pai do diretório de trabalho\n"
 "    for uma revisão cabeça, e o ramo atual contiver exatamente uma\n"
@@ -7749,7 +7534,9 @@
 
 #, python-format
 msgid "branch '%s' has one head - please merge with an explicit rev"
-msgstr "o ramo '%s' tem apenas uma cabeça - por favor mescle com uma revisão específica"
+msgstr ""
+"o ramo '%s' tem apenas uma cabeça - por favor mescle com uma revisão "
+"específica"
 
 msgid "there is nothing to merge"
 msgstr "não há nada para mesclar"
@@ -7758,8 +7545,12 @@
 msgid "%s - use \"hg update\" instead"
 msgstr "%s - use \"hg update\""
 
-msgid "working dir not at a head rev - use \"hg update\" or merge with an explicit rev"
-msgstr "diretório de trabalho não está em uma cabeça - use \"hg update\" ou mescle com uma revisão explícita"
+msgid ""
+"working dir not at a head rev - use \"hg update\" or merge with an explicit "
+"rev"
+msgstr ""
+"diretório de trabalho não está em uma cabeça - use \"hg update\" ou mescle "
+"com uma revisão explícita"
 
 msgid ""
 "show changesets not found in destination\n"
@@ -7785,9 +7576,9 @@
 "\n"
 "    Print the working directory's parent revisions. If a revision is\n"
 "    given via -r/--rev, the parent of that revision will be printed.\n"
-"    If a file argument is given, revision in which the file was last\n"
-"    changed (before the working directory revision or the argument to\n"
-"    --rev if given) is printed.\n"
+"    If a file argument is given, the revision in which the file was\n"
+"    last changed (before the working directory revision or the\n"
+"    argument to --rev if given) is printed.\n"
 "    "
 msgstr ""
 "mostra os pais do diretório de trabalho ou da revisão\n"
@@ -7799,7 +7590,7 @@
 "    trabalho ou ao argumento --rev, se passado).\n"
 "    "
 
-msgid "can only specify an explicit file name"
+msgid "can only specify an explicit filename"
 msgstr "só é possível especificar um nome de arquivo explícito"
 
 #, python-format
@@ -7810,7 +7601,7 @@
 "show aliases for remote repositories\n"
 "\n"
 "    Show definition of symbolic path name NAME. If no name is given,\n"
-"    show definition of available names.\n"
+"    show definition of all available names.\n"
 "\n"
 "    Path names are defined in the [paths] section of /etc/mercurial/hgrc\n"
 "    and $HOME/.hgrc. If run inside a repository, .hg/hgrc is used, too.\n"
@@ -7821,7 +7612,7 @@
 "mostra apelidos de repositórios remotos\n"
 "\n"
 "    Mostra a definição do caminho simbólico NOME. Se nenhum nome for\n"
-"    fornecido, mostra as definições de nomes disponíveis.\n"
+"    fornecido, mostra todas as definições de nomes disponíveis.\n"
 "\n"
 "    Nomes de caminho são definidos na seção [paths] de\n"
 "    /etc/mercurial/hgrc e $HOME/.hgrc. Se executado em um\n"
@@ -7845,14 +7636,17 @@
 msgid ""
 "pull changes from the specified source\n"
 "\n"
-"    Pull changes from a remote repository to the local one.\n"
+"    Pull changes from a remote repository to a local one.\n"
 "\n"
 "    This finds all changes from the repository at the specified path\n"
-"    or URL and adds them to the local repository. By default, this\n"
-"    does not update the copy of the project in the working directory.\n"
-"\n"
-"    Use hg incoming if you want to see what will be added by the next\n"
-"    pull without actually adding the changes to the repository.\n"
+"    or URL and adds them to a local repository (the current one unless\n"
+"    -R is specified). By default, this does not update the copy of the\n"
+"    project in the working directory.\n"
+"\n"
+"    Use hg incoming if you want to see what would have been added by a\n"
+"    pull at the time you issued this command. If you then decide to\n"
+"    added those changes to the repository, you should use pull -r X\n"
+"    where X is the last changeset listed by hg incoming.\n"
 "\n"
 "    If SOURCE is omitted, the 'default' path will be used.\n"
 "    See 'hg help urls' for more information.\n"
@@ -7863,20 +7657,20 @@
 "    Traz mudanças de um repositório remoto para um local.\n"
 "\n"
 "    Este comando localiza todas as mudanças do repositório no\n"
-"    caminho ou URL especificado e as adiciona ao repositório local.\n"
-"    Por padrão, ele não atualiza a cópia do projeto no diretório de\n"
-"    trabalho.\n"
-"\n"
-"    Use hg incoming se você quiser ver o que será adicionado pelo\n"
-"    próximo pull sem realmente adicionar as mudanças ao repositório.\n"
+"    caminho ou URL especificado e as adiciona a um repositório\n"
+"    local (o atual, a não ser que a opção -R seja especificada).\n"
+"    Por padrão, ele não atualiza a cópia do projeto no diretório\n"
+"    de trabalho.\n"
+"\n"
+"    Use hg incoming se você quiser ver o que seria adicionado pelo\n"
+"    comando pull. Se você então decidir adicionar tais mudanças ao\n"
+"    repositório, você deve usar 'pull -r X', onde X é o último\n"
+"    changeset listado por hg incoming.\n"
 "\n"
 "    Se ORIGEM for omitida, o caminho 'default' será usado. Veja\n"
 "    'hg help urls' para mais informações.\n"
 "    "
 
-msgid "Other repository doesn't support revision lookup, so a rev cannot be specified."
-msgstr "O outro repositório não suporta busca por revisão, portanto uma revisão não pode ser especificada."
-
 msgid ""
 "push changes to the specified destination\n"
 "\n"
@@ -7889,58 +7683,40 @@
 "\n"
 "    By default, push will refuse to run if it detects the result would\n"
 "    increase the number of remote heads. This generally indicates the\n"
-"    the client has forgotten to pull and merge before pushing.\n"
+"    user forgot to pull and merge before pushing.\n"
 "\n"
 "    If -r/--rev is used, the named revision and all its ancestors will\n"
 "    be pushed to the remote repository.\n"
 "\n"
-"    Look at the help text for URLs for important details about ssh://\n"
+"    Please see 'hg help urls' for important details about ssh://\n"
 "    URLs. If DESTINATION is omitted, a default path will be used.\n"
-"    See 'hg help urls' for more information.\n"
 "    "
 msgstr ""
 "envia mudanças para o destino especificado\n"
 "\n"
 "    Envia mudanças do repositório local para o destino dado.\n"
 "\n"
-"    Esta é a operação simétrica à pull. Ela move mudanças do\n"
-"    repositório atual para um outro. Se o destino for local, isto\n"
-"    é idêntico a um pull naquele diretório para o atual.\n"
+"    Esta é a operação simétrica à pull. Ela copia mudanças do\n"
+"    repositório atual para um outro. Se o destino for local, esta\n"
+"    operação é idêntica a um pull do diretório atual feito no outro\n"
+"    repositório.\n"
 "\n"
 "    Por padrão, push se recusará a rodar se detectar que o resultado\n"
 "    aumentaria o número de cabeças remotas. Isto geralmente indica\n"
-"    que o cliente esqueceu de trazer e mesclar alterações antes de\n"
-"    enviar.\n"
+"    que o usuário esqueceu de trazer e mesclar as alterações antes de\n"
+"    enviá-las.\n"
 "\n"
 "    Se -r/--rev for usado, a revisão pedida e todos os seus\n"
 "    ancestrais serão enviados para o repositório remoto.\n"
 "\n"
-"    Veja o texto de ajuda sobre URLs para detalhes importantes sobre\n"
+"    Por favor veja 'hg help urls' para detalhes importantes sobre\n"
 "    URLs ssh:// . Se DESTINO for omitido, um caminho padrão será\n"
-"    usado. Veja 'hg help urls' para mais informações.\n"
+"    usado.\n"
 "    "
 
 #, python-format
 msgid "pushing to %s\n"
-msgstr "fazendo um push para %s\n"
-
-# deprecated, no need to translate
-msgid ""
-"raw commit interface (DEPRECATED)\n"
-"\n"
-"    (DEPRECATED)\n"
-"    Lowlevel commit, for use in helper scripts.\n"
-"\n"
-"    This command is not intended to be used by normal users, as it is\n"
-"    primarily useful for importing from other SCMs.\n"
-"\n"
-"    This command is now deprecated and will be removed in a future\n"
-"    release, please use debugsetparents and commit instead.\n"
-"    "
-msgstr ""
-
-msgid "(the rawcommit command is deprecated)\n"
-msgstr "(o comando rawcommit é obsoleto)\n"
+msgstr "enviando revisões para %s\n"
 
 msgid ""
 "roll back an interrupted transaction\n"
@@ -7970,13 +7746,13 @@
 "    entire project history. -A/--after can be used to remove only\n"
 "    files that have already been deleted, -f/--force can be used to\n"
 "    force deletion, and -Af can be used to remove files from the next\n"
-"    revision without deleting them.\n"
+"    revision without deleting them from the working directory.\n"
 "\n"
 "    The following table details the behavior of remove for different\n"
 "    file states (columns) and option combinations (rows). The file\n"
-"    states are Added, Clean, Modified and Missing (as reported by hg\n"
-"    status). The actions are Warn, Remove (from branch) and Delete\n"
-"    (from disk).\n"
+"    states are Added [A], Clean [C], Modified [M] and Missing [!]\n"
+"    (as reported by hg status). The actions are Warn, Remove (from\n"
+"    branch) and Delete (from disk).\n"
 "\n"
 "           A  C  M  !\n"
 "    none   W  RD W  R\n"
@@ -8001,10 +7777,10 @@
 "\n"
 "    A seguinte tabela detalha o comportamento do comando remove para\n"
 "    diferentes estados dos arquivos (colunas) e combinações de opções\n"
-"    (linhas). Os estados dos arquivos são A (adicionados),\n"
-"    C (limpos), M (modificados ou faltando), conforme informado por\n"
-"    hg status. As ações são W (aviso), R (remove do ramo) e D (remove\n"
-"    do diretório de trabalho).\n"
+"    (linhas). Os estados dos arquivos são: adicionados [A],\n"
+"    limpos [C], modificados [M] ou faltando [!] (conforme informado\n"
+"    por hg status). As ações são W (aviso), R (remove do ramo) e D\n"
+"    (remove do diretório de trabalho).\n"
 "\n"
 "           A  C  M  !\n"
 "    nada   W  RD W  R\n"
@@ -8017,8 +7793,9 @@
 "    hg revert.\n"
 "    "
 
-msgid "no files specified"
-msgstr "nenhum arquivo especificado"
+#, python-format
+msgid "not removing %s: file is untracked\n"
+msgstr "arquivo %s não removido: arquivo não rastreado\n"
 
 #, python-format
 msgid "not removing %s: file %s (use -f to force removal)\n"
@@ -8073,9 +7850,9 @@
 "    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"
-"    This command will also allow listing resolved files and manually\n"
-"    marking and unmarking files as resolved. All files must be marked\n"
-"    as resolved before the new commits are permitted.\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"
 "\n"
 "    The codes used to show the status of files are:\n"
 "    U = unresolved\n"
@@ -8094,10 +7871,11 @@
 "    resolve. A opção -m/--mark deve ser usada para marcar o arquivo\n"
 "    como resolvido.\n"
 "\n"
-"    Este comando também permite listar arquivos resolvidos e marcar\n"
-"    manualmente arquivos como resolvidos ou não. Todos os arquivos\n"
-"    devem ser marcados como resolvidos para que novas consolidações\n"
-"    sejam aceitas.\n"
+"    Este comando também permite listar arquivos resolvidos e\n"
+"    manualmente marcar arquivos como resolvidos ou não. Todos os\n"
+"    arquivos devem ser marcados como resolvidos para que a\n"
+"    consolidação seja aceita.\n"
+"\n"
 "    Os códigos usados para mostrar o estado dos arquivos são:\n"
 "    U = não resolvido\n"
 "    R = resolvido\n"
@@ -8110,13 +7888,15 @@
 msgstr "não é possível especificar --all e padrões"
 
 msgid "no files or directories specified; use --all to remerge all files"
-msgstr "nenhum arquivo ou diretório especificado; use --all para refazer a mesclagem de todos os arquivos"
+msgstr ""
+"nenhum arquivo ou diretório especificado; use --all para refazer a mesclagem "
+"de todos os arquivos"
 
 msgid ""
 "restore individual files or directories to an earlier state\n"
 "\n"
-"    (use update -r to check out earlier revisions, revert does not\n"
-"    change the working directory parents)\n"
+"    (Use update -r to check out earlier revisions, revert does not\n"
+"    change the working directory parents.)\n"
 "\n"
 "    With no revision specified, revert the named files or directories\n"
 "    to the contents they had in the parent of the working directory.\n"
@@ -8148,8 +7928,8 @@
 msgstr ""
 "restaura arquivos ou diretórios para um estado anterior\n"
 "\n"
-"    (use update -r para obter revisões anteriores, revert não altera\n"
-"    os pais do diretório de trabalho)\n"
+"    (Use update -r para obter revisões anteriores, revert não altera\n"
+"    os pais do diretório de trabalho.)\n"
 "\n"
 "    Se não for pedida uma revisão, reverte os arquivos ou diretórios\n"
 "    pedidos para o conteúdo que eles possuíam no pai do diretório de\n"
@@ -8161,6 +7941,7 @@
 "    Com a opção -r/--rev, reverte os arquivos ou diretórios dados\n"
 "    para seus conteúdos na revisão pedida. Isso pode ser útil para\n"
 "    \"desfazer\" algumas ou todas as mudanças anteriores.\n"
+"\n"
 "    Veja 'hg help dates' para uma lista de formatos válidos para\n"
 "    -d/--date.\n"
 "\n"
@@ -8185,7 +7966,9 @@
 msgstr "você não pode especificar uma revisão e uma data"
 
 msgid "no files or directories specified; use --all to revert the whole repo"
-msgstr "nenhum arquivo ou diretório especificado; use --all para reverter o repositório todo"
+msgstr ""
+"nenhum arquivo ou diretório especificado; use --all para reverter o "
+"repositório todo"
 
 #, python-format
 msgid "forgetting %s\n"
@@ -8217,7 +8000,8 @@
 "    This command should be used with care. There is only one level of\n"
 "    rollback, and there is no way to undo a rollback. It will also\n"
 "    restore the dirstate at the time of the last transaction, losing\n"
-"    any dirstate changes since that time.\n"
+"    any dirstate changes since that time. This command does not alter\n"
+"    the working directory.\n"
 "\n"
 "    Transactions are used to encapsulate the effects of all commands\n"
 "    that create new changesets or propagate existing changesets into a\n"
@@ -8243,7 +8027,8 @@
 "    Este comando deve ser usado com cuidado. Há apenas um nível de\n"
 "    rollback, e não há maneira de desfazê-lo. Ele irá também restaurar\n"
 "    o dirstate ao do momento da última transação, descartando qualquer\n"
-"    mudança de dirstate desde aquele momento.\n"
+"    mudança de dirstate desde aquele momento. Este comando não altera\n"
+"    o diretório de trabalho.\n"
 "\n"
 "    Transações são usadas para encapsular os efeitos de todos os comandos\n"
 "    que criam novos changesets ou propagam changesets existentes para o\n"
@@ -8257,7 +8042,7 @@
 "      unbundle\n"
 "\n"
 "    Este comando não deve ser usado em repositórios públicos. Uma vez que\n"
-"    as mudanças sejam visíveis para serem obtidas por outros usuários, um\n"
+"    as mudanças sejam visíveis para serem trazidas por outros usuários, um\n"
 "    desfazimento local se torna inefetivo (alguém pode já ter feito um pull\n"
 "    das mudanças). Além disso, erros de concorrência são possíveis para\n"
 "    leitores do repositório: por exemplo, um pull em andamento pode falhar\n"
@@ -8281,15 +8066,17 @@
 "    Start a local HTTP repository browser and pull server.\n"
 "\n"
 "    By default, the server logs accesses to stdout and errors to\n"
-"    stderr. Use the -A and -E options to log to files.\n"
+"    stderr. Use the -A/--accesslog and -E/--errorlog options to log to\n"
+"    files.\n"
 "    "
 msgstr ""
 "exporta o repositório por HTTP\n"
 "\n"
-"    Inicial um visualizador e servidor de pull via HTTP.\n"
+"    Inicia um visualizador e servidor de pull local via HTTP.\n"
 "\n"
 "    Por padrão, o servidor faz logs de acesso para stdout e erros para\n"
-"    stderr. Use as opções -A e -E para gravar o log para arquivos.\n"
+"    stderr. Use as opções -A/--accesslog e -E/--errorlog para gravar o\n"
+"    log em arquivos.\n"
 "    "
 
 #, python-format
@@ -8301,10 +8088,10 @@
 "\n"
 "    Show status of files in the repository. If names are given, only\n"
 "    files that match are shown. Files that are clean or ignored or\n"
-"    source of a copy/move operation, are not listed unless -c/--clean,\n"
-"    -i/--ignored, -C/--copies or -A/--all is given. Unless options\n"
-"    described with \"show only ...\" are given, the options -mardu are\n"
-"    used.\n"
+"    the source of a copy/move operation, are not listed unless\n"
+"    -c/--clean, -i/--ignored, -C/--copies or -A/--all are given.\n"
+"    Unless options described with \"show only ...\" are given, the\n"
+"    options -mardu are used.\n"
 "\n"
 "    Option -q/--quiet hides untracked (unknown and ignored) files\n"
 "    unless explicitly requested with -u/--unknown or -i/--ignored.\n"
@@ -8315,7 +8102,8 @@
 "    to one merge parent.\n"
 "\n"
 "    If one revision is given, it is used as the base revision.\n"
-"    If two revisions are given, the difference between them is shown.\n"
+"    If two revisions are given, the differences between them are\n"
+"    shown.\n"
 "\n"
 "    The codes used to show the status of files are:\n"
 "    M = modified\n"
@@ -8325,19 +8113,18 @@
 "    ! = missing (deleted by non-hg command, but still tracked)\n"
 "    ? = not tracked\n"
 "    I = ignored\n"
-"      = the previous added file was copied from here\n"
+"      = origin of the previous file listed as A (added)\n"
 "    "
 msgstr ""
 "exibe arquivos alterados no diretório de trabalho\n"
 "\n"
 "    Exibe o estado dos arquivos no repositório. Se nomes forem\n"
 "    fornecidos, apenas arquivos que casarem serão exibidos. Arquivos\n"
-"    que estejam sem modificações, ignorados ou origens de uma cópia\n"
-"    ou renomeação não são listados, a não ser que -c/--clean (sem\n"
-"    modificações), -i/--ignored (ignorados), -C/--copies (cópias) ou\n"
-"    -A/-all (todos) seja passado. A não ser que as opções descritas\n"
-"    como \"mostra apenas ...\" sejam passadas, as opções -mardu\n"
-"    serão usadas.\n"
+"    sem modificações, ignorados ou origens de uma cópia ou renomeação\n"
+"    não são listados, a não ser que -c/--clean (sem modificações),\n"
+"    -i/--ignored (ignorados), -C/--copies (cópias) ou -A/-all (todos)\n"
+"    sejam passados. A não ser que as opções descritas como \"mostra\n"
+"    apenas ...\" sejam passadas, as opções -mardu serão usadas.\n"
 "\n"
 "    A opção -q/--quiet esconde arquivos não rastreados (desconhecidos\n"
 "    ou ignorados) a não ser que estes sejam pedidos explicitamente\n"
@@ -8349,8 +8136,8 @@
 "    comando diff informa apenas mudanças relativas a um pai da\n"
 "    mesclagem.\n"
 "\n"
-"    Se uma revisão for dada, é usada como revisão base. Se duas\n"
-"    revisões forem dadas, será mostrada a diferença entre elas.\n"
+"    Se uma revisão for dada, será usada como revisão base. Se duas\n"
+"    revisões forem dadas, serão mostradas as diferenças entre elas.\n"
 "\n"
 "    Os códigos usados para exibir o estado dos arquivos são:\n"
 "    M = modificado\n"
@@ -8361,7 +8148,7 @@
 "        rastreado pelo Mercurial)\n"
 "    ? = não rastreado\n"
 "    I = ignorado\n"
-"      = o arquivo adicionado anteriormente foi copiado deste\n"
+"      = origem do arquivo anterior listado como A (adicionado)\n"
 "    "
 
 msgid ""
@@ -8387,7 +8174,7 @@
 msgstr ""
 "adiciona uma ou mais etiquetas à revisão atual ou pedida\n"
 "\n"
-"    Nomeia uma revisão em particular usando <nome>.\n"
+"    Nomeia uma determinada revisão usando <nome>.\n"
 "\n"
 "    Etiquetas são usadas para nomear determinadas revisões do\n"
 "    repositório e são muito úteis para comparar diferentes revisões,\n"
@@ -8452,7 +8239,7 @@
 msgstr ""
 "lista as etiquetas do repositório\n"
 "\n"
-"    Isto lista tanto etiquetas regulares como locais. Se a opção\n"
+"    Lista tanto etiquetas regulares como locais. Se a opção\n"
 "    -v/--verbose for usada, uma terceira coluna \"local\" é impressa\n"
 "    para etiquetas locais.\n"
 "    "
@@ -8460,9 +8247,9 @@
 msgid ""
 "show the tip revision\n"
 "\n"
-"    The tip revision (usually just called the tip) is the most\n"
-"    recently added changeset in the repository, the most recently\n"
-"    changed head.\n"
+"    The tip revision (usually just called the tip) is the changeset\n"
+"    most recently added to the repository (and therefore the most\n"
+"    recently changed head).\n"
 "\n"
 "    If you have just made a commit, that commit will be the tip. If\n"
 "    you have just pulled changes from another repository, the tip of\n"
@@ -8473,8 +8260,8 @@
 "exibe a revisão mais recente\n"
 "\n"
 "    A revisão tip (tipicamente chamada apenas de tip) é a revisão\n"
-"    adicionada mais recentemente ao repositório, a cabeça modificada\n"
-"    mais recentemente.\n"
+"    adicionada mais recentemente ao repositório (e portanto a cabeça\n"
+"    modificada mais recentemente.\n"
 "\n"
 "    Se você acabou de fazer uma consolidação, essa consolidação será\n"
 "    a tip. Se você acabou de trazer revisões de outro repositório, a\n"
@@ -8510,16 +8297,17 @@
 "    the working directory will additionally be switched to that\n"
 "    branch.\n"
 "\n"
-"    When there are uncommitted changes, use option -C to discard them,\n"
-"    forcibly replacing the state of the working directory with the\n"
-"    requested revision.\n"
-"\n"
-"    When there are uncommitted changes and option -C is not used, and\n"
-"    the parent revision and requested revision are on the same branch,\n"
-"    and one of them is an ancestor of the other, then the new working\n"
-"    directory will contain the requested revision merged with the\n"
-"    uncommitted changes. Otherwise, the update will fail with a\n"
-"    suggestion to use 'merge' or 'update -C' instead.\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"
@@ -8539,16 +8327,17 @@
 "    repositório. Quando a revisão pedida estiver em um outro ramo, o\n"
 "    diretório de trabalho também será mudado para tal ramo.\n"
 "\n"
-"    Se houver mudanças não consolidadas, use a opção -C para\n"
+"    Se houver mudanças não consolidadas, use a opção -C/--clean para\n"
 "    descartá-las, forçando a substituição do estado do diretório de\n"
-"    trabalho pela revisão pedida.\n"
-"\n"
-"    Se houver mudanças não consolidadas e a opção -C não for usada,\n"
-"    a revisão pai e a revisão pedida estiverem no mesmo ramo, e uma\n"
-"    delas for um ancestral da outra, o novo diretório de trabalho irá\n"
-"    conter a revisão pedida mesclada às mudanças não consolidadas. De\n"
-"    outra forma, a atualização irá falhar exibindo uma sugestão para\n"
-"    usar o comando 'merge' ou 'update -C'.\n"
+"    trabalho pela revisão pedida. Alternativamente, use -c/--check\n"
+"    para abortar.\n"
+"\n"
+"    Se houver mudanças não consolidadas, a opção -C/--clean não for\n"
+"    usada, a revisão pai e a revisão pedida estiverem no mesmo ramo e\n"
+"    uma delas for ancestral da outra, o novo diretório de trabalho\n"
+"    irá conter a revisão pedida mesclada às mudanças não consolidadas.\n"
+"    Caso contrário, a atualização irá falhar exibindo uma sugestão\n"
+"    para usar o comando 'merge' ou 'update -C'.\n"
 "\n"
 "    Se você quiser atualizar apenas um arquivo para uma revisão\n"
 "    anterior, use o comando 'revert'.\n"
@@ -8557,6 +8346,9 @@
 "    -d/--date.\n"
 "    "
 
+msgid "uncommitted local changes"
+msgstr "alterações locais pendentes"
+
 msgid ""
 "verify the integrity of the repository\n"
 "\n"
@@ -8591,6 +8383,11 @@
 "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> e outros\n"
+"Este software é livre; veja os fontes para condições de cópia. Não\n"
+"há garantias, nem mesmo de adequação para qualquer propósito em\n"
+"particular.\n"
 
 msgid "repository root directory or symbolic path name"
 msgstr "diretório raiz do repositório ou nome de caminho simbólico"
@@ -8656,13 +8453,13 @@
 msgstr "usa <texto> como mensagem de consolidação"
 
 msgid "read commit message from <file>"
-msgstr "lê a mensagem de consolidação do arquivo"
+msgstr "lê a mensagem de consolidação de um arquivo"
 
 msgid "record datecode as commit date"
 msgstr "grava código de data como data de consolidação"
 
-msgid "record user as committer"
-msgstr "grava o usuário como autor da consolidação"
+msgid "record the specified user as committer"
+msgstr "grava o usuário pedido como autor da consolidação"
 
 msgid "display using template map file"
 msgstr "exibe usando arquivo de mapeamento de modelo"
@@ -8695,7 +8492,7 @@
 msgstr "número de linhas de contexto a serem mostradas"
 
 msgid "guess renamed files by similarity (0<=s<=100)"
-msgstr "assume arquivos renomeados por similaridade (0<=s<=100)"
+msgstr "infere arquivos renomeados por similaridade (0<=s<=100)"
 
 msgid "[OPTION]... [FILE]..."
 msgstr "[OPÇÃO]... [ARQUIVO]..."
@@ -8737,7 +8534,7 @@
 msgstr "tipo de distribuição a ser criada"
 
 msgid "[OPTION]... DEST"
-msgstr "[OPCÃO]... DEST"
+msgstr "[OPÇÃO]... DEST"
 
 msgid "merge with old dirstate parent after backout"
 msgstr "mesclar com pai do dirstate anterior após o backout"
@@ -8827,7 +8624,9 @@
 msgstr "[OPÇÃO]... ORIGEM [DEST]"
 
 msgid "mark new/missing files as added/removed before committing"
-msgstr "marca arquivos novos/ausentes como adicionados/removidos antes da consolidação"
+msgstr ""
+"marca arquivos novos/ausentes como adicionados/removidos antes da "
+"consolidação"
 
 msgid "mark a branch as closed, hiding it from the branch list"
 msgstr "marca um ramo como fechado, escondendo-o da lista de ramos"
@@ -8868,12 +8667,6 @@
 msgid "FILE"
 msgstr "ARQUIVO"
 
-msgid "parent"
-msgstr "pai"
-
-msgid "file list"
-msgstr "lista de arquivos"
-
 msgid "revision to rebuild to"
 msgstr "revisão para a qual reconstruir"
 
@@ -8895,6 +8688,9 @@
 msgid "[OPTION]..."
 msgstr "[OPÇÃO]..."
 
+msgid "revision to check"
+msgstr "revisão para verificar"
+
 msgid "[OPTION]... [-r REV1 [-r REV2]] [FILE]..."
 msgstr "[OPÇÃO]... [-r REV1 [-r REV2]] [ARQUIVO]..."
 
@@ -8911,7 +8707,9 @@
 msgstr "imprime todas as revisões que casarem"
 
 msgid "follow changeset history, or file history across copies and renames"
-msgstr "acompanha histórico de changeset, ou histórico de arquivo através de cópias e renomeações"
+msgstr ""
+"acompanha histórico de changeset, ou histórico de arquivo através de cópias "
+"e renomeações"
 
 msgid "ignore case when matching"
 msgstr "ignora maiúsculas/minúsculas ao casar"
@@ -8934,8 +8732,11 @@
 msgid "show only the active heads from open branches"
 msgstr "mostra apenas as cabeças ativas de ramos abertos"
 
-msgid "[-r REV] [REV]..."
-msgstr "[-r REV] [REV]..."
+msgid "show normal and closed heads"
+msgstr "mostra cabeças normais e fechadas"
+
+msgid "[-r STARTREV] [REV]..."
+msgstr "[-r REVINICIAL] [REV]..."
 
 msgid "[TOPIC]"
 msgstr "[TÓPICO]"
@@ -8958,8 +8759,12 @@
 msgid "[-nibt] [-r REV] [SOURCE]"
 msgstr "[-nibt] [-r REV] [ORIGEM]"
 
-msgid "directory strip option for patch. This has the same meaning as the corresponding patch option"
-msgstr "opção de remoção de diretório para o patch. Tem o mesmo significado que a opção correspondente do utilitário patch"
+msgid ""
+"directory strip option for patch. This has the same meaning as the "
+"corresponding patch option"
+msgstr ""
+"opção de remoção de diretório para o patch. Tem o mesmo significado da opção "
+"correspondente do utilitário patch"
 
 msgid "base path"
 msgstr "caminho base"
@@ -9048,6 +8853,9 @@
 msgid "revision to merge"
 msgstr "revisão a ser mesclada"
 
+msgid "review revisions to merge (no merge is performed)"
+msgstr "avalia revisões a serem mescladas (a mesclagem não é executada)"
+
 msgid "[-f] [[-r] REV]"
 msgstr "[-f] [[-r] REV]"
 
@@ -9060,8 +8868,8 @@
 msgid "show parents from the specified revision"
 msgstr "mostra pais da revisão especificada"
 
-msgid "hg parents [-r REV] [FILE]"
-msgstr "hg parents [-r REV] [ARQUIVO]"
+msgid "[-r REV] [FILE]"
+msgstr "[-r REV] [ARQUIVO]"
 
 msgid "[NAME]"
 msgstr "[NOME]"
@@ -9082,7 +8890,7 @@
 msgstr "grava remoção de arquivos faltando"
 
 msgid "remove (and delete) file even if added or modified"
-msgstr "remove (e apaga) o arquivo mesmo se foi adicopnado ou modificado"
+msgstr "remove (e apaga) o arquivo mesmo se foi adicionado ou modificado"
 
 msgid "record a rename that has already occurred"
 msgstr "grava uma renomeação que já ocorreu"
@@ -9124,7 +8932,7 @@
 msgstr "nome do arquivo de log de erros a ser escrito"
 
 msgid "port to listen on (default: 8000)"
-msgstr "porta a ser escutada (padrão: 8000)"
+msgstr "porta onde escutar (padrão: 8000)"
 
 msgid "address to listen on (default: all interfaces)"
 msgstr "endereço onde escutar (padrão: todas as interfaces)"
@@ -9136,7 +8944,9 @@
 msgstr "nome a ser exibido em páginas web (padrão: diretório de trabalho)"
 
 msgid "name of the webdir config file (serve more than one repository)"
-msgstr "nome do arquivo de configuração do webdir (para servir mais de um repositório)"
+msgstr ""
+"nome do arquivo de configuração do webdir (para servir mais de um "
+"repositório)"
 
 msgid "for remote clients"
 msgstr "para clientes remotos"
@@ -9211,7 +9021,7 @@
 msgstr "[-p]"
 
 msgid "update to new tip if changesets were unbundled"
-msgstr "atualiza para nova tip se os changesets forem extraídos do bundle"
+msgstr "atualiza para nova tip se changesets forem extraídos do bundle"
 
 msgid "[-u] FILE..."
 msgstr "[-u] ARQUIVO..."
@@ -9219,9 +9029,16 @@
 msgid "overwrite locally modified files (no backup)"
 msgstr "sobrescreve arquivos locais modificados (sem backup)"
 
+msgid "check for uncommitted changes"
+msgstr "verifica mudanças ainda não consolidadas"
+
 msgid "[-C] [-d DATE] [[-r] REV]"
 msgstr "[-C] [-d DATA] [[-r] REV]"
 
+#, python-format
+msgid "config error at %s:%d: '%s'"
+msgstr "erro de configuração em %s:%d: '%s'"
+
 msgid "not found in manifest"
 msgstr "não encontrado no manifesto"
 
@@ -9249,11 +9066,7 @@
 "   %s\n"
 
 msgid "  all copies found (* = to merge, ! = divergent):\n"
-msgstr "  todas as cópias encontradas (* = para mesclar, ! = diferentes):\n"
-
-#, python-format
-msgid "   %s -> %s %s\n"
-msgstr "   %s -> %s %s\n"
+msgstr "  todas as cópias encontradas (* = para mesclar, ! = divergente):\n"
 
 msgid "  checking for directory renames\n"
 msgstr "  procurando por diretórios renomeados\n"
@@ -9264,7 +9077,10 @@
 
 #, python-format
 msgid "  file %s -> %s\n"
-msgstr "  arquivo  %s -> %s\n"
+msgstr "  arquivo %s -> %s\n"
+
+msgid "working directory state appears damaged!"
+msgstr "estado do diretório de trabalho parece danificado!"
 
 #, python-format
 msgid "'\\n' and '\\r' disallowed in filenames: %r"
@@ -9282,6 +9098,9 @@
 msgid "not in dirstate: %s\n"
 msgstr "não em dirstate: %s\n"
 
+msgid "unknown"
+msgstr "desconhecido"
+
 msgid "character device"
 msgstr "dispositivo de caracteres"
 
@@ -9298,22 +9117,26 @@
 msgstr "diretório"
 
 #, python-format
-msgid "%s: unsupported file type (type is %s)\n"
-msgstr "%s: tipo de arquivo não suportado (o tipo é %s)\n"
+msgid "unsupported file type (type is %s)"
+msgstr "tipo de arquivo não suportado (o tipo é %s)"
 
 #, python-format
 msgid "abort: %s\n"
-msgstr "abortar: %s\n"
+msgstr "abortado: %s\n"
 
 #, python-format
 msgid ""
 "hg: command '%s' is ambiguous:\n"
 "    %s\n"
 msgstr ""
-"hg: o comando '%s' é ambiguo:\n"
+"hg: o comando '%s' é ambíguo:\n"
 "    %s\n"
 
 #, python-format
+msgid "hg: %s\n"
+msgstr "hg: %s\n"
+
+#, python-format
 msgid "timed out waiting for lock held by %s"
 msgstr "tempo limite excedido esperando por trava de %s"
 
@@ -9323,27 +9146,23 @@
 
 #, python-format
 msgid "abort: %s: %s\n"
-msgstr "abortar: %s: %s\n"
+msgstr "abortado: %s: %s\n"
 
 #, python-format
 msgid "abort: could not lock %s: %s\n"
-msgstr "abortar: impossível travar %s: %s\n"
+msgstr "abortado: impossível travar %s: %s\n"
 
 #, python-format
 msgid "hg %s: %s\n"
 msgstr "hg %s: %s\n"
 
 #, python-format
-msgid "hg: %s\n"
-msgstr "hg: %s\n"
-
-#, python-format
 msgid "abort: %s!\n"
-msgstr "abortar: %s!\n"
+msgstr "abortado: %s!\n"
 
 #, python-format
 msgid "abort: %s"
-msgstr "abortar: %s"
+msgstr "abortado: %s"
 
 msgid " empty string\n"
 msgstr " string vazia\n"
@@ -9360,7 +9179,7 @@
 msgstr "abortado: não foi possível importar o módulo %s!\n"
 
 msgid "(did you forget to compile extensions?)\n"
-msgstr "(você esqueceu de compilar a extensão?)\n"
+msgstr "(você esqueceu de compilar extensões?)\n"
 
 msgid "(is your Python install correct?)\n"
 msgstr "(Sua instalação do Python está correta?)\n"
@@ -9388,8 +9207,8 @@
 msgid "** unknown exception encountered, details follow\n"
 msgstr "** exceção desconhecida encontrada, segue detalhes\n"
 
-msgid "** report bug details to http://www.selenic.com/mercurial/bts\n"
-msgstr "** reporte detalhes de problemas para http://www.selenic.com/mercurial/bts\n"
+msgid "** report bug details to http://mercurial.selenic.com/bts/\n"
+msgstr "** reporte detalhes de problemas para http://mercurial.selenic.com/bts/\n"
 
 msgid "** or mercurial@selenic.com\n"
 msgstr "** ou mercurial@selenic.com\n"
@@ -9400,7 +9219,23 @@
 
 #, python-format
 msgid "** Extensions loaded: %s\n"
-msgstr "** Extenções carregadas: %s\n"
+msgstr "** Extensões carregadas: %s\n"
+
+#, python-format
+msgid "no definition for alias '%s'\n"
+msgstr "nenhuma definição para o apelido '%s'\n"
+
+#, python-format
+msgid "alias '%s' resolves to unknown command '%s'\n"
+msgstr "apelido '%s' indica comando desconhecido '%s'\n"
+
+#, python-format
+msgid "alias '%s' resolves to ambiguous command '%s'\n"
+msgstr "apelido '%s' indica comando ambíguo '%s'\n"
+
+#, python-format
+msgid "alias '%s' shadows command\n"
+msgstr "apelido '%s' oculta o comando\n"
 
 #, python-format
 msgid "malformed --config option: %s"
@@ -9416,8 +9251,12 @@
 msgid "Option --cwd may not be abbreviated!"
 msgstr "A opção --cwd não pode ser abreviada!"
 
-msgid "Option -R has to be separated from other options (i.e. not -qR) and --repository may only be abbreviated as --repo!"
-msgstr "A opção -R deve ser separada de outras opções (por exemplo, não usar -qR) e --repository pode ser abreviada apenas como --repo!"
+msgid ""
+"Option -R has to be separated from other options (e.g. not -qR) and --"
+"repository may only be abbreviated as --repo!"
+msgstr ""
+"A opção -R deve ser separada de outras opções (por exemplo, não usar -qR) e "
+"--repository pode ser abreviada apenas como --repo!"
 
 #, python-format
 msgid "Time: real %.3f secs (user %.3f+%.3f sys %.3f+%.3f)\n"
@@ -9434,8 +9273,12 @@
 msgid "unrecognized profiling format '%s' - Ignored\n"
 msgstr "formato de profiling '%s' não reconhecido - Ignorado\n"
 
-msgid "lsprof not available - install from http://codespeak.net/svn/user/arigo/hack/misc/lsprof/"
-msgstr "lsprof não disponível - instale de http://codespeak.net/svn/user/arigo/hack/misc/lsprof/"
+msgid ""
+"lsprof not available - install from http://codespeak.net/svn/user/arigo/hack/"
+"misc/lsprof/"
+msgstr ""
+"lsprof não disponível - instale de http://codespeak.net/svn/user/arigo/hack/"
+"misc/lsprof/"
 
 #, python-format
 msgid "*** failed to import extension %s from %s: %s\n"
@@ -9473,8 +9316,11 @@
 " nenhuma ferramenta encontrada para mesclar %s\n"
 "manter (l)ocal ou usar (o)utro?"
 
-msgid "[lo]"
-msgstr "[lo]"
+msgid "&Local"
+msgstr "&Local"
+
+msgid "&Other"
+msgstr "&Outra"
 
 msgid "l"
 msgstr "l"
@@ -9502,8 +9348,11 @@
 " arquivo de saída %s parece não ter modificações\n"
 "a mesclagem teve sucesso (sn)?"
 
-msgid "[yn]"
-msgstr "[sn]"
+msgid "&No"
+msgstr "(&N) não"
+
+msgid "&Yes"
+msgstr "(&Y) sim"
 
 msgid "n"
 msgstr "n"
@@ -9520,6 +9369,85 @@
 msgid "unknown bisect kind %s"
 msgstr "tipo desconhecido de bisect %s"
 
+msgid ""
+"\n"
+"    Mercurial has the ability to add new features through the use of\n"
+"    extensions. Extensions may add new commands, add options to\n"
+"    existing commands, change the default behavior of commands, or\n"
+"    implement hooks.\n"
+"\n"
+"    Extensions are not loaded by default for a variety of reasons:\n"
+"    they can increase startup overhead; they may be meant for\n"
+"    advanced usage only; they may provide potentially dangerous\n"
+"    abilities (such as letting you destroy or modify history); they\n"
+"    might not be ready for prime time; or they may alter some\n"
+"    usual behaviors of stock Mercurial. It is thus up to the user to\n"
+"    activate extensions as needed.\n"
+"\n"
+"    To enable the \"foo\" extension, either shipped with Mercurial\n"
+"    or in the Python search path, create an entry for it in your\n"
+"    hgrc, like this:\n"
+"\n"
+"      [extensions]\n"
+"      foo =\n"
+"\n"
+"    You may also specify the full path to an extension:\n"
+"\n"
+"      [extensions]\n"
+"      myfeature = ~/.hgext/myfeature.py\n"
+"\n"
+"    To explicitly disable an extension enabled in an hgrc of broader\n"
+"    scope, prepend its path with !:\n"
+"\n"
+"      [extensions]\n"
+"      # disabling extension bar residing in /path/to/extension/bar.py\n"
+"      hgext.bar = !/path/to/extension/bar.py\n"
+"      # ditto, but no path was supplied for extension baz\n"
+"      hgext.baz = !\n"
+"    "
+msgstr ""
+"\n"
+"    O Mercurial possui um mecanismo para adicionar novas\n"
+"    funcionalidades através do uso de extensões. Extensões podem\n"
+"    adicionar novos comandos, adicionar novas opções a comandos\n"
+"    existentes ou implementar ganchos.\n"
+"\n"
+"    Extensões não são carregadas por padrão por diversas razões:\n"
+"    elas podem aumentar o tempo de início ou execução; podem ser\n"
+"    destinadas apenas a uso avançado; podem fornecer funcionalidade\n"
+"    potencialmente perigosa (por exemplo, modificar ou destruir o\n"
+"    histórico); podem ainda não estar prontas para uso geral; ou\n"
+"    podem alterar o comportamento padrão do Mercurial. Cabe ao\n"
+"    usuário ativar extensões como desejar.\n"
+"\n"
+"    Para habilitar a extensão \"foo\", tanto se for distribuída com\n"
+"    o Mercurial como estiver no caminho de busca do Python, crie uma\n"
+"    entrada para ela em seu hgrc, da seguinte forma:\n"
+"\n"
+"      [extensions]\n"
+"      foo =\n"
+"\n"
+"    Você também pode especificar o caminho completo para uma\n"
+"    extensão:\n"
+"\n"
+"      [extensions]\n"
+"      myfeature = ~/.hgext/myfeature.py\n"
+"\n"
+"    Para desabilitar explicitamente uma extensão habilitada em um\n"
+"    hgrc de escopo mais amplo, prefixe seu caminho com !:\n"
+"\n"
+"      [extensions]\n"
+"      # desabilita a extensão bar localizada em\n"
+"      # /caminho/para/extensao/bar.py\n"
+"      hgext.bar = !/caminho/para/extensao/bar.py\n"
+"      # o mesmo, se um caminho não foi fornecido para a\n"
+"      # extensão baz\n"
+"      hgext.baz = !\n"
+"    "
+
+msgid "disabled extensions:"
+msgstr "extensões desabilitadas:"
+
 msgid "Date Formats"
 msgstr "Formatos de datas"
 
@@ -9565,11 +9493,11 @@
 "\n"
 "    Alguns comandos permitem ao usuário especificar uma data:\n"
 "    * backout, commit, import, tag: a data de consolidação.\n"
-"    * log, revert, update: Selecionar revisão(ões) por data.\n"
+"    * log, revert, update: Selecionar revisões por data.\n"
 "\n"
 "    Muitos formatos de data são válidos. Eis alguns exemplos:\n"
 "\n"
-"    \"Wed Dec 6 13:18:29 2006\" (assumido fuso horálio local)\n"
+"    \"Wed Dec 6 13:18:29 2006\" (assumido fuso horário local)\n"
 "    \"Dec 6 13:18 -0600\" (ano atual, defasagem de horário local\n"
 "    fornecida)\n"
 "    \"Dec 6 13:18 UTC\" (UTC e GMT são apelidos para +0000)\n"
@@ -9790,13 +9718,13 @@
 "HG::\n"
 "    Caminho para o executável 'hg', automaticamente passado na\n"
 "    execução de ganchos, extensões ou ferramentas externas. Se não\n"
-"    definido ou vazio, um executável executable chamado 'hg' (com a\n"
-"    extensão com/exe/bat/cmd no Windows) é procurado.\n"
+"    definido ou vazio, um executável chamado 'hg' (com a extensão\n"
+"    com/exe/bat/cmd no Windows) é procurado.\n"
 "\n"
 "HGEDITOR::\n"
 "    Este é o nome do editor usado em consolidações. Veja EDITOR.\n"
 "\n"
-"    (deprecated, use .hgrc)\n"
+"    (obsoleto, use .hgrc)\n"
 "\n"
 "HGENCODING::\n"
 "    É usado no lugar da configuração padrão de locale detectada\n"
@@ -9823,8 +9751,8 @@
 "\n"
 "HGRCPATH::\n"
 "    Uma lista de arquivos ou diretórios onde procurar arquivos hgrc.\n"
-"    O separador de ítens é \":\" em Unix, \";\" no Windows. Se\n"
-"    HGRCPATH não estiver definido, o caminho de busca default da\n"
+"    O separador de itens é \":\" em Unix, \";\" no Windows. Se\n"
+"    HGRCPATH não estiver definido, o caminho de busca padrão da\n"
 "    plataforma será usado. Se vazio, será lido apenas .hg/hgrc no\n"
 "    repositório atual.\n"
 "\n"
@@ -9836,7 +9764,7 @@
 "HGUSER::\n"
 "    Esta é a string usada para o autor de uma consolidação.\n"
 "\n"
-"    (deprecated, use .hgrc)\n"
+"    (obsoleto, use .hgrc)\n"
 "\n"
 "EMAIL::\n"
 "    Se HGUSER não estiver definido, este valor será usado como autor\n"
@@ -9854,7 +9782,7 @@
 "    Algumas vezes o Mercurial precisa abrir em um editor um arquivo\n"
 "    texto para ser modificado por um usuário, por exemplo ao escrever\n"
 "    mensagens de consolidação. O editor usado é determinado pela\n"
-"    consulta às variáveis de ambiente HGEDITOR, VISUAL and EDITOR,\n"
+"    consulta às variáveis de ambiente HGEDITOR, VISUAL e EDITOR,\n"
 "    nessa ordem. O primeiro valor não vazio é escolhido. Se todos\n"
 "    estiverem vazios, o editor será o 'vi'.\n"
 "\n"
@@ -9911,6 +9839,7 @@
 "    apenas se você memorizou os números de sua árvore local e quiser\n"
 "    evitar digitar um único caractere. Este editor sugere copiar e\n"
 "    colar.\n"
+"\n"
 "    Uma string hexadecimal de 40 dígitos é tratada como um\n"
 "    identificador único de revisão.\n"
 "\n"
@@ -9959,22 +9888,22 @@
 msgstr ""
 "\n"
 "    Quando o Mercurial aceita mais de uma revisão, elas podem ser\n"
-"    especificadas individualmente, ou fornecidas como uma sequência\n"
+"    especificadas individualmente, ou fornecidas como uma seqüência\n"
 "    topologicamente contínua, separadas pelo caractere \":\".\n"
 "\n"
-"    A sintaxe da notação de sequência é [INÍCIO]:[FIM], onde INÍCIO\n"
+"    A sintaxe da notação de seqüência é [INÍCIO]:[FIM], onde INÍCIO\n"
 "    e FIM são identificadores de revisão. Tanto INÍCIO como FIM são\n"
 "    opcionais. Se INÍCIO não for especificado, terá como valor padrão\n"
 "    a revisão número 0. Se FIM não for especificado, terá como valor\n"
-"    padrão a revisão tip. A sequência \":\" portanto significa\n"
+"    padrão a revisão tip. A seqüência \":\" portanto significa\n"
 "    \"todas as revisões\".\n"
 "\n"
 "    Se INÍCIO for maior que FIM, as revisões são tratadas na ordem\n"
 "    inversa.\n"
 "\n"
-"    Uma sequência age como um intervalo fechado. Isso quer dizer que\n"
-"    uma sequência 3:5 nos dá 3, 4 e 5. De forma semelhante, uma\n"
-"    sequência 4:2 nos dá 4, 3, e 2.\n"
+"    Uma seqüência age como um intervalo fechado. Isso quer dizer que\n"
+"    uma seqüência 3:5 nos dá 3, 4 e 5. De forma semelhante, uma\n"
+"    seqüência 4:2 nos dá 4, 3, e 2.\n"
 "    "
 
 msgid "Diff Formats"
@@ -10114,8 +10043,11 @@
 "          the given date/time and the current date/time.\n"
 "    - basename: Any text. Treats the text as a path, and returns the\n"
 "          last component of the path after splitting by the path\n"
-"          separator (ignoring trailing seprators). For example,\n"
-"          \"foo/bar/baz\" becomes \"baz\" and \"foo/bar//\" becomes \"bar\".\n"
+"          separator (ignoring trailing separators). For example,\n"
+"          \"foo/bar/baz\" becomes \"baz\" and \"foo/bar//\" becomes \"bar"
+"\".\n"
+"    - stripdir: Treat the text as path and strip a directory level, if\n"
+"          possible. For example, \"foo\" and \"foo/bar\" becomes \"foo\".\n"
 "    - date: Date. Returns a date in a Unix date format, including\n"
 "          the timezone: \"Mon Sep 04 15:13:13 2006 0700\".\n"
 "    - domain: Any text. Finds the first string that looks like an\n"
@@ -10129,9 +10061,11 @@
 "    - fill68: Any text. Wraps the text to fit in 68 columns.\n"
 "    - fill76: Any text. Wraps the text to fit in 76 columns.\n"
 "    - firstline: Any text. Returns the first line of text.\n"
+"    - nonempty: Any text. Returns '(none)' if the string is empty.\n"
 "    - hgdate: Date. Returns the date as a pair of numbers:\n"
 "          \"1157407993 25200\" (Unix timestamp, timezone offset).\n"
 "    - isodate: Date. Returns the date in ISO 8601 format.\n"
+"    - localdate: Date. Converts a date to local date.\n"
 "    - obfuscate: Any text. Returns the input text rendered as a\n"
 "          sequence of XML entities.\n"
 "    - person: Any text. Returns the text before an email address.\n"
@@ -10220,6 +10154,9 @@
 "    - date: Data. Devolve uma data em um formato de data Unix,\n"
 "          incluindo a diferença de fuso horário:\n"
 "          \"Mon Sep 04 15:13:13 2006 0700\".\n"
+"    - stripdir: Trata o texto como um caminho e remove um nível\n"
+"          de diretório, se possível. Por exemplo, \"foo\" e\n"
+"          \"foo/bar\" se tornam \"foo\".\n"
 "    - domain: Qualquer texto. Encontra a primeira string que se\n"
 "          pareça com um endereço de e-mail, e extrai apenas a parte\n"
 "          do domínio. Por exemplo:\n"
@@ -10228,17 +10165,19 @@
 "          com um endereço de e-mail. Por exemplo:\n"
 "          'User <user@example.com>' se torna 'user@example.com'.\n"
 "    - escape: Qualquer texto. Substitui os caracteres especiais\n"
-"          XML/XHTML \"&\", \"<\" and \">\" por entidades XML.\n"
+"          XML/XHTML \"&\", \"<\" e \">\" por entidades XML.\n"
 "    - fill68: Qualquer texto. Quebra o texto para caber em 68\n"
 "          colunas.\n"
 "    - fill76: Qualquer texto. Quebra o texto para caber em 76\n"
 "          colunas.\n"
 "    - firstline: Qualquer texto. Devolve a primeira linha do texto.\n"
+"    - nonempty: Qualquer texto. Devolve (none) se o texto for vazio.\n"
 "    - hgdate: Data. Devolve a data como um par de números:\n"
 "          \"1157407993 25200\" (timestamp Unix, defasagem de fuso)\n"
 "    - isodate: Data. Devolve a data em formato ISO 8601.\n"
+"    - localdate: Data. Converte para data local.\n"
 "    - obfuscate: Qualquer texto. Devolve o texto de entrada\n"
-"          renderizado como uma sequência de entidades XML.\n"
+"          renderizado como uma seqüência de entidades XML.\n"
 "    - person: Qualquer texto. Devolve o texto antes de um endereço\n"
 "          de e-mail.\n"
 "    - rfc822date: Data. Devolve uma data usando o mesmo formato\n"
@@ -10286,7 +10225,8 @@
 "      machine and a copy of hg in the remote path or specified with as\n"
 "      remotecmd.\n"
 "    - path is relative to the remote user's home directory by default.\n"
-"      Use an extra slash at the start of a path to specify an absolute path:\n"
+"      Use an extra slash at the start of a path to specify an absolute "
+"path:\n"
 "        ssh://example.com//tmp/repository\n"
 "    - Mercurial doesn't use its own compression via SSH; the right\n"
 "      thing to do is to configure it in your ~/.ssh/config, e.g.:\n"
@@ -10326,9 +10266,9 @@
 "    URLs válidas são da forma:\n"
 "\n"
 "      caminho/no/sistema/de/arquivos/local (ou file://caminho/no/...)\n"
-"      http://[usuario[:senha]@]servidor[:porta]/[caminho]\n"
-"      https://[usuario[:senha]@]servidor[:porta]/[caminho]\n"
-"      ssh://[usuario[:senha]@]servidor[:porta]/[caminho]\n"
+"      http://[usuário[:senha]@]servidor[:porta]/[caminho]\n"
+"      https://[usuário[:senha]@]servidor[:porta]/[caminho]\n"
+"      ssh://[usuário[:senha]@]servidor[:porta]/[caminho]\n"
 "\n"
 "    Caminhos no sistema de arquivos local podem tanto apontar para\n"
 "    repositórios do Mercurial como para arquivos bundle (criados por\n"
@@ -10385,6 +10325,18 @@
 "      e o usará ao invés de 'default' se ambos estiverem definidos.\n"
 "    "
 
+msgid "Using additional features"
+msgstr "Usando funcionalidades adicionais"
+
+msgid "can only share local repositories"
+msgstr "só é possível compartilhar repositórios locais"
+
+msgid "destination already exists"
+msgstr "o destino já existe"
+
+msgid "updating working directory\n"
+msgstr "atualizando diretório de trabalho\n"
+
 #, python-format
 msgid "destination directory: %s\n"
 msgstr "diretório de destino: %s\n"
@@ -10397,43 +10349,48 @@
 msgid "destination '%s' is not empty"
 msgstr "o destino %s não está vazio"
 
-msgid "src repository does not support revision lookup and so doesn't support clone by revision"
-msgstr "repositório de origem não suporta busca de revisões, portanto não suporta clonar por revisão"
+msgid ""
+"src repository does not support revision lookup and so doesn't support clone "
+"by revision"
+msgstr ""
+"repositório de origem não suporta busca de revisões, portanto não suporta "
+"clonar por revisão"
 
 msgid "clone from remote to remote not supported"
 msgstr "clone de origem remota para destino remoto não suportado"
 
-msgid "updating working directory\n"
-msgstr "atualizando diretório de trabalho\n"
-
 msgid "updated"
-msgstr "atualizado"
+msgstr "atualizados"
 
 msgid "merged"
-msgstr "mesclado"
+msgstr "mesclados"
 
 msgid "removed"
-msgstr "removido"
+msgstr "removidos"
 
 msgid "unresolved"
-msgstr "não resolvido"
+msgstr "não resolvidos"
 
 #, python-format
 msgid "%d files %s"
 msgstr "%d arquivos %s"
 
 msgid "use 'hg resolve' to retry unresolved file merges\n"
-msgstr "utilize 'hg resolve' para tentar novamente mesclar arquivos não resolvidos\n"
-
-msgid "use 'hg resolve' to retry unresolved file merges or 'hg up --clean' to abandon\n"
-msgstr "utilize 'hg resolve' para mesclar novamente arquivos não resolvidos ou 'hg up --clean' para abandonar\n"
+msgstr "use 'hg resolve' para mesclar novamente arquivos não resolvidos\n"
+
+msgid ""
+"use 'hg resolve' to retry unresolved file merges or 'hg up --clean' to "
+"abandon\n"
+msgstr ""
+"use 'hg resolve' para mesclar novamente arquivos não resolvidos ou 'hg up --"
+"clean' para abandonar\n"
 
 msgid "(branch merge, don't forget to commit)\n"
 msgstr "(mesclagem de ramo, não esqueça de consolidar)\n"
 
 #, python-format
 msgid "error reading %s/.hg/hgrc: %s\n"
-msgstr "erro lendo %s/.hg/hgrc: %s\n"
+msgstr "erro ao ler %s/.hg/hgrc: %s\n"
 
 msgid "SSL support is unavailable"
 msgstr "Suporte a SSL indisponível"
@@ -10455,43 +10412,43 @@
 
 #, python-format
 msgid "%s hook is invalid (import of \"%s\" failed)"
-msgstr "hook %s é inválido (falhou o import de \"%s\")"
+msgstr "gancho %s é inválido (falhou o import de \"%s\")"
 
 #, python-format
 msgid "%s hook is invalid (\"%s\" is not defined)"
-msgstr "hook %s é inválido (\"%s\" não definido)"
+msgstr "gancho %s é inválido (\"%s\" não definido)"
 
 #, python-format
 msgid "%s hook is invalid (\"%s\" is not callable)"
-msgstr "hook %s é inválido (\"%s\" não é executável)"
+msgstr "gancho %s é inválido (\"%s\" não é executável)"
 
 #, python-format
 msgid "error: %s hook failed: %s\n"
-msgstr "erro: hook %s falhou: %s\n"
+msgstr "erro: gancho %s falhou: %s\n"
 
 #, python-format
 msgid "error: %s hook raised an exception: %s\n"
-msgstr "erro: hook %s lançou uma exceção: %s\n"
+msgstr "erro: gancho %s lançou uma exceção: %s\n"
 
 #, python-format
 msgid "%s hook failed"
-msgstr "hook %s falhou"
+msgstr "gancho %s falhou"
 
 #, python-format
 msgid "warning: %s hook failed\n"
-msgstr "aviso: hook %s falhou\n"
+msgstr "aviso: gancho %s falhou\n"
 
 #, python-format
 msgid "running hook %s: %s\n"
-msgstr "executando hook %s: %s\n"
+msgstr "executando gancho %s: %s\n"
 
 #, python-format
 msgid "%s hook %s"
-msgstr "hook %s %s"
+msgstr "gancho %s %s"
 
 #, python-format
 msgid "warning: %s hook %s\n"
-msgstr "aviso: hook %s %s\n"
+msgstr "aviso: gancho %s %s\n"
 
 msgid "connection ended unexpectedly"
 msgstr "conexão terminou inesperadamente"
@@ -10581,7 +10538,7 @@
 
 #, python-format
 msgid "repository %s not found"
-msgstr "repositório  %s não encontrado"
+msgstr "repositório %s não encontrado"
 
 #, python-format
 msgid "repository %s already exists"
@@ -10592,11 +10549,17 @@
 msgstr "requisito '%s' não suportado"
 
 #, python-format
+msgid ".hg/sharedpath points to nonexistent directory %s"
+msgstr ".hg/sharedpath aponta para diretório %s inexistente"
+
+#, python-format
 msgid "%r cannot be used in a tag name"
 msgstr "%r não pode ser usado em um nome de etiqueta"
 
 msgid "working copy of .hgtags is changed (please commit .hgtags manually)"
-msgstr "a cópia de trabalho de .hgtags foi modificada (por favor consolide .hgtags manualmente)"
+msgstr ""
+"a cópia de trabalho de .hgtags foi modificada (por favor consolide .hgtags "
+"manualmente)"
 
 #, python-format
 msgid "%s, line %s: %s\n"
@@ -10610,8 +10573,8 @@
 msgstr "nó '%s' não é bem formado"
 
 #, python-format
-msgid "tag '%s' refers to unknown node"
-msgstr "etiqueta '%s' se refere a um nó desconhecido"
+msgid "working directory has unknown parent '%s'!"
+msgstr "diretório de trabalho tem pai desconhecido '%s'!"
 
 #, python-format
 msgid "unknown revision '%s'"
@@ -10661,28 +10624,33 @@
 msgstr " %s: cópia %s:%s\n"
 
 msgid "cannot partially commit a merge (do not specify files or patterns)"
-msgstr "não é possível consolidar parcialmente uma mesclagem (não especifique arquivos ou padrões)"
-
-#, python-format
-msgid "%s not tracked!\n"
-msgstr "%s não ratreado!\n"
+msgstr ""
+"não é possível consolidar parcialmente uma mesclagem (não especifique "
+"arquivos ou padrões)"
+
+msgid "file not found!"
+msgstr "arquivo não encontrado!"
+
+msgid "no match under directory!"
+msgstr "nenhuma correspondência sob o diretório!"
+
+msgid "file not tracked!"
+msgstr "arquivo não rastreado!"
+
+msgid "nothing changed\n"
+msgstr "nada mudou\n"
 
 msgid "unresolved merge conflicts (see hg resolve)"
 msgstr "conflitos de mesclagem não resolvidos (veja hg resolve)"
 
-msgid "nothing changed\n"
-msgstr "nada mudou\n"
+#, python-format
+msgid "committing subrepository %s\n"
+msgstr "consolidando sub-repositório %s\n"
 
 #, python-format
 msgid "trouble committing %s!\n"
 msgstr "problemas ao consolidar %s!\n"
 
-msgid "HG: Enter commit message.  Lines beginning with 'HG:' are removed."
-msgstr "HG: Edite a mensagem de consolidação. Linhas começadas por 'HG:' são removidas."
-
-msgid "empty commit message"
-msgstr "mensagem de consolidação vazia"
-
 #, python-format
 msgid "%s does not exist!\n"
 msgstr "%s não existe!\n"
@@ -10712,6 +10680,10 @@
 msgstr "%s ainda existe!\n"
 
 #, python-format
+msgid "%s not tracked!\n"
+msgstr "%s não rastreado!\n"
+
+#, python-format
 msgid "%s not removed!\n"
 msgstr "%s não removido!\n"
 
@@ -10779,8 +10751,16 @@
 msgid "requesting all changes\n"
 msgstr "pedindo todas as mudanças\n"
 
-msgid "Partial pull cannot be done because other repository doesn't support changegroupsubset."
-msgstr "Pull parcial não pode ser feito porque o outro repositório não suporta 'changegroupsubset'."
+msgid ""
+"Partial pull cannot be done because other repository doesn't support "
+"changegroupsubset."
+msgstr ""
+"Pull parcial não pode ser feito porque o outro repositório não suporta "
+"'changegroupsubset'."
+
+#, python-format
+msgid "abort: push creates new remote branch '%s'!\n"
+msgstr "abortado: push cria novo ramo remoto '%s'!\n"
 
 msgid "abort: push creates new remote heads!\n"
 msgstr "abortado: push cria novas cabeças remotas!\n"
@@ -10800,7 +10780,7 @@
 
 #, python-format
 msgid "empty or missing revlog for %s"
-msgstr "Revlog vazio ou não encontrado para %s"
+msgstr "revlog vazio ou não encontrado para %s"
 
 #, python-format
 msgid "add changeset %s\n"
@@ -10816,7 +10796,7 @@
 msgstr "adicionando manifestos\n"
 
 msgid "adding file changes\n"
-msgstr "adicionando mudanças de arquivo\n"
+msgstr "adicionando mudanças em arquivos\n"
 
 #, python-format
 msgid "adding %s revisions\n"
@@ -10885,7 +10865,9 @@
 msgstr "enviando e-mail: %s\n"
 
 msgid "smtp specified as email transport, but no smtp host configured"
-msgstr "smtp especificado como transporte de e-mail, mas o servidor smtp não foi configurado"
+msgstr ""
+"smtp especificado como transporte de e-mail, mas o servidor smtp não foi "
+"configurado"
 
 #, python-format
 msgid "%r specified as email transport, but not in PATH"
@@ -10912,13 +10894,34 @@
 msgstr "o número de linhas de contexto de diff deve ser um inteiro, e não %r"
 
 #, python-format
-msgid "untracked file in working directory differs from file in requested revision: '%s'"
-msgstr "arquivo não versionado no diretório de trabalho difere do arquivo na revisão pedida: '%s'"
+msgid ""
+"untracked file in working directory differs from file in requested revision: "
+"'%s'"
+msgstr ""
+"arquivo não versionado no diretório de trabalho difere do arquivo na revisão "
+"pedida: '%s'"
 
 #, python-format
 msgid "case-folding collision between %s and %s"
 msgstr "conflito de maiúsculas e minúsculas entre %s e %s"
 
+#, python-format
+msgid ""
+" conflicting flags for %s\n"
+"(n)one, e(x)ec or sym(l)ink?"
+msgstr ""
+" modo conflitante para %s\n"
+"(n)enhum, e(x)ecutável ou (l)ink simbólico?"
+
+msgid "&None"
+msgstr "&Nenhum"
+
+msgid "E&xec"
+msgstr "E&xecutável"
+
+msgid "Sym&link"
+msgstr "&Link simbólico"
+
 msgid "resolving manifests\n"
 msgstr "examinando manifestos\n"
 
@@ -10932,22 +10935,17 @@
 
 #, python-format
 msgid ""
-" conflicting flags for %s\n"
-"(n)one, e(x)ec or sym(l)ink?"
-msgstr ""
-" marcadores conflitantes para %s\n"
-"(n) nenhum, (x) executável ou (l) link simbólico?"
-
-#, python-format
-msgid ""
 " local changed %s which remote deleted\n"
 "use (c)hanged version or (d)elete?"
 msgstr ""
 " local alterou %s, que a remota removeu\n"
 "use (c) a versão alterada, ou (d) apague?"
 
-msgid "[cd]"
-msgstr "[cd]"
+msgid "&Changed"
+msgstr "(&C) alterada"
+
+msgid "&Delete"
+msgstr "(&D) apagar"
 
 msgid "c"
 msgstr "c"
@@ -10960,6 +10958,9 @@
 "remota mudou %s, apagada pela local\n"
 "use (c) a versão alterada, ou (d) deixe apagada?"
 
+msgid "&Deleted"
+msgstr "(&D) apagada"
+
 #, python-format
 msgid "preserving %s for resolve of %s\n"
 msgstr "preservando %s para resolução de %s\n"
@@ -10990,6 +10991,11 @@
 msgid "nothing to merge (use 'hg update' or check 'hg heads')"
 msgstr "nada para mesclar (use 'hg update' ou verifique 'hg heads')"
 
+msgid "outstanding uncommitted changes (use 'hg status' to list changes)"
+msgstr ""
+"alterações não consolidadas pendentes (use 'hg status' para listar as "
+"mudanças)"
+
 msgid "crosses branches (use 'hg merge' or 'hg update -C' to discard changes)"
 msgstr "atravessa ramos (use 'hg merge', ou 'hg update -C' para descartar mudanças)"
 
@@ -11081,12 +11087,16 @@
 msgstr "comando de patch falhou: %s"
 
 #, python-format
+msgid "Unsupported line endings type: %s"
+msgstr "Tipo de quebra de linha não suportado: %s"
+
+#, python-format
 msgid "no valid hunks found; trying with %r instead\n"
 msgstr "nenhum trecho válido encontrado; tentando com %r\n"
 
 #, python-format
 msgid "exited with status %d"
-msgstr "terminou com o estado %d"
+msgstr "terminou com o código %d"
 
 #, python-format
 msgid "killed by signal %d"
@@ -11097,7 +11107,7 @@
 msgstr "parado pelo sinal %d"
 
 msgid "invalid exit code"
-msgstr "códogo de saída inválido"
+msgstr "código de saída inválido"
 
 #, python-format
 msgid "saving bundle to %s\n"
@@ -11151,7 +11161,7 @@
 msgstr "base desconhecida"
 
 msgid "consistency error adding group"
-msgstr "erro de concistencia adicionando grupo"
+msgstr "erro de consistência adicionando grupo"
 
 #, python-format
 msgid "%s looks like a binary file."
@@ -11174,7 +11184,7 @@
 msgstr "remoto: "
 
 msgid "no suitable response from remote hg"
-msgstr "nenhuma resposta aceitavel do hg remoto"
+msgstr "nenhuma resposta adequada do hg remoto"
 
 #, python-format
 msgid "push refused: %s"
@@ -11204,32 +11214,77 @@
 msgid "sending %s (%d bytes)\n"
 msgstr "enviando %s (%d bytes)\n"
 
+#, python-format
+msgid ""
+" subrepository sources for %s differ\n"
+"use (l)ocal source (%s) or (r)emote source (%s)?"
+msgstr ""
+" origens do sub-repositório para %s diferem\n"
+"usar fonte (l)ocal (%s) ou (r)emota (%s)?"
+
+msgid "&Remote"
+msgstr "&Remoto"
+
+msgid "r"
+msgstr "r"
+
+#, python-format
+msgid ""
+" local changed subrepository %s which remote removed\n"
+"use (c)hanged version or (d)elete?"
+msgstr ""
+" local mudou sub-repositório %s, que a remota removeu\n"
+"use (c) a versão alterada, ou (d) apague?"
+
+#, python-format
+msgid ""
+" remote changed subrepository %s which local removed\n"
+"use (c)hanged version or (d)elete?"
+msgstr ""
+" remota mudou sub-repositório %s apagado pela local\n"
+"use (c) a versão alterada ou (d) apague?"
+
+#, python-format
+msgid "removing subrepo %s\n"
+msgstr "removendo sub-repositório %s\n"
+
+#, python-format
+msgid "pulling subrepo %s\n"
+msgstr "trazendo sub-repositório %s\n"
+
+#, python-format
+msgid "pushing subrepo %s\n"
+msgstr "enviando sub-repositório %s\n"
+
 msgid "unmatched quotes"
 msgstr "aspas não combinam"
 
 #, python-format
+msgid "error expanding '%s%%%s'"
+msgstr "erro ao expandir '%s%%%s'"
+
+#, python-format
+msgid "unknown filter '%s'"
+msgstr "filtro '%s' desconhecido"
+
+#, python-format
 msgid "style not found: %s"
 msgstr "estilo não encontrado: %s"
 
 #, python-format
-msgid "%s:%s: parse error"
-msgstr "%s:%s: erro ao processar"
-
-#, python-format
 msgid "template file %s: %s"
-msgstr "arquivo de template %s: %s"
-
-#, python-format
-msgid "Error expanding '%s%%%s'"
-msgstr "Erro expandindo '%s%%%s'"
-
-msgid "transaction abort!\n"
-msgstr "transação abortada!\n"
+msgstr "arquivo de modelo %s: %s"
+
+msgid "cannot use transaction when it is already committed/aborted"
+msgstr "não é possível usar transação quando já estiver consolidada/abortada"
 
 #, python-format
 msgid "failed to truncate %s\n"
 msgstr "falha ao truncar %s\n"
 
+msgid "transaction abort!\n"
+msgstr "transação abortada!\n"
+
 msgid "rollback completed\n"
 msgstr "desfazer completo\n"
 
@@ -11238,51 +11293,19 @@
 
 #, python-format
 msgid "Not trusting file %s from untrusted user %s, group %s\n"
-msgstr "Não confiando em arquivo %s de usuário desconfiável %s, group %s\n"
-
-#, python-format
-msgid ""
-"Failed to parse %s\n"
-"%s"
-msgstr ""
-"Falha ao processar %s\n"
-"%s"
+msgstr "Não confiando em arquivo %s de usuário não confiável %s, grupo %s\n"
 
 #, python-format
 msgid "Ignored: %s\n"
 msgstr "Ignorado: %s\n"
 
 #, python-format
-msgid "unable to open %s: %s"
-msgstr "impossível abrir %s: %s"
-
-#, python-format
-msgid ""
-"failed to parse %s\n"
-"%s"
-msgstr ""
-"falha ao processar %s\n"
-"%s"
-
-#, python-format
-msgid ""
-"Error in configuration section [%s] parameter '%s':\n"
-"%s"
-msgstr ""
-"Erro na sessão de configuração [%s] parametro '%s':\n"
-"%s"
-
-#, python-format
-msgid "Ignoring untrusted configuration option %s.%s = %s\n"
-msgstr "Ignorando opção de configuração desconfiavel %s.%s = %s\n"
-
-#, python-format
-msgid ""
-"Error in configuration section [%s]:\n"
-"%s"
-msgstr ""
-"Erro na sessão de configuração [%s]:\n"
-"%s"
+msgid "ignoring untrusted configuration option %s.%s = %s\n"
+msgstr "Ignorando opção de configuração não confiável %s.%s = %s\n"
+
+#, python-format
+msgid "%s.%s not a boolean ('%s')"
+msgstr "%s.%s não é uma booleana ('%s')"
 
 msgid "enter a commit username:"
 msgstr "entre o nome do usuário para consolidação:"
@@ -11328,14 +11351,14 @@
 msgstr "usuário:"
 
 #, python-format
+msgid "http auth: user %s, password %s\n"
+msgstr "autenticação http: usuário %s, senha %s\n"
+
+#, python-format
 msgid "proxying through http://%s:%s\n"
 msgstr "usando proxy através de http://%s:%s\n"
 
 #, python-format
-msgid "http auth: user %s, password %s\n"
-msgstr "autenticação  http: usuário %s, senha %s\n"
-
-#, python-format
 msgid "command '%s' failed: %s"
 msgstr "falha ao executar o comando '%s' : %s"
 
@@ -11482,6 +11505,10 @@
 msgid "checking manifests\n"
 msgstr "checando manifestos\n"
 
+#, python-format
+msgid "%s not in changesets"
+msgstr "%s não está em changesets"
+
 msgid "file without name in manifest"
 msgstr "arquivo sem nome no manifesto"
 
@@ -11546,7 +11573,7 @@
 
 #, python-format
 msgid "warning: orphan revlog '%s'"
-msgstr "atenção: Revlog '%s' orfão"
+msgstr "atenção: Revlog '%s' órfão"
 
 #, python-format
 msgid "%d files, %d changesets, %d total revisions\n"
@@ -11562,7 +11589,7 @@
 
 #, python-format
 msgid "(first damaged changeset appears to be %d)\n"
-msgstr "(primeiro changeset danificada parece ser %d)\n"
+msgstr "(primeiro changeset danificado parece ser %d)\n"
 
 msgid "user name not available - set USERNAME environment variable"
 msgstr "nome de usuário indisponível - defina a variável de ambiente USERNAME"
--- a/i18n/zh_CN.po	Wed Jul 08 17:01:18 2009 -0700
+++ b/i18n/zh_CN.po	Wed Jul 08 17:03:16 2009 -0700
@@ -5,7 +5,7 @@
 # Copyright (C) 2009 the Mercurial team
 # Dongsheng Song <dongsheng.song@gmail.com>, 2009
 #
-# $Id: zh.po 1217 2009-03-11 09:20:30Z dongsheng.song@gmail.com $
+# $Id: zh_CN.po 1313 2009-06-24 02:08:02Z songdongsheng@live.cn $
 #
 # Update with pot file:
 #    msgmerge --update zh_CN.po hg.pot
@@ -48,9 +48,9 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Mercurial 1.2\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-03-20 14:26+0800\n"
+"Project-Id-Version: Mercurial 1.3\n"
+"Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n"
+"POT-Creation-Date: 2009-06-24 10:03+0800\n"
 "PO-Revision-Date: 2009-03-31 20:38+0200\n"
 "Last-Translator: Dongsheng Song <dongsheng.song@gmail.com>\n"
 "Language-Team: Chinese translation team <i18n-zh@googlegroups.com>\n"
@@ -82,8 +82,53 @@
 "    别名: %s\n"
 "\n"
 
-msgid "return tuple of (match function, list enabled)."
-msgstr "返回 tuple (匹配函数,启用列表)"
+msgid ""
+"control access to a repository using simple hooks\n"
+"\n"
+"This hook makes it possible to allow or deny write access to portions\n"
+"of a repository when receiving incoming changesets.\n"
+"\n"
+"The authorization is matched based on the local user name on the\n"
+"system where the hook runs, and not the committer of the original\n"
+"changeset (since the latter is merely informative).\n"
+"\n"
+"The acl hook is best used along with a restricted shell like hgsh,\n"
+"preventing authenticating users from doing anything other than\n"
+"pushing or pulling. The hook is not safe to use if users have\n"
+"interactive shell access, as they can then disable the hook.\n"
+"Nor is it safe if remote users share an account, because then there\n"
+"is no way to distinguish them.\n"
+"\n"
+"To use this hook, configure the acl extension in your hgrc like this:\n"
+"\n"
+"  [extensions]\n"
+"  hgext.acl =\n"
+"\n"
+"  [hooks]\n"
+"  pretxnchangegroup.acl = python:hgext.acl.hook\n"
+"\n"
+"  [acl]\n"
+"  # Check whether the source of incoming changes is in this list\n"
+"  # (\"serve\" == ssh or http, \"push\", \"pull\", \"bundle\")\n"
+"  sources = serve\n"
+"\n"
+"The allow and deny sections take a subtree pattern as key (with a\n"
+"glob syntax by default), and a comma separated list of users as\n"
+"the corresponding value. The deny list is checked before the allow\n"
+"list is.\n"
+"\n"
+"  [acl.allow]\n"
+"  # If acl.allow is not present, all users are allowed by default.\n"
+"  # An empty acl.allow section means no users allowed.\n"
+"  docs/** = doc_writer\n"
+"  .hgtags = release_engineer\n"
+"\n"
+"  [acl.deny]\n"
+"  # If acl.deny is not present, no users are refused by default.\n"
+"  # An empty acl.deny section means all users allowed.\n"
+"  glob pattern = user4, user5\n"
+"   ** = user6\n"
+msgstr ""
 
 #, python-format
 msgid "acl: %s not enabled\n"
@@ -118,115 +163,41 @@
 msgstr "acl: 允许修改集 %s\n"
 
 msgid ""
-"allow user-defined command aliases\n"
-"\n"
-"To use, create entries in your hgrc of the form\n"
-"\n"
-"[alias]\n"
-"mycmd = cmd --args\n"
-msgstr ""
-"允许用户自定义命令的别名\n"
-"\n"
-"要使用别名,在你的 hgrc 中创建如下格式的条目:\n"
-"\n"
-"[alias]\n"
-"mycmd = cmd --args\n"
-
-msgid ""
-"defer command lookup until needed, so that extensions loaded\n"
-"    after alias can be aliased"
-msgstr "查找命令会推迟到需要时,所以可以在定义别名后加载模块"
-
-#, python-format
-msgid "*** [alias] %s: command %s is unknown"
-msgstr "*** [alias] %s: 未知命令 %s"
-
-#, python-format
-msgid "*** [alias] %s: command %s is ambiguous"
-msgstr "*** [alias] %s: 不明确的命令 %s"
-
-#, python-format
-msgid "*** [alias] %s: circular dependency on %s"
-msgstr "*** [alias] %s: 循环依赖于 %s"
-
-#, python-format
-msgid "*** [alias] %s: no definition\n"
-msgstr "*** [alias] %s: 无定义\n"
-
-msgid ""
-"mercurial bookmarks\n"
-"\n"
-"Mercurial bookmarks are local moveable pointers to changesets. Every\n"
-"bookmark points to a changeset identified by its hash. If you commit a\n"
-"changeset that is based on a changeset that has a bookmark on it, the\n"
-"bookmark is forwarded to the new changeset.\n"
-"\n"
-"It is possible to use bookmark names in every revision lookup (e.g. hg\n"
-"merge, hg update).\n"
-"\n"
-"The bookmark extension offers the possiblity to have a more git-like "
-"experience\n"
-"by adding the following configuration option to your .hgrc:\n"
-"\n"
-"[bookmarks]\n"
-"track.current = True\n"
-"\n"
-"This will cause bookmarks to track the bookmark that you are currently on, "
-"and\n"
-"just updates it. This is similar to git's approach of branching.\n"
-msgstr ""
-
-msgid ""
-"Parse .hg/bookmarks file and return a dictionary\n"
-"\n"
-"    Bookmarks are stored as {HASH}\\s{NAME}\\n (localtags format) values\n"
-"    in the .hg/bookmarks file. They are read by the parse() method and\n"
-"    returned as a dictionary with name => hash values.\n"
-"\n"
-"    The parsed dictionary is cached until a write() operation is done.\n"
-"    "
-msgstr ""
-
-msgid ""
-"Write bookmarks\n"
-"\n"
-"    Write the given bookmark => hash dictionary to the .hg/bookmarks file\n"
-"    in a format equal to those of localtags.\n"
-"\n"
-"    We also store a backup of the previous state in undo.bookmarks that\n"
-"    can be copied back on rollback.\n"
-"    "
-msgstr ""
-
-msgid ""
-"Get the current bookmark\n"
-"\n"
-"    If we use gittishsh branches we have a current bookmark that\n"
-"    we are on. This function returns the name of the bookmark. It\n"
-"    is stored in .hg/bookmarks.current\n"
-"    "
-msgstr ""
-
-msgid ""
-"Set the name of the bookmark that we are currently on\n"
-"\n"
-"    Set the name of the bookmark that we are on (hg update <bookmark>).\n"
-"    The name is recoreded in .hg/bookmarks.current\n"
-"    "
-msgstr ""
-
-msgid ""
-"mercurial bookmarks\n"
+"track a line of development with movable markers\n"
+"\n"
+"Bookmarks are local movable markers to changesets. Every bookmark\n"
+"points to a changeset identified by its hash. If you commit a\n"
+"changeset that is based on a changeset that has a bookmark on it,\n"
+"the bookmark shifts to the new changeset.\n"
+"\n"
+"It is possible to use bookmark names in every revision lookup\n"
+"(e.g. hg merge, hg update).\n"
+"\n"
+"By default, when several bookmarks point to the same changeset, they\n"
+"will all move forward together. It is possible to obtain a more\n"
+"git-like experience by adding the following configuration option to\n"
+"your .hgrc:\n"
+"\n"
+"  [bookmarks]\n"
+"  track.current = True\n"
+"\n"
+"This will cause Mercurial to track the bookmark that you are currently\n"
+"using, and only update it. This is similar to git's approach to\n"
+"branching.\n"
+msgstr ""
+
+msgid ""
+"track a line of development with movable markers\n"
 "\n"
 "    Bookmarks are pointers to certain commits that move when\n"
-"    commiting. Bookmarks are local. They can be renamed, copied and\n"
-"    deleted. It is possible to use bookmark names in 'hg merge' and 'hg\n"
-"    update' to update to a given bookmark.\n"
-"\n"
-"    You can use 'hg bookmark NAME' to set a bookmark on the current\n"
-"    tip with the given name. If you specify a revision using -r REV\n"
-"    (where REV may be an existing bookmark), the bookmark is set to\n"
-"    that revision.\n"
+"    committing. Bookmarks are local. They can be renamed, copied and\n"
+"    deleted. It is possible to use bookmark names in 'hg merge' and\n"
+"    'hg update' to merge and update respectively to a given bookmark.\n"
+"\n"
+"    You can use 'hg bookmark NAME' to set a bookmark on the working\n"
+"    directory's parent revision with the given name. If you specify\n"
+"    a revision using -r REV (where REV may be an existing bookmark),\n"
+"    the bookmark is assigned to that revision.\n"
 "    "
 msgstr ""
 
@@ -248,28 +219,6 @@
 msgid "a bookmark cannot have the name of an existing branch"
 msgstr ""
 
-msgid ""
-"Strip bookmarks if revisions are stripped using\n"
-"    the mercurial.strip method. This usually happens during\n"
-"    qpush and qpop"
-msgstr ""
-
-msgid ""
-"Add a revision to the repository and\n"
-"            move the bookmark"
-msgstr ""
-
-msgid "Merge bookmarks with normal tags"
-msgstr ""
-
-msgid ""
-"Set the current bookmark\n"
-"\n"
-"    If the user updates to a bookmark we update the .hg/bookmarks.current\n"
-"    file.\n"
-"    "
-msgstr ""
-
 msgid "force"
 msgstr "强制"
 
@@ -286,79 +235,79 @@
 msgstr ""
 
 msgid ""
-"Bugzilla integration\n"
+"integrate Mercurial with a Bugzilla bug tracker\n"
 "\n"
 "This hook extension adds comments on bugs in Bugzilla when changesets\n"
-"that refer to bugs by Bugzilla ID are seen. The hook does not change bug\n"
-"status.\n"
-"\n"
-"The hook updates the Bugzilla database directly. Only Bugzilla installations\n"
-"using MySQL are supported.\n"
-"\n"
-"The hook relies on a Bugzilla script to send bug change notification emails.\n"
-"That script changes between Bugzilla versions; the 'processmail' script used\n"
-"prior to 2.18 is replaced in 2.18 and subsequent versions by\n"
-"'config/sendbugmail.pl'. Note that these will be run by Mercurial as the "
-"user\n"
-"pushing the change; you will need to ensure the Bugzilla install file\n"
-"permissions are set appropriately.\n"
+"that refer to bugs by Bugzilla ID are seen. The hook does not change\n"
+"bug status.\n"
+"\n"
+"The hook updates the Bugzilla database directly. Only Bugzilla\n"
+"installations using MySQL are supported.\n"
+"\n"
+"The hook relies on a Bugzilla script to send bug change notification\n"
+"emails. That script changes between Bugzilla versions; the\n"
+"'processmail' script used prior to 2.18 is replaced in 2.18 and\n"
+"subsequent versions by 'config/sendbugmail.pl'. Note that these will\n"
+"be run by Mercurial as the user pushing the change; you will need to\n"
+"ensure the Bugzilla install file permissions are set appropriately.\n"
 "\n"
 "Configuring the extension:\n"
 "\n"
 "    [bugzilla]\n"
-"    host       Hostname of the MySQL server holding the Bugzilla database.\n"
+"\n"
+"    host       Hostname of the MySQL server holding the Bugzilla\n"
+"               database.\n"
 "    db         Name of the Bugzilla database in MySQL. Default 'bugs'.\n"
 "    user       Username to use to access MySQL server. Default 'bugs'.\n"
 "    password   Password to use to access MySQL server.\n"
 "    timeout    Database connection timeout (seconds). Default 5.\n"
-"    version    Bugzilla version. Specify '3.0' for Bugzilla versions 3.0 and\n"
-"               later, '2.18' for Bugzilla versions from 2.18 and '2.16' for\n"
-"               versions prior to 2.18.\n"
+"    version    Bugzilla version. Specify '3.0' for Bugzilla versions\n"
+"               3.0 and later, '2.18' for Bugzilla versions from 2.18\n"
+"               and '2.16' for versions prior to 2.18.\n"
 "    bzuser     Fallback Bugzilla user name to record comments with, if\n"
 "               changeset committer cannot be found as a Bugzilla user.\n"
 "    bzdir      Bugzilla install directory. Used by default notify.\n"
 "               Default '/var/www/html/bugzilla'.\n"
 "    notify     The command to run to get Bugzilla to send bug change\n"
-"               notification emails. Substitutes from a map with 3 keys,\n"
-"               'bzdir', 'id' (bug id) and 'user' (committer bugzilla email).\n"
-"               Default depends on version; from 2.18 it is\n"
-"               \"cd %(bzdir)s && perl -T contrib/sendbugmail.pl %(id)s %(user)"
-"s\".\n"
-"    regexp     Regular expression to match bug IDs in changeset commit "
-"message.\n"
-"               Must contain one \"()\" group. The default expression matches\n"
-"               'Bug 1234', 'Bug no. 1234', 'Bug number 1234',\n"
-"               'Bugs 1234,5678', 'Bug 1234 and 5678' and variations thereof.\n"
-"               Matching is case insensitive.\n"
+"               notification emails. Substitutes from a map with 3\n"
+"               keys, 'bzdir', 'id' (bug id) and 'user' (committer\n"
+"               bugzilla email). Default depends on version; from 2.18\n"
+"               it is \"cd %(bzdir)s && perl -T contrib/sendbugmail.pl\n"
+"               %(id)s %(user)s\".\n"
+"    regexp     Regular expression to match bug IDs in changeset commit\n"
+"               message. Must contain one \"()\" group. The default\n"
+"               expression matches 'Bug 1234', 'Bug no. 1234', 'Bug\n"
+"               number 1234', 'Bugs 1234,5678', 'Bug 1234 and 5678' and\n"
+"               variations thereof. Matching is case insensitive.\n"
 "    style      The style file to use when formatting comments.\n"
 "    template   Template to use when formatting comments. Overrides\n"
 "               style if specified. In addition to the usual Mercurial\n"
 "               keywords, the extension specifies:\n"
 "                   {bug}       The Bugzilla bug ID.\n"
-"                   {root}      The full pathname of the Mercurial "
-"repository.\n"
-"                   {webroot}   Stripped pathname of the Mercurial "
-"repository.\n"
-"                   {hgweb}     Base URL for browsing Mercurial repositories.\n"
+"                   {root}      The full pathname of the Mercurial\n"
+"                               repository.\n"
+"                   {webroot}   Stripped pathname of the Mercurial\n"
+"                               repository.\n"
+"                   {hgweb}     Base URL for browsing Mercurial\n"
+"                               repositories.\n"
 "               Default 'changeset {node|short} in repo {root} refers '\n"
 "                       'to bug {bug}.\\ndetails:\\n\\t{desc|tabindent}'\n"
 "    strip      The number of slashes to strip from the front of {root}\n"
 "               to produce {webroot}. Default 0.\n"
-"    usermap    Path of file containing Mercurial committer ID to Bugzilla "
-"user\n"
-"               ID mappings. If specified, the file should contain one "
-"mapping\n"
-"               per line, \"committer\"=\"Bugzilla user\". See also the\n"
-"               [usermap] section.\n"
+"    usermap    Path of file containing Mercurial committer ID to\n"
+"               Bugzilla user ID mappings. If specified, the file\n"
+"               should contain one mapping per line,\n"
+"               \"committer\"=\"Bugzilla user\". See also the [usermap]\n"
+"               section.\n"
 "\n"
 "    [usermap]\n"
-"    Any entries in this section specify mappings of Mercurial committer ID\n"
-"    to Bugzilla user ID. See also [bugzilla].usermap.\n"
+"    Any entries in this section specify mappings of Mercurial\n"
+"    committer ID to Bugzilla user ID. See also [bugzilla].usermap.\n"
 "    \"committer\"=\"Bugzilla user\"\n"
 "\n"
 "    [web]\n"
-"    baseurl    Base URL for browsing Mercurial repositories. Reference from\n"
-"               templates as {hgweb}.\n"
+"    baseurl    Base URL for browsing Mercurial repositories. Reference\n"
+"               from templates as {hgweb}.\n"
 "\n"
 "Activating the extension:\n"
 "\n"
@@ -371,9 +320,9 @@
 "\n"
 "Example configuration:\n"
 "\n"
-"This example configuration is for a collection of Mercurial repositories\n"
-"in /var/local/hg/repos/ used with a local Bugzilla 3.2 installation in\n"
-"/opt/bugzilla-3.2.\n"
+"This example configuration is for a collection of Mercurial\n"
+"repositories in /var/local/hg/repos/ used with a local Bugzilla 3.2\n"
+"installation in /opt/bugzilla-3.2.\n"
 "\n"
 "    [bugzilla]\n"
 "    host=localhost\n"
@@ -399,16 +348,10 @@
 "    Changeset commit comment. Bug 1234.\n"
 msgstr ""
 
-msgid "support for bugzilla version 2.16."
-msgstr "支持 bugzilla 2.16。"
-
 #, python-format
 msgid "connecting to %s:%s as %s, password %s\n"
 msgstr "连接到 %s:%s as %s,密码 %s\n"
 
-msgid "run a query."
-msgstr "运行查询。"
-
 #, python-format
 msgid "query: %s %s\n"
 msgstr "查询: %s %s\n"
@@ -417,25 +360,13 @@
 msgid "failed query: %s %s\n"
 msgstr "查询失败: %s %s\n"
 
-msgid "get identity of longdesc field"
-msgstr ""
-
 msgid "unknown database schema"
 msgstr "未知的数据库方案"
 
-msgid "filter not-existing bug ids from list."
-msgstr "从列表中过滤不存在的问题标识。"
-
-msgid "filter bug ids from list that already refer to this changeset."
-msgstr ""
-
 #, python-format
 msgid "bug %d already knows about changeset %s\n"
 msgstr ""
 
-msgid "tell bugzilla to send mail."
-msgstr ""
-
 msgid "telling bugzilla to send mail:\n"
 msgstr ""
 
@@ -454,22 +385,10 @@
 msgid "done\n"
 msgstr "完成\n"
 
-msgid "look up numeric bugzilla user id."
-msgstr ""
-
 #, python-format
 msgid "looking up user %s\n"
 msgstr ""
 
-msgid "map name of committer to bugzilla user name."
-msgstr ""
-
-msgid ""
-"see if committer is a registered bugzilla user. Return\n"
-"        bugzilla username and userid if so. If not, return default\n"
-"        bugzilla username and userid."
-msgstr ""
-
 #, python-format
 msgid "cannot find bugzilla user id for %s"
 msgstr ""
@@ -478,52 +397,16 @@
 msgid "cannot find bugzilla user id for %s or %s"
 msgstr ""
 
-msgid ""
-"add comment to bug. try adding comment as committer of\n"
-"        changeset, otherwise as default bugzilla user."
-msgstr ""
-
-msgid "support for bugzilla 2.18 series."
-msgstr ""
-
-msgid "support for bugzilla 3.0 series."
-msgstr ""
-
-msgid ""
-"return object that knows how to talk to bugzilla version in\n"
-"        use."
-msgstr ""
-
 #, python-format
 msgid "bugzilla version %s not supported"
 msgstr ""
 
 msgid ""
-"find valid bug ids that are referred to in changeset\n"
-"        comments and that do not already have references to this\n"
-"        changeset."
-msgstr ""
-
-msgid "update bugzilla bug with reference to changeset."
-msgstr ""
-
-msgid ""
-"strip leading prefix of repo root and turn into\n"
-"            url-safe path."
-msgstr ""
-
-msgid ""
 "changeset {node|short} in repo {root} refers to bug {bug}.\n"
 "details:\n"
 "\t{desc|tabindent}"
 msgstr ""
 
-msgid ""
-"add comment to bugzilla for each changeset that refers to a\n"
-"    bugzilla bug id. only add a comment once per bug, so same change\n"
-"    seen multiple times does not fill bug with duplicate data."
-msgstr ""
-
 #, python-format
 msgid "python mysql support not available: %s"
 msgstr ""
@@ -536,27 +419,36 @@
 msgid "database error: %s"
 msgstr ""
 
-msgid ""
-"show the children of the given or working dir revision\n"
-"\n"
-"    Print the children of the working directory's revisions.\n"
-"    If a revision is given via --rev, the children of that revision\n"
-"    will be printed. If a file argument is given, revision in\n"
-"    which the file was last changed (after the working directory\n"
-"    revision or the argument to --rev if given) is printed.\n"
-"    "
-msgstr ""
-
-msgid "show children of the specified rev"
-msgstr ""
+#, fuzzy
+msgid "display children changesets"
+msgstr "列出修改集"
+
+#, fuzzy
+msgid ""
+"show the children of the given or working directory revision\n"
+"\n"
+"    Print the children of the working directory's revisions. If a\n"
+"    revision is given via -r/--rev, the children of that revision will\n"
+"    be printed. If a file argument is given, revision in which the\n"
+"    file was last changed (after the working directory revision or the\n"
+"    argument to --rev if given) is printed.\n"
+"    "
+msgstr ""
+"显示工作目录或指定版本的父亲\n"
+"\n"
+"    显示工作目录的父亲版本。如果使用 '--rev' 指定版本,就显示此版本的\n"
+"    父亲。如果指定了文件,那么使用此文件最后修改的版本(工作目录的起源\n"
+"    版本,或 '--rev' 指定的版本)。\n"
+"    "
+
+#, fuzzy
+msgid "show children of the specified revision"
+msgstr "从指定的版本显示父亲"
 
 msgid "hg children [-r REV] [FILE]"
 msgstr ""
 
-msgid "command to show certain statistics about revision history"
-msgstr ""
-
-msgid "Calculate stats"
+msgid "display statistics about repository history"
 msgstr ""
 
 #, python-format
@@ -564,18 +456,21 @@
 msgstr ""
 
 #, python-format
-msgid "\rgenerating stats: %d%%"
-msgstr ""
-
-msgid ""
-"graph count of revisions grouped by template\n"
-"\n"
-"    Will graph count of changed lines or revisions grouped by template or\n"
-"    alternatively by date, if dateformat is used. In this case it will "
-"override\n"
-"    template.\n"
-"\n"
-"    By default statistics are counted for number of changed lines.\n"
+msgid "generating stats: %d%%"
+msgstr ""
+
+msgid ""
+"histogram of changes to the repository\n"
+"\n"
+"    This command will display a histogram representing the number\n"
+"    of changed lines or revisions, grouped according to the given\n"
+"    template. The default template will group changes by author.\n"
+"    The --dateformat option may be used to group the results by\n"
+"    date instead.\n"
+"\n"
+"    Statistics are based on the number of changed lines, or\n"
+"    alternatively the number of matching revisions if the\n"
+"    --changesets option is specified.\n"
 "\n"
 "    Examples:\n"
 "\n"
@@ -591,9 +486,14 @@
 "      # display count of lines changed in every year\n"
 "      hg churn -f '%Y' -s\n"
 "\n"
-"    The map file format used to specify aliases is fairly simple:\n"
-"\n"
-"    <alias email> <actual email>"
+"    It is possible to map alternate email addresses to a main address\n"
+"    by providing a file using the following format:\n"
+"\n"
+"    <alias email> <actual email>\n"
+"\n"
+"    Such a file may be specified with the --aliases option, otherwise a\n"
+"    .hgchurn file will be looked for in the working directory root.\n"
+"    "
 msgstr ""
 
 #, python-format
@@ -603,8 +503,9 @@
 msgid "count rate for the specified revision or range"
 msgstr ""
 
-msgid "count rate for revs matching date spec"
-msgstr ""
+#, fuzzy
+msgid "count rate for revisions matching date spec"
+msgstr "显示匹配日期的版本"
 
 msgid "template to group changesets"
 msgstr ""
@@ -628,24 +529,20 @@
 msgstr ""
 
 msgid ""
-"add color output to status, qseries, and diff-related commands\n"
-"\n"
-"This extension modifies the status command to add color to its output to\n"
-"reflect file status, the qseries command to add color to reflect patch "
-"status\n"
-"(applied, unapplied, missing), and to diff-related commands to highlight\n"
-"additions, removals, diff headers, and trailing whitespace.\n"
-"\n"
-"Other effects in addition to color, like bold and underlined text, are also\n"
-"available.  Effects are rendered with the ECMA-48 SGR control function (aka\n"
-"ANSI escape codes).  This module also provides the render_text function,\n"
-"which can be used to add effects to any text.\n"
-"\n"
-"To enable this extension, add this to your .hgrc file:\n"
-"[extensions]\n"
-"color =\n"
-"\n"
-"Default effects my be overriden from the .hgrc file:\n"
+"colorize output from some commands\n"
+"\n"
+"This extension modifies the status command to add color to its output\n"
+"to reflect file status, the qseries command to add color to reflect\n"
+"patch status (applied, unapplied, missing), and to diff-related\n"
+"commands to highlight additions, removals, diff headers, and trailing\n"
+"whitespace.\n"
+"\n"
+"Other effects in addition to color, like bold and underlined text, are\n"
+"also available. Effects are rendered with the ECMA-48 SGR control\n"
+"function (aka ANSI escape codes). This module also provides the\n"
+"render_text function, which can be used to add effects to any text.\n"
+"\n"
+"Default effects may be overridden from the .hgrc file:\n"
 "\n"
 "[color]\n"
 "status.modified = blue bold underline red_background\n"
@@ -674,37 +571,13 @@
 "diff.trailingwhitespace = bold red_background\n"
 msgstr ""
 
-msgid "Wrap text in commands to turn on each effect."
-msgstr ""
-
-msgid "run the status command with colored output"
-msgstr ""
-
-msgid "run the qseries command with colored output"
-msgstr ""
-
-msgid "wrap ui.write for colored diff output"
-msgstr ""
-
-msgid "wrap cmdutil.changeset_printer.showpatch with colored output"
-msgstr ""
-
-msgid "run the diff command with colored output"
-msgstr ""
-
-msgid "Initialize the extension."
-msgstr ""
-
-msgid "patch in command to command table and load effect map"
-msgstr ""
-
 msgid "when to colorize (always, auto, or never)"
 msgstr ""
 
 msgid "don't colorize output"
 msgstr ""
 
-msgid "converting foreign VCS repositories to Mercurial"
+msgid "import from foreign VCS repositories into Mercurial"
 msgstr ""
 
 msgid ""
@@ -725,33 +598,44 @@
 "    - Mercurial [hg]\n"
 "    - Subversion [svn] (history on branches is not preserved)\n"
 "\n"
-"    If no revision is given, all revisions will be converted. Otherwise,\n"
-"    convert will only import up to the named revision (given in a format\n"
-"    understood by the source).\n"
+"    If no revision is given, all revisions will be converted.\n"
+"    Otherwise, convert will only import up to the named revision\n"
+"    (given in a format understood by the source).\n"
 "\n"
 "    If no destination directory name is specified, it defaults to the\n"
-"    basename of the source with '-hg' appended.  If the destination\n"
+"    basename of the source with '-hg' appended. If the destination\n"
 "    repository doesn't exist, it will be created.\n"
 "\n"
+"    By default, all sources except Mercurial will use\n"
+"    --branchsort. Mercurial uses --sourcesort to preserve original\n"
+"    revision numbers order. Sort modes have the following effects:\n"
+"      --branchsort: convert from parent to child revision when\n"
+"        possible, which means branches are usually converted one after\n"
+"        the other. It generates more compact repositories.\n"
+"      --datesort: sort revisions by date. Converted repositories have\n"
+"        good-looking changelogs but are often an order of magnitude\n"
+"        larger than the same ones generated by --branchsort.\n"
+"      --sourcesort: try to preserve source revisions order, only\n"
+"        supported by Mercurial sources.\n"
+"\n"
 "    If <REVMAP> isn't given, it will be put in a default location\n"
-"    (<dest>/.hg/shamap by default).  The <REVMAP> is a simple text\n"
-"    file that maps each source commit ID to the destination ID for\n"
-"    that revision, like so:\n"
+"    (<dest>/.hg/shamap by default). The <REVMAP> is a simple text file\n"
+"    that maps each source commit ID to the destination ID for that\n"
+"    revision, like so:\n"
 "    <source ID> <destination ID>\n"
 "\n"
-"    If the file doesn't exist, it's automatically created.  It's updated\n"
-"    on each commit copied, so convert-repo can be interrupted and can\n"
-"    be run repeatedly to copy new commits.\n"
-"\n"
-"    The [username mapping] file is a simple text file that maps each source\n"
-"    commit author to a destination commit author. It is handy for source "
-"SCMs\n"
-"    that use unix logins to identify authors (eg: CVS). One line per author\n"
-"    mapping and the line format is:\n"
+"    If the file doesn't exist, it's automatically created. It's\n"
+"    updated on each commit copied, so convert-repo can be interrupted\n"
+"    and can be run repeatedly to copy new commits.\n"
+"\n"
+"    The [username mapping] file is a simple text file that maps each\n"
+"    source commit author to a destination commit author. It is handy\n"
+"    for source SCMs that use unix logins to identify authors (eg:\n"
+"    CVS). One line per author mapping and the line format is:\n"
 "    srcauthor=whatever string you want\n"
 "\n"
 "    The filemap is a file that allows filtering and remapping of files\n"
-"    and directories.  Comment lines start with '#'.  Each line can\n"
+"    and directories. Comment lines start with '#'. Each line can\n"
 "    contain one of the following directives:\n"
 "\n"
 "      include path/to/file\n"
@@ -762,33 +646,44 @@
 "\n"
 "    The 'include' directive causes a file, or all files under a\n"
 "    directory, to be included in the destination repository, and the\n"
-"    exclusion of all other files and dirs not explicitely included.\n"
+"    exclusion of all other files and directories not explicitly included.\n"
 "    The 'exclude' directive causes files or directories to be omitted.\n"
-"    The 'rename' directive renames a file or directory.  To rename from a\n"
-"    subdirectory into the root of the repository, use '.' as the path to\n"
-"    rename to.\n"
+"    The 'rename' directive renames a file or directory. To rename from\n"
+"    a subdirectory into the root of the repository, use '.' as the\n"
+"    path to rename to.\n"
 "\n"
 "    The splicemap is a file that allows insertion of synthetic\n"
-"    history, letting you specify the parents of a revision.  This is\n"
+"    history, letting you specify the parents of a revision. This is\n"
 "    useful if you want to e.g. give a Subversion merge two parents, or\n"
-"    graft two disconnected series of history together.  Each entry\n"
+"    graft two disconnected series of history together. Each entry\n"
 "    contains a key, followed by a space, followed by one or two\n"
-"    values, separated by spaces.  The key is the revision ID in the\n"
-"    source revision control system whose parents should be modified\n"
-"    (same format as a key in .hg/shamap).  The values are the revision\n"
-"    IDs (in either the source or destination revision control system)\n"
-"    that should be used as the new parents for that node.\n"
+"    comma-separated values. The key is the revision ID in the source\n"
+"    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"
+"\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"
+"    conjunction with a splicemap, it allows for a powerful combination\n"
+"    to help fix even the most badly mismanaged repositories and turn them\n"
+"    into nicely structured Mercurial repositories. The branchmap contains\n"
+"    lines of the form \"original_branch_name new_branch_name\".\n"
+"    \"original_branch_name\" is the name of the branch in the source\n"
+"    repository, and \"new_branch_name\" is the name of the branch is the\n"
+"    destination repository. This can be used to (for instance) move code\n"
+"    in one repository from \"default\" to a named branch.\n"
 "\n"
 "    Mercurial Source\n"
 "    -----------------\n"
 "\n"
-"    --config convert.hg.ignoreerrors=False (boolean)\n"
+"    --config convert.hg.ignoreerrors=False    (boolean)\n"
 "        ignore integrity errors when reading. Use it to fix Mercurial\n"
 "        repositories with missing revlogs, by converting from and to\n"
 "        Mercurial.\n"
-"    --config convert.hg.saverev=False          (boolean)\n"
-"        store original revision ID in changeset (forces target IDs to "
-"change)\n"
+"    --config convert.hg.saverev=False         (boolean)\n"
+"        store original revision ID in changeset (forces target IDs to\n"
+"        change)\n"
 "    --config convert.hg.startrev=0            (hg revision identifier)\n"
 "        convert start revision and its descendants\n"
 "\n"
@@ -797,12 +692,12 @@
 "\n"
 "    CVS source will use a sandbox (i.e. a checked-out copy) from CVS\n"
 "    to indicate the starting point of what will be converted. Direct\n"
-"    access to the repository files is not needed, unless of course\n"
-"    the repository is :local:. The conversion uses the top level\n"
-"    directory in the sandbox to find the CVS repository, and then uses\n"
-"    CVS rlog commands to find files to convert. This means that unless\n"
-"    a filemap is given, all files under the starting directory will be\n"
-"    converted, and that any directory reorganisation in the CVS\n"
+"    access to the repository files is not needed, unless of course the\n"
+"    repository is :local:. The conversion uses the top level directory\n"
+"    in the sandbox to find the CVS repository, and then uses CVS rlog\n"
+"    commands to find files to convert. This means that unless a\n"
+"    filemap is given, all files under the starting directory will be\n"
+"    converted, and that any directory reorganization in the CVS\n"
 "    sandbox is ignored.\n"
 "\n"
 "    Because CVS does not have changesets, it is necessary to collect\n"
@@ -810,46 +705,52 @@
 "    source uses its internal changeset merging code by default but can\n"
 "    be configured to call the external 'cvsps' program by setting:\n"
 "        --config convert.cvsps='cvsps -A -u --cvs-direct -q'\n"
-"    This is a legacy option and may be removed in future.\n"
+"    This option is deprecated and will be removed in Mercurial 1.4.\n"
 "\n"
 "    The options shown are the defaults.\n"
 "\n"
 "    Internal cvsps is selected by setting\n"
 "        --config convert.cvsps=builtin\n"
 "    and has a few more configurable options:\n"
-"        --config convert.cvsps.fuzz=60   (integer)\n"
-"            Specify the maximum time (in seconds) that is allowed between\n"
-"            commits with identical user and log message in a single\n"
-"            changeset. When very large files were checked in as part\n"
-"            of a changeset then the default may not be long enough.\n"
+"        --config convert.cvsps.cache=True     (boolean)\n"
+"            Set to False to disable remote log caching, for testing and\n"
+"            debugging purposes.\n"
+"        --config convert.cvsps.fuzz=60        (integer)\n"
+"            Specify the maximum time (in seconds) that is allowed\n"
+"            between commits with identical user and log message in a\n"
+"            single changeset. When very large files were checked in as\n"
+"            part of a changeset then the default may not be long\n"
+"            enough.\n"
 "        --config convert.cvsps.mergeto='{{mergetobranch ([-\\w]+)}}'\n"
-"            Specify a regular expression to which commit log messages are\n"
-"            matched. If a match occurs, then the conversion process will\n"
-"            insert a dummy revision merging the branch on which this log\n"
-"            message occurs to the branch indicated in the regex.\n"
+"            Specify a regular expression to which commit log messages\n"
+"            are matched. If a match occurs, then the conversion\n"
+"            process will insert a dummy revision merging the branch on\n"
+"            which this log message occurs to the branch indicated in\n"
+"            the regex.\n"
 "        --config convert.cvsps.mergefrom='{{mergefrombranch ([-\\w]+)}}'\n"
-"            Specify a regular expression to which commit log messages are\n"
-"            matched. If a match occurs, then the conversion process will\n"
-"            add the most recent revision on the branch indicated in the\n"
-"            regex as the second parent of the changeset.\n"
-"\n"
-"    The hgext/convert/cvsps wrapper script allows the builtin changeset\n"
-"    merging code to be run without doing a conversion. Its parameters and\n"
-"    output are similar to that of cvsps 2.1.\n"
+"            Specify a regular expression to which commit log messages\n"
+"            are matched. If a match occurs, then the conversion\n"
+"            process will add the most recent revision on the branch\n"
+"            indicated in the regex as the second parent of the\n"
+"            changeset.\n"
+"\n"
+"    The hgext/convert/cvsps wrapper script allows the builtin\n"
+"    changeset merging code to be run without doing a conversion. Its\n"
+"    parameters and output are similar to that of cvsps 2.1.\n"
 "\n"
 "    Subversion Source\n"
 "    -----------------\n"
 "\n"
 "    Subversion source detects classical trunk/branches/tags layouts.\n"
 "    By default, the supplied \"svn://repo/path/\" source URL is\n"
-"    converted as a single branch. If \"svn://repo/path/trunk\" exists\n"
-"    it replaces the default branch. If \"svn://repo/path/branches\"\n"
-"    exists, its subdirectories are listed as possible branches. If\n"
+"    converted as a single branch. If \"svn://repo/path/trunk\" exists it\n"
+"    replaces the default branch. If \"svn://repo/path/branches\" exists,\n"
+"    its subdirectories are listed as possible branches. If\n"
 "    \"svn://repo/path/tags\" exists, it is looked for tags referencing\n"
 "    converted branches. Default \"trunk\", \"branches\" and \"tags\" values\n"
-"    can be overriden with following options. Set them to paths\n"
-"    relative to the source URL, or leave them blank to disable\n"
-"    autodetection.\n"
+"    can be overridden with following options. Set them to paths\n"
+"    relative to the source URL, or leave them blank to disable auto\n"
+"    detection.\n"
 "\n"
 "    --config convert.svn.branches=branches    (directory name)\n"
 "        specify the directory containing branches\n"
@@ -868,16 +769,17 @@
 "    Perforce Source\n"
 "    ---------------\n"
 "\n"
-"    The Perforce (P4) importer can be given a p4 depot path or a client\n"
-"    specification as source. It will convert all files in the source to\n"
-"    a flat Mercurial repository, ignoring labels, branches and integrations.\n"
-"    Note that when a depot path is given you then usually should specify a\n"
-"    target directory, because otherwise the target may be named ...-hg.\n"
-"\n"
-"    It is possible to limit the amount of source history to be converted\n"
-"    by specifying an initial Perforce revision.\n"
-"\n"
-"    --config convert.p4.startrev=0           (perforce changelist number)\n"
+"    The Perforce (P4) importer can be given a p4 depot path or a\n"
+"    client specification as source. It will convert all files in the\n"
+"    source to a flat Mercurial repository, ignoring labels, branches\n"
+"    and integrations. Note that when a depot path is given you then\n"
+"    usually should specify a target directory, because otherwise the\n"
+"    target may be named ...-hg.\n"
+"\n"
+"    It is possible to limit the amount of source history to be\n"
+"    converted by specifying an initial Perforce revision.\n"
+"\n"
+"    --config convert.p4.startrev=0            (perforce changelist number)\n"
 "        specify initial Perforce revision.\n"
 "\n"
 "\n"
@@ -897,12 +799,14 @@
 msgid ""
 "create changeset information from CVS\n"
 "\n"
-"    This command is intended as a debugging tool for the CVS to Mercurial\n"
-"    converter, and can be used as a direct replacement for cvsps.\n"
-"\n"
-"    Hg debugcvsps reads the CVS rlog for current directory (or any named\n"
-"    directory) in the CVS repository, and converts the log to a series of\n"
-"    changesets based on matching commit log entries and dates."
+"    This command is intended as a debugging tool for the CVS to\n"
+"    Mercurial converter, and can be used as a direct replacement for\n"
+"    cvsps.\n"
+"\n"
+"    Hg debugcvsps reads the CVS rlog for current directory (or any\n"
+"    named directory) in the CVS repository, and converts the log to a\n"
+"    series of changesets based on matching commit log entries and\n"
+"    dates."
 msgstr ""
 
 msgid "username mapping filename"
@@ -923,9 +827,18 @@
 msgid "splice synthesized history into place"
 msgstr ""
 
+msgid "change branch names while converting"
+msgstr ""
+
+msgid "try to sort changesets by branches"
+msgstr ""
+
 msgid "try to sort changesets by date"
 msgstr ""
 
+msgid "preserve source changesets order"
+msgstr ""
+
 msgid "hg convert [OPTION]... SOURCE [DEST [REVMAP]]"
 msgstr ""
 
@@ -962,6 +875,14 @@
 msgid "hg debugcvsps [OPTION]... [PATH]..."
 msgstr ""
 
+msgid ""
+"warning: lightweight checkouts may cause conversion failures, try with a "
+"regular branch instead.\n"
+msgstr ""
+
+msgid "bzr source type could not be determined\n"
+msgstr ""
+
 #, python-format
 msgid "%s is not a valid revision in current branch"
 msgstr ""
@@ -971,6 +892,10 @@
 msgstr ""
 
 #, python-format
+msgid "%s.%s symlink has no target"
+msgstr ""
+
+#, python-format
 msgid "cannot find required \"%s\" tool"
 msgstr ""
 
@@ -987,6 +912,10 @@
 msgstr ""
 
 #, python-format
+msgid "syntax error in %s(%d): key/value pair expected"
+msgstr ""
+
+#, python-format
 msgid "could not open map file %r: %s"
 msgstr ""
 
@@ -1002,6 +931,10 @@
 msgid "%s: unknown repository type"
 msgstr ""
 
+#, fuzzy, python-format
+msgid "unknown sort mode: %s"
+msgstr "hg: 未知命令 '%s'\n"
+
 #, python-format
 msgid "cycle detected between %s and %s"
 msgstr ""
@@ -1014,7 +947,7 @@
 msgstr ""
 
 #, python-format
-msgid "Overriding mapping for author %s, was %s, will be %s\n"
+msgid "Ignoring bad line in author map file %s: %s\n"
 msgstr ""
 
 #, python-format
@@ -1022,7 +955,7 @@
 msgstr ""
 
 #, python-format
-msgid "Ignoring bad line in author map file %s: %s\n"
+msgid "overriding mapping for author %s, was %s, will be %s\n"
 msgstr ""
 
 #, python-format
@@ -1046,6 +979,17 @@
 msgid "assuming destination %s\n"
 msgstr ""
 
+msgid "more than one sort mode specified"
+msgstr ""
+
+msgid "--sourcesort is not supported by this data source"
+msgstr ""
+
+msgid ""
+"warning: support for external cvsps is deprecated and will be removed in "
+"Mercurial 1.4\n"
+msgstr ""
+
 #, python-format
 msgid "revision %s is not a patchset number or date"
 msgstr ""
@@ -1110,6 +1054,10 @@
 msgid "revision must be followed by date line"
 msgstr ""
 
+#, fuzzy, python-format
+msgid "found synthetic revision in %s: %r\n"
+msgstr "版本 %d 有未知路径: %s\n"
+
 #, python-format
 msgid "writing cvs log cache %s\n"
 msgstr ""
@@ -1121,6 +1069,15 @@
 msgid "creating changesets\n"
 msgstr ""
 
+msgid "synthetic changeset cannot have multiple parents"
+msgstr ""
+
+#, python-format
+msgid ""
+"warning: CVS commit message references non-existent branch %r:\n"
+"%s\n"
+msgstr ""
+
 #, python-format
 msgid "%d changeset entries\n"
 msgstr ""
@@ -1178,7 +1135,7 @@
 msgstr ""
 
 #, python-format
-msgid "analysing revision %s...\n"
+msgid "analyzing revision %s...\n"
 msgstr ""
 
 #, python-format
@@ -1203,6 +1160,9 @@
 msgid "pulling from %s into %s\n"
 msgstr "自 %s 拉到 %s\n"
 
+msgid "filtering out empty revision\n"
+msgstr ""
+
 msgid "updating tags\n"
 msgstr "正在更新标签\n"
 
@@ -1224,8 +1184,8 @@
 msgid "%s does not look like a monotone repo"
 msgstr "%s 不像是单纯的 monotone 版本库"
 
-#, python-format
-msgid "copying file in renamed dir from '%s' to '%s'"
+#, fuzzy, python-format
+msgid "copying file in renamed directory from '%s' to '%s'"
 msgstr "从已改名的目录 '%s' 复制文件到 '%s'"
 
 msgid "reading p4 views\n"
@@ -1272,7 +1232,8 @@
 msgid "found branch %s at %d\n"
 msgstr "发现分支 %s 位于 %d\n"
 
-msgid "svn: start revision is not supported with with more than one branch"
+#, fuzzy
+msgid "svn: start revision is not supported with more than one branch"
 msgstr "svn: 在给出多于一个分支时不支持开始版本"
 
 #, python-format
@@ -1307,21 +1268,10 @@
 msgid "gone from %s\n"
 msgstr "离开 %s\n"
 
-#, python-format
-msgid "found parent directory %s\n"
-msgstr "发现父目录 %s\n"
-
-#, python-format
-msgid "base, entry %s %s\n"
+#, fuzzy, python-format
+msgid "entry %s\n"
 msgstr "基本,入口 %s %s\n"
 
-msgid "munge-o-matic\n"
-msgstr ""
-
-#, python-format
-msgid "info: %s %s %s %s\n"
-msgstr "信息: %s %s %s %s\n"
-
 #, python-format
 msgid "unknown path in revision %d: %s\n"
 msgstr "版本 %d 有未知路径: %s\n"
@@ -1346,10 +1296,6 @@
 msgstr "为 \"%s\" 获取版本日志,自 %d 到 %d\n"
 
 #, python-format
-msgid "skipping blacklisted revision %d\n"
-msgstr "忽略黑名单版本 %d\n"
-
-#, python-format
 msgid "revision %d has no entries\n"
 msgstr "版本 %d 没有入口\n"
 
@@ -1379,18 +1325,14 @@
 msgstr ""
 
 msgid ""
+"allow external programs to compare revisions\n"
 "\n"
 "The `extdiff' Mercurial extension allows you to use external programs\n"
-"to compare revisions, or revision with working dir.  The external diff\n"
+"to compare revisions, or revision with working directory. The external diff\n"
 "programs are called with a configurable set of options and two\n"
 "non-option arguments: paths to directories containing snapshots of\n"
 "files to compare.\n"
 "\n"
-"To enable this extension:\n"
-"\n"
-"  [extensions]\n"
-"  hgext.extdiff =\n"
-"\n"
 "The `extdiff' extension also allows to configure new diff commands, so\n"
 "you do not need to type \"hg extdiff -p kdiff3\" always.\n"
 "\n"
@@ -1408,42 +1350,23 @@
 "  meld =\n"
 "\n"
 "  # add new command called vimdiff, runs gvimdiff with DirDiff plugin\n"
-"  #(see http://www.vim.org/scripts/script.php?script_id=102)\n"
-"  # Non english user, be sure to put \"let g:DirDiffDynamicDiffText = 1\" in\n"
+"  # (see http://www.vim.org/scripts/script.php?script_id=102)\n"
+"  # Non English user, be sure to put \"let g:DirDiffDynamicDiffText = 1\" in\n"
 "  # your .vimrc\n"
 "  vimdiff = gvim -f '+next' '+execute \"DirDiff\" argv(0) argv(1)'\n"
 "\n"
-"You can use -I/-X and list of file or directory names like normal\n"
-"\"hg diff\" command.  The `extdiff' extension makes snapshots of only\n"
-"needed files, so running the external diff program will actually be\n"
-"pretty fast (at least faster than having to compare the entire tree).\n"
-msgstr ""
-
-msgid "snapshot files as of some revision"
+"You can use -I/-X and list of file or directory names like normal \"hg\n"
+"diff\" command. The `extdiff' extension makes snapshots of only needed\n"
+"files, so running the external diff program will actually be pretty\n"
+"fast (at least faster than having to compare the entire tree).\n"
 msgstr ""
 
 #, python-format
 msgid "making snapshot of %d files from rev %s\n"
 msgstr ""
 
-msgid ""
-"snapshot files from working directory.\n"
-"    if not using snapshot, -I/-X does not work and recursive diff\n"
-"    in tools like kdiff3 and meld displays too many files."
-msgstr ""
-
-#, python-format
-msgid "making snapshot of %d files from working dir\n"
-msgstr ""
-
-msgid ""
-"Do the actuall diff:\n"
-"\n"
-"    - copy to a temp structure if diffing 2 internal revisions\n"
-"    - copy to a temp structure if diffing working revision with\n"
-"      another one and more than 1 file is changed\n"
-"    - just invoke the diff for a single file in the working dir\n"
-"    "
+#, python-format
+msgid "making snapshot of %d files from working directory\n"
 msgstr ""
 
 msgid "cannot specify --rev and --change at the same time"
@@ -1464,19 +1387,19 @@
 "use external program to diff repository (or selected files)\n"
 "\n"
 "    Show differences between revisions for the specified files, using\n"
-"    an external program.  The default program used is diff, with\n"
+"    an external program. The default program used is diff, with\n"
 "    default options \"-Npru\".\n"
 "\n"
-"    To select a different program, use the -p option.  The program\n"
-"    will be passed the names of two directories to compare.  To pass\n"
-"    additional options to the program, use the -o option.  These will\n"
-"    be passed before the names of the directories to compare.\n"
-"\n"
-"    When two revision arguments are given, then changes are\n"
-"    shown between those revisions. If only one revision is\n"
-"    specified then that revision is compared to the working\n"
-"    directory, and, when no revisions are specified, the\n"
-"    working directory files are compared to its parent."
+"    To select a different program, use the -p/--program option. The\n"
+"    program will be passed the names of two directories to compare. To\n"
+"    pass additional options to the program, use -o/--option. These\n"
+"    will be passed before the names of the directories to compare.\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 ""
 
 msgid "comparison program to run"
@@ -1491,14 +1414,11 @@
 msgid "hg extdiff [OPT]... [FILE]..."
 msgstr ""
 
-msgid "use closure to save diff command to use"
-msgstr ""
-
 #, python-format
 msgid "hg %s [OPTION]... [FILE]..."
 msgstr ""
 
-msgid "pulling, updating and merging in one command"
+msgid "pull, update and merge in one command"
 msgstr ""
 
 msgid ""
@@ -1507,13 +1427,14 @@
 "    This finds all changes from the repository at the specified path\n"
 "    or URL and adds them to the local repository.\n"
 "\n"
-"    If the pulled changes add a new branch head, the head is automatically\n"
-"    merged, and the result of the merge is committed.  Otherwise, the\n"
-"    working directory is updated to include the new changes.\n"
+"    If the pulled changes add a new branch head, the head is\n"
+"    automatically merged, and the result of the merge is committed.\n"
+"    Otherwise, the working directory is updated to include the new\n"
+"    changes.\n"
 "\n"
 "    When a merge occurs, the newly pulled changes are assumed to be\n"
-"    \"authoritative\".  The head of the new changes is used as the first\n"
-"    parent, with local changes as the second.  To switch the merge\n"
+"    \"authoritative\". The head of the new changes is used as the first\n"
+"    parent, with local changes as the second. To switch the merge\n"
 "    order, use --switch-parent.\n"
 "\n"
 "    See 'hg help dates' for a list of formats valid for -d/--date.\n"
@@ -1541,7 +1462,9 @@
 msgid "pulling from %s\n"
 msgstr "正在拉自 %s\n"
 
-msgid "fetch -r doesn't work for remote repositories yet"
+msgid ""
+"Other repository doesn't support revision lookup, so a rev cannot be "
+"specified."
 msgstr ""
 
 #, python-format
@@ -1581,25 +1504,13 @@
 msgid "hg fetch [SOURCE]"
 msgstr ""
 
-msgid " returns of the good and bad signatures"
-msgstr ""
+#, fuzzy
+msgid "sign and verify changesets"
+msgstr "正在增加修改集\n"
 
 msgid "error while verifying signature"
 msgstr ""
 
-msgid "create a new gpg instance"
-msgstr ""
-
-msgid ""
-"\n"
-"    walk over every sigs, yields a couple\n"
-"    ((node, version, sig), (filename, linenumber))\n"
-"    "
-msgstr ""
-
-msgid "get the keys who signed a data"
-msgstr ""
-
 #, python-format
 msgid "%s Bad signature from \"%s\"\n"
 msgstr ""
@@ -1626,9 +1537,6 @@
 msgid "No valid signature for %s\n"
 msgstr ""
 
-msgid "associate a string to a key (username, comment)"
-msgstr ""
-
 msgid ""
 "add a signature for the current or given revision\n"
 "\n"
@@ -1654,9 +1562,6 @@
 msgid "Added signature for changeset %s"
 msgstr ""
 
-msgid "map a manifest into some text"
-msgstr ""
-
 msgid "unknown signature version"
 msgstr ""
 
@@ -1685,59 +1590,13 @@
 msgstr ""
 
 msgid ""
-"show revision graphs in terminal windows\n"
+"show revision graphs in terminals\n"
 "\n"
 "This extension adds a --graph option to the incoming, outgoing and log\n"
-"commands. When this options is given, an ascii representation of the\n"
+"commands. When this options is given, an ASCII representation of the\n"
 "revision graph is also shown.\n"
 msgstr ""
 
-msgid ""
-"cset DAG generator yielding (rev, node, [parents]) tuples\n"
-"\n"
-"    This generator function walks through the revision history from revision\n"
-"    start to revision stop (which must be less than or equal to start).\n"
-"    "
-msgstr ""
-
-msgid ""
-"file cset DAG generator yielding (rev, node, [parents]) tuples\n"
-"\n"
-"    This generator function walks through the revision history of a single\n"
-"    file from revision start to revision stop (which must be less than or\n"
-"    equal to start).\n"
-"    "
-msgstr ""
-
-msgid ""
-"grapher for asciigraph on a list of nodes and their parents\n"
-"\n"
-"    nodes must generate tuples (node, parents, char, lines) where\n"
-"     - parents must generate the parents of node, in sorted order,\n"
-"       and max length 2,\n"
-"     - char is the char to print as the node symbol, and\n"
-"     - lines are the lines to display next to the node.\n"
-"    "
-msgstr ""
-
-msgid ""
-"prints an ASCII graph of the DAG returned by the grapher\n"
-"\n"
-"    grapher is a generator that emits tuples with the following elements:\n"
-"\n"
-"      - Character to use as node's symbol.\n"
-"      - List of lines to display as the node's text.\n"
-"      - Column of the current node in the set of ongoing edges.\n"
-"      - Edges; a list of (col, next_col) indicating the edges between\n"
-"        the current node and its parents.\n"
-"      - Number of columns (ongoing edges) in the current revision.\n"
-"      - The difference between the number of columns (ongoing edges)\n"
-"        in the next revision and the number of columns (ongoing edges)\n"
-"        in the current revision. That is: -1 means one column removed;\n"
-"        0 means no columns added or removed; 1 means one column added.\n"
-"    "
-msgstr ""
-
 #, python-format
 msgid "--graph option is incompatible with --%s"
 msgstr ""
@@ -1753,17 +1612,6 @@
 "    "
 msgstr ""
 
-msgid ""
-"show the outgoing changesets alongside an ASCII revision graph\n"
-"\n"
-"    Print the outgoing changesets alongside a revision graph drawn with\n"
-"    ASCII characters.\n"
-"\n"
-"    Nodes printed as an @ character are parents of the working\n"
-"    directory.\n"
-"    "
-msgstr ""
-
 #, python-format
 msgid "comparing with %s\n"
 msgstr ""
@@ -1771,20 +1619,6 @@
 msgid "no changes found\n"
 msgstr "没有发现修改\n"
 
-msgid ""
-"show the incoming changesets alongside an ASCII revision graph\n"
-"\n"
-"    Print the incoming changesets alongside a revision graph drawn with\n"
-"    ASCII characters.\n"
-"\n"
-"    Nodes printed as an @ character are parents of the working\n"
-"    directory.\n"
-"    "
-msgstr ""
-
-msgid "wrap the command"
-msgstr ""
-
 msgid "show the revision DAG"
 msgstr "显示版本分支图"
 
@@ -1801,7 +1635,7 @@
 msgstr ""
 
 msgid ""
-"CIA notification\n"
+"integrate Mercurial with a CIA notification service\n"
 "\n"
 "This is meant to be run as a changegroup or incoming hook.\n"
 "To configure it, set the following options in your hgrc:\n"
@@ -1816,8 +1650,7 @@
 "# Append a diffstat to the log message (optional)\n"
 "#diffstat = False\n"
 "# Template to use for log messages (optional)\n"
-"#template = {desc}\n"
-"{baseurl}/rev/{node}-- {diffstat}\n"
+"#template = {desc}\\n{baseurl}/rev/{node}-- {diffstat}\n"
 "# Style to use (optional)\n"
 "#style = foo\n"
 "# The URL of the CIA notification service (optional)\n"
@@ -1838,19 +1671,10 @@
 "baseurl = http://server/path/to/repo\n"
 msgstr ""
 
-msgid " A CIA message "
-msgstr ""
-
-msgid " CIA notification class "
-msgstr ""
-
 #, python-format
 msgid "hgcia: sending update to %s\n"
 msgstr ""
 
-msgid " send CIA notification "
-msgstr ""
-
 msgid "email.from must be defined when sending by email"
 msgstr ""
 
@@ -1861,33 +1685,21 @@
 msgstr ""
 
 msgid ""
-"browsing the repository in a graphical way\n"
+"browse the repository in a graphical way\n"
 "\n"
 "The hgk extension allows browsing the history of a repository in a\n"
-"graphical way. It requires Tcl/Tk version 8.4 or later. (Tcl/Tk is\n"
-"not distributed with Mercurial.)\n"
+"graphical way. It requires Tcl/Tk version 8.4 or later. (Tcl/Tk is not\n"
+"distributed with Mercurial.)\n"
 "\n"
 "hgk consists of two parts: a Tcl script that does the displaying and\n"
-"querying of information, and an extension to mercurial named hgk.py,\n"
+"querying of information, and an extension to Mercurial named hgk.py,\n"
 "which provides hooks for hgk to get information. hgk can be found in\n"
-"the contrib directory, and hgk.py can be found in the hgext directory.\n"
-"\n"
-"To load the hgext.py extension, add it to your .hgrc file (you have\n"
-"to use your global $HOME/.hgrc file, not one in a repository). You\n"
-"can specify an absolute path:\n"
-"\n"
-"  [extensions]\n"
-"  hgk=/usr/local/lib/hgk.py\n"
-"\n"
-"Mercurial can also scan the default python library path for a file\n"
-"named 'hgk.py' if you set hgk empty:\n"
-"\n"
-"  [extensions]\n"
-"  hgk=\n"
+"the contrib directory, and the extension is shipped in the hgext\n"
+"repository, and needs to be enabled.\n"
 "\n"
 "The hg view command will launch the hgk Tcl script. For this command\n"
-"to work, hgk must be in your search path. Alternately, you can\n"
-"specify the path to hgk in your .hgrc file:\n"
+"to work, hgk must be in your search path. Alternately, you can specify\n"
+"the path to hgk in your .hgrc file:\n"
 "\n"
 "  [hgk]\n"
 "  path=/location/of/hgk\n"
@@ -1984,16 +1796,11 @@
 msgstr ""
 
 msgid ""
-"syntax highlighting in hgweb, based on Pygments\n"
-"\n"
-"It depends on the pygments syntax highlighting library:\n"
+"syntax highlighting for hgweb\n"
+"\n"
+"It depends on the Pygments syntax highlighting library:\n"
 "http://pygments.org/\n"
 "\n"
-"To enable the extension add this to hgrc:\n"
-"\n"
-"[extensions]\n"
-"hgext.highlight =\n"
-"\n"
 "There is a single configuration option:\n"
 "\n"
 "[web]\n"
@@ -2004,12 +1811,37 @@
 "-- Adam Hupp <adam@hupp.org>\n"
 msgstr ""
 
-msgid "inotify-based status acceleration for Linux systems\n"
+msgid "accelerate status report using system level services"
 msgstr ""
 
 msgid "start an inotify server for this repository"
 msgstr "为此版本库启动服务 'inotify'"
 
+msgid ""
+"debugging information for inotify extension\n"
+"\n"
+"    Prints the list of directories being watched by the inotify server.\n"
+"    "
+msgstr ""
+
+msgid "directories being watched:\n"
+msgstr ""
+
+msgid "run server in background"
+msgstr "在后台运行服务"
+
+msgid "used internally by daemon mode"
+msgstr "在后台服务模式内部使用"
+
+msgid "minutes to sit idle before exiting"
+msgstr "空闲几分钟后退出"
+
+msgid "name of file to write process ID to"
+msgstr "写入进程标识符的文件名称"
+
+msgid "hg inserve [OPT]..."
+msgstr ""
+
 msgid "(found dead inotify server socket; removing it)\n"
 msgstr ""
 
@@ -2031,25 +1863,17 @@
 msgid "failed to contact inotify server: %s\n"
 msgstr ""
 
-msgid "run server in background"
-msgstr "在后台运行服务"
-
-msgid "used internally by daemon mode"
-msgstr "在后台服务模式内部使用"
-
-msgid "minutes to sit idle before exiting"
-msgstr "空闲几分钟后退出"
-
-msgid "name of file to write process ID to"
-msgstr "写入进程标识符的文件名称"
-
-msgid "hg inserve [OPT]..."
+msgid "received empty answer from inotify server"
 msgstr ""
 
 #, python-format
 msgid "(inotify: received response from incompatible server version %d)\n"
 msgstr ""
 
+#, python-format
+msgid "(inotify: received '%s' response when expecting '%s')\n"
+msgstr ""
+
 msgid "this system does not seem to support inotify"
 msgstr ""
 
@@ -2143,29 +1967,39 @@
 msgstr ""
 
 #, python-format
-msgid "%s processing %d deferred events as %d\n"
-msgstr ""
-
-#, python-format
 msgid "could not start server: %s"
 msgstr ""
 
 #, python-format
+msgid "answering query for %r\n"
+msgstr ""
+
+#, python-format
 msgid "received query from incompatible client version %d\n"
 msgstr ""
 
 #, python-format
-msgid "answering query for %r\n"
+msgid "unrecognized query type: %s\n"
 msgstr ""
 
 msgid "finished setup\n"
 msgstr ""
 
-msgid "polling: no timeout\n"
-msgstr ""
-
-#, python-format
-msgid "polling: %sms timeout\n"
+msgid ""
+"expand expressions into changelog and summaries\n"
+"\n"
+"This extension allows the use of a special syntax in summaries,\n"
+"which will be automatically expanded into links or any other\n"
+"arbitrary expression, much like InterWiki does.\n"
+"\n"
+"A few example patterns (link to bug tracking, etc.) that may\n"
+"be used in your hgrc:\n"
+"\n"
+"  [interhg]\n"
+"  issues = s!issue(\\d+)!<a href=\"http://bts/issue\\1\">issue\\1</a>!\n"
+"  bugzilla = s!((?:bug|b=|(?=#?\\d{4,}))(?:\\s*#?)(\\d+))!<a..=\\2\">\\1</a>!"
+"i\n"
+"  boldify = s!(^|\\s)#(\\d+)\\b! <b>#\\2</b>!\n"
 msgstr ""
 
 #, python-format
@@ -2177,17 +2011,17 @@
 msgstr ""
 
 msgid ""
-"keyword expansion in local repositories\n"
-"\n"
-"This extension expands RCS/CVS-like or self-customized $Keywords$\n"
-"in tracked text files selected by your configuration.\n"
-"\n"
-"Keywords are only expanded in local repositories and not stored in\n"
-"the change history. The mechanism can be regarded as a convenience\n"
-"for the current user or for archive distribution.\n"
-"\n"
-"Configuration is done in the [keyword] and [keywordmaps] sections\n"
-"of hgrc files.\n"
+"expand keywords in tracked files\n"
+"\n"
+"This extension expands RCS/CVS-like or self-customized $Keywords$ in\n"
+"tracked text files selected by your configuration.\n"
+"\n"
+"Keywords are only expanded in local repositories and not stored in the\n"
+"change history. The mechanism can be regarded as a convenience for the\n"
+"current user or for archive distribution.\n"
+"\n"
+"Configuration is done in the [keyword] and [keywordmaps] sections of\n"
+"hgrc files.\n"
 "\n"
 "Example:\n"
 "\n"
@@ -2197,96 +2031,40 @@
 "    x*    = ignore\n"
 "\n"
 "Note: the more specific you are in your filename patterns\n"
-"      the less you lose speed in huge repos.\n"
+"      the less you lose speed in huge repositories.\n"
 "\n"
 "For [keywordmaps] template mapping and expansion demonstration and\n"
 "control run \"hg kwdemo\".\n"
 "\n"
 "An additional date template filter {date|utcdate} is provided.\n"
 "\n"
-"The default template mappings (view with \"hg kwdemo -d\") can be replaced\n"
-"with customized keywords and templates.\n"
-"Again, run \"hg kwdemo\" to control the results of your config changes.\n"
+"The default template mappings (view with \"hg kwdemo -d\") can be\n"
+"replaced with customized keywords and templates. Again, run \"hg\n"
+"kwdemo\" to control the results of your config changes.\n"
 "\n"
 "Before changing/disabling active keywords, run \"hg kwshrink\" to avoid\n"
-"the risk of inadvertedly storing expanded keywords in the change history.\n"
+"the risk of inadvertently storing expanded keywords in the change\n"
+"history.\n"
 "\n"
 "To force expansion after enabling it, or a configuration change, run\n"
 "\"hg kwexpand\".\n"
 "\n"
-"Also, when committing with the record extension or using mq's qrecord, be "
-"aware\n"
-"that keywords cannot be updated. Again, run \"hg kwexpand\" on the files in\n"
-"question to update keyword expansions after all changes have been checked "
-"in.\n"
+"Also, when committing with the record extension or using mq's qrecord,\n"
+"be aware that keywords cannot be updated. Again, run \"hg kwexpand\" on\n"
+"the files in question to update keyword expansions after all changes\n"
+"have been checked in.\n"
 "\n"
 "Expansions spanning more than one line and incremental expansions,\n"
 "like CVS' $Log$, are not supported. A keyword template map\n"
 "\"Log = {desc}\" expands to the first line of the changeset description.\n"
 msgstr ""
 
-msgid "Returns hgdate in cvs-like UTC format."
-msgstr ""
-
-msgid ""
-"\n"
-"    Sets up keyword templates, corresponding keyword regex, and\n"
-"    provides keyword substitution functions.\n"
-"    "
-msgstr ""
-
-msgid "Replaces keywords in data with expanded template."
-msgstr ""
-
-msgid "Returns data with keywords expanded."
-msgstr ""
-
-msgid ""
-"Returns true if path matches [keyword] pattern\n"
-"        and is not a symbolic link.\n"
-"        Caveat: localrepository._link fails on Windows."
-msgstr ""
-
-msgid "Overwrites selected files expanding/shrinking keywords."
-msgstr ""
-
-#, python-format
-msgid "overwriting %s %s keywords\n"
-msgstr ""
-
-msgid "Unconditionally removes all keyword substitutions from text."
-msgstr ""
-
-msgid "Returns text with all keyword substitutions removed."
-msgstr ""
-
-msgid "Returns lines with keyword substitutions removed."
-msgstr ""
-
-msgid ""
-"If in restricted mode returns data read from wdir with\n"
-"        keyword substitutions removed."
-msgstr ""
-
-msgid ""
-"\n"
-"    Subclass of filelog to hook into its read, add, cmp methods.\n"
-"    Keywords are \"stored\" unexpanded, and processed on reading.\n"
-"    "
-msgstr ""
-
-msgid "Expands keywords when reading filelog."
-msgstr ""
-
-msgid "Removes keyword substitutions when adding to filelog."
-msgstr ""
-
-msgid "Removes keyword substitutions for comparison."
-msgstr ""
-
-msgid ""
-"Bails out if [keyword] configuration is not active.\n"
-"    Returns status of working directory."
+#, python-format
+msgid "overwriting %s expanding keywords\n"
+msgstr ""
+
+#, python-format
+msgid "overwriting %s shrinking keywords\n"
 msgstr ""
 
 msgid "[keyword] patterns cannot match"
@@ -2295,17 +2073,14 @@
 msgid "no [keyword] patterns configured"
 msgstr ""
 
-msgid "Selects files and passes them to kwtemplater.overwrite."
-msgstr ""
-
 msgid ""
 "print [keywordmaps] configuration and an expansion example\n"
 "\n"
-"    Show current, custom, or default keyword template maps\n"
-"    and their expansion.\n"
-"\n"
-"    Extend current configuration by specifying maps as arguments\n"
-"    and optionally by reading from an additional hgrc file.\n"
+"    Show current, custom, or default keyword template maps and their\n"
+"    expansions.\n"
+"\n"
+"    Extend current configuration by specifying maps as arguments and\n"
+"    optionally by reading from an additional hgrc file.\n"
 "\n"
 "    Override current keyword template maps with \"default\" option.\n"
 "    "
@@ -2317,9 +2092,11 @@
 "\t%s\n"
 msgstr ""
 
-#, python-format
-msgid "creating temporary repo at %s\n"
-msgstr ""
+#, fuzzy, python-format
+msgid "creating temporary repository at %s\n"
+msgstr ""
+"\n"
+"正在删除临时版本库 %s\n"
 
 #, python-format
 msgid ""
@@ -2330,16 +2107,16 @@
 msgid "unhooked all commit hooks\n"
 msgstr ""
 
-#, python-format
-msgid ""
-"\n"
-"removing temporary repo %s\n"
+#, fuzzy, python-format
+msgid ""
+"\n"
+"removing temporary repository %s\n"
 msgstr ""
 "\n"
 "正在删除临时版本库 %s\n"
 
 msgid ""
-"expand keywords in working directory\n"
+"expand keywords in the working directory\n"
 "\n"
 "    Run after (re)enabling keyword expansion.\n"
 "\n"
@@ -2350,52 +2127,22 @@
 msgid ""
 "print files currently configured for keyword expansion\n"
 "\n"
-"    Crosscheck which files in working directory are potential targets for\n"
-"    keyword expansion.\n"
-"    That is, files matched by [keyword] config patterns but not symlinks.\n"
-"    "
-msgstr ""
-
-msgid ""
-"revert expanded keywords in working directory\n"
-"\n"
-"    Run before changing/disabling active keywords\n"
-"    or if you experience problems with \"hg import\" or \"hg merge\".\n"
+"    Crosscheck which files in working directory are potential targets\n"
+"    for keyword expansion. That is, files matched by [keyword] config\n"
+"    patterns but not symlinks.\n"
+"    "
+msgstr ""
+
+msgid ""
+"revert expanded keywords in the working directory\n"
+"\n"
+"    Run before changing/disabling active keywords or if you experience\n"
+"    problems with \"hg import\" or \"hg merge\".\n"
 "\n"
 "    kwshrink refuses to run if given files contain local changes.\n"
 "    "
 msgstr ""
 
-msgid ""
-"Collects [keyword] config in kwtools.\n"
-"    Monkeypatches dispatch._parse if needed."
-msgstr ""
-
-msgid "Monkeypatch dispatch._parse to obtain running hg command."
-msgstr ""
-
-msgid ""
-"Sets up repo as kwrepo for keyword substitution.\n"
-"    Overrides file method to return kwfilelog instead of filelog\n"
-"    if file matches user configuration.\n"
-"    Wraps commit to overwrite configured files with updated\n"
-"    keyword substitutions.\n"
-"    Monkeypatches patch and webcommands."
-msgstr ""
-
-msgid ""
-"Monkeypatch/wrap patch.patchfile.__init__ to avoid\n"
-"        rejects or conflicts due to expanded keywords in working dir."
-msgstr ""
-
-msgid ""
-"Monkeypatch patch.diff to avoid expansion except when\n"
-"        comparing against working dir."
-msgstr ""
-
-msgid "Wraps webcommands.x turning off keyword expansion."
-msgstr ""
-
 msgid "show default keyword template maps"
 msgstr ""
 
@@ -2424,14 +2171,14 @@
 msgstr ""
 
 msgid ""
-"patch management and development\n"
+"work with a stack of patches\n"
 "\n"
 "This extension lets you work with a stack of patches in a Mercurial\n"
-"repository.  It manages two stacks of patches - all known patches, and\n"
+"repository. It manages two stacks of patches - all known patches, and\n"
 "applied patches (subset of known patches).\n"
 "\n"
 "Known patches are represented as patch files in the .hg/patches\n"
-"directory.  Applied patches are both patch files and changesets.\n"
+"directory. Applied patches are both patch files and changesets.\n"
 "\n"
 "Common tasks (use \"hg help command\" for more details):\n"
 "\n"
@@ -2448,17 +2195,6 @@
 "refresh contents of top applied patch     qrefresh\n"
 msgstr ""
 
-msgid ""
-"Update all references to a field in the patch header.\n"
-"        If none found, add it email style."
-msgstr ""
-
-msgid ""
-"Remove existing message, keeping the rest of the comments fields.\n"
-"        If comments contains 'subject: ', message will prepend\n"
-"        the field and a blank line."
-msgstr ""
-
 #, python-format
 msgid "%s appears more than once in %s"
 msgstr ""
@@ -2537,11 +2273,6 @@
 msgid "patch %s is not applied\n"
 msgstr ""
 
-msgid ""
-"Apply patchfile  to the working directory.\n"
-"        patchfile: file name of patch"
-msgstr ""
-
 msgid "patch failed, unable to continue (try -v)\n"
 msgstr ""
 
@@ -2549,9 +2280,11 @@
 msgid "applying %s\n"
 msgstr ""
 
-#, python-format
-msgid "Unable to read %s\n"
-msgstr ""
+#, fuzzy, python-format
+msgid "unable to read %s\n"
+msgstr ""
+"解析 '%s' 失败\n"
+"%s"
 
 #, python-format
 msgid "imported patch %s\n"
@@ -2581,6 +2314,10 @@
 msgid "cannot delete revision %d above applied patches"
 msgstr ""
 
+#, fuzzy, python-format
+msgid "patch %s finalized without changeset message\n"
+msgstr "只显示无改动文件的状态"
+
 msgid "qdelete requires at least one revision or patch name"
 msgstr ""
 
@@ -2608,12 +2345,6 @@
 msgid "\"%s\" cannot be used as the name of a patch"
 msgstr ""
 
-msgid ""
-"options:\n"
-"           msg: a string or a no-argument function returning a string\n"
-"        "
-msgstr ""
-
 #, python-format
 msgid "patch \"%s\" already exists"
 msgstr ""
@@ -2622,9 +2353,6 @@
 msgid "error unlinking %s\n"
 msgstr ""
 
-msgid "returns (index, rev, patch)"
-msgstr ""
-
 #, python-format
 msgid "patch name \"%s\" is ambiguous:\n"
 msgstr ""
@@ -2633,7 +2361,7 @@
 msgid "patch %s not in series"
 msgstr ""
 
-msgid "(working directory not at tip)\n"
+msgid "(working directory not at a head)\n"
 msgstr ""
 
 msgid "no patches in series\n"
@@ -2752,14 +2480,6 @@
 msgid "repo commit failed\n"
 msgstr ""
 
-msgid ""
-"If all_patches is False, return the index of the next pushable patch\n"
-"        in the series, or the series length. If all_patches is True, return "
-"the\n"
-"        index of the first patch past the last applied one.\n"
-"        "
-msgstr ""
-
 #, python-format
 msgid "patch %s is already in the series file"
 msgstr ""
@@ -2811,14 +2531,14 @@
 msgid ""
 "remove patches from queue\n"
 "\n"
-"    The patches must not be applied, unless they are arguments to\n"
-"    the --rev parameter. At least one patch or revision is required.\n"
-"\n"
-"    With --rev, mq will stop managing the named revisions (converting\n"
-"    them to regular mercurial changesets). The qfinish command should be\n"
-"    used as an alternative for qdel -r, as the latter option is deprecated.\n"
-"\n"
-"    With --keep, the patch files are preserved in the patch directory."
+"    The patches must not be applied, and at least one patch is\n"
+"    required.\n"
+"\n"
+"    With -k/--keep, the patch files are preserved in the patch\n"
+"    directory.\n"
+"\n"
+"    To stop managing a patch and move it into permanent history,\n"
+"    use the qfinish command."
 msgstr ""
 
 msgid "print the patches already applied"
@@ -2827,26 +2547,33 @@
 msgid "print the patches not yet applied"
 msgstr ""
 
+#, fuzzy
 msgid ""
 "import a patch\n"
 "\n"
-"    The patch is inserted into the series after the last applied patch.\n"
-"    If no patches have been applied, qimport prepends the patch\n"
+"    The patch is inserted into the series after the last applied\n"
+"    patch. If no patches have been applied, qimport prepends the patch\n"
 "    to the series.\n"
 "\n"
 "    The patch will have the same name as its source file unless you\n"
-"    give it a new one with --name.\n"
-"\n"
-"    You can register an existing patch inside the patch directory\n"
-"    with the --existing flag.\n"
-"\n"
-"    With --force, an existing patch of the same name will be overwritten.\n"
-"\n"
-"    An existing changeset may be placed under mq control with --rev\n"
+"    give it a new one with -n/--name.\n"
+"\n"
+"    You can register an existing patch inside the patch directory with\n"
+"    the -e/--existing flag.\n"
+"\n"
+"    With -f/--force, an existing patch of the same name will be\n"
+"    overwritten.\n"
+"\n"
+"    An existing changeset may be placed under mq control with -r/--rev\n"
 "    (e.g. qimport --rev tip -n patch will place tip under mq control).\n"
-"    With --git, patches imported with --rev will use the git diff\n"
+"    With -g/--git, patches imported with --rev will use the git diff\n"
 "    format. See the diffs help topic for information on why this is\n"
-"    important for preserving rename/copy information and permission changes.\n"
+"    important for preserving rename/copy information and permission\n"
+"    changes.\n"
+"\n"
+"    To import a patch from standard input, pass - as the patch file.\n"
+"    When importing from standard input, a patch name must be specified\n"
+"    using the --name flag.\n"
 "    "
 msgstr ""
 "导入补丁\n"
@@ -2866,14 +2593,15 @@
 "    为什么这对于保留改名/复制信息和权限修改很重要。\n"
 "    "
 
+#, fuzzy
 msgid ""
 "init a new queue repository\n"
 "\n"
-"    The queue repository is unversioned by default. If -c is\n"
-"    specified, qinit will create a separate nested repository\n"
-"    for patches (qinit -c may also be run later to convert\n"
-"    an unversioned patch repository into a versioned one).\n"
-"    You can use qcommit to commit changes to this queue repository."
+"    The queue repository is unversioned by default. If\n"
+"    -c/--create-repo is specified, qinit will create a separate nested\n"
+"    repository for patches (qinit -c may also be run later to convert\n"
+"    an unversioned patch repository into a versioned one). You can use\n"
+"    qcommit to commit changes to this queue repository."
 msgstr ""
 "初始化队列仓库\n"
 "\n"
@@ -2884,16 +2612,16 @@
 msgid ""
 "clone main and patch repository at same time\n"
 "\n"
-"    If source is local, destination will have no patches applied.  If\n"
+"    If source is local, destination will have no patches applied. If\n"
 "    source is remote, this command can not check if patches are\n"
 "    applied in source, so cannot guarantee that patches are not\n"
-"    applied in destination.  If you clone remote repository, be sure\n"
+"    applied in destination. If you clone remote repository, be sure\n"
 "    before that it has no patches applied.\n"
 "\n"
 "    Source patch repository is looked for in <src>/.hg/patches by\n"
-"    default.  Use -p <url> to change.\n"
-"\n"
-"    The patch directory must be a nested mercurial repository, as\n"
+"    default. Use -p <url> to change.\n"
+"\n"
+"    The patch directory must be a nested Mercurial repository, as\n"
 "    would be created by qinit -c.\n"
 "    "
 msgstr ""
@@ -2901,17 +2629,20 @@
 msgid "versioned patch repository not found (see qinit -c)"
 msgstr ""
 
-msgid "cloning main repo\n"
-msgstr ""
-
-msgid "cloning patch repo\n"
-msgstr ""
-
-msgid "stripping applied patches from destination repo\n"
-msgstr ""
-
-msgid "updating destination repo\n"
-msgstr ""
+#, fuzzy
+msgid "cloning main repository\n"
+msgstr "初始化目标版本库 %s\n"
+
+msgid "cloning patch repository\n"
+msgstr ""
+
+#, fuzzy
+msgid "stripping applied patches from destination repository\n"
+msgstr "初始化目标版本库 %s\n"
+
+#, fuzzy
+msgid "updating destination repository\n"
+msgstr "初始化目标版本库 %s\n"
 
 msgid "commit changes in the queue repository"
 msgstr ""
@@ -2937,40 +2668,44 @@
 msgid ""
 "create a new patch\n"
 "\n"
-"    qnew creates a new patch on top of the currently-applied patch (if any).\n"
-"    It will refuse to run if there are any outstanding changes unless -f is\n"
-"    specified, in which case the patch will be initialized with them. You\n"
-"    may also use -I, -X, and/or a list of files after the patch name to add\n"
-"    only changes to matching files to the new patch, leaving the rest as\n"
-"    uncommitted modifications.\n"
-"\n"
-"    -u and -d can be used to set the (given) user and date, respectively.\n"
-"    -U and -D set user to current user and date to current date.\n"
-"\n"
-"    -e, -m or -l set the patch header as well as the commit message. If none\n"
-"    is specified, the header is empty and the commit message is '[mq]: "
-"PATCH'.\n"
-"\n"
-"    Use the --git option to keep the patch in the git extended diff\n"
+"    qnew creates a new patch on top of the currently-applied patch (if\n"
+"    any). It will refuse to run if there are any outstanding changes\n"
+"    unless -f/--force is specified, in which case the patch will be\n"
+"    initialized with them. You may also use -I/--include,\n"
+"    -X/--exclude, and/or a list of files after the patch name to add\n"
+"    only changes to matching files to the new patch, leaving the rest\n"
+"    as uncommitted modifications.\n"
+"\n"
+"    -u/--user and -d/--date can be used to set the (given) user and\n"
+"    date, respectively. -U/--currentuser and -D/--currentdate set user\n"
+"    to current user and date to current date.\n"
+"\n"
+"    -e/--edit, -m/--message or -l/--logfile set the patch header as\n"
+"    well as the commit message. If none is specified, the header is\n"
+"    empty and the commit message is '[mq]: PATCH'.\n"
+"\n"
+"    Use the -g/--git option to keep the patch in the git extended diff\n"
 "    format. Read the diffs help topic for more information on why this\n"
 "    is important for preserving permission changes and copy/rename\n"
 "    information.\n"
 "    "
 msgstr ""
 
+#, fuzzy
 msgid ""
 "update the current patch\n"
 "\n"
-"    If any file patterns are provided, the refreshed patch will contain only\n"
-"    the modifications that match those patterns; the remaining modifications\n"
-"    will remain in the working directory.\n"
-"\n"
-"    If --short is specified, files currently included in the patch will\n"
-"    be refreshed just like matched files and remain in the patch.\n"
-"\n"
-"    hg add/remove/copy/rename work as usual, though you might want to use\n"
-"    git-style patches (--git or [diff] git=1) to track copies and renames.\n"
-"    See the diffs help topic for more information on the git diff format.\n"
+"    If any file patterns are provided, the refreshed patch will\n"
+"    contain only the modifications that match those patterns; the\n"
+"    remaining modifications will remain in the working directory.\n"
+"\n"
+"    If -s/--short is specified, files currently included in the patch\n"
+"    will be refreshed just like matched files and remain in the patch.\n"
+"\n"
+"    hg add/remove/copy/rename work as usual, though you might want to\n"
+"    use git-style patches (-g/--git or [diff] git=1) to track copies\n"
+"    and renames. See the diffs help topic for more information on the\n"
+"    git diff format.\n"
 "    "
 msgstr ""
 "更新当前补丁\n"
@@ -2988,17 +2723,19 @@
 msgid "option \"-e\" incompatible with \"-m\" or \"-l\""
 msgstr ""
 
+#, fuzzy
 msgid ""
 "diff of the current patch and subsequent modifications\n"
 "\n"
-"    Shows a diff which includes the current patch as well as any changes "
-"which\n"
-"    have been made in the working directory since the last refresh (thus\n"
-"    showing what the current patch would become after a qrefresh).\n"
-"\n"
-"    Use 'hg diff' if you only want to see the changes made since the last\n"
-"    qrefresh, or 'hg export qtip' if you want to see changes made by the\n"
-"    current patch without including changes made since the qrefresh.\n"
+"    Shows a diff which includes the current patch as well as any\n"
+"    changes which have been made in the working directory since the\n"
+"    last refresh (thus showing what the current patch would become\n"
+"    after a qrefresh).\n"
+"\n"
+"    Use 'hg diff' if you only want to see the changes made since the\n"
+"    last qrefresh, or 'hg export qtip' if you want to see changes made\n"
+"    by the current patch without including changes made since the\n"
+"    qrefresh.\n"
 "    "
 msgstr ""
 "显式当前的补丁和后续的修改\n"
@@ -3016,12 +2753,12 @@
 "    Patches must not yet be applied. Each patch will be successively\n"
 "    applied to the current patch in the order given. If all the\n"
 "    patches apply successfully, the current patch will be refreshed\n"
-"    with the new cumulative patch, and the folded patches will\n"
-"    be deleted. With -k/--keep, the folded patch files will not\n"
-"    be removed afterwards.\n"
-"\n"
-"    The header for each folded patch will be concatenated with\n"
-"    the current patch header, separated by a line of '* * *'."
+"    with the new cumulative patch, and the folded patches will be\n"
+"    deleted. With -k/--keep, the folded patch files will not be\n"
+"    removed afterwards.\n"
+"\n"
+"    The header for each folded patch will be concatenated with the\n"
+"    current patch header, separated by a line of '* * *'."
 msgstr ""
 
 msgid "qfold requires at least one patch name"
@@ -3076,11 +2813,12 @@
 msgid "print the header of the topmost or specified patch"
 msgstr ""
 
+#, fuzzy
 msgid ""
 "push the next patch onto the stack\n"
 "\n"
-"    When --force is applied, all local changes in patched files will be "
-"lost.\n"
+"    When -f/--force is applied, all local changes in patched files\n"
+"    will be lost.\n"
 "    "
 msgstr ""
 "将下个补丁压入堆栈\n"
@@ -3095,12 +2833,13 @@
 msgid "merging with queue at: %s\n"
 msgstr ""
 
+#, fuzzy
 msgid ""
 "pop the current patch off the stack\n"
 "\n"
-"    By default, pops off the top of the patch stack. If given a patch name,\n"
-"    keeps popping off patches until the named patch is at the top of the "
-"stack.\n"
+"    By default, pops off the top of the patch stack. If given a patch\n"
+"    name, keeps popping off patches until the named patch is at the\n"
+"    top of the stack.\n"
 "    "
 msgstr ""
 "将当前补丁弹出堆栈\n"
@@ -3128,7 +2867,7 @@
 msgid "A patch named %s already exists in the series file"
 msgstr ""
 
-msgid "restore the queue state saved by a rev"
+msgid "restore the queue state saved by a revision"
 msgstr ""
 
 msgid "save current queue state"
@@ -3146,11 +2885,13 @@
 msgid "copy %s to %s\n"
 msgstr ""
 
+#, fuzzy
 msgid ""
 "strip a revision and all its descendants from the repository\n"
 "\n"
-"    If one of the working dir's parent revisions is stripped, the working\n"
-"    directory will be updated to the parent of the stripped revision.\n"
+"    If one of the working directory's parent revisions is stripped, the\n"
+"    working directory will be updated to the parent of the stripped\n"
+"    revision.\n"
 "    "
 msgstr ""
 "从版本库删除一个版本以及它的子孙\n"
@@ -3162,33 +2903,34 @@
 "set or print guarded patches to push\n"
 "\n"
 "    Use the qguard command to set or print guards on patch, then use\n"
-"    qselect to tell mq which guards to use. A patch will be pushed if it\n"
-"    has no guards or any positive guards match the currently selected guard,\n"
-"    but will not be pushed if any negative guards match the current guard.\n"
-"    For example:\n"
+"    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"
 "\n"
 "        qguard foo.patch -stable    (negative guard)\n"
 "        qguard bar.patch +stable    (positive guard)\n"
 "        qselect stable\n"
 "\n"
 "    This activates the \"stable\" guard. mq will skip foo.patch (because\n"
-"    it has a negative match) but push bar.patch (because it\n"
-"    has a positive match).\n"
+"    it has a negative match) but push bar.patch (because it has a\n"
+"    positive match).\n"
 "\n"
 "    With no arguments, prints the currently active guards.\n"
 "    With one argument, sets the active guard.\n"
 "\n"
 "    Use -n/--none to deactivate guards (no other arguments needed).\n"
-"    When no guards are active, patches with positive guards are skipped\n"
-"    and patches with negative guards are pushed.\n"
+"    When no guards are active, patches with positive guards are\n"
+"    skipped and patches with negative guards are pushed.\n"
 "\n"
 "    qselect can change the guards on applied patches. It does not pop\n"
-"    guarded patches by default. Use --pop to pop back to the last applied\n"
-"    patch that is not guarded. Use --reapply (which implies --pop) to push\n"
-"    back to the current patch afterwards, but skip guarded patches.\n"
-"\n"
-"    Use -s/--series to print a list of all guards in the series file (no\n"
-"    other arguments needed). Use -v for more information."
+"    guarded patches by default. Use --pop to pop back to the last\n"
+"    applied patch that is not guarded. Use --reapply (which implies\n"
+"    --pop) to push back to the current patch afterwards, but skip\n"
+"    guarded patches.\n"
+"\n"
+"    Use -s/--series to print a list of all guards in the series file\n"
+"    (no other arguments needed). Use -v for more information."
 msgstr ""
 
 msgid "guards deactivated\n"
@@ -3223,17 +2965,18 @@
 msgid ""
 "move applied patches into repository history\n"
 "\n"
-"    Finishes the specified revisions (corresponding to applied patches) by\n"
-"    moving them out of mq control into regular repository history.\n"
-"\n"
-"    Accepts a revision range or the --applied option. If --applied is\n"
-"    specified, all applied mq revisions are removed from mq control.\n"
-"    Otherwise, the given revisions must be at the base of the stack of\n"
-"    applied patches.\n"
-"\n"
-"    This can be especially useful if your changes have been applied to an\n"
-"    upstream repository, or if you are about to push your changes to "
-"upstream.\n"
+"    Finishes the specified revisions (corresponding to applied\n"
+"    patches) by moving them out of mq control into regular repository\n"
+"    history.\n"
+"\n"
+"    Accepts a revision range or the -a/--applied option. If --applied\n"
+"    is specified, all applied mq revisions are removed from mq\n"
+"    control. Otherwise, the given revisions must be at the base of the\n"
+"    stack of applied patches.\n"
+"\n"
+"    This can be especially useful if your changes have been applied to\n"
+"    an upstream repository, or if you are about to push your changes\n"
+"    to upstream.\n"
 "    "
 msgstr ""
 
@@ -3272,8 +3015,9 @@
 msgid "use uncompressed transfer (fast over LAN)"
 msgstr "使用不压缩的传输(在局域网更快)"
 
-msgid "location of source patch repo"
-msgstr ""
+#, fuzzy
+msgid "location of source patch repository"
+msgstr "为此版本库启动服务 'inotify'"
 
 msgid "hg qclone [OPTION]... SOURCE [DEST]"
 msgstr ""
@@ -3287,7 +3031,7 @@
 msgid "keep patch file"
 msgstr ""
 
-msgid "stop managing a revision"
+msgid "stop managing a revision (DEPRECATED)"
 msgstr ""
 
 msgid "hg qdelete [-k] [-r REV]... [PATCH]..."
@@ -3320,10 +3064,12 @@
 msgid "hg qheader [PATCH]"
 msgstr ""
 
-msgid "import file in patch dir"
+#, fuzzy
+msgid "import file in patch directory"
 msgstr "从补丁目录导入文件"
 
-msgid "patch file name"
+#, fuzzy
+msgid "name of patch file"
 msgstr "补丁文件名称"
 
 msgid "overwrite existing files"
@@ -3335,7 +3081,10 @@
 msgid "use git extended diff format"
 msgstr "使用 git 扩展差异格式"
 
-msgid "hg qimport [-e] [-n NAME] [-f] [-g] [-r REV]... FILE..."
+msgid "qpush after importing"
+msgstr ""
+
+msgid "hg qimport [-e] [-n NAME] [-f] [-g] [-P] [-r REV]... FILE..."
 msgstr ""
 
 msgid "create queue repository"
@@ -3422,8 +3171,9 @@
 msgid "delete save entry"
 msgstr ""
 
-msgid "update queue working dir"
-msgstr ""
+#, fuzzy
+msgid "update queue working directory"
+msgstr "正在更新工作目录\n"
 
 msgid "hg qrestore [-d] [-u] REV"
 msgstr ""
@@ -3489,7 +3239,7 @@
 msgstr ""
 
 msgid ""
-"hook extension to email notifications on commits/pushes\n"
+"send e-mail notifications for commits/pushes\n"
 "\n"
 "Subscriptions can be managed through hgrc. Default mode is to print\n"
 "messages to stdout, for testing and configuring.\n"
@@ -3544,31 +3294,10 @@
 "   # key is glob pattern, value is \",\"-separated list of subscriber emails\n"
 "   pattern = user@host\n"
 "\n"
-" glob patterns are matched against path to repo root.\n"
-"\n"
-" if you like, you can put notify config file in repo that users can\n"
-" push changes to, they can manage their own subscriptions."
-msgstr ""
-
-msgid "email notification class."
-msgstr ""
-
-msgid "strip leading slashes from local path, turn into web-safe path."
-msgstr ""
-
-msgid "try to clean up email addresses."
-msgstr ""
-
-msgid "return list of email addresses of subscribers to this repo."
-msgstr ""
-
-msgid "format one changeset."
-msgstr ""
-
-msgid "true if incoming changes from this source should be skipped."
-msgstr ""
-
-msgid "send message."
+" glob patterns are matched against path to repository root.\n"
+"\n"
+" if you like, you can put notify config file in repository that users\n"
+" can push changes to, they can manage their own subscriptions."
 msgstr ""
 
 #, python-format
@@ -3593,15 +3322,8 @@
 "\n"
 msgstr ""
 
-msgid ""
-"send email notifications to interested subscribers.\n"
-"\n"
-"    if used as changegroup hook, send one email for all changesets in\n"
-"    changegroup. else send one email per changeset."
-msgstr ""
-
-#, python-format
-msgid "notify: no subscribers to repo %s\n"
+#, python-format
+msgid "notify: no subscribers to repository %s\n"
 msgstr ""
 
 #, python-format
@@ -3609,19 +3331,18 @@
 msgstr ""
 
 msgid ""
-"browse command output with external pager\n"
+"browse command output with an external pager\n"
 "\n"
 "To set the pager that should be used, set the application variable:\n"
 "\n"
 "  [pager]\n"
 "  pager = LESS='FSRX' less\n"
 "\n"
-"If no pager is set, the pager extensions uses the environment\n"
-"variable $PAGER. If neither pager.pager, nor $PAGER is set, no pager\n"
-"is used.\n"
-"\n"
-"If you notice \"BROKEN PIPE\" error messages, you can disable them\n"
-"by setting:\n"
+"If no pager is set, the pager extensions uses the environment variable\n"
+"$PAGER. If neither pager.pager, nor $PAGER is set, no pager is used.\n"
+"\n"
+"If you notice \"BROKEN PIPE\" error messages, you can disable them by\n"
+"setting:\n"
 "\n"
 "  [pager]\n"
 "  quiet = True\n"
@@ -3632,27 +3353,27 @@
 "  [pager]\n"
 "  ignore = version, help, update\n"
 "\n"
-"You can also enable the pager only for certain commands using pager.attend:\n"
+"You can also enable the pager only for certain commands using\n"
+"pager.attend:\n"
 "\n"
 "  [pager]\n"
 "  attend = log\n"
 "\n"
 "If pager.attend is present, pager.ignore will be ignored.\n"
 "\n"
-"To ignore global commands like \"hg version\" or \"hg help\", you have to "
-"specify\n"
-"them in the global .hgrc\n"
-msgstr ""
-
-msgid ""
-"use suffixes to refer to ancestor revisions\n"
-"\n"
-"This extension allows you to use git-style suffixes to refer to\n"
-"the ancestors of a specific revision.\n"
+"To ignore global commands like \"hg version\" or \"hg help\", you have to\n"
+"specify them in the global .hgrc\n"
+msgstr ""
+
+msgid ""
+"interpret suffixes to refer to ancestor revisions\n"
+"\n"
+"This extension allows you to use git-style suffixes to refer to the\n"
+"ancestors of a specific revision.\n"
 "\n"
 "For example, if you can refer to a revision as \"foo\", then:\n"
 "\n"
-"- foo^N = Nth parent of foo:\n"
+"- foo^N = Nth parent of foo\n"
 "  foo^0 = foo\n"
 "  foo^1 = first parent of foo\n"
 "  foo^2 = second parent of foo\n"
@@ -3665,34 +3386,31 @@
 msgstr ""
 
 msgid ""
-"sending Mercurial changesets as a series of patch emails\n"
-"\n"
-"The series is started off with a \"[PATCH 0 of N]\" introduction,\n"
-"which describes the series as a whole.\n"
-"\n"
-"Each patch email has a Subject line of \"[PATCH M of N] ...\", using\n"
-"the first line of the changeset description as the subject text.\n"
-"The message contains two or three body parts:\n"
-"\n"
-"  The remainder of the changeset description.\n"
+"send Mercurial changesets as a series of patch e-mails\n"
+"\n"
+"The series is started off with a \"[PATCH 0 of N]\" introduction, which\n"
+"describes the series as a whole.\n"
+"\n"
+"Each patch email has a Subject line of \"[PATCH M of N] ...\", using the\n"
+"first line of the changeset description as the subject text. The\n"
+"message contains two or three body parts:\n"
+"\n"
+"  The changeset description.\n"
 "\n"
 "  [Optional] The result of running diffstat on the patch.\n"
 "\n"
 "  The patch itself, as generated by \"hg export\".\n"
 "\n"
-"Each message refers to all of its predecessors using the In-Reply-To\n"
-"and References headers, so they will show up as a sequence in\n"
-"threaded mail and news readers, and in mail archives.\n"
-"\n"
-"For each changeset, you will be prompted with a diffstat summary and\n"
-"the changeset summary, so you can be sure you are sending the right changes.\n"
-"\n"
-"To enable this extension:\n"
-"\n"
-"  [extensions]\n"
-"  hgext.patchbomb =\n"
-"\n"
-"To configure other defaults, add a section like this to your hgrc file:\n"
+"Each message refers to the first in the series using the In-Reply-To\n"
+"and References headers, so they will show up as a sequence in threaded\n"
+"mail and news readers, and in mail archives.\n"
+"\n"
+"With the -d/--diffstat option, you will be prompted for each changeset\n"
+"with a diffstat summary and the changeset summary, so you can be sure\n"
+"you are sending the right changes.\n"
+"\n"
+"To configure other defaults, add a section like this to your hgrc\n"
+"file:\n"
 "\n"
 "  [email]\n"
 "  from = My Name <my@email>\n"
@@ -3704,34 +3422,34 @@
 "as a patchbomb.\n"
 "\n"
 "To avoid sending patches prematurely, it is a good idea to first run\n"
-"the \"email\" command with the \"-n\" option (test only).  You will be\n"
-"prompted for an email recipient address, a subject an an introductory\n"
-"message describing the patches of your patchbomb.  Then when all is\n"
-"done, patchbomb messages are displayed. If PAGER environment variable\n"
-"is set, your pager will be fired up once for each patchbomb message, so\n"
-"you can verify everything is alright.\n"
-"\n"
-"The \"-m\" (mbox) option is also very useful.  Instead of previewing\n"
-"each patchbomb message in a pager or sending the messages directly,\n"
-"it will create a UNIX mailbox file with the patch emails.  This\n"
-"mailbox file can be previewed with any mail user agent which supports\n"
-"UNIX mbox files, e.g. with mutt:\n"
+"the \"email\" command with the \"-n\" option (test only). You will be\n"
+"prompted for an email recipient address, a subject and an introductory\n"
+"message describing the patches of your patchbomb. Then when all is\n"
+"done, patchbomb messages are displayed. If the PAGER environment\n"
+"variable is set, your pager will be fired up once for each patchbomb\n"
+"message, so you can verify everything is alright.\n"
+"\n"
+"The -m/--mbox option is also very useful. Instead of previewing each\n"
+"patchbomb message in a pager or sending the messages directly, it will\n"
+"create a UNIX mailbox file with the patch emails. This mailbox file\n"
+"can be previewed with any mail user agent which supports UNIX mbox\n"
+"files, e.g. with mutt:\n"
 "\n"
 "  % mutt -R -f mbox\n"
 "\n"
 "When you are previewing the patchbomb messages, you can use `formail'\n"
-"(a utility that is commonly installed as part of the procmail package),\n"
-"to send each message out:\n"
+"(a utility that is commonly installed as part of the procmail\n"
+"package), to send each message out:\n"
 "\n"
 "  % formail -s sendmail -bm -t < mbox\n"
 "\n"
 "That should be all. Now your patchbomb is on its way out.\n"
 "\n"
 "You can also either configure the method option in the email section\n"
-"to be a sendmail compatable mailer or fill out the [smtp] section so\n"
-"that the patchbomb extension can automatically send patchbombs directly\n"
-"from the commandline. See the [email] and [smtp] sections in hgrc(5)\n"
-"for details."
+"to be a sendmail compatible mailer or fill out the [smtp] section so\n"
+"that the patchbomb extension can automatically send patchbombs\n"
+"directly from the commandline. See the [email] and [smtp] sections in\n"
+"hgrc(5) for details."
 msgstr ""
 
 msgid "Please enter a valid value.\n"
@@ -3747,23 +3465,29 @@
 "send changesets by email\n"
 "\n"
 "    By default, diffs are sent in the format generated by hg export,\n"
-"    one per message.  The series starts with a \"[PATCH 0 of N]\"\n"
+"    one per message. The series starts with a \"[PATCH 0 of N]\"\n"
 "    introduction, which describes the series as a whole.\n"
 "\n"
 "    Each patch email has a Subject line of \"[PATCH M of N] ...\", using\n"
 "    the first line of the changeset description as the subject text.\n"
-"    The message contains two or three body parts.  First, the rest of\n"
-"    the changeset description.  Next, (optionally) if the diffstat\n"
-"    program is installed, the result of running diffstat on the patch.\n"
-"    Finally, the patch itself, as generated by \"hg export\".\n"
-"\n"
-"    With --outgoing, emails will be generated for patches not\n"
-"    found in the destination repository (or only those which are\n"
-"    ancestors of the specified revisions if any are provided)\n"
-"\n"
-"    With --bundle, changesets are selected as for --outgoing,\n"
-"    but a single email containing a binary Mercurial bundle as an\n"
-"    attachment will be sent.\n"
+"    The message contains two or three parts. First, the changeset\n"
+"    description. Next, (optionally) if the diffstat program is\n"
+"    installed and -d/--diffstat is used, the result of running\n"
+"    diffstat on the patch. Finally, the patch itself, as generated by\n"
+"    \"hg export\".\n"
+"\n"
+"    By default the patch is included as text in the email body for\n"
+"    easy reviewing. Using the -a/--attach option will instead create\n"
+"    an attachment for the patch. With -i/--inline an inline attachment\n"
+"    will be created.\n"
+"\n"
+"    With -o/--outgoing, emails will be generated for patches not found\n"
+"    in the destination repository (or only those which are ancestors\n"
+"    of the specified revisions if any are provided)\n"
+"\n"
+"    With -b/--bundle, changesets are selected as for --outgoing, but a\n"
+"    single email containing a binary Mercurial bundle as an attachment\n"
+"    will be sent.\n"
 "\n"
 "    Examples:\n"
 "\n"
@@ -3783,12 +3507,9 @@
 "default\n"
 "    hg email -b -r 3000 DEST  # bundle of all ancestors of 3000 not in DEST\n"
 "\n"
-"    Before using this command, you will need to enable email in your hgrc.\n"
-"    See the [email] section in hgrc(5) for details.\n"
-"    "
-msgstr ""
-
-msgid "Return the revisions present locally but not in dest"
+"    Before using this command, you will need to enable email in your\n"
+"    hgrc. See the [email] section in hgrc(5) for details.\n"
+"    "
 msgstr ""
 
 msgid "specify at least one changeset with -r or -o"
@@ -3860,6 +3581,9 @@
 msgid "subject of first message (intro or single patch)"
 msgstr ""
 
+msgid "message identifier to reply to"
+msgstr ""
+
 msgid "email addresses of recipients"
 msgstr ""
 
@@ -3872,13 +3596,17 @@
 msgid "send changes not in target as a binary bundle"
 msgstr ""
 
+msgid "name of the bundle attachment file"
+msgstr ""
+
 msgid "a revision to send"
 msgstr ""
 
-msgid "run even when remote repository is unrelated (with -b)"
-msgstr ""
-
-msgid "a base changeset to specify instead of a destination (with -b)"
+#, fuzzy
+msgid "run even when remote repository is unrelated (with -b/--bundle)"
+msgstr "纵然远程版本库是无关的也要执行"
+
+msgid "a base changeset to specify instead of a destination (with -b/--bundle)"
 msgstr ""
 
 msgid "send an introduction email for a single patch"
@@ -3887,16 +3615,19 @@
 msgid "hg email [OPTION]... [DEST]..."
 msgstr ""
 
+msgid "delete files not tracked from the working directory"
+msgstr ""
+
 msgid ""
 "removes files not tracked by Mercurial\n"
 "\n"
-"    Delete files not known to Mercurial. This is useful to test local and\n"
-"    uncommitted changes in an otherwise-clean source tree.\n"
+"    Delete files not known to Mercurial. This is useful to test local\n"
+"    and uncommitted changes in an otherwise-clean source tree.\n"
 "\n"
 "    This means that purge will delete:\n"
 "     - Unknown files: files marked with \"?\" by \"hg status\"\n"
-"     - Empty directories: in fact Mercurial ignores directories unless they\n"
-"       contain files under source control managment\n"
+"     - Empty directories: in fact Mercurial ignores directories unless\n"
+"       they contain files under source control management\n"
 "    But it will leave untouched:\n"
 "     - Modified and unmodified tracked files\n"
 "     - Ignored files (unless --all is specified)\n"
@@ -3905,9 +3636,10 @@
 "    If directories are given on the command line, only files in these\n"
 "    directories are considered.\n"
 "\n"
-"    Be careful with purge, as you could irreversibly delete some files you\n"
-"    forgot to add to the repository. If you only want to print the list of\n"
-"    files that this program would delete, use the --print option.\n"
+"    Be careful with purge, as you could irreversibly delete some files\n"
+"    you forgot to add to the repository. If you only want to print the\n"
+"    list of files that this program would delete, use the --print\n"
+"    option.\n"
 "    "
 msgstr ""
 
@@ -3933,11 +3665,12 @@
 msgid "purge ignored files too"
 msgstr ""
 
-msgid "print the file names instead of deleting them"
-msgstr ""
-
-msgid "end filenames with NUL, for use with xargs (implies -p)"
-msgstr ""
+msgid "print filenames instead of deleting them"
+msgstr ""
+
+#, fuzzy
+msgid "end filenames with NUL, for use with xargs (implies -p/--print)"
+msgstr "在文件名称结尾增加 NUL,用于 xargs"
 
 msgid "hg purge [OPTION]... [DIR]..."
 msgstr ""
@@ -3945,35 +3678,26 @@
 msgid ""
 "move sets of revisions to a different ancestor\n"
 "\n"
-"This extension lets you rebase changesets in an existing Mercurial "
+"This extension lets you rebase changesets in an existing Mercurial\n"
 "repository.\n"
 "\n"
 "For more information:\n"
 "http://www.selenic.com/mercurial/wiki/index.cgi/RebaseProject\n"
 msgstr ""
 
-msgid "return the correct ancestor"
-msgstr ""
-
 msgid "first revision, do not change ancestor\n"
 msgstr ""
 
 msgid ""
 "move changeset (and descendants) to a different branch\n"
 "\n"
-"    Rebase uses repeated merging to graft changesets from one part of "
-"history\n"
-"    onto another. This can be useful for linearizing local changes relative "
-"to\n"
-"    a master development tree.\n"
-"\n"
-"    If a rebase is interrupted to manually resolve a merge, it can be "
-"continued\n"
-"    with --continue or aborted with --abort.\n"
-"    "
-msgstr ""
-
-msgid "cannot use both keepbranches and extrafn"
+"    Rebase uses repeated merging to graft changesets from one part of\n"
+"    history onto another. This can be useful for linearizing local\n"
+"    changes relative to a master development tree.\n"
+"\n"
+"    If a rebase is interrupted to manually resolve a merge, it can be\n"
+"    continued with --continue/-c or aborted with --abort/-a.\n"
+"    "
 msgstr ""
 
 msgid "cannot use both abort and continue"
@@ -3991,6 +3715,9 @@
 msgid "nothing to rebase\n"
 msgstr ""
 
+msgid "cannot use both keepbranches and extrafn"
+msgstr ""
+
 msgid "rebase merging completed\n"
 msgstr ""
 
@@ -4004,18 +3731,9 @@
 msgid "%d revisions have been skipped\n"
 msgstr ""
 
-msgid ""
-"Skip commit if collapsing has been required and rev is not the last\n"
-"    revision, commit otherwise\n"
-"    "
-msgstr ""
-
 msgid " set parents\n"
 msgstr ""
 
-msgid "Rebase a single revision"
-msgstr ""
-
 #, python-format
 msgid "rebasing %d:%s\n"
 msgstr ""
@@ -4049,16 +3767,10 @@
 msgid "next revision set to %s\n"
 msgstr ""
 
-msgid "Return the new parent relationship of the revision that will be rebased"
-msgstr ""
-
 #, python-format
 msgid "cannot use revision %d as base, result would have 3 parents"
 msgstr ""
 
-msgid "Update rebased mq patches - finalize and then import them"
-msgstr ""
-
 #, python-format
 msgid "revision %d is an mq patch (%s), finalize it.\n"
 msgstr ""
@@ -4067,36 +3779,21 @@
 msgid "import mq patch %d (%s)\n"
 msgstr ""
 
-msgid "Store the current status to allow recovery"
-msgstr ""
-
 msgid "rebase status stored\n"
 msgstr ""
 
-msgid "Remove the status files"
-msgstr ""
-
-msgid "Restore a previously stored status"
-msgstr ""
-
 msgid "rebase status resumed\n"
 msgstr ""
 
 msgid "no rebase in progress"
 msgstr ""
 
-msgid "Restore the repository to its original state"
-msgstr ""
-
 msgid "warning: new changesets detected on target branch, not stripping\n"
 msgstr ""
 
 msgid "rebase aborted\n"
 msgstr ""
 
-msgid "Define which revisions are going to be rebased and where"
-msgstr ""
-
 msgid "cannot rebase onto an applied mq patch"
 msgstr ""
 
@@ -4119,24 +3816,12 @@
 msgid "unable to collapse, there is more than one external parent"
 msgstr ""
 
-msgid "Call rebase after pull if the latter has been invoked with --rebase"
-msgstr ""
-
 msgid "--update and --rebase are not compatible, ignoring the update flag\n"
 msgstr ""
 
-msgid "Replace pull with a decorator to provide --rebase option"
-msgstr ""
-
 msgid "rebase working directory to branch head"
 msgstr ""
 
-msgid "keep original revisions"
-msgstr ""
-
-msgid "keep original branches"
-msgstr ""
-
 msgid "rebase from a given revision"
 msgstr ""
 
@@ -4149,6 +3834,12 @@
 msgid "collapse the rebased revisions"
 msgstr ""
 
+msgid "keep original revisions"
+msgstr ""
+
+msgid "keep original branches"
+msgstr ""
+
 msgid "continue an interrupted rebase"
 msgstr ""
 
@@ -4156,30 +3847,11 @@
 msgstr ""
 
 msgid ""
-"hg rebase [-s rev | -b rev] [-d rev] [--collapse] | [-c] | [-a] | [--keep]"
-msgstr ""
-
-msgid "interactive change selection during commit or qrefresh"
-msgstr ""
-
-msgid ""
-"like patch.iterhunks, but yield different events\n"
-"\n"
-"    - ('file',    [header_lines + fromfile + tofile])\n"
-"    - ('context', [context_lines])\n"
-"    - ('hunk',    [hunk_lines])\n"
-"    - ('range',   (-start,len, +start,len, diffp))\n"
-"    "
-msgstr ""
-
-msgid "scan lr while predicate holds"
-msgstr ""
-
-msgid ""
-"patch header\n"
-"\n"
-"    XXX shoudn't we move this to mercurial/patch.py ?\n"
-"    "
+"hg rebase [-s REV | -b REV] [-d REV] [--collapse] [--keep] [--keepbranches] | "
+"[-c] | [-a]"
+msgstr ""
+
+msgid "interactively select which sets of changes to commit/qrefresh"
 msgstr ""
 
 msgid "this modifies a binary file (all or nothing)\n"
@@ -4192,46 +3864,35 @@
 msgid "%d hunks, %d lines changed\n"
 msgstr ""
 
-msgid "hunk -> (n+,n-)"
-msgstr ""
-
-msgid ""
-"patch hunk\n"
-"\n"
-"    XXX shouldn't we merge this with patch.hunk ?\n"
-"    "
-msgstr ""
-
-msgid "patch -> [] of hunks "
-msgstr ""
-
-msgid "patch parsing state machine"
-msgstr ""
-
-msgid "Interactively filter patch chunks into applied-only chunks"
-msgstr ""
-
-msgid ""
-"fetch next portion from chunks until a 'header' is seen\n"
-"        NB: header == new-file mark\n"
-"        "
-msgstr ""
-
-msgid ""
-"prompt query, and process base inputs\n"
-"\n"
-"        - y/n for the rest of file\n"
-"        - y/n for the rest\n"
-"        - ? (help)\n"
-"        - q (quit)\n"
-"\n"
-"        else, input is returned to the caller.\n"
-"        "
-msgstr ""
-
 msgid "[Ynsfdaq?]"
 msgstr ""
 
+msgid "&Yes, record this change"
+msgstr ""
+
+msgid "&No, skip this change"
+msgstr ""
+
+msgid "&Skip remaining changes to this file"
+msgstr ""
+
+msgid "Record remaining changes to this &file"
+msgstr ""
+
+msgid "&Done, skip remaining changes and files"
+msgstr ""
+
+#, fuzzy
+msgid "Record &all changes to all remaining files"
+msgstr "将丢失的文件视为删除"
+
+#, fuzzy
+msgid "&Quit, recording no changes"
+msgstr "正在搜索修改\n"
+
+msgid "&?"
+msgstr ""
+
 msgid "y"
 msgstr ""
 
@@ -4270,6 +3931,10 @@
 msgid "record this change to %r?"
 msgstr ""
 
+#, fuzzy, python-format
+msgid "record change %d/%d to %r?"
+msgstr "不需要改变 %s\n"
+
 msgid ""
 "interactively select changes to commit\n"
 "\n"
@@ -4280,7 +3945,7 @@
 "\n"
 "    You will be prompted for whether to record changes to each\n"
 "    modified file, and for files with multiple changes, for each\n"
-"    change to use.  For each query, the following responses are\n"
+"    change to use. For each query, the following responses are\n"
 "    possible:\n"
 "\n"
 "    y - record this change\n"
@@ -4296,35 +3961,12 @@
 "    ? - display help"
 msgstr ""
 
-msgid ""
-"interactively record a new patch\n"
-"\n"
-"    see 'hg help qnew' & 'hg help record' for more information and usage\n"
-"    "
-msgstr ""
-
 msgid "'mq' extension not loaded"
 msgstr ""
 
 msgid "running non-interactively, use commit instead"
 msgstr ""
 
-msgid ""
-"This is generic record driver.\n"
-"\n"
-"        It's job is to interactively filter local changes, and accordingly\n"
-"        prepare working dir into a state, where the job can be delegated to\n"
-"        non-interactive commit command such as 'commit' or 'qrefresh'.\n"
-"\n"
-"        After the actual job is done by non-interactive command, working dir\n"
-"        state is restored to original.\n"
-"\n"
-"        In the end we'll record intresting changes, and everything else will "
-"be\n"
-"        left in place, so the user can continue his work.\n"
-"        "
-msgstr ""
-
 msgid "no changes to record\n"
 msgstr ""
 
@@ -4348,21 +3990,33 @@
 msgid "hg qrecord [OPTION]... PATCH [FILE]..."
 msgstr ""
 
-msgid ""
-"patch transplanting tool\n"
+msgid "share a common history between several working directories"
+msgstr ""
+
+msgid ""
+"create a new shared repository (experimental)\n"
+"\n"
+"    Initialize a new repository and working directory that shares its\n"
+"    history with another repository.\n"
+"\n"
+"    NOTE: actions that change history such as rollback or moving the\n"
+"    source may confuse sharers.\n"
+"    "
+msgstr ""
+
+msgid "do not create a working copy"
+msgstr ""
+
+msgid "[-U] SOURCE [DEST]"
+msgstr ""
+
+msgid ""
+"transplant changesets from another branch\n"
 "\n"
 "This extension allows you to transplant patches from another branch.\n"
 "\n"
-"Transplanted patches are recorded in .hg/transplant/transplants, as a map\n"
-"from a changeset hash to its hash in the source repository.\n"
-msgstr ""
-
-msgid ""
-"returns True if a node is already an ancestor of parent\n"
-"        or has already been transplanted"
-msgstr ""
-
-msgid "apply the revisions in revmap one by one in revision order"
+"Transplanted patches are recorded in .hg/transplant/transplants, as a\n"
+"map from a changeset hash to its hash in the source repository.\n"
 msgstr ""
 
 #, python-format
@@ -4381,9 +4035,6 @@
 msgid "%s transplanted to %s\n"
 msgstr ""
 
-msgid "arbitrarily rewrite changeset before applying it"
-msgstr ""
-
 #, python-format
 msgid "filtering %s\n"
 msgstr ""
@@ -4391,9 +4042,6 @@
 msgid "filter failed"
 msgstr ""
 
-msgid "apply the patch in patchfile to the repository as a transplant"
-msgstr ""
-
 msgid "can only omit patchfile if merging"
 msgstr ""
 
@@ -4404,16 +4052,10 @@
 msgid "Fix up the merge and run hg transplant --continue"
 msgstr ""
 
-msgid "recover last transaction and apply remaining changesets"
-msgstr ""
-
 #, python-format
 msgid "%s transplanted as %s\n"
 msgstr ""
 
-msgid "commit working directory using journal metadata"
-msgstr ""
-
 msgid "transplant log file is corrupt"
 msgstr ""
 
@@ -4424,15 +4066,6 @@
 msgid "commit failed"
 msgstr ""
 
-msgid "journal changelog metadata for later recover"
-msgstr ""
-
-msgid "remove changelog journal"
-msgstr ""
-
-msgid "interactively transplant changesets"
-msgstr ""
-
 msgid "apply changeset? [ynmpcq?]:"
 msgstr ""
 
@@ -4446,28 +4079,31 @@
 "    (transplanted from CHANGESETHASH)\n"
 "\n"
 "    You can rewrite the changelog message with the --filter option.\n"
-"    Its argument will be invoked with the current changelog message\n"
-"    as $1 and the patch as $2.\n"
-"\n"
-"    If --source is specified, selects changesets from the named\n"
-"    repository. If --branch is specified, selects changesets from the\n"
-"    branch holding the named revision, up to that revision. If --all\n"
-"    is specified, all changesets on the branch will be transplanted,\n"
-"    otherwise you will be prompted to select the changesets you want.\n"
-"\n"
-"    hg transplant --branch REVISION --all will rebase the selected branch\n"
-"    (up to the named revision) onto your current working directory.\n"
-"\n"
-"    You can optionally mark selected transplanted changesets as\n"
-"    merge changesets. You will not be prompted to transplant any\n"
-"    ancestors of a merged transplant, and you can merge descendants\n"
-"    of them normally instead of transplanting them.\n"
+"    Its argument will be invoked with the current changelog message as\n"
+"    $1 and the patch as $2.\n"
+"\n"
+"    If --source/-s is specified, selects changesets from the named\n"
+"    repository. If --branch/-b is specified, selects changesets from\n"
+"    the branch holding the named revision, up to that revision. If\n"
+"    --all/-a is specified, all changesets on the branch will be\n"
+"    transplanted, otherwise you will be prompted to select the\n"
+"    changesets you want.\n"
+"\n"
+"    hg transplant --branch REVISION --all will rebase the selected\n"
+"    branch (up to the named revision) onto your current working\n"
+"    directory.\n"
+"\n"
+"    You can optionally mark selected transplanted changesets as merge\n"
+"    changesets. You will not be prompted to transplant any ancestors\n"
+"    of a merged transplant, and you can merge descendants of them\n"
+"    normally instead of transplanting them.\n"
 "\n"
 "    If no merges or revisions are provided, hg transplant will start\n"
 "    an interactive changeset browser.\n"
 "\n"
-"    If a changeset application fails, you can fix the merge by hand and\n"
-"    then resume where you left off by calling hg transplant --continue.\n"
+"    If a changeset application fails, you can fix the merge by hand\n"
+"    and then resume where you left off by calling hg transplant\n"
+"    --continue/-c.\n"
 "    "
 msgstr ""
 
@@ -4521,37 +4157,33 @@
 msgstr ""
 
 msgid ""
-"allow to use MBCS path with problematic encoding.\n"
-"\n"
-"Some MBCS encodings are not good for some path operations\n"
-"(i.e. splitting path, case conversion, etc.) with its encoded bytes.\n"
-"We call such a encoding (i.e. shift_jis and big5) as \"problematic\n"
-"encoding\".  This extension can be used to fix the issue with those\n"
-"encodings by wrapping some functions to convert to unicode string\n"
-"before path operation.\n"
-"\n"
-"This extension is usefull for:\n"
+"allow the use of MBCS paths with problematic encoding\n"
+"\n"
+"Some MBCS encodings are not good for some path operations (i.e.\n"
+"splitting path, case conversion, etc.) with its encoded bytes. We call\n"
+"such a encoding (i.e. shift_jis and big5) as \"problematic encoding\".\n"
+"This extension can be used to fix the issue with those encodings by\n"
+"wrapping some functions to convert to Unicode string before path\n"
+"operation.\n"
+"\n"
+"This extension is useful for:\n"
 " * Japanese Windows users using shift_jis encoding.\n"
 " * Chinese Windows users using big5 encoding.\n"
-" * All users who use a repository with one of problematic encodings\n"
-"   on case-insensitive file system.\n"
+" * All users who use a repository with one of problematic encodings on\n"
+"   case-insensitive file system.\n"
 "\n"
 "This extension is not needed for:\n"
-" * Any user who use only ascii chars in path.\n"
+" * Any user who use only ASCII chars in path.\n"
 " * Any user who do not use any of problematic encodings.\n"
 "\n"
 "Note that there are some limitations on using this extension:\n"
 " * You should use single encoding in one repository.\n"
-" * You should set same encoding for the repository by locale or HGENCODING.\n"
-"\n"
-"To use this extension, enable the extension in .hg/hgrc or ~/.hgrc:\n"
-"\n"
-"  [extensions]\n"
-"  hgext.win32mbcs =\n"
-"\n"
-"Path encoding conversion are done between unicode and util._encoding\n"
-"which is decided by mercurial from current locale setting or HGENCODING.\n"
-"\n"
+" * You should set same encoding for the repository by locale or\n"
+"   HGENCODING.\n"
+"\n"
+"Path encoding conversion are done between Unicode and\n"
+"encoding.encoding which is decided by Mercurial from current locale\n"
+"setting or HGENCODING.\n"
 msgstr ""
 
 #, python-format
@@ -4565,6 +4197,35 @@
 msgid "[win32mbcs] activated with encoding: %s\n"
 msgstr ""
 
+msgid ""
+"perform automatic newline conversion\n"
+"\n"
+"To perform automatic newline conversion, use:\n"
+"\n"
+"[extensions]\n"
+"hgext.win32text =\n"
+"[encode]\n"
+"** = cleverencode:\n"
+"# or ** = macencode:\n"
+"\n"
+"[decode]\n"
+"** = cleverdecode:\n"
+"# or ** = macdecode:\n"
+"\n"
+"If not doing conversion, to make sure you do not commit CRLF/CR by accident:\n"
+"\n"
+"[hooks]\n"
+"pretxncommit.crlf = python:hgext.win32text.forbidcrlf\n"
+"# or pretxncommit.cr = python:hgext.win32text.forbidcr\n"
+"\n"
+"To do the same check on a server to prevent CRLF/CR from being\n"
+"pushed or pulled:\n"
+"\n"
+"[hooks]\n"
+"pretxnchangegroup.crlf = python:hgext.win32text.forbidcrlf\n"
+"# or pretxnchangegroup.cr = python:hgext.win32text.forbidcr\n"
+msgstr ""
+
 #, python-format
 msgid ""
 "WARNING: %s already has %s line endings\n"
@@ -4601,21 +4262,14 @@
 msgstr ""
 
 msgid ""
-"zeroconf support for mercurial repositories\n"
-"\n"
-"Zeroconf enabled repositories will be announced in a network without the "
-"need\n"
-"to configure a server or a service. They can be discovered without knowing\n"
-"their actual IP address.\n"
-"\n"
-"To use the zeroconf extension add the following entry to your hgrc file:\n"
-"\n"
-"[extensions]\n"
-"hgext.zeroconf =\n"
-"\n"
-"To allow other people to discover your repository using run \"hg serve\" in "
-"your\n"
-"repository.\n"
+"discover and advertise repositories on the local network\n"
+"\n"
+"Zeroconf enabled repositories will be announced in a network without\n"
+"the need to configure a server or a service. They can be discovered\n"
+"without knowing their actual IP address.\n"
+"\n"
+"To allow other people to discover your repository using run \"hg serve\"\n"
+"in your repository.\n"
 "\n"
 " $ cd test\n"
 " $ hg serve\n"
@@ -4665,6 +4319,9 @@
 msgid "premature EOF reading chunk (got %d bytes, expected %d)"
 msgstr ""
 
+msgid "empty username"
+msgstr ""
+
 #, python-format
 msgid "username %s contains a newline"
 msgstr ""
@@ -4686,7 +4343,7 @@
 msgstr ""
 
 #, python-format
-msgid "invalid format spec '%%%s' in output file name"
+msgid "invalid format spec '%%%s' in output filename"
 msgstr ""
 
 #, python-format
@@ -4726,8 +4383,12 @@
 msgstr ""
 
 #, python-format
-msgid "%s %s to %s\n"
-msgstr ""
+msgid "moving %s to %s\n"
+msgstr ""
+
+#, fuzzy, python-format
+msgid "copying %s to %s\n"
+msgstr "正在推到 %s\n"
 
 #, python-format
 msgid "%s has not been committed yet, so no copy data will be stored for %s.\n"
@@ -4831,32 +4492,54 @@
 msgid "%s:%s copy source revision cannot be found!\n"
 msgstr ""
 
-msgid "can only follow copies/renames for explicit file names"
-msgstr ""
-
-#, python-format
-msgid "file %s not found!"
-msgstr ""
-
-#, python-format
-msgid "no match under directory %s!"
-msgstr ""
-
-#, python-format
-msgid "can't commit %s: unsupported file type!"
-msgstr ""
-
-#, python-format
-msgid "file %s not tracked!"
-msgstr ""
-
+msgid "can only follow copies/renames for explicit filenames"
+msgstr ""
+
+msgid "HG: Enter commit message.  Lines beginning with 'HG:' are removed."
+msgstr "HG: 请输入提交日志。以 'HG:' 开始的行会被删除。"
+
+msgid "HG: Leave message empty to abort commit."
+msgstr ""
+
+#, fuzzy, python-format
+msgid "HG: user: %s"
+msgstr "用户: %s\n"
+
+msgid "HG: branch merge"
+msgstr ""
+
+#, python-format
+msgid "HG: branch '%s'"
+msgstr ""
+
+#, python-format
+msgid "HG: added %s"
+msgstr ""
+
+#, python-format
+msgid "HG: changed %s"
+msgstr ""
+
+#, fuzzy, python-format
+msgid "HG: removed %s"
+msgstr "已删除"
+
+#, fuzzy
+msgid "HG: no files changed"
+msgstr "正在增加文件改变\n"
+
+msgid "empty commit message"
+msgstr "空的提交日志"
+
+#, fuzzy
 msgid ""
 "add the specified files on the next commit\n"
 "\n"
-"    Schedule files to be version controlled and added to the repository.\n"
+"    Schedule files to be version controlled and added to the\n"
+"    repository.\n"
 "\n"
 "    The files will be added to the repository at the next commit. To\n"
-"    undo an add before that, see hg revert.\n"
+"    undo an add before that, see hg forget.\n"
 "\n"
 "    If no names are given, add all files to the repository.\n"
 "    "
@@ -4874,16 +4557,19 @@
 msgid ""
 "add all new files, delete all missing files\n"
 "\n"
-"    Add all new files and remove all missing files from the repository.\n"
-"\n"
-"    New files are ignored if they match any of the patterns in .hgignore. As\n"
-"    with add, these changes take effect at the next commit.\n"
-"\n"
-"    Use the -s option to detect renamed files. With a parameter > 0,\n"
-"    this compares every removed file with every added file and records\n"
-"    those similar enough as renames. This option takes a percentage\n"
-"    between 0 (disabled) and 100 (files must be identical) as its\n"
-"    parameter. Detecting renamed files this way can be expensive.\n"
+"    Add all new files and remove all missing files from the\n"
+"    repository.\n"
+"\n"
+"    New files are ignored if they match any of the patterns in\n"
+"    .hgignore. As with add, these changes take effect at the next\n"
+"    commit.\n"
+"\n"
+"    Use the -s/--similarity option to detect renamed files. With a\n"
+"    parameter > 0, this compares every removed file with every added\n"
+"    file and records those similar enough as renames. This option\n"
+"    takes a percentage between 0 (disabled) and 100 (files must be\n"
+"    identical) as its parameter. Detecting renamed files this way can\n"
+"    be expensive.\n"
 "    "
 msgstr ""
 
@@ -4893,18 +4579,20 @@
 msgid "similarity must be between 0 and 100"
 msgstr ""
 
-msgid ""
-"show changeset information per file line\n"
-"\n"
-"    List changes in files, showing the revision id responsible for each line\n"
-"\n"
-"    This command is useful to discover who did a change or when a change "
-"took\n"
-"    place.\n"
-"\n"
-"    Without the -a option, annotate will avoid processing files it\n"
-"    detects as binary. With -a, annotate will generate an annotation\n"
-"    anyway, probably with undesirable results.\n"
+#, fuzzy
+msgid ""
+"show changeset information by line for each file\n"
+"\n"
+"    List changes in files, showing the revision id responsible for\n"
+"    each line\n"
+"\n"
+"    This command is useful for discovering when a change was made and\n"
+"    by whom.\n"
+"\n"
+"    Without the -a/--text option, annotate will avoid processing files\n"
+"    it detects as binary. With -a, annotate will annotate the file\n"
+"    anyway, although the results will probably be neither useful\n"
+"    nor desirable.\n"
 "    "
 msgstr ""
 "显示指定文件每行的修改集信息\n"
@@ -4917,7 +4605,7 @@
 "    当使用选项 '-a' 时,annotate 会直接产生追溯,可能会有不合需要的结果\n"
 "    "
 
-msgid "at least one file name or pattern required"
+msgid "at least one filename or pattern is required"
 msgstr ""
 
 msgid "at least one of -n/-c is required for -l"
@@ -4928,12 +4616,12 @@
 msgstr ""
 
 msgid ""
-"create unversioned archive of a repository revision\n"
+"create an unversioned archive of a repository revision\n"
 "\n"
 "    By default, the revision used is the parent of the working\n"
-"    directory; use \"-r\" to specify a different revision.\n"
-"\n"
-"    To specify the type of archive to create, use \"-t\". Valid\n"
+"    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"
@@ -4944,11 +4632,12 @@
 "    \"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"
+"    using a format string; see 'hg help export' for details.\n"
 "\n"
 "    Each member added to an archive file has a directory prefix\n"
-"    prepended. Use \"-p\" to specify a format string for the prefix.\n"
-"    The default is the basename of the archive, with suffixes removed.\n"
+"    prepended. Use -p/--prefix to specify a format string for the\n"
+"    prefix. The default is the basename of the archive, with suffixes\n"
+"    removed.\n"
 "    "
 msgstr ""
 
@@ -4967,15 +4656,14 @@
 "    Commit the backed out changes as a new changeset. The new\n"
 "    changeset is a child of the backed out changeset.\n"
 "\n"
-"    If you back out a changeset other than the tip, a new head is\n"
+"    If you backout a changeset other than the tip, a new head is\n"
 "    created. This head will be the new tip and you should merge this\n"
-"    backout changeset with another head (current one by default).\n"
+"    backout changeset with another head.\n"
 "\n"
 "    The --merge option remembers the parent of the working directory\n"
 "    before starting the backout, then merges the new head with that\n"
-"    changeset afterwards. This saves you from doing the merge by\n"
-"    hand. The result of this merge is not committed, as with a normal\n"
-"    merge.\n"
+"    changeset afterwards. This saves you from doing the merge by hand.\n"
+"    The result of this merge is not committed, as with a normal merge.\n"
 "\n"
 "    See 'hg help dates' for a list of formats valid for -d/--date.\n"
 "    "
@@ -4987,13 +4675,13 @@
 msgid "please specify a revision to backout"
 msgstr ""
 
-msgid "cannot back out change on a different branch"
-msgstr ""
-
-msgid "cannot back out a change with no parents"
-msgstr ""
-
-msgid "cannot back out a merge changeset without --parent"
+msgid "cannot backout change on a different branch"
+msgstr ""
+
+msgid "cannot backout a change with no parents"
+msgstr ""
+
+msgid "cannot backout a merge changeset without --parent"
 msgstr ""
 
 #, python-format
@@ -5024,35 +4712,36 @@
 msgid ""
 "subdivision search of changesets\n"
 "\n"
-"    This command helps to find changesets which introduce problems.\n"
-"    To use, mark the earliest changeset you know exhibits the problem\n"
-"    as bad, then mark the latest changeset which is free from the\n"
-"    problem as good. Bisect will update your working directory to a\n"
-"    revision for testing (unless the --noupdate option is specified).\n"
-"    Once you have performed tests, mark the working directory as bad\n"
-"    or good and bisect will either update to another candidate changeset\n"
+"    This command helps to find changesets which introduce problems. To\n"
+"    use, mark the earliest changeset you know exhibits the problem as\n"
+"    bad, then mark the latest changeset which is free from the problem\n"
+"    as good. Bisect will update your working directory to a revision\n"
+"    for testing (unless the -U/--noupdate option is specified). Once\n"
+"    you have performed tests, mark the working directory as good or\n"
+"    bad, and bisect will either update to another candidate changeset\n"
 "    or announce that it has found the bad revision.\n"
 "\n"
 "    As a shortcut, you can also use the revision argument to mark a\n"
 "    revision as good or bad without checking it out first.\n"
 "\n"
-"    If you supply a command it will be used for automatic bisection. Its "
-"exit\n"
-"    status will be used as flag to mark revision as bad or good. In case "
-"exit\n"
-"    status is 0 the revision is marked as good, 125 - skipped, 127 (command "
-"not\n"
-"    found) - bisection will be aborted; any other status bigger than 0 will\n"
-"    mark revision as bad.\n"
-"    "
-msgstr ""
-
-#, python-format
-msgid "The first %s revision is:\n"
-msgstr ""
-
-#, python-format
-msgid "Due to skipped revisions, the first %s revision could be any of:\n"
+"    If you supply a command, it will be used for automatic bisection.\n"
+"    Its exit status will be used to mark revisions as good or bad:\n"
+"    status 0 means good, 125 means to skip the revision, 127\n"
+"    (command not found) will abort the bisection, and any other\n"
+"    non-zero exit status means the revision is bad.\n"
+"    "
+msgstr ""
+
+msgid "The first good revision is:\n"
+msgstr ""
+
+msgid "The first bad revision is:\n"
+msgstr ""
+
+msgid "Due to skipped revisions, the first good revision could be any of:\n"
+msgstr ""
+
+msgid "Due to skipped revisions, the first bad revision could be any of:\n"
 msgstr ""
 
 msgid "cannot bisect (no known good revisions)"
@@ -5068,6 +4757,10 @@
 msgstr ""
 
 #, python-format
+msgid "cannot find executable: %s"
+msgstr ""
+
+#, python-format
 msgid "failed to execute %s"
 msgstr ""
 
@@ -5075,9 +4768,9 @@
 msgid "%s killed"
 msgstr ""
 
-#, python-format
-msgid "Changeset %s: %s\n"
-msgstr ""
+#, fuzzy, python-format
+msgid "Changeset %d:%s: %s\n"
+msgstr "修改集:      %d:%s\n"
 
 #, python-format
 msgid "Testing changeset %s:%s (%s changesets remaining, ~%s tests)\n"
@@ -5087,14 +4780,17 @@
 "set or show the current branch name\n"
 "\n"
 "    With no argument, show the current branch name. With one argument,\n"
-"    set the working directory branch name (the branch does not exist in\n"
-"    the repository until the next commit).\n"
-"\n"
-"    Unless --force is specified, branch will not let you set a\n"
-"    branch name that shadows an existing branch.\n"
-"\n"
-"    Use --clean to reset the working directory branch to that of the\n"
-"    parent of the working directory, negating a previous branch change.\n"
+"    set the working directory branch name (the branch will not exist\n"
+"    in the repository until the next commit). Standard practice\n"
+"    recommends that primary development take place on the 'default'\n"
+"    branch.\n"
+"\n"
+"    Unless -f/--force is specified, branch will not let you set a\n"
+"    branch name that already exists, even if it's inactive.\n"
+"\n"
+"    Use -C/--clean to reset the working directory branch to that of\n"
+"    the parent of the working directory, negating a previous branch\n"
+"    change.\n"
 "\n"
 "    Use the command 'hg update' to switch to an existing branch.\n"
 "    "
@@ -5132,20 +4828,23 @@
 "    If no destination repository is specified the destination is\n"
 "    assumed to have all the nodes specified by one or more --base\n"
 "    parameters. To create a bundle containing all changesets, use\n"
-"    --all (or --base null). To change the compression method applied,\n"
-"    use the -t option (by default, bundles are compressed using bz2).\n"
-"\n"
-"    The bundle file can then be transferred using conventional means and\n"
-"    applied to another repository with the unbundle or pull command.\n"
-"    This is useful when direct push and pull are not available or when\n"
-"    exporting an entire repository is undesirable.\n"
+"    -a/--all (or --base null).\n"
+"\n"
+"    To change the compression method applied, use the -t/--type\n"
+"    option. The available compression methods are: none, bzip2, and\n"
+"    gzip (by default, bundles are compressed using bzip2).\n"
+"\n"
+"    The bundle file can then be transferred using conventional means\n"
+"    and applied to another repository with the unbundle or pull\n"
+"    command. This is useful when direct push and pull are not\n"
+"    available or when exporting an entire repository is undesirable.\n"
 "\n"
 "    Applying bundles preserves all changeset contents including\n"
 "    permissions, copy/rename information, and revision history.\n"
 "    "
 msgstr ""
 
-msgid "--base is incompatible with specifiying a destination"
+msgid "--base is incompatible with specifying a destination"
 msgstr ""
 
 msgid "unknown bundle type specified with --type"
@@ -5154,8 +4853,8 @@
 msgid ""
 "output the current or given revision of files\n"
 "\n"
-"    Print the specified files as they were at the given revision.\n"
-"    If no revision is given, the parent of the working directory is used,\n"
+"    Print the specified files as they were at the given revision. If\n"
+"    no revision is given, the parent of the working directory is used,\n"
 "    or tip if no revision is checked out.\n"
 "\n"
 "    Output may be to a file, in which case the name of the file is\n"
@@ -5163,7 +4862,7 @@
 "    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 repo root\n"
+"    %d   dirname of file being printed, or '.' if in repository root\n"
 "    %p   root-relative path name of file being printed\n"
 "    "
 msgstr ""
@@ -5179,6 +4878,22 @@
 "    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"
 "    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"
@@ -5191,75 +4906,32 @@
 "\n"
 "      $ cp -al REPO REPOCLONE\n"
 "\n"
-"    This is the fastest way to clone, but it is not always safe.  The\n"
+"    This is the fastest way to clone, but it is not always safe. The\n"
 "    operation is not atomic (making sure REPO is not modified during\n"
 "    the operation is up to you) and you have to make sure your editor\n"
-"    breaks hardlinks (Emacs and most Linux Kernel tools do so).  Also,\n"
+"    breaks hardlinks (Emacs and most Linux Kernel tools do so). Also,\n"
 "    this is not compatible with certain extensions that place their\n"
 "    metadata under the .hg directory, such as mq.\n"
 "\n"
-"    If you use the -r option to clone up to a specific revision, no\n"
-"    subsequent revisions will be present in the cloned repository.\n"
-"    This option implies --pull, even on local repositories.\n"
-"\n"
-"    If the -U option is used, the new clone will contain only a repository\n"
-"    (.hg) and no working copy (the working copy 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"
-"    Look at the help text for urls for important details about ssh:// URLs.\n"
-"    "
-msgstr ""
-"复制现有版本库\n"
-"\n"
-"    在新目录创建现有版本库的副本。\n"
-"\n"
-"    如果没有指定目标目录,默认使用源版本库的基本名称。\n"
-"\n"
-"    源版本库的位置增加到新版本库的文件 .hg/hgrc 中,作为未来更新时的默认\n"
-"    位置。\n"
-"\n"
-"    为了效率,在复制时,只要源版本库和目标版本库位于同一文件系统,就会使\n"
-"    用硬链接(注意这只适用于版本库中的数据,不适用于检出的文件)。某些文件\n"
-"    系统,例如 AFS,没有正确实现硬链接,还不报告错误。在这些情况下,请使\n"
-"    用选项 '--pull'来避免硬链接。\n"
-"\n"
-"    在某些情况下,你可以通过下述命令用硬链接复制且检出文件:\n"
-"\n"
-"      $ cp -al REPO REPOCLONE\n"
-"\n"
-"    这是最快速的复制方法,但是不见得总是安全。此操作不是原子的(请确认在你\n"
-"    操作期间版本库未修改),还要确认你的编辑器会破坏硬链接。还有,它与将元\n"
-"    数据放到目录 .hg 中的某些扩展不兼容,例如 mq。\n"
-"\n"
-"    如果你使用选项 '-r' 复制指定版本,那么后来的版本不会在新版本库中出现。\n"
-"    此选项暗示 '--pull',纵然是操作本地版本库。\n"
-"\n"
-"    如果你使用了选项 '-U',那么新仓库只包含版本库(.hg),没有工作副本。\n"
-"\n"
-"    参见 'hg help urls' 以了解有效源格式的详情。\n"
-"\n"
-"    也可以指定位置 'ssh://' 作为目标,但是不会创建文件 .hg/hgrc,并且工作\n"
-"    副本将会创建在远程。参见主题 'urls' 的帮助信息,以了解位置 'ssh://'\n"
-"    的重要详情。\n"
-"    "
-
+"    "
+msgstr ""
+
+#, fuzzy
 msgid ""
 "commit the specified files or all outstanding changes\n"
 "\n"
-"    Commit changes to the given files into the repository.\n"
+"    Commit changes to the given files into the repository. Unlike a\n"
+"    centralized RCS, this operation is a local operation. See hg push\n"
+"    for a way to actively distribute your changes.\n"
 "\n"
 "    If a list of files is omitted, all changes reported by \"hg status\"\n"
 "    will be committed.\n"
 "\n"
 "    If you are committing the result of a merge, do not provide any\n"
-"    file names or -I/-X filters.\n"
-"\n"
-"    If no commit message is specified, the configured editor is started to\n"
-"    prompt you for a message.\n"
+"    filenames or -I/-X filters.\n"
+"\n"
+"    If no commit message is specified, the configured editor is\n"
+"    started to prompt you for a message.\n"
 "\n"
 "    See 'hg help dates' for a list of formats valid for -d/--date.\n"
 "    "
@@ -5292,7 +4964,7 @@
 "    the source must be a single file.\n"
 "\n"
 "    By default, this command copies the contents of files as they\n"
-"    stand in the working directory. If invoked with --after, the\n"
+"    exist in the working directory. If invoked with -A/--after, the\n"
 "    operation is recorded, but no copying is performed.\n"
 "\n"
 "    This command takes effect with the next commit. To undo a copy\n"
@@ -5340,13 +5012,17 @@
 msgid ""
 "show combined config settings from all hgrc files\n"
 "\n"
-"    With no args, print names and values of all config items.\n"
-"\n"
-"    With one arg of the form section.name, print just the value of\n"
-"    that config item.\n"
-"\n"
-"    With multiple args, print names and values of all config items\n"
-"    with matching section names."
+"    With no arguments, print names and values of all config items.\n"
+"\n"
+"    With one argument of the form section.name, print just the value\n"
+"    of that config item.\n"
+"\n"
+"    With multiple arguments, print names and values of all config\n"
+"    items with matching section names.\n"
+"\n"
+"    With --debug, the source (filename and line number) is printed\n"
+"    for each config item.\n"
+"    "
 msgstr ""
 
 msgid "only one config item permitted"
@@ -5380,7 +5056,7 @@
 msgid "dump the contents of an index file"
 msgstr ""
 
-msgid "dump an index DAG as a .dot file"
+msgid "dump an index DAG as a graphviz dot file"
 msgstr ""
 
 msgid "test Mercurial installation"
@@ -5470,6 +5146,7 @@
 msgid "show how files match on given patterns"
 msgstr ""
 
+#, fuzzy
 msgid ""
 "diff repository (or selected files)\n"
 "\n"
@@ -5487,12 +5164,12 @@
 "    revisions are specified, the working directory files are compared\n"
 "    to its parent.\n"
 "\n"
-"    Without the -a option, diff will avoid generating diffs of files\n"
-"    it detects as binary. With -a, diff will generate a diff anyway,\n"
-"    probably with undesirable results.\n"
-"\n"
-"    Use the --git option to generate diffs in the git extended diff\n"
-"    format. For more information, read hg help diffs.\n"
+"    Without the -a/--text option, diff will avoid generating diffs of\n"
+"    files it detects as binary. With -a, diff will generate a diff\n"
+"    anyway, probably with undesirable results.\n"
+"\n"
+"    Use the -g/--git option to generate diffs in the git extended diff\n"
+"    format. For more information, read 'hg help diffs'.\n"
 "    "
 msgstr ""
 "在版本库中比较(指定的文件)\n"
@@ -5515,6 +5192,7 @@
 "    了解更多信息。\n"
 "    "
 
+#, fuzzy
 msgid ""
 "dump the header and diffs for one or more changesets\n"
 "\n"
@@ -5523,8 +5201,9 @@
 "    The information shown in the changeset header is: author,\n"
 "    changeset hash, parent(s) and commit comment.\n"
 "\n"
-"    NOTE: export may generate unexpected diff output for merge changesets,\n"
-"    as it will compare the merge changeset against its first parent only.\n"
+"    NOTE: export may generate unexpected diff output for merge\n"
+"    changesets, as it will compare the merge changeset against its\n"
+"    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"
@@ -5538,15 +5217,15 @@
 "    %n   zero-padded sequence number, starting at 1\n"
 "    %r   zero-padded changeset revision number\n"
 "\n"
-"    Without the -a option, export will avoid generating diffs of files\n"
-"    it detects as binary. With -a, export will generate a diff anyway,\n"
-"    probably with undesirable results.\n"
-"\n"
-"    Use the --git option to generate diffs in the git extended diff\n"
-"    format. Read the diffs help topic for more information.\n"
-"\n"
-"    With the --switch-parent option, the diff will be against the second\n"
-"    parent. It can be useful to review a merge.\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"
+"    diff anyway, probably with undesirable results.\n"
+"\n"
+"    Use the -g/--git option to generate diffs in the git extended diff\n"
+"    format. See 'hg help diffs' for more information.\n"
+"\n"
+"    With the --switch-parent option, the diff will be against the\n"
+"    second parent. It can be useful to review a merge.\n"
 "    "
 msgstr ""
 "为一个或多个修改集输出标题和差异\n"
@@ -5589,14 +5268,35 @@
 msgstr ""
 
 msgid ""
+"forget the specified files on the next commit\n"
+"\n"
+"    Mark the specified files so they will no longer be tracked\n"
+"    after the next commit.\n"
+"\n"
+"    This only removes files from the current branch, not from the\n"
+"    entire project history, and it does not delete them from the\n"
+"    working directory.\n"
+"\n"
+"    To undo a forget before the next commit, see hg add.\n"
+"    "
+msgstr ""
+
+msgid "no files specified"
+msgstr ""
+
+#, python-format
+msgid "not removing %s: file is already untracked\n"
+msgstr ""
+
+msgid ""
 "search for a pattern in specified files and revisions\n"
 "\n"
 "    Search revisions of files for a regular expression.\n"
 "\n"
 "    This command behaves differently than Unix grep. It only accepts\n"
 "    Python/Perl regexps. It searches repository history, not the\n"
-"    working directory. It always prints the revision number in which\n"
-"    a match appears.\n"
+"    working directory. It always prints the revision number in which a\n"
+"    match appears.\n"
 "\n"
 "    By default, grep only prints output for the first revision of a\n"
 "    file in which it finds a match. To get it to print every revision\n"
@@ -5615,19 +5315,28 @@
 "\n"
 "    With no arguments, show all repository head changesets.\n"
 "\n"
-"    If branch or revisions names are given this will show the heads of\n"
-"    the specified branches or the branches those revisions are tagged\n"
-"    with.\n"
-"\n"
 "    Repository \"heads\" are changesets that don't have child\n"
 "    changesets. They are where development generally takes place and\n"
 "    are the usual targets for update and merge operations.\n"
 "\n"
-"    Branch heads are changesets that have a given branch tag, but have\n"
-"    no child changesets with that tag. They are usually where\n"
-"    development on the given branch takes place.\n"
-"    "
-msgstr ""
+"    If one or more REV is given, the \"branch heads\" will be shown for\n"
+"    the named branch associated with that revision. The name of the\n"
+"    branch is called the revision's branch tag.\n"
+"\n"
+"    Branch heads are revisions on a given named branch that do not have\n"
+"    any children on the same branch. A branch head could be a true head\n"
+"    or it could be the last changeset on a branch before a new branch\n"
+"    was created. If none of the branch heads are true heads, the branch\n"
+"    is considered inactive.\n"
+"\n"
+"    If STARTREV is specified only those heads (or branch heads) that\n"
+"    are descendants of STARTREV will be displayed.\n"
+"    "
+msgstr ""
+
+#, fuzzy, python-format
+msgid "no open branch heads on branch %s\n"
+msgstr "svn: 分支没有版本 %s"
 
 #, python-format
 msgid "no changes on branch %s containing %s are reachable from %s\n"
@@ -5640,9 +5349,10 @@
 msgid ""
 "show help for a given topic or a help overview\n"
 "\n"
-"    With no arguments, print a list of commands and short help.\n"
-"\n"
-"    Given a topic, extension, or command name, print help for that topic."
+"    With no arguments, print a list of commands with short help messages.\n"
+"\n"
+"    Given a topic, extension, or command name, print help for that\n"
+"    topic."
 msgstr ""
 
 msgid "global options:"
@@ -5686,19 +5396,13 @@
 msgid "no commands defined\n"
 msgstr ""
 
-msgid ""
-"\n"
-"enabled extensions:\n"
-"\n"
+#, fuzzy
+msgid "enabled extensions:"
 msgstr ""
 "\n"
 "启用的扩展:\n"
 "\n"
 
-#, python-format
-msgid " %s   %s\n"
-msgstr ""
-
 msgid "no help text available"
 msgstr "没有可用的帮助信息"
 
@@ -5728,14 +5432,16 @@
 msgid ""
 "identify the working copy or specified revision\n"
 "\n"
-"    With no revision, print a summary of the current state of the repo.\n"
-"\n"
-"    With a path, do a lookup in another repository.\n"
-"\n"
-"    This summary identifies the repository state using one or two parent\n"
-"    hash identifiers, followed by a \"+\" if there are uncommitted changes\n"
-"    in the working directory, a list of tags for this revision and a branch\n"
-"    name for non-default branches.\n"
+"    With no revision, print a summary of the current state of the\n"
+"    repository.\n"
+"\n"
+"    Specifying a path to a repository root or Mercurial bundle will\n"
+"    cause lookup to operate on that repository/bundle.\n"
+"\n"
+"    This summary identifies the repository state using one or two\n"
+"    parent hash identifiers, followed by a \"+\" if there are\n"
+"    uncommitted changes in the working directory, a list of tags for\n"
+"    this revision and a branch name for non-default branches.\n"
 "    "
 msgstr ""
 
@@ -5745,29 +5451,30 @@
 "    Import a list of patches and commit them individually.\n"
 "\n"
 "    If there are outstanding changes in the working directory, import\n"
-"    will abort unless given the -f flag.\n"
+"    will abort unless given the -f/--force flag.\n"
 "\n"
 "    You can import a patch straight from a mail message. Even patches\n"
-"    as attachments work (body part must be type text/plain or\n"
-"    text/x-patch to be used). From and Subject headers of email\n"
+"    as attachments work (to use the body part, it must have type\n"
+"    text/plain or text/x-patch). From and Subject headers of email\n"
 "    message are used as default committer and commit message. All\n"
 "    text/plain body parts before first diff are added to commit\n"
 "    message.\n"
 "\n"
-"    If the imported patch was generated by hg export, user and description\n"
-"    from patch override values from message headers and body. Values\n"
-"    given on command line with -m and -u override these.\n"
-"\n"
-"    If --exact is specified, import will set the working directory\n"
-"    to the parent of each patch before applying it, and will abort\n"
-"    if the resulting changeset has a different ID than the one\n"
-"    recorded in the patch. This may happen due to character set\n"
-"    problems or other deficiencies in the text patch format.\n"
-"\n"
-"    With --similarity, hg will attempt to discover renames and copies\n"
-"    in the patch in the same way as 'addremove'.\n"
-"\n"
-"    To read a patch from standard input, use patch name \"-\".\n"
+"    If the imported patch was generated by hg export, user and\n"
+"    description from patch override values from message headers and\n"
+"    body. Values given on command line with -m/--message and -u/--user\n"
+"    override these.\n"
+"\n"
+"    If --exact is specified, import will set the working directory to\n"
+"    the parent of each patch before applying it, and will abort if the\n"
+"    resulting changeset has a different ID than the one recorded in\n"
+"    the patch. This may happen due to character set problems or other\n"
+"    deficiencies in the text patch format.\n"
+"\n"
+"    With -s/--similarity, hg will attempt to discover renames and\n"
+"    copies in the patch in the same way as 'addremove'.\n"
+"\n"
+"    To read a patch from standard input, use \"-\" as the patch name.\n"
 "    See 'hg help dates' for a list of formats valid for -d/--date.\n"
 "    "
 msgstr ""
@@ -5784,8 +5491,9 @@
 "%s\n"
 msgstr ""
 
-msgid "not a mercurial patch"
-msgstr ""
+#, fuzzy
+msgid "not a Mercurial patch"
+msgstr "%s 不是本地的水银版本库"
 
 msgid "patch is damaged or loses information"
 msgstr ""
@@ -5794,21 +5502,22 @@
 "show new changesets found in source\n"
 "\n"
 "    Show new changesets found in the specified path/URL or the default\n"
-"    pull location. These are the changesets that would be pulled if a pull\n"
-"    was requested.\n"
-"\n"
-"    For remote repository, using --bundle avoids downloading the changesets\n"
-"    twice if the incoming is followed by a pull.\n"
+"    pull location. These are the changesets that would have been pulled\n"
+"    if a pull at the time you issued this command.\n"
+"\n"
+"    For remote repository, using --bundle avoids downloading the\n"
+"    changesets twice if the incoming is followed by a pull.\n"
 "\n"
 "    See pull for valid source format details.\n"
 "    "
 msgstr ""
 
+#, fuzzy
 msgid ""
 "create a new repository in the given directory\n"
 "\n"
 "    Initialize a new repository in the given directory. If the given\n"
-"    directory does not exist, it is created.\n"
+"    directory does not exist, it will be created.\n"
 "\n"
 "    If no directory is given, the current directory is used.\n"
 "\n"
@@ -5829,23 +5538,24 @@
 msgid ""
 "locate files matching specific patterns\n"
 "\n"
-"    Print all files under Mercurial control whose names match the\n"
-"    given patterns.\n"
-"\n"
-"    This command searches the entire repository by default. To search\n"
-"    just the current directory and its subdirectories, use\n"
-"    \"--include .\".\n"
-"\n"
-"    If no patterns are given to match, this command prints all file\n"
-"    names.\n"
+"    Print files under Mercurial control in the working directory whose\n"
+"    names match the given patterns.\n"
+"\n"
+"    By default, this command searches all directories in the working\n"
+"    directory. To search just the current directory and its\n"
+"    subdirectories, use \"--include .\".\n"
+"\n"
+"    If no patterns are given to match, this command prints the names\n"
+"    of all files under Mercurial control in the working directory.\n"
 "\n"
 "    If you want to feed the output of this command into the \"xargs\"\n"
-"    command, use the \"-0\" option to both this command and \"xargs\".\n"
-"    This will avoid the problem of \"xargs\" treating single filenames\n"
-"    that contain white space as multiple filenames.\n"
-"    "
-msgstr ""
-
+"    command, use the -0 option to both this command and \"xargs\". This\n"
+"    will avoid the problem of \"xargs\" treating single filenames that\n"
+"    contain whitespace as multiple filenames.\n"
+"    "
+msgstr ""
+
+#, fuzzy
 msgid ""
 "show revision history of entire repository or files\n"
 "\n"
@@ -5853,8 +5563,8 @@
 "    project.\n"
 "\n"
 "    File history is shown without following rename or copy history of\n"
-"    files. Use -f/--follow with a file name to follow history across\n"
-"    renames and copies. --follow without a file name will only show\n"
+"    files. Use -f/--follow with a filename to follow history across\n"
+"    renames and copies. --follow without a filename will only show\n"
 "    ancestors or descendants of the starting revision. --follow-first\n"
 "    only follows the first parent of merge revisions.\n"
 "\n"
@@ -5864,16 +5574,15 @@
 "\n"
 "    See 'hg help dates' for a list of formats valid for -d/--date.\n"
 "\n"
-"    By default this command outputs: changeset id and hash, tags,\n"
-"    non-trivial parents, user, date and time, and a summary for each\n"
-"    commit. When the -v/--verbose switch is used, the list of changed\n"
-"    files and full commit message is shown.\n"
-"\n"
-"    NOTE: log -p may generate unexpected diff output for merge\n"
+"    By default this command prints revision number and changeset id,\n"
+"    tags, non-trivial parents, user, date and time, and a summary for\n"
+"    each commit. When the -v/--verbose switch is used, the list of\n"
+"    changed files and full commit message are shown.\n"
+"\n"
+"    NOTE: log -p/--patch may generate unexpected diff output for merge\n"
 "    changesets, as it will only compare the merge changeset against\n"
-"    its first parent. Also, the files: list will only reflect files\n"
-"    that are different from BOTH parents.\n"
-"\n"
+"    its first parent. Also, only files different from BOTH parents\n"
+"    will appear in files:.\n"
 "    "
 msgstr ""
 "显示全部版本库或指定文件的版本历史\n"
@@ -5901,40 +5610,33 @@
 "    "
 
 msgid ""
-"looks up all renames for a file (up to endrev) the first\n"
-"        time the file is given. It indexes on the changerev and only\n"
-"        parses the manifest if linkrev != changerev.\n"
-"        Returns rename info for fn at changerev rev."
-msgstr ""
-
-msgid ""
 "output the current or given revision of the project manifest\n"
 "\n"
 "    Print a list of version controlled files for the given revision.\n"
-"    If no revision is given, the parent of the working directory is used,\n"
-"    or tip if no revision is checked out.\n"
-"\n"
-"    The manifest is the list of files being version controlled. If no "
-"revision\n"
-"    is given then the first parent of the working directory is used.\n"
-"\n"
-"    With -v flag, print file permissions, symlink and executable bits. With\n"
-"    --debug flag, print file revision hashes.\n"
-"    "
-msgstr ""
-
+"    If no revision is given, the first parent of the working directory\n"
+"    is used, or the null revision if no revision is checked out.\n"
+"\n"
+"    With -v, print file permissions, symlink and executable bits.\n"
+"    With --debug, print file revision hashes.\n"
+"    "
+msgstr ""
+
+#, fuzzy
 msgid ""
 "merge working directory with another revision\n"
 "\n"
-"    Merge the contents of the current working directory and the\n"
-"    requested revision. Files that changed between either parent are\n"
-"    marked as changed for the next commit and a commit must be\n"
-"    performed before any further updates are allowed.\n"
+"    The current working directory is updated with all changes made in\n"
+"    the requested revision since the last common predecessor revision.\n"
+"\n"
+"    Files that changed between either parent are marked as changed for\n"
+"    the next commit and a commit must be performed before any further\n"
+"    updates to the repository are allowed. The next commit will have\n"
+"    two parents.\n"
 "\n"
 "    If no revision is specified, the working directory's parent is a\n"
-"    head revision, and the current branch contains exactly one other head,\n"
-"    the other head is merged with by default. Otherwise, an explicit\n"
-"    revision to merge with must be provided.\n"
+"    head revision, and the current branch contains exactly one other\n"
+"    head, the other head is merged with by default. Otherwise, an\n"
+"    explicit revision with which to merge with must be provided.\n"
 "    "
 msgstr ""
 "将工作目录与其它版本合并\n"
@@ -5969,22 +5671,23 @@
 msgid ""
 "show changesets not found in destination\n"
 "\n"
-"    Show changesets not found in the specified destination repository or\n"
-"    the default push location. These are the changesets that would be pushed\n"
-"    if a push was requested.\n"
+"    Show changesets not found in the specified destination repository\n"
+"    or the default push location. These are the changesets that would\n"
+"    be pushed if a push was requested.\n"
 "\n"
 "    See pull for valid destination format details.\n"
 "    "
 msgstr ""
 
-msgid ""
-"show the parents of the working dir or revision\n"
-"\n"
-"    Print the working directory's parent revisions. If a\n"
-"    revision is given via --rev, the parent of that revision\n"
-"    will be printed. If a file argument is given, revision in\n"
-"    which the file was last changed (before the working directory\n"
-"    revision or the argument to --rev if given) is printed.\n"
+#, fuzzy
+msgid ""
+"show the parents of the working directory or revision\n"
+"\n"
+"    Print the working directory's parent revisions. If a revision is\n"
+"    given via -r/--rev, the parent of that revision will be printed.\n"
+"    If a file argument is given, the revision in which the file was\n"
+"    last changed (before the working directory revision or the\n"
+"    argument to --rev if given) is printed.\n"
 "    "
 msgstr ""
 "显示工作目录或指定版本的父亲\n"
@@ -5994,7 +5697,7 @@
 "    版本,或 '--rev' 指定的版本)。\n"
 "    "
 
-msgid "can only specify an explicit file name"
+msgid "can only specify an explicit filename"
 msgstr ""
 
 #, python-format
@@ -6004,8 +5707,8 @@
 msgid ""
 "show aliases for remote repositories\n"
 "\n"
-"    Show definition of symbolic path name NAME. If no name is given, show\n"
-"    definition of available names.\n"
+"    Show definition of symbolic path name NAME. If no name is given,\n"
+"    show definition of all available names.\n"
 "\n"
 "    Path names are defined in the [paths] section of /etc/mercurial/hgrc\n"
 "    and $HOME/.hgrc. If run inside a repository, .hg/hgrc is used, too.\n"
@@ -6026,14 +5729,21 @@
 msgid "(run 'hg update' to get a working copy)\n"
 msgstr ""
 
+#, fuzzy
 msgid ""
 "pull changes from the specified source\n"
 "\n"
 "    Pull changes from a remote repository to a local one.\n"
 "\n"
 "    This finds all changes from the repository at the specified path\n"
-"    or URL and adds them to the local repository. By default, this\n"
-"    does not update the copy of the project in the working directory.\n"
+"    or URL and adds them to a local repository (the current one unless\n"
+"    -R is specified). By default, this does not update the copy of the\n"
+"    project in the working directory.\n"
+"\n"
+"    Use hg incoming if you want to see what would have been added by a\n"
+"    pull at the time you issued this command. If you then decide to\n"
+"    added those changes to the repository, you should use pull -r X\n"
+"    where X is the last changeset listed by hg incoming.\n"
 "\n"
 "    If SOURCE is omitted, the 'default' path will be used.\n"
 "    See 'hg help urls' for more information.\n"
@@ -6050,31 +5760,26 @@
 "    更多信息。\n"
 "    "
 
-msgid ""
-"Other repository doesn't support revision lookup, so a rev cannot be "
-"specified."
-msgstr ""
-
+#, fuzzy
 msgid ""
 "push changes to the specified destination\n"
 "\n"
 "    Push changes from the local repository to the given destination.\n"
 "\n"
-"    This is the symmetrical operation for pull. It helps to move\n"
-"    changes from the current repository to a different one. If the\n"
-"    destination is local this is identical to a pull in that directory\n"
-"    from the current one.\n"
+"    This is the symmetrical operation for pull. It moves changes from\n"
+"    the current repository to a different one. If the destination is\n"
+"    local this is identical to a pull in that directory from the\n"
+"    current one.\n"
 "\n"
 "    By default, push will refuse to run if it detects the result would\n"
 "    increase the number of remote heads. This generally indicates the\n"
-"    the client has forgotten to pull and merge before pushing.\n"
-"\n"
-"    If -r is used, the named changeset and all its ancestors will be pushed\n"
-"    to the remote repository.\n"
-"\n"
-"    Look at the help text for urls for important details about ssh:// URLs.\n"
-"    If DESTINATION is omitted, a default path will be used.\n"
-"    See 'hg help urls' for more information.\n"
+"    user forgot to pull and merge before pushing.\n"
+"\n"
+"    If -r/--rev is used, the named revision and all its ancestors will\n"
+"    be pushed to the remote repository.\n"
+"\n"
+"    Please see 'hg help urls' for important details about ssh://\n"
+"    URLs. If DESTINATION is omitted, a default path will be used.\n"
 "    "
 msgstr ""
 "推送改变到指定位置\n"
@@ -6100,46 +5805,33 @@
 msgstr "正在推到 %s\n"
 
 msgid ""
-"raw commit interface (DEPRECATED)\n"
-"\n"
-"    (DEPRECATED)\n"
-"    Lowlevel commit, for use in helper scripts.\n"
-"\n"
-"    This command is not intended to be used by normal users, as it is\n"
-"    primarily useful for importing from other SCMs.\n"
-"\n"
-"    This command is now deprecated and will be removed in a future\n"
-"    release, please use debugsetparents and commit instead.\n"
-"    "
-msgstr ""
-
-msgid "(the rawcommit command is deprecated)\n"
-msgstr ""
-
-msgid ""
 "roll back an interrupted transaction\n"
 "\n"
 "    Recover from an interrupted commit or pull.\n"
 "\n"
-"    This command tries to fix the repository status after an interrupted\n"
-"    operation. It should only be necessary when Mercurial suggests it.\n"
-"    "
-msgstr ""
-
+"    This command tries to fix the repository status after an\n"
+"    interrupted operation. It should only be necessary when Mercurial\n"
+"    suggests it.\n"
+"    "
+msgstr ""
+
+#, fuzzy
 msgid ""
 "remove the specified files on the next commit\n"
 "\n"
 "    Schedule the indicated files for removal from the repository.\n"
 "\n"
-"    This only removes files from the current branch, not from the entire\n"
-"    project history. -A can be used to remove only files that have already\n"
-"    been deleted, -f can be used to force deletion, and -Af can be used\n"
-"    to remove files from the next revision without deleting them.\n"
-"\n"
-"    The following table details the behavior of remove for different file\n"
-"    states (columns) and option combinations (rows). The file states are\n"
-"    Added, Clean, Modified and Missing (as reported by hg status). The\n"
-"    actions are Warn, Remove (from branch) and Delete (from disk).\n"
+"    This only removes files from the current branch, not from the\n"
+"    entire project history. -A/--after can be used to remove only\n"
+"    files that have already been deleted, -f/--force can be used to\n"
+"    force deletion, and -Af can be used to remove files from the next\n"
+"    revision without deleting them from the working directory.\n"
+"\n"
+"    The following table details the behavior of remove for different\n"
+"    file states (columns) and option combinations (rows). The file\n"
+"    states are Added [A], Clean [C], Modified [M] and Missing [!]\n"
+"    (as reported by hg status). The actions are Warn, Remove (from\n"
+"    branch) and Delete (from disk).\n"
 "\n"
 "           A  C  M  !\n"
 "    none   W  RD W  R\n"
@@ -6173,7 +5865,8 @@
 "    要在此之前撤销删除,请参见 'hg revert'。\n"
 "    "
 
-msgid "no files specified"
+#, python-format
+msgid "not removing %s: file is untracked\n"
 msgstr ""
 
 #, python-format
@@ -6192,12 +5885,12 @@
 msgid ""
 "rename files; equivalent of copy + remove\n"
 "\n"
-"    Mark dest as copies of sources; mark sources for deletion. If\n"
-"    dest is a directory, copies are put in that directory. If dest is\n"
-"    a file, there can only be one source.\n"
+"    Mark dest as copies of sources; mark sources for deletion. If dest\n"
+"    is a directory, copies are put in that directory. If dest is a\n"
+"    file, there can only be one source.\n"
 "\n"
 "    By default, this command copies the contents of files as they\n"
-"    exist in the working directory. If invoked with --after, the\n"
+"    exist in the working directory. If invoked with -A/--after, the\n"
 "    operation is recorded, but no copying is performed.\n"
 "\n"
 "    This command takes effect at the next commit. To undo a rename\n"
@@ -6210,10 +5903,15 @@
 "\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 switch.\n"
-"\n"
-"    This command will also allow listing resolved files and manually\n"
-"    marking and unmarking files as resolved.\n"
+"    resolve all unresolved files, use the -a/--all switch.\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"
+"    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"
 "\n"
 "    The codes used to show the status of files are:\n"
 "    U = unresolved\n"
@@ -6231,10 +5929,10 @@
 msgstr ""
 
 msgid ""
-"restore individual files or dirs to an earlier state\n"
-"\n"
-"    (use update -r to check out earlier revisions, revert does not\n"
-"    change the working dir parents)\n"
+"restore individual files or directories to an earlier state\n"
+"\n"
+"    (Use update -r to check out earlier revisions, revert does not\n"
+"    change the working directory parents.)\n"
 "\n"
 "    With no revision specified, revert the named files or directories\n"
 "    to the contents they had in the parent of the working directory.\n"
@@ -6243,10 +5941,10 @@
 "    working directory has two parents, you must explicitly specify the\n"
 "    revision to revert to.\n"
 "\n"
-"    Using the -r option, revert the given files or directories to their\n"
-"    contents as of a specific revision. This can be helpful to \"roll\n"
-"    back\" some or all of an earlier change.\n"
-"    See 'hg help dates' for a list of formats valid for -d/--date.\n"
+"    Using the -r/--rev option, revert the given files or directories\n"
+"    to their contents as of a specific revision. This can be helpful\n"
+"    to \"roll back\" some or all of an earlier change. See 'hg help\n"
+"    dates' for a list of formats valid for -d/--date.\n"
 "\n"
 "    Revert modifies the working directory. It does not commit any\n"
 "    changes, or change the parent of the working directory. If you\n"
@@ -6254,8 +5952,8 @@
 "    directory, the reverted files will thus appear modified\n"
 "    afterwards.\n"
 "\n"
-"    If a file has been deleted, it is restored. If the executable\n"
-"    mode of a file was changed, it is reset.\n"
+"    If a file has been deleted, it is restored. If the executable mode\n"
+"    of a file was changed, it is reset.\n"
 "\n"
 "    If names are given, all files matching the names are reverted.\n"
 "    If no arguments are given, no files are reverted.\n"
@@ -6301,7 +5999,8 @@
 "    This command should be used with care. There is only one level of\n"
 "    rollback, and there is no way to undo a rollback. It will also\n"
 "    restore the dirstate at the time of the last transaction, losing\n"
-"    any dirstate changes since that time.\n"
+"    any dirstate changes since that time. This command does not alter\n"
+"    the working directory.\n"
 "\n"
 "    Transactions are used to encapsulate the effects of all commands\n"
 "    that create new changesets or propagate existing changesets into a\n"
@@ -6324,19 +6023,21 @@
 msgstr ""
 
 msgid ""
-"print the root (top) of the current working dir\n"
+"print the root (top) of the current working directory\n"
 "\n"
 "    Print the root directory of the current repository.\n"
 "    "
 msgstr ""
 
+#, fuzzy
 msgid ""
 "export the repository via HTTP\n"
 "\n"
 "    Start a local HTTP repository browser and pull server.\n"
 "\n"
 "    By default, the server logs accesses to stdout and errors to\n"
-"    stderr. Use the \"-A\" and \"-E\" options to log to files.\n"
+"    stderr. Use the -A/--accesslog and -E/--errorlog options to log to\n"
+"    files.\n"
 "    "
 msgstr ""
 "通过 HTTP 发布版本库\n"
@@ -6351,17 +6052,19 @@
 msgid "listening at http://%s%s/%s (bound to %s:%d)\n"
 msgstr ""
 
+#, fuzzy
 msgid ""
 "show changed files in the working directory\n"
 "\n"
 "    Show status of files in the repository. If names are given, only\n"
 "    files that match are shown. Files that are clean or ignored or\n"
-"    source of a copy/move operation, are not listed unless -c (clean),\n"
-"    -i (ignored), -C (copies) or -A is given. Unless options described\n"
-"    with \"show only ...\" are given, the options -mardu are used.\n"
+"    the source of a copy/move operation, are not listed unless\n"
+"    -c/--clean, -i/--ignored, -C/--copies or -A/--all are given.\n"
+"    Unless options described with \"show only ...\" are given, the\n"
+"    options -mardu are used.\n"
 "\n"
 "    Option -q/--quiet hides untracked (unknown and ignored) files\n"
-"    unless explicitly requested with -u/--unknown or -i/-ignored.\n"
+"    unless explicitly requested with -u/--unknown or -i/--ignored.\n"
 "\n"
 "    NOTE: status may appear to disagree with diff if permissions have\n"
 "    changed or a merge has occurred. The standard diff format does not\n"
@@ -6369,17 +6072,18 @@
 "    to one merge parent.\n"
 "\n"
 "    If one revision is given, it is used as the base revision.\n"
-"    If two revisions are given, the difference between them is shown.\n"
+"    If two revisions are given, the differences between them are\n"
+"    shown.\n"
 "\n"
 "    The codes used to show the status of files are:\n"
 "    M = modified\n"
 "    A = added\n"
 "    R = removed\n"
 "    C = clean\n"
-"    ! = deleted, but still tracked\n"
+"    ! = missing (deleted by non-hg command, but still tracked)\n"
 "    ? = not tracked\n"
 "    I = ignored\n"
-"      = the previous added file was copied from here\n"
+"      = origin of the previous file listed as A (added)\n"
 "    "
 msgstr ""
 "显示工作目录中已改变的文件\n"
@@ -6418,8 +6122,8 @@
 "    very useful to compare different revisions, to go back to significant\n"
 "    earlier versions or to mark branch points as releases, etc.\n"
 "\n"
-"    If no revision is given, the parent of the working directory is used,\n"
-"    or tip if no revision is checked out.\n"
+"    If no revision is given, the parent of the working directory is\n"
+"    used, or tip if no revision is checked out.\n"
 "\n"
 "    To facilitate version control, distribution, and merging of tags,\n"
 "    they are stored as a file named \".hgtags\" which is managed\n"
@@ -6445,9 +6149,13 @@
 msgid "tag '%s' does not exist"
 msgstr ""
 
-#, python-format
-msgid "tag '%s' is not a %s tag"
-msgstr ""
+#, fuzzy, python-format
+msgid "tag '%s' is not a global tag"
+msgstr "非本地版本库 '%s'"
+
+#, fuzzy, python-format
+msgid "tag '%s' is not a local tag"
+msgstr "非本地版本库 '%s'"
 
 #, python-format
 msgid "Removed tag %s"
@@ -6464,17 +6172,17 @@
 msgid ""
 "list repository tags\n"
 "\n"
-"    This lists both regular and local tags. When the -v/--verbose switch\n"
-"    is used, a third column \"local\" is printed for local tags.\n"
+"    This lists both regular and local tags. When the -v/--verbose\n"
+"    switch is used, a third column \"local\" is printed for local tags.\n"
 "    "
 msgstr ""
 
 msgid ""
 "show the tip revision\n"
 "\n"
-"    The tip revision (usually just called the tip) is the most\n"
-"    recently added changeset in the repository, the most recently\n"
-"    changed head.\n"
+"    The tip revision (usually just called the tip) is the changeset\n"
+"    most recently added to the repository (and therefore the most\n"
+"    recently changed head).\n"
 "\n"
 "    If you have just made a commit, that commit will be the tip. If\n"
 "    you have just pulled changes from another repository, the tip of\n"
@@ -6491,32 +6199,37 @@
 "    "
 msgstr ""
 
+#, fuzzy
 msgid ""
 "update working directory\n"
 "\n"
-"    Update the repository's working directory to the specified revision,\n"
-"    or the tip of the current branch if none is specified. Use null as\n"
-"    the revision to remove the working copy (like 'hg clone -U').\n"
-"\n"
-"    When the working dir contains no uncommitted changes, it will be\n"
-"    replaced by the state of the requested revision from the repo.  When\n"
-"    the requested revision is on a different branch, the working dir\n"
-"    will additionally be switched to that branch.\n"
-"\n"
-"    When there are uncommitted changes, use option -C to discard them,\n"
-"    forcibly replacing the state of the working dir with the requested\n"
-"    revision.\n"
-"\n"
-"    When there are uncommitted changes and option -C is not used, and\n"
-"    the parent revision and requested revision are on the same branch,\n"
-"    and one of them is an ancestor of the other, then the new working\n"
-"    directory will contain the requested revision merged with the\n"
-"    uncommitted changes.  Otherwise, the update will fail with a\n"
-"    suggestion to use 'merge' or 'update -C' instead.\n"
-"\n"
-"    If you want to update just one file to an older revision, use revert.\n"
-"\n"
-"    See 'hg help dates' for a list of formats valid for --date.\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"
+"    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"
+"\n"
+"    See 'hg help dates' for a list of formats valid for -d/--date.\n"
 "    "
 msgstr ""
 "更新工作目录\n"
@@ -6539,6 +6252,10 @@
 "    参见 'hg help dates' 以获得 '-d/--date' 的有效格式列表。\n"
 "    "
 
+#, fuzzy
+msgid "uncommitted local changes"
+msgstr "提交修改集 %d:%s\n"
+
 msgid ""
 "verify the integrity of the repository\n"
 "\n"
@@ -6599,9 +6316,6 @@
 msgid "set the charset encoding mode"
 msgstr "设置字符集编码模式"
 
-msgid "print improved command execution profile"
-msgstr "显示改良的命令执行剖析"
-
 msgid "print traceback on exception"
 msgstr "显示异常的跟踪"
 
@@ -6641,7 +6355,8 @@
 msgid "record datecode as commit date"
 msgstr "将提供的日期作为提交日期"
 
-msgid "record user as committer"
+#, fuzzy
+msgid "record the specified user as committer"
 msgstr "将提供的用户作为提交者"
 
 msgid "display using template map file"
@@ -6824,6 +6539,10 @@
 msgid "[INDEX] REV1 REV2"
 msgstr ""
 
+#, fuzzy
+msgid "[COMMAND]"
+msgstr "命令"
+
 msgid "show the command options"
 msgstr ""
 
@@ -6845,12 +6564,6 @@
 msgid "FILE"
 msgstr ""
 
-msgid "parent"
-msgstr ""
-
-msgid "file list"
-msgstr ""
-
 msgid "revision to rebuild to"
 msgstr ""
 
@@ -6872,6 +6585,10 @@
 msgid "[OPTION]..."
 msgstr ""
 
+#, fuzzy
+msgid "revision to check"
+msgstr "要合并的版本"
+
 msgid "[OPTION]... [-r REV1 [-r REV2]] [FILE]..."
 msgstr ""
 
@@ -6893,7 +6610,7 @@
 msgid "ignore case when matching"
 msgstr ""
 
-msgid "print only filenames and revs that match"
+msgid "print only filenames and revisions that match"
 msgstr ""
 
 msgid "print matching line numbers"
@@ -6905,20 +6622,25 @@
 msgid "[OPTION]... PATTERN [FILE]..."
 msgstr ""
 
-msgid "show only heads which are descendants of rev"
+msgid "show only heads which are descendants of REV"
 msgstr ""
 
 msgid "show only the active heads from open branches"
 msgstr ""
 
-msgid "[-r REV] [REV]..."
+#, fuzzy
+msgid "show normal and closed heads"
+msgstr "只显示已增加文件的状态"
+
+msgid "[-r STARTREV] [REV]..."
 msgstr ""
 
 msgid "[TOPIC]"
 msgstr ""
 
-msgid "identify the specified rev"
-msgstr ""
+#, fuzzy
+msgid "identify the specified revision"
+msgstr "追溯指定版本"
 
 msgid "show local revision number"
 msgstr ""
@@ -6936,8 +6658,8 @@
 msgstr ""
 
 msgid ""
-"directory strip option for patch. This has the same\n"
-"meaning as the corresponding patch option"
+"directory strip option for patch. This has the same meaning as the "
+"corresponding patch option"
 msgstr ""
 
 msgid "base path"
@@ -6952,7 +6674,7 @@
 msgid "apply patch to the nodes from which it was generated"
 msgstr ""
 
-msgid "Use any branch information in patch (implied by --exact)"
+msgid "use any branch information in patch (implied by --exact)"
 msgstr ""
 
 msgid "[OPTION]... PATCH..."
@@ -6973,7 +6695,7 @@
 msgid "[-e CMD] [--remotecmd CMD] [DEST]"
 msgstr ""
 
-msgid "search the repository as it stood at rev"
+msgid "search the repository as it stood at REV"
 msgstr ""
 
 msgid "end filenames with NUL, for use with xargs"
@@ -6988,7 +6710,8 @@
 msgid "only follow the first parent of merge changesets"
 msgstr "只跟踪修改集的第一个父亲"
 
-msgid "show revs matching date spec"
+#, fuzzy
+msgid "show revisions matching date spec"
 msgstr "显示匹配日期的版本"
 
 msgid "show copied files"
@@ -6997,13 +6720,15 @@
 msgid "do case-insensitive search for a keyword"
 msgstr "对关键字执行不区分大小写的搜索"
 
-msgid "include revs where files were removed"
+#, fuzzy
+msgid "include revisions where files were removed"
 msgstr "包含删除文件的版本"
 
 msgid "show only merges"
 msgstr "只显示合并"
 
-msgid "revs committed by user"
+#, fuzzy
+msgid "revisions committed by user"
 msgstr "指定用户提交的版本"
 
 msgid "show only changesets within the given named branch"
@@ -7027,6 +6752,9 @@
 msgid "revision to merge"
 msgstr "要合并的版本"
 
+msgid "review revisions to merge (no merge is performed)"
+msgstr ""
+
 msgid "[-f] [[-r] REV]"
 msgstr ""
 
@@ -7036,10 +6764,11 @@
 msgid "[-M] [-p] [-n] [-f] [-r REV]... [DEST]"
 msgstr ""
 
-msgid "show parents from the specified rev"
+#, fuzzy
+msgid "show parents from the specified revision"
 msgstr "从指定的版本显示父亲"
 
-msgid "hg parents [-r REV] [FILE]"
+msgid "[-r REV] [FILE]"
 msgstr ""
 
 msgid "[NAME]"
@@ -7111,10 +6840,12 @@
 msgid "prefix path to serve from (default: server root)"
 msgstr "服务路径前缀(默认: 服务器根)"
 
-msgid "name to show in web pages (default: working dir)"
+#, fuzzy
+msgid "name to show in web pages (default: working directory)"
 msgstr "在 WEB 页面中显示的名称(默认: 工作目录)"
 
-msgid "name of the webdir config file (serve more than one repo)"
+#, fuzzy
+msgid "name of the webdir config file (serve more than one repository)"
 msgstr "webdir 配置文件的名称(发布多个版本库)"
 
 msgid "for remote clients"
@@ -7198,9 +6929,17 @@
 msgid "overwrite locally modified files (no backup)"
 msgstr "覆盖本地修改的文件(不备份)"
 
+#, fuzzy
+msgid "check for uncommitted changes"
+msgstr "提交修改集 %d:%s\n"
+
 msgid "[-C] [-d DATE] [[-r] REV]"
 msgstr ""
 
+#, python-format
+msgid "config error at %s:%d: '%s'"
+msgstr ""
+
 msgid "not found in manifest"
 msgstr ""
 
@@ -7226,10 +6965,6 @@
 msgid "  all copies found (* = to merge, ! = divergent):\n"
 msgstr ""
 
-#, python-format
-msgid "   %s -> %s %s\n"
-msgstr ""
-
 msgid "  checking for directory renames\n"
 msgstr ""
 
@@ -7241,6 +6976,9 @@
 msgid "  file %s -> %s\n"
 msgstr ""
 
+msgid "working directory state appears damaged!"
+msgstr ""
+
 #, python-format
 msgid "'\\n' and '\\r' disallowed in filenames: %r"
 msgstr ""
@@ -7257,6 +6995,9 @@
 msgid "not in dirstate: %s\n"
 msgstr ""
 
+msgid "unknown"
+msgstr ""
+
 msgid "character device"
 msgstr ""
 
@@ -7273,7 +7014,7 @@
 msgstr ""
 
 #, python-format
-msgid "%s: unsupported file type (type is %s)\n"
+msgid "unsupported file type (type is %s)"
 msgstr ""
 
 #, python-format
@@ -7287,6 +7028,10 @@
 msgstr ""
 
 #, python-format
+msgid "hg: %s\n"
+msgstr ""
+
+#, python-format
 msgid "timed out waiting for lock held by %s"
 msgstr ""
 
@@ -7307,10 +7052,6 @@
 msgstr ""
 
 #, python-format
-msgid "hg: %s\n"
-msgstr ""
-
-#, python-format
 msgid "abort: %s!\n"
 msgstr "中止: %s!\n"
 
@@ -7376,6 +7117,24 @@
 msgstr "** 已加载的扩展: %s\n"
 
 #, python-format
+msgid "no definition for alias '%s'\n"
+msgstr ""
+
+#, fuzzy, python-format
+msgid "alias '%s' resolves to unknown command '%s'\n"
+msgstr "hg: 未知命令 '%s'\n"
+
+#, python-format
+msgid "alias '%s' resolves to ambiguous command '%s'\n"
+msgstr ""
+
+#, fuzzy, python-format
+msgid "alias '%s' shadows command\n"
+msgstr ""
+"命令列表:\n"
+"\n"
+
+#, python-format
 msgid "malformed --config option: %s"
 msgstr "非法 '--config' 选项: %s"
 
@@ -7389,8 +7148,9 @@
 msgid "Option --cwd may not be abbreviated!"
 msgstr "选项 '--cwd' 不能简短!"
 
-msgid ""
-"Option -R has to be separated from other options (i.e. not -qR) and --"
+#, fuzzy
+msgid ""
+"Option -R has to be separated from other options (e.g. not -qR) and --"
 "repository may only be abbreviated as --repo!"
 msgstr ""
 "选项 -R 必须隔离使用(也就是不能 -qR),并且 --repository 只能简短为 --repo!"
@@ -7406,7 +7166,8 @@
 msgid "invalid arguments"
 msgstr "非法参数"
 
-msgid "exception raised - generating profile anyway\n"
+#, python-format
+msgid "unrecognized profiling format '%s' - Ignored\n"
 msgstr ""
 
 msgid ""
@@ -7451,7 +7212,10 @@
 " 没有找到工具合并 %s\n"
 "使用本地(l)或者他人(o)的内容?"
 
-msgid "[lo]"
+msgid "&Local"
+msgstr ""
+
+msgid "&Other"
 msgstr ""
 
 msgid "l"
@@ -7478,7 +7242,10 @@
 "was merge successful (yn)?"
 msgstr ""
 
-msgid "[yn]"
+msgid "&No"
+msgstr ""
+
+msgid "&Yes"
 msgstr ""
 
 msgid "n"
@@ -7496,6 +7263,51 @@
 msgid "unknown bisect kind %s"
 msgstr ""
 
+msgid ""
+"\n"
+"    Mercurial has the ability to add new features through the use of\n"
+"    extensions. Extensions may add new commands, add options to\n"
+"    existing commands, change the default behavior of commands, or\n"
+"    implement hooks.\n"
+"\n"
+"    Extensions are not loaded by default for a variety of reasons:\n"
+"    they can increase startup overhead; they may be meant for\n"
+"    advanced usage only; they may provide potentially dangerous\n"
+"    abilities (such as letting you destroy or modify history); they\n"
+"    might not be ready for prime time; or they may alter some\n"
+"    usual behaviors of stock Mercurial. It is thus up to the user to\n"
+"    activate extensions as needed.\n"
+"\n"
+"    To enable the \"foo\" extension, either shipped with Mercurial\n"
+"    or in the Python search path, create an entry for it in your\n"
+"    hgrc, like this:\n"
+"\n"
+"      [extensions]\n"
+"      foo =\n"
+"\n"
+"    You may also specify the full path to an extension:\n"
+"\n"
+"      [extensions]\n"
+"      myfeature = ~/.hgext/myfeature.py\n"
+"\n"
+"    To explicitly disable an extension enabled in an hgrc of broader\n"
+"    scope, prepend its path with !:\n"
+"\n"
+"      [extensions]\n"
+"      # disabling extension bar residing in /path/to/extension/bar.py\n"
+"      hgext.bar = !/path/to/extension/bar.py\n"
+"      # ditto, but no path was supplied for extension baz\n"
+"      hgext.baz = !\n"
+"    "
+msgstr ""
+
+#, fuzzy
+msgid "disabled extensions:"
+msgstr ""
+"\n"
+"启用的扩展:\n"
+"\n"
+
 msgid "Date Formats"
 msgstr ""
 
@@ -7526,9 +7338,9 @@
 "    \"1165432709 0\" (Wed Dec 6 13:18:29 2006 UTC)\n"
 "\n"
 "    This is the internal representation format for dates. unixtime is\n"
-"    the number of seconds since the epoch (1970-01-01 00:00 UTC). offset\n"
-"    is the offset of the local timezone, in seconds west of UTC (negative\n"
-"    if the timezone is east of UTC).\n"
+"    the number of seconds since the epoch (1970-01-01 00:00 UTC).\n"
+"    offset is the offset of the local timezone, in seconds west of UTC\n"
+"    (negative if the timezone is east of UTC).\n"
 "\n"
 "    The log command also accepts date ranges:\n"
 "\n"
@@ -7595,10 +7407,10 @@
 msgid ""
 "\n"
 "HG::\n"
-"    Path to the 'hg' executable, automatically passed when running hooks,\n"
-"    extensions or external tools. If unset or empty, this is the hg\n"
-"    executable's name if it's frozen, or an executable named 'hg'\n"
-"    (with %PATHEXT% [defaulting to COM/EXE/BAT/CMD] extensions on\n"
+"    Path to the 'hg' executable, automatically passed when running\n"
+"    hooks, extensions or external tools. If unset or empty, this is\n"
+"    the hg executable's name if it's frozen, or an executable named\n"
+"    'hg' (with %PATHEXT% [defaulting to COM/EXE/BAT/CMD] extensions on\n"
 "    Windows) is searched.\n"
 "\n"
 "HGEDITOR::\n"
@@ -7634,8 +7446,8 @@
 "    from the current repository is read.\n"
 "\n"
 "    For each element in HGRCPATH:\n"
-"    * if it's a directory, all directories ending with .rc are added\n"
-"    * otherwise, the directory itself will be added\n"
+"    * if it's a directory, all files ending with .rc are added\n"
+"    * otherwise, the file itself will be added\n"
 "\n"
 "HGUSER::\n"
 "    This is the string used as the author of a commit. If not set,\n"
@@ -7659,16 +7471,16 @@
 "    This is the name of the editor to use when committing. See EDITOR.\n"
 "\n"
 "EDITOR::\n"
-"    Sometimes Mercurial needs to open a text file in an editor\n"
-"    for a user to modify, for example when writing commit messages.\n"
-"    The editor it uses is determined by looking at the environment\n"
+"    Sometimes Mercurial needs to open a text file in an editor for a\n"
+"    user to modify, for example when writing commit messages. The\n"
+"    editor it uses is determined by looking at the environment\n"
 "    variables HGEDITOR, VISUAL and EDITOR, in that order. The first\n"
 "    non-empty one is chosen. If all of them are empty, the editor\n"
 "    defaults to 'vi'.\n"
 "\n"
 "PYTHONPATH::\n"
-"    This is used by Python to find imported modules and may need to be set\n"
-"    appropriately if this Mercurial is not installed system-wide.\n"
+"    This is used by Python to find imported modules and may need to be\n"
+"    set appropriately if this Mercurial is not installed system-wide.\n"
 "    "
 msgstr ""
 
@@ -7677,14 +7489,13 @@
 
 msgid ""
 "\n"
-"    Mercurial supports several ways to specify individual\n"
-"    revisions.\n"
-"\n"
-"    A plain integer is treated as a revision number. Negative\n"
-"    integers are treated as toplogical offsets from the tip, with\n"
-"    -1 denoting the tip. As such, negative numbers are only useful\n"
-"    if you've memorized your local tree numbers and want to save\n"
-"    typing a single digit. This editor suggests copy and paste.\n"
+"    Mercurial supports several ways to specify individual revisions.\n"
+"\n"
+"    A plain integer is treated as a revision number. Negative integers\n"
+"    are treated as topological offsets from the tip, with -1 denoting\n"
+"    the tip. As such, negative numbers are only useful if you've\n"
+"    memorized your local tree numbers and want to save typing a single\n"
+"    digit. This editor suggests copy and paste.\n"
 "\n"
 "    A 40-digit hexadecimal string is treated as a unique revision\n"
 "    identifier.\n"
@@ -7705,15 +7516,16 @@
 "    revision of an empty repository, and the parent of revision 0.\n"
 "\n"
 "    The reserved name \".\" indicates the working directory parent. If\n"
-"    no working directory is checked out, it is equivalent to null.\n"
-"    If an uncommitted merge is in progress, \".\" is the revision of\n"
-"    the first parent.\n"
+"    no working directory is checked out, it is equivalent to null. If\n"
+"    an uncommitted merge is in progress, \".\" is the revision of the\n"
+"    first parent.\n"
 "    "
 msgstr ""
 
 msgid "Specifying Multiple Revisions"
 msgstr "指定多个版本"
 
+#, fuzzy
 msgid ""
 "\n"
 "    When Mercurial accepts more than one revision, they may be\n"
@@ -7723,8 +7535,8 @@
 "    The syntax of range notation is [BEGIN]:[END], where BEGIN and END\n"
 "    are revision identifiers. Both BEGIN and END are optional. If\n"
 "    BEGIN is not specified, it defaults to revision number 0. If END\n"
-"    is not specified, it defaults to the tip. The range \":\" thus\n"
-"    means \"all revisions\".\n"
+"    is not specified, it defaults to the tip. The range \":\" thus means\n"
+"    \"all revisions\".\n"
 "\n"
 "    If BEGIN is greater than END, revisions are treated in reverse\n"
 "    order.\n"
@@ -7751,11 +7563,13 @@
 msgid "Diff Formats"
 msgstr "差异格式"
 
-msgid ""
-"\n"
-"    Mercurial's default format for showing changes between two versions\n"
-"    of a file is compatible with the unified format of GNU diff, which\n"
-"    can be used by GNU patch and many other standard tools.\n"
+#, fuzzy
+msgid ""
+"\n"
+"    Mercurial's default format for showing changes between two\n"
+"    versions of a file is compatible with the unified format of GNU\n"
+"    diff, which can be used by GNU patch and many other standard\n"
+"    tools.\n"
 "\n"
 "    While this standard format is often enough, it does not encode the\n"
 "    following information:\n"
@@ -7773,15 +7587,16 @@
 "    This means that when generating diffs from a Mercurial repository\n"
 "    (e.g. with \"hg export\"), you should be careful about things like\n"
 "    file copies and renames or other things mentioned above, because\n"
-"    when applying a standard diff to a different repository, this extra\n"
-"    information is lost. Mercurial's internal operations (like push and\n"
-"    pull) are not affected by this, because they use an internal binary\n"
-"    format for communicating changes.\n"
+"    when applying a standard diff to a different repository, this\n"
+"    extra information is lost. Mercurial's internal operations (like\n"
+"    push and pull) are not affected by this, because they use an\n"
+"    internal binary format for communicating changes.\n"
 "\n"
 "    To make Mercurial produce the git extended diff format, use the\n"
-"    --git option available for many commands, or set 'git = True' in the\n"
-"    [diff] section of your hgrc. You do not need to set this option when\n"
-"    importing diffs in this format or using them in the mq extension.\n"
+"    --git option available for many commands, or set 'git = True' in\n"
+"    the [diff] section of your hgrc. You do not need to set this\n"
+"    option when importing diffs in this format or using them in the mq\n"
+"    extension.\n"
 "    "
 msgstr ""
 "\n"
@@ -7811,50 +7626,56 @@
 msgid "Template Usage"
 msgstr "模版用法"
 
+#, fuzzy
 msgid ""
 "\n"
 "    Mercurial allows you to customize output of commands through\n"
-"    templates. You can either pass in a template from the command line,\n"
-"    via the --template option, or select an existing template-style (--"
-"style).\n"
-"\n"
-"    You can customize output for any \"log-like\" command: log, outgoing,\n"
-"    incoming, tip, parents, heads and glog.\n"
+"    templates. You can either pass in a template from the command\n"
+"    line, via the --template option, or select an existing\n"
+"    template-style (--style).\n"
+"\n"
+"    You can customize output for any \"log-like\" command: log,\n"
+"    outgoing, incoming, tip, parents, heads and glog.\n"
 "\n"
 "    Three styles are packaged with Mercurial: default (the style used\n"
-"    when no explicit preference is passed), compact and changelog. Usage:\n"
+"    when no explicit preference is passed), compact and changelog.\n"
+"    Usage:\n"
 "\n"
 "        $ hg log -r1 --style changelog\n"
 "\n"
-"    A template is a piece of text, with markup to invoke variable expansion:\n"
+"    A template is a piece of text, with markup to invoke variable\n"
+"    expansion:\n"
 "\n"
 "        $ hg log -r1 --template \"{node}\\n\"\n"
 "        b56ce7b07c52de7d5fd79fb89701ea538af65746\n"
 "\n"
 "    Strings in curly braces are called keywords. The availability of\n"
-"    keywords depends on the exact context of the templater. These keywords\n"
-"    are usually available for templating a log-like command:\n"
+"    keywords depends on the exact context of the templater. These\n"
+"    keywords are usually available for templating a log-like command:\n"
 "\n"
 "    - author: String. The unmodified author of the changeset.\n"
 "    - branches: String. The name of the branch on which the changeset\n"
 "          was committed. Will be empty if the branch name was default.\n"
 "    - date: Date information. The date when the changeset was committed.\n"
 "    - desc: String. The text of the changeset description.\n"
+"    - diffstat: String. Statistics of changes with the following\n"
+"          format: \"modified files: +added/-removed lines\"\n"
 "    - files: List of strings. All files modified, added, or removed by\n"
 "          this changeset.\n"
 "    - file_adds: List of strings. Files added by this changeset.\n"
 "    - file_mods: List of strings. Files modified by this changeset.\n"
 "    - file_dels: List of strings. Files removed by this changeset.\n"
-"    - node: String. The changeset identification hash, as a 40-character\n"
-"          hexadecimal string.\n"
+"    - node: String. The changeset identification hash, as a\n"
+"          40-character hexadecimal string.\n"
 "    - parents: List of strings. The parents of the changeset.\n"
 "    - rev: Integer. The repository-local changeset revision number.\n"
 "    - tags: List of strings. Any tags associated with the changeset.\n"
 "\n"
 "    The \"date\" keyword does not produce human-readable output. If you\n"
-"    want to use a date in your output, you can use a filter to process it.\n"
-"    Filters are functions which return a string based on the input variable.\n"
-"    You can also use a chain of filters to get the desired output:\n"
+"    want to use a date in your output, you can use a filter to process\n"
+"    it. Filters are functions which return a string based on the input\n"
+"    variable. You can also use a chain of filters to get the desired\n"
+"    output:\n"
 "\n"
 "       $ hg tip --template \"{date|isodate}\\n\"\n"
 "       2008-08-21 18:22 +0000\n"
@@ -7867,37 +7688,41 @@
 "          the given date/time and the current date/time.\n"
 "    - basename: Any text. Treats the text as a path, and returns the\n"
 "          last component of the path after splitting by the path\n"
-"          separator (ignoring trailing seprators). For example,\n"
+"          separator (ignoring trailing separators). For example,\n"
 "          \"foo/bar/baz\" becomes \"baz\" and \"foo/bar//\" becomes \"bar\".\n"
+"    - stripdir: Treat the text as path and strip a directory level, if\n"
+"          possible. For example, \"foo\" and \"foo/bar\" becomes \"foo\".\n"
 "    - date: Date. Returns a date in a Unix date format, including\n"
 "          the timezone: \"Mon Sep 04 15:13:13 2006 0700\".\n"
-"    - domain: Any text. Finds the first string that looks like an email\n"
-"          address, and extracts just the domain component.\n"
+"    - domain: Any text. Finds the first string that looks like an\n"
+"          email address, and extracts just the domain component.\n"
 "          Example: 'User <user@example.com>' becomes 'example.com'.\n"
-"    - email: Any text. Extracts the first string that looks like an email\n"
-"          address. Example: 'User <user@example.com>' becomes\n"
+"    - email: Any text. Extracts the first string that looks like an\n"
+"          email address. Example: 'User <user@example.com>' becomes\n"
 "          '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"
 "    - fill76: Any text. Wraps the text to fit in 76 columns.\n"
 "    - firstline: Any text. Returns the first line of text.\n"
+"    - nonempty: Any text. Returns '(none)' if the string is empty.\n"
 "    - hgdate: Date. Returns the date as a pair of numbers:\n"
 "          \"1157407993 25200\" (Unix timestamp, timezone offset).\n"
 "    - isodate: Date. Returns the date in ISO 8601 format.\n"
-"    - obfuscate: Any text. Returns the input text rendered as a sequence\n"
-"          of XML entities.\n"
+"    - localdate: Date. Converts a date to local date.\n"
+"    - obfuscate: Any text. Returns the input text rendered as a\n"
+"          sequence of XML entities.\n"
 "    - person: Any text. Returns the text before an email address.\n"
 "    - rfc822date: Date. Returns a date using the same format used\n"
 "          in email headers.\n"
-"    - short: Changeset hash. Returns the short form of a changeset hash,\n"
-"          i.e. a 12-byte hexadecimal string.\n"
+"    - short: Changeset hash. Returns the short form of a changeset\n"
+"          hash, i.e. a 12-byte hexadecimal string.\n"
 "    - shortdate: Date. Returns a date like \"2006-09-18\".\n"
 "    - strip: Any text. Strips all leading and trailing whitespace.\n"
-"    - tabindent: Any text. Returns the text, with every line except the\n"
-"          first starting with a tab character.\n"
-"    - urlescape: Any text. Escapes all \"special\" characters. For example,\n"
-"          \"foo bar\" becomes \"foo%20bar\".\n"
+"    - tabindent: Any text. Returns the text, with every line except\n"
+"          the first starting with a tab character.\n"
+"    - urlescape: Any text. Escapes all \"special\" characters. For\n"
+"          example, \"foo bar\" becomes \"foo%20bar\".\n"
 "    - user: Any text. Returns the user portion of an email address.\n"
 "    "
 msgstr ""
@@ -7976,9 +7801,11 @@
 "    - user: 输入任意文本。返回 email 地址中的用户名称部分。\n"
 "    "
 
-msgid "Url Paths"
+#, fuzzy
+msgid "URL Paths"
 msgstr "统一资源定位路径"
 
+#, fuzzy
 msgid ""
 "\n"
 "    Valid URLs are of the form:\n"
@@ -7996,42 +7823,44 @@
 "    or changeset to use from the remote repository.\n"
 "\n"
 "    Some features, such as pushing to http:// and https:// URLs are\n"
-"    only possible if the feature is explicitly enabled on the\n"
-"    remote Mercurial server.\n"
+"    only possible if the feature is explicitly enabled on the remote\n"
+"    Mercurial server.\n"
 "\n"
 "    Some notes about using SSH with Mercurial:\n"
-"    - SSH requires an accessible shell account on the destination machine\n"
-"      and a copy of hg in the remote path or specified with as remotecmd.\n"
+"    - SSH requires an accessible shell account on the destination\n"
+"      machine and a copy of hg in the remote path or specified with as\n"
+"      remotecmd.\n"
 "    - path is relative to the remote user's home directory by default.\n"
 "      Use an extra slash at the start of a path to specify an absolute path:\n"
 "        ssh://example.com//tmp/repository\n"
-"    - Mercurial doesn't use its own compression via SSH; the right thing\n"
-"      to do is to configure it in your ~/.ssh/config, e.g.:\n"
+"    - Mercurial doesn't use its own compression via SSH; the right\n"
+"      thing to do is to configure it in your ~/.ssh/config, e.g.:\n"
 "        Host *.mylocalnetwork.example.com\n"
 "          Compression no\n"
 "        Host *\n"
 "          Compression yes\n"
-"      Alternatively specify \"ssh -C\" as your ssh command in your hgrc or\n"
-"      with the --ssh command line option.\n"
-"\n"
-"    These urls can all be stored in your hgrc with path aliases under the\n"
-"    [paths] section like so:\n"
+"      Alternatively specify \"ssh -C\" as your ssh command in your hgrc\n"
+"      or with the --ssh command line option.\n"
+"\n"
+"    These URLs can all be stored in your hgrc with path aliases under\n"
+"    the [paths] section like so:\n"
 "    [paths]\n"
 "    alias1 = URL1\n"
 "    alias2 = URL2\n"
 "    ...\n"
 "\n"
-"    You can then use the alias for any command that uses a url (for example\n"
-"    'hg pull alias1' would pull from the 'alias1' path).\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"
 "\n"
 "    Two path aliases are special because they are used as defaults\n"
-"    when you do not provide the url to a command:\n"
+"    when you do not provide the URL to a command:\n"
 "\n"
 "    default:\n"
-"      When you create a repository with hg clone, the clone command saves\n"
-"      the location of the source repository as the new repository's\n"
-"      'default' path. This is then used when you omit path from push-\n"
-"      and pull-like commands (including in and out).\n"
+"      When you create a repository with hg clone, the clone command\n"
+"      saves the location of the source repository as the new\n"
+"      repository's 'default' path. This is then used when you omit\n"
+"      path from push- and pull-like commands (including incoming and\n"
+"      outgoing).\n"
 "\n"
 "    default-push:\n"
 "      The push command will look for a path named 'default-push', and\n"
@@ -8089,6 +7918,21 @@
 "      命令 'push' 会查找别名是 'default-push' 的路径,它覆盖定义 'default'。\n"
 "    "
 
+#, fuzzy
+msgid "Using additional features"
+msgstr "启用额外的输出"
+
+#, fuzzy
+msgid "can only share local repositories"
+msgstr "为此版本库启动服务 'inotify'"
+
+#, fuzzy
+msgid "destination already exists"
+msgstr "版本库 %s 已存在"
+
+msgid "updating working directory\n"
+msgstr "正在更新工作目录\n"
+
 #, python-format
 msgid "destination directory: %s\n"
 msgstr "目标目录: %s\n"
@@ -8097,6 +7941,10 @@
 msgid "destination '%s' already exists"
 msgstr ""
 
+#, fuzzy, python-format
+msgid "destination '%s' is not empty"
+msgstr "非本地版本库 '%s'"
+
 msgid ""
 "src repository does not support revision lookup and so doesn't support clone "
 "by revision"
@@ -8105,9 +7953,6 @@
 msgid "clone from remote to remote not supported"
 msgstr ""
 
-msgid "updating working directory\n"
-msgstr "正在更新工作目录\n"
-
 msgid "updated"
 msgstr "已更新"
 
@@ -8142,7 +7987,7 @@
 msgid "SSL support is unavailable"
 msgstr ""
 
-msgid "IPv6 not available on this system"
+msgid "IPv6 is not available on this system"
 msgstr ""
 
 #, python-format
@@ -8237,8 +8082,8 @@
 msgid "real URL is %s\n"
 msgstr "实际 URL 是 '%s'\n"
 
-#, python-format
-msgid "Requested URL: '%s'\n"
+#, fuzzy, python-format
+msgid "requested URL: '%s'\n"
 msgstr "请求的 URL: '%s'\n"
 
 #, python-format
@@ -8296,6 +8141,10 @@
 msgstr ""
 
 #, python-format
+msgid ".hg/sharedpath points to nonexistent directory %s"
+msgstr ""
+
+#, python-format
 msgid "%r cannot be used in a tag name"
 msgstr ""
 
@@ -8314,7 +8163,7 @@
 msgstr ""
 
 #, python-format
-msgid "tag '%s' refers to unknown node"
+msgid "working directory has unknown parent '%s'!"
 msgstr ""
 
 #, python-format
@@ -8367,26 +8216,32 @@
 msgid "cannot partially commit a merge (do not specify files or patterns)"
 msgstr ""
 
-#, python-format
-msgid "%s not tracked!\n"
+#, fuzzy
+msgid "file not found!"
+msgstr "没有找到样式: %s"
+
+#, fuzzy
+msgid "no match under directory!"
+msgstr "改变工作目录"
+
+#, fuzzy
+msgid "file not tracked!"
 msgstr "%s 没有被跟踪!\n"
 
+msgid "nothing changed\n"
+msgstr "没有改变\n"
+
 msgid "unresolved merge conflicts (see hg resolve)"
 msgstr "未解决的合并冲突(参见 'hg resolve')"
 
-msgid "nothing changed\n"
-msgstr "没有改变\n"
+#, fuzzy, python-format
+msgid "committing subrepository %s\n"
+msgstr "初始化目标版本库 %s\n"
 
 #, python-format
 msgid "trouble committing %s!\n"
 msgstr "提交 '%s' 出错!\n"
 
-msgid "HG: Enter commit message.  Lines beginning with 'HG:' are removed."
-msgstr "HG: 请输入提交日志。以 'HG:' 开始的行会被删除。"
-
-msgid "empty commit message"
-msgstr "空的提交日志"
-
 #, python-format
 msgid "%s does not exist!\n"
 msgstr "%s 不存在!\n"
@@ -8414,6 +8269,10 @@
 msgstr ""
 
 #, python-format
+msgid "%s not tracked!\n"
+msgstr "%s 没有被跟踪!\n"
+
+#, python-format
 msgid "%s not removed!\n"
 msgstr ""
 
@@ -8486,6 +8345,10 @@
 "changegroupsubset."
 msgstr ""
 
+#, python-format
+msgid "abort: push creates new remote branch '%s'!\n"
+msgstr ""
+
 msgid "abort: push creates new remote heads!\n"
 msgstr ""
 
@@ -8607,9 +8470,6 @@
 msgid "invalid local address: %s"
 msgstr ""
 
-msgid "'\\n' and '\\r' disallowed in filenames"
-msgstr ""
-
 #, python-format
 msgid "failed to remove %s from manifest"
 msgstr ""
@@ -8628,6 +8488,22 @@
 msgid "case-folding collision between %s and %s"
 msgstr ""
 
+#, python-format
+msgid ""
+" conflicting flags for %s\n"
+"(n)one, e(x)ec or sym(l)ink?"
+msgstr ""
+
+#, fuzzy
+msgid "&None"
+msgstr "完成\n"
+
+msgid "E&xec"
+msgstr ""
+
+msgid "Sym&link"
+msgstr ""
+
 msgid "resolving manifests\n"
 msgstr "正在解析清单\n"
 
@@ -8641,17 +8517,14 @@
 
 #, python-format
 msgid ""
-" conflicting flags for %s\n"
-"(n)one, e(x)ec or sym(l)ink?"
-msgstr ""
-
-#, python-format
-msgid ""
 " local changed %s which remote deleted\n"
 "use (c)hanged version or (d)elete?"
 msgstr ""
 
-msgid "[cd]"
+msgid "&Changed"
+msgstr ""
+
+msgid "&Delete"
 msgstr ""
 
 msgid "c"
@@ -8663,6 +8536,9 @@
 "use (c)hanged version or leave (d)eleted?"
 msgstr ""
 
+msgid "&Deleted"
+msgstr ""
+
 #, python-format
 msgid "preserving %s for resolve of %s\n"
 msgstr ""
@@ -8676,10 +8552,6 @@
 msgstr "正在检出 %s\n"
 
 #, python-format
-msgid "moving %s to %s\n"
-msgstr ""
-
-#, python-format
 msgid "getting %s to %s\n"
 msgstr ""
 
@@ -8697,6 +8569,9 @@
 msgid "nothing to merge (use 'hg update' or check 'hg heads')"
 msgstr ""
 
+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 ""
 
@@ -8742,7 +8617,11 @@
 msgstr ""
 
 #, python-format
-msgid "Hunk #%d succeeded at %d %s(offset %d %s).\n"
+msgid "Hunk #%d succeeded at %d %s(offset %d line).\n"
+msgstr ""
+
+#, python-format
+msgid "Hunk #%d succeeded at %d %s(offset %d lines).\n"
 msgstr ""
 
 #, python-format
@@ -8784,10 +8663,29 @@
 msgstr ""
 
 #, python-format
+msgid "Unsupported line endings type: %s"
+msgstr ""
+
+#, python-format
 msgid "no valid hunks found; trying with %r instead\n"
 msgstr ""
 
 #, python-format
+msgid "exited with status %d"
+msgstr ""
+
+#, python-format
+msgid "killed by signal %d"
+msgstr ""
+
+#, python-format
+msgid "stopped by signal %d"
+msgstr ""
+
+msgid "invalid exit code"
+msgstr ""
+
+#, python-format
 msgid "saving bundle to %s\n"
 msgstr ""
 
@@ -8814,6 +8712,10 @@
 msgid "index %s unknown format %d"
 msgstr ""
 
+#, python-format
+msgid "index %s is corrupted"
+msgstr ""
+
 msgid "no node"
 msgstr ""
 
@@ -8888,75 +8790,91 @@
 msgid "sending %s (%d bytes)\n"
 msgstr "正在发送 %s (%d 字节)\n"
 
+#, python-format
+msgid ""
+" subrepository sources for %s differ\n"
+"use (l)ocal source (%s) or (r)emote source (%s)?"
+msgstr ""
+
+msgid "&Remote"
+msgstr ""
+
+msgid "r"
+msgstr ""
+
+#, python-format
+msgid ""
+" local changed subrepository %s which remote removed\n"
+"use (c)hanged version or (d)elete?"
+msgstr ""
+
+#, python-format
+msgid ""
+" remote changed subrepository %s which local removed\n"
+"use (c)hanged version or (d)elete?"
+msgstr ""
+
+#, fuzzy, python-format
+msgid "removing subrepo %s\n"
+msgstr "正在删除 %s\n"
+
+#, fuzzy, python-format
+msgid "pulling subrepo %s\n"
+msgstr "正在拉自 %s\n"
+
+#, fuzzy, python-format
+msgid "pushing subrepo %s\n"
+msgstr "正在推到 %s\n"
+
 msgid "unmatched quotes"
 msgstr "不匹配的引号"
 
 #, python-format
+msgid "error expanding '%s%%%s'"
+msgstr ""
+
+#, python-format
+msgid "unknown filter '%s'"
+msgstr ""
+
+#, python-format
 msgid "style not found: %s"
 msgstr "没有找到样式: %s"
 
 #, python-format
-msgid "%s:%s: parse error"
-msgstr "%s:%s: 解析出错"
-
-#, python-format
 msgid "template file %s: %s"
 msgstr "模版文件 %s: %s"
 
-#, python-format
-msgid "Error expanding '%s%%%s'"
-msgstr ""
-
-msgid "transaction abort!\n"
-msgstr "事务中止!\n"
+msgid "cannot use transaction when it is already committed/aborted"
+msgstr ""
 
 #, python-format
 msgid "failed to truncate %s\n"
 msgstr "截断 '%s' 失败\n"
 
+msgid "transaction abort!\n"
+msgstr "事务中止!\n"
+
 msgid "rollback completed\n"
 msgstr "完成回滚\n"
 
+msgid "rollback failed - please run hg recover\n"
+msgstr ""
+
 #, python-format
 msgid "Not trusting file %s from untrusted user %s, group %s\n"
 msgstr ""
 
 #, python-format
-msgid ""
-"Failed to parse %s\n"
-"%s"
-msgstr ""
-"解析 '%s' 失败\n"
-"%s"
-
-#, python-format
 msgid "Ignored: %s\n"
 msgstr ""
 
-#, python-format
-msgid "unable to open %s: %s"
-msgstr ""
-
-#, python-format
-msgid ""
-"failed to parse %s\n"
-"%s"
-msgstr ""
-
-#, python-format
-msgid ""
-"Error in configuration section [%s] parameter '%s':\n"
-"%s"
-msgstr ""
-
-#, python-format
-msgid "Ignoring untrusted configuration option %s.%s = %s\n"
-msgstr ""
-
-#, python-format
-msgid ""
-"Error in configuration section [%s]:\n"
-"%s"
+#, fuzzy, python-format
+msgid "ignoring untrusted configuration option %s.%s = %s\n"
+msgstr "显示不能信赖的配置选项"
+
+#, python-format
+msgid "%s.%s not a boolean ('%s')"
 msgstr ""
 
 msgid "enter a commit username:"
@@ -9003,18 +8921,14 @@
 msgstr "用户:"
 
 #, python-format
+msgid "http auth: user %s, password %s\n"
+msgstr ""
+
+#, python-format
 msgid "proxying through http://%s:%s\n"
 msgstr ""
 
 #, python-format
-msgid "http auth: user %s, password %s\n"
-msgstr ""
-
-#, python-format
-msgid "%s, please check your locale settings"
-msgstr ""
-
-#, python-format
 msgid "command '%s' failed: %s"
 msgstr ""
 
@@ -9033,24 +8947,6 @@
 msgid "Hardlinks not supported"
 msgstr ""
 
-msgid "user name not available - set USERNAME environment variable"
-msgstr ""
-
-#, python-format
-msgid "exited with status %d"
-msgstr ""
-
-#, python-format
-msgid "killed by signal %d"
-msgstr ""
-
-#, python-format
-msgid "stopped by signal %d"
-msgstr ""
-
-msgid "invalid exit code"
-msgstr ""
-
 #, python-format
 msgid "could not symlink to %r: %s"
 msgstr ""
@@ -9138,7 +9034,11 @@
 msgstr ""
 
 #, python-format
-msgid "rev %d point to %s changeset %d"
+msgid "rev %d points to nonexistent changeset %d"
+msgstr ""
+
+#, python-format
+msgid "rev %d points to unexpected changeset %d"
 msgstr ""
 
 #, python-format
@@ -9175,6 +9075,10 @@
 msgid "checking manifests\n"
 msgstr ""
 
+#, fuzzy, python-format
+msgid "%s not in changesets"
+msgstr "列出修改集"
+
 msgid "file without name in manifest"
 msgstr ""
 
@@ -9256,3 +9160,6 @@
 #, python-format
 msgid "(first damaged changeset appears to be %d)\n"
 msgstr ""
+
+msgid "user name not available - set USERNAME environment variable"
+msgstr ""
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/i18n/zh_TW.po	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,9255 @@
+# Traditional Chinese translation for Mercurial
+# Copyright (C) 2009 Matt Mackall <mpm@selenic.com> and others
+# This file is distributed under the same license as the Mercurial package.
+# Chia-Huan Wu <willie.tw@gmail.com>, 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Mercurial\n"
+"Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n"
+"POT-Creation-Date: 2009-06-10 22:09+0800\n"
+"PO-Revision-Date: 2009-06-18 21:12+0200\n"
+"Last-Translator: Chia-Huan Wu <willie.tw@gmail.com>\n"
+"Language-Team: Traditional Chinese\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#, python-format
+msgid " (default: %s)"
+msgstr " (預設: %s)"
+
+msgid "OPTIONS"
+msgstr "選項"
+
+msgid "COMMANDS"
+msgstr "命令"
+
+msgid "    options:\n"
+msgstr "    選項: \n"
+
+#, python-format
+msgid ""
+"    aliases: %s\n"
+"\n"
+msgstr ""
+"    別名: %s\n"
+"\n"
+
+#, python-format
+msgid "acl: %s not enabled\n"
+msgstr "acl: %s 尚未啟用\n"
+
+#, python-format
+msgid "acl: %s enabled, %d entries for user %s\n"
+msgstr ""
+
+#, python-format
+msgid "config error - hook type \"%s\" cannot stop incoming changesets"
+msgstr ""
+
+#, python-format
+msgid "acl: changes have source \"%s\" - skipping\n"
+msgstr ""
+
+#, python-format
+msgid "acl: user %s denied on %s\n"
+msgstr ""
+
+#, python-format
+msgid "acl: access denied for changeset %s"
+msgstr ""
+
+#, python-format
+msgid "acl: user %s not allowed on %s\n"
+msgstr ""
+
+#, python-format
+msgid "acl: allowing changeset %s\n"
+msgstr ""
+
+msgid ""
+"Mercurial bookmarks\n"
+"\n"
+"Mercurial bookmarks are local moveable pointers to changesets. Every\n"
+"bookmark points to a changeset identified by its hash. If you commit a\n"
+"changeset that is based on a changeset that has a bookmark on it, the\n"
+"bookmark is forwarded to the new changeset.\n"
+"\n"
+"It is possible to use bookmark names in every revision lookup (e.g. hg\n"
+"merge, hg update).\n"
+"\n"
+"The bookmark extension offers the possiblity to have a more git-like\n"
+"experience by adding the following configuration option to your .hgrc:\n"
+"\n"
+"[bookmarks]\n"
+"track.current = True\n"
+"\n"
+"This will cause bookmarks to track the bookmark that you are currently\n"
+"on, and just updates it. This is similar to git's approach to\n"
+"branching.\n"
+msgstr ""
+
+msgid ""
+"Mercurial bookmarks\n"
+"\n"
+"    Bookmarks are pointers to certain commits that move when\n"
+"    commiting. Bookmarks are local. They can be renamed, copied and\n"
+"    deleted. It is possible to use bookmark names in 'hg merge' and\n"
+"    'hg update' to merge and update respectively to a given bookmark.\n"
+"\n"
+"    You can use 'hg bookmark NAME' to set a bookmark on the working\n"
+"    directory's parent revision with the given name. If you specify\n"
+"    a revision using -r REV (where REV may be an existing bookmark),\n"
+"    the bookmark is assigned to that revision.\n"
+"    "
+msgstr ""
+
+msgid "a bookmark of this name does not exist"
+msgstr ""
+
+msgid "a bookmark of the same name already exists"
+msgstr ""
+
+msgid "new bookmark name required"
+msgstr ""
+
+msgid "bookmark name required"
+msgstr ""
+
+msgid "bookmark name cannot contain newlines"
+msgstr ""
+
+msgid "a bookmark cannot have the name of an existing branch"
+msgstr ""
+
+msgid "force"
+msgstr ""
+
+msgid "revision"
+msgstr ""
+
+msgid "delete a given bookmark"
+msgstr ""
+
+msgid "rename a given bookmark"
+msgstr ""
+
+msgid "hg bookmarks [-f] [-d] [-m NAME] [-r REV] [NAME]"
+msgstr ""
+
+msgid ""
+"Bugzilla integration\n"
+"\n"
+"This hook extension adds comments on bugs in Bugzilla when changesets\n"
+"that refer to bugs by Bugzilla ID are seen. The hook does not change\n"
+"bug status.\n"
+"\n"
+"The hook updates the Bugzilla database directly. Only Bugzilla\n"
+"installations using MySQL are supported.\n"
+"\n"
+"The hook relies on a Bugzilla script to send bug change notification\n"
+"emails. That script changes between Bugzilla versions; the\n"
+"'processmail' script used prior to 2.18 is replaced in 2.18 and\n"
+"subsequent versions by 'config/sendbugmail.pl'. Note that these will\n"
+"be run by Mercurial as the user pushing the change; you will need to\n"
+"ensure the Bugzilla install file permissions are set appropriately.\n"
+"\n"
+"Configuring the extension:\n"
+"\n"
+"    [bugzilla]\n"
+"\n"
+"    host       Hostname of the MySQL server holding the Bugzilla\n"
+"               database.\n"
+"    db         Name of the Bugzilla database in MySQL. Default 'bugs'.\n"
+"    user       Username to use to access MySQL server. Default 'bugs'.\n"
+"    password   Password to use to access MySQL server.\n"
+"    timeout    Database connection timeout (seconds). Default 5.\n"
+"    version    Bugzilla version. Specify '3.0' for Bugzilla versions\n"
+"               3.0 and later, '2.18' for Bugzilla versions from 2.18\n"
+"               and '2.16' for versions prior to 2.18.\n"
+"    bzuser     Fallback Bugzilla user name to record comments with, if\n"
+"               changeset committer cannot be found as a Bugzilla user.\n"
+"    bzdir      Bugzilla install directory. Used by default notify.\n"
+"               Default '/var/www/html/bugzilla'.\n"
+"    notify     The command to run to get Bugzilla to send bug change\n"
+"               notification emails. Substitutes from a map with 3\n"
+"               keys, 'bzdir', 'id' (bug id) and 'user' (committer\n"
+"               bugzilla email). Default depends on version; from 2.18\n"
+"               it is \"cd %(bzdir)s && perl -T contrib/sendbugmail.pl\n"
+"               %(id)s %(user)s\".\n"
+"    regexp     Regular expression to match bug IDs in changeset commit\n"
+"               message. Must contain one \"()\" group. The default\n"
+"               expression matches 'Bug 1234', 'Bug no. 1234', 'Bug\n"
+"               number 1234', 'Bugs 1234,5678', 'Bug 1234 and 5678' and\n"
+"               variations thereof. Matching is case insensitive.\n"
+"    style      The style file to use when formatting comments.\n"
+"    template   Template to use when formatting comments. Overrides\n"
+"               style if specified. In addition to the usual Mercurial\n"
+"               keywords, the extension specifies:\n"
+"                   {bug}       The Bugzilla bug ID.\n"
+"                   {root}      The full pathname of the Mercurial\n"
+"                               repository.\n"
+"                   {webroot}   Stripped pathname of the Mercurial\n"
+"                               repository.\n"
+"                   {hgweb}     Base URL for browsing Mercurial\n"
+"                               repositories.\n"
+"               Default 'changeset {node|short} in repo {root} refers '\n"
+"                       'to bug {bug}.\\ndetails:\\n\\t{desc|tabindent}'\n"
+"    strip      The number of slashes to strip from the front of {root}\n"
+"               to produce {webroot}. Default 0.\n"
+"    usermap    Path of file containing Mercurial committer ID to\n"
+"               Bugzilla user ID mappings. If specified, the file\n"
+"               should contain one mapping per line,\n"
+"               \"committer\"=\"Bugzilla user\". See also the [usermap]\n"
+"               section.\n"
+"\n"
+"    [usermap]\n"
+"    Any entries in this section specify mappings of Mercurial\n"
+"    committer ID to Bugzilla user ID. See also [bugzilla].usermap.\n"
+"    \"committer\"=\"Bugzilla user\"\n"
+"\n"
+"    [web]\n"
+"    baseurl    Base URL for browsing Mercurial repositories. Reference\n"
+"               from templates as {hgweb}.\n"
+"\n"
+"Activating the extension:\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"
+"Example configuration:\n"
+"\n"
+"This example configuration is for a collection of Mercurial\n"
+"repositories in /var/local/hg/repos/ used with a local Bugzilla 3.2\n"
+"installation in /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=Changeset {node|short} in {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"
+"Commits add a comment to the Bugzilla bug record of the form:\n"
+"\n"
+"    Changeset 3b16791d6642 in repository-name.\n"
+"    http://dev.domain.com/hg/repository-name/rev/3b16791d6642\n"
+"\n"
+"    Changeset commit comment. Bug 1234.\n"
+msgstr ""
+
+#, python-format
+msgid "connecting to %s:%s as %s, password %s\n"
+msgstr ""
+
+#, python-format
+msgid "query: %s %s\n"
+msgstr ""
+
+#, python-format
+msgid "failed query: %s %s\n"
+msgstr ""
+
+msgid "unknown database schema"
+msgstr ""
+
+#, python-format
+msgid "bug %d already knows about changeset %s\n"
+msgstr ""
+
+msgid "telling bugzilla to send mail:\n"
+msgstr ""
+
+#, python-format
+msgid "  bug %s\n"
+msgstr ""
+
+#, python-format
+msgid "running notify command %s\n"
+msgstr ""
+
+#, python-format
+msgid "bugzilla notify command %s"
+msgstr ""
+
+msgid "done\n"
+msgstr ""
+
+#, python-format
+msgid "looking up user %s\n"
+msgstr ""
+
+#, python-format
+msgid "cannot find bugzilla user id for %s"
+msgstr ""
+
+#, python-format
+msgid "cannot find bugzilla user id for %s or %s"
+msgstr ""
+
+#, python-format
+msgid "bugzilla version %s not supported"
+msgstr ""
+
+msgid ""
+"changeset {node|short} in repo {root} refers to bug {bug}.\n"
+"details:\n"
+"\t{desc|tabindent}"
+msgstr ""
+
+#, python-format
+msgid "python mysql support not available: %s"
+msgstr ""
+
+#, python-format
+msgid "hook type %s does not pass a changeset id"
+msgstr ""
+
+#, python-format
+msgid "database error: %s"
+msgstr ""
+
+msgid ""
+"show the children of the given or working directory revision\n"
+"\n"
+"    Print the children of the working directory's revisions. If a\n"
+"    revision is given via -r/--rev, the children of that revision will\n"
+"    be printed. If a file argument is given, revision in which the\n"
+"    file was last changed (after the working directory revision or the\n"
+"    argument to --rev if given) is printed.\n"
+"    "
+msgstr ""
+
+msgid "show children of the specified revision"
+msgstr ""
+
+msgid "hg children [-r REV] [FILE]"
+msgstr ""
+
+msgid "command to show certain statistics about revision history"
+msgstr ""
+
+#, python-format
+msgid "Revision %d is a merge, ignoring...\n"
+msgstr ""
+
+#, python-format
+msgid "generating stats: %d%%"
+msgstr ""
+
+msgid ""
+"graph count of revisions grouped by template\n"
+"\n"
+"    Will graph count of changed lines or revisions grouped by template\n"
+"    or alternatively by date, if dateformat is used. In this case it\n"
+"    will override template.\n"
+"\n"
+"    By default statistics are counted for number of changed lines.\n"
+"\n"
+"    Examples:\n"
+"\n"
+"      # display count of changed lines for every committer\n"
+"      hg churn -t '{author|email}'\n"
+"\n"
+"      # display daily activity graph\n"
+"      hg churn -f '%H' -s -c\n"
+"\n"
+"      # display activity of developers by month\n"
+"      hg churn -f '%Y-%m' -s -c\n"
+"\n"
+"      # display count of lines changed in every year\n"
+"      hg churn -f '%Y' -s\n"
+"\n"
+"    The map file format used to specify aliases is fairly simple:\n"
+"\n"
+"    <alias email> <actual email>\n"
+"\n"
+"    By default .hgchurn in the working directory root will be used, if\n"
+"    it exists. Use the --aliases option to override this.\n"
+"    "
+msgstr ""
+
+#, python-format
+msgid "assuming %i character terminal\n"
+msgstr ""
+
+msgid "count rate for the specified revision or range"
+msgstr ""
+
+msgid "count rate for revisions matching date spec"
+msgstr ""
+
+msgid "template to group changesets"
+msgstr ""
+
+msgid "strftime-compatible format for grouping by date"
+msgstr ""
+
+msgid "count rate by number of changesets"
+msgstr ""
+
+msgid "sort by key (default: sort by count)"
+msgstr ""
+
+msgid "file with email aliases"
+msgstr ""
+
+msgid "show progress"
+msgstr ""
+
+msgid "hg churn [-d DATE] [-r REV] [--aliases FILE] [--progress] [FILE]"
+msgstr ""
+
+msgid ""
+"add color output to status, qseries, and diff-related commands\n"
+"\n"
+"This extension modifies the status command to add color to its output\n"
+"to reflect file status, the qseries command to add color to reflect\n"
+"patch status (applied, unapplied, missing), and to diff-related\n"
+"commands to highlight additions, removals, diff headers, and trailing\n"
+"whitespace.\n"
+"\n"
+"Other effects in addition to color, like bold and underlined text, are\n"
+"also available. Effects are rendered with the ECMA-48 SGR control\n"
+"function (aka ANSI escape codes). This module also provides the\n"
+"render_text function, which can be used to add effects to any text.\n"
+"\n"
+"To enable this extension, add this to your .hgrc file:\n"
+"[extensions]\n"
+"color =\n"
+"\n"
+"Default effects may be overridden from the .hgrc file:\n"
+"\n"
+"[color]\n"
+"status.modified = blue bold underline red_background\n"
+"status.added = green bold\n"
+"status.removed = red bold blue_background\n"
+"status.deleted = cyan bold underline\n"
+"status.unknown = magenta bold underline\n"
+"status.ignored = black bold\n"
+"\n"
+"# 'none' turns off all effects\n"
+"status.clean = none\n"
+"status.copied = none\n"
+"\n"
+"qseries.applied = blue bold underline\n"
+"qseries.unapplied = black bold\n"
+"qseries.missing = red bold\n"
+"\n"
+"diff.diffline = bold\n"
+"diff.extended = cyan bold\n"
+"diff.file_a = red bold\n"
+"diff.file_b = green bold\n"
+"diff.hunk = magenta\n"
+"diff.deleted = red\n"
+"diff.inserted = green\n"
+"diff.changed = white\n"
+"diff.trailingwhitespace = bold red_background\n"
+msgstr ""
+
+msgid "when to colorize (always, auto, or never)"
+msgstr ""
+
+msgid "don't colorize output"
+msgstr ""
+
+msgid "converting foreign VCS repositories to Mercurial"
+msgstr ""
+
+msgid ""
+"convert a foreign SCM repository to a Mercurial one.\n"
+"\n"
+"    Accepted source formats [identifiers]:\n"
+"    - Mercurial [hg]\n"
+"    - CVS [cvs]\n"
+"    - Darcs [darcs]\n"
+"    - git [git]\n"
+"    - Subversion [svn]\n"
+"    - Monotone [mtn]\n"
+"    - GNU Arch [gnuarch]\n"
+"    - Bazaar [bzr]\n"
+"    - Perforce [p4]\n"
+"\n"
+"    Accepted destination formats [identifiers]:\n"
+"    - Mercurial [hg]\n"
+"    - Subversion [svn] (history on branches is not preserved)\n"
+"\n"
+"    If no revision is given, all revisions will be converted.\n"
+"    Otherwise, convert will only import up to the named revision\n"
+"    (given in a format understood by the source).\n"
+"\n"
+"    If no destination directory name is specified, it defaults to the\n"
+"    basename of the source with '-hg' appended. If the destination\n"
+"    repository doesn't exist, it will be created.\n"
+"\n"
+"    By default, all sources except Mercurial will use\n"
+"    --branchsort. Mercurial uses --sourcesort to preserve original\n"
+"    revision numbers order. Sort modes have the following effects:\n"
+"      --branchsort: convert from parent to child revision when\n"
+"        possible, which means branches are usually converted one after\n"
+"        the other. It generates more compact repositories.\n"
+"      --datesort: sort revisions by date. Converted repositories have\n"
+"        good-looking changelogs but are often an order of magnitude\n"
+"        larger than the same ones generated by --branchsort.\n"
+"      --sourcesort: try to preserve source revisions order, only\n"
+"        supported by Mercurial sources.\n"
+"\n"
+"    If <REVMAP> isn't given, it will be put in a default location\n"
+"    (<dest>/.hg/shamap by default). The <REVMAP> is a simple text file\n"
+"    that maps each source commit ID to the destination ID for that\n"
+"    revision, like so:\n"
+"    <source ID> <destination ID>\n"
+"\n"
+"    If the file doesn't exist, it's automatically created. It's\n"
+"    updated on each commit copied, so convert-repo can be interrupted\n"
+"    and can be run repeatedly to copy new commits.\n"
+"\n"
+"    The [username mapping] file is a simple text file that maps each\n"
+"    source commit author to a destination commit author. It is handy\n"
+"    for source SCMs that use unix logins to identify authors (eg:\n"
+"    CVS). One line per author mapping and the line format is:\n"
+"    srcauthor=whatever string you want\n"
+"\n"
+"    The filemap is a file that allows filtering and remapping of files\n"
+"    and directories. Comment lines start with '#'. Each line can\n"
+"    contain one of the following directives:\n"
+"\n"
+"      include path/to/file\n"
+"\n"
+"      exclude path/to/file\n"
+"\n"
+"      rename from/file to/file\n"
+"\n"
+"    The 'include' directive causes a file, or all files under a\n"
+"    directory, to be included in the destination repository, and the\n"
+"    exclusion of all other files and directories not explicitly included.\n"
+"    The 'exclude' directive causes files or directories to be omitted.\n"
+"    The 'rename' directive renames a file or directory. To rename from\n"
+"    a subdirectory into the root of the repository, use '.' as the\n"
+"    path to rename to.\n"
+"\n"
+"    The splicemap is a file that allows insertion of synthetic\n"
+"    history, letting you specify the parents of a revision. This is\n"
+"    useful if you want to e.g. give a Subversion merge two parents, or\n"
+"    graft two disconnected series of history together. Each entry\n"
+"    contains a key, followed by a space, followed by one or two\n"
+"    comma-separated values. The key is the revision ID in the source\n"
+"    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"
+"\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"
+"    conjunction with a splicemap, it allows for a powerful combination\n"
+"    to help fix even the most badly mismanaged repositories and turn them\n"
+"    into nicely structured Mercurial repositories. The branchmap contains\n"
+"    lines of the form \"original_branch_name new_branch_name\".\n"
+"    \"original_branch_name\" is the name of the branch in the source\n"
+"    repository, and \"new_branch_name\" is the name of the branch is the\n"
+"    destination repository. This can be used to (for instance) move code\n"
+"    in one repository from \"default\" to a named branch.\n"
+"\n"
+"    Mercurial Source\n"
+"    -----------------\n"
+"\n"
+"    --config convert.hg.ignoreerrors=False    (boolean)\n"
+"        ignore integrity errors when reading. Use it to fix Mercurial\n"
+"        repositories with missing revlogs, by converting from and to\n"
+"        Mercurial.\n"
+"    --config convert.hg.saverev=False         (boolean)\n"
+"        store original revision ID in changeset (forces target IDs to\n"
+"        change)\n"
+"    --config convert.hg.startrev=0            (hg revision identifier)\n"
+"        convert start revision and its descendants\n"
+"\n"
+"    CVS Source\n"
+"    ----------\n"
+"\n"
+"    CVS source will use a sandbox (i.e. a checked-out copy) from CVS\n"
+"    to indicate the starting point of what will be converted. Direct\n"
+"    access to the repository files is not needed, unless of course the\n"
+"    repository is :local:. The conversion uses the top level directory\n"
+"    in the sandbox to find the CVS repository, and then uses CVS rlog\n"
+"    commands to find files to convert. This means that unless a\n"
+"    filemap is given, all files under the starting directory will be\n"
+"    converted, and that any directory reorganization in the CVS\n"
+"    sandbox is ignored.\n"
+"\n"
+"    Because CVS does not have changesets, it is necessary to collect\n"
+"    individual commits to CVS and merge them into changesets. CVS\n"
+"    source uses its internal changeset merging code by default but can\n"
+"    be configured to call the external 'cvsps' program by setting:\n"
+"        --config convert.cvsps='cvsps -A -u --cvs-direct -q'\n"
+"    This option is deprecated and will be removed in Mercurial 1.4.\n"
+"\n"
+"    The options shown are the defaults.\n"
+"\n"
+"    Internal cvsps is selected by setting\n"
+"        --config convert.cvsps=builtin\n"
+"    and has a few more configurable options:\n"
+"        --config convert.cvsps.cache=True     (boolean)\n"
+"            Set to False to disable remote log caching, for testing and\n"
+"            debugging purposes.\n"
+"        --config convert.cvsps.fuzz=60        (integer)\n"
+"            Specify the maximum time (in seconds) that is allowed\n"
+"            between commits with identical user and log message in a\n"
+"            single changeset. When very large files were checked in as\n"
+"            part of a changeset then the default may not be long\n"
+"            enough.\n"
+"        --config convert.cvsps.mergeto='{{mergetobranch ([-\\w]+)}}'\n"
+"            Specify a regular expression to which commit log messages\n"
+"            are matched. If a match occurs, then the conversion\n"
+"            process will insert a dummy revision merging the branch on\n"
+"            which this log message occurs to the branch indicated in\n"
+"            the regex.\n"
+"        --config convert.cvsps.mergefrom='{{mergefrombranch ([-\\w]+)}}'\n"
+"            Specify a regular expression to which commit log messages\n"
+"            are matched. If a match occurs, then the conversion\n"
+"            process will add the most recent revision on the branch\n"
+"            indicated in the regex as the second parent of the\n"
+"            changeset.\n"
+"\n"
+"    The hgext/convert/cvsps wrapper script allows the builtin\n"
+"    changeset merging code to be run without doing a conversion. Its\n"
+"    parameters and output are similar to that of cvsps 2.1.\n"
+"\n"
+"    Subversion Source\n"
+"    -----------------\n"
+"\n"
+"    Subversion source detects classical trunk/branches/tags layouts.\n"
+"    By default, the supplied \"svn://repo/path/\" source URL is\n"
+"    converted as a single branch. If \"svn://repo/path/trunk\" exists it\n"
+"    replaces the default branch. If \"svn://repo/path/branches\" exists,\n"
+"    its subdirectories are listed as possible branches. If\n"
+"    \"svn://repo/path/tags\" exists, it is looked for tags referencing\n"
+"    converted branches. Default \"trunk\", \"branches\" and \"tags\" values\n"
+"    can be overridden with following options. Set them to paths\n"
+"    relative to the source URL, or leave them blank to disable auto\n"
+"    detection.\n"
+"\n"
+"    --config convert.svn.branches=branches    (directory name)\n"
+"        specify the directory containing branches\n"
+"    --config convert.svn.tags=tags            (directory name)\n"
+"        specify the directory containing tags\n"
+"    --config convert.svn.trunk=trunk          (directory name)\n"
+"        specify the name of the trunk branch\n"
+"\n"
+"    Source history can be retrieved starting at a specific revision,\n"
+"    instead of being integrally converted. Only single branch\n"
+"    conversions are supported.\n"
+"\n"
+"    --config convert.svn.startrev=0           (svn revision number)\n"
+"        specify start Subversion revision.\n"
+"\n"
+"    Perforce Source\n"
+"    ---------------\n"
+"\n"
+"    The Perforce (P4) importer can be given a p4 depot path or a\n"
+"    client specification as source. It will convert all files in the\n"
+"    source to a flat Mercurial repository, ignoring labels, branches\n"
+"    and integrations. Note that when a depot path is given you then\n"
+"    usually should specify a target directory, because otherwise the\n"
+"    target may be named ...-hg.\n"
+"\n"
+"    It is possible to limit the amount of source history to be\n"
+"    converted by specifying an initial Perforce revision.\n"
+"\n"
+"    --config convert.p4.startrev=0            (perforce changelist number)\n"
+"        specify initial Perforce revision.\n"
+"\n"
+"\n"
+"    Mercurial Destination\n"
+"    ---------------------\n"
+"\n"
+"    --config convert.hg.clonebranches=False   (boolean)\n"
+"        dispatch source branches in separate clones.\n"
+"    --config convert.hg.tagsbranch=default    (branch name)\n"
+"        tag revisions branch name\n"
+"    --config convert.hg.usebranchnames=True   (boolean)\n"
+"        preserve branch names\n"
+"\n"
+"    "
+msgstr ""
+
+msgid ""
+"create changeset information from CVS\n"
+"\n"
+"    This command is intended as a debugging tool for the CVS to\n"
+"    Mercurial converter, and can be used as a direct replacement for\n"
+"    cvsps.\n"
+"\n"
+"    Hg debugcvsps reads the CVS rlog for current directory (or any\n"
+"    named directory) in the CVS repository, and converts the log to a\n"
+"    series of changesets based on matching commit log entries and\n"
+"    dates."
+msgstr ""
+
+msgid "username mapping filename"
+msgstr ""
+
+msgid "destination repository type"
+msgstr ""
+
+msgid "remap file names using contents of file"
+msgstr ""
+
+msgid "import up to target revision REV"
+msgstr ""
+
+msgid "source repository type"
+msgstr ""
+
+msgid "splice synthesized history into place"
+msgstr ""
+
+msgid "change branch names while converting"
+msgstr ""
+
+msgid "try to sort changesets by branches"
+msgstr ""
+
+msgid "try to sort changesets by date"
+msgstr ""
+
+msgid "preserve source changesets order"
+msgstr ""
+
+msgid "hg convert [OPTION]... SOURCE [DEST [REVMAP]]"
+msgstr ""
+
+msgid "only return changes on specified branches"
+msgstr ""
+
+msgid "prefix to remove from file names"
+msgstr ""
+
+msgid "only return changes after or between specified tags"
+msgstr ""
+
+msgid "update cvs log cache"
+msgstr ""
+
+msgid "create new cvs log cache"
+msgstr ""
+
+msgid "set commit time fuzz in seconds"
+msgstr ""
+
+msgid "specify cvsroot"
+msgstr ""
+
+msgid "show parent changesets"
+msgstr ""
+
+msgid "show current changeset in ancestor branches"
+msgstr ""
+
+msgid "ignored for compatibility"
+msgstr ""
+
+msgid "hg debugcvsps [OPTION]... [PATH]..."
+msgstr ""
+
+msgid ""
+"warning: lightweight checkouts may cause conversion failures, try with a "
+"regular branch instead.\n"
+msgstr ""
+
+msgid "bzr source type could not be determined\n"
+msgstr ""
+
+#, python-format
+msgid "%s is not a valid revision in current branch"
+msgstr ""
+
+#, python-format
+msgid "%s is not available in %s anymore"
+msgstr ""
+
+#, python-format
+msgid "%s.%s symlink has no target"
+msgstr ""
+
+#, python-format
+msgid "cannot find required \"%s\" tool"
+msgstr ""
+
+#, python-format
+msgid "running: %s\n"
+msgstr ""
+
+#, python-format
+msgid "%s error:\n"
+msgstr ""
+
+#, python-format
+msgid "%s %s"
+msgstr ""
+
+#, python-format
+msgid "syntax error in %s(%d): key/value pair expected"
+msgstr ""
+
+#, python-format
+msgid "could not open map file %r: %s"
+msgstr ""
+
+#, python-format
+msgid "%s: missing or unsupported repository"
+msgstr ""
+
+#, python-format
+msgid "convert: %s\n"
+msgstr ""
+
+#, python-format
+msgid "%s: unknown repository type"
+msgstr ""
+
+#, python-format
+msgid "unknown sort mode: %s"
+msgstr ""
+
+#, python-format
+msgid "cycle detected between %s and %s"
+msgstr ""
+
+msgid "not all revisions were sorted"
+msgstr ""
+
+#, python-format
+msgid "Writing author map file %s\n"
+msgstr ""
+
+#, python-format
+msgid "Ignoring bad line in author map file %s: %s\n"
+msgstr ""
+
+#, python-format
+msgid "mapping author %s to %s\n"
+msgstr ""
+
+#, python-format
+msgid "overriding mapping for author %s, was %s, will be %s\n"
+msgstr ""
+
+#, python-format
+msgid "spliced in %s as parents of %s\n"
+msgstr ""
+
+msgid "scanning source...\n"
+msgstr ""
+
+msgid "sorting...\n"
+msgstr ""
+
+msgid "converting...\n"
+msgstr ""
+
+#, python-format
+msgid "source: %s\n"
+msgstr ""
+
+#, python-format
+msgid "assuming destination %s\n"
+msgstr ""
+
+msgid "more than one sort mode specified"
+msgstr ""
+
+msgid "--sourcesort is not supported by this data source"
+msgstr ""
+
+msgid ""
+"warning: support for external cvsps is deprecated and will be removed in "
+"Mercurial 1.4\n"
+msgstr ""
+
+#, python-format
+msgid "revision %s is not a patchset number or date"
+msgstr ""
+
+msgid "using builtin cvsps\n"
+msgstr ""
+
+#, python-format
+msgid "connecting to %s\n"
+msgstr ""
+
+msgid "CVS pserver authentication failed"
+msgstr ""
+
+msgid "server sucks"
+msgstr ""
+
+#, python-format
+msgid "%d bytes missing from remote file"
+msgstr ""
+
+#, python-format
+msgid "cvs server: %s\n"
+msgstr ""
+
+#, python-format
+msgid "unknown CVS response: %s"
+msgstr ""
+
+msgid "collecting CVS rlog\n"
+msgstr ""
+
+#, python-format
+msgid "reading cvs log cache %s\n"
+msgstr ""
+
+#, python-format
+msgid "cache has %d log entries\n"
+msgstr ""
+
+#, python-format
+msgid "error reading cache: %r\n"
+msgstr ""
+
+#, python-format
+msgid "running %s\n"
+msgstr ""
+
+#, python-format
+msgid "prefix=%r directory=%r root=%r\n"
+msgstr ""
+
+msgid "RCS file must be followed by working file"
+msgstr ""
+
+msgid "must have at least some revisions"
+msgstr ""
+
+msgid "expected revision number"
+msgstr ""
+
+msgid "revision must be followed by date line"
+msgstr ""
+
+#, python-format
+msgid "found synthetic revision in %s: %r\n"
+msgstr ""
+
+#, python-format
+msgid "writing cvs log cache %s\n"
+msgstr ""
+
+#, python-format
+msgid "%d log entries\n"
+msgstr ""
+
+msgid "creating changesets\n"
+msgstr ""
+
+msgid "synthetic changeset cannot have multiple parents"
+msgstr ""
+
+#, python-format
+msgid ""
+"warning: CVS commit message references non-existent branch %r:\n"
+"%s\n"
+msgstr ""
+
+#, python-format
+msgid "%d changeset entries\n"
+msgstr ""
+
+msgid "Python ElementTree module is not available"
+msgstr ""
+
+#, python-format
+msgid "cleaning up %s\n"
+msgstr ""
+
+msgid "internal calling inconsistency"
+msgstr ""
+
+msgid "errors in filemap"
+msgstr ""
+
+#, python-format
+msgid "%s:%d: %r already in %s list\n"
+msgstr ""
+
+#, python-format
+msgid "%s:%d: unknown directive %r\n"
+msgstr ""
+
+msgid "source repository doesn't support --filemap"
+msgstr ""
+
+#, python-format
+msgid "%s does not look like a GNU Arch repo"
+msgstr ""
+
+msgid "cannot find a GNU Arch tool"
+msgstr ""
+
+#, python-format
+msgid "analyzing tree version %s...\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"tree analysis stopped because it points to an unregistered archive %s...\n"
+msgstr ""
+
+#, python-format
+msgid "applying revision %s...\n"
+msgstr ""
+
+#, python-format
+msgid "computing changeset between %s and %s...\n"
+msgstr ""
+
+#, python-format
+msgid "obtaining revision %s...\n"
+msgstr ""
+
+#, python-format
+msgid "analyzing revision %s...\n"
+msgstr ""
+
+#, python-format
+msgid "could not parse cat-log of %s"
+msgstr ""
+
+#, python-format
+msgid "%s is not a local Mercurial repo"
+msgstr ""
+
+#, python-format
+msgid "initializing destination %s repository\n"
+msgstr ""
+
+msgid "run hg sink pre-conversion action\n"
+msgstr ""
+
+msgid "run hg sink post-conversion action\n"
+msgstr ""
+
+#, python-format
+msgid "pulling from %s into %s\n"
+msgstr ""
+
+msgid "filtering out empty revision\n"
+msgstr ""
+
+msgid "updating tags\n"
+msgstr ""
+
+#, python-format
+msgid "%s is not a valid start revision"
+msgstr ""
+
+#, python-format
+msgid "ignoring: %s\n"
+msgstr ""
+
+msgid "run hg source pre-conversion action\n"
+msgstr ""
+
+msgid "run hg source post-conversion action\n"
+msgstr ""
+
+#, python-format
+msgid "%s does not look like a monotone repo"
+msgstr ""
+
+#, python-format
+msgid "copying file in renamed directory from '%s' to '%s'"
+msgstr ""
+
+msgid "reading p4 views\n"
+msgstr ""
+
+msgid "collecting p4 changelists\n"
+msgstr ""
+
+msgid "Subversion python bindings could not be loaded"
+msgstr ""
+
+#, python-format
+msgid "Subversion python bindings %d.%d found, 1.4 or later required"
+msgstr ""
+
+msgid "Subversion python bindings are too old, 1.4 or later required"
+msgstr ""
+
+#, python-format
+msgid "svn: revision %s is not an integer"
+msgstr ""
+
+#, python-format
+msgid "svn: start revision %s is not an integer"
+msgstr ""
+
+#, python-format
+msgid "no revision found in module %s"
+msgstr ""
+
+#, python-format
+msgid "expected %s to be at %r, but not found"
+msgstr ""
+
+#, python-format
+msgid "found %s at %r\n"
+msgstr ""
+
+#, python-format
+msgid "ignoring empty branch %s\n"
+msgstr ""
+
+#, python-format
+msgid "found branch %s at %d\n"
+msgstr ""
+
+msgid "svn: start revision is not supported with more than one branch"
+msgstr ""
+
+#, python-format
+msgid "svn: no revision found after start revision %d"
+msgstr ""
+
+#, python-format
+msgid "no tags found at revision %d\n"
+msgstr ""
+
+#, python-format
+msgid "ignoring foreign branch %r\n"
+msgstr ""
+
+#, python-format
+msgid "%s not found up to revision %d"
+msgstr ""
+
+#, python-format
+msgid "branch renamed from %s to %s at %d\n"
+msgstr ""
+
+#, python-format
+msgid "reparent to %s\n"
+msgstr ""
+
+#, python-format
+msgid "copied to %s from %s@%s\n"
+msgstr ""
+
+#, python-format
+msgid "gone from %s\n"
+msgstr ""
+
+#, python-format
+msgid "found parent directory %s\n"
+msgstr ""
+
+#, python-format
+msgid "base, entry %s %s\n"
+msgstr ""
+
+msgid "munge-o-matic\n"
+msgstr ""
+
+#, python-format
+msgid "info: %s %s %s %s\n"
+msgstr ""
+
+#, python-format
+msgid "unknown path in revision %d: %s\n"
+msgstr ""
+
+#, python-format
+msgid "mark %s came from %s:%d\n"
+msgstr ""
+
+#, python-format
+msgid "parsing revision %d (%d changes)\n"
+msgstr ""
+
+#, python-format
+msgid "found parent of branch %s at %d: %s\n"
+msgstr ""
+
+msgid "no copyfrom path, don't know what to do.\n"
+msgstr ""
+
+#, python-format
+msgid "fetching revision log for \"%s\" from %d to %d\n"
+msgstr ""
+
+#, python-format
+msgid "skipping blacklisted revision %d\n"
+msgstr ""
+
+#, python-format
+msgid "revision %d has no entries\n"
+msgstr ""
+
+#, python-format
+msgid "svn: branch has no revision %s"
+msgstr ""
+
+#, python-format
+msgid "%r is not under %r, ignoring\n"
+msgstr ""
+
+#, python-format
+msgid "initializing svn repo %r\n"
+msgstr ""
+
+#, python-format
+msgid "initializing svn wc %r\n"
+msgstr ""
+
+msgid "unexpected svn output:\n"
+msgstr ""
+
+msgid "unable to cope with svn output"
+msgstr ""
+
+msgid "XXX TAGS NOT IMPLEMENTED YET\n"
+msgstr ""
+
+msgid ""
+"\n"
+"The `extdiff' Mercurial extension allows you to use external programs\n"
+"to compare revisions, or revision with working directory. The external diff\n"
+"programs are called with a configurable set of options and two\n"
+"non-option arguments: paths to directories containing snapshots of\n"
+"files to compare.\n"
+"\n"
+"To enable this extension:\n"
+"\n"
+"  [extensions]\n"
+"  hgext.extdiff =\n"
+"\n"
+"The `extdiff' extension also allows to configure new diff commands, so\n"
+"you do not need to type \"hg extdiff -p kdiff3\" always.\n"
+"\n"
+"  [extdiff]\n"
+"  # add new command that runs GNU diff(1) in 'context diff' mode\n"
+"  cdiff = gdiff -Nprc5\n"
+"  ## or the old way:\n"
+"  #cmd.cdiff = gdiff\n"
+"  #opts.cdiff = -Nprc5\n"
+"\n"
+"  # add new command called vdiff, runs kdiff3\n"
+"  vdiff = kdiff3\n"
+"\n"
+"  # add new command called meld, runs meld (no need to name twice)\n"
+"  meld =\n"
+"\n"
+"  # add new command called vimdiff, runs gvimdiff with DirDiff plugin\n"
+"  # (see http://www.vim.org/scripts/script.php?script_id=102)\n"
+"  # Non English user, be sure to put \"let g:DirDiffDynamicDiffText = 1\" "
+"in\n"
+"  # your .vimrc\n"
+"  vimdiff = gvim -f '+next' '+execute \"DirDiff\" argv(0) argv(1)'\n"
+"\n"
+"You can use -I/-X and list of file or directory names like normal \"hg\n"
+"diff\" command. The `extdiff' extension makes snapshots of only needed\n"
+"files, so running the external diff program will actually be pretty\n"
+"fast (at least faster than having to compare the entire tree).\n"
+msgstr ""
+
+#, python-format
+msgid "making snapshot of %d files from rev %s\n"
+msgstr ""
+
+#, python-format
+msgid "making snapshot of %d files from working directory\n"
+msgstr ""
+
+msgid "cannot specify --rev and --change at the same time"
+msgstr ""
+
+#, python-format
+msgid "running %r in %s\n"
+msgstr ""
+
+#, python-format
+msgid "file changed while diffing. Overwriting: %s (src: %s)\n"
+msgstr ""
+
+msgid "cleaning up temp directory\n"
+msgstr ""
+
+msgid ""
+"use external program to diff repository (or selected files)\n"
+"\n"
+"    Show differences between revisions for the specified files, using\n"
+"    an external program. The default program used is diff, with\n"
+"    default options \"-Npru\".\n"
+"\n"
+"    To select a different program, use the -p/--program option. The\n"
+"    program will be passed the names of two directories to compare. To\n"
+"    pass additional options to the program, use -o/--option. These\n"
+"    will be passed before the names of the directories to compare.\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 ""
+
+msgid "comparison program to run"
+msgstr ""
+
+msgid "pass option to comparison program"
+msgstr ""
+
+msgid "change made by revision"
+msgstr ""
+
+msgid "hg extdiff [OPT]... [FILE]..."
+msgstr ""
+
+#, python-format
+msgid "hg %s [OPTION]... [FILE]..."
+msgstr ""
+
+msgid "pulling, updating and merging in one command"
+msgstr ""
+
+msgid ""
+"pull changes from a remote repository, merge new changes if needed.\n"
+"\n"
+"    This finds all changes from the repository at the specified path\n"
+"    or URL and adds them to the local repository.\n"
+"\n"
+"    If the pulled changes add a new branch head, the head is\n"
+"    automatically merged, and the result of the merge is committed.\n"
+"    Otherwise, the working directory is updated to include the new\n"
+"    changes.\n"
+"\n"
+"    When a merge occurs, the newly pulled changes are assumed to be\n"
+"    \"authoritative\". The head of the new changes is used as the first\n"
+"    parent, with local changes as the second. To switch the merge\n"
+"    order, use --switch-parent.\n"
+"\n"
+"    See 'hg help dates' for a list of formats valid for -d/--date.\n"
+"    "
+msgstr ""
+
+msgid ""
+"working dir not at branch tip (use \"hg update\" to check out branch tip)"
+msgstr ""
+
+msgid "outstanding uncommitted merge"
+msgstr ""
+
+msgid "outstanding uncommitted changes"
+msgstr ""
+
+msgid "working directory is missing some files"
+msgstr ""
+
+msgid ""
+"multiple heads in this branch (use \"hg heads .\" and \"hg merge\" to merge)"
+msgstr ""
+
+#, python-format
+msgid "pulling from %s\n"
+msgstr ""
+
+msgid ""
+"Other repository doesn't support revision lookup, so a rev cannot be "
+"specified."
+msgstr ""
+
+#, python-format
+msgid ""
+"not merging with %d other new branch heads (use \"hg heads .\" and \"hg merge"
+"\" to merge them)\n"
+msgstr ""
+
+#, python-format
+msgid "updating to %d:%s\n"
+msgstr ""
+
+#, python-format
+msgid "merging with %d:%s\n"
+msgstr ""
+
+#, python-format
+msgid "Automated merge with %s"
+msgstr ""
+
+#, python-format
+msgid "new changeset %d:%s merges remote changes with local\n"
+msgstr ""
+
+msgid "a specific revision you would like to pull"
+msgstr ""
+
+msgid "edit commit message"
+msgstr ""
+
+msgid "edit commit message (DEPRECATED)"
+msgstr ""
+
+msgid "switch parents when merging"
+msgstr ""
+
+msgid "hg fetch [SOURCE]"
+msgstr ""
+
+msgid "error while verifying signature"
+msgstr ""
+
+#, python-format
+msgid "%s Bad signature from \"%s\"\n"
+msgstr ""
+
+#, python-format
+msgid "%s Note: Signature has expired (signed by: \"%s\")\n"
+msgstr ""
+
+#, python-format
+msgid "%s Note: This key has expired (signed by: \"%s\")\n"
+msgstr ""
+
+msgid "list signed changesets"
+msgstr ""
+
+#, python-format
+msgid "%s:%d node does not exist\n"
+msgstr ""
+
+msgid "verify all the signatures there may be for a particular revision"
+msgstr ""
+
+#, python-format
+msgid "No valid signature for %s\n"
+msgstr ""
+
+msgid ""
+"add a signature for the current or given revision\n"
+"\n"
+"    If no revision is given, the parent of the working directory is used,\n"
+"    or tip if no revision is checked out.\n"
+"\n"
+"    See 'hg help dates' for a list of formats valid for -d/--date.\n"
+"    "
+msgstr ""
+
+msgid "uncommitted merge - please provide a specific revision"
+msgstr ""
+
+msgid "Error while signing"
+msgstr ""
+
+msgid ""
+"working copy of .hgsigs is changed (please commit .hgsigs manually or use --"
+"force)"
+msgstr ""
+
+#, python-format
+msgid "Added signature for changeset %s"
+msgstr ""
+
+msgid "unknown signature version"
+msgstr ""
+
+msgid "make the signature local"
+msgstr ""
+
+msgid "sign even if the sigfile is modified"
+msgstr ""
+
+msgid "do not commit the sigfile after signing"
+msgstr ""
+
+msgid "the key id to sign with"
+msgstr ""
+
+msgid "commit message"
+msgstr ""
+
+msgid "hg sign [OPTION]... [REVISION]..."
+msgstr ""
+
+msgid "hg sigcheck REVISION"
+msgstr ""
+
+msgid "hg sigs"
+msgstr ""
+
+msgid ""
+"show revision graphs in terminal windows\n"
+"\n"
+"This extension adds a --graph option to the incoming, outgoing and log\n"
+"commands. When this options is given, an ASCII representation of the\n"
+"revision graph is also shown.\n"
+msgstr ""
+
+#, python-format
+msgid "--graph option is incompatible with --%s"
+msgstr ""
+
+msgid ""
+"show revision history alongside an ASCII revision graph\n"
+"\n"
+"    Print a revision history alongside a revision graph drawn with\n"
+"    ASCII characters.\n"
+"\n"
+"    Nodes printed as an @ character are parents of the working\n"
+"    directory.\n"
+"    "
+msgstr ""
+
+#, python-format
+msgid "comparing with %s\n"
+msgstr ""
+
+msgid "no changes found\n"
+msgstr ""
+
+msgid "show the revision DAG"
+msgstr ""
+
+msgid "limit number of changes displayed"
+msgstr ""
+
+msgid "show patch"
+msgstr ""
+
+msgid "show the specified revision or range"
+msgstr ""
+
+msgid "hg glog [OPTION]... [FILE]"
+msgstr ""
+
+msgid ""
+"CIA notification\n"
+"\n"
+"This is meant to be run as a changegroup or incoming hook.\n"
+"To configure it, set the following options in your hgrc:\n"
+"\n"
+"[cia]\n"
+"# your registered CIA user name\n"
+"user = foo\n"
+"# the name of the project in CIA\n"
+"project = foo\n"
+"# the module (subproject) (optional)\n"
+"#module = foo\n"
+"# Append a diffstat to the log message (optional)\n"
+"#diffstat = False\n"
+"# Template to use for log messages (optional)\n"
+"#template = {desc}\\n{baseurl}/rev/{node}-- {diffstat}\n"
+"# Style to use (optional)\n"
+"#style = foo\n"
+"# The URL of the CIA notification service (optional)\n"
+"# You can use mailto: URLs to send by email, eg\n"
+"# mailto:cia@cia.vc\n"
+"# Make sure to set email.from if you do this.\n"
+"#url = http://cia.vc/\n"
+"# print message instead of sending it (optional)\n"
+"#test = False\n"
+"\n"
+"[hooks]\n"
+"# one of these:\n"
+"changegroup.cia = python:hgcia.hook\n"
+"#incoming.cia = python:hgcia.hook\n"
+"\n"
+"[web]\n"
+"# If you want hyperlinks (optional)\n"
+"baseurl = http://server/path/to/repo\n"
+msgstr ""
+
+#, python-format
+msgid "hgcia: sending update to %s\n"
+msgstr ""
+
+msgid "email.from must be defined when sending by email"
+msgstr ""
+
+msgid "cia: no user specified"
+msgstr ""
+
+msgid "cia: no project specified"
+msgstr ""
+
+msgid ""
+"browsing the repository in a graphical way\n"
+"\n"
+"The hgk extension allows browsing the history of a repository in a\n"
+"graphical way. It requires Tcl/Tk version 8.4 or later. (Tcl/Tk is not\n"
+"distributed with Mercurial.)\n"
+"\n"
+"hgk consists of two parts: a Tcl script that does the displaying and\n"
+"querying of information, and an extension to Mercurial named hgk.py,\n"
+"which provides hooks for hgk to get information. hgk can be found in\n"
+"the contrib directory, and hgk.py can be found in the hgext directory.\n"
+"\n"
+"To load the hgext.py extension, add it to your .hgrc file (you have to\n"
+"use your global $HOME/.hgrc file, not one in a repository). You can\n"
+"specify an absolute path:\n"
+"\n"
+"  [extensions]\n"
+"  hgk=/usr/local/lib/hgk.py\n"
+"\n"
+"Mercurial can also scan the default python library path for a file\n"
+"named 'hgk.py' if you set hgk empty:\n"
+"\n"
+"  [extensions]\n"
+"  hgk=\n"
+"\n"
+"The hg view command will launch the hgk Tcl script. For this command\n"
+"to work, hgk must be in your search path. Alternately, you can specify\n"
+"the path to hgk in your .hgrc file:\n"
+"\n"
+"  [hgk]\n"
+"  path=/location/of/hgk\n"
+"\n"
+"hgk can make use of the extdiff extension to visualize revisions.\n"
+"Assuming you had already configured extdiff vdiff command, just add:\n"
+"\n"
+"  [hgk]\n"
+"  vdiff=vdiff\n"
+"\n"
+"Revisions context menu will now display additional entries to fire\n"
+"vdiff on hovered and selected revisions."
+msgstr ""
+
+msgid "diff trees from two commits"
+msgstr ""
+
+msgid "output common ancestor information"
+msgstr ""
+
+msgid "cat a specific revision"
+msgstr ""
+
+msgid "cat-file: type or revision not supplied\n"
+msgstr ""
+
+msgid "aborting hg cat-file only understands commits\n"
+msgstr ""
+
+msgid "parse given revisions"
+msgstr ""
+
+msgid "print revisions"
+msgstr ""
+
+msgid "print extension options"
+msgstr ""
+
+msgid "start interactive history viewer"
+msgstr ""
+
+msgid "hg view [-l LIMIT] [REVRANGE]"
+msgstr ""
+
+msgid "generate patch"
+msgstr ""
+
+msgid "recursive"
+msgstr ""
+
+msgid "pretty"
+msgstr ""
+
+msgid "stdin"
+msgstr ""
+
+msgid "detect copies"
+msgstr ""
+
+msgid "search"
+msgstr ""
+
+msgid "hg git-diff-tree [OPTION]... NODE1 NODE2 [FILE]..."
+msgstr ""
+
+msgid "hg debug-cat-file [OPTION]... TYPE FILE"
+msgstr ""
+
+msgid "hg debug-config"
+msgstr ""
+
+msgid "hg debug-merge-base node node"
+msgstr ""
+
+msgid "ignored"
+msgstr ""
+
+msgid "hg debug-rev-parse REV"
+msgstr ""
+
+msgid "header"
+msgstr ""
+
+msgid "topo-order"
+msgstr ""
+
+msgid "parents"
+msgstr ""
+
+msgid "max-count"
+msgstr ""
+
+msgid "hg debug-rev-list [options] revs"
+msgstr ""
+
+msgid ""
+"syntax highlighting in hgweb, based on Pygments\n"
+"\n"
+"It depends on the Pygments syntax highlighting library:\n"
+"http://pygments.org/\n"
+"\n"
+"To enable the extension add this to hgrc:\n"
+"\n"
+"[extensions]\n"
+"hgext.highlight =\n"
+"\n"
+"There is a single configuration option:\n"
+"\n"
+"[web]\n"
+"pygments_style = <style>\n"
+"\n"
+"The default is 'colorful'.\n"
+"\n"
+"-- Adam Hupp <adam@hupp.org>\n"
+msgstr ""
+
+msgid "inotify-based status acceleration for Linux systems\n"
+msgstr ""
+
+msgid "start an inotify server for this repository"
+msgstr ""
+
+msgid ""
+"debugging information for inotify extension\n"
+"\n"
+"    Prints the list of directories being watched by the inotify server.\n"
+"    "
+msgstr ""
+
+msgid "directories being watched:\n"
+msgstr ""
+
+msgid "run server in background"
+msgstr ""
+
+msgid "used internally by daemon mode"
+msgstr ""
+
+msgid "minutes to sit idle before exiting"
+msgstr ""
+
+msgid "name of file to write process ID to"
+msgstr ""
+
+msgid "hg inserve [OPT]..."
+msgstr ""
+
+msgid "(found dead inotify server socket; removing it)\n"
+msgstr ""
+
+msgid "(starting inotify server)\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 ""
+
+msgid "(inotify server not running)\n"
+msgstr ""
+
+#, python-format
+msgid "failed to contact inotify server: %s\n"
+msgstr ""
+
+msgid "received empty answer from inotify server"
+msgstr ""
+
+#, python-format
+msgid "(inotify: received response from incompatible server version %d)\n"
+msgstr ""
+
+#, python-format
+msgid "(inotify: received '%s' response when expecting '%s')\n"
+msgstr ""
+
+msgid "this system does not seem to support inotify"
+msgstr ""
+
+#, python-format
+msgid "*** the current per-user limit on the number of inotify watches is %s\n"
+msgstr ""
+
+msgid "*** this limit is too low to watch every directory in this repository\n"
+msgstr ""
+
+msgid "*** counting directories: "
+msgstr ""
+
+#, python-format
+msgid "found %d\n"
+msgstr ""
+
+#, python-format
+msgid "*** to raise the limit from %d to %d (run as root):\n"
+msgstr ""
+
+#, python-format
+msgid "***  echo %d > %s\n"
+msgstr ""
+
+#, python-format
+msgid "cannot watch %s until inotify watch limit is raised"
+msgstr ""
+
+#, python-format
+msgid "inotify service not available: %s"
+msgstr ""
+
+#, python-format
+msgid "watching %r\n"
+msgstr ""
+
+#, python-format
+msgid "watching directories under %r\n"
+msgstr ""
+
+#, python-format
+msgid "status: %r dir(%d) -> %s\n"
+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 ""
+
+#, python-format
+msgid "%s event: deleted %s\n"
+msgstr ""
+
+#, python-format
+msgid "%s event: modified %s\n"
+msgstr ""
+
+#, python-format
+msgid "filesystem containing %s was unmounted\n"
+msgstr ""
+
+#, python-format
+msgid "%s readable: %d bytes\n"
+msgstr ""
+
+#, python-format
+msgid "%s below threshold - unhooking\n"
+msgstr ""
+
+#, python-format
+msgid "%s reading %d events\n"
+msgstr ""
+
+#, python-format
+msgid "%s hooking back up with %d bytes readable\n"
+msgstr ""
+
+#, python-format
+msgid "could not start server: %s"
+msgstr ""
+
+#, python-format
+msgid "answering query for %r\n"
+msgstr ""
+
+#, python-format
+msgid "received query from incompatible client version %d\n"
+msgstr ""
+
+#, python-format
+msgid "unrecognized query type: %s\n"
+msgstr ""
+
+msgid "finished setup\n"
+msgstr ""
+
+#, python-format
+msgid "interhg: invalid pattern for %s: %s\n"
+msgstr ""
+
+#, python-format
+msgid "interhg: invalid regexp for %s: %s\n"
+msgstr ""
+
+msgid ""
+"keyword expansion in local repositories\n"
+"\n"
+"This extension expands RCS/CVS-like or self-customized $Keywords$ in\n"
+"tracked text files selected by your configuration.\n"
+"\n"
+"Keywords are only expanded in local repositories and not stored in the\n"
+"change history. The mechanism can be regarded as a convenience for the\n"
+"current user or for archive distribution.\n"
+"\n"
+"Configuration is done in the [keyword] and [keywordmaps] sections of\n"
+"hgrc files.\n"
+"\n"
+"Example:\n"
+"\n"
+"    [keyword]\n"
+"    # expand keywords in every python file except those matching \"x*\"\n"
+"    **.py =\n"
+"    x*    = ignore\n"
+"\n"
+"Note: the more specific you are in your filename patterns\n"
+"      the less you lose speed in huge repositories.\n"
+"\n"
+"For [keywordmaps] template mapping and expansion demonstration and\n"
+"control run \"hg kwdemo\".\n"
+"\n"
+"An additional date template filter {date|utcdate} is provided.\n"
+"\n"
+"The default template mappings (view with \"hg kwdemo -d\") can be\n"
+"replaced with customized keywords and templates. Again, run \"hg\n"
+"kwdemo\" to control the results of your config changes.\n"
+"\n"
+"Before changing/disabling active keywords, run \"hg kwshrink\" to avoid\n"
+"the risk of inadvertently storing expanded keywords in the change\n"
+"history.\n"
+"\n"
+"To force expansion after enabling it, or a configuration change, run\n"
+"\"hg kwexpand\".\n"
+"\n"
+"Also, when committing with the record extension or using mq's qrecord,\n"
+"be aware that keywords cannot be updated. Again, run \"hg kwexpand\" on\n"
+"the files in question to update keyword expansions after all changes\n"
+"have been checked in.\n"
+"\n"
+"Expansions spanning more than one line and incremental expansions,\n"
+"like CVS' $Log$, are not supported. A keyword template map\n"
+"\"Log = {desc}\" expands to the first line of the changeset description.\n"
+msgstr ""
+
+#, python-format
+msgid "overwriting %s expanding keywords\n"
+msgstr ""
+
+#, python-format
+msgid "overwriting %s shrinking keywords\n"
+msgstr ""
+
+msgid "[keyword] patterns cannot match"
+msgstr ""
+
+msgid "no [keyword] patterns configured"
+msgstr ""
+
+msgid ""
+"print [keywordmaps] configuration and an expansion example\n"
+"\n"
+"    Show current, custom, or default keyword template maps and their\n"
+"    expansions.\n"
+"\n"
+"    Extend current configuration by specifying maps as arguments and\n"
+"    optionally by reading from an additional hgrc file.\n"
+"\n"
+"    Override current keyword template maps with \"default\" option.\n"
+"    "
+msgstr ""
+
+#, python-format
+msgid ""
+"\n"
+"\t%s\n"
+msgstr ""
+
+#, python-format
+msgid "creating temporary repository at %s\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"\n"
+"%s keywords written to %s:\n"
+msgstr ""
+
+msgid "unhooked all commit hooks\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"\n"
+"removing temporary repository %s\n"
+msgstr ""
+
+msgid ""
+"expand keywords in the working directory\n"
+"\n"
+"    Run after (re)enabling keyword expansion.\n"
+"\n"
+"    kwexpand refuses to run if given files contain local changes.\n"
+"    "
+msgstr ""
+
+msgid ""
+"print files currently configured for keyword expansion\n"
+"\n"
+"    Crosscheck which files in working directory are potential targets\n"
+"    for keyword expansion. That is, files matched by [keyword] config\n"
+"    patterns but not symlinks.\n"
+"    "
+msgstr ""
+
+msgid ""
+"revert expanded keywords in the working directory\n"
+"\n"
+"    Run before changing/disabling active keywords or if you experience\n"
+"    problems with \"hg import\" or \"hg merge\".\n"
+"\n"
+"    kwshrink refuses to run if given files contain local changes.\n"
+"    "
+msgstr ""
+
+msgid "show default keyword template maps"
+msgstr ""
+
+msgid "read maps from rcfile"
+msgstr ""
+
+msgid "hg kwdemo [-d] [-f RCFILE] [TEMPLATEMAP]..."
+msgstr ""
+
+msgid "hg kwexpand [OPTION]... [FILE]..."
+msgstr ""
+
+msgid "show keyword status flags of all files"
+msgstr ""
+
+msgid "show files excluded from expansion"
+msgstr ""
+
+msgid "additionally show untracked files"
+msgstr ""
+
+msgid "hg kwfiles [OPTION]... [FILE]..."
+msgstr ""
+
+msgid "hg kwshrink [OPTION]... [FILE]..."
+msgstr ""
+
+msgid ""
+"patch management and development\n"
+"\n"
+"This extension lets you work with a stack of patches in a Mercurial\n"
+"repository. It manages two stacks of patches - all known patches, and\n"
+"applied patches (subset of known patches).\n"
+"\n"
+"Known patches are represented as patch files in the .hg/patches\n"
+"directory. Applied patches are both patch files and changesets.\n"
+"\n"
+"Common tasks (use \"hg help command\" for more details):\n"
+"\n"
+"prepare repository to work with patches   qinit\n"
+"create new patch                          qnew\n"
+"import existing patch                     qimport\n"
+"\n"
+"print patch series                        qseries\n"
+"print applied patches                     qapplied\n"
+"print name of top applied patch           qtop\n"
+"\n"
+"add known patch to applied stack          qpush\n"
+"remove patch from applied stack           qpop\n"
+"refresh contents of top applied patch     qrefresh\n"
+msgstr ""
+
+#, python-format
+msgid "%s appears more than once in %s"
+msgstr ""
+
+msgid "guard cannot be an empty string"
+msgstr ""
+
+#, python-format
+msgid "guard %r starts with invalid character: %r"
+msgstr ""
+
+#, python-format
+msgid "invalid character in guard %r: %r"
+msgstr ""
+
+#, python-format
+msgid "active guards: %s\n"
+msgstr ""
+
+#, python-format
+msgid "guard %r too short"
+msgstr ""
+
+#, python-format
+msgid "guard %r starts with invalid char"
+msgstr ""
+
+#, python-format
+msgid "allowing %s - no guards in effect\n"
+msgstr ""
+
+#, python-format
+msgid "allowing %s - no matching negative guards\n"
+msgstr ""
+
+#, python-format
+msgid "allowing %s - guarded by %r\n"
+msgstr ""
+
+#, python-format
+msgid "skipping %s - guarded by %r\n"
+msgstr ""
+
+#, python-format
+msgid "skipping %s - no matching guards\n"
+msgstr ""
+
+#, python-format
+msgid "error removing undo: %s\n"
+msgstr ""
+
+#, python-format
+msgid "apply failed for patch %s"
+msgstr ""
+
+#, python-format
+msgid "patch didn't work out, merging %s\n"
+msgstr ""
+
+#, python-format
+msgid "update returned %d"
+msgstr ""
+
+msgid "repo commit failed"
+msgstr ""
+
+#, python-format
+msgid "unable to read %s"
+msgstr ""
+
+#, python-format
+msgid "patch %s does not exist\n"
+msgstr ""
+
+#, python-format
+msgid "patch %s is not applied\n"
+msgstr ""
+
+msgid "patch failed, unable to continue (try -v)\n"
+msgstr ""
+
+#, python-format
+msgid "applying %s\n"
+msgstr ""
+
+#, python-format
+msgid "Unable to read %s\n"
+msgstr ""
+
+#, python-format
+msgid "imported patch %s\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"\n"
+"imported patch %s"
+msgstr ""
+
+#, python-format
+msgid "patch %s is empty\n"
+msgstr ""
+
+msgid "patch failed, rejects left in working dir\n"
+msgstr ""
+
+msgid "fuzz found when applying patch, stopping\n"
+msgstr ""
+
+#, python-format
+msgid "revision %d is not managed"
+msgstr ""
+
+#, python-format
+msgid "cannot delete revision %d above applied patches"
+msgstr ""
+
+msgid "qdelete requires at least one revision or patch name"
+msgstr ""
+
+#, python-format
+msgid "cannot delete applied patch %s"
+msgstr ""
+
+#, python-format
+msgid "patch %s not in series file"
+msgstr ""
+
+msgid "no patches applied"
+msgstr ""
+
+msgid "working directory revision is not qtip"
+msgstr ""
+
+msgid "local changes found, refresh first"
+msgstr ""
+
+msgid "local changes found"
+msgstr ""
+
+#, python-format
+msgid "\"%s\" cannot be used as the name of a patch"
+msgstr ""
+
+#, python-format
+msgid "patch \"%s\" already exists"
+msgstr ""
+
+#, python-format
+msgid "error unlinking %s\n"
+msgstr ""
+
+#, python-format
+msgid "patch name \"%s\" is ambiguous:\n"
+msgstr ""
+
+#, python-format
+msgid "patch %s not in series"
+msgstr ""
+
+msgid "(working directory not at a head)\n"
+msgstr ""
+
+msgid "no patches in series\n"
+msgstr ""
+
+#, python-format
+msgid "cannot push to a previous patch: %s"
+msgstr ""
+
+#, python-format
+msgid "qpush: %s is already at the top\n"
+msgstr ""
+
+#, python-format
+msgid "guarded by %r"
+msgstr ""
+
+msgid "no matching guards"
+msgstr ""
+
+#, python-format
+msgid "cannot push '%s' - %s\n"
+msgstr ""
+
+msgid "all patches are currently applied\n"
+msgstr ""
+
+msgid "patch series already fully applied\n"
+msgstr ""
+
+msgid "cleaning up working directory..."
+msgstr ""
+
+#, python-format
+msgid "errors during apply, please fix and refresh %s\n"
+msgstr ""
+
+#, python-format
+msgid "now at: %s\n"
+msgstr ""
+
+#, python-format
+msgid "patch %s is not applied"
+msgstr ""
+
+msgid "no patches applied\n"
+msgstr ""
+
+#, python-format
+msgid "qpop: %s is already at the top\n"
+msgstr ""
+
+msgid "qpop: forcing dirstate update\n"
+msgstr ""
+
+#, python-format
+msgid "trying to pop unknown node %s"
+msgstr ""
+
+msgid "popping would remove a revision not managed by this patch queue"
+msgstr ""
+
+msgid "deletions found between repo revs"
+msgstr ""
+
+msgid "patch queue now empty\n"
+msgstr ""
+
+msgid "cannot refresh a revision with children"
+msgstr ""
+
+msgid ""
+"refresh interrupted while patch was popped! (revert --all, qpush to "
+"recover)\n"
+msgstr ""
+
+msgid "patch queue directory already exists"
+msgstr ""
+
+#, python-format
+msgid "patch %s is not in series file"
+msgstr ""
+
+msgid "No saved patch data found\n"
+msgstr ""
+
+#, python-format
+msgid "restoring status: %s\n"
+msgstr ""
+
+msgid "save entry has children, leaving it alone\n"
+msgstr ""
+
+#, python-format
+msgid "removing save entry %s\n"
+msgstr ""
+
+#, python-format
+msgid "saved queue repository parents: %s %s\n"
+msgstr ""
+
+msgid "queue directory updating\n"
+msgstr ""
+
+msgid "Unable to load queue repository\n"
+msgstr ""
+
+msgid "save: no patches applied, exiting\n"
+msgstr ""
+
+msgid "status is already saved\n"
+msgstr ""
+
+msgid "hg patches saved state"
+msgstr ""
+
+msgid "repo commit failed\n"
+msgstr ""
+
+#, python-format
+msgid "patch %s is already in the series file"
+msgstr ""
+
+msgid "option \"-r\" not valid when importing files"
+msgstr ""
+
+msgid "option \"-n\" not valid when importing multiple patches"
+msgstr ""
+
+#, python-format
+msgid "revision %d is the root of more than one branch"
+msgstr ""
+
+#, python-format
+msgid "revision %d is already managed"
+msgstr ""
+
+#, python-format
+msgid "revision %d is not the parent of the queue"
+msgstr ""
+
+#, python-format
+msgid "revision %d has unmanaged children"
+msgstr ""
+
+#, python-format
+msgid "cannot import merge revision %d"
+msgstr ""
+
+#, python-format
+msgid "revision %d is not the parent of %d"
+msgstr ""
+
+msgid "-e is incompatible with import from -"
+msgstr ""
+
+#, python-format
+msgid "patch %s does not exist"
+msgstr ""
+
+msgid "need --name to import a patch from -"
+msgstr ""
+
+#, python-format
+msgid "adding %s to series file\n"
+msgstr ""
+
+msgid ""
+"remove patches from queue\n"
+"\n"
+"    The patches must not be applied, unless they are arguments to the\n"
+"    -r/--rev parameter. At least one patch or revision is required.\n"
+"\n"
+"    With --rev, mq will stop managing the named revisions (converting\n"
+"    them to regular Mercurial changesets). The qfinish command should\n"
+"    be used as an alternative for qdelete -r, as the latter option is\n"
+"    deprecated.\n"
+"\n"
+"    With -k/--keep, the patch files are preserved in the patch\n"
+"    directory."
+msgstr ""
+
+msgid "print the patches already applied"
+msgstr ""
+
+msgid "print the patches not yet applied"
+msgstr ""
+
+msgid ""
+"import a patch\n"
+"\n"
+"    The patch is inserted into the series after the last applied\n"
+"    patch. If no patches have been applied, qimport prepends the patch\n"
+"    to the series.\n"
+"\n"
+"    The patch will have the same name as its source file unless you\n"
+"    give it a new one with -n/--name.\n"
+"\n"
+"    You can register an existing patch inside the patch directory with\n"
+"    the -e/--existing flag.\n"
+"\n"
+"    With -f/--force, an existing patch of the same name will be\n"
+"    overwritten.\n"
+"\n"
+"    An existing changeset may be placed under mq control with -r/--rev\n"
+"    (e.g. qimport --rev tip -n patch will place tip under mq control).\n"
+"    With -g/--git, patches imported with --rev will use the git diff\n"
+"    format. See the diffs help topic for information on why this is\n"
+"    important for preserving rename/copy information and permission\n"
+"    changes.\n"
+"\n"
+"    To import a patch from standard input, pass - as the patch file.\n"
+"    When importing from standard input, a patch name must be specified\n"
+"    using the --name flag.\n"
+"    "
+msgstr ""
+
+msgid ""
+"init a new queue repository\n"
+"\n"
+"    The queue repository is unversioned by default. If\n"
+"    -c/--create-repo is specified, qinit will create a separate nested\n"
+"    repository for patches (qinit -c may also be run later to convert\n"
+"    an unversioned patch repository into a versioned one). You can use\n"
+"    qcommit to commit changes to this queue repository."
+msgstr ""
+
+msgid ""
+"clone main and patch repository at same time\n"
+"\n"
+"    If source is local, destination will have no patches applied. If\n"
+"    source is remote, this command can not check if patches are\n"
+"    applied in source, so cannot guarantee that patches are not\n"
+"    applied in destination. If you clone remote repository, be sure\n"
+"    before that it has no patches applied.\n"
+"\n"
+"    Source patch repository is looked for in <src>/.hg/patches by\n"
+"    default. Use -p <url> to change.\n"
+"\n"
+"    The patch directory must be a nested Mercurial repository, as\n"
+"    would be created by qinit -c.\n"
+"    "
+msgstr ""
+
+msgid "versioned patch repository not found (see qinit -c)"
+msgstr ""
+
+msgid "cloning main repository\n"
+msgstr ""
+
+msgid "cloning patch repository\n"
+msgstr ""
+
+msgid "stripping applied patches from destination repository\n"
+msgstr ""
+
+msgid "updating destination repository\n"
+msgstr ""
+
+msgid "commit changes in the queue repository"
+msgstr ""
+
+msgid "print the entire series file"
+msgstr ""
+
+msgid "print the name of the current patch"
+msgstr ""
+
+msgid "print the name of the next patch"
+msgstr ""
+
+msgid "all patches applied\n"
+msgstr ""
+
+msgid "print the name of the previous patch"
+msgstr ""
+
+msgid "only one patch applied\n"
+msgstr ""
+
+msgid ""
+"create a new patch\n"
+"\n"
+"    qnew creates a new patch on top of the currently-applied patch (if\n"
+"    any). It will refuse to run if there are any outstanding changes\n"
+"    unless -f/--force is specified, in which case the patch will be\n"
+"    initialized with them. You may also use -I/--include,\n"
+"    -X/--exclude, and/or a list of files after the patch name to add\n"
+"    only changes to matching files to the new patch, leaving the rest\n"
+"    as uncommitted modifications.\n"
+"\n"
+"    -u/--user and -d/--date can be used to set the (given) user and\n"
+"    date, respectively. -U/--currentuser and -D/--currentdate set user\n"
+"    to current user and date to current date.\n"
+"\n"
+"    -e/--edit, -m/--message or -l/--logfile set the patch header as\n"
+"    well as the commit message. If none is specified, the header is\n"
+"    empty and the commit message is '[mq]: PATCH'.\n"
+"\n"
+"    Use the -g/--git option to keep the patch in the git extended diff\n"
+"    format. Read the diffs help topic for more information on why this\n"
+"    is important for preserving permission changes and copy/rename\n"
+"    information.\n"
+"    "
+msgstr ""
+
+msgid ""
+"update the current patch\n"
+"\n"
+"    If any file patterns are provided, the refreshed patch will\n"
+"    contain only the modifications that match those patterns; the\n"
+"    remaining modifications will remain in the working directory.\n"
+"\n"
+"    If -s/--short is specified, files currently included in the patch\n"
+"    will be refreshed just like matched files and remain in the patch.\n"
+"\n"
+"    hg add/remove/copy/rename work as usual, though you might want to\n"
+"    use git-style patches (-g/--git or [diff] git=1) to track copies\n"
+"    and renames. See the diffs help topic for more information on the\n"
+"    git diff format.\n"
+"    "
+msgstr ""
+
+msgid "option \"-e\" incompatible with \"-m\" or \"-l\""
+msgstr ""
+
+msgid ""
+"diff of the current patch and subsequent modifications\n"
+"\n"
+"    Shows a diff which includes the current patch as well as any\n"
+"    changes which have been made in the working directory since the\n"
+"    last refresh (thus showing what the current patch would become\n"
+"    after a qrefresh).\n"
+"\n"
+"    Use 'hg diff' if you only want to see the changes made since the\n"
+"    last qrefresh, or 'hg export qtip' if you want to see changes made\n"
+"    by the current patch without including changes made since the\n"
+"    qrefresh.\n"
+"    "
+msgstr ""
+
+msgid ""
+"fold the named patches into the current patch\n"
+"\n"
+"    Patches must not yet be applied. Each patch will be successively\n"
+"    applied to the current patch in the order given. If all the\n"
+"    patches apply successfully, the current patch will be refreshed\n"
+"    with the new cumulative patch, and the folded patches will be\n"
+"    deleted. With -k/--keep, the folded patch files will not be\n"
+"    removed afterwards.\n"
+"\n"
+"    The header for each folded patch will be concatenated with the\n"
+"    current patch header, separated by a line of '* * *'."
+msgstr ""
+
+msgid "qfold requires at least one patch name"
+msgstr ""
+
+msgid "No patches applied"
+msgstr ""
+
+#, python-format
+msgid "Skipping already folded patch %s"
+msgstr ""
+
+#, python-format
+msgid "qfold cannot fold already applied patch %s"
+msgstr ""
+
+#, python-format
+msgid "Error folding patch %s"
+msgstr ""
+
+msgid "push or pop patches until named patch is at top of stack"
+msgstr ""
+
+msgid ""
+"set or print guards for a patch\n"
+"\n"
+"    Guards control whether a patch can be pushed. A patch with no\n"
+"    guards is always pushed. A patch with a positive guard (\"+foo\") is\n"
+"    pushed only if the qselect command has activated it. A patch with\n"
+"    a negative guard (\"-foo\") is never pushed if the qselect command\n"
+"    has activated it.\n"
+"\n"
+"    With no arguments, print the currently active guards.\n"
+"    With arguments, set guards for the named patch.\n"
+"    NOTE: Specifying negative guards now requires '--'.\n"
+"\n"
+"    To set guards on another patch:\n"
+"      hg qguard -- other.patch +2.6.17 -stable\n"
+"    "
+msgstr ""
+
+msgid "cannot mix -l/--list with options or arguments"
+msgstr ""
+
+msgid "no patch to work with"
+msgstr ""
+
+#, python-format
+msgid "no patch named %s"
+msgstr ""
+
+msgid "print the header of the topmost or specified patch"
+msgstr ""
+
+msgid ""
+"push the next patch onto the stack\n"
+"\n"
+"    When -f/--force is applied, all local changes in patched files\n"
+"    will be lost.\n"
+"    "
+msgstr ""
+
+msgid "no saved queues found, please use -n\n"
+msgstr ""
+
+#, python-format
+msgid "merging with queue at: %s\n"
+msgstr ""
+
+msgid ""
+"pop the current patch off the stack\n"
+"\n"
+"    By default, pops off the top of the patch stack. If given a patch\n"
+"    name, keeps popping off patches until the named patch is at the\n"
+"    top of the stack.\n"
+"    "
+msgstr ""
+
+#, python-format
+msgid "using patch queue: %s\n"
+msgstr ""
+
+msgid ""
+"rename a patch\n"
+"\n"
+"    With one argument, renames the current patch to PATCH1.\n"
+"    With two arguments, renames PATCH1 to PATCH2."
+msgstr ""
+
+#, python-format
+msgid "%s already exists"
+msgstr ""
+
+#, python-format
+msgid "A patch named %s already exists in the series file"
+msgstr ""
+
+msgid "restore the queue state saved by a revision"
+msgstr ""
+
+msgid "save current queue state"
+msgstr ""
+
+#, python-format
+msgid "destination %s exists and is not a directory"
+msgstr ""
+
+#, python-format
+msgid "destination %s exists, use -f to force"
+msgstr ""
+
+#, python-format
+msgid "copy %s to %s\n"
+msgstr ""
+
+msgid ""
+"strip a revision and all its descendants from the repository\n"
+"\n"
+"    If one of the working directory's parent revisions is stripped, the\n"
+"    working directory will be updated to the parent of the stripped\n"
+"    revision.\n"
+"    "
+msgstr ""
+
+msgid ""
+"set or print guarded patches to push\n"
+"\n"
+"    Use the qguard command to set or print guards on patch, then use\n"
+"    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"
+"\n"
+"        qguard foo.patch -stable    (negative guard)\n"
+"        qguard bar.patch +stable    (positive guard)\n"
+"        qselect stable\n"
+"\n"
+"    This activates the \"stable\" guard. mq will skip foo.patch (because\n"
+"    it has a negative match) but push bar.patch (because it has a\n"
+"    positive match).\n"
+"\n"
+"    With no arguments, prints the currently active guards.\n"
+"    With one argument, sets the active guard.\n"
+"\n"
+"    Use -n/--none to deactivate guards (no other arguments needed).\n"
+"    When no guards are active, patches with positive guards are\n"
+"    skipped and patches with negative guards are pushed.\n"
+"\n"
+"    qselect can change the guards on applied patches. It does not pop\n"
+"    guarded patches by default. Use --pop to pop back to the last\n"
+"    applied patch that is not guarded. Use --reapply (which implies\n"
+"    --pop) to push back to the current patch afterwards, but skip\n"
+"    guarded patches.\n"
+"\n"
+"    Use -s/--series to print a list of all guards in the series file\n"
+"    (no other arguments needed). Use -v for more information."
+msgstr ""
+
+msgid "guards deactivated\n"
+msgstr ""
+
+#, python-format
+msgid "number of unguarded, unapplied patches has changed from %d to %d\n"
+msgstr ""
+
+#, python-format
+msgid "number of guarded, applied patches has changed from %d to %d\n"
+msgstr ""
+
+msgid "guards in series file:\n"
+msgstr ""
+
+msgid "no guards in series file\n"
+msgstr ""
+
+msgid "active guards:\n"
+msgstr ""
+
+msgid "no active guards\n"
+msgstr ""
+
+msgid "popping guarded patches\n"
+msgstr ""
+
+msgid "reapplying unguarded patches\n"
+msgstr ""
+
+msgid ""
+"move applied patches into repository history\n"
+"\n"
+"    Finishes the specified revisions (corresponding to applied\n"
+"    patches) by moving them out of mq control into regular repository\n"
+"    history.\n"
+"\n"
+"    Accepts a revision range or the -a/--applied option. If --applied\n"
+"    is specified, all applied mq revisions are removed from mq\n"
+"    control. Otherwise, the given revisions must be at the base of the\n"
+"    stack of applied patches.\n"
+"\n"
+"    This can be especially useful if your changes have been applied to\n"
+"    an upstream repository, or if you are about to push your changes\n"
+"    to upstream.\n"
+"    "
+msgstr ""
+
+msgid "no revisions specified"
+msgstr ""
+
+msgid "cannot commit over an applied mq patch"
+msgstr ""
+
+msgid "source has mq patches applied"
+msgstr ""
+
+#, python-format
+msgid "mq status file refers to unknown node %s\n"
+msgstr ""
+
+#, python-format
+msgid "Tag %s overrides mq patch of the same name\n"
+msgstr ""
+
+msgid "cannot import over an applied patch"
+msgstr ""
+
+msgid "print first line of patch header"
+msgstr ""
+
+msgid "hg qapplied [-s] [PATCH]"
+msgstr ""
+
+msgid "use pull protocol to copy metadata"
+msgstr ""
+
+msgid "do not update the new working directories"
+msgstr ""
+
+msgid "use uncompressed transfer (fast over LAN)"
+msgstr ""
+
+msgid "location of source patch repository"
+msgstr ""
+
+msgid "hg qclone [OPTION]... SOURCE [DEST]"
+msgstr ""
+
+msgid "hg qcommit [OPTION]... [FILE]..."
+msgstr ""
+
+msgid "hg qdiff [OPTION]... [FILE]..."
+msgstr ""
+
+msgid "keep patch file"
+msgstr ""
+
+msgid "stop managing a revision"
+msgstr ""
+
+msgid "hg qdelete [-k] [-r REV]... [PATCH]..."
+msgstr ""
+
+msgid "edit patch header"
+msgstr ""
+
+msgid "keep folded patch files"
+msgstr ""
+
+msgid "hg qfold [-e] [-k] [-m TEXT] [-l FILE] PATCH..."
+msgstr ""
+
+msgid "overwrite any local changes"
+msgstr ""
+
+msgid "hg qgoto [OPTION]... PATCH"
+msgstr ""
+
+msgid "list all patches and guards"
+msgstr ""
+
+msgid "drop all guards"
+msgstr ""
+
+msgid "hg qguard [-l] [-n] -- [PATCH] [+GUARD]... [-GUARD]..."
+msgstr ""
+
+msgid "hg qheader [PATCH]"
+msgstr ""
+
+msgid "import file in patch directory"
+msgstr ""
+
+msgid "name of patch file"
+msgstr ""
+
+msgid "overwrite existing files"
+msgstr ""
+
+msgid "place existing revisions under mq control"
+msgstr ""
+
+msgid "use git extended diff format"
+msgstr ""
+
+msgid "qpush after importing"
+msgstr ""
+
+msgid "hg qimport [-e] [-n NAME] [-f] [-g] [-P] [-r REV]... FILE..."
+msgstr ""
+
+msgid "create queue repository"
+msgstr ""
+
+msgid "hg qinit [-c]"
+msgstr ""
+
+msgid "import uncommitted changes into patch"
+msgstr ""
+
+msgid "add \"From: <current user>\" to patch"
+msgstr ""
+
+msgid "add \"From: <given user>\" to patch"
+msgstr ""
+
+msgid "add \"Date: <current date>\" to patch"
+msgstr ""
+
+msgid "add \"Date: <given date>\" to patch"
+msgstr ""
+
+msgid "hg qnew [-e] [-m TEXT] [-l FILE] [-f] PATCH [FILE]..."
+msgstr ""
+
+msgid "hg qnext [-s]"
+msgstr ""
+
+msgid "hg qprev [-s]"
+msgstr ""
+
+msgid "pop all patches"
+msgstr ""
+
+msgid "queue name to pop"
+msgstr ""
+
+msgid "forget any local changes"
+msgstr ""
+
+msgid "hg qpop [-a] [-n NAME] [-f] [PATCH | INDEX]"
+msgstr ""
+
+msgid "apply if the patch has rejects"
+msgstr ""
+
+msgid "list patch name in commit text"
+msgstr ""
+
+msgid "apply all patches"
+msgstr ""
+
+msgid "merge from another queue"
+msgstr ""
+
+msgid "merge queue name"
+msgstr ""
+
+msgid "hg qpush [-f] [-l] [-a] [-m] [-n NAME] [PATCH | INDEX]"
+msgstr ""
+
+msgid "refresh only files already in the patch and specified files"
+msgstr ""
+
+msgid "add/update \"From: <current user>\" in patch"
+msgstr ""
+
+msgid "add/update \"From: <given user>\" in patch"
+msgstr ""
+
+msgid "update \"Date: <current date>\" in patch (if present)"
+msgstr ""
+
+msgid "update \"Date: <given date>\" in patch (if present)"
+msgstr ""
+
+msgid "hg qrefresh [-I] [-X] [-e] [-m TEXT] [-l FILE] [-s] [FILE]..."
+msgstr ""
+
+msgid "hg qrename PATCH1 [PATCH2]"
+msgstr ""
+
+msgid "delete save entry"
+msgstr ""
+
+msgid "update queue working directory"
+msgstr ""
+
+msgid "hg qrestore [-d] [-u] REV"
+msgstr ""
+
+msgid "copy patch directory"
+msgstr ""
+
+msgid "copy directory name"
+msgstr ""
+
+msgid "clear queue status file"
+msgstr ""
+
+msgid "force copy"
+msgstr ""
+
+msgid "hg qsave [-m TEXT] [-l FILE] [-c] [-n NAME] [-e] [-f]"
+msgstr ""
+
+msgid "disable all guards"
+msgstr ""
+
+msgid "list all guards in series file"
+msgstr ""
+
+msgid "pop to before first guarded applied patch"
+msgstr ""
+
+msgid "pop, then reapply patches"
+msgstr ""
+
+msgid "hg qselect [OPTION]... [GUARD]..."
+msgstr ""
+
+msgid "print patches not in series"
+msgstr ""
+
+msgid "hg qseries [-ms]"
+msgstr ""
+
+msgid "force removal with local changes"
+msgstr ""
+
+msgid "bundle unrelated changesets"
+msgstr ""
+
+msgid "no backups"
+msgstr ""
+
+msgid "hg strip [-f] [-b] [-n] REV"
+msgstr ""
+
+msgid "hg qtop [-s]"
+msgstr ""
+
+msgid "hg qunapplied [-s] [PATCH]"
+msgstr ""
+
+msgid "finish all applied changesets"
+msgstr ""
+
+msgid "hg qfinish [-a] [REV...]"
+msgstr ""
+
+msgid ""
+"hook extension to email notifications on commits/pushes\n"
+"\n"
+"Subscriptions can be managed through hgrc. Default mode is to print\n"
+"messages to stdout, for testing and configuring.\n"
+"\n"
+"To use, configure notify extension and enable in hgrc like this:\n"
+"\n"
+"   [extensions]\n"
+"   hgext.notify =\n"
+"\n"
+"   [hooks]\n"
+"   # one email for each incoming changeset\n"
+"   incoming.notify = python:hgext.notify.hook\n"
+"   # batch emails when many changesets incoming at one time\n"
+"   changegroup.notify = python:hgext.notify.hook\n"
+"\n"
+"   [notify]\n"
+"   # config items go in here\n"
+"\n"
+" config items:\n"
+"\n"
+" REQUIRED:\n"
+"   config = /path/to/file # file containing subscriptions\n"
+"\n"
+" OPTIONAL:\n"
+"   test = True            # print messages to stdout for testing\n"
+"   strip = 3              # number of slashes to strip for url paths\n"
+"   domain = example.com   # domain to use if committer missing domain\n"
+"   style = ...            # style file to use when formatting email\n"
+"   template = ...         # template to use when formatting email\n"
+"   incoming = ...         # template to use when run as incoming hook\n"
+"   changegroup = ...      # template when run as changegroup hook\n"
+"   maxdiff = 300          # max lines of diffs to include (0=none, -1=all)\n"
+"   maxsubject = 67        # truncate subject line longer than this\n"
+"   diffstat = True        # add a diffstat before the diff content\n"
+"   sources = serve        # notify if source of incoming changes in this "
+"list\n"
+"                          # (serve == ssh or http, push, pull, bundle)\n"
+"   [email]\n"
+"   from = user@host.com   # email address to send as if none given\n"
+"   [web]\n"
+"   baseurl = http://hgserver/... # root of hg web site for browsing commits\n"
+"\n"
+" notify config file has same format as regular hgrc. it has two\n"
+" sections so you can express subscriptions in whatever way is handier\n"
+" for you.\n"
+"\n"
+"   [usersubs]\n"
+"   # key is subscriber email, value is \",\"-separated list of glob "
+"patterns\n"
+"   user@host = pattern\n"
+"\n"
+"   [reposubs]\n"
+"   # key is glob pattern, value is \",\"-separated list of subscriber "
+"emails\n"
+"   pattern = user@host\n"
+"\n"
+" glob patterns are matched against path to repository root.\n"
+"\n"
+" if you like, you can put notify config file in repository that users\n"
+" can push changes to, they can manage their own subscriptions."
+msgstr ""
+
+#, python-format
+msgid "%s: %d new changesets"
+msgstr ""
+
+#, python-format
+msgid "notify: sending %d subscribers %d changes\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"\n"
+"diffs (truncated from %d to %d lines):\n"
+"\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"\n"
+"diffs (%d lines):\n"
+"\n"
+msgstr ""
+
+#, python-format
+msgid "notify: no subscribers to repository %s\n"
+msgstr ""
+
+#, python-format
+msgid "notify: changes have source \"%s\" - skipping\n"
+msgstr ""
+
+msgid ""
+"browse command output with external pager\n"
+"\n"
+"To set the pager that should be used, set the application variable:\n"
+"\n"
+"  [pager]\n"
+"  pager = LESS='FSRX' less\n"
+"\n"
+"If no pager is set, the pager extensions uses the environment variable\n"
+"$PAGER. If neither pager.pager, nor $PAGER is set, no pager is used.\n"
+"\n"
+"If you notice \"BROKEN PIPE\" error messages, you can disable them by\n"
+"setting:\n"
+"\n"
+"  [pager]\n"
+"  quiet = True\n"
+"\n"
+"You can disable the pager for certain commands by adding them to the\n"
+"pager.ignore list:\n"
+"\n"
+"  [pager]\n"
+"  ignore = version, help, update\n"
+"\n"
+"You can also enable the pager only for certain commands using\n"
+"pager.attend:\n"
+"\n"
+"  [pager]\n"
+"  attend = log\n"
+"\n"
+"If pager.attend is present, pager.ignore will be ignored.\n"
+"\n"
+"To ignore global commands like \"hg version\" or \"hg help\", you have to\n"
+"specify them in the global .hgrc\n"
+msgstr ""
+
+msgid ""
+"use suffixes to refer to ancestor revisions\n"
+"\n"
+"This extension allows you to use git-style suffixes to refer to the\n"
+"ancestors of a specific revision.\n"
+"\n"
+"For example, if you can refer to a revision as \"foo\", then:\n"
+"\n"
+"- foo^N = Nth parent of foo\n"
+"  foo^0 = foo\n"
+"  foo^1 = first parent of foo\n"
+"  foo^2 = second parent of foo\n"
+"  foo^  = foo^1\n"
+"\n"
+"- foo~N = Nth first grandparent of foo\n"
+"  foo~0 = foo\n"
+"  foo~1 = foo^1 = foo^ = first parent of foo\n"
+"  foo~2 = foo^1^1 = foo^^ = first parent of first parent of foo\n"
+msgstr ""
+
+msgid ""
+"sending Mercurial changesets as a series of patch emails\n"
+"\n"
+"The series is started off with a \"[PATCH 0 of N]\" introduction, which\n"
+"describes the series as a whole.\n"
+"\n"
+"Each patch email has a Subject line of \"[PATCH M of N] ...\", using the\n"
+"first line of the changeset description as the subject text. The\n"
+"message contains two or three body parts:\n"
+"\n"
+"  The changeset description.\n"
+"\n"
+"  [Optional] The result of running diffstat on the patch.\n"
+"\n"
+"  The patch itself, as generated by \"hg export\".\n"
+"\n"
+"Each message refers to the first in the series using the In-Reply-To\n"
+"and References headers, so they will show up as a sequence in threaded\n"
+"mail and news readers, and in mail archives.\n"
+"\n"
+"With the -d/--diffstat option, you will be prompted for each changeset\n"
+"with a diffstat summary and the changeset summary, so you can be sure\n"
+"you are sending the right changes.\n"
+"\n"
+"To enable this extension:\n"
+"\n"
+"  [extensions]\n"
+"  hgext.patchbomb =\n"
+"\n"
+"To configure other defaults, add a section like this to your hgrc\n"
+"file:\n"
+"\n"
+"  [email]\n"
+"  from = My Name <my@email>\n"
+"  to = recipient1, recipient2, ...\n"
+"  cc = cc1, cc2, ...\n"
+"  bcc = bcc1, bcc2, ...\n"
+"\n"
+"Then you can use the \"hg email\" command to mail a series of changesets\n"
+"as a patchbomb.\n"
+"\n"
+"To avoid sending patches prematurely, it is a good idea to first run\n"
+"the \"email\" command with the \"-n\" option (test only). You will be\n"
+"prompted for an email recipient address, a subject and an introductory\n"
+"message describing the patches of your patchbomb. Then when all is\n"
+"done, patchbomb messages are displayed. If the PAGER environment\n"
+"variable is set, your pager will be fired up once for each patchbomb\n"
+"message, so you can verify everything is alright.\n"
+"\n"
+"The -m/--mbox option is also very useful. Instead of previewing each\n"
+"patchbomb message in a pager or sending the messages directly, it will\n"
+"create a UNIX mailbox file with the patch emails. This mailbox file\n"
+"can be previewed with any mail user agent which supports UNIX mbox\n"
+"files, e.g. with mutt:\n"
+"\n"
+"  % mutt -R -f mbox\n"
+"\n"
+"When you are previewing the patchbomb messages, you can use `formail'\n"
+"(a utility that is commonly installed as part of the procmail\n"
+"package), to send each message out:\n"
+"\n"
+"  % formail -s sendmail -bm -t < mbox\n"
+"\n"
+"That should be all. Now your patchbomb is on its way out.\n"
+"\n"
+"You can also either configure the method option in the email section\n"
+"to be a sendmail compatible mailer or fill out the [smtp] section so\n"
+"that the patchbomb extension can automatically send patchbombs\n"
+"directly from the commandline. See the [email] and [smtp] sections in\n"
+"hgrc(5) for details."
+msgstr ""
+
+msgid "Please enter a valid value.\n"
+msgstr ""
+
+msgid "does the diffstat above look okay? "
+msgstr ""
+
+msgid "diffstat rejected"
+msgstr ""
+
+msgid ""
+"send changesets by email\n"
+"\n"
+"    By default, diffs are sent in the format generated by hg export,\n"
+"    one per message. The series starts with a \"[PATCH 0 of N]\"\n"
+"    introduction, which describes the series as a whole.\n"
+"\n"
+"    Each patch email has a Subject line of \"[PATCH M of N] ...\", using\n"
+"    the first line of the changeset description as the subject text.\n"
+"    The message contains two or three parts. First, the changeset\n"
+"    description. Next, (optionally) if the diffstat program is\n"
+"    installed and -d/--diffstat is used, the result of running\n"
+"    diffstat on the patch. Finally, the patch itself, as generated by\n"
+"    \"hg export\".\n"
+"\n"
+"    By default the patch is included as text in the email body for\n"
+"    easy reviewing. Using the -a/--attach option will instead create\n"
+"    an attachment for the patch. With -i/--inline an inline attachment\n"
+"    will be created.\n"
+"\n"
+"    With -o/--outgoing, emails will be generated for patches not found\n"
+"    in the destination repository (or only those which are ancestors\n"
+"    of the specified revisions if any are provided)\n"
+"\n"
+"    With -b/--bundle, changesets are selected as for --outgoing, but a\n"
+"    single email containing a binary Mercurial bundle as an attachment\n"
+"    will be sent.\n"
+"\n"
+"    Examples:\n"
+"\n"
+"    hg email -r 3000          # send patch 3000 only\n"
+"    hg email -r 3000 -r 3001  # send patches 3000 and 3001\n"
+"    hg email -r 3000:3005     # send patches 3000 through 3005\n"
+"    hg email 3000             # send patch 3000 (deprecated)\n"
+"\n"
+"    hg email -o               # send all patches not in default\n"
+"    hg email -o DEST          # send all patches not in DEST\n"
+"    hg email -o -r 3000       # send all ancestors of 3000 not in default\n"
+"    hg email -o -r 3000 DEST  # send all ancestors of 3000 not in DEST\n"
+"\n"
+"    hg email -b               # send bundle of all patches not in default\n"
+"    hg email -b DEST          # send bundle of all patches not in DEST\n"
+"    hg email -b -r 3000       # bundle of all ancestors of 3000 not in "
+"default\n"
+"    hg email -b -r 3000 DEST  # bundle of all ancestors of 3000 not in DEST\n"
+"\n"
+"    Before using this command, you will need to enable email in your\n"
+"    hgrc. See the [email] section in hgrc(5) for details.\n"
+"    "
+msgstr ""
+
+msgid "specify at least one changeset with -r or -o"
+msgstr ""
+
+msgid "--outgoing mode always on with --bundle; do not re-specify --outgoing"
+msgstr ""
+
+msgid "too many destinations"
+msgstr ""
+
+msgid "use only one form to specify the revision"
+msgstr ""
+
+msgid ""
+"\n"
+"Write the introductory message for the patch series.\n"
+"\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"This patch series consists of %d patches.\n"
+"\n"
+msgstr ""
+
+msgid "Final summary:\n"
+msgstr ""
+
+msgid "Displaying "
+msgstr ""
+
+msgid "Writing "
+msgstr ""
+
+msgid "Sending "
+msgstr ""
+
+msgid "send patches as attachments"
+msgstr ""
+
+msgid "send patches as inline attachments"
+msgstr ""
+
+msgid "email addresses of blind carbon copy recipients"
+msgstr ""
+
+msgid "email addresses of copy recipients"
+msgstr ""
+
+msgid "add diffstat output to messages"
+msgstr ""
+
+msgid "use the given date as the sending date"
+msgstr ""
+
+msgid "use the given file as the series description"
+msgstr ""
+
+msgid "email address of sender"
+msgstr ""
+
+msgid "print messages that would be sent"
+msgstr ""
+
+msgid "write messages to mbox file instead of sending them"
+msgstr ""
+
+msgid "subject of first message (intro or single patch)"
+msgstr ""
+
+msgid "message identifier to reply to"
+msgstr ""
+
+msgid "email addresses of recipients"
+msgstr ""
+
+msgid "omit hg patch header"
+msgstr ""
+
+msgid "send changes not found in the target repository"
+msgstr ""
+
+msgid "send changes not in target as a binary bundle"
+msgstr ""
+
+msgid "name of the bundle attachment file"
+msgstr ""
+
+msgid "a revision to send"
+msgstr ""
+
+msgid "run even when remote repository is unrelated (with -b/--bundle)"
+msgstr ""
+
+msgid "a base changeset to specify instead of a destination (with -b/--bundle)"
+msgstr ""
+
+msgid "send an introduction email for a single patch"
+msgstr ""
+
+msgid "hg email [OPTION]... [DEST]..."
+msgstr ""
+
+msgid ""
+"removes files not tracked by Mercurial\n"
+"\n"
+"    Delete files not known to Mercurial. This is useful to test local\n"
+"    and uncommitted changes in an otherwise-clean source tree.\n"
+"\n"
+"    This means that purge will delete:\n"
+"     - Unknown files: files marked with \"?\" by \"hg status\"\n"
+"     - Empty directories: in fact Mercurial ignores directories unless\n"
+"       they contain files under source control management\n"
+"    But it will leave untouched:\n"
+"     - Modified and unmodified tracked files\n"
+"     - Ignored files (unless --all is specified)\n"
+"     - New files added to the repository (with \"hg add\")\n"
+"\n"
+"    If directories are given on the command line, only files in these\n"
+"    directories are considered.\n"
+"\n"
+"    Be careful with purge, as you could irreversibly delete some files\n"
+"    you forgot to add to the repository. If you only want to print the\n"
+"    list of files that this program would delete, use the --print\n"
+"    option.\n"
+"    "
+msgstr ""
+
+#, python-format
+msgid "%s cannot be removed"
+msgstr ""
+
+#, python-format
+msgid "warning: %s\n"
+msgstr ""
+
+#, python-format
+msgid "Removing file %s\n"
+msgstr ""
+
+#, python-format
+msgid "Removing directory %s\n"
+msgstr ""
+
+msgid "abort if an error occurs"
+msgstr ""
+
+msgid "purge ignored files too"
+msgstr ""
+
+msgid "print filenames instead of deleting them"
+msgstr ""
+
+msgid "end filenames with NUL, for use with xargs (implies -p/--print)"
+msgstr ""
+
+msgid "hg purge [OPTION]... [DIR]..."
+msgstr ""
+
+msgid ""
+"move sets of revisions to a different ancestor\n"
+"\n"
+"This extension lets you rebase changesets in an existing Mercurial\n"
+"repository.\n"
+"\n"
+"For more information:\n"
+"http://www.selenic.com/mercurial/wiki/index.cgi/RebaseProject\n"
+msgstr ""
+
+msgid "first revision, do not change ancestor\n"
+msgstr ""
+
+msgid ""
+"move changeset (and descendants) to a different branch\n"
+"\n"
+"    Rebase uses repeated merging to graft changesets from one part of\n"
+"    history onto another. This can be useful for linearizing local\n"
+"    changes relative to a master development tree.\n"
+"\n"
+"    If a rebase is interrupted to manually resolve a merge, it can be\n"
+"    continued with --continue/-c or aborted with --abort/-a.\n"
+"    "
+msgstr ""
+
+msgid "cannot use both abort and continue"
+msgstr ""
+
+msgid "cannot use collapse with continue or abort"
+msgstr ""
+
+msgid "abort and continue do not allow specifying revisions"
+msgstr ""
+
+msgid "cannot specify both a revision and a base"
+msgstr ""
+
+msgid "nothing to rebase\n"
+msgstr ""
+
+msgid "cannot use both keepbranches and extrafn"
+msgstr ""
+
+msgid "rebase merging completed\n"
+msgstr ""
+
+msgid "warning: new changesets detected on source branch, not stripping\n"
+msgstr ""
+
+msgid "rebase completed\n"
+msgstr ""
+
+#, python-format
+msgid "%d revisions have been skipped\n"
+msgstr ""
+
+msgid " set parents\n"
+msgstr ""
+
+#, python-format
+msgid "rebasing %d:%s\n"
+msgstr ""
+
+#, python-format
+msgid " future parents are %d and %d\n"
+msgstr ""
+
+#, python-format
+msgid " update to %d:%s\n"
+msgstr ""
+
+msgid " already in target\n"
+msgstr ""
+
+#, python-format
+msgid " merge against %d:%s\n"
+msgstr ""
+
+msgid "fix unresolved conflicts with hg resolve then run hg rebase --continue"
+msgstr ""
+
+msgid "resuming interrupted rebase\n"
+msgstr ""
+
+#, python-format
+msgid "no changes, revision %d skipped\n"
+msgstr ""
+
+#, python-format
+msgid "next revision set to %s\n"
+msgstr ""
+
+#, python-format
+msgid "cannot use revision %d as base, result would have 3 parents"
+msgstr ""
+
+#, python-format
+msgid "revision %d is an mq patch (%s), finalize it.\n"
+msgstr ""
+
+#, python-format
+msgid "import mq patch %d (%s)\n"
+msgstr ""
+
+msgid "rebase status stored\n"
+msgstr ""
+
+msgid "rebase status resumed\n"
+msgstr ""
+
+msgid "no rebase in progress"
+msgstr ""
+
+msgid "warning: new changesets detected on target branch, not stripping\n"
+msgstr ""
+
+msgid "rebase aborted\n"
+msgstr ""
+
+msgid "cannot rebase onto an applied mq patch"
+msgstr ""
+
+msgid "cannot rebase an ancestor"
+msgstr ""
+
+msgid "cannot rebase a descendant"
+msgstr ""
+
+msgid "already working on current\n"
+msgstr ""
+
+msgid "already working on the current branch\n"
+msgstr ""
+
+#, python-format
+msgid "rebase onto %d starting from %d\n"
+msgstr ""
+
+msgid "unable to collapse, there is more than one external parent"
+msgstr ""
+
+msgid "--update and --rebase are not compatible, ignoring the update flag\n"
+msgstr ""
+
+msgid "rebase working directory to branch head"
+msgstr ""
+
+msgid "rebase from a given revision"
+msgstr ""
+
+msgid "rebase from the base of a given revision"
+msgstr ""
+
+msgid "rebase onto a given revision"
+msgstr ""
+
+msgid "collapse the rebased revisions"
+msgstr ""
+
+msgid "keep original revisions"
+msgstr ""
+
+msgid "keep original branches"
+msgstr ""
+
+msgid "continue an interrupted rebase"
+msgstr ""
+
+msgid "abort an interrupted rebase"
+msgstr ""
+
+msgid ""
+"hg rebase [-s REV | -b REV] [-d REV] [--collapse] [--keep] [--keepbranches] "
+"| [-c] | [-a]"
+msgstr ""
+
+msgid "interactive change selection during commit or qrefresh"
+msgstr ""
+
+msgid "this modifies a binary file (all or nothing)\n"
+msgstr ""
+
+msgid "this is a binary file\n"
+msgstr ""
+
+#, python-format
+msgid "%d hunks, %d lines changed\n"
+msgstr ""
+
+msgid "[Ynsfdaq?]"
+msgstr ""
+
+msgid "&Yes, record this change"
+msgstr ""
+
+msgid "&No, skip this change"
+msgstr ""
+
+msgid "&Skip remaining changes to this file"
+msgstr ""
+
+msgid "Record remaining changes to this &file"
+msgstr ""
+
+msgid "&Done, skip remaining changes and files"
+msgstr ""
+
+msgid "Record &all changes to all remaining files"
+msgstr ""
+
+msgid "&Quit, recording no changes"
+msgstr ""
+
+msgid "&?"
+msgstr ""
+
+msgid "y"
+msgstr ""
+
+msgid "?"
+msgstr ""
+
+msgid "y - record this change"
+msgstr ""
+
+msgid "s"
+msgstr ""
+
+msgid "f"
+msgstr ""
+
+msgid "d"
+msgstr ""
+
+msgid "a"
+msgstr ""
+
+msgid "q"
+msgstr ""
+
+msgid "user quit"
+msgstr ""
+
+#, python-format
+msgid "examine changes to %s?"
+msgstr ""
+
+msgid " and "
+msgstr ""
+
+#, python-format
+msgid "record this change to %r?"
+msgstr ""
+
+#, python-format
+msgid "record change %d/%d to %r?"
+msgstr ""
+
+msgid ""
+"interactively select changes to commit\n"
+"\n"
+"    If a list of files is omitted, all changes reported by \"hg status\"\n"
+"    will be candidates for recording.\n"
+"\n"
+"    See 'hg help dates' for a list of formats valid for -d/--date.\n"
+"\n"
+"    You will be prompted for whether to record changes to each\n"
+"    modified file, and for files with multiple changes, for each\n"
+"    change to use. For each query, the following responses are\n"
+"    possible:\n"
+"\n"
+"    y - record this change\n"
+"    n - skip this change\n"
+"\n"
+"    s - skip remaining changes to this file\n"
+"    f - record remaining changes to this file\n"
+"\n"
+"    d - done, skip remaining changes and files\n"
+"    a - record all changes to all remaining files\n"
+"    q - quit, recording no changes\n"
+"\n"
+"    ? - display help"
+msgstr ""
+
+msgid "'mq' extension not loaded"
+msgstr ""
+
+msgid "running non-interactively, use commit instead"
+msgstr ""
+
+msgid "no changes to record\n"
+msgstr ""
+
+#, python-format
+msgid "backup %r as %r\n"
+msgstr ""
+
+msgid "applying patch\n"
+msgstr ""
+
+msgid "patch failed to apply"
+msgstr ""
+
+#, python-format
+msgid "restoring %r to %r\n"
+msgstr ""
+
+msgid "hg record [OPTION]... [FILE]..."
+msgstr ""
+
+msgid "hg qrecord [OPTION]... PATCH [FILE]..."
+msgstr ""
+
+msgid ""
+"create a new shared repository (experimental)\n"
+"\n"
+"    Initialize a new repository and working directory that shares its\n"
+"    history with another repository.\n"
+"\n"
+"    NOTE: actions that change history such as rollback or moving the\n"
+"    source may confuse sharers.\n"
+"    "
+msgstr ""
+
+msgid "do not create a working copy"
+msgstr ""
+
+msgid "[-U] SOURCE [DEST]"
+msgstr ""
+
+msgid ""
+"patch transplanting tool\n"
+"\n"
+"This extension allows you to transplant patches from another branch.\n"
+"\n"
+"Transplanted patches are recorded in .hg/transplant/transplants, as a\n"
+"map from a changeset hash to its hash in the source repository.\n"
+msgstr ""
+
+#, python-format
+msgid "skipping already applied revision %s\n"
+msgstr ""
+
+#, python-format
+msgid "skipping merge changeset %s:%s\n"
+msgstr ""
+
+#, python-format
+msgid "%s merged at %s\n"
+msgstr ""
+
+#, python-format
+msgid "%s transplanted to %s\n"
+msgstr ""
+
+#, python-format
+msgid "filtering %s\n"
+msgstr ""
+
+msgid "filter failed"
+msgstr ""
+
+msgid "can only omit patchfile if merging"
+msgstr ""
+
+#, python-format
+msgid "%s: empty changeset"
+msgstr ""
+
+msgid "Fix up the merge and run hg transplant --continue"
+msgstr ""
+
+#, python-format
+msgid "%s transplanted as %s\n"
+msgstr ""
+
+msgid "transplant log file is corrupt"
+msgstr ""
+
+#, python-format
+msgid "working dir not at transplant parent %s"
+msgstr ""
+
+msgid "commit failed"
+msgstr ""
+
+msgid "apply changeset? [ynmpcq?]:"
+msgstr ""
+
+msgid ""
+"transplant changesets from another branch\n"
+"\n"
+"    Selected changesets will be applied on top of the current working\n"
+"    directory with the log of the original changeset. If --log is\n"
+"    specified, log messages will have a comment appended of the form:\n"
+"\n"
+"    (transplanted from CHANGESETHASH)\n"
+"\n"
+"    You can rewrite the changelog message with the --filter option.\n"
+"    Its argument will be invoked with the current changelog message as\n"
+"    $1 and the patch as $2.\n"
+"\n"
+"    If --source/-s is specified, selects changesets from the named\n"
+"    repository. If --branch/-b is specified, selects changesets from\n"
+"    the branch holding the named revision, up to that revision. If\n"
+"    --all/-a is specified, all changesets on the branch will be\n"
+"    transplanted, otherwise you will be prompted to select the\n"
+"    changesets you want.\n"
+"\n"
+"    hg transplant --branch REVISION --all will rebase the selected\n"
+"    branch (up to the named revision) onto your current working\n"
+"    directory.\n"
+"\n"
+"    You can optionally mark selected transplanted changesets as merge\n"
+"    changesets. You will not be prompted to transplant any ancestors\n"
+"    of a merged transplant, and you can merge descendants of them\n"
+"    normally instead of transplanting them.\n"
+"\n"
+"    If no merges or revisions are provided, hg transplant will start\n"
+"    an interactive changeset browser.\n"
+"\n"
+"    If a changeset application fails, you can fix the merge by hand\n"
+"    and then resume where you left off by calling hg transplant\n"
+"    --continue/-c.\n"
+"    "
+msgstr ""
+
+msgid "--continue is incompatible with branch, all or merge"
+msgstr ""
+
+msgid "no source URL, branch tag or revision list provided"
+msgstr ""
+
+msgid "--all requires a branch revision"
+msgstr ""
+
+msgid "--all is incompatible with a revision list"
+msgstr ""
+
+msgid "no revision checked out"
+msgstr ""
+
+msgid "outstanding uncommitted merges"
+msgstr ""
+
+msgid "outstanding local changes"
+msgstr ""
+
+msgid "pull patches from REPOSITORY"
+msgstr ""
+
+msgid "pull patches from branch BRANCH"
+msgstr ""
+
+msgid "pull all changesets up to BRANCH"
+msgstr ""
+
+msgid "skip over REV"
+msgstr ""
+
+msgid "merge at REV"
+msgstr ""
+
+msgid "append transplant info to log message"
+msgstr ""
+
+msgid "continue last transplant session after repair"
+msgstr ""
+
+msgid "filter changesets through FILTER"
+msgstr ""
+
+msgid ""
+"hg transplant [-s REPOSITORY] [-b BRANCH [-a]] [-p REV] [-m REV] [REV]..."
+msgstr ""
+
+msgid ""
+"allow to use MBCS path with problematic encoding.\n"
+"\n"
+"Some MBCS encodings are not good for some path operations (i.e.\n"
+"splitting path, case conversion, etc.) with its encoded bytes. We call\n"
+"such a encoding (i.e. shift_jis and big5) as \"problematic encoding\".\n"
+"This extension can be used to fix the issue with those encodings by\n"
+"wrapping some functions to convert to Unicode string before path\n"
+"operation.\n"
+"\n"
+"This extension is useful for:\n"
+" * Japanese Windows users using shift_jis encoding.\n"
+" * Chinese Windows users using big5 encoding.\n"
+" * All users who use a repository with one of problematic encodings on\n"
+"   case-insensitive file system.\n"
+"\n"
+"This extension is not needed for:\n"
+" * Any user who use only ASCII chars in path.\n"
+" * Any user who do not use any of problematic encodings.\n"
+"\n"
+"Note that there are some limitations on using this extension:\n"
+" * You should use single encoding in one repository.\n"
+" * You should set same encoding for the repository by locale or\n"
+"   HGENCODING.\n"
+"\n"
+"To use this extension, enable the extension in .hg/hgrc or ~/.hgrc:\n"
+"\n"
+"  [extensions]\n"
+"  hgext.win32mbcs =\n"
+"\n"
+"Path encoding conversion are done between Unicode and\n"
+"encoding.encoding which is decided by Mercurial from current locale\n"
+"setting or HGENCODING.\n"
+"\n"
+msgstr ""
+
+#, python-format
+msgid "[win32mbcs] filename conversion fail with %s encoding\n"
+msgstr ""
+
+msgid "[win32mbcs] cannot activate on this platform.\n"
+msgstr ""
+
+#, python-format
+msgid "[win32mbcs] activated with encoding: %s\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"WARNING: %s already has %s line endings\n"
+"and does not need EOL conversion by the win32text plugin.\n"
+"Before your next commit, please reconsider your encode/decode settings in \n"
+"Mercurial.ini or %s.\n"
+msgstr ""
+
+#, python-format
+msgid "Attempt to commit or push text file(s) using %s line endings\n"
+msgstr ""
+
+#, python-format
+msgid "in %s: %s\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"\n"
+"To prevent this mistake in your local repository,\n"
+"add to Mercurial.ini or .hg/hgrc:\n"
+"\n"
+"[hooks]\n"
+"pretxncommit.%s = python:hgext.win32text.forbid%s\n"
+"\n"
+"and also consider adding:\n"
+"\n"
+"[extensions]\n"
+"hgext.win32text =\n"
+"[encode]\n"
+"** = %sencode:\n"
+"[decode]\n"
+"** = %sdecode:\n"
+msgstr ""
+
+msgid ""
+"zeroconf support for Mercurial repositories\n"
+"\n"
+"Zeroconf enabled repositories will be announced in a network without\n"
+"the need to configure a server or a service. They can be discovered\n"
+"without knowing their actual IP address.\n"
+"\n"
+"To use the zeroconf extension add the following entry to your hgrc\n"
+"file:\n"
+"\n"
+"[extensions]\n"
+"hgext.zeroconf =\n"
+"\n"
+"To allow other people to discover your repository using run \"hg serve\"\n"
+"in your repository.\n"
+"\n"
+" $ cd test\n"
+" $ hg serve\n"
+"\n"
+"You can discover zeroconf enabled repositories by running \"hg paths\".\n"
+"\n"
+" $ hg paths\n"
+" zc-test = http://example.com:8000/test\n"
+msgstr ""
+
+msgid "archive prefix contains illegal components"
+msgstr ""
+
+msgid "cannot give prefix when archiving to files"
+msgstr ""
+
+#, python-format
+msgid "unknown archive type '%s'"
+msgstr ""
+
+msgid "invalid changegroup"
+msgstr ""
+
+msgid "unknown parent"
+msgstr ""
+
+#, python-format
+msgid "integrity check failed on %s:%d"
+msgstr ""
+
+#, python-format
+msgid "%s: not a Mercurial bundle file"
+msgstr ""
+
+#, python-format
+msgid "%s: unknown bundle version"
+msgstr ""
+
+#, python-format
+msgid "%s: unknown bundle compression type"
+msgstr ""
+
+msgid "cannot create new bundle repository"
+msgstr ""
+
+#, python-format
+msgid "premature EOF reading chunk (got %d bytes, expected %d)"
+msgstr ""
+
+msgid "empty username"
+msgstr ""
+
+#, python-format
+msgid "username %s contains a newline"
+msgstr ""
+
+msgid "options --message and --logfile are mutually exclusive"
+msgstr ""
+
+#, python-format
+msgid "can't read commit message '%s': %s"
+msgstr ""
+
+msgid "limit must be a positive integer"
+msgstr ""
+
+msgid "limit must be positive"
+msgstr ""
+
+msgid "too many revisions specified"
+msgstr ""
+
+#, python-format
+msgid "invalid format spec '%%%s' in output filename"
+msgstr ""
+
+#, python-format
+msgid "adding %s\n"
+msgstr ""
+
+#, python-format
+msgid "removing %s\n"
+msgstr ""
+
+#, python-format
+msgid "recording removal of %s as rename to %s (%d%% similar)\n"
+msgstr ""
+
+#, python-format
+msgid "%s: not copying - file is not managed\n"
+msgstr ""
+
+#, python-format
+msgid "%s: not copying - file has been marked for remove\n"
+msgstr ""
+
+#, python-format
+msgid "%s: not overwriting - %s collides with %s\n"
+msgstr ""
+
+#, python-format
+msgid "%s: not overwriting - file exists\n"
+msgstr ""
+
+#, python-format
+msgid "%s: deleted in working copy\n"
+msgstr ""
+
+#, python-format
+msgid "%s: cannot copy - %s\n"
+msgstr ""
+
+#, python-format
+msgid "moving %s to %s\n"
+msgstr ""
+
+#, python-format
+msgid "copying %s to %s\n"
+msgstr ""
+
+#, python-format
+msgid "%s has not been committed yet, so no copy data will be stored for %s.\n"
+msgstr ""
+
+msgid "no source or destination specified"
+msgstr ""
+
+msgid "no destination specified"
+msgstr ""
+
+msgid "with multiple sources, destination must be an existing directory"
+msgstr ""
+
+#, python-format
+msgid "destination %s is not a directory"
+msgstr ""
+
+msgid "no files to copy"
+msgstr ""
+
+msgid "(consider using --after)\n"
+msgstr ""
+
+#, python-format
+msgid "changeset:   %d:%s\n"
+msgstr ""
+
+#, python-format
+msgid "branch:      %s\n"
+msgstr ""
+
+#, python-format
+msgid "tag:         %s\n"
+msgstr ""
+
+#, python-format
+msgid "parent:      %d:%s\n"
+msgstr ""
+
+#, python-format
+msgid "manifest:    %d:%s\n"
+msgstr ""
+
+#, python-format
+msgid "user:        %s\n"
+msgstr ""
+
+#, python-format
+msgid "date:        %s\n"
+msgstr ""
+
+msgid "files+:"
+msgstr ""
+
+msgid "files-:"
+msgstr ""
+
+msgid "files:"
+msgstr ""
+
+#, python-format
+msgid "files:       %s\n"
+msgstr ""
+
+#, python-format
+msgid "copies:      %s\n"
+msgstr ""
+
+#, python-format
+msgid "extra:       %s=%s\n"
+msgstr ""
+
+msgid "description:\n"
+msgstr ""
+
+#, python-format
+msgid "summary:     %s\n"
+msgstr ""
+
+#, python-format
+msgid "%s: no key named '%s'"
+msgstr ""
+
+#, python-format
+msgid "%s: %s"
+msgstr ""
+
+#, python-format
+msgid "Found revision %s from %s\n"
+msgstr ""
+
+msgid "revision matching date not found"
+msgstr ""
+
+#, python-format
+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 ""
+
+msgid "HG: Enter commit message.  Lines beginning with 'HG:' are removed."
+msgstr ""
+
+msgid "HG: Leave message empty to abort commit."
+msgstr ""
+
+#, python-format
+msgid "HG: user: %s"
+msgstr ""
+
+msgid "HG: branch merge"
+msgstr ""
+
+#, python-format
+msgid "HG: branch '%s'"
+msgstr ""
+
+#, python-format
+msgid "HG: added %s"
+msgstr ""
+
+#, python-format
+msgid "HG: changed %s"
+msgstr ""
+
+#, python-format
+msgid "HG: removed %s"
+msgstr ""
+
+msgid "HG: no files changed"
+msgstr ""
+
+msgid "empty commit message"
+msgstr ""
+
+msgid ""
+"add the specified files on the next commit\n"
+"\n"
+"    Schedule files to be version controlled and added to the\n"
+"    repository.\n"
+"\n"
+"    The files will be added to the repository at the next commit. To\n"
+"    undo an add before that, see hg revert.\n"
+"\n"
+"    If no names are given, add all files to the repository.\n"
+"    "
+msgstr ""
+"新增下次要 commit 的檔案\n"
+"\n"
+"    新增要納入版本控制並加到 repository 的檔案。\n"
+"\n"
+"    這些檔案將於下次 commit 時被加到 repository。\n"
+"    若想要回到新增檔案前的狀態,請參閱 hg revert 命令。\n"
+"\n"
+"    如果沒有指定檔案,則會將所有的檔案都標示為加到 repository。\n"
+"    "
+
+msgid ""
+"add all new files, delete all missing files\n"
+"\n"
+"    Add all new files and remove all missing files from the\n"
+"    repository.\n"
+"\n"
+"    New files are ignored if they match any of the patterns in\n"
+"    .hgignore. As with add, these changes take effect at the next\n"
+"    commit.\n"
+"\n"
+"    Use the -s/--similarity option to detect renamed files. With a\n"
+"    parameter > 0, this compares every removed file with every added\n"
+"    file and records those similar enough as renames. This option\n"
+"    takes a percentage between 0 (disabled) and 100 (files must be\n"
+"    identical) as its parameter. Detecting renamed files this way can\n"
+"    be expensive.\n"
+"    "
+msgstr ""
+"新增所有未受版本控制的檔案,並刪除所有消失的檔案。\n"
+"\n"
+"    新增所有未加到 repository 的檔案,並移除已加到 repository\n"
+"    卻消失的檔案。\n"
+"\n"
+"    如果新的檔案中檔名有符合任一存在於 .hgignore 的樣式,\n"
+"    則該檔將被忽略。如同 add 命令,這些變更將於下次提交時發生效用。\n"
+"\n"
+"    可使用 -s/--similarity 選項去偵測更名的檔案。後面接著的是一個\n"
+"    大於 0 的參數,可用來比對每個被新增或移除的檔案,並試圖找出其\n"
+"    更名的可能性。此選項需要指定一個介於 0 (不使用) 至\n"
+"    100 (檔案必須是同一個) 的參數。偵測更名檔案的動作將需要\n"
+"    一點時間。\n"
+"    "
+
+msgid "similarity must be a number"
+msgstr "similarity 參數必須是數字"
+
+msgid "similarity must be between 0 and 100"
+msgstr "similarity 參數必須介於 0 至 100"
+
+msgid ""
+"show changeset information by line for each file\n"
+"\n"
+"    List changes in files, showing the revision id responsible for\n"
+"    each line\n"
+"\n"
+"    This command is useful for discovering when a change was made and\n"
+"    by whom.\n"
+"\n"
+"    Without the -a/--text option, annotate will avoid processing files\n"
+"    it detects as binary. With -a, annotate will annotate the file\n"
+"    anyway, although the results will probably be neither useful\n"
+"    nor desirable.\n"
+"    "
+msgstr ""
+"顯示每個檔案中每一行 changeset 的資訊\n"
+"\n"
+"    List changes in files, showing the revision id responsible for\n"
+"    each line\n"
+"\n"
+"    This command is useful for discovering when a change was made and\n"
+"    by whom.\n"
+"\n"
+"    Without the -a/--text option, annotate will avoid processing files\n"
+"    it detects as binary. With -a, annotate will annotate the file\n"
+"    anyway, although the results will probably be neither useful\n"
+"    nor desirable.\n"
+"    "
+
+msgid "at least one filename or pattern is required"
+msgstr ""
+
+msgid "at least one of -n/-c is required for -l"
+msgstr ""
+
+#, python-format
+msgid "%s: binary file\n"
+msgstr ""
+
+msgid ""
+"create an unversioned archive of a repository revision\n"
+"\n"
+"    By default, the revision used is the parent of the working\n"
+"    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"
+"\n"
+"    The exact name of the destination archive or directory is given\n"
+"    using a format string; see 'hg help export' for details.\n"
+"\n"
+"    Each member added to an archive file has a directory prefix\n"
+"    prepended. Use -p/--prefix to specify a format string for the\n"
+"    prefix. The default is the basename of the archive, with suffixes\n"
+"    removed.\n"
+"    "
+msgstr ""
+"建立一個沒有版本控制的版本封存\n"
+"\n"
+"    By default, the revision used is the parent of the working\n"
+"    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"
+"\n"
+"    The exact name of the destination archive or directory is given\n"
+"    using a format string; see 'hg help export' for details.\n"
+"\n"
+"    Each member added to an archive file has a directory prefix\n"
+"    prepended. Use -p/--prefix to specify a format string for the\n"
+"    prefix. The default is the basename of the archive, with suffixes\n"
+"    removed.\n"
+"    "
+
+msgid "no working directory: please specify a revision"
+msgstr ""
+
+msgid "repository root cannot be destination"
+msgstr ""
+
+msgid "cannot archive plain files to stdout"
+msgstr ""
+
+msgid ""
+"reverse effect of earlier changeset\n"
+"\n"
+"    Commit the backed out changes as a new changeset. The new\n"
+"    changeset is a child of the backed out changeset.\n"
+"\n"
+"    If you backout a changeset other than the tip, a new head is\n"
+"    created. This head will be the new tip and you should merge this\n"
+"    backout changeset with another head.\n"
+"\n"
+"    The --merge option remembers the parent of the working directory\n"
+"    before starting the backout, then merges the new head with that\n"
+"    changeset afterwards. This saves you from doing the merge by hand.\n"
+"    The result of this merge is not committed, as with a normal merge.\n"
+"\n"
+"    See 'hg help dates' for a list of formats valid for -d/--date.\n"
+"    "
+msgstr ""
+"回復先前 changeset 所作的變更\n"
+"\n"
+"    Commit the backed out changes as a new changeset. The new\n"
+"    changeset is a child of the backed out changeset.\n"
+"\n"
+"    If you backout a changeset other than the tip, a new head is\n"
+"    created. This head will be the new tip and you should merge this\n"
+"    backout changeset with another head.\n"
+"\n"
+"    The --merge option remembers the parent of the working directory\n"
+"    before starting the backout, then merges the new head with that\n"
+"    changeset afterwards. This saves you from doing the merge by hand.\n"
+"    The result of this merge is not committed, as with a normal merge.\n"
+"\n"
+"    See 'hg help dates' for a list of formats valid for -d/--date.\n"
+"    "
+
+msgid "please specify just one revision"
+msgstr ""
+
+msgid "please specify a revision to backout"
+msgstr ""
+
+msgid "cannot backout change on a different branch"
+msgstr ""
+
+msgid "cannot backout a change with no parents"
+msgstr ""
+
+msgid "cannot backout a merge changeset without --parent"
+msgstr ""
+
+#, python-format
+msgid "%s is not a parent of %s"
+msgstr ""
+
+msgid "cannot use --parent on non-merge changeset"
+msgstr ""
+
+#, python-format
+msgid "Backed out changeset %s"
+msgstr ""
+
+#, python-format
+msgid "changeset %s backs out changeset %s\n"
+msgstr ""
+
+#, python-format
+msgid "merging with changeset %s\n"
+msgstr ""
+
+msgid "the backout changeset is a new head - do not forget to merge\n"
+msgstr ""
+
+msgid "(use \"backout --merge\" if you want to auto-merge)\n"
+msgstr ""
+
+msgid ""
+"subdivision search of changesets\n"
+"\n"
+"    This command helps to find changesets which introduce problems. To\n"
+"    use, mark the earliest changeset you know exhibits the problem as\n"
+"    bad, then mark the latest changeset which is free from the problem\n"
+"    as good. Bisect will update your working directory to a revision\n"
+"    for testing (unless the -U/--noupdate option is specified). Once\n"
+"    you have performed tests, mark the working directory as good or\n"
+"    bad, and bisect will either update to another candidate changeset\n"
+"    or announce that it has found the bad revision.\n"
+"\n"
+"    As a shortcut, you can also use the revision argument to mark a\n"
+"    revision as good or bad without checking it out first.\n"
+"\n"
+"    If you supply a command, it will be used for automatic bisection.\n"
+"    Its exit status will be used to mark revisions as good or bad:\n"
+"    status 0 means good, 125 means to skip the revision, 127\n"
+"    (command not found) will abort the bisection, and any other\n"
+"    non-zero exit status means the revision is bad.\n"
+"    "
+msgstr ""
+"對 changesets 作二分法搜尋\n"
+"\n"
+"    This command helps to find changesets which introduce problems. To\n"
+"    use, mark the earliest changeset you know exhibits the problem as\n"
+"    bad, then mark the latest changeset which is free from the problem\n"
+"    as good. Bisect will update your working directory to a revision\n"
+"    for testing (unless the -U/--noupdate option is specified). Once\n"
+"    you have performed tests, mark the working directory as good or\n"
+"    bad, and bisect will either update to another candidate changeset\n"
+"    or announce that it has found the bad revision.\n"
+"\n"
+"    As a shortcut, you can also use the revision argument to mark a\n"
+"    revision as good or bad without checking it out first.\n"
+"\n"
+"    If you supply a command, it will be used for automatic bisection.\n"
+"    Its exit status will be used to mark revisions as good or bad:\n"
+"    status 0 means good, 125 means to skip the revision, 127\n"
+"    (command not found) will abort the bisection, and any other\n"
+"    non-zero exit status means the revision is bad.\n"
+"    "
+
+msgid "The first good revision is:\n"
+msgstr ""
+
+msgid "The first bad revision is:\n"
+msgstr ""
+
+msgid "Due to skipped revisions, the first good revision could be any of:\n"
+msgstr ""
+
+msgid "Due to skipped revisions, the first bad revision could be any of:\n"
+msgstr ""
+
+msgid "cannot bisect (no known good revisions)"
+msgstr ""
+
+msgid "cannot bisect (no known bad revisions)"
+msgstr ""
+
+msgid "(use of 'hg bisect <cmd>' is deprecated)\n"
+msgstr ""
+
+msgid "incompatible arguments"
+msgstr ""
+
+#, python-format
+msgid "cannot find executable: %s"
+msgstr ""
+
+#, python-format
+msgid "failed to execute %s"
+msgstr ""
+
+#, python-format
+msgid "%s killed"
+msgstr ""
+
+#, python-format
+msgid "Changeset %d:%s: %s\n"
+msgstr ""
+
+#, python-format
+msgid "Testing changeset %s:%s (%s changesets remaining, ~%s tests)\n"
+msgstr ""
+
+msgid ""
+"set or show the current branch name\n"
+"\n"
+"    With no argument, show the current branch name. With one argument,\n"
+"    set the working directory branch name (the branch will not exist\n"
+"    in the repository until the next commit). Standard practice\n"
+"    recommends that primary development take place on the 'default'\n"
+"    branch.\n"
+"\n"
+"    Unless -f/--force is specified, branch will not let you set a\n"
+"    branch name that already exists, even if it's inactive.\n"
+"\n"
+"    Use -C/--clean to reset the working directory branch to that of\n"
+"    the parent of the working directory, negating a previous branch\n"
+"    change.\n"
+"\n"
+"    Use the command 'hg update' to switch to an existing branch.\n"
+"    "
+msgstr ""
+"設定或顯示目前的 branch 名稱\n"
+"\n"
+"    With no argument, show the current branch name. With one argument,\n"
+"    set the working directory branch name (the branch will not exist\n"
+"    in the repository until the next commit). Standard practice\n"
+"    recommends that primary development take place on the 'default'\n"
+"    branch.\n"
+"\n"
+"    Unless -f/--force is specified, branch will not let you set a\n"
+"    branch name that already exists, even if it's inactive.\n"
+"\n"
+"    Use -C/--clean to reset the working directory branch to that of\n"
+"    the parent of the working directory, negating a previous branch\n"
+"    change.\n"
+"\n"
+"    Use the command 'hg update' to switch to an existing branch.\n"
+"    "
+
+#, python-format
+msgid "reset working directory to branch %s\n"
+msgstr ""
+
+msgid "a branch of the same name already exists (use --force to override)"
+msgstr ""
+
+#, python-format
+msgid "marked working directory as branch %s\n"
+msgstr ""
+
+msgid ""
+"list repository named branches\n"
+"\n"
+"    List the repository's named branches, indicating which ones are\n"
+"    inactive. If active is specified, only show active branches.\n"
+"\n"
+"    A branch is considered active if it contains repository heads.\n"
+"\n"
+"    Use the command 'hg update' to switch to an existing branch.\n"
+"    "
+msgstr ""
+"顯示 repository 的 named branches\n"
+"\n"
+"    List the repository's named branches, indicating which ones are\n"
+"    inactive. If active is specified, only show active branches.\n"
+"\n"
+"    A branch is considered active if it contains repository heads.\n"
+"\n"
+"    Use the command 'hg update' to switch to an existing branch.\n"
+"    "
+
+msgid ""
+"create a changegroup file\n"
+"\n"
+"    Generate a compressed changegroup file collecting changesets not\n"
+"    known to be in another repository.\n"
+"\n"
+"    If no destination repository is specified the destination is\n"
+"    assumed to have all the nodes specified by one or more --base\n"
+"    parameters. To create a bundle containing all changesets, use\n"
+"    -a/--all (or --base null). To change the compression method\n"
+"    applied, use the -t/--type option (by default, bundles are\n"
+"    compressed using bz2).\n"
+"\n"
+"    The bundle file can then be transferred using conventional means\n"
+"    and applied to another repository with the unbundle or pull\n"
+"    command. This is useful when direct push and pull are not\n"
+"    available or when exporting an entire repository is undesirable.\n"
+"\n"
+"    Applying bundles preserves all changeset contents including\n"
+"    permissions, copy/rename information, and revision history.\n"
+"    "
+msgstr ""
+"建立一個 changegroup 檔案\n"
+"\n"
+"    Generate a compressed changegroup file collecting changesets not\n"
+"    known to be in another repository.\n"
+"\n"
+"    If no destination repository is specified the destination is\n"
+"    assumed to have all the nodes specified by one or more --base\n"
+"    parameters. To create a bundle containing all changesets, use\n"
+"    -a/--all (or --base null). To change the compression method\n"
+"    applied, use the -t/--type option (by default, bundles are\n"
+"    compressed using bz2).\n"
+"\n"
+"    The bundle file can then be transferred using conventional means\n"
+"    and applied to another repository with the unbundle or pull\n"
+"    command. This is useful when direct push and pull are not\n"
+"    available or when exporting an entire repository is undesirable.\n"
+"\n"
+"    Applying bundles preserves all changeset contents including\n"
+"    permissions, copy/rename information, and revision history.\n"
+"    "
+
+msgid "--base is incompatible with specifying a destination"
+msgstr ""
+
+msgid "unknown bundle type specified with --type"
+msgstr ""
+
+msgid ""
+"output the current or given revision of files\n"
+"\n"
+"    Print the specified files as they were at the given revision. If\n"
+"    no revision is given, the parent of the working directory is used,\n"
+"    or tip if no revision is checked out.\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 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"
+"    "
+msgstr ""
+"輸出目前或是特定 revision 的檔案內容\n"
+"\n"
+"    Print the specified files as they were at the given revision. If\n"
+"    no revision is given, the parent of the working directory is used,\n"
+"    or tip if no revision is checked out.\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 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"
+"    "
+
+msgid ""
+"make a copy of an existing repository\n"
+"\n"
+"    Create a copy of an existing repository in a new directory.\n"
+"\n"
+"    If no destination directory name is specified, it defaults to the\n"
+"    basename of the source.\n"
+"\n"
+"    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"
+"    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"
+"    filesystems, such as AFS, implement hardlinking incorrectly, but\n"
+"    do not report errors. In these cases, use the --pull option to\n"
+"    avoid hardlinking.\n"
+"\n"
+"    In some cases, you can clone repositories and checked out files\n"
+"    using full hardlinks with\n"
+"\n"
+"      $ cp -al REPO REPOCLONE\n"
+"\n"
+"    This is the fastest way to clone, but it is not always safe. The\n"
+"    operation is not atomic (making sure REPO is not modified during\n"
+"    the operation is up to you) and you have to make sure your editor\n"
+"    breaks hardlinks (Emacs and most Linux Kernel tools do so). Also,\n"
+"    this is not compatible with certain extensions that place their\n"
+"    metadata under the .hg directory, such as mq.\n"
+"\n"
+"    "
+msgstr ""
+"對已存在的 repository 複製一份\n"
+"\n"
+"    Create a copy of an existing repository in a new directory.\n"
+"\n"
+"    If no destination directory name is specified, it defaults to the\n"
+"    basename of the source.\n"
+"\n"
+"    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"
+"    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"
+"    filesystems, such as AFS, implement hardlinking incorrectly, but\n"
+"    do not report errors. In these cases, use the --pull option to\n"
+"    avoid hardlinking.\n"
+"\n"
+"    In some cases, you can clone repositories and checked out files\n"
+"    using full hardlinks with\n"
+"\n"
+"      $ cp -al REPO REPOCLONE\n"
+"\n"
+"    This is the fastest way to clone, but it is not always safe. The\n"
+"    operation is not atomic (making sure REPO is not modified during\n"
+"    the operation is up to you) and you have to make sure your editor\n"
+"    breaks hardlinks (Emacs and most Linux Kernel tools do so). Also,\n"
+"    this is not compatible with certain extensions that place their\n"
+"    metadata under the .hg directory, such as mq.\n"
+"\n"
+"    "
+
+msgid ""
+"commit the specified files or all outstanding changes\n"
+"\n"
+"    Commit changes to the given files into the repository. Unlike a\n"
+"    centralized RCS, this operation is a local operation. See hg push\n"
+"    for a way to actively distribute your changes.\n"
+"\n"
+"    If a list of files is omitted, all changes reported by \"hg status\"\n"
+"    will be committed.\n"
+"\n"
+"    If you are committing the result of a merge, do not provide any\n"
+"    filenames or -I/-X filters.\n"
+"\n"
+"    If no commit message is specified, the configured editor is\n"
+"    started to prompt you for a message.\n"
+"\n"
+"    See 'hg help dates' for a list of formats valid for -d/--date.\n"
+"    "
+msgstr ""
+"將指定的檔案或是目前的變更 commit\n"
+"\n"
+"    Commit changes to the given files into the repository. Unlike a\n"
+"    centralized RCS, this operation is a local operation. See hg push\n"
+"    for a way to actively distribute your changes.\n"
+"\n"
+"    If a list of files is omitted, all changes reported by \"hg status\"\n"
+"    will be committed.\n"
+"\n"
+"    If you are committing the result of a merge, do not provide any\n"
+"    filenames or -I/-X filters.\n"
+"\n"
+"    If no commit message is specified, the configured editor is\n"
+"    started to prompt you for a message.\n"
+"\n"
+"    See 'hg help dates' for a list of formats valid for -d/--date.\n"
+"    "
+
+msgid "created new head\n"
+msgstr ""
+
+#, python-format
+msgid "committed changeset %d:%s\n"
+msgstr ""
+
+msgid ""
+"mark files as copied for the next commit\n"
+"\n"
+"    Mark dest as having copies of source files. If dest is a\n"
+"    directory, copies are put in that directory. If dest is a file,\n"
+"    the source must be a single file.\n"
+"\n"
+"    By default, this command copies the contents of files as they\n"
+"    exist in the working directory. If invoked with -A/--after, the\n"
+"    operation is recorded, but no copying is performed.\n"
+"\n"
+"    This command takes effect with the next commit. To undo a copy\n"
+"    before that, see hg revert.\n"
+"    "
+msgstr ""
+"將檔案標示為 copied 並於下次 commit\n"
+"\n"
+"    Mark dest as having copies of source files. If dest is a\n"
+"    directory, copies are put in that directory. If dest is a file,\n"
+"    the source must be a single file.\n"
+"\n"
+"    By default, this command copies the contents of files as they\n"
+"    exist in the working directory. If invoked with -A/--after, the\n"
+"    operation is recorded, but no copying is performed.\n"
+"\n"
+"    This command takes effect with the next commit. To undo a copy\n"
+"    before that, see hg revert.\n"
+"    "
+
+msgid "find the ancestor revision of two revisions in a given index"
+msgstr ""
+
+msgid "There is no Mercurial repository here (.hg not found)"
+msgstr ""
+
+msgid "either two or three arguments required"
+msgstr ""
+
+msgid "returns the completion list associated with the given command"
+msgstr ""
+
+msgid "rebuild the dirstate as it would look like for the given revision"
+msgstr ""
+
+msgid "validate the correctness of the current dirstate"
+msgstr ""
+
+#, python-format
+msgid "%s in state %s, but not in manifest1\n"
+msgstr ""
+
+#, python-format
+msgid "%s in state %s, but also in manifest1\n"
+msgstr ""
+
+#, python-format
+msgid "%s in state %s, but not in either manifest\n"
+msgstr ""
+
+#, python-format
+msgid "%s in manifest1, but listed as state %s"
+msgstr ""
+
+msgid ".hg/dirstate inconsistent with current parent's manifest"
+msgstr ""
+
+msgid ""
+"show combined config settings from all hgrc files\n"
+"\n"
+"    With no arguments, print names and values of all config items.\n"
+"\n"
+"    With one argument of the form section.name, print just the value\n"
+"    of that config item.\n"
+"\n"
+"    With multiple arguments, print names and values of all config\n"
+"    items with matching section names.\n"
+"\n"
+"    With --debug, the source (filename and line number) is printed\n"
+"    for each config item.\n"
+"    "
+msgstr ""
+"顯示合併自所有 hgrc 檔案內容的設定值\n"
+"\n"
+"    With no arguments, print names and values of all config items.\n"
+"\n"
+"    With one argument of the form section.name, print just the value\n"
+"    of that config item.\n"
+"\n"
+"    With multiple arguments, print names and values of all config\n"
+"    items with matching section names.\n"
+"\n"
+"    With --debug, the source (filename and line number) is printed\n"
+"    for each config item.\n"
+"    "
+
+msgid "only one config item permitted"
+msgstr ""
+
+msgid ""
+"manually set the parents of the current working directory\n"
+"\n"
+"    This is useful for writing repository conversion tools, but should\n"
+"    be used with care.\n"
+"    "
+msgstr ""
+
+msgid "show the contents of the current dirstate"
+msgstr ""
+
+#, python-format
+msgid "copy: %s -> %s\n"
+msgstr ""
+
+msgid "dump the contents of a data file revision"
+msgstr ""
+
+#, python-format
+msgid "invalid revision identifier %s"
+msgstr ""
+
+msgid "parse and display a date"
+msgstr ""
+
+msgid "dump the contents of an index file"
+msgstr ""
+
+msgid "dump an index DAG as a graphviz dot file"
+msgstr ""
+
+msgid "test Mercurial installation"
+msgstr ""
+
+#, python-format
+msgid "Checking encoding (%s)...\n"
+msgstr ""
+
+msgid " (check that your locale is properly set)\n"
+msgstr ""
+
+msgid "Checking extensions...\n"
+msgstr ""
+
+msgid " One or more extensions could not be found"
+msgstr ""
+
+msgid " (check that you compiled the extensions)\n"
+msgstr ""
+
+msgid "Checking templates...\n"
+msgstr ""
+
+msgid " (templates seem to have been installed incorrectly)\n"
+msgstr ""
+
+msgid "Checking patch...\n"
+msgstr ""
+
+msgid " patch call failed:\n"
+msgstr ""
+
+msgid " unexpected patch output!\n"
+msgstr ""
+
+msgid " patch test failed!\n"
+msgstr ""
+
+msgid ""
+" (Current patch tool may be incompatible with patch, or misconfigured. "
+"Please check your .hgrc file)\n"
+msgstr ""
+
+msgid ""
+" Internal patcher failure, please report this error to http://www.selenic."
+"com/mercurial/bts\n"
+msgstr ""
+
+msgid "Checking commit editor...\n"
+msgstr ""
+
+msgid " No commit editor set and can't find vi in PATH\n"
+msgstr ""
+
+msgid " (specify a commit editor in your .hgrc file)\n"
+msgstr ""
+
+#, python-format
+msgid " Can't find editor '%s' in PATH\n"
+msgstr ""
+
+msgid "Checking username...\n"
+msgstr ""
+
+msgid " (specify a username in your .hgrc file)\n"
+msgstr ""
+
+msgid "No problems detected\n"
+msgstr ""
+
+#, python-format
+msgid "%s problems detected, please check your install!\n"
+msgstr ""
+
+msgid "dump rename information"
+msgstr ""
+
+#, python-format
+msgid "%s renamed from %s:%s\n"
+msgstr ""
+
+#, python-format
+msgid "%s not renamed\n"
+msgstr ""
+
+msgid "show how files match on given patterns"
+msgstr ""
+
+msgid ""
+"diff repository (or selected files)\n"
+"\n"
+"    Show differences between revisions for the specified files.\n"
+"\n"
+"    Differences between files are shown using the unified diff format.\n"
+"\n"
+"    NOTE: diff may generate unexpected results for merges, as it will\n"
+"    default to comparing against the working directory's first parent\n"
+"    changeset if no revisions are specified.\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.\n"
+"\n"
+"    Without the -a/--text option, diff will avoid generating diffs of\n"
+"    files it detects as binary. With -a, diff will generate a diff\n"
+"    anyway, probably with undesirable results.\n"
+"\n"
+"    Use the -g/--git option to generate diffs in the git extended diff\n"
+"    format. For more information, read 'hg help diffs'.\n"
+"    "
+msgstr ""
+"diff repository (或是所選擇的檔案)\n"
+"\n"
+"    Show differences between revisions for the specified files.\n"
+"\n"
+"    Differences between files are shown using the unified diff format.\n"
+"\n"
+"    NOTE: diff may generate unexpected results for merges, as it will\n"
+"    default to comparing against the working directory's first parent\n"
+"    changeset if no revisions are specified.\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.\n"
+"\n"
+"    Without the -a/--text option, diff will avoid generating diffs of\n"
+"    files it detects as binary. With -a, diff will generate a diff\n"
+"    anyway, probably with undesirable results.\n"
+"\n"
+"    Use the -g/--git option to generate diffs in the git extended diff\n"
+"    format. For more information, read 'hg help diffs'.\n"
+"    "
+
+msgid ""
+"dump the header and diffs for one or more changesets\n"
+"\n"
+"    Print the changeset header and diffs for one or more revisions.\n"
+"\n"
+"    The information shown in the changeset header is: author,\n"
+"    changeset hash, parent(s) and commit comment.\n"
+"\n"
+"    NOTE: export may generate unexpected diff output for merge\n"
+"    changesets, as it will compare the merge changeset against its\n"
+"    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"
+"\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"
+"    diff anyway, probably with undesirable results.\n"
+"\n"
+"    Use the -g/--git option to generate diffs in the git extended diff\n"
+"    format. See 'hg help diffs' for more information.\n"
+"\n"
+"    With the --switch-parent option, the diff will be against the\n"
+"    second parent. It can be useful to review a merge.\n"
+"    "
+msgstr ""
+"將一或多個 changesets 的 header 以及 diffs dump 出來\n"
+"\n"
+"    Print the changeset header and diffs for one or more revisions.\n"
+"\n"
+"    The information shown in the changeset header is: author,\n"
+"    changeset hash, parent(s) and commit comment.\n"
+"\n"
+"    NOTE: export may generate unexpected diff output for merge\n"
+"    changesets, as it will compare the merge changeset against its\n"
+"    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"
+"\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"
+"    diff anyway, probably with undesirable results.\n"
+"\n"
+"    Use the -g/--git option to generate diffs in the git extended diff\n"
+"    format. See 'hg help diffs' for more information.\n"
+"\n"
+"    With the --switch-parent option, the diff will be against the\n"
+"    second parent. It can be useful to review a merge.\n"
+"    "
+
+msgid "export requires at least one changeset"
+msgstr ""
+
+msgid "exporting patches:\n"
+msgstr ""
+
+msgid "exporting patch:\n"
+msgstr ""
+
+msgid ""
+"search for a pattern in specified files and revisions\n"
+"\n"
+"    Search revisions of files for a regular expression.\n"
+"\n"
+"    This command behaves differently than Unix grep. It only accepts\n"
+"    Python/Perl regexps. It searches repository history, not the\n"
+"    working directory. It always prints the revision number in which a\n"
+"    match appears.\n"
+"\n"
+"    By default, grep only prints output for the first revision of a\n"
+"    file in which it finds a match. To get it to print every revision\n"
+"    that contains a change in match status (\"-\" for a match that\n"
+"    becomes a non-match, or \"+\" for a non-match that becomes a match),\n"
+"    use the --all flag.\n"
+"    "
+msgstr ""
+"從指定的檔案或 revisions 搜尋樣式\n"
+"\n"
+"    Search revisions of files for a regular expression.\n"
+"\n"
+"    This command behaves differently than Unix grep. It only accepts\n"
+"    Python/Perl regexps. It searches repository history, not the\n"
+"    working directory. It always prints the revision number in which a\n"
+"    match appears.\n"
+"\n"
+"    By default, grep only prints output for the first revision of a\n"
+"    file in which it finds a match. To get it to print every revision\n"
+"    that contains a change in match status (\"-\" for a match that\n"
+"    becomes a non-match, or \"+\" for a non-match that becomes a match),\n"
+"    use the --all flag.\n"
+"    "
+
+#, python-format
+msgid "grep: invalid match pattern: %s\n"
+msgstr ""
+
+msgid ""
+"show current repository heads or show branch heads\n"
+"\n"
+"    With no arguments, show all repository head changesets.\n"
+"\n"
+"    Repository \"heads\" are changesets that don't have child\n"
+"    changesets. They are where development generally takes place and\n"
+"    are the usual targets for update and merge operations.\n"
+"\n"
+"    If one or more REV is given, the \"branch heads\" will be shown for\n"
+"    the named branch associated with that revision. The name of the\n"
+"    branch is called the revision's branch tag.\n"
+"\n"
+"    Branch heads are revisions on a given named branch that do not have\n"
+"    any children on the same branch. A branch head could be a true head\n"
+"    or it could be the last changeset on a branch before a new branch\n"
+"    was created. If none of the branch heads are true heads, the branch\n"
+"    is considered inactive.\n"
+"\n"
+"    If STARTREV is specified only those heads (or branch heads) that\n"
+"    are descendants of STARTREV will be displayed.\n"
+"    "
+msgstr ""
+"顯示目前的 repository heads 或是 branch heads\n"
+"\n"
+"    With no arguments, show all repository head changesets.\n"
+"\n"
+"    Repository \"heads\" are changesets that don't have child\n"
+"    changesets. They are where development generally takes place and\n"
+"    are the usual targets for update and merge operations.\n"
+"\n"
+"    If one or more REV is given, the \"branch heads\" will be shown for\n"
+"    the named branch associated with that revision. The name of the\n"
+"    branch is called the revision's branch tag.\n"
+"\n"
+"    Branch heads are revisions on a given named branch that do not have\n"
+"    any children on the same branch. A branch head could be a true head\n"
+"    or it could be the last changeset on a branch before a new branch\n"
+"    was created. If none of the branch heads are true heads, the branch\n"
+"    is considered inactive.\n"
+"\n"
+"    If STARTREV is specified only those heads (or branch heads) that\n"
+"    are descendants of STARTREV will be displayed.\n"
+"    "
+
+#, python-format
+msgid "no open branch heads on branch %s\n"
+msgstr ""
+
+#, python-format
+msgid "no changes on branch %s containing %s are reachable from %s\n"
+msgstr ""
+
+#, python-format
+msgid "no changes on branch %s are reachable from %s\n"
+msgstr ""
+
+msgid ""
+"show help for a given topic or a help overview\n"
+"\n"
+"    With no arguments, print a list of commands with short help messages.\n"
+"\n"
+"    Given a topic, extension, or command name, print help for that\n"
+"    topic."
+msgstr ""
+"顯示特定主題的 help 說明或是 help overview\n"
+"\n"
+"    With no arguments, print a list of commands with short help messages.\n"
+"\n"
+"    Given a topic, extension, or command name, print help for that\n"
+"    topic."
+
+msgid "global options:"
+msgstr "全域選項:"
+
+msgid "use \"hg help\" for the full list of commands"
+msgstr ""
+
+msgid "use \"hg help\" for the full list of commands or \"hg -v\" for details"
+msgstr ""
+
+#, python-format
+msgid "use \"hg -v help%s\" to show aliases and global options"
+msgstr "使用 \"hg -v help%s\" 以顯示別名以及全域選項"
+
+#, python-format
+msgid "use \"hg -v help %s\" to show global options"
+msgstr "使用 \"hg -v help %s\" 以顯示全域選項"
+
+msgid ""
+"list of commands:\n"
+"\n"
+msgstr ""
+"命令列表:\n"
+"\n"
+
+#, python-format
+msgid ""
+"\n"
+"aliases: %s\n"
+msgstr ""
+"\n"
+"別名: %s\n"
+
+msgid "(no help text available)"
+msgstr "(沒有可用的說明文字)"
+
+msgid "options:\n"
+msgstr "選項:\n"
+
+msgid "no commands defined\n"
+msgstr "沒有定義的命令\n"
+
+msgid ""
+"\n"
+"enabled extensions:\n"
+"\n"
+msgstr ""
+"\n"
+"已啟用的擴充套件:\n"
+"\n"
+
+#, python-format
+msgid " %s   %s\n"
+msgstr ""
+
+msgid "no help text available"
+msgstr "沒有可用的說明文字"
+
+#, python-format
+msgid "%s extension - %s\n"
+msgstr "%s 擴充套件 - %s\n"
+
+msgid "Mercurial Distributed SCM\n"
+msgstr "Mercurial 分散式版本控制系統\n"
+
+msgid ""
+"basic commands:\n"
+"\n"
+msgstr ""
+"基本命令:\n"
+"\n"
+
+msgid ""
+"\n"
+"additional help topics:\n"
+"\n"
+msgstr ""
+"\n"
+"額外的說明主題:\n"
+"\n"
+
+msgid ""
+"identify the working copy or specified revision\n"
+"\n"
+"    With no revision, print a summary of the current state of the\n"
+"    repository.\n"
+"\n"
+"    Specifying a path to a repository root or Mercurial bundle will\n"
+"    cause lookup to operate on that repository/bundle.\n"
+"\n"
+"    This summary identifies the repository state using one or two\n"
+"    parent hash identifiers, followed by a \"+\" if there are\n"
+"    uncommitted changes in the working directory, a list of tags for\n"
+"    this revision and a branch name for non-default branches.\n"
+"    "
+msgstr ""
+"識別 working copy 或指定的 revision 完整性\n"
+"\n"
+"    With no revision, print a summary of the current state of the\n"
+"    repository.\n"
+"\n"
+"    Specifying a path to a repository root or Mercurial bundle will\n"
+"    cause lookup to operate on that repository/bundle.\n"
+"\n"
+"    This summary identifies the repository state using one or two\n"
+"    parent hash identifiers, followed by a \"+\" if there are\n"
+"    uncommitted changes in the working directory, a list of tags for\n"
+"    this revision and a branch name for non-default branches.\n"
+"    "
+
+msgid ""
+"import an ordered set of patches\n"
+"\n"
+"    Import a list of patches and commit them individually.\n"
+"\n"
+"    If there are outstanding changes in the working directory, import\n"
+"    will abort unless given the -f/--force flag.\n"
+"\n"
+"    You can import a patch straight from a mail message. Even patches\n"
+"    as attachments work (to use the body part, it must have type\n"
+"    text/plain or text/x-patch). From and Subject headers of email\n"
+"    message are used as default committer and commit message. All\n"
+"    text/plain body parts before first diff are added to commit\n"
+"    message.\n"
+"\n"
+"    If the imported patch was generated by hg export, user and\n"
+"    description from patch override values from message headers and\n"
+"    body. Values given on command line with -m/--message and -u/--user\n"
+"    override these.\n"
+"\n"
+"    If --exact is specified, import will set the working directory to\n"
+"    the parent of each patch before applying it, and will abort if the\n"
+"    resulting changeset has a different ID than the one recorded in\n"
+"    the patch. This may happen due to character set problems or other\n"
+"    deficiencies in the text patch format.\n"
+"\n"
+"    With -s/--similarity, hg will attempt to discover renames and\n"
+"    copies in the patch in the same way as 'addremove'.\n"
+"\n"
+"    To read a patch from standard input, use \"-\" as the patch name.\n"
+"    See 'hg help dates' for a list of formats valid for -d/--date.\n"
+"    "
+msgstr ""
+"import 一組有順序的 patches\n"
+"\n"
+"    Import a list of patches and commit them individually.\n"
+"\n"
+"    If there are outstanding changes in the working directory, import\n"
+"    will abort unless given the -f/--force flag.\n"
+"\n"
+"    You can import a patch straight from a mail message. Even patches\n"
+"    as attachments work (to use the body part, it must have type\n"
+"    text/plain or text/x-patch). From and Subject headers of email\n"
+"    message are used as default committer and commit message. All\n"
+"    text/plain body parts before first diff are added to commit\n"
+"    message.\n"
+"\n"
+"    If the imported patch was generated by hg export, user and\n"
+"    description from patch override values from message headers and\n"
+"    body. Values given on command line with -m/--message and -u/--user\n"
+"    override these.\n"
+"\n"
+"    If --exact is specified, import will set the working directory to\n"
+"    the parent of each patch before applying it, and will abort if the\n"
+"    resulting changeset has a different ID than the one recorded in\n"
+"    the patch. This may happen due to character set problems or other\n"
+"    deficiencies in the text patch format.\n"
+"\n"
+"    With -s/--similarity, hg will attempt to discover renames and\n"
+"    copies in the patch in the same way as 'addremove'.\n"
+"\n"
+"    To read a patch from standard input, use \"-\" as the patch name.\n"
+"    See 'hg help dates' for a list of formats valid for -d/--date.\n"
+"    "
+
+msgid "applying patch from stdin\n"
+msgstr ""
+
+msgid "no diffs found"
+msgstr ""
+
+#, python-format
+msgid ""
+"message:\n"
+"%s\n"
+msgstr ""
+
+msgid "not a Mercurial patch"
+msgstr ""
+
+msgid "patch is damaged or loses information"
+msgstr ""
+
+msgid ""
+"show new changesets found in source\n"
+"\n"
+"    Show new changesets found in the specified path/URL or the default\n"
+"    pull location. These are the changesets that would have been pulled\n"
+"    if a pull at the time you issued this command.\n"
+"\n"
+"    For remote repository, using --bundle avoids downloading the\n"
+"    changesets twice if the incoming is followed by a pull.\n"
+"\n"
+"    See pull for valid source format details.\n"
+"    "
+msgstr ""
+"顯示來源端新的 changesets\n"
+"\n"
+"    Show new changesets found in the specified path/URL or the default\n"
+"    pull location. These are the changesets that would have been pulled\n"
+"    if a pull at the time you issued this command.\n"
+"\n"
+"    For remote repository, using --bundle avoids downloading the\n"
+"    changesets twice if the incoming is followed by a pull.\n"
+"\n"
+"    See pull for valid source format details.\n"
+"    "
+
+msgid ""
+"create a new repository in the given directory\n"
+"\n"
+"    Initialize a new repository in the given directory. If the given\n"
+"    directory does not exist, it will be created.\n"
+"\n"
+"    If no directory is given, the current directory is used.\n"
+"\n"
+"    It is possible to specify an ssh:// URL as the destination.\n"
+"    See 'hg help urls' for more information.\n"
+"    "
+msgstr ""
+"於指定的目錄建立新的 repository\n"
+"\n"
+"    Initialize a new repository in the given directory. If the given\n"
+"    directory does not exist, it will be created.\n"
+"\n"
+"    If no directory is given, the current directory is used.\n"
+"\n"
+"    It is possible to specify an ssh:// URL as the destination.\n"
+"    See 'hg help urls' for more information.\n"
+"    "
+
+msgid ""
+"locate files matching specific patterns\n"
+"\n"
+"    Print files under Mercurial control in the working directory whose\n"
+"    names match the given patterns.\n"
+"\n"
+"    By default, this command searches all directories in the working\n"
+"    directory. To search just the current directory and its\n"
+"    subdirectories, use \"--include .\".\n"
+"\n"
+"    If no patterns are given to match, this command prints the names\n"
+"    of all files under Mercurial control in the working directory.\n"
+"\n"
+"    If you want to feed the output of this command into the \"xargs\"\n"
+"    command, use the -0 option to both this command and \"xargs\". This\n"
+"    will avoid the problem of \"xargs\" treating single filenames that\n"
+"    contain whitespace as multiple filenames.\n"
+"    "
+msgstr ""
+"找出符合指定樣式的檔案\n"
+"\n"
+"    Print files under Mercurial control in the working directory whose\n"
+"    names match the given patterns.\n"
+"\n"
+"    By default, this command searches all directories in the working\n"
+"    directory. To search just the current directory and its\n"
+"    subdirectories, use \"--include .\".\n"
+"\n"
+"    If no patterns are given to match, this command prints the names\n"
+"    of all files under Mercurial control in the working directory.\n"
+"\n"
+"    If you want to feed the output of this command into the \"xargs\"\n"
+"    command, use the -0 option to both this command and \"xargs\". This\n"
+"    will avoid the problem of \"xargs\" treating single filenames that\n"
+"    contain whitespace as multiple filenames.\n"
+"    "
+
+msgid ""
+"show revision history of entire repository or files\n"
+"\n"
+"    Print the revision history of the specified files or the entire\n"
+"    project.\n"
+"\n"
+"    File history is shown without following rename or copy history of\n"
+"    files. Use -f/--follow with a filename to follow history across\n"
+"    renames and copies. --follow without a filename will only show\n"
+"    ancestors or descendants of the starting revision. --follow-first\n"
+"    only follows the first parent of merge revisions.\n"
+"\n"
+"    If no revision range is specified, the default is tip:0 unless\n"
+"    --follow is set, in which case the working directory parent is\n"
+"    used as the starting revision.\n"
+"\n"
+"    See 'hg help dates' for a list of formats valid for -d/--date.\n"
+"\n"
+"    By default this command prints revision number and changeset id,\n"
+"    tags, non-trivial parents, user, date and time, and a summary for\n"
+"    each commit. When the -v/--verbose switch is used, the list of\n"
+"    changed files and full commit message are shown.\n"
+"\n"
+"    NOTE: log -p/--patch may generate unexpected diff output for merge\n"
+"    changesets, as it will only compare the merge changeset against\n"
+"    its first parent. Also, only files different from BOTH parents\n"
+"    will appear in files:.\n"
+"    "
+msgstr ""
+"顯示整個 repository 或特定檔案的 revision history\n"
+"\n"
+"    Print the revision history of the specified files or the entire\n"
+"    project.\n"
+"\n"
+"    File history is shown without following rename or copy history of\n"
+"    files. Use -f/--follow with a filename to follow history across\n"
+"    renames and copies. --follow without a filename will only show\n"
+"    ancestors or descendants of the starting revision. --follow-first\n"
+"    only follows the first parent of merge revisions.\n"
+"\n"
+"    If no revision range is specified, the default is tip:0 unless\n"
+"    --follow is set, in which case the working directory parent is\n"
+"    used as the starting revision.\n"
+"\n"
+"    See 'hg help dates' for a list of formats valid for -d/--date.\n"
+"\n"
+"    By default this command prints revision number and changeset id,\n"
+"    tags, non-trivial parents, user, date and time, and a summary for\n"
+"    each commit. When the -v/--verbose switch is used, the list of\n"
+"    changed files and full commit message are shown.\n"
+"\n"
+"    NOTE: log -p/--patch may generate unexpected diff output for merge\n"
+"    changesets, as it will only compare the merge changeset against\n"
+"    its first parent. Also, only files different from BOTH parents\n"
+"    will appear in files:.\n"
+"    "
+
+msgid ""
+"output the current or given revision of the project manifest\n"
+"\n"
+"    Print a list of version controlled files for the given revision.\n"
+"    If no revision is given, the first parent of the working directory\n"
+"    is used, or the null revision if no revision is checked out.\n"
+"\n"
+"    With -v, print file permissions, symlink and executable bits.\n"
+"    With --debug, print file revision hashes.\n"
+"    "
+msgstr ""
+"輸出 project manifest 目前或指定的 revision\n"
+"\n"
+"    Print a list of version controlled files for the given revision.\n"
+"    If no revision is given, the first parent of the working directory\n"
+"    is used, or the null revision if no revision is checked out.\n"
+"\n"
+"    With -v, print file permissions, symlink and executable bits.\n"
+"    With --debug, print file revision hashes.\n"
+"    "
+
+msgid ""
+"merge working directory with another revision\n"
+"\n"
+"    The current working directory is updated with all changes made in\n"
+"    the requested revision since the last common predecessor revision.\n"
+"\n"
+"    Files that changed between either parent are marked as changed for\n"
+"    the next commit and a commit must be performed before any further\n"
+"    updates to the repository are allowed. The next commit will have\n"
+"    two parents.\n"
+"\n"
+"    If no revision is specified, the working directory's parent is a\n"
+"    head revision, and the current branch contains exactly one other\n"
+"    head, the other head is merged with by default. Otherwise, an\n"
+"    explicit revision with which to merge with must be provided.\n"
+"    "
+msgstr ""
+"將 working directory 與其他的 revision 合併\n"
+"\n"
+"    The current working directory is updated with all changes made in\n"
+"    the requested revision since the last common predecessor revision.\n"
+"\n"
+"    Files that changed between either parent are marked as changed for\n"
+"    the next commit and a commit must be performed before any further\n"
+"    updates to the repository are allowed. The next commit will have\n"
+"    two parents.\n"
+"\n"
+"    If no revision is specified, the working directory's parent is a\n"
+"    head revision, and the current branch contains exactly one other\n"
+"    head, the other head is merged with by default. Otherwise, an\n"
+"    explicit revision with which to merge with must be provided.\n"
+"    "
+
+#, python-format
+msgid "branch '%s' has %d heads - please merge with an explicit rev"
+msgstr ""
+
+#, python-format
+msgid "branch '%s' has one head - please merge with an explicit rev"
+msgstr ""
+
+msgid "there is nothing to merge"
+msgstr ""
+
+#, python-format
+msgid "%s - use \"hg update\" instead"
+msgstr ""
+
+msgid ""
+"working dir not at a head rev - use \"hg update\" or merge with an explicit "
+"rev"
+msgstr ""
+
+msgid ""
+"show changesets not found in destination\n"
+"\n"
+"    Show changesets not found in the specified destination repository\n"
+"    or the default push location. These are the changesets that would\n"
+"    be pushed if a push was requested.\n"
+"\n"
+"    See pull for valid destination format details.\n"
+"    "
+msgstr ""
+"顯示目的端沒有的 changesets\n"
+"\n"
+"    Show changesets not found in the specified destination repository\n"
+"    or the default push location. These are the changesets that would\n"
+"    be pushed if a push was requested.\n"
+"\n"
+"    See pull for valid destination format details.\n"
+"    "
+
+msgid ""
+"show the parents of the working directory or revision\n"
+"\n"
+"    Print the working directory's parent revisions. If a revision is\n"
+"    given via -r/--rev, the parent of that revision will be printed.\n"
+"    If a file argument is given, the revision in which the file was\n"
+"    last changed (before the working directory revision or the\n"
+"    argument to --rev if given) is printed.\n"
+"    "
+msgstr ""
+"顯示 working directory 或特定 revision 的 parents\n"
+"\n"
+"    Print the working directory's parent revisions. If a revision is\n"
+"    given via -r/--rev, the parent of that revision will be printed.\n"
+"    If a file argument is given, the revision in which the file was\n"
+"    last changed (before the working directory revision or the\n"
+"    argument to --rev if given) is printed.\n"
+"    "
+
+msgid "can only specify an explicit filename"
+msgstr ""
+
+#, python-format
+msgid "'%s' not found in manifest!"
+msgstr ""
+
+msgid ""
+"show aliases for remote repositories\n"
+"\n"
+"    Show definition of symbolic path name NAME. If no name is given,\n"
+"    show definition of all available names.\n"
+"\n"
+"    Path names are defined in the [paths] section of /etc/mercurial/hgrc\n"
+"    and $HOME/.hgrc. If run inside a repository, .hg/hgrc is used, too.\n"
+"\n"
+"    See 'hg help urls' for more information.\n"
+"    "
+msgstr ""
+"顯示 remote repositories 的別名\n"
+"\n"
+"    Show definition of symbolic path name NAME. If no name is given,\n"
+"    show definition of all available names.\n"
+"\n"
+"    Path names are defined in the [paths] section of /etc/mercurial/hgrc\n"
+"    and $HOME/.hgrc. If run inside a repository, .hg/hgrc is used, too.\n"
+"\n"
+"    See 'hg help urls' for more information.\n"
+"    "
+
+msgid "not found!\n"
+msgstr "沒有找到!\n"
+
+msgid "not updating, since new heads added\n"
+msgstr "沒有更新,因為新的 heads 已加入\n"
+
+msgid "(run 'hg heads' to see heads, 'hg merge' to merge)\n"
+msgstr "(執行 'hg heads' 以顯示 heads,'hg merge' 以執行合併)\n"
+
+msgid "(run 'hg update' to get a working copy)\n"
+msgstr "(執行 'hg update' 來取得 working copy)\n"
+
+msgid ""
+"pull changes from the specified source\n"
+"\n"
+"    Pull changes from a remote repository to a local one.\n"
+"\n"
+"    This finds all changes from the repository at the specified path\n"
+"    or URL and adds them to a local repository (the current one unless\n"
+"    -R is specified). By default, this does not update the copy of the\n"
+"    project in the working directory.\n"
+"\n"
+"    Use hg incoming if you want to see what would have been added by a\n"
+"    pull at the time you issued this command. If you then decide to\n"
+"    added those changes to the repository, you should use pull -r X\n"
+"    where X is the last changeset listed by hg incoming.\n"
+"\n"
+"    If SOURCE is omitted, the 'default' path will be used.\n"
+"    See 'hg help urls' for more information.\n"
+"    "
+msgstr ""
+"pull 指定來源端的 changes\n"
+"\n"
+"    Pull changes from a remote repository to a local one.\n"
+"\n"
+"    This finds all changes from the repository at the specified path\n"
+"    or URL and adds them to a local repository (the current one unless\n"
+"    -R is specified). By default, this does not update the copy of the\n"
+"    project in the working directory.\n"
+"\n"
+"    Use hg incoming if you want to see what would have been added by a\n"
+"    pull at the time you issued this command. If you then decide to\n"
+"    added those changes to the repository, you should use pull -r X\n"
+"    where X is the last changeset listed by hg incoming.\n"
+"\n"
+"    If SOURCE is omitted, the 'default' path will be used.\n"
+"    See 'hg help urls' for more information.\n"
+"    "
+
+msgid ""
+"push changes to the specified destination\n"
+"\n"
+"    Push changes from the local repository to the given destination.\n"
+"\n"
+"    This is the symmetrical operation for pull. It moves changes from\n"
+"    the current repository to a different one. If the destination is\n"
+"    local this is identical to a pull in that directory from the\n"
+"    current one.\n"
+"\n"
+"    By default, push will refuse to run if it detects the result would\n"
+"    increase the number of remote heads. This generally indicates the\n"
+"    user forgot to pull and merge before pushing.\n"
+"\n"
+"    If -r/--rev is used, the named revision and all its ancestors will\n"
+"    be pushed to the remote repository.\n"
+"\n"
+"    Please see 'hg help urls' for important details about ssh://\n"
+"    URLs. If DESTINATION is omitted, a default path will be used.\n"
+"    See 'hg help urls' for more information.\n"
+"    "
+msgstr ""
+"將 changes push 至指定的目的端\n"
+"\n"
+"    Push changes from the local repository to the given destination.\n"
+"\n"
+"    This is the symmetrical operation for pull. It moves changes from\n"
+"    the current repository to a different one. If the destination is\n"
+"    local this is identical to a pull in that directory from the\n"
+"    current one.\n"
+"\n"
+"    By default, push will refuse to run if it detects the result would\n"
+"    increase the number of remote heads. This generally indicates the\n"
+"    user forgot to pull and merge before pushing.\n"
+"\n"
+"    If -r/--rev is used, the named revision and all its ancestors will\n"
+"    be pushed to the remote repository.\n"
+"\n"
+"    Please see 'hg help urls' for important details about ssh://\n"
+"    URLs. If DESTINATION is omitted, a default path will be used.\n"
+"    See 'hg help urls' for more information.\n"
+"    "
+
+#, python-format
+msgid "pushing to %s\n"
+msgstr ""
+
+msgid ""
+"roll back an interrupted transaction\n"
+"\n"
+"    Recover from an interrupted commit or pull.\n"
+"\n"
+"    This command tries to fix the repository status after an\n"
+"    interrupted operation. It should only be necessary when Mercurial\n"
+"    suggests it.\n"
+"    "
+msgstr ""
+"roll back 一個被中斷的 transaction\n"
+"\n"
+"    Recover from an interrupted commit or pull.\n"
+"\n"
+"    This command tries to fix the repository status after an\n"
+"    interrupted operation. It should only be necessary when Mercurial\n"
+"    suggests it.\n"
+"    "
+
+msgid ""
+"remove the specified files on the next commit\n"
+"\n"
+"    Schedule the indicated files for removal from the repository.\n"
+"\n"
+"    This only removes files from the current branch, not from the\n"
+"    entire project history. -A/--after can be used to remove only\n"
+"    files that have already been deleted, -f/--force can be used to\n"
+"    force deletion, and -Af can be used to remove files from the next\n"
+"    revision without deleting them from the working directory.\n"
+"\n"
+"    The following table details the behavior of remove for different\n"
+"    file states (columns) and option combinations (rows). The file\n"
+"    states are Added [A], Clean [C], Modified [M] and Missing [!]\n"
+"    (as reported by hg status). The actions are Warn, Remove (from\n"
+"    branch) and Delete (from disk).\n"
+"\n"
+"           A  C  M  !\n"
+"    none   W  RD W  R\n"
+"    -f     R  RD RD R\n"
+"    -A     W  W  W  R\n"
+"    -Af    R  R  R  R\n"
+"\n"
+"    This command schedules the files to be removed at the next commit.\n"
+"    To undo a remove before that, see hg revert.\n"
+"    "
+msgstr ""
+"移除下次要 commit 的檔案\n"
+"\n"
+"    Schedule the indicated files for removal from the repository.\n"
+"\n"
+"    This only removes files from the current branch, not from the\n"
+"    entire project history. -A/--after can be used to remove only\n"
+"    files that have already been deleted, -f/--force can be used to\n"
+"    force deletion, and -Af can be used to remove files from the next\n"
+"    revision without deleting them from the working directory.\n"
+"\n"
+"    The following table details the behavior of remove for different\n"
+"    file states (columns) and option combinations (rows). The file\n"
+"    states are Added [A], Clean [C], Modified [M] and Missing [!]\n"
+"    (as reported by hg status). The actions are Warn, Remove (from\n"
+"    branch) and Delete (from disk).\n"
+"\n"
+"           A  C  M  !\n"
+"    none   W  RD W  R\n"
+"    -f     R  RD RD R\n"
+"    -A     W  W  W  R\n"
+"    -Af    R  R  R  R\n"
+"\n"
+"    This command schedules the files to be removed at the next commit.\n"
+"    To undo a remove before that, see hg revert.\n"
+"    "
+
+msgid "no files specified"
+msgstr ""
+
+#, python-format
+msgid "not removing %s: file is untracked\n"
+msgstr ""
+
+#, python-format
+msgid "not removing %s: file %s (use -f to force removal)\n"
+msgstr ""
+
+msgid "still exists"
+msgstr ""
+
+msgid "is modified"
+msgstr ""
+
+msgid "has been marked for add"
+msgstr ""
+
+msgid ""
+"rename files; equivalent of copy + remove\n"
+"\n"
+"    Mark dest as copies of sources; mark sources for deletion. If dest\n"
+"    is a directory, copies are put in that directory. If dest is a\n"
+"    file, there can only be one source.\n"
+"\n"
+"    By default, this command copies the contents of files as they\n"
+"    exist in the working directory. If invoked with -A/--after, the\n"
+"    operation is recorded, but no copying is performed.\n"
+"\n"
+"    This command takes effect at the next commit. To undo a rename\n"
+"    before that, see hg revert.\n"
+"    "
+msgstr ""
+"重新命名檔案;等同於 copy + remove\n"
+"\n"
+"    Mark dest as copies of sources; mark sources for deletion. If dest\n"
+"    is a directory, copies are put in that directory. If dest is a\n"
+"    file, there can only be one source.\n"
+"\n"
+"    By default, this command copies the contents of files as they\n"
+"    exist in the working directory. If invoked with -A/--after, the\n"
+"    operation is recorded, but no copying is performed.\n"
+"\n"
+"    This command takes effect at the next commit. To undo a rename\n"
+"    before that, see hg revert.\n"
+"    "
+
+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"
+"\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"
+"    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"
+"\n"
+"    The codes used to show the status of files are:\n"
+"    U = unresolved\n"
+"    R = resolved\n"
+"    "
+msgstr ""
+"重試經由 merge 或 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"
+"\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"
+"    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"
+"\n"
+"    The codes used to show the status of files are:\n"
+"    U = unresolved\n"
+"    R = resolved\n"
+"    "
+
+msgid "too many options specified"
+msgstr ""
+
+msgid "can't specify --all and patterns"
+msgstr ""
+
+msgid "no files or directories specified; use --all to remerge all files"
+msgstr ""
+
+msgid ""
+"restore individual files or directories to an earlier state\n"
+"\n"
+"    (Use update -r to check out earlier revisions, revert does not\n"
+"    change the working directory parents.)\n"
+"\n"
+"    With no revision specified, revert the named files or directories\n"
+"    to the contents they had in the parent of the working directory.\n"
+"    This restores the contents of the affected files to an unmodified\n"
+"    state and unschedules adds, removes, copies, and renames. If the\n"
+"    working directory has two parents, you must explicitly specify the\n"
+"    revision to revert to.\n"
+"\n"
+"    Using the -r/--rev option, revert the given files or directories\n"
+"    to their contents as of a specific revision. This can be helpful\n"
+"    to \"roll back\" some or all of an earlier change. See 'hg help\n"
+"    dates' for a list of formats valid for -d/--date.\n"
+"\n"
+"    Revert modifies the working directory. It does not commit any\n"
+"    changes, or change the parent of the working directory. If you\n"
+"    revert to a revision other than the parent of the working\n"
+"    directory, the reverted files will thus appear modified\n"
+"    afterwards.\n"
+"\n"
+"    If a file has been deleted, it is restored. If the executable mode\n"
+"    of a file was changed, it is reset.\n"
+"\n"
+"    If names are given, all files matching the names are reverted.\n"
+"    If no arguments are given, no files are reverted.\n"
+"\n"
+"    Modified files are saved with a .orig suffix before reverting.\n"
+"    To disable these backups, use --no-backup.\n"
+"    "
+msgstr ""
+"將特定的檔案或目錄回復成較早的狀態\n"
+"\n"
+"    (Use update -r to check out earlier revisions, revert does not\n"
+"    change the working directory parents.)\n"
+"\n"
+"    With no revision specified, revert the named files or directories\n"
+"    to the contents they had in the parent of the working directory.\n"
+"    This restores the contents of the affected files to an unmodified\n"
+"    state and unschedules adds, removes, copies, and renames. If the\n"
+"    working directory has two parents, you must explicitly specify the\n"
+"    revision to revert to.\n"
+"\n"
+"    Using the -r/--rev option, revert the given files or directories\n"
+"    to their contents as of a specific revision. This can be helpful\n"
+"    to \"roll back\" some or all of an earlier change. See 'hg help\n"
+"    dates' for a list of formats valid for -d/--date.\n"
+"\n"
+"    Revert modifies the working directory. It does not commit any\n"
+"    changes, or change the parent of the working directory. If you\n"
+"    revert to a revision other than the parent of the working\n"
+"    directory, the reverted files will thus appear modified\n"
+"    afterwards.\n"
+"\n"
+"    If a file has been deleted, it is restored. If the executable mode\n"
+"    of a file was changed, it is reset.\n"
+"\n"
+"    If names are given, all files matching the names are reverted.\n"
+"    If no arguments are given, no files are reverted.\n"
+"\n"
+"    Modified files are saved with a .orig suffix before reverting.\n"
+"    To disable these backups, use --no-backup.\n"
+"    "
+
+msgid "you can't specify a revision and a date"
+msgstr ""
+
+msgid "no files or directories specified; use --all to revert the whole repo"
+msgstr ""
+
+#, python-format
+msgid "forgetting %s\n"
+msgstr ""
+
+#, python-format
+msgid "reverting %s\n"
+msgstr ""
+
+#, python-format
+msgid "undeleting %s\n"
+msgstr ""
+
+#, python-format
+msgid "saving current version of %s as %s\n"
+msgstr ""
+
+#, python-format
+msgid "file not managed: %s\n"
+msgstr ""
+
+#, python-format
+msgid "no changes needed to %s\n"
+msgstr ""
+
+msgid ""
+"roll back the last transaction\n"
+"\n"
+"    This command should be used with care. There is only one level of\n"
+"    rollback, and there is no way to undo a rollback. It will also\n"
+"    restore the dirstate at the time of the last transaction, losing\n"
+"    any dirstate changes since that time.\n"
+"\n"
+"    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"
+"\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"
+"    back locally is ineffective (someone else may already have pulled\n"
+"    the changes). Furthermore, a race is possible with readers of the\n"
+"    repository; for example an in-progress pull from the repository\n"
+"    may fail if a rollback is performed.\n"
+"    "
+msgstr ""
+"roll back 最後一次的 transaction\n"
+"\n"
+"    This command should be used with care. There is only one level of\n"
+"    rollback, and there is no way to undo a rollback. It will also\n"
+"    restore the dirstate at the time of the last transaction, losing\n"
+"    any dirstate changes since that time.\n"
+"\n"
+"    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"
+"\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"
+"    back locally is ineffective (someone else may already have pulled\n"
+"    the changes). Furthermore, a race is possible with readers of the\n"
+"    repository; for example an in-progress pull from the repository\n"
+"    may fail if a rollback is performed.\n"
+"    "
+
+msgid ""
+"print the root (top) of the current working directory\n"
+"\n"
+"    Print the root directory of the current repository.\n"
+"    "
+msgstr ""
+"顯示目前 working directory 的 root 目錄\n"
+"\n"
+"    Print the root directory of the current repository.\n"
+"    "
+
+msgid ""
+"export the repository via HTTP\n"
+"\n"
+"    Start a local HTTP repository browser and pull server.\n"
+"\n"
+"    By default, the server logs accesses to stdout and errors to\n"
+"    stderr. Use the -A/--accesslog and -E/--errorlog options to log to\n"
+"    files.\n"
+"    "
+msgstr ""
+"將 repository 經由 HTTP 發佈\n"
+"\n"
+"    Start a local HTTP repository browser and pull server.\n"
+"\n"
+"    By default, the server logs accesses to stdout and errors to\n"
+"    stderr. Use the -A/--accesslog and -E/--errorlog options to log to\n"
+"    files.\n"
+"    "
+
+#, python-format
+msgid "listening at http://%s%s/%s (bound to %s:%d)\n"
+msgstr ""
+
+msgid ""
+"show changed files in the working directory\n"
+"\n"
+"    Show status of files in the repository. If names are given, only\n"
+"    files that match are shown. Files that are clean or ignored or\n"
+"    the source of a copy/move operation, are not listed unless\n"
+"    -c/--clean, -i/--ignored, -C/--copies or -A/--all are given.\n"
+"    Unless options described with \"show only ...\" are given, the\n"
+"    options -mardu are used.\n"
+"\n"
+"    Option -q/--quiet hides untracked (unknown and ignored) files\n"
+"    unless explicitly requested with -u/--unknown or -i/--ignored.\n"
+"\n"
+"    NOTE: status may appear to disagree with diff if permissions have\n"
+"    changed or a merge has occurred. The standard diff format does not\n"
+"    report permission changes and diff only reports changes relative\n"
+"    to one merge parent.\n"
+"\n"
+"    If one revision is given, it is used as the base revision.\n"
+"    If two revisions are given, the differences between them are\n"
+"    shown.\n"
+"\n"
+"    The codes used to show the status of files are:\n"
+"    M = modified\n"
+"    A = added\n"
+"    R = removed\n"
+"    C = clean\n"
+"    ! = missing (deleted by non-hg command, but still tracked)\n"
+"    ? = not tracked\n"
+"    I = ignored\n"
+"      = origin of the previous file listed as A (added)\n"
+"    "
+msgstr ""
+"顯示 working directory 中已變更的檔案\n"
+"\n"
+"    Show status of files in the repository. If names are given, only\n"
+"    files that match are shown. Files that are clean or ignored or\n"
+"    the source of a copy/move operation, are not listed unless\n"
+"    -c/--clean, -i/--ignored, -C/--copies or -A/--all are given.\n"
+"    Unless options described with \"show only ...\" are given, the\n"
+"    options -mardu are used.\n"
+"\n"
+"    Option -q/--quiet hides untracked (unknown and ignored) files\n"
+"    unless explicitly requested with -u/--unknown or -i/--ignored.\n"
+"\n"
+"    NOTE: status may appear to disagree with diff if permissions have\n"
+"    changed or a merge has occurred. The standard diff format does not\n"
+"    report permission changes and diff only reports changes relative\n"
+"    to one merge parent.\n"
+"\n"
+"    If one revision is given, it is used as the base revision.\n"
+"    If two revisions are given, the differences between them are\n"
+"    shown.\n"
+"\n"
+"    The codes used to show the status of files are:\n"
+"    M = modified\n"
+"    A = added\n"
+"    R = removed\n"
+"    C = clean\n"
+"    ! = missing (deleted by non-hg command, but still tracked)\n"
+"    ? = not tracked\n"
+"    I = ignored\n"
+"      = origin of the previous file listed as A (added)\n"
+"    "
+
+msgid ""
+"add one or more tags for the current or given revision\n"
+"\n"
+"    Name a particular revision using <name>.\n"
+"\n"
+"    Tags are used to name particular revisions of the repository and are\n"
+"    very useful to compare different revisions, to go back to significant\n"
+"    earlier versions or to mark branch points as releases, etc.\n"
+"\n"
+"    If no revision is given, the parent of the working directory is\n"
+"    used, or tip if no revision is checked out.\n"
+"\n"
+"    To facilitate version control, distribution, and merging of tags,\n"
+"    they are stored as a file named \".hgtags\" which is managed\n"
+"    similarly to other project files and can be hand-edited if\n"
+"    necessary. The file '.hg/localtags' is used for local tags (not\n"
+"    shared among repositories).\n"
+"\n"
+"    See 'hg help dates' for a list of formats valid for -d/--date.\n"
+"    "
+msgstr ""
+"對目前或是指定的 revision 新增一或多個 tags\n"
+"\n"
+"    Name a particular revision using <name>.\n"
+"\n"
+"    Tags are used to name particular revisions of the repository and are\n"
+"    very useful to compare different revisions, to go back to significant\n"
+"    earlier versions or to mark branch points as releases, etc.\n"
+"\n"
+"    If no revision is given, the parent of the working directory is\n"
+"    used, or tip if no revision is checked out.\n"
+"\n"
+"    To facilitate version control, distribution, and merging of tags,\n"
+"    they are stored as a file named \".hgtags\" which is managed\n"
+"    similarly to other project files and can be hand-edited if\n"
+"    necessary. The file '.hg/localtags' is used for local tags (not\n"
+"    shared among repositories).\n"
+"\n"
+"    See 'hg help dates' for a list of formats valid for -d/--date.\n"
+"    "
+
+msgid "tag names must be unique"
+msgstr ""
+
+#, python-format
+msgid "the name '%s' is reserved"
+msgstr ""
+
+msgid "--rev and --remove are incompatible"
+msgstr ""
+
+#, python-format
+msgid "tag '%s' does not exist"
+msgstr ""
+
+#, python-format
+msgid "tag '%s' is not a global tag"
+msgstr ""
+
+#, python-format
+msgid "tag '%s' is not a local tag"
+msgstr ""
+
+#, python-format
+msgid "Removed tag %s"
+msgstr ""
+
+#, python-format
+msgid "tag '%s' already exists (use -f to force)"
+msgstr ""
+
+#, python-format
+msgid "Added tag %s for changeset %s"
+msgstr ""
+
+msgid ""
+"list repository tags\n"
+"\n"
+"    This lists both regular and local tags. When the -v/--verbose\n"
+"    switch is used, a third column \"local\" is printed for local tags.\n"
+"    "
+msgstr ""
+"列出 repository tags\n"
+"\n"
+"    This lists both regular and local tags. When the -v/--verbose\n"
+"    switch is used, a third column \"local\" is printed for local tags.\n"
+"    "
+
+msgid ""
+"show the tip revision\n"
+"\n"
+"    The tip revision (usually just called the tip) is the changeset\n"
+"    most recently added to the repository (and therefore the most\n"
+"    recently changed head).\n"
+"\n"
+"    If you have just made a commit, that commit will be the tip. If\n"
+"    you have just pulled changes from another repository, the tip of\n"
+"    that repository becomes the current tip. The \"tip\" tag is special\n"
+"    and cannot be renamed or assigned to a different changeset.\n"
+"    "
+msgstr ""
+"顯示 tip revision\n"
+"\n"
+"    The tip revision (usually just called the tip) is the changeset\n"
+"    most recently added to the repository (and therefore the most\n"
+"    recently changed head).\n"
+"\n"
+"    If you have just made a commit, that commit will be the tip. If\n"
+"    you have just pulled changes from another repository, the tip of\n"
+"    that repository becomes the current tip. The \"tip\" tag is special\n"
+"    and cannot be renamed or assigned to a different changeset.\n"
+"    "
+
+msgid ""
+"apply one or more changegroup files\n"
+"\n"
+"    Apply one or more compressed changegroup files generated by the\n"
+"    bundle command.\n"
+"    "
+msgstr ""
+"套用一或多個 changegroup 檔案\n"
+"\n"
+"    Apply one or more compressed changegroup files generated by the\n"
+"    bundle command.\n"
+"    "
+
+msgid ""
+"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"
+"    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.\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"
+"\n"
+"    See 'hg help dates' for a list of formats valid for -d/--date.\n"
+"    "
+msgstr ""
+"更新 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"
+"    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.\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"
+"\n"
+"    See 'hg help dates' for a list of formats valid for -d/--date.\n"
+"    "
+
+msgid ""
+"verify the integrity of the repository\n"
+"\n"
+"    Verify the integrity of the current repository.\n"
+"\n"
+"    This will perform an extensive check of the repository's\n"
+"    integrity, validating the hashes and checksums of each entry in\n"
+"    the changelog, manifest, and tracked files, as well as the\n"
+"    integrity of their crosslinks and indices.\n"
+"    "
+msgstr ""
+"驗證 repository 的完整性\n"
+"\n"
+"    Verify the integrity of the current repository.\n"
+"\n"
+"    This will perform an extensive check of the repository's\n"
+"    integrity, validating the hashes and checksums of each entry in\n"
+"    the changelog, manifest, and tracked files, as well as the\n"
+"    integrity of their crosslinks and indices.\n"
+"    "
+
+msgid "output version and copyright information"
+msgstr "輸出版本以及版權資訊"
+
+#, python-format
+msgid "Mercurial Distributed SCM (version %s)\n"
+msgstr "mercurial 分散式版本控制系統 (版本 %s)\n"
+
+msgid ""
+"\n"
+"Copyright (C) 2005-2009 Matt Mackall <mpm@selenic.com> and others\n"
+"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 ""
+
+msgid "repository root directory or symbolic path name"
+msgstr ""
+
+msgid "change working directory"
+msgstr ""
+
+msgid "do not prompt, assume 'yes' for any required answers"
+msgstr ""
+
+msgid "suppress output"
+msgstr ""
+
+msgid "enable additional output"
+msgstr ""
+
+msgid "set/override config option"
+msgstr ""
+
+msgid "enable debugging output"
+msgstr ""
+
+msgid "start debugger"
+msgstr ""
+
+msgid "set the charset encoding"
+msgstr ""
+
+msgid "set the charset encoding mode"
+msgstr ""
+
+msgid "print traceback on exception"
+msgstr ""
+
+msgid "time how long the command takes"
+msgstr ""
+
+msgid "print command execution profile"
+msgstr ""
+
+msgid "output version information and exit"
+msgstr ""
+
+msgid "display help and exit"
+msgstr ""
+
+msgid "do not perform actions, just print output"
+msgstr ""
+
+msgid "specify ssh command to use"
+msgstr ""
+
+msgid "specify hg command to run on the remote side"
+msgstr ""
+
+msgid "include names matching the given patterns"
+msgstr ""
+
+msgid "exclude names matching the given patterns"
+msgstr ""
+
+msgid "use <text> as commit message"
+msgstr ""
+
+msgid "read commit message from <file>"
+msgstr ""
+
+msgid "record datecode as commit date"
+msgstr ""
+
+msgid "record the specified user as committer"
+msgstr ""
+
+msgid "display using template map file"
+msgstr ""
+
+msgid "display with template"
+msgstr ""
+
+msgid "do not show merges"
+msgstr ""
+
+msgid "treat all files as text"
+msgstr ""
+
+msgid "don't include dates in diff headers"
+msgstr ""
+
+msgid "show which function each change is in"
+msgstr ""
+
+msgid "ignore white space when comparing lines"
+msgstr ""
+
+msgid "ignore changes in the amount of white space"
+msgstr ""
+
+msgid "ignore changes whose lines are all blank"
+msgstr ""
+
+msgid "number of lines of context to show"
+msgstr ""
+
+msgid "guess renamed files by similarity (0<=s<=100)"
+msgstr ""
+
+msgid "[OPTION]... [FILE]..."
+msgstr ""
+
+msgid "annotate the specified revision"
+msgstr ""
+
+msgid "follow file copies and renames"
+msgstr ""
+
+msgid "list the author (long with -v)"
+msgstr ""
+
+msgid "list the date (short with -q)"
+msgstr ""
+
+msgid "list the revision number (default)"
+msgstr ""
+
+msgid "list the changeset"
+msgstr ""
+
+msgid "show line number at the first appearance"
+msgstr ""
+
+msgid "[-r REV] [-f] [-a] [-u] [-d] [-n] [-c] [-l] FILE..."
+msgstr ""
+
+msgid "do not pass files through decoders"
+msgstr ""
+
+msgid "directory prefix for files in archive"
+msgstr ""
+
+msgid "revision to distribute"
+msgstr ""
+
+msgid "type of distribution to create"
+msgstr ""
+
+msgid "[OPTION]... DEST"
+msgstr ""
+
+msgid "merge with old dirstate parent after backout"
+msgstr ""
+
+msgid "parent to choose when backing out merge"
+msgstr ""
+
+msgid "revision to backout"
+msgstr ""
+
+msgid "[OPTION]... [-r] REV"
+msgstr ""
+
+msgid "reset bisect state"
+msgstr ""
+
+msgid "mark changeset good"
+msgstr ""
+
+msgid "mark changeset bad"
+msgstr ""
+
+msgid "skip testing changeset"
+msgstr ""
+
+msgid "use command to check changeset state"
+msgstr ""
+
+msgid "do not update to target"
+msgstr ""
+
+msgid "[-gbsr] [-c CMD] [REV]"
+msgstr ""
+
+msgid "set branch name even if it shadows an existing branch"
+msgstr ""
+
+msgid "reset branch name to parent branch name"
+msgstr ""
+
+msgid "[-fC] [NAME]"
+msgstr ""
+
+msgid "show only branches that have unmerged heads"
+msgstr ""
+
+msgid "[-a]"
+msgstr ""
+
+msgid "run even when remote repository is unrelated"
+msgstr ""
+
+msgid "a changeset up to which you would like to bundle"
+msgstr ""
+
+msgid "a base changeset to specify instead of a destination"
+msgstr ""
+
+msgid "bundle all changesets in the repository"
+msgstr ""
+
+msgid "bundle compression type to use"
+msgstr ""
+
+msgid "[-f] [-a] [-r REV]... [--base REV]... FILE [DEST]"
+msgstr ""
+
+msgid "print output to file with formatted name"
+msgstr ""
+
+msgid "print the given revision"
+msgstr ""
+
+msgid "apply any matching decode filter"
+msgstr ""
+
+msgid "[OPTION]... FILE..."
+msgstr ""
+
+msgid "the clone will only contain a repository (no working copy)"
+msgstr ""
+
+msgid "a changeset you would like to have after cloning"
+msgstr ""
+
+msgid "[OPTION]... SOURCE [DEST]"
+msgstr ""
+
+msgid "mark new/missing files as added/removed before committing"
+msgstr ""
+
+msgid "mark a branch as closed, hiding it from the branch list"
+msgstr ""
+
+msgid "record a copy that has already occurred"
+msgstr ""
+
+msgid "forcibly copy over an existing managed file"
+msgstr ""
+
+msgid "[OPTION]... [SOURCE]... DEST"
+msgstr ""
+
+msgid "[INDEX] REV1 REV2"
+msgstr ""
+
+msgid "[COMMAND]"
+msgstr ""
+
+msgid "show the command options"
+msgstr ""
+
+msgid "[-o] CMD"
+msgstr ""
+
+msgid "try extended date formats"
+msgstr ""
+
+msgid "[-e] DATE [RANGE]"
+msgstr ""
+
+msgid "FILE REV"
+msgstr ""
+
+msgid "[PATH]"
+msgstr ""
+
+msgid "FILE"
+msgstr ""
+
+msgid "revision to rebuild to"
+msgstr ""
+
+msgid "[-r REV] [REV]"
+msgstr ""
+
+msgid "revision to debug"
+msgstr ""
+
+msgid "[-r REV] FILE"
+msgstr ""
+
+msgid "REV1 [REV2]"
+msgstr ""
+
+msgid "do not display the saved mtime"
+msgstr ""
+
+msgid "[OPTION]..."
+msgstr ""
+
+msgid "revision to check"
+msgstr ""
+
+msgid "[OPTION]... [-r REV1 [-r REV2]] [FILE]..."
+msgstr ""
+
+msgid "diff against the second parent"
+msgstr ""
+
+msgid "[OPTION]... [-o OUTFILESPEC] REV..."
+msgstr ""
+
+msgid "end fields with NUL"
+msgstr ""
+
+msgid "print all revisions that match"
+msgstr ""
+
+msgid "follow changeset history, or file history across copies and renames"
+msgstr ""
+
+msgid "ignore case when matching"
+msgstr ""
+
+msgid "print only filenames and revisions that match"
+msgstr ""
+
+msgid "print matching line numbers"
+msgstr ""
+
+msgid "search in given revision range"
+msgstr ""
+
+msgid "[OPTION]... PATTERN [FILE]..."
+msgstr ""
+
+msgid "show only heads which are descendants of REV"
+msgstr ""
+
+msgid "show only the active heads from open branches"
+msgstr ""
+
+msgid "show normal and closed heads"
+msgstr ""
+
+msgid "[-r STARTREV] [REV]..."
+msgstr ""
+
+msgid "[TOPIC]"
+msgstr ""
+
+msgid "identify the specified revision"
+msgstr ""
+
+msgid "show local revision number"
+msgstr ""
+
+msgid "show global revision id"
+msgstr ""
+
+msgid "show branch"
+msgstr ""
+
+msgid "show tags"
+msgstr ""
+
+msgid "[-nibt] [-r REV] [SOURCE]"
+msgstr ""
+
+msgid ""
+"directory strip option for patch. This has the same meaning as the "
+"corresponding patch option"
+msgstr ""
+
+msgid "base path"
+msgstr ""
+
+msgid "skip check for outstanding uncommitted changes"
+msgstr ""
+
+msgid "don't commit, just update the working directory"
+msgstr ""
+
+msgid "apply patch to the nodes from which it was generated"
+msgstr ""
+
+msgid "use any branch information in patch (implied by --exact)"
+msgstr ""
+
+msgid "[OPTION]... PATCH..."
+msgstr ""
+
+msgid "show newest record first"
+msgstr ""
+
+msgid "file to store the bundles into"
+msgstr ""
+
+msgid "a specific revision up to which you would like to pull"
+msgstr ""
+
+msgid "[-p] [-n] [-M] [-f] [-r REV]... [--bundle FILENAME] [SOURCE]"
+msgstr ""
+
+msgid "[-e CMD] [--remotecmd CMD] [DEST]"
+msgstr ""
+
+msgid "search the repository as it stood at REV"
+msgstr ""
+
+msgid "end filenames with NUL, for use with xargs"
+msgstr ""
+
+msgid "print complete paths from the filesystem root"
+msgstr ""
+
+msgid "[OPTION]... [PATTERN]..."
+msgstr ""
+
+msgid "only follow the first parent of merge changesets"
+msgstr ""
+
+msgid "show revisions matching date spec"
+msgstr ""
+
+msgid "show copied files"
+msgstr ""
+
+msgid "do case-insensitive search for a keyword"
+msgstr ""
+
+msgid "include revisions where files were removed"
+msgstr ""
+
+msgid "show only merges"
+msgstr ""
+
+msgid "revisions committed by user"
+msgstr ""
+
+msgid "show only changesets within the given named branch"
+msgstr ""
+
+msgid "do not display revision or any of its ancestors"
+msgstr ""
+
+msgid "[OPTION]... [FILE]"
+msgstr ""
+
+msgid "revision to display"
+msgstr ""
+
+msgid "[-r REV]"
+msgstr ""
+
+msgid "force a merge with outstanding changes"
+msgstr ""
+
+msgid "revision to merge"
+msgstr ""
+
+msgid "review revisions to merge (no merge is performed)"
+msgstr ""
+
+msgid "[-f] [[-r] REV]"
+msgstr ""
+
+msgid "a specific revision up to which you would like to push"
+msgstr ""
+
+msgid "[-M] [-p] [-n] [-f] [-r REV]... [DEST]"
+msgstr ""
+
+msgid "show parents from the specified revision"
+msgstr ""
+
+msgid "[-r REV] [FILE]"
+msgstr ""
+
+msgid "[NAME]"
+msgstr ""
+
+msgid "update to new tip if changesets were pulled"
+msgstr ""
+
+msgid "[-u] [-f] [-r REV]... [-e CMD] [--remotecmd CMD] [SOURCE]"
+msgstr ""
+
+msgid "force push"
+msgstr ""
+
+msgid "[-f] [-r REV]... [-e CMD] [--remotecmd CMD] [DEST]"
+msgstr ""
+
+msgid "record delete for missing files"
+msgstr ""
+
+msgid "remove (and delete) file even if added or modified"
+msgstr ""
+
+msgid "record a rename that has already occurred"
+msgstr ""
+
+msgid "[OPTION]... SOURCE... DEST"
+msgstr ""
+
+msgid "remerge all unresolved files"
+msgstr ""
+
+msgid "list state of files needing merge"
+msgstr ""
+
+msgid "mark files as resolved"
+msgstr ""
+
+msgid "unmark files as resolved"
+msgstr ""
+
+msgid "revert all changes when no arguments given"
+msgstr ""
+
+msgid "tipmost revision matching date"
+msgstr ""
+
+msgid "revision to revert to"
+msgstr ""
+
+msgid "do not save backup copies of files"
+msgstr ""
+
+msgid "[OPTION]... [-r REV] [NAME]..."
+msgstr ""
+
+msgid "name of access log file to write to"
+msgstr ""
+
+msgid "name of error log file to write to"
+msgstr ""
+
+msgid "port to listen on (default: 8000)"
+msgstr ""
+
+msgid "address to listen on (default: all interfaces)"
+msgstr ""
+
+msgid "prefix path to serve from (default: server root)"
+msgstr ""
+
+msgid "name to show in web pages (default: working directory)"
+msgstr ""
+
+msgid "name of the webdir config file (serve more than one repository)"
+msgstr ""
+
+msgid "for remote clients"
+msgstr ""
+
+msgid "web templates to use"
+msgstr ""
+
+msgid "template style to use"
+msgstr ""
+
+msgid "use IPv6 in addition to IPv4"
+msgstr ""
+
+msgid "SSL certificate file"
+msgstr ""
+
+msgid "show untrusted configuration options"
+msgstr ""
+
+msgid "[-u] [NAME]..."
+msgstr ""
+
+msgid "show status of all files"
+msgstr ""
+
+msgid "show only modified files"
+msgstr ""
+
+msgid "show only added files"
+msgstr ""
+
+msgid "show only removed files"
+msgstr ""
+
+msgid "show only deleted (but tracked) files"
+msgstr ""
+
+msgid "show only files without changes"
+msgstr ""
+
+msgid "show only unknown (not tracked) files"
+msgstr ""
+
+msgid "show only ignored files"
+msgstr ""
+
+msgid "hide status prefix"
+msgstr ""
+
+msgid "show source of copied files"
+msgstr ""
+
+msgid "show difference from revision"
+msgstr ""
+
+msgid "replace existing tag"
+msgstr ""
+
+msgid "make the tag local"
+msgstr ""
+
+msgid "revision to tag"
+msgstr ""
+
+msgid "remove a tag"
+msgstr ""
+
+msgid "[-l] [-m TEXT] [-d DATE] [-u USER] [-r REV] NAME..."
+msgstr ""
+
+msgid "[-p]"
+msgstr ""
+
+msgid "update to new tip if changesets were unbundled"
+msgstr ""
+
+msgid "[-u] FILE..."
+msgstr ""
+
+msgid "overwrite locally modified files (no backup)"
+msgstr ""
+
+msgid "[-C] [-d DATE] [[-r] REV]"
+msgstr ""
+
+#, python-format
+msgid "config error at %s:%d: '%s'"
+msgstr ""
+
+msgid "not found in manifest"
+msgstr ""
+
+msgid "branch name not in UTF-8!"
+msgstr ""
+
+#, python-format
+msgid "  searching for copies back to rev %d\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"  unmatched files in local:\n"
+"   %s\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"  unmatched files in other:\n"
+"   %s\n"
+msgstr ""
+
+msgid "  all copies found (* = to merge, ! = divergent):\n"
+msgstr ""
+
+msgid "  checking for directory renames\n"
+msgstr ""
+
+#, python-format
+msgid "  dir %s -> %s\n"
+msgstr ""
+
+#, python-format
+msgid "  file %s -> %s\n"
+msgstr ""
+
+msgid "working directory state appears damaged!"
+msgstr ""
+
+#, python-format
+msgid "'\\n' and '\\r' disallowed in filenames: %r"
+msgstr ""
+
+#, python-format
+msgid "directory %r already in dirstate"
+msgstr ""
+
+#, python-format
+msgid "file %r in dirstate clashes with %r"
+msgstr ""
+
+#, python-format
+msgid "not in dirstate: %s\n"
+msgstr ""
+
+msgid "unknown"
+msgstr ""
+
+msgid "character device"
+msgstr ""
+
+msgid "block device"
+msgstr ""
+
+msgid "fifo"
+msgstr ""
+
+msgid "socket"
+msgstr ""
+
+msgid "directory"
+msgstr ""
+
+#, python-format
+msgid "unsupported file type (type is %s)"
+msgstr ""
+
+#, python-format
+msgid "abort: %s\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"hg: command '%s' is ambiguous:\n"
+"    %s\n"
+msgstr ""
+
+#, python-format
+msgid "hg: %s\n"
+msgstr ""
+
+#, python-format
+msgid "timed out waiting for lock held by %s"
+msgstr ""
+
+#, python-format
+msgid "lock held by %s"
+msgstr ""
+
+#, python-format
+msgid "abort: %s: %s\n"
+msgstr ""
+
+#, python-format
+msgid "abort: could not lock %s: %s\n"
+msgstr ""
+
+#, python-format
+msgid "hg %s: %s\n"
+msgstr ""
+
+#, python-format
+msgid "abort: %s!\n"
+msgstr ""
+
+#, python-format
+msgid "abort: %s"
+msgstr ""
+
+msgid " empty string\n"
+msgstr ""
+
+msgid "killed!\n"
+msgstr ""
+
+#, python-format
+msgid "hg: unknown command '%s'\n"
+msgstr ""
+
+#, python-format
+msgid "abort: could not import module %s!\n"
+msgstr ""
+
+msgid "(did you forget to compile extensions?)\n"
+msgstr ""
+
+msgid "(is your Python install correct?)\n"
+msgstr ""
+
+#, python-format
+msgid "abort: error: %s\n"
+msgstr ""
+
+msgid "broken pipe\n"
+msgstr ""
+
+msgid "interrupted!\n"
+msgstr ""
+
+msgid ""
+"\n"
+"broken pipe\n"
+msgstr ""
+
+msgid "abort: out of memory\n"
+msgstr ""
+
+msgid "** unknown exception encountered, details follow\n"
+msgstr ""
+
+msgid "** report bug details to http://www.selenic.com/mercurial/bts\n"
+msgstr ""
+
+msgid "** or mercurial@selenic.com\n"
+msgstr ""
+
+#, python-format
+msgid "** Mercurial Distributed SCM (version %s)\n"
+msgstr ""
+
+#, python-format
+msgid "** Extensions loaded: %s\n"
+msgstr ""
+
+#, python-format
+msgid "no definition for alias '%s'\n"
+msgstr ""
+
+#, python-format
+msgid "alias '%s' resolves to unknown command '%s'\n"
+msgstr ""
+
+#, python-format
+msgid "alias '%s' resolves to ambiguous command '%s'\n"
+msgstr ""
+
+#, python-format
+msgid "alias '%s' shadows command\n"
+msgstr ""
+
+#, python-format
+msgid "malformed --config option: %s"
+msgstr ""
+
+#, python-format
+msgid "extension '%s' overrides commands: %s\n"
+msgstr ""
+
+msgid "Option --config may not be abbreviated!"
+msgstr ""
+
+msgid "Option --cwd may not be abbreviated!"
+msgstr ""
+
+msgid ""
+"Option -R has to be separated from other options (i.e. not -qR) and --"
+"repository may only be abbreviated as --repo!"
+msgstr ""
+
+#, python-format
+msgid "Time: real %.3f secs (user %.3f+%.3f sys %.3f+%.3f)\n"
+msgstr ""
+
+#, python-format
+msgid "repository '%s' is not local"
+msgstr ""
+
+msgid "invalid arguments"
+msgstr ""
+
+#, python-format
+msgid "unrecognized profiling format '%s' - Ignored\n"
+msgstr ""
+
+msgid ""
+"lsprof not available - install from http://codespeak.net/svn/user/arigo/hack/"
+"misc/lsprof/"
+msgstr ""
+
+#, python-format
+msgid "*** failed to import extension %s from %s: %s\n"
+msgstr "*** 匯入擴充套件 %s 失敗,路徑為 %s: %s\n"
+
+#, python-format
+msgid "*** failed to import extension %s: %s\n"
+msgstr ""
+
+#, python-format
+msgid "couldn't find merge tool %s\n"
+msgstr "找不到合併工具 %s\n"
+
+#, python-format
+msgid "tool %s can't handle symlinks\n"
+msgstr "%s 工具無法處理 symlinks\n"
+
+#, python-format
+msgid "tool %s can't handle binary\n"
+msgstr "%s 工具無法處理 binary\n"
+
+#, python-format
+msgid "tool %s requires a GUI\n"
+msgstr "%s 工具需要 GUI 環境\n"
+
+#, python-format
+msgid "picked tool '%s' for %s (binary %s symlink %s)\n"
+msgstr "選用 '%s' 工具來處理 %s (binary %s symlink %s)\n"
+
+#, python-format
+msgid ""
+" no tool found to merge %s\n"
+"keep (l)ocal or take (o)ther?"
+msgstr ""
+" 找不到工具可用來合併 %s\n"
+"維持 (l)ocal 還是選用 (o)ther?"
+
+msgid "&Local"
+msgstr ""
+
+msgid "&Other"
+msgstr ""
+
+msgid "l"
+msgstr ""
+
+#, python-format
+msgid "merging %s and %s to %s\n"
+msgstr "合併 %s 和 %s 至 %s\n"
+
+#, python-format
+msgid "merging %s\n"
+msgstr "合併 %s 中\n"
+
+#, python-format
+msgid "my %s other %s ancestor %s\n"
+msgstr ""
+
+msgid " premerge successful\n"
+msgstr ""
+
+#, python-format
+msgid ""
+" output file %s appears unchanged\n"
+"was merge successful (yn)?"
+msgstr ""
+
+msgid "&No"
+msgstr ""
+
+msgid "&Yes"
+msgstr ""
+
+msgid "n"
+msgstr ""
+
+#, python-format
+msgid "merging %s failed!\n"
+msgstr "合併 %s 失敗!\n"
+
+#, python-format
+msgid "Inconsistent state, %s:%s is good and bad"
+msgstr ""
+
+#, python-format
+msgid "unknown bisect kind %s"
+msgstr ""
+
+msgid "Date Formats"
+msgstr "日期格式"
+
+msgid ""
+"\n"
+"    Some commands allow the user to specify a date, e.g.:\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"
+"\n"
+"    This is the internal representation format for dates. unixtime is\n"
+"    the number of seconds since the epoch (1970-01-01 00:00 UTC).\n"
+"    offset is the offset of the local timezone, in seconds west of UTC\n"
+"    (negative if 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 ""
+
+msgid "File Name Patterns"
+msgstr "檔案名稱樣式"
+
+msgid ""
+"\n"
+"    Mercurial accepts several notations for identifying one or more\n"
+"    files at a time.\n"
+"\n"
+"    By default, Mercurial treats filenames as shell-style extended\n"
+"    glob patterns.\n"
+"\n"
+"    Alternate pattern notations must be specified explicitly.\n"
+"\n"
+"    To use a plain path name without any pattern matching, start it\n"
+"    with \"path:\". These path names must completely match starting at\n"
+"    the current repository root.\n"
+"\n"
+"    To use an extended glob, start a name with \"glob:\". Globs are\n"
+"    rooted at the current directory; a glob such as \"*.c\" will only\n"
+"    match files in the current directory ending with \".c\".\n"
+"\n"
+"    The supported glob syntax extensions are \"**\" to match any string\n"
+"    across path separators and \"{a,b}\" to mean \"a or b\".\n"
+"\n"
+"    To use a Perl/Python regular expression, start a name with \"re:\".\n"
+"    Regexp pattern matching is anchored at the root of the repository.\n"
+"\n"
+"    Plain examples:\n"
+"\n"
+"    path:foo/bar   a name bar in a directory named foo in the root of\n"
+"                   the repository\n"
+"    path:path:name a file or directory named \"path:name\"\n"
+"\n"
+"    Glob examples:\n"
+"\n"
+"    glob:*.c       any name ending in \".c\" in the current directory\n"
+"    *.c            any name ending in \".c\" in the current directory\n"
+"    **.c           any name ending in \".c\" in any subdirectory of the\n"
+"                   current directory including itself.\n"
+"    foo/*.c        any name ending in \".c\" in the directory foo\n"
+"    foo/**.c       any name ending in \".c\" in any subdirectory of foo\n"
+"                   including itself.\n"
+"\n"
+"    Regexp examples:\n"
+"\n"
+"    re:.*\\.c$      any name ending in \".c\", anywhere in the repository\n"
+"\n"
+"    "
+msgstr ""
+
+msgid "Environment Variables"
+msgstr "環境變數"
+
+msgid ""
+"\n"
+"HG::\n"
+"    Path to the 'hg' executable, automatically passed when running\n"
+"    hooks, extensions or external tools. If unset or empty, this is\n"
+"    the hg executable's name if it's frozen, or an executable named\n"
+"    'hg' (with %PATHEXT% [defaulting to COM/EXE/BAT/CMD] extensions on\n"
+"    Windows) is searched.\n"
+"\n"
+"HGEDITOR::\n"
+"    This is the name of the editor to run when committing. See EDITOR.\n"
+"\n"
+"    (deprecated, use .hgrc)\n"
+"\n"
+"HGENCODING::\n"
+"    This overrides the default locale setting detected by Mercurial.\n"
+"    This setting is used to convert data including usernames,\n"
+"    changeset descriptions, tag names, and branches. This setting can\n"
+"    be overridden with the --encoding command-line option.\n"
+"\n"
+"HGENCODINGMODE::\n"
+"    This sets Mercurial's behavior for handling unknown characters\n"
+"    while transcoding user input. The default is \"strict\", which\n"
+"    causes Mercurial to abort if it can't map a character. Other\n"
+"    settings include \"replace\", which replaces unknown characters, and\n"
+"    \"ignore\", which drops them. This setting can be overridden with\n"
+"    the --encodingmode command-line option.\n"
+"\n"
+"HGMERGE::\n"
+"    An executable to use for resolving merge conflicts. The program\n"
+"    will be executed with three arguments: local file, remote file,\n"
+"    ancestor file.\n"
+"\n"
+"    (deprecated, use .hgrc)\n"
+"\n"
+"HGRCPATH::\n"
+"    A list of files or directories to search for hgrc files. Item\n"
+"    separator is \":\" on Unix, \";\" on Windows. If HGRCPATH is not set,\n"
+"    platform default search path is used. If empty, only the .hg/hgrc\n"
+"    from the current repository is read.\n"
+"\n"
+"    For each element in HGRCPATH:\n"
+"    * if it's a directory, all files ending with .rc are added\n"
+"    * otherwise, the file itself will be added\n"
+"\n"
+"HGUSER::\n"
+"    This is the string used as the author of a commit. If not set,\n"
+"    available values will be considered in this order:\n"
+"\n"
+"    * HGUSER (deprecated)\n"
+"    * hgrc files from the HGRCPATH\n"
+"    * EMAIL\n"
+"    * interactive prompt\n"
+"    * LOGNAME (with '@hostname' appended)\n"
+"\n"
+"    (deprecated, use .hgrc)\n"
+"\n"
+"EMAIL::\n"
+"    May be used as the author of a commit; see HGUSER.\n"
+"\n"
+"LOGNAME::\n"
+"    May be used as the author of a commit; see HGUSER.\n"
+"\n"
+"VISUAL::\n"
+"    This is the name of the editor to use when committing. See EDITOR.\n"
+"\n"
+"EDITOR::\n"
+"    Sometimes Mercurial needs to open a text file in an editor for a\n"
+"    user to modify, for example when writing commit messages. The\n"
+"    editor it uses is determined by looking at the environment\n"
+"    variables HGEDITOR, VISUAL and EDITOR, in that order. The first\n"
+"    non-empty one is chosen. If all of them are empty, the editor\n"
+"    defaults to 'vi'.\n"
+"\n"
+"PYTHONPATH::\n"
+"    This is used by Python to find imported modules and may need to be\n"
+"    set appropriately if this Mercurial is not installed system-wide.\n"
+"    "
+msgstr ""
+
+msgid "Specifying Single Revisions"
+msgstr ""
+
+msgid ""
+"\n"
+"    Mercurial supports several ways to specify individual revisions.\n"
+"\n"
+"    A plain integer is treated as a revision number. Negative integers\n"
+"    are treated as topological offsets from the tip, with -1 denoting\n"
+"    the tip. As such, negative numbers are only useful if you've\n"
+"    memorized your local tree numbers and want to save typing a single\n"
+"    digit. This editor suggests copy and paste.\n"
+"\n"
+"    A 40-digit hexadecimal string is treated as a unique revision\n"
+"    identifier.\n"
+"\n"
+"    A hexadecimal string less than 40 characters long is treated as a\n"
+"    unique revision identifier, and referred to as a short-form\n"
+"    identifier. A short-form identifier is only valid if it is the\n"
+"    prefix of exactly one full-length identifier.\n"
+"\n"
+"    Any other string is treated as a tag name, which is a symbolic\n"
+"    name associated with a revision identifier. Tag names may not\n"
+"    contain the \":\" character.\n"
+"\n"
+"    The reserved name \"tip\" is a special tag that always identifies\n"
+"    the most recent revision.\n"
+"\n"
+"    The reserved name \"null\" indicates the null revision. This is the\n"
+"    revision of an empty repository, and the parent of revision 0.\n"
+"\n"
+"    The reserved name \".\" indicates the working directory parent. If\n"
+"    no working directory is checked out, it is equivalent to null. If\n"
+"    an uncommitted merge is in progress, \".\" is the revision of the\n"
+"    first parent.\n"
+"    "
+msgstr ""
+
+msgid "Specifying Multiple Revisions"
+msgstr ""
+
+msgid ""
+"\n"
+"    When Mercurial accepts more than one revision, they may be\n"
+"    specified individually, or provided as a topologically continuous\n"
+"    range, separated by the \":\" character.\n"
+"\n"
+"    The syntax of range notation is [BEGIN]:[END], where BEGIN and END\n"
+"    are revision identifiers. Both BEGIN and END are optional. If\n"
+"    BEGIN is not specified, it defaults to revision number 0. If END\n"
+"    is not specified, it defaults to the tip. The range \":\" thus means\n"
+"    \"all revisions\".\n"
+"\n"
+"    If BEGIN is greater than END, revisions are treated in reverse\n"
+"    order.\n"
+"\n"
+"    A range acts as a closed interval. This means that a range of 3:5\n"
+"    gives 3, 4 and 5. Similarly, a range of 9:6 gives 9, 8, 7, and 6.\n"
+"    "
+msgstr ""
+
+msgid "Diff Formats"
+msgstr ""
+
+msgid ""
+"\n"
+"    Mercurial's default format for showing changes between two\n"
+"    versions of a file is compatible with the unified format of GNU\n"
+"    diff, which can be used by GNU patch and many other standard\n"
+"    tools.\n"
+"\n"
+"    While this standard format is often enough, it does not encode the\n"
+"    following information:\n"
+"\n"
+"     - executable status and other permission bits\n"
+"     - copy or rename information\n"
+"     - changes in binary files\n"
+"     - creation or deletion of empty files\n"
+"\n"
+"    Mercurial also supports the extended diff format from the git VCS\n"
+"    which addresses these limitations. The git diff format is not\n"
+"    produced by default because a few widespread tools still do not\n"
+"    understand this format.\n"
+"\n"
+"    This means that when generating diffs from a Mercurial repository\n"
+"    (e.g. with \"hg export\"), you should be careful about things like\n"
+"    file copies and renames or other things mentioned above, because\n"
+"    when applying a standard diff to a different repository, this\n"
+"    extra information is lost. Mercurial's internal operations (like\n"
+"    push and pull) are not affected by this, because they use an\n"
+"    internal binary format for communicating changes.\n"
+"\n"
+"    To make Mercurial produce the git extended diff format, use the\n"
+"    --git option available for many commands, or set 'git = True' in\n"
+"    the [diff] section of your hgrc. You do not need to set this\n"
+"    option when importing diffs in this format or using them in the mq\n"
+"    extension.\n"
+"    "
+msgstr ""
+
+msgid "Template Usage"
+msgstr ""
+
+msgid ""
+"\n"
+"    Mercurial allows you to customize output of commands through\n"
+"    templates. You can either pass in a template from the command\n"
+"    line, via the --template option, or select an existing\n"
+"    template-style (--style).\n"
+"\n"
+"    You can customize output for any \"log-like\" command: log,\n"
+"    outgoing, incoming, tip, parents, heads and glog.\n"
+"\n"
+"    Three styles are packaged with Mercurial: default (the style used\n"
+"    when no explicit preference is passed), compact and changelog.\n"
+"    Usage:\n"
+"\n"
+"        $ hg log -r1 --style changelog\n"
+"\n"
+"    A template is a piece of text, with markup to invoke variable\n"
+"    expansion:\n"
+"\n"
+"        $ hg log -r1 --template \"{node}\\n\"\n"
+"        b56ce7b07c52de7d5fd79fb89701ea538af65746\n"
+"\n"
+"    Strings in curly braces are called keywords. The availability of\n"
+"    keywords depends on the exact context of the templater. These\n"
+"    keywords are usually available for templating a log-like command:\n"
+"\n"
+"    - author: String. The unmodified author of the changeset.\n"
+"    - branches: String. The name of the branch on which the changeset\n"
+"          was committed. Will be empty if the branch name was default.\n"
+"    - date: Date information. The date when the changeset was committed.\n"
+"    - desc: String. The text of the changeset description.\n"
+"    - diffstat: String. Statistics of changes with the following\n"
+"          format: \"modified files: +added/-removed lines\"\n"
+"    - files: List of strings. All files modified, added, or removed by\n"
+"          this changeset.\n"
+"    - file_adds: List of strings. Files added by this changeset.\n"
+"    - file_mods: List of strings. Files modified by this changeset.\n"
+"    - file_dels: List of strings. Files removed by this changeset.\n"
+"    - node: String. The changeset identification hash, as a\n"
+"          40-character hexadecimal string.\n"
+"    - parents: List of strings. The parents of the changeset.\n"
+"    - rev: Integer. The repository-local changeset revision number.\n"
+"    - tags: List of strings. Any tags associated with the changeset.\n"
+"\n"
+"    The \"date\" keyword does not produce human-readable output. If you\n"
+"    want to use a date in your output, you can use a filter to process\n"
+"    it. Filters are functions which return a string based on the input\n"
+"    variable. You can also use a chain of filters to get the desired\n"
+"    output:\n"
+"\n"
+"       $ hg tip --template \"{date|isodate}\\n\"\n"
+"       2008-08-21 18:22 +0000\n"
+"\n"
+"    List of filters:\n"
+"\n"
+"    - addbreaks: Any text. Add an XHTML \"<br />\" tag before the end of\n"
+"          every line except the last.\n"
+"    - age: Date. Returns a human-readable date/time difference between\n"
+"          the given date/time and the current date/time.\n"
+"    - basename: Any text. Treats the text as a path, and returns the\n"
+"          last component of the path after splitting by the path\n"
+"          separator (ignoring trailing separators). For example,\n"
+"          \"foo/bar/baz\" becomes \"baz\" and \"foo/bar//\" becomes \"bar"
+"\".\n"
+"    - stripdir: Treat the text as path and strip a directory level, if\n"
+"          possible. For example, \"foo\" and \"foo/bar\" becomes \"foo\".\n"
+"    - date: Date. Returns a date in a Unix date format, including\n"
+"          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 component.\n"
+"          Example: 'User <user@example.com>' becomes 'example.com'.\n"
+"    - email: Any text. Extracts the first string that looks like an\n"
+"          email address. Example: 'User <user@example.com>' becomes\n"
+"          '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"
+"    - fill76: Any text. Wraps the text to fit in 76 columns.\n"
+"    - firstline: Any text. Returns the first line of text.\n"
+"    - nonempty: Any text. Returns '(none)' if the string is empty.\n"
+"    - hgdate: Date. Returns the date as a pair of numbers:\n"
+"          \"1157407993 25200\" (Unix timestamp, timezone offset).\n"
+"    - isodate: Date. Returns the date in ISO 8601 format.\n"
+"    - localdate: Date. Converts a date to local date.\n"
+"    - obfuscate: Any text. Returns the input text rendered as a\n"
+"          sequence of XML entities.\n"
+"    - person: Any text. Returns the text before an email address.\n"
+"    - rfc822date: Date. Returns a date using the same format used\n"
+"          in email headers.\n"
+"    - short: Changeset hash. Returns the short form of a changeset\n"
+"          hash, i.e. a 12-byte hexadecimal string.\n"
+"    - shortdate: Date. Returns a date like \"2006-09-18\".\n"
+"    - strip: Any text. Strips all leading and trailing whitespace.\n"
+"    - tabindent: Any text. Returns the text, with every line except\n"
+"          the first starting with a tab character.\n"
+"    - urlescape: Any text. Escapes all \"special\" characters. For\n"
+"          example, \"foo bar\" becomes \"foo%20bar\".\n"
+"    - user: Any text. Returns the user portion of an email address.\n"
+"    "
+msgstr ""
+
+msgid "URL Paths"
+msgstr ""
+
+msgid ""
+"\n"
+"    Valid URLs are of the form:\n"
+"\n"
+"      local/filesystem/path (or file://local/filesystem/path)\n"
+"      http://[user[:pass]@]host[:port]/[path]\n"
+"      https://[user[:pass]@]host[:port]/[path]\n"
+"      ssh://[user[:pass]@]host[:port]/[path]\n"
+"\n"
+"    Paths in the local filesystem can either point to Mercurial\n"
+"    repositories or to bundle files (as created by 'hg bundle' or\n"
+"    'hg incoming --bundle').\n"
+"\n"
+"    An optional identifier after # indicates a particular branch, tag,\n"
+"    or changeset to use from the remote repository.\n"
+"\n"
+"    Some features, such as pushing to http:// and https:// URLs are\n"
+"    only possible if the feature is explicitly enabled on the remote\n"
+"    Mercurial server.\n"
+"\n"
+"    Some notes about using SSH with Mercurial:\n"
+"    - SSH requires an accessible shell account on the destination\n"
+"      machine and a copy of hg in the remote path or specified with as\n"
+"      remotecmd.\n"
+"    - path is relative to the remote user's home directory by default.\n"
+"      Use an extra slash at the start of a path to specify an absolute "
+"path:\n"
+"        ssh://example.com//tmp/repository\n"
+"    - Mercurial doesn't use its own compression via SSH; the right\n"
+"      thing to do is to configure it in your ~/.ssh/config, e.g.:\n"
+"        Host *.mylocalnetwork.example.com\n"
+"          Compression no\n"
+"        Host *\n"
+"          Compression yes\n"
+"      Alternatively specify \"ssh -C\" as your ssh command in your hgrc\n"
+"      or with the --ssh command line option.\n"
+"\n"
+"    These URLs can all be stored in your hgrc with path aliases under\n"
+"    the [paths] section like so:\n"
+"    [paths]\n"
+"    alias1 = URL1\n"
+"    alias2 = URL2\n"
+"    ...\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"
+"\n"
+"    Two path aliases are special because they are used as defaults\n"
+"    when you do not provide the URL to a command:\n"
+"\n"
+"    default:\n"
+"      When you create a repository with hg clone, the clone command\n"
+"      saves the location of the source repository as the new\n"
+"      repository's 'default' path. This is then used when you omit\n"
+"      path from push- and pull-like commands (including incoming and\n"
+"      outgoing).\n"
+"\n"
+"    default-push:\n"
+"      The push command will look for a path named 'default-push', and\n"
+"      prefer it over 'default' if both are defined.\n"
+"    "
+msgstr ""
+
+msgid "can only share local repositories"
+msgstr ""
+
+msgid "destination already exists"
+msgstr "目的端已存在"
+
+msgid "updating working directory\n"
+msgstr "更新 working directory 中\n"
+
+#, python-format
+msgid "destination directory: %s\n"
+msgstr "目的端目錄: %s\n"
+
+#, python-format
+msgid "destination '%s' already exists"
+msgstr "目的端 '%s' 已存在"
+
+#, python-format
+msgid "destination '%s' is not empty"
+msgstr "目的端 '%s' 不是空的"
+
+msgid ""
+"src repository does not support revision lookup and so doesn't support clone "
+"by revision"
+msgstr ""
+
+msgid "clone from remote to remote not supported"
+msgstr ""
+
+msgid "updated"
+msgstr "已更新"
+
+msgid "merged"
+msgstr "已合併"
+
+msgid "removed"
+msgstr "已移除"
+
+msgid "unresolved"
+msgstr ""
+
+#, python-format
+msgid "%d files %s"
+msgstr ""
+
+msgid "use 'hg resolve' to retry unresolved file merges\n"
+msgstr ""
+
+msgid ""
+"use 'hg resolve' to retry unresolved file merges or 'hg up --clean' to "
+"abandon\n"
+msgstr ""
+
+msgid "(branch merge, don't forget to commit)\n"
+msgstr ""
+
+#, python-format
+msgid "error reading %s/.hg/hgrc: %s\n"
+msgstr ""
+
+msgid "SSL support is unavailable"
+msgstr ""
+
+msgid "IPv6 is not available on this system"
+msgstr "此作業系統不支援 IPv6"
+
+#, python-format
+msgid "cannot start server at '%s:%d': %s"
+msgstr "無法於 '%s:%d' 啟動伺服器: %s"
+
+#, python-format
+msgid "calling hook %s: %s\n"
+msgstr ""
+
+#, python-format
+msgid "%s hook is invalid (\"%s\" not in a module)"
+msgstr ""
+
+#, python-format
+msgid "%s hook is invalid (import of \"%s\" failed)"
+msgstr ""
+
+#, python-format
+msgid "%s hook is invalid (\"%s\" is not defined)"
+msgstr ""
+
+#, python-format
+msgid "%s hook is invalid (\"%s\" is not callable)"
+msgstr ""
+
+#, python-format
+msgid "error: %s hook failed: %s\n"
+msgstr ""
+
+#, python-format
+msgid "error: %s hook raised an exception: %s\n"
+msgstr ""
+
+#, python-format
+msgid "%s hook failed"
+msgstr ""
+
+#, python-format
+msgid "warning: %s hook failed\n"
+msgstr ""
+
+#, python-format
+msgid "running hook %s: %s\n"
+msgstr ""
+
+#, python-format
+msgid "%s hook %s"
+msgstr ""
+
+#, python-format
+msgid "warning: %s hook %s\n"
+msgstr ""
+
+msgid "connection ended unexpectedly"
+msgstr ""
+
+#, python-format
+msgid "unsupported URL component: \"%s\""
+msgstr ""
+
+#, python-format
+msgid "using %s\n"
+msgstr ""
+
+#, python-format
+msgid "capabilities: %s\n"
+msgstr ""
+
+msgid "operation not supported over http"
+msgstr ""
+
+#, python-format
+msgid "sending %s command\n"
+msgstr ""
+
+#, python-format
+msgid "sending %s bytes\n"
+msgstr ""
+
+msgid "authorization failed"
+msgstr ""
+
+#, python-format
+msgid "http error while sending %s command\n"
+msgstr ""
+
+msgid "http error, possibly caused by proxy setting"
+msgstr ""
+
+#, python-format
+msgid "real URL is %s\n"
+msgstr ""
+
+#, python-format
+msgid "requested URL: '%s'\n"
+msgstr ""
+
+#, python-format
+msgid "'%s' does not appear to be an hg repository"
+msgstr ""
+
+#, python-format
+msgid "'%s' sent a broken Content-Type header (%s)"
+msgstr ""
+
+#, python-format
+msgid "'%s' uses newer protocol %s"
+msgstr ""
+
+msgid "look up remote revision"
+msgstr ""
+
+msgid "unexpected response:"
+msgstr ""
+
+msgid "look up remote changes"
+msgstr ""
+
+msgid "push failed (unexpected response):"
+msgstr ""
+
+#, python-format
+msgid "push failed: %s"
+msgstr ""
+
+msgid "Python support for SSL and HTTPS is not installed"
+msgstr ""
+
+msgid "cannot create new http repository"
+msgstr ""
+
+#, python-format
+msgid "%s: ignoring invalid syntax '%s'\n"
+msgstr ""
+
+#, python-format
+msgid "skipping unreadable ignore file '%s': %s\n"
+msgstr ""
+
+#, python-format
+msgid "repository %s not found"
+msgstr ""
+
+#, python-format
+msgid "repository %s already exists"
+msgstr ""
+
+#, python-format
+msgid "requirement '%s' not supported"
+msgstr ""
+
+#, python-format
+msgid ".hg/sharedpath points to nonexistent directory %s"
+msgstr ""
+
+#, python-format
+msgid "%r cannot be used in a tag name"
+msgstr ""
+
+msgid "working copy of .hgtags is changed (please commit .hgtags manually)"
+msgstr ""
+
+#, python-format
+msgid "%s, line %s: %s\n"
+msgstr ""
+
+msgid "cannot parse entry"
+msgstr ""
+
+#, python-format
+msgid "node '%s' is not well formed"
+msgstr ""
+
+#, python-format
+msgid "tag '%s' refers to unknown node"
+msgstr ""
+
+#, python-format
+msgid "working directory has unknown parent '%s'!"
+msgstr ""
+
+#, python-format
+msgid "unknown revision '%s'"
+msgstr ""
+
+#, python-format
+msgid "filtering %s through %s\n"
+msgstr ""
+
+msgid "journal already exists - run hg recover"
+msgstr ""
+
+msgid "rolling back interrupted transaction\n"
+msgstr ""
+
+msgid "no interrupted transaction available\n"
+msgstr ""
+
+msgid "rolling back last transaction\n"
+msgstr ""
+
+#, python-format
+msgid "Named branch could not be reset, current branch still is: %s\n"
+msgstr ""
+
+msgid "no rollback information available\n"
+msgstr ""
+
+#, python-format
+msgid "waiting for lock on %s held by %r\n"
+msgstr ""
+
+#, python-format
+msgid "repository %s"
+msgstr ""
+
+#, python-format
+msgid "working directory of %s"
+msgstr ""
+
+#, python-format
+msgid " %s: searching for copy revision for %s\n"
+msgstr ""
+
+#, python-format
+msgid " %s: copy %s:%s\n"
+msgstr ""
+
+msgid "cannot partially commit a merge (do not specify files or patterns)"
+msgstr ""
+
+msgid "file not found!"
+msgstr ""
+
+msgid "no match under directory!"
+msgstr ""
+
+msgid "file not tracked!"
+msgstr ""
+
+msgid "nothing changed\n"
+msgstr ""
+
+msgid "unresolved merge conflicts (see hg resolve)"
+msgstr ""
+
+#, python-format
+msgid "committing subrepository %s\n"
+msgstr ""
+
+#, python-format
+msgid "trouble committing %s!\n"
+msgstr ""
+
+#, python-format
+msgid "%s does not exist!\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"%s: files over 10MB may cause memory and performance problems\n"
+"(use 'hg revert %s' to unadd the file)\n"
+msgstr ""
+
+#, python-format
+msgid "%s not added: only files and symlinks supported currently\n"
+msgstr ""
+
+#, python-format
+msgid "%s already tracked!\n"
+msgstr ""
+
+#, python-format
+msgid "%s not added!\n"
+msgstr ""
+
+#, python-format
+msgid "%s still exists!\n"
+msgstr ""
+
+#, python-format
+msgid "%s not tracked!\n"
+msgstr ""
+
+#, python-format
+msgid "%s not removed!\n"
+msgstr ""
+
+#, python-format
+msgid "copy failed: %s is not a file or a symbolic link\n"
+msgstr ""
+
+msgid "searching for changes\n"
+msgstr ""
+
+#, python-format
+msgid "examining %s:%s\n"
+msgstr ""
+
+msgid "branch already found\n"
+msgstr ""
+
+#, python-format
+msgid "found incomplete branch %s:%s\n"
+msgstr ""
+
+#, python-format
+msgid "found new changeset %s\n"
+msgstr ""
+
+#, python-format
+msgid "request %d: %s\n"
+msgstr ""
+
+#, python-format
+msgid "received %s:%s\n"
+msgstr ""
+
+#, python-format
+msgid "narrowing %d:%d %s\n"
+msgstr ""
+
+#, python-format
+msgid "found new branch changeset %s\n"
+msgstr ""
+
+#, python-format
+msgid "narrowed branch search to %s:%s\n"
+msgstr ""
+
+msgid "already have changeset "
+msgstr ""
+
+msgid "warning: repository is unrelated\n"
+msgstr ""
+
+msgid "repository is unrelated"
+msgstr ""
+
+msgid "found new changesets starting at "
+msgstr ""
+
+#, python-format
+msgid "%d total queries\n"
+msgstr ""
+
+msgid "common changesets up to "
+msgstr ""
+
+msgid "requesting all changes\n"
+msgstr ""
+
+msgid ""
+"Partial pull cannot be done because other repository doesn't support "
+"changegroupsubset."
+msgstr ""
+
+#, python-format
+msgid "abort: push creates new remote branch '%s'!\n"
+msgstr ""
+
+msgid "abort: push creates new remote heads!\n"
+msgstr ""
+
+msgid "(did you forget to merge? use push -f to force)\n"
+msgstr ""
+
+msgid "note: unsynced remote changes!\n"
+msgstr ""
+
+#, python-format
+msgid "%d changesets found\n"
+msgstr ""
+
+msgid "list of changesets:\n"
+msgstr ""
+
+#, python-format
+msgid "empty or missing revlog for %s"
+msgstr ""
+
+#, python-format
+msgid "add changeset %s\n"
+msgstr ""
+
+msgid "adding changesets\n"
+msgstr ""
+
+msgid "received changelog group is empty"
+msgstr ""
+
+msgid "adding manifests\n"
+msgstr ""
+
+msgid "adding file changes\n"
+msgstr ""
+
+#, python-format
+msgid "adding %s revisions\n"
+msgstr ""
+
+msgid "received file revlog group is empty"
+msgstr ""
+
+#, python-format
+msgid " (%+d heads)"
+msgstr ""
+
+#, python-format
+msgid "added %d changesets with %d changes to %d files%s\n"
+msgstr ""
+
+msgid "updating the branch cache\n"
+msgstr ""
+
+msgid "Unexpected response from remote server:"
+msgstr ""
+
+msgid "operation forbidden by server"
+msgstr ""
+
+msgid "locking the remote repository failed"
+msgstr ""
+
+msgid "the server sent an unknown error code"
+msgstr ""
+
+msgid "streaming all changes\n"
+msgstr ""
+
+#, python-format
+msgid "%d files to transfer, %s of data\n"
+msgstr ""
+
+#, python-format
+msgid "adding %s (%s)\n"
+msgstr ""
+
+#, python-format
+msgid "transferred %s in %.1f seconds (%s/sec)\n"
+msgstr ""
+
+msgid "no [smtp]host in hgrc - cannot send mail"
+msgstr ""
+
+#, python-format
+msgid "sending mail: smtp host %s, port %s\n"
+msgstr ""
+
+msgid "can't use TLS: Python SSL support not installed"
+msgstr ""
+
+msgid "(using tls)\n"
+msgstr ""
+
+#, python-format
+msgid "(authenticating to mail server as %s)\n"
+msgstr ""
+
+#, python-format
+msgid "sending mail: %s\n"
+msgstr ""
+
+msgid "smtp specified as email transport, but no smtp host configured"
+msgstr ""
+
+#, python-format
+msgid "%r specified as email transport, but not in PATH"
+msgstr ""
+
+#, python-format
+msgid "ignoring invalid sendcharset: %s\n"
+msgstr ""
+
+#, python-format
+msgid "invalid email address: %s"
+msgstr ""
+
+#, python-format
+msgid "invalid local address: %s"
+msgstr ""
+
+#, python-format
+msgid "failed to remove %s from manifest"
+msgstr ""
+
+#, python-format
+msgid "diff context lines count must be an integer, not %r"
+msgstr ""
+
+#, python-format
+msgid ""
+"untracked file in working directory differs from file in requested revision: "
+"'%s'"
+msgstr ""
+
+#, python-format
+msgid "case-folding collision between %s and %s"
+msgstr ""
+
+#, python-format
+msgid ""
+" conflicting flags for %s\n"
+"(n)one, e(x)ec or sym(l)ink?"
+msgstr ""
+
+msgid "&None"
+msgstr ""
+
+msgid "E&xec"
+msgstr ""
+
+msgid "Sym&link"
+msgstr ""
+
+msgid "resolving manifests\n"
+msgstr ""
+
+#, python-format
+msgid " overwrite %s partial %s\n"
+msgstr ""
+
+#, python-format
+msgid " ancestor %s local %s remote %s\n"
+msgstr ""
+
+#, python-format
+msgid ""
+" local changed %s which remote deleted\n"
+"use (c)hanged version or (d)elete?"
+msgstr ""
+
+msgid "&Changed"
+msgstr ""
+
+msgid "&Delete"
+msgstr ""
+
+msgid "c"
+msgstr ""
+
+#, python-format
+msgid ""
+"remote changed %s which local deleted\n"
+"use (c)hanged version or leave (d)eleted?"
+msgstr ""
+
+msgid "&Deleted"
+msgstr ""
+
+#, python-format
+msgid "preserving %s for resolve of %s\n"
+msgstr ""
+
+#, python-format
+msgid "update failed to remove %s: %s!\n"
+msgstr ""
+
+#, python-format
+msgid "getting %s\n"
+msgstr ""
+
+#, python-format
+msgid "getting %s to %s\n"
+msgstr ""
+
+#, python-format
+msgid "warning: detected divergent renames of %s to:\n"
+msgstr ""
+
+#, python-format
+msgid "branch %s not found"
+msgstr "找不到 branch %s"
+
+msgid "can't merge with ancestor"
+msgstr "不能和 ancestor 合併"
+
+msgid "nothing to merge (use 'hg update' or check 'hg heads')"
+msgstr "沒有可合併的變更 (請使用 'hg update' 或 'hg heads' 檢查)"
+
+msgid "outstanding uncommitted changes (use 'hg status' to list changes)"
+msgstr "還有未 commit 的變更 (請使用 'hg status' 來列出變更)"
+
+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 ""
+
+#, python-format
+msgid "cannot create %s: destination already exists"
+msgstr "無法建立 %s: 目的端已存在"
+
+#, python-format
+msgid "cannot create %s: unable to create destination directory"
+msgstr "無法建立 %s: 無法建立目的端目錄"
+
+#, python-format
+msgid "found patch at byte %d\n"
+msgstr "於 byte %d 找到 patch\n"
+
+msgid "patch generated by hg export\n"
+msgstr "經由 hg export 產生的 patch\n"
+
+#, python-format
+msgid "unable to find '%s' for patching\n"
+msgstr "找不到可 patch 的 '%s'\n"
+
+#, python-format
+msgid "patching file %s\n"
+msgstr "檔案 %s patching 中\n"
+
+#, python-format
+msgid "%d out of %d hunks FAILED -- saving rejects to file %s\n"
+msgstr ""
+
+#, python-format
+msgid "bad hunk #%d %s (%d %d %d %d)"
+msgstr ""
+
+#, python-format
+msgid "file %s already exists\n"
+msgstr "檔案 %s 已存在\n"
+
+#, python-format
+msgid "Hunk #%d succeeded at %d %s(offset %d line).\n"
+msgstr ""
+
+#, python-format
+msgid "Hunk #%d succeeded at %d %s(offset %d lines).\n"
+msgstr ""
+
+#, python-format
+msgid "Hunk #%d FAILED at %d\n"
+msgstr ""
+
+#, python-format
+msgid "bad hunk #%d"
+msgstr ""
+
+#, python-format
+msgid "bad hunk #%d old text line %d"
+msgstr ""
+
+msgid "could not extract binary patch"
+msgstr "無法解開 binary patch"
+
+#, python-format
+msgid "binary patch is %d bytes, not %d"
+msgstr "binary patch 是 %d bytes,而不是 %d"
+
+#, python-format
+msgid "unable to strip away %d dirs from %s"
+msgstr ""
+
+msgid "undefined source and destination files"
+msgstr ""
+
+#, python-format
+msgid "malformed patch %s %s"
+msgstr ""
+
+#, python-format
+msgid "unsupported parser state: %s"
+msgstr ""
+
+#, python-format
+msgid "patch command failed: %s"
+msgstr "patch 命令失敗: %s"
+
+#, python-format
+msgid "Unsupported line endings type: %s"
+msgstr "不支援的行尾結束類型: %s"
+
+#, python-format
+msgid "no valid hunks found; trying with %r instead\n"
+msgstr ""
+
+#, python-format
+msgid "exited with status %d"
+msgstr "以狀態 %d 離開"
+
+#, python-format
+msgid "killed by signal %d"
+msgstr "已被信號 %d 終止"
+
+#, python-format
+msgid "stopped by signal %d"
+msgstr "已被信號 %d 停止"
+
+msgid "invalid exit code"
+msgstr "不合法的 exit code"
+
+#, python-format
+msgid "saving bundle to %s\n"
+msgstr "正在儲存 bundle 至 %s\n"
+
+msgid "adding branch\n"
+msgstr "正在新增 branch\n"
+
+#, python-format
+msgid "cannot %s; remote repository does not support the %r capability"
+msgstr ""
+
+#, python-format
+msgid "unknown compression type %r"
+msgstr "未知的壓縮類型 %r"
+
+#, python-format
+msgid "index %s unknown flags %#04x for format v0"
+msgstr ""
+
+#, python-format
+msgid "index %s unknown flags %#04x for revlogng"
+msgstr ""
+
+#, python-format
+msgid "index %s unknown format %d"
+msgstr "index %s 未知的格式 %d"
+
+#, python-format
+msgid "index %s is corrupted"
+msgstr "index %s 已被竄改"
+
+msgid "no node"
+msgstr "沒有 node"
+
+msgid "ambiguous identifier"
+msgstr "不明確的 identifier"
+
+msgid "no match found"
+msgstr ""
+
+#, python-format
+msgid "incompatible revision flag %x"
+msgstr ""
+
+#, python-format
+msgid "%s not found in the transaction"
+msgstr "於 transaction 中找不到 %s"
+
+msgid "unknown base"
+msgstr "未知的 base"
+
+msgid "consistency error adding group"
+msgstr ""
+
+#, python-format
+msgid "%s looks like a binary file."
+msgstr "%s 看起來像是二進位檔案。"
+
+msgid "can only specify two labels."
+msgstr "只能指定兩個 labels。"
+
+msgid "warning: conflicts during merge.\n"
+msgstr "警告: 合併中發生衝突。\n"
+
+#, python-format
+msgid "couldn't parse location %s"
+msgstr "無法解析位址 %s"
+
+msgid "could not create remote repo"
+msgstr "無法建立遠端 repo"
+
+msgid "remote: "
+msgstr "遠端: "
+
+msgid "no suitable response from remote hg"
+msgstr ""
+
+#, python-format
+msgid "push refused: %s"
+msgstr "push 被拒絕: %s"
+
+msgid "unsynced changes"
+msgstr "未同步的變更"
+
+msgid "cannot lock static-http repository"
+msgstr "無法鎖定 static-http repository"
+
+msgid "cannot create new static-http repository"
+msgstr "無法建立新的 static-http repository"
+
+#, python-format
+msgid "invalid entry in fncache, line %s"
+msgstr ""
+
+msgid "scanning\n"
+msgstr "掃描中\n"
+
+#, python-format
+msgid "%d files, %d bytes to transfer\n"
+msgstr "傳送 %d 檔案,%d bytes\n"
+
+#, python-format
+msgid "sending %s (%d bytes)\n"
+msgstr "傳送 %s (%d bytes)\n"
+
+#, python-format
+msgid ""
+" subrepository sources for %s differ\n"
+"use (l)ocal source (%s) or (r)emote source (%s)?"
+msgstr ""
+
+msgid "&Remote"
+msgstr ""
+
+msgid "r"
+msgstr ""
+
+#, python-format
+msgid ""
+" local changed subrepository %s which remote removed\n"
+"use (c)hanged version or (d)elete?"
+msgstr ""
+
+#, python-format
+msgid ""
+" remote changed subrepository %s which local removed\n"
+"use (c)hanged version or (d)elete?"
+msgstr ""
+
+#, python-format
+msgid "removing subrepo %s\n"
+msgstr ""
+
+#, python-format
+msgid "pulling subrepo %s\n"
+msgstr ""
+
+#, python-format
+msgid "pushing subrepo %s\n"
+msgstr ""
+
+msgid "unmatched quotes"
+msgstr ""
+
+#, python-format
+msgid "error expanding '%s%%%s'"
+msgstr ""
+
+#, python-format
+msgid "unknown filter '%s'"
+msgstr ""
+
+#, python-format
+msgid "style not found: %s"
+msgstr ""
+
+#, python-format
+msgid "template file %s: %s"
+msgstr ""
+
+msgid "cannot use transaction when it is already committed/aborted"
+msgstr ""
+
+#, python-format
+msgid "failed to truncate %s\n"
+msgstr ""
+
+msgid "transaction abort!\n"
+msgstr ""
+
+msgid "rollback completed\n"
+msgstr ""
+
+msgid "rollback failed - please run hg recover\n"
+msgstr ""
+
+#, python-format
+msgid "Not trusting file %s from untrusted user %s, group %s\n"
+msgstr ""
+
+#, python-format
+msgid "Ignored: %s\n"
+msgstr ""
+
+#, python-format
+msgid "ignoring untrusted configuration option %s.%s = %s\n"
+msgstr ""
+
+#, python-format
+msgid "%s.%s not a boolean ('%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 ""
+
+#, python-format
+msgid "username %s contains a newline\n"
+msgstr ""
+
+msgid "unrecognized response\n"
+msgstr ""
+
+msgid "response expected"
+msgstr ""
+
+msgid "password: "
+msgstr ""
+
+msgid "edit failed"
+msgstr ""
+
+msgid "http authorization required"
+msgstr ""
+
+msgid "http authorization required\n"
+msgstr ""
+
+#, python-format
+msgid "realm: %s\n"
+msgstr ""
+
+#, python-format
+msgid "user: %s\n"
+msgstr ""
+
+msgid "user:"
+msgstr ""
+
+#, python-format
+msgid "http auth: user %s, password %s\n"
+msgstr ""
+
+#, python-format
+msgid "proxying through http://%s:%s\n"
+msgstr ""
+
+#, python-format
+msgid "command '%s' failed: %s"
+msgstr ""
+
+#, python-format
+msgid "path contains illegal component: %s"
+msgstr ""
+
+#, python-format
+msgid "path %r is inside repo %r"
+msgstr ""
+
+#, python-format
+msgid "path %r traverses symbolic link %r"
+msgstr ""
+
+msgid "Hardlinks not supported"
+msgstr ""
+
+#, python-format
+msgid "could not symlink to %r: %s"
+msgstr ""
+
+#, python-format
+msgid "invalid date: %r "
+msgstr ""
+
+#, python-format
+msgid "date exceeds 32 bits: %d"
+msgstr ""
+
+#, python-format
+msgid "impossible time zone offset: %d"
+msgstr ""
+
+#, python-format
+msgid "invalid day spec: %s"
+msgstr ""
+
+#, python-format
+msgid "%.0f GB"
+msgstr ""
+
+#, python-format
+msgid "%.1f GB"
+msgstr ""
+
+#, python-format
+msgid "%.2f GB"
+msgstr ""
+
+#, python-format
+msgid "%.0f MB"
+msgstr ""
+
+#, python-format
+msgid "%.1f MB"
+msgstr ""
+
+#, python-format
+msgid "%.2f MB"
+msgstr ""
+
+#, python-format
+msgid "%.0f KB"
+msgstr ""
+
+#, python-format
+msgid "%.1f KB"
+msgstr ""
+
+#, python-format
+msgid "%.2f KB"
+msgstr ""
+
+#, python-format
+msgid "%.0f bytes"
+msgstr ""
+
+msgid "cannot verify bundle or remote repos"
+msgstr ""
+
+msgid "interrupted"
+msgstr ""
+
+#, python-format
+msgid "empty or missing %s"
+msgstr ""
+
+#, python-format
+msgid "data length off by %d bytes"
+msgstr ""
+
+#, python-format
+msgid "index contains %d extra bytes"
+msgstr ""
+
+#, python-format
+msgid "warning: `%s' uses revlog format 1"
+msgstr ""
+
+#, python-format
+msgid "warning: `%s' uses revlog format 0"
+msgstr ""
+
+#, python-format
+msgid "rev %d points to nonexistent changeset %d"
+msgstr ""
+
+#, python-format
+msgid "rev %d points to unexpected changeset %d"
+msgstr ""
+
+#, python-format
+msgid " (expected %s)"
+msgstr ""
+
+#, python-format
+msgid "unknown parent 1 %s of %s"
+msgstr ""
+
+#, python-format
+msgid "unknown parent 2 %s of %s"
+msgstr ""
+
+#, python-format
+msgid "checking parents of %s"
+msgstr ""
+
+#, python-format
+msgid "duplicate revision %d (%d)"
+msgstr ""
+
+#, python-format
+msgid "repository uses revlog format %d\n"
+msgstr ""
+
+msgid "checking changesets\n"
+msgstr ""
+
+#, python-format
+msgid "unpacking changeset %s"
+msgstr ""
+
+msgid "checking manifests\n"
+msgstr ""
+
+#, python-format
+msgid "%s not in changesets"
+msgstr ""
+
+msgid "file without name in manifest"
+msgstr ""
+
+#, python-format
+msgid "reading manifest delta %s"
+msgstr ""
+
+msgid "crosschecking files in changesets and manifests\n"
+msgstr ""
+
+#, python-format
+msgid "changeset refers to unknown manifest %s"
+msgstr ""
+
+msgid "in changeset but not in manifest"
+msgstr ""
+
+msgid "in manifest but not in changeset"
+msgstr ""
+
+msgid "checking files\n"
+msgstr ""
+
+#, python-format
+msgid "cannot decode filename '%s'"
+msgstr ""
+
+#, python-format
+msgid "broken revlog! (%s)"
+msgstr ""
+
+msgid "missing revlog!"
+msgstr ""
+
+#, python-format
+msgid "%s not in manifests"
+msgstr ""
+
+#, python-format
+msgid "unpacked size is %s, %s expected"
+msgstr ""
+
+#, python-format
+msgid "unpacking %s"
+msgstr ""
+
+#, python-format
+msgid "empty or missing copy source revlog %s:%s"
+msgstr ""
+
+#, python-format
+msgid "warning: %s@%s: copy source revision is nullid %s:%s"
+msgstr ""
+
+#, python-format
+msgid "checking rename of %s"
+msgstr ""
+
+#, python-format
+msgid "%s in manifests not found"
+msgstr ""
+
+#, python-format
+msgid "warning: orphan revlog '%s'"
+msgstr ""
+
+#, python-format
+msgid "%d files, %d changesets, %d total revisions\n"
+msgstr ""
+
+#, python-format
+msgid "%d warnings encountered!\n"
+msgstr ""
+
+#, python-format
+msgid "%d integrity errors encountered!\n"
+msgstr ""
+
+#, python-format
+msgid "(first damaged changeset appears to be %d)\n"
+msgstr ""
+
+msgid "user name not available - set USERNAME environment variable"
+msgstr ""
--- a/mercurial/ancestor.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/ancestor.py	Wed Jul 08 17:03:16 2009 -0700
@@ -42,24 +42,24 @@
     # traverse ancestors in order of decreasing distance from root
     def ancestors(vertex):
         h = [(depth[vertex], vertex)]
-        seen = {}
+        seen = set()
         while h:
             d, n = heapq.heappop(h)
             if n not in seen:
-                seen[n] = 1
+                seen.add(n)
                 yield (d, n)
                 for p in parentcache[n]:
                     heapq.heappush(h, (depth[p], p))
 
     def generations(vertex):
-        sg, s = None, {}
+        sg, s = None, set()
         for g, v in ancestors(vertex):
             if g != sg:
                 if sg:
                     yield sg, s
-                sg, s = g, {v:1}
+                sg, s = g, set((v,))
             else:
-                s[v] = 1
+                s.add(v)
         yield sg, s
 
     x = generations(a)
--- a/mercurial/archival.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/archival.py	Wed Jul 08 17:03:16 2009 -0700
@@ -34,7 +34,7 @@
         raise util.Abort(_('archive prefix contains illegal components'))
     return prefix
 
-class tarit:
+class tarit(object):
     '''write archive to tar file or stream.  can write uncompressed,
     or compress with gzip or bzip2.'''
 
@@ -44,7 +44,7 @@
             timestamp = None
             if 'timestamp' in kw:
                 timestamp = kw.pop('timestamp')
-            if timestamp == None:
+            if timestamp is None:
                 self.timestamp = time.time()
             else:
                 self.timestamp = timestamp
@@ -106,7 +106,7 @@
     def done(self):
         self.z.close()
 
-class tellable:
+class tellable(object):
     '''provide tell method for zipfile.ZipFile when writing to http
     response file object.'''
 
@@ -124,7 +124,7 @@
     def tell(self):
         return self.offset
 
-class zipit:
+class zipit(object):
     '''write archive to zip file or stream.  can write uncompressed,
     or compressed with deflate.'''
 
@@ -156,7 +156,7 @@
     def done(self):
         self.z.close()
 
-class fileit:
+class fileit(object):
     '''write archive as files in directory.'''
 
     def __init__(self, name, prefix, mtime):
--- a/mercurial/bdiff.c	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/bdiff.c	Wed Jul 08 17:03:16 2009 -0700
@@ -18,6 +18,10 @@
 # define inline
 #endif
 
+#ifdef __linux
+# define inline __inline
+#endif
+
 #ifdef _WIN32
 #ifdef _MSC_VER
 #define inline __inline
--- a/mercurial/byterange.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/byterange.py	Wed Jul 08 17:03:16 2009 -0700
@@ -23,7 +23,7 @@
 import stat
 import urllib
 import urllib2
-import rfc822
+import email.Utils
 
 try:
     from cStringIO import StringIO
@@ -214,7 +214,7 @@
         localfile = urllib.url2pathname(file)
         stats = os.stat(localfile)
         size = stats[stat.ST_SIZE]
-        modified = rfc822.formatdate(stats[stat.ST_MTIME])
+        modified = email.Utils.formatdate(stats[stat.ST_MTIME])
         mtype = mimetypes.guess_type(file)[0]
         if host:
             host, port = urllib.splitport(host)
--- a/mercurial/changelog.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/changelog.py	Wed Jul 08 17:03:16 2009 -0700
@@ -23,7 +23,20 @@
     text = text.replace('\\', '\\\\').replace('\n', '\\n').replace('\r', '\\r')
     return text.replace('\0', '\\0')
 
-class appender:
+def decodeextra(text):
+    extra = {}
+    for l in text.split('\0'):
+        if l:
+            k, v = l.decode('string_escape').split(':', 1)
+            extra[k] = v
+    return extra
+
+def encodeextra(d):
+    # keys must be sorted to produce a deterministic changelog entry
+    items = [_string_escape('%s:%s' % (k, d[k])) for k in sorted(d)]
+    return "\0".join(items)
+
+class appender(object):
     '''the changelog index must be updated last on disk, so we use this class
     to delay writes to it'''
     def __init__(self, fp, buf):
@@ -76,19 +89,20 @@
 
 class changelog(revlog.revlog):
     def __init__(self, opener):
-        revlog.revlog.__init__(self, opener, "00changelog.i")
+        self._realopener = opener
+        self._delayed = False
+        revlog.revlog.__init__(self, self._delayopener, "00changelog.i")
 
     def delayupdate(self):
         "delay visibility of index updates to other readers"
-        self._realopener = self.opener
-        self.opener = self._delayopener
+        self._delayed = True
         self._delaycount = len(self)
         self._delaybuf = []
         self._delayname = None
 
     def finalize(self, tr):
         "finalize index updates"
-        self.opener = self._realopener
+        self._delayed = False
         # move redirected index data back into place
         if self._delayname:
             util.rename(self._delayname + ".a", self._delayname)
@@ -103,7 +117,7 @@
     def _delayopener(self, name, mode='r'):
         fp = self._realopener(name, mode)
         # only divert the index
-        if not name == self.indexfile:
+        if not self._delayed or not name == self.indexfile:
             return fp
         # if we're doing an initial clone, divert to another file
         if self._delaycount == 0:
@@ -145,19 +159,6 @@
             return
         return revlog.revlog.checkinlinesize(self, tr, fp)
 
-    def decode_extra(self, text):
-        extra = {}
-        for l in text.split('\0'):
-            if l:
-                k, v = l.decode('string_escape').split(':', 1)
-                extra[k] = v
-        return extra
-
-    def encode_extra(self, d):
-        # keys must be sorted to produce a deterministic changelog entry
-        items = [_string_escape('%s:%s' % (k, d[k])) for k in sorted(d)]
-        return "\0".join(items)
-
     def read(self, node):
         """
         format used:
@@ -192,19 +193,27 @@
         else:
             time, timezone, extra = extra_data
             time, timezone = float(time), int(timezone)
-            extra = self.decode_extra(extra)
+            extra = decodeextra(extra)
         if not extra.get('branch'):
             extra['branch'] = 'default'
         files = l[3:]
         return (manifest, user, (time, timezone), files, desc, extra)
 
-    def add(self, manifest, files, desc, transaction, p1=None, p2=None,
-                  user=None, date=None, extra={}):
-
+    def add(self, manifest, files, desc, transaction, p1, p2,
+                  user, date=None, extra={}):
         user = user.strip()
+        # An empty username or a username with a "\n" will make the
+        # revision text contain two "\n\n" sequences -> corrupt
+        # repository since read cannot unpack the revision.
+        if not user:
+            raise error.RevlogError(_("empty username"))
         if "\n" in user:
             raise error.RevlogError(_("username %s contains a newline")
                                     % repr(user))
+
+        # strip trailing whitespace and leading and trailing empty lines
+        desc = '\n'.join([l.rstrip() for l in desc.splitlines()]).strip('\n')
+
         user, desc = encoding.fromlocal(user), encoding.fromlocal(desc)
 
         if date:
@@ -214,7 +223,7 @@
         if extra and extra.get("branch") in ("default", ""):
             del extra["branch"]
         if extra:
-            extra = self.encode_extra(extra)
+            extra = encodeextra(extra)
             parseddate = "%s %s" % (parseddate, extra)
         l = [hex(manifest), user, parseddate] + sorted(files) + ["", desc]
         text = "\n".join(l)
--- a/mercurial/cmdutil.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/cmdutil.py	Wed Jul 08 17:03:16 2009 -0700
@@ -7,8 +7,8 @@
 
 from node import hex, nullid, nullrev, short
 from i18n import _
-import os, sys, bisect, stat, errno
-import mdiff, bdiff, util, templater, templatefilters, patch, error, encoding
+import os, sys, errno, re, glob
+import mdiff, bdiff, util, templater, patch, error, encoding
 import match as _match
 
 revrangesep = ':'
@@ -101,10 +101,10 @@
 def remoteui(src, opts):
     'build a remote ui from ui or repo and opts'
     if hasattr(src, 'baseui'): # looks like a repository
-        dst = src.baseui # drop repo-specific config
+        dst = src.baseui.copy() # drop repo-specific config
         src = src.ui # copy target options from repo
     else: # assume it's a global ui object
-        dst = src # keep all global options
+        dst = src.copy() # keep all global options
 
     # copy ssh-specific options
     for o in 'ssh', 'remotecmd':
@@ -154,7 +154,7 @@
             return defval
         return repo.changelog.rev(repo.lookup(val))
 
-    seen, l = {}, []
+    seen, l = set(), []
     for spec in revs:
         if revrangesep in spec:
             start, end = spec.split(revrangesep, 1)
@@ -164,13 +164,13 @@
             for rev in xrange(start, end+step, step):
                 if rev in seen:
                     continue
-                seen[rev] = 1
+                seen.add(rev)
                 l.append(rev)
         else:
             rev = revfix(repo, spec, None)
             if rev in seen:
                 continue
-            seen[rev] = 1
+            seen.add(rev)
             l.append(rev)
 
     return l
@@ -217,7 +217,7 @@
             i += 1
         return ''.join(newname)
     except KeyError, inst:
-        raise util.Abort(_("invalid format spec '%%%s' in output file name") %
+        raise util.Abort(_("invalid format spec '%%%s' in output filename") %
                          inst.args[0])
 
 def make_file(repo, pat, node=None,
@@ -235,14 +235,27 @@
                               pathname),
                 mode)
 
+def expandpats(pats):
+    if not util.expandglobs:
+        return list(pats)
+    ret = []
+    for p in pats:
+        kind, name = _match._patsplit(p, None)
+        if kind is None:
+            globbed = glob.glob(name)
+            if globbed:
+                ret.extend(globbed)
+                continue
+        ret.append(p)
+    return ret
+
 def match(repo, pats=[], opts={}, globbed=False, default='relpath'):
     if not globbed and default == 'relpath':
-        pats = util.expand_glob(pats or [])
+        pats = expandpats(pats or [])
     m = _match.match(repo.root, repo.getcwd(), pats,
                     opts.get('include'), opts.get('exclude'), default)
     def badfn(f, msg):
         repo.ui.warn("%s: %s\n" % (m.rel(f), msg))
-        return False
     m.bad = badfn
     return m
 
@@ -252,15 +265,15 @@
 def matchfiles(repo, files):
     return _match.exact(repo.root, repo.getcwd(), files)
 
-def findrenames(repo, added=None, removed=None, threshold=0.5):
+def findrenames(repo, added, removed, threshold):
     '''find renamed files -- yields (before, after, score) tuples'''
-    if added is None or removed is None:
-        added, removed = repo.status()[1:3]
     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()
 
             # bdiff.blocks() returns blocks of matching lines
@@ -285,8 +298,8 @@
         dry_run = opts.get('dry_run')
     if similarity is None:
         similarity = float(opts.get('similarity') or 0)
-    add, remove = [], []
-    mapping = {}
+    # we'd use status here, except handling of symlinks and ignore is tricky
+    added, unknown, deleted, removed = [], [], [], []
     audit_path = util.path_auditor(repo.root)
     m = match(repo, pats, opts)
     for abs in repo.walk(m):
@@ -299,27 +312,29 @@
         rel = m.rel(abs)
         exact = m.exact(abs)
         if good and abs not in repo.dirstate:
-            add.append(abs)
-            mapping[abs] = rel, m.exact(abs)
+            unknown.append(abs)
             if repo.ui.verbose or not exact:
                 repo.ui.status(_('adding %s\n') % ((pats and rel) or abs))
-        if repo.dirstate[abs] != 'r' and (not good or not util.lexists(target)
+        elif repo.dirstate[abs] != 'r' and (not good or not util.lexists(target)
             or (os.path.isdir(target) and not os.path.islink(target))):
-            remove.append(abs)
-            mapping[abs] = rel, exact
+            deleted.append(abs)
             if repo.ui.verbose or not exact:
                 repo.ui.status(_('removing %s\n') % ((pats and rel) or abs))
+        # for finding renames
+        elif repo.dirstate[abs] == 'r':
+            removed.append(abs)
+        elif repo.dirstate[abs] == 'a':
+            added.append(abs)
     if not dry_run:
-        repo.remove(remove)
-        repo.add(add)
+        repo.remove(deleted)
+        repo.add(unknown)
     if similarity > 0:
-        for old, new, score in findrenames(repo, add, remove, similarity):
-            oldrel, oldexact = mapping[old]
-            newrel, newexact = mapping[new]
-            if repo.ui.verbose or not oldexact or not newexact:
+        for old, new, score in findrenames(repo, added + unknown,
+                                           removed + deleted, similarity):
+            if repo.ui.verbose or not m.exact(old) or not m.exact(new):
                 repo.ui.status(_('recording removal of %s as rename to %s '
                                  '(%d%% similar)\n') %
-                               (oldrel, newrel, score * 100))
+                               (m.rel(old), m.rel(new), score * 100))
             if not dry_run:
                 repo.copy(old, new)
 
@@ -451,7 +466,7 @@
     # srcs: list of (hgsep, hgsep, ossep, bool)
     # return: function that takes hgsep and returns ossep
     def targetpathafterfn(pat, dest, srcs):
-        if util.patkind(pat, None)[0]:
+        if _match.patkind(pat):
             # a mercurial pattern
             res = lambda p: os.path.join(dest,
                                          os.path.basename(util.localpath(p)))
@@ -491,7 +506,7 @@
         return res
 
 
-    pats = util.expand_glob(pats)
+    pats = expandpats(pats)
     if not pats:
         raise util.Abort(_('no source or destination specified'))
     if len(pats) == 1:
@@ -499,7 +514,7 @@
     dest = pats.pop()
     destdirexists = os.path.isdir(dest) and not os.path.islink(dest)
     if not destdirexists:
-        if len(pats) > 1 or util.patkind(pats[0], None)[0]:
+        if len(pats) > 1 or _match.patkind(pats[0]):
             raise util.Abort(_('with multiple sources, destination must be an '
                                'existing directory'))
         if util.endswithsep(dest):
@@ -528,7 +543,7 @@
 
     return errors
 
-def service(opts, parentfn=None, initfn=None, runfn=None):
+def service(opts, parentfn=None, initfn=None, runfn=None, logfile=None):
     '''Run a command as a service.'''
 
     if opts['daemon'] and not opts['daemon_pipefds']:
@@ -572,11 +587,18 @@
         os.close(wfd)
         sys.stdout.flush()
         sys.stderr.flush()
-        fd = os.open(util.nulldev, os.O_RDWR)
-        if fd != 0: os.dup2(fd, 0)
-        if fd != 1: os.dup2(fd, 1)
-        if fd != 2: os.dup2(fd, 2)
-        if fd not in (0, 1, 2): os.close(fd)
+
+        nullfd = os.open(util.nulldev, os.O_RDWR)
+        logfilefd = nullfd
+        if logfile:
+            logfilefd = os.open(logfile, os.O_RDWR | os.O_CREAT | os.O_APPEND)
+        os.dup2(nullfd, 0)
+        os.dup2(logfilefd, 1)
+        os.dup2(logfilefd, 2)
+        if nullfd not in (0, 1, 2):
+            os.close(nullfd)
+        if logfile and logfilefd not in (0, 1, 2):
+            os.close(logfilefd)
 
     if runfn:
         return runfn()
@@ -712,10 +734,8 @@
 
     def __init__(self, ui, repo, patch, diffopts, mapfile, buffered):
         changeset_printer.__init__(self, ui, repo, patch, diffopts, buffered)
-        filters = templatefilters.filters.copy()
-        filters['formatnode'] = (ui.debugflag and (lambda x: x)
-                                 or (lambda x: x[:12]))
-        self.t = templater.templater(mapfile, filters,
+        formatnode = ui.debugflag and (lambda x: x) or (lambda x: x[:12])
+        self.t = templater.templater(mapfile, {'formatnode': formatnode},
                                      cache={
                                          'parent': '{rev}:{node|formatnode} ',
                                          'manifest': '{rev}:{node|formatnode}',
@@ -998,7 +1018,7 @@
     positive if walking forwards through revs, last rev in the
     sequence iterated over - use to reset state for the current window
 
-    "add", rev, fns: out-of-order traversal of the given file names
+    "add", rev, fns: out-of-order traversal of the given filenames
     fns, which changed during revision rev - use to gather data for
     possible display
 
@@ -1089,7 +1109,7 @@
     if slowpath:
         if follow:
             raise util.Abort(_('can only follow copies/renames for explicit '
-                               'file names'))
+                               'filenames'))
 
         # The slow path checks files modified in every changeset.
         def changerevgen():
@@ -1103,7 +1123,7 @@
                 fncache[rev] = matches
                 wanted.add(rev)
 
-    class followfilter:
+    class followfilter(object):
         def __init__(self, onlyfirst=False):
             self.startrev = nullrev
             self.roots = []
@@ -1187,39 +1207,45 @@
     if opts.get('addremove'):
         addremove(repo, pats, opts)
 
-    m = match(repo, pats, opts)
-    if pats:
-        modified, added, removed = repo.status(match=m)[:3]
-        files = sorted(modified + added + removed)
+    return commitfunc(ui, repo, message, match(repo, pats, opts), opts)
 
-        def is_dir(f):
-            name = f + '/'
-            i = bisect.bisect(files, name)
-            return i < len(files) and files[i].startswith(name)
+def commiteditor(repo, ctx, subs):
+    if ctx.description():
+        return ctx.description()
+    return commitforceeditor(repo, ctx, subs)
 
-        for f in m.files():
-            if f == '.':
-                continue
-            if f not in files:
-                rf = repo.wjoin(f)
-                rel = repo.pathto(f)
-                try:
-                    mode = os.lstat(rf)[stat.ST_MODE]
-                except OSError:
-                    if is_dir(f): # deleted directory ?
-                        continue
-                    raise util.Abort(_("file %s not found!") % rel)
-                if stat.S_ISDIR(mode):
-                    if not is_dir(f):
-                        raise util.Abort(_("no match under directory %s!")
-                                         % rel)
-                elif not (stat.S_ISREG(mode) or stat.S_ISLNK(mode)):
-                    raise util.Abort(_("can't commit %s: "
-                                       "unsupported file type!") % rel)
-                elif f not in repo.dirstate:
-                    raise util.Abort(_("file %s not tracked!") % rel)
-        m = matchfiles(repo, files)
-    try:
-        return commitfunc(ui, repo, message, m, opts)
-    except ValueError, inst:
-        raise util.Abort(str(inst))
+def commitforceeditor(repo, ctx, subs):
+    edittext = []
+    modified, added, removed = ctx.modified(), ctx.added(), ctx.removed()
+    if ctx.description():
+        edittext.append(ctx.description())
+    edittext.append("")
+    edittext.append("") # Empty line between message and comments.
+    edittext.append(_("HG: Enter commit message."
+                      "  Lines beginning with 'HG:' are removed."))
+    edittext.append(_("HG: Leave message empty to abort commit."))
+    edittext.append("HG: --")
+    edittext.append(_("HG: user: %s") % ctx.user())
+    if ctx.p2():
+        edittext.append(_("HG: branch merge"))
+    if ctx.branch():
+        edittext.append(_("HG: branch '%s'")
+                        % encoding.tolocal(ctx.branch()))
+    edittext.extend([_("HG: subrepo %s") % s for s in subs])
+    edittext.extend([_("HG: added %s") % f for f in added])
+    edittext.extend([_("HG: changed %s") % f for f in modified])
+    edittext.extend([_("HG: removed %s") % f for f in removed])
+    if not added and not modified and not removed:
+        edittext.append(_("HG: no files changed"))
+    edittext.append("")
+    # run editor in the repository root
+    olddir = os.getcwd()
+    os.chdir(repo.root)
+    text = repo.ui.edit("\n".join(edittext), ctx.user())
+    text = re.sub("(?m)^HG:.*\n", "", text)
+    os.chdir(olddir)
+
+    if not text.strip():
+        raise util.Abort(_("empty commit message"))
+
+    return text
--- a/mercurial/commands.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/commands.py	Wed Jul 08 17:03:16 2009 -0700
@@ -8,7 +8,7 @@
 from node import hex, nullid, nullrev, short
 from lock import release
 from i18n import _, gettext
-import os, re, sys, textwrap, subprocess, difflib, time
+import os, re, sys, subprocess, difflib, time
 import hg, util, revlog, bundlerepo, extensions, copies, context, error
 import patch, help, mdiff, tempfile, url, encoding
 import archival, changegroup, cmdutil, sshserver, hbisect
@@ -24,29 +24,27 @@
     repository.
 
     The files will be added to the repository at the next commit. To
-    undo an add before that, see hg revert.
+    undo an add before that, see hg forget.
 
     If no names are given, add all files to the repository.
     """
 
-    rejected = None
+    bad = []
     exacts = {}
     names = []
     m = cmdutil.match(repo, pats, opts)
-    m.bad = lambda x,y: True
-    for abs in repo.walk(m):
-        if m.exact(abs):
-            if ui.verbose:
-                ui.status(_('adding %s\n') % m.rel(abs))
-            names.append(abs)
-            exacts[abs] = 1
-        elif abs not in repo.dirstate:
-            ui.status(_('adding %s\n') % m.rel(abs))
-            names.append(abs)
+    oldbad = m.bad
+    m.bad = lambda x,y: bad.append(x) or oldbad(x,y)
+
+    for f in repo.walk(m):
+        exact = m.exact(f)
+        if exact or f not in repo.dirstate:
+            names.append(f)
+            if ui.verbose or not exact:
+                ui.status(_('adding %s\n') % m.rel(f))
     if not opts.get('dry_run'):
-        rejected = repo.add(names)
-        rejected = [p for p in rejected if p in exacts]
-    return rejected and 1 or 0
+        bad += [f for f in repo.add(names) if f in m.files()]
+    return bad and 1 or 0
 
 def addremove(ui, repo, *pats, **opts):
     """add all new files, delete all missing files
@@ -74,23 +72,24 @@
     return cmdutil.addremove(repo, pats, opts, similarity=sim/100.)
 
 def annotate(ui, repo, *pats, **opts):
-    """show changeset information per file line
+    """show changeset information by line for each file
 
     List changes in files, showing the revision id responsible for
     each line
 
-    This command is useful to discover who did a change or when a
-    change took place.
+    This command is useful for discovering when a change was made and
+    by whom.
 
     Without the -a/--text option, annotate will avoid processing files
-    it detects as binary. With -a, annotate will generate an
-    annotation anyway, probably with undesirable results.
+    it detects as binary. With -a, annotate will annotate the file
+    anyway, although the results will probably be neither useful
+    nor desirable.
     """
     datefunc = ui.quiet and util.shortdate or util.datestr
     getdate = util.cachefunc(lambda x: datefunc(x[0].date()))
 
     if not pats:
-        raise util.Abort(_('at least one file name or pattern required'))
+        raise util.Abort(_('at least one filename or pattern is required'))
 
     opmap = [('user', lambda x: ui.shortuser(x[0].user())),
              ('number', lambda x: str(x[0].rev())),
@@ -136,7 +135,7 @@
                 ui.write("%s: %s" % (" ".join(p), l[1]))
 
 def archive(ui, repo, dest, **opts):
-    '''create unversioned archive of a repository revision
+    '''create an unversioned archive of a repository revision
 
     By default, the revision used is the parent of the working
     directory; use -r/--rev to specify a different revision.
@@ -185,16 +184,16 @@
     Commit the backed out changes as a new changeset. The new
     changeset is a child of the backed out changeset.
 
-    If you back out a changeset other than the tip, a new head is
+    If you backout a changeset other than the tip, a new head is
     created. This head will be the new tip and you should merge this
-    backout changeset with another head (current one by default).
+    backout changeset with another head.
 
     The --merge option remembers the parent of the working directory
     before starting the backout, then merges the new head with that
     changeset afterwards. This saves you from doing the merge by hand.
     The result of this merge is not committed, as with a normal merge.
 
-    See \'hg help dates\' for a list of formats valid for -d/--date.
+    See 'hg help dates' for a list of formats valid for -d/--date.
     '''
     if rev and node:
         raise util.Abort(_("please specify just one revision"))
@@ -215,14 +214,14 @@
     op1, op2 = repo.dirstate.parents()
     a = repo.changelog.ancestor(op1, node)
     if a != node:
-        raise util.Abort(_('cannot back out change on a different branch'))
+        raise util.Abort(_('cannot backout change on a different branch'))
 
     p1, p2 = repo.changelog.parents(node)
     if p1 == nullid:
-        raise util.Abort(_('cannot back out a change with no parents'))
+        raise util.Abort(_('cannot backout a change with no parents'))
     if p2 != nullid:
         if not opts.get('parent'):
-            raise util.Abort(_('cannot back out a merge changeset without '
+            raise util.Abort(_('cannot backout a merge changeset without '
                                '--parent'))
         p = repo.lookup(opts['parent'])
         if p not in (p1, p2):
@@ -274,18 +273,18 @@
     bad, then mark the latest changeset which is free from the problem
     as good. Bisect will update your working directory to a revision
     for testing (unless the -U/--noupdate option is specified). Once
-    you have performed tests, mark the working directory as bad or
-    good and bisect will either update to another candidate changeset
+    you have performed tests, mark the working directory as good or
+    bad, and bisect will either update to another candidate changeset
     or announce that it has found the bad revision.
 
     As a shortcut, you can also use the revision argument to mark a
     revision as good or bad without checking it out first.
 
-    If you supply a command it will be used for automatic bisection.
-    Its exit status will be used as flag to mark revision as bad or
-    good. In case exit status is 0 the revision is marked as good, 125
-    - skipped, 127 (command not found) - bisection will be aborted;
-    any other status bigger than 0 will mark revision as bad.
+    If you supply a command, it will be used for automatic bisection.
+    Its exit status will be used to mark revisions as good or bad:
+    status 0 means good, 125 means to skip the revision, 127
+    (command not found) will abort the bisection, and any other
+    non-zero exit status means the revision is bad.
     """
     def print_result(nodes, good):
         displayer = cmdutil.show_changeset(ui, repo, {})
@@ -340,6 +339,8 @@
 
     if command:
         commandpath = util.find_exe(command)
+        if commandpath is None:
+            raise util.Abort(_("cannot find executable: %s") % command)
         changesets = 1
         try:
             while changesets:
@@ -356,9 +357,9 @@
                     raise util.Abort(_("%s killed") % command)
                 else:
                     transition = "bad"
-                node = repo.lookup(rev or '.')
-                state[transition].append(node)
-                ui.note(_('Changeset %s: %s\n') % (short(node), transition))
+                ctx = repo[rev or '.']
+                state[transition].append(ctx.node())
+                ui.status(_('Changeset %d:%s: %s\n') % (ctx, ctx, transition))
                 check_state(state, interactive=False)
                 # bisect
                 nodes, changesets, good = hbisect.bisect(repo.changelog, state)
@@ -406,18 +407,20 @@
     """set or show the current branch name
 
     With no argument, show the current branch name. With one argument,
-    set the working directory branch name (the branch does not exist
-    in the repository until the next commit). It is recommended to use
-    the 'default' branch as your primary development branch.
+    set the working directory branch name (the branch will not exist
+    in the repository until the next commit). Standard practice
+    recommends that primary development take place on the 'default'
+    branch.
 
     Unless -f/--force is specified, branch will not let you set a
-    branch name that shadows an existing branch.
+    branch name that already exists, even if it's inactive.
 
     Use -C/--clean to reset the working directory branch to that of
     the parent of the working directory, negating a previous branch
     change.
 
-    Use the command 'hg update' to switch to an existing branch.
+    Use the command 'hg update' to switch to an existing branch. Use
+    'hg commit --close-branch' to mark this branch as closed.
     """
 
     if opts.get('clean'):
@@ -434,20 +437,27 @@
     else:
         ui.write("%s\n" % encoding.tolocal(repo.dirstate.branch()))
 
-def branches(ui, repo, active=False):
+def branches(ui, repo, active=False, closed=False):
     """list repository named branches
 
     List the repository's named branches, indicating which ones are
-    inactive. If active is specified, only show active branches.
-
-    A branch is considered active if it contains repository heads.
+    inactive. If -c/--closed is specified, also list branches which have
+    been marked closed (see hg commit --close-branch).
+
+    If -a/--active is specified, only show active branches. A branch
+    is considered active if it contains repository heads.
 
     Use the command 'hg update' to switch to an existing branch.
     """
+
     hexfunc = ui.debugflag and hex or short
     activebranches = [encoding.tolocal(repo[n].branch())
-                            for n in repo.heads(closed=False)]
-    branches = sorted([(tag in activebranches, repo.changelog.rev(node), tag)
+                            for n in repo.heads()]
+    def testactive(tag, node):
+        realhead = tag in activebranches
+        open = node in repo.branchheads(tag, closed=False)
+        return realhead and open
+    branches = sorted([(testactive(tag, node), repo.changelog.rev(node), tag)
                           for tag, node in repo.branchtags().items()],
                       reverse=True)
 
@@ -460,6 +470,8 @@
                 if isactive:
                     notice = ''
                 elif hn not in repo.branchheads(tag, closed=False):
+                    if not closed:
+                        continue
                     notice = ' (closed)'
                 else:
                     notice = ' (inactive)'
@@ -476,9 +488,11 @@
     If no destination repository is specified the destination is
     assumed to have all the nodes specified by one or more --base
     parameters. To create a bundle containing all changesets, use
-    -a/--all (or --base null). To change the compression method
-    applied, use the -t/--type option (by default, bundles are
-    compressed using bz2).
+    -a/--all (or --base null).
+
+    You can change compression method with the -t/--type option.
+    The available compression methods are: none, bzip2, and
+    gzip (by default, bundles are compressed using bzip2).
 
     The bundle file can then be transferred using conventional means
     and applied to another repository with the unbundle or pull
@@ -497,13 +511,13 @@
         base = opts.get('base')
     if base:
         if dest:
-            raise util.Abort(_("--base is incompatible with specifiying "
+            raise util.Abort(_("--base is incompatible with specifying "
                                "a destination"))
         base = [repo.lookup(rev) for rev in base]
         # create the right base
         # XXX: nodesbetween / changegroup* should be "fixed" instead
         o = []
-        has = {nullid: None}
+        has = set((nullid,))
         for n in base:
             has.update(repo.changelog.reachable(n))
         if revs:
@@ -592,8 +606,7 @@
 
     It is possible to specify an ssh:// URL as the destination, but no
     .hg/hgrc and working directory will be created on the remote side.
-    Look at the help text for URLs for important details about ssh://
-    URLs.
+    Please see 'hg help urls' for important details about ssh:// URLs.
 
     For efficiency, hardlinks are used for cloning whenever the source
     and destination are on the same filesystem (note this applies only
@@ -626,13 +639,13 @@
 
     Commit changes to the given files into the repository. Unlike a
     centralized RCS, this operation is a local operation. See hg push
-    for means to actively distribute your changes.
+    for a way to actively distribute your changes.
 
     If a list of files is omitted, all changes reported by "hg status"
     will be committed.
 
     If you are committing the result of a merge, do not provide any
-    file names or -I/-X filters.
+    filenames or -I/-X filters.
 
     If no commit message is specified, the configured editor is
     started to prompt you for a message.
@@ -642,13 +655,17 @@
     extra = {}
     if opts.get('close_branch'):
         extra['close'] = 1
+    e = cmdutil.commiteditor
+    if opts.get('force_editor'):
+        e = cmdutil.commitforceeditor
+
     def commitfunc(ui, repo, message, match, opts):
-        return repo.commit(match.files(), message, opts.get('user'),
-            opts.get('date'), match, force_editor=opts.get('force_editor'),
-            extra=extra)
+        return repo.commit(message, opts.get('user'), opts.get('date'), match,
+                           editor=e, extra=extra)
 
     node = cmdutil.commit(ui, repo, commitfunc, pats, opts)
     if not node:
+        ui.status(_("nothing changed\n"))
         return
     cl = repo.changelog
     rev = cl.rev(node)
@@ -674,7 +691,7 @@
     the source must be a single file.
 
     By default, this command copies the contents of files as they
-    stand in the working directory. If invoked with -A/--after, the
+    exist in the working directory. If invoked with -A/--after, the
     operation is recorded, but no copying is performed.
 
     This command takes effect with the next commit. To undo a copy
@@ -779,16 +796,16 @@
 def showconfig(ui, repo, *values, **opts):
     """show combined config settings from all hgrc files
 
-    With no args, print names and values of all config items.
-
-    With one arg of the form section.name, print just the value of
-    that config item.
-
-    With multiple args, print names and values of all config items
-    with matching section names.
-
-    With the --debug flag, the source (filename and line number) is
-    printed for each config item.
+    With no arguments, print names and values of all config items.
+
+    With one argument of the form section.name, print just the value
+    of that config item.
+
+    With multiple arguments, print names and values of all config
+    items with matching section names.
+
+    With --debug, the source (filename and line number) is printed
+    for each config item.
     """
 
     untrusted = bool(opts.get('untrusted'))
@@ -849,6 +866,14 @@
     for f in repo.dirstate.copies():
         ui.write(_("copy: %s -> %s\n") % (repo.dirstate.copied(f), f))
 
+def debugsub(ui, repo, rev=None):
+    if rev == '':
+        rev = None
+    for k,v in sorted(repo[rev].substate.items()):
+        ui.write('path %s\n' % k)
+        ui.write(' source   %s\n' % v[0])
+        ui.write(' revision %s\n' % v[1])
+
 def debugdata(ui, file_, rev):
     """dump the contents of a data file revision"""
     r = revlog.revlog(util.opener(os.getcwd(), audit=False), file_[:-2] + ".i")
@@ -885,7 +910,7 @@
             short(node), short(pp[0]), short(pp[1])))
 
 def debugindexdot(ui, file_):
-    """dump an index DAG as a .dot file"""
+    """dump an index DAG as a graphviz dot file"""
     r = revlog.revlog(util.opener(os.getcwd(), audit=False), file_)
     ui.write("digraph G {\n")
     for i in r:
@@ -969,7 +994,7 @@
                        " or misconfigured. Please check your .hgrc file)\n"))
         else:
             ui.write(_(" Internal patcher failure, please report this error"
-                       " to http://www.selenic.com/mercurial/bts\n"))
+                       " to http://mercurial.selenic.com/bts/\n"))
     problems += patchproblems
 
     os.unlink(fa)
@@ -1075,7 +1100,7 @@
     m = cmdutil.match(repo, pats, opts)
     it = patch.diff(repo, node1, node2, match=m, opts=patch.diffopts(ui, opts))
     for chunk in it:
-        repo.ui.write(chunk)
+        ui.write(chunk)
 
 def export(ui, repo, *changesets, **opts):
     """dump the header and diffs for one or more changesets
@@ -1106,7 +1131,7 @@
     diff anyway, probably with undesirable results.
 
     Use the -g/--git option to generate diffs in the git extended diff
-    format. Read the diffs help topic for more information.
+    format. See 'hg help diffs' for more information.
 
     With the --switch-parent option, the diff will be against the
     second parent. It can be useful to review a merge.
@@ -1122,6 +1147,37 @@
                  switch_parent=opts.get('switch_parent'),
                  opts=patch.diffopts(ui, opts))
 
+def forget(ui, repo, *pats, **opts):
+    """forget the specified files on the next commit
+
+    Mark the specified files so they will no longer be tracked
+    after the next commit.
+
+    This only removes files from the current branch, not from the
+    entire project history, and it does not delete them from the
+    working directory.
+
+    To undo a forget before the next commit, see hg add.
+    """
+
+    if not pats:
+        raise util.Abort(_('no files specified'))
+
+    m = cmdutil.match(repo, pats, opts)
+    s = repo.status(match=m, clean=True)
+    forget = sorted(s[0] + s[1] + s[3] + s[6])
+
+    for f in m.files():
+        if f not in repo.dirstate and not os.path.isdir(m.rel(f)):
+            ui.warn(_('not removing %s: file is already untracked\n')
+                    % m.rel(f))
+
+    for f in forget:
+        if ui.verbose or not m.exact(f):
+            ui.status(_('removing %s\n') % m.rel(f))
+
+    repo.remove(forget, unlink=False)
+
 def grep(ui, repo, pattern, *pats, **opts):
     """search for a pattern in specified files and revisions
 
@@ -1151,9 +1207,16 @@
         sep = eol = '\0'
 
     fcache = {}
+    forder = []
     def getfile(fn):
         if fn not in fcache:
+            if len(fcache) > 20:
+                del fcache[forder.pop(0)]
             fcache[fn] = repo.file(fn)
+        else:
+            forder.remove(fn)
+
+        forder.append(fn)
         return fcache[fn]
 
     def matchlines(body):
@@ -1207,16 +1270,14 @@
                 for i in xrange(blo, bhi):
                     yield ('+', b[i])
 
-    prev = {}
-    def display(fn, rev, states, prevstates):
+    def display(fn, r, pstates, states):
         datefunc = ui.quiet and util.shortdate or util.datestr
         found = False
         filerevmatches = {}
-        r = prev.get(fn, -1)
         if opts.get('all'):
-            iter = difflinestates(states, prevstates)
+            iter = difflinestates(pstates, states)
         else:
-            iter = [('', l) for l in prevstates]
+            iter = [('', l) for l in states]
         for change, l in iter:
             cols = [fn, str(r)]
             if opts.get('line_number'):
@@ -1238,8 +1299,8 @@
             found = True
         return found
 
-    fstate = {}
     skip = {}
+    revfiles = {}
     get = util.cachefunc(lambda r: repo[r].changeset())
     changeiter, matchfn = cmdutil.walkchangerevs(ui, repo, pats, get, opts)
     found = False
@@ -1247,73 +1308,94 @@
     for st, rev, fns in changeiter:
         if st == 'window':
             matches.clear()
+            revfiles.clear()
         elif st == 'add':
             ctx = repo[rev]
-            matches[rev] = {}
+            pctx = ctx.parents()[0]
+            parent = pctx.rev()
+            matches.setdefault(rev, {})
+            matches.setdefault(parent, {})
+            files = revfiles.setdefault(rev, [])
             for fn in fns:
-                if fn in skip:
-                    continue
+                flog = getfile(fn)
                 try:
-                    grepbody(fn, rev, getfile(fn).read(ctx.filenode(fn)))
-                    fstate.setdefault(fn, [])
-                    if follow:
-                        copied = getfile(fn).renamed(ctx.filenode(fn))
-                        if copied:
-                            copies.setdefault(rev, {})[fn] = copied[0]
+                    fnode = ctx.filenode(fn)
                 except error.LookupError:
-                    pass
+                    continue
+
+                copied = flog.renamed(fnode)
+                copy = follow and copied and copied[0]
+                if copy:
+                    copies.setdefault(rev, {})[fn] = copy
+                if fn in skip:
+                    if copy:
+                        skip[copy] = True
+                    continue
+                files.append(fn)
+
+                if not matches[rev].has_key(fn):
+                    grepbody(fn, rev, flog.read(fnode))
+
+                pfn = copy or fn
+                if not matches[parent].has_key(pfn):
+                    try:
+                        fnode = pctx.filenode(pfn)
+                        grepbody(pfn, parent, flog.read(fnode))
+                    except error.LookupError:
+                        pass
         elif st == 'iter':
-            for fn, m in sorted(matches[rev].items()):
+            parent = repo[rev].parents()[0].rev()
+            for fn in sorted(revfiles.get(rev, [])):
+                states = matches[rev][fn]
                 copy = copies.get(rev, {}).get(fn)
                 if fn in skip:
                     if copy:
                         skip[copy] = True
                     continue
-                if fn in prev or fstate[fn]:
-                    r = display(fn, rev, m, fstate[fn])
+                pstates = matches.get(parent, {}).get(copy or fn, [])
+                if pstates or states:
+                    r = display(fn, rev, pstates, states)
                     found = found or r
                     if r and not opts.get('all'):
                         skip[fn] = True
                         if copy:
                             skip[copy] = True
-                fstate[fn] = m
-                if copy:
-                    fstate[copy] = m
-                prev[fn] = rev
-
-    for fn, state in sorted(fstate.items()):
-        if fn in skip:
-            continue
-        if fn not in copies.get(prev[fn], {}):
-            found = display(fn, rev, {}, state) or found
-    return (not found and 1) or 0
 
 def heads(ui, repo, *branchrevs, **opts):
     """show current repository heads or show branch heads
 
     With no arguments, show all repository head changesets.
 
-    If branch or revisions names are given this will show the heads of
-    the specified branches or the branches those revisions are tagged
-    with.
-
     Repository "heads" are changesets that don't have child
     changesets. They are where development generally takes place and
     are the usual targets for update and merge operations.
 
-    Branch heads are changesets that have a given branch tag, but have
-    no child changesets with that tag. They are usually where
-    development on the given branch takes place.
+    If one or more REV is given, the "branch heads" will be shown for
+    the named branch associated with that revision. The name of the
+    branch is called the revision's branch tag.
+
+    Branch heads are revisions on a given named branch that do not have
+    any descendants on the same branch. A branch head could be a true head
+    or it could be the last changeset on a branch before a new branch
+    was created. If none of the branch heads are true heads, the branch
+    is considered inactive. If -c/--closed is specified, also show branch
+    heads marked closed (see hg commit --close-branch).
+
+    If STARTREV is specified only those heads (or branch heads) that
+    are descendants of STARTREV will be displayed.
     """
     if opts.get('rev'):
         start = repo.lookup(opts['rev'])
     else:
         start = None
-    closed = not opts.get('active')
+    closed = opts.get('closed')
+    hideinactive, _heads = opts.get('active'), None
     if not branchrevs:
         # Assume we're looking repo-wide heads if no revs were specified.
-        heads = repo.heads(start, closed=closed)
+        heads = repo.heads(start)
     else:
+        if hideinactive:
+            _heads = repo.heads(start)
         heads = []
         visitedset = set()
         for branchrev in branchrevs:
@@ -1323,13 +1405,17 @@
             visitedset.add(branch)
             bheads = repo.branchheads(branch, start, closed=closed)
             if not bheads:
-                if branch != branchrev:
+                if not opts.get('rev'):
+                    ui.warn(_("no open branch heads on branch %s\n") % branch)
+                elif branch != branchrev:
                     ui.warn(_("no changes on branch %s containing %s are "
                               "reachable from %s\n")
                             % (branch, branchrev, opts.get('rev')))
                 else:
                     ui.warn(_("no changes on branch %s are reachable from %s\n")
                             % (branch, opts.get('rev')))
+            if hideinactive:
+                bheads = [bhead for bhead in bheads if bhead in _heads]
             heads.extend(bheads)
     if not heads:
         return 1
@@ -1340,7 +1426,7 @@
 def help_(ui, name=None, with_version=False):
     """show help for a given topic or a help overview
 
-    With no arguments, print a list of commands and short help.
+    With no arguments, print a list of commands with short help messages.
 
     Given a topic, extension, or command name, print help for that
     topic."""
@@ -1436,20 +1522,11 @@
                 commands = cmds[f].replace("|",", ")
                 ui.write(" %s:\n      %s\n"%(commands, h[f]))
             else:
-                ui.write(' %-*s   %s\n' % (m, f, h[f]))
-
-        exts = list(extensions.extensions())
-        if exts and name != 'shortlist':
-            ui.write(_('\nenabled extensions:\n\n'))
-            maxlength = 0
-            exthelps = []
-            for ename, ext in exts:
-                doc = (gettext(ext.__doc__) or _('(no help text available)'))
-                ename = ename.split('.')[-1]
-                maxlength = max(len(ename), maxlength)
-                exthelps.append((ename, doc.splitlines(0)[0].strip()))
-            for ename, text in exthelps:
-                ui.write(_(' %s   %s\n') % (ename.ljust(maxlength), text))
+                ui.write(' %-*s   %s\n' % (m, f, util.wrap(h[f], m + 4)))
+
+        if name != 'shortlist':
+            exts, maxlength = extensions.enabled()
+            ui.write(help.listexts(_('enabled extensions:'), exts, maxlength))
 
         if not ui.quiet:
             addglobalopts(True)
@@ -1464,7 +1541,7 @@
         # description
         if not doc:
             doc = _("(no help text available)")
-        if callable(doc):
+        if hasattr(doc, '__call__'):
             doc = doc()
 
         ui.write("%s\n" % header)
@@ -1548,11 +1625,8 @@
         opts_len = max([len(line[0]) for line in opt_output if line[1]] or [0])
         for first, second in opt_output:
             if second:
-                # wrap descriptions at 70 characters, just like the
-                # main help texts
-                second = textwrap.wrap(second, width=70 - opts_len - 3)
-                pad = '\n' + ' ' * (opts_len + 3)
-                ui.write(" %-*s  %s\n" % (opts_len, first, pad.join(second)))
+                second = util.wrap(second, opts_len + 3)
+                ui.write(" %-*s  %s\n" % (opts_len, first, second))
             else:
                 ui.write("%s\n" % first)
 
@@ -1563,7 +1637,8 @@
     With no revision, print a summary of the current state of the
     repository.
 
-    With a path, do a lookup in another repository.
+    Specifying a path to a repository root or Mercurial bundle will
+    cause lookup to operate on that repository/bundle.
 
     This summary identifies the repository state using one or two
     parent hash identifiers, followed by a "+" if there are
@@ -1639,8 +1714,8 @@
     will abort unless given the -f/--force flag.
 
     You can import a patch straight from a mail message. Even patches
-    as attachments work (body part must be type text/plain or
-    text/x-patch to be used). From and Subject headers of email
+    as attachments work (to use the body part, it must have type
+    text/plain or text/x-patch). From and Subject headers of email
     message are used as default committer and commit message. All
     text/plain body parts before first diff are added to commit
     message.
@@ -1659,8 +1734,9 @@
     With -s/--similarity, hg will attempt to discover renames and
     copies in the patch in the same way as 'addremove'.
 
-    To read a patch from standard input, use patch name "-". See 'hg
-    help dates' for a list of formats valid for -d/--date.
+    To read a patch from standard input, use "-" as the patch name. If
+    a URL is specified, the patch will be downloaded from it.
+    See 'hg help dates' for a list of formats valid for -d/--date.
     """
     patches = (patch1,) + patches
 
@@ -1715,7 +1791,7 @@
                 wp = repo.parents()
                 if opts.get('exact'):
                     if not nodeid or not p1:
-                        raise util.Abort(_('not a mercurial patch'))
+                        raise util.Abort(_('not a Mercurial patch'))
                     p1 = repo.lookup(p1)
                     p2 = repo.lookup(p2 or hex(nullid))
 
@@ -1736,12 +1812,14 @@
                 files = {}
                 try:
                     patch.patch(tmpname, ui, strip=strip, cwd=repo.root,
-                                files=files)
+                                files=files, eolmode=None)
                 finally:
                     files = patch.updatedir(ui, repo, files, similarity=sim/100.)
                 if not opts.get('no_commit'):
-                    n = repo.commit(files, message, opts.get('user') or user,
-                                    opts.get('date') or date)
+                    m = cmdutil.matchfiles(repo, files or [])
+                    n = repo.commit(message, opts.get('user') or user,
+                                    opts.get('date') or date, match=m,
+                                    editor=cmdutil.commiteditor)
                     if opts.get('exact'):
                         if hex(n) != nodeid:
                             repo.rollback()
@@ -1759,8 +1837,8 @@
     """show new changesets found in source
 
     Show new changesets found in the specified path/URL or the default
-    pull location. These are the changesets that would be pulled if a
-    pull was requested.
+    pull location. These are the changesets that would have been pulled
+    if a pull at the time you issued this command.
 
     For remote repository, using --bundle avoids downloading the
     changesets twice if the incoming is followed by a pull.
@@ -1828,7 +1906,7 @@
     """create a new repository in the given directory
 
     Initialize a new repository in the given directory. If the given
-    directory does not exist, it is created.
+    directory does not exist, it will be created.
 
     If no directory is given, the current directory is used.
 
@@ -1840,20 +1918,20 @@
 def locate(ui, repo, *pats, **opts):
     """locate files matching specific patterns
 
-    Print all files under Mercurial control whose names match the
-    given patterns.
-
-    This command searches the entire repository by default. To search
-    just the current directory and its subdirectories, use
-    "--include .".
-
-    If no patterns are given to match, this command prints all file
-    names.
+    Print files under Mercurial control in the working directory whose
+    names match the given patterns.
+
+    By default, this command searches all directories in the working
+    directory. To search just the current directory and its
+    subdirectories, use "--include .".
+
+    If no patterns are given to match, this command prints the names
+    of all files under Mercurial control in the working directory.
 
     If you want to feed the output of this command into the "xargs"
     command, use the -0 option to both this command and "xargs". This
     will avoid the problem of "xargs" treating single filenames that
-    contain white space as multiple filenames.
+    contain whitespace as multiple filenames.
     """
     end = opts.get('print0') and '\0' or '\n'
     rev = opts.get('rev') or None
@@ -1879,8 +1957,8 @@
     project.
 
     File history is shown without following rename or copy history of
-    files. Use -f/--follow with a file name to follow history across
-    renames and copies. --follow without a file name will only show
+    files. Use -f/--follow with a filename to follow history across
+    renames and copies. --follow without a filename will only show
     ancestors or descendants of the starting revision. --follow-first
     only follows the first parent of merge revisions.
 
@@ -1890,16 +1968,15 @@
 
     See 'hg help dates' for a list of formats valid for -d/--date.
 
-    By default this command outputs: changeset id and hash, tags,
-    non-trivial parents, user, date and time, and a summary for each
-    commit. When the -v/--verbose switch is used, the list of changed
-    files and full commit message is shown.
+    By default this command prints revision number and changeset id,
+    tags, non-trivial parents, user, date and time, and a summary for
+    each commit. When the -v/--verbose switch is used, the list of
+    changed files and full commit message are shown.
 
     NOTE: log -p/--patch may generate unexpected diff output for merge
     changesets, as it will only compare the merge changeset against
-    its first parent. Also, the files: list will only reflect files
-    that are different from BOTH parents.
-
+    its first parent. Also, only files different from BOTH parents
+    will appear in files:.
     """
 
     get = util.cachefunc(lambda r: repo[r].changeset())
@@ -2004,10 +2081,10 @@
 
     Print a list of version controlled files for the given revision.
     If no revision is given, the first parent of the working directory
-    is used, or the null revision if none is checked out.
-
-    With -v flag, print file permissions, symlink and executable bits.
-    With --debug flag, print file revision hashes.
+    is used, or the null revision if no revision is checked out.
+
+    With -v, print file permissions, symlink and executable bits.
+    With --debug, print file revision hashes.
     """
 
     if rev and node:
@@ -2025,27 +2102,27 @@
             ui.write(decor[ctx.flags(f)])
         ui.write("%s\n" % f)
 
-def merge(ui, repo, node=None, force=None, rev=None):
+def merge(ui, repo, node=None, **opts):
     """merge working directory with another revision
 
-    The contents of the current working directory is updated with all
-    changes made in the requested revision since the last common
-    predecessor revision.
+    The current working directory is updated with all changes made in
+    the requested revision since the last common predecessor revision.
 
     Files that changed between either parent are marked as changed for
     the next commit and a commit must be performed before any further
-    updates are allowed. The next commit has two parents.
+    updates to the repository are allowed. The next commit will have
+    two parents.
 
     If no revision is specified, the working directory's parent is a
     head revision, and the current branch contains exactly one other
     head, the other head is merged with by default. Otherwise, an
-    explicit revision to merge with must be provided.
+    explicit revision with which to merge with must be provided.
     """
 
-    if rev and node:
+    if opts.get('rev') and node:
         raise util.Abort(_("please specify just one revision"))
     if not node:
-        node = rev
+        node = opts.get('rev')
 
     if not node:
         branch = repo.changectx(None).branch()
@@ -2070,7 +2147,18 @@
             raise util.Abort(_('working dir not at a head rev - '
                                'use "hg update" or merge with an explicit rev'))
         node = parent == bheads[0] and bheads[-1] or bheads[0]
-    return hg.merge(repo, node, force=force)
+
+    if opts.get('preview'):
+        p1 = repo['.']
+        p2 = repo[node]
+        common = p1.ancestor(p2)
+        roots, heads = [common.node()], [p2.node()]
+        displayer = cmdutil.show_changeset(ui, repo, opts)
+        for node in repo.changelog.nodesbetween(roots=roots, heads=heads)[0]:
+            displayer.show(repo[node])
+        return 0
+
+    return hg.merge(repo, node, force=opts.get('force'))
 
 def outgoing(ui, repo, dest=None, **opts):
     """show changesets not found in destination
@@ -2112,9 +2200,9 @@
 
     Print the working directory's parent revisions. If a revision is
     given via -r/--rev, the parent of that revision will be printed.
-    If a file argument is given, revision in which the file was last
-    changed (before the working directory revision or the argument to
-    --rev if given) is printed.
+    If a file argument is given, the revision in which the file was
+    last changed (before the working directory revision or the
+    argument to --rev if given) is printed.
     """
     rev = opts.get('rev')
     if rev:
@@ -2125,7 +2213,7 @@
     if file_:
         m = cmdutil.match(repo, (file_,), opts)
         if m.anypats() or len(m.files()) != 1:
-            raise util.Abort(_('can only specify an explicit file name'))
+            raise util.Abort(_('can only specify an explicit filename'))
         file_ = m.files()[0]
         filenodes = []
         for cp in ctx.parents():
@@ -2151,7 +2239,7 @@
     """show aliases for remote repositories
 
     Show definition of symbolic path name NAME. If no name is given,
-    show definition of available names.
+    show definition of all available names.
 
     Path names are defined in the [paths] section of /etc/mercurial/hgrc
     and $HOME/.hgrc. If run inside a repository, .hg/hgrc is used, too.
@@ -2185,14 +2273,17 @@
 def pull(ui, repo, source="default", **opts):
     """pull changes from the specified source
 
-    Pull changes from a remote repository to the local one.
+    Pull changes from a remote repository to a local one.
 
     This finds all changes from the repository at the specified path
-    or URL and adds them to the local repository. By default, this
-    does not update the copy of the project in the working directory.
-
-    Use hg incoming if you want to see what will be added by the next
-    pull without actually adding the changes to the repository.
+    or URL and adds them to a local repository (the current one unless
+    -R is specified). By default, this does not update the copy of the
+    project in the working directory.
+
+    Use hg incoming if you want to see what would have been added by a
+    pull at the time you issued this command. If you then decide to
+    added those changes to the repository, you should use pull -r X
+    where X is the last changeset listed by hg incoming.
 
     If SOURCE is omitted, the 'default' path will be used.
     See 'hg help urls' for more information.
@@ -2223,14 +2314,13 @@
 
     By default, push will refuse to run if it detects the result would
     increase the number of remote heads. This generally indicates the
-    the client has forgotten to pull and merge before pushing.
+    user forgot to pull and merge before pushing.
 
     If -r/--rev is used, the named revision and all its ancestors will
     be pushed to the remote repository.
 
-    Look at the help text for URLs for important details about ssh://
+    Please see 'hg help urls' for important details about ssh://
     URLs. If DESTINATION is omitted, a default path will be used.
-    See 'hg help urls' for more information.
     """
     dest, revs, checkout = hg.parseurl(
         ui.expandpath(dest or 'default-push', dest or 'default'), opts.get('rev'))
@@ -2238,37 +2328,16 @@
     ui.status(_('pushing to %s\n') % url.hidepassword(dest))
     if revs:
         revs = [repo.lookup(rev) for rev in revs]
+
+    # push subrepos depth-first for coherent ordering
+    c = repo['']
+    subs = c.substate # only repos that are committed
+    for s in sorted(subs):
+        c.sub(s).push(opts.get('force'))
+
     r = repo.push(other, opts.get('force'), revs=revs)
     return r == 0
 
-def rawcommit(ui, repo, *pats, **opts):
-    """raw commit interface (DEPRECATED)
-
-    (DEPRECATED)
-    Lowlevel commit, for use in helper scripts.
-
-    This command is not intended to be used by normal users, as it is
-    primarily useful for importing from other SCMs.
-
-    This command is now deprecated and will be removed in a future
-    release, please use debugsetparents and commit instead.
-    """
-
-    ui.warn(_("(the rawcommit command is deprecated)\n"))
-
-    message = cmdutil.logmessage(opts)
-
-    files = cmdutil.match(repo, pats, opts).files()
-    if opts.get('files'):
-        files += open(opts['files']).read().splitlines()
-
-    parents = [repo.lookup(p) for p in opts['parent']]
-
-    try:
-        repo.rawcommit(files, message, opts['user'], opts['date'], *parents)
-    except ValueError, inst:
-        raise util.Abort(str(inst))
-
 def recover(ui, repo):
     """roll back an interrupted transaction
 
@@ -2291,13 +2360,13 @@
     entire project history. -A/--after can be used to remove only
     files that have already been deleted, -f/--force can be used to
     force deletion, and -Af can be used to remove files from the next
-    revision without deleting them.
+    revision without deleting them from the working directory.
 
     The following table details the behavior of remove for different
     file states (columns) and option combinations (rows). The file
-    states are Added, Clean, Modified and Missing (as reported by hg
-    status). The actions are Warn, Remove (from branch) and Delete
-    (from disk).
+    states are Added [A], Clean [C], Modified [M] and Missing [!]
+    (as reported by hg status). The actions are Warn, Remove (from
+    branch) and Delete (from disk).
 
            A  C  M  !
     none   W  RD W  R
@@ -2317,6 +2386,10 @@
     s = repo.status(match=m, clean=True)
     modified, added, deleted, clean = s[0], s[1], s[3], s[6]
 
+    for f in m.files():
+        if f not in repo.dirstate and not os.path.isdir(m.rel(f)):
+            ui.warn(_('not removing %s: file is untracked\n') % m.rel(f))
+
     def warn(files, reason):
         for f in files:
             ui.warn(_('not removing %s: file %s (use -f to force removal)\n')
@@ -2370,9 +2443,9 @@
     will be overwritten if the merge is retried with resolve. The
     -m/--mark switch should be used to mark the file as resolved.
 
-    This command will also allow listing resolved files and manually
-    marking and unmarking files as resolved. All files must be marked
-    as resolved before the new commits are permitted.
+    This command also allows listing resolved files and manually
+    indicating whether or not files are resolved. All files must be
+    marked as resolved before a commit is permitted.
 
     The codes used to show the status of files are:
     U = unresolved
@@ -2488,13 +2561,12 @@
 
         def badfn(path, msg):
             if path in names:
-                return False
+                return
             path_ = path + '/'
             for f in names:
                 if f.startswith(path_):
-                    return False
-            repo.ui.warn("%s: %s\n" % (m.rel(path), msg))
-            return False
+                    return
+            ui.warn("%s: %s\n" % (m.rel(path), msg))
 
         m = cmdutil.match(repo, pats, opts)
         m.bad = badfn
@@ -2637,7 +2709,8 @@
     This command should be used with care. There is only one level of
     rollback, and there is no way to undo a rollback. It will also
     restore the dirstate at the time of the last transaction, losing
-    any dirstate changes since that time.
+    any dirstate changes since that time. This command does not alter
+    the working directory.
 
     Transactions are used to encapsulate the effects of all commands
     that create new changesets or propagate existing changesets into a
@@ -2685,9 +2758,9 @@
 
     baseui = repo and repo.baseui or ui
     optlist = ("name templates style address port prefix ipv6"
-               " accesslog errorlog webdir_conf certificate")
+               " accesslog errorlog webdir_conf certificate encoding")
     for o in optlist.split():
-        if opts[o]:
+        if opts.get(o, None):
             baseui.setconfig("web", o, str(opts[o]))
             if (repo is not None) and (repo.ui != baseui):
                 repo.ui.setconfig("web", o, str(opts[o]))
@@ -2696,7 +2769,7 @@
         raise error.RepoError(_("There is no Mercurial repository here"
                                 " (.hg not found)"))
 
-    class service:
+    class service(object):
         def init(self):
             util.set_signal_handler()
             self.httpd = server.create_server(baseui, repo)
@@ -2736,10 +2809,10 @@
 
     Show status of files in the repository. If names are given, only
     files that match are shown. Files that are clean or ignored or
-    source of a copy/move operation, are not listed unless -c/--clean,
-    -i/--ignored, -C/--copies or -A/--all is given. Unless options
-    described with "show only ..." are given, the options -mardu are
-    used.
+    the source of a copy/move operation, are not listed unless
+    -c/--clean, -i/--ignored, -C/--copies or -A/--all are given.
+    Unless options described with "show only ..." are given, the
+    options -mardu are used.
 
     Option -q/--quiet hides untracked (unknown and ignored) files
     unless explicitly requested with -u/--unknown or -i/--ignored.
@@ -2750,7 +2823,8 @@
     to one merge parent.
 
     If one revision is given, it is used as the base revision.
-    If two revisions are given, the difference between them is shown.
+    If two revisions are given, the differences between them are
+    shown.
 
     The codes used to show the status of files are:
     M = modified
@@ -2760,7 +2834,7 @@
     ! = missing (deleted by non-hg command, but still tracked)
     ? = not tracked
     I = ignored
-      = the previous added file was copied from here
+      = origin of the previous file listed as A (added)
     """
 
     node1, node2 = cmdutil.revpair(repo, opts.get('rev'))
@@ -2901,9 +2975,9 @@
 def tip(ui, repo, **opts):
     """show the tip revision
 
-    The tip revision (usually just called the tip) is the most
-    recently added changeset in the repository, the most recently
-    changed head.
+    The tip revision (usually just called the tip) is the changeset
+    most recently added to the repository (and therefore the most
+    recently changed head).
 
     If you have just made a commit, that commit will be the tip. If
     you have just pulled changes from another repository, the tip of
@@ -2931,7 +3005,7 @@
 
     return postincoming(ui, repo, modheads, opts.get('update'), None)
 
-def update(ui, repo, node=None, rev=None, clean=False, date=None):
+def update(ui, repo, node=None, rev=None, clean=False, date=None, check=False):
     """update working directory
 
     Update the repository's working directory to the specified
@@ -2947,7 +3021,8 @@
 
     When there are uncommitted changes, use option -C/--clean to
     discard them, forcibly replacing the state of the working
-    directory with the requested revision.
+    directory with the requested revision. Alternately, use -c/--check
+    to abort.
 
     When there are uncommitted changes and option -C/--clean is not
     used, and the parent revision and requested revision are on the
@@ -2967,6 +3042,12 @@
     if not rev:
         rev = node
 
+    if not clean and check:
+        # we could use dirty() but we can ignore merge and branch trivia
+        c = repo[None]
+        if c.modified() or c.added() or c.removed():
+            raise util.Abort(_("uncommitted local changes"))
+
     if date:
         if rev:
             raise util.Abort(_("you can't specify a revision and a date"))
@@ -3132,7 +3213,9 @@
     "branches":
         (branches,
          [('a', 'active', False,
-           _('show only branches that have unmerged heads'))],
+           _('show only branches that have unmerged heads')),
+          ('c', 'closed', False,
+           _('show normal and closed heads'))],
          _('[-a]')),
     "bundle":
         (bundle,
@@ -3195,12 +3278,6 @@
     "debugindex": (debugindex, [], _('FILE')),
     "debugindexdot": (debugindexdot, [], _('FILE')),
     "debuginstall": (debuginstall, []),
-    "debugrawcommit|rawcommit":
-        (rawcommit,
-         [('p', 'parent', [], _('parent')),
-          ('F', 'files', '', _('file list'))
-          ] + commitopts + commitopts2,
-         _('[OPTION]... [FILE]...')),
     "debugrebuildstate":
         (debugrebuildstate,
          [('r', 'rev', '', _('revision to rebuild to'))],
@@ -3215,6 +3292,10 @@
         (debugstate,
          [('', 'nodates', None, _('do not display the saved mtime'))],
          _('[OPTION]...')),
+    "debugsub":
+        (debugsub,
+         [('r', 'rev', '', _('revision to check'))],
+         _('[-r REV] [REV]')),
     "debugwalk": (debugwalk, walkopts, _('[OPTION]... [FILE]...')),
     "^diff":
         (diff,
@@ -3228,6 +3309,10 @@
           ('', 'switch-parent', None, _('diff against the second parent'))
           ] + diffopts,
          _('[OPTION]... [-o OUTFILESPEC] REV...')),
+    "^forget":
+        (forget,
+         [] + walkopts,
+         _('[OPTION]... FILE...')),
     "grep":
         (grep,
          [('0', 'print0', None, _('end fields with NUL')),
@@ -3248,8 +3333,10 @@
          [('r', 'rev', '', _('show only heads which are descendants of REV')),
           ('a', 'active', False,
            _('show only the active heads from open branches')),
+          ('c', 'closed', False,
+           _('show normal and closed heads')),
          ] + templateopts,
-         _('[-r REV] [REV]...')),
+         _('[-r STARTREV] [REV]...')),
     "help": (help_, [], _('[TOPIC]')),
     "identify|id":
         (identify,
@@ -3324,7 +3411,8 @@
         (merge,
          [('f', 'force', None, _('force a merge with outstanding changes')),
           ('r', 'rev', '', _('revision to merge')),
-             ],
+          ('P', 'preview', None,
+           _('review revisions to merge (no merge is performed)'))],
          _('[-f] [[-r] REV]')),
     "outgoing|out":
         (outgoing,
@@ -3339,7 +3427,7 @@
         (parents,
          [('r', 'rev', '', _('show parents from the specified revision')),
          ] + templateopts,
-         _('hg parents [-r REV] [FILE]')),
+         _('[-r REV] [FILE]')),
     "paths": (paths, [], _('[NAME]')),
     "^pull":
         (pull,
@@ -3457,6 +3545,7 @@
     "^update|up|checkout|co":
         (update,
          [('C', 'clean', None, _('overwrite locally modified files (no backup)')),
+          ('c', 'check', None, _('check for uncommitted changes')),
           ('d', 'date', '', _('tipmost revision matching date')),
           ('r', 'rev', '', _('revision'))],
          _('[-C] [-d DATE] [[-r] REV]')),
--- a/mercurial/context.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/context.py	Wed Jul 08 17:03:16 2009 -0700
@@ -7,7 +7,7 @@
 
 from node import nullid, nullrev, short, hex
 from i18n import _
-import ancestor, bdiff, error, util
+import ancestor, bdiff, error, util, subrepo
 import os, errno
 
 propertycache = util.propertycache
@@ -73,6 +73,10 @@
             p = p[:-1]
         return [changectx(self._repo, x) for x in p]
 
+    @propertycache
+    def substate(self):
+        return subrepo.state(self)
+
     def __contains__(self, key):
         return key in self._manifest
 
@@ -85,6 +89,7 @@
 
     def changeset(self): return self._changeset
     def manifest(self): return self._manifest
+    def manifestnode(self): return self._changeset[0]
 
     def rev(self): return self._rev
     def node(self): return self._node
@@ -101,6 +106,14 @@
         """return contexts for each parent changeset"""
         return self._parents
 
+    def p1(self):
+        return self._parents[0]
+
+    def p2(self):
+        if len(self._parents) == 2:
+            return self._parents[1]
+        return changectx(self._repo, -1)
+
     def children(self):
         """return contexts for each child changeset"""
         c = self._repo.changelog.children(self._node)
@@ -155,22 +168,25 @@
         return changectx(self._repo, n)
 
     def walk(self, match):
-        fdict = dict.fromkeys(match.files())
+        fset = set(match.files())
         # for dirstate.walk, files=['.'] means "walk the whole tree".
         # follow that here, too
-        fdict.pop('.', None)
+        fset.discard('.')
         for fn in self:
-            for ffn in fdict:
+            for ffn in fset:
                 # match if the file is the exact name or a directory
                 if ffn == fn or fn.startswith("%s/" % ffn):
-                    del fdict[ffn]
+                    fset.remove(ffn)
                     break
             if match(fn):
                 yield fn
-        for fn in sorted(fdict):
+        for fn in sorted(fset):
             if match.bad(fn, 'No such file in rev ' + str(self)) and match(fn):
                 yield fn
 
+    def sub(self, path):
+        return subrepo.subrepo(self, path)
+
 class filectx(object):
     """A filecontext object makes access to data related to a particular
        filerevision convenient."""
@@ -435,7 +451,7 @@
 
         # prime the ancestor cache for the working directory
         for c in (self, fc2):
-            if c._filerev == None:
+            if c._filerev is None:
                 pl = [(n.path(), n.filenode()) for n in c.parents()]
                 acache[(c._path, None)] = pl
 
@@ -609,6 +625,13 @@
     def walk(self, match):
         return sorted(self._repo.dirstate.walk(match, True, False))
 
+    def dirty(self, missing=False):
+        "check whether a working directory is modified"
+
+        return (self.p2() or self.branch() != self.p1().branch() or
+                self.modified() or self.added() or self.removed() or
+                (missing and self.deleted()))
+
 class workingfilectx(filectx):
     """A workingfilectx object makes access to data related to a particular
        file in the working directory convenient."""
@@ -629,49 +652,36 @@
     def _changectx(self):
         return workingctx(self._repo)
 
-    @propertycache
-    def _repopath(self):
-        return self._repo.dirstate.copied(self._path) or self._path
-
-    @propertycache
-    def _filelog(self):
-        return self._repo.file(self._repopath)
-
     def __nonzero__(self):
         return True
 
     def __str__(self):
         return "%s@%s" % (self.path(), self._changectx)
 
-    def filectx(self, fileid):
-        '''opens an arbitrary revision of the file without
-        opening a new filelog'''
-        return filectx(self._repo, self._repopath, fileid=fileid,
-                       filelog=self._filelog)
-
-    def rev(self):
-        if '_changectx' in self.__dict__:
-            return self._changectx.rev()
-        return self._filelog.linkrev(self._filerev)
-
     def data(self): return self._repo.wread(self._path)
     def renamed(self):
-        rp = self._repopath
-        if rp == self._path:
+        rp = self._repo.dirstate.copied(self._path)
+        if not rp:
             return None
         return rp, self._changectx._parents[0]._manifest.get(rp, nullid)
 
     def parents(self):
         '''return parent filectxs, following copies if necessary'''
-        p = self._path
-        rp = self._repopath
-        pcl = self._changectx._parents
+        def filenode(ctx, path):
+            return ctx._manifest.get(path, nullid)
+
+        path = self._path
         fl = self._filelog
-        pl = [(rp, pcl[0]._manifest.get(rp, nullid), fl)]
-        if len(pcl) > 1:
-            if rp != p:
-                fl = None
-            pl.append((p, pcl[1]._manifest.get(p, nullid), fl))
+        pcl = self._changectx._parents
+        renamed = self.renamed()
+
+        if renamed:
+            pl = [renamed + (None,)]
+        else:
+            pl = [(path, filenode(pcl[0], path), fl)]
+
+        for pc in pcl[1:]:
+            pl.append((path, filenode(pc, path), fl))
 
         return [filectx(self._repo, p, fileid=n, filelog=l)
                 for p,n,l in pl if n != nullid]
@@ -747,6 +757,12 @@
     def __nonzero__(self):
         return True
 
+    def __getitem__(self, key):
+        return self.filectx(key)
+
+    def p1(self): return self._parents[0]
+    def p2(self): return self._parents[1]
+
     def user(self): return self._user or self._repo.ui.username()
     def date(self): return self._date
     def description(self): return self._text
@@ -797,4 +813,3 @@
     def isexec(self): return 'x' in self._flags
     def islink(self): return 'l' in self._flags
     def renamed(self): return self._copied
-
--- a/mercurial/copies.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/copies.py	Wed Jul 08 17:03:16 2009 -0700
@@ -20,18 +20,18 @@
     return f[:s]
 
 def _dirs(files):
-    d = {}
+    d = set()
     for f in files:
         f = _dirname(f)
         while f not in d:
-            d[f] = True
+            d.add(f)
             f = _dirname(f)
     return d
 
 def _findoldnames(fctx, limit):
     "find files that path was copied from, back to linkrev limit"
     old = {}
-    seen = {}
+    seen = set()
     orig = fctx.path()
     visit = [(fctx, 0)]
     while visit:
@@ -39,7 +39,7 @@
         s = str(fc)
         if s in seen:
             continue
-        seen[s] = 1
+        seen.add(s)
         if fc.path() != orig and fc.path() not in old:
             old[fc.path()] = (depth, fc.path()) # remember depth
         if fc.rev() < limit and fc.rev() is not None:
@@ -106,7 +106,7 @@
         return {}, {}
 
     # avoid silly behavior for parent -> working dir
-    if c2.node() == None and c1.node() == repo.dirstate.parents()[0]:
+    if c2.node() is None and c1.node() == repo.dirstate.parents()[0]:
         return repo.dirstate.copies(), {}
 
     limit = _findlimit(repo, c1.rev(), c2.rev())
@@ -184,7 +184,7 @@
 
     # generate a directory move map
     d1, d2 = _dirs(m1), _dirs(m2)
-    invalid = {}
+    invalid = set()
     dirmove = {}
 
     # examine each file copy for a potential directory move, which is
@@ -196,13 +196,13 @@
             continue
         elif dsrc in d1 and ddst in d1:
             # directory wasn't entirely moved locally
-            invalid[dsrc] = True
+            invalid.add(dsrc)
         elif dsrc in d2 and ddst in d2:
             # directory wasn't entirely moved remotely
-            invalid[dsrc] = True
+            invalid.add(dsrc)
         elif dsrc in dirmove and dirmove[dsrc] != ddst:
             # files from the same directory moved to two different places
-            invalid[dsrc] = True
+            invalid.add(dsrc)
         else:
             # looks good so far
             dirmove[dsrc + "/"] = ddst + "/"
--- a/mercurial/dirstate.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/dirstate.py	Wed Jul 08 17:03:16 2009 -0700
@@ -73,8 +73,11 @@
     def _pl(self):
         try:
             st = self._opener("dirstate").read(40)
-            if len(st) == 40:
+            l = len(st)
+            if l == 40:
                 return st[:20], st[20:40]
+            elif l > 0 and l < 40:
+                raise util.Abort(_('working directory state appears damaged!'))
         except IOError, err:
             if err.errno != errno.ENOENT: raise
         return [nullid, nullid]
@@ -111,12 +114,6 @@
     def _checkcase(self):
         return not util.checkcase(self._join('.hg'))
 
-    @propertycache
-    def normalize(self):
-        if self._checkcase:
-            return self._normalize
-        return lambda x, y=False: x
-
     def _join(self, f):
         # much faster than os.path.join()
         # it's safe because f is always a relative path
@@ -342,7 +339,7 @@
         except KeyError:
             self._ui.warn(_("not in dirstate: %s\n") % f)
 
-    def _normalize(self, path, knownpath=False):
+    def _normalize(self, path, knownpath):
         norm_path = os.path.normcase(path)
         fold_path = self._foldmap.get(norm_path, None)
         if fold_path is None:
@@ -423,19 +420,15 @@
         def fwarn(f, msg):
             self._ui.warn('%s: %s\n' % (self.pathto(f), msg))
             return False
-        badfn = fwarn
-        if hasattr(match, 'bad'):
-            badfn = match.bad
 
-        def badtype(f, mode):
+        def badtype(mode):
             kind = _('unknown')
             if stat.S_ISCHR(mode): kind = _('character device')
             elif stat.S_ISBLK(mode): kind = _('block device')
             elif stat.S_ISFIFO(mode): kind = _('fifo')
             elif stat.S_ISSOCK(mode): kind = _('socket')
             elif stat.S_ISDIR(mode): kind = _('directory')
-            self._ui.warn(_('%s: unsupported file type (type is %s)\n')
-                          % (self.pathto(f), kind))
+            return _('unsupported file type (type is %s)') % kind
 
         ignore = self._ignore
         dirignore = self._dirignore
@@ -448,9 +441,9 @@
             dirignore = util.always
 
         matchfn = match.matchfn
+        badfn = match.bad
         dmap = self._map
         normpath = util.normpath
-        normalize = self.normalize
         listdir = osutil.listdir
         lstat = os.lstat
         getkind = stat.S_IFMT
@@ -461,6 +454,18 @@
         work = []
         wadd = work.append
 
+        if self._checkcase:
+            normalize = self._normalize
+        else:
+            normalize = lambda x, y: x
+
+        exact = skipstep3 = False
+        if matchfn == match.exact: # match.exact
+            exact = True
+            dirignore = util.always # skip step 2
+        elif match.files() and not match.anypats(): # match.match, no patterns
+            skipstep3 = True
+
         files = set(match.files())
         if not files or '.' in files:
             files = ['']
@@ -468,7 +473,7 @@
 
         # step 1: find all explicit files
         for ff in sorted(files):
-            nf = normalize(normpath(ff))
+            nf = normalize(normpath(ff), False)
             if nf in results:
                 continue
 
@@ -476,33 +481,35 @@
                 st = lstat(join(nf))
                 kind = getkind(st.st_mode)
                 if kind == dirkind:
+                    skipstep3 = False
+                    if nf in dmap:
+                        #file deleted on disk but still in dirstate
+                        results[nf] = None
+                    match.dir(nf)
                     if not dirignore(nf):
                         wadd(nf)
                 elif kind == regkind or kind == lnkkind:
                     results[nf] = st
                 else:
-                    badtype(ff, kind)
+                    badfn(ff, badtype(kind))
                     if nf in dmap:
                         results[nf] = None
             except OSError, inst:
-                keep = False
-                prefix = nf + "/"
-                for fn in dmap:
-                    if nf == fn or fn.startswith(prefix):
-                        keep = True
-                        break
-                if not keep:
-                    if inst.errno != errno.ENOENT:
-                        fwarn(ff, inst.strerror)
-                    elif badfn(ff, inst.strerror):
-                        if (nf in dmap or not ignore(nf)) and matchfn(nf):
-                            results[nf] = None
+                if nf in dmap: # does it exactly match a file?
+                    results[nf] = None
+                else: # does it match a directory?
+                    prefix = nf + "/"
+                    for fn in dmap:
+                        if fn.startswith(prefix):
+                            match.dir(nf)
+                            skipstep3 = False
+                            break
+                    else:
+                        badfn(ff, inst.strerror)
 
         # step 2: visit subdirectories
         while work:
             nd = work.pop()
-            if hasattr(match, 'dir'):
-                match.dir(nd)
             skip = None
             if nd == '.':
                 nd = ''
@@ -520,6 +527,7 @@
                 if nf not in results:
                     if kind == dirkind:
                         if not ignore(nf):
+                            match.dir(nf)
                             wadd(nf)
                         if nf in dmap and matchfn(nf):
                             results[nf] = None
@@ -533,11 +541,12 @@
                         results[nf] = None
 
         # step 3: report unseen items in the dmap hash
-        visit = sorted([f for f in dmap if f not in results and match(f)])
-        for nf, st in zip(visit, util.statfiles([join(i) for i in visit])):
-            if not st is None and not getkind(st.st_mode) in (regkind, lnkkind):
-                st = None
-            results[nf] = st
+        if not skipstep3 and not exact:
+            visit = sorted([f for f in dmap if f not in results and matchfn(f)])
+            for nf, st in zip(visit, util.statfiles([join(i) for i in visit])):
+                if not st is None and not getkind(st.st_mode) in (regkind, lnkkind):
+                    st = None
+                results[nf] = st
 
         del results['.hg']
         return results
--- a/mercurial/dispatch.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/dispatch.py	Wed Jul 08 17:03:16 2009 -0700
@@ -143,7 +143,7 @@
     except:
         ui.warn(_("** unknown exception encountered, details follow\n"))
         ui.warn(_("** report bug details to "
-                 "http://www.selenic.com/mercurial/bts\n"))
+                 "http://mercurial.selenic.com/bts/\n"))
         ui.warn(_("** or mercurial@selenic.com\n"))
         ui.warn(_("** Mercurial Distributed SCM (version %s)\n")
                % util.version())
@@ -161,6 +161,73 @@
 
     return p
 
+def aliasargs(fn):
+    if hasattr(fn, 'args'):
+        return fn.args
+    return []
+
+class cmdalias(object):
+    def __init__(self, name, definition, cmdtable):
+        self.name = name
+        self.definition = definition
+        self.args = []
+        self.opts = []
+        self.help = ''
+        self.norepo = True
+
+        try:
+            cmdutil.findcmd(self.name, cmdtable, True)
+            self.shadows = True
+        except error.UnknownCommand:
+            self.shadows = False
+
+        if not self.definition:
+            def fn(ui, *args):
+                ui.warn(_("no definition for alias '%s'\n") % self.name)
+                return 1
+            self.fn = fn
+
+            return
+
+        args = shlex.split(self.definition)
+        cmd = args.pop(0)
+        opts = []
+        help = ''
+
+        try:
+            self.fn, self.opts, self.help = cmdutil.findcmd(cmd, cmdtable, False)[1]
+            self.args = aliasargs(self.fn) + args
+            if cmd not in commands.norepo.split(' '):
+                self.norepo = False
+        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
+        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
+
+    def __call__(self, ui, *args, **opts):
+        if self.shadows:
+            ui.debug(_("alias '%s' shadows command\n") % self.name)
+
+        return self.fn(ui, *args, **opts)
+
+def addaliases(ui, cmdtable):
+    # aliases are processed after extensions have been loaded, so they
+    # may use extension commands. Aliases can also use other alias definitions,
+    # but only if they have been defined prior to the current definition.
+    for alias, definition in ui.configitems('alias'):
+        aliasdef = cmdalias(alias, definition, cmdtable)
+        cmdtable[alias] = (aliasdef, aliasdef.opts, aliasdef.help)
+        if aliasdef.norepo:
+            commands.norepo += ' %s' % alias
+
 def _parse(ui, args):
     options = {}
     cmdoptions = {}
@@ -175,6 +242,7 @@
         aliases, i = cmdutil.findcmd(cmd, commands.table,
                                      ui.config("ui", "strict"))
         cmd = aliases[0]
+        args = aliasargs(i[0]) + args
         defaults = ui.config("defaults", cmd)
         if defaults:
             args = shlex.split(defaults) + args
@@ -301,6 +369,9 @@
                     % (name, " ".join(overrides)))
         commands.table.update(cmdtable)
         _loaded.add(name)
+
+    addaliases(lui, commands.table)
+
     # check for fallback encoding
     fallback = lui.config('ui', 'fallbackencoding')
     if fallback:
@@ -315,7 +386,7 @@
         raise util.Abort(_("Option --cwd may not be abbreviated!"))
     if options["repository"]:
         raise util.Abort(_(
-            "Option -R has to be separated from other options (i.e. not -qR) "
+            "Option -R has to be separated from other options (e.g. not -qR) "
             "and --repository may only be abbreviated as --repo!"))
 
     if options["encoding"]:
--- a/mercurial/extensions.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/extensions.py	Wed Jul 08 17:03:16 2009 -0700
@@ -6,8 +6,8 @@
 # GNU General Public License version 2, incorporated herein by reference.
 
 import imp, os
-import util, cmdutil
-from i18n import _
+import util, cmdutil, help
+from i18n import _, gettext
 
 _extensions = {}
 _order = []
@@ -117,3 +117,66 @@
     origfn = getattr(container, funcname)
     setattr(container, funcname, wrap)
     return origfn
+
+def disabled():
+    '''find disabled extensions from hgext
+    returns a dict of {name: desc}, and the max name length'''
+
+    import hgext
+    extpath = os.path.dirname(os.path.abspath(hgext.__file__))
+
+    try: # might not be a filesystem path
+        files = os.listdir(extpath)
+    except OSError:
+        return None, 0
+
+    exts = {}
+    maxlength = 0
+    for e in files:
+
+        if e.endswith('.py'):
+            name = e.rsplit('.', 1)[0]
+            path = os.path.join(extpath, e)
+        else:
+            name = e
+            path = os.path.join(extpath, e, '__init__.py')
+            if not os.path.exists(path):
+                continue
+
+        if name in exts or name in _order or name == '__init__':
+            continue
+
+        try:
+            file = open(path)
+        except IOError:
+            continue
+        else:
+            doc = help.moduledoc(file)
+            file.close()
+
+        if doc: # extracting localized synopsis
+            exts[name] = gettext(doc).splitlines()[0]
+        else:
+            exts[name] = _('(no help text available)')
+
+        if len(name) > maxlength:
+            maxlength = len(name)
+
+    return exts, maxlength
+
+def enabled():
+    '''return a dict of {name: desc} of extensions, and the max name length'''
+
+    if not enabled:
+        return {}, 0
+
+    exts = {}
+    maxlength = 0
+    exthelps = []
+    for ename, ext in extensions():
+        doc = (gettext(ext.__doc__) or _('(no help text available)'))
+        ename = ename.split('.')[-1]
+        maxlength = max(len(ename), maxlength)
+        exts[ename] = doc.splitlines(0)[0].strip()
+
+    return exts, maxlength
--- a/mercurial/fancyopts.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/fancyopts.py	Wed Jul 08 17:03:16 2009 -0700
@@ -70,7 +70,7 @@
         # copy defaults to state
         if isinstance(default, list):
             state[name] = default[:]
-        elif callable(default):
+        elif hasattr(default, '__call__'):
             state[name] = None
         else:
             state[name] = default
--- a/mercurial/filelog.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/filelog.py	Wed Jul 08 17:03:16 2009 -0700
@@ -10,21 +10,7 @@
 class filelog(revlog.revlog):
     def __init__(self, opener, path):
         revlog.revlog.__init__(self, opener,
-                        "/".join(("data", self.encodedir(path + ".i"))))
-
-    # This avoids a collision between a file named foo and a dir named
-    # foo.i or foo.d
-    def encodedir(self, path):
-        return (path
-                .replace(".hg/", ".hg.hg/")
-                .replace(".i/", ".i.hg/")
-                .replace(".d/", ".d.hg/"))
-
-    def decodedir(self, path):
-        return (path
-                .replace(".d.hg/", ".d/")
-                .replace(".i.hg/", ".i/")
-                .replace(".hg.hg/", ".hg/"))
+                        "/".join(("data", path + ".i")))
 
     def read(self, node):
         t = self.revision(node)
--- a/mercurial/filemerge.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/filemerge.py	Wed Jul 08 17:03:16 2009 -0700
@@ -7,7 +7,7 @@
 
 from node import short
 from i18n import _
-import util, simplemerge
+import util, simplemerge, match
 import os, tempfile, re, filecmp
 
 def _toolstr(ui, tool, part, default=""):
@@ -16,8 +16,11 @@
 def _toolbool(ui, tool, part, default=False):
     return ui.configbool("merge-tools", tool + "." + part, default)
 
+_internal = ['internal:' + s
+             for s in 'fail local other merge prompt dump'.split()]
+
 def _findtool(ui, tool):
-    if tool in ("internal:fail", "internal:local", "internal:other"):
+    if tool in _internal:
         return tool
     k = _toolstr(ui, tool, "regkey")
     if k:
@@ -55,7 +58,7 @@
 
     # then patterns
     for pat, tool in ui.configitems("merge-patterns"):
-        mf = util.matcher(repo.root, "", [pat], [], [])[1]
+        mf = match.match(repo.root, '', [pat])
         if mf(path) and check(tool, pat, symlink, False):
                 toolpath = _findtool(ui, tool)
                 return (tool, '"' + toolpath + '"')
@@ -140,7 +143,7 @@
     ui.debug(_("picked tool '%s' for %s (binary %s symlink %s)\n") %
                (tool, fd, binary, symlink))
 
-    if not tool:
+    if not tool or tool == 'internal:prompt':
         tool = "internal:local"
         if ui.prompt(_(" no tool found to merge %s\n"
                        "keep (l)ocal or take (o)ther?") % fd,
@@ -163,11 +166,11 @@
     util.copyfile(a, back)
 
     if orig != fco.path():
-        repo.ui.status(_("merging %s and %s to %s\n") % (orig, fco.path(), fd))
+        ui.status(_("merging %s and %s to %s\n") % (orig, fco.path(), fd))
     else:
-        repo.ui.status(_("merging %s\n") % fd)
+        ui.status(_("merging %s\n") % fd)
 
-    repo.ui.debug(_("my %s other %s ancestor %s\n") % (fcd, fco, fca))
+    ui.debug(_("my %s other %s ancestor %s\n") % (fcd, fco, fca))
 
     # do we attempt to simplemerge first?
     if _toolbool(ui, tool, "premerge", not (binary or symlink)):
@@ -189,6 +192,12 @@
 
     if tool == "internal:merge":
         r = simplemerge.simplemerge(ui, a, b, c, label=['local', 'other'])
+    elif tool == 'internal:dump':
+        a = repo.wjoin(fd)
+        util.copyfile(a, a + ".local")
+        repo.wwrite(fd + ".other", fco.data(), fco.flags())
+        repo.wwrite(fd + ".base", fca.data(), fca.flags())
+        return 1 # unresolved
     else:
         args = _toolstr(ui, tool, "args", '$local $base $other')
         if "$output" in args:
@@ -213,7 +222,7 @@
         _matcheol(repo.wjoin(fd), back)
 
     if r:
-        repo.ui.warn(_("merging %s failed!\n") % fd)
+        ui.warn(_("merging %s failed!\n") % fd)
     else:
         os.unlink(back)
 
--- a/mercurial/graphmod.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/graphmod.py	Wed Jul 08 17:03:16 2009 -0700
@@ -6,70 +6,114 @@
 # 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 nullrev
+"""supports walking the history as DAGs suitable for graphical output
 
-def graph(repo, start_rev, stop_rev):
-    """incremental revision grapher
+The most basic format we use is that of::
+
+  (id, type, data, [parentids])
 
-    This generator function walks through the revision history from
-    revision start_rev to revision stop_rev (which must be less than
-    or equal to start_rev) and for each revision emits tuples with the
-    following elements:
+The node and parent ids are arbitrary integers which identify a node in the
+context of the graph returned. Type is a constant specifying the node type.
+Data depends on type.
+"""
+
+from mercurial.node import nullrev
+
+CHANGESET = 'C'
 
-      - Current node
-      - Column and color for the current node
-      - Edges; a list of (col, next_col, color) indicating the edges between
-        the current node and its parents.
-      - First line of the changeset description
-      - The changeset author
-      - The changeset date/time
+def revisions(repo, start, stop):
+    """cset DAG generator yielding (id, CHANGESET, ctx, [parentids]) tuples
+
+    This generator function walks through the revision history from revision
+    start to revision stop (which must be less than or equal to start). It
+    returns a tuple for each node. The node and parent ids are arbitrary
+    integers which identify a node in the context of the graph returned.
     """
+    cur = start
+    while cur >= stop:
+        ctx = repo[cur]
+        parents = [p.rev() for p in ctx.parents() if p.rev() != nullrev]
+        yield (cur, CHANGESET, ctx, sorted(parents))
+        cur -= 1
 
-    if start_rev == nullrev and not stop_rev:
-        return
+def filerevs(repo, path, start, stop):
+    """file cset DAG generator yielding (id, CHANGESET, ctx, [parentids]) tuples
 
-    assert start_rev >= stop_rev
-    assert stop_rev >= 0
-    curr_rev = start_rev
-    revs = []
-    cl = repo.changelog
-    colors = {}
-    new_color = 1
+    This generator function walks through the revision history of a single
+    file from revision start down to revision stop.
+    """
+    filerev = len(repo.file(path)) - 1
+    while filerev >= 0:
+        fctx = repo.filectx(path, fileid=filerev)
+        parents = [f.linkrev() for f in fctx.parents() if f.path() == path]
+        rev = fctx.rev()
+        if rev <= start:
+            yield (rev, CHANGESET, fctx, sorted(parents))
+        if rev <= stop:
+            break
+        filerev -= 1
+
+def nodes(repo, nodes):
+    """cset DAG generator yielding (id, CHANGESET, ctx, [parentids]) tuples
+
+    This generator function walks the given nodes. It only returns parents
+    that are in nodes, too.
+    """
+    include = set(nodes)
+    for node in nodes:
+        ctx = repo[node]
+        parents = [p.rev() for p in ctx.parents() if p.node() in include]
+        yield (ctx.rev(), CHANGESET, ctx, sorted(parents))
+
+def colored(dag):
+    """annotates a DAG with colored edge information
 
-    while curr_rev >= stop_rev:
-        # Compute revs and next_revs
-        if curr_rev not in revs:
-            revs.append(curr_rev) # new head
-            colors[curr_rev] = new_color
-            new_color += 1
+    For each DAG node this function emits tuples::
+
+      (id, type, data, (col, color), [(col, nextcol, color)])
+
+    with the following new elements:
 
-        idx = revs.index(curr_rev)
-        color = colors.pop(curr_rev)
-        next = revs[:]
+      - Tuple (col, color) with column and color index for the current node
+      - A list of tuples indicating the edges between the current node and its
+        parents.
+    """
+    seen = []
+    colors = {}
+    newcolor = 1
+    for (cur, type, data, parents) in dag:
 
-        # Add parents to next_revs
-        parents = [x for x in cl.parentrevs(curr_rev) if x != nullrev]
+        # Compute seen and next
+        if cur not in seen:
+            seen.append(cur) # new head
+            colors[cur] = newcolor
+            newcolor += 1
+
+        col = seen.index(cur)
+        color = colors.pop(cur)
+        next = seen[:]
+
+        # Add parents to next
         addparents = [p for p in parents if p not in next]
-        next[idx:idx + 1] = addparents
+        next[col:col + 1] = addparents
 
         # Set colors for the parents
         for i, p in enumerate(addparents):
             if not i:
                 colors[p] = color
             else:
-                colors[p] = new_color
-                new_color += 1
+                colors[p] = newcolor
+                newcolor += 1
 
         # Add edges to the graph
         edges = []
-        for col, r in enumerate(revs):
-            if r in next:
-                edges.append((col, next.index(r), colors[r]))
-            elif r == curr_rev:
+        for ecol, eid in enumerate(seen):
+            if eid in next:
+                edges.append((ecol, next.index(eid), colors[eid]))
+            elif eid == cur:
                 for p in parents:
-                    edges.append((col, next.index(p), colors[p]))
+                    edges.append((ecol, next.index(p), colors[p]))
 
         # Yield and move on
-        yield (repo[curr_rev], (idx, color), edges)
-        revs = next
-        curr_rev -= 1
+        yield (cur, type, data, (col, color), edges)
+        seen = next
--- a/mercurial/hbisect.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/hbisect.py	Wed Jul 08 17:03:16 2009 -0700
@@ -84,11 +84,11 @@
     # find the best node to test
     best_rev = None
     best_len = -1
-    poison = {}
+    poison = set()
     for rev in candidates:
         if rev in poison:
-            for c in children.get(rev, []):
-                poison[c] = True # poison children
+            # poison children
+            poison.update(children.get(rev, []))
             continue
 
         a = ancestors[rev] or [rev]
@@ -104,8 +104,8 @@
                 break
 
         if y < perfect and rev not in skip: # all downhill from here?
-            for c in children.get(rev, []):
-                poison[c] = True # poison children
+            # poison children
+            poison.update(children.get(rev, []))
             continue
 
         for c in children.get(rev, []):
--- a/mercurial/help.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/help.py	Wed Jul 08 17:03:16 2009 -0700
@@ -6,6 +6,93 @@
 # GNU General Public License version 2, incorporated herein by reference.
 
 from i18n import _
+import extensions, util
+
+
+def moduledoc(file):
+    '''return the top-level python documentation for the given file
+
+    Loosely inspired by pydoc.source_synopsis(), but rewritten to handle \'''
+    as well as """ and to return the whole text instead of just the synopsis'''
+    result = []
+
+    line = file.readline()
+    while line[:1] == '#' or not line.strip():
+        line = file.readline()
+        if not line: break
+
+    start = line[:3]
+    if start == '"""' or start == "'''":
+        line = line[3:]
+        while line:
+            if line.rstrip().endswith(start):
+                line = line.split(start)[0]
+                if line:
+                    result.append(line)
+                break
+            elif not line:
+                return None # unmatched delimiter
+            result.append(line)
+            line = file.readline()
+    else:
+        return None
+
+    return ''.join(result)
+
+def listexts(header, exts, maxlength):
+    '''return a text listing of the given extensions'''
+    if not exts:
+        return ''
+    result = '\n%s\n\n' % header
+    for name, desc in sorted(exts.iteritems()):
+        desc = util.wrap(desc, maxlength + 4)
+        result += ' %s   %s\n' % (name.ljust(maxlength), desc)
+    return result
+
+def extshelp():
+    doc = _(r'''
+    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 = !
+    ''')
+
+    exts, maxlength = extensions.enabled()
+    doc += listexts(_('enabled extensions:'), exts, maxlength)
+
+    exts, maxlength = extensions.disabled()
+    doc += listexts(_('disabled extensions:'), exts, maxlength)
+
+    return doc
 
 helptable = (
     (["dates"], _("Date Formats"),
@@ -320,7 +407,7 @@
           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 seprators). For example,
+          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".
@@ -341,6 +428,7 @@
     - 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.
+    - 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.
@@ -361,17 +449,19 @@
      _(r'''
     Valid URLs are of the form:
 
-      local/filesystem/path (or file://local/filesystem/path)
-      http://[user[:pass]@]host[:port]/[path]
-      https://[user[:pass]@]host[:port]/[path]
-      ssh://[user[:pass]@]host[:port]/[path]
+      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.
+    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
@@ -417,4 +507,5 @@
       The push command will look for a path named 'default-push', and
       prefer it over 'default' if both are defined.
     ''')),
+    (["extensions"], _("Using additional features"), extshelp),
 )
--- a/mercurial/hg.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/hg.py	Wed Jul 08 17:03:16 2009 -0700
@@ -81,6 +81,67 @@
         return path[5:]
     return path
 
+def share(ui, source, dest=None, update=True):
+    '''create a shared repository'''
+
+    if not islocal(source):
+        raise util.Abort(_('can only share local repositories'))
+
+    if not dest:
+        dest = os.path.basename(source)
+
+    if isinstance(source, str):
+        origsource = ui.expandpath(source)
+        source, rev, checkout = parseurl(origsource, '')
+        srcrepo = repository(ui, source)
+    else:
+        srcrepo = source
+        origsource = source = srcrepo.url()
+        checkout = None
+
+    sharedpath = srcrepo.sharedpath # if our source is already sharing
+
+    root = os.path.realpath(dest)
+    roothg = os.path.join(root, '.hg')
+
+    if os.path.exists(roothg):
+        raise util.Abort(_('destination already exists'))
+
+    if not os.path.isdir(root):
+        os.mkdir(root)
+    os.mkdir(roothg)
+
+    requirements = ''
+    try:
+        requirements = srcrepo.opener('requires').read()
+    except IOError, inst:
+        if inst.errno != errno.ENOENT:
+            raise
+
+    requirements += 'shared\n'
+    file(os.path.join(roothg, 'requires'), 'w').write(requirements)
+    file(os.path.join(roothg, 'sharedpath'), 'w').write(sharedpath)
+
+    default = srcrepo.ui.config('paths', 'default')
+    if default:
+        f = file(os.path.join(roothg, 'hgrc'), 'w')
+        f.write('[paths]\ndefault = %s\n' % default)
+        f.close()
+
+    r = repository(ui, root)
+
+    if update:
+        r.ui.status(_("updating working directory\n"))
+        if update is not True:
+            checkout = update
+        for test in (checkout, 'default', 'tip'):
+            try:
+                uprev = r.lookup(test)
+                break
+            except:
+                continue
+        _update(r, uprev)
+
 def clone(ui, source, dest=None, pull=False, rev=None, update=True,
           stream=False):
     """Make a copy of an existing repository.
@@ -165,11 +226,12 @@
                 # can end up with extra data in the cloned revlogs that's
                 # not pointed to by changesets, thus causing verify to
                 # fail
-                src_lock = src_repo.lock()
+                src_lock = src_repo.lock(wait=False)
             except error.LockError:
                 copy = False
 
         if copy:
+            src_repo.hook('preoutgoing', throw=True, source='clone')
             hgdir = os.path.realpath(os.path.join(dest, ".hg"))
             if not os.path.exists(dest):
                 os.mkdir(dest)
@@ -201,7 +263,7 @@
             # we need to re-init the repo after manually copying the data
             # into it
             dest_repo = repository(ui, dest)
-
+            src_repo.hook('outgoing', source='clone', node='0'*40)
         else:
             try:
                 dest_repo = repository(ui, dest, create=True)
@@ -219,7 +281,7 @@
                                        "lookup and so doesn't support clone by "
                                        "revision"))
                 revs = [src_repo.lookup(r) for r in rev]
-
+                checkout = revs[0]
             if dest_repo.local():
                 dest_repo.clone(src_repo, heads=revs, stream=stream)
             elif src_repo.local():
@@ -236,6 +298,8 @@
             fp.write("default = %s\n" % abspath)
             fp.close()
 
+            dest_repo.ui.setconfig('paths', 'default', abspath)
+
             if update:
                 dest_repo.ui.status(_("updating working directory\n"))
                 if update is not True:
--- a/mercurial/hgweb/common.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/hgweb/common.py	Wed Jul 08 17:03:16 2009 -0700
@@ -71,7 +71,7 @@
         req.respond(HTTP_OK, ct, length = os.path.getsize(path))
         return file(path, 'rb').read()
     except TypeError:
-        raise ErrorResponse(HTTP_SERVER_ERROR, 'illegal file name')
+        raise ErrorResponse(HTTP_SERVER_ERROR, 'illegal filename')
     except OSError, err:
         if err.errno == errno.ENOENT:
             raise ErrorResponse(HTTP_NOT_FOUND)
--- a/mercurial/hgweb/hgweb_mod.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/hgweb/hgweb_mod.py	Wed Jul 08 17:03:16 2009 -0700
@@ -7,8 +7,7 @@
 # GNU General Public License version 2, incorporated herein by reference.
 
 import os
-from mercurial import ui, hg, util, hook, error, encoding
-from mercurial import templater, templatefilters
+from mercurial import ui, hg, hook, error, encoding, templater
 from common import get_mtime, ErrorResponse
 from common import HTTP_OK, HTTP_BAD_REQUEST, HTTP_NOT_FOUND, HTTP_SERVER_ERROR
 from common import HTTP_UNAUTHORIZED, HTTP_METHOD_NOT_ALLOWED
@@ -65,11 +64,13 @@
             self.maxshortchanges = int(self.config("web", "maxshortchanges", 60))
             self.maxfiles = int(self.config("web", "maxfiles", 10))
             self.allowpull = self.configbool("web", "allowpull", True)
-            self.encoding = self.config("web", "encoding", encoding.encoding)
+            encoding.encoding = self.config("web", "encoding",
+                                            encoding.encoding)
 
     def run(self):
         if not os.environ.get('GATEWAY_INTERFACE', '').startswith("CGI/1."):
-            raise RuntimeError("This function is only intended to be called while running as a CGI script.")
+            raise RuntimeError("This function is only intended to be "
+                               "called while running as a CGI script.")
         import mercurial.hgweb.wsgicgi as wsgicgi
         wsgicgi.launch(self)
 
@@ -81,28 +82,6 @@
 
         self.refresh()
 
-        # process this if it's a protocol request
-        # protocol bits don't need to create any URLs
-        # and the clients always use the old URL structure
-
-        cmd = req.form.get('cmd', [''])[0]
-        if cmd and cmd in protocol.__all__:
-            try:
-                if cmd in perms:
-                    try:
-                        self.check_perm(req, perms[cmd])
-                    except ErrorResponse, inst:
-                        if cmd == 'unbundle':
-                            req.drain()
-                        raise
-                method = getattr(protocol, cmd)
-                return method(self.repo, req)
-            except ErrorResponse, inst:
-                req.respond(inst, protocol.HGTYPE)
-                if not inst.message:
-                    return []
-                return '0\n%s\n' % inst.message,
-
         # work with CGI variables to create coherent structure
         # use SCRIPT_NAME, PATH_INFO and QUERY_STRING as well as our REPO_NAME
 
@@ -122,6 +101,30 @@
             query = req.env['QUERY_STRING'].split('&', 1)[0]
             query = query.split(';', 1)[0]
 
+        # process this if it's a protocol request
+        # protocol bits don't need to create any URLs
+        # and the clients always use the old URL structure
+
+        cmd = req.form.get('cmd', [''])[0]
+        if cmd and cmd in protocol.__all__:
+            if query:
+                raise ErrorResponse(HTTP_NOT_FOUND)
+            try:
+                if cmd in perms:
+                    try:
+                        self.check_perm(req, perms[cmd])
+                    except ErrorResponse, inst:
+                        if cmd == 'unbundle':
+                            req.drain()
+                        raise
+                method = getattr(protocol, cmd)
+                return method(self.repo, req)
+            except ErrorResponse, inst:
+                req.respond(inst, protocol.HGTYPE)
+                if not inst.message:
+                    return []
+                return '0\n%s\n' % inst.message,
+
         # translate user-visible url structure to internal structure
 
         args = query.split('/', 2)
@@ -160,7 +163,7 @@
 
         try:
             tmpl = self.templater(req)
-            ctype = tmpl('mimetype', encoding=self.encoding)
+            ctype = tmpl('mimetype', encoding=encoding.encoding)
             ctype = templater.stringify(ctype)
 
             # check read permissions non-static content
@@ -219,7 +222,7 @@
         # some functions for the templater
 
         def header(**map):
-            yield tmpl('header', encoding=self.encoding, **map)
+            yield tmpl('header', encoding=encoding.encoding, **map)
 
         def footer(**map):
             yield tmpl("footer", **map)
@@ -246,7 +249,7 @@
 
         # create the templater
 
-        tmpl = templater.templater(mapfile, templatefilters.filters,
+        tmpl = templater.templater(mapfile,
                                    defaults={"url": req.url,
                                              "staticurl": staticurl,
                                              "urlbase": urlbase,
--- a/mercurial/hgweb/hgwebdir_mod.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/hgweb/hgwebdir_mod.py	Wed Jul 08 17:03:16 2009 -0700
@@ -6,10 +6,10 @@
 # This software may be used and distributed according to the terms of the
 # GNU General Public License version 2, incorporated herein by reference.
 
-import os
+import os, time
 from mercurial.i18n import _
-from mercurial import ui, hg, util, templater, templatefilters
-from mercurial import config, error, encoding
+from mercurial import ui, hg, util, templater
+from mercurial import error, encoding
 from common import ErrorResponse, get_mtime, staticfile, paritygen,\
                    get_contact, HTTP_OK, HTTP_NOT_FOUND, HTTP_SERVER_ERROR
 from hgweb_mod import hgweb
@@ -19,72 +19,83 @@
 def cleannames(items):
     return [(util.pconvert(name).strip('/'), path) for name, path in items]
 
+def findrepos(paths):
+    repos = {}
+    for prefix, root in cleannames(paths):
+        roothead, roottail = os.path.split(root)
+        # "foo = /bar/*" makes every subrepo of /bar/ to be
+        # mounted as foo/subrepo
+        # and "foo = /bar/**" also recurses into the subdirectories,
+        # remember to use it without working dir.
+        try:
+            recurse = {'*': False, '**': True}[roottail]
+        except KeyError:
+            repos[prefix] = root
+            continue
+        roothead = os.path.normpath(roothead)
+        for path in util.walkrepos(roothead, followsym=True, recurse=recurse):
+            path = os.path.normpath(path)
+            name = util.pconvert(path[len(roothead):]).strip('/')
+            if prefix:
+                name = prefix + '/' + name
+            repos[name] = path
+    return repos.items()
+
 class hgwebdir(object):
+    refreshinterval = 20
 
     def __init__(self, conf, baseui=None):
+        self.conf = conf
+        self.baseui = baseui
+        self.lastrefresh = 0
+        self.refresh()
 
-        if baseui:
-            self.ui = baseui.copy()
+    def refresh(self):
+        if self.lastrefresh + self.refreshinterval > time.time():
+            return
+
+        if self.baseui:
+            self.ui = self.baseui.copy()
         else:
             self.ui = ui.ui()
             self.ui.setconfig('ui', 'report_untrusted', 'off')
             self.ui.setconfig('ui', 'interactive', 'off')
 
-        self.motd = None
-        self.style = 'paper'
-        self.stripecount = 1
-        self.repos_sorted = ('name', False)
-        self._baseurl = None
+        if not isinstance(self.conf, (dict, list, tuple)):
+            map = {'paths': 'hgweb-paths'}
+            self.ui.readconfig(self.conf, remap=map, trust=True)
+            paths = self.ui.configitems('hgweb-paths')
+        elif isinstance(self.conf, (list, tuple)):
+            paths = self.conf
+        elif isinstance(self.conf, dict):
+            paths = self.conf.items()
 
-        if isinstance(conf, (list, tuple)):
-            self.repos = cleannames(conf)
-            self.repos_sorted = ('', False)
-        elif isinstance(conf, dict):
-            self.repos = sorted(cleannames(conf.items()))
-        else:
-            if isinstance(conf, config.config):
-                cp = conf
-            else:
-                cp = config.config()
-                cp.read(conf)
-            self.repos = []
-            self.motd = cp.get('web', 'motd')
-            self.style = cp.get('web', 'style', 'paper')
-            self.stripecount = cp.get('web', 'stripes', 1)
-            self._baseurl = cp.get('web', 'baseurl')
-            if 'paths' in cp:
-                paths = cleannames(cp.items('paths'))
-                for prefix, root in paths:
-                    roothead, roottail = os.path.split(root)
-                    # "foo = /bar/*" makes every subrepo of /bar/ to be
-                    # mounted as foo/subrepo
-                    # and "foo = /bar/**" does even recurse inside the
-                    # subdirectories, remember to use it without working dir.
-                    try:
-                        recurse = {'*': False, '**': True}[roottail]
-                    except KeyError:
-                        self.repos.append((prefix, root))
-                        continue
-                    roothead = os.path.normpath(roothead)
-                    for path in util.walkrepos(roothead, followsym=True,
-                                               recurse=recurse):
-                        path = os.path.normpath(path)
-                        name = util.pconvert(path[len(roothead):]).strip('/')
-                        if prefix:
-                            name = prefix + '/' + name
-                        self.repos.append((name, path))
-            for prefix, root in cp.items('collections'):
-                for path in util.walkrepos(root, followsym=True):
-                    repo = os.path.normpath(path)
-                    name = repo
-                    if name.startswith(prefix):
-                        name = name[len(prefix):]
-                    self.repos.append((name.lstrip(os.sep), repo))
-            self.repos.sort()
+        encoding.encoding = self.ui.config('web', 'encoding',
+                                           encoding.encoding)
+        self.motd = self.ui.config('web', 'motd')
+        self.style = self.ui.config('web', 'style', 'paper')
+        self.stripecount = self.ui.config('web', 'stripes', 1)
+        if self.stripecount:
+            self.stripecount = int(self.stripecount)
+        self._baseurl = self.ui.config('web', 'baseurl')
+
+        self.repos = findrepos(paths)
+        for prefix, root in self.ui.configitems('collections'):
+            prefix = util.pconvert(prefix)
+            for path in util.walkrepos(root, followsym=True):
+                repo = os.path.normpath(path)
+                name = util.pconvert(repo)
+                if name.startswith(prefix):
+                    name = name[len(prefix):]
+                self.repos.append((name.lstrip('/'), repo))
+
+        self.repos.sort()
+        self.lastrefresh = time.time()
 
     def run(self):
         if not os.environ.get('GATEWAY_INTERFACE', '').startswith("CGI/1."):
-            raise RuntimeError("This function is only intended to be called while running as a CGI script.")
+            raise RuntimeError("This function is only intended to be "
+                               "called while running as a CGI script.")
         import mercurial.hgweb.wsgicgi as wsgicgi
         wsgicgi.launch(self)
 
@@ -115,9 +126,9 @@
         return False
 
     def run_wsgi(self, req):
-
         try:
             try:
+                self.refresh()
 
                 virtual = req.env.get("PATH_INFO", "").strip('/')
                 tmpl = self.templater(req)
@@ -185,6 +196,7 @@
                     yield {"type" : i[0], "extension": i[1],
                            "node": nodeid, "url": url}
 
+        sortdefault = 'name', False
         def entries(sortcolumn="", descending=False, subdir="", **map):
             rows = []
             parity = paritygen(self.stripecount)
@@ -234,8 +246,7 @@
                            lastchange=d,
                            lastchange_sort=d[1]-d[0],
                            archives=archivelist(u, "tip", url))
-                if (not sortcolumn
-                    or (sortcolumn, descending) == self.repos_sorted):
+                if (not sortcolumn or (sortcolumn, descending) == sortdefault):
                     # fast path for unsorted output
                     row['parity'] = parity.next()
                     yield row
@@ -249,8 +260,9 @@
                     row['parity'] = parity.next()
                     yield row
 
+        self.refresh()
         sortable = ["name", "description", "contact", "lastchange"]
-        sortcolumn, descending = self.repos_sorted
+        sortcolumn, descending = sortdefault
         if 'sort' in req.form:
             sortcolumn = req.form['sort'][0]
             descending = sortcolumn.startswith('-')
@@ -264,6 +276,7 @@
                             and "-" or "", column))
                 for column in sortable]
 
+        self.refresh()
         if self._baseurl is not None:
             req.env['SCRIPT_NAME'] = self._baseurl
 
@@ -308,7 +321,7 @@
 
         style = 'style' in req.form and req.form['style'][0] or self.style
         mapfile = templater.stylemap(style)
-        tmpl = templater.templater(mapfile, templatefilters.filters,
+        tmpl = templater.templater(mapfile,
                                    defaults={"header": header,
                                              "footer": footer,
                                              "motd": motd,
--- a/mercurial/hgweb/protocol.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/hgweb/protocol.py	Wed Jul 08 17:03:16 2009 -0700
@@ -5,7 +5,7 @@
 # This software may be used and distributed according to the terms of the
 # GNU General Public License version 2, incorporated herein by reference.
 
-import cStringIO, zlib, tempfile, errno, os, sys
+import cStringIO, zlib, tempfile, errno, os, sys, urllib
 from mercurial import util, streamclone
 from mercurial.node import bin, hex
 from mercurial import changegroup as changegroupmod
@@ -17,6 +17,7 @@
 __all__ = [
    'lookup', 'heads', 'branches', 'between', 'changegroup',
    'changegroupsubset', 'capabilities', 'unbundle', 'stream_out',
+   'branchmap',
 ]
 
 HGTYPE = 'application/mercurial-0.1'
@@ -37,6 +38,17 @@
     req.respond(HTTP_OK, HGTYPE, length=len(resp))
     yield resp
 
+def branchmap(repo, req):
+    branches = repo.branchmap()
+    heads = []
+    for branch, nodes in branches.iteritems():
+        branchname = urllib.quote(branch)
+        branchnodes = [hex(node) for node in nodes]
+        heads.append('%s %s' % (branchname, ' '.join(branchnodes)))
+    resp = '\n'.join(heads)
+    req.respond(HTTP_OK, HGTYPE, length=len(resp))
+    yield resp
+
 def branches(repo, req):
     nodes = []
     if 'nodes' in req.form:
@@ -97,7 +109,7 @@
     yield z.flush()
 
 def capabilities(repo, req):
-    caps = ['lookup', 'changegroupsubset']
+    caps = ['lookup', 'changegroupsubset', 'branchmap']
     if repo.ui.configbool('server', 'uncompressed', untrusted=True):
         caps.append('stream=%d' % repo.changelog.version)
     if changegroupmod.bundlepriority:
@@ -150,8 +162,10 @@
                 sys.stderr = sys.stdout = cStringIO.StringIO()
 
                 try:
-                    url = 'remote:%s:%s' % (proto,
-                                            req.env.get('REMOTE_HOST', ''))
+                    url = 'remote:%s:%s:%s' % (
+                          proto,
+                          urllib.quote(req.env.get('REMOTE_HOST', '')),
+                          urllib.quote(req.env.get('REMOTE_USER', '')))
                     try:
                         ret = repo.addchangegroup(gen, 'serve', url)
                     except util.Abort, inst:
--- a/mercurial/hgweb/server.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/hgweb/server.py	Wed Jul 08 17:03:16 2009 -0700
@@ -69,8 +69,8 @@
             self._start_response("500 Internal Server Error", [])
             self._write("Internal Server Error")
             tb = "".join(traceback.format_exception(*sys.exc_info()))
-            self.log_error("Exception happened during processing request '%s':\n%s",
-                           self.path, tb)
+            self.log_error("Exception happened during processing "
+                           "request '%s':\n%s", self.path, tb)
 
     def do_GET(self):
         self.do_POST()
@@ -126,7 +126,8 @@
 
     def send_headers(self):
         if not self.saved_status:
-            raise AssertionError("Sending headers before start_response() called")
+            raise AssertionError("Sending headers before "
+                                 "start_response() called")
         saved_status = self.saved_status.split(None, 1)
         saved_status[0] = int(saved_status[0])
         self.send_response(*saved_status)
@@ -163,7 +164,8 @@
             self.send_headers()
         if self.length is not None:
             if len(data) > self.length:
-                raise AssertionError("Content-length header sent, but more bytes than specified are being written.")
+                raise AssertionError("Content-length header sent, but more "
+                                     "bytes than specified are being written.")
             self.length = self.length - len(data)
         self.wfile.write(data)
         self.wfile.flush()
--- a/mercurial/hgweb/webcommands.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/hgweb/webcommands.py	Wed Jul 08 17:03:16 2009 -0700
@@ -12,15 +12,15 @@
 from mercurial.util import binary
 from common import paritygen, staticfile, get_contact, ErrorResponse
 from common import HTTP_OK, HTTP_FORBIDDEN, HTTP_NOT_FOUND
-from mercurial import graphmod, util
+from mercurial import graphmod
 
 # __all__ is populated with the allowed commands. Be sure to add to it if
 # you're adding a new command, or the new command won't work.
 
 __all__ = [
    'log', 'rawfile', 'file', 'changelog', 'shortlog', 'changeset', 'rev',
-   'manifest', 'tags', 'summary', 'filediff', 'diff', 'annotate', 'filelog',
-   'archive', 'static', 'graph',
+   'manifest', 'tags', 'branches', 'summary', 'filediff', 'diff', 'annotate',
+   'filelog', 'archive', 'static', 'graph',
 ]
 
 def log(web, req, tmpl):
@@ -358,6 +358,35 @@
                 entriesnotip=lambda **x: entries(True,0, **x),
                 latestentry=lambda **x: entries(True,1, **x))
 
+def branches(web, req, tmpl):
+    b = web.repo.branchtags()
+    tips = (web.repo[n] for t, n in web.repo.branchtags().iteritems())
+    heads = web.repo.heads()
+    parity = paritygen(web.stripecount)
+    sortkey = lambda ctx: ('close' not in ctx.extra(), ctx.rev())
+
+    def entries(limit, **map):
+        count = 0
+        for ctx in sorted(tips, key=sortkey, reverse=True):
+            if limit > 0 and count >= limit:
+                return
+            count += 1
+            if ctx.node() not in heads:
+                status = 'inactive'
+            elif not web.repo.branchheads(ctx.branch()):
+                status = 'closed'
+            else:
+                status = 'open'
+            yield {'parity': parity.next(),
+                   'branch': ctx.branch(),
+                   'status': status,
+                   'node': ctx.hex(),
+                   'date': ctx.date()}
+
+    return tmpl('branches', node=hex(web.repo.changelog.tip()),
+                entries=lambda **x: entries(0, **x),
+                latestentry=lambda **x: entries(1, **x))
+
 def summary(web, req, tmpl):
     i = web.repo.tagslist()
     i.reverse()
@@ -639,10 +668,13 @@
     count = len(web.repo)
     changenav = webutil.revnavgen(rev, revcount, count, web.repo.changectx)
 
-    tree = list(graphmod.graph(web.repo, rev, downrev))
+    dag = graphmod.revisions(web.repo, rev, downrev)
+    tree = list(graphmod.colored(dag))
     canvasheight = (len(tree) + 1) * bg_height - 27;
     data = []
-    for (ctx, vtx, edges) in tree:
+    for (id, type, ctx, vtx, edges) in tree:
+        if type != graphmod.CHANGESET:
+            continue
         node = short(ctx.node())
         age = templatefilters.age(ctx.date())
         desc = templatefilters.firstline(ctx.description())
--- a/mercurial/hook.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/hook.py	Wed Jul 08 17:03:16 2009 -0700
@@ -21,7 +21,7 @@
 
     ui.note(_("calling hook %s: %s\n") % (hname, funcname))
     obj = funcname
-    if not callable(obj):
+    if not hasattr(obj, '__call__'):
         d = funcname.rfind('.')
         if d == -1:
             raise util.Abort(_('%s hook is invalid ("%s" not in '
@@ -44,7 +44,7 @@
             raise util.Abort(_('%s hook is invalid '
                                '("%s" is not defined)') %
                              (hname, funcname))
-        if not callable(obj):
+        if not hasattr(obj, '__call__'):
             raise util.Abort(_('%s hook is invalid '
                                '("%s" is not callable)') %
                              (hname, funcname))
@@ -74,7 +74,7 @@
 
     env = {}
     for k, v in args.iteritems():
-        if callable(v):
+        if hasattr(v, '__call__'):
             v = v()
         env['HG_' + k.upper()] = v
 
@@ -107,7 +107,7 @@
         for hname, cmd in ui.configitems('hooks'):
             if hname.split('.')[0] != name or not cmd:
                 continue
-            if callable(cmd):
+            if hasattr(cmd, '__call__'):
                 r = _pythonhook(ui, repo, name, hname, cmd, args, throw) or r
             elif cmd.startswith('python:'):
                 if cmd.count(':') == 2:
--- a/mercurial/httprepo.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/httprepo.py	Wed Jul 08 17:03:16 2009 -0700
@@ -145,6 +145,19 @@
         except:
             raise error.ResponseError(_("unexpected response:"), d)
 
+    def branchmap(self):
+        d = self.do_read("branchmap")
+        try:
+            branchmap = {}
+            for branchpart in d.splitlines():
+                branchheads = branchpart.split(' ')
+                branchname = urllib.unquote(branchheads[0])
+                branchheads = [bin(x) for x in branchheads[1:]]
+                branchmap[branchname] = branchheads
+            return branchmap
+        except:
+            raise error.ResponseError(_("unexpected response:"), d)
+
     def branches(self, nodes):
         n = " ".join(map(hex, nodes))
         d = self.do_read("branches", nodes=n)
--- a/mercurial/ignore.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/ignore.py	Wed Jul 08 17:03:16 2009 -0700
@@ -6,7 +6,7 @@
 # GNU General Public License version 2, incorporated herein by reference.
 
 from i18n import _
-import util
+import util, match
 import re
 
 _commentre = None
@@ -80,12 +80,13 @@
         return util.never
 
     try:
-        files, ignorefunc, anypats = (
-            util.matcher(root, inc=allpats, src='.hgignore'))
+        ignorefunc = match.match(root, '', [], allpats)
     except util.Abort:
         # Re-raise an exception where the src is the right file
         for f, patlist in pats.iteritems():
-            files, ignorefunc, anypats = (
-                util.matcher(root, inc=patlist, src=f))
+            try:
+                match.match(root, '', [], patlist)
+            except util.Abort, inst:
+                raise util.Abort('%s: %s' % (f, inst[0]))
 
     return ignorefunc
--- a/mercurial/localrepo.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/localrepo.py	Wed Jul 08 17:03:16 2009 -0700
@@ -7,9 +7,9 @@
 
 from node import bin, hex, nullid, nullrev, short
 from i18n import _
-import repo, changegroup
+import repo, changegroup, subrepo
 import changelog, dirstate, filelog, manifest, context
-import lock, transaction, ui, store, encoding
+import lock, transaction, store, encoding
 import util, extensions, hook, error
 import match as match_
 import merge as merge_
@@ -18,8 +18,8 @@
 propertycache = util.propertycache
 
 class localrepository(repo.repository):
-    capabilities = set(('lookup', 'changegroupsubset'))
-    supported = set('revlogv1 store fncache'.split())
+    capabilities = set(('lookup', 'changegroupsubset', 'branchmap'))
+    supported = set('revlogv1 store fncache shared'.split())
 
     def __init__(self, baseui, path=None, create=0):
         repo.repository.__init__(self)
@@ -28,6 +28,14 @@
         self.origroot = path
         self.opener = util.opener(self.path)
         self.wopener = util.opener(self.root)
+        self.baseui = baseui
+        self.ui = baseui.copy()
+
+        try:
+            self.ui.readconfig(self.join("hgrc"), self.root)
+            extensions.loadall(self.ui)
+        except IOError:
+            pass
 
         if not os.path.isdir(self.path):
             if create:
@@ -35,10 +43,10 @@
                     os.mkdir(path)
                 os.mkdir(self.path)
                 requirements = ["revlogv1"]
-                if baseui.configbool('format', 'usestore', True):
+                if self.ui.configbool('format', 'usestore', True):
                     os.mkdir(os.path.join(self.path, "store"))
                     requirements.append("store")
-                    if baseui.configbool('format', 'usefncache', True):
+                    if self.ui.configbool('format', 'usefncache', True):
                         requirements.append("fncache")
                     # create an invalid changelog
                     self.opener("00changelog.i", "a").write(
@@ -64,20 +72,23 @@
             for r in requirements - self.supported:
                 raise error.RepoError(_("requirement '%s' not supported") % r)
 
-        self.store = store.store(requirements, self.path, util.opener)
+        self.sharedpath = self.path
+        try:
+            s = os.path.realpath(self.opener("sharedpath").read())
+            if not os.path.exists(s):
+                raise error.RepoError(
+                    _('.hg/sharedpath points to nonexistent directory %s') % s)
+            self.sharedpath = s
+        except IOError, inst:
+            if inst.errno != errno.ENOENT:
+                raise
+
+        self.store = store.store(requirements, self.sharedpath, util.opener)
         self.spath = self.store.path
         self.sopener = self.store.opener
         self.sjoin = self.store.join
         self.opener.createmode = self.store.createmode
 
-        self.baseui = baseui
-        self.ui = baseui.copy()
-        try:
-            self.ui.readconfig(self.join("hgrc"), self.root)
-            extensions.loadall(self.ui)
-        except IOError:
-            pass
-
         self.tagscache = None
         self._tagstypecache = None
         self.branchcache = None
@@ -107,7 +118,7 @@
         return dirstate.dirstate(self.opener, self.ui, self.root)
 
     def __getitem__(self, changeid):
-        if changeid == None:
+        if changeid is None:
             return context.workingctx(self)
         return context.changectx(self, changeid)
 
@@ -129,10 +140,7 @@
 
     tag_disallowed = ':\r\n'
 
-    def _tag(self, names, node, message, local, user, date, parent=None,
-             extra={}):
-        use_dirstate = parent is None
-
+    def _tag(self, names, node, message, local, user, date, extra={}):
         if isinstance(names, str):
             allchars = names
             names = (names,)
@@ -173,30 +181,21 @@
                 self.hook('tag', node=hex(node), tag=name, local=local)
             return
 
-        if use_dirstate:
-            try:
-                fp = self.wfile('.hgtags', 'rb+')
-            except IOError:
-                fp = self.wfile('.hgtags', 'ab')
-            else:
-                prevtags = fp.read()
+        try:
+            fp = self.wfile('.hgtags', 'rb+')
+        except IOError:
+            fp = self.wfile('.hgtags', 'ab')
         else:
-            try:
-                prevtags = self.filectx('.hgtags', parent).data()
-            except error.LookupError:
-                pass
-            fp = self.wfile('.hgtags', 'wb')
-            if prevtags:
-                fp.write(prevtags)
+            prevtags = fp.read()
 
         # committed tags are stored in UTF-8
         writetags(fp, names, encoding.fromlocal, prevtags)
 
-        if use_dirstate and '.hgtags' not in self.dirstate:
+        if '.hgtags' not in self.dirstate:
             self.add(['.hgtags'])
 
-        tagnode = self.commit(['.hgtags'], message, user, date, p1=parent,
-                              extra=extra)
+        m = match_.exact(self.root, '', ['.hgtags'])
+        tagnode = self.commit(message, user, date, extra=extra, match=m)
 
         for name in names:
             self.hook('tag', node=hex(node), tag=name, local=local)
@@ -263,7 +262,7 @@
                     warn(_("node '%s' is not well formed") % node)
                     continue
                 if bin_n not in self.changelog.nodemap:
-                    warn(_("tag '%s' refers to unknown node") % key)
+                    # silently ignore as pull -r might cause this
                     continue
 
                 h = []
@@ -291,11 +290,24 @@
                 globaltags[k] = an, ah
                 tagtypes[k] = tagtype
 
-        # read the tags file from each head, ending with the tip
+        seen = set()
         f = None
-        for rev, node, fnode in self._hgtagsnodes():
-            f = (f and f.filectx(fnode) or
-                 self.filectx('.hgtags', fileid=fnode))
+        ctxs = []
+        for node in self.heads():
+            try:
+                fnode = self[node].filenode('.hgtags')
+            except error.LookupError:
+                continue
+            if fnode not in seen:
+                seen.add(fnode)
+                if not f:
+                    f = self.filectx('.hgtags', fileid=fnode)
+                else:
+                    f = f.filectx(fnode)
+                ctxs.append(f)
+
+        # read the tags file from each head, ending with the tip
+        for f in reversed(ctxs):
             readtags(f.data().splitlines(), f, "global")
 
         try:
@@ -329,22 +341,6 @@
 
         return self._tagstypecache.get(tagname)
 
-    def _hgtagsnodes(self):
-        last = {}
-        ret = []
-        for node in reversed(self.heads()):
-            c = self[node]
-            rev = c.rev()
-            try:
-                fnode = c.filenode('.hgtags')
-            except error.LookupError:
-                continue
-            ret.append((rev, node, fnode))
-            if fnode in last:
-                ret[last[fnode]] = None
-            last[fnode] = len(ret) - 1
-        return [item for item in ret if item]
-
     def tagslist(self):
         '''return a list of tags ordered by revision'''
         l = []
@@ -373,7 +369,7 @@
 
         return partial
 
-    def _branchheads(self):
+    def branchmap(self):
         tip = self.changelog.tip()
         if self.branchcache is not None and self._branchcachetip == tip:
             return self.branchcache
@@ -405,7 +401,7 @@
         '''return a dict where branch names map to the tipmost head of
         the branch, open heads come before closed'''
         bt = {}
-        for bn, heads in self._branchheads().iteritems():
+        for bn, heads in self.branchmap().iteritems():
             head = None
             for i in range(len(heads)-1, -1, -1):
                 h = heads[i]
@@ -458,15 +454,30 @@
             pass
 
     def _updatebranchcache(self, partial, start, end):
+        # collect new branch entries
+        newbranches = {}
         for r in xrange(start, end):
             c = self[r]
-            b = c.branch()
-            bheads = partial.setdefault(b, [])
-            bheads.append(c.node())
-            for p in c.parents():
-                pn = p.node()
-                if pn in bheads:
-                    bheads.remove(pn)
+            newbranches.setdefault(c.branch(), []).append(c.node())
+        # if older branchheads are reachable from new ones, they aren't
+        # really branchheads. Note checking parents is insufficient:
+        # 1 (branch a) -> 2 (branch b) -> 3 (branch a)
+        for branch, newnodes in newbranches.iteritems():
+            bheads = partial.setdefault(branch, [])
+            bheads.extend(newnodes)
+            if len(bheads) < 2:
+                continue
+            newbheads = []
+            # starting from tip means fewer passes over reachable
+            while newnodes:
+                latest = newnodes.pop()
+                if latest not in bheads:
+                    continue
+                reachable = self.changelog.reachable(latest, bheads[0])
+                bheads = [b for b in bheads if b not in reachable]
+                newbheads.insert(0, latest)
+            bheads.extend(newbheads)
+            partial[branch] = bheads
 
     def lookup(self, key):
         if isinstance(key, int):
@@ -487,6 +498,11 @@
         n = self.changelog._partialmatch(key)
         if n:
             return n
+
+        # can't find key, check if it might have come from damaged dirstate
+        if key in self.dirstate.parents():
+            raise error.Abort(_("working directory has unknown parent '%s'!")
+                              % short(key))
         try:
             if len(key) == 20:
                 key = hex(key)
@@ -541,7 +557,7 @@
             for pat, cmd in self.ui.configitems(filter):
                 if cmd == '!':
                     continue
-                mf = util.matcher(self.root, "", [pat], [], [])[1]
+                mf = match_.match(self.root, '', [pat])
                 fn = None
                 params = cmd
                 for name, filterfn in self._datafilters.iteritems():
@@ -705,7 +721,7 @@
         self._wlockref = weakref.ref(l)
         return l
 
-    def filecommit(self, fctx, manifest1, manifest2, linkrev, tr, changelist):
+    def _filecommit(self, fctx, manifest1, manifest2, linkrev, tr, changelist):
         """
         commit an individual file as part of a larger transaction
         """
@@ -714,7 +730,7 @@
         text = fctx.data()
         flog = self.file(fname)
         fparent1 = manifest1.get(fname, nullid)
-        fparent2 = manifest2.get(fname, nullid)
+        fparent2 = fparent2o = manifest2.get(fname, nullid)
 
         meta = {}
         copy = fctx.renamed()
@@ -769,121 +785,136 @@
             elif fparentancestor == fparent2:
                 fparent2 = nullid
 
-        # is the file unmodified from the parent? report existing entry
-        if fparent2 == nullid and not flog.cmp(fparent1, text) and not meta:
-            return fparent1
+        # is the file changed?
+        if fparent2 != nullid or flog.cmp(fparent1, text) or meta:
+            changelist.append(fname)
+            return flog.add(text, meta, tr, linkrev, fparent1, fparent2)
 
-        changelist.append(fname)
-        return flog.add(text, meta, tr, linkrev, fparent1, fparent2)
+        # are just the flags changed during merge?
+        if fparent1 !=  fparent2o and manifest1.flags(fname) != fctx.flags():
+            changelist.append(fname)
 
-    def rawcommit(self, files, text, user, date, p1=None, p2=None, extra={}):
-        if p1 is None:
-            p1, p2 = self.dirstate.parents()
-        return self.commit(files=files, text=text, user=user, date=date,
-                           p1=p1, p2=p2, extra=extra, empty_ok=True)
+        return fparent1
+
+    def commit(self, text="", user=None, date=None, match=None, force=False,
+               editor=False, extra={}):
+        """Add a new revision to current repository.
 
-    def commit(self, files=None, text="", user=None, date=None,
-               match=None, force=False, force_editor=False,
-               p1=None, p2=None, extra={}, empty_ok=False):
-        wlock = lock = None
-        if extra.get("close"):
-            force = True
-        if files:
-            files = list(set(files))
+        Revision information is gathered from the working directory,
+        match can be used to filter the committed files. If editor is
+        supplied, it is called to get a commit message.
+        """
+
+        def fail(f, msg):
+            raise util.Abort('%s: %s' % (f, msg))
+
+        if not match:
+            match = match_.always(self.root, '')
+
+        if not force:
+            vdirs = []
+            match.dir = vdirs.append
+            match.bad = fail
+
+        wlock = self.wlock()
         try:
-            wlock = self.wlock()
-            lock = self.lock()
-            use_dirstate = (p1 is None) # not rawcommit
+            p1, p2 = self.dirstate.parents()
+            wctx = self[None]
 
-            if use_dirstate:
-                p1, p2 = self.dirstate.parents()
-                update_dirstate = True
+            if (not force and p2 != nullid and match and
+                (match.files() or match.anypats())):
+                raise util.Abort(_('cannot partially commit a merge '
+                                   '(do not specify files or patterns)'))
 
-                if (not force and p2 != nullid and
-                    (match and (match.files() or match.anypats()))):
-                    raise util.Abort(_('cannot partially commit a merge '
-                                       '(do not specify files or patterns)'))
+            changes = self.status(match=match, clean=force)
+            if force:
+                changes[0].extend(changes[6]) # mq may commit unchanged files
+
+            # check subrepos
+            subs = []
+            for s in wctx.substate:
+                if match(s) and wctx.sub(s).dirty():
+                    subs.append(s)
+            if subs and '.hgsubstate' not in changes[0]:
+                changes[0].insert(0, '.hgsubstate')
 
-                if files:
-                    modified, removed = [], []
-                    for f in files:
-                        s = self.dirstate[f]
-                        if s in 'nma':
-                            modified.append(f)
-                        elif s == 'r':
-                            removed.append(f)
+            # make sure all explicit patterns are matched
+            if not force and match.files():
+                matched = set(changes[0] + changes[1] + changes[2])
+
+                for f in match.files():
+                    if f == '.' or f in matched or f in wctx.substate:
+                        continue
+                    if f in changes[3]: # missing
+                        fail(f, _('file not found!'))
+                    if f in vdirs: # visited directory
+                        d = f + '/'
+                        for mf in matched:
+                            if mf.startswith(d):
+                                break
                         else:
-                            self.ui.warn(_("%s not tracked!\n") % f)
-                    changes = [modified, [], removed, [], []]
-                else:
-                    changes = self.status(match=match)
-            else:
-                p1, p2 = p1, p2 or nullid
-                update_dirstate = (self.dirstate.parents()[0] == p1)
-                changes = [files, [], [], [], []]
+                            fail(f, _("no match under directory!"))
+                    elif f not in self.dirstate:
+                        fail(f, _("file not tracked!"))
+
+            if (not force and not extra.get("close") and p2 == nullid
+                and not (changes[0] or changes[1] or changes[2])
+                and self[None].branch() == self['.'].branch()):
+                return None
 
             ms = merge_.mergestate(self)
             for f in changes[0]:
                 if f in ms and ms[f] == 'u':
                     raise util.Abort(_("unresolved merge conflicts "
                                                     "(see hg resolve)"))
-            wctx = context.workingctx(self, (p1, p2), text, user, date,
+
+            cctx = context.workingctx(self, (p1, p2), text, user, date,
                                       extra, changes)
-            r = self._commitctx(wctx, force, force_editor, empty_ok,
-                                use_dirstate, update_dirstate)
+            if editor:
+                cctx._text = editor(self, cctx, subs)
+
+            # commit subs
+            if subs:
+                state = wctx.substate.copy()
+                for s in subs:
+                    self.ui.status(_('committing subrepository %s\n') % s)
+                    sr = wctx.sub(s).commit(cctx._text, user, date)
+                    state[s] = (state[s][0], sr)
+                subrepo.writestate(self, state)
+
+            ret = self.commitctx(cctx, True)
+
+            # update dirstate and mergestate
+            for f in changes[0] + changes[1]:
+                self.dirstate.normal(f)
+            for f in changes[2]:
+                self.dirstate.forget(f)
+            self.dirstate.setparents(ret)
             ms.reset()
-            return r
+
+            return ret
 
         finally:
-            release(lock, wlock)
+            wlock.release()
 
-    def commitctx(self, ctx):
+    def commitctx(self, ctx, error=False):
         """Add a new revision to current repository.
 
-        Revision information is passed in the context.memctx argument.
-        commitctx() does not touch the working directory.
+        Revision information is passed via the context argument.
         """
-        wlock = lock = None
-        try:
-            wlock = self.wlock()
-            lock = self.lock()
-            return self._commitctx(ctx, force=True, force_editor=False,
-                                   empty_ok=True, use_dirstate=False,
-                                   update_dirstate=False)
-        finally:
-            release(lock, wlock)
 
-    def _commitctx(self, wctx, force=False, force_editor=False, empty_ok=False,
-                  use_dirstate=True, update_dirstate=True):
-        tr = None
-        valid = 0 # don't save the dirstate if this isn't set
+        tr = lock = None
+        removed = ctx.removed()
+        p1, p2 = ctx.p1(), ctx.p2()
+        m1 = p1.manifest().copy()
+        m2 = p2.manifest()
+        user = ctx.user()
+
+        xp1, xp2 = p1.hex(), p2 and p2.hex() or ''
+        self.hook("precommit", throw=True, parent1=xp1, parent2=xp2)
+
+        lock = self.lock()
         try:
-            commit = sorted(wctx.modified() + wctx.added())
-            remove = wctx.removed()
-            extra = wctx.extra().copy()
-            branchname = extra['branch']
-            user = wctx.user()
-            text = wctx.description()
-
-            p1, p2 = [p.node() for p in wctx.parents()]
-            c1 = self.changelog.read(p1)
-            c2 = self.changelog.read(p2)
-            m1 = self.manifest.read(c1[0]).copy()
-            m2 = self.manifest.read(c2[0])
-
-            if use_dirstate:
-                oldname = c1[5].get("branch") # stored in UTF-8
-                if (not commit and not remove and not force and p2 == nullid
-                    and branchname == oldname):
-                    self.ui.status(_("nothing changed\n"))
-                    return None
-
-            xp1 = hex(p1)
-            if p2 == nullid: xp2 = ''
-            else: xp2 = hex(p2)
-
-            self.hook("precommit", throw=True, parent1=xp1, parent2=xp2)
-
             tr = self.transaction()
             trp = weakref.proxy(tr)
 
@@ -891,87 +922,34 @@
             new = {}
             changed = []
             linkrev = len(self)
-            for f in commit:
+            for f in sorted(ctx.modified() + ctx.added()):
                 self.ui.note(f + "\n")
                 try:
-                    fctx = wctx.filectx(f)
-                    newflags = fctx.flags()
-                    new[f] = self.filecommit(fctx, m1, m2, linkrev, trp, changed)
-                    if ((not changed or changed[-1] != f) and
-                        m2.get(f) != new[f]):
-                        # mention the file in the changelog if some
-                        # flag changed, even if there was no content
-                        # change.
-                        if m1.flags(f) != newflags:
-                            changed.append(f)
-                    m1.set(f, newflags)
-                    if use_dirstate:
-                        self.dirstate.normal(f)
-
+                    fctx = ctx[f]
+                    new[f] = self._filecommit(fctx, m1, m2, linkrev, trp,
+                                              changed)
+                    m1.set(f, fctx.flags())
                 except (OSError, IOError):
-                    if use_dirstate:
+                    if error:
                         self.ui.warn(_("trouble committing %s!\n") % f)
                         raise
                     else:
-                        remove.append(f)
-
-            updated, added = [], []
-            for f in sorted(changed):
-                if f in m1 or f in m2:
-                    updated.append(f)
-                else:
-                    added.append(f)
+                        removed.append(f)
 
             # update manifest
             m1.update(new)
-            removed = [f for f in sorted(remove) if f in m1 or f in m2]
-            removed1 = []
-
-            for f in removed:
-                if f in m1:
-                    del m1[f]
-                    removed1.append(f)
-            mn = self.manifest.add(m1, trp, linkrev, c1[0], c2[0],
-                                   (new, removed1))
+            removed = [f for f in sorted(removed) if f in m1 or f in m2]
+            drop = [f for f in removed if f in m1]
+            for f in drop:
+                del m1[f]
+            mn = self.manifest.add(m1, trp, linkrev, p1.manifestnode(),
+                                   p2.manifestnode(), (new, drop))
 
-            # add changeset
-            if (not empty_ok and not text) or force_editor:
-                edittext = []
-                if text:
-                    edittext.append(text)
-                edittext.append("")
-                edittext.append("") # Empty line between message and comments.
-                edittext.append(_("HG: Enter commit message."
-                                  "  Lines beginning with 'HG:' are removed."))
-                edittext.append("HG: --")
-                edittext.append(_("HG: user: %s") % user)
-                if p2 != nullid:
-                    edittext.append(_("HG: branch merge"))
-                if branchname:
-                    edittext.append(_("HG: branch '%s'")
-                                    % encoding.tolocal(branchname))
-                edittext.extend([_("HG: added %s") % f for f in added])
-                edittext.extend([_("HG: changed %s") % f for f in updated])
-                edittext.extend([_("HG: removed %s") % f for f in removed])
-                if not added and not updated and not removed:
-                    edittext.append(_("HG: no files changed"))
-                edittext.append("")
-                # run editor in the repository root
-                olddir = os.getcwd()
-                os.chdir(self.root)
-                text = self.ui.edit("\n".join(edittext), user)
-                os.chdir(olddir)
-
-            lines = [line.rstrip() for line in text.rstrip().splitlines()]
-            while lines and not lines[0]:
-                del lines[0]
-            if not lines and use_dirstate:
-                raise util.Abort(_("empty commit message"))
-            text = '\n'.join(lines)
-
+            # update changelog
             self.changelog.delayupdate()
-            n = self.changelog.add(mn, changed + removed, text, trp, p1, p2,
-                                   user, wctx.date(), extra)
+            n = self.changelog.add(mn, changed + removed, ctx.description(),
+                                   trp, p1.node(), p2.node(),
+                                   user, ctx.date(), ctx.extra().copy())
             p = lambda: self.changelog.writepending() and self.root or ""
             self.hook('pretxncommit', throw=True, node=hex(n), parent1=xp1,
                       parent2=xp2, pending=p)
@@ -981,19 +959,11 @@
             if self.branchcache:
                 self.branchtags()
 
-            if use_dirstate or update_dirstate:
-                self.dirstate.setparents(n)
-                if use_dirstate:
-                    for f in removed:
-                        self.dirstate.forget(f)
-            valid = 1 # our dirstate updates are complete
-
             self.hook("commit", node=hex(n), parent1=xp1, parent2=xp2)
             return n
         finally:
-            if not valid: # don't save our updated dirstate
-                self.dirstate.invalidate()
             del tr
+            lock.release()
 
     def walk(self, match, node=None):
         '''
@@ -1040,7 +1010,6 @@
             def bad(f, msg):
                 if f not in ctx1:
                     self.ui.warn('%s: %s\n' % (self.dirstate.pathto(f), msg))
-                return False
             match.bad = bad
 
         if working: # we need to scan the working dir
@@ -1051,7 +1020,7 @@
             if parentworking and cmp:
                 fixup = []
                 # do a full compare of any files that might have changed
-                for f in cmp:
+                for f in sorted(cmp):
                     if (f not in ctx1 or ctx2.flags(f) != ctx1.flags(f)
                         or ctx1[f].cmp(ctx2[f].data())):
                         modified.append(f)
@@ -1063,18 +1032,17 @@
 
                 # update dirstate for files that are actually clean
                 if fixup:
-                    wlock = None
                     try:
+                        # updating the dirstate is optional
+                        # so we don't wait on the lock
+                        wlock = self.wlock(False)
                         try:
-                            # updating the dirstate is optional
-                            # so we don't wait on the lock
-                            wlock = self.wlock(False)
                             for f in fixup:
                                 self.dirstate.normal(f)
-                        except error.LockError:
-                            pass
-                    finally:
-                        release(wlock)
+                        finally:
+                            wlock.release()
+                    except error.LockError:
+                        pass
 
         if not parentworking:
             mf1 = mfmatches(ctx1)
@@ -1154,16 +1122,15 @@
             wlock.release()
 
     def remove(self, list, unlink=False):
-        wlock = None
+        if unlink:
+            for f in list:
+                try:
+                    util.unlink(self.wjoin(f))
+                except OSError, inst:
+                    if inst.errno != errno.ENOENT:
+                        raise
+        wlock = self.wlock()
         try:
-            if unlink:
-                for f in list:
-                    try:
-                        util.unlink(self.wjoin(f))
-                    except OSError, inst:
-                        if inst.errno != errno.ENOENT:
-                            raise
-            wlock = self.wlock()
             for f in list:
                 if unlink and os.path.exists(self.wjoin(f)):
                     self.ui.warn(_("%s still exists!\n") % f)
@@ -1174,7 +1141,7 @@
                 else:
                     self.dirstate.remove(f)
         finally:
-            release(wlock)
+            wlock.release()
 
     def undelete(self, list):
         manifests = [self.manifest.read(self.changelog.read(p)[0])
@@ -1208,21 +1175,16 @@
             finally:
                 wlock.release()
 
-    def heads(self, start=None, closed=True):
+    def heads(self, start=None):
         heads = self.changelog.heads(start)
-        def display(head):
-            if closed:
-                return True
-            extras = self.changelog.read(head)[5]
-            return ('close' not in extras)
         # sort the output in rev descending order
-        heads = [(-self.changelog.rev(h), h) for h in heads if display(h)]
+        heads = [(-self.changelog.rev(h), h) for h in heads]
         return [n for (r, n) in sorted(heads)]
 
-    def branchheads(self, branch=None, start=None, closed=True):
+    def branchheads(self, branch=None, start=None, closed=False):
         if branch is None:
             branch = self[None].branch()
-        branches = self._branchheads()
+        branches = self.branchmap()
         if branch not in branches:
             return []
         bheads = branches[branch]
@@ -1306,7 +1268,7 @@
         fetch = set()
         seen = set()
         seenbranch = set()
-        if base == None:
+        if base is None:
             base = {}
 
         if not heads:
@@ -1438,7 +1400,7 @@
         or ancestors of these heads, and return a second element which
         contains all remote heads which get new children.
         """
-        if base == None:
+        if base is None:
             base = {}
             self.findincoming(remote, base, heads, force=force)
 
@@ -1460,20 +1422,20 @@
         # find every node whose parents have been pruned
         subset = []
         # find every remote head that will get new children
-        updated_heads = {}
+        updated_heads = set()
         for n in remain:
             p1, p2 = self.changelog.parents(n)
             if p1 not in remain and p2 not in remain:
                 subset.append(n)
             if heads:
                 if p1 in heads:
-                    updated_heads[p1] = True
+                    updated_heads.add(p1)
                 if p2 in heads:
-                    updated_heads[p2] = True
+                    updated_heads.add(p2)
 
         # this is the set of all roots we have to push
         if heads:
-            return subset, updated_heads.keys()
+            return subset, list(updated_heads)
         else:
             return subset
 
@@ -1496,7 +1458,9 @@
                 cg = remote.changegroup(fetch, 'pull')
             else:
                 if not remote.capable('changegroupsubset'):
-                    raise util.Abort(_("Partial pull cannot be done because other repository doesn't support changegroupsubset."))
+                    raise util.Abort(_("Partial pull cannot be done because "
+                                       "other repository doesn't support "
+                                       "changegroupsubset."))
                 cg = remote.changegroupsubset(fetch, heads, 'pull')
             return self.addchangegroup(cg, 'pull', remote.url())
         finally:
@@ -1526,42 +1490,97 @@
         else:
             bases, heads = update, self.changelog.heads()
 
+        def checkbranch(lheads, rheads, updatelh):
+            '''
+            check whether there are more local heads than remote heads on
+            a specific branch.
+
+            lheads: local branch heads
+            rheads: remote branch heads
+            updatelh: outgoing local branch heads
+            '''
+
+            warn = 0
+
+            if not revs and len(lheads) > len(rheads):
+                warn = 1
+            else:
+                updatelheads = [self.changelog.heads(x, lheads)
+                                for x in updatelh]
+                newheads = set(sum(updatelheads, [])) & set(lheads)
+
+                if not newheads:
+                    return True
+
+                for r in rheads:
+                    if r in self.changelog.nodemap:
+                        desc = self.changelog.heads(r, heads)
+                        l = [h for h in heads if h in desc]
+                        if not l:
+                            newheads.add(r)
+                    else:
+                        newheads.add(r)
+                if len(newheads) > len(rheads):
+                    warn = 1
+
+            if warn:
+                if not rheads: # new branch requires --force
+                    self.ui.warn(_("abort: push creates new"
+                                   " remote branch '%s'!\n") %
+                                   self[updatelh[0]].branch())
+                else:
+                    self.ui.warn(_("abort: push creates new remote heads!\n"))
+
+                self.ui.status(_("(did you forget to merge?"
+                                 " use push -f to force)\n"))
+                return False
+            return True
+
         if not bases:
             self.ui.status(_("no changes found\n"))
             return None, 1
         elif not force:
-            # check if we're creating new remote heads
-            # to be a remote head after push, node must be either
+            # Check for each named branch if we're creating new remote heads.
+            # To be a remote head after push, node must be either:
             # - unknown locally
             # - a local outgoing head descended from update
             # - a remote head that's known locally and not
             #   ancestral to an outgoing head
+            #
+            # New named branches cannot be created without --force.
 
-            warn = 0
+            if remote_heads != [nullid]:
+                if remote.capable('branchmap'):
+                    localhds = {}
+                    if not revs:
+                        localhds = self.branchmap()
+                    else:
+                        for n in heads:
+                            branch = self[n].branch()
+                            if branch in localhds:
+                                localhds[branch].append(n)
+                            else:
+                                localhds[branch] = [n]
+
+                    remotehds = remote.branchmap()
 
-            if remote_heads == [nullid]:
-                warn = 0
-            elif not revs and len(heads) > len(remote_heads):
-                warn = 1
-            else:
-                newheads = list(heads)
-                for r in remote_heads:
-                    if r in self.changelog.nodemap:
-                        desc = self.changelog.heads(r, heads)
-                        l = [h for h in heads if h in desc]
-                        if not l:
-                            newheads.append(r)
-                    else:
-                        newheads.append(r)
-                if len(newheads) > len(remote_heads):
-                    warn = 1
+                    for lh in localhds:
+                        if lh in remotehds:
+                            rheads = remotehds[lh]
+                        else:
+                            rheads = []
+                        lheads = localhds[lh]
+                        updatelh = [upd for upd in update
+                                    if self[upd].branch() == lh]
+                        if not updatelh:
+                            continue
+                        if not checkbranch(lheads, rheads, updatelh):
+                            return None, 0
+                else:
+                    if not checkbranch(heads, remote_heads, update):
+                        return None, 0
 
-            if warn:
-                self.ui.warn(_("abort: push creates new remote heads!\n"))
-                self.ui.status(_("(did you forget to merge?"
-                                 " use push -f to force)\n"))
-                return None, 0
-            elif inc:
+            if inc:
                 self.ui.warn(_("note: unsynced remote changes!\n"))
 
 
@@ -1653,13 +1672,12 @@
 
         # Known heads are the list of heads that it is assumed the recipient
         # of this changegroup will know about.
-        knownheads = {}
+        knownheads = set()
         # We assume that all parents of bases are known heads.
         for n in bases:
-            for p in cl.parents(n):
-                if p != nullid:
-                    knownheads[p] = 1
-        knownheads = knownheads.keys()
+            knownheads.update(cl.parents(n))
+        knownheads.discard(nullid)
+        knownheads = list(knownheads)
         if knownheads:
             # Now that we know what heads are known, we can compute which
             # changesets are known.  The recipient must know about all
@@ -1705,14 +1723,14 @@
         # 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 = hasset.keys()
+            haslst = list(hasset)
             haslst.sort(cmp_by_rev_func(revlog))
             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[n] = 1
+                        hasset.add(n)
                         p = [p for p in revlog.parents(n) if p != nullid]
                         parentlst.extend(p)
             for n in hasset:
@@ -1744,14 +1762,14 @@
         # of the changegroup) the recipient must know about and remove them
         # from the changegroup.
         def prune_manifests():
-            has_mnfst_set = {}
+            has_mnfst_set = set()
             for n in msng_mnfst_set:
                 # If a 'missing' manifest thinks it belongs to a changenode
                 # the recipient is assumed to have, obviously the recipient
                 # must have that manifest.
                 linknode = cl.node(mnfst.linkrev(mnfst.rev(n)))
                 if linknode in has_cl_set:
-                    has_mnfst_set[n] = 1
+                    has_mnfst_set.add(n)
             prune_parents(mnfst, has_mnfst_set, msng_mnfst_set)
 
         # Use the information collected in collect_manifests_and_files to say
@@ -1810,14 +1828,14 @@
         # all those we know the recipient must have.
         def prune_filenodes(f, filerevlog):
             msngset = msng_filenode_set[f]
-            hasset = {}
+            hasset = set()
             # If a 'missing' filenode thinks it belongs to a changenode we
             # assume the recipient must have, then the recipient must have
             # that filenode.
             for n in msngset:
                 clnode = cl.node(filerevlog.linkrev(filerevlog.rev(n)))
                 if clnode in has_cl_set:
-                    hasset[n] = 1
+                    hasset.add(n)
             prune_parents(filerevlog, hasset, msngset)
 
         # A function generator function that sets up the a context for the
@@ -1944,8 +1962,7 @@
         def changed_file_collector(changedfileset):
             def collect_changed_files(clnode):
                 c = cl.read(clnode)
-                for fname in c[3]:
-                    changedfileset[fname] = 1
+                changedfileset.update(c[3])
             return collect_changed_files
 
         def lookuprevlink_func(revlog):
@@ -1955,7 +1972,7 @@
 
         def gengroup():
             # construct a list of all changed files
-            changedfiles = {}
+            changedfiles = set()
 
             for chnk in cl.group(nodes, identity,
                                  changed_file_collector(changedfiles)):
@@ -2020,12 +2037,12 @@
             trp = weakref.proxy(tr)
             # pull off the changeset group
             self.ui.status(_("adding changesets\n"))
-            cor = len(cl) - 1
+            clstart = len(cl)
             chunkiter = changegroup.chunkiter(source)
             if cl.addgroup(chunkiter, csmap, trp) is None and not emptyok:
                 raise util.Abort(_("received changelog group is empty"))
-            cnr = len(cl) - 1
-            changesets = cnr - cor
+            clend = len(cl)
+            changesets = clend - clstart
 
             # pull off the manifest group
             self.ui.status(_("adding manifests\n"))
@@ -2051,7 +2068,7 @@
                 revisions += len(fl) - o
                 files += 1
 
-            newheads = len(self.changelog.heads())
+            newheads = len(cl.heads())
             heads = ""
             if oldheads and newheads != oldheads:
                 heads = _(" (%+d heads)") % (newheads - oldheads)
@@ -2061,9 +2078,9 @@
                              % (changesets, revisions, files, heads))
 
             if changesets > 0:
-                p = lambda: self.changelog.writepending() and self.root or ""
+                p = lambda: cl.writepending() and self.root or ""
                 self.hook('pretxnchangegroup', throw=True,
-                          node=hex(self.changelog.node(cor+1)), source=srctype,
+                          node=hex(cl.node(clstart)), source=srctype,
                           url=url, pending=p)
 
             # make changelog see real files again
@@ -2077,11 +2094,11 @@
             # forcefully update the on-disk branch cache
             self.ui.debug(_("updating the branch cache\n"))
             self.branchtags()
-            self.hook("changegroup", node=hex(self.changelog.node(cor+1)),
+            self.hook("changegroup", node=hex(cl.node(clstart)),
                       source=srctype, url=url)
 
-            for i in xrange(cor + 1, cnr + 1):
-                self.hook("incoming", node=hex(self.changelog.node(i)),
+            for i in xrange(clstart, clend):
+                self.hook("incoming", node=hex(cl.node(i)),
                           source=srctype, url=url)
 
         # never return 0 here:
@@ -2125,7 +2142,8 @@
                 raise error.ResponseError(
                     _('Unexpected response from remote server:'), l)
             self.ui.debug(_('adding %s (%s)\n') % (name, util.bytecount(size)))
-            ofp = self.sopener(name, 'w')
+            # for backwards compat, name was partially encoded
+            ofp = self.sopener(store.decodedir(name), 'w')
             for chunk in util.filechunkiter(fp, limit=size):
                 ofp.write(chunk)
             ofp.close()
--- a/mercurial/lsprofcalltree.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/lsprofcalltree.py	Wed Jul 08 17:03:16 2009 -0700
@@ -10,10 +10,6 @@
 of the GNU General Public License, incorporated herein by reference.
 """
 
-import optparse
-import os
-import sys
-
 def label(code):
     if isinstance(code, str):
         return '~' + code    # built-in functions ('~' sorts at the end)
--- a/mercurial/mail.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/mail.py	Wed Jul 08 17:03:16 2009 -0700
@@ -119,7 +119,7 @@
     charsets = [cs.lower() for cs in ui.configlist('email', 'charsets')]
     fallbacks = [encoding.fallbackencoding.lower(),
                  encoding.encoding.lower(), 'utf-8']
-    for cs in fallbacks: # util.unique does not keep order
+    for cs in fallbacks: # find unique charsets while keeping order
         if cs not in charsets:
             charsets.append(cs)
     return [cs for cs in charsets if not cs.endswith('ascii')]
--- a/mercurial/manifest.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/manifest.py	Wed Jul 08 17:03:16 2009 -0700
@@ -6,7 +6,7 @@
 # GNU General Public License version 2, incorporated herein by reference.
 
 from i18n import _
-import mdiff, parsers, util, error, revlog
+import mdiff, parsers, error, revlog
 import array, struct
 
 class manifestdict(dict):
--- a/mercurial/match.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/match.py	Wed Jul 08 17:03:16 2009 -0700
@@ -1,27 +1,90 @@
-# match.py - file name matching
+# match.py - filename matching
 #
 #  Copyright 2008, 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.
 
-import util
+import util, re
+
+class match(object):
+    def __init__(self, root, cwd, patterns, include=[], exclude=[],
+                 default='glob', exact=False):
+        """build an object to match a set of file patterns
 
-class _match(object):
-    def __init__(self, root, cwd, files, mf, ap):
+        arguments:
+        root - the canonical root of the tree you're matching against
+        cwd - the current working directory, if relevant
+        patterns - patterns to find
+        include - patterns to include
+        exclude - patterns to exclude
+        default - if a pattern in names has no explicit type, assume this one
+        exact - patterns are actually literals
+
+        a pattern is one of:
+        'glob:<glob>' - a glob relative to cwd
+        're:<regexp>' - a regular expression
+        'path:<path>' - a path relative to canonroot
+        'relglob:<glob>' - an unrooted glob (*.c matches C files in all dirs)
+        'relpath:<path>' - a path relative to cwd
+        'relre:<regexp>' - a regexp that needn't match the start of a name
+        '<something>' - a pattern of the specified default type
+        """
+
         self._root = root
         self._cwd = cwd
-        self._files = files
-        self._fmap = set(files)
-        self.matchfn = mf
-        self._anypats = ap
+        self._files = []
+        self._anypats = bool(include or exclude)
+
+        if include:
+            im = _buildmatch(_normalize(include, 'glob', root, cwd), '(?:/|$)')
+        if exclude:
+            em = _buildmatch(_normalize(exclude, 'glob', root, cwd), '(?:/|$)')
+        if exact:
+            self._files = patterns
+            pm = self.exact
+        elif patterns:
+            pats = _normalize(patterns, default, root, cwd)
+            self._files = _roots(pats)
+            self._anypats = self._anypats or _anypats(pats)
+            pm = _buildmatch(pats, '$')
+
+        if patterns or exact:
+            if include:
+                if exclude:
+                    m = lambda f: im(f) and not em(f) and pm(f)
+                else:
+                    m = lambda f: im(f) and pm(f)
+            else:
+                if exclude:
+                    m = lambda f: not em(f) and pm(f)
+                else:
+                    m = pm
+        else:
+            if include:
+                if exclude:
+                    m = lambda f: im(f) and not em(f)
+                else:
+                    m = im
+            else:
+                if exclude:
+                    m = lambda f: not em(f)
+                else:
+                    m = lambda f: True
+
+        self.matchfn = m
+        self._fmap = set(self._files)
+
     def __call__(self, fn):
         return self.matchfn(fn)
     def __iter__(self):
         for f in self._files:
             yield f
     def bad(self, f, msg):
-        return True
+        '''callback for each explicit file that can't be
+        found/accessed, with an error message
+        '''
+        pass
     def dir(self, f):
         pass
     def missing(self, f):
@@ -35,20 +98,151 @@
     def anypats(self):
         return self._anypats
 
-class always(_match):
+class exact(match):
+    def __init__(self, root, cwd, files):
+        match.__init__(self, root, cwd, files, exact = True)
+
+class always(match):
     def __init__(self, root, cwd):
-        _match.__init__(self, root, cwd, [], lambda f: True, False)
+        match.__init__(self, root, cwd, [])
 
-class never(_match):
-    def __init__(self, root, cwd):
-        _match.__init__(self, root, cwd, [], lambda f: False, False)
+def patkind(pat):
+    return _patsplit(pat, None)[0]
+
+def _patsplit(pat, default):
+    """Split a string into an optional pattern kind prefix and the
+    actual pattern."""
+    if ':' in pat:
+        kind, val = pat.split(':', 1)
+        if kind in ('re', 'glob', 'path', 'relglob', 'relpath', 'relre'):
+            return kind, val
+    return default, pat
 
-class exact(_match):
-    def __init__(self, root, cwd, files):
-        _match.__init__(self, root, cwd, files, lambda f: f in files, False)
+def _globre(pat):
+    "convert a glob pattern into a regexp"
+    i, n = 0, len(pat)
+    res = ''
+    group = 0
+    escape = re.escape
+    def peek(): return i < n and pat[i]
+    while i < n:
+        c = pat[i]
+        i = i+1
+        if c not in '*?[{},\\':
+            res += escape(c)
+        elif c == '*':
+            if peek() == '*':
+                i += 1
+                res += '.*'
+            else:
+                res += '[^/]*'
+        elif c == '?':
+            res += '.'
+        elif c == '[':
+            j = i
+            if j < n and pat[j] in '!]':
+                j += 1
+            while j < n and pat[j] != ']':
+                j += 1
+            if j >= n:
+                res += '\\['
+            else:
+                stuff = pat[i:j].replace('\\','\\\\')
+                i = j + 1
+                if stuff[0] == '!':
+                    stuff = '^' + stuff[1:]
+                elif stuff[0] == '^':
+                    stuff = '\\' + stuff
+                res = '%s[%s]' % (res, stuff)
+        elif c == '{':
+            group += 1
+            res += '(?:'
+        elif c == '}' and group:
+            res += ')'
+            group -= 1
+        elif c == ',' and group:
+            res += '|'
+        elif c == '\\':
+            p = peek()
+            if p:
+                i += 1
+                res += escape(p)
+            else:
+                res += escape(c)
+        else:
+            res += escape(c)
+    return res
 
-class match(_match):
-    def __init__(self, root, cwd, patterns, include, exclude, default):
-        f, mf, ap = util.matcher(root, cwd, patterns, include, exclude,
-                                 None, default)
-        _match.__init__(self, root, cwd, f, mf, ap)
+def _regex(kind, name, tail):
+    '''convert a pattern into a regular expression'''
+    if not name:
+        return ''
+    if kind == 're':
+        return name
+    elif kind == 'path':
+        return '^' + re.escape(name) + '(?:/|$)'
+    elif kind == 'relglob':
+        return '(?:|.*/)' + _globre(name) + tail
+    elif kind == 'relpath':
+        return re.escape(name) + '(?:/|$)'
+    elif kind == 'relre':
+        if name.startswith('^'):
+            return name
+        return '.*' + name
+    return _globre(name) + tail
+
+def _buildmatch(pats, tail):
+    """build a matching function from a set of patterns"""
+    try:
+        pat = '(?:%s)' % '|'.join([_regex(k, p, tail) for (k, p) in pats])
+        if len(pat) > 20000:
+            raise OverflowError()
+        return re.compile(pat).match
+    except OverflowError:
+        # We're using a Python with a tiny regex engine and we
+        # made it explode, so we'll divide the pattern list in two
+        # until it works
+        l = len(pats)
+        if l < 2:
+            raise
+        a, b = _buildmatch(pats[:l//2], tail), _buildmatch(pats[l//2:], tail)
+        return lambda s: a(s) or b(s)
+    except re.error:
+        for k, p in pats:
+            try:
+                re.compile('(?:%s)' % _regex(k, p, tail))
+            except re.error:
+                raise util.Abort("invalid pattern (%s): %s" % (k, p))
+        raise util.Abort("invalid pattern")
+
+def _normalize(names, default, root, cwd):
+    pats = []
+    for kind, name in [_patsplit(p, default) for p in names]:
+        if kind in ('glob', 'relpath'):
+            name = util.canonpath(root, cwd, name)
+        elif kind in ('relglob', 'path'):
+            name = util.normpath(name)
+
+        pats.append((kind, name))
+    return pats
+
+def _roots(patterns):
+    r = []
+    for kind, name in patterns:
+        if kind == 'glob': # find the non-glob prefix
+            root = []
+            for p in name.split('/'):
+                if '[' in p or '{' in p or '*' in p or '?' in p:
+                    break
+                root.append(p)
+            r.append('/'.join(root) or '.')
+        elif kind in ('relpath', 'path'):
+            r.append(name or '.')
+        elif kind == 'relglob':
+            r.append('.')
+    return r
+
+def _anypats(patterns):
+    for kind, name in patterns:
+        if kind in ('glob', 're', 'relglob', 'relre'):
+            return True
--- a/mercurial/mdiff.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/mdiff.py	Wed Jul 08 17:03:16 2009 -0700
@@ -185,7 +185,7 @@
     #
     diff = bdiff.blocks(t1, t2)
     hunk = None
-    for i in xrange(len(diff)):
+    for i, s1 in enumerate(diff):
         # The first match is special.
         # we've either found a match starting at line 0 or a match later
         # in the file.  If it starts later, old and new below will both be
@@ -195,7 +195,6 @@
         else:
             s = [0, 0, 0, 0]
         delta = []
-        s1 = diff[i]
         a1 = s[1]
         a2 = s1[0]
         b1 = s[3]
--- a/mercurial/merge.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/merge.py	Wed Jul 08 17:03:16 2009 -0700
@@ -7,7 +7,7 @@
 
 from node import nullid, nullrev, hex, bin
 from i18n import _
-import util, filemerge, copies
+import util, filemerge, copies, subrepo
 import errno, os, shutil
 
 class mergestate(object):
@@ -125,35 +125,17 @@
     partial = function to filter file lists
     """
 
-    repo.ui.note(_("resolving manifests\n"))
-    repo.ui.debug(_(" overwrite %s partial %s\n") % (overwrite, bool(partial)))
-    repo.ui.debug(_(" ancestor %s local %s remote %s\n") % (pa, p1, p2))
-
-    m1 = p1.manifest()
-    m2 = p2.manifest()
-    ma = pa.manifest()
-    backwards = (pa == p2)
-    action = []
-    copy, copied, diverge = {}, {}, {}
-
-    def fmerge(f, f2=None, fa=None):
+    def fmerge(f, f2, fa):
         """merge flags"""
-        if not f2:
-            f2 = f
-            fa = f
         a, m, n = ma.flags(fa), m1.flags(f), m2.flags(f2)
         if m == n: # flags agree
             return m # unchanged
-        if m and n: # flags are set but don't agree
-            if not a: # both differ from parent
-                r = repo.ui.prompt(
-                    _(" conflicting flags for %s\n"
-                      "(n)one, e(x)ec or sym(l)ink?") % f,
-                    (_("&None"), _("E&xec"), _("Sym&link")), _("n"))
-                return r != _("n") and r or ''
-            if m == a:
-                return n # changed from m to n
-            return m # changed from n to m
+        if m and n and not a: # flags set, don't agree, differ from parent
+            r = repo.ui.prompt(
+                _(" conflicting flags for %s\n"
+                  "(n)one, e(x)ec or sym(l)ink?") % f,
+                (_("&None"), _("E&xec"), _("Sym&link")), _("n"))
+            return r != _("n") and r or ''
         if m and m != a: # changed from a to m
             return m
         if n and n != a: # changed from a to n
@@ -164,79 +146,67 @@
         repo.ui.debug(" %s: %s -> %s\n" % (f, msg, m))
         action.append((f, m) + args)
 
-    if pa and not (backwards or overwrite):
-        if repo.ui.configbool("merge", "followcopies", True):
-            dirs = repo.ui.configbool("merge", "followdirs", True)
-            copy, diverge = copies.copies(repo, p1, p2, pa, dirs)
-        copied = set(copy.values())
+    action, copy = [], {}
+
+    if overwrite:
+        pa = p1
+    elif pa == p2: # backwards
+        pa = p1.p1()
+    elif pa and repo.ui.configbool("merge", "followcopies", True):
+        dirs = repo.ui.configbool("merge", "followdirs", True)
+        copy, diverge = copies.copies(repo, p1, p2, pa, dirs)
         for of, fl in diverge.iteritems():
             act("divergent renames", "dr", of, fl)
 
+    repo.ui.note(_("resolving manifests\n"))
+    repo.ui.debug(_(" overwrite %s partial %s\n") % (overwrite, bool(partial)))
+    repo.ui.debug(_(" ancestor %s local %s remote %s\n") % (pa, p1, p2))
+
+    m1, m2, ma = p1.manifest(), p2.manifest(), pa.manifest()
+    copied = set(copy.values())
+
     # Compare manifests
     for f, n in m1.iteritems():
         if partial and not partial(f):
             continue
         if f in m2:
-            if overwrite or backwards:
-                rflags = m2.flags(f)
-            else:
-                rflags = fmerge(f)
-            # are files different?
-            if n != m2[f]:
-                a = ma.get(f, nullid)
-                # are we clobbering?
-                if overwrite:
-                    act("clobbering", "g", f, rflags)
-                # or are we going back in time and clean?
-                elif backwards:
-                    if not n[20:] or not p2[f].cmp(p1[f].data()):
-                        act("reverting", "g", f, rflags)
-                # are both different from the ancestor?
-                elif n != a and m2[f] != a:
-                    act("versions differ", "m", f, f, f, rflags, False)
-                # is remote's version newer?
-                elif m2[f] != a:
-                    act("remote is newer", "g", f, rflags)
-                # local is newer, not overwrite, check mode bits
-                elif m1.flags(f) != rflags:
+            rflags = fmerge(f, f, f)
+            a = ma.get(f, nullid)
+            if n == m2[f] or m2[f] == a: # same or local newer
+                if m1.flags(f) != rflags:
                     act("update permissions", "e", f, rflags)
-            # contents same, check mode bits
-            elif m1.flags(f) != rflags:
-                act("update permissions", "e", f, rflags)
-        elif f in copied:
-            continue
+            elif n == a: # remote newer
+                act("remote is newer", "g", f, rflags)
+            else: # both changed
+                act("versions differ", "m", f, f, f, rflags, False)
+        elif f in copied: # files we'll deal with on m2 side
+            pass
         elif f in copy:
             f2 = copy[f]
             if f2 not in m2: # directory rename
                 act("remote renamed directory to " + f2, "d",
                     f, None, f2, m1.flags(f))
-            elif f2 in m1: # case 2 A,B/B/B
-                act("local copied to " + f2, "m",
+            else: # case 2 A,B/B/B or case 4,21 A/B/B
+                act("local copied/moved to " + f2, "m",
                     f, f2, f, fmerge(f, f2, f2), False)
-            else: # case 4,21 A/B/B
-                act("local moved to " + f2, "m",
-                    f, f2, f, fmerge(f, f2, f2), False)
-        elif f in ma:
-            if n != ma[f] and not overwrite:
+        elif f in ma: # clean, a different, no remote
+            if n != ma[f]:
                 if repo.ui.prompt(
                     _(" local changed %s which remote deleted\n"
                       "use (c)hanged version or (d)elete?") % f,
                     (_("&Changed"), _("&Delete")), _("c")) == _("d"):
                     act("prompt delete", "r", f)
-                act("prompt keep", "a", f)
-            else:
+                else:
+                    act("prompt keep", "a", f)
+            elif n[20:] == "a": # added, no remote
+                act("remote deleted", "f", f)
+            elif n[20:] != "u":
                 act("other deleted", "r", f)
-        else:
-            # file is created on branch or in working directory
-            if (overwrite and n[20:] != "u") or (backwards and not n[20:]):
-                act("remote deleted", "r", f)
 
     for f, n in m2.iteritems():
         if partial and not partial(f):
             continue
-        if f in m1:
-            continue
-        if f in copied:
+        if f in m1 or f in copied: # files already visited
             continue
         if f in copy:
             f2 = copy[f]
@@ -249,30 +219,19 @@
             else: # case 3,20 A/B/A
                 act("remote moved to " + f, "m",
                     f2, f, f, fmerge(f2, f, f2), True)
-        elif f in ma:
-            if overwrite or backwards:
-                act("recreating", "g", f, m2.flags(f))
-            elif n != ma[f]:
-                if repo.ui.prompt(
-                    _("remote changed %s which local deleted\n"
-                      "use (c)hanged version or leave (d)eleted?") % f,
-                    (_("&Changed"), _("&Deleted")), _("c")) == _("c"):
-                    act("prompt recreating", "g", f, m2.flags(f))
-        else:
+        elif f not in ma:
             act("remote created", "g", f, m2.flags(f))
+        elif n != ma[f]:
+            if repo.ui.prompt(
+                _("remote changed %s which local deleted\n"
+                  "use (c)hanged version or leave (d)eleted?") % f,
+                (_("&Changed"), _("&Deleted")), _("c")) == _("c"):
+                act("prompt recreating", "g", f, m2.flags(f))
 
     return action
 
-def actioncmp(a1, a2):
-    m1 = a1[1]
-    m2 = a2[1]
-    if m1 == m2:
-        return cmp(a1, a2)
-    if m1 == 'r':
-        return -1
-    if m2 == 'r':
-        return 1
-    return cmp(a1, a2)
+def actionkey(a):
+    return a[1] == 'r' and -1 or 0, a
 
 def applyupdates(repo, action, wctx, mctx):
     "apply the merge action list to the working directory"
@@ -281,13 +240,16 @@
     ms = mergestate(repo)
     ms.reset(wctx.parents()[0].node())
     moves = []
-    action.sort(actioncmp)
+    action.sort(key=actionkey)
+    substate = wctx.substate # prime
 
     # prescan for merges
     for a in action:
         f, m = a[:2]
         if m == 'm': # merge
             f2, fd, flags, move = a[2:]
+            if f == '.hgsubstate': # merged internally
+                continue
             repo.ui.debug(_("preserving %s for resolve of %s\n") % (f, fd))
             fcl = wctx[f]
             fco = mctx[f2]
@@ -311,6 +273,8 @@
         if m == "r": # remove
             repo.ui.note(_("removing %s\n") % f)
             audit_path(f)
+            if f == '.hgsubstate': # subrepo states need updating
+                subrepo.submerge(repo, wctx, mctx, wctx)
             try:
                 util.unlink(repo.wjoin(f))
             except OSError, inst:
@@ -319,6 +283,9 @@
                                  (f, inst.strerror))
             removed += 1
         elif m == "m": # merge
+            if f == '.hgsubstate': # subrepo states need updating
+                subrepo.submerge(repo, wctx, mctx, wctx.ancestor(mctx))
+                continue
             f2, fd, flags, move = a[2:]
             r = ms.resolve(fd, wctx, mctx)
             if r > 0:
@@ -338,6 +305,8 @@
             t = mctx.filectx(f).data()
             repo.wwrite(f, t, flags)
             updated += 1
+            if f == '.hgsubstate': # subrepo states need updating
+                subrepo.submerge(repo, wctx, mctx, wctx)
         elif m == "d": # directory rename
             f2, fd, flags = a[2:]
             if f:
@@ -463,7 +432,8 @@
                     raise util.Abort(_("nothing to merge (use 'hg update'"
                                        " or check 'hg heads')"))
             if not force and (wc.files() or wc.deleted()):
-                raise util.Abort(_("outstanding uncommitted changes"))
+                raise util.Abort(_("outstanding uncommitted changes "
+                                   "(use 'hg status' to list changes)"))
         elif not overwrite:
             if pa == p1 or pa == p2: # linear
                 pass # all good
--- a/mercurial/osutil.c	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/osutil.c	Wed Jul 08 17:03:16 2009 -0700
@@ -23,6 +23,11 @@
 # include <unistd.h>
 #endif
 
+// some platforms lack the PATH_MAX definition (eg. GNU/Hurd)
+#ifndef PATH_MAX
+#define PATH_MAX 4096
+#endif
+
 #ifdef _WIN32
 /*
 stat struct compatible with hg expectations
@@ -402,7 +407,7 @@
 	PyObject *file_obj = NULL;
 	char *name = NULL;
 	char *mode = "rb";
-	DWORD access;
+	DWORD access = 0;
 	DWORD creation;
 	HANDLE handle;
 	int fd, flags = 0;
--- a/mercurial/patch.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/patch.py	Wed Jul 08 17:03:16 2009 -0700
@@ -147,7 +147,7 @@
 GP_FILTER = 1 << 1  # there's some copy/rename operation
 GP_BINARY = 1 << 2  # there's a binary patch
 
-class patchmeta:
+class patchmeta(object):
     """Patched file metadata
 
     'op' is the performed operation within ADD, DELETE, RENAME, MODIFY
@@ -228,13 +228,42 @@
 
     return (dopatch, gitpatches)
 
+class linereader(object):
+    # simple class to allow pushing lines back into the input stream
+    def __init__(self, fp, textmode=False):
+        self.fp = fp
+        self.buf = []
+        self.textmode = textmode
+
+    def push(self, line):
+        if line is not None:
+            self.buf.append(line)
+
+    def readline(self):
+        if self.buf:
+            l = self.buf[0]
+            del self.buf[0]
+            return l
+        l = self.fp.readline()
+        if self.textmode and l.endswith('\r\n'):
+            l = l[:-2] + '\n'
+        return l
+
+    def __iter__(self):
+        while 1:
+            l = self.readline()
+            if not l:
+                break
+            yield l
+
 # @@ -start,len +start,len @@ or @@ -start +start @@ if len is 1
 unidesc = re.compile('@@ -(\d+)(,(\d+))? \+(\d+)(,(\d+))? @@')
 contextdesc = re.compile('(---|\*\*\*) (\d+)(,(\d+))? (---|\*\*\*)')
 
-class patchfile:
-    def __init__(self, ui, fname, opener, missing=False):
+class patchfile(object):
+    def __init__(self, ui, fname, opener, missing=False, eol=None):
         self.fname = fname
+        self.eol = eol
         self.opener = opener
         self.ui = ui
         self.lines = []
@@ -260,14 +289,20 @@
     def readlines(self, fname):
         fp = self.opener(fname, 'r')
         try:
-            return fp.readlines()
+            return list(linereader(fp, self.eol is not None))
         finally:
             fp.close()
 
     def writelines(self, fname, lines):
         fp = self.opener(fname, 'w')
         try:
-            fp.writelines(lines)
+            if self.eol and self.eol != '\n':
+                for l in lines:
+                    if l and l[-1] == '\n':
+                        l = l[:-1] + self.eol
+                    fp.write(l)
+            else:
+                fp.writelines(lines)
         finally:
             fp.close()
 
@@ -307,8 +342,7 @@
 
     def hashlines(self):
         self.hash = {}
-        for x in xrange(len(self.lines)):
-            s = self.lines[x]
+        for x, s in enumerate(self.lines):
             self.hash.setdefault(s, []).append(x)
 
     def write_rej(self):
@@ -433,7 +467,7 @@
         self.rej.append(h)
         return -1
 
-class hunk:
+class hunk(object):
     def __init__(self, desc, num, lr, context, create=False, remove=False):
         self.number = num
         self.desc = desc
@@ -452,11 +486,11 @@
         if not m:
             raise PatchError(_("bad hunk #%d") % self.number)
         self.starta, foo, self.lena, self.startb, foo2, self.lenb = m.groups()
-        if self.lena == None:
+        if self.lena is None:
             self.lena = 1
         else:
             self.lena = int(self.lena)
-        if self.lenb == None:
+        if self.lenb is None:
             self.lenb = 1
         else:
             self.lenb = int(self.lenb)
@@ -479,7 +513,7 @@
             raise PatchError(_("bad hunk #%d") % self.number)
         foo, self.starta, foo2, aend, foo3 = m.groups()
         self.starta = int(self.starta)
-        if aend == None:
+        if aend is None:
             aend = self.starta
         self.lena = int(aend) - self.starta
         if self.starta:
@@ -511,7 +545,7 @@
             raise PatchError(_("bad hunk #%d") % self.number)
         foo, self.startb, foo2, bend, foo3 = m.groups()
         self.startb = int(self.startb)
-        if bend == None:
+        if bend is None:
             bend = self.startb
         self.lenb = int(bend) - self.startb
         if self.startb:
@@ -783,28 +817,6 @@
 
     return fname, missing
 
-class linereader:
-    # simple class to allow pushing lines back into the input stream
-    def __init__(self, fp):
-        self.fp = fp
-        self.buf = []
-
-    def push(self, line):
-        if line is not None:
-            self.buf.append(line)
-
-    def readline(self):
-        if self.buf:
-            return self.buf.pop(0)
-        return self.fp.readline()
-
-    def __iter__(self):
-        while 1:
-            l = self.readline()
-            if not l:
-                break
-            yield l
-
 def scangitpatch(lr, firstline):
     """
     Git patches can emit:
@@ -825,19 +837,21 @@
         fp = lr.fp
     except IOError:
         fp = cStringIO.StringIO(lr.fp.read())
-    gitlr = linereader(fp)
+    gitlr = linereader(fp, lr.textmode)
     gitlr.push(firstline)
     (dopatch, gitpatches) = readgitpatch(gitlr)
     fp.seek(pos)
     return dopatch, gitpatches
 
-def iterhunks(ui, fp, sourcefile=None):
+def iterhunks(ui, fp, sourcefile=None, textmode=False):
     """Read a patch and yield the following events:
     - ("file", afile, bfile, firsthunk): select a new target file.
     - ("hunk", hunk): a new hunk is ready to be applied, follows a
     "file" event.
     - ("git", gitchanges): current diff is in git format, gitchanges
     maps filenames to gitpatch records. Unique event.
+
+    If textmode is True, input line-endings are normalized to LF.
     """
     changed = {}
     current_hunk = None
@@ -851,7 +865,7 @@
     # our states
     BFILE = 1
     context = None
-    lr = linereader(fp)
+    lr = linereader(fp, textmode)
     dopatch = True
     # gitworkdone is True if a git operation (copy, rename, ...) was
     # performed already for the current file. Useful when the file
@@ -870,9 +884,9 @@
             current_hunk = None
             gitworkdone = False
         if ((sourcefile or state == BFILE) and ((not context and x[0] == '@') or
-            ((context or context == None) and x.startswith('***************')))):
+            ((context is not False) and x.startswith('***************')))):
             try:
-                if context == None and x.startswith('***************'):
+                if context is None and x.startswith('***************'):
                     context = True
                 gpatch = changed.get(bfile)
                 create = afile == '/dev/null' or gpatch and gpatch.op == 'ADD'
@@ -955,17 +969,25 @@
     if hunknum == 0 and dopatch and not gitworkdone:
         raise NoHunks
 
-def applydiff(ui, fp, changed, strip=1, sourcefile=None, reverse=False):
-    """reads a patch from fp and tries to apply it.  The dict 'changed' is
-       filled in with all of the filenames changed by the patch.  Returns 0
-       for a clean patch, -1 if any rejects were found and 1 if there was
-       any fuzz."""
+def applydiff(ui, fp, changed, strip=1, sourcefile=None, reverse=False,
+              eol=None):
+    """
+    Reads a patch from fp and tries to apply it.
 
+    The dict 'changed' is filled in with all of the filenames changed
+    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').
+    """
     rejects = 0
     err = 0
     current_file = None
     gitpatches = None
     opener = util.opener(os.getcwd())
+    textmode = eol is not None
 
     def closefile():
         if not current_file:
@@ -973,7 +995,7 @@
         current_file.close()
         return len(current_file.rej)
 
-    for state, values in iterhunks(ui, fp, sourcefile):
+    for state, values in iterhunks(ui, fp, sourcefile, textmode):
         if state == 'hunk':
             if not current_file:
                 continue
@@ -988,11 +1010,11 @@
             afile, bfile, first_hunk = values
             try:
                 if sourcefile:
-                    current_file = patchfile(ui, sourcefile, opener)
+                    current_file = patchfile(ui, sourcefile, opener, eol=eol)
                 else:
                     current_file, missing = selectfile(afile, bfile, first_hunk,
                                             strip, reverse)
-                    current_file = patchfile(ui, current_file, opener, missing)
+                    current_file = patchfile(ui, current_file, opener, missing, eol)
             except PatchError, err:
                 ui.warn(str(err) + '\n')
                 current_file, current_hunk = None, None
@@ -1033,7 +1055,7 @@
     if not patches:
         return
     copies = []
-    removes = {}
+    removes = set()
     cfiles = patches.keys()
     cwd = repo.getcwd()
     if cwd:
@@ -1044,14 +1066,13 @@
             continue
         if gp.op == 'RENAME':
             copies.append((gp.oldpath, gp.path))
-            removes[gp.oldpath] = 1
+            removes.add(gp.oldpath)
         elif gp.op == 'COPY':
             copies.append((gp.oldpath, gp.path))
         elif gp.op == 'DELETE':
-            removes[gp.path] = 1
+            removes.add(gp.path)
     for src, dst in copies:
         repo.copy(src, dst)
-    removes = removes.keys()
     if (not similarity) and removes:
         repo.remove(sorted(removes), True)
     for f in patches:
@@ -1106,9 +1127,17 @@
                          util.explain_exit(code)[0])
     return fuzz
 
-def internalpatch(patchobj, ui, strip, cwd, files={}):
+def internalpatch(patchobj, ui, strip, cwd, files={}, eolmode='strict'):
     """use builtin patch to apply <patchobj> to the working directory.
     returns whether patch was applied with fuzz factor."""
+
+    if eolmode is None:
+        eolmode = ui.config('patch', 'eol', 'strict')
+    try:
+        eol = {'strict': None, 'crlf': '\r\n', 'lf': '\n'}[eolmode.lower()]
+    except KeyError:
+        raise util.Abort(_('Unsupported line endings type: %s') % eolmode)
+
     try:
         fp = file(patchobj, 'rb')
     except TypeError:
@@ -1117,7 +1146,7 @@
         curdir = os.getcwd()
         os.chdir(cwd)
     try:
-        ret = applydiff(ui, fp, files, strip=strip)
+        ret = applydiff(ui, fp, files, strip=strip, eol=eol)
     finally:
         if cwd:
             os.chdir(curdir)
@@ -1125,9 +1154,18 @@
         raise PatchError
     return ret > 0
 
-def patch(patchname, ui, strip=1, cwd=None, files={}):
-    """apply <patchname> to the working directory.
-    returns whether patch was applied with fuzz factor."""
+def patch(patchname, ui, strip=1, cwd=None, files={}, eolmode='strict'):
+    """Apply <patchname> to the working directory.
+
+    'eolmode' specifies how end of lines should be handled. It can be:
+    - 'strict': inputs are read in binary mode, EOLs are preserved
+    - 'crlf': EOLs are ignored when patching and reset to CRLF
+    - 'lf': EOLs are ignored when patching and reset to LF
+    - None: get it from user settings, default to 'strict'
+    'eolmode' is ignored when using an external patcher program.
+
+    Returns whether patch was applied with fuzz factor.
+    """
     patcher = ui.config('ui', 'patch')
     args = []
     try:
@@ -1136,7 +1174,7 @@
                                  files)
         else:
             try:
-                return internalpatch(patchname, ui, strip, cwd, files)
+                return internalpatch(patchname, ui, strip, cwd, files, eolmode)
             except NoHunks:
                 patcher = util.find_exe('gpatch') or util.find_exe('patch') or 'patch'
                 ui.debug(_('no valid hunks found; trying with %r instead\n') %
@@ -1236,10 +1274,11 @@
 
     if opts.git:
         copy, diverge = copies.copies(repo, ctx1, ctx2, repo[nullid])
+        copy = copy.copy()
         for k, v in copy.items():
             copy[v] = k
 
-    gone = {}
+    gone = set()
     gitmode = {'l': '120000', 'x': '100755', '': '100644'}
 
     for f in sorted(modified + added + removed):
@@ -1261,7 +1300,7 @@
                     _addmodehdr(header, omode, mode)
                     if a in removed and a not in gone:
                         op = 'rename'
-                        gone[a] = 1
+                        gone.add(a)
                     else:
                         op = 'copy'
                     header.append('%s from %s\n' % (op, a))
@@ -1351,7 +1390,7 @@
             if line.startswith('diff --git'):
                 filename = gitre.search(line).group(1)
             else:
-                # format: "diff -r ... -r ... file name"
+                # format: "diff -r ... -r ... filename"
                 filename = line.split(None, 5)[-1]
         elif line.startswith('+') and not line.startswith('+++'):
             adds += 1
--- a/mercurial/posix.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/posix.py	Wed Jul 08 17:03:16 2009 -0700
@@ -13,6 +13,7 @@
 nulldev = '/dev/null'
 normpath = os.path.normpath
 samestat = os.path.samestat
+expandglobs = False
 
 umask = os.umask(0)
 os.umask(umask)
@@ -45,7 +46,7 @@
     return [os.path.expanduser('~/.hgrc')]
 
 def parse_patch_output(output_line):
-    """parses the output produced by patch and returns the file name"""
+    """parses the output produced by patch and returns the filename"""
     pf = output_line[14:]
     if os.sys.platform == 'OpenVMS':
         if pf[0] == '`':
@@ -138,13 +139,8 @@
         return _("stopped by signal %d") % val, val
     raise ValueError(_("invalid exit code"))
 
-def isowner(fp, st=None):
-    """Return True if the file object f belongs to the current user.
-
-    The return value of a util.fstat(f) may be passed as the st argument.
-    """
-    if st is None:
-        st = fstat(fp)
+def isowner(st):
+    """Return True if the stat object st is from the current user."""
     return st.st_uid == os.getuid()
 
 def find_exe(command):
--- a/mercurial/pure/base85.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/pure/base85.py	Wed Jul 08 17:03:16 2009 -0700
@@ -13,8 +13,8 @@
 _b85dec = {}
 
 def _mkb85dec():
-    for i in range(len(_b85chars)):
-        _b85dec[_b85chars[i]] = i
+    for i, c in enumerate(_b85chars):
+        _b85dec[c] = i
 
 def b85encode(text, pad=False):
     """encode text in base85 format"""
@@ -50,9 +50,9 @@
     for i in range(0, len(text), 5):
         chunk = text[i:i+5]
         acc = 0
-        for j in range(len(chunk)):
+        for j, c in enumerate(chunk):
             try:
-                acc = acc * 85 + _b85dec[chunk[j]]
+                acc = acc * 85 + _b85dec[c]
             except KeyError:
                 raise TypeError('Bad base85 character at byte %d' % (i + j))
         if acc > 4294967295:
--- a/mercurial/pure/osutil.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/pure/osutil.py	Wed Jul 08 17:03:16 2009 -0700
@@ -8,6 +8,8 @@
 import os
 import stat as _stat
 
+posixfile = file
+
 def _mode_to_kind(mode):
     if _stat.S_ISREG(mode): return _stat.S_IFREG
     if _stat.S_ISDIR(mode): return _stat.S_IFDIR
@@ -47,3 +49,4 @@
         else:
             result.append((fn, _mode_to_kind(st.st_mode)))
     return result
+
--- a/mercurial/repair.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/repair.py	Wed Jul 08 17:03:16 2009 -0700
@@ -23,17 +23,12 @@
 
 def _collectfiles(repo, striprev):
     """find out the filelogs affected by the strip"""
-    files = {}
+    files = set()
 
     for x in xrange(striprev, len(repo)):
-        for name in repo[x].files():
-            if name in files:
-                continue
-            files[name] = 1
+        files.update(repo[x].files())
 
-    files = files.keys()
-    files.sort()
-    return files
+    return sorted(files)
 
 def _collectextranodes(repo, files, link):
     """return the nodes that have to be saved before the strip"""
@@ -41,7 +36,7 @@
         extra = []
         startrev = count = len(revlog)
         # find the truncation point of the revlog
-        for i in xrange(0, count):
+        for i in xrange(count):
             lrev = revlog.linkrev(i)
             if lrev >= link:
                 startrev = i + 1
@@ -82,30 +77,28 @@
     # the list of heads and bases of the set of interesting revisions.
     # (head = revision in the set that has no descendant in the set;
     #  base = revision in the set that has no ancestor in the set)
-    tostrip = {striprev: 1}
-    saveheads = {}
+    tostrip = set((striprev,))
+    saveheads = set()
     savebases = []
     for r in xrange(striprev + 1, len(cl)):
         parents = cl.parentrevs(r)
         if parents[0] in tostrip or parents[1] in tostrip:
             # r is a descendant of striprev
-            tostrip[r] = 1
+            tostrip.add(r)
             # if this is a merge and one of the parents does not descend
             # from striprev, mark that parent as a savehead.
             if parents[1] != nullrev:
                 for p in parents:
                     if p not in tostrip and p > striprev:
-                        saveheads[p] = 1
+                        saveheads.add(p)
         else:
             # if no parents of this revision will be stripped, mark it as
             # a savebase
             if parents[0] < striprev and parents[1] < striprev:
                 savebases.append(cl.node(r))
 
-            for p in parents:
-                if p in saveheads:
-                    del saveheads[p]
-            saveheads[r] = 1
+            saveheads.difference_update(parents)
+            saveheads.add(r)
 
     saveheads = [cl.node(r) for r in saveheads]
     files = _collectfiles(repo, striprev)
@@ -125,10 +118,12 @@
     tr = repo.transaction()
     offset = len(tr.entries)
 
+    tr.startgroup()
     cl.strip(striprev, tr)
     mfst.strip(striprev, tr)
     for f in fs:
         f.strip(striprev, tr)
+    tr.endgroup()
 
     try:
         for i in xrange(offset, len(tr.entries)):
--- a/mercurial/revlog.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/revlog.py	Wed Jul 08 17:03:16 2009 -0700
@@ -119,7 +119,11 @@
     # available. it keeps file handle open, which make it not possible
     # to break hardlinks on local cloned repos.
 
-    def __init__(self, dataf, size):
+    def __init__(self, dataf):
+        try:
+            size = util.fstat(dataf).st_size
+        except AttributeError:
+            size = 0
         self.dataf = dataf
         self.s = struct.calcsize(indexformatng)
         self.datasize = size
@@ -175,7 +179,7 @@
         if lend > len(self.index) - i:
             lend = len(self.index) - i
         for x in xrange(lend):
-            if self.index[i + x] == None:
+            if self.index[i + x] is None:
                 b = data[off : off + self.s]
                 self.index[i + x] = b
                 n = b[ngshaoffset:ngshaoffset + 20]
@@ -231,7 +235,7 @@
         if self.all:
             return
         all = False
-        if i == None:
+        if i is None:
             blockstart = 0
             blocksize = (65536 / self.s) * self.s
             end = self.datasize
@@ -279,7 +283,7 @@
         self.p = parser
     def load(self, key):
         n = self.p.findnode(key)
-        if n == None:
+        if n is None:
             raise KeyError(key)
     def __contains__(self, key):
         if key in self.p.map:
@@ -322,7 +326,7 @@
         index = []
         nodemap =  {nullid: nullrev}
         n = off = 0
-        if len(data) < _prereadsize:
+        if len(data) == _prereadsize:
             data += fp.read() # read the rest
         l = len(data)
         while off + s <= l:
@@ -362,23 +366,19 @@
         self.size = struct.calcsize(indexformatng)
 
     def parseindex(self, fp, data, inline):
-        try:
-            size = len(data)
-            if size == _prereadsize:
-                size = util.fstat(fp).st_size
-        except AttributeError:
-            size = 0
-
-        if util.openhardlinks() and not inline and size > _prereadsize:
-            # big index, let's parse it on demand
-            parser = lazyparser(fp, size)
-            index = lazyindex(parser)
-            nodemap = lazymap(parser)
-            e = list(index[0])
-            type = gettype(e[0])
-            e[0] = offset_type(0, type)
-            index[0] = e
-            return index, nodemap, None
+        if len(data) == _prereadsize:
+            if util.openhardlinks() and not inline:
+                # big index, let's parse it on demand
+                parser = lazyparser(fp)
+                index = lazyindex(parser)
+                nodemap = lazymap(parser)
+                e = list(index[0])
+                type = gettype(e[0])
+                e[0] = offset_type(0, type)
+                index[0] = e
+                return index, nodemap, None
+            else:
+                data += fp.read()
 
         # call the C implementation to parse the index data
         index, nodemap, cache = parsers.parse_index(data, inline)
@@ -470,7 +470,7 @@
                 raise RevlogError(_("index %s is corrupted") % (self.indexfile))
             self.index, self.nodemap, self._chunkcache = d
             if not self._chunkcache:
-                self._chunkcache = (0, '')
+                self._chunkclear()
 
         # add the magic null revision at -1 (if it hasn't been done already)
         if (self.index == [] or isinstance(self.index, lazyindex) or
@@ -535,32 +535,31 @@
         t = self.revision(self.node(rev))
         return len(t)
 
-        # alternate implementation, The advantage to this code is it
-        # will be faster for a single revision.  But, the results are not
-        # cached, so finding the size of every revision will be slower.
-        """
-        if self.cache and self.cache[1] == rev:
-            return len(self.cache[2])
-
-        base = self.base(rev)
-        if self.cache and self.cache[1] >= base and self.cache[1] < rev:
-            base = self.cache[1]
-            text = self.cache[2]
-        else:
-            text = self.revision(self.node(base))
-
-        l = len(text)
-        for x in xrange(base + 1, rev + 1):
-            l = mdiff.patchedsize(l, self.chunk(x))
-        return l
-        """
+        # Alternate implementation. The advantage to this code is it
+        # will be faster for a single revision. However, the results
+        # are not cached, so finding the size of every revision will
+        # be slower.
+        #
+        # if self.cache and self.cache[1] == rev:
+        #     return len(self.cache[2])
+        #
+        # base = self.base(rev)
+        # if self.cache and self.cache[1] >= base and self.cache[1] < rev:
+        #     base = self.cache[1]
+        #     text = self.cache[2]
+        # else:
+        #     text = self.revision(self.node(base))
+        #
+        # l = len(text)
+        # for x in xrange(base + 1, rev + 1):
+        #     l = mdiff.patchedsize(l, self._chunk(x))
+        # return l
 
     def reachable(self, node, stop=None):
-        """return a hash of all nodes ancestral to a given node, including
+        """return the set of all nodes ancestral to a given node, including
          the node itself, stopping when stop is matched"""
-        reachable = {}
+        reachable = set((node,))
         visit = [node]
-        reachable[node] = 1
         if stop:
             stopn = self.rev(stop)
         else:
@@ -575,7 +574,7 @@
                 if self.rev(p) < stopn:
                     continue
                 if p not in reachable:
-                    reachable[p] = 1
+                    reachable.add(p)
                     visit.append(p)
         return reachable
 
@@ -624,18 +623,18 @@
         has.update(common)
 
         # take all ancestors from heads that aren't in has
-        missing = {}
+        missing = set()
         visit = [r for r in heads if r not in has]
         while visit:
             r = visit.pop(0)
             if r in missing:
                 continue
             else:
-                missing[r] = None
+                missing.add(r)
                 for p in self.parentrevs(r):
                     if p not in has:
                         visit.append(p)
-        missing = missing.keys()
+        missing = list(missing)
         missing.sort()
         return [self.node(r) for r in missing]
 
@@ -678,7 +677,7 @@
             heads = list(heads)
             if not heads:
                 return nonodes
-            ancestors = {}
+            ancestors = set()
             # Turn heads into a dictionary so we can remove 'fake' heads.
             # Also, later we will be using it to filter out the heads we can't
             # find from roots.
@@ -700,7 +699,7 @@
                     if n not in ancestors:
                         # If we are possibly a descendent of one of the roots
                         # and we haven't already been marked as an ancestor
-                        ancestors[n] = 1 # Mark as ancestor
+                        ancestors.add(n) # Mark as ancestor
                         # Add non-nullid parents to list of nodes to tag.
                         nodestotag.update([p for p in self.parents(n) if
                                            p != nullid])
@@ -813,18 +812,18 @@
             stop = []
         stoprevs = set([self.rev(n) for n in stop])
         startrev = self.rev(start)
-        reachable = {startrev: 1}
-        heads = {startrev: 1}
+        reachable = set((startrev,))
+        heads = set((startrev,))
 
         parentrevs = self.parentrevs
         for r in xrange(startrev + 1, len(self)):
             for p in parentrevs(r):
                 if p in reachable:
                     if r not in stoprevs:
-                        reachable[r] = 1
-                    heads[r] = 1
+                        reachable.add(r)
+                    heads.add(r)
                 if p in heads and p not in stoprevs:
-                    del heads[p]
+                    heads.remove(p)
 
         return [self.node(r) for r in heads]
 
@@ -920,12 +919,11 @@
         else:
             self._chunkcache = offset, data
 
-    def _loadchunk(self, offset, length, df=None):
-        if not df:
-            if self._inline:
-                df = self.opener(self.indexfile)
-            else:
-                df = self.opener(self.datafile)
+    def _loadchunk(self, offset, length):
+        if self._inline:
+            df = self.opener(self.indexfile)
+        else:
+            df = self.opener(self.datafile)
 
         readahead = max(65536, length)
         df.seek(offset)
@@ -935,7 +933,7 @@
             return d[:length]
         return d
 
-    def _getchunk(self, offset, length, df=None):
+    def _getchunk(self, offset, length):
         o, d = self._chunkcache
         l = len(d)
 
@@ -947,26 +945,25 @@
                 return d # avoid a copy
             return d[cachestart:cacheend]
 
-        return self._loadchunk(offset, length, df)
+        return self._loadchunk(offset, length)
 
-    def _prime(self, startrev, endrev, df):
+    def _chunkraw(self, startrev, endrev):
         start = self.start(startrev)
-        end = self.end(endrev)
+        length = self.end(endrev) - start
         if self._inline:
             start += (startrev + 1) * self._io.size
-            end += (startrev + 1) * self._io.size
-        self._loadchunk(start, end - start, df)
+        return self._getchunk(start, length)
 
-    def chunk(self, rev, df=None):
-        start, length = self.start(rev), self.length(rev)
-        if self._inline:
-            start += (rev + 1) * self._io.size
-        return decompress(self._getchunk(start, length, df))
+    def _chunk(self, rev):
+        return decompress(self._chunkraw(rev, rev))
+
+    def _chunkclear(self):
+        self._chunkcache = (0, '')
 
     def revdiff(self, rev1, rev2):
         """return or calculate a delta between two revisions"""
         if rev1 + 1 == rev2 and self.base(rev1) == self.base(rev2):
-            return self.chunk(rev2)
+            return self._chunk(rev2)
 
         return mdiff.textdiff(self.revision(self.node(rev1)),
                               self.revision(self.node(rev2)))
@@ -988,29 +985,22 @@
             raise RevlogError(_('incompatible revision flag %x') %
                               (self.index[rev][0] & 0xFFFF))
 
-        df = None
-
         # do we have useful data cached?
         if self._cache and self._cache[1] >= base and self._cache[1] < rev:
             base = self._cache[1]
             text = str(self._cache[2])
-            self._loadindex(base, rev + 1)
-            if not self._inline and rev > base + 1:
-                df = self.opener(self.datafile)
-                self._prime(base, rev, df)
-        else:
-            self._loadindex(base, rev + 1)
-            if not self._inline and rev > base:
-                df = self.opener(self.datafile)
-                self._prime(base, rev, df)
-            text = self.chunk(base, df=df)
 
-        bins = [self.chunk(r, df) for r in xrange(base + 1, rev + 1)]
+        self._loadindex(base, rev + 1)
+        self._chunkraw(base, rev)
+        if text is None:
+            text = self._chunk(base)
+
+        bins = [self._chunk(r) for r in xrange(base + 1, rev + 1)]
         text = mdiff.patches(text, bins)
         p1, p2 = self.parents(node)
         if node != hash(text, p1, p2):
             raise RevlogError(_("integrity check failed on %s:%d")
-                              % (self.datafile, rev))
+                              % (self.indexfile, rev))
 
         self._cache = (node, rev, text)
         return text
@@ -1020,7 +1010,7 @@
             return
 
         trinfo = tr.find(self.indexfile)
-        if trinfo == None:
+        if trinfo is None:
             raise RevlogError(_("%s not found in the transaction")
                               % self.indexfile)
 
@@ -1035,12 +1025,8 @@
 
         df = self.opener(self.datafile, 'w')
         try:
-            calc = self._io.size
             for r in self:
-                start = self.start(r) + (r + 1) * calc
-                length = self.length(r)
-                d = self._getchunk(start, length)
-                df.write(d)
+                df.write(self._chunkraw(r, r))
         finally:
             df.close()
 
@@ -1055,8 +1041,8 @@
         # real index
         fp.rename()
 
-        tr.replace(self.indexfile, trindex * calc)
-        self._chunkcache = (0, '')
+        tr.replace(self.indexfile, trindex * self._io.size)
+        self._chunkclear()
 
     def addrevision(self, text, transaction, link, p1, p2, d=None):
         """add a revision to the log
@@ -1149,6 +1135,7 @@
         have this parent as it has all history before these
         changesets. parent is parent[0]
         """
+
         revs = [self.rev(n) for n in nodelist]
 
         # if we don't have any revisions touched by these changesets, bail
@@ -1157,11 +1144,11 @@
             return
 
         # add the parent of the first rev
-        p = self.parents(self.node(revs[0]))[0]
-        revs.insert(0, self.rev(p))
+        p = self.parentrevs(revs[0])[0]
+        revs.insert(0, p)
 
         # build deltas
-        for d in xrange(0, len(revs) - 1):
+        for d in xrange(len(revs) - 1):
             a, b = revs[d], revs[d + 1]
             nb = self.node(b)
 
@@ -1341,7 +1328,7 @@
 
         # then reset internal state in memory to forget those revisions
         self._cache = None
-        self._chunkcache = (0, '')
+        self._chunkclear()
         for x in xrange(rev, len(self)):
             del self.nodemap[self.node(x)]
 
--- a/mercurial/sshrepo.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/sshrepo.py	Wed Jul 08 17:03:16 2009 -0700
@@ -8,7 +8,7 @@
 from node import bin, hex
 from i18n import _
 import repo, util, error
-import re
+import re, urllib
 
 class remotelock(object):
     def __init__(self, repo):
@@ -166,6 +166,19 @@
         except:
             self.abort(error.ResponseError(_("unexpected response:"), d))
 
+    def branchmap(self):
+        d = self.call("branchmap")
+        try:
+            branchmap = {}
+            for branchpart in d.splitlines():
+                branchheads = branchpart.split(' ')
+                branchname = urllib.unquote(branchheads[0])
+                branchheads = [bin(x) for x in branchheads[1:]]
+                branchmap[branchname] = branchheads
+            return branchmap
+        except:
+            raise error.ResponseError(_("unexpected response:"), d)
+
     def branches(self, nodes):
         n = " ".join(map(hex, nodes))
         d = self.call("branches", nodes=n)
--- a/mercurial/sshserver.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/sshserver.py	Wed Jul 08 17:03:16 2009 -0700
@@ -9,7 +9,7 @@
 from i18n import _
 from node import bin, hex
 import streamclone, util, hook
-import os, sys, tempfile
+import os, sys, tempfile, urllib
 
 class sshserver(object):
     def __init__(self, ui, repo):
@@ -64,6 +64,15 @@
             success = 0
         self.respond("%s %s\n" % (success, r))
 
+    def do_branchmap(self):
+        branchmap = self.repo.branchmap()
+        heads = []
+        for branch, nodes in branchmap.iteritems():
+            branchname = urllib.quote(branch)
+            branchnodes = [hex(node) for node in nodes]
+            heads.append('%s %s' % (branchname, ' '.join(branchnodes)))
+        self.respond('\n'.join(heads))
+
     def do_heads(self):
         h = self.repo.heads()
         self.respond(" ".join(map(hex, h)) + "\n")
@@ -77,7 +86,7 @@
         capabilities: space separated list of tokens
         '''
 
-        caps = ['unbundle', 'lookup', 'changegroupsubset']
+        caps = ['unbundle', 'lookup', 'changegroupsubset', 'branchmap']
         if self.ui.configbool('server', 'uncompressed'):
             caps.append('stream=%d' % self.repo.changelog.version)
         self.respond("capabilities: %s\n" % (' '.join(caps),))
--- a/mercurial/statichttprepo.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/statichttprepo.py	Wed Jul 08 17:03:16 2009 -0700
@@ -30,14 +30,31 @@
         try:
             f = self.opener.open(req)
             data = f.read()
+            if hasattr(f, 'getcode'):
+                # python 2.6+
+                code = f.getcode()
+            elif hasattr(f, 'code'):
+                # undocumented attribute, seems to be set in 2.4 and 2.5
+                code = f.code
+            else:
+                # Don't know how to check, hope for the best.
+                code = 206
         except urllib2.HTTPError, inst:
             num = inst.code == 404 and errno.ENOENT or None
             raise IOError(num, inst)
         except urllib2.URLError, inst:
             raise IOError(None, inst.reason[1])
 
-        if bytes:
+        if code == 200:
+            # HTTPRangeHandler does nothing if remote does not support
+            # Range headers and returns the full entity. Let's slice it.
+            if bytes:
+                data = data[self.pos:self.pos + bytes]
+            else:
+                data = data[self.pos:]
+        elif bytes:
             data = data[:bytes]
+        self.pos += len(data)
         return data
 
 def build_opener(ui, authinfo):
--- a/mercurial/store.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/store.py	Wed Jul 08 17:03:16 2009 -0700
@@ -11,6 +11,24 @@
 
 _sha = util.sha1
 
+# This avoids a collision between a file named foo and a dir named
+# foo.i or foo.d
+def encodedir(path):
+    if not path.startswith('data/'):
+        return path
+    return (path
+            .replace(".hg/", ".hg.hg/")
+            .replace(".i/", ".i.hg/")
+            .replace(".d/", ".d.hg/"))
+
+def decodedir(path):
+    if not path.startswith('data/'):
+        return path
+    return (path
+            .replace(".d.hg/", ".d/")
+            .replace(".i.hg/", ".i/")
+            .replace(".hg.hg/", ".hg/"))
+
 def _buildencodefun():
     e = '_'
     win_reserved = [ord(x) for x in '\\:*?"<>|']
@@ -34,8 +52,8 @@
                     pass
             else:
                 raise KeyError
-    return (lambda s: "".join([cmap[c] for c in s]),
-            lambda s: "".join(list(decode(s))))
+    return (lambda s: "".join([cmap[c] for c in encodedir(s)]),
+            lambda s: decodedir("".join(list(decode(s)))))
 
 encodefilename, decodefilename = _buildencodefun()
 
@@ -104,6 +122,8 @@
     '''
     if not path.startswith('data/'):
         return path
+    # escape directories ending with .i and .d
+    path = encodedir(path)
     ndpath = path[len('data/'):]
     res = 'data/' + auxencode(encodefilename(ndpath))
     if len(res) > MAX_PATH_LEN_IN_HGSTORE:
@@ -145,17 +165,18 @@
 
 _data = 'data 00manifest.d 00manifest.i 00changelog.d  00changelog.i'
 
-class basicstore:
+class basicstore(object):
     '''base class for local repository stores'''
     def __init__(self, path, opener, pathjoiner):
         self.pathjoiner = pathjoiner
         self.path = path
         self.createmode = _calcmode(path)
-        self.opener = opener(self.path)
-        self.opener.createmode = self.createmode
+        op = opener(self.path)
+        op.createmode = self.createmode
+        self.opener = lambda f, *args, **kw: op(encodedir(f), *args, **kw)
 
     def join(self, f):
-        return self.pathjoiner(self.path, f)
+        return self.pathjoiner(self.path, encodedir(f))
 
     def _walk(self, relpath, recurse):
         '''yields (unencoded, encoded, size)'''
@@ -170,7 +191,7 @@
                     fp = self.pathjoiner(p, f)
                     if kind == stat.S_IFREG and f[-2:] in ('.d', '.i'):
                         n = util.pconvert(fp[striplen:])
-                        l.append((n, n, st.st_size))
+                        l.append((decodedir(n), n, st.st_size))
                     elif kind == stat.S_IFDIR and recurse:
                         visit.append(fp)
         return sorted(l)
@@ -214,39 +235,49 @@
         return (['requires', '00changelog.i'] +
                 [self.pathjoiner('store', f) for f in _data.split()])
 
-def fncache(opener):
-    '''yields the entries in the fncache file'''
-    try:
-        fp = opener('fncache', mode='rb')
-    except IOError:
-        # skip nonexistent file
-        return
-    for n, line in enumerate(fp):
-        if (len(line) < 2) or (line[-1] != '\n'):
-            t = _('invalid entry in fncache, line %s') % (n + 1)
-            raise util.Abort(t)
-        yield line[:-1]
-    fp.close()
-
-class fncacheopener(object):
+class fncache(object):
+    # the filename used to be partially encoded
+    # hence the encodedir/decodedir dance
     def __init__(self, opener):
         self.opener = opener
         self.entries = None
 
-    def loadfncache(self):
-        self.entries = {}
-        for f in fncache(self.opener):
-            self.entries[f] = True
+    def _load(self):
+        '''fill the entries from the fncache file'''
+        self.entries = set()
+        try:
+            fp = self.opener('fncache', mode='rb')
+        except IOError:
+            # skip nonexistent file
+            return
+        for n, line in enumerate(fp):
+            if (len(line) < 2) or (line[-1] != '\n'):
+                t = _('invalid entry in fncache, line %s') % (n + 1)
+                raise util.Abort(t)
+            self.entries.add(decodedir(line[:-1]))
+        fp.close()
 
-    def __call__(self, path, mode='r', *args, **kw):
-        if mode not in ('r', 'rb') and path.startswith('data/'):
-            if self.entries is None:
-                self.loadfncache()
-            if path not in self.entries:
-                self.opener('fncache', 'ab').write(path + '\n')
-                # fncache may contain non-existent files after rollback / strip
-                self.entries[path] = True
-        return self.opener(hybridencode(path), mode, *args, **kw)
+    def rewrite(self, files):
+        fp = self.opener('fncache', mode='wb')
+        for p in files:
+            fp.write(encodedir(p) + '\n')
+        fp.close()
+        self.entries = set(files)
+
+    def add(self, fn):
+        if self.entries is None:
+            self._load()
+        self.opener('fncache', 'ab').write(encodedir(fn) + '\n')
+
+    def __contains__(self, fn):
+        if self.entries is None:
+            self._load()
+        return fn in self.entries
+
+    def __iter__(self):
+        if self.entries is None:
+            self._load()
+        return iter(self.entries)
 
 class fncachestore(basicstore):
     def __init__(self, path, opener, pathjoiner):
@@ -255,7 +286,15 @@
         self.createmode = _calcmode(self.path)
         self._op = opener(self.path)
         self._op.createmode = self.createmode
-        self.opener = fncacheopener(self._op)
+        self.fncache = fncache(self._op)
+
+        def fncacheopener(path, mode='r', *args, **kw):
+            if (mode not in ('r', 'rb')
+                and path.startswith('data/')
+                and path not in self.fncache):
+                    self.fncache.add(path)
+            return self._op(hybridencode(path), mode, *args, **kw)
+        self.opener = fncacheopener
 
     def join(self, f):
         return self.pathjoiner(self.path, hybridencode(f))
@@ -265,7 +304,7 @@
         existing = []
         pjoin = self.pathjoiner
         spath = self.path
-        for f in fncache(self._op):
+        for f in self.fncache:
             ef = hybridencode(f)
             try:
                 st = os.stat(pjoin(spath, ef))
@@ -277,10 +316,7 @@
         if rewrite:
             # rewrite fncache to remove nonexistent entries
             # (may be caused by rollback / strip)
-            fp = self._op('fncache', mode='wb')
-            for p in existing:
-                fp.write(p + '\n')
-            fp.close()
+            self.fncache.rewrite(existing)
 
     def copylist(self):
         d = _data + ' dh fncache'
--- a/mercurial/streamclone.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/streamclone.py	Wed Jul 08 17:03:16 2009 -0700
@@ -8,6 +8,8 @@
 import util, error
 from i18n import _
 
+from mercurial import store
+
 class StreamException(Exception):
     def __init__(self, code):
         Exception.__init__(self)
@@ -26,7 +28,7 @@
 #
 # then for each file:
 #
-#   server writes out line that says file name, how many bytes in
+#   server writes out line that says filename, how many bytes in
 #   file.  separator is ascii nul, byte count is string.
 #
 #   server writes out raw file data.
@@ -46,7 +48,8 @@
         try:
             repo.ui.debug(_('scanning\n'))
             for name, ename, size in repo.store.walk():
-                entries.append((name, size))
+                # for backwards compat, name was partially encoded
+                entries.append((store.encodedir(name), size))
                 total_bytes += size
         finally:
             lock.release()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/subrepo.py	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,193 @@
+# subrepo.py - sub-repository handling for Mercurial
+#
+# Copyright 2006, 2007 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.
+
+import errno, os
+from i18n import _
+import config, util, node, error
+localrepo = hg = None
+
+nullstate = ('', '')
+
+def state(ctx):
+    p = config.config()
+    def read(f, sections=None, remap=None):
+        if f in ctx:
+            try:
+                p.parse(f, ctx[f].data(), sections, remap)
+            except IOError, err:
+                if err.errno != errno.ENOENT:
+                    raise
+    read('.hgsub')
+
+    rev = {}
+    if '.hgsubstate' in ctx:
+        try:
+            for l in ctx['.hgsubstate'].data().splitlines():
+                revision, path = l.split()
+                rev[path] = revision
+        except IOError, err:
+            if err.errno != errno.ENOENT:
+                raise
+
+    state = {}
+    for path, src in p[''].items():
+        state[path] = (src, rev.get(path, ''))
+
+    return state
+
+def writestate(repo, state):
+    repo.wwrite('.hgsubstate',
+                ''.join(['%s %s\n' % (state[s][1], s)
+                         for s in sorted(state)]), '')
+
+def submerge(repo, wctx, mctx, actx):
+    if mctx == actx: # backwards?
+        actx = wctx.p1()
+    s1 = wctx.substate
+    s2 = mctx.substate
+    sa = actx.substate
+    sm = {}
+
+    for s, l in s1.items():
+        a = sa.get(s, nullstate)
+        if s in s2:
+            r = s2[s]
+            if l == r or r == a: # no change or local is newer
+                sm[s] = l
+                continue
+            elif l == a: # other side changed
+                wctx.sub(s).get(r)
+                sm[s] = r
+            elif l[0] != r[0]: # sources differ
+                if repo.ui.prompt(
+                    _(' subrepository sources for %s differ\n'
+                      'use (l)ocal source (%s) or (r)emote source (%s)?')
+                      % (s, l[0], r[0]),
+                      (_('&Local'), _('&Remote')), _('l')) == _('r'):
+                    wctx.sub(s).get(r)
+                    sm[s] = r
+            elif l[1] == a[1]: # local side is unchanged
+                wctx.sub(s).get(r)
+                sm[s] = r
+            else:
+                wctx.sub(s).merge(r)
+                sm[s] = l
+        elif l == a: # remote removed, local unchanged
+            wctx.sub(s).remove()
+        else:
+            if repo.ui.prompt(
+                _(' local changed subrepository %s which remote removed\n'
+                  'use (c)hanged version or (d)elete?') % s,
+                  (_('&Changed'), _('&Delete')), _('c')) == _('d'):
+                wctx.sub(s).remove()
+
+    for s, r in s2.items():
+        if s in s1:
+            continue
+        elif s not in sa:
+            wctx.sub(s).get(r)
+            sm[s] = r
+        elif r != sa[s]:
+            if repo.ui.prompt(
+                _(' remote changed subrepository %s which local removed\n'
+                  'use (c)hanged version or (d)elete?') % s,
+                  (_('&Changed'), _('&Delete')), _('c')) == _('c'):
+                wctx.sub(s).get(r)
+                sm[s] = r
+
+    # record merged .hgsubstate
+    writestate(repo, sm)
+
+def _abssource(repo, push=False):
+    if hasattr(repo, '_subparent'):
+        source = repo._subsource
+        if source.startswith('/') or '://' in source:
+            return source
+        return os.path.join(_abssource(repo._subparent), repo._subsource)
+    if push and repo.ui.config('paths', 'default-push'):
+        return repo.ui.config('paths', 'default-push', repo.root)
+    return repo.ui.config('paths', 'default', repo.root)
+
+def subrepo(ctx, path):
+    # subrepo inherently violates our import layering rules
+    # because it wants to make repo objects from deep inside the stack
+    # so we manually delay the circular imports to not break
+    # scripts that don't use our demand-loading
+    global localrepo, hg
+    import localrepo as l, hg as h
+    localrepo = l
+    hg = h
+
+    util.path_auditor(ctx._repo.root)(path)
+    state = ctx.substate.get(path, nullstate)
+    if state[0].startswith('['): # future expansion
+        raise error.Abort('unknown subrepo source %s' % state[0])
+    return hgsubrepo(ctx, path, state)
+
+class hgsubrepo(object):
+    def __init__(self, ctx, path, state):
+        self._path = path
+        self._state = state
+        r = ctx._repo
+        root = r.wjoin(path)
+        if os.path.exists(os.path.join(root, '.hg')):
+            self._repo = localrepo.localrepository(r.ui, root)
+        else:
+            util.makedirs(root)
+            self._repo = localrepo.localrepository(r.ui, root, create=True)
+        self._repo._subparent = r
+        self._repo._subsource = state[0]
+
+    def dirty(self):
+        r = self._state[1]
+        if r == '':
+            return True
+        w = self._repo[None]
+        if w.p1() != self._repo[r]: # version checked out changed
+            return True
+        return w.dirty() # working directory changed
+
+    def commit(self, text, user, date):
+        n = self._repo.commit(text, user, date)
+        if not n:
+            return self._repo['.'].hex() # different version checked out
+        return node.hex(n)
+
+    def remove(self):
+        # we can't fully delete the repository as it may contain
+        # local-only history
+        self._repo.ui.note(_('removing subrepo %s\n') % self._path)
+        hg.clean(self._repo, node.nullid, False)
+
+    def get(self, state):
+        source, revision = state
+        try:
+            self._repo.lookup(revision)
+        except error.RepoError:
+            self._repo._subsource = source
+            self._repo.ui.status(_('pulling subrepo %s\n') % self._path)
+            srcurl = _abssource(self._repo)
+            other = hg.repository(self._repo.ui, srcurl)
+            self._repo.pull(other)
+
+        hg.clean(self._repo, revision, False)
+
+    def merge(self, state):
+        hg.merge(self._repo, state[1], remind=False)
+
+    def push(self, force):
+        # push subrepos depth-first for coherent ordering
+        c = self._repo['']
+        subs = c.substate # only repos that are committed
+        for s in sorted(subs):
+            c.sub(s).push(force)
+
+        self._repo.ui.status(_('pushing subrepo %s\n') % self._path)
+        dsturl = _abssource(self._repo, True)
+        other = hg.repository(self._repo.ui, dsturl)
+        self._repo.push(other, force)
+
--- a/mercurial/templatefilters.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/templatefilters.py	Wed Jul 08 17:03:16 2009 -0700
@@ -6,7 +6,13 @@
 # GNU General Public License version 2, incorporated herein by reference.
 
 import cgi, re, os, time, urllib, textwrap
-import util, templater, encoding
+import util, encoding
+
+def stringify(thing):
+    '''turn nested template iterator into string.'''
+    if hasattr(thing, '__iter__') and not isinstance(thing, str):
+        return "".join([stringify(t) for t in thing if t is not None])
+    return str(thing)
 
 agescales = [("second", 1),
              ("minute", 60),
@@ -90,6 +96,7 @@
 
 def person(author):
     '''get name of author, or else username.'''
+    if not '@' in author: return author
     f = author.find('<')
     if f == -1: return util.shortuser(author)
     return author[:f].rstrip()
@@ -166,7 +173,7 @@
         return dir
 
 def nonempty(str):
-  return str or "(none)"
+    return str or "(none)"
 
 filters = {
     "addbreaks": nl2br,
@@ -186,6 +193,7 @@
     "isodatesec": lambda x: util.datestr(x, '%Y-%m-%d %H:%M:%S %1%2'),
     "json": json,
     "jsonescape": jsonescape,
+    "localdate": lambda x: (x[0], util.makedate()[1]),
     "nonempty": nonempty,
     "obfuscate": obfuscate,
     "permissions": permissions,
@@ -194,7 +202,7 @@
     "rfc3339date": lambda x: util.datestr(x, "%Y-%m-%dT%H:%M:%S%1:%2"),
     "short": lambda x: x[:12],
     "shortdate": util.shortdate,
-    "stringify": templater.stringify,
+    "stringify": stringify,
     "strip": lambda x: x.strip(),
     "urlescape": lambda x: urllib.quote(x),
     "user": lambda x: util.shortuser(x),
--- a/mercurial/templater.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/templater.py	Wed Jul 08 17:03:16 2009 -0700
@@ -7,9 +7,10 @@
 
 from i18n import _
 import re, sys, os
-import util, config
+import util, config, templatefilters
 
 path = ['templates', '../templates']
+stringify = templatefilters.stringify
 
 def parsestring(s, quoted=True):
     '''parse a string using simple c-like syntax.
@@ -41,13 +42,13 @@
     filter uses function to transform value. syntax is
     {key|filter1|filter2|...}.'''
 
-    template_re = re.compile(r"(?:(?:#(?=[\w\|%]+#))|(?:{(?=[\w\|%]+})))"
-                             r"(\w+)(?:(?:%(\w+))|((?:\|\w+)*))[#}]")
+    template_re = re.compile(r'{([\w\|%]+)}|#([\w\|%]+)#')
 
     def __init__(self, loader, filters={}, defaults={}):
         self.loader = loader
         self.filters = filters
         self.defaults = defaults
+        self.cache = {}
 
     def process(self, t, map):
         '''Perform expansion. t is name of map element to expand. map contains
@@ -69,8 +70,43 @@
             else:
                 yield str(item)
 
+    def _format(self, expr, get, map):
+        key, format = expr.split('%')
+        v = get(key)
+        if not hasattr(v, '__iter__'):
+            raise SyntaxError(_("error expanding '%s%%%s'") % (key, format))
+        lm = map.copy()
+        for i in v:
+            lm.update(i)
+            yield self.process(format, lm)
+
+    def _filter(self, expr, get, map):
+        if expr not in self.cache:
+            parts = expr.split('|')
+            val = parts[0]
+            try:
+                filters = [self.filters[f] for f in parts[1:]]
+            except KeyError, i:
+                raise SyntaxError(_("unknown filter '%s'") % i[0])
+            def apply(get):
+                    x = get(val)
+                    for f in filters:
+                        x = f(x)
+                    return x
+            self.cache[expr] = apply
+        return self.cache[expr](get)
+
     def _process(self, tmpl, map):
         '''Render a template. Returns a generator.'''
+
+        def get(key):
+            v = map.get(key)
+            if v is None:
+                v = self.defaults.get(key, '')
+            if hasattr(v, '__call__'):
+                v = v(**map)
+            return v
+
         while tmpl:
             m = self.template_re.search(tmpl)
             if not m:
@@ -78,31 +114,21 @@
                 break
 
             start, end = m.span(0)
-            key, format, fl = m.groups()
+            variants = m.groups()
+            expr = variants[0] or variants[1]
 
             if start:
                 yield tmpl[:start]
             tmpl = tmpl[end:]
 
-            if key in map:
-                v = map[key]
+            if '%' in expr:
+                yield self._format(expr, get, map)
+            elif '|' in expr:
+                yield self._filter(expr, get, map)
             else:
-                v = self.defaults.get(key, "")
-            if callable(v):
-                v = v(**map)
-            if format:
-                if not hasattr(v, '__iter__'):
-                    raise SyntaxError(_("Error expanding '%s%%%s'")
-                                      % (key, format))
-                lm = map.copy()
-                for i in v:
-                    lm.update(i)
-                    yield self.process(format, lm)
-            else:
-                if fl:
-                    for f in fl.split("|")[1:]:
-                        v = self.filters[f](v)
-                yield v
+                yield get(expr)
+
+engines = {'default': engine}
 
 class templater(object):
 
@@ -116,9 +142,11 @@
         self.cache = cache.copy()
         self.map = {}
         self.base = (mapfile and os.path.dirname(mapfile)) or ''
-        self.filters = filters
+        self.filters = templatefilters.filters.copy()
+        self.filters.update(filters)
         self.defaults = defaults
         self.minchunk, self.maxchunk = minchunk, maxchunk
+        self.engines = {}
 
         if not mapfile:
             return
@@ -136,7 +164,10 @@
                     raise SyntaxError('%s: %s' %
                                       (conf.source('', key), inst.args[0]))
             else:
-                self.map[key] = os.path.join(self.base, val)
+                val = 'default', val
+                if ':' in val[1]:
+                    val = val[1].split(':', 1)
+                self.map[key] = val[0], os.path.join(self.base, val[1])
 
     def __contains__(self, key):
         return key in self.cache or key in self.map
@@ -145,14 +176,19 @@
         '''Get the template for the given template name. Use a local cache.'''
         if not t in self.cache:
             try:
-                self.cache[t] = file(self.map[t]).read()
+                self.cache[t] = open(self.map[t][1]).read()
             except IOError, inst:
                 raise IOError(inst.args[0], _('template file %s: %s') %
-                              (self.map[t], inst.args[1]))
+                              (self.map[t][1], inst.args[1]))
         return self.cache[t]
 
     def __call__(self, t, **map):
-        proc = engine(self.load, self.filters, self.defaults)
+        ttype = t in self.map and self.map[t][0] or 'default'
+        proc = self.engines.get(ttype)
+        if proc is None:
+            proc = engines[ttype](self.load, self.filters, self.defaults)
+            self.engines[ttype] = proc
+
         stream = proc.process(t, map)
         if self.minchunk:
             stream = util.increasingchunks(stream, min=self.minchunk,
@@ -207,9 +243,3 @@
                 return mapfile
 
     raise RuntimeError("No hgweb templates found in %r" % paths)
-
-def stringify(thing):
-    '''turn nested template iterator into string.'''
-    if hasattr(thing, '__iter__') and not isinstance(thing, str):
-        return "".join([stringify(t) for t in thing if t is not None])
-    return str(thing)
--- a/mercurial/transaction.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/transaction.py	Wed Jul 08 17:03:16 2009 -0700
@@ -51,6 +51,7 @@
         self.entries = []
         self.map = {}
         self.journal = journal
+        self._queue = []
 
         self.file = open(self.journal, "w")
         if createmode is not None:
@@ -62,8 +63,25 @@
             self.file.close()
 
     @active
+    def startgroup(self):
+        self._queue.append([])
+
+    @active
+    def endgroup(self):
+        q = self._queue.pop()
+        d = ''.join(['%s\0%d\n' % (x[0], x[1]) for x in q])
+        self.entries.extend(q)
+        self.file.write(d)
+        self.file.flush()
+
+    @active
     def add(self, file, offset, data=None):
         if file in self.map: return
+
+        if self._queue:
+            self._queue[-1].append((file, offset, data))
+            return
+
         self.entries.append((file, offset, data))
         self.map[file] = len(self.entries) - 1
         # add enough data to the journal to do the truncate
@@ -78,6 +96,11 @@
 
     @active
     def replace(self, file, offset, data=None):
+        '''
+        replace can only replace already committed entries
+        that are not pending in the queue
+        '''
+
         if file not in self.map:
             raise KeyError(file)
         index = self.map[file]
--- a/mercurial/ui.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/ui.py	Wed Jul 08 17:03:16 2009 -0700
@@ -6,7 +6,7 @@
 # GNU General Public License version 2, incorporated herein by reference.
 
 from i18n import _
-import errno, getpass, os, re, socket, sys, tempfile, traceback
+import errno, getpass, os, socket, sys, tempfile, traceback
 import config, util, error
 
 _booleans = {'1': True, 'yes': True, 'true': True, 'on': True,
@@ -20,8 +20,8 @@
         self._ocfg = config.config() # overlay
         self._tcfg = config.config() # trusted
         self._ucfg = config.config() # untrusted
-        self._trustusers = {}
-        self._trustgroups = {}
+        self._trustusers = set()
+        self._trustgroups = set()
 
         if src:
             self._tcfg = src._tcfg.copy()
@@ -40,7 +40,7 @@
 
     def _is_trusted(self, fp, f):
         st = util.fstat(fp)
-        if util.isowner(fp, st):
+        if util.isowner(st):
             return True
 
         tusers, tgroups = self._trustusers, self._trustgroups
@@ -58,7 +58,7 @@
         return False
 
     def readconfig(self, filename, root=None, trust=False,
-                   sections=None):
+                   sections=None, remap=None):
         try:
             fp = open(filename)
         except IOError:
@@ -70,7 +70,7 @@
         trusted = sections or trust or self._is_trusted(fp, filename)
 
         try:
-            cfg.read(filename, fp, sections=sections)
+            cfg.read(filename, fp, sections=sections, remap=remap)
         except error.ConfigError, inst:
             if trusted:
                 raise
@@ -104,10 +104,8 @@
         self._traceback = self.configbool('ui', 'traceback', False)
 
         # update trust information
-        for user in self.configlist('trusted', 'users'):
-            self._trustusers[user] = 1
-        for group in self.configlist('trusted', 'groups'):
-            self._trustgroups[group] = 1
+        self._trustusers.update(self.configlist('trusted', 'users'))
+        self._trustgroups.update(self.configlist('trusted', 'groups'))
 
     def setconfig(self, section, name, value):
         for cfg in (self._ocfg, self._tcfg, self._ucfg):
@@ -131,7 +129,7 @@
 
     def configbool(self, section, name, default=False, untrusted=False):
         v = self.config(section, name, None, untrusted)
-        if v == None:
+        if v is None:
             return default
         if v.lower() not in _booleans:
             raise error.ConfigError(_("%s.%s not a boolean ('%s')")
@@ -201,7 +199,7 @@
     def _path(self, loc):
         p = self.config('paths', loc)
         if p and '%%' in p:
-            ui.warn('(deprecated \'\%\%\' in path %s=%s from %s)\n' %
+            self.warn('(deprecated \'%%\' in path %s=%s from %s)\n' %
                     (loc, p, self.configsource('paths', loc)))
             p = p.replace('%%', '%')
         return p
@@ -248,7 +246,10 @@
         except: pass
 
     def interactive(self):
-        return self.configbool("ui", "interactive") or sys.stdin.isatty()
+        i = self.configbool("ui", "interactive", None)
+        if i is None:
+            return sys.stdin.isatty()
+        return i
 
     def _readline(self, prompt=''):
         if sys.stdin.isatty():
@@ -276,7 +277,7 @@
         insensitive. If ui is not interactive, the default is returned.
         """
         if not self.interactive():
-            self.note(msg, ' ', default, "\n")
+            self.write(msg, ' ', default, "\n")
             return default
         while True:
             try:
@@ -324,7 +325,6 @@
             f = open(name)
             t = f.read()
             f.close()
-            t = re.sub("(?m)^HG:.*\n", "", t)
         finally:
             os.unlink(name)
 
--- a/mercurial/url.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/url.py	Wed Jul 08 17:03:16 2009 -0700
@@ -7,7 +7,7 @@
 # This software may be used and distributed according to the terms of the
 # GNU General Public License version 2, incorporated herein by reference.
 
-import urllib, urllib2, urlparse, httplib, os, re
+import urllib, urllib2, urlparse, httplib, os, re, socket, cStringIO
 from i18n import _
 import keepalive, util
 
@@ -108,7 +108,10 @@
             self._writedebug(user, passwd)
             return (user, passwd)
 
-        user, passwd = self._readauthtoken(authuri)
+        if not user:
+            auth = self.readauthtoken(authuri)
+            if auth:
+                user, passwd = auth.get('username'), auth.get('password')
         if not user or not passwd:
             if not self.ui.interactive():
                 raise util.Abort(_('http authorization required'))
@@ -131,7 +134,7 @@
         msg = _('http auth: user %s, password %s\n')
         self.ui.debug(msg % (user, passwd and '*' * len(passwd) or 'not set'))
 
-    def _readauthtoken(self, uri):
+    def readauthtoken(self, uri):
         # Read configuration
         config = dict()
         for key, val in self.ui.configitems('auth'):
@@ -142,7 +145,7 @@
         # Find the best match
         scheme, hostpath = uri.split('://', 1)
         bestlen = 0
-        bestauth = None, None
+        bestauth = None
         for auth in config.itervalues():
             prefix = auth.get('prefix')
             if not prefix: continue
@@ -154,7 +157,7 @@
             if (prefix == '*' or hostpath.startswith(prefix)) and \
                 len(prefix) > bestlen and scheme in schemes:
                 bestlen = len(prefix)
-                bestauth = auth.get('username'), auth.get('password')
+                bestauth = auth
         return bestauth
 
 class proxyhandler(urllib2.ProxyHandler):
@@ -244,18 +247,165 @@
             connection.send(self, data)
     return _sendfile
 
+has_https = hasattr(urllib2, 'HTTPSHandler')
+if has_https:
+    try:
+        # avoid using deprecated/broken FakeSocket in python 2.6
+        import ssl
+        _ssl_wrap_socket = ssl.wrap_socket
+    except ImportError:
+        def _ssl_wrap_socket(sock, key_file, cert_file):
+            ssl = socket.ssl(sock, key_file, cert_file)
+            return httplib.FakeSocket(sock, ssl)
+
 class httpconnection(keepalive.HTTPConnection):
     # must be able to send big bundle as stream.
     send = _gen_sendfile(keepalive.HTTPConnection)
 
+    def _proxytunnel(self):
+        proxyheaders = dict(
+                [(x, self.headers[x]) for x in self.headers
+                 if x.lower().startswith('proxy-')])
+        self._set_hostport(self.host, self.port)
+        self.send('CONNECT %s:%d HTTP/1.0\r\n' % (self.realhost, self.realport))
+        for header in proxyheaders.iteritems():
+            self.send('%s: %s\r\n' % header)
+        self.send('\r\n')
+
+        # majority of the following code is duplicated from
+        # httplib.HTTPConnection as there are no adequate places to
+        # override functions to provide the needed functionality
+        res = self.response_class(self.sock,
+                                  strict=self.strict,
+                                  method=self._method)
+
+        while True:
+            version, status, reason = res._read_status()
+            if status != httplib.CONTINUE:
+                break
+            while True:
+                skip = res.fp.readline().strip()
+                if not skip:
+                    break
+        res.status = status
+        res.reason = reason.strip()
+
+        if res.status == 200:
+            while True:
+                line = res.fp.readline()
+                if line == '\r\n':
+                    break
+            return True
+
+        if version == 'HTTP/1.0':
+            res.version = 10
+        elif version.startswith('HTTP/1.'):
+            res.version = 11
+        elif version == 'HTTP/0.9':
+            res.version = 9
+        else:
+            raise httplib.UnknownProtocol(version)
+
+        if res.version == 9:
+            res.length = None
+            res.chunked = 0
+            res.will_close = 1
+            res.msg = httplib.HTTPMessage(cStringIO.StringIO())
+            return False
+
+        res.msg = httplib.HTTPMessage(res.fp)
+        res.msg.fp = None
+
+        # are we using the chunked-style of transfer encoding?
+        trenc = res.msg.getheader('transfer-encoding')
+        if trenc and trenc.lower() == "chunked":
+            res.chunked = 1
+            res.chunk_left = None
+        else:
+            res.chunked = 0
+
+        # will the connection close at the end of the response?
+        res.will_close = res._check_close()
+
+        # do we have a Content-Length?
+        # NOTE: RFC 2616, S4.4, #3 says we ignore this if tr_enc is "chunked"
+        length = res.msg.getheader('content-length')
+        if length and not res.chunked:
+            try:
+                res.length = int(length)
+            except ValueError:
+                res.length = None
+            else:
+                if res.length < 0:  # ignore nonsensical negative lengths
+                    res.length = None
+        else:
+            res.length = None
+
+        # does the body have a fixed length? (of zero)
+        if (status == httplib.NO_CONTENT or status == httplib.NOT_MODIFIED or
+            100 <= status < 200 or # 1xx codes
+            res._method == 'HEAD'):
+            res.length = 0
+
+        # if the connection remains open, and we aren't using chunked, and
+        # a content-length was not provided, then assume that the connection
+        # WILL close.
+        if (not res.will_close and
+           not res.chunked and
+           res.length is None):
+            res.will_close = 1
+
+        self.proxyres = res
+
+        return False
+
+    def connect(self):
+        if has_https and self.realhost: # use CONNECT proxy
+            self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+            self.sock.connect((self.host, self.port))
+            if self._proxytunnel():
+                # we do not support client x509 certificates
+                self.sock = _ssl_wrap_socket(self.sock, None, None)
+        else:
+            keepalive.HTTPConnection.connect(self)
+
+    def getresponse(self):
+        proxyres = getattr(self, 'proxyres', None)
+        if proxyres:
+            if proxyres.will_close:
+                self.close()
+            self.proxyres = None
+            return proxyres
+        return keepalive.HTTPConnection.getresponse(self)
+
 class httphandler(keepalive.HTTPHandler):
     def http_open(self, req):
         return self.do_open(httpconnection, req)
 
+    def _start_transaction(self, h, req):
+        if req.get_selector() == req.get_full_url(): # has proxy
+            urlparts = urlparse.urlparse(req.get_selector())
+            if urlparts[0] == 'https': # only use CONNECT for HTTPS
+                if ':' in urlparts[1]:
+                    realhost, realport = urlparts[1].split(':')
+                else:
+                    realhost = urlparts[1]
+                    realport = 443
+
+                h.realhost = realhost
+                h.realport = realport
+                h.headers = req.headers.copy()
+                h.headers.update(self.parent.addheaders)
+                return keepalive.HTTPHandler._start_transaction(self, h, req)
+
+        h.realhost = None
+        h.realport = None
+        h.headers = None
+        return keepalive.HTTPHandler._start_transaction(self, h, req)
+
     def __del__(self):
         self.close_all()
 
-has_https = hasattr(urllib2, 'HTTPSHandler')
 if has_https:
     class httpsconnection(httplib.HTTPSConnection):
         response_class = keepalive.HTTPResponse
@@ -263,8 +413,38 @@
         send = _gen_sendfile(httplib.HTTPSConnection)
 
     class httpshandler(keepalive.KeepAliveHandler, urllib2.HTTPSHandler):
+        def __init__(self, ui):
+            keepalive.KeepAliveHandler.__init__(self)
+            urllib2.HTTPSHandler.__init__(self)
+            self.ui = ui
+            self.pwmgr = passwordmgr(self.ui)
+
         def https_open(self, req):
-            return self.do_open(httpsconnection, req)
+            self.auth = self.pwmgr.readauthtoken(req.get_full_url())
+            return self.do_open(self._makeconnection, req)
+
+        def _makeconnection(self, host, port=443, *args, **kwargs):
+            keyfile = None
+            certfile = None
+
+            if args: # key_file
+                keyfile = args.pop(0)
+            if args: # cert_file
+                certfile = args.pop(0)
+
+            # if the user has specified different key/cert files in
+            # hgrc, we prefer these
+            if self.auth and 'key' in self.auth and 'cert' in self.auth:
+                keyfile = self.auth['key']
+                certfile = self.auth['cert']
+
+            # let host port take precedence
+            if ':' in host and '[' not in host or ']:' in host:
+                host, port = host.rsplit(':', 1)
+                if '[' in host:
+                    host = host[1:-1]
+
+            return httpsconnection(host, port, keyfile, certfile, *args, **kwargs)
 
 # In python < 2.5 AbstractDigestAuthHandler raises a ValueError if
 # it doesn't know about the auth type requested.  This can happen if
@@ -312,7 +492,7 @@
     '''
     handlers = [httphandler()]
     if has_https:
-        handlers.append(httpshandler())
+        handlers.append(httpshandler(ui))
 
     handlers.append(proxyhandler(ui))
 
--- a/mercurial/util.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/util.py	Wed Jul 08 17:03:16 2009 -0700
@@ -16,7 +16,7 @@
 from i18n import _
 import error, osutil
 import cStringIO, errno, re, shutil, sys, tempfile, traceback
-import os, stat, threading, time, calendar, glob, random
+import os, stat, time, calendar, random, textwrap
 import imp
 
 # Python compatibility
@@ -209,67 +209,6 @@
 def always(fn): return True
 def never(fn): return False
 
-def patkind(name, default):
-    """Split a string into an optional pattern kind prefix and the
-    actual pattern."""
-    for prefix in 're', 'glob', 'path', 'relglob', 'relpath', 'relre':
-        if name.startswith(prefix + ':'): return name.split(':', 1)
-    return default, name
-
-def globre(pat, head='^', tail='$'):
-    "convert a glob pattern into a regexp"
-    i, n = 0, len(pat)
-    res = ''
-    group = 0
-    def peek(): return i < n and pat[i]
-    while i < n:
-        c = pat[i]
-        i = i+1
-        if c == '*':
-            if peek() == '*':
-                i += 1
-                res += '.*'
-            else:
-                res += '[^/]*'
-        elif c == '?':
-            res += '.'
-        elif c == '[':
-            j = i
-            if j < n and pat[j] in '!]':
-                j += 1
-            while j < n and pat[j] != ']':
-                j += 1
-            if j >= n:
-                res += '\\['
-            else:
-                stuff = pat[i:j].replace('\\','\\\\')
-                i = j + 1
-                if stuff[0] == '!':
-                    stuff = '^' + stuff[1:]
-                elif stuff[0] == '^':
-                    stuff = '\\' + stuff
-                res = '%s[%s]' % (res, stuff)
-        elif c == '{':
-            group += 1
-            res += '(?:'
-        elif c == '}' and group:
-            res += ')'
-            group -= 1
-        elif c == ',' and group:
-            res += '|'
-        elif c == '\\':
-            p = peek()
-            if p:
-                i += 1
-                res += re.escape(p)
-            else:
-                res += re.escape(c)
-        else:
-            res += re.escape(c)
-    return head + res + tail
-
-_globchars = {'[': 1, '{': 1, '*': 1, '?': 1}
-
 def pathto(root, n1, n2):
     '''return the relative path from one place to another.
     root should use os.sep to separate directories
@@ -344,145 +283,6 @@
 
         raise Abort('%s not under root' % myname)
 
-def matcher(canonroot, cwd='', names=[], inc=[], exc=[], src=None, dflt_pat='glob'):
-    """build a function to match a set of file patterns
-
-    arguments:
-    canonroot - the canonical root of the tree you're matching against
-    cwd - the current working directory, if relevant
-    names - patterns to find
-    inc - patterns to include
-    exc - patterns to exclude
-    dflt_pat - if a pattern in names has no explicit type, assume this one
-    src - where these patterns came from (e.g. .hgignore)
-
-    a pattern is one of:
-    'glob:<glob>' - a glob relative to cwd
-    're:<regexp>' - a regular expression
-    'path:<path>' - a path relative to canonroot
-    'relglob:<glob>' - an unrooted glob (*.c matches C files in all dirs)
-    'relpath:<path>' - a path relative to cwd
-    'relre:<regexp>' - a regexp that doesn't have to match the start of a name
-    '<something>' - one of the cases above, selected by the dflt_pat argument
-
-    returns:
-    a 3-tuple containing
-    - list of roots (places where one should start a recursive walk of the fs);
-      this often matches the explicit non-pattern names passed in, but also
-      includes the initial part of glob: patterns that has no glob characters
-    - a bool match(filename) function
-    - a bool indicating if any patterns were passed in
-    """
-
-    # a common case: no patterns at all
-    if not names and not inc and not exc:
-        return [], always, False
-
-    def contains_glob(name):
-        for c in name:
-            if c in _globchars: return True
-        return False
-
-    def regex(kind, name, tail):
-        '''convert a pattern into a regular expression'''
-        if not name:
-            return ''
-        if kind == 're':
-            return name
-        elif kind == 'path':
-            return '^' + re.escape(name) + '(?:/|$)'
-        elif kind == 'relglob':
-            return globre(name, '(?:|.*/)', tail)
-        elif kind == 'relpath':
-            return re.escape(name) + '(?:/|$)'
-        elif kind == 'relre':
-            if name.startswith('^'):
-                return name
-            return '.*' + name
-        return globre(name, '', tail)
-
-    def matchfn(pats, tail):
-        """build a matching function from a set of patterns"""
-        if not pats:
-            return
-        try:
-            pat = '(?:%s)' % '|'.join([regex(k, p, tail) for (k, p) in pats])
-            if len(pat) > 20000:
-                raise OverflowError()
-            return re.compile(pat).match
-        except OverflowError:
-            # We're using a Python with a tiny regex engine and we
-            # made it explode, so we'll divide the pattern list in two
-            # until it works
-            l = len(pats)
-            if l < 2:
-                raise
-            a, b = matchfn(pats[:l//2], tail), matchfn(pats[l//2:], tail)
-            return lambda s: a(s) or b(s)
-        except re.error:
-            for k, p in pats:
-                try:
-                    re.compile('(?:%s)' % regex(k, p, tail))
-                except re.error:
-                    if src:
-                        raise Abort("%s: invalid pattern (%s): %s" %
-                                    (src, k, p))
-                    else:
-                        raise Abort("invalid pattern (%s): %s" % (k, p))
-            raise Abort("invalid pattern")
-
-    def globprefix(pat):
-        '''return the non-glob prefix of a path, e.g. foo/* -> foo'''
-        root = []
-        for p in pat.split('/'):
-            if contains_glob(p): break
-            root.append(p)
-        return '/'.join(root) or '.'
-
-    def normalizepats(names, default):
-        pats = []
-        roots = []
-        anypats = False
-        for kind, name in [patkind(p, default) for p in names]:
-            if kind in ('glob', 'relpath'):
-                name = canonpath(canonroot, cwd, name)
-            elif kind in ('relglob', 'path'):
-                name = normpath(name)
-
-            pats.append((kind, name))
-
-            if kind in ('glob', 're', 'relglob', 'relre'):
-                anypats = True
-
-            if kind == 'glob':
-                root = globprefix(name)
-                roots.append(root)
-            elif kind in ('relpath', 'path'):
-                roots.append(name or '.')
-            elif kind == 'relglob':
-                roots.append('.')
-        return roots, pats, anypats
-
-    roots, pats, anypats = normalizepats(names, dflt_pat)
-
-    patmatch = matchfn(pats, '$') or always
-    incmatch = always
-    if inc:
-        dummy, inckinds, dummy = normalizepats(inc, 'glob')
-        incmatch = matchfn(inckinds, '(?:/|$)')
-    excmatch = never
-    if exc:
-        dummy, exckinds, dummy = normalizepats(exc, 'glob')
-        excmatch = matchfn(exckinds, '(?:/|$)')
-
-    if not names and inc and not exc:
-        # common case: hgignore patterns
-        match = incmatch
-    else:
-        match = lambda fn: incmatch(fn) and not excmatch(fn) and patmatch(fn)
-
-    return (roots, match, (inc or exc or anypats) and True)
-
 _hgexecutable = None
 
 def main_is_frozen():
@@ -524,9 +324,9 @@
     exception.'''
     def py2shell(val):
         'convert python object into string that is useful to shell'
-        if val in (None, False):
+        if val is None or val is False:
             return '0'
-        if val == True:
+        if val is True:
             return '1'
         return str(val)
     oldenv = {}
@@ -714,7 +514,7 @@
                                 (path, prefix))
         parts.pop()
         prefixes = []
-        for n in range(len(parts)):
+        while parts:
             prefix = os.sep.join(parts)
             if prefix in self.auditeddir:
                 break
@@ -742,19 +542,6 @@
 
 if os.name == 'nt':
     from windows import *
-    def expand_glob(pats):
-        '''On Windows, expand the implicit globs in a list of patterns'''
-        ret = []
-        for p in pats:
-            kind, name = patkind(p, None)
-            if kind is None:
-                globbed = glob.glob(name)
-                if globbed:
-                    ret.extend(globbed)
-                    continue
-                # if we couldn't expand the glob, just keep it around
-            ret.append(p)
-        return ret
 else:
     from posix import *
 
@@ -964,7 +751,7 @@
         raise
     return temp
 
-class atomictempfile:
+class atomictempfile(object):
     """file-like object that atomically updates a file
 
     All writes will be redirected to a temporary copy of the original
@@ -973,6 +760,7 @@
     """
     def __init__(self, name, mode, createmode):
         self.__name = name
+        self._fp = None
         self.temp = mktempcopy(name, emptyok=('w' in mode),
                                createmode=createmode)
         self._fp = posixfile(self.temp, mode)
@@ -981,12 +769,14 @@
         return getattr(self._fp, name)
 
     def rename(self):
-        if not self.closed:
+        if not self._fp.closed:
             self._fp.close()
             rename(self.temp, localpath(self.__name))
 
     def __del__(self):
-        if not self.closed:
+        if not self._fp:
+            return
+        if not self._fp.closed:
             try:
                 os.unlink(self.temp)
             except: pass
@@ -1440,7 +1230,10 @@
         import termios, array, fcntl
         for dev in (sys.stdout, sys.stdin):
             try:
-                fd = dev.fileno()
+                try:
+                    fd = dev.fileno()
+                except AttributeError:
+                    continue
                 if not os.isatty(fd):
                     continue
                 arri = fcntl.ioctl(fd, termios.TIOCGWINSZ, '\0' * 8)
@@ -1451,6 +1244,10 @@
         pass
     return 80
 
+def wrap(line, hangindent, width=78):
+    padding = '\n' + ' ' * hangindent
+    return padding.join(textwrap.wrap(line, width=width - hangindent))
+
 def iterlines(iterator):
     for chunk in iterator:
         for line in chunk.splitlines():
--- a/mercurial/verify.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/verify.py	Wed Jul 08 17:03:16 2009 -0700
@@ -21,7 +21,7 @@
     filelinkrevs = {}
     filenodes = {}
     revisions = 0
-    badrevs = {}
+    badrevs = set()
     errors = [0]
     warnings = [0]
     ui = repo.ui
@@ -33,7 +33,7 @@
 
     def err(linkrev, msg, filename=None):
         if linkrev != None:
-            badrevs[linkrev] = True
+            badrevs.add(linkrev)
         else:
             linkrev = '?'
         msg = "%s: %s" % (linkrev, msg)
@@ -128,6 +128,8 @@
         lr = checkentry(mf, i, n, seen, mflinkrevs.get(n, []), "manifest")
         if n in mflinkrevs:
             del mflinkrevs[n]
+        else:
+            err(lr, _("%s not in changesets") % short(n), "manifest")
 
         try:
             for f, fn in mf.readdelta(n).iteritems():
@@ -164,12 +166,12 @@
 
     ui.status(_("checking files\n"))
 
-    storefiles = {}
+    storefiles = set()
     for f, f2, size in repo.store.datafiles():
         if not f:
             err(None, _("cannot decode filename '%s'") % f2)
         elif size > 0:
-            storefiles[f] = True
+            storefiles.add(f)
 
     files = sorted(set(filenodes) | set(filelinkrevs))
     for f in files:
@@ -192,7 +194,7 @@
 
         for ff in fl.files():
             try:
-                del storefiles[ff]
+                storefiles.remove(ff)
             except KeyError:
                 err(lr, _("missing revlog!"), ff)
 
@@ -227,7 +229,8 @@
                         err(lr, _("empty or missing copy source revlog %s:%s")
                             % (rp[0], short(rp[1])), f)
                     elif rp[1] == nullid:
-                        warn(_("warning: %s@%s: copy source revision is nullid %s:%s")
+                        ui.note(_("warning: %s@%s: copy source"
+                                  " revision is nullid %s:%s\n")
                             % (f, lr, rp[0], short(rp[1])))
                     else:
                         fl2.rev(rp[1])
--- a/mercurial/win32.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/win32.py	Wed Jul 08 17:03:16 2009 -0700
@@ -16,144 +16,10 @@
 import win32api
 
 import errno, os, sys, pywintypes, win32con, win32file, win32process
-import cStringIO, winerror
+import winerror
 import osutil, encoding
-import util
 from win32com.shell import shell,shellcon
 
-class WinError(Exception):
-    winerror_map = {
-        winerror.ERROR_ACCESS_DENIED: errno.EACCES,
-        winerror.ERROR_ACCOUNT_DISABLED: errno.EACCES,
-        winerror.ERROR_ACCOUNT_RESTRICTION: errno.EACCES,
-        winerror.ERROR_ALREADY_ASSIGNED: errno.EBUSY,
-        winerror.ERROR_ALREADY_EXISTS: errno.EEXIST,
-        winerror.ERROR_ARITHMETIC_OVERFLOW: errno.ERANGE,
-        winerror.ERROR_BAD_COMMAND: errno.EIO,
-        winerror.ERROR_BAD_DEVICE: errno.ENODEV,
-        winerror.ERROR_BAD_DRIVER_LEVEL: errno.ENXIO,
-        winerror.ERROR_BAD_EXE_FORMAT: errno.ENOEXEC,
-        winerror.ERROR_BAD_FORMAT: errno.ENOEXEC,
-        winerror.ERROR_BAD_LENGTH: errno.EINVAL,
-        winerror.ERROR_BAD_PATHNAME: errno.ENOENT,
-        winerror.ERROR_BAD_PIPE: errno.EPIPE,
-        winerror.ERROR_BAD_UNIT: errno.ENODEV,
-        winerror.ERROR_BAD_USERNAME: errno.EINVAL,
-        winerror.ERROR_BROKEN_PIPE: errno.EPIPE,
-        winerror.ERROR_BUFFER_OVERFLOW: errno.ENAMETOOLONG,
-        winerror.ERROR_BUSY: errno.EBUSY,
-        winerror.ERROR_BUSY_DRIVE: errno.EBUSY,
-        winerror.ERROR_CALL_NOT_IMPLEMENTED: errno.ENOSYS,
-        winerror.ERROR_CANNOT_MAKE: errno.EACCES,
-        winerror.ERROR_CANTOPEN: errno.EIO,
-        winerror.ERROR_CANTREAD: errno.EIO,
-        winerror.ERROR_CANTWRITE: errno.EIO,
-        winerror.ERROR_CRC: errno.EIO,
-        winerror.ERROR_CURRENT_DIRECTORY: errno.EACCES,
-        winerror.ERROR_DEVICE_IN_USE: errno.EBUSY,
-        winerror.ERROR_DEV_NOT_EXIST: errno.ENODEV,
-        winerror.ERROR_DIRECTORY: errno.EINVAL,
-        winerror.ERROR_DIR_NOT_EMPTY: errno.ENOTEMPTY,
-        winerror.ERROR_DISK_CHANGE: errno.EIO,
-        winerror.ERROR_DISK_FULL: errno.ENOSPC,
-        winerror.ERROR_DRIVE_LOCKED: errno.EBUSY,
-        winerror.ERROR_ENVVAR_NOT_FOUND: errno.EINVAL,
-        winerror.ERROR_EXE_MARKED_INVALID: errno.ENOEXEC,
-        winerror.ERROR_FILENAME_EXCED_RANGE: errno.ENAMETOOLONG,
-        winerror.ERROR_FILE_EXISTS: errno.EEXIST,
-        winerror.ERROR_FILE_INVALID: errno.ENODEV,
-        winerror.ERROR_FILE_NOT_FOUND: errno.ENOENT,
-        winerror.ERROR_GEN_FAILURE: errno.EIO,
-        winerror.ERROR_HANDLE_DISK_FULL: errno.ENOSPC,
-        winerror.ERROR_INSUFFICIENT_BUFFER: errno.ENOMEM,
-        winerror.ERROR_INVALID_ACCESS: errno.EACCES,
-        winerror.ERROR_INVALID_ADDRESS: errno.EFAULT,
-        winerror.ERROR_INVALID_BLOCK: errno.EFAULT,
-        winerror.ERROR_INVALID_DATA: errno.EINVAL,
-        winerror.ERROR_INVALID_DRIVE: errno.ENODEV,
-        winerror.ERROR_INVALID_EXE_SIGNATURE: errno.ENOEXEC,
-        winerror.ERROR_INVALID_FLAGS: errno.EINVAL,
-        winerror.ERROR_INVALID_FUNCTION: errno.ENOSYS,
-        winerror.ERROR_INVALID_HANDLE: errno.EBADF,
-        winerror.ERROR_INVALID_LOGON_HOURS: errno.EACCES,
-        winerror.ERROR_INVALID_NAME: errno.EINVAL,
-        winerror.ERROR_INVALID_OWNER: errno.EINVAL,
-        winerror.ERROR_INVALID_PARAMETER: errno.EINVAL,
-        winerror.ERROR_INVALID_PASSWORD: errno.EPERM,
-        winerror.ERROR_INVALID_PRIMARY_GROUP: errno.EINVAL,
-        winerror.ERROR_INVALID_SIGNAL_NUMBER: errno.EINVAL,
-        winerror.ERROR_INVALID_TARGET_HANDLE: errno.EIO,
-        winerror.ERROR_INVALID_WORKSTATION: errno.EACCES,
-        winerror.ERROR_IO_DEVICE: errno.EIO,
-        winerror.ERROR_IO_INCOMPLETE: errno.EINTR,
-        winerror.ERROR_LOCKED: errno.EBUSY,
-        winerror.ERROR_LOCK_VIOLATION: errno.EACCES,
-        winerror.ERROR_LOGON_FAILURE: errno.EACCES,
-        winerror.ERROR_MAPPED_ALIGNMENT: errno.EINVAL,
-        winerror.ERROR_META_EXPANSION_TOO_LONG: errno.E2BIG,
-        winerror.ERROR_MORE_DATA: errno.EPIPE,
-        winerror.ERROR_NEGATIVE_SEEK: errno.ESPIPE,
-        winerror.ERROR_NOACCESS: errno.EFAULT,
-        winerror.ERROR_NONE_MAPPED: errno.EINVAL,
-        winerror.ERROR_NOT_ENOUGH_MEMORY: errno.ENOMEM,
-        winerror.ERROR_NOT_READY: errno.EAGAIN,
-        winerror.ERROR_NOT_SAME_DEVICE: errno.EXDEV,
-        winerror.ERROR_NO_DATA: errno.EPIPE,
-        winerror.ERROR_NO_MORE_SEARCH_HANDLES: errno.EIO,
-        winerror.ERROR_NO_PROC_SLOTS: errno.EAGAIN,
-        winerror.ERROR_NO_SUCH_PRIVILEGE: errno.EACCES,
-        winerror.ERROR_OPEN_FAILED: errno.EIO,
-        winerror.ERROR_OPEN_FILES: errno.EBUSY,
-        winerror.ERROR_OPERATION_ABORTED: errno.EINTR,
-        winerror.ERROR_OUTOFMEMORY: errno.ENOMEM,
-        winerror.ERROR_PASSWORD_EXPIRED: errno.EACCES,
-        winerror.ERROR_PATH_BUSY: errno.EBUSY,
-        winerror.ERROR_PATH_NOT_FOUND: errno.ENOENT,
-        winerror.ERROR_PIPE_BUSY: errno.EBUSY,
-        winerror.ERROR_PIPE_CONNECTED: errno.EPIPE,
-        winerror.ERROR_PIPE_LISTENING: errno.EPIPE,
-        winerror.ERROR_PIPE_NOT_CONNECTED: errno.EPIPE,
-        winerror.ERROR_PRIVILEGE_NOT_HELD: errno.EACCES,
-        winerror.ERROR_READ_FAULT: errno.EIO,
-        winerror.ERROR_SEEK: errno.EIO,
-        winerror.ERROR_SEEK_ON_DEVICE: errno.ESPIPE,
-        winerror.ERROR_SHARING_BUFFER_EXCEEDED: errno.ENFILE,
-        winerror.ERROR_SHARING_VIOLATION: errno.EACCES,
-        winerror.ERROR_STACK_OVERFLOW: errno.ENOMEM,
-        winerror.ERROR_SWAPERROR: errno.ENOENT,
-        winerror.ERROR_TOO_MANY_MODULES: errno.EMFILE,
-        winerror.ERROR_TOO_MANY_OPEN_FILES: errno.EMFILE,
-        winerror.ERROR_UNRECOGNIZED_MEDIA: errno.ENXIO,
-        winerror.ERROR_UNRECOGNIZED_VOLUME: errno.ENODEV,
-        winerror.ERROR_WAIT_NO_CHILDREN: errno.ECHILD,
-        winerror.ERROR_WRITE_FAULT: errno.EIO,
-        winerror.ERROR_WRITE_PROTECT: errno.EROFS,
-        }
-
-    def __init__(self, err):
-        try:
-            # unpack a pywintypes.error tuple
-            self.win_errno, self.win_function, self.win_strerror = err
-        except ValueError:
-            # get attributes from a WindowsError
-            self.win_errno = err.winerror
-            self.win_function = None
-            self.win_strerror = err.strerror
-        self.win_strerror = self.win_strerror.rstrip('.')
-
-class WinIOError(WinError, IOError):
-    def __init__(self, err, filename=None):
-        WinError.__init__(self, err)
-        IOError.__init__(self, self.winerror_map.get(self.win_errno, 0),
-                         self.win_strerror)
-        self.filename = filename
-
-class WinOSError(WinError, OSError):
-    def __init__(self, err):
-        WinError.__init__(self, err)
-        OSError.__init__(self, self.winerror_map.get(self.win_errno, 0),
-                         self.win_strerror)
-
 def os_link(src, dst):
     try:
         win32file.CreateHardLink(dst, src)
@@ -165,12 +31,11 @@
             except:
                 pass
             # Fake hardlinking error
-            raise WinOSError((18, 'CreateHardLink', 'The system cannot '
-                              'move the file to a different disk drive'))
+            raise OSError(errno.EINVAL, 'Hardlinking not supported')
     except pywintypes.error, details:
-        raise WinOSError(details)
+        raise OSError(errno.EINVAL, 'target implements hardlinks improperly')
     except NotImplementedError: # Another fake error win Win98
-        raise WinOSError((18, 'CreateHardLink', 'Hardlinking not supported'))
+        raise OSError(errno.EINVAL, 'Hardlinking not supported')
 
 def nlinks(pathname):
     """Return number of hardlinks for the given file."""
@@ -264,114 +129,6 @@
     return [os.path.join(userdir, 'mercurial.ini'),
             os.path.join(userdir, '.hgrc')]
 
-class posixfile_nt(object):
-    '''file object with posix-like semantics.  on windows, normal
-    files can not be deleted or renamed if they are open. must open
-    with win32file.FILE_SHARE_DELETE. this flag does not exist on
-    windows < nt, so do not use this class there.'''
-
-    # ideally, we could use win32file._open_osfhandle and avoid this
-    # class entirely, but we would need the win32 _fdopen function,
-    # which is not exported by the win32file module.
-
-    def __init__(self, name, mode='rb'):
-        self.closed = False
-        self.name = name
-        self.mode = mode
-        access = 0
-        if 'r' in mode or '+' in mode:
-            access |= win32file.GENERIC_READ
-        if 'w' in mode or 'a' in mode or '+' in mode:
-            access |= win32file.GENERIC_WRITE
-        if 'r' in mode:
-            creation = win32file.OPEN_EXISTING
-        elif 'a' in mode:
-            creation = win32file.OPEN_ALWAYS
-        else:
-            creation = win32file.CREATE_ALWAYS
-        try:
-            self.handle = win32file.CreateFile(name,
-                                               access,
-                                               win32file.FILE_SHARE_READ |
-                                               win32file.FILE_SHARE_WRITE |
-                                               win32file.FILE_SHARE_DELETE,
-                                               None,
-                                               creation,
-                                               win32file.FILE_ATTRIBUTE_NORMAL,
-                                               0)
-        except pywintypes.error, err:
-            raise WinIOError(err, name)
-
-    def __iter__(self):
-        for line in self.readlines():
-            yield line
-
-    def read(self, count=-1):
-        try:
-            cs = cStringIO.StringIO()
-            while count:
-                wincount = int(count)
-                if wincount == -1:
-                    wincount = 1048576
-                val, data = win32file.ReadFile(self.handle, wincount)
-                if not data: break
-                cs.write(data)
-                if count != -1:
-                    count -= len(data)
-            return cs.getvalue()
-        except pywintypes.error, err:
-            raise WinIOError(err)
-
-    def readlines(self, sizehint=None):
-        # splitlines() splits on single '\r' while readlines()
-        # does not. cStringIO has a well behaving readlines() and is fast.
-        return cStringIO.StringIO(self.read()).readlines()
-
-    def write(self, data):
-        try:
-            if 'a' in self.mode:
-                win32file.SetFilePointer(self.handle, 0, win32file.FILE_END)
-            nwrit = 0
-            while nwrit < len(data):
-                val, nwrit = win32file.WriteFile(self.handle, data)
-                data = data[nwrit:]
-        except pywintypes.error, err:
-            raise WinIOError(err)
-
-    def writelines(self, sequence):
-        for s in sequence:
-            self.write(s)
-
-    def seek(self, pos, whence=0):
-        try:
-            win32file.SetFilePointer(self.handle, int(pos), whence)
-        except pywintypes.error, err:
-            raise WinIOError(err)
-
-    def tell(self):
-        try:
-            return win32file.SetFilePointer(self.handle, 0,
-                                            win32file.FILE_CURRENT)
-        except pywintypes.error, err:
-            raise WinIOError(err)
-
-    def close(self):
-        if not self.closed:
-            self.handle = None
-            self.closed = True
-
-    def flush(self):
-        # we have no application-level buffering
-        pass
-
-    def truncate(self, pos=0):
-        try:
-            win32file.SetFilePointer(self.handle, int(pos),
-                                     win32file.FILE_BEGIN)
-            win32file.SetEndOfFile(self.handle)
-        except pywintypes.error, err:
-            raise WinIOError(err)
-
 def getuser():
     '''return name of current user'''
     return win32api.GetUserName()
--- a/mercurial/windows.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/mercurial/windows.py	Wed Jul 08 17:03:16 2009 -0700
@@ -8,11 +8,19 @@
 from i18n import _
 import osutil, error
 import errno, msvcrt, os, re, sys
+
 nulldev = 'NUL:'
-
 umask = 002
 
-class winstdout:
+# wrap osutil.posixfile to provide friendlier exceptions
+def posixfile(name, mode='r', buffering=-1):
+    try:
+        return osutil.posixfile(name, mode, buffering)
+    except WindowsError, err:
+        raise IOError(err.errno, err.strerror)
+posixfile.__doc__ = osutil.posixfile.__doc__
+
+class winstdout(object):
     '''stdout on windows misbehaves if sent through a pipe'''
 
     def __init__(self, fp):
@@ -60,7 +68,7 @@
         return 'command' in os.environ.get('comspec', '')
 
 def openhardlinks():
-    return not _is_win_9x and "win32api" in locals()
+    return not _is_win_9x() and "win32api" in globals()
 
 def system_rcpath():
     try:
@@ -83,7 +91,7 @@
     return path
 
 def parse_patch_output(output_line):
-    """parses the output produced by patch and returns the file name"""
+    """parses the output produced by patch and returns the filename"""
     pf = output_line[14:]
     if pf[0] == '`':
         pf = pf[1:-1] # Remove the quotes
@@ -156,7 +164,7 @@
 
 # if you change this stub into a real check, please try to implement the
 # username and groupname functions above, too.
-def isowner(fp, st=None):
+def isowner(st):
     return True
 
 def find_exe(command):
@@ -240,23 +248,37 @@
     If gid is None, return the name of the current group."""
     return None
 
+def _removedirs(name):
+    """special version of os.removedirs that does not remove symlinked
+    directories or junction points if they actually contain files"""
+    if osutil.listdir(name):
+        return
+    os.rmdir(name)
+    head, tail = os.path.split(name)
+    if not tail:
+        head, tail = os.path.split(head)
+    while head and tail:
+        try:
+            if osutil.listdir(name):
+                return
+            os.rmdir(head)
+        except:
+            break
+        head, tail = os.path.split(head)
+
+def unlink(f):
+    """unlink and remove the directory if it is empty"""
+    os.unlink(f)
+    # try removing directories that might now be empty
+    try:
+        _removedirs(os.path.dirname(f))
+    except OSError:
+        pass
+
 try:
     # override functions with win32 versions if possible
     from win32 import *
-    if not _is_win_9x():
-        posixfile = posixfile_nt
-        try:
-            # fast, buffered POSIX-like file support
-            from osutil import posixfile as _posixfile
-            def posixfile(name, mode='r', buffering=-1):
-                # wrap osutil.posixfile to provide friendlier exceptions
-                try:
-                    return _posixfile(name, mode, buffering)
-                except WindowsError, err:
-                    raise WinIOError(err)
-            posixfile.__doc__ = _posixfile.__doc__
-        except ImportError:
-            # slow, unbuffered POSIX-like file support
-            posixfile = posixfile_nt
 except ImportError:
-    posixfile = file
+    pass
+
+expandglobs = True
--- a/setup.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/setup.py	Wed Jul 08 17:03:16 2009 -0700
@@ -26,7 +26,7 @@
     raise SystemExit(
         "Couldn't import standard zlib (incomplete Python install).")
 
-import os, time
+import os, subprocess, time
 import shutil
 import tempfile
 from distutils.core import setup, Extension
@@ -97,35 +97,57 @@
 except ImportError:
     pass
 
-if os.path.exists('.hg'):
-    # execute hg out of this directory with a custom environment which
-    # includes the pure Python modules in mercurial/pure
-    pypath = os.environ.get('PYTHONPATH', '')
-    purepath = os.path.join('mercurial', 'pure')
-    os.environ['PYTHONPATH'] = os.pathsep.join(['mercurial', purepath, pypath])
-    os.environ['HGRCPATH'] = '' # do not read any config file
-    cmd = '%s hg id -it' % sys.executable
-    version = None
+version = None
 
-    try:
-        l = os.popen(cmd).read().split()
-    except OSError, e:
-        print "warning: could not establish Mercurial version: %s" % e
+if os.path.isdir('.hg'):
+    # Execute hg out of this directory with a custom environment which
+    # includes the pure Python modules in mercurial/pure. We also take
+    # care to not use any hgrc files and do no localization.
+    pypath = ['mercurial', os.path.join('mercurial', 'pure')]
+    env = {'PYTHONPATH': os.pathsep.join(pypath),
+           'HGRCPATH': '',
+           'LANGUAGE': 'C'}
+    if 'SystemRoot' in os.environ:
+        # Copy SystemRoot into the custom environment for Python 2.6
+        # under Windows. Otherwise, the subprocess will fail with
+        # error 0xc0150004. See: http://bugs.python.org/issue3440
+        env['SystemRoot'] = os.environ['SystemRoot']
+    cmd = [sys.executable, 'hg', 'id', '-i', '-t']
+
+    p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
+                         stderr=subprocess.PIPE, env=env)
+    out, err = p.communicate()
 
-    os.environ['PYTHONPATH'] = pypath
+    # If root is executing setup.py, but the repository is owned by
+    # another user (as in "sudo python setup.py install") we will get
+    # trust warnings since the .hg/hgrc file is untrusted. That is
+    # fine, we don't want to load it anyway.
+    err = [e for e in err.splitlines()
+           if not e.startswith('Not trusting file')]
+    if err:
+        sys.stderr.write('warning: could not establish Mercurial '
+                         'version:\n%s\n' % '\n'.join(err))
+    else:
+        l = out.split()
+        while len(l) > 1 and l[-1][0].isalpha(): # remove non-numbered tags
+            l.pop()
+        if l:
+            version = l[-1] # latest tag or revision number
+            if version.endswith('+'):
+                version += time.strftime('%Y%m%d')
+elif os.path.exists('.hg_archival.txt'):
+    hgarchival = open('.hg_archival.txt')
+    for line in hgarchival:
+        if line.startswith('node:'):
+            version = line.split(':')[1].strip()[:12]
+            break
 
-    while len(l) > 1 and l[-1][0].isalpha(): # remove non-numbered tags
-        l.pop()
-    if l:
-        version = l[-1] # latest tag or revision number
-        if version.endswith('+'):
-            version += time.strftime('%Y%m%d')
+if version:
+    f = file("mercurial/__version__.py", "w")
+    f.write('# this file is autogenerated by setup.py\n')
+    f.write('version = "%s"\n' % version)
+    f.close()
 
-    if version:
-        f = file("mercurial/__version__.py", "w")
-        f.write('# this file is autogenerated by setup.py\n')
-        f.write('version = "%s"\n' % version)
-        f.close()
 
 try:
     from mercurial import __version__
@@ -233,7 +255,7 @@
       version=version,
       author='Matt Mackall',
       author_email='mpm@selenic.com',
-      url='http://selenic.com/mercurial',
+      url='http://mercurial.selenic.com/',
       description='Scalable distributed SCM',
       license='GNU GPL',
       scripts=scripts,
--- a/templates/atom/changelog.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/atom/changelog.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,10 +1,10 @@
-#header#
+{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#
+ <title>{repo|escape} Changelog</title>
+ {latestentry%feedupdated}
 
-#entries%changelogentry#
+{entries%changelogentry}
 </feed>
--- a/templates/atom/changelogentry.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/atom/changelogentry.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,16 +1,16 @@
  <entry>
-  <title>#desc|strip|firstline|strip|escape|nonempty#</title>
+  <title>{desc|strip|firstline|strip|escape|nonempty}</title>
   <id>{urlbase}{url}#changeset-{node}</id>
   <link href="{urlbase}{url}rev/{node}"/>
   <author>
-   <name>#author|person|escape#</name>
-   <email>#author|email|obfuscate#</email>
+   <name>{author|person|escape}</name>
+   <email>{author|email|obfuscate}</email>
   </author>
-  <updated>#date|rfc3339date#</updated>
-  <published>#date|rfc3339date#</published>
+  <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>
+    <pre xml:space="preserve">{desc|escape|nonempty}</pre>
    </div>
   </content>
  </entry>
--- a/templates/atom/error.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/atom/error.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -7,7 +7,7 @@
  <updated>1970-01-01T00:00:00+00:00</updated>
  <entry>
   <title>Error</title>
-  <id>http://www.selenic.com/mercurial/#error</id>
+  <id>http://mercurial.selenic.com/#error</id>
   <author>
     <name>mercurial</name>
   </author>
--- a/templates/atom/filelog.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/atom/filelog.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,8 +1,8 @@
-#header#
+{header}
  <id>{urlbase}{url}atom-log/tip/{file|escape}</id>
- <link rel="self" href="{urlbase}{url}atom-log/tip/{file|escape}"/>
- <title>#repo|escape#: #file|escape# history</title>
- #latestentry%feedupdated#
+ <link rel="self" href="{urlbase}{url}atom-log/tip/{file|urlescape}"/>
+ <title>{repo|escape}: {file|escape} history</title>
+ {latestentry%feedupdated}
 
-#entries%changelogentry#
+{entries%changelogentry}
 </feed>
--- a/templates/atom/map	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/atom/map	Wed Jul 08 17:03:16 2009 -0700
@@ -1,5 +1,5 @@
 default = 'changelog'
-feedupdated = '<updated>#date|rfc3339date#</updated>'
+feedupdated = '<updated>{date|rfc3339date}</updated>'
 mimetype = 'application/atom+xml; charset={encoding}'
 header = header.tmpl
 changelog = changelog.tmpl
--- a/templates/atom/tagentry.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/atom/tagentry.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,8 +1,8 @@
  <entry>
-  <title>#tag|escape#</title>
+  <title>{tag|escape}</title>
   <link rel="alternate" href="{urlbase}{url}rev/{node}"/>
   <id>{urlbase}{url}#tag-{node}</id>
-  <updated>#date|rfc3339date#</updated>
-  <published>#date|rfc3339date#</published>
-  <content type="text">#tag|strip|escape#</content>
+  <updated>{date|rfc3339date}</updated>
+  <published>{date|rfc3339date}</published>
+  <content type="text">{tag|strip|escape}</content>
  </entry>
--- a/templates/atom/tags.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/atom/tags.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,11 +1,11 @@
-#header#
+{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>
+ <title>{repo|escape}: tags</title>
+ <summary>{repo|escape} tag history</summary>
  <author><name>Mercurial SCM</name></author>
- #latestentry%feedupdated#
+ {latestentry%feedupdated}
 
-#entriesnotip%tagentry#
+{entriesnotip%tagentry}
 </feed>
--- a/templates/coal/map	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/coal/map	Wed Jul 08 17:03:16 2009 -0700
@@ -23,25 +23,59 @@
 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"> {basename|escape}/</a> <a href="{url}file/{node|short}{path|urlescape}/{emptydirs|urlescape}{sessionvars%urlparameter}">{emptydirs|escape}</a><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"> {basename|escape}</a></td><td class="size">{size}</td><td class="permissions">{permissions|permissions}</td></tr>'
+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>'
+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>'
+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}">{lines}</div>'
+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>'
+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> '
 
@@ -49,25 +83,108 @@
 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>'
+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>'
+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>'
+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'
+
+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>'
+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}'
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/gitweb/branches.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -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}
--- a/templates/gitweb/changelog.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/gitweb/changelog.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,14 +1,14 @@
-#header#
-<title>#repo|escape#: Changelog</title>
+{header}
+<title>{repo|escape}: Changelog</title>
 <link rel="alternate" type="application/atom+xml"
-   href="{url}atom-log" title="Atom feed for #repo|escape#"/>
+   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#"/>
+   href="{url}rss-log" title="RSS feed for {repo|escape}"/>
 </head>
 <body>
 
 <div class="page_header">
-<a href="http://www.selenic.com/mercurial/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">#repo|escape#</a> / changelog
+<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">
@@ -20,19 +20,20 @@
 
 <div class="page_nav">
 <a href="{url}summary{sessionvars%urlparameter}">summary</a> |
-<a href="{url}shortlog/#rev#{sessionvars%urlparameter}">shortlog</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}file/#node|short#{sessionvars%urlparameter}">files</a>#archives%archiveentry#
+<a href="{url}branches{sessionvars%urlparameter}">branches</a> |
+<a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry}
 <br/>
-#changenav%naventry#<br/>
+{changenav%naventry}<br/>
 </div>
 
-#entries%changelogentry#
+{entries%changelogentry}
 
 <div class="page_nav">
-#changenav%naventry#<br/>
+{changenav%naventry}<br/>
 </div>
 
-#footer#
+{footer}
--- a/templates/gitweb/changelogentry.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/gitweb/changelogentry.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,14 +1,14 @@
 <div>
-<a class="title" href="{url}rev/#node|short#{sessionvars%urlparameter}"><span class="age">#date|age# ago</span>#desc|strip|firstline|escape|nonempty#<span class="logtags"> {inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span></a>
+<a class="title" href="{url}rev/{node|short}{sessionvars%urlparameter}"><span class="age">{date|age} ago</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/>
+<a href="{url}rev/{node|short}{sessionvars%urlparameter}">changeset</a><br/>
 </div>
-<i>#author|obfuscate# [#date|rfc822date#] rev #rev#</i><br/>
+<i>{author|obfuscate} [{date|rfc822date}] rev {rev}</i><br/>
 </div>
 <div class="log_body">
-#desc|strip|escape|addbreaks|nonempty#
+{desc|strip|escape|addbreaks|nonempty}
 <br/>
 <br/>
 </div>
--- a/templates/gitweb/changeset.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/gitweb/changeset.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,42 +1,50 @@
-#header#
+{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#"/>
+   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#"/>
+   href="{url}rss-log" title="RSS feed for {repo|escape}"/>
 </head>
 <body>
 
 <div class="page_header">
-<a href="http://www.selenic.com/mercurial/" title="Mercurial" style="float: right;">Mercurial</a><a href="#url#summary{sessionvars%urlparameter}">#repo|escape#</a> / changeset
+<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}file/#node|short#{sessionvars%urlparameter}">files</a> | changeset | <a href="{url}raw-rev/#node|short#">raw</a> #archives%archiveentry#<br/>
+<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>
+<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# ago)</td></tr>
-#branch%changesetbranch#
+<tr><td>author</td><td>{author|obfuscate}</td></tr>
+<tr><td></td><td>{date|date} ({date|age} ago)</td></tr>
+{branch%changesetbranch}
 <tr><td>changeset {rev}</td><td style="font-family:monospace">{node|short}</td></tr>
-#parent%changesetparent#
-#child%changesetchild#
+{parent%changesetparent}
+{child%changesetchild}
 </table></div>
 
 <div class="page_body">
-#desc|strip|escape|addbreaks|nonempty#
+{desc|strip|escape|addbreaks|nonempty}
 </div>
 <div class="list_head"></div>
 <div class="title_text">
 <table cellspacing="0">
-#files#
+{files}
 </table></div>
 
-<div class="page_body">#diff#</div>
+<div class="page_body">{diff}</div>
 
-#footer#
+{footer}
--- a/templates/gitweb/error.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/gitweb/error.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,18 +1,18 @@
-#header#
-<title>#repo|escape#: Error</title>
+{header}
+<title>{repo|escape}: Error</title>
 <link rel="alternate" type="application/atom+xml"
-   href="{url}atom-log" title="Atom feed for #repo|escape#"/>
+   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#"/>
+   href="{url}rss-log" title="RSS feed for {repo|escape}"/>
 </head>
 <body>
 
 <div class="page_header">
-<a href="http://www.selenic.com/mercurial/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">#repo|escape#</a> / error
+<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/>
+<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">
@@ -22,4 +22,4 @@
 {error|escape}
 </div>
 
-#footer#
+{footer}
--- a/templates/gitweb/fileannotate.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/gitweb/fileannotate.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,14 +1,14 @@
-#header#
+{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#"/>
+   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#"/>
+   href="{url}rss-log" title="RSS feed for {repo|escape}"/>
 </head>
 <body>
 
 <div class="page_header">
-<a href="http://www.selenic.com/mercurial/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">#repo|escape#</a> / annotate
+<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">
@@ -17,34 +17,35 @@
 <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}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}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/>
+<a href="{url}raw-annotate/{node|short}/{file|urlescape}">raw</a><br/>
 </div>
 
-<div class="title">#file|escape#</div>
+<div class="title">{file|escape}</div>
 
 <div class="title_text">
 <table cellspacing="0">
 <tr>
  <td>author</td>
- <td>#author|obfuscate#</td></tr>
+ <td>{author|obfuscate}</td></tr>
 <tr>
  <td></td>
- <td>#date|date# (#date|age# ago)</td></tr>
-#branch%filerevbranch#
+ <td>{date|date} ({date|age} ago)</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#
+ <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>
+ <td style="font-family:monospace">{permissions|permissions}</td></tr>
 </table>
 </div>
 
@@ -53,8 +54,8 @@
 </div>
 <div class="page_body">
 <table>
-#annotate%annotateline#
+{annotate%annotateline}
 </table>
 </div>
 
-#footer#
+{footer}
--- a/templates/gitweb/filediff.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/gitweb/filediff.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,14 +1,14 @@
 {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#"/>
+   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://www.selenic.com/mercurial/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / diff
+<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">
@@ -17,6 +17,7 @@
 <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/templates/gitweb/filelog.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/gitweb/filelog.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,14 +1,14 @@
-#header#
-<title>#repo|escape#: File revisions</title>
+{header}
+<title>{repo|escape}: File revisions</title>
 <link rel="alternate" type="application/atom+xml"
-   href="{url}atom-log" title="Atom feed for #repo|escape#"/>
+   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#"/>
+   href="{url}rss-log" title="RSS feed for {repo|escape}"/>
 </head>
 <body>
 
 <div class="page_header">
-<a href="http://www.selenic.com/mercurial/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">#repo|escape#</a> / file revisions
+<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">
@@ -17,23 +17,24 @@
 <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}file/{node|short}/#file|urlescape#{sessionvars%urlparameter}">file</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}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>
+<a href="{url}rss-log/{node|short}/{file|urlescape}">rss</a>
 <br/>
 {nav%filenaventry}
 </div>
 
-<div class="title" >#file|urlescape#</div>
+<div class="title" >{file|urlescape}</div>
 
 <table>
-#entries%filelogentry#
+{entries%filelogentry}
 </table>
 
 <div class="page_nav">
 {nav%filenaventry}
 </div>
 
-#footer#
+{footer}
--- a/templates/gitweb/filerevision.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/gitweb/filerevision.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,14 +1,14 @@
-#header#
+{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#"/>
+   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#"/>
+   href="{url}rss-log" title="RSS feed for {repo|escape}"/>
 </head>
 <body>
 
 <div class="page_header">
-<a href="http://www.selenic.com/mercurial/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">#repo|escape#</a> / file revision
+<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">
@@ -17,34 +17,35 @@
 <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}file/#node|short##path|urlescape#{sessionvars%urlparameter}">files</a> |
-<a href="{url}rev/#node|short#{sessionvars%urlparameter}">changeset</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}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/>
+<a href="{url}raw-file/{node|short}/{file|urlescape}">raw</a><br/>
 </div>
 
-<div class="title">#file|escape#</div>
+<div class="title">{file|escape}</div>
 
 <div class="title_text">
 <table cellspacing="0">
 <tr>
  <td>author</td>
- <td>#author|obfuscate#</td></tr>
+ <td>{author|obfuscate}</td></tr>
 <tr>
  <td></td>
- <td>#date|date# (#date|age# ago)</td></tr>
-#branch%filerevbranch#
+ <td>{date|date} ({date|age} ago)</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#
+ <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>
+ <td style="font-family:monospace">{permissions|permissions}</td></tr>
 </table>
 </div>
 
@@ -53,7 +54,7 @@
 </div>
 
 <div class="page_body">
-#text%fileline#
+{text%fileline}
 </div>
 
-#footer#
+{footer}
--- a/templates/gitweb/graph.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/gitweb/graph.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,15 +1,15 @@
-#header#
-<title>#repo|escape#: Graph</title>
+{header}
+<title>{repo|escape}: Graph</title>
 <link rel="alternate" type="application/atom+xml"
-   href="{url}atom-log" title="Atom feed for #repo|escape#"/>
+   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#"/>
+   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://www.selenic.com/mercurial/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">#repo|escape#</a> / graph
+<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">
@@ -21,14 +21,15 @@
 <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> |
+<a href="{url}log/{rev}{sessionvars%urlparameter}">changelog</a> |
 graph |
 <a href="{url}tags{sessionvars%urlparameter}">tags</a> |
-<a href="{url}file/#node|short#{sessionvars%urlparameter}">files</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/>
+| {changenav%navgraphentry}<br/>
 </div>
 
 <div class="title">&nbsp;</div>
@@ -37,11 +38,11 @@
 
 <div id="wrapper">
 <ul id="nodebgs"></ul>
-<canvas id="graph" width="224" height="#canvasheight#"></canvas>
+<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" src="{staticurl}graph.js"></script>
 <script>
 <!-- hide script content
 
@@ -117,4 +118,4 @@
 | {changenav%navgraphentry}
 </div>
 
-#footer#
+{footer}
--- a/templates/gitweb/index.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/gitweb/index.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,26 +1,26 @@
-#header#
+{header}
 <title>Mercurial repositories index</title>
 </head>
 <body>
 
 <div class="page_header">
-    <a href="http://www.selenic.com/mercurial/" title="Mercurial" style="float: right;">Mercurial</a>
+    <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><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#
+    {entries%indexentry}
 </table>
 <div class="page_footer">
-#motd#
+{motd}
 </div>
 </body>
 </html>
--- a/templates/gitweb/manifest.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/gitweb/manifest.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,14 +1,14 @@
-#header#
-<title>#repo|escape#: files</title>
+{header}
+<title>{repo|escape}: files</title>
 <link rel="alternate" type="application/atom+xml"
-   href="{url}atom-log" title="Atom feed for #repo|escape#"/>
+   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#"/>
+   href="{url}rss-log" title="RSS feed for {repo|escape}"/>
 </head>
 <body>
 
 <div class="page_header">
-<a href="http://www.selenic.com/mercurial/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">#repo|escape#</a> / files
+<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">
@@ -17,21 +17,22 @@
 <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/>
+<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>
+<div class="title">{path|escape} <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span></div>
 <table cellspacing="0">
-<tr class="parity#upparity#">
+<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><a href="{url}file/{node|short}{up|urlescape}{sessionvars%urlparameter}">[up]</a></td>
 <td class="link">&nbsp;</td>
 </tr>
-#dentries%direntry#
-#fentries%fileentry#
+{dentries%direntry}
+{fentries%fileentry}
 </table>
 
-#footer#
+{footer}
--- a/templates/gitweb/map	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/gitweb/map	Wed Jul 08 17:03:16 2009 -0700
@@ -11,56 +11,240 @@
 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>'
+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>'
+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>'
+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>'
+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>'
+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>'
+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# ago</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>'
-branchentry = '<tr class="parity{parity}"><td class="age"><i>{date|age} ago</i></td><td><a class="list" href="{url}rev/{node|short}{sessionvars%urlparameter}"><b>{node|short}</b></a></td><td>{branch|escape}</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>'
-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>'
+tagentry = '
+  <tr class="parity{parity}">
+    <td class="age"><i>{date|age} ago</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} ago</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# ago</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# ago</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} ago</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'
+shortlogentry = '
+  <tr class="parity{parity}">
+    <td class="age"><i>{date|age} ago</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} ago</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} ago</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#" />'
+urlparameter = '{separator}{name}={value|urlescape}'
+hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
--- a/templates/gitweb/notfound.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/gitweb/notfound.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -5,7 +5,7 @@
 <body>
 
 <div class="page_header">
-<a href="http://www.selenic.com/mercurial/" title="Mercurial" style="float: right;">Mercurial</a> Not found: {repo|escape}
+<a href="http://mercurial.selenic.com/" title="Mercurial" style="float: right;">Mercurial</a> Not found: {repo|escape}
 </div>
 
 <div class="page_body">
--- a/templates/gitweb/search.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/gitweb/search.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,19 +1,19 @@
-#header#
-<title>#repo|escape#: Search</title>
+{header}
+<title>{repo|escape}: Search</title>
 <link rel="alternate" type="application/atom+xml"
-   href="{url}atom-log" title="Atom feed for #repo|escape#"/>
+   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#"/>
+   href="{url}rss-log" title="RSS feed for {repo|escape}"/>
 </head>
 <body>
 
 <div class="page_header">
-<a href="http://www.selenic.com/mercurial/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">#repo|escape#</a> / search
+<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#" />
+<input type="text" name="rev" value="{query|escape}" />
 </div>
 </form>
 </div>
@@ -24,12 +24,13 @@
 <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}file/#node|short#{sessionvars%urlparameter}">files</a>#archives%archiveentry#
+<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>
+<div class="title">searching for {query|escape}</div>
 
-#entries#
+{entries}
 
-#footer#
+{footer}
--- a/templates/gitweb/shortlog.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/gitweb/shortlog.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,14 +1,14 @@
-#header#
-<title>#repo|escape#: Shortlog</title>
+{header}
+<title>{repo|escape}: Shortlog</title>
 <link rel="alternate" type="application/atom+xml"
-   href="{url}atom-log" title="Atom feed for #repo|escape#"/>
+   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#"/>
+   href="{url}rss-log" title="RSS feed for {repo|escape}"/>
 </head>
 <body>
 
 <div class="page_header">
-<a href="http://www.selenic.com/mercurial/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">#repo|escape#</a> / shortlog
+<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">
@@ -20,21 +20,22 @@
 <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}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}file/#node|short#{sessionvars%urlparameter}">files</a>#archives%archiveentry#
+<a href="{url}branches{sessionvars%urlparameter}">branches</a> |
+<a href="{url}file/{node|short}{sessionvars%urlparameter}">files</a>{archives%archiveentry}
 <br/>
-#changenav%navshortentry#<br/>
+{changenav%navshortentry}<br/>
 </div>
 
 <div class="title">&nbsp;</div>
 <table cellspacing="0">
-#entries%shortlogentry#
+{entries%shortlogentry}
 </table>
 
 <div class="page_nav">
-#changenav%navshortentry#
+{changenav%navshortentry}
 </div>
 
-#footer#
+{footer}
--- a/templates/gitweb/summary.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/gitweb/summary.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,14 +1,14 @@
-#header#
-<title>#repo|escape#: Summary</title>
+{header}
+<title>{repo|escape}: Summary</title>
 <link rel="alternate" type="application/atom+xml"
-   href="{url}atom-log" title="Atom feed for #repo|escape#"/>
+   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#"/>
+   href="{url}rss-log" title="RSS feed for {repo|escape}"/>
 </head>
 <body>
 
 <div class="page_header">
-<a href="http://www.selenic.com/mercurial/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">#repo|escape#</a> / summary
+<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}
@@ -24,26 +24,27 @@
 <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}file/#node|short#{sessionvars%urlparameter}">files</a>#archives%archiveentry#
+<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>
+<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#
+{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#
+{tags}
 <tr class="light"><td colspan="3"><a class="list" href="{url}tags{sessionvars%urlparameter}">...</a></td></tr>
 </table>
 
@@ -54,4 +55,4 @@
   <td colspan="4"><a class="list"  href="#">...</a></td>
 </tr>
 </table>
-#footer#
+{footer}
--- a/templates/gitweb/tags.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/gitweb/tags.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,14 +1,14 @@
-#header#
-<title>#repo|escape#: Tags</title>
+{header}
+<title>{repo|escape}: Tags</title>
 <link rel="alternate" type="application/atom+xml"
-   href="{url}atom-tags" title="Atom feed for #repo|escape#"/>
+   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#"/>
+   href="{url}rss-tags" title="RSS feed for {repo|escape}"/>
 </head>
 <body>
 
 <div class="page_header">
-<a href="http://www.selenic.com/mercurial/" title="Mercurial" style="float: right;">Mercurial</a><a href="{url}summary{sessionvars%urlparameter}">#repo|escape#</a> / tags
+<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">
@@ -17,13 +17,14 @@
 <a href="{url}log{sessionvars%urlparameter}">changelog</a> |
 <a href="{url}graph{sessionvars%urlparameter}">graph</a> |
 tags |
-<a href="{url}file/#node|short#{sessionvars%urlparameter}">files</a>
+<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#
+{entries%tagentry}
 </table>
 
-#footer#
+{footer}
--- a/templates/map-cmdline.compact	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/map-cmdline.compact	Wed Jul 08 17:03:16 2009 -0700
@@ -1,5 +1,6 @@
 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}]'
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/monoblue/branches.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -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}
--- a/templates/monoblue/changelog.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/monoblue/changelog.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,13 +1,13 @@
-#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#"/>
+{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>
+        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / changelog</h1>
 
         <form action="{url}log">
             {sessionvars%hiddenformentry}
@@ -23,17 +23,18 @@
             <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}file/#node|short#{sessionvars%urlparameter}">files</a>#archives%archiveentry#</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#
+    {entries%changelogentry}
     </div>
 
     <div class="page-path">
-#changenav%naventry#
+{changenav%naventry}
     </div>
 
-#footer#
+{footer}
--- a/templates/monoblue/changelogentry.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/monoblue/changelogentry.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,6 +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>
+<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# ago</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>
+    <li class="age">{date|age} ago</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 Jul 08 17:01:18 2009 -0700
+++ b/templates/monoblue/changeset.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,13 +1,13 @@
-#header#
+{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#"/>
+    <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>
+        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / files</h1>
 
         <form action="{url}log">
             {sessionvars%hiddenformentry}
@@ -23,40 +23,41 @@
             <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}file/#node|short#{sessionvars%urlparameter}">files</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>
+        <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# ago</span></p>
+    <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} ago</span></p>
 
     <dl class="overview">
         <dt>author</dt>
-        <dd>#author|obfuscate#</dd>
+        <dd>{author|obfuscate}</dd>
         <dt>date</dt>
-        <dd>#date|date#</dd>
-        #branch%changesetbranch#
+        <dd>{date|date}</dd>
+        {branch%changesetbranch}
         <dt>changeset {rev}</dt>
         <dd>{node|short}</dd>
-        #parent%changesetparent#
-        #child%changesetchild#
+        {parent%changesetparent}
+        {child%changesetchild}
     </dl>
 
-    <p class="description">#desc|strip|escape|addbreaks|nonempty#</p>
+    <p class="description">{desc|strip|escape|addbreaks|nonempty}</p>
 
     <table>
-    #files#
+    {files}
     </table>
 
     <div class="diff">
-    #diff#
+    {diff}
     </div>
 
-#footer#
+{footer}
--- a/templates/monoblue/error.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/monoblue/error.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,13 +1,13 @@
 {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#"/>
+    <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>
+        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / Not found: {repo|escape}</h1>
 
         <form action="{url}log">
             {sessionvars%hiddenformentry}
@@ -23,7 +23,8 @@
             <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}file/#node|short#{sessionvars%urlparameter}">files</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>
 
--- a/templates/monoblue/fileannotate.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/monoblue/fileannotate.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,13 +1,13 @@
-#header#
+{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#"/>
+    <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>
+        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / annotate</h1>
 
         <form action="{url}log">
             {sessionvars%hiddenformentry}
@@ -23,34 +23,35 @@
             <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}file/#node|short##path|urlescape#{sessionvars%urlparameter}">files</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}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>
+        <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# ago</span></p>
+    <h3 class="changeset">{file|escape}</h3>
+    <p class="changeset-age"><span>{date|age} ago</span></p>
 
     <dl class="overview">
         <dt>author</dt>
-        <dd>#author|obfuscate#</dd>
+        <dd>{author|obfuscate}</dd>
         <dt>date</dt>
-        <dd>#date|date#</dd>
-        #branch%filerevbranch#
+        <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#
+        <dd><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></dd>
+        {parent%fileannotateparent}
+        {child%fileannotatechild}
         <dt>permissions</dt>
-        <dd>#permissions|permissions#</dd>
+        <dd>{permissions|permissions}</dd>
     </dl>
 
     <p class="description">{desc|strip|escape|addbreaks|nonempty}</p>
@@ -59,4 +60,4 @@
     {annotate%annotateline}
     </table>
 
-#footer#
+{footer}
--- a/templates/monoblue/filediff.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/monoblue/filediff.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,13 +1,13 @@
 {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#"/>
+    <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>
+        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / file diff</h1>
 
         <form action="{url}log">
             {sessionvars%hiddenformentry}
@@ -23,6 +23,7 @@
             <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>
--- a/templates/monoblue/filelog.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/monoblue/filelog.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,13 +1,13 @@
-#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#"/>
+{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>
+        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / file revisions</h1>
 
         <form action="{url}log">
             {sessionvars%hiddenformentry}
@@ -23,26 +23,27 @@
             <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}file/#node|short##path|urlescape#{sessionvars%urlparameter}">files</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}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}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>
+        <li><a href="{url}rss-log/{node|short}/{file|urlescape}">rss</a></li>
     </ul>
 
-    <h2 class="no-link no-border">#file|urlescape#</h2>
+    <h2 class="no-link no-border">{file|urlescape}</h2>
 
     <table>
-    #entries%filelogentry#
+    {entries%filelogentry}
     </table>
 
     <div class="page-path">
     {nav%filenaventry}
     </div>
 
-#footer#
+{footer}
--- a/templates/monoblue/filerevision.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/monoblue/filerevision.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,13 +1,13 @@
-#header#
+{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#"/>
+    <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>
+        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / file revision</h1>
 
         <form action="{url}log">
             {sessionvars%hiddenformentry}
@@ -23,40 +23,41 @@
             <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}file/#node|short##path|urlescape#{sessionvars%urlparameter}">files</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}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>
+        <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# ago</span></p>
+    <h3 class="changeset">{file|escape}</h3>
+    <p class="changeset-age"><span>{date|age} ago</span></p>
 
     <dl class="overview">
         <dt>author</dt>
-        <dd>#author|obfuscate#</dd>
+        <dd>{author|obfuscate}</dd>
         <dt>date</dt>
-        <dd>#date|date#</dd>
-        #branch%filerevbranch#
+        <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#
+        <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>
+        <dd>{permissions|permissions}</dd>
     </dl>
 
     <p class="description">{desc|strip|escape|addbreaks|nonempty}</p>
 
     <div class="source">
-    #text%fileline#
+    {text%fileline}
     </div>
 
-#footer#
+{footer}
--- a/templates/monoblue/footer.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/monoblue/footer.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -8,7 +8,7 @@
     </div>
 
     <div id="powered-by">
-        <p><a href="http://www.selenic.com/mercurial/" title="Mercurial"><img src="#staticurl#hglogo.png" width=75 height=90 border=0 alt="mercurial"></a></p>
+        <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>
--- a/templates/monoblue/graph.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/monoblue/graph.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,14 +1,14 @@
-#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]-->
+{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>
+        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / graph</h1>
 
         <form action="{url}log">
             {sessionvars%hiddenformentry}
@@ -24,7 +24,8 @@
             <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}file/#node|short#{sessionvars%urlparameter}">files</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>
 
@@ -33,11 +34,11 @@
     <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>
+        <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" src="{staticurl}graph.js"></script>
     <script>
     <!-- hide script content
 
@@ -114,4 +115,4 @@
         | {changenav%navgraphentry}
     </div>
 
-#footer#
+{footer}
--- a/templates/monoblue/index.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/monoblue/index.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,5 +1,5 @@
-#header#
-    <title>#repo|escape#: Mercurial repositories index</title>
+{header}
+    <title>{repo|escape}: Mercurial repositories index</title>
 </head>
 
 <body>
@@ -12,21 +12,21 @@
     
     <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><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#
+        {entries%indexentry}
     </table>
     <div class="page-footer">
         {motd}
     </div>
 
     <div id="powered-by">
-        <p><a href="http://www.selenic.com/mercurial/" title="Mercurial"><img src="#staticurl#hglogo.png" width=75 height=90 border=0 alt="mercurial"></a></p>
+        <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>
--- a/templates/monoblue/manifest.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/monoblue/manifest.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,13 +1,13 @@
-#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#"/>
+{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>
+        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / files</h1>
 
         <form action="{url}log">
             {sessionvars%hiddenformentry}
@@ -23,28 +23,29 @@
             <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>
+        <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>
+    <p class="files">{path|escape} <span class="logtags">{inbranch%inbranchtag}{branches%branchtag}{tags%tagtag}</span></p>
 
     <table>
-        <tr class="parity#upparity#">
+        <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><a href="{url}file/{node|short}{up|urlescape}{sessionvars%urlparameter}">[up]</a></td>
             <td class="link">&nbsp;</td>
         </tr>
-        #dentries%direntry#
-        #fentries%fileentry#
+        {dentries%direntry}
+        {fentries%fileentry}
     </table>
 
-#footer#
+{footer}
--- a/templates/monoblue/map	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/monoblue/map	Wed Jul 08 17:03:16 2009 -0700
@@ -11,56 +11,206 @@
 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>'
+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>'
+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>'
+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>'
+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>'
+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>'
+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# ago</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>'
-branchentry = '<tr class="parity{parity}"><td class="nowrap">{date|age} ago</td><td><a href="{url}rev/{node|short}{sessionvars%urlparameter}">{node|short}</a></td><td>{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>'
+tagentry = '
+  <tr class="parity{parity}">
+    <td class="nowrap">{date|age} ago</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} ago</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# ago</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# ago</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} ago</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'
+shortlogentry = '
+  <tr class="parity{parity}">
+    <td class="nowrap">{date|age} ago</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} ago</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} ago</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#" />'
+urlparameter = '{separator}{name}={value|urlescape}'
+hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
 graph = graph.tmpl
--- a/templates/monoblue/notfound.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/monoblue/notfound.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,13 +1,13 @@
 {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#"/>
+    <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>
+        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / Not found: {repo|escape}</h1>
 
         <form action="{url}log">
             {sessionvars%hiddenformentry}
@@ -23,7 +23,8 @@
             <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}file/#node|short#{sessionvars%urlparameter}">files</a>#archives%archiveentry#</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>
 
--- a/templates/monoblue/search.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/monoblue/search.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,19 +1,19 @@
-#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#"/>
+{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>
+        <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>
+                <dd><input type="text" name="rev" value="{query|escape}" /></dd>
             </dl>
         </form>
 
@@ -23,11 +23,12 @@
             <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}file/#node|short#{sessionvars%urlparameter}">files</a>#archives%archiveentry#
+            <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#
+    <h2 class="no-link no-border">searching for {query|escape}</h2>
+    {entries}
 
-#footer#
+{footer}
--- a/templates/monoblue/shortlog.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/monoblue/shortlog.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,13 +1,13 @@
-#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#"/>
+{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>
+        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / shortlog</h1>
 
         <form action="{url}log">
             {sessionvars%hiddenformentry}
@@ -23,18 +23,19 @@
             <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}file/#node|short#{sessionvars%urlparameter}">files</a>#archives%archiveentry#</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#
+{entries%shortlogentry}
     </table>
 
     <div class="page-path">
-#changenav%navshortentry#
+{changenav%navshortentry}
     </div>
 
-#footer#
+{footer}
--- a/templates/monoblue/summary.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/monoblue/summary.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,13 +1,13 @@
-#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#"/>
+{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>
+        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / summary</h1>
 
         <form action="{url}log">
             {sessionvars%hiddenformentry}
@@ -23,25 +23,26 @@
             <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}file/#node|short#{sessionvars%urlparameter}">files</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>
+        <dd>{repo|escape}</dd>
         <dt>description</dt>
-        <dd>#desc#</dd>
+        <dd>{desc}</dd>
         <dt>owner</dt>
-        <dd>#owner|obfuscate#</dd>
+        <dd>{owner|obfuscate}</dd>
         <dt>last change</dt>
-        <dd>#lastchange|rfc822date#</dd>
+        <dd>{lastchange|rfc822date}</dd>
     </dl>
 
     <h2><a href="{url}shortlog{sessionvars%urlparameter}">Changes</a></h2>
     <table>
-#shortlog#
+{shortlog}
         <tr class="light">
             <td colspan="4"><a class="list" href="{url}shortlog{sessionvars%urlparameter}">...</a></td>
         </tr>
@@ -49,7 +50,7 @@
 
     <h2><a href="{url}tags{sessionvars%urlparameter}">Tags</a></h2>
     <table>
-#tags#
+{tags}
         <tr class="light">
             <td colspan="3"><a class="list" href="{url}tags{sessionvars%urlparameter}">...</a></td>
         </tr>
@@ -62,4 +63,4 @@
           <td colspan="4"><a class="list"  href="#">...</a></td>
         </tr>
     </table>
-#footer#
+{footer}
--- a/templates/monoblue/tags.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/monoblue/tags.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,13 +1,13 @@
-#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#"/>
+{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>
+        <h1><a href="{url}summary{sessionvars%urlparameter}">{repo|escape}</a> / Tags</h1>
 
         <form action="{url}log">
             {sessionvars%hiddenformentry}
@@ -23,13 +23,14 @@
             <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}file/#node|short#{sessionvars%urlparameter}">files</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">tags</h2>
     <table cellspacing="0">
-#entries%tagentry#
+{entries%tagentry}
     </table>
 
-#footer# _______________________________________________
+{footer}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/templates/paper/branches.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -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}
--- a/templates/paper/changeset.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/paper/changeset.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -5,13 +5,14 @@
 <div class="container">
 <div class="menu">
 <div class="logo">
-<a href="http://www.selenic.com/mercurial/">
+<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>
--- a/templates/paper/error.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/paper/error.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -6,13 +6,14 @@
 <div class="container">
 <div class="menu">
 <div class="logo">
-<a href="http://www.selenic.com/mercurial/">
+<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>
 
--- a/templates/paper/fileannotate.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/paper/fileannotate.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -6,13 +6,14 @@
 <div class="container">
 <div class="menu">
 <div class="logo">
-<a href="http://www.selenic.com/mercurial/">
+<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>
@@ -61,8 +62,6 @@
 {changesettag}
 </table>
 
-<br/>
-
 <div class="overflow">
 <table class="bigtable">
 <tr>
--- a/templates/paper/filediff.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/paper/filediff.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -6,13 +6,14 @@
 <div class="container">
 <div class="menu">
 <div class="logo">
-<a href="http://www.selenic.com/mercurial/">
+<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>
--- a/templates/paper/filelog.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/paper/filelog.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -10,13 +10,14 @@
 <div class="container">
 <div class="menu">
 <div class="logo">
-<a href="http://www.selenic.com/mercurial/">
+<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>
--- a/templates/paper/filerevision.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/paper/filerevision.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -6,13 +6,14 @@
 <div class="container">
 <div class="menu">
 <div class="logo">
-<a href="http://www.selenic.com/mercurial/">
+<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>
--- a/templates/paper/graph.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/paper/graph.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -11,13 +11,14 @@
 <div class="container">
 <div class="menu">
 <div class="logo">
-<a href="http://www.selenic.com/mercurial/">
+<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>
--- a/templates/paper/index.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/paper/index.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -5,7 +5,7 @@
 
 <div class="container">
 <div class="menu">
-<a href="http://www.selenic.com/mercurial/">
+<a href="http://mercurial.selenic.com/">
 <img src="{staticurl}hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
 </div>
 <div class="main">
--- a/templates/paper/manifest.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/paper/manifest.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -6,13 +6,14 @@
 <div class="container">
 <div class="menu">
 <div class="logo">
-<a href="http://www.selenic.com/mercurial/">
+<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>
--- a/templates/paper/map	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/paper/map	Wed Jul 08 17:03:16 2009 -0700
@@ -23,25 +23,59 @@
 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>'
+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>'
+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>'
+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}">{lines}</div>'
+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>'
+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> '
 
@@ -49,25 +83,108 @@
 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>'
+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>'
+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>'
+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} ago</td><td class="indexlinks">{archives%indexarchiveentry}</td></tr>\n'
+
+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 = index.tmpl
-archiveentry = '<li><a href="{url}archive/{node|short}{extension|urlescape}">{type|escape}</a></li>'
+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}'
--- a/templates/paper/search.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/paper/search.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -6,13 +6,14 @@
 <div class="container">
 <div class="menu">
 <div class="logo">
-<a href="http://www.selenic.com/mercurial/">
+<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>
 
--- a/templates/paper/shortlog.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/paper/shortlog.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -10,13 +10,14 @@
 <div class="container">
 <div class="menu">
 <div class="logo">
-<a href="http://www.selenic.com/mercurial/">
+<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>
--- a/templates/paper/tags.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/paper/tags.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -10,13 +10,14 @@
 <div class="container">
 <div class="menu">
 <div class="logo">
-<a href="http://www.selenic.com/mercurial/">
+<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>
 
--- a/templates/raw/changeset.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/raw/changeset.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,9 +1,9 @@
-#header#
+{header}
 # HG changeset patch
-# User #author#
-# Date #date|hgdate#
-# Node ID #node#
-#parent%changesetparent#
-#desc#
+# User {author}
+# Date {date|hgdate}
+# Node ID {node}
+{parent%changesetparent}
+{desc}
 
-#diff#
+{diff}
--- a/templates/raw/error.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/raw/error.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,2 +1,2 @@
-#header#
-error: #error#
+{header}
+error: {error}
--- a/templates/raw/fileannotate.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/raw/fileannotate.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,5 +1,5 @@
-#header#
-#annotate%annotateline#
-#footer#
+{header}
+{annotate%annotateline}
+{footer}
 
 
--- a/templates/raw/filediff.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/raw/filediff.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,5 +1,5 @@
-#header#
-#diff#
-#footer#
+{header}
+{diff}
+{footer}
 
 
--- a/templates/raw/index.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/raw/index.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,2 +1,2 @@
-#header#
-#entries%indexentry#
+{header}
+{entries%indexentry}
--- a/templates/raw/map	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/raw/map	Wed Jul 08 17:03:16 2009 -0700
@@ -2,15 +2,15 @@
 header = ''
 footer = ''
 changeset = changeset.tmpl
-difflineplus = '#line#'
-difflineminus = '#line#'
-difflineat = '#line#'
-diffline = '#line#'
-changesetparent = '# Parent  #node#'
-changesetchild = '# Child   #node#'
+difflineplus = '{line}'
+difflineminus = '{line}'
+difflineat = '{line}'
+diffline = '{line}'
+changesetparent = '# Parent  {node}'
+changesetchild = '# Child   {node}'
 filenodelink = ''
-fileline = '#line#'
-diffblock = '#lines#'
+fileline = '{line}'
+diffblock = '{lines}'
 filediff = filediff.tmpl
 fileannotate = fileannotate.tmpl
 annotateline = '{author|user}@{rev}: {line}'
@@ -20,4 +20,4 @@
 index = index.tmpl
 notfound = notfound.tmpl
 error = error.tmpl
-indexentry = '#url#\n'
+indexentry = '{url}\n'
--- a/templates/raw/notfound.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/raw/notfound.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,2 +1,2 @@
-#header#
-error: repository #repo# not found
+{header}
+error: repository {repo} not found
--- a/templates/rss/changelog.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/rss/changelog.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,6 +1,6 @@
-#header#
-    <title>#repo|escape# Changelog</title>
-    <description>#repo|escape# Changelog</description>
-    #entries%changelogentry#
+{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 Jul 08 17:01:18 2009 -0700
+++ b/templates/rss/changelogentry.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,7 +1,7 @@
 <item>
-    <title>#desc|strip|firstline|strip|escape#</title>
+    <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>
+    <description><![CDATA[{desc|strip|escape|addbreaks|nonempty}]]></description>
+    <author>{author|obfuscate}</author>
+    <pubDate>{date|rfc822date}</pubDate>
 </item>
--- a/templates/rss/error.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/rss/error.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -4,7 +4,7 @@
     <item>
       <title>Error</title>
       <description>{error|escape}</description>
-      <guid>http://www.selenic.com/mercurial/#error</guid>
+      <guid>http://mercurial.selenic.com/#error</guid>
     </item>
   </channel>
 </rss>
--- a/templates/rss/filelog.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/rss/filelog.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,6 +1,6 @@
-#header#
-    <title>#repo|escape#: #file|escape# history</title>
-    <description>#file|escape# revision history</description>
-    #entries%filelogentry#
+{header}
+    <title>{repo|escape}: {file|escape} history</title>
+    <description>{file|escape} revision history</description>
+    {entries%filelogentry}
   </channel>
 </rss>
--- a/templates/rss/filelogentry.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/rss/filelogentry.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,7 +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>
+    <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/tagentry.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/rss/tagentry.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,6 +1,6 @@
 <item>
-    <title>#tag|escape#</title>
+    <title>{tag|escape}</title>
     <link>{urlbase}{url}rev/{node|short}</link>
-    <description><![CDATA[#tag|strip|escape|addbreaks#]]></description>
-    <pubDate>#date|rfc822date#</pubDate>
+    <description><![CDATA[{tag|strip|escape|addbreaks}]]></description>
+    <pubDate>{date|rfc822date}</pubDate>
 </item>
--- a/templates/rss/tags.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/rss/tags.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,6 +1,6 @@
-#header#
-    <title>#repo|escape#: tags </title>
-    <description>#repo|escape# tag history</description>
-    #entriesnotip%tagentry#
+{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/templates/spartan/branches.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -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}
--- a/templates/spartan/changelog.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/spartan/changelog.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,42 +1,43 @@
-#header#
-<title>#repo|escape#: changelog</title>
+{header}
+<title>{repo|escape}: changelog</title>
 <link rel="alternate" type="application/atom+xml"
-   href="#url#atom-log" title="Atom feed for #repo|escape#">
+   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#">
+   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#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>
+<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>
+<h2>changelog for {repo|escape}</h2>
 
-<form action="#url#log">
+<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>
+navigate: <small class="navigate">{changenav%naventry}</small>
 </p>
 </form>
 
-#entries%changelogentry#
+{entries%changelogentry}
 
-<form action="#url#log">
+<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>
+navigate: <small class="navigate">{changenav%naventry}</small>
 </p>
 </form>
 
-#footer#
+{footer}
--- a/templates/spartan/changelogentry.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/spartan/changelogentry.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,25 +1,25 @@
-<table class="logEntry parity#parity#">
+<table class="logEntry parity{parity}">
  <tr>
-  <th class="age">#date|age# ago:</th>
-  <th class="firstline">#desc|strip|firstline|escape|nonempty#</th>
+  <th class="age">{date|age} ago:</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>
+  <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#
+ {parent%changelogparent}
+ {child%changelogchild}
+ {changelogtag}
  <tr>
   <th class="author">author:</th>
-  <td class="author">#author|obfuscate#</td>
+  <td class="author">{author|obfuscate}</td>
  </tr>
  <tr>
   <th class="date">date:</th>
-  <td class="date">#date|date#</td>
+  <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>
+  <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 Jul 08 17:01:18 2009 -0700
+++ b/templates/spartan/changeset.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,50 +1,51 @@
-#header#
-<title>#repo|escape#: changeset #node|short#</title>
+{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#file/#node|short#{sessionvars%urlparameter}">files</a>
-<a href="#url#raw-rev/#node|short#">raw</a>
-#archives%archiveentry#
+<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>
+<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>
+ <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#
+{parent%changesetparent}
+{child%changesetchild}
+{changesettag}
 <tr>
  <th class="author">author:</th>
- <td class="author">#author|obfuscate#</td>
+ <td class="author">{author|obfuscate}</td>
 </tr>
 <tr>
  <th class="date">date:</th>
- <td class="date">#date|date# (#date|age# ago)</td>
+ <td class="date">{date|date} ({date|age} ago)</td>
 </tr>
 <tr>
  <th class="files">files:</th>
- <td class="files">#files#</td>
+ <td class="files">{files}</td>
 </tr>
 <tr>
  <th class="description">description:</th>
- <td class="description">#desc|strip|escape|addbreaks|nonempty#</td>
+ <td class="description">{desc|strip|escape|addbreaks|nonempty}</td>
 </tr>
 </table>
 
 <div id="changesetDiff">
-#diff#
+{diff}
 </div>
 
-#footer#
+{footer}
 
 
--- a/templates/spartan/error.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/spartan/error.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,4 +1,4 @@
-#header#
+{header}
 <title>Mercurial Error</title>
 </head>
 <body>
@@ -9,7 +9,7 @@
 An error occurred while processing your request:
 </p>
 <p>
-#error|escape#
+{error|escape}
 </p>
 
-#footer#
+{footer}
--- a/templates/spartan/fileannotate.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/spartan/fileannotate.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,38 +1,39 @@
-#header#
-<title>#repo|escape#: #file|escape# annotate</title>
+{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#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>
+<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>
+<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#
+ <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>
+ <td>{author|obfuscate}</td></tr>
 <tr>
  <td class="metatag">date:</td>
- <td>#date|date# (#date|age# ago)</td>
+ <td>{date|date} ({date|age} ago)</td>
 </tr>
 <tr>
  <td class="metatag">permissions:</td>
- <td>#permissions|permissions#</td>
+ <td>{permissions|permissions}</td>
 </tr>
 <tr>
   <td class="metatag">description:</td>
@@ -40,10 +41,8 @@
 </tr>
 </table>
 
-<br/>
-
 <table cellspacing="0" cellpadding="0">
-#annotate%annotateline#
+{annotate%annotateline}
 </table>
 
-#footer#
+{footer}
--- a/templates/spartan/filediff.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/spartan/filediff.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,35 +1,36 @@
-#header#
-<title>#repo|escape#: #file|escape# diff</title>
+{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#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>
+<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>
+<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>
+ <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#
+{parent%filediffparent}
+{child%filediffchild}
 </table>
 
 <div id="fileDiff">
-#diff#
+{diff}
 </div>
 
-#footer#
+{footer}
 
 
--- a/templates/spartan/filelog.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/spartan/filelog.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,27 +1,28 @@
-#header#
-<title>#repo|escape#: #file|escape# history</title>
+{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#">
+   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#">
+   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#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>
+<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>
+<h2>{file|escape} revision history</h2>
 
 <p>navigate: <small class="navigate">{nav%filenaventry}</small></p>
 
-#entries%filelogentry#
+{entries%filelogentry}
 
-#footer#
+{footer}
--- a/templates/spartan/filelogentry.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/spartan/filelogentry.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,24 +1,24 @@
-<table class="logEntry parity#parity#">
+<table class="logEntry parity{parity}">
  <tr>
-  <th class="age">#date|age# ago:</th>
-  <th class="firstline"><a href="#url#rev/#node|short#{sessionvars%urlparameter}">#desc|strip|firstline|escape|nonempty#</a></th>
+  <th class="age">{date|age} ago:</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>
+  <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>
+   <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#
+ {rename%filelogrename}
  <tr>
   <th class="author">author:</th>
-  <td class="author">#author|obfuscate#</td>
+  <td class="author">{author|obfuscate}</td>
  </tr>
  <tr>
   <th class="date">date:</th>
-  <td class="date">#date|date#</td>
+  <td class="date">{date|date}</td>
  </tr>
 </table>
 
--- a/templates/spartan/filerevision.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/spartan/filerevision.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,37 +1,38 @@
-#header#
-<title>#repo|escape#:#file|escape#</title>
+{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#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>
+<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>
+<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#
+ <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>
+ <td>{author|obfuscate}</td></tr>
 <tr>
  <td class="metatag">date:</td>
- <td>#date|date# (#date|age# ago)</td></tr>
+ <td>{date|date} ({date|age} ago)</td></tr>
 <tr>
  <td class="metatag">permissions:</td>
- <td>#permissions|permissions#</td></tr>
+ <td>{permissions|permissions}</td></tr>
 <tr>
   <td class="metatag">description:</td>
   <td>{desc|strip|escape|addbreaks|nonempty}</td>
@@ -39,7 +40,7 @@
 </table>
 
 <pre>
-#text%fileline#
+{text%fileline}
 </pre>
 
-#footer#
+{footer}
--- a/templates/spartan/footer.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/spartan/footer.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,7 +1,7 @@
-#motd#
+{motd}
 <div class="logo">
-<a href="http://www.selenic.com/mercurial/">
-<img src="#staticurl#hglogo.png" width=75 height=90 border=0 alt="mercurial"></a>
+<a href="http://mercurial.selenic.com/">
+<img src="{staticurl}hglogo.png" width=75 height=90 border=0 alt="mercurial"></a>
 </div>
 
 </body>
--- a/templates/spartan/graph.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/spartan/graph.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,28 +1,29 @@
-#header#
-<title>#repo|escape#: graph</title>
+{header}
+<title>{repo|escape}: graph</title>
 <link rel="alternate" type="application/atom+xml"
-   href="#url#atom-tags" title="Atom feed for #repo|escape#: tags">
+   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]-->
+   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#file/#node|short#/{sessionvars%urlparameter}">files</a>
+<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">
+<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>
+navigate: <small class="navigate">{changenav%navgraphentry}</small>
 </p>
 </form>
 
@@ -30,11 +31,11 @@
 
 <div id="wrapper">
 <ul id="nodebgs"></ul>
-<canvas id="graph" width="224" height="#canvasheight#"></canvas>
+<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" src="{staticurl}graph.js"></script>
 <script type="text/javascript">
 <!-- hide script content
 
@@ -83,13 +84,13 @@
 // stop hiding script -->
 </script>
 
-<form action="#url#log">
+<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>
+navigate: <small class="navigate">{changenav%navgraphentry}</small>
 </p>
 </form>
 
-#footer#
+{footer}
--- a/templates/spartan/header.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/spartan/header.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,6 +1,6 @@
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html>
 <head>
-<link rel="icon" href="#staticurl#hgicon.png" type="image/png">
+<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" />
+<link rel="stylesheet" href="{staticurl}style.css" type="text/css" />
--- a/templates/spartan/index.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/spartan/index.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,4 +1,4 @@
-#header#
+{header}
 <title>Mercurial repositories index</title>
 </head>
 <body>
@@ -7,13 +7,13 @@
 
 <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><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#
+    {entries%indexentry}
 </table>
 
-#footer#
+{footer}
--- a/templates/spartan/manifest.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/spartan/manifest.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,27 +1,28 @@
-#header#
-<title>#repo|escape#: files for changeset #node|short#</title>
+{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#rev/#node|short#{sessionvars%urlparameter}">changeset</a>
-#archives%archiveentry#
+<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>
+<h2>files for changeset {node|short}: {path|escape}</h2>
 
 <table cellpadding="0" cellspacing="0">
-<tr class="parity#upparity#">
+<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>
+  <td><a href="{url}file/{node|short}{up|urlescape}{sessionvars%urlparameter}">[up]</a>
 </tr>
-#dentries%direntry#
-#fentries%fileentry#
+{dentries%direntry}
+{fentries%fileentry}
 </table>
-#footer#
+{footer}
--- a/templates/spartan/map	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/spartan/map	Wed Jul 08 17:03:16 2009 -0700
@@ -11,50 +11,168 @@
 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> '
+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>'
+
+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>#line|escape#</div>'
+fileline = '<div class="parity{parity}"><a class="lineno" href="#{lineid}" id="{lineid}">{linenumber}</a>&nbsp;{line|escape}</div>'
 filelogentry = filelogentry.tmpl
-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>#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>'
+
+# 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>'
+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>'
-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>'
+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> '
+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#" />'
+urlparameter = '{separator}{name}={value|urlescape}'
+hiddenformentry = '<input type="hidden" name="{name}" value="{value|escape}" />'
--- a/templates/spartan/notfound.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/spartan/notfound.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,12 +1,12 @@
-#header#
+{header}
 <title>Mercurial repository not found</title>
 </head>
 <body>
 
 <h2>Mercurial repository not found</h2>
 
-The specified repository "#repo|escape#" is unknown, sorry.
+The specified repository "{repo|escape}" is unknown, sorry.
 
 Please go back to the main repository list page.
 
-#footer#
+{footer}
--- a/templates/spartan/search.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/spartan/search.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,35 +1,36 @@
-#header#
-<title>#repo|escape#: searching for #query|escape#</title>
+{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#file/#node|short#{sessionvars%urlparameter}">files</a>
-#archives%archiveentry#
+<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>
+<h2>searching for {query|escape}</h2>
 
 <form>
 {sessionvars%hiddenformentry}
 <p>
 search:
-<input name="rev" type="text" width="30" value="#query|escape#">
+<input name="rev" type="text" width="30" value="{query|escape}">
 </p>
 </form>
 
-#entries#
+{entries}
 
 <form>
 {sessionvars%hiddenformentry}
 <p>
 search:
-<input name="rev" type="text" width="30" value="#query|escape#">
+<input name="rev" type="text" width="30" value="{query|escape}">
 </p>
 </form>
 
-#footer#
+{footer}
--- a/templates/spartan/shortlog.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/spartan/shortlog.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,42 +1,43 @@
-#header#
-<title>#repo|escape#: shortlog</title>
+{header}
+<title>{repo|escape}: shortlog</title>
 <link rel="alternate" type="application/atom+xml"
-   href="#url#atom-log" title="Atom feed for #repo|escape#">
+   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#">
+   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#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>
+<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>
+<h2>shortlog for {repo|escape}</h2>
 
-<form action="#url#log">
+<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>
+navigate: <small class="navigate">{changenav%navshortentry}</small>
 </p>
 </form>
 
-#entries%shortlogentry#
+{entries%shortlogentry}
 
-<form action="#url#log">
+<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>
+navigate: <small class="navigate">{changenav%navshortentry}</small>
 </p>
 </form>
 
-#footer#
+{footer}
--- a/templates/spartan/shortlogentry.tmpl	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/spartan/shortlogentry.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,7 +1,7 @@
-<table class="slogEntry parity#parity#">
+<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>
+  <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 Jul 08 17:01:18 2009 -0700
+++ b/templates/spartan/tags.tmpl	Wed Jul 08 17:03:16 2009 -0700
@@ -1,25 +1,26 @@
-#header#
-<title>#repo|escape#: tags</title>
+{header}
+<title>{repo|escape}: tags</title>
 <link rel="alternate" type="application/atom+xml"
-   href="#url#atom-tags" title="Atom feed for #repo|escape#: tags">
+   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">
+   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#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>
+<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#
+{entries%tagentry}
 </ul>
 
-#footer#
+{footer}
--- a/templates/static/style-coal.css	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/static/style-coal.css	Wed Jul 08 17:03:16 2009 -0700
@@ -18,7 +18,7 @@
 }
 
 #.main {
-  width:98%;
+  width: 98%;
 }
 
 .overflow {
@@ -106,7 +106,7 @@
 .navigate {
   text-align: right;
   font-size: 60%;
-  margin: 1em 0 1em 0;
+  margin: 1em 0;
 }
 
 .tag {
@@ -162,14 +162,12 @@
 }
 
 .bigtable td {
-  padding: 1px 4px 1px 4px;
   vertical-align: top;
 }
 
 .bigtable th {
-  padding: 1px 4px 1px 4px;
+  padding: 1px 4px;
   border-bottom: 1px solid #999;
-  font-size: smaller;
 }
 .bigtable tr { border: none; }
 .bigtable .age { width: 6em; }
@@ -187,9 +185,10 @@
 .source, .sourcefirst, .sourcelast {
   font-family: monospace;
   white-space: pre;
+  padding: 1px 4px;
   font-size: 90%;
 }
-.sourcefirst { border-bottom: 1px solid #999; font-weight: bold; font-size: smaller; }
+.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; }
@@ -197,6 +196,8 @@
 .fileline { font-family: monospace; }
 .fileline img { border: 0; }
 
+.tagEntry .closed { color: #99f; }
+
 /* Changeset entry */
 #changesetEntry {
   border-collapse: collapse;
@@ -206,7 +207,7 @@
 }
 
 #changesetEntry th {
-  padding: 1px 4px 1px 4px;
+  padding: 1px 4px;
   width: 4em;
   text-align: right;
   font-weight: normal;
@@ -221,6 +222,7 @@
   padding: .3em;
 }
 
+/* Graph */
 div#wrapper {
 	position: relative;
 	border-top: 1px solid black;
--- a/templates/static/style-paper.css	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/static/style-paper.css	Wed Jul 08 17:03:16 2009 -0700
@@ -54,7 +54,7 @@
   font-weight: bold;
 }
 
-.menu img { 
+.menu img {
   width: 75px;
   height: 90px;
   border: 0;
@@ -97,7 +97,7 @@
 .navigate {
   text-align: right;
   font-size: 60%;
-  margin: 1em 0 1em 0;
+  margin: 1em 0;
 }
 
 .tag {
@@ -153,14 +153,12 @@
 }
 
 .bigtable td {
-  padding: 1px 4px 1px 4px;
   vertical-align: top;
 }
 
 .bigtable th {
-  padding: 1px 4px 1px 4px;
+  padding: 1px 4px;
   border-bottom: 1px solid #999;
-  font-size: smaller;
 }
 .bigtable tr { border: none; }
 .bigtable .age { width: 6em; }
@@ -176,9 +174,10 @@
 .source, .sourcefirst, .sourcelast {
   font-family: monospace;
   white-space: pre;
+  padding: 1px 4px;
   font-size: 90%;
 }
-.sourcefirst { border-bottom: 1px solid #999; font-weight: bold; font-size: smaller; }
+.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; }
@@ -186,6 +185,8 @@
 .fileline { font-family: monospace; }
 .fileline img { border: 0; }
 
+.tagEntry .closed { color: #99f; }
+
 /* Changeset entry */
 #changesetEntry {
   border-collapse: collapse;
@@ -195,7 +196,7 @@
 }
 
 #changesetEntry th {
-  padding: 1px 4px 1px 4px;
+  padding: 1px 4px;
   width: 4em;
   text-align: right;
   font-weight: normal;
@@ -226,6 +227,14 @@
 	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;
@@ -237,14 +246,6 @@
 	height: 39px;
 }
 
-ul#graphnodes {
-	position: absolute;
-	z-index: 10;
-	top: -1.0em;
-	list-style: none inside none;
-	padding: 0;
-}
-
 ul#graphnodes li .info {
 	display: block;
 	font-size: 70%;
--- a/templates/static/style.css	Wed Jul 08 17:01:18 2009 -0700
+++ b/templates/static/style.css	Wed Jul 08 17:03:16 2009 -0700
@@ -2,16 +2,16 @@
 .age { white-space:nowrap; }
 .date { white-space:nowrap; }
 .indexlinks { white-space:nowrap; }
-.parity0 { background-color: #dddddd; }
-.parity1 { background-color: #eeeeee; }
-.lineno { width: 60px; color: #aaaaaa; font-size: smaller;
-          text-align: right; padding-right:1em; }
+.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: #666666;
+  background-color: #666;
   padding: 2pt;
   color: white;
   font-family: sans;
@@ -25,7 +25,7 @@
 }
 
 .metatag {
-  background-color: #888888;
+  background-color: #888;
   color: white;
   text-align: right;
 }
--- a/tests/README	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/README	Wed Jul 08 17:03:16 2009 -0700
@@ -3,5 +3,5 @@
 cd tests/
 python run-tests.py
 
-See http://www.selenic.com/mercurial/wiki/index.cgi/WritingTests for
+See http://mercurial.selenic.com/wiki/WritingTests for
 more information on writing tests.
--- a/tests/bzr-definitions	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/bzr-definitions	Wed Jul 08 17:03:16 2009 -0700
@@ -2,14 +2,14 @@
 
 "$TESTDIR/hghave" bzr || exit 80
 
-export TERM=dumb
+TERM=dumb; export TERM
 echo '[extensions]' >> $HGRCPATH
 echo 'convert = ' >> $HGRCPATH
 echo 'hgext.graphlog = ' >> $HGRCPATH
 
 glog()
 {
-    hg glog --template '#rev# "#desc|firstline#" files: #files#\n' "$@"
+    hg glog --template '{rev} "{desc|firstline}" files: {files}\n' "$@"
 }
 
 manifest()
--- a/tests/get-with-headers.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/get-with-headers.py	Wed Jul 08 17:03:16 2009 -0700
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 
-__doc__ = """This does HTTP get requests given a host:port and path and returns
+"""This does HTTP GET requests given a host:port and path and returns
 a subset of the headers plus the body of the result."""
 
 import httplib, sys, re
Binary file tests/gpg/pubring.gpg has changed
Binary file tests/gpg/random_seed has changed
Binary file tests/gpg/secring.gpg has changed
Binary file tests/gpg/trustdb.gpg has changed
--- a/tests/hghave	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/hghave	Wed Jul 08 17:03:16 2009 -0700
@@ -146,6 +146,9 @@
 def has_tla():
     return matchoutput('tla --version 2>&1', r'The GNU Arch Revision')
 
+def has_gpg():
+    return matchoutput('gpg --version 2>&1', r'GnuPG')
+
 def has_unix_permissions():
     d = tempfile.mkdtemp(prefix=tempprefix, dir=".")
     try:
@@ -183,6 +186,7 @@
     "execbit": (has_executablebit, "executable bit"),
     "fifo": (has_fifo, "named pipes"),
     "git": (has_git, "git command line client"),
+    "gpg": (has_gpg, "gpg client"),
     "hotshot": (has_hotshot, "python hotshot module"),
     "icasefs": (has_icasefs, "case insensitive file system"),
     "inotify": (has_inotify, "inotify extension support"),
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/printrepr.py	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,11 @@
+#!/usr/bin/env python
+#
+# 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.
+
+"""prints repr(sys.stdin) but preserves newlines in input"""
+
+import sys
+print repr(sys.stdin.read())[1:-1].replace('\\n', '\n'),
--- a/tests/run-tests.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/run-tests.py	Wed Jul 08 17:03:16 2009 -0700
@@ -7,6 +7,38 @@
 # This software may be used and distributed according to the terms of the
 # GNU General Public License version 2, incorporated herein by reference.
 
+# Modifying this script is tricky because it has many modes:
+#   - serial (default) vs parallel (-jN, N > 1)
+#   - no coverage (default) vs coverage (-c, -C, -s)
+#   - temp install (default) vs specific hg script (--with-hg, --local)
+#   - tests are a mix of shell scripts and Python scripts
+#
+# If you change this script, it is recommended that you ensure you
+# haven't broken it by running it in various modes with a representative
+# sample of test scripts.  For example:
+#
+#  1) serial, no coverage, temp install:
+#      ./run-tests.py test-s*
+#  2) serial, no coverage, local hg:
+#      ./run-tests.py --local test-s*
+#  3) serial, coverage, temp install:
+#      ./run-tests.py -c test-s*
+#  4) serial, coverage, local hg:
+#      ./run-tests.py -c --local test-s*      # unsupported
+#  5) parallel, no coverage, temp install:
+#      ./run-tests.py -j2 test-s*
+#  6) parallel, no coverage, local hg:
+#      ./run-tests.py -j2 --local test-s*
+#  7) parallel, coverage, temp install:
+#      ./run-tests.py -j2 -c test-s*          # currently broken
+#  8) parallel, coverage, local install
+#      ./run-tests.py -j2 -c --local test-s*  # unsupported (and broken)
+#
+# (You could use any subset of the tests: test-s* happens to match
+# enough that it's worth doing parallel runs, few enough that it
+# completes fairly quickly, includes both shell and Python scripts, and
+# includes some scripts that run daemon processes.)
+
 import difflib
 import errno
 import optparse
@@ -34,7 +66,6 @@
 SKIPPED_PREFIX = 'skipped: '
 FAILED_PREFIX  = 'hghave check failed: '
 PYTHON = sys.executable
-hgpkg = None
 
 requiredtools = ["python", "diff", "grep", "unzip", "gunzip", "bunzip2", "sed"]
 
@@ -81,7 +112,11 @@
     parser.add_option("-n", "--nodiff", action="store_true",
         help="skip showing test changes")
     parser.add_option("--with-hg", type="string",
-        help="test existing install at given location")
+        metavar="HG",
+        help="test using specified hg script rather than a "
+             "temporary installation")
+    parser.add_option("--local", action="store_true",
+        help="shortcut for --with-hg=<testdir>/../hg")
     parser.add_option("--pure", action="store_true",
         help="use pure Python code instead of C extensions")
 
@@ -90,13 +125,40 @@
     parser.set_defaults(**defaults)
     (options, args) = parser.parse_args()
 
-    global vlog
+    if options.with_hg:
+        if not (os.path.isfile(options.with_hg) and
+                os.access(options.with_hg, os.X_OK)):
+            parser.error('--with-hg must specify an executable hg script')
+        if not os.path.basename(options.with_hg) == 'hg':
+            sys.stderr.write('warning: --with-hg should specify an hg script')
+    if options.local:
+        testdir = os.path.dirname(os.path.realpath(sys.argv[0]))
+        hgbin = os.path.join(os.path.dirname(testdir), 'hg')
+        if not os.access(hgbin, os.X_OK):
+            parser.error('--local specified, but %r not found or not executable'
+                         % hgbin)
+        options.with_hg = hgbin
+
     options.anycoverage = (options.cover or
                            options.cover_stdlib or
                            options.annotate)
 
+    if options.anycoverage and options.with_hg:
+        # I'm not sure if this is a fundamental limitation or just a
+        # bug.  But I don't want to waste people's time and energy doing
+        # test runs that don't give the results they want.
+        parser.error("sorry, coverage options do not work when --with-hg "
+                     "or --local specified")
+
+    global vlog
     if options.verbose:
+        if options.jobs > 1 or options.child is not None:
+            pid = "[%d]" % os.getpid()
+        else:
+            pid = None
         def vlog(*msg):
+            if pid:
+                print pid,
             for m in msg:
                 print m,
             print
@@ -178,8 +240,7 @@
 
 def cleanup(options):
     if not options.keep_tmpdir:
-        if options.verbose:
-            print "# Cleaning up HGTMP", HGTMP
+        vlog("# Cleaning up HGTMP", HGTMP)
         shutil.rmtree(HGTMP, True)
 
 def usecorrectpython():
@@ -200,13 +261,14 @@
         shutil.copymode(sys.executable, mypython)
 
 def installhg(options):
-    global PYTHON
     vlog("# Performing temporary installation of HG")
     installerrs = os.path.join("tests", "install.err")
     pure = options.pure and "--pure" or ""
 
     # Run installer in hg root
-    os.chdir(os.path.join(os.path.dirname(sys.argv[0]), '..'))
+    script = os.path.realpath(sys.argv[0])
+    hgroot = os.path.dirname(os.path.dirname(script))
+    os.chdir(hgroot)
     cmd = ('%s setup.py %s clean --all'
            ' install --force --prefix="%s" --install-lib="%s"'
            ' --install-scripts="%s" >%s 2>&1'
@@ -223,19 +285,7 @@
         sys.exit(1)
     os.chdir(TESTDIR)
 
-    os.environ["PATH"] = "%s%s%s" % (BINDIR, os.pathsep, os.environ["PATH"])
-
-    pydir = os.pathsep.join([PYTHONDIR, TESTDIR])
-    pythonpath = os.environ.get("PYTHONPATH")
-    if pythonpath:
-        pythonpath = pydir + os.pathsep + pythonpath
-    else:
-        pythonpath = pydir
-    os.environ["PYTHONPATH"] = pythonpath
-
     usecorrectpython()
-    global hgpkg
-    hgpkg = _hgpath()
 
     vlog("# Installing dummy diffstat")
     f = open(os.path.join(BINDIR, 'diffstat'), 'w')
@@ -259,42 +309,40 @@
         f = open(os.path.join(BINDIR, 'hg'), 'w')
         f.write('#!' + sys.executable + '\n')
         f.write('import sys, os; os.execv(sys.executable, [sys.executable, '
-                '"%s", "-x", "%s"] + sys.argv[1:])\n' %
+                '"%s", "-x", "-p", "%s"] + sys.argv[1:])\n' %
                 (os.path.join(TESTDIR, 'coverage.py'),
                  os.path.join(BINDIR, '_hg.py')))
         f.close()
         os.chmod(os.path.join(BINDIR, 'hg'), 0700)
-        PYTHON = '"%s" "%s" -x' % (sys.executable,
-                                   os.path.join(TESTDIR,'coverage.py'))
-
-def _hgpath():
-    cmd = '%s -c "import mercurial; print mercurial.__path__[0]"'
-    hgpath = os.popen(cmd % PYTHON)
-    path = hgpath.read().strip()
-    hgpath.close()
-    return path
 
 def outputcoverage(options):
-    vlog("# Producing coverage report")
+
+    vlog('# Producing coverage report')
+    os.chdir(PYTHONDIR)
+
+    def covrun(*args):
+        start = sys.executable, os.path.join(TESTDIR, 'coverage.py')
+        cmd = '"%s" "%s" %s' % (start[0], start[1], ' '.join(args))
+        vlog('# Running: %s' % cmd)
+        os.system(cmd)
+
     omit = [BINDIR, TESTDIR, PYTHONDIR]
     if not options.cover_stdlib:
         # Exclude as system paths (ignoring empty strings seen on win)
         omit += [x for x in sys.path if x != '']
     omit = ','.join(omit)
-    os.chdir(PYTHONDIR)
-    cmd = '"%s" "%s" -i -r "--omit=%s"' % (
-        sys.executable, os.path.join(TESTDIR, 'coverage.py'), omit)
-    vlog("# Running: "+cmd)
-    os.system(cmd)
+
+    covrun('-c') # combine from parallel processes
+    for fn in os.listdir(TESTDIR):
+        if fn.startswith('.coverage.'):
+            os.unlink(os.path.join(TESTDIR, fn))
+
+    covrun('-i', '-r', '"--omit=%s"' % omit) # report
     if options.annotate:
         adir = os.path.join(TESTDIR, 'annotated')
         if not os.path.isdir(adir):
             os.mkdir(adir)
-        cmd = '"%s" "%s" -i -a "--directory=%s" "--omit=%s"' % (
-            sys.executable, os.path.join(TESTDIR, 'coverage.py'),
-            adir, omit)
-        vlog("# Running: "+cmd)
-        os.system(cmd)
+        covrun('-i', '-a', '"--directory=%s"' % adir, '"--omit=%s"' % omit)
 
 class Timeout(Exception):
     pass
@@ -360,7 +408,6 @@
     hgrc.write('[defaults]\n')
     hgrc.write('backout = -d "0 0"\n')
     hgrc.write('commit = -d "0 0"\n')
-    hgrc.write('debugrawcommit = -d "0 0"\n')
     hgrc.write('tag = -d "0 0"\n')
     hgrc.close()
 
@@ -489,15 +536,42 @@
         return None
     return ret == 0
 
-def runchildren(options, expecthg, tests):
-    if not options.with_hg:
+_hgpath = None
+
+def _gethgpath():
+    """Return the path to the mercurial package that is actually found by
+    the current Python interpreter."""
+    global _hgpath
+    if _hgpath is not None:
+        return _hgpath
+
+    cmd = '%s -c "import mercurial; print mercurial.__path__[0]"'
+    pipe = os.popen(cmd % PYTHON)
+    try:
+        _hgpath = pipe.read().strip()
+    finally:
+        pipe.close()
+    return _hgpath
+
+def _checkhglib(verb):
+    """Ensure that the 'mercurial' package imported by python is
+    the one we expect it to be.  If not, print a warning to stderr."""
+    expecthg = os.path.join(PYTHONDIR, 'mercurial')
+    actualhg = _gethgpath()
+    if actualhg != expecthg:
+        sys.stderr.write('warning: %s with unexpected mercurial lib: %s\n'
+                         '         (expected %s)\n'
+                         % (verb, actualhg, expecthg))
+
+def runchildren(options, tests):
+    if INST:
         installhg(options)
-        if hgpkg != expecthg:
-            print '# Testing unexpected mercurial: %s' % hgpkg
+        _checkhglib("Testing")
 
     optcopy = dict(options.__dict__)
     optcopy['jobs'] = 1
-    optcopy['with_hg'] = INST
+    if optcopy['with_hg'] is None:
+        optcopy['with_hg'] = os.path.join(BINDIR, "hg")
     opts = []
     for opt, value in optcopy.iteritems():
         name = '--' + opt.replace('_', '-')
@@ -547,28 +621,25 @@
     for s in fails:
         print "Failed %s: %s" % (s[0], s[1])
 
-    if hgpkg != expecthg:
-        print '# Tested unexpected mercurial: %s' % hgpkg
+    _checkhglib("Tested")
     print "# Ran %d tests, %d skipped, %d failed." % (
         tested, skipped, failed)
     sys.exit(failures != 0)
 
-def runtests(options, expecthg, tests):
+def runtests(options, tests):
     global DAEMON_PIDS, HGRCPATH
     DAEMON_PIDS = os.environ["DAEMON_PIDS"] = os.path.join(HGTMP, 'daemon.pids')
     HGRCPATH = os.environ["HGRCPATH"] = os.path.join(HGTMP, '.hgrc')
 
     try:
-        if not options.with_hg:
+        if INST:
             installhg(options)
-
-            if hgpkg != expecthg:
-                print '# Testing unexpected mercurial: %s' % hgpkg
+            _checkhglib("Testing")
 
         if options.timeout > 0:
             try:
                 signal.signal(signal.SIGALRM, alarmed)
-                vlog('# Running tests with %d-second timeout' %
+                vlog('# Running each test with %d second timeout' %
                      options.timeout)
             except AttributeError:
                 print 'WARNING: cannot run tests with timeouts'
@@ -625,8 +696,7 @@
                 print "Skipped %s: %s" % s
             for s in fails:
                 print "Failed %s: %s" % s
-            if hgpkg != expecthg:
-                print '# Tested unexpected mercurial: %s' % hgpkg
+            _checkhglib("Tested")
             print "# Ran %d tests, %d skipped, %d failed." % (
                 tested, skipped, failed)
 
@@ -670,15 +740,42 @@
     os.environ["HGPORT2"] = str(options.port + 2)
 
     if options.with_hg:
-        INST = options.with_hg
+        INST = None
+        BINDIR = os.path.dirname(os.path.realpath(options.with_hg))
+
+        # This looks redundant with how Python initializes sys.path from
+        # the location of the script being executed.  Needed because the
+        # "hg" specified by --with-hg is not the only Python script
+        # executed in the test suite that needs to import 'mercurial'
+        # ... which means it's not really redundant at all.
+        PYTHONDIR = BINDIR
     else:
         INST = os.path.join(HGTMP, "install")
-    BINDIR = os.environ["BINDIR"] = os.path.join(INST, "bin")
-    PYTHONDIR = os.path.join(INST, "lib", "python")
+        BINDIR = os.environ["BINDIR"] = os.path.join(INST, "bin")
+        PYTHONDIR = os.path.join(INST, "lib", "python")
+
+    os.environ["BINDIR"] = BINDIR
+    os.environ["PYTHON"] = PYTHON
+
+    if not options.child:
+        path = [BINDIR] + os.environ["PATH"].split(os.pathsep)
+        os.environ["PATH"] = os.pathsep.join(path)
+
+        # Include TESTDIR in PYTHONPATH so that out-of-tree extensions
+        # can run .../tests/run-tests.py test-foo where test-foo
+        # adds an extension to HGRC
+        pypath = [PYTHONDIR, TESTDIR]
+        # We have to augment PYTHONPATH, rather than simply replacing
+        # it, in case external libraries are only available via current
+        # PYTHONPATH.  (In particular, the Subversion bindings on OS X
+        # are in /opt/subversion.)
+        oldpypath = os.environ.get('PYTHONPATH')
+        if oldpypath:
+            pypath.append(oldpypath)
+        os.environ['PYTHONPATH'] = os.pathsep.join(pypath)
+
     COVERAGE_FILE = os.path.join(TESTDIR, ".coverage")
 
-    expecthg = os.path.join(HGTMP, 'install', 'lib', 'python', 'mercurial')
-
     if len(args) == 0:
         args = os.listdir(".")
         args.sort()
@@ -689,15 +786,20 @@
             ('.' not in test or test.endswith('.py') or
              test.endswith('.bat'))):
             tests.append(test)
+    if not tests:
+        print "# Ran 0 tests, 0 skipped, 0 failed."
+        return
 
     vlog("# Using TESTDIR", TESTDIR)
     vlog("# Using HGTMP", HGTMP)
+    vlog("# Using PATH", os.environ["PATH"])
+    vlog("# Using PYTHONPATH", os.environ["PYTHONPATH"])
 
     try:
         if len(tests) > 1 and options.jobs > 1:
-            runchildren(options, expecthg, tests)
+            runchildren(options, tests)
         else:
-            runtests(options, expecthg, tests)
+            runtests(options, tests)
     finally:
         cleanup(options)
 
--- a/tests/svn/branches.svndump	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/svn/branches.svndump	Wed Jul 08 17:03:16 2009 -0700
@@ -1,6 +1,6 @@
 SVN-fs-dump-format-version: 2
 
-UUID: 7b60030a-5a1f-4344-a009-73f0c1c2adf2
+UUID: 3c3c228a-b3dd-467c-a766-896f4b7cd0af
 
 Revision-number: 0
 Prop-content-length: 56
@@ -9,7 +9,7 @@
 K 8
 svn:date
 V 27
-2008-12-06T12:47:52.296168Z
+2009-06-21T12:38:53.023457Z
 PROPS-END
 
 Revision-number: 1
@@ -27,7 +27,7 @@
 K 8
 svn:date
 V 27
-2008-12-06T12:47:52.342238Z
+2009-06-21T12:38:53.111986Z
 PROPS-END
 
 Node-path: branches
@@ -72,7 +72,7 @@
 K 8
 svn:date
 V 27
-2008-12-06T12:47:53.190046Z
+2009-06-21T12:38:54.182594Z
 PROPS-END
 
 Node-path: branches/notinbranch
@@ -81,6 +81,7 @@
 Prop-content-length: 10
 Text-content-length: 2
 Text-content-md5: e29311f6f1bf1af907f9ef9f44b8328b
+Text-content-sha1: e983f374794de9c64e3d1c1de1d490c0756eeeff
 Content-length: 12
 
 PROPS-END
@@ -93,6 +94,7 @@
 Prop-content-length: 10
 Text-content-length: 2
 Text-content-md5: 60b725f10c9c85c70d97880dfe8191b3
+Text-content-sha1: 3f786850e387550fdab836ed7e6dc881de23001b
 Content-length: 12
 
 PROPS-END
@@ -105,6 +107,7 @@
 Prop-content-length: 10
 Text-content-length: 2
 Text-content-md5: 3b5d5c3712955042212316173ccf37be
+Text-content-sha1: 89e6c98d92887913cadf06b2adb97f26cde4849b
 Content-length: 12
 
 PROPS-END
@@ -117,20 +120,43 @@
 Prop-content-length: 10
 Text-content-length: 2
 Text-content-md5: 2cd6ee2c70b0bde53fbe6cac3c8b8bb1
+Text-content-sha1: 2b66fd261ee5c6cfc8de7fa466bab600bcfe4f69
 Content-length: 12
 
 PROPS-END
 c
 
 
+Node-path: trunk/dir
+Node-kind: dir
+Node-action: add
+Prop-content-length: 10
+Content-length: 10
+
+PROPS-END
+
+
+Node-path: trunk/dir/e
+Node-kind: file
+Node-action: add
+Prop-content-length: 10
+Text-content-length: 2
+Text-content-md5: 9ffbf43126e33be52cd2bf7e01d627f9
+Text-content-sha1: 094e3afb2fe8dfe82f63731cdcd3b999f4856cff
+Content-length: 12
+
+PROPS-END
+e
+
+
 Revision-number: 3
-Prop-content-length: 124
-Content-length: 124
+Prop-content-length: 132
+Content-length: 132
 
 K 7
 svn:log
-V 22
-branch trunk, remove c
+V 30
+branch trunk, remove c and dir
 K 10
 svn:author
 V 7
@@ -138,38 +164,22 @@
 K 8
 svn:date
 V 27
-2008-12-06T12:47:55.188535Z
+2009-06-21T12:38:57.166484Z
 PROPS-END
 
 Node-path: branches/old
 Node-kind: dir
 Node-action: add
-Node-copyfrom-rev: 1
+Node-copyfrom-rev: 2
 Node-copyfrom-path: trunk
-Prop-content-length: 34
-Content-length: 34
-
-K 13
-svn:mergeinfo
-V 0
-
-PROPS-END
 
 
-Node-path: branches/old/a
-Node-kind: file
-Node-action: add
-Node-copyfrom-rev: 2
-Node-copyfrom-path: trunk/a
-Text-copy-source-md5: 60b725f10c9c85c70d97880dfe8191b3
+Node-path: branches/old/dir
+Node-action: delete
 
 
-Node-path: branches/old/b
-Node-kind: file
-Node-action: add
-Node-copyfrom-rev: 2
-Node-copyfrom-path: trunk/b
-Text-copy-source-md5: 3b5d5c3712955042212316173ccf37be
+Node-path: branches/old/c
+Node-action: delete
 
 
 Revision-number: 4
@@ -187,7 +197,7 @@
 K 8
 svn:date
 V 27
-2008-12-06T12:47:57.146347Z
+2009-06-21T12:38:59.084420Z
 PROPS-END
 
 Node-path: trunk/a
@@ -195,6 +205,7 @@
 Node-action: change
 Text-content-length: 4
 Text-content-md5: 0d227f1abf8c2932d342e9b99cc957eb
+Text-content-sha1: d7c8127a20a396cff08af086a1c695b0636f0c29
 Content-length: 4
 
 a
@@ -216,7 +227,7 @@
 K 8
 svn:date
 V 27
-2008-12-06T12:47:58.150124Z
+2009-06-21T12:39:00.093201Z
 PROPS-END
 
 Node-path: branches/old/b
@@ -224,6 +235,7 @@
 Node-action: change
 Text-content-length: 4
 Text-content-md5: 06ac26ed8b614fc0b141e4542aa067c2
+Text-content-sha1: f6980469e74f7125178e88ec571e06fe6ce86e95
 Content-length: 4
 
 b
@@ -245,7 +257,7 @@
 K 8
 svn:date
 V 27
-2008-12-06T12:48:00.161336Z
+2009-06-21T12:39:02.078633Z
 PROPS-END
 
 Node-path: branches/old/c
@@ -254,16 +266,12 @@
 Node-copyfrom-rev: 3
 Node-copyfrom-path: trunk/b
 Text-copy-source-md5: 3b5d5c3712955042212316173ccf37be
-Prop-content-length: 34
+Text-copy-source-sha1: 89e6c98d92887913cadf06b2adb97f26cde4849b
 Text-content-length: 4
 Text-content-md5: 33cb6785d50937d8d307ebb66d6259a7
-Content-length: 38
+Text-content-sha1: 7a6478264aa11a0f4befef356c03e83f2b1f6eba
+Content-length: 4
 
-K 13
-svn:mergeinfo
-V 0
-
-PROPS-END
 b
 c
 
@@ -287,7 +295,7 @@
 K 8
 svn:date
 V 27
-2008-12-06T12:48:01.153724Z
+2009-06-21T12:39:03.065537Z
 PROPS-END
 
 Node-path: branches/old/b
@@ -295,6 +303,7 @@
 Node-action: change
 Text-content-length: 6
 Text-content-md5: cdcfb41554e2d092c13f5e6839e63577
+Text-content-sha1: 17ac58cabedebea235d1b5605531d5b1559797e9
 Content-length: 6
 
 b
@@ -317,7 +326,7 @@
 K 8
 svn:date
 V 27
-2008-12-06T12:48:04.150915Z
+2009-06-21T12:39:06.070275Z
 PROPS-END
 
 Node-path: branches/old2
@@ -346,7 +355,7 @@
 K 8
 svn:date
 V 27
-2008-12-06T12:48:06.149560Z
+2009-06-21T12:39:08.082539Z
 PROPS-END
 
 Node-path: branches/old
@@ -375,7 +384,7 @@
 K 8
 svn:date
 V 27
-2008-12-06T12:48:07.268498Z
+2009-06-21T12:39:09.073290Z
 PROPS-END
 
 Node-path: trunk/a
@@ -383,6 +392,7 @@
 Node-action: change
 Text-content-length: 2
 Text-content-md5: 60b725f10c9c85c70d97880dfe8191b3
+Text-content-sha1: 3f786850e387550fdab836ed7e6dc881de23001b
 Content-length: 2
 
 a
@@ -403,7 +413,7 @@
 K 8
 svn:date
 V 27
-2008-12-06T12:48:09.151702Z
+2009-06-21T12:39:11.070264Z
 PROPS-END
 
 Node-path: branches/old3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/svn/encoding.svndump	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,280 @@
+SVN-fs-dump-format-version: 2
+
+UUID: afeb9c47-92ff-4c0c-9f72-e1f6eb8ac9af
+
+Revision-number: 0
+Prop-content-length: 56
+Content-length: 56
+
+K 8
+svn:date
+V 27
+2009-06-21T16:34:55.835945Z
+PROPS-END
+
+Revision-number: 1
+Prop-content-length: 112
+Content-length: 112
+
+K 7
+svn:log
+V 10
+init projA
+K 10
+svn:author
+V 7
+pmezard
+K 8
+svn:date
+V 27
+2009-06-21T16:34:55.909545Z
+PROPS-END
+
+Node-path: branches
+Node-kind: dir
+Node-action: add
+Prop-content-length: 10
+Content-length: 10
+
+PROPS-END
+
+
+Node-path: tags
+Node-kind: dir
+Node-action: add
+Prop-content-length: 10
+Content-length: 10
+
+PROPS-END
+
+
+Node-path: trunk
+Node-kind: dir
+Node-action: add
+Prop-content-length: 10
+Content-length: 10
+
+PROPS-END
+
+
+Revision-number: 2
+Prop-content-length: 106
+Content-length: 106
+
+K 7
+svn:log
+V 5
+hello
+K 10
+svn:author
+V 7
+pmezard
+K 8
+svn:date
+V 27
+2009-06-21T16:34:56.150049Z
+PROPS-END
+
+Node-path: trunk/à
+Node-kind: dir
+Node-action: add
+Prop-content-length: 10
+Content-length: 10
+
+PROPS-END
+
+
+Node-path: trunk/à/é
+Node-kind: file
+Node-action: add
+Prop-content-length: 10
+Text-content-length: 2
+Text-content-md5: e29311f6f1bf1af907f9ef9f44b8328b
+Text-content-sha1: e983f374794de9c64e3d1c1de1d490c0756eeeff
+Content-length: 12
+
+PROPS-END
+d
+
+
+Node-path: trunk/é
+Node-kind: file
+Node-action: add
+Prop-content-length: 10
+Text-content-length: 2
+Text-content-md5: 9ffbf43126e33be52cd2bf7e01d627f9
+Text-content-sha1: 094e3afb2fe8dfe82f63731cdcd3b999f4856cff
+Content-length: 12
+
+PROPS-END
+e
+
+
+Revision-number: 3
+Prop-content-length: 112
+Content-length: 112
+
+K 7
+svn:log
+V 10
+copy files
+K 10
+svn:author
+V 7
+pmezard
+K 8
+svn:date
+V 27
+2009-06-21T16:34:59.089402Z
+PROPS-END
+
+Node-path: trunk/è
+Node-kind: file
+Node-action: add
+Node-copyfrom-rev: 2
+Node-copyfrom-path: trunk/é
+Text-copy-source-md5: 9ffbf43126e33be52cd2bf7e01d627f9
+Text-copy-source-sha1: 094e3afb2fe8dfe82f63731cdcd3b999f4856cff
+
+
+Node-path: trunk/ù
+Node-kind: dir
+Node-action: add
+Node-copyfrom-rev: 2
+Node-copyfrom-path: trunk/à
+
+
+Node-path: trunk/à
+Node-action: delete
+
+
+Node-path: trunk/é
+Node-action: delete
+
+
+Revision-number: 4
+Prop-content-length: 114
+Content-length: 114
+
+K 7
+svn:log
+V 12
+remove files
+K 10
+svn:author
+V 7
+pmezard
+K 8
+svn:date
+V 27
+2009-06-21T16:35:00.165121Z
+PROPS-END
+
+Node-path: trunk/è
+Node-action: delete
+
+
+Node-path: trunk/ù
+Node-action: delete
+
+
+Revision-number: 5
+Prop-content-length: 120
+Content-length: 120
+
+K 7
+svn:log
+V 18
+branch to branché
+K 10
+svn:author
+V 7
+pmezard
+K 8
+svn:date
+V 27
+2009-06-21T16:35:03.079138Z
+PROPS-END
+
+Node-path: branches/branché
+Node-kind: dir
+Node-action: add
+Node-copyfrom-rev: 4
+Node-copyfrom-path: trunk
+
+
+Revision-number: 6
+Prop-content-length: 121
+Content-length: 121
+
+K 7
+svn:log
+V 19
+branch to branchée
+K 10
+svn:author
+V 7
+pmezard
+K 8
+svn:date
+V 27
+2009-06-21T16:35:06.060801Z
+PROPS-END
+
+Node-path: branches/branchée
+Node-kind: dir
+Node-action: add
+Node-copyfrom-rev: 5
+Node-copyfrom-path: branches/branché
+
+
+Revision-number: 7
+Prop-content-length: 110
+Content-length: 110
+
+K 7
+svn:log
+V 9
+tag trunk
+K 10
+svn:author
+V 7
+pmezard
+K 8
+svn:date
+V 27
+2009-06-21T16:35:09.061530Z
+PROPS-END
+
+Node-path: tags/branché
+Node-kind: dir
+Node-action: add
+Node-copyfrom-rev: 6
+Node-copyfrom-path: trunk
+
+
+Revision-number: 8
+Prop-content-length: 114
+Content-length: 114
+
+K 7
+svn:log
+V 12
+tag branché
+K 10
+svn:author
+V 7
+pmezard
+K 8
+svn:date
+V 27
+2009-06-21T16:35:11.068562Z
+PROPS-END
+
+Node-path: tags/branchée
+Node-kind: dir
+Node-action: add
+Node-copyfrom-rev: 6
+Node-copyfrom-path: branches/branchée
+
+
--- a/tests/svn/move.svndump	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/svn/move.svndump	Wed Jul 08 17:03:16 2009 -0700
@@ -1,6 +1,6 @@
 SVN-fs-dump-format-version: 2
 
-UUID: 0682b859-320d-4a69-a164-a7cab5695072
+UUID: 9de99ecc-876b-46e5-bc59-bff9b2b58b1e
 
 Revision-number: 0
 Prop-content-length: 56
@@ -9,7 +9,7 @@
 K 8
 svn:date
 V 27
-2008-12-06T13:33:36.768573Z
+2009-06-21T14:32:26.678698Z
 PROPS-END
 
 Revision-number: 1
@@ -27,7 +27,7 @@
 K 8
 svn:date
 V 27
-2008-12-06T13:33:37.083146Z
+2009-06-21T14:32:27.278689Z
 PROPS-END
 
 Node-path: trunk
@@ -45,6 +45,7 @@
 Prop-content-length: 10
 Text-content-length: 2
 Text-content-md5: 60b725f10c9c85c70d97880dfe8191b3
+Text-content-sha1: 3f786850e387550fdab836ed7e6dc881de23001b
 Content-length: 12
 
 PROPS-END
@@ -66,6 +67,7 @@
 Prop-content-length: 10
 Text-content-length: 2
 Text-content-md5: 3b5d5c3712955042212316173ccf37be
+Text-content-sha1: 89e6c98d92887913cadf06b2adb97f26cde4849b
 Content-length: 12
 
 PROPS-END
@@ -78,6 +80,7 @@
 Prop-content-length: 10
 Text-content-length: 2
 Text-content-md5: 2cd6ee2c70b0bde53fbe6cac3c8b8bb1
+Text-content-sha1: 2b66fd261ee5c6cfc8de7fa466bab600bcfe4f69
 Content-length: 12
 
 PROPS-END
@@ -99,6 +102,7 @@
 Prop-content-length: 10
 Text-content-length: 2
 Text-content-md5: e29311f6f1bf1af907f9ef9f44b8328b
+Text-content-sha1: e983f374794de9c64e3d1c1de1d490c0756eeeff
 Content-length: 12
 
 PROPS-END
@@ -120,7 +124,7 @@
 K 8
 svn:date
 V 27
-2008-12-06T13:33:38.152773Z
+2009-06-21T14:32:28.312955Z
 PROPS-END
 
 Node-path: trunk/a
@@ -128,6 +132,7 @@
 Node-action: change
 Text-content-length: 4
 Text-content-md5: 0d227f1abf8c2932d342e9b99cc957eb
+Text-content-sha1: d7c8127a20a396cff08af086a1c695b0636f0c29
 Content-length: 4
 
 a
@@ -139,6 +144,7 @@
 Node-action: change
 Text-content-length: 4
 Text-content-md5: 63fad9092ad37713ebe26b3193f89c41
+Text-content-sha1: ccfb93b7bac6f1520f0adc0eebc2cafe9da80f42
 Content-length: 4
 
 c
@@ -160,7 +166,7 @@
 K 8
 svn:date
 V 27
-2008-12-06T13:33:39.146388Z
+2009-06-21T14:32:29.183467Z
 PROPS-END
 
 Node-path: subproject
@@ -189,7 +195,7 @@
 K 8
 svn:date
 V 27
-2008-12-06T13:33:40.179944Z
+2009-06-21T14:32:30.300975Z
 PROPS-END
 
 Node-path: subproject/trunk
@@ -216,7 +222,7 @@
 K 8
 svn:date
 V 27
-2008-12-06T13:33:41.184505Z
+2009-06-21T14:32:31.354398Z
 PROPS-END
 
 Node-path: subproject/branches
@@ -243,7 +249,7 @@
 K 8
 svn:date
 V 27
-2008-12-06T13:33:42.153312Z
+2009-06-21T14:32:32.121901Z
 PROPS-END
 
 Node-path: subproject/trunk/d1
@@ -272,7 +278,7 @@
 K 8
 svn:date
 V 27
-2008-12-06T13:33:42.206313Z
+2009-06-21T14:32:32.317815Z
 PROPS-END
 
 Node-path: subproject/trunk/d2
@@ -301,7 +307,7 @@
 K 8
 svn:date
 V 27
-2008-12-06T13:33:43.182355Z
+2009-06-21T14:32:33.418320Z
 PROPS-END
 
 Node-path: subproject/trunk/d1/b
@@ -309,6 +315,7 @@
 Node-action: change
 Text-content-length: 4
 Text-content-md5: 06ac26ed8b614fc0b141e4542aa067c2
+Text-content-sha1: f6980469e74f7125178e88ec571e06fe6ce86e95
 Content-length: 4
 
 b
@@ -334,7 +341,7 @@
 K 8
 svn:date
 V 27
-2008-12-06T13:33:44.153682Z
+2009-06-21T14:32:34.126542Z
 PROPS-END
 
 Node-path: subproject/branches/d1
@@ -363,7 +370,7 @@
 K 8
 svn:date
 V 27
-2008-12-06T13:33:44.298011Z
+2009-06-21T14:32:34.436015Z
 PROPS-END
 
 Node-path: subproject/trunk/d
@@ -372,6 +379,7 @@
 Node-copyfrom-rev: 7
 Node-copyfrom-path: subproject/trunk/d2/d
 Text-copy-source-md5: e29311f6f1bf1af907f9ef9f44b8328b
+Text-copy-source-sha1: e983f374794de9c64e3d1c1de1d490c0756eeeff
 
 
 Revision-number: 11
@@ -389,7 +397,7 @@
 K 8
 svn:date
 V 27
-2008-12-06T13:33:44.349920Z
+2009-06-21T14:32:34.803189Z
 PROPS-END
 
 Node-path: subproject/trunk/d2
@@ -399,3 +407,94 @@
 Node-copyfrom-path: subproject/trunk/d2
 
 
+Revision-number: 12
+Prop-content-length: 107
+Content-length: 107
+
+K 7
+svn:log
+V 6
+add d3
+K 10
+svn:author
+V 7
+pmezard
+K 8
+svn:date
+V 27
+2009-06-21T14:32:36.531735Z
+PROPS-END
+
+Node-path: subproject/trunk/d3
+Node-kind: dir
+Node-action: add
+Prop-content-length: 10
+Content-length: 10
+
+PROPS-END
+
+
+Node-path: subproject/trunk/d3/d31
+Node-kind: dir
+Node-action: add
+Prop-content-length: 10
+Content-length: 10
+
+PROPS-END
+
+
+Node-path: subproject/trunk/d3/d31/e
+Node-kind: file
+Node-action: add
+Prop-content-length: 10
+Text-content-length: 2
+Text-content-md5: 9ffbf43126e33be52cd2bf7e01d627f9
+Text-content-sha1: 094e3afb2fe8dfe82f63731cdcd3b999f4856cff
+Content-length: 12
+
+PROPS-END
+e
+
+
+Node-path: subproject/trunk/d3/f
+Node-kind: file
+Node-action: add
+Prop-content-length: 10
+Text-content-length: 2
+Text-content-md5: 9a8ad92c50cae39aa2c5604fd0ab6d8c
+Text-content-sha1: a9fcd54b25e7e863d72cd47c08af46e61b74b561
+Content-length: 12
+
+PROPS-END
+f
+
+
+Revision-number: 13
+Prop-content-length: 128
+Content-length: 128
+
+K 7
+svn:log
+V 26
+copy dir and remove subdir
+K 10
+svn:author
+V 7
+pmezard
+K 8
+svn:date
+V 27
+2009-06-21T14:32:38.281829Z
+PROPS-END
+
+Node-path: subproject/trunk/d3/d31
+Node-action: delete
+
+
+Node-path: subproject/trunk/d4
+Node-kind: dir
+Node-action: add
+Node-copyfrom-rev: 12
+Node-copyfrom-path: subproject/trunk/d3
+
+
--- a/tests/svn/svndump-branches.sh	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/svn/svndump-branches.sh	Wed Jul 08 17:03:16 2009 -0700
@@ -22,15 +22,19 @@
 echo a > trunk/a
 echo b > trunk/b
 echo c > trunk/c
+mkdir trunk/dir
+echo e > trunk/dir/e
 # Add a file within branches, used to confuse branch detection
 echo d > branches/notinbranch
-svn add trunk/a trunk/b trunk/c branches/notinbranch
+svn add trunk/a trunk/b trunk/c trunk/dir branches/notinbranch
 svn ci -m hello
+svn up
 
 # Branch to old
 svn copy trunk branches/old
 svn rm branches/old/c
-svn ci -m "branch trunk, remove c"
+svn rm branches/old/dir
+svn ci -m "branch trunk, remove c and dir"
 svn up
 
 # Update trunk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/svn/svndump-encoding.sh	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,57 @@
+# -*- coding: utf-8 -*-
+#!/bin/sh
+#
+# Use this script to generate encoding.svndump
+#
+
+mkdir temp
+cd temp
+
+mkdir project-orig
+cd project-orig
+mkdir trunk
+mkdir branches
+mkdir tags
+cd ..
+
+svnadmin create svn-repo
+svnurl=file://`pwd`/svn-repo
+svn import project-orig $svnurl -m "init projA"
+
+svn co $svnurl project
+cd project
+echo e > trunk/é
+mkdir trunk/à
+echo d > trunk/à/é
+svn add trunk/é trunk/à
+svn ci -m hello
+
+# Copy files and directories
+svn mv trunk/é trunk/è
+svn mv trunk/à trunk/ù
+svn ci -m "copy files"
+
+# Remove files
+svn rm trunk/è
+svn rm trunk/ù
+svn ci -m 'remove files'
+
+# Create branches with and from weird names
+svn up
+svn cp trunk branches/branché
+echo a > branches/branché/a
+svn ci -m 'branch to branché'
+svn up
+svn cp branches/branché branches/branchée
+echo a >> branches/branché/a
+svn ci -m 'branch to branchée'
+
+# Create tag with weird name
+svn up
+svn cp trunk tags/branché
+svn ci -m 'tag trunk'
+svn cp branches/branchée tags/branchée
+svn ci -m 'tag branché'
+cd ..
+
+svnadmin dump svn-repo > ../encoding.svndump
--- a/tests/svn/svndump-move.sh	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/svn/svndump-move.sh	Wed Jul 08 17:03:16 2009 -0700
@@ -57,6 +57,17 @@
     # Copy a directory from a past revision
     svn copy -r 7 $svnurl/subproject/trunk/d2 $svnurl/subproject/trunk -m copydirfrompast
 fi
+
+# Copy a directory while removing a subdirectory
+svn up
+mkdir -p subproject/trunk/d3/d31
+echo e > subproject/trunk/d3/d31/e
+echo f > subproject/trunk/d3/f
+svn add subproject/trunk/d3
+svn ci -m "add d3"
+svn copy subproject/trunk/d3 subproject/trunk/d4
+svn rm subproject/trunk/d3/d31
+svn ci -m "copy dir and remove subdir"
 cd ..
 
 svnadmin dump svn-repo > ../move.svndump
\ No newline at end of file
--- a/tests/test-acl.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-acl.out	Wed Jul 08 17:03:16 2009 -0700
@@ -42,6 +42,7 @@
 pushing to ../b
 searching for changes
 common changesets up to 6675d58eff77
+invalidating branch cache (tip differs)
 3 changesets found
 list of changesets:
 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
@@ -74,6 +75,7 @@
 pushing to ../b
 searching for changes
 common changesets up to 6675d58eff77
+invalidating branch cache (tip differs)
 3 changesets found
 list of changesets:
 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
@@ -111,6 +113,7 @@
 pushing to ../b
 searching for changes
 common changesets up to 6675d58eff77
+invalidating branch cache (tip differs)
 3 changesets found
 list of changesets:
 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
@@ -408,6 +411,7 @@
 pushing to ../b
 searching for changes
 common changesets up to 6675d58eff77
+invalidating branch cache (tip differs)
 3 changesets found
 list of changesets:
 ef1ea85a6374b77d6da9dcda9541f498f2d17df7
--- a/tests/test-add	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-add	Wed Jul 08 17:03:16 2009 -0700
@@ -7,6 +7,9 @@
 hg st
 hg add
 hg st
+hg forget a
+hg add
+hg st
 
 echo b > b
 hg add -n b
@@ -36,6 +39,9 @@
 hg ci -m merge
 
 echo % issue683
+hg forget a
+hg add a
+hg st
 hg rm a
 hg st
 echo a > a
--- a/tests/test-add.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-add.out	Wed Jul 08 17:03:16 2009 -0700
@@ -2,6 +2,8 @@
 ? a
 adding a
 A a
+adding a
+A a
 A a
 ? b
 A a
@@ -26,12 +28,13 @@
 M a
 ? a.orig
 % issue683
+? a.orig
 R a
 ? a.orig
 M a
 ? a.orig
-c does not exist!
-d does not exist!
+c: No such file or directory
+d: No such file or directory
 M a
 A c
 ? a.orig
--- a/tests/test-addremove	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-addremove	Wed Jul 08 17:03:16 2009 -0700
@@ -22,5 +22,6 @@
 mv a b
 rm c
 echo d > d
+hg addremove -n -s 50 # issue 1696
 hg addremove -s 50
 hg commit -mb
--- a/tests/test-addremove-similar	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-addremove-similar	Wed Jul 08 17:03:16 2009 -0700
@@ -46,4 +46,22 @@
 hg addremove -s -1
 hg addremove -s 1e6
 
+cd ..
+
+echo '% issue 1527'
+hg init rep3; cd rep3
+mkdir d
+echo a > d/a
+hg add d/a
+hg commit -m 1
+
+mv d/a d/b
+hg addremove -s80
+hg debugstate
+mv d/b c
+echo "% no copies found here (since the target isn't in d"
+hg addremove -s80 d
+echo "% copies here"
+hg addremove -s80
+
 true
--- a/tests/test-addremove-similar.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-addremove-similar.out	Wed Jul 08 17:03:16 2009 -0700
@@ -18,3 +18,15 @@
 abort: similarity must be a number
 abort: similarity must be between 0 and 100
 abort: similarity must be between 0 and 100
+% issue 1527
+removing d/a
+adding d/b
+recording removal of d/a as rename to d/b (100% similar)
+r   0          0 1970-01-01 00:00:00 d/a
+a   0         -1 unset               d/b
+copy: d/a -> d/b
+% no copies found here (since the target isn't in d
+removing d/b
+% copies here
+adding c
+recording removal of d/a as rename to c (100% similar)
--- a/tests/test-addremove.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-addremove.out	Wed Jul 08 17:03:16 2009 -0700
@@ -15,3 +15,8 @@
 removing c
 adding d
 recording removal of a as rename to b (100% similar)
+removing a
+adding b
+removing c
+adding d
+recording removal of a as rename to b (100% similar)
--- a/tests/test-alias	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-alias	Wed Jul 08 17:03:16 2009 -0700
@@ -1,15 +1,22 @@
 #!/bin/sh
 
 cat >> $HGRCPATH <<EOF
-[extensions]
-alias=
-
 [alias]
 myinit = init
 cleanstatus = status -c
 unknown = bargle
 ambiguous = s
 recursive = recursive
+nodefinition =
+mylog = log
+lognull = log -r null
+shortlog = log --template '{rev} {node|short} | {date|isodate}\n'
+dln = lognull --debug
+
+[defaults]
+mylog = -q
+lognull = -q
+log = -v
 EOF
 
 echo '% basic'
@@ -24,9 +31,22 @@
 echo '% recursive'
 hg recursive
 
+echo '% no definition'
+hg nodef
+
 cd alias
 echo foo > foo
 hg ci -Amfoo
 
 echo '% with opts'
 hg cleanst
+
+echo '% with opts and whitespace'
+hg shortlog
+
+echo '% interaction with defaults'
+hg mylog
+hg lognull
+
+echo '% properly recursive'
+hg dln
--- a/tests/test-alias.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-alias.out	Wed Jul 08 17:03:16 2009 -0700
@@ -1,10 +1,26 @@
 % basic
 % unknown
-*** [alias] unknown: command bargle is unknown
+alias 'unknown' resolves to unknown command 'bargle'
 % ambiguous
-*** [alias] ambiguous: command s is ambiguous
+alias 'ambiguous' resolves to ambiguous command 's'
 % recursive
-*** [alias] recursive: circular dependency on recursive
+alias 'recursive' resolves to unknown command 'recursive'
+% no definition
+no definition for alias 'nodefinition'
 adding foo
 % with opts
 C foo
+% with opts and whitespace
+0 e63c23eaa88a | 1970-01-01 00:00 +0000
+% interaction with defaults
+0:e63c23eaa88a
+-1:000000000000
+% properly recursive
+changeset:   -1:0000000000000000000000000000000000000000
+parent:      -1:0000000000000000000000000000000000000000
+parent:      -1:0000000000000000000000000000000000000000
+manifest:    -1:0000000000000000000000000000000000000000
+user:        
+date:        Thu Jan 01 00:00:00 1970 +0000
+extra:       branch=default
+
--- a/tests/test-backout.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-backout.out	Wed Jul 08 17:03:16 2009 -0700
@@ -19,10 +19,10 @@
 adding a
 adding b
 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
-abort: cannot back out change on a different branch
+abort: cannot backout change on a different branch
 adding c
 created new head
-abort: cannot back out change on a different branch
+abort: cannot backout change on a different branch
 # backout with merge
 adding a
 reverting a
@@ -54,7 +54,7 @@
 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
 (branch merge, don't forget to commit)
 # backout of merge should fail
-abort: cannot back out a merge changeset without --parent
+abort: cannot backout a merge changeset without --parent
 # backout of merge with bad parent should fail
 abort: cb9a9f314b8b is not a parent of b2f3bb92043e
 # backout of non-merge with parent should fail
--- a/tests/test-bdiff	Wed Jul 08 17:01:18 2009 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,54 +0,0 @@
-#!/usr/bin/env python
-
-import sys, struct
-from mercurial import bdiff, mpatch
-
-def test1(a, b):
-    d = bdiff.bdiff(a, b)
-    c = a
-    if d:
-        c = mpatch.patches(a, [d])
-    if c != b:
-        print "***", repr(a), repr(b)
-        print "bad:"
-        print repr(c)[:200]
-        print repr(d)
-
-def test(a, b):
-    print "***", repr(a), repr(b)
-    test1(a, b)
-    test1(b, a)
-
-test("a\nc\n\n\n\n", "a\nb\n\n\n")
-test("a\nb\nc\n", "a\nc\n")
-test("", "")
-test("a\nb\nc", "a\nb\nc")
-test("a\nb\nc\nd\n", "a\nd\n")
-test("a\nb\nc\nd\n", "a\nc\ne\n")
-test("a\nb\nc\n", "a\nc\n")
-test("a\n", "c\na\nb\n")
-test("a\n", "")
-test("a\n", "b\nc\n")
-test("a\n", "c\na\n")
-test("", "adjfkjdjksdhfksj")
-test("", "ab")
-test("", "abc")
-test("a", "a")
-test("ab", "ab")
-test("abc", "abc")
-test("a\n", "a\n")
-test("a\nb", "a\nb")
-
-#issue1295
-def showdiff(a, b):
-    bin = bdiff.bdiff(a, b)
-    pos = 0
-    while pos < len(bin):
-        p1, p2, l = struct.unpack(">lll", bin[pos:pos + 12])
-        pos += 12
-        print p1, p2, repr(bin[pos:pos + l])
-        pos += l
-showdiff("x\n\nx\n\nx\n\nx\n\nz\n", "x\n\nx\n\ny\n\nx\n\nx\n\nz\n")
-showdiff("x\n\nx\n\nx\n\nx\n\nz\n", "x\n\nx\n\ny\n\nx\n\ny\n\nx\n\nz\n")
-
-print "done"
--- a/tests/test-bdiff.out	Wed Jul 08 17:01:18 2009 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-*** 'a\nc\n\n\n\n' 'a\nb\n\n\n'
-*** 'a\nb\nc\n' 'a\nc\n'
-*** '' ''
-*** 'a\nb\nc' 'a\nb\nc'
-*** 'a\nb\nc\nd\n' 'a\nd\n'
-*** 'a\nb\nc\nd\n' 'a\nc\ne\n'
-*** 'a\nb\nc\n' 'a\nc\n'
-*** 'a\n' 'c\na\nb\n'
-*** 'a\n' ''
-*** 'a\n' 'b\nc\n'
-*** 'a\n' 'c\na\n'
-*** '' 'adjfkjdjksdhfksj'
-*** '' 'ab'
-*** '' 'abc'
-*** 'a' 'a'
-*** 'ab' 'ab'
-*** 'abc' 'abc'
-*** 'a\n' 'a\n'
-*** 'a\nb' 'a\nb'
-6 6 'y\n\n'
-6 6 'y\n\n'
-9 9 'y\n\n'
-done
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-bdiff.py	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,54 @@
+#!/usr/bin/env python
+
+import struct
+from mercurial import bdiff, mpatch
+
+def test1(a, b):
+    d = bdiff.bdiff(a, b)
+    c = a
+    if d:
+        c = mpatch.patches(a, [d])
+    if c != b:
+        print "***", repr(a), repr(b)
+        print "bad:"
+        print repr(c)[:200]
+        print repr(d)
+
+def test(a, b):
+    print "***", repr(a), repr(b)
+    test1(a, b)
+    test1(b, a)
+
+test("a\nc\n\n\n\n", "a\nb\n\n\n")
+test("a\nb\nc\n", "a\nc\n")
+test("", "")
+test("a\nb\nc", "a\nb\nc")
+test("a\nb\nc\nd\n", "a\nd\n")
+test("a\nb\nc\nd\n", "a\nc\ne\n")
+test("a\nb\nc\n", "a\nc\n")
+test("a\n", "c\na\nb\n")
+test("a\n", "")
+test("a\n", "b\nc\n")
+test("a\n", "c\na\n")
+test("", "adjfkjdjksdhfksj")
+test("", "ab")
+test("", "abc")
+test("a", "a")
+test("ab", "ab")
+test("abc", "abc")
+test("a\n", "a\n")
+test("a\nb", "a\nb")
+
+#issue1295
+def showdiff(a, b):
+    bin = bdiff.bdiff(a, b)
+    pos = 0
+    while pos < len(bin):
+        p1, p2, l = struct.unpack(">lll", bin[pos:pos + 12])
+        pos += 12
+        print p1, p2, repr(bin[pos:pos + l])
+        pos += l
+showdiff("x\n\nx\n\nx\n\nx\n\nz\n", "x\n\nx\n\ny\n\nx\n\nx\n\nz\n")
+showdiff("x\n\nx\n\nx\n\nx\n\nz\n", "x\n\nx\n\ny\n\nx\n\ny\n\nx\n\nz\n")
+
+print "done"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-bdiff.py.out	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,23 @@
+*** 'a\nc\n\n\n\n' 'a\nb\n\n\n'
+*** 'a\nb\nc\n' 'a\nc\n'
+*** '' ''
+*** 'a\nb\nc' 'a\nb\nc'
+*** 'a\nb\nc\nd\n' 'a\nd\n'
+*** 'a\nb\nc\nd\n' 'a\nc\ne\n'
+*** 'a\nb\nc\n' 'a\nc\n'
+*** 'a\n' 'c\na\nb\n'
+*** 'a\n' ''
+*** 'a\n' 'b\nc\n'
+*** 'a\n' 'c\na\n'
+*** '' 'adjfkjdjksdhfksj'
+*** '' 'ab'
+*** '' 'abc'
+*** 'a' 'a'
+*** 'ab' 'ab'
+*** 'abc' 'abc'
+*** 'a\n' 'a\n'
+*** 'a\nb' 'a\nb'
+6 6 'y\n\n'
+6 6 'y\n\n'
+9 9 'y\n\n'
+done
--- a/tests/test-bheads	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-bheads	Wed Jul 08 17:03:16 2009 -0700
@@ -2,7 +2,7 @@
 
 heads()
 {
-    hg heads --template '#rev#: #desc|firstline|strip#\n' "$@"
+    hg heads --template '{rev}: {desc|firstline|strip}\n' "$@"
 }
 
 hg init a
--- a/tests/test-bisect	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-bisect	Wed Jul 08 17:03:16 2009 -0700
@@ -82,3 +82,25 @@
 hg bisect -s
 hg bisect -s 
 hg bisect -g
+
+set +e
+
+echo % test invalid command
+hg bisect -r
+hg bisect --command 'foobar'
+
+echo % test bisecting command
+cat > script.py <<EOF
+#!/usr/bin/env python
+import sys
+from mercurial import ui, hg
+repo = hg.repository(ui.ui(), '.')
+if repo['.'].rev() < 6:
+    sys.exit(1)
+EOF
+chmod +x script.py
+hg bisect -r
+hg bisect --good tip
+hg bisect --bad 0
+hg bisect --command "`pwd`/script.py"
+true
--- a/tests/test-bisect.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-bisect.out	Wed Jul 08 17:03:16 2009 -0700
@@ -303,3 +303,19 @@
 date:        Thu Jan 01 00:00:06 1970 +0000
 summary:     msg 6
 
+% test invalid command
+abort: cannot find executable: foobar
+% test bisecting command
+Testing changeset 15:e7fa0811edb0 (31 changesets remaining, ~4 tests)
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+Changeset 15:e7fa0811edb0: good
+Changeset 7:03750880c6b5: good
+Changeset 3:b53bea5e2fcb: bad
+Changeset 5:7874a09ea728: bad
+Changeset 6:a3d5c6fdf0d3: good
+The first good revision is:
+changeset:   6:a3d5c6fdf0d3
+user:        test
+date:        Thu Jan 01 00:00:06 1970 +0000
+summary:     msg 6
+
--- a/tests/test-branches	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-branches	Wed Jul 08 17:03:16 2009 -0700
@@ -62,18 +62,29 @@
 echo 'xxx3' >> b
 hg commit -d '9 0' -m 'adding another cset to branch b'
 hg branches
+hg heads --closed
 hg heads
-hg heads -a
 hg commit -d '9 0' --close-branch -m 'prune bad branch'
 hg branches -a
 hg up -C b
 hg commit -d '9 0' --close-branch -m 'close this part branch too'
 echo '--- b branch should be inactive'
 hg branches
+hg branches -c
 hg branches -a
+hg heads b
+hg heads --closed b
 echo 'xxx4' >> b
 hg commit -d '9 0' -m 'reopen branch with a change'
 echo '--- branch b is back in action'
 hg branches -a
+echo '---- test heads listings'
 hg heads
-hg heads -a
+echo '% branch default'
+hg heads default
+echo '% branch a'
+hg heads a
+hg heads --active a
+echo '% branch b'
+hg heads b
+hg heads --closed b
--- a/tests/test-branches.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-branches.out	Wed Jul 08 17:03:16 2009 -0700
@@ -108,14 +108,34 @@
 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
 --- b branch should be inactive
 a branch name much longer than the default justification used by branches 7:10ff5895aa57
+c                              6:589736a22561 (inactive)
+a                              5:d8cbc61dbaa6 (inactive)
+default                        0:19709c5a4e75 (inactive)
+a branch name much longer than the default justification used by branches 7:10ff5895aa57
 b                             12:2da6583810df (closed)
 c                              6:589736a22561 (inactive)
 a                              5:d8cbc61dbaa6 (inactive)
 default                        0:19709c5a4e75 (inactive)
 a branch name much longer than the default justification used by branches 7:10ff5895aa57
+no open branch heads on branch b
+changeset:   12:2da6583810df
+branch:      b
+tag:         tip
+parent:      8:eebb944467c9
+user:        test
+date:        Thu Jan 01 00:00:09 1970 +0000
+summary:     close this part branch too
+
+changeset:   11:c84627f3c15d
+branch:      b
+user:        test
+date:        Thu Jan 01 00:00:09 1970 +0000
+summary:     prune bad branch
+
 --- branch b is back in action
 b                             13:6ac12926b8c3
 a branch name much longer than the default justification used by branches 7:10ff5895aa57
+---- test heads listings
 changeset:   13:6ac12926b8c3
 branch:      b
 tag:         tip
@@ -135,6 +155,21 @@
 date:        Thu Jan 01 00:00:06 1970 +0000
 summary:     Adding d branch
 
+% branch default
+changeset:   0:19709c5a4e75
+user:        test
+date:        Thu Jan 01 00:00:00 1970 +0000
+summary:     Adding root node
+
+% branch a
+changeset:   5:d8cbc61dbaa6
+branch:      a
+parent:      2:881fe2b92ad0
+user:        test
+date:        Thu Jan 01 00:00:04 1970 +0000
+summary:     Adding b branch head 2
+
+% branch b
 changeset:   13:6ac12926b8c3
 branch:      b
 tag:         tip
@@ -142,9 +177,16 @@
 date:        Thu Jan 01 00:00:09 1970 +0000
 summary:     reopen branch with a change
 
-changeset:   7:10ff5895aa57
-branch:      a branch name much longer than the default justification used by branches
+changeset:   13:6ac12926b8c3
+branch:      b
+tag:         tip
 user:        test
-date:        Thu Jan 01 00:00:06 1970 +0000
-summary:     Adding d branch
+date:        Thu Jan 01 00:00:09 1970 +0000
+summary:     reopen branch with a change
 
+changeset:   11:c84627f3c15d
+branch:      b
+user:        test
+date:        Thu Jan 01 00:00:09 1970 +0000
+summary:     prune bad branch
+
--- a/tests/test-bundle	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-bundle	Wed Jul 08 17:03:16 2009 -0700
@@ -103,7 +103,7 @@
 hg -R full-clone heads
 rm -r full-clone
 
-# test for http://www.selenic.com/mercurial/bts/issue216
+# test for http://mercurial.selenic.com/bts/issue216
 echo "====== Unbundle incremental bundles into fresh empty in one go"
 rm -r empty
 hg init empty
@@ -131,7 +131,7 @@
 hg incoming ../bundle.hg
 cd ..
 
-# test for http://www.selenic.com/mercurial/bts/issue1144
+# test for http://mercurial.selenic.com/bts/issue1144
 echo "===== test that verify bundle does not traceback"
 # partial history bundle, fails w/ unkown parent
 hg -R bundle.hg verify
--- a/tests/test-bundle-r.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-bundle-r.out	Wed Jul 08 17:03:16 2009 -0700
@@ -156,7 +156,7 @@
 4 files, 9 changesets, 7 total revisions
 rolling back last transaction
 % should fail
-abort: --base is incompatible with specifiying a destination
+abort: --base is incompatible with specifying a destination
 abort: repository default-push not found!
 2 changesets found
 4 changesets found
--- a/tests/test-command-template	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-command-template	Wed Jul 08 17:03:16 2009 -0700
@@ -115,13 +115,13 @@
 
 echo '# formatnode filter works'
 echo '#  quiet'
-hg -q log -r 0 --template '#node|formatnode#\n'
+hg -q log -r 0 --template '{node|formatnode}\n'
 echo '#  normal'
-hg log -r 0 --template '#node|formatnode#\n'
+hg log -r 0 --template '{node|formatnode}\n'
 echo '#  verbose'
-hg -v log -r 0 --template '#node|formatnode#\n'
+hg -v log -r 0 --template '{node|formatnode}\n'
 echo '#  debug'
-hg --debug log -r 0 --template '#node|formatnode#\n'
+hg --debug log -r 0 --template '{node|formatnode}\n'
 
 echo '# error on syntax'
 echo 'x = "f' >> t
--- a/tests/test-command-template.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-command-template.out	Wed Jul 08 17:03:16 2009 -0700
@@ -38,7 +38,7 @@
 8[tip]   946e2bd9c565   2020-01-01 10:01 +0000   test
   third
 
-7:-1   29114dbae42b   1970-01-12 13:46 +0000   user
+7:-1   29114dbae42b   1970-01-12 13:46 +0000   User Name <user@hostname>
   second
 
 6:5,4   c7b487c6c50e   1970-01-18 08:40 +0000   person
@@ -53,19 +53,23 @@
 3   10e46f2dcbf4   1970-01-16 01:06 +0000   person
   no user, no domain
 
-2   97054abb4ab8   1970-01-14 21:20 +0000   other
+2   97054abb4ab8   1970-01-14 21:20 +0000   other@place
   no person
 
-1   b608e9d1a3f0   1970-01-13 17:33 +0000   other
+1   b608e9d1a3f0   1970-01-13 17:33 +0000   A. N. Other <other@place>
   other 1
+other 2
 
-0   1e4e1b8f71e0   1970-01-12 13:46 +0000   user
+other 3
+
+0   1e4e1b8f71e0   1970-01-12 13:46 +0000   User Name <user@hostname>
   line 1
+line 2
 
 8[tip]:7,-1   946e2bd9c565   2020-01-01 10:01 +0000   test
   third
 
-7:-1,-1   29114dbae42b   1970-01-12 13:46 +0000   user
+7:-1,-1   29114dbae42b   1970-01-12 13:46 +0000   User Name <user@hostname>
   second
 
 6:5,4   c7b487c6c50e   1970-01-18 08:40 +0000   person
@@ -80,14 +84,18 @@
 3:2,-1   10e46f2dcbf4   1970-01-16 01:06 +0000   person
   no user, no domain
 
-2:1,-1   97054abb4ab8   1970-01-14 21:20 +0000   other
+2:1,-1   97054abb4ab8   1970-01-14 21:20 +0000   other@place
   no person
 
-1:0,-1   b608e9d1a3f0   1970-01-13 17:33 +0000   other
+1:0,-1   b608e9d1a3f0   1970-01-13 17:33 +0000   A. N. Other <other@place>
   other 1
+other 2
 
-0:-1,-1   1e4e1b8f71e0   1970-01-12 13:46 +0000   user
+other 3
+
+0:-1,-1   1e4e1b8f71e0   1970-01-12 13:46 +0000   User Name <user@hostname>
   line 1
+line 2
 
 # error if style not readable
 abort: Permission denied: ./q
--- a/tests/test-commit.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-commit.out	Wed Jul 08 17:03:16 2009 -0700
@@ -1,6 +1,4 @@
 % commit date test
-transaction abort!
-rollback completed
 abort: empty commit message
 abort: impossible time zone offset: 4444444
 abort: invalid date: '1\t15.1' 
@@ -8,20 +6,19 @@
 abort: date exceeds 32 bits: 111111111111
 % commit added file that has been deleted
 nothing changed
-abort: file bar not found!
+abort: bar: file not found!
 adding dir/file
 dir/file
 committed changeset 2:d2a76177cb42
 adding dir.file
-abort: no match under directory dir!
-abort: no match under directory .!
-abort: no match under directory ../dir2!
+abort: dir: no match under directory!
+abort: bleh: no match under directory!
+abort: dir2: no match under directory!
 dir/file
 committed changeset 3:1cd62a2d8db5
-does-not-exist: No such file or directory
-abort: file does-not-exist not found!
-abort: file baz not tracked!
-abort: file quux not tracked!
+abort: does-not-exist: No such file or directory
+abort: baz: file not tracked!
+abort: quux: file not tracked!
 dir/file
 committed changeset 4:49176991390e
 % partial subdir commit test
@@ -110,12 +107,11 @@
 
 
 HG: Enter commit message.  Lines beginning with 'HG:' are removed.
+HG: Leave message empty to abort commit.
 HG: --
 HG: user: test
 HG: branch 'default'
 HG: added added
 HG: changed changed
 HG: removed removed
-transaction abort!
-rollback completed
 abort: empty commit message
--- a/tests/test-committer	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-committer	Wed Jul 08 17:03:16 2009 -0700
@@ -29,3 +29,8 @@
 hg commit -d '1000000 0' -m commit-1
 rm .hg/hgrc
 hg commit -d '1000000 0' -m commit-1 2>&1 | sed -e "s/'[^']*'/user@host/"
+
+echo space > asdf
+hg commit -d '1000000 0' -u ' ' -m commit-1
+
+true
--- a/tests/test-committer.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-committer.out	Wed Jul 08 17:03:16 2009 -0700
@@ -24,3 +24,6 @@
 
 abort: Please specify a username.
 No username found, using user@host instead
+transaction abort!
+rollback completed
+abort: empty username!
--- a/tests/test-convert	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-convert	Wed Jul 08 17:03:16 2009 -0700
@@ -47,4 +47,6 @@
 
 echo % converting empty dir should fail "nicely"
 mkdir emptydir
-PATH=$BINDIR hg convert emptydir 2>&1 | sed 's,file://.*/emptydir,.../emptydir,g'
+# 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'
--- a/tests/test-convert-baz	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-convert-baz	Wed Jul 08 17:03:16 2009 -0700
@@ -73,7 +73,7 @@
 
 glog()
 {
-    hg glog --template '#rev# "#desc|firstline#" files: #files#\n' "$@"
+    hg glog --template '{rev} "{desc|firstline}" files: {files}\n' "$@"
 }
 
 echo % show graph log
--- a/tests/test-convert-bzr	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-convert-bzr	Wed Jul 08 17:03:16 2009 -0700
@@ -34,6 +34,12 @@
 hg convert --filemap filemap source source-filemap-hg
 hg -R source-filemap-hg manifest -r tip
 
+echo '% convert from lightweight checkout'
+bzr checkout --lightweight source source-light
+hg convert source-light source-light-hg
+echo "% lightweight manifest"
+hg manifest -R source-light-hg -r tip
+
 # extract timestamps that look just like hg's {date|isodate}:
 # yyyy-mm-dd HH:MM zzzz (no seconds!)
 echo "% compare timestamps"
@@ -114,4 +120,8 @@
 hg convert source source-hg
 manifest source-hg 0
 manifest source-hg tip
-cd ..
+cd source-hg
+echo % test the symlinks can be recreated
+hg up
+hg cat syma
+cd ../..
--- a/tests/test-convert-bzr.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-convert-bzr.out	Wed Jul 08 17:03:16 2009 -0700
@@ -35,6 +35,19 @@
 b
 d
 f
+% convert from lightweight checkout
+initializing destination source-light-hg repository
+warning: lightweight checkouts may cause conversion failures, try with a regular branch instead.
+scanning source...
+sorting...
+converting...
+1 Initial add: a, c, e
+0 rename a into b, create a, rename c into d
+% lightweight manifest
+a
+b
+d
+f
 % compare timestamps
 good: hg timestamps match bzr timestamps
 % merge
@@ -72,3 +85,6 @@
 755 * newprog
 644   program
 644 @ syma
+% test the symlinks can be recreated
+5 files updated, 0 files merged, 0 files removed, 0 files unresolved
+a
\ No newline at end of file
--- a/tests/test-convert-clonebranches.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-convert-clonebranches.out	Wed Jul 08 17:03:16 2009 -0700
@@ -3,10 +3,10 @@
 (branch merge, don't forget to commit)
 % convert
 3 adda
-2 addb
+2 changea
+1 addb
 pulling from default into branch0
 1 changesets found
-1 changea
 0 mergeab
 pulling from default into branch0
 1 changesets found
@@ -16,11 +16,11 @@
 (branch merge, don't forget to commit)
 marked working directory as branch branch3
 % incremental conversion
-2 c2
-pulling from branch0 into branch2
+2 c1
+pulling from branch0 into branch1
 2 changesets found
-1 c1
-pulling from branch0 into branch1
+1 c2
+pulling from branch0 into branch2
 2 changesets found
 0 c3
 pulling from branch2 into branch3
--- a/tests/test-convert-cvs	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-convert-cvs	Wed Jul 08 17:03:16 2009 -0700
@@ -22,8 +22,10 @@
 echo % create cvs repository
 mkdir cvsrepo
 cd cvsrepo
-export CVSROOT=`pwd`
-export CVS_OPTIONS=-f
+CVSROOT=`pwd`
+export CVSROOT
+CVS_OPTIONS=-f
+export CVS_OPTIONS
 cd ..
 
 cvscall -q -d "$CVSROOT" init
@@ -61,7 +63,7 @@
 echo include b/c > filemap
 hg convert --filemap filemap src src-filemap | sed -e 's/connecting to.*cvsrepo/connecting to cvsrepo/g'
 hgcat b/c
-hg -R src-filemap log --template '#rev# #desc# files: #files#\n'
+hg -R src-filemap log --template '{rev} {desc} files: {files}\n'
 
 echo % commit new file revisions
 cd src
@@ -79,7 +81,7 @@
 echo % convert again with --filemap
 hg convert --filemap filemap src src-filemap | sed -e 's/connecting to.*cvsrepo/connecting to cvsrepo/g'
 hgcat b/c
-hg -R src-filemap log --template '#rev# #desc# files: #files#\n'
+hg -R src-filemap log --template '{rev} {desc} files: {files}\n'
 
 echo % commit branch
 cd src
@@ -99,5 +101,5 @@
 echo % convert again with --filemap
 hg convert --filemap filemap src src-filemap | sed -e 's/connecting to.*cvsrepo/connecting to cvsrepo/g'
 hgcat b/c
-hg -R src-filemap log --template '#rev# #desc# files: #files#\n'
-hg -R src-hg glog --template '#rev# (#branches#) #desc# files: #files#\n'
+hg -R src-filemap log --template '{rev} {desc} files: {files}\n'
+hg -R src-hg glog --template '{rev} ({branches}) {desc} files: {files}\n'
--- a/tests/test-convert-cvs-branch	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-convert-cvs-branch	Wed Jul 08 17:03:16 2009 -0700
@@ -1,6 +1,7 @@
 #!/bin/sh
 
-# This is http://www.selenic.com/mercurial/bts/issue1148
+# This is http://mercurial.selenic.com/bts/issue1148
+#     and http://mercurial.selenic.com/bts/issue1447
 
 "$TESTDIR/hghave" cvs || exit 80
 
@@ -19,8 +20,10 @@
 echo % create cvs repository
 mkdir cvsrepo
 cd cvsrepo
-export CVSROOT=`pwd`
-export CVS_OPTIONS=-f
+CVSROOT=`pwd`
+export CVSROOT
+CVS_OPTIONS=-f
+export CVS_OPTIONS
 cd ..
 
 cvscall -q -d "$CVSROOT" init
@@ -59,4 +62,51 @@
 
 echo % Check the result
 
-hg -R src-hg glog --template '#rev# (#branches#) #desc# files: #files#\n'
+hg -R src-hg glog --template '{rev} ({branches}) {desc} files: {files}\n'
+
+echo ""
+
+echo % issue 1447
+cvscall()
+{
+    echo cvs -f "$@"
+    cvs -f "$@"
+    sleep 1
+}
+
+cvsci()
+{
+    echo cvs -f ci "$@"
+    cvs -f ci "$@" >/dev/null 2>&1
+    sleep 1
+}
+
+cvscall -Q -d `pwd`/cvsmaster2 init >/dev/null 2>&1
+cd cvsmaster2
+export CVSROOT=`pwd`
+mkdir foo
+cd ..
+cvscall -Q co -d cvswork2 foo
+
+cd cvswork2
+echo foo > a.txt
+echo bar > b.txt
+cvscall -Q add a.txt b.txt
+cvsci -m "Initial commit"
+
+echo foo > b.txt
+cvsci -m "Fix b on HEAD"
+
+echo bar > a.txt
+cvsci -m "Small fix in a on HEAD"
+
+cvscall -Q tag -b BRANCH
+cvscall -Q up -P -rBRANCH
+
+echo baz > b.txt
+cvsci -m "Change on BRANCH in b"
+
+hg debugcvsps -x --parents foo | sed -e 's/Author:.*/Author:/' -e 's/Date:.*/Date:/'
+
+cd ..
+
--- a/tests/test-convert-cvs-branch.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-convert-cvs-branch.out	Wed Jul 08 17:03:16 2009 -0700
@@ -51,3 +51,71 @@
 |/
 o  0 () Initial revision files: a b
 
+
+% issue 1447
+cvs -f -Q co -d cvswork2 foo
+cvs -f -Q add a.txt b.txt
+cvs -f ci -m Initial commit
+cvs -f ci -m Fix b on HEAD
+cvs -f ci -m Small fix in a on HEAD
+cvs -f -Q tag -b BRANCH
+cvs -f -Q up -P -rBRANCH
+cvs -f ci -m Change on BRANCH in b
+collecting CVS rlog
+5 log entries
+creating changesets
+4 changeset entries
+---------------------
+PatchSet 1 
+Date:
+Author:
+Branch: HEAD
+Tag: (none) 
+Log:
+Initial commit
+
+Members: 
+	a.txt:INITIAL->1.1 
+	b.txt:INITIAL->1.1 
+
+---------------------
+PatchSet 2 
+Date:
+Author:
+Branch: HEAD
+Tag: (none) 
+Branchpoints: BRANCH 
+Parent: 1
+Log:
+Fix b on HEAD
+
+Members: 
+	b.txt:1.1->1.2 
+
+---------------------
+PatchSet 3 
+Date:
+Author:
+Branch: HEAD
+Tag: (none) 
+Branchpoints: BRANCH 
+Parent: 2
+Log:
+Small fix in a on HEAD
+
+Members: 
+	a.txt:1.1->1.2 
+
+---------------------
+PatchSet 4 
+Date:
+Author:
+Branch: BRANCH
+Tag: (none) 
+Parent: 3
+Log:
+Change on BRANCH in b
+
+Members: 
+	b.txt:1.2->1.2.2.1 
+
--- a/tests/test-convert-cvs-builtincvsps	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-convert-cvs-builtincvsps	Wed Jul 08 17:03:16 2009 -0700
@@ -21,8 +21,10 @@
 echo % create cvs repository
 mkdir cvsrepo
 cd cvsrepo
-export CVSROOT=`pwd`
-export CVS_OPTIONS=-f
+CVSROOT=`pwd`
+export CVSROOT
+CVS_OPTIONS=-f
+export CVS_OPTIONS
 cd ..
 
 cvscall -q -d "$CVSROOT" init
@@ -60,7 +62,7 @@
 echo include b/c > filemap
 hg convert --filemap filemap src src-filemap | sed -e 's/connecting to.*cvsrepo/connecting to cvsrepo/g'
 hgcat b/c
-hg -R src-filemap log --template '#rev# #desc# files: #files#\n'
+hg -R src-filemap log --template '{rev} {desc} files: {files}\n'
 
 echo % commit new file revisions
 cd src
@@ -78,7 +80,7 @@
 echo % convert again with --filemap
 hg convert --filemap filemap src src-filemap | sed -e 's/connecting to.*cvsrepo/connecting to cvsrepo/g'
 hgcat b/c
-hg -R src-filemap log --template '#rev# #desc# files: #files#\n'
+hg -R src-filemap log --template '{rev} {desc} files: {files}\n'
 
 echo % commit branch
 cd src
@@ -92,13 +94,12 @@
 
 echo % convert again
 hg convert src src-hg | sed -e 's/connecting to.*cvsrepo/connecting to cvsrepo/g'
-hgcat a
 hgcat b/c
 
 echo % convert again with --filemap
 hg convert --filemap filemap src src-filemap | sed -e 's/connecting to.*cvsrepo/connecting to cvsrepo/g'
 hgcat b/c
-hg -R src-filemap log --template '#rev# #desc# files: #files#\n'
+hg -R src-filemap log --template '{rev} {desc} files: {files}\n'
 
 echo % commit a new revision with funny log message
 cd src
@@ -114,7 +115,7 @@
 hg convert src src-hg | sed -e 's/connecting to.*cvsrepo/connecting to cvsrepo/g'
 
 echo "graphlog = " >> $HGRCPATH
-hg -R src-hg glog --template '#rev# (#branches#) #desc# files: #files#\n'
+hg -R src-hg glog --template '{rev} ({branches}) {desc} files: {files}\n'
 
 echo % testing debugcvsps
 cd src
--- a/tests/test-convert-cvs-builtincvsps-cvsnt-mergepoints	Wed Jul 08 17:01:18 2009 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,78 +0,0 @@
-#!/bin/bash
-
-"$TESTDIR/hghave" cvs || exit 80
-
-cvscall()
-{
-    cvs -f "$@"
-}
-
-hgcat()
-{
-    hg --cwd src-hg cat -r tip "$1"
-}
-
-echo "[extensions]" >> $HGRCPATH
-echo "convert = " >> $HGRCPATH
-echo "graphlog = " >> $HGRCPATH
-echo "[convert]" >> $HGRCPATH
-echo "cvsps=builtin" >> $HGRCPATH
-
-echo % create cvs repository
-mkdir cvsmaster
-cd cvsmaster
-export CVSROOT=`pwd`
-export CVS_OPTIONS=-f
-cd ..
-
-cvscall -q -d "$CVSROOT" init
-
-cvscall -q checkout -d cvsworktmp .
-cd cvsworktmp
-mkdir foo
-cvscall -q add foo | sed -e 's/Directory .* added to the repository//g'
-cd foo
-echo foo > foo.txt
-cvscall -q add foo.txt 
-cvscall -q ci -m "foo.txt" | sed 's/.*,v.*/checking in/g'
- 
-cd ../..
-rm -rf cvsworktmp
-
-cvscall -q checkout -d cvswork foo
-
-cd cvswork
-
-cvscall -q rtag -b -R MYBRANCH1 foo
-cvscall -q up -P -r MYBRANCH1
-echo bar > foo.txt
-cvscall -q ci -m "bar" | sed 's/.*,v.*/checking in/g'
-echo baz > foo.txt
-cvscall -q ci -m "baz" | sed 's/.*,v.*/checking in/g'
-
-cvscall -q rtag -b -R -r MYBRANCH1 MYBRANCH1_2 foo
-cvscall -q up -P -r MYBRANCH1_2
-
-echo bazzie > foo.txt
-cvscall -q ci -m "bazzie" | sed 's/.*,v.*/checking in/g'
-
-cvscall -q rtag -b -R MYBRANCH1_1 foo
-cvscall -q up -P -r MYBRANCH1_1
-
-echo quux > foo.txt
-cvscall -q ci -m "quux" | sed 's/.*,v.*/checking in/g'
-cvscall -q up -P -jMYBRANCH1 | sed 's/RCS file: .*,v/merging MYBRANCH1/g'
-echo xyzzy > foo.txt
-cvscall -q ci -m "merge" | sed 's/.*,v.*/checking in/g'
-
-cvscall -q up -P -A
-
-cvscall -q up -P -jMYBRANCH1_2 | sed 's/RCS file: .*,v/merging MYBRANCH1_2/g'
-cvscall -q ci -m "merge" | sed 's/.*,v.*/checking in/g'
-
-REALCVS=`which cvs`
-echo "for x in \$*; do if [ \"\$x\" = \"rlog\" ]; then echo \"RCS file: $CVSROOT/foo/foo.txt,v\"; cat $TESTDIR/test-convert-cvs-builtincvsps-cvsnt-mergepoints.rlog; exit 0; fi; done; $REALCVS \$*" > cvs
-chmod +x cvs
-PATH=.:${PATH} hg debugcvsps --parents foo | sed -e 's/Author:.*/Author:/' -e 's/Date:.*/Date:/'
-
-cd ..
--- a/tests/test-convert-cvs-builtincvsps-cvsnt-mergepoints.out	Wed Jul 08 17:01:18 2009 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,138 +0,0 @@
-% create cvs repository
-U cvsworktmp/CVSROOT/checkoutlist
-U cvsworktmp/CVSROOT/commitinfo
-U cvsworktmp/CVSROOT/config
-U cvsworktmp/CVSROOT/cvswrappers
-U cvsworktmp/CVSROOT/loginfo
-U cvsworktmp/CVSROOT/modules
-U cvsworktmp/CVSROOT/notify
-U cvsworktmp/CVSROOT/postadmin
-U cvsworktmp/CVSROOT/postproxy
-U cvsworktmp/CVSROOT/posttag
-U cvsworktmp/CVSROOT/postwatch
-U cvsworktmp/CVSROOT/preproxy
-U cvsworktmp/CVSROOT/rcsinfo
-U cvsworktmp/CVSROOT/taginfo
-U cvsworktmp/CVSROOT/verifymsg
-
-cvs add: use `cvs commit' to add this file permanently
-checking in
-initial revision: 1.1
-U cvswork/foo.txt
-checking in
-new revision: 1.1.2.1; previous revision: 1.1
-checking in
-new revision: 1.1.2.2; previous revision: 1.1.2.1
-checking in
-new revision: 1.1.2.2.2.1; previous revision: 1.1.2.2
-U foo.txt
-checking in
-new revision: 1.1.4.1; previous revision: 1.1
-rcsmerge: warning: conflicts during merge
-merging MYBRANCH1
-retrieving revision 1.1
-retrieving revision 1.1.2.2
-Merging differences between 1.1 and 1.1.2.2 into foo.txt
-checking in
-new revision: 1.1.4.2; previous revision: 1.1.4.1
-U foo.txt
-merging MYBRANCH1_2
-retrieving revision 1.1
-retrieving revision 1.1.2.2.2.1
-Merging differences between 1.1 and 1.1.2.2.2.1 into foo.txt
-checking in
-new revision: 1.2; previous revision: 1.1
-collecting CVS rlog
-7 log entries
-creating changesets
-7 changeset entries
----------------------
-PatchSet 1 
-Date:
-Author:
-Branch: HEAD
-Tag: (none) 
-Log:
-foo.txt
-
-Members: 
-	foo.txt:INITIAL->1.1 
-
----------------------
-PatchSet 2 
-Date:
-Author:
-Branch: MYBRANCH1
-Tag: (none) 
-Parent: 1
-Log:
-bar
-
-Members: 
-	foo.txt:1.1->1.1.2.1 
-
----------------------
-PatchSet 3 
-Date:
-Author:
-Branch: MYBRANCH1
-Tag: (none) 
-Parent: 2
-Log:
-baz
-
-Members: 
-	foo.txt:1.1.2.1->1.1.2.2 
-
----------------------
-PatchSet 4 
-Date:
-Author:
-Branch: MYBRANCH1_1
-Tag: (none) 
-Parent: 1
-Log:
-quux
-
-Members: 
-	foo.txt:1.1->1.1.4.1 
-
----------------------
-PatchSet 5 
-Date:
-Author:
-Branch: MYBRANCH1_2
-Tag: (none) 
-Parent: 3
-Log:
-bazzie
-
-Members: 
-	foo.txt:1.1.2.2->1.1.2.2.2.1 
-
----------------------
-PatchSet 6 
-Date:
-Author:
-Branch: HEAD
-Tag: (none) 
-Parents: 1,5
-Log:
-merge
-
-Members: 
-	foo.txt:1.1->1.2 
-
----------------------
-PatchSet 7 
-Date:
-Author:
-Branch: MYBRANCH1_1
-Tag: (none) 
-Parents: 4,3
-Log:
-merge
-
-Members: 
-	foo.txt:1.1.4.1->1.1.4.2 
-
--- a/tests/test-convert-cvs-builtincvsps-cvsnt-mergepoints.rlog	Wed Jul 08 17:01:18 2009 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-head: 1.2
-branch:
-locks: strict
-access list:
-symbolic names:
-	MYBRANCH1_2: 1.1.2.2.0.2
-	MYBRANCH1_1: 1.1.0.4
-	MYBRANCH1: 1.1.0.2
-keyword substitution: kv
-total revisions: 8;	selected revisions: 8
-description:
-----------------------------
-revision 1.2
-date: 2009/04/02 07:00:32;  author: user;  state: Exp;  lines: +1 -1;  kopt: kv;  commitid: 14d449d462903487;  mergepoint: 1.1.2.2.2.1;  filename: foo.txt;
-merge
-----------------------------
-revision 1.1
-date: 2009/04/02 06:50:43;  author: user;  state: Exp;  kopt: kv;  commitid: 17ac49d460432d04;  filename: foo.txt;
-branches:  1.1.2;  1.1.4;
-foo.txt
-----------------------------
-revision 1.1.4.2
-date: 2009/04/02 07:02:51;  author: user;  state: Exp;  lines: +1 -0;  kopt: kv;  commitid: 170049d4631b364d;  mergepoint: 1.1.2.2;  filename: foo.txt;
-merge
-----------------------------
-revision 1.1.4.1
-date: 2009/04/02 06:53:42;  author: user;  state: Exp;  lines: +1 -1;  kopt: kv;  commitid: dc849d460f52f49;  filename: foo.txt;
-quux
-----------------------------
-revision 1.1.2.2
-date: 2009/04/02 06:53:20;  author: user;  state: Exp;  lines: +1 -1;  kopt: kv;  commitid: 8ec49d460e02f04;  filename: foo.txt;
-branches:  1.1.2.2.2;
-baz
-----------------------------
-revision 1.1.2.1
-date: 2009/04/02 06:52:38;  author: user;  state: Exp;  lines: +1 -1;  kopt: kv;  commitid: d5049d460b62e7b;  filename: foo.txt;
-bar
-----------------------------
-revision 1.1.2.2.2.1
-date: 2009/04/02 06:55:42;  author: user;  state: Exp;  lines: +1 -1;  kopt: kv;  commitid: 11c849d4616d30d1;  filename: foo.txt;
-bazzie
-=============================================================================
--- a/tests/test-convert-cvs-builtincvsps.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-convert-cvs-builtincvsps.out	Wed Jul 08 17:03:16 2009 -0700
@@ -42,6 +42,7 @@
 converting...
 2 Initial revision
 1 import
+filtering out empty revision
 rolling back last transaction
 0 ci0
 updating tags
@@ -103,7 +104,6 @@
 sorting...
 converting...
 0 ci2
-a
 c
 d
 % convert again with --filemap
@@ -141,13 +141,13 @@
 |  ----------------------------
 |  log message files: a
 o  5 (branch) ci2 files: b/c
+
+o  4 () ci1 files: a b/c
 |
-| o  4 () ci1 files: a b/c
-| |
-| o  3 () update tags files: .hgtags
-| |
-| o  2 () ci0 files: b/c
-|/
+o  3 () update tags files: .hgtags
+|
+o  2 () ci0 files: b/c
+|
 | o  1 (INITIAL) import files:
 |/
 o  0 () Initial revision files: a b/c
@@ -156,22 +156,35 @@
 collecting CVS rlog
 9 log entries
 creating changesets
-6 changeset entries
+8 changeset entries
 ---------------------
 PatchSet 1 
 Date:
 Author:
 Branch: HEAD
 Tag: (none) 
+Branchpoints: INITIAL 
 Log:
 Initial revision
 
 Members: 
 	a:INITIAL->1.1 
+
+---------------------
+PatchSet 2 
+Date:
+Author:
+Branch: HEAD
+Tag: (none) 
+Branchpoints: INITIAL, branch 
+Log:
+Initial revision
+
+Members: 
 	b/c:INITIAL->1.1 
 
 ---------------------
-PatchSet 2 
+PatchSet 3 
 Date:
 Author:
 Branch: INITIAL
@@ -184,7 +197,7 @@
 	b/c:1.1->1.1.1.1 
 
 ---------------------
-PatchSet 3 
+PatchSet 4 
 Date:
 Author:
 Branch: HEAD
@@ -196,7 +209,20 @@
 	b/c:1.1->1.2 
 
 ---------------------
-PatchSet 4 
+PatchSet 5 
+Date:
+Author:
+Branch: HEAD
+Tag: (none) 
+Branchpoints: branch 
+Log:
+ci1
+
+Members: 
+	a:1.1->1.2 
+
+---------------------
+PatchSet 6 
 Date:
 Author:
 Branch: HEAD
@@ -205,11 +231,10 @@
 ci1
 
 Members: 
-	a:1.1->1.2 
 	b/c:1.2->1.3 
 
 ---------------------
-PatchSet 5 
+PatchSet 7 
 Date:
 Author:
 Branch: branch
@@ -221,7 +246,7 @@
 	b/c:1.1->1.1.2.1 
 
 ---------------------
-PatchSet 6 
+PatchSet 8 
 Date:
 Author:
 Branch: branch
--- a/tests/test-convert-cvs-detectmerge	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-convert-cvs-detectmerge	Wed Jul 08 17:03:16 2009 -0700
@@ -6,7 +6,8 @@
 
 "$TESTDIR/hghave" cvs || exit 80
 
-export CVSROOT=`pwd`/cvsrepo
+CVSROOT=`pwd`/cvsrepo
+export CVSROOT
 
 # XXX copied from test-convert-cvs-synthetic
 cvscall()
--- a/tests/test-convert-cvs-synthetic	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-convert-cvs-synthetic	Wed Jul 08 17:03:16 2009 -0700
@@ -14,8 +14,10 @@
 echo % create cvs repository with one project
 mkdir cvsrepo
 cd cvsrepo
-export CVSROOT=`pwd`
-export CVS_OPTIONS=-f
+CVSROOT=`pwd`
+export CVSROOT
+CVS_OPTIONS=-f
+export CVS_OPTIONS
 cd ..
 
 filterpath()
--- a/tests/test-convert-cvs.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-convert-cvs.out	Wed Jul 08 17:03:16 2009 -0700
@@ -12,6 +12,7 @@
 % commit a new revision changing b/c
 checking in src/b/c,v
 % convert fresh repo
+warning: support for external cvsps is deprecated and will be removed in Mercurial 1.4
 initializing destination src-hg repository
 connecting to cvsrepo
 scanning source...
@@ -25,6 +26,7 @@
 c
 c
 % convert fresh repo with --filemap
+warning: support for external cvsps is deprecated and will be removed in Mercurial 1.4
 initializing destination src-filemap repository
 connecting to cvsrepo
 scanning source...
@@ -32,6 +34,7 @@
 converting...
 2 Initial revision
 1 import
+filtering out empty revision
 rolling back last transaction
 0 ci0
 updating tags
@@ -44,6 +47,7 @@
 checking in src/a,v
 checking in src/b/c,v
 % convert again
+warning: support for external cvsps is deprecated and will be removed in Mercurial 1.4
 connecting to cvsrepo
 scanning source...
 sorting...
@@ -55,6 +59,7 @@
 c
 c
 % convert again with --filemap
+warning: support for external cvsps is deprecated and will be removed in Mercurial 1.4
 connecting to cvsrepo
 scanning source...
 sorting...
@@ -73,6 +78,7 @@
 T b/c
 checking in src/b/c,v
 % convert again
+warning: support for external cvsps is deprecated and will be removed in Mercurial 1.4
 connecting to cvsrepo
 scanning source...
 sorting...
@@ -82,6 +88,7 @@
 c
 d
 % convert again with --filemap
+warning: support for external cvsps is deprecated and will be removed in Mercurial 1.4
 connecting to cvsrepo
 scanning source...
 sorting...
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-convert-cvsnt-mergepoints	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,104 @@
+#!/bin/sh
+
+"$TESTDIR/hghave" cvs || exit 80
+
+filterpath()
+{
+    eval "$@" | sed "s:$CVSROOT:*REPO*:g"
+}
+
+cvscall()
+{
+    echo cvs -f "$@"
+    cvs -f "$@"
+}
+
+# output of 'cvs ci' varies unpredictably, so discard most of it
+# -- just keep the part that matters
+cvsci()
+{
+    echo cvs -f ci -f "$@"
+    cvs -f ci -f "$@" 2>&1 | egrep "^(new|initial) revision:"
+}
+
+hgcat()
+{
+    hg --cwd src-hg cat -r tip "$1"
+}
+
+echo "[extensions]" >> $HGRCPATH
+echo "convert = " >> $HGRCPATH
+echo "graphlog = " >> $HGRCPATH
+echo "[convert]" >> $HGRCPATH
+echo "cvsps=builtin" >> $HGRCPATH
+
+echo "% create cvs repository"
+mkdir cvsmaster
+cd cvsmaster
+CVSROOT=`pwd`
+export CVSROOT
+CVS_OPTIONS=-f
+export CVS_OPTIONS
+cd ..
+filterpath cvscall -Q -d "$CVSROOT" init
+
+echo "% checkout #1: add foo.txt"
+cvscall -Q checkout -d cvsworktmp .
+cd cvsworktmp
+mkdir foo
+cvscall -Q add foo
+cd foo
+echo foo > foo.txt
+cvscall -Q add foo.txt 
+cvsci -m "add foo.txt" foo.txt
+ 
+cd ../..
+rm -rf cvsworktmp
+
+echo "% checkout #2: create MYBRANCH1 and modify foo.txt on it"
+cvscall -Q checkout -d cvswork foo
+
+cd cvswork
+
+cvscall -q rtag -b -R MYBRANCH1 foo
+cvscall -Q update -P -r MYBRANCH1
+echo bar > foo.txt
+cvsci -m "bar" foo.txt
+echo baz > foo.txt
+cvsci -m "baz" foo.txt
+
+echo "% create MYBRANCH1_2 and modify foo.txt some more"
+cvscall -q rtag -b -R -r MYBRANCH1 MYBRANCH1_2 foo
+cvscall -Q update -P -r MYBRANCH1_2
+
+echo bazzie > foo.txt
+cvsci -m "bazzie" foo.txt
+
+echo "% create MYBRANCH1_1 and modify foo.txt yet again"
+cvscall -q rtag -b -R MYBRANCH1_1 foo
+cvscall -Q update -P -r MYBRANCH1_1
+
+echo quux > foo.txt
+cvsci -m "quux" foo.txt
+
+echo "% merge MYBRANCH1 to MYBRANCH1_1"
+filterpath cvscall -Q update -P -jMYBRANCH1
+# carefully placed sleep to dodge cvs bug (optimization?) where it
+# sometimes ignores a "commit" command if it comes too fast (the -f
+# option in cvsci seems to work for all the other commits in this
+# script)
+sleep 1
+echo xyzzy > foo.txt
+cvsci -m "merge1+clobber" foo.txt
+
+echo "% return to trunk and merge MYBRANCH1_2"
+cvscall -Q update -P -A
+filterpath cvscall -Q update -P -jMYBRANCH1_2
+cvsci -m "merge2" foo.txt
+
+REALCVS=`which cvs`
+echo "for x in \$*; do if [ \"\$x\" = \"rlog\" ]; then echo \"RCS file: $CVSROOT/foo/foo.txt,v\"; cat $TESTDIR/test-convert-cvsnt-mergepoints.rlog; exit 0; fi; done; $REALCVS \$*" > ../cvs
+chmod +x ../cvs
+PATH=..:${PATH} hg debugcvsps --parents foo | sed -e 's/Author:.*/Author:/' -e 's/Date:.*/Date:/'
+
+cd ..
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-convert-cvsnt-mergepoints.out	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,140 @@
+% create cvs repository
+cvs -f -Q -d *REPO* init
+% checkout #1: add foo.txt
+cvs -f -Q checkout -d cvsworktmp .
+cvs -f -Q add foo
+cvs -f -Q add foo.txt
+cvs -f ci -f -m add foo.txt foo.txt
+initial revision: 1.1
+% checkout #2: create MYBRANCH1 and modify foo.txt on it
+cvs -f -Q checkout -d cvswork foo
+cvs -f -q rtag -b -R MYBRANCH1 foo
+cvs -f -Q update -P -r MYBRANCH1
+cvs -f ci -f -m bar foo.txt
+new revision: 1.1.2.1; previous revision: 1.1
+cvs -f ci -f -m baz foo.txt
+new revision: 1.1.2.2; previous revision: 1.1.2.1
+% create MYBRANCH1_2 and modify foo.txt some more
+cvs -f -q rtag -b -R -r MYBRANCH1 MYBRANCH1_2 foo
+cvs -f -Q update -P -r MYBRANCH1_2
+cvs -f ci -f -m bazzie foo.txt
+new revision: 1.1.2.2.2.1; previous revision: 1.1.2.2
+% create MYBRANCH1_1 and modify foo.txt yet again
+cvs -f -q rtag -b -R MYBRANCH1_1 foo
+cvs -f -Q update -P -r MYBRANCH1_1
+cvs -f ci -f -m quux foo.txt
+new revision: 1.1.4.1; previous revision: 1.1
+% merge MYBRANCH1 to MYBRANCH1_1
+rcsmerge: warning: conflicts during merge
+cvs -f -Q update -P -jMYBRANCH1
+RCS file: *REPO*/foo/foo.txt,v
+retrieving revision 1.1
+retrieving revision 1.1.2.2
+Merging differences between 1.1 and 1.1.2.2 into foo.txt
+cvs -f ci -f -m merge1+clobber foo.txt
+new revision: 1.1.4.2; previous revision: 1.1.4.1
+% return to trunk and merge MYBRANCH1_2
+cvs -f -Q update -P -A
+cvs -f -Q update -P -jMYBRANCH1_2
+RCS file: *REPO*/foo/foo.txt,v
+retrieving revision 1.1
+retrieving revision 1.1.2.2.2.1
+Merging differences between 1.1 and 1.1.2.2.2.1 into foo.txt
+cvs -f ci -f -m merge2 foo.txt
+new revision: 1.2; previous revision: 1.1
+collecting CVS rlog
+7 log entries
+creating changesets
+7 changeset entries
+---------------------
+PatchSet 1 
+Date:
+Author:
+Branch: HEAD
+Tag: (none) 
+Branchpoints: MYBRANCH1_1, MYBRANCH1 
+Log:
+foo.txt
+
+Members: 
+	foo.txt:INITIAL->1.1 
+
+---------------------
+PatchSet 2 
+Date:
+Author:
+Branch: MYBRANCH1
+Tag: (none) 
+Parent: 1
+Log:
+bar
+
+Members: 
+	foo.txt:1.1->1.1.2.1 
+
+---------------------
+PatchSet 3 
+Date:
+Author:
+Branch: MYBRANCH1
+Tag: (none) 
+Branchpoints: MYBRANCH1_2 
+Parent: 2
+Log:
+baz
+
+Members: 
+	foo.txt:1.1.2.1->1.1.2.2 
+
+---------------------
+PatchSet 4 
+Date:
+Author:
+Branch: MYBRANCH1_1
+Tag: (none) 
+Parent: 1
+Log:
+quux
+
+Members: 
+	foo.txt:1.1->1.1.4.1 
+
+---------------------
+PatchSet 5 
+Date:
+Author:
+Branch: MYBRANCH1_2
+Tag: (none) 
+Parent: 3
+Log:
+bazzie
+
+Members: 
+	foo.txt:1.1.2.2->1.1.2.2.2.1 
+
+---------------------
+PatchSet 6 
+Date:
+Author:
+Branch: HEAD
+Tag: (none) 
+Parents: 1,5
+Log:
+merge
+
+Members: 
+	foo.txt:1.1->1.2 
+
+---------------------
+PatchSet 7 
+Date:
+Author:
+Branch: MYBRANCH1_1
+Tag: (none) 
+Parents: 4,3
+Log:
+merge
+
+Members: 
+	foo.txt:1.1.4.1->1.1.4.2 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-convert-cvsnt-mergepoints.rlog	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,42 @@
+head: 1.2
+branch:
+locks: strict
+access list:
+symbolic names:
+	MYBRANCH1_2: 1.1.2.2.0.2
+	MYBRANCH1_1: 1.1.0.4
+	MYBRANCH1: 1.1.0.2
+keyword substitution: kv
+total revisions: 8;	selected revisions: 8
+description:
+----------------------------
+revision 1.2
+date: 2009/04/02 07:00:32;  author: user;  state: Exp;  lines: +1 -1;  kopt: kv;  commitid: 14d449d462903487;  mergepoint: 1.1.2.2.2.1;  filename: foo.txt;
+merge
+----------------------------
+revision 1.1
+date: 2009/04/02 06:50:43;  author: user;  state: Exp;  kopt: kv;  commitid: 17ac49d460432d04;  filename: foo.txt;
+branches:  1.1.2;  1.1.4;
+foo.txt
+----------------------------
+revision 1.1.4.2
+date: 2009/04/02 07:02:51;  author: user;  state: Exp;  lines: +1 -0;  kopt: kv;  commitid: 170049d4631b364d;  mergepoint: 1.1.2.2;  filename: foo.txt;
+merge
+----------------------------
+revision 1.1.4.1
+date: 2009/04/02 06:53:42;  author: user;  state: Exp;  lines: +1 -1;  kopt: kv;  commitid: dc849d460f52f49;  filename: foo.txt;
+quux
+----------------------------
+revision 1.1.2.2
+date: 2009/04/02 06:53:20;  author: user;  state: Exp;  lines: +1 -1;  kopt: kv;  commitid: 8ec49d460e02f04;  filename: foo.txt;
+branches:  1.1.2.2.2;
+baz
+----------------------------
+revision 1.1.2.1
+date: 2009/04/02 06:52:38;  author: user;  state: Exp;  lines: +1 -1;  kopt: kv;  commitid: d5049d460b62e7b;  filename: foo.txt;
+bar
+----------------------------
+revision 1.1.2.2.2.1
+date: 2009/04/02 06:55:42;  author: user;  state: Exp;  lines: +1 -1;  kopt: kv;  commitid: 11c849d4616d30d1;  filename: foo.txt;
+bazzie
+=============================================================================
--- a/tests/test-convert-darcs	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-convert-darcs	Wed Jul 08 17:03:16 2009 -0700
@@ -53,7 +53,7 @@
 
 glog()
 {
-    hg glog --template '#rev# "#desc|firstline#" files: #files#\n' "$@"
+    hg glog --template '{rev} "{desc|firstline}" files: {files}\n' "$@"
 }
 
 hg convert darcs-repo darcs-repo-hg 2>&1 | grep -v hGetLine | grep -v '^$'
--- a/tests/test-convert-datesort	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-convert-datesort	Wed Jul 08 17:03:16 2009 -0700
@@ -20,10 +20,10 @@
 hg up -C 0
 hg branch branchb
 echo b >> b
-hg ci -Am b0 -d '5 0'
+hg ci -Am b0 -d '6 0'
 hg up -C brancha
 echo a >> a
-hg ci -m a4 -d '6 0'
+hg ci -m a4 -d '5 0'
 echo a >> a
 hg ci -m a5 -d '7 0'
 echo a >> a
@@ -34,7 +34,12 @@
 cd ..
 
 echo % convert with datesort
-hg convert --datesort t t2
+hg convert --datesort t t-datesort
 echo % graph converted repo
-hg -R t2 glog --template '#rev# "#desc#"\n'
+hg -R t-datesort glog --template '{rev} "{desc}"\n'
 
+echo '% convert with datesort (default mode)'
+hg convert t t-sourcesort
+echo % graph converted repo
+hg -R t-sourcesort glog --template '{rev} "{desc}"\n'
+
--- a/tests/test-convert-datesort.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-convert-datesort.out	Wed Jul 08 17:03:16 2009 -0700
@@ -7,7 +7,40 @@
 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
 % convert with datesort
-initializing destination t2 repository
+initializing destination t-datesort repository
+scanning source...
+sorting...
+converting...
+8 a0
+7 a1
+6 a2
+5 a3
+4 a4
+3 b0
+2 a5
+1 a6
+0 b1
+% graph converted repo
+o  8 "b1"
+|
+| o  7 "a6"
+| |
+| o  6 "a5"
+| |
+o |  5 "b0"
+| |
+| o  4 "a4"
+| |
+| o  3 "a3"
+| |
+| o  2 "a2"
+| |
+| o  1 "a1"
+|/
+o  0 "a0"
+
+% convert with datesort (default mode)
+initializing destination t-sourcesort repository
 scanning source...
 sorting...
 converting...
--- a/tests/test-convert-filemap	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-convert-filemap	Wed Jul 08 17:03:16 2009 -0700
@@ -8,7 +8,7 @@
 
 glog()
 {
-    hg glog --template '#rev# "#desc#" files: #files#\n' "$@"
+    hg glog --template '{rev} "{desc}" files: {files}\n' "$@"
 }
 
 hg init source
--- a/tests/test-convert-git	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-convert-git	Wed Jul 08 17:03:16 2009 -0700
@@ -101,7 +101,7 @@
 
 glog()
 {
-    hg glog --template '#rev# "#desc|firstline#" files: #files#\n' "$@"
+    hg glog --template '{rev} "{desc|firstline}" files: {files}\n' "$@"
 }
 
 splitrepo()
@@ -165,5 +165,9 @@
 
 echo '% convert author committer'
 hg convert git-repo4 git-repo4-hg
-cd git-repo4-hg
-hg log -v
+hg -R git-repo4-hg log -v
+
+echo '% --sourceorder should fail'
+hg convert --sourcesort git-repo4 git-repo4-sourcesort-hg
+
+true
--- a/tests/test-convert-git.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-convert-git.out	Wed Jul 08 17:03:16 2009 -0700
@@ -124,3 +124,6 @@
 addfoo
 
 
+% --sourceorder should fail
+initializing destination git-repo4-sourcesort-hg repository
+abort: --sourcesort is not supported by this data source
--- a/tests/test-convert-hg-sink	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-convert-hg-sink	Wed Jul 08 17:03:16 2009 -0700
@@ -55,3 +55,13 @@
 echo '% no copies'
 hg up -C
 hg debugrename baz
+cd ..
+
+echo '% test tag rewriting'
+cat > filemap <<EOF
+exclude foo
+EOF
+hg convert --filemap filemap orig new-filemap 2>&1 | grep -v 'subversion python bindings could not be loaded'
+cd new-filemap
+hg tags
+cd ..
--- a/tests/test-convert-hg-sink.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-convert-hg-sink.out	Wed Jul 08 17:03:16 2009 -0700
@@ -48,3 +48,15 @@
 % no copies
 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
 baz not renamed
+% test tag rewriting
+initializing destination new-filemap repository
+scanning source...
+sorting...
+converting...
+4 add foo and bar
+3 remove foo
+2 add foo/file
+1 Added tag some-tag for changeset ad681a868e44
+0 add baz
+tip                                2:6f4fd1df87fb
+some-tag                           0:ba8636729451
--- a/tests/test-convert-hg-source.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-convert-hg-source.out	Wed Jul 08 17:03:16 2009 -0700
@@ -29,8 +29,8 @@
 converting...
 4 init
 ignoring: data/b.i@1e88685f5dde: no match found
-3 changebagain
-2 changeall
+3 changeall
+2 changebagain
 1 merge
 0 moveb
 checking changesets
--- a/tests/test-convert-hg-startrev	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-convert-hg-startrev	Wed Jul 08 17:03:16 2009 -0700
@@ -6,7 +6,7 @@
 
 glog()
 {
-    hg -R "$1" glog --template '#rev# "#desc#" files: #files#\n'
+    hg -R "$1" glog --template '{rev} "{desc}" files: {files}\n'
 }
 
 hg init source
--- a/tests/test-convert-mtn	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-convert-mtn	Wed Jul 08 17:03:16 2009 -0700
@@ -115,7 +115,7 @@
 
 glog()
 {
-    hg glog --template '#rev# "#desc|firstline#" files: #files#\n' "$@"
+    hg glog --template '{rev} "{desc|firstline}" files: {files}\n' "$@"
 }
 
 cd repo.mtn-hg
--- a/tests/test-convert-p4	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-convert-p4	Wed Jul 08 17:03:16 2009 -0700
@@ -6,12 +6,12 @@
 echo "convert = " >> $HGRCPATH
 
 echo % create p4 depot
-export P4ROOT=$PWD/depot
-export P4AUDIT=$P4ROOT/audit
-export P4JOURNAL=$P4ROOT/journal
-export P4LOG=$P4ROOT/log
-export P4PORT=localhost:16661
-export P4DEBUG=1
+P4ROOT=`pwd`/depot; export P4ROOT
+P4AUDIT=$P4ROOT/audit; export P4AUDIT
+P4JOURNAL=$P4ROOT/journal; export P4JOURNAL
+P4LOG=$P4ROOT/log; export P4LOG
+P4PORT=localhost:16661; export P4PORT
+P4DEBUG=1; export P4DEBUG
 
 echo % start the p4 server
 [ ! -d $P4ROOT ] && mkdir $P4ROOT
@@ -24,7 +24,7 @@
 done >/dev/null 2>/dev/null
 
 echo % create a client spec
-export P4CLIENT=hg-p4-import
+P4CLIENT=hg-p4-import; export P4CLIENT
 DEPOTPATH=//depot/test-mercurial-import/...
 p4 client -o | sed '/^View:/,$ d' >p4client
 echo View: >>p4client
@@ -49,7 +49,7 @@
 
 echo % convert
 hg convert -s p4 $DEPOTPATH dst
-hg -R dst log --template 'rev=#rev# desc="#desc#" tags="#tags#" files="#files#"\n'
+hg -R dst log --template 'rev={rev} desc="{desc}" tags="{tags}" files="{files}"\n'
 
 echo % change some files
 p4 edit a b/c
@@ -59,7 +59,7 @@
 
 echo % convert again
 hg convert -s p4 $DEPOTPATH dst
-hg -R dst log --template 'rev=#rev# desc="#desc#" tags="#tags#" files="#files#"\n'
+hg -R dst log --template 'rev={rev} desc="{desc}" tags="{tags}" files="{files}"\n'
 
 echo % interesting names
 echo dddd > "d d"
@@ -70,6 +70,6 @@
 
 echo % convert again
 hg convert -s p4 $DEPOTPATH dst
-hg -R dst log --template 'rev=#rev# desc="#desc#" tags="#tags#" files="#files#"\n'
+hg -R dst log --template 'rev={rev} desc="{desc}" tags="{tags}" files="{files}"\n'
 
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-convert-p4-filetypes	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,104 @@
+#!/bin/sh
+
+"$TESTDIR/hghave" p4 execbit symlink || exit 80
+
+echo "[extensions]" >> $HGRCPATH
+echo "convert = " >> $HGRCPATH
+
+echo % create p4 depot
+P4ROOT=$PWD/depot; export P4ROOT
+P4AUDIT=$P4ROOT/audit; export P4AUDIT
+P4JOURNAL=$P4ROOT/journal; export P4JOURNAL
+P4LOG=$P4ROOT/log; export P4LOG
+P4PORT=localhost:16661; export P4PORT
+P4DEBUG=1; export P4DEBUG
+P4CHARSET=utf8; export P4CHARSET
+
+echo % start the p4 server
+[ ! -d $P4ROOT ] && mkdir $P4ROOT
+p4d -f -J off -xi >$P4ROOT/stdout 2>$P4ROOT/stderr
+p4d -f -J off >$P4ROOT/stdout 2>$P4ROOT/stderr &
+trap "echo % stop the p4 server ; p4 admin stop" EXIT
+
+# wait for the server to initialize
+while ! p4 ; do
+   sleep 1
+done >/dev/null 2>/dev/null
+
+echo % create a client spec
+P4CLIENT=hg-p4-import; export P4CLIENT
+DEPOTPATH=//depot/test-mercurial-import/...
+p4 client -o | sed '/^View:/,$ d' >p4client
+echo View: >>p4client
+echo " $DEPOTPATH //$P4CLIENT/..." >>p4client
+p4 client -i <p4client
+
+echo % populate the depot
+TYPES="text binary symlink"
+TYPES="$TYPES text+m text+w text+x text+k text+kx text+ko text+l text+C text+D text+F text+S text+S2"
+TYPES="$TYPES binary+k binary+x binary+kx symlink+k"
+TYPES="$TYPES ctext cxtext ktext kxtext ltext tempobj ubinary uxbinary xbinary xltext xtempobj xtext"
+# not testing these
+#TYPES="$TYPES apple resource unicode utf16 uresource xunicode xutf16"
+for T in $TYPES ; do
+   T2=`echo $T | tr [:upper:] [:lower:]`
+   case $T in
+      apple)
+	 ;;
+      symlink*)
+         echo "this is target $T" >target_$T2
+         ln -s target_$T file_$T2
+         p4 add target_$T2
+         p4 add -t $T file_$T2
+         ;;
+      binary*)
+	 python -c "file('file_$T2', 'wb').write('this is $T')"
+         p4 add -t $T file_$T2
+         ;;
+      *)
+         echo "this is $T" >file_$T2
+         p4 add -t $T file_$T2
+         ;;
+   esac
+done
+p4 submit -d initial
+
+echo % test keyword expansion
+p4 edit file_* target_*
+for T in $TYPES ; do
+   T2=`echo $T | tr [:upper:] [:lower:]`
+   echo '$Id$'       >>file_$T2
+   echo '$Header$'   >>file_$T2
+   echo '$Date$'     >>file_$T2
+   echo '$DateTime$' >>file_$T2
+   echo '$Change$'   >>file_$T2
+   echo '$File$'     >>file_$T2
+   echo '$Revision$' >>file_$T2
+   echo '$Header$$Header$Header$' >>file_$T2
+done
+
+ln -s 'target_$Header$' crazy_symlink+k
+p4 add -t symlink+k crazy_symlink+k
+
+p4 submit -d keywords
+
+echo % check keywords in p4
+grep -H Header file_*
+
+echo % convert
+hg convert -s p4 $DEPOTPATH dst
+hg -R dst log --template 'rev={rev} desc="{desc}" tags="{tags}" files="{files}"\n'g
+
+echo % revision 0
+hg -R dst update 0
+head dst/file_* | cat -v
+
+echo
+echo % revision 1
+hg -R dst update 1
+head dst/file_* | cat -v
+echo
+echo % crazy_symlink
+readlink crazy_symlink+k
+readlink dst/crazy_symlink+k
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-convert-p4-filetypes.out	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,642 @@
+% create p4 depot
+% start the p4 server
+% create a client spec
+Client hg-p4-import saved.
+% populate the depot
+//depot/test-mercurial-import/file_text#1 - opened for add
+//depot/test-mercurial-import/file_binary#1 - opened for add
+//depot/test-mercurial-import/target_symlink#1 - opened for add
+//depot/test-mercurial-import/file_symlink#1 - opened for add
+//depot/test-mercurial-import/file_text+m#1 - opened for add
+//depot/test-mercurial-import/file_text+w#1 - opened for add
+//depot/test-mercurial-import/file_text+x#1 - opened for add
+//depot/test-mercurial-import/file_text+k#1 - opened for add
+//depot/test-mercurial-import/file_text+kx#1 - opened for add
+//depot/test-mercurial-import/file_text+ko#1 - opened for add
+//depot/test-mercurial-import/file_text+l#1 - opened for add
+//depot/test-mercurial-import/file_text+c#1 - opened for add
+//depot/test-mercurial-import/file_text+d#1 - opened for add
+//depot/test-mercurial-import/file_text+f#1 - opened for add
+//depot/test-mercurial-import/file_text+s#1 - opened for add
+//depot/test-mercurial-import/file_text+s2#1 - opened for add
+//depot/test-mercurial-import/file_binary+k#1 - opened for add
+//depot/test-mercurial-import/file_binary+x#1 - opened for add
+//depot/test-mercurial-import/file_binary+kx#1 - opened for add
+//depot/test-mercurial-import/target_symlink+k#1 - opened for add
+//depot/test-mercurial-import/file_symlink+k#1 - opened for add
+//depot/test-mercurial-import/file_ctext#1 - opened for add
+//depot/test-mercurial-import/file_cxtext#1 - opened for add
+//depot/test-mercurial-import/file_ktext#1 - opened for add
+//depot/test-mercurial-import/file_kxtext#1 - opened for add
+//depot/test-mercurial-import/file_ltext#1 - opened for add
+//depot/test-mercurial-import/file_tempobj#1 - opened for add
+//depot/test-mercurial-import/file_ubinary#1 - opened for add
+//depot/test-mercurial-import/file_uxbinary#1 - opened for add
+//depot/test-mercurial-import/file_xbinary#1 - opened for add
+//depot/test-mercurial-import/file_xltext#1 - opened for add
+//depot/test-mercurial-import/file_xtempobj#1 - opened for add
+//depot/test-mercurial-import/file_xtext#1 - opened for add
+Submitting change 1.
+Locking 33 files ...
+add //depot/test-mercurial-import/file_binary#1
+add //depot/test-mercurial-import/file_binary+k#1
+add //depot/test-mercurial-import/file_binary+kx#1
+add //depot/test-mercurial-import/file_binary+x#1
+add //depot/test-mercurial-import/file_ctext#1
+add //depot/test-mercurial-import/file_cxtext#1
+add //depot/test-mercurial-import/file_ktext#1
+add //depot/test-mercurial-import/file_kxtext#1
+add //depot/test-mercurial-import/file_ltext#1
+add //depot/test-mercurial-import/file_symlink#1
+add //depot/test-mercurial-import/file_symlink+k#1
+add //depot/test-mercurial-import/file_tempobj#1
+add //depot/test-mercurial-import/file_text#1
+add //depot/test-mercurial-import/file_text+c#1
+add //depot/test-mercurial-import/file_text+d#1
+add //depot/test-mercurial-import/file_text+f#1
+add //depot/test-mercurial-import/file_text+k#1
+add //depot/test-mercurial-import/file_text+ko#1
+add //depot/test-mercurial-import/file_text+kx#1
+add //depot/test-mercurial-import/file_text+l#1
+add //depot/test-mercurial-import/file_text+m#1
+add //depot/test-mercurial-import/file_text+s#1
+add //depot/test-mercurial-import/file_text+s2#1
+add //depot/test-mercurial-import/file_text+w#1
+add //depot/test-mercurial-import/file_text+x#1
+add //depot/test-mercurial-import/file_ubinary#1
+add //depot/test-mercurial-import/file_uxbinary#1
+add //depot/test-mercurial-import/file_xbinary#1
+add //depot/test-mercurial-import/file_xltext#1
+add //depot/test-mercurial-import/file_xtempobj#1
+add //depot/test-mercurial-import/file_xtext#1
+add //depot/test-mercurial-import/target_symlink#1
+add //depot/test-mercurial-import/target_symlink+k#1
+Change 1 submitted.
+//depot/test-mercurial-import/file_binary+k#1 - refreshing
+//depot/test-mercurial-import/file_binary+kx#1 - refreshing
+//depot/test-mercurial-import/file_ktext#1 - refreshing
+//depot/test-mercurial-import/file_kxtext#1 - refreshing
+//depot/test-mercurial-import/file_symlink+k#1 - refreshing
+//depot/test-mercurial-import/file_text+k#1 - refreshing
+//depot/test-mercurial-import/file_text+ko#1 - refreshing
+//depot/test-mercurial-import/file_text+kx#1 - refreshing
+% test keyword expansion
+//depot/test-mercurial-import/file_binary#1 - opened for edit
+//depot/test-mercurial-import/file_binary+k#1 - opened for edit
+//depot/test-mercurial-import/file_binary+kx#1 - opened for edit
+//depot/test-mercurial-import/file_binary+x#1 - opened for edit
+//depot/test-mercurial-import/file_ctext#1 - opened for edit
+//depot/test-mercurial-import/file_cxtext#1 - opened for edit
+//depot/test-mercurial-import/file_ktext#1 - opened for edit
+//depot/test-mercurial-import/file_kxtext#1 - opened for edit
+//depot/test-mercurial-import/file_ltext#1 - opened for edit
+//depot/test-mercurial-import/file_symlink#1 - opened for edit
+//depot/test-mercurial-import/file_symlink+k#1 - opened for edit
+//depot/test-mercurial-import/file_tempobj#1 - opened for edit
+//depot/test-mercurial-import/file_text#1 - opened for edit
+//depot/test-mercurial-import/file_text+c#1 - opened for edit
+//depot/test-mercurial-import/file_text+d#1 - opened for edit
+//depot/test-mercurial-import/file_text+f#1 - opened for edit
+//depot/test-mercurial-import/file_text+k#1 - opened for edit
+//depot/test-mercurial-import/file_text+ko#1 - opened for edit
+//depot/test-mercurial-import/file_text+kx#1 - opened for edit
+//depot/test-mercurial-import/file_text+l#1 - opened for edit
+//depot/test-mercurial-import/file_text+m#1 - opened for edit
+//depot/test-mercurial-import/file_text+s#1 - opened for edit
+//depot/test-mercurial-import/file_text+s2#1 - opened for edit
+//depot/test-mercurial-import/file_text+w#1 - opened for edit
+//depot/test-mercurial-import/file_text+x#1 - opened for edit
+//depot/test-mercurial-import/file_ubinary#1 - opened for edit
+//depot/test-mercurial-import/file_uxbinary#1 - opened for edit
+//depot/test-mercurial-import/file_xbinary#1 - opened for edit
+//depot/test-mercurial-import/file_xltext#1 - opened for edit
+//depot/test-mercurial-import/file_xtempobj#1 - opened for edit
+//depot/test-mercurial-import/file_xtext#1 - opened for edit
+//depot/test-mercurial-import/target_symlink#1 - opened for edit
+//depot/test-mercurial-import/target_symlink+k#1 - opened for edit
+//depot/test-mercurial-import/crazy_symlink+k#1 - opened for add
+Submitting change 2.
+Locking 34 files ...
+add //depot/test-mercurial-import/crazy_symlink+k#1
+edit //depot/test-mercurial-import/file_binary#2
+edit //depot/test-mercurial-import/file_binary+k#2
+edit //depot/test-mercurial-import/file_binary+kx#2
+edit //depot/test-mercurial-import/file_binary+x#2
+edit //depot/test-mercurial-import/file_ctext#2
+edit //depot/test-mercurial-import/file_cxtext#2
+edit //depot/test-mercurial-import/file_ktext#2
+edit //depot/test-mercurial-import/file_kxtext#2
+edit //depot/test-mercurial-import/file_ltext#2
+edit //depot/test-mercurial-import/file_symlink#2
+edit //depot/test-mercurial-import/file_symlink+k#2
+edit //depot/test-mercurial-import/file_tempobj#2
+edit //depot/test-mercurial-import/file_text#2
+edit //depot/test-mercurial-import/file_text+c#2
+edit //depot/test-mercurial-import/file_text+d#2
+edit //depot/test-mercurial-import/file_text+f#2
+edit //depot/test-mercurial-import/file_text+k#2
+edit //depot/test-mercurial-import/file_text+ko#2
+edit //depot/test-mercurial-import/file_text+kx#2
+edit //depot/test-mercurial-import/file_text+l#2
+edit //depot/test-mercurial-import/file_text+m#2
+edit //depot/test-mercurial-import/file_text+s#2
+edit //depot/test-mercurial-import/file_text+s2#2
+edit //depot/test-mercurial-import/file_text+w#2
+edit //depot/test-mercurial-import/file_text+x#2
+edit //depot/test-mercurial-import/file_ubinary#2
+edit //depot/test-mercurial-import/file_uxbinary#2
+edit //depot/test-mercurial-import/file_xbinary#2
+edit //depot/test-mercurial-import/file_xltext#2
+edit //depot/test-mercurial-import/file_xtempobj#2
+edit //depot/test-mercurial-import/file_xtext#2
+edit //depot/test-mercurial-import/target_symlink#2
+edit //depot/test-mercurial-import/target_symlink+k#2
+Change 2 submitted.
+//depot/test-mercurial-import/crazy_symlink+k#1 - refreshing
+//depot/test-mercurial-import/file_binary+k#2 - refreshing
+//depot/test-mercurial-import/file_binary+kx#2 - refreshing
+//depot/test-mercurial-import/file_ktext#2 - refreshing
+//depot/test-mercurial-import/file_kxtext#2 - refreshing
+//depot/test-mercurial-import/file_symlink+k#2 - refreshing
+//depot/test-mercurial-import/file_text+k#2 - refreshing
+//depot/test-mercurial-import/file_text+ko#2 - refreshing
+//depot/test-mercurial-import/file_text+kx#2 - refreshing
+% check keywords in p4
+file_binary:$Header$
+file_binary:$Header$$Header$Header$
+file_binary+k:$Header: //depot/test-mercurial-import/file_binary+k#2 $
+file_binary+k:$Header: //depot/test-mercurial-import/file_binary+k#2 $$Header: //depot/test-mercurial-import/file_binary+k#2 $Header$
+file_binary+kx:$Header: //depot/test-mercurial-import/file_binary+kx#2 $
+file_binary+kx:$Header: //depot/test-mercurial-import/file_binary+kx#2 $$Header: //depot/test-mercurial-import/file_binary+kx#2 $Header$
+file_binary+x:$Header$
+file_binary+x:$Header$$Header$Header$
+file_ctext:$Header$
+file_ctext:$Header$$Header$Header$
+file_cxtext:$Header$
+file_cxtext:$Header$$Header$Header$
+file_ktext:$Header: //depot/test-mercurial-import/file_ktext#2 $
+file_ktext:$Header: //depot/test-mercurial-import/file_ktext#2 $$Header: //depot/test-mercurial-import/file_ktext#2 $Header$
+file_kxtext:$Header: //depot/test-mercurial-import/file_kxtext#2 $
+file_kxtext:$Header: //depot/test-mercurial-import/file_kxtext#2 $$Header: //depot/test-mercurial-import/file_kxtext#2 $Header$
+file_ltext:$Header$
+file_ltext:$Header$$Header$Header$
+file_symlink:$Header$
+file_symlink:$Header$$Header$Header$
+file_symlink+k:$Header$
+file_symlink+k:$Header$$Header$Header$
+file_tempobj:$Header$
+file_tempobj:$Header$$Header$Header$
+file_text:$Header$
+file_text:$Header$$Header$Header$
+file_text+c:$Header$
+file_text+c:$Header$$Header$Header$
+file_text+d:$Header$
+file_text+d:$Header$$Header$Header$
+file_text+f:$Header$
+file_text+f:$Header$$Header$Header$
+file_text+k:$Header: //depot/test-mercurial-import/file_text+k#2 $
+file_text+k:$Header: //depot/test-mercurial-import/file_text+k#2 $$Header: //depot/test-mercurial-import/file_text+k#2 $Header$
+file_text+ko:$Header: //depot/test-mercurial-import/file_text+ko#2 $
+file_text+ko:$Header: //depot/test-mercurial-import/file_text+ko#2 $$Header: //depot/test-mercurial-import/file_text+ko#2 $Header$
+file_text+kx:$Header: //depot/test-mercurial-import/file_text+kx#2 $
+file_text+kx:$Header: //depot/test-mercurial-import/file_text+kx#2 $$Header: //depot/test-mercurial-import/file_text+kx#2 $Header$
+file_text+l:$Header$
+file_text+l:$Header$$Header$Header$
+file_text+m:$Header$
+file_text+m:$Header$$Header$Header$
+file_text+s:$Header$
+file_text+s:$Header$$Header$Header$
+file_text+s2:$Header$
+file_text+s2:$Header$$Header$Header$
+file_text+w:$Header$
+file_text+w:$Header$$Header$Header$
+file_text+x:$Header$
+file_text+x:$Header$$Header$Header$
+file_ubinary:$Header$
+file_ubinary:$Header$$Header$Header$
+file_uxbinary:$Header$
+file_uxbinary:$Header$$Header$Header$
+file_xbinary:$Header$
+file_xbinary:$Header$$Header$Header$
+file_xltext:$Header$
+file_xltext:$Header$$Header$Header$
+file_xtempobj:$Header$
+file_xtempobj:$Header$$Header$Header$
+file_xtext:$Header$
+file_xtext:$Header$$Header$Header$
+% convert
+initializing destination dst repository
+reading p4 views
+collecting p4 changelists
+1 initial
+2 keywords
+scanning source...
+sorting...
+converting...
+1 initial
+0 keywords
+rev=1 desc="keywords" tags="tip" files="crazy_symlink+k file_binary file_binary+k file_binary+kx file_binary+x file_ctext file_cxtext file_ktext file_kxtext file_ltext file_text file_text+c file_text+d file_text+f file_text+k file_text+ko file_text+kx file_text+l file_text+m file_text+s file_text+s2 file_text+w file_text+x file_ubinary file_uxbinary file_xbinary file_xltext file_xtext target_symlink target_symlink+k"
+grev=0 desc="initial" tags="" files="file_binary file_binary+k file_binary+kx file_binary+x file_ctext file_cxtext file_ktext file_kxtext file_ltext file_symlink file_symlink+k file_text file_text+c file_text+d file_text+f file_text+k file_text+ko file_text+kx file_text+l file_text+m file_text+s2 file_text+w file_text+x file_ubinary file_uxbinary file_xbinary file_xltext file_xtext target_symlink target_symlink+k"
+g% revision 0
+30 files updated, 0 files merged, 0 files removed, 0 files unresolved
+==> dst/file_binary <==
+this is binary
+==> dst/file_binary+k <==
+this is binary+k
+==> dst/file_binary+kx <==
+this is binary+kx
+==> dst/file_binary+x <==
+this is binary+x
+==> dst/file_ctext <==
+this is ctext
+
+==> dst/file_cxtext <==
+this is cxtext
+
+==> dst/file_ktext <==
+this is ktext
+
+==> dst/file_kxtext <==
+this is kxtext
+
+==> dst/file_ltext <==
+this is ltext
+
+==> dst/file_symlink <==
+this is target symlink
+
+==> dst/file_symlink+k <==
+this is target symlink+k
+
+==> dst/file_text <==
+this is text
+
+==> dst/file_text+c <==
+this is text+C
+
+==> dst/file_text+d <==
+this is text+D
+
+==> dst/file_text+f <==
+this is text+F
+
+==> dst/file_text+k <==
+this is text+k
+
+==> dst/file_text+ko <==
+this is text+ko
+
+==> dst/file_text+kx <==
+this is text+kx
+
+==> dst/file_text+l <==
+this is text+l
+
+==> dst/file_text+m <==
+this is text+m
+
+==> dst/file_text+s2 <==
+this is text+S2
+
+==> dst/file_text+w <==
+this is text+w
+
+==> dst/file_text+x <==
+this is text+x
+
+==> dst/file_ubinary <==
+this is ubinary
+
+==> dst/file_uxbinary <==
+this is uxbinary
+
+==> dst/file_xbinary <==
+this is xbinary
+
+==> dst/file_xltext <==
+this is xltext
+
+==> dst/file_xtext <==
+this is xtext
+
+% revision 1
+30 files updated, 0 files merged, 0 files removed, 0 files unresolved
+==> dst/file_binary <==
+this is binary$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_binary+k <==
+this is binary+k$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_binary+kx <==
+this is binary+kx$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_binary+x <==
+this is binary+x$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_ctext <==
+this is ctext
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_cxtext <==
+this is cxtext
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_ktext <==
+this is ktext
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_kxtext <==
+this is kxtext
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_ltext <==
+this is ltext
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_symlink <==
+this is target symlink
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_symlink+k <==
+this is target symlink+k
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_text <==
+this is text
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_text+c <==
+this is text+C
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_text+d <==
+this is text+D
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_text+f <==
+this is text+F
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_text+k <==
+this is text+k
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_text+ko <==
+this is text+ko
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_text+kx <==
+this is text+kx
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_text+l <==
+this is text+l
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_text+m <==
+this is text+m
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_text+s <==
+this is text+S
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_text+s2 <==
+this is text+S2
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_text+w <==
+this is text+w
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_text+x <==
+this is text+x
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_ubinary <==
+this is ubinary
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_uxbinary <==
+this is uxbinary
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_xbinary <==
+this is xbinary
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_xltext <==
+this is xltext
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+==> dst/file_xtext <==
+this is xtext
+$Id$
+$Header$
+$Date$
+$DateTime$
+$Change$
+$File$
+$Revision$
+$Header$$Header$Header$
+
+% crazy_symlink
+target_$Header: //depot/test-mercurial-import/crazy_symlink+k#1 $
+target_$Header$
+% stop the p4 server
--- a/tests/test-convert-splicemap	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-convert-splicemap	Wed Jul 08 17:03:16 2009 -0700
@@ -6,7 +6,7 @@
 
 glog()
 {
-    hg glog --template '#rev# "#desc|firstline#" files: #files#\n' "$@"
+    hg glog --template '{rev} "{desc|firstline}" files: {files}\n' "$@"
 }
 
 hg init repo1
--- a/tests/test-convert-svn-branches	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-convert-svn-branches	Wed Jul 08 17:03:16 2009 -0700
@@ -14,23 +14,17 @@
 svnadmin create svn-repo
 cat "$TESTDIR/svn/branches.svndump" | svnadmin load svn-repo > /dev/null
 
-svnpath=`pwd | fix_path`
-# SVN wants all paths to start with a slash. Unfortunately,
-# Windows ones don't. Handle that.
-expr $svnpath : "\/" > /dev/null
-if [ $? -ne 0 ]; then
-    svnpath='/'$svnpath
-fi
-svnurl=file://$svnpath/svn-repo
-
 echo % convert trunk and branches
-hg convert --datesort -r 10 $svnurl A-hg
+cat >branchmap <<EOF
+old3 newbranch
+EOF
+hg convert --branchmap=branchmap --datesort -r 10 svn-repo A-hg
 
 echo % convert again
-hg convert --datesort $svnurl A-hg
+hg convert --branchmap=branchmap --datesort svn-repo A-hg
 
 cd A-hg
-hg glog --template 'branch=#branches# #rev# #desc|firstline# files: #files#\n'
+hg glog --template 'branch={branches} {rev} {desc|firstline} files: {files}\n'
 hg branches | sed 's/:.*/:/'
 hg tags -q
 cd ..
--- a/tests/test-convert-svn-branches.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-convert-svn-branches.out	Wed Jul 08 17:03:16 2009 -0700
@@ -5,7 +5,7 @@
 converting...
 10 init projA
 9 hello
-8 branch trunk, remove c
+8 branch trunk, remove c and dir
 7 change a
 6 change b
 5 move and update c
@@ -19,7 +19,7 @@
 sorting...
 converting...
 0 branch trunk@1 into old3
-o  branch=old3 11 branch trunk@1 into old3 files:
+o  branch=newbranch 11 branch trunk@1 into old3 files:
 |
 | o  branch= 10 last change to a files: a
 | |
@@ -37,13 +37,13 @@
 | | |
 | o |  branch= 3 change a files: a
 | | |
-+---o  branch=old 2 branch trunk, remove c files: a b
-| |
-| o  branch= 1 hello files: a b c
+| | o  branch=old 2 branch trunk, remove c and dir files: c
+| |/
+| o  branch= 1 hello files: a b c dir/e
 |/
 o  branch= 0 init projA files:
 
-old3                          11:
+newbranch                     11:
 default                       10:
 old                            9:
 old2                           8:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-convert-svn-encoding	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+"$TESTDIR/hghave" svn svn-bindings || exit 80
+
+echo "[extensions]" >> $HGRCPATH
+echo "convert = " >> $HGRCPATH
+
+svnadmin create svn-repo
+cat "$TESTDIR/svn/encoding.svndump" | svnadmin load svn-repo > /dev/null
+
+echo '% convert while testing all possible outputs'
+hg --debug convert svn-repo A-hg > /dev/null
+cd A-hg
+hg up
+echo '% check tags are in UTF-8'
+python -c "print '\n'.join([('%r' % l) for l in file('.hgtags', 'rb').readlines()])"
+cd ..
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-convert-svn-encoding.out	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,5 @@
+% convert while testing all possible outputs
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+% check tags are in UTF-8
+'1c1b4062874e8197a68e7ce9e498479a37d0215c branch\xc3\xa9e\n'
+'edc96568720ef79eefa6372677b18d855de3abee branch\xc3\xa9\n'
--- a/tests/test-convert-svn-move	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-convert-svn-move	Wed Jul 08 17:03:16 2009 -0700
@@ -27,6 +27,6 @@
 hg convert --datesort $svnurl/subproject A-hg
 
 cd A-hg
-hg glog --template '#rev# #desc|firstline# files: #files#\n'
+hg glog --template '{rev} {desc|firstline} files: {files}\n'
 hg branches | sed 's/:.*/:/'
 cd ..
--- a/tests/test-convert-svn-move.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-convert-svn-move.out	Wed Jul 08 17:03:16 2009 -0700
@@ -3,16 +3,22 @@
 scanning source...
 sorting...
 converting...
-9 createtrunk
-8 moved1
-7 moved1
-6 moved2
-5 changeb and rm d2
-4 changeb and rm d2
-3 moved1again
-2 moved1again
-1 copyfilefrompast
-0 copydirfrompast
+11 createtrunk
+10 moved1
+9 moved1
+8 moved2
+7 changeb and rm d2
+6 changeb and rm d2
+5 moved1again
+4 moved1again
+3 copyfilefrompast
+2 copydirfrompast
+1 add d3
+0 copy dir and remove subdir
+o  11 copy dir and remove subdir files: d3/d31/e d4/d31/e d4/f
+|
+o  10 add d3 files: d3/d31/e d3/f
+|
 o  9 copydirfrompast files: d2/d
 |
 o  8 copyfilefrompast files: d
@@ -33,5 +39,5 @@
 |
 o  0 createtrunk files:
 
-default                        9:
+default                       11:
 d1                             6:
--- a/tests/test-convert-svn-source	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-convert-svn-source	Wed Jul 08 17:03:16 2009 -0700
@@ -72,14 +72,14 @@
 hg convert $svnurl B-hg
 
 cd B-hg
-hg glog --template '#rev# #desc|firstline# files: #files#\n'
+hg glog --template '{rev} {desc|firstline} files: {files}\n'
 hg tags -q
 cd ..
 
 echo % test filemap
 echo 'include letter2.txt' > filemap
 hg convert --filemap filemap $svnurl/trunk fmap
-hg glog -R fmap --template '#rev# #desc|firstline# files: #files#\n'
+hg glog -R fmap --template '{rev} {desc|firstline} files: {files}\n'
 
 echo % test stop revision
 hg convert --rev 1 $svnurl/trunk stoprev
--- a/tests/test-convert-svn-startrev	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-convert-svn-startrev	Wed Jul 08 17:03:16 2009 -0700
@@ -14,15 +14,6 @@
 svnadmin create svn-repo
 cat "$TESTDIR/svn/startrev.svndump" | svnadmin load svn-repo > /dev/null
 
-svnpath=`pwd | fix_path`
-# SVN wants all paths to start with a slash. Unfortunately,
-# Windows ones don't. Handle that.
-expr $svnpath : "\/" > /dev/null
-if [ $? -ne 0 ]; then
-    svnpath='/'$svnpath
-fi
-svnurl=file://$svnpath/svn-repo
-
 convert()
 {
     startrev=$1
@@ -31,8 +22,8 @@
         --config convert.svn.trunk=branches/branch1 \
         --config convert.svn.branches="  " \
         --config convert.svn.tags= \
-        --datesort $svnurl $repopath
-    hg -R $repopath glog --template '#rev# #desc|firstline# files: #files#\n'
+        --datesort svn-repo $repopath
+    hg -R $repopath glog --template '{rev} {desc|firstline} files: {files}\n'
     echo
 }
 
--- a/tests/test-convert-svn-tags	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-convert-svn-tags	Wed Jul 08 17:03:16 2009 -0700
@@ -14,24 +14,15 @@
 svnadmin create svn-repo
 cat "$TESTDIR/svn/tags.svndump" | svnadmin load svn-repo > /dev/null
 
-svnpath=`pwd | fix_path`
-# SVN wants all paths to start with a slash. Unfortunately,
-# Windows ones don't. Handle that.
-expr $svnpath : "\/" > /dev/null
-if [ $? -ne 0 ]; then
-    svnpath='/'$svnpath
-fi
-svnurl=file://$svnpath/svn-repo
-
 echo % convert
-hg convert --datesort $svnurl A-hg
+hg convert --datesort svn-repo A-hg
 
 cd A-hg
-hg glog --template '#rev# #desc|firstline# tags: #tags#\n'
+hg glog --template '{rev} {desc|firstline} tags: {tags}\n'
 hg tags | sed 's/:.*/:/'
 cd ..
 
 echo % convert without tags
-hg convert --datesort --config convert.svn.tags= $svnurl A-notags-hg
+hg convert --datesort --config convert.svn.tags= svn-repo A-notags-hg
 hg -R A-notags-hg tags -q
 
--- a/tests/test-convert-tla	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-convert-tla	Wed Jul 08 17:03:16 2009 -0700
@@ -64,7 +64,7 @@
 
 glog()
 {
-    hg glog --template '#rev# "#desc|firstline#" files: #files#\n' "$@"
+    hg glog --template '{rev} "{desc|firstline}" files: {files}\n' "$@"
 }
 
 echo % show graph log
--- a/tests/test-convert.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-convert.out	Wed Jul 08 17:03:16 2009 -0700
@@ -25,6 +25,18 @@
     basename of the source with '-hg' appended. If the destination
     repository doesn't exist, it will be created.
 
+    By default, all sources except Mercurial will use
+    --branchsort. Mercurial uses --sourcesort to preserve original
+    revision numbers order. Sort modes have the following effects:
+      --branchsort: convert from parent to child revision when
+        possible, which means branches are usually converted one after
+        the other. It generates more compact repositories.
+      --datesort: sort revisions by date. Converted repositories have
+        good-looking changelogs but are often an order of magnitude
+        larger than the same ones generated by --branchsort.
+      --sourcesort: try to preserve source revisions order, only
+        supported by Mercurial sources.
+
     If <REVMAP> isn't given, it will be put in a default location
     (<dest>/.hg/shamap by default). The <REVMAP> is a simple text file
     that maps each source commit ID to the destination ID for that
@@ -53,7 +65,7 @@
 
     The 'include' directive causes a file, or all files under a
     directory, to be included in the destination repository, and the
-    exclusion of all other files and directories not explicitely included.
+    exclusion of all other files and directories not explicitly included.
     The 'exclude' directive causes files or directories to be omitted.
     The 'rename' directive renames a file or directory. To rename from
     a subdirectory into the root of the repository, use '.' as the
@@ -70,6 +82,17 @@
     (in either the source or destination revision control system) that
     should be used as the new parents for that node.
 
+    The branchmap is a file that allows you to rename a branch when it is
+    being brought in from whatever external repository. When used in
+    conjunction with a splicemap, it allows for a powerful combination
+    to help fix even the most badly mismanaged repositories and turn them
+    into nicely structured Mercurial repositories. The branchmap contains
+    lines of the form "original_branch_name new_branch_name".
+    "original_branch_name" is the name of the branch in the source
+    repository, and "new_branch_name" is the name of the branch is the
+    destination repository. This can be used to (for instance) move code
+    in one repository from "default" to a named branch.
+
     Mercurial Source
     -----------------
 
@@ -93,7 +116,7 @@
     in the sandbox to find the CVS repository, and then uses CVS rlog
     commands to find files to convert. This means that unless a
     filemap is given, all files under the starting directory will be
-    converted, and that any directory reorganisation in the CVS
+    converted, and that any directory reorganization in the CVS
     sandbox is ignored.
 
     Because CVS does not have changesets, it is necessary to collect
@@ -101,7 +124,7 @@
     source uses its internal changeset merging code by default but can
     be configured to call the external 'cvsps' program by setting:
         --config convert.cvsps='cvsps -A -u --cvs-direct -q'
-    This is a legacy option and may be removed in future.
+    This option is deprecated and will be removed in Mercurial 1.4.
 
     The options shown are the defaults.
 
@@ -144,9 +167,9 @@
     its subdirectories are listed as possible branches. If
     "svn://repo/path/tags" exists, it is looked for tags referencing
     converted branches. Default "trunk", "branches" and "tags" values
-    can be overriden with following options. Set them to paths
-    relative to the source URL, or leave them blank to disable
-    autodetection.
+    can be overridden with following options. Set them to paths
+    relative to the source URL, or leave them blank to disable auto
+    detection.
 
     --config convert.svn.branches=branches    (directory name)
         specify the directory containing branches
@@ -197,7 +220,10 @@
  -r --rev          import up to target revision REV
  -s --source-type  source repository type
     --splicemap    splice synthesized history into place
+    --branchmap    change branch names while converting
+    --branchsort   try to sort changesets by branches
     --datesort     try to sort changesets by date
+    --sourcesort   preserve source changesets order
 
 use "hg -v help convert" to show global options
 adding a
@@ -245,5 +271,5 @@
 emptydir does not look like a monotone repo
 emptydir does not look like a GNU Arch repo
 emptydir does not look like a Bazaar repo
-emptydir does not look like a P4 repo
+cannot find required "p4" tool
 abort: emptydir: missing or unsupported repository
--- a/tests/test-copy-move-merge.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-copy-move-merge.out	Wed Jul 08 17:03:16 2009 -0700
@@ -1,7 +1,4 @@
 1 files updated, 0 files merged, 2 files removed, 0 files unresolved
-resolving manifests
- overwrite None partial False
- ancestor 583c7b748052 local fb3948d97f07+ remote 40da226db0f0
   searching for copies back to rev 1
   unmatched files in other:
    b
@@ -10,6 +7,9 @@
    c -> a *
    b -> a *
   checking for directory renames
+resolving manifests
+ overwrite None partial False
+ ancestor 583c7b748052 local fb3948d97f07+ remote 40da226db0f0
  a: remote moved to c -> m
  a: remote moved to b -> m
 preserving a for resolve of b
--- a/tests/test-custom-filters	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-custom-filters	Wed Jul 08 17:03:16 2009 -0700
@@ -43,7 +43,7 @@
 
 echo '% Fresh checkout:'
 rm stuff.txt
-hg up
+hg up -C
 cat stuff.txt
 echo >> stuff.txt <<EOF
 Very very carefully.
--- a/tests/test-debugcomplete.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-debugcomplete.out	Wed Jul 08 17:03:16 2009 -0700
@@ -14,6 +14,7 @@
 copy
 diff
 export
+forget
 grep
 heads
 help
@@ -69,11 +70,11 @@
 debugindex
 debugindexdot
 debuginstall
-debugrawcommit
 debugrebuildstate
 debugrename
 debugsetparents
 debugstate
+debugsub
 debugwalk
 
 % Do not show the alias of a debug command if there are other candidates
@@ -87,7 +88,7 @@
 root
 
 % Show the alias of a debug command if there are no other candidates
-rawcommit
+
 
 % Show the global options
 --config
@@ -167,22 +168,23 @@
 commit: addremove, close-branch, include, exclude, message, logfile, date, user
 diff: rev, change, text, git, nodates, show-function, ignore-all-space, ignore-space-change, ignore-blank-lines, unified, include, exclude
 export: output, switch-parent, 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
-merge: force, rev
+merge: force, rev, preview
 parents: rev, style, template
 pull: update, force, rev, ssh, remotecmd
 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
-update: clean, date, rev
+update: clean, check, date, rev
 addremove: similarity, include, exclude, dry-run
 archive: no-decode, prefix, rev, type, include, exclude
 backout: merge, parent, rev, include, exclude, message, logfile, date, user
 bisect: reset, good, bad, skip, command, noupdate
 branch: force, clean
-branches: active
+branches: active, closed
 bundle: force, rev, base, all, type, ssh, remotecmd
 cat: output, rev, decode, include, exclude
 copy: after, force, include, exclude, dry-run
@@ -196,14 +198,14 @@
 debugindex: 
 debugindexdot: 
 debuginstall: 
-debugrawcommit: parent, files, message, logfile, date, user
 debugrebuildstate: rev
 debugrename: rev
 debugsetparents: 
 debugstate: nodates
+debugsub: rev
 debugwalk: include, exclude
 grep: print0, all, follow, ignore-case, files-with-matches, line-number, rev, user, date, include, exclude
-heads: rev, active, style, template
+heads: rev, active, closed, style, template
 help: 
 identify: rev, num, id, branch, tags
 import: strip, base, force, no-commit, exact, import-branch, message, logfile, date, user, similarity
--- a/tests/test-demandimport	Wed Jul 08 17:01:18 2009 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-#!/usr/bin/env python
-
-from mercurial import demandimport
-demandimport.enable()
-
-import re
-
-rsub = re.sub
-def f(obj):
-    l = repr(obj)
-    l = rsub("0x[0-9a-fA-F]+", "0x?", l)
-    l = rsub("from '.*'", "from '?'", l)
-    return l
-
-import os
-
-print "os =", f(os)
-print "os.system =", f(os.system)
-print "os =", f(os)
-
-from mercurial import util
-
-print "util =", f(util)
-print "util.system =", f(util.system)
-print "util =", f(util)
-print "util.system =", f(util.system)
-
-import re as fred
-print "fred =", f(fred)
-
-import sys as re
-print "re =", f(re)
-
-print "fred =", f(fred)
-print "fred.sub =", f(fred.sub)
-print "fred =", f(fred)
-
-print "re =", f(re)
-print "re.stdout =", f(re.stdout)
-print "re =", f(re)
--- a/tests/test-demandimport.out	Wed Jul 08 17:01:18 2009 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,15 +0,0 @@
-os = <unloaded module 'os'>
-os.system = <built-in function system>
-os = <module 'os' from '?'>
-util = <unloaded module 'util'>
-util.system = <function system at 0x?>
-util = <module 'mercurial.util' from '?'>
-util.system = <function system at 0x?>
-fred = <unloaded module 're'>
-re = <unloaded module 'sys'>
-fred = <unloaded module 're'>
-fred.sub = <function sub at 0x?>
-fred = <proxied module 're'>
-re = <unloaded module 'sys'>
-re.stdout = <open file '<stdout>', mode 'w' at 0x?>
-re = <proxied module 'sys'>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-demandimport.py	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,40 @@
+#!/usr/bin/env python
+
+from mercurial import demandimport
+demandimport.enable()
+
+import re
+
+rsub = re.sub
+def f(obj):
+    l = repr(obj)
+    l = rsub("0x[0-9a-fA-F]+", "0x?", l)
+    l = rsub("from '.*'", "from '?'", l)
+    return l
+
+import os
+
+print "os =", f(os)
+print "os.system =", f(os.system)
+print "os =", f(os)
+
+from mercurial import util
+
+print "util =", f(util)
+print "util.system =", f(util.system)
+print "util =", f(util)
+print "util.system =", f(util.system)
+
+import re as fred
+print "fred =", f(fred)
+
+import sys as re
+print "re =", f(re)
+
+print "fred =", f(fred)
+print "fred.sub =", f(fred.sub)
+print "fred =", f(fred)
+
+print "re =", f(re)
+print "re.stdout =", f(re.stdout)
+print "re =", f(re)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-demandimport.py.out	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,15 @@
+os = <unloaded module 'os'>
+os.system = <built-in function system>
+os = <module 'os' from '?'>
+util = <unloaded module 'util'>
+util.system = <function system at 0x?>
+util = <module 'mercurial.util' from '?'>
+util.system = <function system at 0x?>
+fred = <unloaded module 're'>
+re = <unloaded module 'sys'>
+fred = <unloaded module 're'>
+fred.sub = <function sub at 0x?>
+fred = <proxied module 're'>
+re = <unloaded module 'sys'>
+re.stdout = <open file '<stdout>', mode 'w' at 0x?>
+re = <proxied module 'sys'>
--- a/tests/test-dispatch	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-dispatch	Wed Jul 08 17:03:16 2009 -0700
@@ -15,7 +15,7 @@
 hg cat a
 cat >> $HGRCPATH <<EOF
 [defaults]
-cat = -v
+cat = -r null
 EOF
 hg cat a
 
--- a/tests/test-dispatch.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-dispatch.out	Wed Jul 08 17:03:16 2009 -0700
@@ -28,6 +28,6 @@
 use "hg -v help cat" to show global options
 % [defaults]
 a
-a
+a: No such file in rev 000000000000
 % no repo
 abort: There is no Mercurial repository here (.hg not found)!
--- a/tests/test-double-merge	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-double-merge	Wed Jul 08 17:03:16 2009 -0700
@@ -20,6 +20,7 @@
 hg ci -m 'change foo' -d "1000000 0"
 
 # we get conflicts that shouldn't be there
+hg merge -P
 hg merge --debug
 
 echo "-- foo --"
--- a/tests/test-double-merge.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-double-merge.out	Wed Jul 08 17:03:16 2009 -0700
@@ -1,13 +1,23 @@
 created new head
-resolving manifests
- overwrite None partial False
- ancestor 310fd17130da local 2092631ce82b+ remote 7731dad1c2b9
+changeset:   0:310fd17130da
+user:        test
+date:        Mon Jan 12 13:46:40 1970 +0000
+summary:     add foo
+
+changeset:   1:7731dad1c2b9
+user:        test
+date:        Mon Jan 12 13:46:40 1970 +0000
+summary:     cp foo bar; change both
+
   searching for copies back to rev 1
   unmatched files in other:
    bar
   all copies found (* = to merge, ! = divergent):
    bar -> foo *
   checking for directory renames
+resolving manifests
+ overwrite None partial False
+ ancestor 310fd17130da local 2092631ce82b+ remote 7731dad1c2b9
  foo: versions differ -> m
  foo: remote copied to bar -> m
 preserving foo for resolve of bar
--- a/tests/test-encode	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-encode	Wed Jul 08 17:03:16 2009 -0700
@@ -28,7 +28,7 @@
 gunzip < a.gz
 
 rm a.gz
-hg co
+hg co -C
 
 echo %% uncompress our new working dir copy
 gunzip < a.gz
--- a/tests/test-execute-bit.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-execute-bit.out	Wed Jul 08 17:03:16 2009 -0700
@@ -3,6 +3,6 @@
 % make sure we notice the change of mode if the cached size == -1
 n   0         -1 unset               a
 M a
-1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+0 files updated, 0 files merged, 0 files removed, 0 files unresolved
 d69afc33ff8a
 not executable -- whew
--- a/tests/test-extension.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-extension.out	Wed Jul 08 17:03:16 2009 -0700
@@ -36,8 +36,7 @@
 global options:
  -R --repository      repository root directory or symbolic path name
     --cwd             change working directory
- -y --noninteractive  do not prompt, assume 'yes' for any required
-                      answers
+ -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
--- a/tests/test-flags	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-flags	Wed Jul 08 17:03:16 2009 -0700
@@ -20,7 +20,7 @@
 chmod +x a
 hg ci -m "chmod +x a" -d "1000000 0"
 echo % the changelog should mention file a:
-hg tip --template '#files#\n'
+hg tip --template '{files}\n'
 
 cd ../test1
 echo 123 >>a
--- a/tests/test-fncache	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-fncache	Wed Jul 08 17:03:16 2009 -0700
@@ -48,4 +48,23 @@
 echo "% hg verify"
 hg verify
 
+# try non store repo encoding
+cd ..
+echo % non store repo
+hg --config format.usestore=False init foo
+cd foo
+mkdir tst.d
+echo foo > tst.d/foo
+hg ci -Amfoo
+find .hg | sort
+
+cd ..
+echo % non fncache repo
+hg --config format.usefncache=False init bar
+cd bar
+mkdir tst.d
+echo foo > tst.d/Foo
+hg ci -Amfoo
+find .hg | sort
+
 exit 0
--- a/tests/test-fncache.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-fncache.out	Wed Jul 08 17:03:16 2009 -0700
@@ -36,8 +36,36 @@
 crosschecking files in changesets and manifests
 checking files
  data/a.i@0: missing revlog!
- data/a.i.hg.hg/c.i@2: missing revlog!
- data/a.i.hg/b.i@1: missing revlog!
+ data/a.i.hg/c.i@2: missing revlog!
+ data/a.i/b.i@1: missing revlog!
 3 files, 3 changesets, 3 total revisions
 3 integrity errors encountered!
 (first damaged changeset appears to be 0)
+% non store repo
+adding tst.d/foo
+.hg
+.hg/00changelog.i
+.hg/00manifest.i
+.hg/data
+.hg/data/tst.d.hg
+.hg/data/tst.d.hg/foo.i
+.hg/dirstate
+.hg/requires
+.hg/undo
+.hg/undo.branch
+.hg/undo.dirstate
+% non fncache repo
+adding tst.d/Foo
+.hg
+.hg/00changelog.i
+.hg/dirstate
+.hg/requires
+.hg/store
+.hg/store/00changelog.i
+.hg/store/00manifest.i
+.hg/store/data
+.hg/store/data/tst.d.hg
+.hg/store/data/tst.d.hg/_foo.i
+.hg/store/undo
+.hg/undo.branch
+.hg/undo.dirstate
--- a/tests/test-globalopts.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-globalopts.out	Wed Jul 08 17:03:16 2009 -0700
@@ -58,10 +58,10 @@
 %% earlygetopt with illegal abbreviations
 abort: Option --config may not be abbreviated!
 abort: Option --cwd may not be abbreviated!
-abort: Option -R has to be separated from other options (i.e. not -qR) and --repository may only be abbreviated as --repo!
-abort: Option -R has to be separated from other options (i.e. not -qR) and --repository may only be abbreviated as --repo!
-abort: Option -R has to be separated from other options (i.e. not -qR) and --repository may only be abbreviated as --repo!
-abort: Option -R has to be separated from other options (i.e. not -qR) and --repository may only be abbreviated as --repo!
+abort: Option -R has to be separated from other options (e.g. not -qR) and --repository may only be abbreviated as --repo!
+abort: Option -R has to be separated from other options (e.g. not -qR) and --repository may only be abbreviated as --repo!
+abort: Option -R has to be separated from other options (e.g. not -qR) and --repository may only be abbreviated as --repo!
+abort: Option -R has to be separated from other options (e.g. not -qR) and --repository may only be abbreviated as --repo!
 %% --cwd
 changeset:   0:8580ff50825a
 tag:         tip
@@ -151,8 +151,8 @@
 
  add          add the specified files on the next commit
  addremove    add all new files, delete all missing files
- annotate     show changeset information per file line
- archive      create unversioned archive of a repository revision
+ annotate     show changeset information by line for each file
+ archive      create an unversioned archive of a repository revision
  backout      reverse effect of earlier changeset
  bisect       subdivision search of changesets
  branch       set or show the current branch name
@@ -164,6 +164,7 @@
  copy         mark files as copied for the next commit
  diff         diff repository (or selected files)
  export       dump the header and diffs for one or more changesets
+ forget       forget the specified files on the next commit
  grep         search for a pattern in specified files and revisions
  heads        show current repository heads or show branch heads
  help         show help for a given topic or a help overview
@@ -208,6 +209,7 @@
  diffs        Diff Formats
  templating   Template Usage
  urls         URL Paths
+ extensions   Using additional features
 
 use "hg -v help" to show aliases and global options
 Mercurial Distributed SCM
@@ -216,8 +218,8 @@
 
  add          add the specified files on the next commit
  addremove    add all new files, delete all missing files
- annotate     show changeset information per file line
- archive      create unversioned archive of a repository revision
+ annotate     show changeset information by line for each file
+ archive      create an unversioned archive of a repository revision
  backout      reverse effect of earlier changeset
  bisect       subdivision search of changesets
  branch       set or show the current branch name
@@ -229,6 +231,7 @@
  copy         mark files as copied for the next commit
  diff         diff repository (or selected files)
  export       dump the header and diffs for one or more changesets
+ forget       forget the specified files on the next commit
  grep         search for a pattern in specified files and revisions
  heads        show current repository heads or show branch heads
  help         show help for a given topic or a help overview
@@ -273,6 +276,7 @@
  diffs        Diff Formats
  templating   Template Usage
  urls         URL Paths
+ extensions   Using additional features
 
 use "hg -v help" to show aliases and global options
 %% not tested: --debugger
--- a/tests/test-glog	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-glog	Wed Jul 08 17:03:16 2009 -0700
@@ -82,9 +82,8 @@
     if [ "$#" -gt 0 ]; then
         hg debugsetparents "$@"
     fi
-    echo $rev > $rev
-    hg add $rev
-    hg rawcommit -q -d "$rev 0" -m "($rev) $msg" $rev
+    echo $rev > a
+    hg commit -Aqd "$rev 0" -m "($rev) $msg"
 }
 
 echo "[extensions]" >> $HGRCPATH
@@ -142,7 +141,7 @@
 hg glog
 
 echo % file glog
-hg glog 5
+hg glog a
 
 echo % unused arguments
 hg glog -q foo bar || echo failed
@@ -150,7 +149,7 @@
 echo % from outer space
 cd ..
 hg glog -l1 repo
-hg glog -l1 repo/0
+hg glog -l1 repo/a
 hg glog -l1 repo/missing
 
 echo % file log with revs != cset revs
--- a/tests/test-glog.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-glog.out	Wed Jul 08 17:03:16 2009 -0700
@@ -1,354 +1,546 @@
 % init
 % empty repo
 % building tree
-(the rawcommit command is deprecated)
-(the rawcommit command is deprecated)
-(the rawcommit command is deprecated)
-(the rawcommit command is deprecated)
-(the rawcommit command is deprecated)
-(the rawcommit command is deprecated)
-(the rawcommit command is deprecated)
-(the rawcommit command is deprecated)
-(the rawcommit command is deprecated)
-(the rawcommit command is deprecated)
-(the rawcommit command is deprecated)
-(the rawcommit command is deprecated)
-(the rawcommit command is deprecated)
-(the rawcommit command is deprecated)
-(the rawcommit command is deprecated)
-(the rawcommit command is deprecated)
-(the rawcommit command is deprecated)
-(the rawcommit command is deprecated)
-(the rawcommit command is deprecated)
-(the rawcommit command is deprecated)
-(the rawcommit command is deprecated)
-(the rawcommit command is deprecated)
-(the rawcommit command is deprecated)
-(the rawcommit command is deprecated)
-(the rawcommit command is deprecated)
-(the rawcommit command is deprecated)
-(the rawcommit command is deprecated)
-(the rawcommit command is deprecated)
-(the rawcommit command is deprecated)
-(the rawcommit command is deprecated)
-(the rawcommit command is deprecated)
-(the rawcommit command is deprecated)
-(the rawcommit command is deprecated)
-(the rawcommit command is deprecated)
-(the rawcommit command is deprecated)
 % glog -q
-@  34:0eed7cd895e0
+@  34:fea3ac5810e0
 |
-| o  33:2e9d1b521374
+| o  33:68608f5145f9
 | |
-o |    32:77f7d8438a3c
+o |    32:d06dffa21a31
 |\ \
-| o \    31:82ee55204a79
+| o \    31:621d83e11f67
 | |\ \
-| | o \    30:777dfc428649
+| | o \    30:6e11cd4b648f
 | | |\ \
-| | | o |  29:f8e7fee63353
+| | | o |  29:cd9bb2be7593
 | | | | |
-| | o | |    28:4b6e9bd48cf9
+| | o | |    28:44ecd0b9ae99
 | | |\ \ \
-o | | | | |  27:e9e08174cd30
+o | | | | |  27:886ed638191b
 |/ / / / /
-| | o---+  26:720dc079a855
+| | o---+  26:7f25b6c2f0b9
 | | | | |
-+---o | |  25:9d4ed048d013
++---o | |  25:91da8ed57247
 | | | | |
-| | o | |  24:4a68967db00d
+| | o | |  24:a9c19a3d96b7
 | | |\| |
-| | o | |  23:bc31393cabdf
+| | o | |  23:a01cddf0766d
 | |/| | |
-+---o---+  22:a37f2ea6ebc6
++---o---+  22:e0d9cccacb5d
 | |  / /
-o | | |    21:e758e8f4ace9
+o | | |    21:d42a756af44d
 |\ \ \ \
-| o---+-+  20:aeccadad74b4
+| o---+-+  20:d30ed6450e32
 |  / / /
-o | | |    19:138069b5dad7
+o | | |    19:31ddc2c1573b
 |\ \ \ \
-+---+---o  18:5a8c9a29ef81
++---+---o  18:1aa84d96232a
 | | | |
-| o | |    17:43e52b935494
+| o | |    17:44765d7c06e0
 | |\ \ \
-| | o---+  16:449a2f9562a4
+| | o---+  16:3677d192927d
 | | |/ /
-o | | |    15:c0b4283d4c1d
+o | | |    15:1dda3f72782d
 |\ \ \ \
-| o-----+  14:9d533950abf0
+| o-----+  14:8eac370358ef
 | |/ / /
-o | | |    13:c39d0a2b8165
+o | | |    13:22d8966a97e3
 |\ \ \ \
-+---o | |  12:74dc7aea4494
++---o | |  12:86b91144a6e9
 | | |/ /
-| o | |    11:c3c395dd8b98
+| o | |    11:832d76e6bdf2
 | |\ \ \
-| | o---+  10:8094c50149ef
+| | o---+  10:74c64d036d72
 | |/ / /
-o | | |    9:79ab1812f961
+o | | |    9:7010c0af0a35
 |\ \ \ \
-| o-----+  8:d7aa38594334
+| o-----+  8:7a0b11f71937
 |/ / / /
-o | | |    7:699392d1259e
+o | | |    7:b632bb1b1224
 |\ \ \ \
-+---o | |  6:0ca7c061cf45
++---o | |  6:b105a072e251
 | |/ / /
-| o | |    5:3589c3c477ab
+| o | |    5:4409d547b708
 | |\ \ \
-| | o | |  4:e2cad8233c77
+| | o | |  4:26a8bac39d9f
 | |/|/ /
-| o / /  3:02173ffbf857
+| o / /  3:27eef8ed80b4
 |/ / /
-o / /  2:e8ea2256f9ec
+o / /  2:3d9a33b8d1e1
 |/ /
-o /  1:3cae7826a707
+o /  1:6db2ef61d156
 |/
-o  0:7aa22e58e8c1
+o  0:e6eb3150255d
 
 % glog
-@  changeset:   34:0eed7cd895e0
+@  changeset:   34:fea3ac5810e0
 |  tag:         tip
-|  parent:      32:77f7d8438a3c
+|  parent:      32:d06dffa21a31
 |  user:        test
 |  date:        Thu Jan 01 00:00:34 1970 +0000
 |  summary:     (34) head
 |
-| o  changeset:   33:2e9d1b521374
-| |  parent:      18:5a8c9a29ef81
+| o  changeset:   33:68608f5145f9
+| |  parent:      18:1aa84d96232a
 | |  user:        test
 | |  date:        Thu Jan 01 00:00:33 1970 +0000
 | |  summary:     (33) head
 | |
-o |    changeset:   32:77f7d8438a3c
-|\ \   parent:      27:e9e08174cd30
-| | |  parent:      31:82ee55204a79
+o |    changeset:   32:d06dffa21a31
+|\ \   parent:      27:886ed638191b
+| | |  parent:      31:621d83e11f67
 | | |  user:        test
 | | |  date:        Thu Jan 01 00:00:32 1970 +0000
 | | |  summary:     (32) expand
 | | |
-| o |    changeset:   31:82ee55204a79
-| |\ \   parent:      21:e758e8f4ace9
-| | | |  parent:      30:777dfc428649
+| o |    changeset:   31:621d83e11f67
+| |\ \   parent:      21:d42a756af44d
+| | | |  parent:      30:6e11cd4b648f
 | | | |  user:        test
 | | | |  date:        Thu Jan 01 00:00:31 1970 +0000
 | | | |  summary:     (31) expand
 | | | |
-| | o |    changeset:   30:777dfc428649
-| | |\ \   parent:      28:4b6e9bd48cf9
-| | | | |  parent:      29:f8e7fee63353
+| | o |    changeset:   30:6e11cd4b648f
+| | |\ \   parent:      28:44ecd0b9ae99
+| | | | |  parent:      29:cd9bb2be7593
 | | | | |  user:        test
 | | | | |  date:        Thu Jan 01 00:00:30 1970 +0000
 | | | | |  summary:     (30) expand
 | | | | |
-| | | o |  changeset:   29:f8e7fee63353
-| | | | |  parent:      0:7aa22e58e8c1
+| | | o |  changeset:   29:cd9bb2be7593
+| | | | |  parent:      0:e6eb3150255d
 | | | | |  user:        test
 | | | | |  date:        Thu Jan 01 00:00:29 1970 +0000
 | | | | |  summary:     (29) regular commit
 | | | | |
-| | o | |    changeset:   28:4b6e9bd48cf9
-| | |\ \ \   parent:      1:3cae7826a707
-| | | | | |  parent:      26:720dc079a855
+| | o | |    changeset:   28:44ecd0b9ae99
+| | |\ \ \   parent:      1:6db2ef61d156
+| | | | | |  parent:      26:7f25b6c2f0b9
 | | | | | |  user:        test
 | | | | | |  date:        Thu Jan 01 00:00:28 1970 +0000
 | | | | | |  summary:     (28) merge zero known
 | | | | | |
-o | | | | |  changeset:   27:e9e08174cd30
-|/ / / / /   parent:      21:e758e8f4ace9
+o | | | | |  changeset:   27:886ed638191b
+|/ / / / /   parent:      21:d42a756af44d
 | | | | |    user:        test
 | | | | |    date:        Thu Jan 01 00:00:27 1970 +0000
 | | | | |    summary:     (27) collapse
 | | | | |
-| | o---+  changeset:   26:720dc079a855
-| | | | |  parent:      18:5a8c9a29ef81
-| | | | |  parent:      25:9d4ed048d013
+| | o---+  changeset:   26:7f25b6c2f0b9
+| | | | |  parent:      18:1aa84d96232a
+| | | | |  parent:      25:91da8ed57247
 | | | | |  user:        test
 | | | | |  date:        Thu Jan 01 00:00:26 1970 +0000
 | | | | |  summary:     (26) merge one known; far right
 | | | | |
-+---o | |  changeset:   25:9d4ed048d013
-| | | | |  parent:      21:e758e8f4ace9
-| | | | |  parent:      24:4a68967db00d
++---o | |  changeset:   25:91da8ed57247
+| | | | |  parent:      21:d42a756af44d
+| | | | |  parent:      24:a9c19a3d96b7
 | | | | |  user:        test
 | | | | |  date:        Thu Jan 01 00:00:25 1970 +0000
 | | | | |  summary:     (25) merge one known; far left
 | | | | |
-| | o | |  changeset:   24:4a68967db00d
-| | |\| |  parent:      0:7aa22e58e8c1
-| | | | |  parent:      23:bc31393cabdf
+| | o | |  changeset:   24:a9c19a3d96b7
+| | |\| |  parent:      0:e6eb3150255d
+| | | | |  parent:      23:a01cddf0766d
 | | | | |  user:        test
 | | | | |  date:        Thu Jan 01 00:00:24 1970 +0000
 | | | | |  summary:     (24) merge one known; immediate right
 | | | | |
-| | o | |  changeset:   23:bc31393cabdf
-| |/| | |  parent:      1:3cae7826a707
-| | | | |  parent:      22:a37f2ea6ebc6
+| | o | |  changeset:   23:a01cddf0766d
+| |/| | |  parent:      1:6db2ef61d156
+| | | | |  parent:      22:e0d9cccacb5d
 | | | | |  user:        test
 | | | | |  date:        Thu Jan 01 00:00:23 1970 +0000
 | | | | |  summary:     (23) merge one known; immediate left
 | | | | |
-+---o---+  changeset:   22:a37f2ea6ebc6
-| |   | |  parent:      18:5a8c9a29ef81
-| |  / /   parent:      21:e758e8f4ace9
++---o---+  changeset:   22:e0d9cccacb5d
+| |   | |  parent:      18:1aa84d96232a
+| |  / /   parent:      21:d42a756af44d
 | | | |    user:        test
 | | | |    date:        Thu Jan 01 00:00:22 1970 +0000
 | | | |    summary:     (22) merge two known; one far left, one far right
 | | | |
-o | | |    changeset:   21:e758e8f4ace9
-|\ \ \ \   parent:      19:138069b5dad7
-| | | | |  parent:      20:aeccadad74b4
+o | | |    changeset:   21:d42a756af44d
+|\ \ \ \   parent:      19:31ddc2c1573b
+| | | | |  parent:      20:d30ed6450e32
 | | | | |  user:        test
 | | | | |  date:        Thu Jan 01 00:00:21 1970 +0000
 | | | | |  summary:     (21) expand
 | | | | |
-| o---+-+  changeset:   20:aeccadad74b4
-|   | | |  parent:      0:7aa22e58e8c1
-|  / / /   parent:      18:5a8c9a29ef81
+| o---+-+  changeset:   20:d30ed6450e32
+|   | | |  parent:      0:e6eb3150255d
+|  / / /   parent:      18:1aa84d96232a
 | | | |    user:        test
 | | | |    date:        Thu Jan 01 00:00:20 1970 +0000
 | | | |    summary:     (20) merge two known; two far right
 | | | |
-o | | |    changeset:   19:138069b5dad7
-|\ \ \ \   parent:      15:c0b4283d4c1d
-| | | | |  parent:      17:43e52b935494
+o | | |    changeset:   19:31ddc2c1573b
+|\ \ \ \   parent:      15:1dda3f72782d
+| | | | |  parent:      17:44765d7c06e0
 | | | | |  user:        test
 | | | | |  date:        Thu Jan 01 00:00:19 1970 +0000
 | | | | |  summary:     (19) expand
 | | | | |
-+---+---o  changeset:   18:5a8c9a29ef81
-| | | |    parent:      1:3cae7826a707
-| | | |    parent:      15:c0b4283d4c1d
++---+---o  changeset:   18:1aa84d96232a
+| | | |    parent:      1:6db2ef61d156
+| | | |    parent:      15:1dda3f72782d
 | | | |    user:        test
 | | | |    date:        Thu Jan 01 00:00:18 1970 +0000
 | | | |    summary:     (18) merge two known; two far left
 | | | |
-| o | |    changeset:   17:43e52b935494
-| |\ \ \   parent:      12:74dc7aea4494
-| | | | |  parent:      16:449a2f9562a4
+| o | |    changeset:   17:44765d7c06e0
+| |\ \ \   parent:      12:86b91144a6e9
+| | | | |  parent:      16:3677d192927d
 | | | | |  user:        test
 | | | | |  date:        Thu Jan 01 00:00:17 1970 +0000
 | | | | |  summary:     (17) expand
 | | | | |
-| | o---+  changeset:   16:449a2f9562a4
-| | | | |  parent:      0:7aa22e58e8c1
-| | |/ /   parent:      1:3cae7826a707
+| | o---+  changeset:   16:3677d192927d
+| | | | |  parent:      0:e6eb3150255d
+| | |/ /   parent:      1:6db2ef61d156
 | | | |    user:        test
 | | | |    date:        Thu Jan 01 00:00:16 1970 +0000
 | | | |    summary:     (16) merge two known; one immediate right, one near right
 | | | |
-o | | |    changeset:   15:c0b4283d4c1d
-|\ \ \ \   parent:      13:c39d0a2b8165
-| | | | |  parent:      14:9d533950abf0
+o | | |    changeset:   15:1dda3f72782d
+|\ \ \ \   parent:      13:22d8966a97e3
+| | | | |  parent:      14:8eac370358ef
 | | | | |  user:        test
 | | | | |  date:        Thu Jan 01 00:00:15 1970 +0000
 | | | | |  summary:     (15) expand
 | | | | |
-| o-----+  changeset:   14:9d533950abf0
-| | | | |  parent:      0:7aa22e58e8c1
-| |/ / /   parent:      12:74dc7aea4494
+| o-----+  changeset:   14:8eac370358ef
+| | | | |  parent:      0:e6eb3150255d
+| |/ / /   parent:      12:86b91144a6e9
 | | | |    user:        test
 | | | |    date:        Thu Jan 01 00:00:14 1970 +0000
 | | | |    summary:     (14) merge two known; one immediate right, one far right
 | | | |
-o | | |    changeset:   13:c39d0a2b8165
-|\ \ \ \   parent:      9:79ab1812f961
-| | | | |  parent:      11:c3c395dd8b98
+o | | |    changeset:   13:22d8966a97e3
+|\ \ \ \   parent:      9:7010c0af0a35
+| | | | |  parent:      11:832d76e6bdf2
 | | | | |  user:        test
 | | | | |  date:        Thu Jan 01 00:00:13 1970 +0000
 | | | | |  summary:     (13) expand
 | | | | |
-+---o | |  changeset:   12:74dc7aea4494
-| | |/ /   parent:      1:3cae7826a707
-| | | |    parent:      9:79ab1812f961
++---o | |  changeset:   12:86b91144a6e9
+| | |/ /   parent:      1:6db2ef61d156
+| | | |    parent:      9:7010c0af0a35
 | | | |    user:        test
 | | | |    date:        Thu Jan 01 00:00:12 1970 +0000
 | | | |    summary:     (12) merge two known; one immediate right, one far left
 | | | |
-| o | |    changeset:   11:c3c395dd8b98
-| |\ \ \   parent:      6:0ca7c061cf45
-| | | | |  parent:      10:8094c50149ef
+| o | |    changeset:   11:832d76e6bdf2
+| |\ \ \   parent:      6:b105a072e251
+| | | | |  parent:      10:74c64d036d72
 | | | | |  user:        test
 | | | | |  date:        Thu Jan 01 00:00:11 1970 +0000
 | | | | |  summary:     (11) expand
 | | | | |
-| | o---+  changeset:   10:8094c50149ef
-| | | | |  parent:      0:7aa22e58e8c1
-| |/ / /   parent:      6:0ca7c061cf45
+| | o---+  changeset:   10:74c64d036d72
+| | | | |  parent:      0:e6eb3150255d
+| |/ / /   parent:      6:b105a072e251
 | | | |    user:        test
 | | | |    date:        Thu Jan 01 00:00:10 1970 +0000
 | | | |    summary:     (10) merge two known; one immediate left, one near right
 | | | |
-o | | |    changeset:   9:79ab1812f961
-|\ \ \ \   parent:      7:699392d1259e
-| | | | |  parent:      8:d7aa38594334
+o | | |    changeset:   9:7010c0af0a35
+|\ \ \ \   parent:      7:b632bb1b1224
+| | | | |  parent:      8:7a0b11f71937
 | | | | |  user:        test
 | | | | |  date:        Thu Jan 01 00:00:09 1970 +0000
 | | | | |  summary:     (9) expand
 | | | | |
-| o-----+  changeset:   8:d7aa38594334
-| | | | |  parent:      0:7aa22e58e8c1
-|/ / / /   parent:      7:699392d1259e
+| o-----+  changeset:   8:7a0b11f71937
+| | | | |  parent:      0:e6eb3150255d
+|/ / / /   parent:      7:b632bb1b1224
 | | | |    user:        test
 | | | |    date:        Thu Jan 01 00:00:08 1970 +0000
 | | | |    summary:     (8) merge two known; one immediate left, one far right
 | | | |
-o | | |    changeset:   7:699392d1259e
-|\ \ \ \   parent:      2:e8ea2256f9ec
-| | | | |  parent:      5:3589c3c477ab
+o | | |    changeset:   7:b632bb1b1224
+|\ \ \ \   parent:      2:3d9a33b8d1e1
+| | | | |  parent:      5:4409d547b708
 | | | | |  user:        test
 | | | | |  date:        Thu Jan 01 00:00:07 1970 +0000
 | | | | |  summary:     (7) expand
 | | | | |
-+---o | |  changeset:   6:0ca7c061cf45
-| |/ / /   parent:      2:e8ea2256f9ec
-| | | |    parent:      5:3589c3c477ab
++---o | |  changeset:   6:b105a072e251
+| |/ / /   parent:      2:3d9a33b8d1e1
+| | | |    parent:      5:4409d547b708
 | | | |    user:        test
 | | | |    date:        Thu Jan 01 00:00:06 1970 +0000
 | | | |    summary:     (6) merge two known; one immediate left, one far left
 | | | |
-| o | |    changeset:   5:3589c3c477ab
-| |\ \ \   parent:      3:02173ffbf857
-| | | | |  parent:      4:e2cad8233c77
+| o | |    changeset:   5:4409d547b708
+| |\ \ \   parent:      3:27eef8ed80b4
+| | | | |  parent:      4:26a8bac39d9f
 | | | | |  user:        test
 | | | | |  date:        Thu Jan 01 00:00:05 1970 +0000
 | | | | |  summary:     (5) expand
 | | | | |
-| | o | |  changeset:   4:e2cad8233c77
-| |/|/ /   parent:      1:3cae7826a707
-| | | |    parent:      3:02173ffbf857
+| | o | |  changeset:   4:26a8bac39d9f
+| |/|/ /   parent:      1:6db2ef61d156
+| | | |    parent:      3:27eef8ed80b4
 | | | |    user:        test
 | | | |    date:        Thu Jan 01 00:00:04 1970 +0000
 | | | |    summary:     (4) merge two known; one immediate left, one immediate right
 | | | |
-| o | |  changeset:   3:02173ffbf857
+| o | |  changeset:   3:27eef8ed80b4
 |/ / /   user:        test
 | | |    date:        Thu Jan 01 00:00:03 1970 +0000
 | | |    summary:     (3) collapse
 | | |
-o | |  changeset:   2:e8ea2256f9ec
+o | |  changeset:   2:3d9a33b8d1e1
 |/ /   user:        test
 | |    date:        Thu Jan 01 00:00:02 1970 +0000
 | |    summary:     (2) collapse
 | |
-o |  changeset:   1:3cae7826a707
+o |  changeset:   1:6db2ef61d156
 |/   user:        test
 |    date:        Thu Jan 01 00:00:01 1970 +0000
 |    summary:     (1) collapse
 |
-o  changeset:   0:7aa22e58e8c1
+o  changeset:   0:e6eb3150255d
    user:        test
    date:        Thu Jan 01 00:00:00 1970 +0000
    summary:     (0) root
 
 % file glog
-o  changeset:   5:3589c3c477ab
-   parent:      3:02173ffbf857
-   parent:      4:e2cad8233c77
+@  changeset:   34:fea3ac5810e0
+|  tag:         tip
+|  parent:      32:d06dffa21a31
+|  user:        test
+|  date:        Thu Jan 01 00:00:34 1970 +0000
+|  summary:     (34) head
+|
+| o  changeset:   33:68608f5145f9
+| |  parent:      18:1aa84d96232a
+| |  user:        test
+| |  date:        Thu Jan 01 00:00:33 1970 +0000
+| |  summary:     (33) head
+| |
+o |    changeset:   32:d06dffa21a31
+|\ \   parent:      27:886ed638191b
+| | |  parent:      31:621d83e11f67
+| | |  user:        test
+| | |  date:        Thu Jan 01 00:00:32 1970 +0000
+| | |  summary:     (32) expand
+| | |
+| o |  changeset:   31:621d83e11f67
+| | |  parent:      21:d42a756af44d
+| | |  parent:      30:6e11cd4b648f
+| | |  user:        test
+| | |  date:        Thu Jan 01 00:00:31 1970 +0000
+| | |  summary:     (31) expand
+| | |
+| o |    changeset:   30:6e11cd4b648f
+| |\ \   parent:      28:44ecd0b9ae99
+| | | |  parent:      29:cd9bb2be7593
+| | | |  user:        test
+| | | |  date:        Thu Jan 01 00:00:30 1970 +0000
+| | | |  summary:     (30) expand
+| | | |
+| | o |  changeset:   29:cd9bb2be7593
+| | | |  parent:      0:e6eb3150255d
+| | | |  user:        test
+| | | |  date:        Thu Jan 01 00:00:29 1970 +0000
+| | | |  summary:     (29) regular commit
+| | | |
+| o | |  changeset:   28:44ecd0b9ae99
+| | | |  parent:      1:6db2ef61d156
+| | | |  parent:      26:7f25b6c2f0b9
+| | | |  user:        test
+| | | |  date:        Thu Jan 01 00:00:28 1970 +0000
+| | | |  summary:     (28) merge zero known
+| | | |
+o | | |  changeset:   27:886ed638191b
+| | | |  parent:      21:d42a756af44d
+| | | |  user:        test
+| | | |  date:        Thu Jan 01 00:00:27 1970 +0000
+| | | |  summary:     (27) collapse
+| | | |
+| o | |  changeset:   26:7f25b6c2f0b9
+| | | |  parent:      18:1aa84d96232a
+| | | |  parent:      25:91da8ed57247
+| | | |  user:        test
+| | | |  date:        Thu Jan 01 00:00:26 1970 +0000
+| | | |  summary:     (26) merge one known; far right
+| | | |
+| o | |  changeset:   25:91da8ed57247
+| | | |  parent:      21:d42a756af44d
+| | | |  parent:      24:a9c19a3d96b7
+| | | |  user:        test
+| | | |  date:        Thu Jan 01 00:00:25 1970 +0000
+| | | |  summary:     (25) merge one known; far left
+| | | |
+| o | |  changeset:   24:a9c19a3d96b7
+| | | |  parent:      0:e6eb3150255d
+| | | |  parent:      23:a01cddf0766d
+| | | |  user:        test
+| | | |  date:        Thu Jan 01 00:00:24 1970 +0000
+| | | |  summary:     (24) merge one known; immediate right
+| | | |
+| o | |  changeset:   23:a01cddf0766d
+| | | |  parent:      1:6db2ef61d156
+| | | |  parent:      22:e0d9cccacb5d
+| | | |  user:        test
+| | | |  date:        Thu Jan 01 00:00:23 1970 +0000
+| | | |  summary:     (23) merge one known; immediate left
+| | | |
+| o | |  changeset:   22:e0d9cccacb5d
+|/ / /   parent:      18:1aa84d96232a
+| | |    parent:      21:d42a756af44d
+| | |    user:        test
+| | |    date:        Thu Jan 01 00:00:22 1970 +0000
+| | |    summary:     (22) merge two known; one far left, one far right
+| | |
+o | |    changeset:   21:d42a756af44d
+|\ \ \   parent:      19:31ddc2c1573b
+| | | |  parent:      20:d30ed6450e32
+| | | |  user:        test
+| | | |  date:        Thu Jan 01 00:00:21 1970 +0000
+| | | |  summary:     (21) expand
+| | | |
+| o---+  changeset:   20:d30ed6450e32
+|   | |  parent:      0:e6eb3150255d
+|  / /   parent:      18:1aa84d96232a
+| | |    user:        test
+| | |    date:        Thu Jan 01 00:00:20 1970 +0000
+| | |    summary:     (20) merge two known; two far right
+| | |
+o | |    changeset:   19:31ddc2c1573b
+|\ \ \   parent:      15:1dda3f72782d
+| | | |  parent:      17:44765d7c06e0
+| | | |  user:        test
+| | | |  date:        Thu Jan 01 00:00:19 1970 +0000
+| | | |  summary:     (19) expand
+| | | |
++-----o  changeset:   18:1aa84d96232a
+| | |    parent:      1:6db2ef61d156
+| | |    parent:      15:1dda3f72782d
+| | |    user:        test
+| | |    date:        Thu Jan 01 00:00:18 1970 +0000
+| | |    summary:     (18) merge two known; two far left
+| | |
+| o |    changeset:   17:44765d7c06e0
+| |\ \   parent:      12:86b91144a6e9
+| | | |  parent:      16:3677d192927d
+| | | |  user:        test
+| | | |  date:        Thu Jan 01 00:00:17 1970 +0000
+| | | |  summary:     (17) expand
+| | | |
+| | o |  changeset:   16:3677d192927d
+| | | |  parent:      0:e6eb3150255d
+| | | |  parent:      1:6db2ef61d156
+| | | |  user:        test
+| | | |  date:        Thu Jan 01 00:00:16 1970 +0000
+| | | |  summary:     (16) merge two known; one immediate right, one near right
+| | | |
+o | | |    changeset:   15:1dda3f72782d
+|\ \ \ \   parent:      13:22d8966a97e3
+| | | | |  parent:      14:8eac370358ef
+| | | | |  user:        test
+| | | | |  date:        Thu Jan 01 00:00:15 1970 +0000
+| | | | |  summary:     (15) expand
+| | | | |
+| o | | |  changeset:   14:8eac370358ef
+| |/ / /   parent:      0:e6eb3150255d
+| | | |    parent:      12:86b91144a6e9
+| | | |    user:        test
+| | | |    date:        Thu Jan 01 00:00:14 1970 +0000
+| | | |    summary:     (14) merge two known; one immediate right, one far right
+| | | |
+o | | |    changeset:   13:22d8966a97e3
+|\ \ \ \   parent:      9:7010c0af0a35
+| | | | |  parent:      11:832d76e6bdf2
+| | | | |  user:        test
+| | | | |  date:        Thu Jan 01 00:00:13 1970 +0000
+| | | | |  summary:     (13) expand
+| | | | |
++---o | |  changeset:   12:86b91144a6e9
+| |  / /   parent:      1:6db2ef61d156
+| | | |    parent:      9:7010c0af0a35
+| | | |    user:        test
+| | | |    date:        Thu Jan 01 00:00:12 1970 +0000
+| | | |    summary:     (12) merge two known; one immediate right, one far left
+| | | |
+| o | |  changeset:   11:832d76e6bdf2
+| | | |  parent:      6:b105a072e251
+| | | |  parent:      10:74c64d036d72
+| | | |  user:        test
+| | | |  date:        Thu Jan 01 00:00:11 1970 +0000
+| | | |  summary:     (11) expand
+| | | |
+| o | |  changeset:   10:74c64d036d72
+| | | |  parent:      0:e6eb3150255d
+| | | |  parent:      6:b105a072e251
+| | | |  user:        test
+| | | |  date:        Thu Jan 01 00:00:10 1970 +0000
+| | | |  summary:     (10) merge two known; one immediate left, one near right
+| | | |
+o | | |  changeset:   9:7010c0af0a35
+| | | |  parent:      7:b632bb1b1224
+| | | |  parent:      8:7a0b11f71937
+| | | |  user:        test
+| | | |  date:        Thu Jan 01 00:00:09 1970 +0000
+| | | |  summary:     (9) expand
+| | | |
+o | | |  changeset:   8:7a0b11f71937
+| | | |  parent:      0:e6eb3150255d
+| | | |  parent:      7:b632bb1b1224
+| | | |  user:        test
+| | | |  date:        Thu Jan 01 00:00:08 1970 +0000
+| | | |  summary:     (8) merge two known; one immediate left, one far right
+| | | |
+o | | |  changeset:   7:b632bb1b1224
+| | | |  parent:      2:3d9a33b8d1e1
+| | | |  parent:      5:4409d547b708
+| | | |  user:        test
+| | | |  date:        Thu Jan 01 00:00:07 1970 +0000
+| | | |  summary:     (7) expand
+| | | |
+| o | |  changeset:   6:b105a072e251
+|/ / /   parent:      2:3d9a33b8d1e1
+| | |    parent:      5:4409d547b708
+| | |    user:        test
+| | |    date:        Thu Jan 01 00:00:06 1970 +0000
+| | |    summary:     (6) merge two known; one immediate left, one far left
+| | |
+o | |  changeset:   5:4409d547b708
+| | |  parent:      3:27eef8ed80b4
+| | |  parent:      4:26a8bac39d9f
+| | |  user:        test
+| | |  date:        Thu Jan 01 00:00:05 1970 +0000
+| | |  summary:     (5) expand
+| | |
+o | |  changeset:   4:26a8bac39d9f
+| | |  parent:      1:6db2ef61d156
+| | |  parent:      3:27eef8ed80b4
+| | |  user:        test
+| | |  date:        Thu Jan 01 00:00:04 1970 +0000
+| | |  summary:     (4) merge two known; one immediate left, one immediate right
+| | |
+o | |  changeset:   3:27eef8ed80b4
+| | |  user:        test
+| | |  date:        Thu Jan 01 00:00:03 1970 +0000
+| | |  summary:     (3) collapse
+| | |
+o | |  changeset:   2:3d9a33b8d1e1
+|/ /   user:        test
+| |    date:        Thu Jan 01 00:00:02 1970 +0000
+| |    summary:     (2) collapse
+| |
+o |  changeset:   1:6db2ef61d156
+|/   user:        test
+|    date:        Thu Jan 01 00:00:01 1970 +0000
+|    summary:     (1) collapse
+|
+o  changeset:   0:e6eb3150255d
    user:        test
-   date:        Thu Jan 01 00:00:05 1970 +0000
-   summary:     (5) expand
+   date:        Thu Jan 01 00:00:00 1970 +0000
+   summary:     (0) root
 
 % unused arguments
 hg glog: invalid arguments
@@ -357,18 +549,20 @@
 show revision history alongside an ASCII revision graph
 failed
 % from outer space
-@  changeset:   34:0eed7cd895e0
+@  changeset:   34:fea3ac5810e0
 |  tag:         tip
-|  parent:      32:77f7d8438a3c
+|  parent:      32:d06dffa21a31
 |  user:        test
 |  date:        Thu Jan 01 00:00:34 1970 +0000
 |  summary:     (34) head
 |
-o  changeset:   0:7aa22e58e8c1
-   user:        test
-   date:        Thu Jan 01 00:00:00 1970 +0000
-   summary:     (0) root
-
+@  changeset:   34:fea3ac5810e0
+|  tag:         tip
+|  parent:      32:d06dffa21a31
+|  user:        test
+|  date:        Thu Jan 01 00:00:34 1970 +0000
+|  summary:     (34) head
+|
 % file log with revs != cset revs
 @  changeset:   2:12c28321755b
 |  tag:         tip
@@ -386,39 +580,39 @@
 adding changesets
 adding manifests
 adding file changes
-added 31 changesets with 31 changes to 31 files
-o  34:0eed7cd895e0
+added 31 changesets with 31 changes to 1 files
+o  34:fea3ac5810e0
 |
-| o  33:2e9d1b521374
+| o  33:68608f5145f9
 |
-o  32:77f7d8438a3c
+o  32:d06dffa21a31
 |
-o  27:e9e08174cd30
+o  27:886ed638191b
 
 comparing with repo2
 searching for changes
-@  changeset:   34:0eed7cd895e0
+@  changeset:   34:fea3ac5810e0
 |  tag:         tip
-|  parent:      32:77f7d8438a3c
+|  parent:      32:d06dffa21a31
 |  user:        test
 |  date:        Thu Jan 01 00:00:34 1970 +0000
 |  summary:     (34) head
 |
-| o  changeset:   33:2e9d1b521374
-|    parent:      18:5a8c9a29ef81
+| o  changeset:   33:68608f5145f9
+|    parent:      18:1aa84d96232a
 |    user:        test
 |    date:        Thu Jan 01 00:00:33 1970 +0000
 |    summary:     (33) head
 |
-o  changeset:   32:77f7d8438a3c
-|  parent:      27:e9e08174cd30
-|  parent:      31:82ee55204a79
+o  changeset:   32:d06dffa21a31
+|  parent:      27:886ed638191b
+|  parent:      31:621d83e11f67
 |  user:        test
 |  date:        Thu Jan 01 00:00:32 1970 +0000
 |  summary:     (32) expand
 |
-o  changeset:   27:e9e08174cd30
-   parent:      21:e758e8f4ace9
+o  changeset:   27:886ed638191b
+   parent:      21:d42a756af44d
    user:        test
    date:        Thu Jan 01 00:00:27 1970 +0000
    summary:     (27) collapse
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-gpg	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+"$TESTDIR/hghave" gpg || exit 80
+
+cat <<EOF >> $HGRCPATH
+[extensions]
+gpg=
+
+[gpg]
+cmd=gpg --no-permission-warning --homedir $TESTDIR/gpg
+EOF
+
+hg init r
+cd r
+echo foo > foo
+hg ci -Amfoo
+
+echo '% no signatures'
+hg sigs
+
+echo '% hg sign 0'
+hg sign 0
+
+echo '% hg sigs'
+hg sigs
+
+echo '% hg sigcheck 0'
+hg sigcheck 0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-gpg.out	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,9 @@
+adding foo
+% no signatures
+% hg sign 0
+Signing 0:e63c23eaa88a
+% hg sigs
+hgtest                             0:e63c23eaa88ae77967edcf4ea194d31167c478b0
+% hg sigcheck 0
+e63c23eaa88a is signed by:
+ hgtest
--- a/tests/test-grep	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-grep	Wed Jul 08 17:03:16 2009 -0700
@@ -73,3 +73,25 @@
 # Used to crash here
 hg grep -r 1 octarine
 
+# Issue337: test that grep follows parent-child relationships instead
+# of just using revision numbers.
+cd ..
+echo % issue 337
+hg init issue337
+cd issue337
+
+echo white > color
+hg commit -A -m "0 white"
+
+echo red > color
+hg commit -A -m "1 red"
+
+hg update 0
+echo black > color
+hg commit -A -m "2 black"
+
+hg update --clean 1
+echo blue > color
+hg commit -A -m "3 blue"
+
+hg grep --all red
--- a/tests/test-grep.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-grep.out	Wed Jul 08 17:03:16 2009 -0700
@@ -38,6 +38,13 @@
 noeol:4:no infinite loo
 % issue 685
 adding color
+colour:1:octarine
 color:0:octarine
 colour:1:octarine
-colour:1:octarine
+% issue 337
+adding color
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+created new head
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+color:3:-:red
+color:1:+:red
--- a/tests/test-hardlinks-safety.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-hardlinks-safety.out	Wed Jul 08 17:03:16 2009 -0700
@@ -15,6 +15,8 @@
 430ed4828a74fa4047bc816a25500f7472ab4bfe:foo
 %
 foo
+patch foo finalized without changeset message
+patch bar finalized without changeset message
 %%%
 4e7abb4840c46a910f6d7b4d3c3fc7e5209e684c foo
 430ed4828a74fa4047bc816a25500f7472ab4bfe bar
--- a/tests/test-help.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-help.out	Wed Jul 08 17:03:16 2009 -0700
@@ -3,11 +3,12 @@
 basic commands:
 
  add        add the specified files on the next commit
- annotate   show changeset information per file line
+ annotate   show changeset information by line for each file
  clone      make a copy of an existing repository
  commit     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        show revision history of entire repository or files
  merge      merge working directory with another revision
@@ -21,11 +22,12 @@
 
 use "hg help" for the full list of commands or "hg -v" for details
  add        add the specified files on the next commit
- annotate   show changeset information per file line
+ annotate   show changeset information by line for each file
  clone      make a copy of an existing repository
  commit     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        show revision history of entire repository or files
  merge      merge working directory with another revision
@@ -42,8 +44,8 @@
 
  add          add the specified files on the next commit
  addremove    add all new files, delete all missing files
- annotate     show changeset information per file line
- archive      create unversioned archive of a repository revision
+ annotate     show changeset information by line for each file
+ archive      create an unversioned archive of a repository revision
  backout      reverse effect of earlier changeset
  bisect       subdivision search of changesets
  branch       set or show the current branch name
@@ -55,6 +57,7 @@
  copy         mark files as copied for the next commit
  diff         diff repository (or selected files)
  export       dump the header and diffs for one or more changesets
+ forget       forget the specified files on the next commit
  grep         search for a pattern in specified files and revisions
  heads        show current repository heads or show branch heads
  help         show help for a given topic or a help overview
@@ -99,12 +102,13 @@
  diffs        Diff Formats
  templating   Template Usage
  urls         URL Paths
+ extensions   Using additional features
 
 use "hg -v help" to show aliases and global options
  add          add the specified files on the next commit
  addremove    add all new files, delete all missing files
- annotate     show changeset information per file line
- archive      create unversioned archive of a repository revision
+ annotate     show changeset information by line for each file
+ archive      create an unversioned archive of a repository revision
  backout      reverse effect of earlier changeset
  bisect       subdivision search of changesets
  branch       set or show the current branch name
@@ -116,6 +120,7 @@
  copy         mark files as copied for the next commit
  diff         diff repository (or selected files)
  export       dump the header and diffs for one or more changesets
+ forget       forget the specified files on the next commit
  grep         search for a pattern in specified files and revisions
  heads        show current repository heads or show branch heads
  help         show help for a given topic or a help overview
@@ -160,6 +165,7 @@
  diffs        Diff Formats
  templating   Template Usage
  urls         URL Paths
+ extensions   Using additional features
 hg add [OPTION]... [FILE]...
 
 add the specified files on the next commit
@@ -168,7 +174,7 @@
     repository.
 
     The files will be added to the repository at the next commit. To
-    undo an add before that, see hg revert.
+    undo an add before that, see hg forget.
 
     If no names are given, add all files to the repository.
 
@@ -188,7 +194,7 @@
     repository.
 
     The files will be added to the repository at the next commit. To
-    undo an add before that, see hg revert.
+    undo an add before that, see hg forget.
 
     If no names are given, add all files to the repository.
 
@@ -248,10 +254,10 @@
 
     Show status of files in the repository. If names are given, only
     files that match are shown. Files that are clean or ignored or
-    source of a copy/move operation, are not listed unless -c/--clean,
-    -i/--ignored, -C/--copies or -A/--all is given. Unless options
-    described with "show only ..." are given, the options -mardu are
-    used.
+    the source of a copy/move operation, are not listed unless
+    -c/--clean, -i/--ignored, -C/--copies or -A/--all are given.
+    Unless options described with "show only ..." are given, the
+    options -mardu are used.
 
     Option -q/--quiet hides untracked (unknown and ignored) files
     unless explicitly requested with -u/--unknown or -i/--ignored.
@@ -262,7 +268,8 @@
     to one merge parent.
 
     If one revision is given, it is used as the base revision.
-    If two revisions are given, the difference between them is shown.
+    If two revisions are given, the differences between them are
+    shown.
 
     The codes used to show the status of files are:
     M = modified
@@ -272,7 +279,7 @@
     ! = missing (deleted by non-hg command, but still tracked)
     ? = not tracked
     I = ignored
-      = the previous added file was copied from here
+      = origin of the previous file listed as A (added)
 
 options:
 
@@ -301,11 +308,12 @@
 basic commands:
 
  add        add the specified files on the next commit
- annotate   show changeset information per file line
+ annotate   show changeset information by line for each file
  clone      make a copy of an existing repository
  commit     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        show revision history of entire repository or files
  merge      merge working directory with another revision
@@ -324,11 +332,12 @@
 basic commands:
 
  add        add the specified files on the next commit
- annotate   show changeset information per file line
+ annotate   show changeset information by line for each file
  clone      make a copy of an existing repository
  commit     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        show revision history of entire repository or files
  merge      merge working directory with another revision
--- a/tests/test-hgrc.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-hgrc.out	Wed Jul 08 17:03:16 2009 -0700
@@ -7,7 +7,6 @@
 bundle.mainreporoot=.../foobar
 defaults.backout=-d "0 0"
 defaults.commit=-d "0 0"
-defaults.debugrawcommit=-d "0 0"
 defaults.tag=-d "0 0"
 paths.default=.../foo%bar
 ui.slash=True
--- a/tests/test-hgweb-commands	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-hgweb-commands	Wed Jul 08 17:03:16 2009 -0700
@@ -13,6 +13,9 @@
 echo foo > foo
 hg ci -Ambase
 hg tag 1.0
+echo another > foo
+hg branch stable
+hg ci -Ambranch
 hg serve -n test -p $HGPORT -d --pid-file=hg.pid -E errors.log
 cat hg.pid >> $DAEMON_PIDS
 
@@ -33,6 +36,7 @@
 
 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 '/summary/?style=gitweb'
 "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '/graph/?style=gitweb'
 
@@ -45,7 +49,8 @@
 echo % branches
 "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '?cmd=branches'
 echo % changegroup
-"$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '?cmd=changegroup'
+"$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '?cmd=changegroup' \
+    | $TESTDIR/printrepr.py
 echo % stream_out
 "$TESTDIR/get-with-headers.py" 127.0.0.1:$HGPORT '?cmd=stream_out'
 echo % failing unbundle, requires POST request
Binary file tests/test-hgweb-commands.out has changed
--- a/tests/test-hgweb-descend-empties.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-hgweb-descend-empties.out	Wed Jul 08 17:03:16 2009 -0700
@@ -21,13 +21,14 @@
 <div class="container">
 <div class="menu">
 <div class="logo">
-<a href="http://www.selenic.com/mercurial/">
+<a href="http://mercurial.selenic.com/">
 <img src="/static/hglogo.png" alt="mercurial" /></a>
 </div>
 <ul>
 <li><a href="/shortlog/9087c84a0f5d">log</a></li>
 <li><a href="/graph/9087c84a0f5d">graph</a></li>
 <li><a href="/tags">tags</a></li>
+<li><a href="/branches">branches</a></li>
 </ul>
 <ul>
 <li><a href="/rev/9087c84a0f5d">changeset</a></li>
@@ -60,7 +61,43 @@
   <td class="size"></td>
   <td class="permissions">drwxr-xr-x</td>
 </tr>
-<tr class="fileline parity1"><td class="name"><a href="/file/9087c84a0f5d/a1"><img src="/static/coal-folder.png" alt="dir."/> a1/</a> <a href="/file/9087c84a0f5d/a1/a2/a3/a4">a2/a3/a4</a></td><td class="size"></td><td class="permissions">drwxr-xr-x</td></tr><tr class="fileline parity0"><td class="name"><a href="/file/9087c84a0f5d/b1"><img src="/static/coal-folder.png" alt="dir."/> b1/</a> <a href="/file/9087c84a0f5d/b1/b2">b2</a></td><td class="size"></td><td class="permissions">drwxr-xr-x</td></tr><tr class="fileline parity1"><td class="name"><a href="/file/9087c84a0f5d/d1"><img src="/static/coal-folder.png" alt="dir."/> d1/</a> <a href="/file/9087c84a0f5d/d1/d2">d2</a></td><td class="size"></td><td class="permissions">drwxr-xr-x</td></tr>
+
+<tr class="fileline parity1">
+<td class="name">
+<a href="/file/9087c84a0f5d/a1">
+<img src="/static/coal-folder.png" alt="dir."/> a1/
+</a>
+<a href="/file/9087c84a0f5d/a1/a2/a3/a4">
+a2/a3/a4
+</a>
+</td>
+<td class="size"></td>
+<td class="permissions">drwxr-xr-x</td>
+</tr>
+<tr class="fileline parity0">
+<td class="name">
+<a href="/file/9087c84a0f5d/b1">
+<img src="/static/coal-folder.png" alt="dir."/> b1/
+</a>
+<a href="/file/9087c84a0f5d/b1/b2">
+b2
+</a>
+</td>
+<td class="size"></td>
+<td class="permissions">drwxr-xr-x</td>
+</tr>
+<tr class="fileline parity1">
+<td class="name">
+<a href="/file/9087c84a0f5d/d1">
+<img src="/static/coal-folder.png" alt="dir."/> d1/
+</a>
+<a href="/file/9087c84a0f5d/d1/d2">
+d2
+</a>
+</td>
+<td class="size"></td>
+<td class="permissions">drwxr-xr-x</td>
+</tr>
 
 </table>
 </div>
--- a/tests/test-hgweb-diffs	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-hgweb-diffs	Wed Jul 08 17:03:16 2009 -0700
@@ -1,3 +1,5 @@
+#!/bin/sh
+
 echo % setting up repo
 hg init test
 cd test
--- a/tests/test-hgweb-diffs.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-hgweb-diffs.out	Wed Jul 08 17:03:16 2009 -0700
@@ -19,13 +19,14 @@
 <div class="container">
 <div class="menu">
 <div class="logo">
-<a href="http://www.selenic.com/mercurial/">
+<a href="http://mercurial.selenic.com/">
 <img src="/static/hglogo.png" alt="mercurial" /></a>
 </div>
 <ul>
  <li><a href="/shortlog/0cd96de13884">log</a></li>
  <li><a href="/graph/0cd96de13884">graph</a></li>
  <li><a href="/tags">tags</a></li>
+ <li><a href="/branches">branches</a></li>
 </ul>
 <ul>
  <li class="active">changeset</li>
@@ -76,15 +77,15 @@
 <div class="overflow">
 <div class="sourcefirst">   line diff</div>
 
-<div class="source bottomline parity0"><a href="#l1.1" id="l1.1">     1.1</a> <span class="minusline">--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+<div class="source bottomline parity0"><pre><a href="#l1.1" id="l1.1">     1.1</a> <span class="minusline">--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
 </span><a href="#l1.2" id="l1.2">     1.2</a> <span class="plusline">+++ b/a	Thu Jan 01 00:00:00 1970 +0000
 </span><a href="#l1.3" id="l1.3">     1.3</a> <span class="atline">@@ -0,0 +1,1 @@
 </span><a href="#l1.4" id="l1.4">     1.4</a> <span class="plusline">+a
-</span></div><div class="source bottomline parity1"><a href="#l2.1" id="l2.1">     2.1</a> <span class="minusline">--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+</span></pre></div><div class="source bottomline parity1"><pre><a href="#l2.1" id="l2.1">     2.1</a> <span class="minusline">--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
 </span><a href="#l2.2" id="l2.2">     2.2</a> <span class="plusline">+++ b/b	Thu Jan 01 00:00:00 1970 +0000
 </span><a href="#l2.3" id="l2.3">     2.3</a> <span class="atline">@@ -0,0 +1,1 @@
 </span><a href="#l2.4" id="l2.4">     2.4</a> <span class="plusline">+b
-</span></div>
+</span></pre></div>
 </div>
 
 </div>
@@ -111,13 +112,14 @@
 <div class="container">
 <div class="menu">
 <div class="logo">
-<a href="http://www.selenic.com/mercurial/">
+<a href="http://mercurial.selenic.com/">
 <img src="/static/hglogo.png" alt="mercurial" /></a>
 </div>
 <ul>
 <li><a href="/shortlog/78e4ebad7cdf">log</a></li>
 <li><a href="/graph/78e4ebad7cdf">graph</a></li>
 <li><a href="/tags">tags</a></li>
+<li><a href="/branches">branches</a></li>
 </ul>
 <ul>
 <li><a href="/rev/78e4ebad7cdf">changeset</a></li>
@@ -168,11 +170,11 @@
 <div class="overflow">
 <div class="sourcefirst">   line diff</div>
 
-<div class="source bottomline parity0"><a href="#l1.1" id="l1.1">     1.1</a> <span class="minusline">--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+<div class="source bottomline parity0"><pre><a href="#l1.1" id="l1.1">     1.1</a> <span class="minusline">--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
 </span><a href="#l1.2" id="l1.2">     1.2</a> <span class="plusline">+++ b/a	Thu Jan 01 00:00:00 1970 +0000
 </span><a href="#l1.3" id="l1.3">     1.3</a> <span class="atline">@@ -0,0 +1,1 @@
 </span><a href="#l1.4" id="l1.4">     1.4</a> <span class="plusline">+a
-</span></div>
+</span></pre></div>
 </div>
 </div>
 </div>
@@ -199,13 +201,14 @@
 <div class="container">
 <div class="menu">
 <div class="logo">
-<a href="http://www.selenic.com/mercurial/">
+<a href="http://mercurial.selenic.com/">
 <img src="/static/hglogo.png" alt="mercurial" /></a>
 </div>
 <ul>
  <li><a href="/shortlog/0cd96de13884">log</a></li>
  <li><a href="/graph/0cd96de13884">graph</a></li>
  <li><a href="/tags">tags</a></li>
+ <li><a href="/branches">branches</a></li>
 </ul>
 <ul>
  <li class="active">changeset</li>
@@ -256,17 +259,17 @@
 <div class="overflow">
 <div class="sourcefirst">   line diff</div>
 
-<div class="source bottomline parity0"><a href="#l1.1" id="l1.1">     1.1</a> new file mode 100644
+<div class="source bottomline parity0"><pre><a href="#l1.1" id="l1.1">     1.1</a> new file mode 100644
 <a href="#l1.2" id="l1.2">     1.2</a> <span class="minusline">--- /dev/null
 </span><a href="#l1.3" id="l1.3">     1.3</a> <span class="plusline">+++ b/a
 </span><a href="#l1.4" id="l1.4">     1.4</a> <span class="atline">@@ -0,0 +1,1 @@
 </span><a href="#l1.5" id="l1.5">     1.5</a> <span class="plusline">+a
-</span></div><div class="source bottomline parity1"><a href="#l2.1" id="l2.1">     2.1</a> new file mode 100644
+</span></pre></div><div class="source bottomline parity1"><pre><a href="#l2.1" id="l2.1">     2.1</a> new file mode 100644
 <a href="#l2.2" id="l2.2">     2.2</a> <span class="minusline">--- /dev/null
 </span><a href="#l2.3" id="l2.3">     2.3</a> <span class="plusline">+++ b/b
 </span><a href="#l2.4" id="l2.4">     2.4</a> <span class="atline">@@ -0,0 +1,1 @@
 </span><a href="#l2.5" id="l2.5">     2.5</a> <span class="plusline">+b
-</span></div>
+</span></pre></div>
 </div>
 
 </div>
@@ -293,13 +296,14 @@
 <div class="container">
 <div class="menu">
 <div class="logo">
-<a href="http://www.selenic.com/mercurial/">
+<a href="http://mercurial.selenic.com/">
 <img src="/static/hglogo.png" alt="mercurial" /></a>
 </div>
 <ul>
 <li><a href="/shortlog/78e4ebad7cdf">log</a></li>
 <li><a href="/graph/78e4ebad7cdf">graph</a></li>
 <li><a href="/tags">tags</a></li>
+<li><a href="/branches">branches</a></li>
 </ul>
 <ul>
 <li><a href="/rev/78e4ebad7cdf">changeset</a></li>
@@ -350,12 +354,12 @@
 <div class="overflow">
 <div class="sourcefirst">   line diff</div>
 
-<div class="source bottomline parity0"><a href="#l1.1" id="l1.1">     1.1</a> new file mode 100755
+<div class="source bottomline parity0"><pre><a href="#l1.1" id="l1.1">     1.1</a> new file mode 100755
 <a href="#l1.2" id="l1.2">     1.2</a> <span class="minusline">--- /dev/null
 </span><a href="#l1.3" id="l1.3">     1.3</a> <span class="plusline">+++ b/a
 </span><a href="#l1.4" id="l1.4">     1.4</a> <span class="atline">@@ -0,0 +1,1 @@
 </span><a href="#l1.5" id="l1.5">     1.5</a> <span class="plusline">+a
-</span></div>
+</span></pre></div>
 </div>
 </div>
 </div>
--- a/tests/test-hgweb-empty.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-hgweb-empty.out	Wed Jul 08 17:03:16 2009 -0700
@@ -18,13 +18,14 @@
 <div class="container">
 <div class="menu">
 <div class="logo">
-<a href="http://www.selenic.com/mercurial/">
+<a href="http://mercurial.selenic.com/">
 <img src="/static/hglogo.png" alt="mercurial" /></a>
 </div>
 <ul>
 <li class="active">log</li>
 <li><a href="/graph/000000000000">graph</a></li>
 <li><a href="/tags">tags</a></li>
+<li><a href="/branches">branches</a></li>
 </ul>
 <ul>
 <li><a href="/rev/000000000000">changeset</a></li>
@@ -86,13 +87,14 @@
 <div class="container">
 <div class="menu">
 <div class="logo">
-<a href="http://www.selenic.com/mercurial/">
+<a href="http://mercurial.selenic.com/">
 <img src="/static/hglogo.png" alt="mercurial" /></a>
 </div>
 <ul>
 <li class="active">log</li>
 <li><a href="/graph/000000000000">graph</a></li>
 <li><a href="/tags">tags</a></li>
+<li><a href="/branches">branches</a></li>
 </ul>
 <ul>
 <li><a href="/rev/000000000000">changeset</a></li>
@@ -155,13 +157,14 @@
 <div class="container">
 <div class="menu">
 <div class="logo">
-<a href="http://www.selenic.com/mercurial/">
+<a href="http://mercurial.selenic.com/">
 <img src="/static/hglogo.png" alt="mercurial" /></a>
 </div>
 <ul>
 <li><a href="/shortlog/000000000000">log</a></li>
 <li class="active">graph</li>
 <li><a href="/tags">tags</a></li>
+<li><a href="/branches">branches</a></li>
 </ul>
 <ul>
 <li><a href="/rev/000000000000">changeset</a></li>
@@ -293,13 +296,14 @@
 <div class="container">
 <div class="menu">
 <div class="logo">
-<a href="http://www.selenic.com/mercurial/">
+<a href="http://mercurial.selenic.com/">
 <img src="/static/hglogo.png" alt="mercurial" /></a>
 </div>
 <ul>
 <li><a href="/shortlog/000000000000">log</a></li>
 <li><a href="/graph/000000000000">graph</a></li>
 <li><a href="/tags">tags</a></li>
+<li><a href="/branches">branches</a></li>
 </ul>
 <ul>
 <li><a href="/rev/000000000000">changeset</a></li>
--- a/tests/test-hgweb-filelog	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-hgweb-filelog	Wed Jul 08 17:03:16 2009 -0700
@@ -1,3 +1,5 @@
+#!/bin/sh
+
 hg init test
 cd test
 
--- a/tests/test-hgweb-filelog.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-hgweb-filelog.out	Wed Jul 08 17:03:16 2009 -0700
@@ -106,13 +106,14 @@
 <div class="container">
 <div class="menu">
 <div class="logo">
-<a href="http://www.selenic.com/mercurial/">
+<a href="http://mercurial.selenic.com/">
 <img src="/static/hglogo.png" alt="mercurial" /></a>
 </div>
 <ul>
 <li><a href="/shortlog/01de2d66a28d">log</a></li>
 <li><a href="/graph/01de2d66a28d">graph</a></li>
 <li><a href="/tags">tags</a></li>
+<li><a href="/branches">branches</a></li>
 </ul>
 <ul>
 <li><a href="/rev/01de2d66a28d">changeset</a></li>
@@ -188,13 +189,14 @@
 <div class="container">
 <div class="menu">
 <div class="logo">
-<a href="http://www.selenic.com/mercurial/">
+<a href="http://mercurial.selenic.com/">
 <img src="/static/hglogo.png" alt="mercurial" /></a>
 </div>
 <ul>
 <li><a href="/shortlog/01de2d66a28d">log</a></li>
 <li><a href="/graph/01de2d66a28d">graph</a></li>
 <li><a href="/tags">tags</a></li>
+<li><a href="/branches">branches</a></li>
 </ul>
 <ul>
 <li><a href="/rev/01de2d66a28d">changeset</a></li>
@@ -270,13 +272,14 @@
 <div class="container">
 <div class="menu">
 <div class="logo">
-<a href="http://www.selenic.com/mercurial/">
+<a href="http://mercurial.selenic.com/">
 <img src="/static/hglogo.png" alt="mercurial" /></a>
 </div>
 <ul>
 <li><a href="/shortlog/5ed941583260">log</a></li>
 <li><a href="/graph/5ed941583260">graph</a></li>
 <li><a href="/tags">tags</a></li>
+<li><a href="/branches">branches</a></li>
 </ul>
 <ul>
 <li><a href="/rev/5ed941583260">changeset</a></li>
@@ -347,13 +350,14 @@
 <div class="container">
 <div class="menu">
 <div class="logo">
-<a href="http://www.selenic.com/mercurial/">
+<a href="http://mercurial.selenic.com/">
 <img src="/static/hglogo.png" alt="mercurial" /></a>
 </div>
 <ul>
 <li><a href="/shortlog/5ed941583260">log</a></li>
 <li><a href="/graph/5ed941583260">graph</a></li>
 <li><a href="/tags">tags</a></li>
+<li><a href="/branches">branches</a></li>
 </ul>
 <ul>
 <li><a href="/rev/5ed941583260">changeset</a></li>
@@ -420,13 +424,14 @@
 <div class="container">
 <div class="menu">
 <div class="logo">
-<a href="http://www.selenic.com/mercurial/">
+<a href="http://mercurial.selenic.com/">
 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
 </div>
 <ul>
 <li><a href="/shortlog">log</a></li>
 <li><a href="/graph">graph</a></li>
 <li><a href="/tags">tags</a></li>
+<li><a href="/branches">branches</a></li>
 </ul>
 </div>
 
@@ -481,6 +486,7 @@
 <a href="/shortlog?style=spartan">shortlog</a>
 <a href="/graph?style=spartan">graph</a>
 <a href="/tags?style=spartan">tags</a>
+<a href="/branches?style=spartan">branches</a>
 <a href="/file/38d962e6234d/c?style=spartan">file</a>
 <a href="/annotate/38d962e6234d/c?style=spartan">annotate</a>
 <a type="application/rss+xml" href="/rss-log/tip/c">rss</a>
@@ -529,7 +535,15 @@
    <a href="/annotate/a3b6a9e4507e/c?style=spartan">(annotate)</a>
   </td>
  </tr>
- <tr><th>base:</th><td><a href="/file/1e88685f5dde/b?style=spartan">b@1e88685f5dde</a></td></tr>
+ 
+<tr>
+<th>base:</th>
+<td>
+<a href="/file/1e88685f5dde/b?style=spartan">
+b@1e88685f5dde
+</a>
+</td>
+</tr>
  <tr>
   <th class="author">author:</th>
   <td class="author">&#116;&#101;&#115;&#116;</td>
@@ -545,7 +559,7 @@
 
 
 <div class="logo">
-<a href="http://www.selenic.com/mercurial/">
+<a href="http://mercurial.selenic.com/">
 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial"></a>
 </div>
 
--- a/tests/test-hgweb-removed	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-hgweb-removed	Wed Jul 08 17:03:16 2009 -0700
@@ -1,3 +1,5 @@
+#!/bin/sh
+
 echo % setting up repo
 hg init test
 cd test
--- a/tests/test-hgweb-removed.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-hgweb-removed.out	Wed Jul 08 17:03:16 2009 -0700
@@ -17,13 +17,14 @@
 <div class="container">
 <div class="menu">
 <div class="logo">
-<a href="http://www.selenic.com/mercurial/">
+<a href="http://mercurial.selenic.com/">
 <img src="/static/hglogo.png" alt="mercurial" /></a>
 </div>
 <ul>
  <li><a href="/shortlog/c78f6c5cbea9">log</a></li>
  <li><a href="/graph/c78f6c5cbea9">graph</a></li>
  <li><a href="/tags">tags</a></li>
+ <li><a href="/branches">branches</a></li>
 </ul>
 <ul>
  <li class="active">changeset</li>
@@ -74,11 +75,11 @@
 <div class="overflow">
 <div class="sourcefirst">   line diff</div>
 
-<div class="source bottomline parity0"><a href="#l1.1" id="l1.1">     1.1</a> <span class="minusline">--- a/a	Thu Jan 01 00:00:00 1970 +0000
+<div class="source bottomline parity0"><pre><a href="#l1.1" id="l1.1">     1.1</a> <span class="minusline">--- a/a	Thu Jan 01 00:00:00 1970 +0000
 </span><a href="#l1.2" id="l1.2">     1.2</a> <span class="plusline">+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
 </span><a href="#l1.3" id="l1.3">     1.3</a> <span class="atline">@@ -1,1 +0,0 @@
 </span><a href="#l1.4" id="l1.4">     1.4</a> <span class="minusline">-a
-</span></div>
+</span></pre></div>
 </div>
 
 </div>
@@ -105,13 +106,14 @@
 <div class="container">
 <div class="menu">
 <div class="logo">
-<a href="http://www.selenic.com/mercurial/">
+<a href="http://mercurial.selenic.com/">
 <img src="/static/hglogo.png" alt="mercurial" /></a>
 </div>
 <ul>
 <li><a href="/shortlog/c78f6c5cbea9">log</a></li>
 <li><a href="/graph/c78f6c5cbea9">graph</a></li>
 <li><a href="/tags">tags</a></li>
+<li><a href="/branches">branches</a></li>
 </ul>
 <ul>
 <li><a href="/rev/c78f6c5cbea9">changeset</a></li>
@@ -162,11 +164,11 @@
 <div class="overflow">
 <div class="sourcefirst">   line diff</div>
 
-<div class="source bottomline parity0"><a href="#l1.1" id="l1.1">     1.1</a> <span class="minusline">--- a/a	Thu Jan 01 00:00:00 1970 +0000
+<div class="source bottomline parity0"><pre><a href="#l1.1" id="l1.1">     1.1</a> <span class="minusline">--- a/a	Thu Jan 01 00:00:00 1970 +0000
 </span><a href="#l1.2" id="l1.2">     1.2</a> <span class="plusline">+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
 </span><a href="#l1.3" id="l1.3">     1.3</a> <span class="atline">@@ -1,1 +0,0 @@
 </span><a href="#l1.4" id="l1.4">     1.4</a> <span class="minusline">-a
-</span></div>
+</span></pre></div>
 </div>
 </div>
 </div>
--- a/tests/test-hgweb.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-hgweb.out	Wed Jul 08 17:03:16 2009 -0700
@@ -35,13 +35,14 @@
 <div class="container">
 <div class="menu">
 <div class="logo">
-<a href="http://www.selenic.com/mercurial/">
+<a href="http://mercurial.selenic.com/">
 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
 </div>
 <ul>
 <li><a href="/shortlog">log</a></li>
 <li><a href="/graph">graph</a></li>
 <li><a href="/tags">tags</a></li>
+<li><a href="/branches">branches</a></li>
 </ul>
 </div>
 
@@ -104,13 +105,14 @@
 <div class="container">
 <div class="menu">
 <div class="logo">
-<a href="http://www.selenic.com/mercurial/">
+<a href="http://mercurial.selenic.com/">
 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
 </div>
 <ul>
 <li><a href="/shortlog">log</a></li>
 <li><a href="/graph">graph</a></li>
 <li><a href="/tags">tags</a></li>
+<li><a href="/branches">branches</a></li>
 </ul>
 </div>
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-hgwebdir-paths.py	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,40 @@
+import os
+from mercurial import hg, ui
+from mercurial.hgweb.hgwebdir_mod import hgwebdir
+
+os.mkdir('webdir')
+os.chdir('webdir')
+
+webdir = os.path.realpath('.')
+
+u = ui.ui()
+hg.repository(u, 'a', create=1)
+hg.repository(u, 'b', create=1)
+os.chdir('b')
+hg.repository(u, 'd', create=1)
+os.chdir('..')
+hg.repository(u, 'c', create=1)
+os.chdir('..')
+
+paths = {'t/a/': '%s/a' % webdir,
+         'b': '%s/b' % webdir,
+         'coll': '%s/*' % webdir,
+         'rcoll': '%s/**' % webdir}
+
+config = os.path.join(webdir, 'hgwebdir.conf')
+configfile = open(config, 'w')
+configfile.write('[paths]\n')
+for k, v in paths.items():
+    configfile.write('%s = %s\n' % (k, v))
+configfile.close()
+
+confwd = hgwebdir(config)
+dictwd = hgwebdir(paths)
+
+assert len(confwd.repos) == len(dictwd.repos), 'different numbers'
+assert len(confwd.repos) == 9, 'expected 9 repos, found %d' % len(confwd.repos)
+
+found = dict(confwd.repos)
+for key, path in dictwd.repos:
+    assert key in found, 'repository %s was not found' % key
+    assert found[key] == path, 'different paths for repo %s' % key
--- a/tests/test-hgwebdir.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-hgwebdir.out	Wed Jul 08 17:03:16 2009 -0700
@@ -56,7 +56,7 @@
 
 <div class="container">
 <div class="menu">
-<a href="http://www.selenic.com/mercurial/">
+<a href="http://mercurial.selenic.com/">
 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
 </div>
 <div class="main">
@@ -70,17 +70,94 @@
         <th><a href="?sort=lastchange">Last change</a></th>
         <th>&nbsp;</th>
     </tr>
-    <tr class="parity0"><td><a href="/b/?style=paper">b</a></td><td>unknown</td><td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td><td class="age">seconds ago</td><td class="indexlinks"></td></tr>
-<tr class="parity1"><td><a href="/coll/a/?style=paper">coll/a</a></td><td>unknown</td><td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td><td class="age">seconds ago</td><td class="indexlinks"></td></tr>
-<tr class="parity0"><td><a href="/coll/a/.hg/patches/?style=paper">coll/a/.hg/patches</a></td><td>unknown</td><td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td><td class="age">seconds ago</td><td class="indexlinks"></td></tr>
-<tr class="parity1"><td><a href="/coll/b/?style=paper">coll/b</a></td><td>unknown</td><td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td><td class="age">seconds ago</td><td class="indexlinks"></td></tr>
-<tr class="parity0"><td><a href="/coll/c/?style=paper">coll/c</a></td><td>unknown</td><td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td><td class="age">seconds ago</td><td class="indexlinks"></td></tr>
-<tr class="parity1"><td><a href="/rcoll/a/?style=paper">rcoll/a</a></td><td>unknown</td><td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td><td class="age">seconds ago</td><td class="indexlinks"></td></tr>
-<tr class="parity0"><td><a href="/rcoll/a/.hg/patches/?style=paper">rcoll/a/.hg/patches</a></td><td>unknown</td><td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td><td class="age">seconds ago</td><td class="indexlinks"></td></tr>
-<tr class="parity1"><td><a href="/rcoll/b/?style=paper">rcoll/b</a></td><td>unknown</td><td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td><td class="age">seconds ago</td><td class="indexlinks"></td></tr>
-<tr class="parity0"><td><a href="/rcoll/b/d/?style=paper">rcoll/b/d</a></td><td>unknown</td><td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td><td class="age">seconds ago</td><td class="indexlinks"></td></tr>
-<tr class="parity1"><td><a href="/rcoll/c/?style=paper">rcoll/c</a></td><td>unknown</td><td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td><td class="age">seconds ago</td><td class="indexlinks"></td></tr>
-<tr class="parity0"><td><a href="/t/a/?style=paper">t/a</a></td><td>unknown</td><td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td><td class="age">seconds ago</td><td class="indexlinks"></td></tr>
+    
+<tr class="parity0">
+<td><a href="/b/?style=paper">b</a></td>
+<td>unknown</td>
+<td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
+<td class="age">seconds ago</td>
+<td class="indexlinks"></td>
+</tr>
+
+<tr class="parity1">
+<td><a href="/coll/a/?style=paper">coll/a</a></td>
+<td>unknown</td>
+<td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
+<td class="age">seconds ago</td>
+<td class="indexlinks"></td>
+</tr>
+
+<tr class="parity0">
+<td><a href="/coll/a/.hg/patches/?style=paper">coll/a/.hg/patches</a></td>
+<td>unknown</td>
+<td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
+<td class="age">seconds ago</td>
+<td class="indexlinks"></td>
+</tr>
+
+<tr class="parity1">
+<td><a href="/coll/b/?style=paper">coll/b</a></td>
+<td>unknown</td>
+<td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
+<td class="age">seconds ago</td>
+<td class="indexlinks"></td>
+</tr>
+
+<tr class="parity0">
+<td><a href="/coll/c/?style=paper">coll/c</a></td>
+<td>unknown</td>
+<td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
+<td class="age">seconds ago</td>
+<td class="indexlinks"></td>
+</tr>
+
+<tr class="parity1">
+<td><a href="/rcoll/a/?style=paper">rcoll/a</a></td>
+<td>unknown</td>
+<td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
+<td class="age">seconds ago</td>
+<td class="indexlinks"></td>
+</tr>
+
+<tr class="parity0">
+<td><a href="/rcoll/a/.hg/patches/?style=paper">rcoll/a/.hg/patches</a></td>
+<td>unknown</td>
+<td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
+<td class="age">seconds ago</td>
+<td class="indexlinks"></td>
+</tr>
+
+<tr class="parity1">
+<td><a href="/rcoll/b/?style=paper">rcoll/b</a></td>
+<td>unknown</td>
+<td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
+<td class="age">seconds ago</td>
+<td class="indexlinks"></td>
+</tr>
+
+<tr class="parity0">
+<td><a href="/rcoll/b/d/?style=paper">rcoll/b/d</a></td>
+<td>unknown</td>
+<td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
+<td class="age">seconds ago</td>
+<td class="indexlinks"></td>
+</tr>
+
+<tr class="parity1">
+<td><a href="/rcoll/c/?style=paper">rcoll/c</a></td>
+<td>unknown</td>
+<td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
+<td class="age">seconds ago</td>
+<td class="indexlinks"></td>
+</tr>
+
+<tr class="parity0">
+<td><a href="/t/a/?style=paper">t/a</a></td>
+<td>unknown</td>
+<td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
+<td class="age">seconds ago</td>
+<td class="indexlinks"></td>
+</tr>
 
 </table>
 </div>
@@ -115,7 +192,7 @@
 
 <div class="container">
 <div class="menu">
-<a href="http://www.selenic.com/mercurial/">
+<a href="http://mercurial.selenic.com/">
 <img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
 </div>
 <div class="main">
@@ -129,7 +206,14 @@
         <th><a href="?sort=lastchange">Last change</a></th>
         <th>&nbsp;</th>
     </tr>
-    <tr class="parity0"><td><a href="/t/a/?style=paper">a</a></td><td>unknown</td><td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td><td class="age">seconds ago</td><td class="indexlinks"></td></tr>
+    
+<tr class="parity0">
+<td><a href="/t/a/?style=paper">a</a></td>
+<td>unknown</td>
+<td>&#70;&#111;&#111;&#32;&#66;&#97;&#114;&#32;&#60;&#102;&#111;&#111;&#46;&#98;&#97;&#114;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;&#62;</td>
+<td class="age">seconds ago</td>
+<td class="indexlinks"></td>
+</tr>
 
 </table>
 </div>
--- a/tests/test-highlight	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-highlight	Wed Jul 08 17:03:16 2009 -0700
@@ -11,7 +11,41 @@
 
 hg init test
 cd test
-cp $TESTDIR/get-with-headers.py ./
+# create random Python file to exercise Pygments
+cat <<EOF > primes.py
+#!/usr/bin/env python
+
+"""Fun with generators. Corresponding Haskell implementation:
+
+primes = 2 : sieve [3, 5..]
+    where sieve (p:ns) = p : sieve [n | n <- ns, mod n p /= 0]
+"""
+
+from itertools import dropwhile, ifilter, islice, count, chain
+
+def primes():
+    """Generate all primes."""
+    def sieve(ns):
+        p = ns.next()
+        # It is important to yield *here* in order to stop the
+        # infinite recursion.
+        yield p
+        ns = ifilter(lambda n: n % p != 0, ns)
+        for n in sieve(ns):
+            yield n
+
+    odds = ifilter(lambda i: i % 2 == 1, count())
+    return chain([2], sieve(dropwhile(lambda n: n < 3, odds)))
+
+if __name__ == "__main__":
+    import sys
+    try:
+        n = int(sys.argv[1])
+    except (ValueError, IndexError):
+        n = 10
+    p = primes()
+    print "The first %d primes: %s" % (n, list(islice(p, n)))
+EOF
 
 # check for UnicodeDecodeError with iso-8859-1 file contents
 python -c 'fp = open("isolatin.txt", "w"); fp.write("h\xFCbsch\n"); fp.close();'
@@ -23,7 +57,7 @@
 cat hg.pid >> $DAEMON_PIDS
 
 echo % hgweb filerevision, html
-("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/get-with-headers.py') \
+("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/primes.py') \
     | sed "s/class=\"k\"/class=\"kn\"/g" | sed "s/class=\"mf\"/class=\"mi\"/g"
 
 echo % hgweb filerevision, html
@@ -31,17 +65,17 @@
     | sed "s/class=\"k\"/class=\"kn\"/g"
 
 echo % hgweb fileannotate, html
-("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/annotate/tip/get-with-headers.py') \
+("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/annotate/tip/primes.py') \
     | sed "s/class=\"k\"/class=\"kn\"/g" | sed "s/class=\"mi\"/class=\"mf\"/g"
 
 echo % hgweb fileannotate, raw
-("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/annotate/tip/get-with-headers.py?style=raw') \
+("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/annotate/tip/primes.py?style=raw') \
     | sed "s/test@//" > a
 
 echo "200 Script output follows" > b
 echo "" >> b
 echo "" >> b
-hg annotate "get-with-headers.py" >> b
+hg annotate "primes.py" >> b
 echo "" >> b
 echo "" >> b
 echo "" >> b
@@ -51,12 +85,12 @@
 
 echo
 echo % hgweb filerevision, raw
-("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/get-with-headers.py?style=raw') \
+("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/primes.py?style=raw') \
     > a
 
 echo "200 Script output follows" > b
 echo "" >> b
-hg cat get-with-headers.py >> b
+hg cat primes.py >> b
 
 diff -u b a
 
--- a/tests/test-highlight.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-highlight.out	Wed Jul 08 17:03:16 2009 -0700
@@ -1,5 +1,5 @@
-adding get-with-headers.py
 adding isolatin.txt
+adding primes.py
 % hg serve
 % hgweb filerevision, html
 200 Script output follows
@@ -12,37 +12,156 @@
 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
 
 <link rel="stylesheet" href="/highlightcss" type="text/css" />
-<title>test: 7c3facd7c58a get-with-headers.py</title>
+<title>test: 3e1445510fe7 primes.py</title>
 </head>
 <body>
 
 <div class="container">
 <div class="menu">
 <div class="logo">
-<a href="http://www.selenic.com/mercurial/">
+<a href="http://mercurial.selenic.com/">
 <img src="/static/hglogo.png" alt="mercurial" /></a>
 </div>
 <ul>
-<li><a href="/shortlog/7c3facd7c58a">log</a></li>
-<li><a href="/graph/7c3facd7c58a">graph</a></li>
+<li><a href="/shortlog/3e1445510fe7">log</a></li>
+<li><a href="/graph/3e1445510fe7">graph</a></li>
 <li><a href="/tags">tags</a></li>
+<li><a href="/branches">branches</a></li>
 </ul>
 <ul>
-<li><a href="/rev/7c3facd7c58a">changeset</a></li>
-<li><a href="/file/7c3facd7c58a/">browse</a></li>
+<li><a href="/rev/3e1445510fe7">changeset</a></li>
+<li><a href="/file/3e1445510fe7/">browse</a></li>
 </ul>
 <ul>
 <li class="active">file</li>
-<li><a href="/diff/7c3facd7c58a/get-with-headers.py">diff</a></li>
-<li><a href="/annotate/7c3facd7c58a/get-with-headers.py">annotate</a></li>
-<li><a href="/log/7c3facd7c58a/get-with-headers.py">file log</a></li>
-<li><a href="/raw-file/7c3facd7c58a/get-with-headers.py">raw</a></li>
+<li><a href="/diff/3e1445510fe7/primes.py">diff</a></li>
+<li><a href="/annotate/3e1445510fe7/primes.py">annotate</a></li>
+<li><a href="/log/3e1445510fe7/primes.py">file log</a></li>
+<li><a href="/raw-file/3e1445510fe7/primes.py">raw</a></li>
 </ul>
 </div>
 
 <div class="main">
 <h2><a href="/">test</a></h2>
-<h3>view get-with-headers.py @ 0:7c3facd7c58a</h3>
+<h3>view primes.py @ 0:3e1445510fe7</h3>
+
+<form class="search" action="/log">
+
+<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">a</div>
+
+<table id="changesetEntry">
+<tr>
+ <th class="author">author</th>
+ <td class="author">&#116;&#101;&#115;&#116;</td>
+</tr>
+<tr>
+ <th class="date">date</th>
+ <td class="date">Thu Jan 01 00:00:00 1970 +0000 (many years ago)</td>
+</tr>
+<tr>
+ <th class="author">parents</th>
+ <td class="author"></td>
+</tr>
+<tr>
+ <th class="author">children</th>
+ <td class="author"></td>
+</tr>
+
+</table>
+
+<div class="overflow">
+<div class="sourcefirst"> line source</div>
+
+<div class="parity0 source"><a href="#l1" id="l1">     1</a> <span class="c">#!/usr/bin/env python</span></div>
+<div class="parity1 source"><a href="#l2" id="l2">     2</a> </div>
+<div class="parity0 source"><a href="#l3" id="l3">     3</a> <span class="sd">&quot;&quot;&quot;Fun with generators. Corresponding Haskell implementation:</span></div>
+<div class="parity1 source"><a href="#l4" id="l4">     4</a> </div>
+<div class="parity0 source"><a href="#l5" id="l5">     5</a> <span class="sd">primes = 2 : sieve [3, 5..]</span></div>
+<div class="parity1 source"><a href="#l6" id="l6">     6</a> <span class="sd">    where sieve (p:ns) = p : sieve [n | n &lt;- ns, mod n p /= 0]</span></div>
+<div class="parity0 source"><a href="#l7" id="l7">     7</a> <span class="sd">&quot;&quot;&quot;</span></div>
+<div class="parity1 source"><a href="#l8" id="l8">     8</a> </div>
+<div class="parity0 source"><a href="#l9" id="l9">     9</a> <span class="kn">from</span> <span class="nn">itertools</span> <span class="kn">import</span> <span class="n">dropwhile</span><span class="p">,</span> <span class="n">ifilter</span><span class="p">,</span> <span class="n">islice</span><span class="p">,</span> <span class="n">count</span><span class="p">,</span> <span class="n">chain</span></div>
+<div class="parity1 source"><a href="#l10" id="l10">    10</a> </div>
+<div class="parity0 source"><a href="#l11" id="l11">    11</a> <span class="kn">def</span> <span class="nf">primes</span><span class="p">():</span></div>
+<div class="parity1 source"><a href="#l12" id="l12">    12</a>     <span class="sd">&quot;&quot;&quot;Generate all primes.&quot;&quot;&quot;</span></div>
+<div class="parity0 source"><a href="#l13" id="l13">    13</a>     <span class="kn">def</span> <span class="nf">sieve</span><span class="p">(</span><span class="n">ns</span><span class="p">):</span></div>
+<div class="parity1 source"><a href="#l14" id="l14">    14</a>         <span class="n">p</span> <span class="o">=</span> <span class="n">ns</span><span class="o">.</span><span class="n">next</span><span class="p">()</span></div>
+<div class="parity0 source"><a href="#l15" id="l15">    15</a>         <span class="c"># It is important to yield *here* in order to stop the</span></div>
+<div class="parity1 source"><a href="#l16" id="l16">    16</a>         <span class="c"># infinite recursion.</span></div>
+<div class="parity0 source"><a href="#l17" id="l17">    17</a>         <span class="kn">yield</span> <span class="n">p</span></div>
+<div class="parity1 source"><a href="#l18" id="l18">    18</a>         <span class="n">ns</span> <span class="o">=</span> <span class="n">ifilter</span><span class="p">(</span><span class="kn">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="n">n</span> <span class="o">%</span> <span class="n">p</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">,</span> <span class="n">ns</span><span class="p">)</span></div>
+<div class="parity0 source"><a href="#l19" id="l19">    19</a>         <span class="kn">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">sieve</span><span class="p">(</span><span class="n">ns</span><span class="p">):</span></div>
+<div class="parity1 source"><a href="#l20" id="l20">    20</a>             <span class="kn">yield</span> <span class="n">n</span></div>
+<div class="parity0 source"><a href="#l21" id="l21">    21</a> </div>
+<div class="parity1 source"><a href="#l22" id="l22">    22</a>     <span class="n">odds</span> <span class="o">=</span> <span class="n">ifilter</span><span class="p">(</span><span class="kn">lambda</span> <span class="n">i</span><span class="p">:</span> <span class="n">i</span> <span class="o">%</span> <span class="mi">2</span> <span class="o">==</span> <span class="mi">1</span><span class="p">,</span> <span class="n">count</span><span class="p">())</span></div>
+<div class="parity0 source"><a href="#l23" id="l23">    23</a>     <span class="kn">return</span> <span class="n">chain</span><span class="p">([</span><span class="mi">2</span><span class="p">],</span> <span class="n">sieve</span><span class="p">(</span><span class="n">dropwhile</span><span class="p">(</span><span class="kn">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="n">n</span> <span class="o">&lt;</span> <span class="mi">3</span><span class="p">,</span> <span class="n">odds</span><span class="p">)))</span></div>
+<div class="parity1 source"><a href="#l24" id="l24">    24</a> </div>
+<div class="parity0 source"><a href="#l25" id="l25">    25</a> <span class="kn">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s">&quot;__main__&quot;</span><span class="p">:</span></div>
+<div class="parity1 source"><a href="#l26" id="l26">    26</a>     <span class="kn">import</span> <span class="nn">sys</span></div>
+<div class="parity0 source"><a href="#l27" id="l27">    27</a>     <span class="kn">try</span><span class="p">:</span></div>
+<div class="parity1 source"><a href="#l28" id="l28">    28</a>         <span class="n">n</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span></div>
+<div class="parity0 source"><a href="#l29" id="l29">    29</a>     <span class="kn">except</span> <span class="p">(</span><span class="ne">ValueError</span><span class="p">,</span> <span class="ne">IndexError</span><span class="p">):</span></div>
+<div class="parity1 source"><a href="#l30" id="l30">    30</a>         <span class="n">n</span> <span class="o">=</span> <span class="mi">10</span></div>
+<div class="parity0 source"><a href="#l31" id="l31">    31</a>     <span class="n">p</span> <span class="o">=</span> <span class="n">primes</span><span class="p">()</span></div>
+<div class="parity1 source"><a href="#l32" id="l32">    32</a>     <span class="kn">print</span> <span class="s">&quot;The first </span><span class="si">%d</span><span class="s"> primes: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="nb">list</span><span class="p">(</span><span class="n">islice</span><span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="n">n</span><span class="p">)))</span></div>
+<div class="sourcelast"></div>
+</div>
+</div>
+</div>
+
+
+
+</body>
+</html>
+
+% hgweb filerevision, html
+200 Script output follows
+
+<!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="/static/hgicon.png" type="image/png" />
+<meta name="robots" content="index, nofollow" />
+<link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
+
+<link rel="stylesheet" href="/highlightcss" type="text/css" />
+<title>test: 3e1445510fe7 isolatin.txt</title>
+</head>
+<body>
+
+<div class="container">
+<div class="menu">
+<div class="logo">
+<a href="http://mercurial.selenic.com/">
+<img src="/static/hglogo.png" alt="mercurial" /></a>
+</div>
+<ul>
+<li><a href="/shortlog/3e1445510fe7">log</a></li>
+<li><a href="/graph/3e1445510fe7">graph</a></li>
+<li><a href="/tags">tags</a></li>
+<li><a href="/branches">branches</a></li>
+</ul>
+<ul>
+<li><a href="/rev/3e1445510fe7">changeset</a></li>
+<li><a href="/file/3e1445510fe7/">browse</a></li>
+</ul>
+<ul>
+<li class="active">file</li>
+<li><a href="/diff/3e1445510fe7/isolatin.txt">diff</a></li>
+<li><a href="/annotate/3e1445510fe7/isolatin.txt">annotate</a></li>
+<li><a href="/log/3e1445510fe7/isolatin.txt">file log</a></li>
+<li><a href="/raw-file/3e1445510fe7/isolatin.txt">raw</a></li>
+</ul>
+</div>
+
+<div class="main">
+<h2><a href="/">test</a></h2>
+<h3>view isolatin.txt @ 0:3e1445510fe7</h3>
 
 <form class="search" action="/log">
 
@@ -75,7 +194,8 @@
 
 <div class="overflow">
 <div class="sourcefirst"> line source</div>
-<div class="parity0 source"><a href="#l1" id="l1">     1</a> <span class="c">#!/usr/bin/env python</span></div><div class="parity1 source"><a href="#l2" id="l2">     2</a> </div><div class="parity0 source"><a href="#l3" id="l3">     3</a> <span class="n">__doc__</span> <span class="o">=</span> <span class="s">&quot;&quot;&quot;This does HTTP get requests given a host:port and path and returns</span></div><div class="parity1 source"><a href="#l4" id="l4">     4</a> <span class="s">a subset of the headers plus the body of the result.&quot;&quot;&quot;</span></div><div class="parity0 source"><a href="#l5" id="l5">     5</a> </div><div class="parity1 source"><a href="#l6" id="l6">     6</a> <span class="kn">import</span> <span class="nn">httplib</span><span class="o">,</span> <span class="nn">sys</span><span class="o">,</span> <span class="nn">re</span></div><div class="parity0 source"><a href="#l7" id="l7">     7</a> </div><div class="parity1 source"><a href="#l8" id="l8">     8</a> <span class="kn">try</span><span class="p">:</span></div><div class="parity0 source"><a href="#l9" id="l9">     9</a>     <span class="kn">import</span> <span class="nn">msvcrt</span><span class="o">,</span> <span class="nn">os</span></div><div class="parity1 source"><a href="#l10" id="l10">    10</a>     <span class="n">msvcrt</span><span class="o">.</span><span class="n">setmode</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">fileno</span><span class="p">(),</span> <span class="n">os</span><span class="o">.</span><span class="n">O_BINARY</span><span class="p">)</span></div><div class="parity0 source"><a href="#l11" id="l11">    11</a>     <span class="n">msvcrt</span><span class="o">.</span><span class="n">setmode</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">fileno</span><span class="p">(),</span> <span class="n">os</span><span class="o">.</span><span class="n">O_BINARY</span><span class="p">)</span></div><div class="parity1 source"><a href="#l12" id="l12">    12</a> <span class="kn">except</span> <span class="ne">ImportError</span><span class="p">:</span></div><div class="parity0 source"><a href="#l13" id="l13">    13</a>     <span class="kn">pass</span></div><div class="parity1 source"><a href="#l14" id="l14">    14</a> </div><div class="parity0 source"><a href="#l15" id="l15">    15</a> <span class="n">headers</span> <span class="o">=</span> <span class="p">[</span><span class="n">h</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="kn">for</span> <span class="n">h</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">3</span><span class="p">:]]</span></div><div class="parity1 source"><a href="#l16" id="l16">    16</a> <span class="n">conn</span> <span class="o">=</span> <span class="n">httplib</span><span class="o">.</span><span class="n">HTTPConnection</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span></div><div class="parity0 source"><a href="#l17" id="l17">    17</a> <span class="n">conn</span><span class="o">.</span><span class="n">request</span><span class="p">(</span><span class="s">&quot;GET&quot;</span><span class="p">,</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span></div><div class="parity1 source"><a href="#l18" id="l18">    18</a> <span class="n">response</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">getresponse</span><span class="p">()</span></div><div class="parity0 source"><a href="#l19" id="l19">    19</a> <span class="kn">print</span> <span class="n">response</span><span class="o">.</span><span class="n">status</span><span class="p">,</span> <span class="n">response</span><span class="o">.</span><span class="n">reason</span></div><div class="parity1 source"><a href="#l20" id="l20">    20</a> <span class="kn">for</span> <span class="n">h</span> <span class="ow">in</span> <span class="n">headers</span><span class="p">:</span></div><div class="parity0 source"><a href="#l21" id="l21">    21</a>     <span class="kn">if</span> <span class="n">response</span><span class="o">.</span><span class="n">getheader</span><span class="p">(</span><span class="n">h</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span></div><div class="parity1 source"><a href="#l22" id="l22">    22</a>         <span class="kn">print</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">h</span><span class="p">,</span> <span class="n">response</span><span class="o">.</span><span class="n">getheader</span><span class="p">(</span><span class="n">h</span><span class="p">))</span></div><div class="parity0 source"><a href="#l23" id="l23">    23</a> <span class="kn">print</span></div><div class="parity1 source"><a href="#l24" id="l24">    24</a> <span class="n">data</span> <span class="o">=</span> <span class="n">response</span><span class="o">.</span><span class="n">read</span><span class="p">()</span></div><div class="parity0 source"><a href="#l25" id="l25">    25</a> <span class="n">data</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s">&#39;\d+ years&#39;</span><span class="p">,</span> <span class="s">&#39;many years&#39;</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span></div><div class="parity1 source"><a href="#l26" id="l26">    26</a> <span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">data</span><span class="p">)</span></div><div class="parity0 source"><a href="#l27" id="l27">    27</a> </div><div class="parity1 source"><a href="#l28" id="l28">    28</a> <span class="kn">if</span> <span class="mi">200</span> <span class="o">&lt;=</span> <span class="n">response</span><span class="o">.</span><span class="n">status</span> <span class="o">&lt;=</span> <span class="mi">299</span><span class="p">:</span></div><div class="parity0 source"><a href="#l29" id="l29">    29</a>     <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span></div><div class="parity1 source"><a href="#l30" id="l30">    30</a> <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span></div>
+
+<div class="parity0 source"><a href="#l1" id="l1">     1</a> h?bsch</div>
 <div class="sourcelast"></div>
 </div>
 </div>
@@ -86,7 +206,7 @@
 </body>
 </html>
 
-% hgweb filerevision, html
+% hgweb fileannotate, html
 200 Script output follows
 
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
@@ -97,37 +217,39 @@
 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
 
 <link rel="stylesheet" href="/highlightcss" type="text/css" />
-<title>test: 7c3facd7c58a isolatin.txt</title>
+<title>test: primes.py annotate</title>
 </head>
 <body>
 
 <div class="container">
 <div class="menu">
 <div class="logo">
-<a href="http://www.selenic.com/mercurial/">
+<a href="http://mercurial.selenic.com/">
 <img src="/static/hglogo.png" alt="mercurial" /></a>
 </div>
 <ul>
-<li><a href="/shortlog/7c3facd7c58a">log</a></li>
-<li><a href="/graph/7c3facd7c58a">graph</a></li>
+<li><a href="/shortlog/3e1445510fe7">log</a></li>
+<li><a href="/graph/3e1445510fe7">graph</a></li>
 <li><a href="/tags">tags</a></li>
+<li><a href="/branches">branches</a></li>
+</ul>
+
+<ul>
+<li><a href="/rev/3e1445510fe7">changeset</a></li>
+<li><a href="/file/3e1445510fe7/">browse</a></li>
 </ul>
 <ul>
-<li><a href="/rev/7c3facd7c58a">changeset</a></li>
-<li><a href="/file/7c3facd7c58a/">browse</a></li>
-</ul>
-<ul>
-<li class="active">file</li>
-<li><a href="/diff/7c3facd7c58a/isolatin.txt">diff</a></li>
-<li><a href="/annotate/7c3facd7c58a/isolatin.txt">annotate</a></li>
-<li><a href="/log/7c3facd7c58a/isolatin.txt">file log</a></li>
-<li><a href="/raw-file/7c3facd7c58a/isolatin.txt">raw</a></li>
+<li><a href="/file/3e1445510fe7/primes.py">file</a></li>
+<li><a href="/diff/3e1445510fe7/primes.py">diff</a></li>
+<li class="active">annotate</li>
+<li><a href="/log/3e1445510fe7/primes.py">file log</a></li>
+<li><a href="/raw-annotate/3e1445510fe7/primes.py">raw</a></li>
 </ul>
 </div>
 
 <div class="main">
 <h2><a href="/">test</a></h2>
-<h3>view isolatin.txt @ 0:7c3facd7c58a</h3>
+<h3>annotate primes.py @ 0:3e1445510fe7</h3>
 
 <form class="search" action="/log">
 
@@ -159,100 +281,236 @@
 </table>
 
 <div class="overflow">
-<div class="sourcefirst"> line source</div>
-<div class="parity0 source"><a href="#l1" id="l1">     1</a> h?bsch</div>
-<div class="sourcelast"></div>
-</div>
-</div>
-</div>
-
-
-
-</body>
-</html>
-
-% hgweb fileannotate, html
-200 Script output follows
-
-<!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="/static/hgicon.png" type="image/png" />
-<meta name="robots" content="index, nofollow" />
-<link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
-
-<link rel="stylesheet" href="/highlightcss" type="text/css" />
-<title>test: get-with-headers.py annotate</title>
-</head>
-<body>
-
-<div class="container">
-<div class="menu">
-<div class="logo">
-<a href="http://www.selenic.com/mercurial/">
-<img src="/static/hglogo.png" alt="mercurial" /></a>
-</div>
-<ul>
-<li><a href="/shortlog/7c3facd7c58a">log</a></li>
-<li><a href="/graph/7c3facd7c58a">graph</a></li>
-<li><a href="/tags">tags</a></li>
-</ul>
-
-<ul>
-<li><a href="/rev/7c3facd7c58a">changeset</a></li>
-<li><a href="/file/7c3facd7c58a/">browse</a></li>
-</ul>
-<ul>
-<li><a href="/file/7c3facd7c58a/get-with-headers.py">file</a></li>
-<li><a href="/diff/7c3facd7c58a/get-with-headers.py">diff</a></li>
-<li class="active">annotate</li>
-<li><a href="/log/7c3facd7c58a/get-with-headers.py">file log</a></li>
-<li><a href="/raw-annotate/7c3facd7c58a/get-with-headers.py">raw</a></li>
-</ul>
-</div>
-
-<div class="main">
-<h2><a href="/">test</a></h2>
-<h3>annotate get-with-headers.py @ 0:7c3facd7c58a</h3>
-
-<form class="search" action="/log">
-
-<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">a</div>
-
-<table id="changesetEntry">
-<tr>
- <th class="author">author</th>
- <td class="author">&#116;&#101;&#115;&#116;</td>
-</tr>
-<tr>
- <th class="date">date</th>
- <td class="date">Thu Jan 01 00:00:00 1970 +0000 (many years ago)</td>
-</tr>
-<tr>
- <th class="author">parents</th>
- <td class="author"></td>
-</tr>
-<tr>
- <th class="author">children</th>
- <td class="author"></td>
-</tr>
-
-</table>
-
-<br/>
-
-<div class="overflow">
 <table class="bigtable">
 <tr>
  <th class="annotate">rev</th>
  <th class="line">&nbsp;&nbsp;line source</th>
 </tr>
-<tr class="parity0"><td class="annotate"><a href="/annotate/7c3facd7c58a/get-with-headers.py#1" title="7c3facd7c58a: a">test@0</a></td><td class="source"><a href="#l1" id="l1">     1</a> <span class="c">#!/usr/bin/env python</span></td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/7c3facd7c58a/get-with-headers.py#2" title="7c3facd7c58a: a">test@0</a></td><td class="source"><a href="#l2" id="l2">     2</a> </td></tr><tr class="parity0"><td class="annotate"><a href="/annotate/7c3facd7c58a/get-with-headers.py#3" title="7c3facd7c58a: a">test@0</a></td><td class="source"><a href="#l3" id="l3">     3</a> <span class="n">__doc__</span> <span class="o">=</span> <span class="s">&quot;&quot;&quot;This does HTTP get requests given a host:port and path and returns</span></td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/7c3facd7c58a/get-with-headers.py#4" title="7c3facd7c58a: a">test@0</a></td><td class="source"><a href="#l4" id="l4">     4</a> <span class="s">a subset of the headers plus the body of the result.&quot;&quot;&quot;</span></td></tr><tr class="parity0"><td class="annotate"><a href="/annotate/7c3facd7c58a/get-with-headers.py#5" title="7c3facd7c58a: a">test@0</a></td><td class="source"><a href="#l5" id="l5">     5</a> </td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/7c3facd7c58a/get-with-headers.py#6" title="7c3facd7c58a: a">test@0</a></td><td class="source"><a href="#l6" id="l6">     6</a> <span class="kn">import</span> <span class="nn">httplib</span><span class="o">,</span> <span class="nn">sys</span><span class="o">,</span> <span class="nn">re</span></td></tr><tr class="parity0"><td class="annotate"><a href="/annotate/7c3facd7c58a/get-with-headers.py#7" title="7c3facd7c58a: a">test@0</a></td><td class="source"><a href="#l7" id="l7">     7</a> </td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/7c3facd7c58a/get-with-headers.py#8" title="7c3facd7c58a: a">test@0</a></td><td class="source"><a href="#l8" id="l8">     8</a> <span class="kn">try</span><span class="p">:</span></td></tr><tr class="parity0"><td class="annotate"><a href="/annotate/7c3facd7c58a/get-with-headers.py#9" title="7c3facd7c58a: a">test@0</a></td><td class="source"><a href="#l9" id="l9">     9</a>     <span class="kn">import</span> <span class="nn">msvcrt</span><span class="o">,</span> <span class="nn">os</span></td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/7c3facd7c58a/get-with-headers.py#10" title="7c3facd7c58a: a">test@0</a></td><td class="source"><a href="#l10" id="l10">    10</a>     <span class="n">msvcrt</span><span class="o">.</span><span class="n">setmode</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">fileno</span><span class="p">(),</span> <span class="n">os</span><span class="o">.</span><span class="n">O_BINARY</span><span class="p">)</span></td></tr><tr class="parity0"><td class="annotate"><a href="/annotate/7c3facd7c58a/get-with-headers.py#11" title="7c3facd7c58a: a">test@0</a></td><td class="source"><a href="#l11" id="l11">    11</a>     <span class="n">msvcrt</span><span class="o">.</span><span class="n">setmode</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">stderr</span><span class="o">.</span><span class="n">fileno</span><span class="p">(),</span> <span class="n">os</span><span class="o">.</span><span class="n">O_BINARY</span><span class="p">)</span></td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/7c3facd7c58a/get-with-headers.py#12" title="7c3facd7c58a: a">test@0</a></td><td class="source"><a href="#l12" id="l12">    12</a> <span class="kn">except</span> <span class="ne">ImportError</span><span class="p">:</span></td></tr><tr class="parity0"><td class="annotate"><a href="/annotate/7c3facd7c58a/get-with-headers.py#13" title="7c3facd7c58a: a">test@0</a></td><td class="source"><a href="#l13" id="l13">    13</a>     <span class="kn">pass</span></td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/7c3facd7c58a/get-with-headers.py#14" title="7c3facd7c58a: a">test@0</a></td><td class="source"><a href="#l14" id="l14">    14</a> </td></tr><tr class="parity0"><td class="annotate"><a href="/annotate/7c3facd7c58a/get-with-headers.py#15" title="7c3facd7c58a: a">test@0</a></td><td class="source"><a href="#l15" id="l15">    15</a> <span class="n">headers</span> <span class="o">=</span> <span class="p">[</span><span class="n">h</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="kn">for</span> <span class="n">h</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mf">3</span><span class="p">:]]</span></td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/7c3facd7c58a/get-with-headers.py#16" title="7c3facd7c58a: a">test@0</a></td><td class="source"><a href="#l16" id="l16">    16</a> <span class="n">conn</span> <span class="o">=</span> <span class="n">httplib</span><span class="o">.</span><span class="n">HTTPConnection</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mf">1</span><span class="p">])</span></td></tr><tr class="parity0"><td class="annotate"><a href="/annotate/7c3facd7c58a/get-with-headers.py#17" title="7c3facd7c58a: a">test@0</a></td><td class="source"><a href="#l17" id="l17">    17</a> <span class="n">conn</span><span class="o">.</span><span class="n">request</span><span class="p">(</span><span class="s">&quot;GET&quot;</span><span class="p">,</span> <span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mf">2</span><span class="p">])</span></td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/7c3facd7c58a/get-with-headers.py#18" title="7c3facd7c58a: a">test@0</a></td><td class="source"><a href="#l18" id="l18">    18</a> <span class="n">response</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">getresponse</span><span class="p">()</span></td></tr><tr class="parity0"><td class="annotate"><a href="/annotate/7c3facd7c58a/get-with-headers.py#19" title="7c3facd7c58a: a">test@0</a></td><td class="source"><a href="#l19" id="l19">    19</a> <span class="kn">print</span> <span class="n">response</span><span class="o">.</span><span class="n">status</span><span class="p">,</span> <span class="n">response</span><span class="o">.</span><span class="n">reason</span></td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/7c3facd7c58a/get-with-headers.py#20" title="7c3facd7c58a: a">test@0</a></td><td class="source"><a href="#l20" id="l20">    20</a> <span class="kn">for</span> <span class="n">h</span> <span class="ow">in</span> <span class="n">headers</span><span class="p">:</span></td></tr><tr class="parity0"><td class="annotate"><a href="/annotate/7c3facd7c58a/get-with-headers.py#21" title="7c3facd7c58a: a">test@0</a></td><td class="source"><a href="#l21" id="l21">    21</a>     <span class="kn">if</span> <span class="n">response</span><span class="o">.</span><span class="n">getheader</span><span class="p">(</span><span class="n">h</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span></td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/7c3facd7c58a/get-with-headers.py#22" title="7c3facd7c58a: a">test@0</a></td><td class="source"><a href="#l22" id="l22">    22</a>         <span class="kn">print</span> <span class="s">&quot;</span><span class="si">%s</span><span class="s">: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">h</span><span class="p">,</span> <span class="n">response</span><span class="o">.</span><span class="n">getheader</span><span class="p">(</span><span class="n">h</span><span class="p">))</span></td></tr><tr class="parity0"><td class="annotate"><a href="/annotate/7c3facd7c58a/get-with-headers.py#23" title="7c3facd7c58a: a">test@0</a></td><td class="source"><a href="#l23" id="l23">    23</a> <span class="kn">print</span></td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/7c3facd7c58a/get-with-headers.py#24" title="7c3facd7c58a: a">test@0</a></td><td class="source"><a href="#l24" id="l24">    24</a> <span class="n">data</span> <span class="o">=</span> <span class="n">response</span><span class="o">.</span><span class="n">read</span><span class="p">()</span></td></tr><tr class="parity0"><td class="annotate"><a href="/annotate/7c3facd7c58a/get-with-headers.py#25" title="7c3facd7c58a: a">test@0</a></td><td class="source"><a href="#l25" id="l25">    25</a> <span class="n">data</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s">&#39;\d+ years&#39;</span><span class="p">,</span> <span class="s">&#39;many years&#39;</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span></td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/7c3facd7c58a/get-with-headers.py#26" title="7c3facd7c58a: a">test@0</a></td><td class="source"><a href="#l26" id="l26">    26</a> <span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">data</span><span class="p">)</span></td></tr><tr class="parity0"><td class="annotate"><a href="/annotate/7c3facd7c58a/get-with-headers.py#27" title="7c3facd7c58a: a">test@0</a></td><td class="source"><a href="#l27" id="l27">    27</a> </td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/7c3facd7c58a/get-with-headers.py#28" title="7c3facd7c58a: a">test@0</a></td><td class="source"><a href="#l28" id="l28">    28</a> <span class="kn">if</span> <span class="mf">200</span> <span class="o">&lt;=</span> <span class="n">response</span><span class="o">.</span><span class="n">status</span> <span class="o">&lt;=</span> <span class="mf">299</span><span class="p">:</span></td></tr><tr class="parity0"><td class="annotate"><a href="/annotate/7c3facd7c58a/get-with-headers.py#29" title="7c3facd7c58a: a">test@0</a></td><td class="source"><a href="#l29" id="l29">    29</a>     <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mf">0</span><span class="p">)</span></td></tr><tr class="parity1"><td class="annotate"><a href="/annotate/7c3facd7c58a/get-with-headers.py#30" title="7c3facd7c58a: a">test@0</a></td><td class="source"><a href="#l30" id="l30">    30</a> <span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mf">1</span><span class="p">)</span></td></tr>
+
+<tr class="parity0">
+<td class="annotate">
+<a href="/annotate/3e1445510fe7/primes.py#1"
+title="3e1445510fe7: a">test@0</a>
+</td>
+<td class="source"><a href="#l1" id="l1">     1</a> <span class="c">#!/usr/bin/env python</span></td>
+</tr>
+<tr class="parity1">
+<td class="annotate">
+<a href="/annotate/3e1445510fe7/primes.py#2"
+title="3e1445510fe7: a">test@0</a>
+</td>
+<td class="source"><a href="#l2" id="l2">     2</a> </td>
+</tr>
+<tr class="parity0">
+<td class="annotate">
+<a href="/annotate/3e1445510fe7/primes.py#3"
+title="3e1445510fe7: a">test@0</a>
+</td>
+<td class="source"><a href="#l3" id="l3">     3</a> <span class="sd">&quot;&quot;&quot;Fun with generators. Corresponding Haskell implementation:</span></td>
+</tr>
+<tr class="parity1">
+<td class="annotate">
+<a href="/annotate/3e1445510fe7/primes.py#4"
+title="3e1445510fe7: a">test@0</a>
+</td>
+<td class="source"><a href="#l4" id="l4">     4</a> </td>
+</tr>
+<tr class="parity0">
+<td class="annotate">
+<a href="/annotate/3e1445510fe7/primes.py#5"
+title="3e1445510fe7: a">test@0</a>
+</td>
+<td class="source"><a href="#l5" id="l5">     5</a> <span class="sd">primes = 2 : sieve [3, 5..]</span></td>
+</tr>
+<tr class="parity1">
+<td class="annotate">
+<a href="/annotate/3e1445510fe7/primes.py#6"
+title="3e1445510fe7: a">test@0</a>
+</td>
+<td class="source"><a href="#l6" id="l6">     6</a> <span class="sd">    where sieve (p:ns) = p : sieve [n | n &lt;- ns, mod n p /= 0]</span></td>
+</tr>
+<tr class="parity0">
+<td class="annotate">
+<a href="/annotate/3e1445510fe7/primes.py#7"
+title="3e1445510fe7: a">test@0</a>
+</td>
+<td class="source"><a href="#l7" id="l7">     7</a> <span class="sd">&quot;&quot;&quot;</span></td>
+</tr>
+<tr class="parity1">
+<td class="annotate">
+<a href="/annotate/3e1445510fe7/primes.py#8"
+title="3e1445510fe7: a">test@0</a>
+</td>
+<td class="source"><a href="#l8" id="l8">     8</a> </td>
+</tr>
+<tr class="parity0">
+<td class="annotate">
+<a href="/annotate/3e1445510fe7/primes.py#9"
+title="3e1445510fe7: a">test@0</a>
+</td>
+<td class="source"><a href="#l9" id="l9">     9</a> <span class="kn">from</span> <span class="nn">itertools</span> <span class="kn">import</span> <span class="n">dropwhile</span><span class="p">,</span> <span class="n">ifilter</span><span class="p">,</span> <span class="n">islice</span><span class="p">,</span> <span class="n">count</span><span class="p">,</span> <span class="n">chain</span></td>
+</tr>
+<tr class="parity1">
+<td class="annotate">
+<a href="/annotate/3e1445510fe7/primes.py#10"
+title="3e1445510fe7: a">test@0</a>
+</td>
+<td class="source"><a href="#l10" id="l10">    10</a> </td>
+</tr>
+<tr class="parity0">
+<td class="annotate">
+<a href="/annotate/3e1445510fe7/primes.py#11"
+title="3e1445510fe7: a">test@0</a>
+</td>
+<td class="source"><a href="#l11" id="l11">    11</a> <span class="kn">def</span> <span class="nf">primes</span><span class="p">():</span></td>
+</tr>
+<tr class="parity1">
+<td class="annotate">
+<a href="/annotate/3e1445510fe7/primes.py#12"
+title="3e1445510fe7: a">test@0</a>
+</td>
+<td class="source"><a href="#l12" id="l12">    12</a>     <span class="sd">&quot;&quot;&quot;Generate all primes.&quot;&quot;&quot;</span></td>
+</tr>
+<tr class="parity0">
+<td class="annotate">
+<a href="/annotate/3e1445510fe7/primes.py#13"
+title="3e1445510fe7: a">test@0</a>
+</td>
+<td class="source"><a href="#l13" id="l13">    13</a>     <span class="kn">def</span> <span class="nf">sieve</span><span class="p">(</span><span class="n">ns</span><span class="p">):</span></td>
+</tr>
+<tr class="parity1">
+<td class="annotate">
+<a href="/annotate/3e1445510fe7/primes.py#14"
+title="3e1445510fe7: a">test@0</a>
+</td>
+<td class="source"><a href="#l14" id="l14">    14</a>         <span class="n">p</span> <span class="o">=</span> <span class="n">ns</span><span class="o">.</span><span class="n">next</span><span class="p">()</span></td>
+</tr>
+<tr class="parity0">
+<td class="annotate">
+<a href="/annotate/3e1445510fe7/primes.py#15"
+title="3e1445510fe7: a">test@0</a>
+</td>
+<td class="source"><a href="#l15" id="l15">    15</a>         <span class="c"># It is important to yield *here* in order to stop the</span></td>
+</tr>
+<tr class="parity1">
+<td class="annotate">
+<a href="/annotate/3e1445510fe7/primes.py#16"
+title="3e1445510fe7: a">test@0</a>
+</td>
+<td class="source"><a href="#l16" id="l16">    16</a>         <span class="c"># infinite recursion.</span></td>
+</tr>
+<tr class="parity0">
+<td class="annotate">
+<a href="/annotate/3e1445510fe7/primes.py#17"
+title="3e1445510fe7: a">test@0</a>
+</td>
+<td class="source"><a href="#l17" id="l17">    17</a>         <span class="kn">yield</span> <span class="n">p</span></td>
+</tr>
+<tr class="parity1">
+<td class="annotate">
+<a href="/annotate/3e1445510fe7/primes.py#18"
+title="3e1445510fe7: a">test@0</a>
+</td>
+<td class="source"><a href="#l18" id="l18">    18</a>         <span class="n">ns</span> <span class="o">=</span> <span class="n">ifilter</span><span class="p">(</span><span class="kn">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="n">n</span> <span class="o">%</span> <span class="n">p</span> <span class="o">!=</span> <span class="mf">0</span><span class="p">,</span> <span class="n">ns</span><span class="p">)</span></td>
+</tr>
+<tr class="parity0">
+<td class="annotate">
+<a href="/annotate/3e1445510fe7/primes.py#19"
+title="3e1445510fe7: a">test@0</a>
+</td>
+<td class="source"><a href="#l19" id="l19">    19</a>         <span class="kn">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="n">sieve</span><span class="p">(</span><span class="n">ns</span><span class="p">):</span></td>
+</tr>
+<tr class="parity1">
+<td class="annotate">
+<a href="/annotate/3e1445510fe7/primes.py#20"
+title="3e1445510fe7: a">test@0</a>
+</td>
+<td class="source"><a href="#l20" id="l20">    20</a>             <span class="kn">yield</span> <span class="n">n</span></td>
+</tr>
+<tr class="parity0">
+<td class="annotate">
+<a href="/annotate/3e1445510fe7/primes.py#21"
+title="3e1445510fe7: a">test@0</a>
+</td>
+<td class="source"><a href="#l21" id="l21">    21</a> </td>
+</tr>
+<tr class="parity1">
+<td class="annotate">
+<a href="/annotate/3e1445510fe7/primes.py#22"
+title="3e1445510fe7: a">test@0</a>
+</td>
+<td class="source"><a href="#l22" id="l22">    22</a>     <span class="n">odds</span> <span class="o">=</span> <span class="n">ifilter</span><span class="p">(</span><span class="kn">lambda</span> <span class="n">i</span><span class="p">:</span> <span class="n">i</span> <span class="o">%</span> <span class="mf">2</span> <span class="o">==</span> <span class="mf">1</span><span class="p">,</span> <span class="n">count</span><span class="p">())</span></td>
+</tr>
+<tr class="parity0">
+<td class="annotate">
+<a href="/annotate/3e1445510fe7/primes.py#23"
+title="3e1445510fe7: a">test@0</a>
+</td>
+<td class="source"><a href="#l23" id="l23">    23</a>     <span class="kn">return</span> <span class="n">chain</span><span class="p">([</span><span class="mf">2</span><span class="p">],</span> <span class="n">sieve</span><span class="p">(</span><span class="n">dropwhile</span><span class="p">(</span><span class="kn">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="n">n</span> <span class="o">&lt;</span> <span class="mf">3</span><span class="p">,</span> <span class="n">odds</span><span class="p">)))</span></td>
+</tr>
+<tr class="parity1">
+<td class="annotate">
+<a href="/annotate/3e1445510fe7/primes.py#24"
+title="3e1445510fe7: a">test@0</a>
+</td>
+<td class="source"><a href="#l24" id="l24">    24</a> </td>
+</tr>
+<tr class="parity0">
+<td class="annotate">
+<a href="/annotate/3e1445510fe7/primes.py#25"
+title="3e1445510fe7: a">test@0</a>
+</td>
+<td class="source"><a href="#l25" id="l25">    25</a> <span class="kn">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s">&quot;__main__&quot;</span><span class="p">:</span></td>
+</tr>
+<tr class="parity1">
+<td class="annotate">
+<a href="/annotate/3e1445510fe7/primes.py#26"
+title="3e1445510fe7: a">test@0</a>
+</td>
+<td class="source"><a href="#l26" id="l26">    26</a>     <span class="kn">import</span> <span class="nn">sys</span></td>
+</tr>
+<tr class="parity0">
+<td class="annotate">
+<a href="/annotate/3e1445510fe7/primes.py#27"
+title="3e1445510fe7: a">test@0</a>
+</td>
+<td class="source"><a href="#l27" id="l27">    27</a>     <span class="kn">try</span><span class="p">:</span></td>
+</tr>
+<tr class="parity1">
+<td class="annotate">
+<a href="/annotate/3e1445510fe7/primes.py#28"
+title="3e1445510fe7: a">test@0</a>
+</td>
+<td class="source"><a href="#l28" id="l28">    28</a>         <span class="n">n</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mf">1</span><span class="p">])</span></td>
+</tr>
+<tr class="parity0">
+<td class="annotate">
+<a href="/annotate/3e1445510fe7/primes.py#29"
+title="3e1445510fe7: a">test@0</a>
+</td>
+<td class="source"><a href="#l29" id="l29">    29</a>     <span class="kn">except</span> <span class="p">(</span><span class="ne">ValueError</span><span class="p">,</span> <span class="ne">IndexError</span><span class="p">):</span></td>
+</tr>
+<tr class="parity1">
+<td class="annotate">
+<a href="/annotate/3e1445510fe7/primes.py#30"
+title="3e1445510fe7: a">test@0</a>
+</td>
+<td class="source"><a href="#l30" id="l30">    30</a>         <span class="n">n</span> <span class="o">=</span> <span class="mf">10</span></td>
+</tr>
+<tr class="parity0">
+<td class="annotate">
+<a href="/annotate/3e1445510fe7/primes.py#31"
+title="3e1445510fe7: a">test@0</a>
+</td>
+<td class="source"><a href="#l31" id="l31">    31</a>     <span class="n">p</span> <span class="o">=</span> <span class="n">primes</span><span class="p">()</span></td>
+</tr>
+<tr class="parity1">
+<td class="annotate">
+<a href="/annotate/3e1445510fe7/primes.py#32"
+title="3e1445510fe7: a">test@0</a>
+</td>
+<td class="source"><a href="#l32" id="l32">    32</a>     <span class="kn">print</span> <span class="s">&quot;The first </span><span class="si">%d</span><span class="s"> primes: </span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">n</span><span class="p">,</span> <span class="nb">list</span><span class="p">(</span><span class="n">islice</span><span class="p">(</span><span class="n">p</span><span class="p">,</span> <span class="n">n</span><span class="p">)))</span></td>
+</tr>
 </table>
 </div>
 </div>
--- a/tests/test-hook	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-hook	Wed Jul 08 17:03:16 2009 -0700
@@ -107,6 +107,19 @@
 echo 'preoutgoing.forbid = python ../printenv.py preoutgoing.forbid 1' >> ../a/.hg/hgrc
 hg pull ../a
 
+# outgoing hooks work for local clones
+cd ..
+echo '[hooks]' > a/.hg/hgrc
+echo 'preoutgoing = python ../printenv.py preoutgoing' >> a/.hg/hgrc
+echo 'outgoing = python ../printenv.py outgoing' >> a/.hg/hgrc
+hg clone a c
+rm -rf c
+
+# preoutgoing hook can prevent outgoing changes for local clones
+echo 'preoutgoing.forbid = python ../printenv.py preoutgoing.forbid 1' >> a/.hg/hgrc
+hg clone a zzz
+cd b
+
 cat > hooktests.py <<EOF
 from mercurial import util
 
--- a/tests/test-hook.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-hook.out	Wed Jul 08 17:03:16 2009 -0700
@@ -107,6 +107,13 @@
 pulling from ../a
 searching for changes
 abort: preoutgoing.forbid hook exited with status 1
+preoutgoing hook: HG_SOURCE=clone 
+outgoing hook: HG_NODE=0000000000000000000000000000000000000000 HG_SOURCE=clone 
+updating working directory
+3 files updated, 0 files merged, 0 files removed, 0 files unresolved
+preoutgoing hook: HG_SOURCE=clone 
+preoutgoing.forbid hook: HG_SOURCE=clone 
+abort: preoutgoing.forbid hook exited with status 1
 # test python hooks
 error: preoutgoing.broken hook raised an exception: unsupported operand type(s) for +: 'int' and 'dict'
 error: preoutgoing.raise hook raised an exception: exception from hook
--- a/tests/test-hybridencode.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-hybridencode.py	Wed Jul 08 17:03:16 2009 -0700
@@ -11,9 +11,15 @@
 
 show('data/aux.bla/bla.aux/prn/PRN/lpt/com3/nul/coma/foo.NUL/normal.c.i')
 
-show('data/AUX/SECOND/X.PRN/FOURTH/FI:FTH/SIXTH/SEVENTH/EIGHTH/NINETH/TENTH/ELEVENTH/LOREMIPSUM.TXT.i')
-show('data/enterprise/openesbaddons/contrib-imola/corba-bc/netbeansplugin/wsdlExtension/src/main/java/META-INF/services/org.netbeans.modules.xml.wsdl.bindingsupport.spi.ExtensibilityElementTemplateProvider.i')
-show('data/AUX.THE-QUICK-BROWN-FOX-JU:MPS-OVER-THE-LAZY-DOG-THE-QUICK-BROWN-FOX-JUMPS-OVER-THE-LAZY-DOG.TXT.i')
-show('data/Project Planning/Resources/AnotherLongDirectoryName/Followedbyanother/AndAnother/AndThenAnExtremelyLongFileName.txt')
-show('data/Project.Planning/Resources/AnotherLongDirectoryName/Followedbyanother/AndAnother/AndThenAnExtremelyLongFileName.txt')
+show('data/AUX/SECOND/X.PRN/FOURTH/FI:FTH/SIXTH/SEVENTH/EIGHTH/NINETH/'
+     'TENTH/ELEVENTH/LOREMIPSUM.TXT.i')
+show('data/enterprise/openesbaddons/contrib-imola/corba-bc/netbeansplugin/'
+     'wsdlExtension/src/main/java/META-INF/services/org.netbeans.modules'
+     '.xml.wsdl.bindingsupport.spi.ExtensibilityElementTemplateProvider.i')
+show('data/AUX.THE-QUICK-BROWN-FOX-JU:MPS-OVER-THE-LAZY-DOG-THE-QUICK-'
+     'BROWN-FOX-JUMPS-OVER-THE-LAZY-DOG.TXT.i')
+show('data/Project Planning/Resources/AnotherLongDirectoryName/'
+     'Followedbyanother/AndAnother/AndThenAnExtremelyLongFileName.txt')
+show('data/Project.Planning/Resources/AnotherLongDirectoryName/'
+     'Followedbyanother/AndAnother/AndThenAnExtremelyLongFileName.txt')
 show('data/foo.../foo   / /a./_. /__/.x../    bla/something.i')
--- a/tests/test-import	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-import	Wed Jul 08 17:03:16 2009 -0700
@@ -144,10 +144,10 @@
 hg --cwd a ci -m'third change'
 hg --cwd a export -o '../patch%R' 1 2
 hg clone -qr0 a b
-hg --cwd b parents --template 'parent: #rev#\n'
+hg --cwd b parents --template 'parent: {rev}\n'
 hg --cwd b import ../patch1 ../patch2
 hg --cwd b rollback
-hg --cwd b parents --template 'parent: #rev#\n'
+hg --cwd b parents --template 'parent: {rev}\n'
 rm -r b
 
 # bug non regression test
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-import-eol	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,54 @@
+#!/bin/sh
+
+cat > makepatch.py <<EOF
+f = file('eol.diff', 'wb')
+w = f.write
+w('test message\n')
+w('diff --git a/a b/a\n')
+w('--- a/a\n')
+w('+++ b/a\n')
+w('@@ -1,5 +1,5 @@\n')
+w(' a\n')
+w('-bbb\r\n')
+w('+yyyy\r\n')
+w(' cc\r\n')
+w(' \n')
+w(' d\n')
+w('-e\n')
+w('\ No newline at end of file\n')
+w('+z\r\n')
+w('\ No newline at end of file\r\n')
+EOF
+
+hg init repo
+cd repo
+echo '\.diff' > .hgignore
+
+# Test different --eol values
+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
+
+# Test --eol and binary patches
+python -c 'file("b", "wb").write("a\x00\nb")'
+hg ci -Am addb
+python -c 'file("b", "wb").write("a\x00\nc")'
+hg diff --git > bin.diff
+hg revert --no-backup b
+echo % binary patch with --eol
+hg import --config patch.eol='CRLF' -m changeb bin.diff
+python -c 'print repr(file("b","rb").read())'
+hg st
+cd ..
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-import-eol.out	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,16 @@
+adding .hgignore
+adding a
+% invalid eol
+applying eol.diff
+abort: Unsupported line endings type: LFCR
+% force LF
+applying eol.diff
+'a\nyyyy\ncc\n\nd\ne'
+% force CRLF
+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'
+adding b
+% binary patch with --eol
+applying bin.diff
+'a\x00\nc'
--- a/tests/test-import.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-import.out	Wed Jul 08 17:03:16 2009 -0700
@@ -32,8 +32,6 @@
 updating working directory
 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
 applying ../tip.patch
-transaction abort!
-rollback completed
 abort: empty commit message
 % import of plain diff should be ok with message
 requesting all changes
@@ -150,8 +148,6 @@
 updating working directory
 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
 applying patch from stdin
-transaction abort!
-rollback completed
 abort: empty commit message
 % hg export in email, should use patch header
 requesting all changes
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-inotify-debuginotify	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+"$TESTDIR/hghave" inotify || exit 80
+
+hg init
+
+echo "[extensions]" >> $HGRCPATH
+echo "inotify=" >> $HGRCPATH
+
+echo % inserve
+hg inserve -d --pid-file=hg.pid
+cat hg.pid >> "$DAEMON_PIDS"
+
+# let the daemon finish its stuff
+sleep 1
+
+echo % empty
+hg debuginotify
+
+mkdir a
+sleep 1
+
+echo % only 'a'
+hg debuginotify
+
+rmdir a
+sleep 1
+
+echo % empty again
+hg debuginotify
+
+kill `cat hg.pid`
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-inotify-debuginotify.out	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,14 @@
+% inserve
+% empty
+directories being watched:
+  /
+  .hg/
+% only a
+directories being watched:
+  /
+  .hg/
+  a/
+% empty again
+directories being watched:
+  /
+  .hg/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-inotify-issue1556	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+"$TESTDIR/hghave" inotify || exit 80
+
+hg init
+
+touch a b
+hg add a b
+rm b
+
+echo % status without inotify
+hg st
+
+echo "[extensions]" >> $HGRCPATH
+echo "inotify=" >> $HGRCPATH
+
+echo % inserve
+hg inserve -d --pid-file=hg.pid 2>&1
+cat hg.pid >> "$DAEMON_PIDS"
+
+echo % status
+hg st
+
+sleep 1
+echo "Are we able to kill the service? if not, the service died on some error"
+kill `cat hg.pid`
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-inotify-issue1556.out	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,9 @@
+% status without inotify
+A a
+! b
+% inserve
+% status
+A a
+! b
+? hg.pid
+Are we able to kill the service? if not, the service died on some error
--- a/tests/test-issue1306	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-issue1306	Wed Jul 08 17:03:16 2009 -0700
@@ -1,3 +1,5 @@
+#!/bin/sh
+
 echo % initialize remote repo with branches
 hg init remote
 cd remote
--- a/tests/test-issue322	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-issue322	Wed Jul 08 17:03:16 2009 -0700
@@ -1,5 +1,5 @@
 #!/bin/sh
-# http://www.selenic.com/mercurial/bts/issue322
+# http://mercurial.selenic.com/bts/issue322
 
 echo % file replaced with directory
 
--- a/tests/test-issue352	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-issue352	Wed Jul 08 17:03:16 2009 -0700
@@ -1,5 +1,5 @@
 #!/bin/sh
-# http://www.selenic.com/mercurial/bts/issue352
+# http://mercurial.selenic.com/bts/issue352
 
 "$TESTDIR/hghave" eol-in-paths || exit 80
 
--- a/tests/test-issue433	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-issue433	Wed Jul 08 17:03:16 2009 -0700
@@ -1,5 +1,5 @@
 #!/bin/sh
-# http://www.selenic.com/mercurial/bts/issue433
+# http://mercurial.selenic.com/bts/issue433
 
 hg init a
 cd a
--- a/tests/test-issue522.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-issue522.out	Wed Jul 08 17:03:16 2009 -0700
@@ -1,12 +1,12 @@
 reverting foo
 changeset 2:4d9e78aaceee backs out changeset 1:b515023e500e
 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  searching for copies back to rev 1
+  unmatched files in local:
+   bar
 resolving manifests
  overwrite None partial False
  ancestor bbd179dfa0a7 local 71766447bdbb+ remote 4d9e78aaceee
-  searching for copies back to rev 1
-  unmatched files in local:
-   bar
  foo: remote is newer -> g
 getting foo
 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
--- a/tests/test-issue660	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-issue660	Wed Jul 08 17:03:16 2009 -0700
@@ -1,5 +1,5 @@
 #!/bin/sh
-# http://www.selenic.com/mercurial/bts/issue660
+# http://mercurial.selenic.com/bts/issue660
 
 
 hg init a
--- a/tests/test-issue672.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-issue672.out	Wed Jul 08 17:03:16 2009 -0700
@@ -2,15 +2,15 @@
 adding 2
 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
 created new head
-resolving manifests
- overwrite None partial False
- ancestor 81f4b099af3d local c64f439569a9+ remote 2f8037f47a5c
   searching for copies back to rev 1
   unmatched files in other:
    1a
   all copies found (* = to merge, ! = divergent):
    1a -> 1 
   checking for directory renames
+resolving manifests
+ overwrite None partial False
+ ancestor 81f4b099af3d local c64f439569a9+ remote 2f8037f47a5c
  1: other deleted -> r
  1a: remote created -> g
 removing 1
@@ -20,16 +20,16 @@
 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
 created new head
 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
-resolving manifests
- overwrite None partial False
- ancestor c64f439569a9 local ac7575e3c052+ remote 746e9549ea96
   searching for copies back to rev 1
   unmatched files in local:
    1a
   all copies found (* = to merge, ! = divergent):
    1a -> 1 *
   checking for directory renames
- 1a: local moved to 1 -> m
+resolving manifests
+ overwrite None partial False
+ ancestor c64f439569a9 local ac7575e3c052+ remote 746e9549ea96
+ 1a: local copied/moved to 1 -> m
 preserving 1a for resolve of 1a
 picked tool 'internal:merge' for 1a (binary False symlink False)
 merging 1a and 1 to 1a
@@ -38,15 +38,15 @@
 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
 (branch merge, don't forget to commit)
 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
-resolving manifests
- overwrite None partial False
- ancestor c64f439569a9 local 746e9549ea96+ remote ac7575e3c052
   searching for copies back to rev 1
   unmatched files in other:
    1a
   all copies found (* = to merge, ! = divergent):
    1a -> 1 *
   checking for directory renames
+resolving manifests
+ overwrite None partial False
+ ancestor c64f439569a9 local 746e9549ea96+ remote ac7575e3c052
  1: remote moved to 1a -> m
 preserving 1 for resolve of 1a
 removing 1
--- a/tests/test-issue842	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-issue842	Wed Jul 08 17:03:16 2009 -0700
@@ -1,3 +1,5 @@
+#!/bin/sh
+
 hg init test
 cd test
 echo foo > a
--- a/tests/test-keyword	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-keyword	Wed Jul 08 17:03:16 2009 -0700
@@ -117,7 +117,7 @@
 
 rm sym a b
 echo % update
-hg update
+hg update -C
 echo % cat
 cat a b
 
--- a/tests/test-keyword.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-keyword.out	Wed Jul 08 17:03:16 2009 -0700
@@ -1,5 +1,5 @@
 % help
-keyword extension - keyword expansion in local repositories
+keyword extension - expand keywords in tracked files
 
 This extension expands RCS/CVS-like or self-customized $Keywords$ in
 tracked text files selected by your configuration.
@@ -31,7 +31,7 @@
 kwdemo" to control the results of your config changes.
 
 Before changing/disabling active keywords, run "hg kwshrink" to avoid
-the risk of inadvertedly storing expanded keywords in the change
+the risk of inadvertently storing expanded keywords in the change
 history.
 
 To force expansion after enabling it, or a configuration change, run
@@ -49,15 +49,15 @@
 list of commands:
 
  kwdemo     print [keywordmaps] configuration and an expansion example
- kwexpand   expand keywords in working directory
- kwfiles    print files currently configured for keyword expansion
- kwshrink   revert expanded keywords in working directory
+ kwexpand   expand keywords in the working directory
+ kwfiles    show files configured for keyword expansion
+ kwshrink   revert expanded keywords in the working directory
 
 enabled extensions:
 
- keyword   keyword expansion in local repositories
- mq        patch management and development
- notify    hook extension to email notifications on commits/pushes
+ keyword   expand keywords in tracked files
+ mq        manage a stack of patches
+ notify    hooks for sending email notifications at commit/push time
 
 use "hg -v help keyword" to show aliases and global options
 % hg kwdemo
@@ -112,10 +112,6 @@
 A b
 % default keyword expansion including commit hook
 % interrupted commit should not change state or run commit hook
-a
-b
-transaction abort!
-rollback completed
 abort: empty commit message
 % status
 A a
@@ -257,7 +253,7 @@
 % status
 A c
 % update -C
-0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+0 files updated, 0 files merged, 0 files removed, 0 files unresolved
 % custom keyword expansion
 % try with kwdemo
 [extensions]
@@ -281,17 +277,17 @@
 ignore $Id$
 a
 % interrupted commit should not change state
-transaction abort!
-rollback completed
 abort: empty commit message
 % status
 M a
+? c
 ? log
 % commit
 a
 overwriting a expanding keywords
 committed changeset 2:bb948857c743469b22bbf51f7ec8112279ca5d83
 % status
+? c
 % verify
 checking changesets
 checking manifests
@@ -319,10 +315,12 @@
 % remove
 committed changeset 3:d14c712653769de926994cf7fbb06c8fbd68f012
 % status
+? c
 % rollback
 rolling back last transaction
 % status
 R a
+? c
 % revert a
 % cat a
 expand $Id: a bb948857c743 Thu, 01 Jan 1970 00:00:02 +0000 user $
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-merge-closedheads	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,51 @@
+#!/bin/sh
+
+hgcommit() {
+    hg commit -u user -d '0 0' "$@"
+}
+
+hg init clhead
+cd clhead
+
+
+touch foo && hg add && hgcommit -m 'foo'
+touch bar && hg add && hgcommit -m 'bar'
+touch baz && hg add && hgcommit -m 'baz'
+
+echo "flub" > foo
+hgcommit -m "flub"
+echo "nub" > foo
+hgcommit -m "nub"
+
+hg up -C 2
+
+echo "c1" > c1
+hg add c1
+hgcommit -m "c1"
+echo "c2" > c1
+hgcommit -m "c2"
+
+hg up -C 2
+
+echo "d1" > d1
+hg add d1
+hgcommit -m "d1"
+echo "d2" > d1
+hgcommit -m "d2"
+hg tag -l good
+
+echo '% fail with three heads'
+hg up -C good
+hg merge
+
+echo '% close one of the heads'
+hg up -C 6
+hgcommit -m 'close this head' --close-branch
+
+echo '% succeed with two open heads'
+hg up -C good
+hg up -C good
+hg merge
+hgcommit -m 'merged heads'
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-merge-closedheads.out	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,17 @@
+adding foo
+adding bar
+adding baz
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+created new head
+0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+created new head
+% fail with three heads
+0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+abort: branch 'default' has 3 heads - please merge with an explicit rev
+% close one of the heads
+1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+% succeed with two open heads
+1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+(branch merge, don't forget to commit)
--- a/tests/test-merge-commit	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-merge-commit	Wed Jul 08 17:03:16 2009 -0700
@@ -33,7 +33,7 @@
 echo line1 > bar
 hg ci -m '4: revert content change from rev 2'
 
-hg log --template '#rev#:#node|short# #parents#\n'
+hg log --template '{rev}:{node|short} {parents}\n'
 echo '% this should use bar@rev2 as the ancestor'
 hg --debug merge 3
 echo '% contents of bar should be line1 line2'
@@ -64,7 +64,7 @@
 echo line1 > bar
 hg ci -m '4: revert content change from rev 2'
 
-hg log --template '#rev#:#node|short# #parents#\n'
+hg log --template '{rev}:{node|short} {parents}\n'
 echo '% this should use bar@rev2 as the ancestor'
 hg --debug merge 3
 echo '% contents of bar should be line1 line2'
--- a/tests/test-merge-commit.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-merge-commit.out	Wed Jul 08 17:03:16 2009 -0700
@@ -22,10 +22,10 @@
 1:5cd961e4045d 
 0:2665aaee66e9 
 % this should use bar@rev2 as the ancestor
+  searching for copies back to rev 1
 resolving manifests
  overwrite None partial False
  ancestor 0a3ab4856510 local 2d2f9a22c82b+ remote 7d3b554bfdf1
-  searching for copies back to rev 1
  bar: versions differ -> m
 preserving bar for resolve of bar
 picked tool 'internal:merge' for bar (binary False symlink False)
@@ -72,10 +72,10 @@
 1:5cd961e4045d 
 0:2665aaee66e9 
 % this should use bar@rev2 as the ancestor
+  searching for copies back to rev 1
 resolving manifests
  overwrite None partial False
  ancestor 0a3ab4856510 local 2d2f9a22c82b+ remote 96ab80c60897
-  searching for copies back to rev 1
  bar: versions differ -> m
 preserving bar for resolve of bar
 picked tool 'internal:merge' for bar (binary False symlink False)
--- a/tests/test-merge-default	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-merge-default	Wed Jul 08 17:03:16 2009 -0700
@@ -31,6 +31,7 @@
 hg commit -mm1
 
 echo % should succeed - 2 heads
+hg merge -P
 hg merge
 hg commit -mm2
 
--- a/tests/test-merge-default.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-merge-default.out	Wed Jul 08 17:03:16 2009 -0700
@@ -13,6 +13,17 @@
 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
 (branch merge, don't forget to commit)
 % should succeed - 2 heads
+changeset:   1:ba677d0156c1
+user:        test
+date:        Thu Jan 01 00:00:00 1970 +0000
+summary:     b
+
+changeset:   3:903c264cdf57
+parent:      1:ba677d0156c1
+user:        test
+date:        Thu Jan 01 00:00:00 1970 +0000
+summary:     d
+
 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
 (branch merge, don't forget to commit)
 % should fail because at tip
--- a/tests/test-merge-force.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-merge-force.out	Wed Jul 08 17:03:16 2009 -0700
@@ -1,6 +1,6 @@
 created new head
 % local deleted a file, remote removed
-abort: outstanding uncommitted changes
+abort: outstanding uncommitted changes (use 'hg status' to list changes)
 resolving manifests
 removing a
 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
--- a/tests/test-merge-local.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-merge-local.out	Wed Jul 08 17:03:16 2009 -0700
@@ -22,7 +22,9 @@
 merging zzz2_merge_bad failed!
 3 files updated, 1 files merged, 2 files removed, 1 files unresolved
 use 'hg resolve' to retry unresolved file merges
-2 files updated, 0 files merged, 3 files removed, 0 files unresolved
+merging zzz1_merge_ok
+merging zzz2_merge_bad
+2 files updated, 2 files merged, 3 files removed, 0 files unresolved
 --- a/zzz1_merge_ok
 +++ b/zzz1_merge_ok
 +new first line
@@ -32,7 +34,6 @@
 +another last line
 M zzz1_merge_ok
 M zzz2_merge_bad
-? zzz2_merge_bad.orig
 # local merge with conflicts
 merging zzz1_merge_ok
 merging zzz2_merge_bad
@@ -40,7 +41,9 @@
 merging zzz2_merge_bad failed!
 3 files updated, 1 files merged, 2 files removed, 1 files unresolved
 use 'hg resolve' to retry unresolved file merges
-2 files updated, 0 files merged, 3 files removed, 0 files unresolved
+merging zzz1_merge_ok
+merging zzz2_merge_bad
+2 files updated, 2 files merged, 3 files removed, 0 files unresolved
 --- a/zzz1_merge_ok
 +++ b/zzz1_merge_ok
 +new first line
@@ -52,7 +55,6 @@
 +new last line
 M zzz1_merge_ok
 M zzz2_merge_bad
-? zzz2_merge_bad.orig
 # local merge without conflicts
 merging zzz1_merge_ok
 4 files updated, 1 files merged, 2 files removed, 0 files unresolved
--- a/tests/test-merge-prompt.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-merge-prompt.out	Wed Jul 08 17:03:16 2009 -0700
@@ -4,6 +4,10 @@
 created new head
 
 # non-interactive merge
+ local changed file1 which remote deleted
+use (c)hanged version or (d)elete? c
+remote changed file2 which local deleted
+use (c)hanged version or leave (d)eleted? c
 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
 (branch merge, don't forget to commit)
 status:
--- a/tests/test-merge-tools	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-merge-tools	Wed Jul 08 17:03:16 2009 -0700
@@ -60,7 +60,9 @@
 echo "# default is internal merge:"
 beforemerge
 echo "# hg merge -r 2"
-PATH=$BINDIR hg merge -r 2
+# override $PATH to ensure hgmerge not visible; use $PYTHON in case we're
+# running from a devel copy, not a temp installation
+PATH=$BINDIR $PYTHON $BINDIR/hg merge -r 2
 aftermerge
 
 echo "# simplest hgrc using false for merge:"
@@ -88,8 +90,7 @@
 domerge -r 2
 
 echo "# and true.executable set to cat with path works:"
-domerge -r 2 --config merge-tools.true.executable=/bin/cat
-
+domerge -r 2 --config merge-tools.true.executable=cat
 
 echo
 echo Tool selection and merge-patterns
@@ -120,6 +121,20 @@
 echo "# ui.merge specifies internal:other:"
 domerge -r 2 --config ui.merge=internal:other
 
+echo "# ui.merge specifies internal:prompt:"
+domerge -r 2 --config ui.merge=internal:prompt
+
+echo "# ui.merge specifies internal:dump:"
+domerge -r 2 --config ui.merge=internal:dump
+echo f.base:
+cat f.base
+echo f.local:
+cat f.local
+echo f.other:
+cat f.other
+rm f.base f.local f.other
+echo
+
 echo "# ui.merge specifies internal:other but is overruled by pattern for false:"
 domerge -r 2 --config ui.merge=internal:other --config merge-patterns.f=false
 
@@ -168,4 +183,4 @@
 echo
 
 echo "# cat is a bad merge-tool and doesn't change:"
-domerge -r 2 --config merge-tools.true.checkchanged=1
+domerge -y -r 2 --config merge-tools.true.checkchanged=1
--- a/tests/test-merge-tools.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-merge-tools.out	Wed Jul 08 17:03:16 2009 -0700
@@ -156,7 +156,7 @@
 true.priority=1
 true.executable=cat
 # hg update -C 1
-# hg merge -r 2 --config merge-tools.true.executable=/bin/cat
+# hg merge -r 2 --config merge-tools.true.executable=cat
 revision 1
 space
 revision 0
@@ -297,6 +297,53 @@
 # hg stat
 M f
 
+# ui.merge specifies internal:prompt:
+[merge-tools]
+false.whatever=
+true.priority=1
+true.executable=cat
+# hg update -C 1
+# hg merge -r 2 --config ui.merge=internal:prompt
+ no tool found to merge f
+keep (l)ocal or take (o)ther? l
+0 files updated, 1 files merged, 0 files removed, 0 files unresolved
+(branch merge, don't forget to commit)
+# cat f
+revision 1
+space
+# hg stat
+M f
+
+# ui.merge specifies internal:dump:
+[merge-tools]
+false.whatever=
+true.priority=1
+true.executable=cat
+# hg update -C 1
+# hg merge -r 2 --config ui.merge=internal:dump
+merging f
+0 files updated, 0 files merged, 0 files removed, 1 files unresolved
+use 'hg resolve' to retry unresolved file merges or 'hg up --clean' to abandon
+# cat f
+revision 1
+space
+# hg stat
+M f
+? f.base
+? f.local
+? f.orig
+? f.other
+
+f.base:
+revision 0
+space
+f.local:
+revision 1
+space
+f.other:
+revision 2
+space
+
 # ui.merge specifies internal:other but is overruled by pattern for false:
 [merge-tools]
 false.whatever=
@@ -459,7 +506,7 @@
 true.priority=1
 true.executable=cat
 # hg update -C 1
-# hg merge -r 2 --config merge-tools.true.checkchanged=1
+# hg merge -y -r 2 --config merge-tools.true.checkchanged=1
 revision 1
 space
 revision 0
@@ -467,6 +514,8 @@
 revision 2
 space
 merging f
+ output file f appears unchanged
+was merge successful (yn)? n
 merging f failed!
 0 files updated, 0 files merged, 0 files removed, 1 files unresolved
 use 'hg resolve' to retry unresolved file merges or 'hg up --clean' to abandon
--- a/tests/test-merge-types.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-merge-types.out	Wed Jul 08 17:03:16 2009 -0700
@@ -1,10 +1,10 @@
 adding a
 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
 created new head
+  searching for copies back to rev 1
 resolving manifests
  overwrite None partial False
  ancestor c334dc3be0da local 521a1e40188f+ remote 3574f3e69b1c
-  searching for copies back to rev 1
  conflicting flags for a
 (n)one, e(x)ec or sym(l)ink? n
  a: update permissions -> e
@@ -13,10 +13,10 @@
 % symlink is local parent, executable is other
 a has no flags (default for conflicts)
 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  searching for copies back to rev 1
 resolving manifests
  overwrite None partial False
  ancestor c334dc3be0da local 3574f3e69b1c+ remote 521a1e40188f
-  searching for copies back to rev 1
  conflicting flags for a
 (n)one, e(x)ec or sym(l)ink? n
  a: remote is newer -> g
--- a/tests/test-merge1	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-merge1	Wed Jul 08 17:03:16 2009 -0700
@@ -30,6 +30,7 @@
 hg commit -m "commit #2" -d "1000000 0"
 echo This is file b1 > b
 echo %% no merges expected
+hg merge -P 1
 hg merge 1
 hg diff --nodates
 hg status
--- a/tests/test-merge1.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-merge1.out	Wed Jul 08 17:03:16 2009 -0700
@@ -1,6 +1,16 @@
 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
 created new head
 %% no merges expected
+changeset:   0:98e00378acd0
+user:        test
+date:        Mon Jan 12 13:46:40 1970 +0000
+summary:     commit #0
+
+changeset:   1:4ee19afe4659
+user:        test
+date:        Mon Jan 12 13:46:40 1970 +0000
+summary:     commit #1
+
 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
 (branch merge, don't forget to commit)
 diff -r d9e5953b9dec b
@@ -30,7 +40,7 @@
 Contents of b should be "this is file b1"
 This is file b1
 %% merge fails
-abort: outstanding uncommitted changes
+abort: outstanding uncommitted changes (use 'hg status' to list changes)
 %% merge expected!
 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
 (branch merge, don't forget to commit)
@@ -44,7 +54,7 @@
 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
 created new head
 %% merge of b should fail
-abort: outstanding uncommitted changes
+abort: outstanding uncommitted changes (use 'hg status' to list changes)
 %% merge of b expected
 merging for b
 merging b
--- a/tests/test-merge7.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-merge7.out	Wed Jul 08 17:03:16 2009 -0700
@@ -19,10 +19,10 @@
 adding file changes
 added 1 changesets with 1 changes to 1 files (+1 heads)
 (run 'hg heads' to see heads, 'hg merge' to merge)
+  searching for copies back to rev 1
 resolving manifests
  overwrite None partial False
  ancestor faaea63e63a9 local 451c744aabcc+ remote a070d41e8360
-  searching for copies back to rev 1
  test.txt: versions differ -> m
 preserving test.txt for resolve of test.txt
 picked tool 'internal:merge' for test.txt (binary False symlink False)
--- a/tests/test-mq-caches	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-mq-caches	Wed Jul 08 17:03:16 2009 -0700
@@ -8,7 +8,7 @@
 {
     # force cache (re)generation
     hg log -r does-not-exist 2> /dev/null
-    hg log -r tip --template 'tip: #rev#\n'
+    hg log -r tip --template 'tip: {rev}\n'
     if [ -f $branches ]; then
 	sort $branches
     else
@@ -16,7 +16,7 @@
     fi
     if [ "$1" = 1 ]; then
 	for b in foo bar; do
-	    hg log -r $b --template "branch $b: "'#rev#\n'
+	    hg log -r $b --template "branch $b: "'{rev}\n'
 	done
     fi
 }
@@ -68,7 +68,7 @@
 echo '# importing rev 1 (the cache now ends in one of the patches)'
 hg qimport -r 1 -n p0
 show_branch_cache 1
-hg log -r qbase --template 'qbase: #rev#\n'
+hg log -r qbase --template 'qbase: {rev}\n'
 
 echo
 echo '# detect an invalid cache'
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-mq-eol	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,64 @@
+#!/bin/sh
+
+# Test interactions between mq and patch.eol
+
+echo "[extensions]" >> $HGRCPATH
+echo "mq=" >> $HGRCPATH
+
+cat > makepatch.py <<EOF
+f = file('eol.diff', 'wb')
+w = f.write
+w('test message\n')
+w('diff --git a/a b/a\n')
+w('--- a/a\n')
+w('+++ b/a\n')
+w('@@ -1,5 +1,5 @@\n')
+w(' a\n')
+w('-b\r\n')
+w('+y\r\n')
+w(' c\r\n')
+w(' d\n')
+w('-e\n')
+w('\ No newline at end of file\n')
+w('+z\r\n')
+w('\ No newline at end of file\r\n')
+EOF
+
+cat > cateol.py <<EOF
+import sys
+for line in file(sys.argv[1], 'rb'):
+    line = line.replace('\r', '<CR>')
+    line = line.replace('\n', '<LF>')
+    print line
+EOF
+
+hg init repo
+cd repo
+echo '\.diff' > .hgignore
+echo '\.rej' >> .hgignore
+
+# Test different --eol values
+python -c 'file("a", "wb").write("a\nb\nc\nd\ne")'
+hg ci -Am adda
+python ../makepatch.py
+hg qimport eol.diff
+echo % should fail in strict mode
+hg qpush
+hg qpop
+echo % invalid eol
+hg --config patch.eol='LFCR' qpush
+hg qpop
+echo % force LF
+hg --config patch.eol='CRLF' qpush
+hg qrefresh
+python ../cateol.py .hg/patches/eol.diff
+python ../cateol.py a
+hg qpop
+echo % push again forcing LF and compare revisions
+hg --config patch.eol='CRLF' qpush
+python ../cateol.py a
+hg qpop
+echo % push again without LF and compare revisions
+hg qpush
+python ../cateol.py a
+hg qpop
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-mq-eol.out	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,63 @@
+adding .hgignore
+adding a
+adding eol.diff to series file
+% should fail in strict mode
+applying eol.diff
+patching file a
+Hunk #1 FAILED at 0
+1 out of 1 hunks FAILED -- saving rejects to file a.rej
+patch failed, unable to continue (try -v)
+patch failed, rejects left in working dir
+errors during apply, please fix and refresh eol.diff
+patch queue now empty
+% invalid eol
+applying eol.diff
+patch failed, unable to continue (try -v)
+patch failed, rejects left in working dir
+errors during apply, please fix and refresh eol.diff
+patch queue now empty
+% force LF
+applying eol.diff
+now at: eol.diff
+test message<LF>
+<LF>
+diff --git a/a b/a<LF>
+--- a/a<LF>
++++ b/a<LF>
+@@ -1,5 +1,5 @@<LF>
+-a<LF>
+-b<LF>
+-c<LF>
+-d<LF>
+-e<LF>
+\ No newline at end of file<LF>
++a<CR><LF>
++y<CR><LF>
++c<CR><LF>
++d<CR><LF>
++z<LF>
+\ No newline at end of file<LF>
+a<CR><LF>
+y<CR><LF>
+c<CR><LF>
+d<CR><LF>
+z
+patch queue now empty
+% push again forcing LF and compare revisions
+applying eol.diff
+now at: eol.diff
+a<CR><LF>
+y<CR><LF>
+c<CR><LF>
+d<CR><LF>
+z
+patch queue now empty
+% push again without LF and compare revisions
+applying eol.diff
+now at: eol.diff
+a<CR><LF>
+y<CR><LF>
+c<CR><LF>
+d<CR><LF>
+z
+patch queue now empty
--- a/tests/test-mq-merge.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-mq-merge.out	Wed Jul 08 17:03:16 2009 -0700
@@ -19,6 +19,5 @@
 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
 % merge
 merging with queue at refqueue
-(working directory not at tip)
 applying patcha
 now at: patcha
--- a/tests/test-mq-missingfiles.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-mq-missingfiles.out	Wed Jul 08 17:03:16 2009 -0700
@@ -33,7 +33,6 @@
 1 out of 1 hunks FAILED -- saving rejects to file b.rej
 patch failed, unable to continue (try -v)
 b: No such file or directory
-b not tracked!
 patch failed, rejects left in working dir
 errors during apply, please fix and refresh changeb
 ? b.rej
--- a/tests/test-mq-qdelete.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-mq-qdelete.out	Wed Jul 08 17:03:16 2009 -0700
@@ -13,9 +13,12 @@
 b
 series
 status
+patch a finalized without changeset message
 1 [mq]: a
 0 base
 abort: cannot delete revision 3 above applied patches
+patch d finalized without changeset message
+patch e finalized without changeset message
 f
 4 [mq]: f
 3 [mq]: e
@@ -32,11 +35,14 @@
 applying c
 patch c is empty
 now at: c
+patch a finalized without changeset message
+patch b finalized without changeset message
 c
 3 imported patch c
 2 [mq]: b
 1 [mq]: a
 0 base
+patch c finalized without changeset message
 3 imported patch c
 2 [mq]: b
 1 [mq]: a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-mq-qfold	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+echo "[extensions]" >> $HGRCPATH
+echo "mq=" >> $HGRCPATH
+
+filterdiff()
+{
+    grep -v diff | \
+	sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
+	-e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"
+}
+
+echo '% init'
+hg init repo
+cd repo
+echo a > a
+hg ci -Am adda
+echo a >> a
+hg qnew -f p1
+echo b >> a
+hg qnew -f p2
+echo c >> a
+hg qnew -f p3
+echo '% fold in the middle of the queue'
+hg qpop p1
+hg qdiff | filterdiff
+hg qfold p2
+hg qser
+hg qdiff | filterdiff
+echo '% fold with local changes'
+echo d >> a
+hg qfold p3
+hg diff -c . | filterdiff
+cd ..
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-mq-qfold.out	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,25 @@
+% init
+adding a
+% fold in the middle of the queue
+now at: p1
+--- a/a
++++ b/a
+@@ -1,1 +1,2 @@
+ a
++a
+p1
+p3
+--- a/a
++++ b/a
+@@ -1,1 +1,3 @@
+ a
++a
++b
+% fold with local changes
+abort: local changes found, refresh first
+--- a/a
++++ b/a
+@@ -1,1 +1,3 @@
+ a
++a
++b
--- a/tests/test-mq-qimport	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-mq-qimport	Wed Jul 08 17:03:16 2009 -0700
@@ -69,4 +69,10 @@
 hg qimport b.diff
 hg qpush
 
-
+echo % try to import --push
+echo another >> b
+hg diff > another.diff
+hg up -C
+hg qimport --push another.diff
+hg qfin -a
+hg qimport -rtip -P
--- a/tests/test-mq-qimport.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-mq-qimport.out	Wed Jul 08 17:03:16 2009 -0700
@@ -22,3 +22,10 @@
 adding b.diff to series file
 applying b.diff
 now at: b.diff
+% try to import --push
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+adding another.diff to series file
+applying another.diff
+now at: another.diff
+patch b.diff finalized without changeset message
+patch another.diff finalized without changeset message
--- a/tests/test-mq-qpush-fail	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-mq-qpush-fail	Wed Jul 08 17:03:16 2009 -0700
@@ -16,6 +16,10 @@
 echo '.hgignore' >> .hgignore
 
 hg qinit
+
+echo '% test qpush on empty series'
+hg qpush
+
 hg qnew patch1
 echo >> foo
 hg qrefresh -m 'patch 1'
@@ -41,3 +45,12 @@
 
 echo '% bar should be gone; other unknown/ignored files should still be around'
 hg status -A
+
+echo '% preparing qpush of a missing patch'
+hg qpop -a
+hg qpush
+rm .hg/patches/patch2
+echo '% now we expect the push to fail, but it should NOT complain about patch1'
+hg qpush
+
+true # happy ending
--- a/tests/test-mq-qpush-fail.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-mq-qpush-fail.out	Wed Jul 08 17:03:16 2009 -0700
@@ -1,4 +1,6 @@
 adding foo
+% test qpush on empty series
+no patches in series
 patch queue now empty
 applying patch1
 applying patch2
@@ -17,3 +19,11 @@
 ? untracked-file
 I .hgignore
 C foo
+% preparing qpush of a missing patch
+no patches applied
+applying patch1
+now at: patch1
+% now we expect the push to fail, but it should NOT complain about patch1
+applying patch2
+unable to read patch2
+now at: patch1
--- a/tests/test-mq-safety	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-mq-safety	Wed Jul 08 17:03:16 2009 -0700
@@ -41,4 +41,4 @@
 hg qrefresh
 
 echo '% tip:'
-hg tip --template '#rev# #desc#\n'
+hg tip --template '{rev} {desc}\n'
--- a/tests/test-mq-strip	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-mq-strip	Wed Jul 08 17:03:16 2009 -0700
@@ -1,3 +1,5 @@
+#!/bin/sh
+
 echo "[extensions]" >> $HGRCPATH
 echo "mq=" >> $HGRCPATH
 
--- a/tests/test-mq.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-mq.out	Wed Jul 08 17:03:16 2009 -0700
@@ -1,5 +1,5 @@
 % help
-mq extension - patch management and development
+mq extension - manage a stack of patches
 
 This extension lets you work with a stack of patches in a Mercurial
 repository. It manages two stacks of patches - all known patches, and
@@ -53,7 +53,7 @@
 
 enabled extensions:
 
- mq   patch management and development
+ mq   manage a stack of patches
 
 use "hg -v help mq" to show aliases and global options
 adding a
@@ -242,7 +242,7 @@
 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
 abort: local changes found
 % --force strip with local changes
-0 files updated, 0 files merged, 2 files removed, 0 files unresolved
+0 files updated, 0 files merged, 1 files removed, 0 files unresolved
 saving bundle to 
 % cd b; hg qrefresh
 adding a
@@ -326,7 +326,7 @@
 adding file changes
 added 1 changesets with 1 changes to 1 files
 patch queue now empty
-(working directory not at tip)
+(working directory not at a head)
 applying bar
 now at: bar
 diff --git a/bar b/bar
@@ -360,7 +360,7 @@
 adding file changes
 added 1 changesets with 1 changes to 1 files
 patch queue now empty
-(working directory not at tip)
+(working directory not at a head)
 applying bar
 now at: bar
 diff --git a/foo b/bleh
--- a/tests/test-mv-cp-st-diff	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-mv-cp-st-diff	Wed Jul 08 17:03:16 2009 -0700
@@ -23,6 +23,7 @@
 add x/y y1
 hg add x/y
 hg ci -m2
+cd ..
 
 show()
 {
@@ -41,6 +42,7 @@
 # $4 - test description
 tb()
 {
+    hg clone t t2 ; cd t2
     hg co -q -C 0
 
     add a $count
@@ -62,6 +64,8 @@
     show "--rev 2 --rev ." "branch to parent"
     show "--rev . --rev 2" "parent to branch"
     echo
+    cd ..
+    rm -rf t2
 }
 
 
--- a/tests/test-mv-cp-st-diff.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-mv-cp-st-diff.out	Wed Jul 08 17:03:16 2009 -0700
@@ -1,3 +1,5 @@
+updating working directory
+3 files updated, 0 files merged, 0 files removed, 0 files unresolved
 created new head
 ** rename in working dir **
 ** add a a1 / add a a2 / hg mv a b
@@ -118,6 +120,8 @@
 +y1
 
 
+updating working directory
+3 files updated, 0 files merged, 0 files removed, 0 files unresolved
 created new head
 ** copy in working dir **
 ** add a a1 / add a a2 / hg cp a b
@@ -255,6 +259,8 @@
 +y1
 
 
+updating working directory
+3 files updated, 0 files merged, 0 files removed, 0 files unresolved
 created new head
 ** single rename **
 ** hg mv a b / add b b1 / add b w
@@ -390,6 +396,8 @@
 +y1
 
 
+updating working directory
+3 files updated, 0 files merged, 0 files removed, 0 files unresolved
 created new head
 ** single copy **
 ** hg cp a b / add b b1 / add a w
@@ -560,6 +568,8 @@
 +y1
 
 
+updating working directory
+3 files updated, 0 files merged, 0 files removed, 0 files unresolved
 created new head
 ** rename chain **
 ** hg mv a b / hg mv b c / hg mv c d
@@ -684,6 +694,8 @@
 +y1
 
 
+updating working directory
+3 files updated, 0 files merged, 0 files removed, 0 files unresolved
 created new head
 ** copy chain **
 ** hg cp a b / hg cp b c / hg cp c d
@@ -925,6 +937,8 @@
 +y1
 
 
+updating working directory
+3 files updated, 0 files merged, 0 files removed, 0 files unresolved
 created new head
 ** circular rename **
 ** add a a1 / hg mv a b / hg mv b a
@@ -1047,6 +1061,8 @@
 +y1
 
 
+updating working directory
+3 files updated, 0 files merged, 0 files removed, 0 files unresolved
 created new head
 moving x/x to y/x
 ** directory move **
--- a/tests/test-newbranch	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-newbranch	Wed Jul 08 17:03:16 2009 -0700
@@ -19,6 +19,9 @@
 hg branch -f default
 hg ci -m "clear branch name" -d "1000000 0"
 
+echo % there should be only one default branch head
+hg heads .
+
 hg co foo
 hg branch
 echo bleah > a
--- a/tests/test-newbranch.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-newbranch.out	Wed Jul 08 17:03:16 2009 -0700
@@ -4,6 +4,13 @@
 % branch shadowing
 abort: a branch of the same name already exists (use --force to override)
 marked working directory as branch default
+% there should be only one default branch head
+changeset:   3:bf1bc2f45e83
+tag:         tip
+user:        test
+date:        Mon Jan 12 13:46:40 1970 +0000
+summary:     clear branch name
+
 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
 foo
 created new head
@@ -81,7 +88,6 @@
 
 4:4909a3732169
 4909a3732169c0c20011c4f4b8fdff4e3d89b23f 4
-be8523e69bf892e25817fc97187516b3c0804ae4 default
 bf1bc2f45e834c75404d0ddab57d53beab56e2f8 default
 4909a3732169c0c20011c4f4b8fdff4e3d89b23f foo
 67ec16bde7f1575d523313b9bca000f6a6f12dca bar
@@ -91,7 +97,6 @@
 be8523e69bf892e25817fc97187516b3c0804ae4 default
 % pushing everything
 4909a3732169c0c20011c4f4b8fdff4e3d89b23f 4
-be8523e69bf892e25817fc97187516b3c0804ae4 default
 bf1bc2f45e834c75404d0ddab57d53beab56e2f8 default
 4909a3732169c0c20011c4f4b8fdff4e3d89b23f foo
 67ec16bde7f1575d523313b9bca000f6a6f12dca bar
--- a/tests/test-notify.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-notify.out	Wed Jul 08 17:03:16 2009 -0700
@@ -1,4 +1,4 @@
-notify extension - hook extension to email notifications on commits/pushes
+notify extension - hooks for sending email notifications at commit/push time
 
 Subscriptions can be managed through hgrc. Default mode is to print
 messages to stdout, for testing and configuring.
--- a/tests/test-parentrevspec	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-parentrevspec	Wed Jul 08 17:03:16 2009 -0700
@@ -33,7 +33,7 @@
 commit '5: merge' 3 4
 commit '6: change foo again'
 
-hg log --template '#rev#:#node|short# #parents#\n'
+hg log --template '{rev}:{node|short} {parents}\n'
 echo
 
 lookup()
--- a/tests/test-parents.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-parents.out	Wed Jul 08 17:03:16 2009 -0700
@@ -53,7 +53,7 @@
 summary:     a
 
 % hg parents -r 2 glob:a
-abort: can only specify an explicit file name
+abort: can only specify an explicit filename
 % merge working dir with 2 parents, hg parents c
 merging c
 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
--- a/tests/test-patch.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-patch.out	Wed Jul 08 17:03:16 2009 -0700
@@ -9,4 +9,3 @@
 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
 applying ../a.diff
 Using custom patch
-nothing changed
--- a/tests/test-patchbomb	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-patchbomb	Wed Jul 08 17:03:16 2009 -0700
@@ -19,13 +19,13 @@
 echo a > a
 hg commit -Ama -d '1 0'
 
-hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar tip | \
+hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -r tip | \
   fixheaders
 
 echo b > b
 hg commit -Amb -d '2 0'
 
-hg email --date '1970-1-1 0:2' -n -f quux -t foo -c bar -s test 0:tip | \
+hg email --date '1970-1-1 0:2' -n -f quux -t foo -c bar -s test -r 0:tip | \
   fixheaders
 
 hg email -m test.mbox -f quux -t foo -c bar -s test 0:tip
@@ -53,7 +53,8 @@
 hg commit -A -d '4 0' -m 'charset=utf-8; content-transfer-encoding: base64'
 
 echo "% no mime encoding for email --test"
-hg email --date '1970-1-1 0:4' -f quux -t foo -c bar -r tip -n | fixheaders > mailtest
+hg email --date '1970-1-1 0:4' -f quux -t foo -c bar -r tip -n | \
+    fixheaders > mailtest
 echo "% md5sum of 8-bit output"
 $TESTDIR/md5sum.py mailtest
 rm mailtest
@@ -66,10 +67,12 @@
 echo "% mime encoded mbox (quoted-printable)"
 python -c 'fp = open("qp", "wb"); fp.write("%s\nfoo\n\nbar\n" % \
   ("x" * 1024)); fp.close();'
-hg commit -A -d '4 0' -m 'charset=utf-8; content-transfer-encoding: quoted-printable'
+hg commit -A -d '4 0' -m \
+    'charset=utf-8; content-transfer-encoding: quoted-printable'
 
 echo "% no mime encoding for email --test"
-hg email --date '1970-1-1 0:4' -f quux -t foo -c bar -r tip -n | fixheaders > mailtest
+hg email --date '1970-1-1 0:4' -f quux -t foo -c bar -r tip -n | \
+    fixheaders > mailtest
 echo "% md5sum of qp output"
 $TESTDIR/md5sum.py mailtest
 rm mailtest
@@ -90,19 +93,19 @@
 $TESTDIR/md5sum.py mboxfix
 
 echo "% test diffstat for single patch"
-hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -d -y 2 | \
+hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -d -y -r 2 | \
   fixheaders
 
 echo "% test diffstat for multiple patches"
-hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -d -y 0:1 | \
-  fixheaders
+hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -d -y \
+  -r 0:1 | fixheaders
 
 echo "% test inline for single patch"
-hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -i 2 | \
+hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -i -r 2 | \
   fixheaders
 
 echo "% test inline for single patch (quoted-printable)"
-hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -i 4 | \
+hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -i -r 4 | \
   fixheaders
 
 echo "% test inline for multiple patches"
@@ -110,11 +113,11 @@
   -r 0:1 -r 4 | fixheaders
 
 echo "% test attach for single patch"
-hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -a 2 | \
+hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -a -r 2 | \
   fixheaders
 
 echo "% test attach for single patch (quoted-printable)"
-hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -a 4 | \
+hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -a -r 4 | \
   fixheaders
 
 echo "% test attach for multiple patches"
@@ -122,12 +125,12 @@
   -r 0:1 -r 4 | fixheaders
 
 echo "% test intro for single patch"
-hg email --date '1970-1-1 0:1' -n --intro -f quux -t foo -c bar -s test 2 | \
-  fixheaders
+hg email --date '1970-1-1 0:1' -n --intro -f quux -t foo -c bar -s test \
+  -r 2 | fixheaders
 
 echo "% test intro for multiple patches"
-hg email --date '1970-1-1 0:1' -n --intro -f quux -t foo -c bar -s test 0:1 | \
-  fixheaders
+hg email --date '1970-1-1 0:1' -n --intro -f quux -t foo -c bar -s test \
+  -r 0:1 | fixheaders
 
 echo "% tagging csets"
 hg tag -r0 zero zero.foo
@@ -135,13 +138,16 @@
 hg tag -r2 two two.diff
 
 echo "% test inline for single named patch"
-hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -i 2 | \
+hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -i -r 2 | \
   fixheaders
 
 echo "% test inline for multiple named/unnamed patches"
-hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -i 0:1 | \
+hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -i -r 0:1 | \
   fixheaders
 
 echo "% test inreplyto"
-hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar --in-reply-to baz tip | \
-  fixheaders
+hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar --in-reply-to baz \
+  -r tip | fixheaders
+
+hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar --in-reply-to baz \
+  -r 0:1 | fixheaders
--- a/tests/test-patchbomb.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-patchbomb.out	Wed Jul 08 17:03:16 2009 -0700
@@ -10,7 +10,7 @@
 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
 Message-Id: <8580ff50825a50c8f716.60@
 User-Agent: Mercurial-patchbomb
-Date: Thu, 01 Jan 1970 00:01:00 +0000
+Date: Thu, 01 Jan 1970 00:01:00 -0000
 From: quux
 To: foo
 Cc: bar
@@ -42,7 +42,7 @@
 Subject: [PATCH 0 of 2] test
 Message-Id: <patchbomb.120@
 User-Agent: Mercurial-patchbomb
-Date: Thu, 01 Jan 1970 00:02:00 +0000
+Date: Thu, 01 Jan 1970 00:02:00 -0000
 From: quux
 To: foo
 Cc: bar
@@ -58,7 +58,7 @@
 In-Reply-To: <patchbomb.120@
 References: <patchbomb.120@
 User-Agent: Mercurial-patchbomb
-Date: Thu, 01 Jan 1970 00:02:01 +0000
+Date: Thu, 01 Jan 1970 00:02:01 -0000
 From: quux
 To: foo
 Cc: bar
@@ -86,7 +86,7 @@
 In-Reply-To: <patchbomb.120@
 References: <patchbomb.120@
 User-Agent: Mercurial-patchbomb
-Date: Thu, 01 Jan 1970 00:02:02 +0000
+Date: Thu, 01 Jan 1970 00:02:02 -0000
 From: quux
 To: foo
 Cc: bar
@@ -124,7 +124,7 @@
 Subject: test
 Message-Id: <patchbomb.180@
 User-Agent: Mercurial-patchbomb
-Date: Thu, 01 Jan 1970 00:03:00 +0000
+Date: Thu, 01 Jan 1970 00:03:00 -0000
 From: quux
 To: foo
 Cc: bar
@@ -157,7 +157,7 @@
 adding utf
 % no mime encoding for email --test
 % md5sum of 8-bit output
-e726c29b3008e77994c7572563e57c34  mailtest
+1b28ee86c937a1f9e2bf6fc5eabd00a5  mailtest
 % mime encoded mbox (base64)
 This patch series consists of 1 patches.
 
@@ -171,7 +171,7 @@
 X-Mercurial-Node: c3c9e37db9f4fe4882cda39baf42fed6bad8b15a
 Message-Id: <c3c9e37db9f4fe4882cd.240@
 User-Agent: Mercurial-patchbomb
-Date: Thu, 01 Jan 1970 00:04:00 +0000
+Date: Thu, 01 Jan 1970 00:04:00 -0000
 From: quux
 To: foo
 Cc: bar
@@ -192,7 +192,7 @@
 adding qp
 % no mime encoding for email --test
 % md5sum of qp output
-0402c7d033e04044e423bb04816f9dae  mailtest
+7b5f11d50349b32eff4a9b2daaa82e7f  mailtest
 % mime encoded mbox (quoted-printable)
 This patch series consists of 1 patches.
 
@@ -206,7 +206,7 @@
 X-Mercurial-Node: c655633f8c87700bb38cc6a59a2753bdc5a6c376
 Message-Id: <c655633f8c87700bb38c.240@
 User-Agent: Mercurial-patchbomb
-Date: Thu, 01 Jan 1970 00:04:00 +0000
+Date: Thu, 01 Jan 1970 00:04:00 -0000
 From: quux
 To: foo
 Cc: bar
@@ -249,7 +249,7 @@
 
 Writing [PATCH] charset=us-ascii; content-transfer-encoding: 8bit ...
 % md5sum of 8-bit output
-9ea043d8fc43a71045114508baed144b  mboxfix
+e61684fc0bcccba4204714be37951893  mboxfix
 % test diffstat for single patch
 This patch series consists of 1 patches.
 
@@ -267,7 +267,7 @@
 X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
 Message-Id: <ff2c9fa2018b15fa74b3.60@
 User-Agent: Mercurial-patchbomb
-Date: Thu, 01 Jan 1970 00:01:00 +0000
+Date: Thu, 01 Jan 1970 00:01:00 -0000
 From: quux
 To: foo
 Cc: bar
@@ -319,7 +319,7 @@
 Subject: [PATCH 0 of 2] test
 Message-Id: <patchbomb.60@
 User-Agent: Mercurial-patchbomb
-Date: Thu, 01 Jan 1970 00:01:00 +0000
+Date: Thu, 01 Jan 1970 00:01:00 -0000
 From: quux
 To: foo
 Cc: bar
@@ -339,7 +339,7 @@
 In-Reply-To: <patchbomb.60@
 References: <patchbomb.60@
 User-Agent: Mercurial-patchbomb
-Date: Thu, 01 Jan 1970 00:01:01 +0000
+Date: Thu, 01 Jan 1970 00:01:01 -0000
 From: quux
 To: foo
 Cc: bar
@@ -371,7 +371,7 @@
 In-Reply-To: <patchbomb.60@
 References: <patchbomb.60@
 User-Agent: Mercurial-patchbomb
-Date: Thu, 01 Jan 1970 00:01:02 +0000
+Date: Thu, 01 Jan 1970 00:01:02 -0000
 From: quux
 To: foo
 Cc: bar
@@ -404,7 +404,7 @@
 X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
 Message-Id: <ff2c9fa2018b15fa74b3.60@
 User-Agent: Mercurial-patchbomb
-Date: Thu, 01 Jan 1970 00:01:00 +0000
+Date: Thu, 01 Jan 1970 00:01:00 -0000
 From: quux
 To: foo
 Cc: bar
@@ -440,7 +440,7 @@
 X-Mercurial-Node: c655633f8c87700bb38cc6a59a2753bdc5a6c376
 Message-Id: <c655633f8c87700bb38c.60@
 User-Agent: Mercurial-patchbomb
-Date: Thu, 01 Jan 1970 00:01:00 +0000
+Date: Thu, 01 Jan 1970 00:01:00 -0000
 From: quux
 To: foo
 Cc: bar
@@ -495,7 +495,7 @@
 Subject: [PATCH 0 of 3] test
 Message-Id: <patchbomb.60@
 User-Agent: Mercurial-patchbomb
-Date: Thu, 01 Jan 1970 00:01:00 +0000
+Date: Thu, 01 Jan 1970 00:01:00 -0000
 From: quux
 To: foo
 Cc: bar
@@ -510,7 +510,7 @@
 In-Reply-To: <patchbomb.60@
 References: <patchbomb.60@
 User-Agent: Mercurial-patchbomb
-Date: Thu, 01 Jan 1970 00:01:01 +0000
+Date: Thu, 01 Jan 1970 00:01:01 -0000
 From: quux
 To: foo
 Cc: bar
@@ -544,7 +544,7 @@
 In-Reply-To: <patchbomb.60@
 References: <patchbomb.60@
 User-Agent: Mercurial-patchbomb
-Date: Thu, 01 Jan 1970 00:01:02 +0000
+Date: Thu, 01 Jan 1970 00:01:02 -0000
 From: quux
 To: foo
 Cc: bar
@@ -579,7 +579,7 @@
 In-Reply-To: <patchbomb.60@
 References: <patchbomb.60@
 User-Agent: Mercurial-patchbomb
-Date: Thu, 01 Jan 1970 00:01:03 +0000
+Date: Thu, 01 Jan 1970 00:01:03 -0000
 From: quux
 To: foo
 Cc: bar
@@ -631,7 +631,7 @@
 X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
 Message-Id: <ff2c9fa2018b15fa74b3.60@
 User-Agent: Mercurial-patchbomb
-Date: Thu, 01 Jan 1970 00:01:00 +0000
+Date: Thu, 01 Jan 1970 00:01:00 -0000
 From: quux
 To: foo
 Cc: bar
@@ -676,7 +676,7 @@
 X-Mercurial-Node: c655633f8c87700bb38cc6a59a2753bdc5a6c376
 Message-Id: <c655633f8c87700bb38c.60@
 User-Agent: Mercurial-patchbomb
-Date: Thu, 01 Jan 1970 00:01:00 +0000
+Date: Thu, 01 Jan 1970 00:01:00 -0000
 From: quux
 To: foo
 Cc: bar
@@ -740,7 +740,7 @@
 Subject: [PATCH 0 of 3] test
 Message-Id: <patchbomb.60@
 User-Agent: Mercurial-patchbomb
-Date: Thu, 01 Jan 1970 00:01:00 +0000
+Date: Thu, 01 Jan 1970 00:01:00 -0000
 From: quux
 To: foo
 Cc: bar
@@ -755,7 +755,7 @@
 In-Reply-To: <patchbomb.60@
 References: <patchbomb.60@
 User-Agent: Mercurial-patchbomb
-Date: Thu, 01 Jan 1970 00:01:01 +0000
+Date: Thu, 01 Jan 1970 00:01:01 -0000
 From: quux
 To: foo
 Cc: bar
@@ -798,7 +798,7 @@
 In-Reply-To: <patchbomb.60@
 References: <patchbomb.60@
 User-Agent: Mercurial-patchbomb
-Date: Thu, 01 Jan 1970 00:01:02 +0000
+Date: Thu, 01 Jan 1970 00:01:02 -0000
 From: quux
 To: foo
 Cc: bar
@@ -842,7 +842,7 @@
 In-Reply-To: <patchbomb.60@
 References: <patchbomb.60@
 User-Agent: Mercurial-patchbomb
-Date: Thu, 01 Jan 1970 00:01:03 +0000
+Date: Thu, 01 Jan 1970 00:01:03 -0000
 From: quux
 To: foo
 Cc: bar
@@ -906,7 +906,7 @@
 Subject: [PATCH 0 of 1] test
 Message-Id: <patchbomb.60@
 User-Agent: Mercurial-patchbomb
-Date: Thu, 01 Jan 1970 00:01:00 +0000
+Date: Thu, 01 Jan 1970 00:01:00 -0000
 From: quux
 To: foo
 Cc: bar
@@ -922,7 +922,7 @@
 In-Reply-To: <patchbomb.60@
 References: <patchbomb.60@
 User-Agent: Mercurial-patchbomb
-Date: Thu, 01 Jan 1970 00:01:01 +0000
+Date: Thu, 01 Jan 1970 00:01:01 -0000
 From: quux
 To: foo
 Cc: bar
@@ -954,7 +954,7 @@
 Subject: [PATCH 0 of 2] test
 Message-Id: <patchbomb.60@
 User-Agent: Mercurial-patchbomb
-Date: Thu, 01 Jan 1970 00:01:00 +0000
+Date: Thu, 01 Jan 1970 00:01:00 -0000
 From: quux
 To: foo
 Cc: bar
@@ -970,7 +970,7 @@
 In-Reply-To: <patchbomb.60@
 References: <patchbomb.60@
 User-Agent: Mercurial-patchbomb
-Date: Thu, 01 Jan 1970 00:01:01 +0000
+Date: Thu, 01 Jan 1970 00:01:01 -0000
 From: quux
 To: foo
 Cc: bar
@@ -998,7 +998,7 @@
 In-Reply-To: <patchbomb.60@
 References: <patchbomb.60@
 User-Agent: Mercurial-patchbomb
-Date: Thu, 01 Jan 1970 00:01:02 +0000
+Date: Thu, 01 Jan 1970 00:01:02 -0000
 From: quux
 To: foo
 Cc: bar
@@ -1028,7 +1028,7 @@
 X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
 Message-Id: <ff2c9fa2018b15fa74b3.60@
 User-Agent: Mercurial-patchbomb
-Date: Thu, 01 Jan 1970 00:01:00 +0000
+Date: Thu, 01 Jan 1970 00:01:00 -0000
 From: quux
 To: foo
 Cc: bar
@@ -1067,7 +1067,7 @@
 Subject: [PATCH 0 of 2] test
 Message-Id: <patchbomb.60@
 User-Agent: Mercurial-patchbomb
-Date: Thu, 01 Jan 1970 00:01:00 +0000
+Date: Thu, 01 Jan 1970 00:01:00 -0000
 From: quux
 To: foo
 Cc: bar
@@ -1082,7 +1082,7 @@
 In-Reply-To: <patchbomb.60@
 References: <patchbomb.60@
 User-Agent: Mercurial-patchbomb
-Date: Thu, 01 Jan 1970 00:01:01 +0000
+Date: Thu, 01 Jan 1970 00:01:01 -0000
 From: quux
 To: foo
 Cc: bar
@@ -1116,7 +1116,7 @@
 In-Reply-To: <patchbomb.60@
 References: <patchbomb.60@
 User-Agent: Mercurial-patchbomb
-Date: Thu, 01 Jan 1970 00:01:02 +0000
+Date: Thu, 01 Jan 1970 00:01:02 -0000
 From: quux
 To: foo
 Cc: bar
@@ -1152,10 +1152,10 @@
 Subject: [PATCH] Added tag two, two.diff for changeset ff2c9fa2018b
 X-Mercurial-Node: e317db6a6f288748d1f6cb064f3810fcba66b1b6
 Message-Id: <e317db6a6f288748d1f6.60@
-In-Reply-To: baz
-References: baz
+In-Reply-To: <baz>
+References: <baz>
 User-Agent: Mercurial-patchbomb
-Date: Thu, 01 Jan 1970 00:01:00 +0000
+Date: Thu, 01 Jan 1970 00:01:00 -0000
 From: quux
 To: foo
 Cc: bar
@@ -1177,3 +1177,80 @@
 +ff2c9fa2018b15fa74b33363bda9527323e2a99f two
 +ff2c9fa2018b15fa74b33363bda9527323e2a99f two.diff
 
+This patch series consists of 2 patches.
+
+
+Write the introductory message for the patch series.
+
+
+Displaying [PATCH 0 of 2] None ...
+Content-Type: text/plain; charset="us-ascii"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+Subject: [PATCH 0 of 2] None
+Message-Id: <patchbomb.60@
+In-Reply-To: <baz>
+References: <baz>
+User-Agent: Mercurial-patchbomb
+Date: Thu, 01 Jan 1970 00:01:00 -0000
+From: quux
+To: foo
+Cc: bar
+
+
+Displaying [PATCH 1 of 2] a ...
+Content-Type: text/plain; charset="us-ascii"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+Subject: [PATCH 1 of 2] a
+X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
+Message-Id: <8580ff50825a50c8f716.61@
+In-Reply-To: <patchbomb.60@
+References: <patchbomb.60@
+User-Agent: Mercurial-patchbomb
+Date: Thu, 01 Jan 1970 00:01:01 -0000
+From: quux
+To: foo
+Cc: bar
+
+# 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
+
+Displaying [PATCH 2 of 2] b ...
+Content-Type: text/plain; charset="us-ascii"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+Subject: [PATCH 2 of 2] b
+X-Mercurial-Node: 97d72e5f12c7e84f85064aa72e5a297142c36ed9
+Message-Id: <97d72e5f12c7e84f8506.62@
+In-Reply-To: <patchbomb.60@
+References: <patchbomb.60@
+User-Agent: Mercurial-patchbomb
+Date: Thu, 01 Jan 1970 00:01:02 -0000
+From: quux
+To: foo
+Cc: bar
+
+# HG changeset patch
+# User test
+# Date 2 0
+# Node ID 97d72e5f12c7e84f85064aa72e5a297142c36ed9
+# Parent  8580ff50825a50c8f716709acdf8de0deddcd6ab
+b
+
+diff -r 8580ff50825a -r 97d72e5f12c7 b
+--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
++++ b/b	Thu Jan 01 00:00:02 1970 +0000
+@@ -0,0 +1,1 @@
++b
+
--- a/tests/test-push-warn	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-push-warn	Wed Jul 08 17:03:16 2009 -0700
@@ -59,4 +59,68 @@
 hg push -r 0 ../e ; echo $?
 hg push -r 1 ../e ; echo $?
 
+cd ..
+
+# issue 736
+echo % issue 736
+hg init f
+cd f
+hg -q branch a
+echo 0 > foo
+hg -q ci -d "1000000 0" -Am 0
+echo 1 > foo
+hg -q ci -d "1000000 0" -m 1
+hg -q up 0
+echo 2 > foo
+hg -q ci -d "1000000 0" -m 2
+hg -q up 0
+hg -q branch b
+echo 3 > foo
+hg -q ci -d "1000000 0" -m 3
+cd ..
+
+hg -q clone f g
+cd g
+
+echo % push on existing branch and new branch
+hg -q up 1
+echo 4 > foo
+hg -q ci -d "1000000 0" -m 4
+hg -q up 0
+echo 5 > foo
+hg -q branch c
+hg -q ci -d "1000000 0" -m 5
+hg push -r 4 -r 5 ../f; echo $?
+
+echo % fail on multiple head push
+hg -q up 1
+echo 6 > foo
+hg -q ci -d "1000000 0" -m 6
+hg push -r 4 -r 6 ../f; echo $?
+
+echo % push replacement head on existing branches
+hg -q up 3
+echo 7 > foo
+hg -q ci -d "1000000 0" -m 7
+hg push -r 6 -r 7 ../f; echo $?
+
+echo % merge of branch a to other branch b followed by unrelated push on branch a
+hg -q up 6
+HGMERGE=true hg -q merge 7
+hg -q ci -d "1000000 0" -m 8
+hg -q up 7
+echo 9 > foo
+hg -q ci -d "1000000 0" -m 9
+hg push -r 8 ../f; echo $?
+hg push -r 9 ../f; echo $?
+
+echo % cheating the counting algorithm
+hg -q up 8
+HGMERGE=true hg -q merge 2
+hg -q ci -d "1000000 0" -m 10
+hg -q up 1
+echo 11 > foo
+hg -q ci -d "1000000 0" -m 11
+hg push -r 10 -r 11 ../f; echo $?
+
 exit 0
--- a/tests/test-push-warn.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-push-warn.out	Wed Jul 08 17:03:16 2009 -0700
@@ -80,3 +80,47 @@
 adding file changes
 added 1 changesets with 1 changes to 1 files
 0
+% issue 736
+% push on existing branch and new branch
+pushing to ../f
+searching for changes
+abort: push creates new remote branch 'c'!
+(did you forget to merge? use push -f to force)
+1
+% fail on multiple head push
+pushing to ../f
+searching for changes
+abort: push creates new remote heads!
+(did you forget to merge? use push -f to force)
+1
+% push replacement head on existing branches
+pushing to ../f
+searching for changes
+adding changesets
+adding manifests
+adding file changes
+added 2 changesets with 2 changes to 1 files
+0
+% merge of branch a to other branch b followed by unrelated push on branch a
+pushing to ../f
+searching for changes
+adding changesets
+adding manifests
+adding file changes
+added 1 changesets with 1 changes to 1 files (-1 heads)
+0
+pushing to ../f
+searching for changes
+adding changesets
+adding manifests
+adding file changes
+added 1 changesets with 1 changes to 1 files (+1 heads)
+0
+% cheating the counting algorithm
+pushing to ../f
+searching for changes
+adding changesets
+adding manifests
+adding file changes
+added 2 changesets with 2 changes to 1 files
+0
--- a/tests/test-qrecord.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-qrecord.out	Wed Jul 08 17:03:16 2009 -0700
@@ -5,11 +5,12 @@
 basic commands:
 
  add        add the specified files on the next commit
- annotate   show changeset information per file line
+ annotate   show changeset information by line for each file
  clone      make a copy of an existing repository
  commit     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        show revision history of entire repository or files
  merge      merge working directory with another revision
@@ -27,7 +28,8 @@
 
 interactively record a new patch
 
-    see 'hg help qnew' & 'hg help record' for more information and usage
+    See 'hg help qnew' & 'hg help record' for more information and
+    usage.
 
 options:
 
--- a/tests/test-rawcommit1	Wed Jul 08 17:01:18 2009 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-#!/bin/sh
-hg --debug init
-echo this is a1 > a
-hg add a
-hg commit -m0 -d "1000000 0"
-echo this is b1 > b
-hg add b
-hg commit -m1 -d "1000000 0"
-hg manifest --debug 1
-echo this is c1 > c
-hg rawcommit -p 1 -d "1000000 0" -m2 c
-hg manifest --debug 2
-hg -v parents
-rm b
-hg rawcommit -p 2 -d "1000000 0" -m3 b
-hg manifest --debug 3
-hg -v parents
-echo this is a22 > a
-hg rawcommit -p 3 -d "1000000 0" -m4 a
-hg manifest --debug 4
-hg -v parents
-echo this is c22 > c
-hg rawcommit -p 1 -d "1000000 0" -m5 c
-hg manifest --debug 5
-hg -v parents
-# merge, but no files changed
-hg rawcommit -p 4 -p 5 -d "1000000 0" -m6
-hg manifest --debug 6
-hg -v parents
-# no changes what-so-ever
-hg rawcommit -p 6 -d "1000000 0" -m7
-hg manifest --debug 7
-hg -v parents
--- a/tests/test-rawcommit1.out	Wed Jul 08 17:01:18 2009 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,75 +0,0 @@
-05f9e54f4c9b86b09099803d8b49a50edcb4eaab 644   a
-54837d97f2932a8194e69745a280a2c11e61ff9c 644   b
-(the rawcommit command is deprecated)
-05f9e54f4c9b86b09099803d8b49a50edcb4eaab 644   a
-54837d97f2932a8194e69745a280a2c11e61ff9c 644   b
-76d5e637cbec1bcc04a5a3fa4bcc7d13f6847c00 644   c
-changeset:   2:e110db3db549
-tag:         tip
-user:        test
-date:        Mon Jan 12 13:46:40 1970 +0000
-files:       c
-description:
-2
-
-
-(the rawcommit command is deprecated)
-05f9e54f4c9b86b09099803d8b49a50edcb4eaab 644   a
-76d5e637cbec1bcc04a5a3fa4bcc7d13f6847c00 644   c
-changeset:   3:20652cf30cc0
-tag:         tip
-user:        test
-date:        Mon Jan 12 13:46:40 1970 +0000
-files:       b
-description:
-3
-
-
-(the rawcommit command is deprecated)
-d6e3c4976c13feb1728cd3ac851abaf7256a5c23 644   a
-76d5e637cbec1bcc04a5a3fa4bcc7d13f6847c00 644   c
-changeset:   4:42556b925639
-tag:         tip
-user:        test
-date:        Mon Jan 12 13:46:40 1970 +0000
-files:       a
-description:
-4
-
-
-(the rawcommit command is deprecated)
-05f9e54f4c9b86b09099803d8b49a50edcb4eaab 644   a
-54837d97f2932a8194e69745a280a2c11e61ff9c 644   b
-3570202ceac2b52517df64ebd0a062cb0d8fe33a 644   c
-changeset:   4:42556b925639
-user:        test
-date:        Mon Jan 12 13:46:40 1970 +0000
-files:       a
-description:
-4
-
-
-(the rawcommit command is deprecated)
-d6e3c4976c13feb1728cd3ac851abaf7256a5c23 644   a
-76d5e637cbec1bcc04a5a3fa4bcc7d13f6847c00 644   c
-changeset:   6:8a0c9254b0ab
-tag:         tip
-parent:      4:42556b925639
-parent:      5:f56d4c64ab98
-user:        test
-date:        Mon Jan 12 13:46:40 1970 +0000
-description:
-6
-
-
-(the rawcommit command is deprecated)
-d6e3c4976c13feb1728cd3ac851abaf7256a5c23 644   a
-76d5e637cbec1bcc04a5a3fa4bcc7d13f6847c00 644   c
-changeset:   7:a5a6e1f312b9
-tag:         tip
-user:        test
-date:        Mon Jan 12 13:46:40 1970 +0000
-description:
-7
-
-
--- a/tests/test-rebase-mq-skip.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-rebase-mq-skip.out	Wed Jul 08 17:03:16 2009 -0700
@@ -6,7 +6,6 @@
 
 % Rebase
 1 files updated, 0 files merged, 1 files removed, 0 files unresolved
-nothing changed
 saving bundle to 
 adding branch
 adding changesets
--- a/tests/test-rebase-scenario-global.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-rebase-scenario-global.out	Wed Jul 08 17:03:16 2009 -0700
@@ -52,7 +52,6 @@
 o  0: A
 
 % C onto F - skip of E
-nothing changed
 saving bundle to 
 adding branch
 adding changesets
@@ -71,7 +70,6 @@
 o  0: A
 
 % D onto C - rebase of a branching point (skip E)
-nothing changed
 saving bundle to 
 adding branch
 adding changesets
--- a/tests/test-record	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-record	Wed Jul 08 17:03:16 2009 -0700
@@ -296,3 +296,23 @@
 y
 EOF
 echo; hg tip --config diff.git=True -p
+
+
+echo % with win32ext
+cd ..
+echo '[extensions]' >> .hg/hgrc
+echo 'win32text = ' >> .hg/hgrc
+echo '[decode]' >> .hg/hgrc
+echo '** = cleverdecode:' >> .hg/hgrc
+echo '[encode]' >> .hg/hgrc
+echo '** = cleverencode:' >> .hg/hgrc
+echo '[patch]' >> .hg/hgrc
+echo 'eol = crlf' >> .hg/hgrc
+
+echo d >> subdir/f1
+hg record -d '23 0' -mw1 <<EOF
+y
+y
+EOF
+echo; hg tip -p
+
--- a/tests/test-record.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-record.out	Wed Jul 08 17:03:16 2009 -0700
@@ -27,10 +27,8 @@
 
 options:
 
- -A --addremove     mark new/missing files as added/removed before
-                    committing
-    --close-branch  mark a branch as closed, hiding it from the branch
-                    list
+ -A --addremove     mark new/missing files as added/removed before committing
+    --close-branch  mark a branch as closed, hiding it from the branch list
  -I --include       include names matching the given patterns
  -X --exclude       exclude names matching the given patterns
  -m --message       use <text> as commit message
@@ -53,9 +51,7 @@
 % select files but no hunks
 diff --git a/empty-rw b/empty-rw
 new file mode 100644
-examine changes to 'empty-rw'? [Ynsfdaq?]  transaction abort!
-rollback completed
-abort: empty commit message
+examine changes to 'empty-rw'? [Ynsfdaq?]  abort: empty commit message
 
 changeset:   -1:000000000000
 tag:         tip
@@ -574,3 +570,27 @@
  b
 +c
 
+% with win32ext
+diff --git a/subdir/f1 b/subdir/f1
+1 hunks, 1 lines changed
+examine changes to 'subdir/f1'? [Ynsfdaq?]  @@ -3,3 +3,4 @@
+ a
+ b
+ c
++d
+record this change to 'subdir/f1'? [Ynsfdaq?]  
+changeset:   25:49b3838dc9e7
+tag:         tip
+user:        test
+date:        Thu Jan 01 00:00:23 1970 +0000
+summary:     w1
+
+diff -r 8fd83ff53ce6 -r 49b3838dc9e7 subdir/f1
+--- a/subdir/f1	Thu Jan 01 00:00:22 1970 +0000
++++ b/subdir/f1	Thu Jan 01 00:00:23 1970 +0000
+@@ -3,3 +3,4 @@
+ a
+ b
+ c
++d
+
--- a/tests/test-remove.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-remove.out	Wed Jul 08 17:03:16 2009 -0700
@@ -1,4 +1,5 @@
 % file not managed
+not removing foo: file is untracked
 ? foo
 ./foo
 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
@@ -7,17 +8,23 @@
 A bar
 ./bar
 ./foo
-0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+0 files updated, 0 files merged, 0 files removed, 0 files unresolved
 % 01 state clean, options none
 R foo
+? bar
+./bar
 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
 % 02 state modified, options none
 not removing foo: file is modified (use -f to force removal)
 M foo
+? bar
+./bar
 ./foo
 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
 % 03 state missing, options none
 R foo
+? bar
+./bar
 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
 % 10 state added, options -f
 ? bar
@@ -38,18 +45,24 @@
 A bar
 ./bar
 ./foo
-0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+0 files updated, 0 files merged, 0 files removed, 0 files unresolved
 % 21 state clean, options -A
 not removing foo: file still exists (use -f to force removal)
+? bar
+./bar
 ./foo
 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
 % 22 state modified, options -A
 not removing foo: file still exists (use -f to force removal)
 M foo
+? bar
+./bar
 ./foo
 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
 % 23 state missing, options -A
 R foo
+? bar
+./bar
 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
 % 30 state added, options -Af
 ? bar
--- a/tests/test-rename	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-rename	Wed Jul 08 17:03:16 2009 -0700
@@ -14,65 +14,77 @@
 hg rename d1/d11/a1 d2/c
 hg status -C
 hg update -C
+rm d2/c
 
 echo "# rename --after a single file"
 mv d1/d11/a1 d2/c
 hg rename --after d1/d11/a1 d2/c
 hg status -C
 hg update -C
+rm d2/c
 
 echo "# move a single file to an existing directory"
 hg rename d1/d11/a1 d2
 hg status -C
 hg update -C
+rm d2/a1
 
 echo "# move --after a single file to an existing directory"
 mv d1/d11/a1 d2
 hg rename --after d1/d11/a1 d2
 hg status -C
 hg update -C
+rm d2/a1
 
 echo "# rename a file using a relative path"
 (cd d1/d11; hg rename ../../d2/b e)
 hg status -C
 hg update -C
+rm d1/d11/e
 
 echo "# rename --after a file using a relative path"
 (cd d1/d11; mv ../../d2/b e; hg rename --after ../../d2/b e)
 hg status -C
 hg update -C
+rm d1/d11/e
 
 echo "# rename directory d1 as d3"
 hg rename d1/ d3
 hg status -C
 hg update -C
+rm -rf d3
 
 echo "# rename --after directory d1 as d3"
 mv d1 d3
 hg rename --after d1 d3
 hg status -C
 hg update -C
+rm -rf d3
 
 echo "# move a directory using a relative path"
 (cd d2; mkdir d3; hg rename ../d1/d11 d3)
 hg status -C
 hg update -C
+rm -rf d2/d3
 
 echo "# move --after a directory using a relative path"
 (cd d2; mkdir d3; mv ../d1/d11 d3; hg rename --after ../d1/d11 d3)
 hg status -C
 hg update -C
+rm -rf d2/d3
 
 echo "# move directory d1/d11 to an existing directory d2 (removes empty d1)"
 hg rename d1/d11/ d2
 hg status -C
 hg update -C
+rm -rf d2/d11
 
 echo "# move directories d1 and d2 to a new directory d3"
 mkdir d3
 hg rename d1 d2 d3
 hg status -C
 hg update -C
+rm -rf d3
 
 echo "# move --after directories d1 and d2 to a new directory d3"
 mkdir d3
@@ -80,6 +92,7 @@
 hg rename --after d1 d2 d3
 hg status -C
 hg update -C
+rm -rf d3
 
 echo "# move everything under directory d1 to existing directory d2, do not"
 echo "# overwrite existing files (d2/b)"
@@ -87,6 +100,7 @@
 hg status -C
 diff d1/b d2/b
 hg update -C
+rm d2/a d2/ba d2/d11/a1
 
 echo "# attempt to move one file into a non-existent directory"
 hg rename d1/a dx/
@@ -102,6 +116,7 @@
 hg rename 'glob:d1/**' d2/d21
 hg status -C
 hg update -C
+rm -rf d2/d21
 
 echo "# move --after some files under d1 to d2/d21 (glob)"
 mkdir d2/d21
@@ -109,12 +124,14 @@
 hg rename --after 'glob:d1/**' d2/d21
 hg status -C
 hg update -C
+rm -rf d2/d21
 
 echo "# move every file under d1 starting with an 'a' to d2/d21 (regexp)"
 mkdir d2/d21
 hg rename 're:d1/([^a][^/]*/)*a.*' d2/d21
 hg status -C
 hg update -C
+rm -rf d2/d21
 
 echo "# attempt to overwrite an existing file"
 echo "ca" > d1/ca
@@ -127,24 +144,28 @@
 hg rename --force d1/ba d1/ca
 hg status -C
 hg update -C
+rm d1/ca
 
 echo "# replace a symlink with a file"
 ln -s ba d1/ca
 hg rename --force d1/ba d1/ca
 hg status -C
 hg update -C
+rm d1/ca
 
 echo "# do not copy more than one source file to the same destination file"
 mkdir d3
 hg rename d1/* d2/* d3
 hg status -C
 hg update -C
+rm -rf d3
 
 echo "# move a whole subtree with \"hg rename .\""
 mkdir d3
 (cd d1; hg rename . ../d3)
 hg status -C
 hg update -C
+rm -rf d3
 
 echo "# move a whole subtree with \"hg rename --after .\""
 mkdir d3
@@ -152,23 +173,27 @@
 (cd d1; hg rename --after . ../d3)
 hg status -C
 hg update -C
+rm -rf d3
 
 echo "# move the parent tree with \"hg rename ..\""
 (cd d1/d11; hg rename .. ../../d3)
 hg status -C
 hg update -C
+rm -rf d3
 
 echo "# skip removed files"
 hg remove d1/b
 hg rename d1 d3
 hg status -C
 hg update -C
+rm -rf d3
 
 echo "# transitive rename"
 hg rename d1/b d1/bb
 hg rename d1/bb d1/bc
 hg status -C
 hg update -C
+rm d1/bc
 
 echo "# transitive rename --after"
 hg rename d1/b d1/bb
@@ -176,6 +201,7 @@
 hg rename --after d1/bb d1/bc
 hg status -C
 hg update -C
+rm d1/bc
 
 echo "# idempotent renames (d1/b -> d1/bb followed by d1/bb -> d1/b)"
 hg rename d1/b d1/bb
--- a/tests/test-rename-dir-merge.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-rename-dir-merge.out	Wed Jul 08 17:03:16 2009 -0700
@@ -5,9 +5,6 @@
 moving a/b to b/b
 2 files updated, 0 files merged, 2 files removed, 0 files unresolved
 created new head
-resolving manifests
- overwrite None partial False
- ancestor f9b20c0d4c51 local ce36d17b18fb+ remote 55119e611c80
   searching for copies back to rev 1
   unmatched files in local:
    a/c
@@ -22,6 +19,9 @@
   dir a/ -> b/
   file a/c -> b/c
   file a/d -> b/d
+resolving manifests
+ overwrite None partial False
+ ancestor f9b20c0d4c51 local ce36d17b18fb+ remote 55119e611c80
  a/d: remote renamed directory to b/d -> d
  a/c: remote renamed directory to b/c -> d
  a/b: other deleted -> r
@@ -47,9 +47,6 @@
 ? b/d
 b/c renamed from a/c:354ae8da6e890359ef49ade27b68bbc361f3ca88
 0 files updated, 0 files merged, 1 files removed, 0 files unresolved
-resolving manifests
- overwrite None partial False
- ancestor f9b20c0d4c51 local 55119e611c80+ remote ce36d17b18fb
   searching for copies back to rev 1
   unmatched files in local:
    b/a
@@ -63,6 +60,9 @@
   checking for directory renames
   dir a/ -> b/
   file a/c -> b/c
+resolving manifests
+ overwrite None partial False
+ ancestor f9b20c0d4c51 local 55119e611c80+ remote ce36d17b18fb
  None: local renamed directory to b/c -> d
 getting a/c to b/c
 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
--- a/tests/test-rename-merge1.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-rename-merge1.out	Wed Jul 08 17:03:16 2009 -0700
@@ -2,9 +2,6 @@
 2 files updated, 0 files merged, 2 files removed, 0 files unresolved
 created new head
 merge
-resolving manifests
- overwrite None partial False
- ancestor af1939970a1c local f26ec4fc3fa3+ remote 8e765a822af2
   searching for copies back to rev 1
   unmatched files in local:
    c2
@@ -17,6 +14,9 @@
    b2 -> a2 !
   checking for directory renames
  a2: divergent renames -> dr
+resolving manifests
+ overwrite None partial False
+ ancestor af1939970a1c local f26ec4fc3fa3+ remote 8e765a822af2
  a: remote moved to b -> m
  b2: remote created -> g
 preserving a for resolve of b
--- a/tests/test-rename-merge2.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-rename-merge2.out	Wed Jul 08 17:03:16 2009 -0700
@@ -2,15 +2,15 @@
 --------------
 test L:up a   R:nc a b W:       - 1  get local a to b
 --------------
-resolving manifests
- overwrite None partial False
- ancestor 924404dff337 local e300d1c794ec+ remote 735846fee2d7
   searching for copies back to rev 1
   unmatched files in other:
    b
   all copies found (* = to merge, ! = divergent):
    b -> a *
   checking for directory renames
+resolving manifests
+ overwrite None partial False
+ ancestor 924404dff337 local e300d1c794ec+ remote 735846fee2d7
  rev: versions differ -> m
  a: remote copied to b -> m
 preserving a for resolve of b
@@ -34,17 +34,17 @@
 --------------
 test L:nc a b R:up a   W:       - 2  get rem change to a and b
 --------------
-resolving manifests
- overwrite None partial False
- ancestor 924404dff337 local ac809aeed39a+ remote f4db7e329e71
   searching for copies back to rev 1
   unmatched files in local:
    b
   all copies found (* = to merge, ! = divergent):
    b -> a *
   checking for directory renames
+resolving manifests
+ overwrite None partial False
+ ancestor 924404dff337 local ac809aeed39a+ remote f4db7e329e71
  a: remote is newer -> g
- b: local copied to a -> m
+ b: local copied/moved to a -> m
  rev: versions differ -> m
 preserving b for resolve of b
 preserving rev for resolve of rev
@@ -68,15 +68,15 @@
 --------------
 test L:up a   R:nm a b W:       - 3  get local a change to b, remove a
 --------------
-resolving manifests
- overwrite None partial False
- ancestor 924404dff337 local e300d1c794ec+ remote e03727d2d66b
   searching for copies back to rev 1
   unmatched files in other:
    b
   all copies found (* = to merge, ! = divergent):
    b -> a *
   checking for directory renames
+resolving manifests
+ overwrite None partial False
+ ancestor 924404dff337 local e300d1c794ec+ remote e03727d2d66b
  rev: versions differ -> m
  a: remote moved to b -> m
 preserving a for resolve of b
@@ -100,16 +100,16 @@
 --------------
 test L:nm a b R:up a   W:       - 4  get remote change to b
 --------------
-resolving manifests
- overwrite None partial False
- ancestor 924404dff337 local ecf3cb2a4219+ remote f4db7e329e71
   searching for copies back to rev 1
   unmatched files in local:
    b
   all copies found (* = to merge, ! = divergent):
    b -> a *
   checking for directory renames
- b: local moved to a -> m
+resolving manifests
+ overwrite None partial False
+ ancestor 924404dff337 local ecf3cb2a4219+ remote f4db7e329e71
+ b: local copied/moved to a -> m
  rev: versions differ -> m
 preserving b for resolve of b
 preserving rev for resolve of rev
@@ -131,15 +131,15 @@
 --------------
 test L:       R:nc a b W:       - 5  get b
 --------------
-resolving manifests
- overwrite None partial False
- ancestor 924404dff337 local 94b33a1b7f2d+ remote 735846fee2d7
   searching for copies back to rev 1
   unmatched files in other:
    b
   all copies found (* = to merge, ! = divergent):
    b -> a 
   checking for directory renames
+resolving manifests
+ overwrite None partial False
+ ancestor 924404dff337 local 94b33a1b7f2d+ remote 735846fee2d7
  rev: versions differ -> m
  b: remote created -> g
 preserving rev for resolve of rev
@@ -158,15 +158,15 @@
 --------------
 test L:nc a b R:       W:       - 6  nothing
 --------------
-resolving manifests
- overwrite None partial False
- ancestor 924404dff337 local ac809aeed39a+ remote 97c705ade336
   searching for copies back to rev 1
   unmatched files in local:
    b
   all copies found (* = to merge, ! = divergent):
    b -> a 
   checking for directory renames
+resolving manifests
+ overwrite None partial False
+ ancestor 924404dff337 local ac809aeed39a+ remote 97c705ade336
  rev: versions differ -> m
 preserving rev for resolve of rev
 picked tool 'python ../merge' for rev (binary False symlink False)
@@ -183,15 +183,15 @@
 --------------
 test L:       R:nm a b W:       - 7  get b
 --------------
-resolving manifests
- overwrite None partial False
- ancestor 924404dff337 local 94b33a1b7f2d+ remote e03727d2d66b
   searching for copies back to rev 1
   unmatched files in other:
    b
   all copies found (* = to merge, ! = divergent):
    b -> a 
   checking for directory renames
+resolving manifests
+ overwrite None partial False
+ ancestor 924404dff337 local 94b33a1b7f2d+ remote e03727d2d66b
  a: other deleted -> r
  rev: versions differ -> m
  b: remote created -> g
@@ -211,15 +211,15 @@
 --------------
 test L:nm a b R:       W:       - 8  nothing
 --------------
-resolving manifests
- overwrite None partial False
- ancestor 924404dff337 local ecf3cb2a4219+ remote 97c705ade336
   searching for copies back to rev 1
   unmatched files in local:
    b
   all copies found (* = to merge, ! = divergent):
    b -> a 
   checking for directory renames
+resolving manifests
+ overwrite None partial False
+ ancestor 924404dff337 local ecf3cb2a4219+ remote 97c705ade336
  rev: versions differ -> m
 preserving rev for resolve of rev
 picked tool 'python ../merge' for rev (binary False symlink False)
@@ -235,10 +235,10 @@
 --------------
 test L:um a b R:um a b W:       - 9  do merge with ancestor in a
 --------------
+  searching for copies back to rev 1
 resolving manifests
  overwrite None partial False
  ancestor 924404dff337 local ec03c2ca8642+ remote 79cc6877a3b7
-  searching for copies back to rev 1
  b: versions differ -> m
  rev: versions differ -> m
 preserving b for resolve of b
@@ -259,9 +259,6 @@
 --------------
 test L:nm a b R:nm a c W:       - 11 get c, keep b
 --------------
-resolving manifests
- overwrite None partial False
- ancestor 924404dff337 local ecf3cb2a4219+ remote e6abcc1a30c2
   searching for copies back to rev 1
   unmatched files in local:
    b
@@ -272,6 +269,9 @@
    b -> a !
   checking for directory renames
  a: divergent renames -> dr
+resolving manifests
+ overwrite None partial False
+ ancestor 924404dff337 local ecf3cb2a4219+ remote e6abcc1a30c2
  rev: versions differ -> m
  c: remote created -> g
 preserving rev for resolve of rev
@@ -293,10 +293,10 @@
 --------------
 test L:nc a b R:up b   W:       - 12 merge b no ancestor
 --------------
+  searching for copies back to rev 1
 resolving manifests
  overwrite None partial False
  ancestor 924404dff337 local ac809aeed39a+ remote af30c7647fc7
-  searching for copies back to rev 1
  b: versions differ -> m
  rev: versions differ -> m
 preserving b for resolve of b
@@ -318,10 +318,10 @@
 --------------
 test L:up b   R:nm a b W:       - 13 merge b no ancestor
 --------------
+  searching for copies back to rev 1
 resolving manifests
  overwrite None partial False
  ancestor 924404dff337 local 59318016310c+ remote e03727d2d66b
-  searching for copies back to rev 1
  a: other deleted -> r
  b: versions differ -> m
  rev: versions differ -> m
@@ -344,10 +344,10 @@
 --------------
 test L:nc a b R:up a b W:       - 14 merge b no ancestor
 --------------
+  searching for copies back to rev 1
 resolving manifests
  overwrite None partial False
  ancestor 924404dff337 local ac809aeed39a+ remote 8dbce441892a
-  searching for copies back to rev 1
  a: remote is newer -> g
  b: versions differ -> m
  rev: versions differ -> m
@@ -371,10 +371,10 @@
 --------------
 test L:up b   R:nm a b W:       - 15 merge b no ancestor, remove a
 --------------
+  searching for copies back to rev 1
 resolving manifests
  overwrite None partial False
  ancestor 924404dff337 local 59318016310c+ remote e03727d2d66b
-  searching for copies back to rev 1
  a: other deleted -> r
  b: versions differ -> m
  rev: versions differ -> m
@@ -397,10 +397,10 @@
 --------------
 test L:nc a b R:up a b W:       - 16 get a, merge b no ancestor
 --------------
+  searching for copies back to rev 1
 resolving manifests
  overwrite None partial False
  ancestor 924404dff337 local ac809aeed39a+ remote 8dbce441892a
-  searching for copies back to rev 1
  a: remote is newer -> g
  b: versions differ -> m
  rev: versions differ -> m
@@ -424,10 +424,10 @@
 --------------
 test L:up a b R:nc a b W:       - 17 keep a, merge b no ancestor
 --------------
+  searching for copies back to rev 1
 resolving manifests
  overwrite None partial False
  ancestor 924404dff337 local 0b76e65c8289+ remote 735846fee2d7
-  searching for copies back to rev 1
  b: versions differ -> m
  rev: versions differ -> m
 preserving b for resolve of b
@@ -449,10 +449,10 @@
 --------------
 test L:nm a b R:up a b W:       - 18 merge b no ancestor
 --------------
+  searching for copies back to rev 1
 resolving manifests
  overwrite None partial False
  ancestor 924404dff337 local ecf3cb2a4219+ remote 8dbce441892a
-  searching for copies back to rev 1
  b: versions differ -> m
  rev: versions differ -> m
 remote changed a which local deleted
@@ -478,10 +478,10 @@
 --------------
 test L:up a b R:nm a b W:       - 19 merge b no ancestor, prompt remove a
 --------------
+  searching for copies back to rev 1
 resolving manifests
  overwrite None partial False
  ancestor 924404dff337 local 0b76e65c8289+ remote e03727d2d66b
-  searching for copies back to rev 1
  local changed a which remote deleted
 use (c)hanged version or (d)elete? c
  a: prompt keep -> a
@@ -506,15 +506,15 @@
 --------------
 test L:up a   R:um a b W:       - 20 merge a and b to b, remove a
 --------------
-resolving manifests
- overwrite None partial False
- ancestor 924404dff337 local e300d1c794ec+ remote 79cc6877a3b7
   searching for copies back to rev 1
   unmatched files in other:
    b
   all copies found (* = to merge, ! = divergent):
    b -> a *
   checking for directory renames
+resolving manifests
+ overwrite None partial False
+ ancestor 924404dff337 local e300d1c794ec+ remote 79cc6877a3b7
  rev: versions differ -> m
  a: remote moved to b -> m
 preserving a for resolve of b
@@ -537,16 +537,16 @@
 --------------
 test L:um a b R:up a   W:       - 21 merge a and b to b
 --------------
-resolving manifests
- overwrite None partial False
- ancestor 924404dff337 local ec03c2ca8642+ remote f4db7e329e71
   searching for copies back to rev 1
   unmatched files in local:
    b
   all copies found (* = to merge, ! = divergent):
    b -> a *
   checking for directory renames
- b: local moved to a -> m
+resolving manifests
+ overwrite None partial False
+ ancestor 924404dff337 local ec03c2ca8642+ remote f4db7e329e71
+ b: local copied/moved to a -> m
  rev: versions differ -> m
 preserving b for resolve of b
 preserving rev for resolve of rev
@@ -567,9 +567,6 @@
 --------------
 test L:nm a b R:up a c W:       - 23 get c, keep b
 --------------
-resolving manifests
- overwrite None partial False
- ancestor 924404dff337 local ecf3cb2a4219+ remote 2b958612230f
   searching for copies back to rev 1
   unmatched files in local:
    b
@@ -578,7 +575,10 @@
   all copies found (* = to merge, ! = divergent):
    b -> a *
   checking for directory renames
- b: local moved to a -> m
+resolving manifests
+ overwrite None partial False
+ ancestor 924404dff337 local ecf3cb2a4219+ remote 2b958612230f
+ b: local copied/moved to a -> m
  rev: versions differ -> m
  c: remote created -> g
 preserving b for resolve of b
--- a/tests/test-rename.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-rename.out	Wed Jul 08 17:03:16 2009 -0700
@@ -2,32 +2,32 @@
 A d2/c
   d1/d11/a1
 R d1/d11/a1
-1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
 # rename --after a single file
 A d2/c
   d1/d11/a1
 R d1/d11/a1
-1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
 # move a single file to an existing directory
 A d2/a1
   d1/d11/a1
 R d1/d11/a1
-1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
 # move --after a single file to an existing directory
 A d2/a1
   d1/d11/a1
 R d1/d11/a1
-1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
 # rename a file using a relative path
 A d1/d11/e
   d2/b
 R d2/b
-1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
 # rename --after a file using a relative path
 A d1/d11/e
   d2/b
 R d2/b
-1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
 # rename directory d1 as d3
 moving d1/a to d3/a
 moving d1/b to d3/b
@@ -45,7 +45,7 @@
 R d1/b
 R d1/ba
 R d1/d11/a1
-4 files updated, 0 files merged, 4 files removed, 0 files unresolved
+4 files updated, 0 files merged, 0 files removed, 0 files unresolved
 # rename --after directory d1 as d3
 moving d1/a to d3/a
 moving d1/b to d3/b
@@ -63,25 +63,25 @@
 R d1/b
 R d1/ba
 R d1/d11/a1
-4 files updated, 0 files merged, 4 files removed, 0 files unresolved
+4 files updated, 0 files merged, 0 files removed, 0 files unresolved
 # move a directory using a relative path
 moving ../d1/d11/a1 to d3/d11/a1
 A d2/d3/d11/a1
   d1/d11/a1
 R d1/d11/a1
-1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
 # move --after a directory using a relative path
 moving ../d1/d11/a1 to d3/d11/a1
 A d2/d3/d11/a1
   d1/d11/a1
 R d1/d11/a1
-1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
 # move directory d1/d11 to an existing directory d2 (removes empty d1)
 moving d1/d11/a1 to d2/d11/a1
 A d2/d11/a1
   d1/d11/a1
 R d1/d11/a1
-1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
 # move directories d1 and d2 to a new directory d3
 moving d1/a to d3/d1/a
 moving d1/b to d3/d1/b
@@ -103,7 +103,7 @@
 R d1/ba
 R d1/d11/a1
 R d2/b
-5 files updated, 0 files merged, 5 files removed, 0 files unresolved
+5 files updated, 0 files merged, 0 files removed, 0 files unresolved
 # move --after directories d1 and d2 to a new directory d3
 moving d1/a to d3/d1/a
 moving d1/b to d3/d1/b
@@ -125,7 +125,7 @@
 R d1/ba
 R d1/d11/a1
 R d2/b
-5 files updated, 0 files merged, 5 files removed, 0 files unresolved
+5 files updated, 0 files merged, 0 files removed, 0 files unresolved
 # move everything under directory d1 to existing directory d2, do not
 # overwrite existing files (d2/b)
 d2/b: not overwriting - file exists
@@ -143,7 +143,7 @@
 < d1/b
 ---
 > d2/b
-3 files updated, 0 files merged, 3 files removed, 0 files unresolved
+3 files updated, 0 files merged, 0 files removed, 0 files unresolved
 # attempt to move one file into a non-existent directory
 abort: destination dx/ is not a directory
 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
@@ -167,7 +167,7 @@
 R d1/b
 R d1/ba
 R d1/d11/a1
-4 files updated, 0 files merged, 4 files removed, 0 files unresolved
+4 files updated, 0 files merged, 0 files removed, 0 files unresolved
 # move --after some files under d1 to d2/d21 (glob)
 moving d1/a to d2/d21/a
 moving d1/d11/a1 to d2/d21/a1
@@ -177,7 +177,7 @@
   d1/d11/a1
 R d1/a
 R d1/d11/a1
-2 files updated, 0 files merged, 2 files removed, 0 files unresolved
+2 files updated, 0 files merged, 0 files removed, 0 files unresolved
 # move every file under d1 starting with an 'a' to d2/d21 (regexp)
 moving d1/a to d2/d21/a
 moving d1/d11/a1 to d2/d21/a1
@@ -187,7 +187,7 @@
   d1/d11/a1
 R d1/a
 R d1/d11/a1
-2 files updated, 0 files merged, 2 files removed, 0 files unresolved
+2 files updated, 0 files merged, 0 files removed, 0 files unresolved
 # attempt to overwrite an existing file
 d1/ca: not overwriting - file exists
 ? d1/ca
@@ -196,12 +196,12 @@
 A d1/ca
   d1/ba
 R d1/ba
-1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
 # replace a symlink with a file
 A d1/ca
   d1/ba
 R d1/ba
-1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
 # do not copy more than one source file to the same destination file
 moving d1/d11/a1 to d3/d11/a1
 d3/b: not overwriting - d2/b collides with d1/b
@@ -217,7 +217,7 @@
 R d1/b
 R d1/ba
 R d1/d11/a1
-4 files updated, 0 files merged, 4 files removed, 0 files unresolved
+4 files updated, 0 files merged, 0 files removed, 0 files unresolved
 # move a whole subtree with "hg rename ."
 moving a to ../d3/d1/a
 moving b to ../d3/d1/b
@@ -235,7 +235,7 @@
 R d1/b
 R d1/ba
 R d1/d11/a1
-4 files updated, 0 files merged, 4 files removed, 0 files unresolved
+4 files updated, 0 files merged, 0 files removed, 0 files unresolved
 # move a whole subtree with "hg rename --after ."
 moving a to ../d3/a
 moving b to ../d3/b
@@ -253,7 +253,7 @@
 R d1/b
 R d1/ba
 R d1/d11/a1
-4 files updated, 0 files merged, 4 files removed, 0 files unresolved
+4 files updated, 0 files merged, 0 files removed, 0 files unresolved
 # move the parent tree with "hg rename .."
 moving ../a to ../../d3/a
 moving ../b to ../../d3/b
@@ -271,7 +271,7 @@
 R d1/b
 R d1/ba
 R d1/d11/a1
-4 files updated, 0 files merged, 4 files removed, 0 files unresolved
+4 files updated, 0 files merged, 0 files removed, 0 files unresolved
 # skip removed files
 moving d1/a to d3/a
 moving d1/ba to d3/ba
@@ -286,17 +286,17 @@
 R d1/b
 R d1/ba
 R d1/d11/a1
-4 files updated, 0 files merged, 3 files removed, 0 files unresolved
+4 files updated, 0 files merged, 0 files removed, 0 files unresolved
 # transitive rename
 A d1/bc
   d1/b
 R d1/b
-1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
 # transitive rename --after
 A d1/bc
   d1/b
 R d1/b
-1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
 # idempotent renames (d1/b -> d1/bb followed by d1/bb -> d1/b)
 M d1/b
 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
--- a/tests/test-repair-strip.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-repair-strip.out	Wed Jul 08 17:03:16 2009 -0700
@@ -62,7 +62,9 @@
 checking changesets
 checking manifests
  manifest@?: rev 2 points to nonexistent changeset 2
+ manifest@?: 3362547cdf64 not in changesets
  manifest@?: rev 3 points to nonexistent changeset 3
+ manifest@?: 265a85892ecb not in changesets
 crosschecking files in changesets and manifests
  c@3: in manifest but not in changeset
 checking files
@@ -71,7 +73,7 @@
  c@?: rev 0 points to nonexistent changeset 3
 3 files, 2 changesets, 4 total revisions
 1 warnings encountered!
-5 integrity errors encountered!
+7 integrity errors encountered!
 (first damaged changeset appears to be 3)
 % journal contents
 00changelog.i
--- a/tests/test-revert.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-revert.out	Wed Jul 08 17:03:16 2009 -0700
@@ -52,7 +52,7 @@
 R d
 %% should silently keep d removed
 R d
-1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
 reverting c
 %% should print non-executable
 non-executable
--- a/tests/test-revlog-ancestry.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-revlog-ancestry.py	Wed Jul 08 17:03:16 2009 -0700
@@ -1,6 +1,5 @@
 import os
 from mercurial import hg, ui, merge
-from hgext import graphlog
 
 u = ui.ui()
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-revlog-group-emptyiter	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,23 @@
+#! /bin/sh
+
+# issue 1678
+
+echo "# -- setting up base repo"
+hg init a
+cd a
+touch a
+hg ci -Am a
+cd ..
+
+echo "# -- cloning base repo"
+hg clone a b
+cd b
+
+echo "# -- setting up cset to push"
+hg up null
+touch a
+hg ci -Am b # different msg so we get a clog new entry
+
+echo "# -- pushing"
+hg push -f ../a
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-revlog-group-emptyiter.out	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,16 @@
+# -- setting up base repo
+adding a
+# -- cloning base repo
+updating working directory
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+# -- setting up cset to push
+0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+adding a
+created new head
+# -- pushing
+pushing to ../a
+searching for changes
+adding changesets
+adding manifests
+adding file changes
+added 1 changesets with 0 changes to 0 files (+1 heads)
--- a/tests/test-simplemerge-cmd	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-simplemerge-cmd	Wed Jul 08 17:03:16 2009 -0700
@@ -47,7 +47,7 @@
 python simplemerge -p binary-local base other
 
 echo '% binary file --text'
-python simplemerge -a -p binary-local base other
+python simplemerge -a -p binary-local base other 2>&1 | $TESTDIR/printrepr.py
 
 echo '% help'
 python simplemerge --help
Binary file tests/test-simplemerge-cmd.out has changed
--- a/tests/test-status-color	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-status-color	Wed Jul 08 17:03:16 2009 -0700
@@ -61,6 +61,9 @@
 rm deleted
 hg copy modified copied
 
+echo "% test unknown color"
+hg --config color.status.modified=periwinkle status --color=always
+
 # Run status with 2 different flags.
 # Check if result is the same or different.
 # If result is not as expected, raise error
--- a/tests/test-status-color.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-status-color.out	Wed Jul 08 17:03:16 2009 -0700
@@ -124,3 +124,11 @@
 adding deleted
 adding modified
 adding removed
+% test unknown color
+ignoring unknown color/effect 'periwinkle' (configured in color.status.modified)
+M modified
+A added
+A copied
+R removed
+! deleted
+? unknown
--- a/tests/test-strict.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-strict.out	Wed Jul 08 17:03:16 2009 -0700
@@ -6,11 +6,12 @@
 basic commands:
 
  add        add the specified files on the next commit
- annotate   show changeset information per file line
+ annotate   show changeset information by line for each file
  clone      make a copy of an existing repository
  commit     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        show revision history of entire repository or files
  merge      merge working directory with another revision
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-subrepo	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,106 @@
+#!/bin/sh
+
+rm -rf sub
+mkdir sub
+cd sub
+hg init t
+cd t
+
+echo % first revision, no sub
+echo a > a
+hg ci -Am0
+
+echo % add first sub
+echo s = s > .hgsub
+hg add .hgsub
+hg init s
+echo a > s/a
+hg -R s ci -Ams0
+hg ci -m1
+
+echo % add sub sub
+echo ss = ss > s/.hgsub
+hg init s/ss
+echo a > s/ss/a
+hg -R s add s/.hgsub
+hg -R s/ss add s/ss/a
+hg ci -m2
+
+echo % bump sub rev
+echo b > s/a
+hg -R s ci -ms1
+hg ci -m3
+
+echo % leave sub dirty
+echo c > s/a
+hg ci -m4
+hg tip -R s
+
+echo % check caching
+hg co 0
+hg debugsub
+echo % restore
+hg co
+hg debugsub
+
+echo % new branch for merge tests
+hg co 1
+echo t = t >> .hgsub
+hg init t
+echo t > t/t
+hg -R t add t
+echo % 5
+hg ci -m5 # add sub
+echo t2 > t/t
+echo % 6
+hg st -R s
+hg ci -m6 # change sub
+hg debugsub
+echo t3 > t/t
+echo % 7
+hg ci -m7 # change sub again for conflict test
+hg rm .hgsub
+echo % 8
+hg ci -m8 # remove sub
+
+echo % merge tests
+hg co -C 3
+hg merge 5 # test adding
+hg debugsub
+hg ci -m9
+hg merge 6 --debug # test change
+hg debugsub
+echo conflict > t/t
+hg ci -m10
+HGMERGE=internal:merge hg merge --debug 7 # test conflict
+echo % should conflict
+cat t/t
+
+echo % clone
+cd ..
+hg clone t tc
+cd tc
+hg debugsub
+
+echo % push
+echo bah > t/t
+hg ci -m11
+hg push | sed 's/ .*sub/ ...sub/g'
+
+echo % push -f
+echo bah > s/a
+hg ci -m12
+hg push | sed 's/ .*sub/ ...sub/g'
+hg push -f | sed 's/ .*sub/ ...sub/g'
+
+echo % update
+cd ../t
+hg up -C # discard our earlier merge
+echo blah > t/t
+hg ci -m13
+
+echo % pull
+cd ../tc
+hg pull | sed 's/ .*sub/ ...sub/g'
+hg up # should pull t
+cat t/t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-subrepo.out	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,197 @@
+% first revision, no sub
+adding a
+% add first sub
+adding a
+committing subrepository s
+% add sub sub
+committing subrepository s
+committing subrepository ss
+% bump sub rev
+committing subrepository s
+% leave sub dirty
+committing subrepository s
+changeset:   3:1c833a7a9e3a
+tag:         tip
+user:        test
+date:        Thu Jan 01 00:00:00 1970 +0000
+summary:     4
+
+% check caching
+0 files updated, 0 files merged, 2 files removed, 0 files unresolved
+% restore
+2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+path s
+ source   s
+ revision 1c833a7a9e3a4445c711aaf0f012379cd0d4034e
+% new branch for merge tests
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+adding t/t
+% 5
+committing subrepository t
+created new head
+% 6
+committing subrepository t
+path s
+ source   s
+ revision e4ece1bf43360ddc8f6a96432201a37b7cd27ae4
+path t
+ source   t
+ revision 6747d179aa9a688023c4b0cad32e4c92bb7f34ad
+% 7
+committing subrepository t
+% 8
+% merge tests
+2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+(branch merge, don't forget to commit)
+path s
+ source   s
+ revision fc627a69481fcbe5f1135069e8a3881c023e4cf5
+path t
+ source   t
+ revision 60ca1237c19474e7a3978b0dc1ca4e6f36d51382
+created new head
+  searching for copies back to rev 2
+resolving manifests
+ overwrite None partial False
+ ancestor 1f14a2e2d3ec local f0d2028bf86d+ remote 1831e14459c4
+ .hgsubstate: versions differ -> m
+resolving manifests
+ overwrite True partial False
+ ancestor 60ca1237c194+ local 60ca1237c194+ remote 6747d179aa9a
+ t: remote is newer -> g
+getting t
+0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+(branch merge, don't forget to commit)
+path s
+ source   s
+ revision fc627a69481fcbe5f1135069e8a3881c023e4cf5
+path t
+ source   t
+ revision 6747d179aa9a688023c4b0cad32e4c92bb7f34ad
+committing subrepository t
+  searching for copies back to rev 2
+resolving manifests
+ overwrite None partial False
+ ancestor 1831e14459c4 local e45c8b14af55+ remote f94576341bcf
+ .hgsubstate: versions differ -> m
+  searching for copies back to rev 2
+resolving manifests
+ overwrite None partial False
+ ancestor 6747d179aa9a local 20a0db6fbf6c+ remote 7af322bc1198
+ t: versions differ -> m
+preserving t for resolve of t
+picked tool 'internal:merge' for t (binary False symlink False)
+merging t
+my t@20a0db6fbf6c+ other t@7af322bc1198 ancestor t@6747d179aa9a
+warning: conflicts during merge.
+merging t failed!
+0 files updated, 0 files merged, 0 files removed, 1 files unresolved
+use 'hg resolve' to retry unresolved file merges or 'hg up --clean' to abandon
+0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+(branch merge, don't forget to commit)
+% should conflict
+<<<<<<< local
+conflict
+=======
+t3
+>>>>>>> other
+% clone
+updating working directory
+pulling subrepo s
+requesting all changes
+adding changesets
+adding manifests
+adding file changes
+added 4 changesets with 5 changes to 3 files
+pulling subrepo ss
+requesting all changes
+adding changesets
+adding manifests
+adding file changes
+added 1 changesets with 1 changes to 1 files
+pulling subrepo t
+requesting all changes
+adding changesets
+adding manifests
+adding file changes
+added 4 changesets with 4 changes to 1 files (+1 heads)
+3 files updated, 0 files merged, 0 files removed, 0 files unresolved
+path s
+ source   s
+ revision fc627a69481fcbe5f1135069e8a3881c023e4cf5
+path t
+ source   t
+ revision 20a0db6fbf6c3d2836e6519a642ae929bfc67c0e
+% push
+committing subrepository t
+pushing ...sub/t
+pushing ...subrepo ss
+searching for changes
+no changes found
+pushing ...subrepo s
+searching for changes
+no changes found
+pushing ...subrepo t
+searching for changes
+adding changesets
+adding manifests
+adding file changes
+added 1 changesets with 1 changes to 1 files
+searching for changes
+adding changesets
+adding manifests
+adding file changes
+added 1 changesets with 1 changes to 1 files
+% push -f
+committing subrepository s
+abort: push creates new remote heads!
+pushing ...sub/t
+pushing ...subrepo ss
+searching for changes
+no changes found
+pushing ...subrepo s
+searching for changes
+(did you forget to merge? use push -f to force)
+pushing ...subrepo t
+searching for changes
+no changes found
+searching for changes
+adding changesets
+adding manifests
+adding file changes
+added 1 changesets with 1 changes to 1 files
+pushing ...sub/t
+pushing ...subrepo ss
+searching for changes
+no changes found
+pushing ...subrepo s
+searching for changes
+adding changesets
+adding manifests
+adding file changes
+added 1 changesets with 1 changes to 1 files (+1 heads)
+pushing ...subrepo t
+searching for changes
+no changes found
+searching for changes
+no changes found
+% update
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+committing subrepository t
+% pull
+pulling ...sub/t
+searching for changes
+adding changesets
+adding manifests
+adding file changes
+added 1 changesets with 1 changes to 1 files
+(run 'hg update' to get a working copy)
+pulling subrepo t
+searching for changes
+adding changesets
+adding manifests
+adding file changes
+added 1 changesets with 1 changes to 1 files
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+blah
--- a/tests/test-symlink-basic.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-symlink-basic.out	Wed Jul 08 17:03:16 2009 -0700
@@ -1,4 +1,4 @@
-abort: file dangling not tracked!
+abort: dangling: file not tracked!
 changeset:   0:cabd88b706fc
 tag:         tip
 user:        test
@@ -28,4 +28,4 @@
 dangling -> void
 dangling2 -> void
 % issue995
-0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+0 files updated, 0 files merged, 0 files removed, 0 files unresolved
--- a/tests/test-tag	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-tag	Wed Jul 08 17:03:16 2009 -0700
@@ -1,6 +1,8 @@
 #!/bin/sh
 
-hg init
+hg init test
+cd test
+
 echo a > a
 hg add a
 hg commit -m "test" -d "1000000 0"
@@ -38,6 +40,17 @@
 newline'
 hg tag -l 'xx:xx'
 
+echo % cloning local tags
+cd ..
+hg -R test log -r0:5
+hg clone -q -rbleah1 test test1
+hg -R test1 parents --style=compact
+hg clone -q -r5 test#bleah1 test2
+hg -R test2 parents --style=compact
+hg clone -q -U test#bleah1 test3
+hg -R test3 parents --style=compact
+
+cd test
 echo % issue 601
 python << EOF
 f = file('.hg/localtags'); last = f.readlines()[-1][:-1]; f.close()
--- a/tests/test-tag.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-tag.out	Wed Jul 08 17:03:16 2009 -0700
@@ -47,6 +47,48 @@
 3ecf002a1c572a2f3bb4e665417e60fca65bbd42 bleah1
 abort: '\n' cannot be used in a tag name
 abort: ':' cannot be used in a tag name
+% cloning local tags
+changeset:   0:0acdaf898367
+tag:         foobar
+tag:         bleah
+tag:         bleah0
+user:        test
+date:        Mon Jan 12 13:46:40 1970 +0000
+summary:     test
+
+changeset:   1:3ecf002a1c57
+tag:         bleah1
+user:        test
+date:        Mon Jan 12 13:46:40 1970 +0000
+summary:     Added tag bleah for changeset 0acdaf898367
+
+changeset:   2:868cc8fbb43b
+tag:         gawk
+user:        test
+date:        Mon Jan 12 13:46:40 1970 +0000
+summary:     Added tag bleah0 for changeset 0acdaf898367
+
+changeset:   3:3807bcf62c56
+user:        test
+date:        Mon Jan 12 13:46:40 1970 +0000
+summary:     Added tag gack, gawk, gorp for changeset 868cc8fbb43b
+
+changeset:   4:140c6e8597b4
+user:        test
+date:        Mon Jan 12 13:46:40 1970 +0000
+summary:     Added tag gack for changeset 3807bcf62c56
+
+changeset:   5:470a65fa7cc9
+user:        test
+date:        Mon Jan 12 13:46:40 1970 +0000
+summary:     Removed tag gack, gorp
+
+1[tip]   3ecf002a1c57   1970-01-12 13:46 +0000   test
+  Added tag bleah for changeset 0acdaf898367
+
+5[tip]   470a65fa7cc9   1970-01-12 13:46 +0000   test
+  Removed tag gack, gorp
+
 % issue 601
 3ecf002a1c572a2f3bb4e665417e60fca65bbd42 bleah13ecf002a1c572a2f3bb4e665417e60fca65bbd42 bleah1
 f68b039e72eacbb2e68b0543e1f6e50990aa2bb5 localnewline
--- a/tests/test-tags.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-tags.out	Wed Jul 08 17:03:16 2009 -0700
@@ -26,14 +26,12 @@
 .hgtags@c071f74ab5eb, line 2: cannot parse entry
 .hgtags@c071f74ab5eb, line 4: node 'foo' is not well formed
 .hgtags@4ca6f1b1a68c, line 2: node 'x' is not well formed
-localtags, line 1: tag 'invalid' refers to unknown node
 tip                                8:4ca6f1b1a68c
 first                              0:0acdaf898367
 changeset:   8:4ca6f1b1a68c
 .hgtags@c071f74ab5eb, line 2: cannot parse entry
 .hgtags@c071f74ab5eb, line 4: node 'foo' is not well formed
 .hgtags@4ca6f1b1a68c, line 2: node 'x' is not well formed
-localtags, line 1: tag 'invalid' refers to unknown node
 tag:         tip
 parent:      3:b2ef3841386b
 user:        test
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-template-engine	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,35 @@
+#!/bin/sh
+
+cat > engine.py << EOF
+
+from mercurial import templater
+
+class mytemplater(object):
+    def __init__(self, loader, filters, defaults):
+        self.loader = loader
+
+    def process(self, t, map):
+        tmpl = self.loader(t)
+        for k, v in map.iteritems():
+            v = templater.stringify(v)
+            tmpl = tmpl.replace('{{%s}}' % k, v)
+        yield tmpl
+
+templater.engines['my'] = mytemplater
+EOF
+
+hg init test
+echo '[extensions]' > test/.hg/hgrc
+echo "engine = `pwd`/engine.py" >> test/.hg/hgrc
+
+cd test
+cat > mymap << EOF
+changeset = my:changeset.txt
+EOF
+
+cat > changeset.txt << EOF
+{{rev}} {{node}} {{author}}
+EOF
+
+hg ci -Ama
+hg log --style=./mymap
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-template-engine.out	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,3 @@
+adding changeset.txt
+adding mymap
+0 97e5f848f0936960273bbf75be6388cd0350a32b test
--- a/tests/test-transplant	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-transplant	Wed Jul 08 17:03:16 2009 -0700
@@ -92,6 +92,7 @@
 hg transplant 1:3
 # transplant -c shouldn't use an old changeset
 hg up -C
+rm added
 hg transplant 1
 hg transplant --continue
 hg transplant 1:3
@@ -133,3 +134,26 @@
 hg transplant -s ../t -b tip -a --filter ./test-filter |\
     sed 's/filtering.*/filtering/g'
 hg log --template '{rev} {parents} {desc}\n'
+cd ..
+
+echo '% test with a win32ext like setup (differing EOLs)'
+hg init twin1
+cd twin1
+echo a > a
+echo b > b
+echo b >> b
+hg ci -Am t
+echo a > b
+echo b >> b
+hg ci -m changeb
+cd ..
+
+hg init twin2
+cd twin2
+echo '[patch]' >> .hg/hgrc
+echo 'eol = crlf' >> .hg/hgrc
+python -c "file('b', 'wb').write('b\r\nb\r\n')"
+hg ci -m addb
+hg transplant -s ../twin1 tip
+python -c "print repr(file('b', 'rb').read())"
+cd ..
\ No newline at end of file
--- a/tests/test-transplant.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-transplant.out	Wed Jul 08 17:03:16 2009 -0700
@@ -113,7 +113,7 @@
 1 out of 1 hunks FAILED -- saving rejects to file foo.rej
 patch failed to apply
 abort: Fix up the merge and run hg transplant --continue
-1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
 applying a1e30dd1b8e7
 patching file foo
 Hunk #1 FAILED at 0
@@ -159,3 +159,10 @@
 2  b2
 1  b1
 0  r2
+% test with a win32ext like setup (differing EOLs)
+adding a
+adding b
+nothing changed
+applying 2e849d776c17
+2e849d776c17 transplanted to 589cea8ba85b
+'a\r\nb\r\n'
--- a/tests/test-trusted.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-trusted.py	Wed Jul 08 17:03:16 2009 -0700
@@ -44,7 +44,7 @@
         return group
     util.groupname = groupname
 
-    def isowner(fp, st=None):
+    def isowner(st):
         return user == cuser
     util.isowner = isowner
 
--- a/tests/test-ui-config	Wed Jul 08 17:01:18 2009 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-#!/usr/bin/env python
-
-from mercurial import ui, util, dispatch, error
-
-testui = ui.ui()
-parsed = dispatch._parseconfig(testui, [
-    'values.string=string value',
-    'values.bool1=true',
-    'values.bool2=false',
-    'lists.list1=foo',
-    'lists.list2=foo bar baz',
-    'lists.list3=alice, bob',
-    'lists.list4=foo bar baz alice, bob',
-])
-
-print repr(testui.configitems('values'))
-print repr(testui.configitems('lists'))
-print "---"
-print repr(testui.config('values', 'string'))
-print repr(testui.config('values', 'bool1'))
-print repr(testui.config('values', 'bool2'))
-print repr(testui.config('values', 'unknown'))
-print "---"
-try:
-    print repr(testui.configbool('values', 'string'))
-except error.ConfigError, inst:
-    print inst
-print repr(testui.configbool('values', 'bool1'))
-print repr(testui.configbool('values', 'bool2'))
-print repr(testui.configbool('values', 'bool2', True))
-print repr(testui.configbool('values', 'unknown'))
-print repr(testui.configbool('values', 'unknown', True))
-print "---"
-print repr(testui.configlist('lists', 'list1'))
-print repr(testui.configlist('lists', 'list2'))
-print repr(testui.configlist('lists', 'list3'))
-print repr(testui.configlist('lists', 'list4'))
-print repr(testui.configlist('lists', 'list4', ['foo']))
-print repr(testui.configlist('lists', 'unknown'))
-print repr(testui.configlist('lists', 'unknown', ''))
-print repr(testui.configlist('lists', 'unknown', 'foo'))
-print repr(testui.configlist('lists', 'unknown', ['foo']))
-print repr(testui.configlist('lists', 'unknown', 'foo bar'))
-print repr(testui.configlist('lists', 'unknown', 'foo, bar'))
-print repr(testui.configlist('lists', 'unknown', ['foo bar']))
-print repr(testui.configlist('lists', 'unknown', ['foo', 'bar']))
-
-print repr(testui.config('values', 'String'))
-
-def function():
-    pass
-
-# values that aren't strings should work
-testui.setconfig('hook', 'commit', function)
-print function == testui.config('hook', 'commit')
--- a/tests/test-ui-config.out	Wed Jul 08 17:01:18 2009 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-[('string', 'string value'), ('bool1', 'true'), ('bool2', 'false')]
-[('list1', 'foo'), ('list2', 'foo bar baz'), ('list3', 'alice, bob'), ('list4', 'foo bar baz alice, bob')]
----
-'string value'
-'true'
-'false'
-None
----
-values.string not a boolean ('string value')
-True
-False
-False
-False
-True
----
-['foo']
-['foo', 'bar', 'baz']
-['alice', 'bob']
-['foo', 'bar', 'baz', 'alice', 'bob']
-['foo', 'bar', 'baz', 'alice', 'bob']
-[]
-[]
-['foo']
-['foo']
-['foo', 'bar']
-['foo', 'bar']
-['foo bar']
-['foo', 'bar']
-None
-True
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-ui-config.py	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,55 @@
+#!/usr/bin/env python
+
+from mercurial import ui, dispatch, error
+
+testui = ui.ui()
+parsed = dispatch._parseconfig(testui, [
+    'values.string=string value',
+    'values.bool1=true',
+    'values.bool2=false',
+    'lists.list1=foo',
+    'lists.list2=foo bar baz',
+    'lists.list3=alice, bob',
+    'lists.list4=foo bar baz alice, bob',
+])
+
+print repr(testui.configitems('values'))
+print repr(testui.configitems('lists'))
+print "---"
+print repr(testui.config('values', 'string'))
+print repr(testui.config('values', 'bool1'))
+print repr(testui.config('values', 'bool2'))
+print repr(testui.config('values', 'unknown'))
+print "---"
+try:
+    print repr(testui.configbool('values', 'string'))
+except error.ConfigError, inst:
+    print inst
+print repr(testui.configbool('values', 'bool1'))
+print repr(testui.configbool('values', 'bool2'))
+print repr(testui.configbool('values', 'bool2', True))
+print repr(testui.configbool('values', 'unknown'))
+print repr(testui.configbool('values', 'unknown', True))
+print "---"
+print repr(testui.configlist('lists', 'list1'))
+print repr(testui.configlist('lists', 'list2'))
+print repr(testui.configlist('lists', 'list3'))
+print repr(testui.configlist('lists', 'list4'))
+print repr(testui.configlist('lists', 'list4', ['foo']))
+print repr(testui.configlist('lists', 'unknown'))
+print repr(testui.configlist('lists', 'unknown', ''))
+print repr(testui.configlist('lists', 'unknown', 'foo'))
+print repr(testui.configlist('lists', 'unknown', ['foo']))
+print repr(testui.configlist('lists', 'unknown', 'foo bar'))
+print repr(testui.configlist('lists', 'unknown', 'foo, bar'))
+print repr(testui.configlist('lists', 'unknown', ['foo bar']))
+print repr(testui.configlist('lists', 'unknown', ['foo', 'bar']))
+
+print repr(testui.config('values', 'String'))
+
+def function():
+    pass
+
+# values that aren't strings should work
+testui.setconfig('hook', 'commit', function)
+print function == testui.config('hook', 'commit')
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-ui-config.py.out	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,30 @@
+[('string', 'string value'), ('bool1', 'true'), ('bool2', 'false')]
+[('list1', 'foo'), ('list2', 'foo bar baz'), ('list3', 'alice, bob'), ('list4', 'foo bar baz alice, bob')]
+---
+'string value'
+'true'
+'false'
+None
+---
+values.string not a boolean ('string value')
+True
+False
+False
+False
+True
+---
+['foo']
+['foo', 'bar', 'baz']
+['alice', 'bob']
+['foo', 'bar', 'baz', 'alice', 'bob']
+['foo', 'bar', 'baz', 'alice', 'bob']
+[]
+[]
+['foo']
+['foo']
+['foo', 'bar']
+['foo', 'bar']
+['foo bar']
+['foo', 'bar']
+None
+True
--- a/tests/test-ui-verbosity	Wed Jul 08 17:01:18 2009 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-#!/usr/bin/env python
-
-import os
-from mercurial import ui
-
-hgrc = os.environ['HGRCPATH']
-f = open(hgrc)
-basehgrc = f.read()
-f.close()
-
-print '      hgrc settings    command line options      final result   '
-print '    quiet verbo debug   quiet verbo debug      quiet verbo debug'
-
-for i in xrange(64):
-    hgrc_quiet   = bool(i & 1<<0)
-    hgrc_verbose = bool(i & 1<<1)
-    hgrc_debug   = bool(i & 1<<2)
-    cmd_quiet    = bool(i & 1<<3)
-    cmd_verbose  = bool(i & 1<<4)
-    cmd_debug    = bool(i & 1<<5)
-
-    f = open(hgrc, 'w')
-    f.write(basehgrc)
-    f.write('\n[ui]\n')
-    if hgrc_quiet:
-        f.write('quiet = True\n')
-    if hgrc_verbose:
-        f.write('verbose = True\n')
-    if hgrc_debug:
-        f.write('debug = True\n')
-    f.close()
-
-    u = ui.ui()
-    if cmd_quiet or cmd_debug or cmd_verbose:
-        u.setconfig('ui', 'quiet', str(bool(cmd_quiet)))
-        u.setconfig('ui', 'verbose', str(bool(cmd_verbose)))
-        u.setconfig('ui', 'debug', str(bool(cmd_debug)))
-
-    check = ''
-    if u.debugflag:
-        if not u.verbose or u.quiet:
-            check = ' *'
-    elif u.verbose and u.quiet:
-        check = ' +'
-
-    print ('%2d  %5s %5s %5s   %5s %5s %5s  ->  %5s %5s %5s%s'
-           % (i, hgrc_quiet, hgrc_verbose, hgrc_debug,
-              cmd_quiet, cmd_verbose, cmd_debug,
-              u.quiet, u.verbose, u.debugflag, check))
--- a/tests/test-ui-verbosity.out	Wed Jul 08 17:01:18 2009 -0700
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,66 +0,0 @@
-      hgrc settings    command line options      final result   
-    quiet verbo debug   quiet verbo debug      quiet verbo debug
- 0  False False False   False False False  ->  False False False
- 1   True False False   False False False  ->   True False False
- 2  False  True False   False False False  ->  False  True False
- 3   True  True False   False False False  ->  False False False
- 4  False False  True   False False False  ->  False  True  True
- 5   True False  True   False False False  ->  False  True  True
- 6  False  True  True   False False False  ->  False  True  True
- 7   True  True  True   False False False  ->  False  True  True
- 8  False False False    True False False  ->   True False False
- 9   True False False    True False False  ->   True False False
-10  False  True False    True False False  ->   True False False
-11   True  True False    True False False  ->   True False False
-12  False False  True    True False False  ->   True False False
-13   True False  True    True False False  ->   True False False
-14  False  True  True    True False False  ->   True False False
-15   True  True  True    True False False  ->   True False False
-16  False False False   False  True False  ->  False  True False
-17   True False False   False  True False  ->  False  True False
-18  False  True False   False  True False  ->  False  True False
-19   True  True False   False  True False  ->  False  True False
-20  False False  True   False  True False  ->  False  True False
-21   True False  True   False  True False  ->  False  True False
-22  False  True  True   False  True False  ->  False  True False
-23   True  True  True   False  True False  ->  False  True False
-24  False False False    True  True False  ->  False False False
-25   True False False    True  True False  ->  False False False
-26  False  True False    True  True False  ->  False False False
-27   True  True False    True  True False  ->  False False False
-28  False False  True    True  True False  ->  False False False
-29   True False  True    True  True False  ->  False False False
-30  False  True  True    True  True False  ->  False False False
-31   True  True  True    True  True False  ->  False False False
-32  False False False   False False  True  ->  False  True  True
-33   True False False   False False  True  ->  False  True  True
-34  False  True False   False False  True  ->  False  True  True
-35   True  True False   False False  True  ->  False  True  True
-36  False False  True   False False  True  ->  False  True  True
-37   True False  True   False False  True  ->  False  True  True
-38  False  True  True   False False  True  ->  False  True  True
-39   True  True  True   False False  True  ->  False  True  True
-40  False False False    True False  True  ->  False  True  True
-41   True False False    True False  True  ->  False  True  True
-42  False  True False    True False  True  ->  False  True  True
-43   True  True False    True False  True  ->  False  True  True
-44  False False  True    True False  True  ->  False  True  True
-45   True False  True    True False  True  ->  False  True  True
-46  False  True  True    True False  True  ->  False  True  True
-47   True  True  True    True False  True  ->  False  True  True
-48  False False False   False  True  True  ->  False  True  True
-49   True False False   False  True  True  ->  False  True  True
-50  False  True False   False  True  True  ->  False  True  True
-51   True  True False   False  True  True  ->  False  True  True
-52  False False  True   False  True  True  ->  False  True  True
-53   True False  True   False  True  True  ->  False  True  True
-54  False  True  True   False  True  True  ->  False  True  True
-55   True  True  True   False  True  True  ->  False  True  True
-56  False False False    True  True  True  ->  False  True  True
-57   True False False    True  True  True  ->  False  True  True
-58  False  True False    True  True  True  ->  False  True  True
-59   True  True False    True  True  True  ->  False  True  True
-60  False False  True    True  True  True  ->  False  True  True
-61   True False  True    True  True  True  ->  False  True  True
-62  False  True  True    True  True  True  ->  False  True  True
-63   True  True  True    True  True  True  ->  False  True  True
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-ui-verbosity.py	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,49 @@
+#!/usr/bin/env python
+
+import os
+from mercurial import ui
+
+hgrc = os.environ['HGRCPATH']
+f = open(hgrc)
+basehgrc = f.read()
+f.close()
+
+print '      hgrc settings    command line options      final result   '
+print '    quiet verbo debug   quiet verbo debug      quiet verbo debug'
+
+for i in xrange(64):
+    hgrc_quiet   = bool(i & 1<<0)
+    hgrc_verbose = bool(i & 1<<1)
+    hgrc_debug   = bool(i & 1<<2)
+    cmd_quiet    = bool(i & 1<<3)
+    cmd_verbose  = bool(i & 1<<4)
+    cmd_debug    = bool(i & 1<<5)
+
+    f = open(hgrc, 'w')
+    f.write(basehgrc)
+    f.write('\n[ui]\n')
+    if hgrc_quiet:
+        f.write('quiet = True\n')
+    if hgrc_verbose:
+        f.write('verbose = True\n')
+    if hgrc_debug:
+        f.write('debug = True\n')
+    f.close()
+
+    u = ui.ui()
+    if cmd_quiet or cmd_debug or cmd_verbose:
+        u.setconfig('ui', 'quiet', str(bool(cmd_quiet)))
+        u.setconfig('ui', 'verbose', str(bool(cmd_verbose)))
+        u.setconfig('ui', 'debug', str(bool(cmd_debug)))
+
+    check = ''
+    if u.debugflag:
+        if not u.verbose or u.quiet:
+            check = ' *'
+    elif u.verbose and u.quiet:
+        check = ' +'
+
+    print ('%2d  %5s %5s %5s   %5s %5s %5s  ->  %5s %5s %5s%s'
+           % (i, hgrc_quiet, hgrc_verbose, hgrc_debug,
+              cmd_quiet, cmd_verbose, cmd_debug,
+              u.quiet, u.verbose, u.debugflag, check))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-ui-verbosity.py.out	Wed Jul 08 17:03:16 2009 -0700
@@ -0,0 +1,66 @@
+      hgrc settings    command line options      final result   
+    quiet verbo debug   quiet verbo debug      quiet verbo debug
+ 0  False False False   False False False  ->  False False False
+ 1   True False False   False False False  ->   True False False
+ 2  False  True False   False False False  ->  False  True False
+ 3   True  True False   False False False  ->  False False False
+ 4  False False  True   False False False  ->  False  True  True
+ 5   True False  True   False False False  ->  False  True  True
+ 6  False  True  True   False False False  ->  False  True  True
+ 7   True  True  True   False False False  ->  False  True  True
+ 8  False False False    True False False  ->   True False False
+ 9   True False False    True False False  ->   True False False
+10  False  True False    True False False  ->   True False False
+11   True  True False    True False False  ->   True False False
+12  False False  True    True False False  ->   True False False
+13   True False  True    True False False  ->   True False False
+14  False  True  True    True False False  ->   True False False
+15   True  True  True    True False False  ->   True False False
+16  False False False   False  True False  ->  False  True False
+17   True False False   False  True False  ->  False  True False
+18  False  True False   False  True False  ->  False  True False
+19   True  True False   False  True False  ->  False  True False
+20  False False  True   False  True False  ->  False  True False
+21   True False  True   False  True False  ->  False  True False
+22  False  True  True   False  True False  ->  False  True False
+23   True  True  True   False  True False  ->  False  True False
+24  False False False    True  True False  ->  False False False
+25   True False False    True  True False  ->  False False False
+26  False  True False    True  True False  ->  False False False
+27   True  True False    True  True False  ->  False False False
+28  False False  True    True  True False  ->  False False False
+29   True False  True    True  True False  ->  False False False
+30  False  True  True    True  True False  ->  False False False
+31   True  True  True    True  True False  ->  False False False
+32  False False False   False False  True  ->  False  True  True
+33   True False False   False False  True  ->  False  True  True
+34  False  True False   False False  True  ->  False  True  True
+35   True  True False   False False  True  ->  False  True  True
+36  False False  True   False False  True  ->  False  True  True
+37   True False  True   False False  True  ->  False  True  True
+38  False  True  True   False False  True  ->  False  True  True
+39   True  True  True   False False  True  ->  False  True  True
+40  False False False    True False  True  ->  False  True  True
+41   True False False    True False  True  ->  False  True  True
+42  False  True False    True False  True  ->  False  True  True
+43   True  True False    True False  True  ->  False  True  True
+44  False False  True    True False  True  ->  False  True  True
+45   True False  True    True False  True  ->  False  True  True
+46  False  True  True    True False  True  ->  False  True  True
+47   True  True  True    True False  True  ->  False  True  True
+48  False False False   False  True  True  ->  False  True  True
+49   True False False   False  True  True  ->  False  True  True
+50  False  True False   False  True  True  ->  False  True  True
+51   True  True False   False  True  True  ->  False  True  True
+52  False False  True   False  True  True  ->  False  True  True
+53   True False  True   False  True  True  ->  False  True  True
+54  False  True  True   False  True  True  ->  False  True  True
+55   True  True  True   False  True  True  ->  False  True  True
+56  False False False    True  True  True  ->  False  True  True
+57   True False False    True  True  True  ->  False  True  True
+58  False  True False    True  True  True  ->  False  True  True
+59   True  True False    True  True  True  ->  False  True  True
+60  False False  True    True  True  True  ->  False  True  True
+61   True False  True    True  True  True  ->  False  True  True
+62  False  True  True    True  True  True  ->  False  True  True
+63   True  True  True    True  True  True  ->  False  True  True
--- a/tests/test-up-issue1456	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-up-issue1456	Wed Jul 08 17:03:16 2009 -0700
@@ -10,7 +10,7 @@
 hg ci -m1
 hg co -q 0
 echo dirty > foo
-sleep 1
+hg up -c
 hg up -q
 cat foo
 hg st -A
--- a/tests/test-up-issue1456.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-up-issue1456.out	Wed Jul 08 17:03:16 2009 -0700
@@ -1,3 +1,4 @@
+abort: uncommitted local changes
 dirty
 M foo
 % validate update of standalone execute bit change
--- a/tests/test-up-local-change.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-up-local-change.out	Wed Jul 08 17:03:16 2009 -0700
@@ -15,12 +15,12 @@
 date:        Mon Jan 12 13:46:40 1970 +0000
 summary:     1
 
+  searching for copies back to rev 1
+  unmatched files in other:
+   b
 resolving manifests
  overwrite False partial False
  ancestor 33aaa84a386b local 33aaa84a386b+ remote 802f095af299
-  searching for copies back to rev 1
-  unmatched files in other:
-   b
  a: versions differ -> m
  b: remote created -> g
 preserving a for resolve of a
@@ -37,10 +37,16 @@
 
 resolving manifests
  overwrite False partial False
- ancestor 33aaa84a386b local 802f095af299+ remote 33aaa84a386b
- b: remote deleted -> r
+ ancestor 802f095af299 local 802f095af299+ remote 33aaa84a386b
+ a: versions differ -> m
+ b: other deleted -> r
+preserving a for resolve of a
 removing b
-0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+picked tool 'true' for a (binary False symlink False)
+merging a
+my a@802f095af299+ other a@33aaa84a386b ancestor a@33aaa84a386b
+ premerge successful
+0 files updated, 1 files merged, 1 files removed, 0 files unresolved
 changeset:   0:33aaa84a386b
 user:        test
 date:        Mon Jan 12 13:46:40 1970 +0000
@@ -53,12 +59,12 @@
 date:        Mon Jan 12 13:46:40 1970 +0000
 summary:     1
 
+  searching for copies back to rev 1
+  unmatched files in other:
+   b
 resolving manifests
  overwrite False partial False
  ancestor 33aaa84a386b local 33aaa84a386b+ remote 802f095af299
-  searching for copies back to rev 1
-  unmatched files in other:
-   b
  a: versions differ -> m
  b: remote created -> g
 preserving a for resolve of a
@@ -107,12 +113,12 @@
 
 abort: crosses branches (use 'hg merge' or 'hg update -C' to discard changes)
 failed
-abort: outstanding uncommitted changes
+abort: outstanding uncommitted changes (use 'hg status' to list changes)
 failed
+  searching for copies back to rev 1
 resolving manifests
  overwrite False partial False
  ancestor 33aaa84a386b local 802f095af299+ remote 030602aee63d
-  searching for copies back to rev 1
  a: versions differ -> m
  b: versions differ -> m
 preserving a for resolve of a
--- a/tests/test-update-reverse.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-update-reverse.out	Wed Jul 08 17:03:16 2009 -0700
@@ -42,9 +42,9 @@
 side2
 resolving manifests
  overwrite True partial False
- ancestor 537353581d3d local ded32b0db104+ remote 221226fb2bd8
- side2: remote deleted -> r
- side1: remote deleted -> r
+ ancestor ded32b0db104+ local ded32b0db104+ remote 221226fb2bd8
+ side2: other deleted -> r
+ side1: other deleted -> r
  main: remote created -> g
 removing side1
 removing side2
--- a/tests/test-verify	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-verify	Wed Jul 08 17:03:16 2009 -0700
@@ -35,7 +35,7 @@
 hg ci -m a
 
 echo 'corrupted' > b
-head -c 20 .hg/store/data/a.i > start
+dd if=.hg/store/data/a.i of=start bs=1 count=20 2>/dev/null
 cat start b > .hg/store/data/a.i
 
 echo
--- a/tests/test-walkrepo.py	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-walkrepo.py	Wed Jul 08 17:03:16 2009 -0700
@@ -1,5 +1,4 @@
 import os
-import os.path
 from mercurial import hg, ui
 from mercurial.util import walkrepos
 from os import mkdir, chdir
--- a/tests/test-win32text	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-win32text	Wed Jul 08 17:03:16 2009 -0700
@@ -117,7 +117,7 @@
 echo
 
 rm f3 f4.bat bin
-hg co 2>&1 | python -c 'import sys, os; sys.stdout.write(sys.stdin.read().replace(os.getcwd(), "...."))'
+hg co -C 2>&1 | python -c 'import sys, os; sys.stdout.write(sys.stdin.read().replace(os.getcwd(), "...."))'
 python print.py < bin
 python print.py < f3
 python print.py < f4.bat
@@ -142,19 +142,3 @@
 hg revert -a
 hg st -q
 python print.py < linefeed
-
-echo "# disable extension again"
-echo '[decode]' >> .hg/hgrc
-echo '** = !' >> .hg/hgrc
-echo '[encode]' >> .hg/hgrc
-echo '** = !' >> .hg/hgrc
-cat .hg/hgrc
-echo
-
-rm f3 f4.bat bin
-hg co 2>&1 | python -c 'import sys, os; sys.stdout.write(sys.stdin.read().replace(os.getcwd(), "...."))'
-python print.py < bin
-python print.py < f3
-python print.py < f4.bat
-echo
-
--- a/tests/test-win32text.out	Wed Jul 08 17:01:18 2009 -0700
+++ b/tests/test-win32text.out	Wed Jul 08 17:03:16 2009 -0700
@@ -302,20 +302,3 @@
 M linefeed
 reverting linefeed
 % just linefeed<CR><LF>
-# disable extension again
-[extensions]
-win32text = 
-[decode]
-** = cleverdecode:
-[encode]
-** = cleverencode:
-[decode]
-** = !
-[encode]
-** = !
-
-3 files updated, 0 files merged, 0 files removed, 0 files unresolved
-hello<NUL><CR><LF>
-some<LF>text<LF>
-rem empty<LF>
-