changeset 8166:56719b1aa6f4

Merge with crew-stable
author Patrick Mezard <pmezard@gmail.com>
date Sun, 26 Apr 2009 11:49:17 +0200
parents aaec1f65926e (diff) 78658990c725 (current diff)
children 6c82beaaa11a
files hgext/convert/bzr.py
diffstat 202 files changed, 38109 insertions(+), 13601 deletions(-) [+]
line wrap: on
line diff
--- a/.hgignore	Sun Apr 26 11:35:53 2009 +0200
+++ b/.hgignore	Sun Apr 26 11:49:17 2009 +0200
@@ -11,6 +11,8 @@
 *.pyc
 *.swp
 *.prof
+\#*\#
+.\#*
 tests/.coverage*
 tests/annotated
 tests/*.err
--- a/Makefile	Sun Apr 26 11:35:53 2009 +0200
+++ b/Makefile	Sun Apr 26 11:49:17 2009 +0200
@@ -2,6 +2,7 @@
 export PREFIX
 PYTHON=python
 PURE=
+PYTHON_FILES:=$(shell find mercurial hgext doc -name '*.py')
 
 help:
 	@echo 'Commonly used make targets:'
@@ -76,7 +77,9 @@
 test-%:
 	cd tests && $(PYTHON) run-tests.py $(TESTFLAGS) $@
 
-update-pot:
+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
@@ -86,10 +89,13 @@
         # parse these them even though they are not marked for
         # translation. Extracting with an explicit encoding of
         # ISO-8859-1 will make xgettext "parse" and ignore them.
-	find mercurial hgext doc -name '*.py' | xargs \
+	echo $^ | xargs \
 	  xgettext --from-code ISO-8859-1 --join --sort-by-file \
 	  -d hg -p i18n -o hg.pot
 
+%.po: i18n/hg.pot
+	msgmerge --no-location --update $@ $^
+
 .PHONY: help all local build doc clean install install-bin install-doc \
 	install-home install-home-bin install-home-doc dist dist-notests tests \
 	update-pot
--- a/contrib/perf.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/contrib/perf.py	Sun Apr 26 11:49:17 2009 +0200
@@ -1,7 +1,7 @@
 # perf.py - performance test routines
 
 from mercurial.i18n import _
-from mercurial import cmdutil, match
+from mercurial import cmdutil, match, commands
 import time, os, sys
 
 def timer(func):
@@ -101,6 +101,18 @@
 def perflookup(ui, repo, rev):
     timer(lambda: len(repo.lookup(rev)))
 
+def perflog(ui, repo):
+    ui.pushbuffer()
+    timer(lambda: commands.log(ui, repo, rev=[], date='', user=''))
+    ui.popbuffer()
+
+def perftemplating(ui, repo):
+    ui.pushbuffer()
+    timer(lambda: commands.log(ui, repo, rev=[], date='', user='',
+                               template='{date|shortdate} [{rev}:{node|short}]'
+                               ' {author|person}: {desc|firstline}\n'))
+    ui.popbuffer()
+
 cmdtable = {
     'perflookup': (perflookup, []),
     'perfparents': (perfparents, []),
@@ -113,5 +125,7 @@
     'perftags': (perftags, []),
     'perfdirstate': (perfdirstate, []),
     'perfdirstatedirs': (perfdirstate, []),
+    'perflog': (perflog, []),
+    'perftemplating': (perftemplating, []),
 }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contrib/python-hook-examples.py	Sun Apr 26 11:49:17 2009 +0200
@@ -0,0 +1,22 @@
+'''
+Examples of useful python hooks for Mercurial.
+'''
+from mercurial import patch, util
+
+def diffstat(ui, repo, **kwargs):
+    '''Example usage:
+
+    [hooks]
+    commit.diffstat = python:/path/to/this/file.py:diffstat
+    changegroup.diffstat = python:/path/to/this/file.py:diffstat
+    '''
+    if kwargs.get('parent2'):
+        return
+    node = kwargs['node']
+    first = repo[node].parents()[0].node()
+    if 'url' in kwargs:
+        last = repo['tip'].node()
+    else:
+        last = node
+    diff = patch.diff(repo, first, last)
+    ui.write(patch.diffstat(util.iterlines(diff)))
--- a/contrib/win32/mercurial.iss	Sun Apr 26 11:35:53 2009 +0200
+++ b/contrib/win32/mercurial.iss	Sun Apr 26 11:49:17 2009 +0200
@@ -36,9 +36,12 @@
 Source: contrib\win32\mercurial.ini; DestDir: {app}; DestName: Mercurial.ini; Check: CheckFile; AfterInstall: ConcatenateFiles;
 Source: contrib\win32\postinstall.txt; DestDir: {app}; DestName: ReleaseNotes.txt
 Source: dist\hg.exe; DestDir: {app}; AfterInstall: Touch('{app}\hg.exe.local')
+Source: dist\python*.dll; Destdir: {app}; Flags: skipifsourcedoesntexist
 Source: dist\library.zip; DestDir: {app}
-Source: dist\mfc71.dll; DestDir: {app}
-Source: dist\msvcr71.dll; DestDir: {app}
+Source: dist\mfc*.dll; DestDir: {app}
+Source: dist\msvc*.dll; DestDir: {app}
+Source: dist\Microsoft.VC*.CRT.manifest; DestDir: {app}; Flags: skipifsourcedoesntexist
+Source: dist\Microsoft.VC*.MFC.manifest; DestDir: {app}; Flags: skipifsourcedoesntexist
 Source: dist\w9xpopen.exe; DestDir: {app}
 Source: dist\add_path.exe; DestDir: {app}
 Source: doc\*.html; DestDir: {app}\Docs
@@ -56,6 +59,8 @@
 [Icons]
 Name: {group}\Uninstall Mercurial; Filename: {uninstallexe}
 Name: {group}\Mercurial Command Reference; Filename: {app}\Docs\hg.1.html
+Name: {group}\Mercurial Configuration Files; Filename: {app}\Docs\hgrc.5.html
+Name: {group}\Mercurial Ignore Files; Filename: {app}\Docs\hgignore.5.html
 Name: {group}\Mercurial Web Site; Filename: {app}\Mercurial.url
 
 [Run]
--- a/contrib/win32/win32-build.txt	Sun Apr 26 11:35:53 2009 +0200
+++ b/contrib/win32/win32-build.txt	Sun Apr 26 11:49:17 2009 +0200
@@ -12,9 +12,12 @@
   Python for Windows Extensions
       http://sourceforge.net/projects/pywin32/
 
-  mfc71.dll (just download, don't install)
+  mfc71.dll (just download, don't install; not needed for Python 2.6)
       http://starship.python.net/crew/mhammond/win32/
 
+  Visual C++ 2008 redistributable package (needed for Python 2.6)
+      http://www.microsoft.com/downloads/details.aspx?familyid=9b2da534-3e03-4391-8a4d-074b9f2bc1bf&displaylang=en
+      
   The py2exe distutils extension
       http://sourceforge.net/projects/py2exe/
 
@@ -52,7 +55,25 @@
 
 you can skip the first build step.
 
-Copy mfc71.dll and add_path.exe into the dist directory that just got created.
+Copy add_path.exe into the dist directory that just got created.
+
+If you are using Python up to version 2.5.4, copy mfc71.dll into the dist
+directory that just got created.
+
+If you are using Python 2.6 or later, after installing the Visual C++ 2008
+redistributable package copy into the dist directory that just got created the
+following files:
+  - from the directory starting with
+    Windows/WinSxS/x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8
+    the files named: msvcm90.dll, msvcp90.dll and msvcr90.dll
+  - from the directory starting with
+    Windows/WinSxS/x86_Microsoft.VC90.MFC_1fc8b3b9a1e18e3b_9.0.21022.8
+    the files named: mfc90.dll, mfc90u.dll, mfcm90.dll and mfcm90u.dll
+  - from the directory named Windows/WinSxS/Manifests, the manifest file
+    starting with x86_Microsoft.VC90.CRT_1fc8b3b9a1e18e3b_9.0.21022.8
+    (rename it to Microsoft.VC90.CRT.manifest) and the manifest file starting
+    with x86_Microsoft.VC90.MFC_1fc8b3b9a1e18e3b_9.0.21022.8 (rename it to
+    Microsoft.VC90.MFC.manifest)
 
 Before building the installer, you have to build Mercurial HTML documentation 
 (or fix mercurial.iss to not reference the doc directory). Assuming you have an
--- a/doc/hgrc.5.txt	Sun Apr 26 11:35:53 2009 +0200
+++ b/doc/hgrc.5.txt	Sun Apr 26 11:49:17 2009 +0200
@@ -475,6 +475,7 @@
   The syntax for Python hooks is as follows:
 
     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
@@ -537,6 +538,29 @@
     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.
+  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.
+    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
+
 [[server]]
 server::
   Controls generic server settings.
--- a/hgext/acl.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/acl.py	Sun Apr 26 11:49:17 2009 +0200
@@ -74,7 +74,7 @@
     user = getpass.getuser()
     cfg = ui.config('acl', 'config')
     if cfg:
-        ui.readsections(cfg, 'acl.allow', 'acl.deny')
+        ui.readconfig(cfg, sections = ['acl.allow', 'acl.deny'])
     allow = buildmatch(ui, repo, user, 'acl.allow')
     deny = buildmatch(ui, repo, user, 'acl.deny')
 
--- a/hgext/bookmarks.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/bookmarks.py	Sun Apr 26 11:49:17 2009 +0200
@@ -15,14 +15,15 @@
 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:
+The bookmark extension offers the possiblity to have a more git-like
+experience by adding the following configuration option to your .hgrc:
 
 [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 branching.
+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
+branching.
 '''
 
 from mercurial.i18n import _
@@ -92,7 +93,7 @@
     '''Set the name of the bookmark that we are currently on
 
     Set the name of the bookmark that we are on (hg update <bookmark>).
-    The name is recoreded in .hg/bookmarks.current
+    The name is recorded in .hg/bookmarks.current
     '''
     if current(repo) == mark:
         return
@@ -115,8 +116,8 @@
 
     Bookmarks are pointers to certain commits that move when
     commiting. 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.
+    deleted. It is possible to use bookmark names in 'hg merge' and
+    'hg update' to update 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
--- a/hgext/bugzilla.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/bugzilla.py	Sun Apr 26 11:49:17 2009 +0200
@@ -8,69 +8,76 @@
 '''Bugzilla integration
 
 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 bug
-status.
+that refer to bugs by Bugzilla ID are seen. The hook does not change
+bug status.
 
-The hook updates the Bugzilla database directly. Only Bugzilla installations
-using MySQL are supported.
+The hook updates the Bugzilla database directly. Only Bugzilla
+installations using MySQL are supported.
 
-The hook relies on a Bugzilla script to send bug change notification emails.
-That script changes between Bugzilla versions; the 'processmail' script used
-prior to 2.18 is replaced in 2.18 and subsequent versions by
-'config/sendbugmail.pl'. Note that these will be run by Mercurial as the user
-pushing the change; you will need to ensure the Bugzilla install file
-permissions are set appropriately.
+The hook relies on a Bugzilla script to send bug change notification
+emails. That script changes between Bugzilla versions; the
+'processmail' script used prior to 2.18 is replaced in 2.18 and
+subsequent versions by 'config/sendbugmail.pl'. Note that these will
+be run by Mercurial as the user pushing the change; you will need to
+ensure the Bugzilla install file permissions are set appropriately.
 
 Configuring the extension:
 
     [bugzilla]
-    host       Hostname of the MySQL server holding the Bugzilla database.
+
+    host       Hostname of the MySQL server holding the Bugzilla
+               database.
     db         Name of the Bugzilla database in MySQL. Default 'bugs'.
     user       Username to use to access MySQL server. Default 'bugs'.
     password   Password to use to access MySQL server.
     timeout    Database connection timeout (seconds). Default 5.
-    version    Bugzilla version. Specify '3.0' for Bugzilla versions 3.0 and
-               later, '2.18' for Bugzilla versions from 2.18 and '2.16' for
-               versions prior to 2.18.
+    version    Bugzilla version. Specify '3.0' for Bugzilla versions
+               3.0 and later, '2.18' for Bugzilla versions from 2.18
+               and '2.16' for versions prior to 2.18.
     bzuser     Fallback Bugzilla user name to record comments with, if
                changeset committer cannot be found as a Bugzilla user.
     bzdir      Bugzilla install directory. Used by default notify.
                Default '/var/www/html/bugzilla'.
     notify     The command to run to get Bugzilla to send bug change
-               notification emails. Substitutes from a map with 3 keys,
-               'bzdir', 'id' (bug id) and 'user' (committer bugzilla email).
-               Default depends on version; from 2.18 it is
-               "cd %(bzdir)s && perl -T contrib/sendbugmail.pl %(id)s %(user)s".
-    regexp     Regular expression to match bug IDs in changeset commit message.
-               Must contain one "()" group. The default expression matches
-               'Bug 1234', 'Bug no. 1234', 'Bug number 1234',
-               'Bugs 1234,5678', 'Bug 1234 and 5678' and variations thereof.
-               Matching is case insensitive.
+               notification emails. Substitutes from a map with 3
+               keys, 'bzdir', 'id' (bug id) and 'user' (committer
+               bugzilla email). Default depends on version; from 2.18
+               it is "cd %(bzdir)s && perl -T contrib/sendbugmail.pl
+               %(id)s %(user)s".
+    regexp     Regular expression to match bug IDs in changeset commit
+               message. Must contain one "()" group. The default
+               expression matches 'Bug 1234', 'Bug no. 1234', 'Bug
+               number 1234', 'Bugs 1234,5678', 'Bug 1234 and 5678' and
+               variations thereof. Matching is case insensitive.
     style      The style file to use when formatting comments.
     template   Template to use when formatting comments. Overrides
                style if specified. In addition to the usual Mercurial
                keywords, the extension specifies:
                    {bug}       The Bugzilla bug ID.
-                   {root}      The full pathname of the Mercurial repository.
-                   {webroot}   Stripped pathname of the Mercurial repository.
-                   {hgweb}     Base URL for browsing Mercurial repositories.
+                   {root}      The full pathname of the Mercurial
+                               repository.
+                   {webroot}   Stripped pathname of the Mercurial
+                               repository.
+                   {hgweb}     Base URL for browsing Mercurial
+                               repositories.
                Default 'changeset {node|short} in repo {root} refers '
                        'to bug {bug}.\\ndetails:\\n\\t{desc|tabindent}'
     strip      The number of slashes to strip from the front of {root}
                to produce {webroot}. Default 0.
-    usermap    Path of file containing Mercurial committer ID to Bugzilla user
-               ID mappings. If specified, the file should contain one mapping
-               per line, "committer"="Bugzilla user". See also the
-               [usermap] section.
+    usermap    Path of file containing Mercurial committer ID to
+               Bugzilla user ID mappings. If specified, the file
+               should contain one mapping per line,
+               "committer"="Bugzilla user". See also the [usermap]
+               section.
 
     [usermap]
-    Any entries in this section specify mappings of Mercurial committer ID
-    to Bugzilla user ID. See also [bugzilla].usermap.
+    Any entries in this section specify mappings of Mercurial
+    committer ID to Bugzilla user ID. See also [bugzilla].usermap.
     "committer"="Bugzilla user"
 
     [web]
-    baseurl    Base URL for browsing Mercurial repositories. Reference from
-               templates as {hgweb}.
+    baseurl    Base URL for browsing Mercurial repositories. Reference
+               from templates as {hgweb}.
 
 Activating the extension:
 
@@ -83,9 +90,9 @@
 
 Example configuration:
 
-This example configuration is for a collection of Mercurial repositories
-in /var/local/hg/repos/ used with a local Bugzilla 3.2 installation in
-/opt/bugzilla-3.2.
+This example configuration is for a collection of Mercurial
+repositories in /var/local/hg/repos/ used with a local Bugzilla 3.2
+installation in /opt/bugzilla-3.2.
 
     [bugzilla]
     host=localhost
@@ -132,7 +139,7 @@
         timeout = int(self.ui.config('bugzilla', 'timeout', 5))
         usermap = self.ui.config('bugzilla', 'usermap')
         if usermap:
-            self.ui.readsections(usermap, 'usermap')
+            self.ui.readconfig(usermap, 'usermap')
         self.ui.note(_('connecting to %s:%s as %s, password %s\n') %
                      (host, db, user, '*' * len(passwd)))
         self.conn = MySQLdb.connect(host=host, user=user, passwd=passwd,
@@ -170,12 +177,12 @@
         self.run('''select bug_id from longdescs where
                     bug_id in %s and thetext like "%%%s%%"''' %
                  (buglist(ids), short(node)))
-        unknown = dict.fromkeys(ids)
+        unknown = set(ids)
         for (id,) in self.cursor.fetchall():
             self.ui.status(_('bug %d already knows about changeset %s\n') %
                            (id, short(node)))
-            unknown.pop(id, None)
-        return util.sort(unknown.keys())
+            unknown.discard(id)
+        return util.sort(unknown)
 
     def notify(self, ids, committer):
         '''tell bugzilla to send mail.'''
--- a/hgext/children.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/children.py	Sun Apr 26 11:49:17 2009 +0200
@@ -13,13 +13,13 @@
 
 
 def children(ui, repo, file_=None, **opts):
-    """show the children of the given or working dir revision
+    """show the children of the given or working directory revision
 
-    Print the children of the working directory's revisions.
-    If a revision is given via --rev, the children of that revision
-    will be printed. If a file argument is given, revision in
-    which the file was last changed (after the working directory
-    revision or the argument to --rev if given) is printed.
+    Print the children of the working directory's revisions. If a
+    revision is given via --rev/-r, the children of that revision will
+    be printed. If a file argument is given, revision in which the
+    file was last changed (after the working directory revision or the
+    argument to --rev if given) is printed.
     """
     rev = opts.get('rev')
     if file_:
@@ -35,7 +35,7 @@
 cmdtable = {
     "children":
         (children,
-         [('r', 'rev', '', _('show children of the specified rev')),
+         [('r', 'rev', '', _('show children of the specified revision')),
          ] + templateopts,
          _('hg children [-r REV] [FILE]')),
 }
--- a/hgext/churn.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/churn.py	Sun Apr 26 11:49:17 2009 +0200
@@ -9,7 +9,7 @@
 
 from mercurial.i18n import _
 from mercurial import patch, cmdutil, util, templater
-import os, sys
+import sys
 import time, datetime
 
 def maketemplater(ui, repo, tmpl):
@@ -21,9 +21,10 @@
     t.use_template(tmpl)
     return t
 
-def changedlines(ui, repo, ctx1, ctx2):
+def changedlines(ui, repo, ctx1, ctx2, fns):
     lines = 0
-    diff = ''.join(patch.diff(repo, ctx1.node(), ctx2.node()))
+    fmatch = cmdutil.match(repo, pats=fns)
+    diff = ''.join(patch.diff(repo, ctx1.node(), ctx2.node(), fmatch))
     for l in diff.split('\n'):
         if (l.startswith("+") and not l.startswith("+++ ") or
             l.startswith("-") and not l.startswith("--- ")):
@@ -71,7 +72,7 @@
                 continue
 
             ctx1 = parents[0]
-            lines = changedlines(ui, repo, ctx1, ctx)
+            lines = changedlines(ui, repo, ctx1, ctx, fns)
             rate[key] = rate.get(key, 0) + lines
 
         if opts.get('progress'):
@@ -79,7 +80,7 @@
             newpct = int(100.0 * count / max(len(repo), 1))
             if pct < newpct:
                 pct = newpct
-                ui.write(_("\rgenerating stats: %d%%") % pct)
+                ui.write("\r" + _("generating stats: %d%%") % pct)
                 sys.stdout.flush()
 
     if opts.get('progress'):
@@ -92,9 +93,9 @@
 def churn(ui, repo, *pats, **opts):
     '''graph count of revisions grouped by template
 
-    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.
+    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.
 
     By default statistics are counted for number of changed lines.
 
@@ -149,7 +150,7 @@
     "churn":
         (churn,
          [('r', 'rev', [], _('count rate for the specified revision or range')),
-          ('d', 'date', '', _('count rate for revs matching date spec')),
+          ('d', 'date', '', _('count rate for revisions matching date spec')),
           ('t', 'template', '{author|email}', _('template to group changesets')),
           ('f', 'dateformat', '',
               _('strftime-compatible format for grouping by date')),
--- a/hgext/color.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/color.py	Sun Apr 26 11:49:17 2009 +0200
@@ -18,15 +18,16 @@
 
 '''add color output to status, qseries, and diff-related 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 patch status
-(applied, unapplied, missing), and to diff-related commands to highlight
-additions, removals, diff headers, and trailing whitespace.
+This extension modifies the status command to add color to its output
+to reflect file status, the qseries command to add color to reflect
+patch status (applied, unapplied, missing), and to diff-related
+commands to highlight additions, removals, diff headers, and trailing
+whitespace.
 
-Other effects in addition to color, like bold and underlined text, are also
-available.  Effects are rendered with the ECMA-48 SGR control function (aka
-ANSI escape codes).  This module also provides the render_text function,
-which can be used to add effects to any text.
+Other effects in addition to color, like bold and underlined text, are
+also available. Effects are rendered with the ECMA-48 SGR control
+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]
--- a/hgext/convert/__init__.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/convert/__init__.py	Sun Apr 26 11:49:17 2009 +0200
@@ -8,6 +8,7 @@
 
 import convcmd
 import cvsps
+import subversion
 from mercurial import commands
 from mercurial.i18n import _
 
@@ -31,32 +32,32 @@
     - Mercurial [hg]
     - Subversion [svn] (history on branches is not preserved)
 
-    If no revision is given, all revisions will be converted. Otherwise,
-    convert will only import up to the named revision (given in a format
-    understood by the source).
+    If no revision is given, all revisions will be converted.
+    Otherwise, convert will only import up to the named revision
+    (given in a format understood by the source).
 
     If no destination directory name is specified, it defaults to the
-    basename of the source with '-hg' appended.  If the destination
+    basename of the source with '-hg' appended. If the destination
     repository doesn't exist, it will be created.
 
     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 revision, like so:
+    (<dest>/.hg/shamap by default). The <REVMAP> is a simple text file
+    that maps each source commit ID to the destination ID for that
+    revision, like so:
     <source ID> <destination ID>
 
-    If the file doesn't exist, it's automatically created.  It's updated
-    on each commit copied, so convert-repo can be interrupted and can
-    be run repeatedly to copy new commits.
+    If the file doesn't exist, it's automatically created. It's
+    updated on each commit copied, so convert-repo can be interrupted
+    and can be run repeatedly to copy new commits.
 
-    The [username mapping] file is a simple text file that maps each source
-    commit author to a destination commit author. It is handy for source SCMs
-    that use unix logins to identify authors (eg: CVS). One line per author
-    mapping and the line format is:
+    The [username mapping] file is a simple text file that maps each
+    source commit author to a destination commit author. It is handy
+    for source SCMs that use unix logins to identify authors (eg:
+    CVS). One line per author mapping and the line format is:
     srcauthor=whatever string you want
 
     The filemap is a file that allows filtering and remapping of files
-    and directories.  Comment lines start with '#'.  Each line can
+    and directories. Comment lines start with '#'. Each line can
     contain one of the following directives:
 
       include path/to/file
@@ -67,32 +68,33 @@
 
     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 dirs not explicitely included.
+    exclusion of all other files and directories not explicitely 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 path to
-    rename to.
+    The 'rename' directive renames a file or directory. To rename from
+    a subdirectory into the root of the repository, use '.' as the
+    path to rename to.
 
     The splicemap is a file that allows insertion of synthetic
-    history, letting you specify the parents of a revision.  This is
+    history, letting you specify the parents of a revision. This is
     useful if you want to e.g. give a Subversion merge two parents, or
-    graft two disconnected series of history together.  Each entry
+    graft two disconnected series of history together. Each entry
     contains a key, followed by a space, followed by one or two
-    values, separated by spaces.  The key is the revision ID in the
-    source revision control system whose parents should be modified
-    (same format as a key in .hg/shamap).  The values are the revision
-    IDs (in either the source or destination revision control system)
-    that should be used as the new parents for that node.
+    comma-separated values. The key is the revision ID in the source
+    revision control system whose parents should be modified (same
+    format as a key in .hg/shamap). The values are the revision IDs
+    (in either the source or destination revision control system) that
+    should be used as the new parents for that node.
 
     Mercurial Source
     -----------------
 
-    --config convert.hg.ignoreerrors=False (boolean)
+    --config convert.hg.ignoreerrors=False    (boolean)
         ignore integrity errors when reading. Use it to fix Mercurial
         repositories with missing revlogs, by converting from and to
         Mercurial.
-    --config convert.hg.saverev=False          (boolean)
-        store original revision ID in changeset (forces target IDs to change)
+    --config convert.hg.saverev=False         (boolean)
+        store original revision ID in changeset (forces target IDs to
+        change)
     --config convert.hg.startrev=0            (hg revision identifier)
         convert start revision and its descendants
 
@@ -101,11 +103,11 @@
 
     CVS source will use a sandbox (i.e. a checked-out copy) from CVS
     to indicate the starting point of what will be converted. Direct
-    access to the repository files is not needed, unless of course
-    the repository is :local:. The conversion uses the top level
-    directory 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
+    access to the repository files is not needed, unless of course the
+    repository is :local:. The conversion uses the top level directory
+    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
     sandbox is ignored.
 
@@ -121,34 +123,37 @@
     Internal cvsps is selected by setting
         --config convert.cvsps=builtin
     and has a few more configurable options:
-        --config convert.cvsps.fuzz=60   (integer)
-            Specify the maximum time (in seconds) that is allowed between
-            commits with identical user and log message in a 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.fuzz=60        (integer)
+            Specify the maximum time (in seconds) that is allowed
+            between commits with identical user and log message in a
+            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]+)}}'
-            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.
+            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]+)}}'
-            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 indicated in the
-            regex as the second parent of the changeset.
+            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
+            indicated in the regex as the second parent of the
+            changeset.
 
-    The hgext/convert/cvsps wrapper script allows the builtin changeset
-    merging code to be run without doing a conversion. Its parameters and
-    output are similar to that of cvsps 2.1.
+    The hgext/convert/cvsps wrapper script allows the builtin
+    changeset merging code to be run without doing a conversion. Its
+    parameters and output are similar to that of cvsps 2.1.
 
     Subversion Source
     -----------------
 
     Subversion source detects classical trunk/branches/tags layouts.
     By default, the supplied "svn://repo/path/" source URL is
-    converted as a single branch. If "svn://repo/path/trunk" exists
-    it replaces the default branch. If "svn://repo/path/branches"
-    exists, its subdirectories are listed as possible branches. If
+    converted as a single branch. If "svn://repo/path/trunk" exists it
+    replaces the default branch. If "svn://repo/path/branches" exists,
+    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
@@ -172,16 +177,17 @@
     Perforce Source
     ---------------
 
-    The Perforce (P4) importer can be given a p4 depot path or a client
-    specification as source. It will convert all files in the source to
-    a flat Mercurial repository, ignoring labels, branches and integrations.
-    Note that when a depot path is given you then usually should specify a
-    target directory, because otherwise the target may be named ...-hg.
+    The Perforce (P4) importer can be given a p4 depot path or a
+    client specification as source. It will convert all files in the
+    source to a flat Mercurial repository, ignoring labels, branches
+    and integrations. Note that when a depot path is given you then
+    usually should specify a target directory, because otherwise the
+    target may be named ...-hg.
 
-    It is possible to limit the amount of source history to be converted
-    by specifying an initial Perforce revision.
+    It is possible to limit the amount of source history to be
+    converted by specifying an initial Perforce revision.
 
-    --config convert.p4.startrev=0           (perforce changelist number)
+    --config convert.p4.startrev=0            (perforce changelist number)
         specify initial Perforce revision.
 
 
@@ -199,17 +205,19 @@
     return convcmd.convert(ui, src, dest, revmapfile, **opts)
 
 def debugsvnlog(ui, **opts):
-    return convcmd.debugsvnlog(ui, **opts)
+    return subversion.debugsvnlog(ui, **opts)
 
 def debugcvsps(ui, *args, **opts):
     '''create changeset information from CVS
 
-    This command is intended as a debugging tool for the CVS to Mercurial
-    converter, and can be used as a direct replacement for cvsps.
+    This command is intended as a debugging tool for the CVS to
+    Mercurial converter, and can be used as a direct replacement for
+    cvsps.
 
-    Hg debugcvsps reads the CVS rlog for current directory (or any named
-    directory) in the CVS repository, and converts the log to a series of
-    changesets based on matching commit log entries and dates.'''
+    Hg debugcvsps reads the CVS rlog for current directory (or any
+    named directory) in the CVS repository, and converts the log to a
+    series of changesets based on matching commit log entries and
+    dates.'''
     return cvsps.debugcvsps(ui, *args, **opts)
 
 commands.norepo += " convert debugsvnlog debugcvsps"
--- a/hgext/convert/bzr.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/convert/bzr.py	Sun Apr 26 11:49:17 2009 +0200
@@ -29,15 +29,15 @@
     def __init__(self, ui, path, rev=None):
         super(bzr_source, self).__init__(ui, path, rev=rev)
 
+        if not os.path.exists(os.path.join(path, '.bzr')):
+            raise NoRepo('%s does not look like a Bazaar repo' % path)
+
         try:
             # access bzrlib stuff
             branch
         except NameError:
             raise NoRepo('Bazaar modules could not be loaded')
 
-        if not os.path.exists(os.path.join(path, '.bzr')):
-            raise NoRepo('%s does not look like a Bazaar repo' % path)
-
         path = os.path.abspath(path)
         self.branch = branch.Branch.open(path)
         self.sourcerepo = self.branch.repository
--- a/hgext/convert/common.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/convert/common.py	Sun Apr 26 11:49:17 2009 +0200
@@ -333,8 +333,12 @@
             if err.errno != errno.ENOENT:
                 raise
             return
-        for line in fp:
-            key, value = strutil.rsplit(line[:-1], ' ', 1)
+        for i, line in enumerate(fp):
+            try:
+                key, value = line[:-1].rsplit(' ', 1)
+            except ValueError:
+                raise util.Abort(_('syntax error in %s(%d): key/value pair expected')
+                                 % (self.path, i+1))
             if key not in self:
                 self.order.append(key)
             super(mapfile, self).__setitem__(key, value)
--- a/hgext/convert/convcmd.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/convert/convcmd.py	Sun Apr 26 11:49:17 2009 +0200
@@ -10,7 +10,7 @@
 from darcs import darcs_source
 from git import convert_git
 from hg import mercurial_source, mercurial_sink
-from subversion import debugsvnlog, svn_source, svn_sink
+from subversion import svn_source, svn_sink
 from monotone import monotone_source
 from gnuarch import gnuarch_source
 from bzr import bzr_source
@@ -18,7 +18,7 @@
 import filemap
 
 import os, shutil
-from mercurial import hg, util
+from mercurial import hg, util, encoding
 from mercurial.i18n import _
 
 orig_encoding = 'ascii'
@@ -188,33 +188,38 @@
     def writeauthormap(self):
         authorfile = self.authorfile
         if authorfile:
-           self.ui.status(_('Writing author map file %s\n') % authorfile)
-           ofile = open(authorfile, 'w+')
-           for author in self.authors:
-               ofile.write("%s=%s\n" % (author, self.authors[author]))
-           ofile.close()
+            self.ui.status(_('Writing author map file %s\n') % authorfile)
+            ofile = open(authorfile, 'w+')
+            for author in self.authors:
+                ofile.write("%s=%s\n" % (author, self.authors[author]))
+            ofile.close()
 
     def readauthormap(self, authorfile):
         afile = open(authorfile, 'r')
         for line in afile:
-            if line.strip() == '':
+
+            line = line.strip()
+            if not line or line.startswith('#'):
                 continue
+
             try:
                 srcauthor, dstauthor = line.split('=', 1)
-                srcauthor = srcauthor.strip()
-                dstauthor = dstauthor.strip()
-                if srcauthor in self.authors and dstauthor != self.authors[srcauthor]:
-                    self.ui.status(
-                        _('Overriding mapping for author %s, was %s, will be %s\n')
-                        % (srcauthor, self.authors[srcauthor], dstauthor))
-                else:
-                    self.ui.debug(_('mapping author %s to %s\n')
-                                  % (srcauthor, dstauthor))
-                    self.authors[srcauthor] = dstauthor
-            except IndexError:
-                self.ui.warn(
-                    _('Ignoring bad line in author map file %s: %s\n')
-                    % (authorfile, line.rstrip()))
+            except ValueError:
+                msg = _('Ignoring bad line in author map file %s: %s\n')
+                self.ui.warn(msg % (authorfile, line.rstrip()))
+                continue
+
+            srcauthor = srcauthor.strip()
+            dstauthor = dstauthor.strip()
+            if self.authors.get(srcauthor) in (None, dstauthor):
+                msg = _('mapping author %s to %s\n')
+                self.ui.debug(msg % (srcauthor, dstauthor))
+                self.authors[srcauthor] = dstauthor
+                continue
+
+            m = _('overriding mapping for author %s, was %s, will be %s\n')
+            self.ui.status(m % (srcauthor, self.authors[srcauthor], dstauthor))
+
         afile.close()
 
     def cachecommit(self, rev):
@@ -275,7 +280,7 @@
                 if "\n" in desc:
                     desc = desc.splitlines()[0]
                 # convert log message to local encoding without using
-                # tolocal() because util._encoding conver() use it as
+                # tolocal() because encoding.encoding conver() use it as
                 # 'utf-8'
                 self.ui.status("%d %s\n" % (num, recode(desc)))
                 self.ui.note(_("source: %s\n") % recode(c))
@@ -308,8 +313,8 @@
 
 def convert(ui, src, dest=None, revmapfile=None, **opts):
     global orig_encoding
-    orig_encoding = util._encoding
-    util._encoding = 'UTF-8'
+    orig_encoding = encoding.encoding
+    encoding.encoding = 'UTF-8'
 
     if not dest:
         dest = hg.defaultdest(src) + "-hg"
--- a/hgext/convert/cvs.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/convert/cvs.py	Sun Apr 26 11:49:17 2009 +0200
@@ -24,7 +24,7 @@
         if not self.builtin:
             checktool(cvspsexe)
 
-        self.changeset = {}
+        self.changeset = None
         self.files = {}
         self.tags = {}
         self.lastbranch = {}
@@ -34,12 +34,12 @@
         self.cvsrepo = file(os.path.join(cvs, "Repository")).read()[:-1]
         self.encoding = locale.getpreferredencoding()
 
-        self._parse(ui)
         self._connect()
 
-    def _parse(self, ui):
-        if self.changeset:
+    def _parse(self):
+        if self.changeset is not None:
             return
+        self.changeset = {}
 
         maxrev = 0
         cmd = self.cmd
@@ -65,13 +65,13 @@
 
             if self.builtin:
                 # builtin cvsps code
-                ui.status(_('using builtin cvsps\n'))
+                self.ui.status(_('using builtin cvsps\n'))
 
-                db = cvsps.createlog(ui, cache='update')
-                db = cvsps.createchangeset(ui, db,
-                      fuzz=int(ui.config('convert', 'cvsps.fuzz', 60)),
-                      mergeto=ui.config('convert', 'cvsps.mergeto', None),
-                      mergefrom=ui.config('convert', 'cvsps.mergefrom', None))
+                db = cvsps.createlog(self.ui, cache='update')
+                db = cvsps.createchangeset(self.ui, db,
+                      fuzz=int(self.ui.config('convert', 'cvsps.fuzz', 60)),
+                      mergeto=self.ui.config('convert', 'cvsps.mergeto', None),
+                      mergefrom=self.ui.config('convert', 'cvsps.mergefrom', None))
 
                 for cs in db:
                     if maxrev and cs.id>maxrev:
@@ -278,6 +278,7 @@
             r = self.readp.readline()
 
     def getheads(self):
+        self._parse()
         return self.heads
 
     def _getfile(self, name, rev):
@@ -327,11 +328,12 @@
                 elif line.startswith("E "):
                     self.ui.warn(_("cvs server: %s\n") % line[2:])
                 elif line.startswith("Remove"):
-                    l = self.readp.readline()
+                    self.readp.readline()
                 else:
                     raise util.Abort(_("unknown CVS response: %s") % line)
 
     def getfile(self, file, rev):
+        self._parse()
         data, mode = self._getfile(file, rev)
         self.modecache[(file, rev)] = mode
         return data
@@ -340,14 +342,18 @@
         return self.modecache[(file, rev)]
 
     def getchanges(self, rev):
+        self._parse()
         self.modecache = {}
         return util.sort(self.files[rev].items()), {}
 
     def getcommit(self, rev):
+        self._parse()
         return self.changeset[rev]
 
     def gettags(self):
+        self._parse()
         return self.tags
 
     def getchangedfiles(self, rev, i):
+        self._parse()
         return util.sort(self.files[rev].keys())
--- a/hgext/convert/cvsps.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/convert/cvsps.py	Sun Apr 26 11:49:17 2009 +0200
@@ -34,10 +34,17 @@
         .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)
     '''
     def __init__(self, **entries):
         self.__dict__.update(entries)
 
+    def __repr__(self):
+        return "<%s at 0x%x: %s %s>" % (self.__class__.__name__,
+                                        id(self),
+                                        self.file,
+                                        ".".join(map(str, self.revision)))
+
 class logerror(Exception):
     pass
 
@@ -105,7 +112,7 @@
     re_31 = 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+)?;)?')
+    re_60 = re.compile(r'date:\s+(.+);\s+author:\s+(.+);\s+state:\s+(.+?);(\s+lines:\s+(\+\d+)?\s+(-\d+)?;)?(.*mergepoint:\s+([^;]+);)?')
     re_70 = re.compile('branches: (.+);$')
 
     file_added_re = re.compile(r'file [^/]+ was (initially )?added on branch')
@@ -187,6 +194,7 @@
 
     # state machine begins here
     tags = {}     # dictionary of revisions on current file with their tags
+    branchmap = {} # mapping between branch names and revision numbers
     state = 0
     store = False # set when a new record can be appended
 
@@ -244,6 +252,7 @@
         elif state == 2:
             # expect 'symbolic names'
             if re_20.match(line):
+                branchmap = {}
                 state = 3
 
         elif state == 3:
@@ -261,6 +270,7 @@
                 if rev not in tags:
                     tags[rev] = []
                 tags[rev].append(match.group(1))
+                branchmap[match.group(1)] = match.group(2)
 
             elif re_31.match(line):
                 state = 5
@@ -311,6 +321,18 @@
                 e.lines = (0, int(match.group(6)))
             else:
                 e.lines = None
+
+            if match.group(7): # cvsnt mergepoint
+                myrev = match.group(8).split('.')
+                if len(myrev) == 2: # head
+                    e.mergepoint = 'HEAD'
+                else:
+                    myrev = '.'.join(myrev[:-2] + ['0', myrev[-2]])
+                    branches = [b for b in branchmap if branchmap[b] == myrev]
+                    assert len(branches) == 1, 'unknown branch: %s' % e.mergepoint
+                    e.mergepoint = branches[0]
+            else:
+                e.mergepoint = None
             e.comment = []
             state = 7
 
@@ -354,7 +376,7 @@
               e.revision[-1] == 1 and      # 1.1 or 1.1.x.1
               len(e.comment) == 1 and
               file_added_re.match(e.comment[0])):
-            ui.debug(_('found synthetic rev in %s: %r\n')
+            ui.debug(_('found synthetic revision in %s: %r\n')
                      % (e.rcs, e.comment[0]))
             e.synthetic = True
 
@@ -412,6 +434,7 @@
 
 class changeset(object):
     '''Class changeset has the following attributes:
+        .id        - integer identifying this changeset (list index)
         .author    - author name as CVS knows it
         .branch    - name of branch this changeset is on, or None
         .comment   - commit message
@@ -420,10 +443,16 @@
         .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)
     '''
     def __init__(self, **entries):
         self.__dict__.update(entries)
 
+    def __repr__(self):
+        return "<%s at 0x%x: %s>" % (self.__class__.__name__,
+                                     id(self),
+                                     getattr(self, 'id', "(no id)"))
+
 def createchangeset(ui, log, fuzz=60, mergefrom=None, mergeto=None):
     '''Convert log into changesets.'''
 
@@ -448,7 +477,8 @@
                    (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=[])
+                          branch=e.branch, date=e.date, entries=[],
+                          mergepoint=getattr(e, 'mergepoint', None))
             changesets.append(c)
             files = {}
             if len(changesets) % 100 == 0:
@@ -470,7 +500,8 @@
         #   "File file4 was added on branch ..." (synthetic, 1 entry)
         #   "Add file3 and file4 to fix ..."     (real, 2 entries)
         # Hence the check for 1 entry here.
-        c.synthetic = (len(c.entries) == 1 and c.entries[0].synthetic)
+        synth = getattr(c.entries[0], 'synthetic', None)
+        c.synthetic = (len(c.entries) == 1 and synth)
 
     # Sort files in each changeset
 
@@ -595,14 +626,20 @@
             if p is not None:
                 c.parents.append(p)
 
+        if c.mergepoint:
+            if c.mergepoint == 'HEAD':
+                c.mergepoint = None
+            c.parents.append(changesets[branches[c.mergepoint]])
+
         if mergefrom:
             m = mergefrom.search(c.comment)
             if m:
                 m = m.group(1)
                 if m == 'HEAD':
                     m = None
-                if m in branches and c.branch != m:
-                    c.parents.append(changesets[branches[m]])
+                candidate = changesets[branches[m]]
+                if m in branches and c.branch != m and not candidate.synthetic:
+                    c.parents.append(candidate)
 
         if mergeto:
             m = mergeto.search(c.comment)
--- a/hgext/convert/darcs.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/convert/darcs.py	Sun Apr 26 11:49:17 2009 +0200
@@ -24,6 +24,9 @@
 
         # check for _darcs, ElementTree, _darcs/inventory so that we can
         # easily skip test-convert-darcs if ElementTree is not around
+        if not os.path.exists(os.path.join(path, '_darcs', 'inventories')):
+            raise NoRepo("%s does not look like a darcs repo" % path)
+
         if not os.path.exists(os.path.join(path, '_darcs')):
             raise NoRepo("%s does not look like a darcs repo" % path)
 
@@ -32,9 +35,6 @@
         if ElementTree is None:
             raise util.Abort(_("Python ElementTree module is not available"))
 
-        if not os.path.exists(os.path.join(path, '_darcs', 'inventories')):
-            raise NoRepo("%s does not look like a darcs repo" % path)
-
         self.path = os.path.realpath(path)
 
         self.lastrev = None
--- a/hgext/convert/filemap.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/convert/filemap.py	Sun Apr 26 11:49:17 2009 +0200
@@ -69,7 +69,7 @@
         for pre, suf in rpairs(name):
             try:
                 return mapping[pre], pre, suf
-            except KeyError, err:
+            except KeyError:
                 pass
         return '', name, ''
 
@@ -148,7 +148,7 @@
         # wanted by previous runs.
         self._rebuilt = not revmap
         seen = {SKIPREV: SKIPREV}
-        dummyset = util.set()
+        dummyset = set()
         converted = []
         for rev in revmap.order:
             mapped = revmap[rev]
@@ -237,7 +237,7 @@
             # map to any revision in the restricted graph.  Put SKIPREV
             # in the set of wanted ancestors to simplify code elsewhere
             self.parentmap[rev] = SKIPREV
-            self.wantedancestors[rev] = util.set((SKIPREV,))
+            self.wantedancestors[rev] = set((SKIPREV,))
             return
 
         # Reuse the data from our parent.
@@ -254,7 +254,7 @@
 
         # The set of wanted ancestors of rev is the union of the sets
         # of wanted ancestors of its parents. Plus rev itself.
-        wrev = util.set()
+        wrev = set()
         for p in parents:
             wrev.update(self.wantedancestors[p])
         wrev.add(rev)
--- a/hgext/convert/git.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/convert/git.py	Sun Apr 26 11:49:17 2009 +0200
@@ -84,7 +84,6 @@
         message = c[end+2:]
         message = self.recode(message)
         l = c[:end].splitlines()
-        manifest = l[0].split()[1]
         parents = []
         for e in l[1:]:
             n, v = e.split(" ", 1)
--- a/hgext/convert/gnuarch.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/convert/gnuarch.py	Sun Apr 26 11:49:17 2009 +0200
@@ -168,7 +168,7 @@
             copies.update(cps)
 
         self.lastrev = rev
-        return util.sort(util.unique(changes)), copies
+        return util.sort(set(changes)), copies
 
     def getcommit(self, rev):
         changes = self.changes[rev]
@@ -279,7 +279,7 @@
             # Commit revision origin when dealing with a branch or tag
             if catlog.has_key('Continuation-of'):
                 self.changes[rev].continuationof = self.recode(catlog['Continuation-of'])
-        except Exception, err:
+        except Exception:
             raise util.Abort(_('could not parse cat-log of %s') % rev)
 
     def _parsechangeset(self, data, rev):
--- a/hgext/convert/hg.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/convert/hg.py	Sun Apr 26 11:49:17 2009 +0200
@@ -42,7 +42,7 @@
                 if not self.repo.local():
                     raise NoRepo(_('%s is not a local Mercurial repo') % path)
                 self.created.append(path)
-            except error.RepoError, err:
+            except error.RepoError:
                 ui.print_exc()
                 raise NoRepo("could not create hg repo %s as sink" % path)
         self.lock = None
@@ -56,8 +56,8 @@
 
     def after(self):
         self.ui.debug(_('run hg sink post-conversion action\n'))
-        self.lock = None
-        self.wlock = None
+        self.lock.release()
+        self.wlock.release()
 
     def revmapfile(self):
         return os.path.join(self.path, ".hg", "shamap")
@@ -142,7 +142,7 @@
             p2 = parents.pop(0)
             ctx = context.memctx(self.repo, (p1, p2), text, files.keys(), getfilectx,
                                  commit.author, commit.date, extra)
-            a = self.repo.commitctx(ctx)
+            self.repo.commitctx(ctx)
             text = "(octopus merge fixup)\n"
             p2 = hex(self.repo.changelog.tip())
 
@@ -155,35 +155,33 @@
         return p2
 
     def puttags(self, tags):
-         try:
-             parentctx = self.repo[self.tagsbranch]
-             tagparent = parentctx.node()
-         except error.RepoError, inst:
-             parentctx = None
-             tagparent = nullid
+        try:
+            parentctx = self.repo[self.tagsbranch]
+            tagparent = parentctx.node()
+        except error.RepoError:
+            parentctx = None
+            tagparent = nullid
 
-         try:
-             oldlines = util.sort(parentctx['.hgtags'].data().splitlines(1))
-         except:
-             oldlines = []
+        try:
+            oldlines = util.sort(parentctx['.hgtags'].data().splitlines(1))
+        except:
+            oldlines = []
 
-         newlines = util.sort([("%s %s\n" % (tags[tag], tag)) for tag in tags])
-
-         if newlines == oldlines:
-             return None
-         data = "".join(newlines)
-
-         def getfilectx(repo, memctx, f):
+        newlines = util.sort([("%s %s\n" % (tags[tag], tag)) for tag in tags])
+        if newlines == oldlines:
+            return None
+        data = "".join(newlines)
+        def getfilectx(repo, memctx, f):
             return context.memfilectx(f, data, False, False, None)
 
-         self.ui.status(_("updating tags\n"))
-         date = "%s 0" % int(time.mktime(time.gmtime()))
-         extra = {'branch': self.tagsbranch}
-         ctx = context.memctx(self.repo, (tagparent, None), "update tags",
-                              [".hgtags"], getfilectx, "convert-repo", date,
-                              extra)
-         self.repo.commitctx(ctx)
-         return hex(self.repo.changelog.tip())
+        self.ui.status(_("updating tags\n"))
+        date = "%s 0" % int(time.mktime(time.gmtime()))
+        extra = {'branch': self.tagsbranch}
+        ctx = context.memctx(self.repo, (tagparent, None), "update tags",
+                             [".hgtags"], getfilectx, "convert-repo", date,
+                             extra)
+        self.repo.commitctx(ctx)
+        return hex(self.repo.changelog.tip())
 
     def setfilemapmode(self, active):
         self.filemapmode = active
--- a/hgext/convert/monotone.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/convert/monotone.py	Sun Apr 26 11:49:17 2009 +0200
@@ -1,8 +1,8 @@
 # monotone support for the convert extension
 
-import os, re, time
+import os, re
 from mercurial import util
-from common import NoRepo, MissingTool, commit, converter_source, checktool
+from common import NoRepo, commit, converter_source, checktool
 from common import commandline
 from mercurial.i18n import _
 
@@ -14,6 +14,16 @@
         self.ui = ui
         self.path = path
 
+        norepo = NoRepo (_("%s does not look like a monotone repo") % path)
+        if not os.path.exists(os.path.join(path, '_MTN')):
+            # Could be a monotone repository (SQLite db file)
+            try:
+                header = file(path, 'rb').read(16)
+            except:
+                header = ''
+            if header != 'SQLite format 3\x00':
+                raise norepo
+
         # regular expressions for parsing monotone output
         space    = r'\s*'
         name     = r'\s+"((?:\\"|[^"])*)"\s*'
@@ -39,10 +49,6 @@
         self.files = None
         self.dirs  = None
 
-        norepo = NoRepo (_("%s does not look like a monotone repo") % path)
-        if not os.path.exists(path):
-            raise norepo
-
         checktool('mtn', abort=False)
 
         # test if there are any revisions
@@ -166,7 +172,8 @@
                     # d2 => d3
                     ignoremove[tofile] = 1
             for tofile, fromfile in renamed.items():
-                self.ui.debug (_("copying file in renamed dir from '%s' to '%s'") 
+                self.ui.debug (_("copying file in renamed directory "
+                                 "from '%s' to '%s'")
                                % (fromfile, tofile), '\n')
                 files[tofile] = rev
                 copies[tofile] = fromfile
--- a/hgext/convert/p4.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/convert/p4.py	Sun Apr 26 11:49:17 2009 +0200
@@ -10,7 +10,7 @@
 from mercurial import util
 from mercurial.i18n import _
 
-from common import commit, converter_source, checktool
+from common import commit, converter_source, checktool, NoRepo
 import marshal
 
 def loaditer(f):
@@ -28,7 +28,10 @@
     def __init__(self, ui, path, rev=None):
         super(p4_source, self).__init__(ui, path, rev=rev)
 
-        checktool('p4')
+        if not path.startswith('//'):
+            raise NoRepo('%s does not look like a P4 repo' % path)
+
+        checktool('p4', abort=False)
 
         self.p4changes = {}
         self.heads = {}
--- a/hgext/convert/subversion.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/convert/subversion.py	Sun Apr 26 11:49:17 2009 +0200
@@ -134,6 +134,38 @@
             self._stdout.close()
             self._stdout = None
 
+
+# Check to see if the given path is a local Subversion repo. Verify this by
+# looking for several svn-specific files and directories in the given
+# directory.
+def filecheck(path, proto):
+    for x in ('locks', 'hooks', 'format', 'db', ):
+        if not os.path.exists(os.path.join(path, x)):
+            return False
+    return True
+
+# Check to see if a given path is the root of an svn repo over http. We verify
+# this by requesting a version-controlled URL we know can't exist and looking
+# for the svn-specific "not found" XML.
+def httpcheck(path, proto):
+   return ('<m:human-readable errcode="160013">' in
+           urllib.urlopen('%s://%s/!svn/ver/0/.svn' % (proto, path)).read())
+
+protomap = {'http': httpcheck,
+            'https': httpcheck,
+            'file': filecheck,
+            }
+def issvnurl(url):
+    if not '://' in url:
+        return False
+    proto, path = url.split('://', 1)
+    check = protomap.get(proto, lambda p, p2: False)
+    while '/' in path:
+        if check(path, proto):
+            return True
+        path = path.rsplit('/', 1)[0]
+    return False
+
 # SVN conversion code stolen from bzr-svn and tailor
 #
 # Subversion looks like a versioned filesystem, branches structures
@@ -152,6 +184,12 @@
     def __init__(self, ui, url, rev=None):
         super(svn_source, self).__init__(ui, url, rev=rev)
 
+        if not (url.startswith('svn://') or url.startswith('svn+ssh://') or
+                (os.path.exists(url) and
+                 os.path.exists(os.path.join(url, '.svn'))) or
+                issvnurl(url)):
+            raise NoRepo("%s does not look like a Subversion repo" % url)
+
         try:
             SubversionException
         except NameError:
@@ -177,7 +215,7 @@
             if at >= 0:
                 latest = int(url[at+1:])
                 url = url[:at]
-        except ValueError, e:
+        except ValueError:
             pass
         self.url = geturl(url)
         self.encoding = 'UTF-8' # Subversion is always nominal UTF-8
@@ -194,7 +232,7 @@
             self.commits = {}
             self.paths = {}
             self.uuid = svn.ra.get_uuid(self.ra).decode(self.encoding)
-        except SubversionException, e:
+        except SubversionException:
             ui.print_exc()
             raise NoRepo("%s does not look like a Subversion repo" % self.url)
 
@@ -215,7 +253,7 @@
 
         try:
             self.get_blacklist()
-        except IOError, e:
+        except IOError:
             pass
 
         self.head = self.latest(self.module, latest)
@@ -246,7 +284,7 @@
             svn.client.ls(self.url.rstrip('/') + '/' + urllib.quote(path),
                                  optrev, False, self.ctx)
             return True
-        except SubversionException, err:
+        except SubversionException:
             return False
 
     def getheads(self):
@@ -309,7 +347,7 @@
 
         if self.startrev and self.heads:
             if len(self.heads) > 1:
-                raise util.Abort(_('svn: start revision is not supported with '
+                raise util.Abort(_('svn: start revision is not supported '
                                    'with more than one branch'))
             revnum = self.revnum(self.heads[0])
             if revnum < self.startrev:
@@ -438,7 +476,7 @@
                 pendings = remainings
                 tagspath = srctagspath
 
-        except SubversionException, (inst, num):
+        except SubversionException:
             self.ui.note(_('no tags found at revision %d\n') % start)
         return tags
 
@@ -463,7 +501,7 @@
         return int(rev.split('@')[-1])
 
     def revsplit(self, rev):
-        url, revnum = strutil.rsplit(rev.encode(self.encoding), '@', 1)
+        url, revnum = rev.encode(self.encoding).rsplit('@', 1)
         revnum = int(revnum)
         parts = url.split('/', 1)
         uuid = parts.pop(0)[4:]
@@ -526,14 +564,14 @@
         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 = util.set()
+        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, e:
+                except ValueError:
                     pass # not an integer or a comment
 
     def is_blacklisted(self, svn_rev):
@@ -716,7 +754,7 @@
                     copytopath = self.getrelpath(copytopath)
                     copies[self.recode(copytopath)] = self.recode(entry, pmodule)
 
-        return (util.unique(entries), copies)
+        return (list(set(entries)), copies)
 
     def _fetch_revisions(self, from_revnum, to_revnum):
         if from_revnum < to_revnum:
@@ -735,7 +773,7 @@
             rev = self.revid(revnum)
             # branch log might return entries for a parent we already have
 
-            if (rev in self.commits or revnum < to_revnum):
+            if rev in self.commits or revnum < to_revnum:
                 return None, branched
 
             parents = []
@@ -1061,7 +1099,7 @@
                 os.rename(tempname, wdest)
 
     def dirs_of(self, files):
-        dirs = util.set()
+        dirs = set()
         for f in files:
             if os.path.isdir(self.wjoin(f)):
                 dirs.add(f)
@@ -1103,7 +1141,7 @@
         for f, v in files:
             try:
                 data = source.getfile(f, v)
-            except IOError, inst:
+            except IOError:
                 self.delete.append(f)
             else:
                 e = source.getmode(f, v)
@@ -1117,8 +1155,8 @@
                 return self.revid(self.childmap[parent])
             except KeyError:
                 pass
-        entries = util.set(self.delete)
-        files = util.frozenset(files)
+        entries = set(self.delete)
+        files = frozenset(files)
         entries.update(self.add_dirs(files.difference(entries)))
         if self.copies:
             for s, d in self.copies:
--- a/hgext/convert/transport.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/convert/transport.py	Sun Apr 26 11:49:17 2009 +0200
@@ -44,8 +44,18 @@
         svn.client.get_ssl_server_trust_file_provider(pool),
         ]
     # Platform-dependant authentication methods
-    if hasattr(svn.client, 'get_windows_simple_provider'):
-        providers.append(svn.client.get_windows_simple_provider(pool))
+    getprovider = getattr(svn.core, 'svn_auth_get_platform_specific_provider',
+                          None)
+    if getprovider:
+        # Available in svn >= 1.6
+        for name in ('gnome_keyring', 'keychain', 'kwallet', 'windows'):
+            for type in ('simple', 'ssl_client_cert_pw', 'ssl_server_trust'):
+                p = getprovider(name, type, pool)
+                if p:
+                    providers.append(p)
+    else:
+        if hasattr(svn.client, 'get_windows_simple_provider'):
+            providers.append(svn.client.get_windows_simple_provider(pool))
 
     return svn.core.svn_auth_open(providers, pool)
 
--- a/hgext/extdiff.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/extdiff.py	Sun Apr 26 11:49:17 2009 +0200
@@ -7,7 +7,7 @@
 
 '''
 The `extdiff' Mercurial extension allows you to use external programs
-to compare revisions, or revision with working dir.  The external diff
+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.
@@ -34,15 +34,15 @@
   meld =
 
   # add new command called vimdiff, runs gvimdiff with DirDiff plugin
-  #(see http://www.vim.org/scripts/script.php?script_id=102)
+  # (see http://www.vim.org/scripts/script.php?script_id=102)
   # Non english user, be sure to put "let g:DirDiffDynamicDiffText = 1" in
   # your .vimrc
   vimdiff = gvim -f '+next' '+execute "DirDiff" argv(0) argv(1)'
 
-You can use -I/-X and list of file or directory names like normal
-"hg diff" command.  The `extdiff' extension makes snapshots of only
-needed files, so running the external diff program will actually be
-pretty fast (at least faster than having to compare the entire tree).
+You can use -I/-X and list of file or directory names like normal "hg
+diff" command. The `extdiff' extension makes snapshots of only needed
+files, so running the external diff program will actually be pretty
+fast (at least faster than having to compare the entire tree).
 '''
 
 from mercurial.i18n import _
@@ -65,7 +65,7 @@
         ui.note(_('making snapshot of %d files from rev %s\n') %
                 (len(files), short(node)))
     else:
-        ui.note(_('making snapshot of %d files from working dir\n') %
+        ui.note(_('making snapshot of %d files from working directory\n') %
             (len(files)))
     wopener = util.opener(base)
     fns_and_mtime = []
@@ -164,19 +164,19 @@
     '''use external program to diff repository (or selected files)
 
     Show differences between revisions for the specified files, using
-    an external program.  The default program used is diff, with
+    an external program. The default program used is diff, with
     default options "-Npru".
 
-    To select a different program, use the -p option.  The program
-    will be passed the names of two directories to compare.  To pass
-    additional options to the program, use the -o option.  These will
-    be passed before the names of the directories to compare.
+    To select a different program, use the -p/--program option. The
+    program will be passed the names of two directories to compare. To
+    pass additional options to the program, use -o/--option. These
+    will be passed before the names of the directories to compare.
 
-    When two revision arguments are given, then changes are
-    shown between those revisions. If only one revision is
-    specified then that revision is compared to the working
-    directory, and, when no revisions are specified, the
-    working directory files are compared to its parent.'''
+    When two revision arguments are given, then changes are shown
+    between those revisions. If only one revision is specified then
+    that revision is compared to the working directory, and, when no
+    revisions are specified, the working directory files are compared
+    to its parent.'''
     program = opts['program'] or 'diff'
     if opts['program']:
         option = opts['option']
--- a/hgext/fetch.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/fetch.py	Sun Apr 26 11:49:17 2009 +0200
@@ -9,6 +9,7 @@
 from mercurial.i18n import _
 from mercurial.node import nullid, short
 from mercurial import commands, cmdutil, hg, util, url
+from mercurial.lock import release
 
 def fetch(ui, repo, source='default', **opts):
     '''pull changes from a remote repository, merge new changes if needed.
@@ -16,13 +17,14 @@
     This finds all changes from the repository at the specified path
     or URL and adds them to the local repository.
 
-    If the pulled changes add a new branch head, the head is automatically
-    merged, and the result of the merge is committed.  Otherwise, the
-    working directory is updated to include the new changes.
+    If the pulled changes add a new branch head, the head is
+    automatically merged, and the result of the merge is committed.
+    Otherwise, the working directory is updated to include the new
+    changes.
 
     When a merge occurs, the newly pulled changes are assumed to be
-    "authoritative".  The head of the new changes is used as the first
-    parent, with local changes as the second.  To switch the merge
+    "authoritative". The head of the new changes is used as the first
+    parent, with local changes as the second. To switch the merge
     order, use --switch-parent.
 
     See 'hg help dates' for a list of formats valid for -d/--date.
@@ -131,7 +133,7 @@
                                            short(n)))
 
     finally:
-        del lock, wlock
+        release(lock, wlock)
 
 cmdtable = {
     'fetch':
--- a/hgext/graphlog.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/graphlog.py	Sun Apr 26 11:49:17 2009 +0200
@@ -12,13 +12,12 @@
 '''
 
 import os
-import sys
 from mercurial.cmdutil import revrange, show_changeset
-from mercurial.commands import templateopts, logopts, remoteopts
+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, ui, url, util
+from mercurial import hg, url, util
 
 def revisions(repo, start, stop):
     """cset DAG generator yielding (rev, node, [parents]) tuples
@@ -287,7 +286,7 @@
 
 def graphrevs(repo, nodes, opts):
     nodes.reverse()
-    include = util.set(nodes)
+    include = set(nodes)
     limit = cmdutil.loglimit(opts)
     count = 0
     for node in nodes:
@@ -385,8 +384,6 @@
 
         chlist = other.changelog.nodesbetween(incoming, revs)[0]
         revdag = graphrevs(other, chlist, opts)
-        other_parents = []
-        displayer = show_changeset(ui, other, opts, buffered=True)
         graphdag = graphabledag(ui, repo, revdag, opts)
         ascii(ui, grapher(graphdag))
 
--- a/hgext/hgk.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/hgk.py	Sun Apr 26 11:49:17 2009 +0200
@@ -7,17 +7,17 @@
 '''browsing 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.)
+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,
 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:
+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
@@ -29,8 +29,8 @@
   hgk=
 
 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 the path to hgk in your .hgrc file:
+to work, hgk must be in your search path. Alternately, you can specify
+the path to hgk in your .hgrc file:
 
   [hgk]
   path=/location/of/hgk
--- a/hgext/highlight/highlight.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/highlight/highlight.py	Sun Apr 26 11:49:17 2009 +0200
@@ -6,7 +6,7 @@
 from mercurial import demandimport
 demandimport.ignore.extend(['pkgutil', 'pkg_resources', '__main__',])
 
-from mercurial import util
+from mercurial import util, encoding
 from mercurial.templatefilters import filters
 
 from pygments import highlight
@@ -30,19 +30,19 @@
         return
 
     # avoid UnicodeDecodeError in pygments
-    text = util.tolocal(text)
+    text = encoding.tolocal(text)
 
     # To get multi-line strings right, we can't format line-by-line
     try:
         lexer = guess_lexer_for_filename(fctx.path(), text[:1024],
-                                         encoding=util._encoding)
+                                         encoding=encoding.encoding)
     except (ClassNotFound, ValueError):
         try:
-            lexer = guess_lexer(text[:1024], encoding=util._encoding)
+            lexer = guess_lexer(text[:1024], encoding=encoding.encoding)
         except (ClassNotFound, ValueError):
-            lexer = TextLexer(encoding=util._encoding)
+            lexer = TextLexer(encoding=encoding.encoding)
 
-    formatter = HtmlFormatter(style=style, encoding=util._encoding)
+    formatter = HtmlFormatter(style=style, encoding=encoding.encoding)
 
     colorized = highlight(text, lexer, formatter)
     # strip wrapping div
--- a/hgext/inotify/__init__.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/inotify/__init__.py	Sun Apr 26 11:49:17 2009 +0200
@@ -58,7 +58,7 @@
                 if not ignored and not self.inotifyserver:
                     result = client.query(ui, repo, files, match, False,
                                           clean, unknown)
-                    if ui.config('inotify', 'debug'):
+                    if result and ui.config('inotify', 'debug'):
                         r2 = super(inotifydirstate, self).status(
                             match, False, clean, unknown)
                         for c,a,b in zip('LMARDUIC', result, r2):
@@ -80,23 +80,21 @@
                                    'removing it)\n'))
                     os.unlink(repo.join('inotify.sock'))
                 if err[0] in (errno.ECONNREFUSED, errno.ENOENT) and autostart:
-                    query = None
                     ui.debug(_('(starting inotify server)\n'))
                     try:
                         try:
                             server.start(ui, repo)
-                            query = client.query
                         except server.AlreadyStartedException, inst:
                             # another process may have started its own
                             # inotify server while this one was starting.
                             ui.debug(str(inst))
-                            query = client.query
                     except Exception, inst:
                         ui.warn(_('could not start inotify server: '
                                        '%s\n') % inst)
-                    if query:
+                    else:
+                        # server is started, send query again
                         try:
-                            return query(ui, repo, files or [], match,
+                            return client.query(ui, repo, files, match,
                                          ignored, clean, unknown)
                         except socket.error, err:
                             ui.warn(_('could not talk to new inotify '
--- a/hgext/inotify/client.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/inotify/client.py	Sun Apr 26 11:49:17 2009 +0200
@@ -23,7 +23,7 @@
             raise
 
     def genquery():
-        for n in names or []:
+        for n in names:
             yield n
         states = 'almrx!'
         if ignored:
--- a/hgext/inotify/linux/__init__.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/inotify/linux/__init__.py	Sun Apr 26 11:49:17 2009 +0200
@@ -27,7 +27,7 @@
     def read_value():
         try:
             return int(open(procfs_path + '/' + name).read())
-        except OSError, err:
+        except OSError:
             return None
 
     read_value.__doc__ = '''Return the value of the %s setting from /proc.
--- a/hgext/inotify/server.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/inotify/server.py	Sun Apr 26 11:49:17 2009 +0200
@@ -304,6 +304,11 @@
                         dd[fn] = status
             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):
         # Files that had been deleted but were present in the dirstate
@@ -473,8 +478,7 @@
 
         if evt.mask & inotify.IN_ISDIR:
             self.scan(wpath)
-        else:
-            self.schedule_work(wpath, 'd')
+        self.schedule_work(wpath, 'd')
 
     def process_modify(self, wpath, evt):
         if self.ui.debugflag:
--- a/hgext/keyword.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/keyword.py	Sun Apr 26 11:49:17 2009 +0200
@@ -11,8 +11,8 @@
 #
 # There are many good reasons why this is not needed in a distributed
 # SCM, still it may be useful in very small projects based on single
-# files (like LaTeX packages), that are mostly addressed to an audience
-# not running a version control system.
+# files (like LaTeX packages), that are mostly addressed to an
+# audience not running a version control system.
 #
 # For in-depth discussion refer to
 # <http://www.selenic.com/mercurial/wiki/index.cgi/KeywordPlan>.
@@ -34,15 +34,15 @@
 
 '''keyword expansion in local repositories
 
-This extension expands RCS/CVS-like or self-customized $Keywords$
-in tracked text files selected by your configuration.
+This extension expands RCS/CVS-like or self-customized $Keywords$ in
+tracked text files selected by your configuration.
 
-Keywords are only expanded in local repositories and not stored in
-the change history. The mechanism can be regarded as a convenience
-for the current user or for archive distribution.
+Keywords are only expanded in local repositories and not stored in the
+change history. The mechanism can be regarded as a convenience for the
+current user or for archive distribution.
 
-Configuration is done in the [keyword] and [keywordmaps] sections
-of hgrc files.
+Configuration is done in the [keyword] and [keywordmaps] sections of
+hgrc files.
 
 Example:
 
@@ -52,26 +52,28 @@
     x*    = ignore
 
 Note: the more specific you are in your filename patterns
-      the less you lose speed in huge repos.
+      the less you lose speed in huge repositories.
 
 For [keywordmaps] template mapping and expansion demonstration and
 control run "hg kwdemo".
 
 An additional date template filter {date|utcdate} is provided.
 
-The default template mappings (view with "hg kwdemo -d") can be replaced
-with customized keywords and templates.
-Again, run "hg kwdemo" to control the results of your config changes.
+The default template mappings (view with "hg kwdemo -d") can be
+replaced with customized keywords and templates. Again, run "hg
+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 history.
+the risk of inadvertedly storing expanded keywords in the change
+history.
 
 To force expansion after enabling it, or a configuration change, run
 "hg kwexpand".
 
-Also, when committing with the record extension or using mq's qrecord, be aware
-that keywords cannot be updated. Again, run "hg kwexpand" on the files in
-question to update keyword expansions after all changes have been checked in.
+Also, when committing with the record extension or using mq's qrecord,
+be aware that keywords cannot be updated. Again, run "hg kwexpand" on
+the files in question to update keyword expansions after all changes
+have been checked in.
 
 Expansions spanning more than one line and incremental expansions,
 like CVS' $Log$, are not supported. A keyword template map
@@ -81,6 +83,7 @@
 from mercurial import commands, cmdutil, dispatch, filelog, revlog, extensions
 from mercurial import patch, localrepo, templater, templatefilters, util
 from mercurial.hgweb import webcommands
+from mercurial.lock import release
 from mercurial.node import nullid, hex
 from mercurial.i18n import _
 import re, shutil, tempfile, time
@@ -175,7 +178,8 @@
         candidates = [f for f in files if self.iskwfile(f, ctx.flags)]
         if candidates:
             self.restrict = True # do not expand when reading
-            action = expand and 'expanding' or 'shrinking'
+            msg = (expand and _('overwriting %s expanding keywords\n')
+                   or _('overwriting %s shrinking keywords\n'))
             for f in candidates:
                 fp = self.repo.file(f)
                 data = fp.read(mf[f])
@@ -189,7 +193,7 @@
                 else:
                     found = self.re_kw.search(data)
                 if found:
-                    notify(_('overwriting %s %s keywords\n') % (f, action))
+                    notify(msg % f)
                     self.repo.wwrite(f, data, mf.flags(f))
                     self.repo.dirstate.normal(f)
             self.restrict = False
@@ -270,17 +274,16 @@
         lock = repo.lock()
         kwt.overwrite(None, expand, status[6])
     finally:
-        del wlock, lock
-
+        release(lock, wlock)
 
 def demo(ui, repo, *args, **opts):
     '''print [keywordmaps] configuration and an expansion example
 
-    Show current, custom, or default keyword template maps
-    and their expansion.
+    Show current, custom, or default keyword template maps and their
+    expansion.
 
-    Extend current configuration by specifying maps as arguments
-    and optionally by reading from an additional hgrc file.
+    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.
     '''
@@ -297,7 +300,7 @@
     fn = 'demo.txt'
     branchname = 'demobranch'
     tmpdir = tempfile.mkdtemp('', 'kwdemo.')
-    ui.note(_('creating temporary repo at %s\n') % tmpdir)
+    ui.note(_('creating temporary repository at %s\n') % tmpdir)
     repo = localrepo.localrepository(ui, tmpdir, True)
     ui.setconfig('keyword', fn, '')
     if args or opts.get('rcfile'):
@@ -351,7 +354,7 @@
     fmt = ui.verbose and ' in %s' % path or ''
     demostatus('%s keywords expanded%s' % (kwstatus, fmt))
     ui.write(repo.wread(fn))
-    ui.debug(_('\nremoving temporary repo %s\n') % tmpdir)
+    ui.debug(_('\nremoving temporary repository %s\n') % tmpdir)
     shutil.rmtree(tmpdir, ignore_errors=True)
 
 def expand(ui, repo, *pats, **opts):
@@ -367,9 +370,9 @@
 def files(ui, repo, *pats, **opts):
     '''print files currently configured for keyword expansion
 
-    Crosscheck which files in working directory are potential targets for
-    keyword expansion.
-    That is, files matched by [keyword] config patterns but not symlinks.
+    Crosscheck which files in working directory are potential targets
+    for keyword expansion. That is, files matched by [keyword] config
+    patterns but not symlinks.
     '''
     kwt = kwtools['templater']
     status = _status(ui, repo, kwt, opts.get('untracked'), *pats, **opts)
@@ -389,8 +392,8 @@
 def shrink(ui, repo, *pats, **opts):
     '''revert expanded keywords in working directory
 
-    Run before changing/disabling active keywords
-    or if you experience problems with "hg import" or "hg merge".
+    Run before changing/disabling active keywords or if you experience
+    problems with "hg import" or "hg merge".
 
     kwshrink refuses to run if given files contain local changes.
     '''
@@ -484,7 +487,7 @@
                     repo.hook('commit', node=n, parent1=_p1, parent2=_p2)
                 return n
             finally:
-                del wlock, lock
+                release(lock, wlock)
 
     # monkeypatches
     def kwpatchfile_init(orig, self, ui, fname, opener, missing=False):
--- a/hgext/mq.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/mq.py	Sun Apr 26 11:49:17 2009 +0200
@@ -8,11 +8,11 @@
 '''patch management and development
 
 This extension lets you work with a stack of patches in a Mercurial
-repository.  It manages two stacks of patches - all known patches, and
+repository. It manages two stacks of patches - all known patches, and
 applied patches (subset of known patches).
 
 Known patches are represented as patch files in the .hg/patches
-directory.  Applied patches are both patch files and changesets.
+directory. Applied patches are both patch files and changesets.
 
 Common tasks (use "hg help command" for more details):
 
@@ -31,6 +31,7 @@
 
 from mercurial.i18n import _
 from mercurial.node import bin, hex, short, nullid, nullrev
+from mercurial.lock import release
 from mercurial import commands, cmdutil, hg, patch, util
 from mercurial import repair, extensions, url, error
 import os, sys, re, errno
@@ -203,7 +204,7 @@
             bad = self.check_guard(guard)
             if bad:
                 raise util.Abort(bad)
-        guards = util.sort(util.unique(guards))
+        guards = util.sort(set(guards))
         self.ui.debug(_('active guards: %s\n') % ' '.join(guards))
         self.active_guards = guards
         self.guards_dirty = True
@@ -518,7 +519,8 @@
                     repo.dirstate.invalidate()
                 raise
         finally:
-            del tr, lock, wlock
+            del tr
+            release(lock, wlock)
             self.removeundo(repo)
 
     def _apply(self, repo, series, list=False, update_status=True,
@@ -766,6 +768,7 @@
                         for chunk in chunks:
                             p.write(chunk)
                     p.close()
+                    wlock.release()
                     wlock = None
                     r = self.qrepo()
                     if r: r.add([patchfn])
@@ -781,7 +784,7 @@
                 raise
             self.removeundo(repo)
         finally:
-            del wlock
+            release(wlock)
 
     def strip(self, repo, rev, update=True, backup="all", force=None):
         wlock = lock = None
@@ -801,7 +804,7 @@
             # the actual strip
             self.removeundo(repo)
         finally:
-            del lock, wlock
+            release(lock, wlock)
 
     def isapplied(self, patch):
         """returns (index, rev, patch)"""
@@ -968,7 +971,7 @@
                 self.ui.write(_("now at: %s\n") % top)
             return ret[0]
         finally:
-            del wlock
+            wlock.release()
 
     def pop(self, repo, patch=None, force=False, update=True, all=False):
         def getfile(f, rev, flags):
@@ -1070,7 +1073,7 @@
             else:
                 self.ui.write(_("patch queue now empty\n"))
         finally:
-            del wlock
+            wlock.release()
 
     def diff(self, repo, pats, opts):
         top = self.check_toppatch(repo)
@@ -1187,11 +1190,11 @@
                         del mm[mm.index(x)]
                     dd.append(x)
 
-                m = util.unique(mm)
-                r = util.unique(dd)
-                a = util.unique(aa)
+                m = list(set(mm))
+                r = list(set(dd))
+                a = list(set(aa))
                 c = [filter(matchfn, l) for l in (m, a, r)]
-                match = cmdutil.matchfiles(repo, util.unique(c[0] + c[1] + c[2]))
+                match = cmdutil.matchfiles(repo, set(c[0] + c[1] + c[2]))
                 chunks = patch.diff(repo, patchparent, match=match,
                                     changes=c, opts=self.diffopts())
                 for chunk in chunks:
@@ -1295,7 +1298,7 @@
                 self.pop(repo, force=True)
                 self.push(repo, force=True)
         finally:
-            del wlock
+            wlock.release()
             self.removeundo(repo)
 
     def init(self, repo, create=False):
@@ -1335,7 +1338,7 @@
                 msg = ''
             return '%s%s' % (patchname, msg)
 
-        applied = dict.fromkeys([p.name for p in self.applied])
+        applied = set([p.name for p in self.applied])
         if length is None:
             length = len(self.series) - start
         if not missing:
@@ -1624,14 +1627,16 @@
 def delete(ui, repo, *patches, **opts):
     """remove patches from queue
 
-    The patches must not be applied, unless they are arguments to
-    the --rev parameter. At least one patch or revision is required.
+    The patches must not be applied, unless they are arguments to the
+    -r/--rev parameter. At least one patch or revision is required.
 
     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 qdel -r, as the latter option is deprecated.
+    them to regular mercurial changesets). The qfinish command should
+    be used as an alternative for qdelete -r, as the latter option is
+    deprecated.
 
-    With --keep, the patch files are preserved in the patch directory."""
+    With -k/--keep, the patch files are preserved in the patch
+    directory."""
     q = repo.mq
     q.delete(repo, patches, opts)
     q.save_dirty()
@@ -1662,23 +1667,29 @@
 def qimport(ui, repo, *filename, **opts):
     """import a patch
 
-    The patch is inserted into the series after the last applied patch.
-    If no patches have been applied, qimport prepends the patch
+    The patch is inserted into the series after the last applied
+    patch. If no patches have been applied, qimport prepends the patch
     to the series.
 
     The patch will have the same name as its source file unless you
-    give it a new one with --name.
+    give it a new one with -n/--name.
 
-    You can register an existing patch inside the patch directory
-    with the --existing flag.
+    You can register an existing patch inside the patch directory with
+    the -e/--existing flag.
+
+    With -f/--force, an existing patch of the same name will be
+    overwritten.
 
-    With --force, an existing patch of the same name will be overwritten.
-
-    An existing changeset may be placed under mq control with --rev
+    An existing changeset may be placed under mq control with -r/--rev
     (e.g. qimport --rev tip -n patch will place tip under mq control).
-    With --git, patches imported with --rev will use the git diff
+    With -g/--git, patches imported with --rev will use the git diff
     format. See the diffs help topic for information on why this is
-    important for preserving rename/copy information and permission changes.
+    important for preserving rename/copy information and permission
+    changes.
+
+    To import a patch from standard input, pass - as the patch file.
+    When importing from standard input, a patch name must be specified
+    using the --name flag.
     """
     q = repo.mq
     q.qimport(repo, filename, patchname=opts['name'],
@@ -1690,11 +1701,11 @@
 def init(ui, repo, **opts):
     """init a new queue repository
 
-    The queue repository is unversioned by default. If -c is
-    specified, qinit will create a separate nested repository
-    for patches (qinit -c may also be run later to convert
-    an unversioned patch repository into a versioned one).
-    You can use qcommit to commit changes to this queue repository."""
+    The queue repository is unversioned by default. If
+    -c/--create-repo is specified, qinit will create a separate nested
+    repository for patches (qinit -c may also be run later to convert
+    an unversioned patch repository into a versioned one). You can use
+    qcommit to commit changes to this queue repository."""
     q = repo.mq
     r = q.init(repo, create=opts['create_repo'])
     q.save_dirty()
@@ -1716,14 +1727,14 @@
 def clone(ui, source, dest=None, **opts):
     '''clone main and patch repository at same time
 
-    If source is local, destination will have no patches applied.  If
+    If source is local, destination will have no patches applied. If
     source is remote, this command can not check if patches are
     applied in source, so cannot guarantee that patches are not
-    applied in destination.  If you clone remote repository, be sure
+    applied in destination. If you clone remote repository, be sure
     before that it has no patches applied.
 
     Source patch repository is looked for in <src>/.hg/patches by
-    default.  Use -p <url> to change.
+    default. Use -p <url> to change.
 
     The patch directory must be a nested mercurial repository, as
     would be created by qinit -c.
@@ -1742,7 +1753,7 @@
     else:
         patchespath = patchdir(sr)
     try:
-        pr = hg.repository(ui, patchespath)
+        hg.repository(ui, patchespath)
     except error.RepoError:
         raise util.Abort(_('versioned patch repository not found'
                            ' (see qinit -c)'))
@@ -1751,32 +1762,31 @@
         if sr.mq.applied:
             qbase = bin(sr.mq.applied[0].rev)
             if not hg.islocal(dest):
-                heads = dict.fromkeys(sr.heads())
-                for h in sr.heads(qbase):
-                    del heads[h]
-                destrev = heads.keys()
+                heads = set(sr.heads())
+                destrev = list(heads.difference(sr.heads(qbase)))
                 destrev.append(sr.changelog.parents(qbase)[0])
     elif sr.capable('lookup'):
         try:
             qbase = sr.lookup('qbase')
         except error.RepoError:
             pass
-    ui.note(_('cloning main repo\n'))
+    ui.note(_('cloning main repository\n'))
     sr, dr = hg.clone(ui, sr.url(), dest,
                       pull=opts['pull'],
                       rev=destrev,
                       update=False,
                       stream=opts['uncompressed'])
-    ui.note(_('cloning patch repo\n'))
-    spr, dpr = hg.clone(ui, opts['patches'] or patchdir(sr), patchdir(dr),
-                        pull=opts['pull'], update=not opts['noupdate'],
-                        stream=opts['uncompressed'])
+    ui.note(_('cloning patch repository\n'))
+    hg.clone(ui, opts['patches'] or patchdir(sr), patchdir(dr),
+             pull=opts['pull'], update=not opts['noupdate'],
+             stream=opts['uncompressed'])
     if dr.local():
         if qbase:
-            ui.note(_('stripping applied patches from destination repo\n'))
+            ui.note(_('stripping applied patches from destination '
+                      'repository\n'))
             dr.mq.strip(dr, qbase, update=False, backup=None)
         if not opts['noupdate']:
-            ui.note(_('updating destination repo\n'))
+            ui.note(_('updating destination repository\n'))
             hg.update(dr, dr.changelog.tip())
 
 def commit(ui, repo, *pats, **opts):
@@ -1834,20 +1844,23 @@
 def new(ui, repo, patch, *args, **opts):
     """create a new patch
 
-    qnew creates a new patch on top of the currently-applied patch (if any).
-    It will refuse to run if there are any outstanding changes unless -f is
-    specified, in which case the patch will be initialized with them. You
-    may also use -I, -X, and/or a list of files after the patch name to add
-    only changes to matching files to the new patch, leaving the rest as
-    uncommitted modifications.
+    qnew creates a new patch on top of the currently-applied patch (if
+    any). It will refuse to run if there are any outstanding changes
+    unless -f/--force is specified, in which case the patch will be
+    initialized with them. You may also use -I/--include,
+    -X/--exclude, and/or a list of files after the patch name to add
+    only changes to matching files to the new patch, leaving the rest
+    as uncommitted modifications.
 
-    -u and -d can be used to set the (given) user and date, respectively.
-    -U and -D set user to current user and date to current date.
+    -u/--user and -d/--date can be used to set the (given) user and
+    date, respectively. -U/--currentuser and -D/--currentdate set user
+    to current user and date to current date.
 
-    -e, -m or -l set the patch header as well as the commit message. If none
-    is specified, the header is empty and the commit message is '[mq]: PATCH'.
+    -e/--edit, -m/--message or -l/--logfile set the patch header as
+    well as the commit message. If none is specified, the header is
+    empty and the commit message is '[mq]: PATCH'.
 
-    Use the --git option to keep the patch in the git extended diff
+    Use the -g/--git option to keep the patch in the git extended diff
     format. Read the diffs help topic for more information on why this
     is important for preserving permission changes and copy/rename
     information.
@@ -1868,16 +1881,17 @@
 def refresh(ui, repo, *pats, **opts):
     """update the current patch
 
-    If any file patterns are provided, the refreshed patch will contain only
-    the modifications that match those patterns; the remaining modifications
-    will remain in the working directory.
+    If any file patterns are provided, the refreshed patch will
+    contain only the modifications that match those patterns; the
+    remaining modifications will remain in the working directory.
 
-    If --short is specified, files currently included in the patch will
-    be refreshed just like matched files and remain in the patch.
+    If -s/--short is specified, files currently included in the patch
+    will be refreshed just like matched files and remain in the patch.
 
-    hg add/remove/copy/rename work as usual, though you might want to use
-    git-style patches (--git or [diff] git=1) to track copies and renames.
-    See the diffs help topic for more information on the git diff format.
+    hg add/remove/copy/rename work as usual, though you might want to
+    use git-style patches (-g/--git or [diff] git=1) to track copies
+    and renames. See the diffs help topic for more information on the
+    git diff format.
     """
     q = repo.mq
     message = cmdutil.logmessage(opts)
@@ -1898,13 +1912,15 @@
 def diff(ui, repo, *pats, **opts):
     """diff of the current patch and subsequent modifications
 
-    Shows a diff which includes the current patch as well as any changes which
-    have been made in the working directory since the last refresh (thus
-    showing what the current patch would become after a qrefresh).
+    Shows a diff which includes the current patch as well as any
+    changes which have been made in the working directory since the
+    last refresh (thus showing what the current patch would become
+    after a qrefresh).
 
-    Use 'hg diff' if you only want to see the changes made since the last
-    qrefresh, or 'hg export qtip' if you want to see changes made by the
-    current patch without including changes made since the qrefresh.
+    Use 'hg diff' if you only want to see the changes made since the
+    last qrefresh, or 'hg export qtip' if you want to see changes made
+    by the current patch without including changes made since the
+    qrefresh.
     """
     repo.mq.diff(repo, pats, opts)
     return 0
@@ -1915,12 +1931,12 @@
     Patches must not yet be applied. Each patch will be successively
     applied to the current patch in the order given. If all the
     patches apply successfully, the current patch will be refreshed
-    with the new cumulative patch, and the folded patches will
-    be deleted. With -k/--keep, the folded patch files will not
-    be removed afterwards.
+    with the new cumulative patch, and the folded patches will be
+    deleted. With -k/--keep, the folded patch files will not be
+    removed afterwards.
 
-    The header for each folded patch will be concatenated with
-    the current patch header, separated by a line of '* * *'."""
+    The header for each folded patch will be concatenated with the
+    current patch header, separated by a line of '* * *'."""
 
     q = repo.mq
 
@@ -2069,7 +2085,8 @@
 def push(ui, repo, patch=None, **opts):
     """push the next patch onto the stack
 
-    When --force is applied, all local changes in patched files will be lost.
+    When -f/--force is applied, all local changes in patched files
+    will be lost.
     """
     q = repo.mq
     mergeq = None
@@ -2091,8 +2108,9 @@
 def pop(ui, repo, patch=None, **opts):
     """pop the current patch off the stack
 
-    By default, pops off the top of the patch stack. If given a patch name,
-    keeps popping off patches until the named patch is at the top of the stack.
+    By default, pops off the top of the patch stack. If given a patch
+    name, keeps popping off patches until the named patch is at the
+    top of the stack.
     """
     localupdate = True
     if opts['name']:
@@ -2162,12 +2180,12 @@
                 r.copy(patch, name)
                 r.remove([patch], False)
         finally:
-            del wlock
+            wlock.release()
 
     q.save_dirty()
 
 def restore(ui, repo, rev, **opts):
-    """restore the queue state saved by a rev"""
+    """restore the queue state saved by a revision"""
     rev = repo.lookup(rev)
     q = repo.mq
     q.restore(repo, rev, delete=opts['delete'],
@@ -2208,8 +2226,9 @@
 def strip(ui, repo, rev, **opts):
     """strip a revision and all its descendants from the repository
 
-    If one of the working dir's parent revisions is stripped, the working
-    directory will be updated to the parent of the stripped revision.
+    If one of the working directory's parent revisions is stripped, the
+    working directory will be updated to the parent of the stripped
+    revision.
     """
     backup = 'all'
     if opts['backup']:
@@ -2235,33 +2254,34 @@
     '''set or print guarded patches to push
 
     Use the qguard command to set or print guards on patch, then use
-    qselect to tell mq which guards to use. A patch will be pushed if it
-    has no guards or any positive guards match the currently selected guard,
-    but will not be pushed if any negative guards match the current guard.
-    For example:
+    qselect to tell mq which guards to use. A patch will be pushed if
+    it has no guards or any positive guards match the currently
+    selected guard, but will not be pushed if any negative guards
+    match the current guard. For example:
 
         qguard foo.patch -stable    (negative guard)
         qguard bar.patch +stable    (positive guard)
         qselect stable
 
     This activates the "stable" guard. mq will skip foo.patch (because
-    it has a negative match) but push bar.patch (because it
-    has a positive match).
+    it has a negative match) but push bar.patch (because it has a
+    positive match).
 
     With no arguments, prints the currently active guards.
     With one argument, sets the active guard.
 
     Use -n/--none to deactivate guards (no other arguments needed).
-    When no guards are active, patches with positive guards are skipped
-    and patches with negative guards are pushed.
+    When no guards are active, patches with positive guards are
+    skipped and patches with negative guards are pushed.
 
     qselect can change the guards on applied patches. It does not pop
-    guarded patches by default. Use --pop to pop back to the last applied
-    patch that is not guarded. Use --reapply (which implies --pop) to push
-    back to the current patch afterwards, but skip guarded patches.
+    guarded patches by default. Use --pop to pop back to the last
+    applied patch that is not guarded. Use --reapply (which implies
+    --pop) to push back to the current patch afterwards, but skip
+    guarded patches.
 
-    Use -s/--series to print a list of all guards in the series file (no
-    other arguments needed). Use -v for more information.'''
+    Use -s/--series to print a list of all guards in the series file
+    (no other arguments needed). Use -v for more information.'''
 
     q = repo.mq
     guards = q.active()
@@ -2336,16 +2356,18 @@
 def finish(ui, repo, *revrange, **opts):
     """move applied patches into repository history
 
-    Finishes the specified revisions (corresponding to applied patches) by
-    moving them out of mq control into regular repository history.
+    Finishes the specified revisions (corresponding to applied
+    patches) by moving them out of mq control into regular repository
+    history.
 
-    Accepts a revision range or the --applied option. If --applied is
-    specified, all applied mq revisions are removed from mq control.
-    Otherwise, the given revisions must be at the base of the stack of
-    applied patches.
+    Accepts a revision range or the -a/--applied option. If --applied
+    is specified, all applied mq revisions are removed from mq
+    control. Otherwise, the given revisions must be at the base of the
+    stack of applied patches.
 
-    This can be especially useful if your changes have been applied to an
-    upstream repository, or if you are about to push your changes to upstream.
+    This can be especially useful if your changes have been applied to
+    an upstream repository, or if you are about to push your changes
+    to upstream.
     """
     if not opts['applied'] and not revrange:
         raise util.Abort(_('no revisions specified'))
@@ -2466,7 +2488,7 @@
           ('U', 'noupdate', None, _('do not update the new working directories')),
           ('', 'uncompressed', None,
            _('use uncompressed transfer (fast over LAN)')),
-          ('p', 'patches', '', _('location of source patch repo')),
+          ('p', 'patches', '', _('location of source patch repository')),
          ] + commands.remoteopts,
          _('hg qclone [OPTION]... SOURCE [DEST]')),
     "qcommit|qci":
@@ -2500,7 +2522,7 @@
     'qheader': (header, [], _('hg qheader [PATCH]')),
     "^qimport":
         (qimport,
-         [('e', 'existing', None, _('import file in patch dir')),
+         [('e', 'existing', None, _('import file in patch directory')),
           ('n', 'name', '', _('patch file name')),
           ('f', 'force', None, _('overwrite existing files')),
           ('r', 'rev', [], _('place existing revisions under mq control')),
@@ -2553,7 +2575,7 @@
     "qrestore":
         (restore,
          [('d', 'delete', None, _('delete save entry')),
-          ('u', 'update', None, _('update queue working dir'))],
+          ('u', 'update', None, _('update queue working directory'))],
          _('hg qrestore [-d] [-u] REV')),
     "qsave":
         (save,
--- a/hgext/notify.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/notify.py	Sun Apr 26 11:49:17 2009 +0200
@@ -59,13 +59,12 @@
    # key is glob pattern, value is ","-separated list of subscriber emails
    pattern = user@host
 
- glob patterns are matched against path to repo root.
+ glob patterns are matched against path to repository root.
 
- if you like, you can put notify config file in repo that users can
- push changes to, they can manage their own subscriptions.'''
+ if you like, you can put notify config file in repository that users
+ can push changes to, they can manage their own subscriptions.'''
 
 from mercurial.i18n import _
-from mercurial.node import bin, short
 from mercurial import patch, cmdutil, templater, util, mail
 import email.Parser, fnmatch, socket, time
 
@@ -100,7 +99,7 @@
         self.ui = ui
         cfg = self.ui.config('notify', 'config')
         if cfg:
-            self.ui.readsections(cfg, 'usersubs', 'reposubs')
+            self.ui.readconfig(cfg, sections=['usersubs', 'reposubs'])
         self.repo = repo
         self.stripcount = int(self.ui.config('notify', 'strip', 0))
         self.root = self.strip(self.repo.root)
@@ -147,18 +146,17 @@
 
     def subscribers(self):
         '''return list of email addresses of subscribers to this repo.'''
-        subs = {}
+        subs = set()
         for user, pats in self.ui.configitems('usersubs'):
             for pat in pats.split(','):
                 if fnmatch.fnmatch(self.repo.root, pat.strip()):
-                    subs[self.fixmail(user)] = 1
+                    subs.add(self.fixmail(user))
         for pat, users in self.ui.configitems('reposubs'):
             if fnmatch.fnmatch(self.repo.root, pat):
                 for user in users.split(','):
-                    subs[self.fixmail(user)] = 1
-        subs = util.sort(subs)
+                    subs.add(self.fixmail(user))
         return [mail.addressencode(self.ui, s, self.charsets, self.test)
-                for s in subs]
+                for s in sorted(subs)]
 
     def url(self, path=None):
         return self.ui.config('web', 'baseurl') + (path or self.root)
@@ -269,7 +267,7 @@
     ctx = repo[node]
 
     if not n.subs:
-        ui.debug(_('notify: no subscribers to repo %s\n') % n.root)
+        ui.debug(_('notify: no subscribers to repository %s\n') % n.root)
         return
     if n.skipsource(source):
         ui.debug(_('notify: changes have source "%s" - skipping\n') % source)
--- a/hgext/pager.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/pager.py	Sun Apr 26 11:49:17 2009 +0200
@@ -19,12 +19,11 @@
   [pager]
   pager = LESS='FSRX' less
 
-If no pager is set, the pager extensions uses the environment
-variable $PAGER. If neither pager.pager, nor $PAGER is set, no pager
-is used.
+If no pager is set, the pager extensions uses the environment variable
+$PAGER. If neither pager.pager, nor $PAGER is set, no pager is used.
 
-If you notice "BROKEN PIPE" error messages, you can disable them
-by setting:
+If you notice "BROKEN PIPE" error messages, you can disable them by
+setting:
 
   [pager]
   quiet = True
@@ -35,15 +34,16 @@
   [pager]
   ignore = version, help, update
 
-You can also enable the pager only for certain commands using pager.attend:
+You can also enable the pager only for certain commands using
+pager.attend:
 
   [pager]
   attend = log
 
 If pager.attend is present, pager.ignore will be ignored.
 
-To ignore global commands like "hg version" or "hg help", you have to specify
-them in the global .hgrc
+To ignore global commands like "hg version" or "hg help", you have to
+specify them in the global .hgrc
 '''
 
 import sys, os, signal
--- a/hgext/parentrevspec.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/parentrevspec.py	Sun Apr 26 11:49:17 2009 +0200
@@ -7,8 +7,8 @@
 '''\
 use suffixes to refer to ancestor revisions
 
-This extension allows you to use git-style suffixes to refer to
-the ancestors of a specific revision.
+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:
 
@@ -23,7 +23,6 @@
   foo~1 = foo^1 = foo^ = first parent of foo
   foo~2 = foo^1^1 = foo^^ = first parent of first parent of foo
 '''
-import mercurial.repo
 from mercurial import error
 
 def reposetup(ui, repo):
--- a/hgext/patchbomb.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/patchbomb.py	Sun Apr 26 11:49:17 2009 +0200
@@ -1,11 +1,11 @@
 '''sending Mercurial 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.
+The series is started off with a "[PATCH 0 of N]" introduction, which
+describes the series as a whole.
 
-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:
+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:
 
   The remainder of the changeset description.
 
@@ -14,18 +14,20 @@
   The patch itself, as generated by "hg export".
 
 Each message refers to all of its predecessors 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.
+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.
+the changeset summary, so you can be sure you are sending the right
+changes.
 
 To enable this extension:
 
   [extensions]
   hgext.patchbomb =
 
-To configure other defaults, add a section like this to your hgrc file:
+To configure other defaults, add a section like this to your hgrc
+file:
 
   [email]
   from = My Name <my@email>
@@ -37,24 +39,24 @@
 as a patchbomb.
 
 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
+the "email" command with the "-n" option (test only). You will be
 prompted for an email recipient address, a subject an an introductory
-message describing the patches of your patchbomb.  Then when all is
+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.
+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 create a UNIX mailbox file with the patch emails.  This
-mailbox file can be previewed with any mail user agent which supports
-UNIX mbox files, e.g. with mutt:
+The -m/--mbox option is also very useful. Instead of previewing each
+patchbomb message in a pager or sending the messages directly, it will
+create a UNIX mailbox file with the patch emails. This mailbox file
+can be previewed with any mail user agent which supports UNIX mbox
+files, e.g. with mutt:
 
   % mutt -R -f mbox
 
 When you are previewing the patchbomb messages, you can use `formail'
-(a utility that is commonly installed as part of the procmail package),
-to send each message out:
+(a utility that is commonly installed as part of the procmail
+package), to send each message out:
 
   % formail -s sendmail -bm -t < mbox
 
@@ -62,9 +64,9 @@
 
 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
-that the patchbomb extension can automatically send patchbombs directly
-from the commandline. See the [email] and [smtp] sections in hgrc(5)
-for details.'''
+that the patchbomb extension can automatically send patchbombs
+directly from the commandline. See the [email] and [smtp] sections in
+hgrc(5) for details.'''
 
 import os, errno, socket, tempfile, cStringIO
 import email.MIMEMultipart, email.MIMEBase
@@ -173,23 +175,23 @@
     '''send changesets by email
 
     By default, diffs are sent in the format generated by hg export,
-    one per message.  The series starts with a "[PATCH 0 of N]"
+    one per message. The series starts with a "[PATCH 0 of N]"
     introduction, which describes the series as a whole.
 
     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
+    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".
 
-    With --outgoing, emails will be generated for patches not
-    found in the destination repository (or only those which are
-    ancestors of the specified revisions if any are provided)
+    With -o/--outgoing, emails will be generated for patches not found
+    in the destination repository (or only those which are ancestors
+    of the specified revisions if any are provided)
 
-    With --bundle, changesets are selected as for --outgoing,
-    but a single email containing a binary Mercurial bundle as an
-    attachment will be sent.
+    With -b/--bundle, changesets are selected as for --outgoing, but a
+    single email containing a binary Mercurial bundle as an attachment
+    will be sent.
 
     Examples:
 
@@ -208,8 +210,8 @@
     hg email -b -r 3000       # bundle of all ancestors of 3000 not in default
     hg email -b -r 3000 DEST  # bundle of all ancestors of 3000 not in DEST
 
-    Before using this command, you will need to enable email in your hgrc.
-    See the [email] section in hgrc(5) for details.
+    Before using this command, you will need to enable email in your
+    hgrc. See the [email] section in hgrc(5) for details.
     '''
 
     _charsets = mail._charsets(ui)
@@ -230,8 +232,8 @@
     def getpatches(revs):
         for r in cmdutil.revrange(repo, revs):
             output = cStringIO.StringIO()
-            p = patch.export(repo, [r], fp=output,
-                             opts=patch.diffopts(ui, opts))
+            patch.export(repo, [r], fp=output,
+                         opts=patch.diffopts(ui, opts))
             yield output.getvalue().split('\n')
 
     def getbundle(dest):
@@ -344,8 +346,9 @@
             msg.attach(mail.mimeencode(ui, body, _charsets, opts.get('test')))
         datapart = email.MIMEBase.MIMEBase('application', 'x-mercurial-bundle')
         datapart.set_payload(bundle)
+        bundlename = '%s.hg' % opts.get('bundlename', 'bundle')
         datapart.add_header('Content-Disposition', 'attachment',
-                            filename='bundle.hg')
+                            filename=bundlename)
         email.Encoders.encode_base64(datapart)
         msg.attach(datapart)
         msg['Subject'] = mail.headencode(ui, subj, _charsets, opts.get('test'))
@@ -381,7 +384,7 @@
 
     ui.write('\n')
 
-    parent = None
+    parent = opts.get('in_reply_to') or None
 
     sender_addr = email.Utils.parseaddr(sender)[1]
     sender = mail.addressencode(ui, sender, _charsets, opts.get('test'))
@@ -396,6 +399,7 @@
             m['References'] = parent
         else:
             parent = m['Message-Id']
+        m['User-Agent'] = 'Mercurial-patchbomb/%s' % util.version()
         m['Date'] = util.datestr(start_time, "%a, %d %b %Y %H:%M:%S %1%2")
 
         start_time = (start_time[0] + 1, start_time[1])
@@ -455,6 +459,8 @@
            _('write messages to mbox file instead of sending them')),
           ('s', 'subject', '',
            _('subject of first message (intro or single patch)')),
+          ('', 'in-reply-to', '',
+           _('"message identifier to reply to"')),
           ('t', 'to', [], _('email addresses of recipients')),
          ]
 
@@ -468,11 +474,15 @@
            _('send changes not found in the target repository')),
           ('b', 'bundle', None,
            _('send changes not in target as a binary bundle')),
+          ('', 'bundlename', 'bundle',
+           _('file name of the bundle attachment')),
           ('r', 'rev', [], _('a revision to send')),
           ('', 'force', None,
-           _('run even when remote repository is unrelated (with -b)')),
+           _('run even when remote repository is unrelated '
+             '(with -b/--bundle)')),
           ('', 'base', [],
-           _('a base changeset to specify instead of a destination (with -b)')),
+           _('a base changeset to specify instead of a destination '
+             '(with -b/--bundle)')),
           ('', 'intro', None,
            _('send an introduction email for a single patch')),
          ] + emailopts + commands.remoteopts,
--- a/hgext/purge.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/purge.py	Sun Apr 26 11:49:17 2009 +0200
@@ -29,18 +29,18 @@
 
 from mercurial import util, commands, cmdutil
 from mercurial.i18n import _
-import os
+import os, stat
 
 def purge(ui, repo, *dirs, **opts):
     '''removes files not tracked by Mercurial
 
-    Delete files not known to Mercurial. This is useful to test local and
-    uncommitted changes in an otherwise-clean source tree.
+    Delete files not known to Mercurial. This is useful to test local
+    and uncommitted changes in an otherwise-clean source tree.
 
     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
+     - Empty directories: in fact Mercurial ignores directories unless
+       they contain files under source control managment
     But it will leave untouched:
      - Modified and unmodified tracked files
      - Ignored files (unless --all is specified)
@@ -49,9 +49,10 @@
     If directories are given on the command line, only files in these
     directories are considered.
 
-    Be careful with purge, as you could irreversibly delete some files you
-    forgot to add to the repository. If you only want to print the list of
-    files that this program would delete, use the --print option.
+    Be careful with purge, as you could irreversibly delete some files
+    you forgot to add to the repository. If you only want to print the
+    list of files that this program would delete, use the --print
+    option.
     '''
     act = not opts['print']
     eol = '\n'
@@ -71,6 +72,17 @@
         else:
             ui.write('%s%s' % (name, eol))
 
+    def removefile(path):
+        try:
+            os.remove(path)
+        except OSError:
+            # read-only files cannot be unlinked under Windows
+            s = os.stat(path)
+            if (s.st_mode & stat.S_IWRITE) != 0:
+                raise
+            os.chmod(path, stat.S_IMODE(s.st_mode) | stat.S_IWRITE)
+            os.remove(path)
+
     directories = []
     match = cmdutil.match(repo, dirs, opts)
     match.dir = directories.append
@@ -78,7 +90,7 @@
 
     for f in util.sort(status[4] + status[5]):
         ui.note(_('Removing file %s\n') % f)
-        remove(os.remove, f)
+        remove(removefile, f)
 
     for f in util.sort(directories)[::-1]:
         if match(f) and not os.listdir(repo.wjoin(f)):
@@ -92,7 +104,7 @@
           ('',  'all', None, _('purge ignored files too')),
           ('p', 'print', None, _('print the file names instead of deleting them')),
           ('0', 'print0', None, _('end filenames with NUL, for use with xargs'
-                                  ' (implies -p)')),
+                                  ' (implies -p/--print)')),
          ] + commands.walkopts,
          _('hg purge [OPTION]... [DIR]...'))
 }
--- a/hgext/rebase.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/rebase.py	Sun Apr 26 11:49:17 2009 +0200
@@ -7,16 +7,18 @@
 
 '''move sets of revisions to a different ancestor
 
-This extension lets you rebase changesets in an existing Mercurial repository.
+This extension lets you rebase changesets in an existing Mercurial
+repository.
 
 For more information:
 http://www.selenic.com/mercurial/wiki/index.cgi/RebaseProject
 '''
 
 from mercurial import util, repair, merge, cmdutil, commands, error
-from mercurial import extensions, ancestor
+from mercurial import extensions, ancestor, copies, patch
 from mercurial.commands import templateopts
 from mercurial.node import nullrev
+from mercurial.lock import release
 from mercurial.i18n import _
 import os, errno
 
@@ -26,7 +28,6 @@
 
     def newancestor(a, b, pfunc):
         ancestor.ancestor = oldancestor
-        anc = ancestor.ancestor(a, b, pfunc)
         if b == rev:
             return repo[rev].parents()[0].rev()
         return ancestor.ancestor(a, b, pfunc)
@@ -41,12 +42,12 @@
 def rebase(ui, repo, **opts):
     """move changeset (and descendants) to a different branch
 
-    Rebase uses repeated merging to graft changesets from one part of history
-    onto another. This can be useful for linearizing local changes relative to
-    a master development tree.
+    Rebase uses repeated merging to graft changesets from one part of
+    history onto another. This can be useful for linearizing local
+    changes relative to a master development tree.
 
-    If a rebase is interrupted to manually resolve a merge, it can be continued
-    with --continue or aborted with --abort.
+    If a rebase is interrupted to manually resolve a merge, it can be
+    continued with --continue/-c or aborted with --abort/-a.
     """
     originalwd = target = None
     external = nullrev
@@ -65,12 +66,8 @@
         abortf = opts.get('abort')
         collapsef = opts.get('collapse', False)
         extrafn = opts.get('extrafn')
-        if opts.get('keepbranches', None):
-            if extrafn:
-                raise error.ParseError(
-                    'rebase', _('cannot use both keepbranches and extrafn'))
-            def extrafn(ctx, extra):
-                extra['branch'] = ctx.branch()
+        keepf = opts.get('keep', False)
+        keepbranchesf = opts.get('keepbranches', False)
 
         if contf or abortf:
             if contf and abortf:
@@ -80,11 +77,12 @@
                 raise error.ParseError(
                     'rebase', _('cannot use collapse with continue or abort'))
 
-            if (srcf or basef or destf):
+            if srcf or basef or destf:
                 raise error.ParseError('rebase',
                     _('abort and continue do not allow specifying revisions'))
 
-            originalwd, target, state, collapsef, external = restorestatus(repo)
+            (originalwd, target, state, collapsef, keepf,
+                                keepbranchesf, external) = restorestatus(repo)
             if abortf:
                 abort(repo, originalwd, target, state)
                 return
@@ -100,14 +98,21 @@
                 repo.ui.status(_('nothing to rebase\n'))
                 return
 
+        if keepbranchesf:
+            if extrafn:
+                raise error.ParseError(
+                    'rebase', _('cannot use both keepbranches and extrafn'))
+            def extrafn(ctx, extra):
+                extra['branch'] = ctx.branch()
+
         # Rebase
         targetancestors = list(repo.changelog.ancestors(target))
         targetancestors.append(target)
 
         for rev in util.sort(state):
             if state[rev] == -1:
-                storestatus(repo, originalwd, target, state, collapsef,
-                                                                external)
+                storestatus(repo, originalwd, target, state, collapsef, keepf,
+                                                    keepbranchesf, external)
                 rebasenode(repo, rev, target, state, skipped, targetancestors,
                                                        collapsef, extrafn)
         ui.note(_('rebase merging completed\n'))
@@ -121,10 +126,9 @@
         if 'qtip' in repo.tags():
             updatemq(repo, state, skipped, **opts)
 
-        if not opts.get('keep'):
+        if not keepf:
             # Remove no more useful revisions
-            if (util.set(repo.changelog.descendants(min(state)))
-                                                    - util.set(state.keys())):
+            if set(repo.changelog.descendants(min(state))) - set(state):
                 ui.warn(_("warning: new changesets detected on source branch, "
                                                         "not stripping\n"))
             else:
@@ -137,7 +141,7 @@
         if skipped:
             ui.note(_("%d revisions have been skipped\n") % len(skipped))
     finally:
-        del lock, wlock
+        release(lock, wlock)
 
 def concludenode(repo, rev, p1, p2, state, collapse, last=False, skipped={},
                  extrafn=None):
@@ -207,7 +211,18 @@
     else: # we have an interrupted rebase
         repo.ui.debug(_('resuming interrupted rebase\n'))
 
-
+    # Keep track of renamed files in the revision that is going to be rebased
+    # Here we simulate the copies and renames in the source changeset
+    cop, diver = copies.copies(repo, repo[rev], repo[target], repo[p2], True)
+    m1 = repo[rev].manifest()
+    m2 = repo[target].manifest()
+    for k, v in cop.iteritems():
+        if k in m1:
+            if v in m1 or v in m2:
+                repo.dirstate.copy(v, k)
+                if v in m2 and v not in m1:
+                    repo.dirstate.remove(v)
+                
     newrev = concludenode(repo, rev, p1, p2, state, collapse,
                           extrafn=extrafn)
 
@@ -250,6 +265,14 @@
             p2 = P2n
     return p1, p2
 
+def isagitpatch(repo, patchname):
+    'Return true if the given patch is in git format'
+    mqpatch = os.path.join(repo.mq.path, patchname)
+    for line in patch.linereader(file(mqpatch, 'rb')):
+        if line.startswith('diff --git'):
+            return True
+    return False
+
 def updatemq(repo, state, skipped, **opts):
     'Update rebased mq patches - finalize and then import them'
     mqrebase = {}
@@ -257,7 +280,7 @@
         if repo[p.rev].rev() in state:
             repo.ui.debug(_('revision %d is an mq patch (%s), finalize it.\n') %
                                         (repo[p.rev].rev(), p.name))
-            mqrebase[repo[p.rev].rev()] = p.name
+            mqrebase[repo[p.rev].rev()] = (p.name, isagitpatch(repo, p.name))
 
     if mqrebase:
         repo.mq.finish(repo, mqrebase.keys())
@@ -269,18 +292,21 @@
         for rev in mq:
             if rev not in skipped:
                 repo.ui.debug(_('import mq patch %d (%s)\n')
-                              % (state[rev], mqrebase[rev]))
-                repo.mq.qimport(repo, (), patchname=mqrebase[rev],
-                            git=opts.get('git', False),rev=[str(state[rev])])
+                              % (state[rev], mqrebase[rev][0]))
+                repo.mq.qimport(repo, (), patchname=mqrebase[rev][0],
+                            git=mqrebase[rev][1],rev=[str(state[rev])])
         repo.mq.save_dirty()
 
-def storestatus(repo, originalwd, target, state, collapse, external):
+def storestatus(repo, originalwd, target, state, collapse, keep, keepbranches,
+                                                                external):
     'Store the current status to allow recovery'
     f = repo.opener("rebasestate", "w")
     f.write(repo[originalwd].hex() + '\n')
     f.write(repo[target].hex() + '\n')
     f.write(repo[external].hex() + '\n')
     f.write('%d\n' % int(collapse))
+    f.write('%d\n' % int(keep))
+    f.write('%d\n' % int(keepbranches))
     for d, v in state.iteritems():
         oldrev = repo[d].hex()
         newrev = repo[v].hex()
@@ -310,11 +336,15 @@
                 external = repo[l].rev()
             elif i == 3:
                 collapse = bool(int(l))
+            elif i == 4:
+                keep = bool(int(l))
+            elif i == 5:
+                keepbranches = bool(int(l))
             else:
                 oldrev, newrev = l.split(':')
                 state[repo[oldrev].rev()] = repo[newrev].rev()
         repo.ui.debug(_('rebase status resumed\n'))
-        return originalwd, target, state, collapse, external
+        return originalwd, target, state, collapse, keep, keepbranches, external
     except IOError, err:
         if err.errno != errno.ENOENT:
             raise
@@ -322,7 +352,7 @@
 
 def abort(repo, originalwd, target, state):
     'Restore the repository to its original state'
-    if util.set(repo.changelog.descendants(target)) - util.set(state.values()):
+    if set(repo.changelog.descendants(target)) - set(state.values()):
         repo.ui.warn(_("warning: new changesets detected on target branch, "
                                                     "not stripping\n"))
     else:
@@ -337,11 +367,10 @@
 
 def buildstate(repo, dest, src, base, collapse):
     'Define which revisions are going to be rebased and where'
-    state = {}
-    targetancestors = util.set()
+    targetancestors = set()
 
     if not dest:
-         # Destination defaults to the latest revision in the current branch
+        # Destination defaults to the latest revision in the current branch
         branch = repo[None].branch()
         dest = repo[branch].rev()
     else:
@@ -367,12 +396,12 @@
             repo.ui.debug(_('already working on current\n'))
             return None
 
-        targetancestors = util.set(repo.changelog.ancestors(dest))
+        targetancestors = set(repo.changelog.ancestors(dest))
         if cwd in targetancestors:
             repo.ui.debug(_('already working on the current branch\n'))
             return None
 
-        cwdancestors = util.set(repo.changelog.ancestors(cwd))
+        cwdancestors = set(repo.changelog.ancestors(cwd))
         cwdancestors.add(cwd)
         rebasingbranch = cwdancestors - targetancestors
         source = min(rebasingbranch)
@@ -382,7 +411,7 @@
     external = nullrev
     if collapse:
         if not targetancestors:
-            targetancestors = util.set(repo.changelog.ancestors(dest))
+            targetancestors = set(repo.changelog.ancestors(dest))
         for rev in state:
             # Check externals and fail if there are more than one
             for p in repo[rev].parents():
@@ -429,15 +458,15 @@
 "rebase":
         (rebase,
         [
-        ('', 'keep', False, _('keep original revisions')),
-        ('', 'keepbranches', False, _('keep original branches')),
         ('s', 'source', '', _('rebase from a given revision')),
         ('b', 'base', '', _('rebase from the base of a given revision')),
         ('d', 'dest', '', _('rebase onto a given revision')),
         ('', 'collapse', False, _('collapse the rebased revisions')),
+        ('', 'keep', False, _('keep original revisions')),
+        ('', 'keepbranches', False, _('keep original branches')),
         ('c', 'continue', False, _('continue an interrupted rebase')),
         ('a', 'abort', False, _('abort an interrupted rebase')),] +
          templateopts,
-        _('hg rebase [-s rev | -b rev] [-d rev] [--collapse] | [-c] | [-a] | '
-                                                                '[--keep]')),
+        _('hg rebase [-s REV | -b REV] [-d REV] [--collapse] [--keep] '
+                            '[--keepbranches] | [-c] | [-a]')),
 }
--- a/hgext/record.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/record.py	Sun Apr 26 11:49:17 2009 +0200
@@ -302,6 +302,7 @@
             elif r == _('q'):
                 raise util.Abort(_('user quit'))
             return r
+    pos, total = 0, len(chunks) - 1
     while chunks:
         chunk = chunks.pop()
         if isinstance(chunk, header):
@@ -327,8 +328,10 @@
             # new hunk
             if resp_file[0] is None and resp_all[0] is None:
                 chunk.pretty(ui)
-            r = prompt(_('record this change to %r?') %
-                       chunk.filename())
+            r = total == 1 and prompt(_('record this change to %r?') %
+                                      chunk.filename()) \
+                           or  prompt(_('record change %d/%d to %r?') %
+                                      (pos, total, chunk.filename()))
             if r == _('y'):
                 if fixoffset:
                     chunk = copy.copy(chunk)
@@ -336,6 +339,7 @@
                 applied[chunk.filename()].append(chunk)
             else:
                 fixoffset += chunk.removed - chunk.added
+        pos = pos + 1
     return reduce(operator.add, [h for h in applied.itervalues()
                                  if h[0].special() or len(h) > 1], [])
 
@@ -349,7 +353,7 @@
 
     You will be prompted for whether to record changes to each
     modified file, and for files with multiple changes, for each
-    change to use.  For each query, the following responses are
+    change to use. For each query, the following responses are
     possible:
 
     y - record this change
@@ -418,9 +422,9 @@
         chunks = filterpatch(ui, parsepatch(fp))
         del fp
 
-        contenders = {}
+        contenders = set()
         for h in chunks:
-            try: contenders.update(dict.fromkeys(h.files()))
+            try: contenders.update(set(h.files()))
             except AttributeError: pass
 
         changed = changes[0] + changes[1] + changes[2]
@@ -429,7 +433,7 @@
             ui.status(_('no changes to record\n'))
             return 0
 
-        modified = dict.fromkeys(changes[0])
+        modified = set(changes[0])
 
         # 2. backup changed files, so we can restore them in the end
         backups = {}
--- a/hgext/transplant.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/transplant.py	Sun Apr 26 11:49:17 2009 +0200
@@ -9,8 +9,8 @@
 
 This extension allows you to transplant patches from another branch.
 
-Transplanted patches are recorded in .hg/transplant/transplants, as a map
-from a changeset hash to its hash in the source repository.
+Transplanted patches are recorded in .hg/transplant/transplants, as a
+map from a changeset hash to its hash in the source repository.
 '''
 
 from mercurial.i18n import _
@@ -168,7 +168,8 @@
         finally:
             self.saveseries(revmap, merges)
             self.transplants.write()
-            del lock, wlock
+            lock.release()
+            wlock.release()
 
     def filter(self, filter, changelog, patchfile):
         '''arbitrarily rewrite changeset before applying it'''
@@ -216,8 +217,8 @@
             try:
                 files = {}
                 try:
-                    fuzz = patch.patch(patchfile, self.ui, cwd=repo.root,
-                                       files=files)
+                    patch.patch(patchfile, self.ui, cwd=repo.root,
+                                files=files)
                     if not files:
                         self.ui.warn(_('%s: empty changeset')
                                      % revlog.hex(node))
@@ -293,7 +294,7 @@
 
             return n, node
         finally:
-            del wlock
+            wlock.release()
 
     def readseries(self):
         nodes = []
@@ -439,28 +440,31 @@
     (transplanted from CHANGESETHASH)
 
     You can rewrite the changelog message with the --filter option.
-    Its argument will be invoked with the current changelog message
-    as $1 and the patch as $2.
+    Its argument will be invoked with the current changelog message as
+    $1 and the patch as $2.
 
-    If --source is specified, selects changesets from the named
-    repository. If --branch is specified, selects changesets from the
-    branch holding the named revision, up to that revision. If --all
-    is specified, all changesets on the branch will be transplanted,
-    otherwise you will be prompted to select the changesets you want.
+    If --source/-s is specified, selects changesets from the named
+    repository. If --branch/-b is specified, selects changesets from
+    the branch holding the named revision, up to that revision. If
+    --all/-a is specified, all changesets on the branch will be
+    transplanted, otherwise you will be prompted to select the
+    changesets you want.
 
-    hg transplant --branch REVISION --all will rebase the selected branch
-    (up to the named revision) onto your current working directory.
+    hg transplant --branch REVISION --all will rebase the selected
+    branch (up to the named revision) onto your current working
+    directory.
 
-    You can optionally mark selected transplanted changesets as
-    merge changesets. You will not be prompted to transplant any
-    ancestors of a merged transplant, and you can merge descendants
-    of them normally instead of transplanting them.
+    You can optionally mark selected transplanted changesets as merge
+    changesets. You will not be prompted to transplant any ancestors
+    of a merged transplant, and you can merge descendants of them
+    normally instead of transplanting them.
 
     If no merges or revisions are provided, hg transplant will start
     an interactive changeset browser.
 
-    If a changeset application fails, you can fix the merge by hand and
-    then resume where you left off by calling hg transplant --continue.
+    If a changeset application fails, you can fix the merge by hand
+    and then resume where you left off by calling hg transplant
+    --continue/-c.
     '''
     def getremotechanges(repo, url):
         sourcerepo = ui.expandpath(url)
--- a/hgext/win32mbcs.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/win32mbcs.py	Sun Apr 26 11:49:17 2009 +0200
@@ -10,18 +10,18 @@
 #
 """allow to use MBCS path with problematic encoding.
 
-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 operation.
+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
+operation.
 
 This extension is usefull 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.
+ * 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.
@@ -29,71 +29,73 @@
 
 Note that there are some limitations on using this extension:
  * You should use single encoding in one repository.
- * You should set same encoding for the repository by locale or HGENCODING.
+ * 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 util._encoding
-which is decided by mercurial from current locale setting or HGENCODING.
+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 _
-from mercurial import util
+from mercurial import util, encoding
 
 def decode(arg):
-   if isinstance(arg, str):
-       uarg = arg.decode(util._encoding)
-       if arg == uarg.encode(util._encoding):
-           return uarg
-       raise UnicodeError("Not local encoding")
-   elif isinstance(arg, tuple):
-       return tuple(map(decode, arg))
-   elif isinstance(arg, list):
-       return map(decode, arg)
-   return arg
+    if isinstance(arg, str):
+        uarg = arg.decode(encoding.encoding)
+        if arg == uarg.encode(encoding.encoding):
+            return uarg
+        raise UnicodeError("Not local encoding")
+    elif isinstance(arg, tuple):
+        return tuple(map(decode, arg))
+    elif isinstance(arg, list):
+        return map(decode, arg)
+    return arg
 
 def encode(arg):
-   if isinstance(arg, unicode):
-       return arg.encode(util._encoding)
-   elif isinstance(arg, tuple):
-       return tuple(map(encode, arg))
-   elif isinstance(arg, list):
-       return map(encode, arg)
-   return arg
+    if isinstance(arg, unicode):
+        return arg.encode(encoding.encoding)
+    elif isinstance(arg, tuple):
+        return tuple(map(encode, arg))
+    elif isinstance(arg, list):
+        return map(encode, arg)
+    return arg
 
 def wrapper(func, args):
-   # check argument is unicode, then call original
-   for arg in args:
-       if isinstance(arg, unicode):
-           return func(*args)
+    # check argument is unicode, then call original
+    for arg in args:
+        if isinstance(arg, unicode):
+            return func(*args)
 
-   try:
-       # convert arguments to unicode, call func, then convert back
-       return encode(func(*decode(args)))
-   except UnicodeError:
-       # If not encoded with util._encoding, report it then
-       # continue with calling original function.
-      raise util.Abort(_("[win32mbcs] filename conversion fail with"
-                         " %s encoding\n") % (util._encoding))
+    try:
+        # convert arguments to unicode, call func, then convert back
+        return encode(func(*decode(args)))
+    except UnicodeError:
+        # If not encoded with encoding.encoding, report it then
+        # continue with calling original function.
+        raise util.Abort(_("[win32mbcs] filename conversion fail with"
+                         " %s encoding\n") % (encoding.encoding))
 
 def wrapname(name):
-   idx = name.rfind('.')
-   module = name[:idx]
-   name = name[idx+1:]
-   module = eval(module)
-   func = getattr(module, name)
-   def f(*args):
-       return wrapper(func, args)
-   try:
-      f.__name__ = func.__name__                # fail with python23
-   except Exception:
-      pass
-   setattr(module, name, f)
+    idx = name.rfind('.')
+    module = name[:idx]
+    name = name[idx+1:]
+    module = eval(module)
+    func = getattr(module, name)
+    def f(*args):
+        return wrapper(func, args)
+    try:
+        f.__name__ = func.__name__                # fail with python23
+    except Exception:
+        pass
+    setattr(module, name, f)
 
 # List of functions to be wrapped.
 # NOTE: os.path.dirname() and os.path.basename() are safe because
@@ -109,14 +111,15 @@
  shift_jisx0213 shiftjisx0213 sjisx0213 s_jisx0213'''
 
 def reposetup(ui, repo):
-   # TODO: decide use of config section for this extension
-   if not os.path.supports_unicode_filenames:
-       ui.warn(_("[win32mbcs] cannot activate on this platform.\n"))
-       return
+    # TODO: decide use of config section for this extension
+    if not os.path.supports_unicode_filenames:
+        ui.warn(_("[win32mbcs] cannot activate on this platform.\n"))
+        return
 
-   # fake is only for relevant environment.
-   if util._encoding.lower() in problematic_encodings.split():
-       for f in funcs.split():
-           wrapname(f)
-       ui.debug(_("[win32mbcs] activated with encoding: %s\n") % util._encoding)
+    # fake is only for relevant environment.
+    if encoding.encoding.lower() in problematic_encodings.split():
+        for f in funcs.split():
+            wrapname(f)
+        ui.debug(_("[win32mbcs] activated with encoding: %s\n")
+                 % encoding.encoding)
 
--- a/hgext/win32text.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/win32text.py	Sun Apr 26 11:49:17 2009 +0200
@@ -14,21 +14,22 @@
 # ** = cleverdecode:
 # # or ** = macdecode:
 #
-# If not doing conversion, to make sure you do not commit CRLF/CR by accident:
+# 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:
+# 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 bin, short
+from mercurial.node import short
 from mercurial import util
 import re
 
@@ -98,11 +99,19 @@
 
 def forbidnewline(ui, repo, hooktype, node, newline, **kwargs):
     halt = False
-    for rev in xrange(repo[node].rev(), len(repo)):
+    seen = set()
+    # we try to walk changesets in reverse order from newest to
+    # oldest, so that if we see a file multiple times, we take the
+    # newest version as canonical. this prevents us from blocking a
+    # changegroup that contains an unacceptable commit followed later
+    # by a commit that fixes the problem.
+    tip = repo['tip']
+    for rev in xrange(len(repo)-1, repo[node].rev()-1, -1):
         c = repo[rev]
         for f in c.files():
-            if f not in c:
+            if f in seen or f not in tip or f not in c:
                 continue
+            seen.add(f)
             data = c[f].data()
             if not util.binary(data) and newline in data:
                 if not halt:
--- a/hgext/zeroconf/Zeroconf.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/zeroconf/Zeroconf.py	Sun Apr 26 11:49:17 2009 +0200
@@ -19,7 +19,7 @@
     You should have received a copy of the GNU Lesser General Public
     License along with this library; if not, write to the Free Software
     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-	
+
 """
 
 """0.12 update - allow selection of binding interface
@@ -101,7 +101,7 @@
 _BROWSER_TIME = 500
 
 # Some DNS constants
-	
+
 _MDNS_ADDR = '224.0.0.251'
 _MDNS_PORT = 5353;
 _DNS_PORT = 53;
@@ -208,7 +208,7 @@
 
 class DNSEntry(object):
 	"""A DNS entry"""
-	
+
 	def __init__(self, name, type, clazz):
 		self.key = string.lower(name)
 		self.name = name
@@ -256,10 +256,10 @@
 
 class DNSQuestion(DNSEntry):
 	"""A DNS question entry"""
-	
+
 	def __init__(self, name, type, clazz):
 		if not name.endswith(".local."):
-			raise NonLocalNameException
+			raise NonLocalNameException(name)
 		DNSEntry.__init__(self, name, type, clazz)
 
 	def answeredBy(self, rec):
@@ -273,7 +273,7 @@
 
 class DNSRecord(DNSEntry):
 	"""A DNS record - like a DNS entry, but has a TTL"""
-	
+
 	def __init__(self, name, type, clazz, ttl):
 		DNSEntry.__init__(self, name, type, clazz)
 		self.ttl = ttl
@@ -334,7 +334,7 @@
 
 class DNSAddress(DNSRecord):
 	"""A DNS address record"""
-	
+
 	def __init__(self, name, type, clazz, ttl, address):
 		DNSRecord.__init__(self, name, type, clazz, ttl)
 		self.address = address
@@ -378,10 +378,10 @@
 	def __repr__(self):
 		"""String representation"""
 		return self.cpu + " " + self.os
-	
+
 class DNSPointer(DNSRecord):
 	"""A DNS pointer record"""
-	
+
 	def __init__(self, name, type, clazz, ttl, alias):
 		DNSRecord.__init__(self, name, type, clazz, ttl)
 		self.alias = alias
@@ -402,7 +402,7 @@
 
 class DNSText(DNSRecord):
 	"""A DNS text record"""
-	
+
 	def __init__(self, name, type, clazz, ttl, text):
 		DNSRecord.__init__(self, name, type, clazz, ttl)
 		self.text = text
@@ -426,7 +426,7 @@
 
 class DNSService(DNSRecord):
 	"""A DNS service record"""
-	
+
 	def __init__(self, name, type, clazz, ttl, priority, weight, port, server):
 		DNSRecord.__init__(self, name, type, clazz, ttl)
 		self.priority = priority
@@ -453,7 +453,7 @@
 
 class DNSIncoming(object):
 	"""Object representation of an incoming DNS packet"""
-	
+
 	def __init__(self, data):
 		"""Constructor from string holding bytes of packet"""
 		self.offset = 0
@@ -464,7 +464,7 @@
 		self.numAnswers = 0
 		self.numAuthorities = 0
 		self.numAdditionals = 0
-		
+
 		self.readHeader()
 		self.readQuestions()
 		self.readOthers()
@@ -491,9 +491,12 @@
 			name = self.readName()
 			info = struct.unpack(format, self.data[self.offset:self.offset+length])
 			self.offset += length
-			
-			question = DNSQuestion(name, info[0], info[1])
-			self.questions.append(question)
+
+			try:
+				question = DNSQuestion(name, info[0], info[1])
+				self.questions.append(question)
+			except NonLocalNameException:
+				pass
 
 	def readInt(self):
 		"""Reads an integer from the packet"""
@@ -561,7 +564,7 @@
 
 			if rec is not None:
 				self.answers.append(rec)
-				
+
 	def isQuery(self):
 		"""Returns true if this is a query"""
 		return (self.flags & _FLAGS_QR_MASK) == _FLAGS_QR_QUERY
@@ -574,7 +577,7 @@
 		"""Reads a UTF-8 string of a given length from the packet"""
 		result = self.data[offset:offset+len].decode('utf-8')
 		return result
-		
+
 	def readName(self):
 		"""Reads a domain name from the packet"""
 		result = ''
@@ -607,11 +610,11 @@
 			self.offset = off
 
 		return result
-	
-		
+
+
 class DNSOutgoing(object):
 	"""Object representation of an outgoing packet"""
-	
+
 	def __init__(self, flags, multicast = 1):
 		self.finished = 0
 		self.id = 0
@@ -620,7 +623,7 @@
 		self.names = {}
 		self.data = []
 		self.size = 12
-		
+
 		self.questions = []
 		self.answers = []
 		self.authorities = []
@@ -660,7 +663,7 @@
 		format = '!H'
 		self.data.insert(index, struct.pack(format, value))
 		self.size += 2
-		
+
 	def writeShort(self, value):
 		"""Writes an unsigned short to the packet"""
 		format = '!H'
@@ -739,7 +742,7 @@
 		self.size += 2
 		record.write(self)
 		self.size -= 2
-		
+
 		length = len(''.join(self.data[index:]))
 		self.insertShort(index, length) # Here is the short we adjusted for
 
@@ -758,7 +761,7 @@
 				self.writeRecord(authority, 0)
 			for additional in self.additionals:
 				self.writeRecord(additional, 0)
-		
+
 			self.insertShort(0, len(self.additionals))
 			self.insertShort(0, len(self.authorities))
 			self.insertShort(0, len(self.answers))
@@ -773,7 +776,7 @@
 
 class DNSCache(object):
 	"""A cache of DNS entries"""
-	
+
 	def __init__(self):
 		self.cache = {}
 
@@ -866,12 +869,11 @@
 					pass
 
 	def getReaders(self):
-		result = []
 		self.condition.acquire()
 		result = self.readers.keys()
 		self.condition.release()
 		return result
-	
+
 	def addReader(self, reader, socket):
 		self.condition.acquire()
 		self.readers[socket] = reader
@@ -896,7 +898,7 @@
 
 	It requires registration with an Engine object in order to have
 	the read() method called when a socket is availble for reading."""
-	
+
 	def __init__(self, zeroconf):
 		self.zeroconf = zeroconf
 		self.zeroconf.engine.addReader(self, self.zeroconf.socket)
@@ -923,7 +925,7 @@
 class Reaper(threading.Thread):
 	"""A Reaper is used by this module to remove cache entries that
 	have expired."""
-	
+
 	def __init__(self, zeroconf):
 		threading.Thread.__init__(self)
 		self.zeroconf = zeroconf
@@ -947,7 +949,7 @@
 	The listener object will have its addService() and
 	removeService() methods called when this browser
 	discovers changes in the services availability."""
-	
+
 	def __init__(self, zeroconf, type, listener):
 		"""Creates a browser for a specific type"""
 		threading.Thread.__init__(self)
@@ -958,7 +960,7 @@
 		self.nextTime = currentTimeMillis()
 		self.delay = _BROWSER_TIME
 		self.list = []
-		
+
 		self.done = 0
 
 		self.zeroconf.addListener(self, DNSQuestion(self.type, _TYPE_PTR, _CLASS_IN))
@@ -1018,11 +1020,11 @@
 
 			if event is not None:
 				event(self.zeroconf)
-				
+
 
 class ServiceInfo(object):
 	"""Service information"""
-	
+
 	def __init__(self, type, name, address=None, port=None, weight=0, priority=0, properties=None, server=None):
 		"""Create a service description.
 
@@ -1088,7 +1090,7 @@
 				index += 1
 				strs.append(text[index:index+length])
 				index += length
-			
+
 			for s in strs:
 				eindex = s.find('=')
 				if eindex == -1:
@@ -1111,7 +1113,7 @@
 		except:
 			traceback.print_exc()
 			self.properties = None
-			
+
 	def getType(self):
 		"""Type accessor"""
 		return self.type
@@ -1201,7 +1203,7 @@
 			result = 1
 		finally:
 			zeroconf.removeListener(self)
-			
+
 		return result
 
 	def __eq__(self, other):
@@ -1226,7 +1228,7 @@
 				result += self.text[:17] + "..."
 		result += "]"
 		return result
-				
+
 
 class Zeroconf(object):
 	"""Implementation of Zeroconf Multicast DNS Service Discovery
@@ -1266,7 +1268,7 @@
 			# the SO_REUSE* options have been set, so ignore it
 			#
 			pass
-		#self.socket.setsockopt(socket.SOL_IP, socket.IP_MULTICAST_IF, socket.inet_aton(self.intf) + socket.inet_aton('0.0.0.0')) 
+		#self.socket.setsockopt(socket.SOL_IP, socket.IP_MULTICAST_IF, socket.inet_aton(self.intf) + socket.inet_aton('0.0.0.0'))
 		self.socket.setsockopt(socket.SOL_IP, socket.IP_ADD_MEMBERSHIP, socket.inet_aton(_MDNS_ADDR) + socket.inet_aton('0.0.0.0'))
 
 		self.listeners = []
@@ -1277,7 +1279,7 @@
 		self.cache = DNSCache()
 
 		self.condition = threading.Condition()
-		
+
 		self.engine = Engine(self)
 		self.listener = Listener(self)
 		self.reaper = Reaper(self)
@@ -1472,7 +1474,7 @@
 						record = entry
 			else:
 				self.cache.add(record)
-				
+
 			self.updateRecord(now, record)
 
 	def handleQuery(self, msg, addr, port):
@@ -1486,14 +1488,14 @@
 			out = DNSOutgoing(_FLAGS_QR_RESPONSE | _FLAGS_AA, 0)
 			for question in msg.questions:
 				out.addQuestion(question)
-		
+
 		for question in msg.questions:
 			if question.type == _TYPE_PTR:
 				if question.name == "_services._dns-sd._udp.local.":
 					for stype in self.servicetypes.keys():
 						if out is None:
 							out = DNSOutgoing(_FLAGS_QR_RESPONSE | _FLAGS_AA)
-						out.addAnswer(msg, DNSPointer("_services._dns-sd._udp.local.", _TYPE_PTR, _CLASS_IN, _DNS_TTL, stype))						
+						out.addAnswer(msg, DNSPointer("_services._dns-sd._udp.local.", _TYPE_PTR, _CLASS_IN, _DNS_TTL, stype))
 				for service in self.services.values():
 					if question.name == service.type:
 						if out is None:
@@ -1503,16 +1505,16 @@
 				try:
 					if out is None:
 						out = DNSOutgoing(_FLAGS_QR_RESPONSE | _FLAGS_AA)
-					
+
 					# Answer A record queries for any service addresses we know
 					if question.type == _TYPE_A or question.type == _TYPE_ANY:
 						for service in self.services.values():
 							if service.server == question.name.lower():
 								out.addAnswer(msg, DNSAddress(question.name, _TYPE_A, _CLASS_IN | _CLASS_UNIQUE, _DNS_TTL, service.address))
-					
+
 					service = self.services.get(question.name.lower(), None)
 					if not service: continue
-					
+
 					if question.type == _TYPE_SRV or question.type == _TYPE_ANY:
 						out.addAnswer(msg, DNSService(question.name, _TYPE_SRV, _CLASS_IN | _CLASS_UNIQUE, _DNS_TTL, service.priority, service.weight, service.port, service.server))
 					if question.type == _TYPE_TXT or question.type == _TYPE_ANY:
@@ -1521,7 +1523,7 @@
 						out.addAdditionalAnswer(DNSAddress(service.server, _TYPE_A, _CLASS_IN | _CLASS_UNIQUE, _DNS_TTL, service.address))
 				except:
 					traceback.print_exc()
-				
+
 		if out is not None and out.answers:
 			out.id = msg.id
 			self.send(out, addr, port)
@@ -1531,7 +1533,7 @@
 		# This is a quick test to see if we can parse the packets we generate
 		#temp = DNSIncoming(out.packet())
 		try:
-			bytes_sent = self.socket.sendto(out.packet(), 0, (addr, port))
+			self.socket.sendto(out.packet(), 0, (addr, port))
 		except:
 			# Ignore this, it may be a temporary loss of network connection
 			pass
@@ -1546,11 +1548,11 @@
 			self.unregisterAllServices()
 			self.socket.setsockopt(socket.SOL_IP, socket.IP_DROP_MEMBERSHIP, socket.inet_aton(_MDNS_ADDR) + socket.inet_aton('0.0.0.0'))
 			self.socket.close()
-			
+
 # Test a few module features, including service registration, service
 # query (for Zoe), and service unregistration.
 
-if __name__ == '__main__':	
+if __name__ == '__main__':
 	print "Multicast DNS Service Discovery for Python, version", __version__
 	r = Zeroconf()
 	print "1. Testing registration of a service..."
--- a/hgext/zeroconf/__init__.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/hgext/zeroconf/__init__.py	Sun Apr 26 11:49:17 2009 +0200
@@ -8,17 +8,18 @@
 
 '''zeroconf support for mercurial repositories
 
-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.
+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:
+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.
+To allow other people to discover your repository using run "hg serve"
+in your repository.
 
  $ cd test
  $ hg serve
@@ -77,8 +78,9 @@
         ip = getip()
         localip = socket.inet_aton(ip)
 
-    parts = socket.gethostname().split('.')
-    host = parts[0] + ".local"
+    hostname = socket.gethostname().split('.')[0]
+    host = hostname + ".local"
+    name = "%s-%s" % (hostname, name)
 
     # advertise to browsers
     svc = Zeroconf.ServiceInfo('_http._tcp.local.',
@@ -130,7 +132,7 @@
 def getzcpaths():
     server = Zeroconf.Zeroconf()
     l = listener()
-    browser = Zeroconf.ServiceBrowser(server, "_hg._tcp.local.", l)
+    Zeroconf.ServiceBrowser(server, "_hg._tcp.local.", l)
     time.sleep(1)
     server.close()
     for v in l.found.values():
--- a/i18n/da.po	Sun Apr 26 11:35:53 2009 +0200
+++ b/i18n/da.po	Sun Apr 26 11:49:17 2009 +0200
@@ -4,19 +4,21 @@
 #
 # Translation dictionary:
 #
-# changeset      ændring
-# merge          sammenføje
-# patch          rettelse
-# repo(sitory)   arkiv
-# revision       revision
-# tag            mærkat
+# changeset           ændring
+# commit              arkivering
+# merge               sammenføje
+# patch               rettelse
+# repo(sitory)        arkiv
+# revision            revision
+# tag                 mærkat
+# working directory   arbejdskatalog
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: Mercurial\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-22 22:02+0100\n"
-"PO-Revision-Date: 2009-02-22 22:05+0100\n"
+"POT-Creation-Date: 2009-04-08 00:41+0200\n"
+"PO-Revision-Date: 2009-04-08 00:44+0200\n"
 "Last-Translator:  <mg@daimi.au.dk>\n"
 "Language-Team: Danish\n"
 "MIME-Version: 1.0\n"
@@ -123,16 +125,15 @@
 "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"
+"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 on, "
-"and\n"
-"just updates it. This is similar to git's approach of branching.\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"
+"branching.\n"
 msgstr ""
 
 msgid ""
@@ -179,8 +180,8 @@
 "\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"
+"    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"
@@ -241,91 +242,83 @@
 msgid "rename a given bookmark"
 msgstr ""
 
-msgid "hg bookmarks [-d] [-m NAME] [-r NAME] [NAME]"
+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 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"
@@ -338,9 +331,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"
@@ -504,17 +497,25 @@
 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"
+"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"
+"    argument to --rev if given) is printed.\n"
+"    "
+msgstr ""
+"vis forældrene til arbejdskataloget eller en revision\n"
+"\n"
+"    Udskriv arbejdskatalogets forældrerevisioner. Hvis en revision\n"
+"    angivet med --rev, så udskrives forældren til denne revision. Hvis\n"
+"    en fil er angivet, udskrives revisionen i hvilken filen sidst blev\n"
+"    ændret (før arbejdskatalogets revision eller argumentet til --rev,\n"
+"    hvis givet).\n"
+"    "
+
+msgid "show children of the specified revision"
 msgstr ""
 
 msgid "hg children [-r REV] [FILE]"
@@ -537,10 +538,9 @@
 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"
+"    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"
@@ -596,7 +596,7 @@
 msgid "count rate for the specified revision or range"
 msgstr "lav statistik for de specificerede revisioner"
 
-msgid "count rate for revs matching date spec"
+msgid "count rate for revisions matching date spec"
 msgstr "lav statistik for revisioner som matcher dato specifikationen"
 
 msgid "template to group changesets"
@@ -623,16 +623,16 @@
 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"
+"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"
@@ -712,38 +712,38 @@
 "    - 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. 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"
 "    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"
@@ -754,32 +754,33 @@
 "\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 explicitely 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"
 "    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=True          (boolean)\n"
-"        allow target to preserve source revision ID\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"
@@ -788,11 +789,11 @@
 "\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"
+"    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 reorganisation in the CVS\n"
 "    sandbox is ignored.\n"
 "\n"
@@ -808,34 +809,37 @@
 "    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.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"
@@ -856,6 +860,23 @@
 "    --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"
@@ -872,12 +893,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"
@@ -989,7 +1012,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
@@ -997,7 +1020,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
@@ -1086,6 +1109,10 @@
 msgstr ""
 
 #, python-format
+msgid "found synthetic revision in %s: %r\n"
+msgstr ""
+
+#, python-format
 msgid "writing cvs log cache %s\n"
 msgstr ""
 
@@ -1096,6 +1123,9 @@
 msgid "creating changesets\n"
 msgstr "opretter ændringer\n"
 
+msgid "synthetic changeset cannot have multiple parents"
+msgstr ""
+
 #, python-format
 msgid "%d changeset entries\n"
 msgstr "%d ændringer\n"
@@ -1200,7 +1230,13 @@
 msgstr ""
 
 #, python-format
-msgid "copying file in renamed dir from '%s' to '%s'"
+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"
@@ -1350,7 +1386,7 @@
 msgid ""
 "\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"
@@ -1377,16 +1413,16 @@
 "  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"
+"  # (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"
+"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 ""
 
 msgid "snapshot files as of some revision"
@@ -1403,7 +1439,7 @@
 msgstr ""
 
 #, python-format
-msgid "making snapshot of %d files from working dir\n"
+msgid "making snapshot of %d files from working directory\n"
 msgstr ""
 
 msgid ""
@@ -1434,19 +1470,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"
+"    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"
 "\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."
+"    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"
@@ -1477,13 +1513,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"
@@ -1501,7 +1538,7 @@
 msgstr ""
 
 msgid "working directory is missing some files"
-msgstr "arbejdsbiblioteket mangler nogle filer"
+msgstr "arbejdskataloget mangler nogle filer"
 
 msgid ""
 "multiple heads in this branch (use \"hg heads .\" and \"hg merge\" to merge)"
@@ -1835,17 +1872,17 @@
 "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\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"
 "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"
+"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"
@@ -1857,8 +1894,8 @@
 "  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\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"
@@ -2150,15 +2187,15 @@
 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"
+"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"
@@ -2168,28 +2205,28 @@
 "    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 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, 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"
@@ -2272,11 +2309,11 @@
 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"
+"    expansion.\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"
 "    "
@@ -2289,7 +2326,7 @@
 msgstr ""
 
 #, python-format
-msgid "creating temporary repo at %s\n"
+msgid "creating temporary repository at %s\n"
 msgstr ""
 
 #, python-format
@@ -2304,7 +2341,7 @@
 #, python-format
 msgid ""
 "\n"
-"removing temporary repo %s\n"
+"removing temporary repository %s\n"
 msgstr ""
 
 msgid ""
@@ -2319,17 +2356,17 @@
 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"
+"    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"
 "\n"
-"    Run before changing/disabling active keywords\n"
-"    or if you experience problems with \"hg import\" or \"hg merge\".\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"
 "    "
@@ -2396,11 +2433,11 @@
 "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"
+"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"
@@ -2659,7 +2696,7 @@
 msgstr ""
 
 msgid "cleaning up working directory..."
-msgstr "rydder op i arbejdsbiblioteket..."
+msgstr "rydder op i arbejdskataloget..."
 
 #, python-format
 msgid "errors during apply, please fix and refresh %s\n"
@@ -2806,14 +2843,16 @@
 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"
+"    The patches must not be applied, unless they are arguments to the\n"
+"    --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."
+"    them to regular mercurial changesets). The qfinish command should\n"
+"    be used as an alternative for qdel -r, as the latter option is\n"
+"    deprecated.\n"
+"\n"
+"    With --keep, the patch files are preserved in the patch\n"
+"    directory."
 msgstr ""
 
 msgid "print the patches already applied"
@@ -2825,24 +2864,25 @@
 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"
+"    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"
+"    overwritten.\n"
 "\n"
 "    An existing changeset may be placed under mq control with --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"
 "    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"
 "    "
 msgstr ""
 
@@ -2850,23 +2890,23 @@
 "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."
+"    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."
 msgstr ""
 
 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"
+"    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"
@@ -2876,16 +2916,16 @@
 msgid "versioned patch repository not found (see qinit -c)"
 msgstr "versionsstyret arkiv til rettelser blev ikke fundet (se qinit -c)"
 
-msgid "cloning main repo\n"
+msgid "cloning main repository\n"
 msgstr "kloner hovedarkiv\n"
 
-msgid "cloning patch repo\n"
+msgid "cloning patch repository\n"
 msgstr "kloner rettelsesarkiv\n"
 
-msgid "stripping applied patches from destination repo\n"
-msgstr ""
-
-msgid "updating destination repo\n"
+msgid "stripping applied patches from destination repository\n"
+msgstr ""
+
+msgid "updating destination repository\n"
 msgstr ""
 
 msgid "commit changes in the queue repository"
@@ -2912,21 +2952,19 @@
 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"
+"    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. If "
-"none\n"
-"    is specified, the header is empty and the commit message is '[mq]: "
-"PATCH'.\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"
 "    format. Read the diffs help topic for more information on why this\n"
@@ -2938,18 +2976,17 @@
 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 --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"
 "    "
 msgstr ""
 
@@ -2959,14 +2996,15 @@
 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 ""
 
@@ -2976,12 +3014,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"
@@ -3039,8 +3077,8 @@
 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 --force is applied, all local changes in patched files will\n"
+"    be lost.\n"
 "    "
 msgstr ""
 
@@ -3054,9 +3092,9 @@
 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 ""
 
@@ -3079,7 +3117,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"
@@ -3100,8 +3138,9 @@
 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 ""
 
@@ -3109,34 +3148,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"
@@ -3171,17 +3210,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"
+"    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 --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"
+"    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 ""
 
@@ -3220,7 +3260,7 @@
 msgid "use uncompressed transfer (fast over LAN)"
 msgstr ""
 
-msgid "location of source patch repo"
+msgid "location of source patch repository"
 msgstr ""
 
 msgid "hg qclone [OPTION]... SOURCE [DEST]"
@@ -3268,7 +3308,7 @@
 msgid "hg qheader [PATCH]"
 msgstr ""
 
-msgid "import file in patch dir"
+msgid "import file in patch directory"
 msgstr ""
 
 msgid "patch file name"
@@ -3370,7 +3410,7 @@
 msgid "delete save entry"
 msgstr ""
 
-msgid "update queue working dir"
+msgid "update queue working directory"
 msgstr ""
 
 msgid "hg qrestore [-d] [-u] REV"
@@ -3494,10 +3534,10 @@
 "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."
+" 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 ""
 
 msgid "email notification class."
@@ -3551,7 +3591,7 @@
 msgstr ""
 
 #, python-format
-msgid "notify: no subscribers to repo %s\n"
+msgid "notify: no subscribers to repository %s\n"
 msgstr ""
 
 #, python-format
@@ -3566,12 +3606,11 @@
 "  [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"
@@ -3582,23 +3621,23 @@
 "  [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"
+"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\n"
-"the ancestors of a specific revision.\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"
@@ -3617,12 +3656,12 @@
 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"
+"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 remainder of the changeset description.\n"
 "\n"
@@ -3631,11 +3670,11 @@
 "  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"
+"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 "
+"the changeset summary, so you can be sure you are sending the right\n"
 "changes.\n"
 "\n"
 "To enable this extension:\n"
@@ -3643,7 +3682,8 @@
 "  [extensions]\n"
 "  hgext.patchbomb =\n"
 "\n"
-"To configure other defaults, add a section like this to your hgrc file:\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"
@@ -3655,24 +3695,24 @@
 "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"
+"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"
+"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, i.e. with mutt:\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"
+"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"
@@ -3680,9 +3720,9 @@
 "\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."
+"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"
@@ -3698,23 +3738,23 @@
 "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"
+"    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"
+"    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"
+"    single email containing a binary Mercurial bundle as an attachment\n"
+"    will be sent.\n"
 "\n"
 "    Examples:\n"
 "\n"
@@ -3734,8 +3774,8 @@
 "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"
+"    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 ""
 
@@ -3784,7 +3824,7 @@
 msgid "send patches as inline attachments"
 msgstr ""
 
-msgid "email addresses of blind copy recipients"
+msgid "email addresses of blind carbon copy recipients"
 msgstr ""
 
 msgid "email addresses of copy recipients"
@@ -3823,6 +3863,9 @@
 msgid "send changes not in target as a binary bundle"
 msgstr ""
 
+msgid "file name of the bundle attachment"
+msgstr ""
+
 msgid "a revision to send"
 msgstr ""
 
@@ -3841,13 +3884,13 @@
 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 managment\n"
 "    But it will leave untouched:\n"
 "     - Modified and unmodified tracked files\n"
 "     - Ignored files (unless --all is specified)\n"
@@ -3856,9 +3899,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 ""
 
@@ -3896,7 +3940,7 @@
 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"
@@ -3912,19 +3956,13 @@
 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 or aborted with --abort.\n"
+"    "
 msgstr ""
 
 msgid "cannot use both abort and continue"
@@ -3942,6 +3980,9 @@
 msgid "nothing to rebase\n"
 msgstr ""
 
+msgid "cannot use both keepbranches and extrafn"
+msgstr ""
+
 msgid "rebase merging completed\n"
 msgstr ""
 
@@ -4007,6 +4048,9 @@
 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 ""
 
@@ -4082,12 +4126,6 @@
 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 ""
 
@@ -4100,6 +4138,12 @@
 msgid "collapse the rebased revisions"
 msgstr ""
 
+msgid "keep original revisions"
+msgstr ""
+
+msgid "keep original branches"
+msgstr ""
+
 msgid "continue an interrupted rebase"
 msgstr ""
 
@@ -4107,7 +4151,8 @@
 msgstr ""
 
 msgid ""
-"hg rebase [-s rev | -b rev] [-d rev] [--collapse] | [-c] | [-a] | [--keep]"
+"hg rebase [-s rev | -b rev] [-d rev] [--collapse] [--keep] [--keepbranches] "
+"| [-c] | [-a]"
 msgstr ""
 
 msgid "interactive change selection during commit or qrefresh"
@@ -4221,6 +4266,10 @@
 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"
@@ -4231,7 +4280,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"
@@ -4305,8 +4354,8 @@
 "\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"
+"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 ""
 
 msgid ""
@@ -4398,8 +4447,8 @@
 "    (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"
+"    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"
@@ -4407,19 +4456,21 @@
 "    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"
+"    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.\n"
 "    "
 msgstr ""
 
@@ -4475,18 +4526,18 @@
 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"
+"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 usefull 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"
@@ -4494,15 +4545,17 @@
 "\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"
+" * 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 util._encoding\n"
-"which is decided by mercurial from current locale setting or HGENCODING.\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 ""
 
@@ -4555,19 +4608,18 @@
 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"
+"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\" in "
-"your\n"
-"repository.\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"
@@ -4626,7 +4678,7 @@
 
 #, python-format
 msgid "can't read commit message '%s': %s"
-msgstr "Kan ikke lase commit besked '%s': %s"
+msgstr "Kan ikke læse arkiveringsbesked '%s': %s"
 
 msgid "limit must be a positive integer"
 msgstr ""
@@ -4678,8 +4730,12 @@
 msgstr "%s: kan ikke kopiere - %s\n"
 
 #, python-format
-msgid "%s %s to %s\n"
-msgstr "%s: %s til %s\n"
+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"
@@ -4808,33 +4864,35 @@
 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"
 "\n"
-"    If no names are given, add all files in the repository.\n"
-"    "
-msgstr ""
-"tilføj de angivne filer ved næste commit\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 commit. For at\n"
-"    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"
+"    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"
+"\n"
+"    Hvis der ikke er angivet nogen navne tilføjes alle filer til\n"
 "    arkivet.\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"
+"    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 option to detect renamed files. With a parameter > 0,\n"
 "    this compares every removed file with every added file and records\n"
@@ -4853,18 +4911,28 @@
 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"
+"    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"
 "\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 ""
+"vis information om ændringer pr linie\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"
+"\n"
+"    Uden -a tilvalget vil annotate undgå at behandle filer som den\n"
+"    detekterer som binære. Med -a vil annotate generere en annotering\n"
+"    alligevel, sandsynligvis med et uønsket resultat."
 
 msgid "at least one file name or pattern required"
 msgstr ""
@@ -4882,8 +4950,8 @@
 "    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"
-"    types are:\n"
+"    To specify the type of archive to create, use \"-t\". Valid types\n"
+"    are:\n"
 "\n"
 "    \"files\" (default): a directory full of files\n"
 "    \"tar\": tar archive, uncompressed\n"
@@ -4893,11 +4961,11 @@
 "    \"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\" to specify a format string for the prefix. The\n"
+"    default is the basename of the archive, with suffixes removed.\n"
 "    "
 msgstr ""
 
@@ -4922,13 +4990,30 @@
 "\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 for 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 ""
+"omgør effekten af tidligere ændringer\n"
+"\n"
+"    Arkiverer 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"
+"    lavet et nyt hoved. Dette hoved vil være den nye spids og du bør\n"
+"    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"
+"    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"
+"    normal sammenføjning.\n"
+"\n"
+"    Se 'hg help dates' for en liste af gyldige formater til -d/--date.\n"
+"    "
 
 msgid "please specify just one revision"
 msgstr "angiv venligst kun en revision"
@@ -4973,27 +5058,23 @@
 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"
-"    or announce that it has found the bad revision.\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 --noupdate option is specified). Once you\n"
+"    have performed tests, mark the working directory as bad or good\n"
+"    and bisect will either update to another candidate changeset or\n"
+"    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 and any other status bigger than 0 "
-"will\n"
-"    mark revision as bad.\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"
 "    "
 msgstr ""
 
@@ -5037,14 +5118,16 @@
 "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"
+"    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"
+"\n"
+"    Unless --force is specified, branch will not let you set a branch\n"
+"    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"
+"    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"
 "    "
@@ -5077,7 +5160,7 @@
 "create a changegroup file\n"
 "\n"
 "    Generate a compressed changegroup file collecting changesets not\n"
-"    found in the other repository.\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"
@@ -5085,10 +5168,10 @@
 "    --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"
+"    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"
@@ -5104,8 +5187,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"
@@ -5113,7 +5196,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 ""
@@ -5129,6 +5212,23 @@
 "    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 option to clone up to a specific revision, no\n"
+"    subsequent revisions (including subsequent tags) will be present\n"
+"    in the cloned repository. This option implies --pull, even on\n"
+"    local repositories.\n"
+"\n"
+"    By default, clone will check out the head of the 'default' branch.\n"
+"    If the -U option is used, the new clone will contain only a\n"
+"    repository (.hg) and no working copy (the working copy parent is\n"
+"    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://\n"
+"    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"
@@ -5141,33 +5241,69 @@
 "\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 ""
+"    "
+msgstr ""
+"lav en kopi af et eksisterende arkiv\n"
+"\n"
+"    Lav en kopi af et eksisterende arkiv 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"
+"    den nye standard for fremtidige kald til 'hg pull'.\n"
+"\n"
+"    Hvis du bruger -r 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"
+"\n"
+"    Som udgangspunkt vil clone hente hovedet af 'default' grenen. Hvis\n"
+"    -U tilvalget bruges vil den nye klon kun indeholde et arkiv (.hg)\n"
+"    og intet arbejdskatalog (arbejdskatalogets forældre er sat til nul\n"
+"    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"
+"    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"
+"    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"
+"\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"
+"    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"
+"    såsom mq.\n"
+"\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 means 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"
@@ -5175,12 +5311,29 @@
 "    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"
-"    enter a message.\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 ""
+"arkiver de specificerede filer eller alle udestående ændringer\n"
+"\n"
+"    Arkiver ændringer i de angivne filer ind i arkivet. 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"
+"    angive filnavne eller -I/-X filtre.\n"
+"\n"
+"    Hvis der ikke angives en arkiveringsbesked, 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"
+"    "
 
 msgid "created new head\n"
 msgstr "lavede et nyt hoved\n"
@@ -5194,13 +5347,13 @@
 "\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"
-"    there can only be one source.\n"
+"    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"
 "    operation is recorded, but no copying is performed.\n"
 "\n"
-"    This command takes effect in the next commit. To undo a copy\n"
+"    This command takes effect with the next commit. To undo a copy\n"
 "    before that, see hg revert.\n"
 "    "
 msgstr ""
@@ -5397,9 +5550,32 @@
 "    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"
-"    "
-msgstr ""
+"    format. For more information, read 'hg help diffs'.\n"
+"    "
+msgstr ""
+"find ændringer i hele arkivet (eller udvalgte filer)\n"
+"\n"
+"    Vis ændringer mellem revisioner for de udvalgte filer.\n"
+"\n"
+"    Ændringerne mellem filerne vises i unified diff-formatet.\n"
+"\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"
+"    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"
+"\n"
+"    Uden -a tilvalget vil diff undgå at generere ændringer for filer\n"
+"    som den detekterer som binære. Med -a vil diff generere ændringer\n"
+"    alligevel, sandsynligvis med uønskede resultater.\n"
+"\n"
+"    Brug --git tilvalget for at generere ændringer i det udvidede git\n"
+"    diff-format. For mere information, læs hg help diffs.\n"
+"    "
 
 msgid ""
 "dump the header and diffs for one or more changesets\n"
@@ -5409,8 +5585,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"
@@ -5431,10 +5608,45 @@
 "    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 ""
+"    With the --switch-parent option, the diff will be against the\n"
+"    second parent. It can be useful to review a merge.\n"
+"    "
+msgstr ""
+"dump hovedet og ændringerne for en eller flere ændringer\n"
+"\n"
+"    Udskriv ændrings-hovedet og ændringerne for en eller flere\n"
+"    revisioner.\n"
+"\n"
+"    Informationen som vises i ændrings-hovedet er: forfatter,\n"
+"    ændringshash, forældrene og arkiveringsbeskeden.\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"
+"\n"
+"    Uddata kan gemmes i en fil, og filnavnet er givet ved en\n"
+"    format-streng. Formatteringsreglerne er som følger:\n"
+"\n"
+"    %%   litteral % tegn\n"
+"    %H   ændringshash (40 byte heksadecimal)\n"
+"    %N   antallet af rettelser som bliver genereret\n"
+"    %R   revisionnummer for ændringen\n"
+"    %b   grundnavn for det eksporterede arkiv\n"
+"    %h   kortform ændringshash (12 byte heksadecimal)\n"
+"    %n   nul-fyldt sekvensnummer, startende ved 1\n"
+"    %r   nul-fyldt revisionsnummer for ændringen\n"
+"\n"
+"    Uden -a tilvalget vil annotate undgå at behandle filer som den\n"
+"    detekterer som binære. Med -a vil annotate generere en annotering\n"
+"    alligevel, sandsynligvis med et uønsket resultat.\n"
+"\n"
+"    Brug --git tilvalget for at generere ændringer i det udvidede git\n"
+"    diff-format. For mere information, læs hg help diffs.\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"
+"    gennemse en sammenføjning.\n"
+"    "
 
 msgid "export requires at least one changeset"
 msgstr ""
@@ -5452,8 +5664,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"
@@ -5499,7 +5711,8 @@
 "\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."
+"    Given a topic, extension, or command name, print help for that\n"
+"    topic."
 msgstr ""
 
 msgid "global options:"
@@ -5587,14 +5800,15 @@
 msgid ""
 "identify the working copy or specified revision\n"
 "\n"
-"    With no revision, print a summary of the current state of the repo.\n"
+"    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"
 "\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"
+"    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 ""
 
@@ -5613,21 +5827,21 @@
 "    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"
+"    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 and -u 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 --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"
-"    See 'hg help dates' for a list of formats valid for -d/--date.\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"
 "    "
 msgstr ""
 
@@ -5655,11 +5869,11 @@
 "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 be pulled if a\n"
+"    pull was requested.\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"
 "    "
@@ -5677,6 +5891,17 @@
 "    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"
+"    katalog ikke findes vil det blive oprettet.\n"
+"\n"
+"    Hvis intet katalog er angivet vil det nuværende katalog bliver\n"
+"    anvendt.\n"
+"\n"
+"    Det er muligt at angive en ssh:// URL som destination.\n"
+"    Se 'hg help urls' for mere information.\n"
+"    "
 
 msgid ""
 "locate files matching specific patterns\n"
@@ -5722,8 +5947,8 @@
 "    files and full commit message is shown.\n"
 "\n"
 "    NOTE: log -p may generate unexpected diff output for merge\n"
-"    changesets, as it will compare the merge changeset against its\n"
-"    first parent only. Also, the files: list will only reflect files\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"
 "    "
@@ -5740,32 +5965,47 @@
 "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 tip if no revision 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 ""
 
 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 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"
+"\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"
 "\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"
-"    "
-msgstr ""
+"    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"
+"    "
+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"
+"\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"
+"    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"
+"    "
 
 #, python-format
 msgid "branch '%s' has %d heads - please merge with an explicit rev"
@@ -5790,25 +6030,32 @@
 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"
-"    "
-msgstr ""
+"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 --rev, the parent of that revision will be printed. If a\n"
+"    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"
+"    "
+msgstr ""
+"vis forældrene til arbejdskataloget eller en revision\n"
+"\n"
+"    Udskriv arbejdskatalogets forældrerevisioner. Hvis en revision\n"
+"    angivet med --rev, så udskrives forældren til denne revision. Hvis\n"
+"    en fil er angivet, udskrives revisionen i hvilken filen sidst blev\n"
+"    ændret (før arbejdskatalogets revision eller argumentet til --rev,\n"
+"    hvis givet).\n"
+"    "
 
 msgid "can only specify an explicit file name"
 msgstr ""
@@ -5820,8 +6067,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 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"
@@ -5845,16 +6092,34 @@
 msgid ""
 "pull changes from the specified source\n"
 "\n"
-"    Pull changes from a remote repository to a local one.\n"
+"    Pull changes from a remote repository to the 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"
+"\n"
 "    If SOURCE is omitted, the 'default' path will be used.\n"
 "    See 'hg help urls' for more information.\n"
 "    "
 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"
+"\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 "
@@ -5866,23 +6131,44 @@
 "\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"
+"    If -r is used, the named revision and all its ancestors will be\n"
+"    pushed to the remote repository.\n"
+"\n"
+"    Look at the help text for 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"
+"\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"
+"    så er dette identisk til et pull i destinationen af det nuværende\n"
+"    arkiv.\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"
+"    skubningen.\n"
+"\n"
+"    Hvis -r 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"
+"    Hvis DESTINATION udelades vil en standard sti blive brugt.\n"
+"    Se 'hg help urls' for mere information.\n"
+"    "
 
 #, python-format
 msgid "pushing to %s\n"
@@ -5910,8 +6196,9 @@
 "\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 ""
 
@@ -5920,15 +6207,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 can be used to remove only files that\n"
+"    have already been deleted, -f can be used to force deletion, and\n"
+"    -Af can be used to remove files from the next revision without\n"
+"    deleting them.\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"
 "\n"
 "           A  C  M  !\n"
 "    none   W  RD W  R\n"
@@ -5940,6 +6229,31 @@
 "    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"
+"\n"
+"    Dette fjerner kun filerne fra den nuværende gren, ikke fra hele\n"
+"    projektets historie. -A kan bruges til kun at fjerne filer som\n"
+"    allerede er slettet, -f kan bruges for at gennemtvinge en\n"
+"    sletning, og -Af kan bruges til at fjerne filer fra næste revision\n"
+"    uden at slette dem.\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"
+"\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"
+"    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 ""
@@ -5960,15 +6274,15 @@
 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"
-"    stand in the working directory. If invoked with --after, the\n"
+"    exist in the working directory. If invoked with --after, the\n"
 "    operation is recorded, but no copying is performed.\n"
 "\n"
-"    This command takes effect in the next commit. To undo a rename\n"
+"    This command takes effect at the next commit. To undo a rename\n"
 "    before that, see hg revert.\n"
 "    "
 msgstr ""
@@ -5980,8 +6294,13 @@
 "    revisions preserved from the last update or merge. To attempt to\n"
 "    resolve all unresolved files, use the -a 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 -m\n"
+"    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.\n"
+"    marking and unmarking files as resolved. All files must be marked\n"
+"    as resolved before the new commits are permitted.\n"
 "\n"
 "    The codes used to show the status of files are:\n"
 "    U = unresolved\n"
@@ -6001,10 +6320,10 @@
 "filerne"
 
 msgid ""
-"restore individual files or dirs to an earlier state\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 dir parents)\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"
@@ -6013,10 +6332,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 option, revert the given files or directories to\n"
+"    their contents as of a specific revision. This can be helpful to\n"
+"    \"roll back\" some or all of an earlier change. See 'hg help dates'\n"
+"    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"
@@ -6024,8 +6343,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"
@@ -6096,7 +6415,7 @@
 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"
 "    "
@@ -6111,6 +6430,13 @@
 "    stderr. Use the \"-A\" and \"-E\" options to log to files.\n"
 "    "
 msgstr ""
+"eksporter arkivet via HTTP\n"
+"\n"
+"    Start en lokal HTTP arkivbrowser og -server.\n"
+"\n"
+"    Som standard logger serveren forespørgsler til stdout og fejl til\n"
+"    stderr. Brug \"-A\" og \"-E\" tilvalgene til at logge til filer.\n"
+"    "
 
 #, python-format
 msgid "listening at http://%s%s/%s (bound to %s:%d)\n"
@@ -6126,7 +6452,7 @@
 "    with \"show only ...\" are given, the 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"
@@ -6141,12 +6467,44 @@
 "    A = added\n"
 "    R = removed\n"
 "    C = clean\n"
-"    ! = deleted, but still tracked\n"
+"    ! = missing, but still tracked\n"
 "    ? = not tracked\n"
 "    I = ignored\n"
 "      = the previous added file was copied from here\n"
 "    "
 msgstr ""
+"vis ændrede filer i arbejdskataloget\n"
+"\n"
+"    Vis status for filer i arkivet. 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 (clean), -i (ignored), -C (copies) eller -A er angivet. Med\n"
+"    mindre tilvalgene beskrevet med \"vis kun ...\" bruges, så bruges\n"
+"    -mardu tilvalgene.\n"
+"\n"
+"    Tilvalget -q/--quiet skjuler filer som ikke bliver fulgt (ukendte\n"
+"    eller ignorerede filer) med mindre disse eksplicit vælges med\n"
+"    -u/--unknown eller -i/--ignored.\n"
+"\n"
+"    BEMÆRK: status kan tilsyneladende være forskellig fra diff hvis\n"
+"    rettigheder er blevet ændret eller hvis en sammenføjning har\n"
+"    fundet sted. Det normale diff-format rapporterer ikke ændringer i\n"
+"    rettigheder og diff rapporterer kun ænringer relativt til en\n"
+"    sammenføjningsforældre.\n"
+"\n"
+"    Hvis der angivet en revision bruges denne som en basisrevision.\n"
+"    Hvis der angives to revisioner, da vises forskellene mellem dem.\n"
+"\n"
+"    Koderne som bruges til at vise status for filerne er:\n"
+"    M = ændret\n"
+"    A = tilføjet\n"
+"    R = fjernet\n"
+"    C = ren\n"
+"    ! = mangler, men følges stadig\n"
+"    ? = følges ikke\n"
+"    I = ignoreret\n"
+"      = den foregående fil blev kopieret herfra\n"
+"    "
 
 msgid ""
 "add one or more tags for the current or given revision\n"
@@ -6157,8 +6515,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"
@@ -6185,7 +6543,11 @@
 msgstr ""
 
 #, python-format
-msgid "tag '%s' is not a %s tag"
+msgid "tag '%s' is not a global tag"
+msgstr ""
+
+#, python-format
+msgid "tag '%s' is not a local tag"
 msgstr ""
 
 #, python-format
@@ -6203,8 +6565,8 @@
 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 ""
 "vis arkivmærkater\n"
@@ -6238,31 +6600,62 @@
 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"
+"    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 to discard them,\n"
-"    forcibly replacing the state of the working dir with the requested\n"
-"    revision.\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"
+"    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"
+"    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 --date.\n"
 "    "
 msgstr ""
+"opdater arbejdskataloget\n"
+"\n"
+"    Opdater arkivets 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"
+"    arbejdskataloget yderligere blive skiftet til denne gren.\n"
+"\n"
+"    Hvis der er uarkiverede ændringer kan -C tilvalget bruges for at\n"
+"    kassere dem og sætte tilstanden af arbejdskataloget lig tilstanden\n"
+"    i den ønskede revision.\n"
+"\n"
+"    Hvis der er uarkiverede ændringer, og -C tilvalget ikke bruges, og\n"
+"    forældrerevisionen og den ønskede revision begge er på samme gren,\n"
+"    og en af dem er en forfar til den anden, så vil det nye\n"
+"    arbejdskatalog indeholde den ønskede revision sammenføjet med de\n"
+"    uarkiverede ændringer. Ellers vil opdateringen fejle med et\n"
+"    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"
+"\n"
+"    Se 'hg help dates' for en liste af gyldige formater til --date.\n"
+"    "
 
 msgid ""
 "verify the integrity of the repository\n"
@@ -6285,7 +6678,7 @@
 
 msgid ""
 "\n"
-"Copyright (C) 2005-2008 Matt Mackall <mpm@selenic.com> and others\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 ""
@@ -6294,7 +6687,7 @@
 msgstr ""
 
 msgid "change working directory"
-msgstr "skift arbejdsbibliotek"
+msgstr "skift arbejdskatalog"
 
 msgid "do not prompt, assume 'yes' for any required answers"
 msgstr "spørg ikke, antag alle svar er 'ja'"
@@ -6354,10 +6747,10 @@
 msgstr "ekskluder navne som matcher det givne mønster"
 
 msgid "use <text> as commit message"
-msgstr "brug <tekst> som commit-besked"
+msgstr "brug <tekst> som arkiveringsbesked"
 
 msgid "read commit message from <file>"
-msgstr "læs commit-beskeden fra <fil>"
+msgstr "læs arkiveringsbeskeden fra <fil>"
 
 msgid "record datecode as commit date"
 msgstr ""
@@ -6545,6 +6938,9 @@
 msgid "[INDEX] REV1 REV2"
 msgstr ""
 
+msgid "[COMMAND]"
+msgstr "[KOMMANDO]"
+
 msgid "show the command options"
 msgstr ""
 
@@ -6614,7 +7010,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"
@@ -6638,7 +7034,7 @@
 msgid "[TOPIC]"
 msgstr ""
 
-msgid "identify the specified rev"
+msgid "identify the specified revision"
 msgstr ""
 
 msgid "show local revision number"
@@ -6709,7 +7105,7 @@
 msgid "only follow the first parent of merge changesets"
 msgstr ""
 
-msgid "show revs matching date spec"
+msgid "show revisions matching date spec"
 msgstr ""
 
 msgid "show copied files"
@@ -6718,13 +7114,13 @@
 msgid "do case-insensitive search for a keyword"
 msgstr ""
 
-msgid "include revs where files were removed"
+msgid "include revisions where files were removed"
 msgstr ""
 
 msgid "show only merges"
 msgstr ""
 
-msgid "revs committed by user"
+msgid "revisions committed by user"
 msgstr ""
 
 msgid "show only changesets within the given named branch"
@@ -6757,7 +7153,7 @@
 msgid "[-M] [-p] [-n] [-f] [-r REV]... [DEST]"
 msgstr ""
 
-msgid "show parents from the specified rev"
+msgid "show parents from the specified revision"
 msgstr ""
 
 msgid "hg parents [-r REV] [FILE]"
@@ -6832,10 +7228,10 @@
 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)"
+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"
@@ -7243,15 +7639,15 @@
 "    \"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"
-"    \"<{date}\" - on or before a given date\n"
-"    \">{date}\" - on or after a given date\n"
-"    \"{date} to {date}\" - a date range, inclusive\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 ""
@@ -7287,8 +7683,8 @@
 "\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}\" - på eller før den angivne dato/tidspunkt\n"
+"    \">{date}\" - på eller efter den angivne dato/tidspunkt\n"
 "    \"{date} to {date}\" - et datointerval, inklusiv endepunkterne\n"
 "    \"-{days}\" - indenfor et angivet antal dage, fra dags dato\n"
 "    "
@@ -7306,16 +7702,16 @@
 "\n"
 "    Alternate pattern notations must be specified explicitly.\n"
 "\n"
-"    To use a plain path name without any pattern matching, start a\n"
-"    name with \"path:\".  These path names must match completely, from\n"
-"    the root of the current repository.\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 match\n"
-"    files ending in \".c\" in the current directory only.\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"
+"    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"
@@ -7330,11 +7726,11 @@
 "\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 the current directory, or\n"
-"                   any subdirectory\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 the directory foo, or any\n"
-"                   subdirectory\n"
+"    foo/**.c       any name ending in \".c\" in any subdirectory of foo\n"
+"                   including itself.\n"
 "\n"
 "    Regexp examples:\n"
 "\n"
@@ -7349,12 +7745,14 @@
 msgid ""
 "\n"
 "HG::\n"
-"    Path to the 'hg' executable, automatically passed when running hooks,\n"
-"    extensions or external tools. If unset or empty, an executable named\n"
-"    'hg' (with com/exe/bat/cmd extension on Windows) is searched.\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 use when committing. See EDITOR.\n"
+"    This is the name of the editor to run when committing. See EDITOR.\n"
 "\n"
 "    (deprecated, use .hgrc)\n"
 "\n"
@@ -7366,8 +7764,8 @@
 "\n"
 "HGENCODINGMODE::\n"
 "    This sets Mercurial's behavior for handling unknown characters\n"
-"    while transcoding user inputs. The default is \"strict\", which\n"
-"    causes Mercurial to abort if it can't translate a character. Other\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"
@@ -7380,41 +7778,47 @@
 "    (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 .hg/hgrc of\n"
-"    current repository is read.\n"
-"\n"
-"    For each element in path, if a directory, all entries in directory\n"
-"    ending with \".rc\" are added to path.  Else, element itself is\n"
-"    added to path.\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 for the author of a commit.\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"
-"    If HGUSER is not set, this will be used as the author for a commit.\n"
+"    May be used as the author of a commit; see HGUSER.\n"
 "\n"
 "LOGNAME::\n"
-"    If neither HGUSER nor EMAIL is set, LOGNAME will be used (with\n"
-"    '@hostname' appended) as the author value for a commit.\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\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 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 ""
 
@@ -7423,12 +7827,13 @@
 
 msgid ""
 "\n"
-"    Mercurial accepts several notations for identifying individual\n"
-"    revisions.\n"
-"\n"
-"    A plain integer is treated as a revision number. Negative\n"
-"    integers are treated as offsets from the tip, with -1 denoting the\n"
-"    tip.\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"
@@ -7436,7 +7841,7 @@
 "    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 one full-length identifier.\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"
@@ -7449,9 +7854,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 ""
 
@@ -7461,20 +7866,20 @@
 msgid ""
 "\n"
 "    When Mercurial accepts more than one revision, they may be\n"
-"    specified individually, or provided as a continuous range,\n"
-"    separated by the \":\" character.\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\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"
 "\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 4:2 gives 4, 3, and 2.\n"
+"    gives 3, 4 and 5. Similarly, a range of 9:6 gives 9, 8, 7, and 6.\n"
 "    "
 msgstr ""
 
@@ -7483,35 +7888,37 @@
 
 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"
 "\n"
-"     - executable status\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 there are very few tools which\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 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 ""
 
@@ -7521,49 +7928,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 are all template-enabled.\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 wanted 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"
@@ -7572,15 +7982,21 @@
 "\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 age for the given date.\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"
-"          basename. For example, \"foo/bar/baz\" becomes \"baz\".\n"
-"    - date: Date. Returns a date in a Unix date command format, including\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"
+"    - 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"
-"    - email: Any text. Extracts the first string that looks like an email\n"
-"          address.\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"
@@ -7589,24 +8005,24 @@
 "    - 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"
+"    - 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"
-"    - shortdate: Date. Returns a date like \"2006-09-04\".\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"
+msgid "URL Paths"
 msgstr "URL-stier"
 
 msgid ""
@@ -7623,45 +8039,48 @@
 "    'hg incoming --bundle').\n"
 "\n"
 "    An optional identifier after # indicates a particular branch, tag,\n"
-"    or changeset to deal with in the remote repository.\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\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"
-"\n"
-"    Two path aliases are more important because they are used as defaults\n"
-"    when you do not provide the url to a command:\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 saves\n"
-"      the location of the source repository as the 'default' path. This is\n"
-"      then used when you omit a path from the push and pull commands.\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"
@@ -7677,6 +8096,10 @@
 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"
@@ -7686,7 +8109,7 @@
 msgstr ""
 
 msgid "updating working directory\n"
-msgstr "opdaterer arbejdsbibliotek\n"
+msgstr "opdaterer arbejdskatalog\n"
 
 msgid "updated"
 msgstr "opdateret"
@@ -7707,6 +8130,11 @@
 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 ""
 
@@ -7717,7 +8145,7 @@
 msgid "SSL support is unavailable"
 msgstr "understøttelse for SSL er ikke tilstede"
 
-msgid "IPv6 not available on this system"
+msgid "IPv6 is not available on this system"
 msgstr "IPv6 er ikke til rådighed på dette system"
 
 #, python-format
@@ -7813,8 +8241,8 @@
 msgstr "den rigtige URL er %s\n"
 
 #, python-format
-msgid "Requested URL: '%s'\n"
-msgstr ""
+msgid "requested URL: '%s'\n"
+msgstr "forespurgt URL: '%s'\n"
 
 #, python-format
 msgid "'%s' does not appear to be an hg repository"
@@ -7929,7 +8357,7 @@
 
 #, python-format
 msgid "working directory of %s"
-msgstr "arbejdsbibliotek for %s"
+msgstr "arbejdskatalog for %s"
 
 #, python-format
 msgid " %s: searching for copy revision for %s\n"
@@ -8251,10 +8679,6 @@
 msgstr "henter %s\n"
 
 #, python-format
-msgid "moving %s to %s\n"
-msgstr ""
-
-#, python-format
 msgid "getting %s to %s\n"
 msgstr ""
 
@@ -8363,6 +8787,21 @@
 msgstr ""
 
 #, python-format
+msgid "exited with status %d"
+msgstr "afsluttede med status %d"
+
+#, python-format
+msgid "killed by signal %d"
+msgstr "dræbt af signal %d"
+
+#, python-format
+msgid "stopped by signal %d"
+msgstr "stoppet af signal %d"
+
+msgid "invalid exit code"
+msgstr "ugyldig returkode"
+
+#, python-format
 msgid "saving bundle to %s\n"
 msgstr ""
 
@@ -8389,6 +8828,10 @@
 msgid "index %s unknown format %d"
 msgstr ""
 
+#, python-format
+msgid "index %s is corrupted"
+msgstr "indeks %s er ødelagt"
+
 msgid "no node"
 msgstr ""
 
@@ -8533,7 +8976,7 @@
 msgstr ""
 
 msgid "enter a commit username:"
-msgstr "angiv et commit brugernavn:"
+msgstr "angiv et arkiveringsbrugernavn:"
 
 #, python-format
 msgid "No username found, using '%s' instead\n"
@@ -8584,10 +9027,6 @@
 msgstr "http godkendelse: bruger %s, kodeord %s\n"
 
 #, python-format
-msgid "%s, please check your locale settings"
-msgstr "%s, tjek venligst dine sprogindstillinger"
-
-#, python-format
 msgid "command '%s' failed: %s"
 msgstr "kommandoen '%s' fejlede: %s"
 
@@ -8606,24 +9045,6 @@
 msgid "Hardlinks not supported"
 msgstr "Hardlinks er ikke supporteret"
 
-msgid "user name not available - set USERNAME environment variable"
-msgstr "der er ikke noget brugernavn - sæt USERNAME miljøvariabel"
-
-#, python-format
-msgid "exited with status %d"
-msgstr "afsluttede med status %d"
-
-#, python-format
-msgid "killed by signal %d"
-msgstr "dræbt af signal %d"
-
-#, python-format
-msgid "stopped by signal %d"
-msgstr "stoppet af signal %d"
-
-msgid "invalid exit code"
-msgstr "ugyldig returkode"
-
 #, python-format
 msgid "could not symlink to %r: %s"
 msgstr "kunne ikke lave et symbolsk link til %r: %s"
@@ -8711,7 +9132,11 @@
 msgstr "advarsel: '%s' bruger revlog format 0"
 
 #, 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
@@ -8775,6 +9200,10 @@
 msgid "cannot decode filename '%s'"
 msgstr "kan ikke dekode filnavn '%s'"
 
+#, python-format
+msgid "broken revlog! (%s)"
+msgstr ""
+
 msgid "missing revlog!"
 msgstr "manglende revlog!"
 
@@ -8825,3 +9254,6 @@
 #, python-format
 msgid "(first damaged changeset appears to be %d)\n"
 msgstr "(første beskadigede ændring er tilsyneladende %d)\n"
+
+msgid "user name not available - set USERNAME environment variable"
+msgstr "der er ikke noget brugernavn - sæt USERNAME miljøvariabel"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/i18n/de.po	Sun Apr 26 11:49:17 2009 +0200
@@ -0,0 +1,10121 @@
+# German translations for Mercurial
+# Deutsche Übersetzungen für Mercurial
+# Copyright (C) 2009 Matt Mackall and others
+#
+# Übersetzungen
+# =============
+# branch	Zweig/Verzweigung
+# bundle	Bündel
+# change	Änderung
+# changeset	Änderungssatz
+# check out	auschecken
+# commit	Version
+# commit (v)	übertragen
+# deprecated	veraltet
+# hook		Aktion
+# merge		zusammenführen
+# notation	Schreibweise
+# repository	Projektarchiv
+#
+# Die Koordination der Übersetzung erfolgt auf http://bitbucket.org/tobidope/mercurial-german-translation
+msgid ""
+msgstr ""
+"Project-Id-Version: Mercurial\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-04-10 10:49+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"
+"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 " (Standard: %s)"
+
+msgid "OPTIONS"
+msgstr "OPTIONEN"
+
+msgid "COMMANDS"
+msgstr "BEFEHLE"
+
+msgid "    options:\n"
+msgstr "    Optionen:\n"
+
+#, python-format
+msgid ""
+"    aliases: %s\n"
+"\n"
+msgstr ""
+"    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"
+
+#, python-format
+msgid "acl: %s enabled, %d entries for user %s\n"
+msgstr "acl: %s aktiviert, %d Einträge für Nutzer %s\n"
+
+#, python-format
+msgid "config error - hook type \"%s\" cannot stop incoming changesets"
+msgstr ""
+"Konfigurationsfehler - Aktionstyp \"%s\" kann hereinkommende Änderungssätze\n"
+"nicht stoppen"
+
+#, python-format
+msgid "acl: changes have source \"%s\" - skipping\n"
+msgstr "acl: Änderungen haben die Quelle \"%s\" - überspringe\n"
+
+#, python-format
+msgid "acl: user %s denied on %s\n"
+msgstr "acl: Benutzer %s nicht berechtigt für %s\n"
+
+#, python-format
+msgid "acl: access denied for changeset %s"
+msgstr "acl: Zugriff verweigert auf die Version %s"
+
+#, python-format
+msgid "acl: user %s not allowed on %s\n"
+msgstr "acl: Benutzer %s hat keinen Zugriff auf %s\n"
+
+#, python-format
+msgid "acl: allowing changeset %s\n"
+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"
+"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"
+"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 ""
+
+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 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 ""
+"Mercurial Lesezeichen\n"
+"\n"
+"    Lesezeichen sind Zeiger auf bestimmte Versionen, die mitwandern,\n"
+"    wenn eine neuen Version erzeugt wird. Lesezeichen sind nur lokal.\n"
+"    Sie können umbenannt, kopiert und gelöscht werden. Es ist möglich\n"
+"    Lesezeichen bei 'hg merge' und 'hg update' zu nutzen, um auf das\n"
+"    angegebene Lesezeichen zu aktualisieren.\n"
+"\n"
+"    Du kannst 'hg bookmark NAME' aufrufen, um ein Lesezeichen mit dem\n"
+"    angegeben Namen auf der aktuellen Spitze (tip) zu setzen. Bei Angabe "
+"einer\n"
+"    Revision mit -r REV (REV kann ein vorhandenes Lesezeichen sein) wird "
+"das\n"
+"    Lesezeichen auf dieser Revision gesetzt.\n"
+"    "
+
+msgid "a bookmark of this name does not exist"
+msgstr "Es existiert kein Lesezeichen mit diesem Namen"
+
+msgid "a bookmark of the same name already exists"
+msgstr "Ein Lesezeichen mit diesem Namen existiert bereits"
+
+msgid "new bookmark name required"
+msgstr "Ein neuer Name für das Lesezeichen muss übergeben werden"
+
+msgid "bookmark name required"
+msgstr "Ein Name für das Lesezeichen muss übergeben werden"
+
+msgid "bookmark name cannot contain newlines"
+msgstr "Ein Lesezeichenname darf keine Zeilenumbrüche enthalten"
+
+msgid "a bookmark cannot have the name of an existing branch"
+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"
+
+msgid "revision"
+msgstr "Revision"
+
+msgid "delete a given bookmark"
+msgstr "Löscht ein gegebenes Lesezeichen"
+
+msgid "rename a given bookmark"
+msgstr "Benennt ein gegebenes Lesezeichen um"
+
+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 ""
+
+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 ""
+
+#, python-format
+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 ""
+
+#, 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 "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 ""
+
+#, 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 ""
+
+#, 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 ""
+
+#, 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 --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"
+"    argument to --rev if given) is printed.\n"
+"    "
+msgstr ""
+"Zeigt die Kinder der übergebenen Revision oder des Arbeitsverzeichnisses an\n"
+"\n"
+"    Zeigt die Kinder der Revision des Arbeitsverzeichnisses an.\n"
+"    Wenn eine Revision durch --rev angegeben wird, werden die Kinder dieser\n"
+"    Revision angezeigt. Wenn eine Datei als Argument angegeben wird, zeige "
+"die\n"
+"    Revision an, in der die Datei zuletzt geändert wurde (nachfolgend der\n"
+"    Revision des Arbeitsverzeichnisses oder wenn angegeben dem Argument von\n"
+"    --rev).\n"
+"    "
+
+msgid "show children of the specified revision"
+msgstr "Zeigt die Kinder der übergebenen Revision"
+
+msgid "hg children [-r REV] [FILE]"
+msgstr "hg children [-r REV] [DATEI]"
+
+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%%"
+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>"
+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 "Zeigt Revisionen passend zur Datums-Spezifikation"
+
+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 my be overriden 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 "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)"
+
+msgid "don't colorize output"
+msgstr "Keine Färbung der Ausgabe"
+
+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"
+"    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 explicitely 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"
+"    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 reorganisation 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 is a legacy option and may be removed in future.\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\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 overriden with following options. Set them to paths\n"
+"    relative to the source URL, or leave them blank to disable\n"
+"    autodetection.\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 "try to sort changesets by date"
+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 ""
+
+#, 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 "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 "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 "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 ""
+
+#, 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 "Synthetische Revision gefundein in %s: %r\n"
+
+#, 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 "%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 "analysing 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 "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 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 ""
+
+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"
+
+#, 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 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"
+"\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 "Von dieser Revision erzeugte Änderungen"
+
+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"
+msgstr "Hole, aktualisiere und führe zusammen in einem Befehl"
+
+
+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 ""
+"Holt Änderungen aus einem entfernten Projektarchiv, führt neue Änderungen "
+"zusammen  wenn nötig.\n"
+"\n"
+"    Dies selektiert alle Änderungen des Projektarchivs am angegebenen Pfad\n"
+"    oder der URL und fügt sie dem lokalen Projektarchiv hinzu.\n"
+"\n"
+"    Wenn die geholten Änderungen einen neuen Zweigkopf erzeugen, wird "
+"dieser\n"
+"    Kopf automatisch zusammengeführt, und das Resultat der Zusammenführung\n"
+"    wird eine neue Version. Andernfalls wird das Arbeitsverzeichnis mit den\n"
+"    geholten Änderungen aktualisiert.\n"
+"\n"
+"    Sollte eine Zusammenführung ausgelöst werden, gelten die neu geholten\n"
+"    Änderungen als \"führend\"· Der Kopf der neuen Änderungen wird als\n"
+"    erste Vorgängerversion genutzt, die lokalen Änderungen darauffolgend.\n"
+"    Um die Reihenfolge der Zusammenführung zu ändern kann --switch-parent\n"
+"    genutzt werden.\n"
+"\n"
+"    Siehe 'hg help dates' für eine Liste gültiger Datumsformate für -d/--"
+"date.\n"
+"    "
+
+msgid ""
+"working dir not at branch tip (use \"hg update\" to check out branch tip)"
+msgstr ""
+"Arbeitsverzeichnis ist nicht Spitze (tip) des Zweiges (nutze 'hg update' um\n"
+"auf die Zweigspitze zu wechseln)"
+
+msgid "outstanding uncommitted merge"
+msgstr "Ausstehende nicht versionierte Zusammenführung"
+
+msgid "outstanding uncommitted changes"
+msgstr "Ausstehende nicht versionierte Änderungen"
+
+msgid "working directory is missing some files"
+msgstr "Im Arbeitsverzeichnis fehlen Dateien"
+
+msgid ""
+"multiple heads in this branch (use \"hg heads .\" and \"hg merge\" to merge)"
+msgstr ""
+"Mehrere Kopfversionen in diesem Zweig (Nutze \"hg heads .\" und \"hg merge"
+"\"\n"
+"um zusammenzuführen)"
+
+#, python-format
+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"
+
+#, python-format
+msgid ""
+"not merging with %d other new branch heads (use \"hg heads .\" and \"hg merge"
+"\" to merge them)\n"
+msgstr ""
+"Führe %d andere neue Zweigköpfe nicht zusammen (Nutze \"hg heads .\" und "
+"\"hg merge\" um sie zusammenzuführen)\n"
+
+#, python-format
+msgid "updating to %d:%s\n"
+msgstr "Aktualisiere auf %d:%s\n"
+
+#, python-format
+msgid "merging with %d:%s\n"
+msgstr "Führe zusammen mit %d:%s\n"
+
+#, python-format
+msgid "Automated merge with %s"
+msgstr "Automatisierte Zusammenführung mit %s"
+
+#, python-format
+msgid "new changeset %d:%s merges remote changes with local\n"
+msgstr ""
+"Neuer Änderungssatz %d:%s führt entfernte Änderungen mit lokalen zusammen\n"
+
+msgid "a specific revision you would like to pull"
+msgstr "Revision die geholt werden soll"
+
+msgid "edit commit message"
+msgstr "Editiere Versionsmeldung"
+
+msgid "edit commit message (DEPRECATED)"
+msgstr "Editiere Versionsmeldung (VERALTET)"
+
+msgid "switch parents when merging"
+msgstr "Vertauscht Vorgänger bei Zusammenführung"
+
+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 ""
+
+#, 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 "associate a string to a key (username, comment)"
+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 "Nicht versionierte Zusammenführung - bitte gib eine Revision an"
+
+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 "map a manifest into some text"
+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 ""
+
+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 ""
+
+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 ""
+
+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"
+
+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 ""
+
+msgid "limit number of changes displayed"
+msgstr "Begrenzt die Anzahl der angezeigten Änderungen"
+
+msgid "show patch"
+msgstr "Patch anzeigen"
+
+msgid "show the specified revision or range"
+msgstr "Zeigt die angegebene Revision oder Revisionsfolge"
+
+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 ""
+
+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 ""
+
+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 "(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 "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 ""
+
+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 "%s processing %d deferred events as %d\n"
+msgstr ""
+
+#, python-format
+msgid "could not start server: %s"
+msgstr ""
+
+#, python-format
+msgid "received query from incompatible client version %d\n"
+msgstr ""
+
+#, python-format
+msgid "answering query for %r\n"
+msgstr ""
+
+msgid "finished setup\n"
+msgstr ""
+
+msgid "polling: no timeout\n"
+msgstr ""
+
+#, python-format
+msgid "polling: %sms timeout\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 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 ""
+
+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 ""
+
+msgid "[keyword] patterns cannot match"
+msgstr ""
+
+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 and their\n"
+"    expansion.\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 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 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 ""
+
+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 ""
+
+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 ""
+
+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 ""
+"Apply patchfile  to the working directory.\n"
+"        patchfile: file name of patch"
+msgstr ""
+
+msgid "patch failed, unable to continue (try -v)\n"
+msgstr ""
+
+#, python-format
+msgid "applying %s\n"
+msgstr "Wende %s an\n"
+
+#, 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 ""
+
+msgid ""
+"options:\n"
+"           msg: a string or a no-argument function returning a string\n"
+"        "
+msgstr ""
+
+#, python-format
+msgid "patch \"%s\" already exists"
+msgstr ""
+
+#, python-format
+msgid "error unlinking %s\n"
+msgstr ""
+
+msgid "returns (index, rev, patch)"
+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 tip)\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 ""
+
+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 ""
+
+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"
+"    --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"
+"    deprecated.\n"
+"\n"
+"    With --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 --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"
+"    overwritten.\n"
+"\n"
+"    An existing changeset may be placed under mq control with --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"
+"    format. See the diffs help topic for information on why this is\n"
+"    important for preserving rename/copy information and permission\n"
+"    changes.\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."
+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 "Klone Patch-Archiv\n"
+
+msgid "stripping applied patches from destination repository\n"
+msgstr ""
+
+msgid "updating destination repository\n"
+msgstr "Aktualisiere Zielarchiv\n"
+
+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 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"
+"    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 --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"
+"    "
+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 --force is applied, all local changes in patched files will\n"
+"    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 --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\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 "Nutzt das 'Pull'-Protokoll um Metadaten zu kopieren"
+
+msgid "do not update the new working directories"
+msgstr ""
+
+msgid "use uncompressed transfer (fast over LAN)"
+msgstr "Nutzt unkomprimierte Übertragung (schnell im LAN)"
+
+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 "patch file name"
+msgstr ""
+
+msgid "overwrite existing files"
+msgstr ""
+
+msgid "place existing revisions under mq control"
+msgstr ""
+
+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 "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 ""
+
+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 ""
+
+#, 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 ""
+
+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 ""
+
+#, 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 remainder of 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 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"
+"\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 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,\n"
+"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 compatable 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 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"
+"    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 "Return the revisions present locally but not in dest"
+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 "file name of the bundle attachment"
+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 ""
+
+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 managment\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 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 "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 ""
+
+# 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"
+
+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 or aborted with --abort.\n"
+"    "
+msgstr ""
+"Verschiebt Versionen (und ihre Nachfolger) auf einen abweichenden Zweig\n"
+"\n"
+"    Rebase nutzt wiederholtes Zusammenführen um Versionen von einem Teil "
+"der\n"
+"    Versionshistorie auf einen anderen zu pfropfen. Dies ist nützlich, um\n"
+"    lokale Änderungen abhängig von einem Hauptentwicklunszweig zu\n"
+"    linearisieren.\n"
+"\n"
+"    Sollte ein Rebase unterbrochen werden, um manuell eine Zusammenführung\n"
+"    auszuführen, kann er mit --continue wieder aufgenommen oder mit --abort\n"
+"    abgebrochen werden.\n"
+"    "
+
+msgid "cannot use both abort and continue"
+msgstr "abort und continue können nicht gleichzeitig genutzt werden"
+
+msgid "cannot use collapse with continue or abort"
+msgstr "collapse kann nicht mit continue oder abort genutzt werden"
+
+msgid "abort and continue do not allow specifying revisions"
+msgstr "abort und continue erlauben die Angabe einer Revision nicht"
+
+msgid "cannot specify both a revision and a base"
+msgstr "Es können nicht revision und base gleichzeitig angegeben werden"
+
+msgid "nothing to rebase\n"
+msgstr "Kein Rebase nötig\n"
+
+msgid "cannot use both keepbranches and extrafn"
+msgstr "keepbranches und extrafn können nicht gleichzeitig genutzt werden"
+
+msgid "rebase merging completed\n"
+msgstr "Zusammenführungen des Rebase abgeschlossen\n"
+
+msgid "warning: new changesets detected on source branch, not stripping\n"
+msgstr "Warnung: Neue Änderungssätze auf Quellzweig gefunden, lösche nicht\n"
+
+msgid "rebase completed\n"
+msgstr "Rebase abgeschlossen\n"
+
+#, python-format
+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"
+
+#, python-format
+msgid " future parents are %d and %d\n"
+msgstr " die zukünftigen Vorgänger sind %d und %d\n"
+
+#, python-format
+msgid " update to %d:%s\n"
+msgstr " aktualisiert auf %d:%s\n"
+
+msgid " already in target\n"
+msgstr " bereits auf Ziel\n"
+
+#, python-format
+msgid " merge against %d:%s\n"
+msgstr " Zusammenführung zwischen %d:%s\n"
+
+msgid "fix unresolved conflicts with hg resolve then run hg rebase --continue"
+msgstr ""
+"Behebe ungelöste Konflikte mit hg resolve, dann führe hg rebase --continue "
+"aus"
+
+msgid "resuming interrupted rebase\n"
+msgstr "Nehme unterbrochenen Rebase wieder auf\n"
+
+#, python-format
+msgid "no changes, revision %d skipped\n"
+msgstr "keine Änderungen, Revision %d übersprungen\n"
+
+#, python-format
+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"
+
+#, python-format
+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"
+
+msgid "cannot rebase an ancestor"
+msgstr "Kann Rebase nicht auf einem Vorläufer ausführen"
+
+msgid "cannot rebase a descendant"
+msgstr "Kann Rebase nicht auf einem Nachfolger ausführen"
+
+msgid "already working on current\n"
+msgstr "Arbeite bereits auf der aktuellen Version\n"
+
+msgid "already working on the current branch\n"
+msgstr "Arbeite bereits auf dem aktuellen Zweig\n"
+
+#, python-format
+msgid "rebase onto %d starting from %d\n"
+msgstr "Rebase auf %d beginnend bei %d\n"
+
+msgid "unable to collapse, there is more than one external parent"
+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"
+
+msgid "rebase from a given revision"
+msgstr "Rebase ab einer angegebenen Revision"
+
+msgid "rebase from the base of a given revision"
+msgstr "Rebase ab der Basis einer angegebenen Revision"
+
+msgid "rebase onto a given revision"
+msgstr "Rebase der angegebene Revision"
+
+msgid "collapse the rebased revisions"
+msgstr "Faltet die erzeugten Revisionen nach dem Rebase zusammen"
+
+msgid "keep original revisions"
+msgstr "Behält die ursprünglichen Revisionen"
+
+msgid "keep original branches"
+msgstr "Behält die ursprünglichen Zweige"
+
+msgid "continue an interrupted rebase"
+msgstr "Führt einen unterbrochenen Rebase fort"
+
+msgid "abort an interrupted rebase"
+msgstr "Bricht einen unterbrochenen Rebase ab"
+
+msgid ""
+"hg rebase [-s REV | -b REV] [-d REV] [--collapse] [--keep] [--keepbranches] "
+"| [-c] | [-a]"
+msgstr ""
+
+# Nicht übersetzen
+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"
+
+msgid "this is a binary file\n"
+msgstr "Dies ist eine Binärdatei\n"
+
+#, python-format
+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 "y"
+msgstr ""
+
+msgid "?"
+msgstr ""
+
+msgid "y - record this change"
+msgstr "y - übernimmt diese Änderung"
+
+msgid "s"
+msgstr ""
+
+msgid "f"
+msgstr ""
+
+msgid "d"
+msgstr ""
+
+msgid "a"
+msgstr ""
+
+msgid "q"
+msgstr ""
+
+msgid "user quit"
+msgstr "Abbruch durch Benutzer"
+
+#, python-format
+msgid "examine changes to %s?"
+msgstr "Überprüfe Änderungen an %s?"
+
+msgid " and "
+msgstr " und "
+
+#, python-format
+msgid "record this change to %r?"
+msgstr "Übernehme die Änderung an %r?"
+
+#, python-format
+msgid "record change %d/%d to %r?"
+msgstr "Übernehme die Änderung %d/%d an %r?"
+
+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 ""
+"Interaktive Auswahl von Änderungen zur Übernahme ins Archiv\n"
+"\n"
+"    Falls keine Liste von Dateien übergeben wird, gelten alle von\n"
+"    \"hg status\" gemeldeten Änderungen als Kandidaten für 'record'.\n"
+"\n"
+"    Siehe 'hg help dates' für eine Liste aller gültigen Formate für -d/--\n"
+"\n"
+"    Es erfolgt eine Abfrage für jede Datei, ob Änderungen übernommen\n"
+"    werden sollen, bei Dateien mit mehreren Änderungen für jede einzelne\n"
+"    Änderung. Folgenden Antworten sind bei jeder Anfrage möglich:\n"
+"\n"
+"    y - übernimmt diese Änderung\n"
+"    n - überspringt diese Änderung\n"
+"\n"
+"    s - überspringt verbleibende Änderungen dieser Datei\n"
+"    f - übernimmt verbleibende Änderungen dieser Datei\n"
+"\n"
+"    d - fertig, überspringt verbleibende Änderungen und Dateien\n"
+"    a - übernimmt alle Änderungen aller verbleibenden Dateien\n"
+"    q - beendet ohne Änderungen zu übernehmen\n"
+"\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"
+
+#, python-format
+msgid "backup %r as %r\n"
+msgstr "Sichere %r unter %r\n"
+
+msgid "applying patch\n"
+msgstr "Wende Patch an\n"
+
+msgid "patch failed to apply"
+msgstr "Patch schlug fehl"
+
+#, python-format
+msgid "restoring %r to %r\n"
+msgstr "Wiederherstellung: %r nach %r\n"
+
+msgid "hg record [OPTION]... [FILE]..."
+msgstr "hg record [OPTION]... [DATEI]..."
+
+msgid "hg qrecord [OPTION]... PATCH [FILE]..."
+msgstr "hg qrecord [OPTION]... PATCH [DATEI]..."
+
+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 ""
+
+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 ""
+
+#, 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 ""
+
+msgid "arbitrarily rewrite changeset before applying it"
+msgstr ""
+
+#, python-format
+msgid "filtering %s\n"
+msgstr ""
+
+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 ""
+
+#, python-format
+msgid "%s: empty changeset"
+msgstr ""
+
+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 ""
+
+#, python-format
+msgid "working dir not at transplant parent %s"
+msgstr ""
+
+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 ""
+
+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 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\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.\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 usefull 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 "Präfix des Archivs enthält nicht zulässige Komponenten"
+
+msgid "cannot give prefix when archiving to files"
+msgstr "Bei Archivierung in Dateien kann kein Präfix angegeben werden"
+
+#, python-format
+msgid "unknown archive type '%s'"
+msgstr "Unbekannter Archivtyp '%s'"
+
+msgid "invalid changegroup"
+msgstr ""
+
+msgid "unknown parent"
+msgstr "Unbekannte Vorgängerversion"
+
+#, python-format
+msgid "integrity check failed on %s:%d"
+msgstr "Integritätsprüfung fehlgeschlagen bei %s:%d"
+
+#, python-format
+msgid "%s: not a Mercurial bundle file"
+msgstr "%s: keine Mercurial Bündeldatei"
+
+#, python-format
+msgid "%s: unknown bundle version"
+msgstr "%s: unbekannte Bündelversion"
+
+#, python-format
+msgid "%s: unknown bundle compression type"
+msgstr "%s: unbekannte Kompressionsmethode des Bündels"
+
+msgid "cannot create new bundle repository"
+msgstr "Neues Bündelarchiv kann nicht erzeugt werden"
+
+#, python-format
+msgid "premature EOF reading chunk (got %d bytes, expected %d)"
+msgstr "vorzeitiges Dateiende beim Lesen (%d Byte erhalten, %d erwartet)"
+
+#, python-format
+msgid "username %s contains a newline"
+msgstr "Benutzername %s enthält einen Zeilenumbruch"
+
+msgid "options --message and --logfile are mutually exclusive"
+msgstr "Optionen --message und --logfile schließen sich gegenseitig aus"
+
+#, python-format
+msgid "can't read commit message '%s': %s"
+msgstr "Kann Versionsmeldung '%s' nicht lesen: %s"
+
+msgid "limit must be a positive integer"
+msgstr "Log-Grenzwert `limit` muss eine positive Ganzzahl sein"
+
+msgid "limit must be positive"
+msgstr "Log-Grenzwert `limit` muss positiv sein"
+
+msgid "too many revisions specified"
+msgstr "Zu viele Revisionen angegeben"
+
+#, python-format
+msgid "invalid format spec '%%%s' in output file name"
+msgstr "Ungültiges Format '%%%s' für den Namen der Ausgabedatei"
+
+#, python-format
+msgid "adding %s\n"
+msgstr "Füge %s hinzu\n"
+
+#, python-format
+msgid "removing %s\n"
+msgstr "Entferne %s\n"
+
+#, python-format
+msgid "recording removal of %s as rename to %s (%d%% similar)\n"
+msgstr ""
+"Interpretiere die Entfernung von %s als Umbenennung in %s (%d%% ähnlich)\n"
+
+#, python-format
+msgid "%s: not copying - file is not managed\n"
+msgstr "%s kann nicht kopiert werden - steht nicht unter Versionskontrolle\n"
+
+#, python-format
+msgid "%s: not copying - file has been marked for remove\n"
+msgstr "%s: wird nicht kopiert - ist bereits als zu entfernen markiert\n"
+
+#, python-format
+msgid "%s: not overwriting - %s collides with %s\n"
+msgstr "%s: kann nicht kopiert werden - %s wird von %s blockiert\n"
+
+#, python-format
+msgid "%s: not overwriting - file exists\n"
+msgstr "%s: kann nicht kopiert werden - Datei existiert bereits\n"
+
+#, python-format
+msgid "%s: deleted in working copy\n"
+msgstr "%s: kann nicht kopiert werden - Arbeitskopie ist gelöscht\n"
+
+#, python-format
+msgid "%s: cannot copy - %s\n"
+msgstr "%s: kann nicht kopiert werden - %s\n"
+
+#, python-format
+msgid "moving %s to %s\n"
+msgstr "Verschiebe %s nach %s\n"
+
+#, python-format
+msgid "copying %s to %s\n"
+msgstr "Kopiere %s nach %s\n"
+
+#, python-format
+msgid "%s has not been committed yet, so no copy data will be stored for %s.\n"
+msgstr ""
+"%s ist nicht im Archiv, daher gilt %s als neu hinzugefügt (nicht als "
+"kopiert).\n"
+
+msgid "no source or destination specified"
+msgstr "Weder Quelle noch Ziel angegeben"
+
+msgid "no destination specified"
+msgstr "Kein Ziel angegeben"
+
+msgid "with multiple sources, destination must be an existing directory"
+msgstr "Bei mehreren Quelldateien muss das Ziel ein Verzeichnis sein"
+
+#, python-format
+msgid "destination %s is not a directory"
+msgstr "Ziel %s ist kein Verzeichnis"
+
+msgid "no files to copy"
+msgstr "Keine Dateien zu kopieren"
+
+msgid "(consider using --after)\n"
+msgstr "(erwäge die Option --after)\n"
+
+#, python-format
+msgid "changeset:   %d:%s\n"
+msgstr "Änderung:        %d:%s\n"
+
+#, python-format
+msgid "branch:      %s\n"
+msgstr "Zweig    :       %s\n"
+
+#, python-format
+msgid "tag:         %s\n"
+msgstr "Marke:           %s\n"
+
+#, python-format
+msgid "parent:      %d:%s\n"
+msgstr "Vorgänger:       %d:%s\n"
+
+#, python-format
+msgid "manifest:    %d:%s\n"
+msgstr "Manifest:        %d:%s\n"
+
+#, python-format
+msgid "user:        %s\n"
+msgstr "Nutzer:          %s\n"
+
+#, python-format
+msgid "date:        %s\n"
+msgstr "Datum:           %s\n"
+
+msgid "files+:"
+msgstr "Dateien+:"
+
+msgid "files-:"
+msgstr "Dateien-:"
+
+msgid "files:"
+msgstr "Dateien:"
+
+#, python-format
+msgid "files:       %s\n"
+msgstr "Dateien:         %s\n"
+
+#, python-format
+msgid "copies:      %s\n"
+msgstr "Kopien:          %s\n"
+
+#, python-format
+msgid "extra:       %s=%s\n"
+msgstr "Extra:           %s=%s\n"
+
+msgid "description:\n"
+msgstr "Beschreibung:\n"
+
+#, python-format
+msgid "summary:     %s\n"
+msgstr "Zusammenfassung: %s\n"
+
+#, python-format
+msgid "%s: no key named '%s'"
+msgstr "%s: kein Schlüsselwort '%s'"
+
+#, python-format
+msgid "%s: %s"
+msgstr ""
+
+#, python-format
+msgid "Found revision %s from %s\n"
+msgstr "Gefundene Revision %s vom %s\n"
+
+msgid "revision matching date not found"
+msgstr "Keine zum Datum passende Revision gefunden"
+
+#, python-format
+msgid "cannot follow nonexistent file: \"%s\""
+msgstr "Kann fehlender Datei nicht folgen: \"%s\""
+
+#, python-format
+msgid "%s:%s copy source revision cannot be found!\n"
+msgstr "%s:%s Revision des Originals nicht gefunden!\n"
+
+msgid "can only follow copies/renames for explicit file names"
+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 ""
+"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 ""
+"Fügt die angegebenen Dateien der nächsten Version hinzu\n"
+"\n"
+"    Merkt Dateien zur Versionskontrolle im Projektarchiv vor.\n"
+"\n"
+"    Die Dateien werden dem Projektarchiv beim nächsten Übernehmen (commit)\n"
+"    hinzugefügt. Um diese Aktion vorher rückgängig zu machen, siehe hg "
+"revert.\n"
+"\n"
+"    Wenn keine Namen angegeben sind, füge alle Dateien dem Projektarchiv\n"
+"    hinzu.\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 ""
+"Fügt alle neuen Dateien hinzu, löscht alle fehlenden Dateien\n"
+"\n"
+"    Füge alle neuen Dateien hinzu und lösche alle fehlenden Dateien aus\n"
+"    dem Projektarchiv.\n"
+"\n"
+"    Neue Dateien werden ignoriert, wenn sie einem der Muster aus .hgignore\n"
+"    entsprechen. Genau wie add, wirken diese Änderungen erst beim nächsten\n"
+"    Übernehmen (commit).\n"
+"\n"
+"    Nutze die Option -s um umbenannte Dateien zu entdecken. Mit einem\n"
+"    Parameter > 0 wird jede entfernte Datei mit jeder hinzugefügten "
+"verglichen\n"
+"    und bei genügender Ähnlichkeit als Umbenennung markiert. Diese Option\n"
+"    erwartet eine Prozentangabe zwischen 0 (deaktiviert) und 100 (Dateien\n"
+"    müssen identisch sein) als Parameter. Umbenennungen auf diese Weise zu\n"
+"    erkennen, kann aufwändig sein.\n"
+"    "
+
+msgid "similarity must be a number"
+msgstr "similarity muss eine Zahl sein"
+
+msgid "similarity must be between 0 and 100"
+msgstr "similarity muss zwischen 0 und 100 liegen"
+
+msgid ""
+"show changeset information per file line\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"
+"\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 ""
+"Zeigt Änderungssatz (changeset) Informationen pro Dateizeile an\n"
+"\n"
+"    Listet Änderungen in Dateien mit der zugehörigen Revisions-Id für jede\n"
+"    Zeile auf\n"
+"\n"
+"    Dieser Befehl ist nützlich, um herauszufinden wer eine Änderung gemacht\n"
+"    hat oder wann eine Änderung stattgefunden hat.\n"
+"\n"
+"    Ohne die Option -a wird die Verarbeitung von Binärdateien vermieden.\n"
+"    Mit -a werden auch solche Dateien verarbeitet, wahrscheinlich mit "
+"unerwünschtem\n"
+"    Ergebnis.\n"
+"    "
+
+msgid "at least one file name or pattern required"
+msgstr "Zumindest ein Dateiname oder Muster benötigt"
+
+msgid "at least one of -n/-c is required for -l"
+msgstr "Zumindest -n oder -c werden für -l benötigt"
+
+#, python-format
+msgid "%s: binary file\n"
+msgstr "%s: Binärdatei\n"
+
+msgid ""
+"create 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 ""
+"Erzeugt ein unversioniertes Archiv einer Projektarchiv-Revision\n"
+"\n"
+"    Standardmäßig wird die Vorgängerversion der im Arbeitsverzeichnis "
+"gefundenen\n"
+"    verwendet. Eine andere Reversion kann mit \"-r\" angegeben werden.\n"
+"\n"
+"    Um den Typ des Archivs anzugeben, nutze \"-t\". Gültige\n"
+"    Typen sind:\n"
+"\n"
+"    \"files\" (Standard): ein Verzeichnis voller Dateien\n"
+"    \"tar\": tar Archiv, unkomprimiert\n"
+"    \"tbz2\": tar Archiv, komprimiert mit bzip2\n"
+"    \"tgz\": tar Archiv, komprimiert mit gzip\n"
+"    \"uzip\": zip Archiv, unkomprimiert\n"
+"    \"zip\": zip Archiv, komprimiert mit deflate\n"
+"\n"
+"    Der exakte Name des Zielarchivs oder -verzeichnises wird mit\n"
+"    einem Format-String angegeben; siehe 'hg help export' für Details.\n"
+"\n"
+"    Jedem Element des Archivs wird ein Verzeichnis-Präfix vorangestellt.\n"
+"    Nutze -p/--prefix um eine Format-String für das Präfix anzugeben.\n"
+"    Als Standard wird der Dateiname des Archive ohne Dateiendung genutzt.\n"
+"    "
+
+msgid "no working directory: please specify a revision"
+msgstr "Kein Arbeitsverzeichnis: Bitte gib eine Revision an"
+
+msgid "repository root cannot be destination"
+msgstr "Projektarchiv-Wurzel kann nicht als Ziel angegeben werden"
+
+msgid "cannot archive plain files to stdout"
+msgstr ""
+"Ungepacktes Archiv kann nicht auf der Standardausgabe ausgegeben werden"
+
+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 back out 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"
+"\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 ""
+"Macht einen vorangegangen Änderungssatzes rückgängig\n"
+"\n"
+"    Bereits vollzogene Änderungen werden noch einmal rückwärts angewendet\n"
+"    und als neuer Änderungssatz (als Kind des rückgängig gemachten) "
+"übernommen.\n"
+"\n"
+"    Soll ein anderer Änderungssatz als die Spitze (tip) zurückgezogen "
+"werden,\n"
+"    so wird ein neuer Kopf erzeugt und dieser ist die neue Spitze.\n"
+"\n"
+"    Die dadurch notwendige Zusammenführung kann durch die Option --merge\n"
+"    automatisch mit der Vorgängerversion des Arbeitsverzeichnisses "
+"durchgeführt\n"
+"    werden. Das Resultat dieser Zusammenführung wird wie üblich nicht "
+"sofort\n"
+"    übernommen, sondern existiert als lokale Änderung.\n"
+"\n"
+"    Siehe 'hg help dates' für eine Liste gültiger Formate für -d/--date.\n"
+"    "
+
+msgid "please specify just one revision"
+msgstr "Bitte nur eine Revision angeben"
+
+msgid "please specify a revision to backout"
+msgstr "Bitte eine Revision, die zurückgezogen werden soll, angeben"
+
+msgid "cannot back out change on a different branch"
+msgstr "Kann die Änderung auf einem abweichenden Zweig nicht rückgängig machen"
+
+msgid "cannot back out a change with no parents"
+msgstr "Kann eine Änderung ohne Vorgängerversion nicht rückgängig machen"
+
+msgid "cannot back out a merge changeset without --parent"
+msgstr "Kann eine Zusammenführung nicht ohne --parent rückgängig machen"
+
+#, python-format
+msgid "%s is not a parent of %s"
+msgstr "%s ist kein Vorgänger von %s"
+
+msgid "cannot use --parent on non-merge changeset"
+msgstr "Kann mit --parent nur Zusammenführung rückgängig machen"
+
+#, python-format
+msgid "Backed out changeset %s"
+msgstr "Änderungssatz %s wurde rückgängig gemacht"
+
+#, python-format
+msgid "changeset %s backs out changeset %s\n"
+msgstr "Änderungssatz %s macht Änderungssatz %s rückgängig\n"
+
+#, python-format
+msgid "merging with changeset %s\n"
+msgstr "Führe mit Änderungssatz %s zusammen\n"
+
+msgid "the backout changeset is a new head - do not forget to merge\n"
+msgstr "Neuen Kopf erstellt - Zusammenführung nicht vergessen\n"
+
+msgid "(use \"backout --merge\" if you want to auto-merge)\n"
+msgstr "(nutze \"backout --merge\" für eine automatische Zusammenführung)\n"
+
+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 bad or\n"
+"    good 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"
+"    "
+msgstr ""
+"Binäre Suche von Änderungssätzen\n"
+"\n"
+"    Dieser Befehl hilft Änderungssätze zu finden, die Probleme eingeführt "
+"haben.\n"
+"    Dies geschieht, indem eine Revision nach der anderen geladen und "
+"getestet\n"
+"    wird, bis zwei aufeinanderfolgende Revisionen ohne und mit Fehler\n"
+"    gefunden wurden. Das Laden geschieht wie bei einer binären Suche, indem\n"
+"    das Intervall der in Frage kommenden Revisionen immer halbiert wird.\n"
+"\n"
+"    Als Startintervall muss zunächst die letzte als 'gut' bekannte und die\n"
+"    erste 'schlechte' Revision markiert werden. Das Arbeitsverzeichnis wird\n"
+"    dadurch auf eine Revision zum Testen gebracht (es sei denn, die Option\n"
+"    --noupdate ist angegeben). Mit -g (Test erfolgreich = gute Revision) "
+"und\n"
+"    -b (Fehler gefunden = schlechte Revision) wird diese dann markiert und "
+"die\n"
+"    nächste geladen, bzw. das Ziel (die Problemrevision) gemeldet.\n"
+"\n"
+"    Die Markierung kann automatisch durch einem Testprogramm (Option -c) "
+"statt-\n"
+"    finden. Ein Rückgabewert von 0 bedeutet dabei Erfolg, 125 Überspringen\n"
+"    (wie manuell Option -s), 127 Abbruch und jeder andere positive Wert\n"
+"    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"
+"eine der folgenden sein:\n"
+
+msgid "cannot bisect (no known good revisions)"
+msgstr "Kann Suche nicht starten (keine bekannte gute Revision)"
+
+msgid "cannot bisect (no known bad revisions)"
+msgstr "Kann Suche nicht starten (keine bekannte schlechte Revision)"
+
+msgid "(use of 'hg bisect <cmd>' is deprecated)\n"
+msgstr "(Die Syntax 'hg bisect <cmd>' ist veraltet)\n"
+
+msgid "incompatible arguments"
+msgstr "Inkompatible Argumente"
+
+#, python-format
+msgid "failed to execute %s"
+msgstr "Fehler bei der Ausführung von %s"
+
+#, python-format
+msgid "%s killed"
+msgstr "%s gestorben"
+
+#, python-format
+msgid "Changeset %s: %s\n"
+msgstr "Änderungssatz %s: %s\n"
+
+#, python-format
+msgid "Testing changeset %s:%s (%s changesets remaining, ~%s tests)\n"
+msgstr "Teste Änderungssatz %s:%s (%s Änderungssätze verbleiben, ~%s Tests)\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"
+"\n"
+"    Unless -f/--force is specified, branch will not let you set a\n"
+"    branch name that shadows an existing branch.\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 ""
+"Setzt oder zeigt den Namen des aktuellen Zweigs\n"
+"\n"
+"    Ohne Parameter wird der Name des aktuellen Zweiges angezeigt. Mit einem\n"
+"    Parameter wird der Zweigname des Arbeitsverzeichnisses gesetzt. Der\n"
+"    Zweig existiert nicht im Projektarchiv und muss erst übernommen werden.\n"
+"    Es wird empfohlen den 'default'-Zweig als Hauptentwicklungszweig zu\n"
+"    nutzen.\n"
+"\n"
+"    Außer bei Angabe von --force lässt 'hg branch' nicht zu, einen Namen zu\n"
+"    vergeben, der einen existierenden Zweig überdeckt.\n"
+"\n"
+"    Nutze --clean um den neuen Namen rückgängig zu machen. Die Arbeitskopie\n"
+"    hat dann wieder den selben Namen wie der Vorgänger im Projektarchiv.\n"
+"\n"
+"    Um auf einen anderen (existierenden) Zweig zu wechseln, siehe 'hg "
+"update'.\n"
+"    "
+
+#, python-format
+msgid "reset working directory to branch %s\n"
+msgstr "Setze Arbeitsverzeichnis auf Zweig %s zurück\n"
+
+msgid "a branch of the same name already exists (use --force to override)"
+msgstr "Ein Zweig mit diesem Namen existiert bereits (--force zum Erzwingen)"
+
+#, python-format
+msgid "marked working directory as branch %s\n"
+msgstr "Arbeitsverzeichnis wurde als Zweig %s markiert\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"
+"\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 ""
+"Zeigt alle benannten Zweige des Projektarchiv an\n"
+"\n"
+"    Listet die benannten Zweige des Projektarchiv auf und zeigt an, welche\n"
+"    inaktiv sind. Mit der Option -a werden nur aktive Zweige ausgegeben.\n"
+"\n"
+"    Ein Zweig gilt als aktiv, wenn er Köpfe des Projektarchivs enthält.\n"
+"\n"
+"    Um auf einen anderen (existierenden) Zweig zu wechseln, siehe 'hg "
+"update'.\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 ""
+"Erzeugt eine Datei mit Änderungsgruppen\n"
+"\n"
+"    Erzeuge eine gepackte Datei der Änderungsgruppen, die alle Änderungs-\n"
+"    sätze enthält, die in einem anderen Archiv nicht vorhanden sind.\n"
+"\n"
+"    Falls kein Zielarchiv angegeben ist, wird angenommen, dass das Ziel\n"
+"    alle Knoten enthält, die durch einen oder mehrere --base Parameter\n"
+"    angegeben wurden. Um ein Bündel aller Änderungssätze zu erzeugen, nutze\n"
+"    --all (oder --base null). Die angewendete Kompressionsmethode kann mit\n"
+"    der Option -t gewählt werden (standardmäßig bz2).\n"
+"\n"
+"    Die Bündeldatei kann mit üblichen Mitteln transportiert und auf ein "
+"anderes\n"
+"    Archiv mit dem 'unbundle' oder 'pull'-Befehl angewandt werden.\n"
+"    Dies ist nützlich wenn ein direktes Schieben oder Herunterladen von\n"
+"    Änderungen nicht verfügbar ist oder der Export eines kompletten Archivs\n"
+"    unerwünscht ist.\n"
+"\n"
+"    Die Anwendung von Bündeln bewahrt die Inhalte aller Änderungssätze,\n"
+"    Berechtigungen, Kopier/Umbennungs-Informationen und die "
+"Revisionshistorie.\n"
+"    "
+
+msgid "--base is incompatible with specifiying a destination"
+msgstr "Bei Nutzung von --base kann kein Zielarchiv angegeben werden"
+
+msgid "unknown bundle type specified with --type"
+msgstr "Unbekannter Bündeltyp mit --type angegeben"
+
+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 ""
+"Gibt den Inhalt von Dateien in der aktuellen oder angegebenen Revision aus\n"
+"\n"
+"    Gibt die angegebenen Dateien aus, wie sie zur gegebenen Revision waren.\n"
+"    Wenn keine Revision angegeben wird, wird die Vorgängerversion des\n"
+"    Arbeitsverzeichnisses genutzt. Ansonsten die Spitze, falls keine\n"
+"    Revision geladen ist.\n"
+"\n"
+"    Die Ausgabe kann in eine Datei erfolgen. In diesem Fall wird der Name\n"
+"    der Datei mit einem Formatstring vorgegeben. Die Formatierungsregeln "
+"sind\n"
+"    analog des 'export'-Befehls mit folgenden Ergänzungen:\n"
+"\n"
+"    %s   Dateiname der ausgegebenen Datei\n"
+"    %d   Verzeichnisname der Datei oder '.' in der Wurzel des Archivs\n"
+"    %p   Pfad und Dateiname relativ zur Archiv-Wurzel\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"
+"    Look at the help text for URLs for important details about ssh://\n"
+"    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 ""
+"Erzeugt eine Kopie eines bestehenden Projektarchivs\n"
+"\n"
+"    Kopiert ein bestehendes Projektarchiv in ein neues Verzeichnis.\n"
+"\n"
+"    Wird kein Zielverzeichnis angegeben, wird der Basisname der Quelle "
+"genutzt.\n"
+"\n"
+"    Die Adresse der Quelle wird der .hg/hgrc Datei des neuen Archivs\n"
+"    als Standard für entfernte Aktionen (pull/push) hinzugefügt.\n"
+"\n"
+"    Wenn die -r Option zum klonen bis zu einer bestimmten Revision genutzt\n"
+"    wird, werden keine Folgeversionen (oder Marken) im geklonten Archiv\n"
+"    vorhanden sein. Diese Option impliziert --pull, auch bei lokalen "
+"Archiven.\n"
+"\n"
+"    Standardmäßig wird clone die Kopfversion des 'default'-Zweiges zum\n"
+"    Arbeitsverzeichnis machen. Bei Nutzung der -U Option wird der Klon zwar\n"
+"    das Projektarchiv enthalten (.hg) aber keine Arbeitskopie laden (die\n"
+"   Vorgängerversion der Arbeitskopie ist die 'null'-Revision).\n"
+"\n"
+"    Siehe 'hg help urls' für Details gültiger Quellformate.\n"
+"\n"
+"    Es ist möglich eine ssh:// URL als Ziel anzugeben, aber es werden weder\n"
+"    .hg/hgrc noch Arbeitsverzeichnis auf der entfernten Seite angelegt.\n"
+"    Wichtige Details zu URLs mit ssh:// finden sich unter 'hg help urls'.\n"
+"\n"
+"    Aus Effizienzgründen werden 'hardlinks' für das Klonen genutzt, wann "
+"immer\n"
+"    Quelle und Ziel auf dem selben Dateisystem sind (dies gilt nur für die\n"
+"    Daten des Archivs, nicht für die Arbeitskopie). Einige Dateisyteme wie\n"
+"    etwa AFS, implementieren 'hardlinks' fehlerhaft, erzeugen dabei aber "
+"keine\n"
+"    Fehlermeldung. In diesen Fällen muss die --pull Option genutzt werden,\n"
+"    um das Erzeugen von 'hardlinks' zu vermeiden.\n"
+"\n"
+"    In einigen Fällen können Archiv und Arbeitskopie unter Nutzung\n"
+"    von 'hardlinks' kopiert werden mit\n"
+"\n"
+"      $ cp -al REPO REPOCLONE\n"
+"\n"
+"    Dies ist der schnellste Weg zu klonen, aber nicht immer sicher.\n"
+"    Diese Operation ist nicht atomar (das Archiv darf während der Operation\n"
+"    nicht modifiziert wird) und es muss sichergestellt werden, dass der\n"
+"    genutzte Editor 'hardlinks' auflöst (vim, emacs und die meisten Linux\n"
+"    Kernel Tools tun dies). Außerdem ist dies inkompatibel mit einigen\n"
+"    Erweiterungen, die Metadaten unter dem .hg Verzeichnis ablegen, z.B. "
+"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 means 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\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 ""
+"Übernimmt Änderungen der angegebenen Dateien oder alle ausstehenden "
+"Änderungen ins Archiv\n"
+"\n"
+"    Übernimmt Änderungen der angegebenen Dateien ins Archiv. Anders als\n"
+"    bei zentralen Versionsverwaltungssystem ist dies eine lokale Operation.\n"
+"    Vergleiche hg push für Wege zur aktiven Verteilung der Änderungen.\n"
+"\n"
+"    Sollten keine Dateien übergeben werden, werden alle von 'hg status'\n"
+"    angezeigten Änderungen Bestandteil der neuen Revision.\n"
+"\n"
+"    Wenn das Ergebnis einer Zusammenführung übernommen werden soll, dürfen\n"
+"    keine Dateinamen oder -I/-X Filter angegeben werden.\n"
+"\n"
+"    Wenn keine Versionsmeldung mit der Option -m angegeben wird, wird der\n"
+"    konfigurierte Editor für eine interaktive Eingabe gestartet.\n"
+"\n"
+"    Siehe 'hg help dates' für eine Liste aller gültigen Formate für -d/--"
+"date.\n"
+"    "
+
+msgid "created new head\n"
+msgstr "neuer Kopf erzeugt\n"
+
+#, python-format
+msgid "committed changeset %d:%s\n"
+msgstr "Änderungssatz %d erzeugt:%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"
+"    stand 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 ""
+"Markiert Dateien als Kopien bereits übernommener Dateien\n"
+"\n"
+"    Markiert das Ziel als Kopie der Quelle, so dass es die Versionshistorie "
+"der\n"
+"    Quelle bis zu diesem Zeitpunkt teilt. Wenn mehrere Quellen angegeben "
+"sind,\n"
+"    muss das Ziel ein Verzeichnis sein.\n"
+"\n"
+"    Normalerweise kopiert dieser Befehl auch den Inhalt der Datei(en) wie "
+"sie\n"
+"    im Arbeitsverzeichnis vorliegt. Existiert das Ziel jedoch schon, so "
+"kann\n"
+"    dieses durch Angabe der Option --after/-A als Kopie nachträglich "
+"markiert\n"
+"    werden.\n"
+"\n"
+"    Die neue Datei wird wie üblich nicht sofort übernommen, sondern "
+"existiert\n"
+"    als lokale  Änderung im Arbeitsverzeichnis. Sie kann durch \"hg revert"
+"\"\n"
+"    rückgängig gemacht werden.\n"
+"    "
+
+msgid "find the ancestor revision of two revisions in a given index"
+msgstr "Finde die Vorgängerversion zweier Revisionen im angegebenen Index"
+
+msgid "There is no Mercurial repository here (.hg not found)"
+msgstr "Es gibt hier kein Mercurial-Archiv (.hg nicht vorhanden)"
+
+msgid "either two or three arguments required"
+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"
+
+msgid "rebuild the dirstate as it would look like for the given revision"
+msgstr ""
+"Markiert aktuellen Status als Änderungen seit gegebener Revision\n"
+"\n"
+"    Interpretiert das Arbeitsverzeichnis als lokale Änderung seit der "
+"gegebenen\n"
+"    Revision. Die Vorgängerversion ist die gegebene und die Änderungen "
+"aller\n"
+"    Versionen seit dem (oder bis dahin) sind vorgemerkt und können als neue\n"
+"    Revision (und Kopf) übernommen werden.\n"
+"    "
+
+msgid "validate the correctness of the current dirstate"
+msgstr "Prüft die Richtigkeit der bisher vorgemerkten Änderungen"
+
+#, python-format
+msgid "%s in state %s, but not in manifest1\n"
+msgstr "%s ist in Status %s, aber nicht in Manifest 1\n"
+
+#, python-format
+msgid "%s in state %s, but also in manifest1\n"
+msgstr "%s ist in Status %s, aber auch in Manifest 1\n"
+
+#, python-format
+msgid "%s in state %s, but not in either manifest\n"
+msgstr "%s ist in Status %s, aber in keinem Manifest\n"
+
+#, python-format
+msgid "%s in manifest1, but listed as state %s"
+msgstr "%s im Manifest 1, aber aufgeführt im Status %s"
+
+msgid ".hg/dirstate inconsistent with current parent's manifest"
+msgstr ".hg/dirstate inkonsistent mit dem Manifest des aktuellen Vorgängers"
+
+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."
+msgstr ""
+"Zeigt die kombinierten Konfigurationswerte aller hgrc-Dateien an\n"
+"\n"
+"    Ohne Argumente werden die Namen und Werte aller Konfigurationseinträge\n"
+"    angezeigt.\n"
+"\n"
+"    Mit einem Argument der Form sektion.name wird nur der Wert dieses\n"
+"    Konfigurationseintrages angezeigt.\n"
+"\n"
+"    Mit mehreren Argumenten werden die Namen und Werte aller passenden\n"
+"    Konfigurationseinträge angezeigt."
+
+msgid "only one config item permitted"
+msgstr "Nur ein Konfigurationseintrag ist erlaubt"
+
+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 ""
+"Setzt die Vorgängerversionen des Arbeitsverzeichnisses manuell\n"
+"\n"
+"    Die kann für externe Konversionswerkzeuge nützlich sein, sollte aber "
+"mit\n"
+"    großer Vorsicht angewendet werden.\n"
+"    "
+
+msgid "show the contents of the current dirstate"
+msgstr ""
+"Zeigt die interne Repräsentation der aktuellen Änderungen (dirstate) an"
+
+#, python-format
+msgid "copy: %s -> %s\n"
+msgstr "Kopiere: %s -> %s\n"
+
+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 "Liest ein Datum ein und gibt es wieder aus"
+
+msgid "dump the contents of an index file"
+msgstr ""
+
+msgid "dump an index DAG as a .dot file"
+msgstr ""
+
+msgid "test Mercurial installation"
+msgstr "Tested die Mercurial Installation"
+
+#, python-format
+msgid "Checking encoding (%s)...\n"
+msgstr "Prüfe Kodierung (%s)...\n"
+
+msgid " (check that your locale is properly set)\n"
+msgstr " (Stelle sicher, dass locale richtig gesetzt ist!)\n"
+
+msgid "Checking extensions...\n"
+msgstr "Prüfe Erweiterungen...\n"
+
+msgid " One or more extensions could not be found"
+msgstr " Eine oder mehrere Erweiterungen nicht gefunden"
+
+msgid " (check that you compiled the extensions)\n"
+msgstr " (Stelle sicher, dass die Erweiterungen compiliert wurden!)\n"
+
+msgid "Checking templates...\n"
+msgstr "Prüfe Vorlagen...\n"
+
+msgid " (templates seem to have been installed incorrectly)\n"
+msgstr "(Vorlagen scheinen falsch installiert worden zu sein)\n"
+
+msgid "Checking patch...\n"
+msgstr "Prüfe patch...\n"
+
+msgid " patch call failed:\n"
+msgstr " Aufruf von patch gescheitert:\n"
+
+msgid " unexpected patch output!\n"
+msgstr " Unerwartete Ausgabe von patch\n"
+
+msgid " patch test failed!\n"
+msgstr " patch Test gescheitert\n"
+
+msgid ""
+" (Current patch tool may be incompatible with patch, or misconfigured. "
+"Please check your .hgrc file)\n"
+msgstr ""
+" (Aktuelles patch Werkzeug könnte mit patch inkompatibel or fehlkonfiguriert "
+"sein. Prüfe die .hgrc Datei!)\n"
+
+msgid ""
+" Internal patcher failure, please report this error to http://www.selenic."
+"com/mercurial/bts\n"
+msgstr ""
+"Fehlschlag des internen patch Werkzeugs. Bitte melden Sie diesen Fehler bei "
+"http://www.selenic.com/mercurial/bts\n"
+
+msgid "Checking commit editor...\n"
+msgstr "Prüfe Editor für Versionsmeldungen...\n"
+
+msgid " No commit editor set and can't find vi in PATH\n"
+msgstr " Kein Editor für Versionsmeldungen angegeben und vi nicht im PATH\n"
+
+msgid " (specify a commit editor in your .hgrc file)\n"
+msgstr " (Gib einen Editor in der .hgrc Datei an!)\n"
+
+#, python-format
+msgid " Can't find editor '%s' in PATH\n"
+msgstr " Kann Editor '%s' nicht im PATH finden\n"
+
+msgid "Checking username...\n"
+msgstr "Prüfe Benutzernamen...\n"
+
+msgid " (specify a username in your .hgrc file)\n"
+msgstr " (Gib einen Benutzernamen in der .hgrc Datei an!)\n"
+
+msgid "No problems detected\n"
+msgstr "Keine Probleme gefunden\n"
+
+#, python-format
+msgid "%s problems detected, please check your install!\n"
+msgstr "%s Probleme gefunden. Erwäge die obigen Lösungsvorschläge!\n"
+
+msgid "dump rename information"
+msgstr ""
+
+#, python-format
+msgid "%s renamed from %s:%s\n"
+msgstr "%s umbenannt von %s:%s\n"
+
+#, python-format
+msgid "%s not renamed\n"
+msgstr "%s ist nicht unbenannt\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 ""
+"Zeigt Änderungen des Projektarchiv oder angegebener Dateien an\n"
+"\n"
+"    Zeigt Unterschiede von Dateien zwischen Revisionen im unified-diff-\n"
+"    Format an.\n"
+"\n"
+"    HINWEIS: diff kann bei Zusammenführungen unerwartete Resultate "
+"anzeigen,\n"
+"    da es nur mit einer (der ersten wenn keine Revision angegeben ist)\n"
+"    Vorgängerversion vergleicht.\n"
+"\n"
+"    Bei Angabe zweier Revisionen als Parameter werden Unterschiede\n"
+"    zwischen diesen beiden angezeigt. Wenn nur eine Revision angegeben\n"
+"    wurde, wird diese mit dem Arbeitsverzeichnis verglichen. Sollte keine\n"
+"    Revision angegeben worden sein, wird das Arbeitsverzeichnis mit der\n"
+"    Vorgängerversion verglichen.\n"
+"\n"
+"    Ohne die Option -a vermeidet export den Vergleich von binären Dateien.\n"
+"    Mit -a wird der Vergleich in jedem Fall durchgeführt, wahrscheinlich "
+"mit\n"
+"    unerwünschtem Resultat.\n"
+"\n"
+"    Nutze die Option --git um Vergleiche im git-erweiterten diff-Format zu\n"
+"    erzeugen. Zur weiteren Information ist \"hg help diff\" "
+"aufschlussreich.\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. Read the diffs help topic 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 ""
+"Gibt Kopfzeilen und Änderungsverlauf einer oder mehrerer Versionen aus\n"
+"\n"
+"    Die angezeigten Daten in den Kopfzeilen sind: Autor,\n"
+"    Änderungssatz-Prüfsumme, Vorgängerversion und Versionsmeldung.\n"
+"\n"
+"    HINWEIS: export kann bei Zusammenführungen unerwartete Resultate "
+"anzeigen,\n"
+"    da es nur mit einer (der ersten es sei denn --switch-parent ist "
+"angegeben)\n"
+"    Vorgängerversion vergleicht.\n"
+"\n"
+"    Die Ausgabe kann in eine Datei erfolgen (Option -o). In diesem Fall "
+"wird\n"
+"    der Name für jede ausgegebene Revision anhand einer Formatangabe "
+"erzeugt:\n"
+"\n"
+"    %%   literales \"%\" Zeichen\n"
+"    %H   Prüfsumme des Änderungssatzes (40 Byte hexadezimal)\n"
+"    %N   Anzahl der generierten Patches\n"
+"    %R   Revisionnummer des Änderungssatzes\n"
+"    %b   Basisname des exportierten Archivs\n"
+"    %h   Kurzform der Prüfsumme des Änderungssatzes (12 Byte hexadezimal)\n"
+"    %n   laufende Nummer mit führenden Nullen, beginnend bei 1\n"
+"    %r   Revisionsnummer mit führenden Nullen\n"
+"\n"
+"    Ohne die Option -a vermeidet export den Vergleich von binären Dateien.\n"
+"    Mit -a wird der Vergleich in jedem Fall durchgeführt, wahrscheinlich "
+"mit\n"
+"    unerwünschtem Resultat.\n"
+"\n"
+"    Nutze die Option --git um Vergleiche im git-erweiterten diff-Format zu\n"
+"    erzeugen. Zur weiteren Information ist \"hg help diff\" "
+"aufschlussreich.\n"
+"    "
+
+msgid "export requires at least one changeset"
+msgstr "export benötigt zumindest eine Versionsangabe"
+
+msgid "exporting patches:\n"
+msgstr "Exportiere Patches:\n"
+
+msgid "exporting patch:\n"
+msgstr "Exportiere Patch:\n"
+
+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 ""
+"Sucht ein Muster in angegebenen Dateien und Revisionen\n"
+"\n"
+"    Durchsucht Dateien in der Versionshistorie nach einem gegebenen Muster.\n"
+"\n"
+"    Dieses Kommando unterscheidet sich von Unix grep, da es Reguläre "
+"Ausdrücke\n"
+"    in Python/Perl Format erwartet und ausserdem nur die übernommenen "
+"Revisionen\n"
+"    im Archiv durchsucht, nicht jedoch das Arbeitsverzeichnis.\n"
+"\n"
+"    Standardmäßig gibt grep den Dateinamen und die jüngste Revision einer "
+"Datei\n"
+"    aus, die das Suchmuster enthält. Mit der Option --all werden "
+"stattdessen\n"
+"    alle Revisionen ausgegeben, in der das Muster hinzugefügt (\"+\") oder\n"
+"    entfernt (\"-\") wurde.\n"
+"    "
+
+#, python-format
+msgid "grep: invalid match pattern: %s\n"
+msgstr "grep: Ungültiges Suchmuster: %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 ""
+"Zeigt die Köpfe des Archivs oder von Entwicklungszweigen\n"
+"\n"
+"    Ohne Argumente werden alle Kopfversionen angezeigt\n"
+"\n"
+"    Wenn Zweig- oder Revisionsnamen angegeben werden, werden die Köpfe\n"
+"    dieser Zweige oder der Zweige, mit denen die Revisionen markiert\n"
+"    wurden, angezeigt.\n"
+"\n"
+"    Die \"Köpfe\" eines Archivs sind Änderungssätze, die keine\n"
+"    Folgeversion haben. Hier findet typischerweise die Entwicklung statt\n"
+"    und diese Versionen sind normalerweise Ziel von Aktualisierungen oder\n"
+"    Zusammenführungen.\n"
+"\n"
+"    Köpfe von Zweigen sind Versionen mit einem Zweignamen, die aber\n"
+"    keine Folgeversionen dieses Namens haben. Hier findet typischerweise\n"
+"    die Entwicklung dieses Zweiges statt.\n"
+"    "
+
+#, python-format
+msgid "no changes on branch %s containing %s are reachable from %s\n"
+msgstr ""
+"Keine Änderungen auf dem Zweig %s, die %s enthalten, sind von %s erreichbar\n"
+
+#, python-format
+msgid "no changes on branch %s are reachable from %s\n"
+msgstr "Keine Änderungen auf dem Zweig %s sind von %s erreichbar\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\n"
+"    topic."
+msgstr ""
+"Zeigt die Hilfe für ein gegebenes Thema oder eine Hilfsübersicht\n"
+"\n"
+"    Ohne Parameter wird eine Liste aller Befehle mit Kurzhilfe angezeigt.\n"
+"\n"
+"    Bei Angabe eines Themas, einer Erweiterung oder eines Befehls wird\n"
+"    detaillierte Hilfe zu diesem Thema angezeigt."
+
+msgid "global options:"
+msgstr "Globale Optionen:"
+
+msgid "use \"hg help\" for the full list of commands"
+msgstr "Nutze \"hg help\" für eine Liste aller Befehle"
+
+msgid "use \"hg help\" for the full list of commands or \"hg -v\" for details"
+msgstr ""
+"Nutze \"hg help\" für eine Liste aller Befehle oder \"hg -v\" für Details"
+
+#, python-format
+msgid "use \"hg -v help%s\" to show aliases and global options"
+msgstr "Nutze \"hg -v help%s\" um Aliase und globale Optionen anzuzeigen"
+
+#, python-format
+msgid "use \"hg -v help %s\" to show global options"
+msgstr "Nutze \"hg -v help %s\" um globale Optionen anzuzeigen"
+
+msgid ""
+"list of commands:\n"
+"\n"
+msgstr ""
+"Liste der Befehle:\n"
+"\n"
+
+#, python-format
+msgid ""
+"\n"
+"aliases: %s\n"
+msgstr ""
+"\n"
+"Aliase: %s\n"
+
+msgid "(no help text available)"
+msgstr "(keine Hilfe verfügbar)"
+
+msgid "options:\n"
+msgstr "Optionen:\n"
+
+msgid "no commands defined\n"
+msgstr "keine Befehle definiert\n"
+
+msgid ""
+"\n"
+"enabled extensions:\n"
+"\n"
+msgstr ""
+"\n"
+"Aktive Erweiterungen:\n"
+"\n"
+
+#, python-format
+msgid " %s   %s\n"
+msgstr ""
+
+msgid "no help text available"
+msgstr "keine Hilfe verfügbar"
+
+#, python-format
+msgid "%s extension - %s\n"
+msgstr "%s Erweiterung - %s\n"
+
+msgid "Mercurial Distributed SCM\n"
+msgstr "Mercurial Distributed SCM\n"
+
+msgid ""
+"basic commands:\n"
+"\n"
+msgstr ""
+"Grundlegende Befehle:\n"
+"\n"
+
+msgid ""
+"\n"
+"additional help topics:\n"
+"\n"
+msgstr ""
+"\n"
+"Zusätzliche Hilfethemen:\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"
+"    With a path, do a lookup in another repository.\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 ""
+"Beschreibt die Arbeitskopie oder die angegebene Revision\n"
+"\n"
+"    Ohne Revision wird eine Zusammenfassung des aktuellen Status des\n"
+"    Projektarchivs angezeigt.\n"
+"\n"
+"    Mit einem Pfad wird eine Abfrage auf ein anderes Archiv ausgeführt.\n"
+"\n"
+"    Die Zusammenfassung beschreibt den Zustand des Projektarchivs unter\n"
+"    Nutzung von ein oder zwei Prüfsummenbezeichnern, gefolgt von einem \"+"
+"\"\n"
+"    falls unversionierte Änderungen im Arbeitsverzeichnis vorliegen. Zudem\n"
+"    werden eine Liste von Tags dieser Revision ausgegeben und der Zweigname\n"
+"    falls nicht der 'default'-Zweig vorliegt.\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 (body part must be type text/plain or\n"
+"    text/x-patch to be used). 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 patch name \"-\". See 'hg\n"
+"    help dates' for a list of formats valid for -d/--date.\n"
+"    "
+msgstr ""
+"Importiert eine Liste von Patches\n"
+"\n"
+"    Wendet die angegebenen Patches nacheinander an und übernimmt die "
+"Änderungen\n"
+"    ins Archiv (es sei denn die Option --no-commit ist angegeben).\n"
+"\n"
+"    Falls aktuell lokale Änderungen im Arbeitsverzeichnis vorliegen, bricht\n"
+"    der Befehl ohne die Option -f/--force ab.\n"
+"\n"
+"    Patches können direkt aus Emails importiert werden, sogar wenn sie in\n"
+"    einem Anhang (Mime Typ text/plain oder text/x-patch) vorliegen. Die\n"
+"    Absender- und Betreffszeile, sowie alle text/plain Abschnitte vor dem "
+"Patch\n"
+"    werden als Benutzername bzw. Versionsmeldung bei der Übernahme "
+"verwendet.\n"
+"\n"
+"    Falls der einzulesende Patch von \"hg export\" erzeugt wurde, werden\n"
+"    Benutzername und Versionsmeldung aus dem Patch und nicht aus der Email\n"
+"    verwendet. Die Optionen -m und -u überschreiben aber auch diese "
+"Angaben.\n"
+"\n"
+"    Mit der Option --exact wird das Arbeitsverzeichnis vor jedem Patch auf\n"
+"    dessen Vorgängerversion gebracht. Nach Anwendung wird geprüft, ob der\n"
+"    neue Änderungssatz die gleiche Prüfsumme aufweist, wie der Patch. Falls\n"
+"    dies nicht so ist (im Falle von inkompatiblen Zeichensätzen oder "
+"anderen\n"
+"    Problemen mit dem Patch Format), wird die Operation abgebrochen.\n"
+"\n"
+"    Mit der Option --similarity werden Umbenennungen und Kopien auf gleiche\n"
+"    Weise wie mit dem Befehl \"hg addremove\" erkannt.\n"
+"\n"
+"    Um einen Patch von der Standardeingabe zu lesen, kann der Dateiname \"-"
+"\"\n"
+"    verwendet werden. Siehe 'hg help dates' für eine Liste aller gültigen\n"
+"    Formate für -d/--date.\n"
+"    "
+
+msgid "applying patch from stdin\n"
+msgstr "Wende Patch von der Standardeingabe an\n"
+
+msgid "no diffs found"
+msgstr "Keine Diffs gefunden"
+
+#, python-format
+msgid ""
+"message:\n"
+"%s\n"
+msgstr ""
+"Meldung:\n"
+"%s\n"
+
+msgid "not a mercurial patch"
+msgstr "Kein Mercurial Patch"
+
+msgid "patch is damaged or loses information"
+msgstr "Prüfsumme stimmt nicht überein: Patch korrumpiert"
+
+
+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"
+"\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 ""
+"Zeigt neue Revisionen in einer externen Quelle an\n"
+"\n"
+"    Zeigt alle neuen Änderungen an, die durch ein \"hg pull\" vom "
+"angegebenen\n"
+"    Pfad/URL oder dem 'default'-Pfad geholt werden würden. Diese "
+"Änderungssätze\n"
+"    würden geholt, wenn 'hg pull' ausgeführt würde.\n"
+"\n"
+"    Für entfernte Archive sorgt die Option --bundle dafür, dass die "
+"Änderungen\n"
+"    bei einem folgenden \"hg pull\" nicht ein zweites Mal geholt werden.\n"
+"\n"
+"    Siehe \"hg help pull\" für gültige Angaben für die Quelle.\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"
+"\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 ""
+"Erzeugt ein neues Projektarchiv im angegebenen Verzeichnis\n"
+"\n"
+"    Initialisiert ein neues Archiv im angegebenen Verzeichnis. Sollte das\n"
+"    angegebene Verzeichnis nicht existieren, wird es angelegt.\n"
+"\n"
+"    Ist kein Zielverzeichnis angegeben, wird das aktuelle genutzt.\n"
+"\n"
+"    Es ist möglich eine ssh:// URL als Ziel anzugeben.\n"
+"    Siehe 'hg help urls' für mehr Informationen.\n"
+"    "
+
+
+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"
+"\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"
+"    "
+msgstr ""
+"Suche Dateien mit bestimmtem Namen\n"
+"\n"
+"    Gibt alle Dateien im Projektarchiv aus, deren Namen auf ein angegebenes\n"
+"    Muster passen.\n"
+"\n"
+"    Standardmäßig wird das gesamte Archiv durchsucht. Um die Suche auf das\n"
+"    aktuelle Verzeichnis und Unterverzeichnisse zu begrenzen, verwende\n"
+"    \"--include .\".\n"
+"\n"
+"    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"
+"    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"
+"    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 file name to follow history across\n"
+"    renames and copies. --follow without a file name 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 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/--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 ""
+"Zeigt die Revisionshistorie des Archivs oder von Dateien an\n"
+"\n"
+"    Gibt die Revisionshistorie der angegeben Dateien oder des ganzen\n"
+"    Projektes aus.\n"
+"\n"
+"    Die Dateihistorie wird angezeigt ohne der Umbenennungs- oder Kopier-\n"
+"    historie zu folgen. Bei Angabe von -f/--follow mit einem Dateinamen\n"
+"    wird die Historie über Kopien und Umbenennungen hinweg verfolgt.\n"
+"    --follow ohne Dateinamen wird nur Vorläufer und Nachfolger ab der\n"
+"    Startrevision anzeigen. --follow-first folgt nur dem ersten Vorgänger\n"
+"    einer Zusammenführungsversion.\n"
+"\n"
+"    Solle kein Revisionsbereich angegeben sein, wird tip:0 angenommen, "
+"außer\n"
+"    --follow wurde angegeben. In diesem Fall wird die Vorgängerversion des\n"
+"    Arbeitsverzeichnis als Startversion genommen.\n"
+"\n"
+"    Siehe 'hg help dates' für eine Liste gültiger Formate für -d/--date.\n"
+"\n"
+"    Standardmäßig wird folgendes ausgegeben: Änderungssatz-Id und\n"
+"    Prüfsumme, Marken, nicht triviale Vorgängerversionen, Nutzer,\n"
+"    Datum und Zeit und eine Zusammenfassung für jede Version. Bei Angabe\n"
+"    des -v/--verbose Schalters, wird eine Liste aller geänderten Dateien\n"
+"    und die komplette Versionsmeldung angezeigt.\n"
+"\n"
+"    HINWEIS: log -p kann ein unerwartetes Diff für "
+"Zusammenführungsversionen\n"
+"    erzeugen, da es standardmäßig die Zusammenführungsversion mit der "
+"ersten\n"
+"    Vorgängerversion vergleicht. Auch in der Dateiliste werden nur Dateien\n"
+"    berücksichtigt, die zu BEIDEN Vorgängernversionen verschieden sind.\n"
+"\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 ""
+
+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"
+"\n"
+"    With -v flag, print file permissions, symlink and executable bits.\n"
+"    With --debug flag, print file revision hashes.\n"
+"    "
+msgstr ""
+"Gibt das Manifest der angegebenen oder aktuellen Revision aus.\n"
+"\n"
+"    Gibt eine Liste aller Dateien unter Versionskontrolle für die "
+"angegebene\n"
+"    Revision aus. Wenn keine Revision angegeben wird, wird die erste\n"
+"    Vorgängerversion des Arbeitsverzeichnis genutzt oder die Spitze (tip)\n"
+"    falls keine Revision ausgecheckt ist.\n"
+"\n"
+"    Mit dem Schalter -v werden zusätzlich zum Dateinamen auch die Rechte "
+"und\n"
+"    der Dateityp (Verknüpfung/ausführbar) ausgegeben. Mit --debug auch noch\n"
+"    die Prüfsumme.\n"
+"    "
+
+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"
+"\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"
+"\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"
+"    "
+msgstr ""
+"Führt das Arbeitsverzeichnis mit einer anderen Revision zusammen\n"
+"\n"
+"    Wendet die Änderungen der angegebenen Revision (seit einem gemeinsamen\n"
+"    Vorfahr) im Arbeitsverzeichnis an.\n"
+"\n"
+"    Dateien, die in sich in einer der beiden Vorgängerversionen änderten\n"
+"    werden als verändert markiert und es muss 'hg commit' ausgeführt bevor\n"
+"    weitere Änderungen durchgeführt werden dürfen. Nach dem Übernehmen hat\n"
+"    die neue Revision zwei Vorfahren.\n"
+"\n"
+"    Wenn keine Revision angegeben wird und der Vorgänger des Arbeits-\n"
+"    verzeichnisses eine Kopfversion eines Zweiges mit genau zwei Köpfen "
+"ist,\n"
+"    dann wird der andere Kopf für die Zusammenführung verwendet.\n"
+"    Bei mehr oder weniger als zwei Köpfen im Zweig muss eine andere "
+"Revision\n"
+"    explizit angegeben werden.\n"
+"    "
+
+#, python-format
+msgid "branch '%s' has %d heads - please merge with an explicit rev"
+msgstr "Zweig '%s' hat %d Köpfe - Bitte wähle eine explizite Revision"
+
+#, python-format
+msgid "branch '%s' has one head - please merge with an explicit rev"
+msgstr "Zweig '%s' hat einen Kopf - Bitte wähle eine explizite Revision"
+
+msgid "there is nothing to merge"
+msgstr "Es gibt nichts zum Zusammenführen"
+
+#, python-format
+msgid "%s - use \"hg update\" instead"
+msgstr "%s - Nutze \"hg update\" stattdessen"
+
+msgid ""
+"working dir not at a head rev - use \"hg update\" or merge with an explicit "
+"rev"
+msgstr ""
+"Arbeitsverzeichnis ist keine Kopfversion - Nutze \"hg update\" oder gib eine "
+"explizite Revision an"
+
+
+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 ""
+"Zeigt Änderungssätze, die nicht im Zielarchiv sind\n"
+"\n"
+"    Zeigt alle Änderungssätze des lokalen Archivs, die nicht im angegebenen\n"
+"    Zielarchiv oder dem Standardziel vorhanden sind. Dies sind genau jene,\n"
+"    die durch ein 'hg push' übertragen werden würden.\n"
+"\n"
+"    Siehe Hilfe zu 'pull' für das Format der Zieladresse.\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, 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"
+"    "
+msgstr ""
+"Zeigt die Vorgänger des Arbeitsverzeichnisses oder einer Revision\n"
+"\n"
+"    Gibt die Vorgängerversion(en) des Arbeitsverzeichnisses aus. Bei\n"
+"    Angabe einer Revision via --rev, werden die Vorgänger dieser\n"
+"    Version ausgegeben. Bei Angabe einer Datei wird die Version\n"
+"    ausgegeben, in der diese Datei zuletzt geändert wurde (noch vor der\n"
+"    Version des Arbeitsverzeichnisses oder dem Argument zu --rev falls\n"
+"    angegeben).\n"
+"    "
+
+msgid "can only specify an explicit file name"
+msgstr "Ein expliziter Dateiname muss angegeben werden"
+
+#, python-format
+msgid "'%s' not found in manifest!"
+msgstr "'%s' nicht im Manifest gefunden!"
+
+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"
+"\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 ""
+"Zeigt Adresse für Aliasnamen von entfernten Projektarchiven an\n"
+"\n"
+"    Zeigt die Adressdefinition des Kurznamens NAME an. Wenn kein Name "
+"gegeben\n"
+"    ist, werden alle Alias-Definitionen angezeigt.\n"
+"\n"
+"    Kurznamen für entfernte Archive werden im Abschnitt [paths] der Dateien\n"
+"    /etc/mercurial/hgrc und $HOME/.hgrc definiert. Wenn der Befehl in einem\n"
+"    Projektarchiv ausgeführt wird, wird auch die .hg/hgrc durchsucht.\n"
+"\n"
+"    Siehe auch 'hg help urls' für das Format von Adressangaben.\n"
+"    "
+
+msgid "not found!\n"
+msgstr "nicht gefunden!\n"
+
+msgid "not updating, since new heads added\n"
+msgstr "Aktualisierung nicht durchgeführt, da neue Köpfe hingefügt wurden\n"
+
+msgid "(run 'hg heads' to see heads, 'hg merge' to merge)\n"
+msgstr ""
+"(\"hg heads\" zeigt alle Köpfe, nutze \"hg merge\" um sie zusammenzuführen)\n"
+
+msgid "(run 'hg update' to get a working copy)\n"
+msgstr "(führe \"hg update\" aus, um ein Arbeitsverzeichnis zu erstellen)\n"
+
+msgid ""
+"pull changes from the specified source\n"
+"\n"
+"    Pull changes from a remote repository to the 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"
+"\n"
+"    If SOURCE is omitted, the 'default' path will be used.\n"
+"    See 'hg help urls' for more information.\n"
+"    "
+msgstr ""
+"Holt Änderungen aus dem angegebenen Projektarchiv\n"
+"\n"
+"    Überträgt Änderungen aus einem entfernten Archiv in das lokale.\n"
+"\n"
+"    Dabei werden alle Änderungen vom Archiv am angegebenen Pfad oder\n"
+"    URL gesucht und dem lokalen Archiv hinzugefügt. Standardmäßig\n"
+"    wird die Kopie des Projektes im Arbeitsverzeichnis nicht aktualisiert.\n"
+"\n"
+"    Um zu sehen, was beim nächsten 'pull' geholt würde, ohne dem Archiv\n"
+"    tatsächlich Änderungen hinzuzufügen, nutze hg incoming.\n"
+"\n"
+"    Beim Weglassen der QUELLE wird standardmäßig der 'default'-Pfad "
+"genutzt.\n"
+"    Siehe Hilfe zu 'paths' zu Pfad-Kurznamen und 'urls' für erlaubte\n"
+"    Formate für die Quellangabe.\n"
+"    "
+
+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"
+"\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/--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"
+"    URLs. If DESTINATION is omitted, a default path will be used.\n"
+"    See 'hg help urls' for more information.\n"
+"    "
+msgstr ""
+"Überträgt lokale Änderungen in das angegebene Ziel\n"
+"\n"
+"    Dies ist das Gegenteil der 'pull' Operation. Die lokalen Änderungen\n"
+"    des aktuellen Archivs werden in ein anderes übertragen. Bei lokalem\n"
+"    Ziel ist diese Aktion identisch zu einem 'hg pull' von diesem Archiv "
+"zum\n"
+"    aktuellen.\n"
+"\n"
+"    Im Regelfall wird \"hg push\" die Ausführung verweigern, wenn das\n"
+"    Resultat die Anzahl der Kopfversionen im entfernten Archiv erhöht, da\n"
+"    dies normalerweise bedeutet, dass der Nutzer vergessen hat vor der "
+"Über-\n"
+"    tragung die entfernten Änderungen zu holen und zusammenzuführen.\n"
+"\n"
+"    Bei Nutzung von -r wird die benannte Revision mit allen Vorgängern in\n"
+"    das entfernte Archiv übertragen.\n"
+"\n"
+"    Für wichtige Details zu ssh://-URLS kann die URL-Hilfe zu Rate gezogen\n"
+"    werden. Beim Weglassen des ZIELs wird standardmäßig der 'default'-Pfad\n"
+"    genutzt. Weitere Hilfe gibt unter 'hg help urls'.\n"
+"    "
+
+#, python-format
+msgid "pushing to %s\n"
+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"
+"\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 ""
+"Setzt eine unterbrochene Transaktion zurück\n"
+"\n"
+"    Setzt ein unterbrochenes Übernehmen (commit) oder Abholen (pull) "
+"zurück.\n"
+"\n"
+"    Der ungültige Status durch die Unterbrechung wird repariert. Dies "
+"sollte\n"
+"    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"
+"    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.\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"
+"\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 ""
+"Entfernt die angegebenen Dateien in der nächsten Version\n"
+"\n"
+"    Merkt die benannten Dateien für die Entfernung aus dem Archiv vor.\n"
+"\n"
+"    Dabei werden nur Dateien aus dem aktuellen Zweig gelöscht, nicht aus "
+"der\n"
+"    gesamten Projekthistorie. Option -A kann genutzt werden, um Dateien zu\n"
+"    entfernen, die bereits gelöscht wurden, -f kann genutzt werden, um die\n"
+"    Löschung zu erzwingen. -AF entfernt Dateien aus der nächsten Revision,\n"
+"    ohne sie zu löschen\n"
+"\n"
+"    Die folgende Tabelle beschreibt detailliert das Verhalten von 'remove'\n"
+"    für unterschiedliche Dateizustände (Spalten) und Optionskombinationen\n"
+"    (Reihen). Die Dateizustände sind Hinzugefügt (A), Unverändert (C),\n"
+"    Verändert (M) und Fehlend (!) (wie von 'hg status' angezeigt). Die\n"
+"    Aktionen sind Warnen, Entfernen (aus dem Zweig) und Löschen\n"
+"    (von der Festplatte).\n"
+"\n"
+"           A  C  M  !\n"
+"    keine  W  EL W  E\n"
+"    -f     E  EL EL E\n"
+"    -A     W  W  W  E\n"
+"    -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"
+"    "
+
+msgid "no files specified"
+msgstr "Keine Dateien angegeben"
+
+#, 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"
+
+msgid "still exists"
+msgstr "Existiert immernoch"
+
+msgid "is modified"
+msgstr "Ist modifiziert"
+
+msgid "has been marked for add"
+msgstr "Wurde als hinzugefügt markiert"
+
+
+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 ""
+"Benennt Dateien um; äquivalent zu \"copy\" und \"remove\"\n"
+"\n"
+"    Erstellt das Ziel als neue Datei mit der Versionshistorie der Quelle.\n"
+"    Die Quelle wird ausserdem als gelöscht markiert. Wenn mehrere Quellen\n"
+"    angegeben sind, muss das Ziel ein Verzeichnis sein.\n"
+"\n"
+"    Normalerweise kopiert dieser Befehl auch den Inhalt der Datei wie sie\n"
+"    im Arbeitsverzeichnis vorliegt. Existiert das Ziel jedoch schon, so "
+"kann\n"
+"    dieses durch Angabe der Option --after/-A als Kopie nachträglich "
+"markiert\n"
+"    werden.\n"
+"\n"
+"    Die neue Datei wird wie üblich nicht sofort übernommen, sondern "
+"existiert\n"
+"    als lokale Änderung im Arbeitsverzeichnis. Die Umbenennung kann durch\n"
+"    \"hg revert\" rückgängig gemacht werden.\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 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"
+"\n"
+"    The codes used to show the status of files are:\n"
+"    U = unresolved\n"
+"    R = resolved\n"
+"    "
+msgstr ""
+"Wiederholt eine Dateizusammenführung oder Aktualisierung\n"
+"\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"
+"\n"
+"    Nach der automatischen Zusammenführung werden Konflikte intern markiert\n"
+"    und erlauben kein Übernehmen der Änderungen, bis sie mit der Option\n"
+"    -m/--mark als aufgelöst markiert werden.\n"
+"\n"
+"    Der aktuelle Status wird mit -l/--list angezeigt. Die dabei verwendeten\n"
+"    Zeichen bedeuten:\n"
+"      U = noch konfliktbehaftet (unresolved)\n"
+"      R = konfliktfrei (resolved)\n"
+"    "
+
+msgid "too many options specified"
+msgstr "Zuviele Optionen angegeben"
+
+msgid "can't specify --all and patterns"
+msgstr "Verwende nicht --all gleichzeitig mit einem Dateimuster"
+
+msgid "no files or directories specified; use --all to remerge all files"
+msgstr "Keine Dateien oder Verzeichnisse angegeben; nutze --all für alle"
+
+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 ""
+"Setzt gegebene Dateien oder Verzeichnisse auf frühere Version zurück\n"
+"\n"
+"    (Im Gegensatz zu 'update -r' verändert 'revert' nicht die Angabe der\n"
+"    Vorgängerversion des Arbeitsverzeichnisses)\n"
+"\n"
+"    Ohne gegebene Revision wird der Inhalt der benannten Dateien oder\n"
+"    Verzeichnisse auf die Vorgängerversion zurückgesetzt. Die betroffenen\n"
+"    Dateien gelten danach wieder als unmodifiziert und nicht übernommene\n"
+"    Hinzufügungen, Entfernungen, Kopien und Umbenennungen werden vergessen.\n"
+"    Falls das Arbeitsverzeichnis zwei Vorgänger hat, muss eine Revision\n"
+"    explizit angegeben werden.\n"
+"\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"
+"    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"
+"    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"
+"    Angabe werden keine Dateien verändert.\n"
+"\n"
+"    Modifizierte Dateien werden vor der Änderung mit der Endung .orig\n"
+"    gespeichert. Um dieses Backup zu verhindern, verwende --no-backup.\n"
+"    "
+
+msgid "you can't specify a revision and a date"
+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"
+
+#, python-format
+msgid "forgetting %s\n"
+msgstr "vergesse: %s\n"
+
+#, python-format
+msgid "reverting %s\n"
+msgstr "setze zurück: %s\n"
+
+#, python-format
+msgid "undeleting %s\n"
+msgstr "stelle wieder her: %s\n"
+
+#, python-format
+msgid "saving current version of %s as %s\n"
+msgstr "speichere aktuelle Version von %s als %s\n"
+
+#, python-format
+msgid "file not managed: %s\n"
+msgstr "Datei nicht unter Versionskontrolle: %s\n"
+
+#, python-format
+msgid "no changes needed to %s\n"
+msgstr "keine Änderungen notwendig für %s\n"
+
+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 ""
+"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"
+"    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"
+"    werden durch Transaktionen geschützt:\n"
+"\n"
+"      commit\n"
+"      import\n"
+"      pull\n"
+"      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"
+"    ein 'pull' ausführt.\n"
+"    "
+
+msgid ""
+"print the root (top) of the current working directory\n"
+"\n"
+"    Print the root directory of the current repository.\n"
+"    "
+msgstr ""
+"Gibt die Wurzel (top) des aktuellen Arbeitsverzeichnisses aus\n"
+"\n"
+"    Gibt das Wurzelverzeichnis des aktuellen Arbeitsverzeichnisses aus.\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 and -E options to log to files.\n"
+"    "
+msgstr ""
+"Exportiert das Projektarchiv via HTTP\n"
+"\n"
+"    Startet einen lokalen HTTP Archivbrowser und einen Pull-Server.\n"
+"\n"
+"    Standardmäßig schreibt der Server Zugriffe auf die Standardausgabe\n"
+"    und Fehler auf die Standardfehlerausgabe. Nutze die '-A' und '-E'\n"
+"    Optionen, um die Ausgabe in Dateien umzulenken.\n"
+"    "
+
+#, python-format
+msgid "listening at http://%s%s/%s (bound to %s:%d)\n"
+msgstr "Höre auf http://%s%s/%s (gebunden an %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/--all is given. Unless options\n"
+"    described with \"show only ...\" are given, the options -mardu are\n"
+"    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 difference between them is 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"
+"      = the previous added file was copied from here\n"
+"    "
+msgstr ""
+"Zeigt geänderte Dateien im Arbeitsverzeichnis\n"
+"\n"
+"    Zeigt den Status von Dateien im Archiv an. Wenn eine Name übergeben\n"
+"    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"
+"    nur ...\" beschrieben werden, werden die Optionen -mardu genutzt.\n"
+"\n"
+"    Die Option -q/--quiet blendet unüberwachte (unbekannte und ignorierte)\n"
+"    Dateien aus, es sei denn sie werden explizit mit -u/--unknown oder \n"
+"    -i/--ignored angefordert.\n"
+"\n"
+"    HINWEIS: Der Status kann sich vom Diff unterscheiden, wenn sich\n"
+"    Berechtigungen geändert haben oder eine Zusammenführung aufgetreten\n"
+"    ist. Das Standard-Diff-Format zeigt keine Berechtigungsänderungen an "
+"und\n"
+"    'diff' zeigt nur Änderungen relativ zu einer Vorgängerversion einer\n"
+"    Zusammenführung an.\n"
+"\n"
+"    Bei Angabe einer Revision wird diese als Basisrevision genutzt.\n"
+"    Bei Angabe zweier Revisionen werden die Unterschiede zwischen diesen\n"
+"    beiden gezeigt.\n"
+"\n"
+"    Die Kürzel zur Angabe des Status einer Datei sind:\n"
+"    M = modifiziert\n"
+"    A = hinzugefügt (added)\n"
+"    R = entfernt (removed)\n"
+"    C = unverändert (clean)\n"
+"    ! = verschwunden (nicht durch einen hg-Befehl gelöscht, aber immer\n"
+"        noch überwacht)\n"
+"    ? = nicht überwacht\n"
+"    I = ignoriert\n"
+"      = die zuvor hinzugefügt Datei wurde von hier kopiert\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 ""
+"Setze ein oder mehrere Etiketten für die aktuelle oder gegebene Revision\n"
+"\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"
+"    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"
+"    zusammen mit den anderen Projektdateien überwacht wird und manuell be-\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"
+"    "
+
+msgid "tag names must be unique"
+msgstr "Etikettnamen müssen einzigartig sein"
+
+#, python-format
+msgid "the name '%s' is reserved"
+msgstr "der name '%s' ist reserviert"
+
+msgid "--rev and --remove are incompatible"
+msgstr "Die Optionen --rev und --remove sind inkompatibel"
+
+#, python-format
+msgid "tag '%s' does not exist"
+msgstr "Etikett '%s' existiert nicht"
+
+#, python-format
+msgid "tag '%s' is not a global tag"
+msgstr "Etikett '%s' ist nicht global"
+
+#, python-format
+msgid "tag '%s' is not a local tag"
+msgstr "Etikett '%s' ist nicht lokal"
+
+#, python-format
+msgid "Removed tag %s"
+msgstr "Etikett %s entfernt"
+
+#, python-format
+msgid "tag '%s' already exists (use -f to force)"
+msgstr "Etikett '%s' exitiert bereitsi; erzwinge mit -f/--force"
+
+#, python-format
+msgid "Added tag %s for changeset %s"
+msgstr "Etikett %s für Änderungssatz %s hinzugefügt"
+
+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 ""
+"Liste alle Etiketten des Archivs auf\n"
+"\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"
+"    "
+
+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"
+"\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 ""
+"Zeigt die zuletzt übernommene Revision\n"
+"\n"
+"    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"
+"    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"
+"    "
+
+msgid ""
+"apply one or more changegroup files\n"
+"\n"
+"    Apply one or more compressed changegroup files generated by the\n"
+"    bundle command.\n"
+"    "
+msgstr ""
+"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"
+"    "
+
+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 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"
+"\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 ""
+"Aktualisiert das Arbeitsverzeichnis\n"
+"\n"
+"    Hebt das Arbeitsverzeichnis auf die angegebene Revision oder die\n"
+"    Spitze des aktuellen Zweiges an, falls keine angegeben wurde.\n"
+"    Bei der Verwendung von null als Revision wird die Arbeitskopie entfernt\n"
+"    (wie 'hg clone -U').\n"
+"\n"
+"    Wenn das Arbeitsverzeichnis keine unversionierten Änderungen enthält,\n"
+"    wird es durch den Zustand der angeforderten Revision ersetzt. Sollte\n"
+"    die angeforderte Revision aus einem anderen Zweig sein, wird das\n"
+"    Arbeitsverzeichnis zusätzlich auf diesen Zweig umgestellt.\n"
+"\n"
+"    Sollten unversionierte Änderungen vorliegen, muss -C genutzt werden,\n"
+"    um sie zwangsweise mit dem Zustand des Arbeitsverzeichnis der\n"
+"    angeforderten Revision zu ersetzen.\n"
+"\n"
+"    Sollten unversionierte Änderungen vorliegen, -C nicht genutzt werden "
+"und\n"
+"    die Vorgängerversion und die angeforderte Version sind auf dem selben\n"
+"    Zweig und eine ist Vorläufer der anderen, dann wird das neue\n"
+"    Arbeitsverzeichnis die angeforderte Revision in einer Zusammenführung\n"
+"    mit den unversionierten Änderungen enthalten. Anderenfalls wird "
+"'update'\n"
+"    fehlschlagen mit einem Hinweis 'merge' oder 'update -C' stattdessen zu\n"
+"    nutzen.\n"
+"\n"
+"    Sollte nur eine Datei auf eine ältere Revision angehoben werden, kann\n"
+"    'revert' genutzt werden.\n"
+"\n"
+"    Siehe 'hg help dates' für eine Liste gültiger Formate für -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 ""
+"Prüft die Integrität des Projektarchivs\n"
+"\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"
+"    "
+
+msgid "output version and copyright information"
+msgstr "Gibt Version und Copyright Information aus"
+
+#, 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 ""
+"\n"
+"Copyright (C) 2005-2009 Matt Mackall <mpm@selenic.com> und andere\n"
+"Dies ist freie Software; siehe Quellen für Kopierbestimmungen. Es besteht\n"
+"KEINE Gewährleistung für das Programm, nicht einmal der Marktreife oder der\n"
+"Verwendbarkeit für einen bestimmten Zweck.\n"
+
+msgid "repository root directory or symbolic path name"
+msgstr "Wurzel des Archivs oder symbolischer Pfadname"
+
+msgid "change working directory"
+msgstr "Wechselt das Arbeitsverzeichnis"
+
+msgid "do not prompt, assume 'yes' for any required answers"
+msgstr "Keine Abfragen, nimmt 'ja' für jede Nachfrage an"
+
+msgid "suppress output"
+msgstr "Unterdrückt Ausgabe"
+
+msgid "enable additional output"
+msgstr "Ausgabe weiterer Informationen"
+
+msgid "set/override config option"
+msgstr "Setzt/überschreibt Konfigurationsoptionen"
+
+msgid "enable debugging output"
+msgstr "Aktiviert Debugausgaben"
+
+msgid "start debugger"
+msgstr "Startet den Debugger"
+
+msgid "set the charset encoding"
+msgstr "Setzt die Zeichenkodierung"
+
+msgid "set the charset encoding mode"
+msgstr "Setzt den Modus der Zeichenkodierung"
+
+msgid "print traceback on exception"
+msgstr "Gibt die Aufrufhierarchie einer Ausnahmebedingung aus"
+
+msgid "time how long the command takes"
+msgstr "Gibt die Dauer des Befehls aus"
+
+msgid "print command execution profile"
+msgstr "Gibt das Ausführungsprofil des Befehls aus"
+
+msgid "output version information and exit"
+msgstr "Gibt Versionsinformation aus und beendet sich"
+
+msgid "display help and exit"
+msgstr "Gibt Hilfe aus und beendet sich"
+
+msgid "do not perform actions, just print output"
+msgstr "Führt die Aktionen nicht aus, sondern zeigt nur die Ausgabe"
+
+msgid "specify ssh command to use"
+msgstr "Spezifiziert den zu nutzenden SSH-Befehl"
+
+msgid "specify hg command to run on the remote side"
+msgstr "Spezifiziert den hg-Befehl, der entfernt ausgeführt wird"
+
+msgid "include names matching the given patterns"
+msgstr "Namen hinzufügen, die auf das angegebene Muster passen"
+
+msgid "exclude names matching the given patterns"
+msgstr "Namen ausschließen, die auf das angegebene Muster passen"
+
+msgid "use <text> as commit message"
+msgstr "Nutzt <text> als Versionsmeldung"
+
+msgid "read commit message from <file>"
+msgstr "Liest Versionsmeldung aus <datei>"
+
+msgid "record datecode as commit date"
+msgstr "Protokolliert Datumscode als Versionsdatum"
+
+msgid "record user as committer"
+msgstr "Protokolliert Nutzer als Versionsersteller"
+
+msgid "display using template map file"
+msgstr "Anzeige unter Nutzung der Vorlagenzuordnungsdatei"
+
+msgid "display with template"
+msgstr "Anzeige mit Vorlage"
+
+msgid "do not show merges"
+msgstr "Zeigt keine Zusammenführungen"
+
+msgid "treat all files as text"
+msgstr "Behandelt alle Dateien als Text"
+
+msgid "don't include dates in diff headers"
+msgstr "Fügt Datum nicht im Kopf des Diff an"
+
+msgid "show which function each change is in"
+msgstr "Zeigt die Funktion, in der die Änderung passiert ist"
+
+msgid "ignore white space when comparing lines"
+msgstr "Ignoriert Leerzeichen beim Vergleich von Zeilen"
+
+msgid "ignore changes in the amount of white space"
+msgstr "Ignoriert Änderungen bei der Anzahl von Leerzeichen"
+
+msgid "ignore changes whose lines are all blank"
+msgstr "Ignoriert Änderungen, die nur aus Leerzeilen bestehen"
+
+msgid "number of lines of context to show"
+msgstr "Anzahl der anzuzeigenden Kontextzeilen"
+
+msgid "guess renamed files by similarity (0<=s<=100)"
+msgstr "Bewertet ähnliche Dateien (0<=s<=100) als Umbenennung"
+
+msgid "[OPTION]... [FILE]..."
+msgstr "[OPTION]... [DATEI]..."
+
+msgid "annotate the specified revision"
+msgstr "Annotiert die angegebene Revision"
+
+msgid "follow file copies and renames"
+msgstr "Folgt Dateikopien und Umbenennungen"
+
+msgid "list the author (long with -v)"
+msgstr "Listet den Autor auf (lang mit -v)"
+
+msgid "list the date (short with -q)"
+msgstr "Listet das Datum auf (kurz mit -q)"
+
+msgid "list the revision number (default)"
+msgstr "Listet die Revisionsnummer auf (Standard)"
+
+msgid "list the changeset"
+msgstr "Listet den Änderungssatz auf"
+
+msgid "show line number at the first appearance"
+msgstr "Zeigt die Zeilennummer beim ersten Auftreten "
+
+msgid "[-r REV] [-f] [-a] [-u] [-d] [-n] [-c] [-l] FILE..."
+msgstr "[-r REV] [-f] [-a] [-u] [-d] [-n] [-c] [-l] DATEI..."
+
+msgid "do not pass files through decoders"
+msgstr "Dateien nicht dekodieren"
+
+msgid "directory prefix for files in archive"
+msgstr "Verzeichnisprefix für Dateien im Archiv"
+
+msgid "revision to distribute"
+msgstr "zu verteilende Revision"
+
+msgid "type of distribution to create"
+msgstr "zu erstellender Distributionstyp"
+
+msgid "[OPTION]... DEST"
+msgstr "[OPTION]... ZIEL"
+
+msgid "merge with old dirstate parent after backout"
+msgstr "Führt mit Vorgänger im Status vor Rücknahme zusammen"
+
+msgid "parent to choose when backing out merge"
+msgstr "Wählt einen Vorgänger bei Rücknahme einer Zusammenführung"
+
+msgid "revision to backout"
+msgstr "Die Zurückzunehmende Revision"
+
+msgid "[OPTION]... [-r] REV"
+msgstr ""
+
+msgid "reset bisect state"
+msgstr "Setzt Status der Suche zurück"
+
+msgid "mark changeset good"
+msgstr "Markiert Änderungssatz als fehlerfrei"
+
+msgid "mark changeset bad"
+msgstr "Markiert Änderungssatz als fehlerbehaftet"
+
+msgid "skip testing changeset"
+msgstr "Überspringt das Testen dieses Änderungssatzes"
+
+msgid "use command to check changeset state"
+msgstr "Nutzt Kommando um den Fehlerstatus des Änderungssatzes 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]"
+
+msgid "set branch name even if it shadows an existing branch"
+msgstr "Setzt Zweignamen, selbst wenn es bestehenden Zweig verschattet"
+
+msgid "reset branch name to parent branch name"
+msgstr "Setzt Zweignamen zum Namen des Vorgängers zurück"
+
+msgid "[-fC] [NAME]"
+msgstr ""
+
+msgid "show only branches that have unmerged heads"
+msgstr "Zeigt nur Zweige mir nicht mehreren Köpfen"
+
+msgid "[-a]"
+msgstr ""
+
+msgid "run even when remote repository is unrelated"
+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"
+
+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 "[-f] [-a] [-r REV]... [--base REV]... DATEI [ZIEL]"
+
+msgid "print output to file with formatted name"
+msgstr "Schreibt Ausgabe in Datei mit formatiertem Namen"
+
+msgid "print the given revision"
+msgstr ""
+
+msgid "apply any matching decode filter"
+msgstr ""
+
+msgid "[OPTION]... FILE..."
+msgstr "[OPTION]... DATEI..."
+
+msgid "the clone will only contain a repository (no working copy)"
+msgstr "Der Klon wird nur das Archiv enthalten (keine Arbeitskopie)"
+
+msgid "a changeset you would like to have after cloning"
+msgstr "Der Änderungssatz, der nach dem Klonen vorhanden sein soll"
+
+msgid "[OPTION]... SOURCE [DEST]"
+msgstr "[OPTION]... QUELLE [ZIEL]"
+
+msgid "mark new/missing files as added/removed before committing"
+msgstr "Markiert neue/fehlende Dateien als hinzugefügt/entfernt"
+
+msgid "mark a branch as closed, hiding it from the branch list"
+msgstr "Markiert einen Zweig als beendet und blendet ihn in der Zweigliste aus"
+
+msgid "record a copy that has already occurred"
+msgstr ""
+
+msgid "forcibly copy over an existing managed file"
+msgstr ""
+
+msgid "[OPTION]... [SOURCE]... DEST"
+msgstr "[OPTION]... [QUELLE]... ZIEL"
+
+msgid "[INDEX] REV1 REV2"
+msgstr ""
+
+msgid "[COMMAND]"
+msgstr "[BEFEHL]"
+
+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 "parent"
+msgstr ""
+
+msgid "file list"
+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 "[OPTION]... [-r REV1 [-r REV2]] [FILE]..."
+msgstr ""
+
+msgid "diff against the second parent"
+msgstr "Vergleicht mit der zweiten Vorgängerversion"
+
+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 ""
+"Folgt der Versionshistorie oder Dateihistorie über Kopien und Umbenennungen "
+"hinweg"
+
+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 "[-r REV] [REV]..."
+msgstr ""
+
+msgid "[TOPIC]"
+msgstr ""
+
+msgid "identify the specified revision"
+msgstr "Identifiziert die angegebene Revision"
+
+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 "eine bestimmte Revision bis zu der geholt werden soll"
+
+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 "Beendet Dateinamen mit NUL zur Nutzung mit xargs"
+
+msgid "print complete paths from the filesystem root"
+msgstr ""
+
+msgid "[OPTION]... [PATTERN]..."
+msgstr ""
+
+msgid "only follow the first parent of merge changesets"
+msgstr "Folgt nur dem ersten Vorgänger einer Zusammenführungsversion"
+
+msgid "show revisions matching date spec"
+msgstr "Zeigt Revisionen passend zur Datums-Spezifikation"
+
+msgid "show copied files"
+msgstr "Zeigt kopierte Dateien"
+
+msgid "do case-insensitive search for a keyword"
+msgstr "Sucht unabhängig von Groß- und Kleinschreibung ein Stichwort"
+
+msgid "include revisions where files were removed"
+msgstr "Revisionen hinzufügen, in denen Dateien entfernt wurden"
+
+msgid "show only merges"
+msgstr "Zeigt nur Zusammenführungen"
+
+msgid "revisions committed by user"
+msgstr "Revisionen erzeugt vom Nutzer"
+
+msgid "show only changesets within the given named branch"
+msgstr "Zeigt nur Änderungssätze innerhalb des angegebenen Zweigs"
+
+msgid "do not display revision or any of its ancestors"
+msgstr "Gibt weder diese Revision noch ihre Nachfolger aus"
+
+msgid "[OPTION]... [FILE]"
+msgstr "[OPTION]... [DATEI]"
+
+msgid "revision to display"
+msgstr ""
+
+msgid "[-r REV]"
+msgstr ""
+
+msgid "force a merge with outstanding changes"
+msgstr "Erzwingt eine Zusammenführung mit den ausstehenden Änderungen"
+
+msgid "revision to merge"
+msgstr "Zusammenzuführende Revision"
+
+msgid "[-f] [[-r] REV]"
+msgstr ""
+
+msgid "a specific revision up to which you would like to push"
+msgstr "eine bestimmte Revision bis zu der ausgeliefert werden soll"
+
+msgid "[-M] [-p] [-n] [-f] [-r REV]... [DEST]"
+msgstr "[-M] [-p] [-n] [-f] [-r REV]... [ZIEL]"
+
+msgid "show parents from the specified revision"
+msgstr "Zeigt die Vorgänger der angegeben Revision"
+
+msgid "hg parents [-r REV] [FILE]"
+msgstr ""
+
+msgid "[NAME]"
+msgstr ""
+
+msgid "update to new tip if changesets were pulled"
+msgstr "Auf die neue Spitze (tip) anheben, falls Änderungssätze geholt wurden"
+
+msgid "[-u] [-f] [-r REV]... [-e CMD] [--remotecmd CMD] [SOURCE]"
+msgstr "[-u] [-f] [-r REV]... [-e CMD] [--remotecmd CMD] [QUELLE]"
+
+msgid "force push"
+msgstr "Erzwingt Auslieferung"
+
+msgid "[-f] [-r REV]... [-e CMD] [--remotecmd CMD] [DEST]"
+msgstr "[-f] [-r REV]... [-e CMD] [--remotecmd CMD] [ZIEL]"
+
+msgid "record delete for missing files"
+msgstr "Protokolliert die Löschung fehlender Dateien"
+
+msgid "remove (and delete) file even if added or modified"
+msgstr "Entfernt (und löscht) Datei sogar wenn hinzugefügt oder modifiziert"
+
+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 "der Spitze (tip) nächste Revision mit passendem Datum"
+
+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 "Name der Zugriffs-Logdatei"
+
+msgid "name of error log file to write to"
+msgstr "Name der Fehler-Logdatei"
+
+msgid "port to listen on (default: 8000)"
+msgstr "Port auf dem gehorcht wird (Standard: 8000)"
+
+msgid "address to listen on (default: all interfaces)"
+msgstr "Adresse auf der gehorcht wird (Standard: alle Schnittstellen)"
+
+msgid "prefix path to serve from (default: server root)"
+msgstr "Pfadpräfix von dem ausgeliefert wird (Standard: Serverwurzel '/')"
+
+msgid "name to show in web pages (default: working directory)"
+msgstr ""
+"Name der auf der Webseite angezeigt wird (Standard: Arbeitsverzeichnis)"
+
+msgid "name of the webdir config file (serve more than one repository)"
+msgstr "Name der webdir-Konfigurationsdatei (mehr als ein Archiv ausliefern)"
+
+msgid "for remote clients"
+msgstr "für entfernte Klienten"
+
+msgid "web templates to use"
+msgstr "Zu nutzende Web-Vorlagen"
+
+msgid "template style to use"
+msgstr ""
+
+msgid "use IPv6 in addition to IPv4"
+msgstr "Nutzt IPv6 zusätzlich zu IPv4"
+
+msgid "SSL certificate file"
+msgstr "SSL Zertifikatsdatei"
+
+msgid "show untrusted configuration options"
+msgstr ""
+
+msgid "[-u] [NAME]..."
+msgstr ""
+
+msgid "show status of all files"
+msgstr "Zeigt den Status aller Dateien"
+
+msgid "show only modified files"
+msgstr "Zeigt nur modifizierte Dateien"
+
+msgid "show only added files"
+msgstr "Zeigt nur hinzugefügte Dateien"
+
+msgid "show only removed files"
+msgstr "Zeigt nur entfernte Dateien"
+
+msgid "show only deleted (but tracked) files"
+msgstr "Zeigt nur gelöschte (aber überwachte) Dateien"
+
+msgid "show only files without changes"
+msgstr "Zeigt nur Dateien ohne Änderungen"
+
+msgid "show only unknown (not tracked) files"
+msgstr "Zeigt nur unbekannte (nicht überwachte) Dateien"
+
+msgid "show only ignored files"
+msgstr "Zeigt nur ignorierte Dateien"
+
+msgid "hide status prefix"
+msgstr "Verdeckt den Status-Präfix"
+
+msgid "show source of copied files"
+msgstr "Zeigt die Quelle von kopierten Dateien"
+
+msgid "show difference from revision"
+msgstr "Zeigt die Differenz zu einer Revision"
+
+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 "Überschreibt lokale Modifikationen von Dateien (keine Sicherung)"
+
+msgid "[-C] [-d DATE] [[-r] REV]"
+msgstr "[-C] [-d DATUM] [[-r] REV]"
+
+msgid "not found in manifest"
+msgstr "nicht im Manifest gefunden"
+
+msgid "branch name not in UTF-8!"
+msgstr "Name der Verzweigung nicht in UTF-8!"
+
+#, python-format
+msgid "  searching for copies back to rev %d\n"
+msgstr "  suche Kopien in Revisionen bis %d\n"
+
+#, python-format
+msgid ""
+"  unmatched files in local:\n"
+"   %s\n"
+msgstr ""
+"  Dateien nur in lokaler Version:\n"
+"   %s\n"
+
+#, python-format
+msgid ""
+"  unmatched files in other:\n"
+"   %s\n"
+msgstr ""
+"  Dateien nur in anderer Version:\n"
+"   %s\n"
+
+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"
+
+#, python-format
+msgid "  dir %s -> %s\n"
+msgstr "  Verzeichnis %s -> %s\n"
+
+#, python-format
+msgid "  file %s -> %s\n"
+msgstr "  Datei %s -> %s\n"
+
+#, 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 ""
+
+#, python-format
+msgid "file %r in dirstate clashes with %r"
+msgstr ""
+
+#, python-format
+msgid "not in dirstate: %s\n"
+msgstr ""
+
+msgid "character device"
+msgstr ""
+
+msgid "block device"
+msgstr ""
+
+msgid "fifo"
+msgstr ""
+
+msgid "socket"
+msgstr ""
+
+msgid "directory"
+msgstr ""
+
+#, python-format
+msgid "%s: unsupported file type (type is %s)\n"
+msgstr ""
+
+#, python-format
+msgid "abort: %s\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"hg: command '%s' is ambiguous:\n"
+"    %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 "hg: %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 "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 ""
+
+#, 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 "[lo]"
+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 "[yn]"
+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 "Datumsformate"
+
+
+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"
+"    Einige Befehle erlauben dem Benuter ein Datum anzugeben, z.B.:\n"
+"    * backout, commit, import, tag: Angabe des Versionsdatums.\n"
+"    * log, revert, update: Selektion von Revisionen anhand ihres Datums.\n"
+"\n"
+"    Viele Datumsformate sind erlaubt. Hier einige Beispiele:\n"
+"\n"
+"    \"Wed Dec 6 13:18:29 2006\" (Lokale Zeitzone angenommen)\n"
+"    \"Dec 6 13:18 -0600\" (Jahr angenommen, Zeitverschiebung angegeben)\n"
+"    \"Dec 6 13:18 UTC\" (UTC und GMT sind Aliase für +0000)\n"
+"    \"Dec 6\" (Mitternacht)\n"
+"    \"13:18\" (Heute angenommen)\n"
+"    \"3:39\" (3:39 morgens angenommen)\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"
+"    Schließlich gibt es Mercurials internes Format:\n"
+"\n"
+"    \"1165432709 0\" (Wed Dec 6 13:18:29 2006 UTC)\n"
+"\n"
+"    Dies ist das internationale Darstellungsformat für Daten. Die Unixzeit "
+"(unixtime) ist\n"
+"    die Anzahl von Sekunden seit der UNIX Epoche (1970-01-01 00:00 UTC). "
+"Abgesetzt davon\n"
+"    steht die Verschiebung zur lokalen Zeitzone in Sekunden westlich der UTC "
+"(negativ\n"
+"    wenn die Zeitzone östlich der UTC ist).\n"
+"\n"
+"    Der log-Befehl akkzeptiert auch Datumsbereiche:\n"
+"\n"
+"    \"<{datetime}\" - an oder vor einem/r angegebenen Datum/Uhrzeit\n"
+"    \">{datetime}\" - zu oder nach einem/r angegebenen Datum/Uhrzeit\n"
+"    \"{datetime} to {datetime}\" - ein Datumsbereich, inklusive\n"
+"    \"-{tage}\" - innerhalb der angegebenen Anzahl von Tagen vor dem "
+"heutigen Tag\n"
+"    "
+
+msgid "File Name Patterns"
+msgstr "Dateimuster"
+
+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 ""
+"\n"
+"    Mercurial akkzeptiert verschiedene Schreibweisen zur Identifikation "
+"einer oder\n"
+"    mehrerer Dateien gleichzeitig.\n"
+"\n"
+"    Standardmäßig behandelt Mercurial Dateinamen wie erweiterte \"Glob\"-"
+"Muster der\n"
+"    Shell (shell-style extended glob patterns).\n"
+"\n"
+"    Andere Schreibweisen von Mustern müssen explizit angegeben werden.\n"
+"\n"
+"    Um einen Dateipfad ohne Mustererkennung zu suchen, beginne mit\n"
+"    \"path:\". Dies Pfadnamen müssen komplett übereinstimmen beginnend ab\n"
+"    der aktuellen Wurzel des Projektarchivs.\n"
+"\n"
+"    Um erweiterete Glob-Muster zu nutzen, muss das Muster mit \"glob:\" "
+"beginnen.\n"
+"    Globs sind am aktuellen Verzeichnis verankert; ein Glob-Muster wie \"*.c"
+"\" stimmt nur\n"
+"    mit Dateien im aktuellen Verzeichnis überein, die mit \".c\" enden.\n"
+"\n"
+"    Die unterstützen Erweiterungen der Glob-Syntax sind \"**\" zur "
+"Übereinstimmung mit\n"
+"    Zeichenketten über Pfadtrenner hinweg und \"{a,b}\" in der Bedeutung \"a "
+"oder b\".\n"
+"\n"
+"    Zur Nutzung von regulären Ausdrücken (Perl/Python) beginne einen Namen "
+"mit \"re:\".\n"
+"    Erkennung mit regulären Ausdrücken wird an der Wurzel des Projektarchivs "
+"verankert.\n"
+"\n"
+"    Pfad-Beispiele:\n"
+"\n"
+"    path:foo/bar   eine Datei bar in einem Verzeichnis foo an der Basis des\n"
+"                   des Projektarchivs\n"
+"    path:path:name eine Datei oder eine Verzeichnis mit dem Namen \"path:name"
+"\"\n"
+"\n"
+"    Glob-Beispiele:\n"
+"\n"
+"    glob:*.c       jeder Name endend mit \".c\" im aktuellen Verzeichnis\n"
+"    *.c            jeder Name endend mit \".c\" im aktuellen Verzeichnis\n"
+"    **.c           jeder Name endend mit \".c\" im aktuellen Verzeichnis "
+"und\n"
+"                   jedem Unterverzeichnis\n"
+"    foo/*.c        jeder Name endend mit \".c\" im Verzeichnis foo\n"
+"    foo/**.c       jeder Name endend mit \".c\" im Verzeichnis foo und "
+"jedem\n"
+"                   Unterverzeichnis.\n"
+"\n"
+"    Reguläre Ausdrücke Beispiele::\n"
+"\n"
+"    re:.*\\.c$      jeder Name endend mit \".c\" überall im Projektarchiv\n"
+"\n"
+"    "
+
+msgid "Environment Variables"
+msgstr "Umgebungsvariablen"
+
+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 "Angabe Einzelner Revisionen"
+
+
+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 ""
+"\n"
+"    Mercurial unterstützt mehrere Arten individuelle Revisionen anzugeben\n"
+"\n"
+"    Eine einfache Ganzzahl wird als Revisionsnummer behandelt. Negative\n"
+"    Zahlen beschreiben den topologischen Abstand von der Spitze (tip), "
+"wobei\n"
+"    -1 die Spitze selbst ist. Daher sind negative Zahlen nur dann nützlich,\n"
+"    wenn man sich die lokalen Revisionsnummern einprägt und das Tippen "
+"einer\n"
+"    Zahl sparen möchte. Der Verfasser empfiehlt 'copy and paste'.\n"
+"\n"
+"    Eine 40-stellige Hexadezimalzahl gilt als eindeutiger Identifikator\n"
+"    einer Revision.\n"
+"\n"
+"    Eine Hexadezimalzahl mit weniger als 40 Zeichen gilt als eindeutiger\n"
+"    Identifikator und wird als Kurzform des Identifikators bezeichnet.\n"
+"    Die Kurzform ist nur dann gültig, wenn sie Präfix exakt einer Langform\n"
+"    eines Identifikators ist.\n"
+"\n"
+"    Jede andere Zeichenfolge wird als Name einer Marke (tag) behandelt.\n"
+"    Dieser symbolische Name verweist auf einen Revisionsidentifikator. "
+"Namen\n"
+"    von Marken dürfen das Zeichen \":\" nicht enthalten.\n"
+"\n"
+"    Der reservierte Name \"tip\" ist eine spezielle Marke die immer auf die\n"
+"    jüngste Revision verweist.\n"
+"\n"
+"    Der reservierte Name \"null\" bezeichnet die null-Revision. Sie ist die\n"
+"    Revision eines leeren Projektarchivs und der Vorgänger der Version 0.\n"
+"\n"
+"    Der reservierte Name \".\" bezeichnete die Vorgängerversion des\n"
+"    Arbeitsverzeichnisses. Falls kein Check-Out des Arbeitsverzeichnisses\n"
+"    vorliegt ist er äquivalent zu null. Falls eine nicht versionierte\n"
+"    Zusammenführung in Bearbeitung ist, bezeichnet \".\" die Revision des\n"
+"    ersten Vorgängers.\n"
+"    "
+
+msgid "Specifying Multiple Revisions"
+msgstr "Angabe Mehrerer Revisionen"
+
+
+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 ""
+"\n"
+"    Wenn Mercurial mehr als eine Revision annimmt, können sie\n"
+"    einzeln angegeben werden oder als topologisch kontinuierlicher\n"
+"    Bereich getrennt durch das \":\" Zeichen.\n"
+"\n"
+"    Die Syntax der Bereichs-Notation ist [ANFANG]:[ENDE], wobei ANFANG und\n"
+"    ENDE Revisions-Identifikatoren sind. Sowohl ANFANG als auch ENDE sind\n"
+"    optional. Sollte ANFANG nicht angegeben werden, wird standardmäßig die\n"
+"    die Revisionsnummer 0 angenommen. Wenn ENDE nicht angegeben wird, wird\n"
+"    standardmäßig tip genommen. Der Bereich \":\" bedeute daher\n"
+"    \"alle Revisionen\".\n"
+"\n"
+"    Wenn ANFANG größer als ENDE ist, werden die Revisionen in umgekehrter\n"
+"    Reihenfolge betrachtet.\n"
+"\n"
+"    Ein Bereich fungiert als geschlossenes Intervall . Das heißt, dass\n"
+"    der Bereich 3:5 die Revisionen 3, 4 und 5 enthält. Ebenso enthält der\n"
+"    Bereich 9:6 die Revisionen 9, 8, 7 und 6.\n"
+"    "
+
+msgid "Diff Formats"
+msgstr "Diff-Formate"
+
+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 "Nutzung von Vorlagen"
+
+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 seprators). For example,\n"
+"          \"foo/bar/baz\" becomes \"baz\" and \"foo/bar//\" becomes \"bar"
+"\".\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"
+"    - 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\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 "URL-Pfade"
+
+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 ""
+"\n"
+"    Gültige URLs haben folgende Form:\n"
+"\n"
+"      lokales/dateisystem/pfad (oder file://lokales/dateisystem/pfad)\n"
+"      http://[nutzer[:pass]@]host[:port]/[pfad]\n"
+"      https://[nutzer[:pass]@]host[:port]/[pfad]\n"
+"      ssh://[nutzer[:pass]@]host[:port]/[pfad]\n"
+"\n"
+"    Pfade im lokalen Dateisystem können auf ein Mercurial-Archiv oder\n"
+"    Bündeldateien verweisen (wie sie von 'hg bundle' oder\n"
+"    'hg incoming --bundle' erzeugt werden).\n"
+"\n"
+"    Ein optionaler Bezeichner nach # verweist auf einen bestimmten Zweig, "
+"Tag\n"
+"    oder Änderungssatz des anderen Projektarchivs.\n"
+"\n"
+"    Einige Funktionen, wie das Ausliefern an http:// und https:// URLs, "
+"sind\n"
+"    nur mögliche wenn diese Funktionen explizit auf dem entfernten\n"
+"    Mercurial-Server aktiviert sind.\n"
+"\n"
+"    Einige Hinweise zur Nutzung von SSH mit Mercurial:\n"
+"    - SSH benötigt einen nutzbaren Shell-Zugang auf der Zielmaschine und\n"
+"      eine Kopie von hg im Pfad der entfernten Maschine oder in der "
+"Konfiguration\n"
+"      remotecmd angegeben.\n"
+"    - Der Pfad ist standardmäßig relativ vom Home-Verzeichnis des "
+"entfernten\n"
+"      Nutzer. Nutze einen zusätzlichen Schrägstrich um einen absoluen Pfad\n"
+"      anzugeben:\n"
+"        ssh://example.com//tmp/repository\n"
+"    - Mercurial nutzt nicht eigene Kompressionsmechanismen über SSH:\n"
+"      Hier sollte man die Kompression über ~/.ssh/config aktivieren, z.B.:\n"
+"        Host *.mylocalnetwork.example.com\n"
+"          Compression no\n"
+"        Host *\n"
+"          Compression yes\n"
+"      Alternativ kann \"ssh -C\" als dein SSH-Befehl in der hgrc oder\n"
+"      mit der --ssh Befehlszeilenoption angegeben werden.\n"
+"\n"
+"    Diese URLs können alle in deiner hgrc als Aliase unter der Sektion\n"
+"    [paths] abgelegt werden:\n"
+"    [paths]\n"
+"    alias1 = URL1\n"
+"    alias2 = URL2\n"
+"    ...\n"
+"\n"
+"    Diese Aliase können dann bei jedem Befehl genutzt werden der URLs nutzt\n"
+"    (beispielsweise 'hg pull alias1' würde vom 'alias1' Pfad "
+"herunterladen).\n"
+"\n"
+"    Es gibt zwei besondere Pfad-Aliase, die standardmäßig genutzt\n"
+"    werden wenn einem Befehl keine URL übergeben wurde:\n"
+"\n"
+"    default:\n"
+"      Bei Erstellung eines Projektarchivs mit hg clone, sichert der clone\n"
+"      Befehl die Herkunft des Quellarchivs als 'default'-Pfad des neuen\n"
+"      Archivs. Dieser Pfad wird immer dann genutzt, wenn bei 'push' oder\n"
+"      'pull'-ähnlichen Befehlen der Pfad nicht angegeben wurde (auch bei\n"
+"      'incoming' oder 'outgoing').\n"
+"\n"
+"    default-push:\n"
+"      Der 'push'-Befehl sucht nach dem 'default-push'-Alias und zieht\n"
+"      diesen dem 'default'-Alias vor, wenn beide definiert sind.\n"
+"    "
+
+#, python-format
+msgid "destination directory: %s\n"
+msgstr "Zielverzeichnis: %s\n"
+
+#, python-format
+msgid "destination '%s' already exists"
+msgstr "Ziel '%s' existiert bereits"
+
+#, python-format
+msgid "destination '%s' is not empty"
+msgstr "Ziel %s ist nicht leer"
+
+msgid ""
+"src repository does not support revision lookup and so doesn't support clone "
+"by revision"
+msgstr ""
+"Quellarchiv unterstützt keine Revisions-Abfragen und lässt daher das Klonen "
+"bis zu einer Revision nicht zu"
+
+msgid "clone from remote to remote not supported"
+msgstr "Klonen von entferntem Archiv zu entferntem Archiv nicht möglich"
+
+msgid "updating working directory\n"
+msgstr "Aktualisiere Arbeitsverzeichnis\n"
+
+msgid "updated"
+msgstr "aktualisiert"
+
+msgid "merged"
+msgstr "zusammengeführt"
+
+msgid "removed"
+msgstr "entfernt"
+
+msgid "unresolved"
+msgstr "ungelöst"
+
+#, python-format
+msgid "%d files %s"
+msgstr "%d Dateien %s"
+
+msgid "use 'hg resolve' to retry unresolved file merges\n"
+msgstr "Verwende 'hg resolve', um die Zusammenführung erneut zu versuchen\n"
+
+msgid ""
+"use 'hg resolve' to retry unresolved file merges or 'hg up --clean' to "
+"abandon\n"
+msgstr ""
+"Nutze 'hg resolve', um nicht aufgelöste Zusammenführungen zu wiederholen "
+"oder\n"
+"'hg up --clean' um abzubrechen\n"
+
+msgid "(branch merge, don't forget to commit)\n"
+msgstr "(Zweig-Zusammenführung, vergesse nicht 'hg commit' auszuführen)\n"
+
+#, 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 "Angeforderte URL: '%s'\n"
+
+#, 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 "push fehlgeschlagen (Unerwartete Antwort)"
+
+#, python-format
+msgid "push failed: %s"
+msgstr "push fehlgeschlagen: %s"
+
+msgid "Python support for SSL and HTTPS is not installed"
+msgstr "Python Unterstützung für SSL und HTTPS ist nicht installiert"
+
+msgid "cannot create new http repository"
+msgstr "Kann neues HTTP-Projektarchiv nicht erzeugen"
+
+#, python-format
+msgid "%s: ignoring invalid syntax '%s'\n"
+msgstr "%s: Ignoriere ungültige Syntax '%s'\n"
+
+#, python-format
+msgid "skipping unreadable ignore file '%s': %s\n"
+msgstr "Überspringe nicht lesbares  ignore file '%s': %s\n"
+
+#, python-format
+msgid "repository %s not found"
+msgstr "Projektarchiv %s nicht gefunden"
+
+#, python-format
+msgid "repository %s already exists"
+msgstr "Projektarchiv %s existiert bereits"
+
+#, python-format
+msgid "requirement '%s' not supported"
+msgstr "Anforderung '%s' nicht unterstützt"
+
+#, python-format
+msgid "%r cannot be used in a tag name"
+msgstr "%r kann nicht als Name für tag genutzt werden"
+
+msgid "working copy of .hgtags is changed (please commit .hgtags manually)"
+msgstr ""
+"Arbeitskopie von .hgtags wurde geändert (Bitte .hgtags manuell versionieren)"
+
+#, python-format
+msgid "%s, line %s: %s\n"
+msgstr "%s, Zeile %s: %s\n"
+
+msgid "cannot parse entry"
+msgstr "Kann Eintrag nicht parsen"
+
+#, python-format
+msgid "node '%s' is not well formed"
+msgstr "Knoten '%s' ist fehlerhaft"
+
+#, python-format
+msgid "tag '%s' refers to unknown node"
+msgstr "Tag '%s' verweist auf unbekannten Knoten"
+
+#, python-format
+msgid "unknown revision '%s'"
+msgstr "Unbekannte Revision '%s'"
+
+#, python-format
+msgid "filtering %s through %s\n"
+msgstr "Filtere %s bis %s\n"
+
+msgid "journal already exists - run hg recover"
+msgstr "Journal existiert bereits - führe hg recover aus"
+
+msgid "rolling back interrupted transaction\n"
+msgstr "Setze unterbrochene Transaktion zurück\n"
+
+msgid "no interrupted transaction available\n"
+msgstr "Keine unterbrochene Transaktion vorhanden\n"
+
+msgid "rolling back last transaction\n"
+msgstr "Setze letzte Transaktion zurück\n"
+
+#, python-format
+msgid "Named branch could not be reset, current branch still is: %s\n"
+msgstr ""
+"Benannter Zweig konnte nicht zurückgesetzt werden, aktueller Zweig ist: %s\n"
+
+msgid "no rollback information available\n"
+msgstr "Keine rollback-Information verfügbar\n"
+
+#, python-format
+msgid "waiting for lock on %s held by %r\n"
+msgstr "Warte auf Sperre auf %s gehalten von %r\n"
+
+#, python-format
+msgid "repository %s"
+msgstr "Projektarchiv %s"
+
+#, python-format
+msgid "working directory of %s"
+msgstr "Arbeitsverzeichnis von %s"
+
+#, python-format
+msgid " %s: searching for copy revision for %s\n"
+msgstr " %s: Suche kopierte Revision für %s\n"
+
+#, python-format
+msgid " %s: copy %s:%s\n"
+msgstr " %s: kopiere %s:%s\n"
+
+msgid "cannot partially commit a merge (do not specify files or patterns)"
+msgstr ""
+"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 "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"
+
+#, 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: Dateien über 10MB können Speicher- und Performance-Probleme auslösen\n"
+"(Nutze 'hg revert %s' um die Datei zu entfernen)\n"
+
+#, python-format
+msgid "%s not added: only files and symlinks supported currently\n"
+msgstr ""
+"%s nicht hinzugefügt: Nur Dateien und symbolische Verknüpfungen werden\n"
+"zur Zeit unterstützt\n"
+
+#, python-format
+msgid "%s already tracked!\n"
+msgstr "%s ist bereits versioniert!\n"
+
+#, python-format
+msgid "%s not added!\n"
+msgstr "%s nicht hinzugefügt!\n"
+
+#, python-format
+msgid "%s still exists!\n"
+msgstr "%s existiert noch!\n"
+
+#, python-format
+msgid "%s not removed!\n"
+msgstr "%s nicht entfernt!\n"
+
+#, python-format
+msgid "copy failed: %s is not a file or a symbolic link\n"
+msgstr ""
+"Kopieren fehlgeschlagen: %s ist keine Datei oder eine symbolische "
+"Verknüpfung\n"
+
+msgid "searching for changes\n"
+msgstr "Suche nach Änderungen\n"
+
+#, python-format
+msgid "examining %s:%s\n"
+msgstr "Untersuche %s:%s\n"
+
+msgid "branch already found\n"
+msgstr "Zweig bereits gefunden\n"
+
+#, python-format
+msgid "found incomplete branch %s:%s\n"
+msgstr "Unvollständiger Zweig gefunden %s:%s\n"
+
+#, python-format
+msgid "found new changeset %s\n"
+msgstr "Neue Änderungssätze gefunden %s\n"
+
+#, python-format
+msgid "request %d: %s\n"
+msgstr "Angefordert %d: %s\n"
+
+#, python-format
+msgid "received %s:%s\n"
+msgstr "Erhalten %s:%s\n"
+
+#, python-format
+msgid "narrowing %d:%d %s\n"
+msgstr "Verringere %d:%d %s\n"
+
+#, python-format
+msgid "found new branch changeset %s\n"
+msgstr "Neue Zweigversion gefunden %s\n"
+
+#, python-format
+msgid "narrowed branch search to %s:%s\n"
+msgstr "Zweig-Suche verringert auf %s:%s\n"
+
+msgid "already have changeset "
+msgstr "Änderungssatz bereits vorhanden "
+
+msgid "warning: repository is unrelated\n"
+msgstr "Warnung: Projektarchiv steht in keinem Zusammenhang\n"
+
+msgid "repository is unrelated"
+msgstr "Projektarchiv steht in keinem Zusammenhang"
+
+msgid "found new changesets starting at "
+msgstr "Neue Änderungssätze gefunden ab"
+
+#, python-format
+msgid "%d total queries\n"
+msgstr "%d Abfragen insgesamt\n"
+
+msgid "common changesets up to "
+msgstr "Gemeinsame Änderungssätze bis zu"
+
+msgid "requesting all changes\n"
+msgstr "Fordere alle Änderungen an\n"
+
+msgid ""
+"Partial pull cannot be done because other repository doesn't support "
+"changegroupsubset."
+msgstr ""
+"Teilweise Holen kann nicht ausgeführt werden, da das andere Projektarchiv "
+"keine Teilmengen von Änderungsgruppen unterstützt."
+
+msgid "abort: push creates new remote heads!\n"
+msgstr "Abbruch: Ausliefern erzeugt neue entfernte Köpfe!\n"
+
+msgid "(did you forget to merge? use push -f to force)\n"
+msgstr "(Hast du vergessen zusammenzuführen? Nutze push -f um zu erzwingen)\n"
+
+msgid "note: unsynced remote changes!\n"
+msgstr "Hinweis: Nicht synchronisierte entfernte Änderungen!\n"
+
+#, python-format
+msgid "%d changesets found\n"
+msgstr "%d Änderungssätze gefunden\n"
+
+msgid "list of changesets:\n"
+msgstr "Liste der Änderungssätze:\n"
+
+#, python-format
+msgid "empty or missing revlog for %s"
+msgstr "Leeres oder fehlendes Revlog für %s"
+
+#, python-format
+msgid "add changeset %s\n"
+msgstr "Füge Änderungssatz hinzu %s\n"
+
+msgid "adding changesets\n"
+msgstr "Füge Änderungssätze hinzu\n"
+
+msgid "received changelog group is empty"
+msgstr "Erhaltene changelog group ist leer"
+
+msgid "adding manifests\n"
+msgstr "Füge Manifeste hinzu\n"
+
+msgid "adding file changes\n"
+msgstr "Füge Dateiänderungen hinzu\n"
+
+#, python-format
+msgid "adding %s revisions\n"
+msgstr "Füge %s Revisionen hinzu\n"
+
+msgid "received file revlog group is empty"
+msgstr "Erhaltene Datei revlog group ist leer"
+
+#, python-format
+msgid " (%+d heads)"
+msgstr " (%+d Köpfe)"
+
+#, python-format
+msgid "added %d changesets with %d changes to %d files%s\n"
+msgstr "Fügte %d Änderungssätze mit %d Änderungen zu %d Dateien%s hinzu\n"
+
+msgid "updating the branch cache\n"
+msgstr "Aktualisiere den Zweig-Cache\n"
+
+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 ""
+
+msgid "'\\n' and '\\r' disallowed in filenames"
+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 ""
+
+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"
+"(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]"
+msgstr ""
+
+msgid "c"
+msgstr ""
+
+#, python-format
+msgid ""
+"remote changed %s which local deleted\n"
+"use (c)hanged version or leave (d)eleted?"
+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 "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 %s).\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 "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 ""
+
+msgid "unmatched quotes"
+msgstr ""
+
+#, 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"
+msgstr ""
+
+#, python-format
+msgid "failed to truncate %s\n"
+msgstr ""
+
+msgid "rollback completed\n"
+msgstr ""
+
+#, 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"
+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 "enter a commit username:"
+msgstr "Gib einen Benutzernamen für die Version ein:"
+
+#, python-format
+msgid "No username found, using '%s' instead\n"
+msgstr "Kein Benutzername gefunden, nutze %s stattdessen\n"
+
+msgid "Please specify a username."
+msgstr "Gib einen Benutzernamen an."
+
+#, python-format
+msgid "username %s contains a newline\n"
+msgstr "Benutzername %s enthält einen Zeilenumbruch\n"
+
+msgid "unrecognized response\n"
+msgstr "Unbekannte Antwort\n"
+
+msgid "response expected"
+msgstr "Antwort erwartet"
+
+msgid "password: "
+msgstr "Passwort: "
+
+msgid "edit failed"
+msgstr "Bearbeiten fehlgeschlagen"
+
+msgid "http authorization required"
+msgstr "HTTP-Autorisation benötigt"
+
+msgid "http authorization required\n"
+msgstr "HTTP-Autorisation benötigt\n"
+
+#, python-format
+msgid "realm: %s\n"
+msgstr "Bereich: %s\n"
+
+#, python-format
+msgid "user: %s\n"
+msgstr "Benutzer: %s\n"
+
+msgid "user:"
+msgstr "Benutzer:"
+
+#, 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"
+
+#, python-format
+msgid "path contains illegal component: %s"
+msgstr "Pfad enthält illegalen Teil: %s"
+
+#, python-format
+msgid "path %r is inside repo %r"
+msgstr "Pfad %r ist innerhalb des Archivs %r"
+
+#, python-format
+msgid "path %r traverses symbolic link %r"
+msgstr "Pfad %r überschreitet symbolische Verknüpfung %r"
+
+msgid "Hardlinks not supported"
+msgstr "Hardlinks nicht unterstützt"
+
+#, python-format
+msgid "could not symlink to %r: %s"
+msgstr "Konnte symbolische Verknüpfung auf %r nicht erzeugen: %s"
+
+#, python-format
+msgid "invalid date: %r "
+msgstr "Ungültiges Datum: %r "
+
+#, python-format
+msgid "date exceeds 32 bits: %d"
+msgstr "Datum überschreitet 32 Bit: %d"
+
+#, python-format
+msgid "impossible time zone offset: %d"
+msgstr "Unmögliche Zeitzonen Verschiebung: %d"
+
+#, python-format
+msgid "invalid day spec: %s"
+msgstr "Ungültige Angabe des Tages: %s"
+
+#, 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 "%.0f Byte"
+
+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 ""
+
+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 "entpacke %s"
+
+#, 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/i18n/it.po	Sun Apr 26 11:35:53 2009 +0200
+++ b/i18n/it.po	Sun Apr 26 11:49:17 2009 +0200
@@ -5,14 +5,14 @@
 msgstr ""
 "Project-Id-Version: Mercurial\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-03-01 21:10+0100\n"
+"POT-Creation-Date: 2009-03-27 18:18+0100\n"
 "PO-Revision-Date: 2009-03-03 20:05+0100\n"
 "Last-Translator: Stefano Tortarolo <stefano.tortarolo@gmail.com>\n"
 "Language-Team: Italian <Italian>\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);"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
 #, python-format
 msgid " (default: %s)"
@@ -264,6 +264,8 @@
 "    the mercurial.strip method. This usually happens during\n"
 "    qpush and qpop"
 msgstr ""
+"Elimina i segnalibri se revisioni sono rimosse usando il metodo\n"
+"    mercurial.strip. Questo di norma succede durante qpush e qpop"
 
 msgid ""
 "Add a revision to the repository and\n"
@@ -282,6 +284,11 @@
 "    file.\n"
 "    "
 msgstr ""
+"Imposta il segnalibro corrente\n"
+"\n"
+"    Se l'utente fa l'update ad un segnalibro viene aggiornato il file\n"
+"    .hg/bookmarks.current\n"
+"    "
 
 msgid "force"
 msgstr "forza"
@@ -295,8 +302,8 @@
 msgid "rename a given bookmark"
 msgstr "rinomina un dato segnalibro"
 
-msgid "hg bookmarks [-f] [-d] [-m NAME] [-r NAME] [NAME]"
-msgstr "hg bookmarks [-f] [-d] [-m NOME] [-r NOME] [NOME]"
+msgid "hg bookmarks [-f] [-d] [-m NAME] [-r REV] [NAME]"
+msgstr "hg bookmarks [-f] [-d] [-m NOME] [-r REV] [NOME]"
 
 msgid ""
 "Bugzilla integration\n"
@@ -421,22 +428,22 @@
 msgstr ""
 
 msgid "support for bugzilla version 2.16."
-msgstr ""
+msgstr "supporto per la versione di bugzilla 2.16."
 
 #, python-format
 msgid "connecting to %s:%s as %s, password %s\n"
-msgstr ""
+msgstr "sto connettendomi a %s:%s come %s, password %s\n"
 
 msgid "run a query."
-msgstr ""
+msgstr "esegue una query."
 
 #, python-format
 msgid "query: %s %s\n"
-msgstr ""
+msgstr "query: %s %s\n"
 
 #, python-format
 msgid "failed query: %s %s\n"
-msgstr ""
+msgstr "query fallita: %s %s\n"
 
 msgid "get identity of longdesc field"
 msgstr ""
@@ -490,6 +497,9 @@
 "        bugzilla username and userid if so. If not, return default\n"
 "        bugzilla username and userid."
 msgstr ""
+"controlla se il committente è un utente registrato bugzilla. In tal\n"
+"        caso restituisce userid e username bugzilla. Altrimenti\n"
+"        restituisce userid e username bugzilla di default."
 
 #, python-format
 msgid "cannot find bugzilla user id for %s"
@@ -508,7 +518,7 @@
 msgstr "supporto per la serie di bugzilla 2.18."
 
 msgid "support for bugzilla 3.0 series."
-msgstr ""
+msgstr "sopporto per la serie di bugzilla 3.0."
 
 msgid ""
 "return object that knows how to talk to bugzilla version in\n"
@@ -517,7 +527,7 @@
 
 #, python-format
 msgid "bugzilla version %s not supported"
-msgstr ""
+msgstr "versione di bugzilla %s non supportata"
 
 msgid ""
 "find valid bug ids that are referred to in changeset\n"
@@ -526,7 +536,7 @@
 msgstr ""
 
 msgid "update bugzilla bug with reference to changeset."
-msgstr ""
+msgstr "aggiorna il bug bugzilla con riferimento al changeset."
 
 msgid ""
 "strip leading prefix of repo root and turn into\n"
@@ -538,6 +548,9 @@
 "details:\n"
 "\t{desc|tabindent}"
 msgstr ""
+"changeset {node|short} nel repository {root} si riferisce al bug {bug}.\n"
+"dettagli:\n"
+"\t{desc|tabindent}"
 
 msgid ""
 "add comment to bugzilla for each changeset that refers to a\n"
@@ -740,6 +753,7 @@
 "    - Monotone [mtn]\n"
 "    - GNU Arch [gnuarch]\n"
 "    - Bazaar [bzr]\n"
+"    - Perforce [p4]\n"
 "\n"
 "    Accepted destination formats [identifiers]:\n"
 "    - Mercurial [hg]\n"
@@ -806,8 +820,9 @@
 "        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=True          (boolean)\n"
-"        allow target to preserve source revision ID\n"
+"    --config convert.hg.saverev=False          (boolean)\n"
+"        store original revision ID in changeset (forces target IDs to "
+"change)\n"
 "    --config convert.hg.startrev=0            (hg revision identifier)\n"
 "        convert start revision and its descendants\n"
 "\n"
@@ -884,6 +899,23 @@
 "    --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 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"
+"        specify initial Perforce revision.\n"
+"\n"
+"\n"
 "    Mercurial Destination\n"
 "    ---------------------\n"
 "\n"
@@ -948,7 +980,7 @@
 msgstr "crea una nuova cache dei log cvs"
 
 msgid "set commit time fuzz in seconds"
-msgstr ""
+msgstr "imposta il lasso temporale del commit in secondi"
 
 msgid "specify cvsroot"
 msgstr "specifica la cvsroot"
@@ -1030,7 +1062,7 @@
 
 #, python-format
 msgid "spliced in %s as parents of %s\n"
-msgstr ""
+msgstr "inserito %s come genitore di %s\n"
 
 msgid "scanning source...\n"
 msgstr "sto effettuando la scansione della sorgente...\n"
@@ -1114,6 +1146,10 @@
 msgstr "la revisione deve essere seguita da una riga con la data"
 
 #, python-format
+msgid "found synthetic rev in %s: %r\n"
+msgstr "trovata revisione sintetica in %s: %r\n"
+
+#, python-format
 msgid "writing cvs log cache %s\n"
 msgstr "sto scrivendo la cache dei log cvs %s\n"
 
@@ -1124,6 +1160,9 @@
 msgid "creating changesets\n"
 msgstr "sto creando i changeset\n"
 
+msgid "synthetic changeset cannot have multiple parents"
+msgstr "changeset sintetici non possono avere genitori multipli"
+
 #, python-format
 msgid "%d changeset entries\n"
 msgstr "%d voci di changeset\n"
@@ -1167,6 +1206,8 @@
 msgid ""
 "tree analysis stopped because it points to an unregistered archive %s...\n"
 msgstr ""
+"analisi dell'albero interrotta in quanto punta ad un archivio non\n"
+"      registrato %s...\n"
 
 #, python-format
 msgid "applying revision %s...\n"
@@ -1231,6 +1272,12 @@
 msgid "copying file in renamed dir from '%s' to '%s'"
 msgstr ""
 
+msgid "reading p4 views\n"
+msgstr "sto leggendo le viste p4\n"
+
+msgid "collecting p4 changelists\n"
+msgstr "sto raccogliendo le changelist p4\n"
+
 msgid "Subversion python bindings could not be loaded"
 msgstr "Non è stato possibile caricare i binding python per Subversion"
 
@@ -1448,15 +1495,15 @@
 msgstr ""
 
 msgid "cannot specify --rev and --change at the same time"
-msgstr ""
+msgstr "impossibile specificare sia --rev sia --change"
 
 #, python-format
 msgid "running %r in %s\n"
-msgstr ""
+msgstr "sto eseguendo %r in %s\n"
 
 #, python-format
 msgid "file changed while diffing. Overwriting: %s (src: %s)\n"
-msgstr ""
+msgstr "file modificato durante il diff. Sovrascrivo: %s (sorgente: %s)\n"
 
 msgid "cleaning up temp directory\n"
 msgstr "sto ripulendo la directory temporanea\n"
@@ -1544,6 +1591,8 @@
 msgid ""
 "working dir not at branch tip (use \"hg update\" to check out branch tip)"
 msgstr ""
+"directory di lavoro non al tip della branch (usa \"hg update\" per\n"
+"      fare il check out della tip della branch)"
 
 msgid "outstanding uncommitted merge"
 msgstr "c'è un merge in sospeso di cui non si è effettuato il commit"
@@ -1557,6 +1606,8 @@
 msgid ""
 "multiple heads in this branch (use \"hg heads .\" and \"hg merge\" to merge)"
 msgstr ""
+"head multiple in questa branch (usa \"hg heads .\" e \"hg merge\"\n"
+"      per fare il merge"
 
 #, python-format
 msgid "pulling from %s\n"
@@ -1808,7 +1859,7 @@
 
 #, python-format
 msgid "comparing with %s\n"
-msgstr ""
+msgstr "sto confrontando con %s\n"
 
 msgid "no changes found\n"
 msgstr "nessuna modifica trovata\n"
@@ -3422,7 +3473,7 @@
 msgstr "disapplica tutte le patch"
 
 msgid "queue name to pop"
-msgstr ""
+msgstr "nome della coda da disapplicare"
 
 msgid "forget any local changes"
 msgstr "dimentica ogni modifica locale"
@@ -3443,7 +3494,7 @@
 msgstr "effettua il merge da un'altra coda"
 
 msgid "merge queue name"
-msgstr ""
+msgstr "nome della coda del merge"
 
 msgid "hg qpush [-f] [-l] [-a] [-m] [-n NAME] [PATCH | INDEX]"
 msgstr "hg qpush [-f] [-l] [-a] [-m] [-n NOME] [PATCH | INDICE]"
@@ -3470,7 +3521,7 @@
 msgstr "hg qrename PATCH1 [PATCH2]"
 
 msgid "delete save entry"
-msgstr ""
+msgstr "elimina la voce salvata"
 
 msgid "update queue working dir"
 msgstr "aggiorna la directory di lavoro della coda"
@@ -3500,7 +3551,7 @@
 msgstr "elenca tutte le guardie nel file series"
 
 msgid "pop to before first guarded applied patch"
-msgstr ""
+msgstr "disapplica fino alla prima patch con guardia applicata"
 
 msgid "pop, then reapply patches"
 msgstr "disapplica e poi riapplica le patch"
@@ -3603,16 +3654,16 @@
 msgstr ""
 
 msgid "email notification class."
-msgstr ""
+msgstr "classe per la notifica via email."
 
 msgid "strip leading slashes from local path, turn into web-safe path."
 msgstr ""
 
 msgid "try to clean up email addresses."
-msgstr ""
+msgstr "prova a pulire gli indirizzi email."
 
 msgid "return list of email addresses of subscribers to this repo."
-msgstr ""
+msgstr "restituisce gli indirizzi email dei sottoscritti a questo repository"
 
 msgid "format one changeset."
 msgstr "formatta un changeset."
@@ -3630,7 +3681,7 @@
 
 #, python-format
 msgid "notify: sending %d subscribers %d changes\n"
-msgstr ""
+msgstr "notify: sto inviando a %d sottoscritti %d modifiche\n"
 
 #, python-format
 msgid ""
@@ -3638,6 +3689,9 @@
 "diffs (truncated from %d to %d lines):\n"
 "\n"
 msgstr ""
+"\n"
+"diff (troncati da %d linee a %d):\n"
+"\n"
 
 #, python-format
 msgid ""
@@ -3645,6 +3699,9 @@
 "diffs (%d lines):\n"
 "\n"
 msgstr ""
+"\n"
+"diff (%d linee):\n"
+"\n"
 
 msgid ""
 "send email notifications to interested subscribers.\n"
@@ -3792,7 +3849,7 @@
 msgstr "Si prega di inserire un valore valido.\n"
 
 msgid "does the diffstat above look okay? "
-msgstr ""
+msgstr "il diffstat di sopra sembra corretto? "
 
 msgid "diffstat rejected"
 msgstr "diffstat rifiutato"
@@ -3878,13 +3935,13 @@
 msgstr "Sommario finale:\n"
 
 msgid "Displaying "
-msgstr "Sto mostrando"
+msgstr "Sto mostrando "
 
 msgid "Writing "
-msgstr "Sto scrivendo"
+msgstr "Sto scrivendo "
 
 msgid "Sending "
-msgstr "Sto inviando"
+msgstr "Sto inviando "
 
 msgid "send patches as attachments"
 msgstr "invia patch come allegati"
@@ -3931,6 +3988,9 @@
 msgid "send changes not in target as a binary bundle"
 msgstr "invia le modifiche non in target come bundle binario"
 
+msgid "file name of the bundle attachment"
+msgstr "nome del file dell'allegato bundle"
+
 msgid "a revision to send"
 msgstr "una revisione da inviare"
 
@@ -4332,7 +4392,7 @@
 msgstr "?"
 
 msgid "y - record this change"
-msgstr ""
+msgstr "y - registra questa modifica"
 
 msgid "s"
 msgstr "s"
@@ -4361,7 +4421,7 @@
 
 #, python-format
 msgid "record this change to %r?"
-msgstr ""
+msgstr "registrare questa modifica a %r?"
 
 msgid ""
 "interactively select changes to commit\n"
@@ -4845,8 +4905,12 @@
 msgstr "%s: impossibile copiare - %s\n"
 
 #, python-format
-msgid "%s %s to %s\n"
-msgstr "%s %s in %s\n"
+msgid "moving %s to %s\n"
+msgstr "sto spostando %s in %s\n"
+
+#, python-format
+msgid "copying %s to %s\n"
+msgstr "sto copiando %s in %s\n"
 
 #, python-format
 msgid "%s has not been committed yet, so no copy data will be stored for %s.\n"
@@ -4886,7 +4950,7 @@
 
 #, python-format
 msgid "parent:      %d:%s\n"
-msgstr "genitore:      %d:%s\n"
+msgstr "genitore:    %d:%s\n"
 
 #, python-format
 msgid "manifest:    %d:%s\n"
@@ -5228,7 +5292,8 @@
 msgstr "resetto la directory di lavoro alla branch %s\n"
 
 msgid "a branch of the same name already exists (use --force to override)"
-msgstr "una branch con lo stesso nome esiste già (usare --force per sovrascrivere)"
+msgstr ""
+"una branch con lo stesso nome esiste già (usare --force per sovrascrivere)"
 
 #, python-format
 msgid "marked working directory as branch %s\n"
@@ -6096,6 +6161,11 @@
 "        parses the manifest if linkrev != changerev.\n"
 "        Returns rename info for fn at changerev rev."
 msgstr ""
+"cerca tutte le rinomine di un file (fino a endrev) la prima volta che\n"
+"        il file viene fornito. Indicizza su changerev e parsifica solo\n"
+"        il manifesto se linkrev != changerev.\n"
+"        Restituisce le informazioni sulle rinomine per fn alla\n"
+"        revisione changerev."
 
 msgid ""
 "output the current or given revision of the project manifest\n"
@@ -6130,23 +6200,25 @@
 
 #, python-format
 msgid "branch '%s' has %d heads - please merge with an explicit rev"
-msgstr ""
+msgstr "la branch '%s' ha %d head - fare il merge con una revisione esplicita"
 
 #, python-format
 msgid "branch '%s' has one head - please merge with an explicit rev"
-msgstr ""
+msgstr "la branch '%s' ha una head - fare il merge con una revisione esplicita"
 
 msgid "there is nothing to merge"
-msgstr ""
+msgstr "non c'è nulla di cui fare il merge"
 
 #, python-format
 msgid "%s - use \"hg update\" instead"
-msgstr ""
+msgstr "%s - invece usare \"hg update\""
 
 msgid ""
 "working dir not at a head rev - use \"hg update\" or merge with an explicit "
 "rev"
 msgstr ""
+"la directory di lavoro non è una revisione head - usare \"hg update\"\n"
+"o fare il merge con una revisione esplicita"
 
 msgid ""
 "show changesets not found in destination\n"
@@ -6216,10 +6288,10 @@
 msgstr ""
 
 msgid "(run 'hg heads' to see heads, 'hg merge' to merge)\n"
-msgstr ""
+msgstr "(esegui 'hg heads' per vedere le head, 'hg merge' per fare un merge)\n"
 
 msgid "(run 'hg update' to get a working copy)\n"
-msgstr ""
+msgstr "(esegui 'hg update' per ottenere una copia funzionante)\n"
 
 msgid ""
 "pull changes from the specified source\n"
@@ -6233,12 +6305,15 @@
 "    If SOURCE is omitted, the 'default' path will be used.\n"
 "    See 'hg help urls' for more information.\n"
 "    "
-msgstr "effettua il pull delle modifiche dalla sorgente specificata\n"
+msgstr ""
+"effettua il pull delle modifiche dalla sorgente specificata\n"
 "\n"
 "    Effettua il pull di modifiche da un repository remoto in uno locale.\n"
 "\n"
-"    Questo trova tutte le modifiche dal repository al percorso o URL specificato\n"
-"    e le aggiunge al repository locale. Di default non aggiorna la copia del\n"
+"    Questo trova tutte le modifiche dal repository al percorso o URL "
+"specificato\n"
+"    e le aggiunge al repository locale. Di default non aggiorna la copia "
+"del\n"
 "    progetto nella directory di lavoro.\n"
 "\n"
 "    Se SOURCE viene omesso, verrà usato il percorso 'default'.\n"
@@ -6287,7 +6362,8 @@
 "    numerdo di head remote. Questo generalmente indica che il client ha\n"
 "    dimenticato di fare pull e merge prima del push.\n"
 "\n"
-"    Se si usa -r, si farà il push del changeset dato e tutti i suoi antenati\n"
+"    Se si usa -r, si farà il push del changeset dato e tutti i suoi "
+"antenati\n"
 "    verso il repository remoto.\n"
 "\n"
 "    Vedere il testo di aiuto per gli url per importanti dettagli sugli\n"
@@ -6860,15 +6936,15 @@
 
 msgid ""
 "\n"
-"Copyright (C) 2005-2008 Matt Mackall <mpm@selenic.com> and others\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 ""
 "\n"
-"Copyright (C) 2005-2008 Matt Mackall <mpm@selenic.com> e altri\n"
-"Questo è software libero; vedere i sorgenti per le condizioni di copia. Non "
-"c'è alcuna garanzia;\n"
-"neppure di COMMERCIABILITÀ o IDONEITÀ AD UNO SCOPO PARTICOLARE.\n"
+"Copyright (C) 2005-2009 Matt Mackall <mpm@selenic.com> e altri\n"
+"Questo è software libero; vedere i sorgenti per le condizioni di copia.\n"
+"Non c'è alcuna garanzia; neppure di COMMERCIABILITÀ o IDONEITÀ AD UNO\n"
+"SCOPO PARTICOLARE.\n"
 
 msgid "repository root directory or symbolic path name"
 msgstr "directory radice del repository o nome del percorso simbolico"
@@ -7127,6 +7203,9 @@
 msgid "[INDEX] REV1 REV2"
 msgstr "[INDICE] REV1 REV2"
 
+msgid "[COMMAND]"
+msgstr "[COMANDO]"
+
 msgid "show the command options"
 msgstr "mostra le opzioni dei comandi"
 
@@ -7908,7 +7987,7 @@
 "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"
-"    exutable's name if it's frozen, or an executable named '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"
 "    Windows) is searched.\n"
 "\n"
@@ -7992,7 +8071,7 @@
 "    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"
+"    integers are treated as topological 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"
@@ -8115,6 +8194,8 @@
 "          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 format:\n"
+"          \"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"
@@ -8281,6 +8362,13 @@
 msgid "use 'hg resolve' to retry unresolved file merges\n"
 msgstr "usa 'hg resolve' per riprovare i merge sui file non risolti\n"
 
+msgid ""
+"use 'hg resolve' to retry unresolved file merges or 'hg up --clean' to "
+"abandon\n"
+msgstr ""
+"usa 'hg resolve' per riprovare i merge sui file non risolti o\n"
+"'hg up --clean' per abbandonare\n"
+
 msgid "(branch merge, don't forget to commit)\n"
 msgstr "(merge su branch, non dimenticare di effettuare il commit)\n"
 
@@ -8832,10 +8920,6 @@
 msgstr "sto ottenendo %s\n"
 
 #, python-format
-msgid "moving %s to %s\n"
-msgstr "sto spostando %s in %s\n"
-
-#, python-format
 msgid "getting %s to %s\n"
 msgstr "sto ottenendo %s in %s\n"
 
@@ -8945,6 +9029,21 @@
 msgstr ""
 
 #, python-format
+msgid "exited with status %d"
+msgstr "uscito con status %d"
+
+#, python-format
+msgid "killed by signal %d"
+msgstr "ucciso dal segnale %d"
+
+#, python-format
+msgid "stopped by signal %d"
+msgstr "terminato dal segnale %d"
+
+msgid "invalid exit code"
+msgstr "codice d'uscita non valido"
+
+#, python-format
 msgid "saving bundle to %s\n"
 msgstr "sto salvando il bundle in %s\n"
 
@@ -9196,25 +9295,6 @@
 msgid "Hardlinks not supported"
 msgstr "Hardlink non supportati"
 
-msgid "user name not available - set USERNAME environment variable"
-msgstr ""
-"nome utente non disponibile - impostare la variabile d'ambiente USERNAME"
-
-#, python-format
-msgid "exited with status %d"
-msgstr "uscito con status %d"
-
-#, python-format
-msgid "killed by signal %d"
-msgstr "ucciso dal segnale %d"
-
-#, python-format
-msgid "stopped by signal %d"
-msgstr "terminato dal segnale %d"
-
-msgid "invalid exit code"
-msgstr "codice d'uscita non valido"
-
 #, python-format
 msgid "could not symlink to %r: %s"
 msgstr "impossibile creare un link simbolico a %r: %s"
@@ -9365,7 +9445,11 @@
 
 #, python-format
 msgid "cannot decode filename '%s'"
-msgstr ""
+msgstr "impossibile decodificare il nome del file '%s'"
+
+#, python-format
+msgid "broken revlog! (%s)"
+msgstr "revlog danneggiato! (%s)"
 
 msgid "missing revlog!"
 msgstr "revlog mancante!"
@@ -9417,3 +9501,10 @@
 #, python-format
 msgid "(first damaged changeset appears to be %d)\n"
 msgstr "(il primo changeset danneggiato sembra essere %d)\n"
+
+msgid "user name not available - set USERNAME environment variable"
+msgstr ""
+"nome utente non disponibile - impostare la variabile d'ambiente USERNAME"
+
+#~ msgid "%s %s to %s\n"
+#~ msgstr "%s %s in %s\n"
--- a/i18n/ja.po	Sun Apr 26 11:35:53 2009 +0200
+++ b/i18n/ja.po	Sun Apr 26 11:49:17 2009 +0200
@@ -3,7 +3,26 @@
 #
 # Copyright (C) 2009 the Mercurial team
 #
-# Translation dictionary:
+# ========================================
+# 【翻訳作業手順】
+#
+#     ※ 必要に応じて 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
+#
+#     ※ 翻訳成果の公開
+#
+# ========================================
+# 【翻訳用語集】
 #
 # Distributed SCM       分散構成管理ツール
 #
@@ -53,13 +72,14 @@
 # summary               要約(情報)
 # tag                   タグ
 # working directory     作業領域
+# ========================================
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: Mercurial\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-21 01:58+0900\n"
-"PO-Revision-Date: 2009-02-21 02:00+0900\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"
 "Language-Team: Japanese\n"
 "MIME-Version: 1.0\n"
@@ -281,7 +301,7 @@
 msgid "rename a given bookmark"
 msgstr ""
 
-msgid "hg bookmarks [-d] [-m NAME] [-r NAME] [NAME]"
+msgid "hg bookmarks [-f] [-d] [-m NAME] [-r REV] [NAME]"
 msgstr ""
 
 msgid ""
@@ -726,6 +746,7 @@
 "    - Monotone [mtn]\n"
 "    - GNU Arch [gnuarch]\n"
 "    - Bazaar [bzr]\n"
+"    - Perforce [p4]\n"
 "\n"
 "    Accepted destination formats [identifiers]:\n"
 "    - Mercurial [hg]\n"
@@ -792,8 +813,9 @@
 "        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=True          (boolean)\n"
-"        allow target to preserve source revision ID\n"
+"    --config convert.hg.saverev=False          (boolean)\n"
+"        store original revision ID in changeset (forces target IDs to "
+"change)\n"
 "    --config convert.hg.startrev=0            (hg revision identifier)\n"
 "        convert start revision and its descendants\n"
 "\n"
@@ -870,6 +892,23 @@
 "    --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 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"
+"        specify initial Perforce revision.\n"
+"\n"
+"\n"
 "    Mercurial Destination\n"
 "    ---------------------\n"
 "\n"
@@ -1217,6 +1256,12 @@
 msgid "copying file in renamed dir 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 ""
 
@@ -3655,7 +3700,7 @@
 "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, i.e. with mutt:\n"
+"UNIX mbox files, e.g. with mutt:\n"
 "\n"
 "  % mutt -R -f mbox\n"
 "\n"
@@ -3773,7 +3818,7 @@
 msgid "send patches as inline attachments"
 msgstr ""
 
-msgid "email addresses of blind copy recipients"
+msgid "email addresses of blind carbon copy recipients"
 msgstr ""
 
 msgid "email addresses of copy recipients"
@@ -4799,7 +4844,7 @@
 "    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 in the repository.\n"
+"    If no names are given, add all files to the repository.\n"
 "    "
 msgstr ""
 "指定されたファイルを次回コミットから構成管理に追加登録\n"
@@ -4957,7 +5002,7 @@
 "    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 for a normal\n"
+"    hand. The result of this merge is not committed, as with a normal\n"
 "    merge.\n"
 "\n"
 "    See 'hg help dates' for a list of formats valid for -d/--date.\n"
@@ -5042,8 +5087,7 @@
 "exit\n"
 "    status is 0 the revision is marked as good, 125 - skipped, 127 (command "
 "not\n"
-"    found) - bisection will be aborted and any other status bigger than 0 "
-"will\n"
+"    found) - bisection will be aborted; any other status bigger than 0 will\n"
 "    mark revision as bad.\n"
 "    "
 msgstr ""
@@ -5171,7 +5215,7 @@
 "create a changegroup file\n"
 "\n"
 "    Generate a compressed changegroup file collecting changesets not\n"
-"    found in the other repository.\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"
@@ -5344,7 +5388,7 @@
 "    file names or -I/-X filters.\n"
 "\n"
 "    If no commit message is specified, the configured editor is started to\n"
-"    enter a message.\n"
+"    prompt you for a message.\n"
 "\n"
 "    See 'hg help dates' for a list of formats valid for -d/--date.\n"
 "    "
@@ -5359,9 +5403,8 @@
 "    \"hg merge\" 結果のコミットの場合、ファイル名ないし -I/-X オプションの\n"
 "    いずれも指定しないでください。\n"
 "\n"
-"    コミットメッセージが指定されない場合、メッセージ入力のためのプログラム"
-"が\n"
-"    設定に従って起動されます。\n"
+"    コミットメッセージが指定されない場合、設定に従ってメッセージ入力用の\n"
+"    プログラムが起動されます。\n"
 "\n"
 "    -d/--date への指定に関しては、'hg help dates' を参照してください。\n"
 "    "
@@ -5378,13 +5421,13 @@
 "\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"
-"    there can only be one source.\n"
+"    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"
 "    operation is recorded, but no copying is performed.\n"
 "\n"
-"    This command takes effect in the next commit. To undo a copy\n"
+"    This command takes effect with the next commit. To undo a copy\n"
 "    before that, see hg revert.\n"
 "    "
 msgstr ""
@@ -5603,7 +5646,7 @@
 "    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"
+"    format. For more information, read hg help diffs.\n"
 "    "
 msgstr ""
 "作業領域全体(ないし指定ファイル)の差分抽出\n"
@@ -5895,8 +5938,7 @@
 "\n"
 "    パス指定有りでの起動の場合は、他のリポジトリを参照します。\n"
 "\n"
-"    本コマンドの出力する要約情報は、1つないし2つの親リビジョンのハッシュ値"
-"を\n"
+"    本コマンドの出力する要約情報は、1つないし2つの親リビジョンハッシュ値を\n"
 "    使用して、作業領域の状態を識別します。ハッシュ値の後ろには、作業領域に\n"
 "    未コミットの変更がある場合は \"+\"、当該リビジョンに付いているタグの\n"
 "    一覧、default 以外のブランチの場合にはブランチ名が続きます。\n"
@@ -6056,12 +6098,10 @@
 "    持つファイルを特定します。\n"
 "\n"
 "    特に指定が無い場合、本コマンドは構成管理対象となる作業領域中の\n"
-"    全ファイルを検索対象とします。現ディレクトリとそのサブディレクトリのみ"
-"を\n"
+"    全ファイルを検索対象とします。現ディレクトリとサブディレクトリのみを\n"
 "    検索対象とするには、\"--include .\" を使用してください。\n"
 "\n"
-"    パターン指定が無い場合、本コマンドは全ファイルのファイル名を表示しま"
-"す。\n"
+"    パターン指定が無い場合、本コマンドは全てのファイル名を表示します。\n"
 "\n"
 "    本コマンドの出力を \"xargs\" コマンドへと渡す場合、本コマンドと\n"
 "    \"xargs\" コマンドの両方への \"-0\" オプション指定をお勧めします。\n"
@@ -6093,8 +6133,8 @@
 "    files and full commit message is shown.\n"
 "\n"
 "    NOTE: log -p may generate unexpected diff output for merge\n"
-"    changesets, as it will compare the merge changeset against its\n"
-"    first parent only. Also, the files: list will only reflect files\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"
 "    "
@@ -6104,11 +6144,9 @@
 "    特定のファイルないしリポジトリ全体の変更履歴を表示します。\n"
 "\n"
 "    ファイルの履歴表示では、改名や複製における元ファイルにまでさかのぼった\n"
-"    履歴は表示しません。元ファイルの履歴までさかのぼる場合には、ファイル名"
-"と\n"
+"    履歴は表示しません。元ファイルの履歴までさかのぼる場合は、ファイル名と\n"
 "    一緒に -f/--follow オプションを指定してください。--follow 指定の際に\n"
-"    ファイル名を指定しない場合は、開始リビジョンの先祖ないし子孫のリビジョ"
-"ン\n"
+"    ファイル名を指定しない場合は、開始リビジョンの先祖ないし子孫リビジョン\n"
 "    のみを表示します。--follow-first 指定は、マージリビジョンにおいて\n"
 "    第1親の履歴のみをさかのぼります。\n"
 "\n"
@@ -6119,9 +6157,8 @@
 "    -d/--date への指定に関しては、'hg help dates' を参照してください。\n"
 "\n"
 "    特に指定が無い場合、本コマンドは以下の情報を出力します:\n"
-"    リビジョン番号、ハッシュID、タグ、(リビジョン番号の離れた)親リビジョ"
-"ン、\n"
-"    作成者、作成日時およびコミットログの1行目。\n"
+"    リビジョン番号、ハッシュID、タグ、(リビジョン番号の離れた),\n"
+"    親リビジョン、作成者、作成日時およびコミットログの1行目。\n"
 "    -v/--verbose が指定された場合、変更対象ファイル一覧と、コミットログの\n"
 "    全文が表示されます。\n"
 "\n"
@@ -6478,10 +6515,10 @@
 "    a file, there can only be one source.\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 --after, the\n"
 "    operation is recorded, but no copying is performed.\n"
 "\n"
-"    This command takes effect in the next commit. To undo a rename\n"
+"    This command takes effect at the next commit. To undo a rename\n"
 "    before that, see hg revert.\n"
 "    "
 msgstr ""
@@ -6989,7 +7026,7 @@
 
 msgid ""
 "\n"
-"Copyright (C) 2005-2008 Matt Mackall <mpm@selenic.com> and others\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 ""
@@ -7951,9 +7988,9 @@
 "\n"
 "    The log command also accepts date ranges:\n"
 "\n"
-"    \"<{date}\" - on or before a given date\n"
-"    \">{date}\" - on or after a given date\n"
-"    \"{date} to {date}\" - a date range, inclusive\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 ""
@@ -8007,16 +8044,16 @@
 "\n"
 "    Alternate pattern notations must be specified explicitly.\n"
 "\n"
-"    To use a plain path name without any pattern matching, start a\n"
-"    name with \"path:\".  These path names must match completely, from\n"
-"    the root of the current repository.\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 match\n"
-"    files ending in \".c\" in the current directory only.\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"
+"    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"
@@ -8031,11 +8068,11 @@
 "\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 the current directory, or\n"
-"                   any subdirectory\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 the directory foo, or any\n"
-"                   subdirectory\n"
+"    foo/**.c       any name ending in \".c\" in any subdirectory of foo\n"
+"                   including itself.\n"
 "\n"
 "    Regexp examples:\n"
 "\n"
@@ -8095,11 +8132,13 @@
 "\n"
 "HG::\n"
 "    Path to the 'hg' executable, automatically passed when running hooks,\n"
-"    extensions or external tools. If unset or empty, an executable named\n"
-"    'hg' (with com/exe/bat/cmd extension on Windows) is searched.\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"
+"    Windows) is searched.\n"
 "\n"
 "HGEDITOR::\n"
-"    This is the name of the editor to use when committing. See EDITOR.\n"
+"    This is the name of the editor to run when committing. See EDITOR.\n"
 "\n"
 "    (deprecated, use .hgrc)\n"
 "\n"
@@ -8111,8 +8150,8 @@
 "\n"
 "HGENCODINGMODE::\n"
 "    This sets Mercurial's behavior for handling unknown characters\n"
-"    while transcoding user inputs. The default is \"strict\", which\n"
-"    causes Mercurial to abort if it can't translate a character. Other\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"
@@ -8125,26 +8164,32 @@
 "    (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 .hg/hgrc of\n"
-"    current repository is read.\n"
-"\n"
-"    For each element in path, if a directory, all entries in directory\n"
-"    ending with \".rc\" are added to path.  Else, element itself is\n"
-"    added to path.\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 directories ending with .rc are added\n"
+"    * otherwise, the directory itself will be added\n"
 "\n"
 "HGUSER::\n"
-"    This is the string used for the author of a commit.\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"
-"    If HGUSER is not set, this will be used as the author for a commit.\n"
+"    May be used as the author of a commit; see HGUSER.\n"
 "\n"
 "LOGNAME::\n"
-"    If neither HGUSER nor EMAIL is set, LOGNAME will be used (with\n"
-"    '@hostname' appended) as the author value for a commit.\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"
@@ -8159,14 +8204,16 @@
 "\n"
 "PYTHONPATH::\n"
 "    This is used by Python to find imported modules and may need to be set\n"
-"    appropriately if Mercurial is not installed system-wide.\n"
+"    appropriately if this Mercurial is not installed system-wide.\n"
 "    "
 msgstr ""
 "\n"
 "HG::\n"
 "    'hg' コマンドへのパス。フック/エクステンションないし外部ツールの起動の\n"
-"    際に自動的に設定されます。未設定や空の場合は、'hg' という名前の実行可能\n"
-"    ファイルが検索されます(Windows の場合 com/exe/bat/cmd 等の拡張子付き)。\n"
+"    際に自動的に設定されます。未設定や空の場合は、frozen 形式の\n"
+"    hg 実行可能ファイルの名前か設定されるか、'hg' という名前の実行可能\n"
+"    ファイルが検索されます(Windows の場合、PATHEXT 環境変数に設定された\n"
+"    COM/EXE/BAT/CMD 等の拡張子付き)。\n"
 "\n"
 "HGEDITOR::\n"
 "    コミットの際のメッセージ入力を行うためのエディタの名前。EDITOR 環境変数\n"
@@ -8203,22 +8250,29 @@
 "    読み込み先から読み込まれます。空の値が設定されている場合、\n"
 "    現リポジトリの .hg/hgrc のみが読み込まれます。\n"
 "\n"
-"    指定された一覧の各要素に対して、ディレクトリ指定なら当該ディレクトリ\n"
-"    配下の \".rc\" で終わる名前のファイルが、ファイル指定の場合はその\n"
-"    ファイル自身が、読み込み対象となります。\n"
+"    指定された一覧の各要素に対して、以下のように振舞います:\n"
+"    * ディレクトリなら、配下の \".rc\" で終わる名前のファイルを読み込む\n"
+"    * ファイルなら、そのファイル自身を読み込む\n"
 "\n"
 "HGUSER::\n"
 "    チェンジセット作成者としてコミット時に記録する名前の指定。\n"
+"    作成者名として採用される値の決定順序は以下の通りです。\n"
+"\n"
+"    * HGUSER 環境変数値(推奨されません)\n"
+"    * (HGRCPATH 環境変数で指定される)設定ファイル中の設定\n"
+"    * EMAIL 環境変数値\n"
+"    * 対話的な入力\n"
+"    * LOGNAME 環境変数値('@hostname' が付与されます)\n"
 "\n"
 "    (推奨されない環境変数。設定ファイル経由で指定してください。)\n"
 "\n"
 "EMAIL::\n"
-"    HGUSER 環境変数が設定されていない場合、チェンジセット作成者として\n"
-"    コミット時にこの環境変数値が記録されます。\n"
+"    チェンジセット作成者としてこの環境変数値が記録される可能性があります。\n"
+"    詳細は HGUSER の記述を参照してください。\n"
 "\n"
 "LOGNAME::\n"
-"    HGUSER も EMAIL も共に設定されていない場合、チェンジセット作成者として\n"
-"    コミット時に('@hostname' を追加した)この環境変数値が記録されます。\n"
+"    チェンジセット作成者としてこの環境変数値が記録される可能性があります。\n"
+"    詳細は HGUSER の記述を参照してください。\n"
 "\n"
 "VISUAL::\n"
 "    コミット時のメッセージを編集するエディタ名の指定。EDITOR 環境変数\n"
@@ -8242,12 +8296,14 @@
 
 msgid ""
 "\n"
-"    Mercurial accepts several notations for identifying individual\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 offsets from the tip, with -1 denoting the\n"
-"    tip.\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"
 "\n"
 "    A 40-digit hexadecimal string is treated as a unique revision\n"
 "    identifier.\n"
@@ -8255,7 +8311,7 @@
 "    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 one full-length identifier.\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"
@@ -8276,14 +8332,16 @@
 "\n"
 "    Mercurial は、個々のリビジョンを識別する記法を幾つか用意しています。\n"
 "\n"
-"    整数値は「リビジョン番号」とみなされます。負値は、tip からの距離を\n"
-"    表します(-1 は tip を表します)。\n"
+"    整数値は、「リビジョン番号」とみなされます。負値は、tip からの距離を\n"
+"    表し、-1 は tip 自身を表します。負値の指定は、手元のリポジトリ中の\n"
+"    履歴遷移を把握している際に、入力を省力化したい場合にのみ有効です。\n"
+"    負値の利用はあまりお勧めできません。\n"
 "\n"
 "    40桁の16進文字列は、一意な「リビジョン識別子」とみなされます。\n"
 "\n"
 "    40桁未満の16進文字列は、一意な「リビジョン識別子」の短縮形式と\n"
-"    みなされます。短縮形式の識別子は、唯一の完全長の識別子と前方一致する\n"
-"    場合にのみ有効です。\n"
+"    みなされます。短縮形式の識別子は、厳密に1つの完全長の識別子とだけ\n"
+"    前方一致する場合にのみ有効です。\n"
 "\n"
 "    それ以外の文字列は、リビジョン識別子に関連付けられた「タグ名」と\n"
 "    みなされます。タグ名は \":\" を含んでいないかもしれない。\n"
@@ -8305,8 +8363,8 @@
 msgid ""
 "\n"
 "    When Mercurial accepts more than one revision, they may be\n"
-"    specified individually, or provided as a continuous range,\n"
-"    separated by the \":\" character.\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"
@@ -8318,7 +8376,7 @@
 "    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 4:2 gives 4, 3, and 2.\n"
+"    gives 3, 4 and 5. Similarly, a range of 9:6 gives 9, 8, 7, and 6.\n"
 "    "
 msgstr ""
 "\n"
@@ -8337,7 +8395,7 @@
 "    とみなされます。\n"
 "\n"
 "    範囲指定は \"閉区間\" とみなされます。つまり、3:5 という範囲指定は\n"
-"    3, 4, 5 の指定と等価です。同様に 4:2 という範囲指定は 4, 3, 2 の指定と\n"
+"    3, 4, 5 の指定と等価です。同様に 9:6 という指定は 9, 8, 7, 6 の指定と\n"
 "    等価です。\n"
 "    "
 
@@ -8353,14 +8411,14 @@
 "    While this standard format is often enough, it does not encode the\n"
 "    following information:\n"
 "\n"
-"     - executable status\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 there are very few tools which\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"
@@ -8384,15 +8442,15 @@
 "\n"
 "    この標準的な形式は概ね十分なのですが、以下のような情報は含まれません:\n"
 "\n"
-"     - 実行可否(権限設定)\n"
+"     - 実行可否および権限設定\n"
 "     - 複製/改名情報\n"
 "     - バイナリファイルの変更\n"
 "     - 空ファイルの作成/削除\n"
 "\n"
 "    Mercurial は、別の構成管理ツールである git に由来する拡張差分形式にも\n"
 "    対応しており、この形式は従来の差分形式の持つ先の制限を解消しています。\n"
-"    但し、殆どのツールが git 差分形式に対応していないため、Mercurial は\n"
-"    指定が無い場合はこの形式では出力しません。\n"
+"    但し、普及しているツールの幾つかが git 差分形式に対応していないため、\n"
+"    Mercurial は指定が無い場合はこの形式では出力しません。\n"
 "\n"
 "    つまり、Mercurial が(\"hg export\" 等で)生成した標準の差分形式は、\n"
 "    他のリポジトリに対して適用した場合、上述した情報の欠落があることから、\n"
@@ -8418,7 +8476,7 @@
 "style).\n"
 "\n"
 "    You can customize output for any \"log-like\" command: log, outgoing,\n"
-"    incoming, tip, parents, heads and glog are all template-enabled.\n"
+"    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"
@@ -8455,7 +8513,7 @@
 "    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 wanted output:\n"
+"    You can also use a chain of filters to get the desired output:\n"
 "\n"
 "       $ hg tip --template \"{date|isodate}\\n\"\n"
 "       2008-08-21 18:22 +0000\n"
@@ -8464,15 +8522,21 @@
 "\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 age for the given date.\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"
-"          basename. For example, \"foo/bar/baz\" becomes \"baz\".\n"
-"    - date: Date. Returns a date in a Unix date command format, including\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"
+"    - 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"
+"          Example: 'User <user@example.com>' becomes 'example.com'.\n"
 "    - email: Any text. Extracts the first string that looks like an email\n"
-"          address.\n"
+"          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"
@@ -8488,7 +8552,7 @@
 "          in email headers.\n"
 "    - short: Changeset hash. Returns the short form of a changeset hash,\n"
 "          i.e. a 12-byte hexadecimal string.\n"
-"    - shortdate: Date. Returns a date like \"2006-09-04\".\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"
@@ -8515,7 +8579,7 @@
 "    'hg incoming --bundle').\n"
 "\n"
 "    An optional identifier after # indicates a particular branch, tag,\n"
-"    or changeset to deal with in the remote repository.\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\n"
@@ -8547,13 +8611,14 @@
 "    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"
 "\n"
-"    Two path aliases are more important because they are used as defaults\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 saves\n"
-"      the location of the source repository as the 'default' path. This is\n"
-"      then used when you omit a path from the push and pull commands.\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"
 "\n"
 "    default-push:\n"
 "      The push command will look for a path named 'default-push', and\n"
@@ -8611,9 +8676,10 @@
 "    重要な別名が2つあります。\n"
 "\n"
 "    default:\n"
-"      'hg clone' によって複製した場合、複製元リポジトリの URL が\n"
-"      'default' として保存されます。以後、連携先を省略して 'hg push' や\n"
-"      'hg pull' を実行した際には、この URL が連携先として使用されます。\n"
+"      'hg clone' によって複製した場合、新規リポジトリの 'default' として\n"
+"      複製元リポジトリの URL が保存されます。\n"
+"      以後、連携先を省略して 'hg push' や 'hg pull' に類するコマンドを\n"
+"      実行した際には、この URL が連携先として使用されます。\n"
 "\n"
 "    default-push:\n"
 "      'hg push' は、'default-push' の別名で定義される URL を探します。\n"
@@ -8659,6 +8725,11 @@
 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 ""
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/i18n/pt_BR.po	Sun Apr 26 11:49:17 2009 +0200
@@ -0,0 +1,11569 @@
+# Brazilian Portuguese translations for Mercurial
+# Traduções do Mercurial para português do Brasil
+# Copyright (C) 2009 Matt Mackall and others
+#
+# Translators:
+# Diego Oliveira <diego@diegooliveira.com>
+# Wagner Bruna <wbruna@softwareexpress.com.br>
+#
+# Translation dictionary:
+#
+# archive             pacote
+# branch              ramificar (v.), ramo (s.)
+# bundle              bundle
+# changeset           changeset
+# commit              consolidar (v.), consolidação (s.)
+# default             default (branch ou path), padrão
+# diff                diff
+# head                cabeça
+# hook                gancho
+# merge               mesclar (v.), mesclagem (s.)
+# patch               patch
+# pull                trazer
+# push                enviar
+# revision            revisão
+# tag                 etiqueta
+# tip                 tip (tag), ponta
+# update              atualizar (v.), atualização (s.)
+# working directory   diretório de trabalho
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Mercurial\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-04-21 15:12-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"
+"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"
+"X-Generator: KBabel 1.11.4\n"
+"X-Poedit-Country: BRAZIL\n"
+"X-Poedit-Language: Portuguese\n"
+
+#, python-format
+msgid " (default: %s)"
+msgstr " (padrão: %s)"
+
+msgid "OPTIONS"
+msgstr "OPÇÕES"
+
+msgid "COMMANDS"
+msgstr "COMANDOS"
+
+msgid "    options:\n"
+msgstr "    opções:\n"
+
+#, python-format
+msgid ""
+"    aliases: %s\n"
+"\n"
+msgstr ""
+"    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)."
+
+#, python-format
+msgid "acl: %s not enabled\n"
+msgstr "acl: %s desabilitado\n"
+
+#, python-format
+msgid "acl: %s enabled, %d entries for user %s\n"
+msgstr "acl: %s habilitado, %d entradas para o usuário %s\n"
+
+#, 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"
+
+#, python-format
+msgid "acl: changes have source \"%s\" - skipping\n"
+msgstr "acl: mudanças têm origem \"%s\" - omitindo\n"
+
+#, python-format
+msgid "acl: user %s denied on %s\n"
+msgstr "acl: usuário %s negado em %s\n"
+
+#, python-format
+msgid "acl: access denied for changeset %s"
+msgstr "acl: acesso negado para o changeset %s"
+
+#, python-format
+msgid "acl: user %s not allowed on %s\n"
+msgstr "acl: usuário %s não permitido em %s\n"
+
+#, python-format
+msgid "acl: allowing changeset %s\n"
+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"
+"branching.\n"
+msgstr ""
+"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"
+"\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"
+"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"
+"\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 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"
+"\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"
+"    "
+
+msgid "a bookmark of this name does not exist"
+msgstr "não existe um marcador com esse nome"
+
+msgid "a bookmark of the same name already exists"
+msgstr "já existe um marcador com o mesmo nome"
+
+msgid "new bookmark name required"
+msgstr "requerido nome do novo marcador"
+
+msgid "bookmark name required"
+msgstr "requerido nome do marcador"
+
+msgid "bookmark name cannot contain newlines"
+msgstr "o nome do marcador não pode conter novas linhas"
+
+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"
+
+msgid "revision"
+msgstr "revisão"
+
+msgid "delete a given bookmark"
+msgstr "apaga o marcador pedido"
+
+msgid "rename a given bookmark"
+msgstr "renomeia um marcador"
+
+msgid "hg bookmarks [-f] [-d] [-m NAME] [-r REV] [NAME]"
+msgstr "hg bookmarks [-f] [-d] [-m NOME] [-r REV] [NOME]"
+
+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 ""
+"integração com o 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"
+"Esse gancho não muda o estado do bug.\n"
+"\n"
+"Esse gancho atualiza diretamente o banco de dados do Bugzilla.\n"
+"Apenas instalações do Bugzilla utilizando MySQL são suportadas.\n"
+"\n"
+"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"
+"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"
+"\n"
+"Configuração da extensão:\n"
+"\n"
+"    [bugzilla]\n"
+"\n"
+"    host       Nome do servidor do MySQL que contém o banco de dados\n"
+"               do Bugzilla.\n"
+"    db         Nome do banco de dados do Bugzilla no MySQL. O padrão\n"
+"               é 'bugs'.\n"
+"    user       Nome de usuário para acessar o servidor MySQL. O\n"
+"               padrão é 'bugs'.\n"
+"    password   Senha para acessar o servidor do MySQL.\n"
+"    timeout    Tempo de espera máximo para conexão com o banco de\n"
+"               dados (em segundos). O padrão é 5.\n"
+"    version    Versão do Bugzilla. Especifique '3.0' para versões do\n"
+"               Bugzilla 3.0 e posteriores, '2.18' para a versão 2.18\n"
+"               e '2.16' para versões anteriores à 2.18.\n"
+"    bzuser     Nome de usuário no Bugzilla utilizado para gravar os\n"
+"               comentários se o autor do changeset não for encontrado\n"
+"               como um usuário do Bugzilla.\n"
+"    bzdir      Diretório de instalação do Bugzilla. Usado pelo notify\n"
+"               padrão. Seu valor padrão é '/var/www/html/bugzilla'.\n"
+"    notify     O comando que deve ser executado para o Bugzilla\n"
+"               enviar o email de notificação de alterações.\n"
+"               Substituído de uma mapa com 3 entradas, 'bzdir', 'id'\n"
+"               (bug id) e 'user' (email do submetedor do bugzilla).\n"
+"               O padrão depende da versão; na 2.18 é\n"
+"               \"cd %(bzdir)s && perl -T contrib/sendbugmail.pl\n"
+"               %(id)s %(user)s\".\n"
+"    regexp     Expressão regular para encontrar os IDs dos bugs na\n"
+"               mensagem de consolidação do changeset. Deve conter um\n"
+"               grupo de \"()\". A expressão padrão encontra\n"
+"               'Bug 1234', 'Bug no. 1234', 'Bug number 1234',\n"
+"               'Bugs 1234,5678', 'Bug 1234 and 5678' e variações. A\n"
+"               equivalência não é sensível a maiúsculas e minúsculas.\n"
+"    style      O arquivo de estilo usado para formatar os\n"
+"               comentários.\n"
+"    template   O template usado para formatar os comentários.\n"
+"               Sobrepõe style se especificado. Além das palavras\n"
+"               chave do Mercurial, a extensão define:\n"
+"                   {bug}       O ID do bug no Bugzilla.\n"
+"                   {root}      O caminho completo do repositório do\n"
+"                               Mercurial.\n"
+"                   {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"
+"    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"
+"               consolidador do Mercurial para o ID do usuário do\n"
+"               Bugzilla. Se especificado, o arquivo deve conter um\n"
+"               mapeamento por linha, \"committer\"=\"Bugzilla user\".\n"
+"               Veja também a sessão [usermap].\n"
+"\n"
+"    [usermap]\n"
+"    Quaisquer entradas nessa sessão especificam mapeamentos de IDs\n"
+"    dos consolidadores do Mercurial para IDs de usuário do Bugzilla.\n"
+"    Veja também [bugzilla].usermap.\n"
+"    \"committer\"=\"Bugzilla user\"\n"
+"\n"
+"    [web]\n"
+"    baseurl    URL base para visualização de repositórios do\n"
+"               Mercurial. Usada em templates como {hgweb}.\n"
+"\n"
+"Para ativar a extensão:\n"
+"\n"
+"    [extensions]\n"
+"    hgext.bugzilla =\n"
+"\n"
+"    [hooks]\n"
+"    # executa o gancho bugzilla a cada mudança puxada ou empurrada\n"
+"    # para cá\n"
+"    incoming.bugzilla = python:hgext.bugzilla.hook\n"
+"\n"
+"Exemplo de configuração:\n"
+"\n"
+"Este exemplo de configuração é para uma coleção de repositórios do\n"
+"Mercurial em /var/local/hg/repos/ usada com uma instalação local do\n"
+"Bugzilla 3.2 em /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 adicionam um comentário ao registro de bug do Bugzilla\n"
+"com a forma:\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"
+
+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"
+
+#, python-format
+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"
+
+#, python-format
+msgid "  bug %s\n"
+msgstr "  bug %s\n"
+
+#, python-format
+msgid "running notify command %s\n"
+msgstr "rodando comando de notificação %s\n"
+
+#, python-format
+msgid "bugzilla notify command %s"
+msgstr "comando de notificação do bugzilla %s"
+
+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"
+
+#, python-format
+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}"
+msgstr ""
+"changeset {node|short} no repositório {root} refere-se ao bug {bug}.\n"
+"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"
+
+#, python-format
+msgid "hook type %s does not pass a changeset id"
+msgstr "gancho do tipo %s não passa um id de changeset"
+
+#, python-format
+msgid "database error: %s"
+msgstr "erro de banco de dados: %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 --rev/-r, 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 ""
+"exibe os filhos da revisão pedida ou do diretório de trabalho\n"
+"\n"
+"    Imprime os filhos das revisões do diretório de trabalho. Se uma\n"
+"    revisão for dada por -r/--rev, imprime os filhos dessa revisão.\n"
+"    Se for passado um arquivo como parâmetro, a revisão na qual esse\n"
+"    arquivo foi modificado por último (após a revisão do diretório\n"
+"    de trabalho ou da passada em --rev) será impressa.\n"
+"    "
+
+msgid "show children of the specified revision"
+msgstr "exibe o filho de uma revisão especifica"
+
+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"
+
+#, python-format
+msgid "Revision %d is a merge, ignoring...\n"
+msgstr "Revisão %d é uma mesclagem, ignorando...\n"
+
+#, python-format
+msgid "generating stats: %d%%"
+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"
+"\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>"
+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"
+"\n"
+"    Exemplos:\n"
+"\n"
+"      # exibe a contagem de linhas modificadas para cada autor\n"
+"      hg churn -t '{author|email}'\n"
+"\n"
+"      # 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"
+"      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>"
+
+#, 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"
+
+msgid "count rate for revisions matching date spec"
+msgstr "conta a frequência das revisões que casem com a data especificada"
+
+msgid "template to group changesets"
+msgstr "modelo para agrupar os changsets"
+
+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"
+
+msgid "sort by key (default: sort by count)"
+msgstr "ordenar pela chave (padrão: ordenar pela contagem)"
+
+msgid "file with email aliases"
+msgstr "arquivo com apelidos de email"
+
+msgid "show progress"
+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"
+"\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 my be overriden 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 ""
+"coloriza a saída de status, qseries e comandos que geram diffs\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"
+"comando qseries, reflete os estados dos patches (aplicado,\n"
+"não-aplicado, faltando); e para comandos relacionados com diff,\n"
+"destaca adições, remoções, cabeçalhos de diffs e espaços em branco\n"
+"no final das linhas.\n"
+"\n"
+"Outros efeitos adicionais às cores, como negrito e sublinhado,\n"
+"também estão disponíveis. Os efeitos são desenhados com a função de\n"
+"controle ECMA-48 SGR (também conhecidos como códigos de escape ANSI).\n"
+"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"
+"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' desliga todos os efeitos\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"
+
+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)"
+
+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"
+
+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"
+"    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 explicitely 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"
+"    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 reorganisation 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 is a legacy option and may be removed in future.\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\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 overriden with following options. Set them to paths\n"
+"    relative to the source URL, or leave them blank to disable\n"
+"    autodetection.\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 ""
+"converte um repositório de um outro sistema em um do Mercurial.\n"
+"\n"
+"    Formatos de origem aceitos [identificadores]:\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"
+"    Formatos de destino aceitos [identificadores]:\n"
+"    - Mercurial [hg]\n"
+"    - Subversion [svn] (histórico em ramos não é preservado)\n"
+"\n"
+"    Se não for dada nenhuma revisão, todas serão convertidas. Caso,\n"
+"    contrário, a conversão irá importar apenas até a revisão nomeada\n"
+"    (dada num formato entendido pela origem).\n"
+"\n"
+"    Se não for especificado o nome do diretório de destino, o padrão\n"
+"    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"
+"    <ID origem> <ID destino>\n"
+"\n"
+"    Se o arquivo não existir, ele é 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"
+"    O arquivo [mapa de nome de usuário] é um arquivo texto simples\n"
+"    que mapeia cada autor de commit da origem para um autor de commit\n"
+"    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"
+"\n"
+"    O filemap é um arquivo que permite filtrar e remapear arquivos e\n"
+"    diretórios. Linhas de comentário iniciam com '#'. Cada linha\n"
+"    pode conter uma das seguintes diretivas:\n"
+"\n"
+"      include caminho/para/o/arquivo\n"
+"\n"
+"      exclude caminho/para/o/arquivo\n"
+"\n"
+"      rename arquivo/origem to arquivo/destino\n"
+"\n"
+"    A diretiva 'include' faz com que um arquivo, ou todos os arquivos\n"
+"    em um diretório, sejam incluídos no repositório de destino, e\n"
+"    também exclui todos os outros arquivos e diretórios não incluídos\n"
+"    explicitamente. A diretiva 'exclude' faz com que os arquivos e\n"
+"    diretórios sejam omitidos. A diretiva 'rename' renomeia um\n"
+"    arquivo ou diretório. Para renomear de um subdiretório para o\n"
+"    raiz do repositório, use '.' como caminho de destino.\n"
+"\n"
+"    O splicemap é um arquivo que permite a inserção de histórico\n"
+"    sintético, permitindo que você especifique os pais de uma\n"
+"    revisão. Isto é útil se você por exemplo quiser que um merge do\n"
+"    Subversion tenha dois pais, ou para juntar duas linhas desconexas\n"
+"    de histórico. Cada entrada contém uma chave, seguida de um\n"
+"    espaço, seguido de um ou mais valores separados por vírgulas. A\n"
+"    chave é o identificador de revisão no sistema de controle de\n"
+"    versão de origem cujos pais devam ser modificados (mesmo formato\n"
+"    de uma chave em .hg/shamap). Os valores são os identificadores de\n"
+"    revisão (no sistema de origem ou no de destino) que devem ser\n"
+"    usados como os novos pais daquele nó.\n"
+"\n"
+"    Origem Mercurial\n"
+"    -----------------\n"
+"\n"
+"    --config convert.hg.ignoreerrors=False    (booleana)\n"
+"        ignora erros de integridade ao ler. Use-a para corrigir\n"
+"        repositórios do Mercurial com revlogs faltando, através da\n"
+"        conversão para outro repositório do Mercurial.\n"
+"    --config convert.hg.saverev=False         (booleana)\n"
+"        armazena o identificador de revisão original no changeset\n"
+"        (isso força o identificador de destino a mudar)\n"
+"    --config convert.hg.startrev=0            (id de revisão do hg)\n"
+"        converte a revisão inicial e seus descendentes\n"
+"\n"
+"    Origem CVS\n"
+"    ----------\n"
+"\n"
+"    A origem CVS usará uma cópia local do CVS para indicar o ponto\n"
+"    inicial do que será convertido. Não é necessário acesso direto ao\n"
+"    repositório, a não ser é claro que o repositório seja :local:. A\n"
+"    conversão usa o diretório do topo da cópia local para encontrar\n"
+"    o repositório CVS, e em seguida o comando CVS rlog para encontrar\n"
+"    os arquivos a serem convertidos. Isto quer dizer que a não ser\n"
+"    que um filemap seja dado, todos os arquivos sob o diretório de\n"
+"    início serão convertidos, e que qualquer reorganização na cópia\n"
+"    local do CVS é ignorada.\n"
+"\n"
+"    Como o CVS não possui changesets, é necessário coletar commits\n"
+"    individuais do CVS e mesclá-los em changesets. A origem CVS usa\n"
+"    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"
+"\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.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"
+"            changeset. Se arquivos muito grandes forem armazenados\n"
+"            como parte de um changeset, o padrão pode não ser\n"
+"            suficiente.\n"
+"        --config convert.cvsps.mergeto='{{mergetobranch ([-\\w]+)}}'\n"
+"            Especifica uma expressão regular com a qual mensagens de\n"
+"            log de commit são verificadas. Se um casamento for\n"
+"            encontrado, a conversão inserirá uma revisão artificial\n"
+"            mesclando o ramo onde essa mensagem de log aparece ao\n"
+"            ramo indicado na expressão regular.\n"
+"        --config convert.cvsps.mergefrom='{{mergefrombranch ([-\\w]+)}}'\n"
+"            Especifica uma expressão regular com a qual mensagens de\n"
+"            log de commit são verificadas. Se um casamento for\n"
+"            encontrado, a conversão inserirá a revisão mais recente\n"
+"            do ramo indicado na expressão regular como segundo pai do\n"
+"            changeset.\n"
+"\n"
+"    O script hgext/convert/cvsps permite que o código de mesclagem\n"
+"    interno seja executado fora do processo de conversão. Seus\n"
+"    parâmetros e saída são semelhantes aos do cvsps 2.1.\n"
+"\n"
+"    Origem Subversion\n"
+"    -----------------\n"
+"\n"
+"    A origem Subversion detecta a organização clássica\n"
+"    trunk/branches/tags . Por padrão, a URL de origem\n"
+"    \"svn://repo/path/\" fornecida é convertida como um único ramo.\n"
+"    Se \"svn://repo/path/trunk\" existir, irá substituir o ramo\n"
+"    default. Se \"svn://repo/path/branches\" existir, seus\n"
+"    subdiretórios serão listados como possíveis ramos. Se\n"
+"    \"svn://repo/path/tags\" existir, será consultado para tags\n"
+"    referenciando ramos convertidos. Os valores padrão \"trunk\",\n"
+"     \"branches\" e \"tags\" podem ser sobrepostos pelas seguintes\n"
+"    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"
+"        especifica o diretório contendo ramos\n"
+"    --config convert.svn.tags=tags            (directory name)\n"
+"        especifica o diretório contendo tags\n"
+"    --config convert.svn.trunk=trunk          (directory name)\n"
+"        especifica o nome do ramo trunk\n"
+"\n"
+"    O histórico de origem pode ser recuperado a partir de uma revisão\n"
+"    específica, ao invés de ser convertido integralmente. Apenas\n"
+"    conversões de um único ramo são suportadas.\n"
+"\n"
+"    --config convert.svn.startrev=0           (número de revisão svn)\n"
+"        especifica a revisão inicial do Subversion.\n"
+"\n"
+"    Origem Perforce\n"
+"    ---------------\n"
+"\n"
+"    O importador Perforce (P4) pode receber um caminho de depot p4 ou\n"
+"    uma especificação de cliente como origem. Ele irá converter todos\n"
+"    os arquivos da origem para um repositório achatado do Mercurial,\n"
+"    ignorando labels, branches e integrações. Note que quando é dado\n"
+"    um caminho de depot path você precisa tipicamente especificar um\n"
+"    diretório de destino, caso contrário o destino pode ser chamado\n"
+"    ...-hg.\n"
+"\n"
+"    É possível limitar a quantidade de histórico de origem a ser\n"
+"    convertida especificando uma revisão inicial do Perforce.\n"
+"\n"
+"    --config convert.p4.startrev=0            (número de changelist p4)\n"
+"        especifica a revisão inicial do Perforce.\n"
+"\n"
+"\n"
+"    Destino Mercurial\n"
+"    ---------------------\n"
+"\n"
+"    --config convert.hg.clonebranches=False   (booleana)\n"
+"        separa ramos da origem em diferentes clones.\n"
+"    --config convert.hg.tagsbranch=default    (nome de ramo)\n"
+"        nome do ramo para revisões de etiqueta\n"
+"    --config convert.hg.usebranchnames=True   (booleana)\n"
+"        preserva nomes de ramo\n"
+"\n"
+"    "
+
+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 ""
+"cria uma informação de changset 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"
+"    direto do cvsps.\n"
+"\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"
+"    entradas no log de commit e datas."
+
+msgid "username mapping filename"
+msgstr "arquivo de mapeamento de nome 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"
+
+msgid "import up to target revision REV"
+msgstr "importação pronta para a revisão REV alvo."
+
+msgid "source repository type"
+msgstr "tipo de repositório de origem"
+
+msgid "splice synthesized history into place"
+msgstr "junta o histórico sintetizado no lugar"
+
+msgid "try to sort changesets by date"
+msgstr "tenta ordenar os changsets por data"
+
+msgid "hg convert [OPTION]... SOURCE [DEST [REVMAP]]"
+msgstr "hg convert [OPÇÃO]... ORIGEM [DESTINO [REVMAP]]"
+
+msgid "only return changes on specified branches"
+msgstr "só retorna changesets no ramo especificado"
+
+msgid "prefix to remove from file names"
+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"
+
+msgid "update cvs log cache"
+msgstr "atualiza a cache do log do cvs"
+
+msgid "create new cvs log cache"
+msgstr "cria uma nova cache de log do cvs"
+
+msgid "set commit time fuzz in seconds"
+msgstr "define o valor de indistinção da hora de consolidação em segundos"
+
+msgid "specify cvsroot"
+msgstr "especifica o cvsroot"
+
+msgid "show parent changesets"
+msgstr "exibe os pais do changesets"
+
+msgid "show current changeset in ancestor branches"
+msgstr "exibe o changeset atual nos ramos ancestrais"
+
+msgid "ignored for compatibility"
+msgstr "ignorada para compatibilidade"
+
+msgid "hg debugcvsps [OPTION]... [PATH]..."
+msgstr "hg debugcvsps [OPÇÃO]... [CAMINHO]..."
+
+#, python-format
+msgid "%s is not a valid revision in current branch"
+msgstr "%s não é uma revisão válida no ramo atual"
+
+#, python-format
+msgid "%s is not available in %s anymore"
+msgstr "%s não está mais disponível em %s"
+
+#, python-format
+msgid "cannot find required \"%s\" tool"
+msgstr "não foi possível encontrar ferramenta \"%s\" necessária"
+
+#, python-format
+msgid "running: %s\n"
+msgstr "executando: %s\n"
+
+#, python-format
+msgid "%s error:\n"
+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"
+
+#, python-format
+msgid "could not open map file %r: %s"
+msgstr "não foi possível abrir arquivo de mapeamento %r: %s"
+
+#, python-format
+msgid "%s: missing or unsupported repository"
+msgstr "%s: repositório ausente ou não suportado"
+
+#, python-format
+msgid "convert: %s\n"
+msgstr "convert: %s\n"
+
+#, python-format
+msgid "%s: unknown repository type"
+msgstr "%s: tipo de repositório desconhecido"
+
+#, python-format
+msgid "cycle detected between %s and %s"
+msgstr "ciclo detectado entre %s e %s"
+
+msgid "not all revisions were sorted"
+msgstr "nem todas as revisões foram ordenadas"
+
+#, python-format
+msgid "Writing author map file %s\n"
+msgstr "Escrevendo arquivo de mapeamento de autor %s\n"
+
+#, python-format
+msgid "Ignoring bad line in author map file %s: %s\n"
+msgstr "Ignorando linha inválida no arquivo de mapeamento de autor %s: %s\n"
+
+#, python-format
+msgid "mapping author %s to %s\n"
+msgstr "mapeando autor %s para %s\n"
+
+#, python-format
+msgid "overriding mapping for author %s, was %s, will be %s\n"
+msgstr "sobrepondo mapeamento para autor %s, era %s, será %s\n"
+
+#, python-format
+msgid "spliced in %s as parents of %s\n"
+msgstr "associados %s como pais de %s\n"
+
+msgid "scanning source...\n"
+msgstr "decodificando entrada...\n"
+
+msgid "sorting...\n"
+msgstr "ordenando...\n"
+
+msgid "converting...\n"
+msgstr "convertendo...\n"
+
+#, python-format
+msgid "source: %s\n"
+msgstr "fonte: %s\n"
+
+#, python-format
+msgid "assuming destination %s\n"
+msgstr "assumindo destino %s\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"
+
+msgid "using builtin cvsps\n"
+msgstr "usando cvsps interno\n"
+
+#, python-format
+msgid "connecting to %s\n"
+msgstr "conectando em %s\n"
+
+msgid "CVS pserver authentication failed"
+msgstr "autenticação pserver do CVS falhou"
+
+msgid "server sucks"
+msgstr "o servidor não colabora"
+
+#, python-format
+msgid "%d bytes missing from remote file"
+msgstr "%d bytes faltando no arquivo remoto"
+
+#, python-format
+msgid "cvs server: %s\n"
+msgstr "servidor cvs: %s\n"
+
+#, python-format
+msgid "unknown CVS response: %s"
+msgstr "resposta do CVS desconhecida: %s"
+
+msgid "collecting CVS rlog\n"
+msgstr "coletando rlog do CVS\n"
+
+#, python-format
+msgid "reading cvs log cache %s\n"
+msgstr "lendo cache de log do CVS %s\n"
+
+#, python-format
+msgid "cache has %d log entries\n"
+msgstr "cache possui %d entradas de log\n"
+
+#, python-format
+msgid "error reading cache: %r\n"
+msgstr "erro lendo cache: %r\n"
+
+#, python-format
+msgid "running %s\n"
+msgstr "executando %s\n"
+
+#, python-format
+msgid "prefix=%r directory=%r root=%r\n"
+msgstr "prefixo=%r diretório=%r raiz=%r\n"
+
+msgid "RCS file must be followed by working file"
+msgstr "arquivo RCS deve ser seguido de um arquivo de trabalho"
+
+msgid "must have at least some revisions"
+msgstr "deve possuir ao menos algumas revisões"
+
+msgid "expected revision number"
+msgstr "número de revisão esperado"
+
+msgid "revision must be followed by date line"
+msgstr "revisão deve ser seguida por uma linha de data"
+
+#, python-format
+msgid "found synthetic revision in %s: %r\n"
+msgstr "revisão sintética encontrada em %s:%r\n"
+
+#, python-format
+msgid "writing cvs log cache %s\n"
+msgstr "escrevendo cache do log do CVS %s\n"
+
+#, python-format
+msgid "%d log entries\n"
+msgstr "%d entradas de log\n"
+
+msgid "creating changesets\n"
+msgstr "criando changesets\n"
+
+msgid "synthetic changeset cannot have multiple parents"
+msgstr "um changeset sintético não pode ter múltiplos pais"
+
+#, python-format
+msgid "%d changeset entries\n"
+msgstr "%d entradas de changeset\n"
+
+msgid "Python ElementTree module is not available"
+msgstr "módulo ElementTree do Python não está disponível"
+
+#, python-format
+msgid "cleaning up %s\n"
+msgstr "limpando %s\n"
+
+msgid "internal calling inconsistency"
+msgstr "inconsistência interna de chamadas"
+
+msgid "errors in filemap"
+msgstr "erros no filemap"
+
+#, python-format
+msgid "%s:%d: %r already in %s list\n"
+msgstr "%s:%d: %r já faz parte da lista %s\n"
+
+#, python-format
+msgid "%s:%d: unknown directive %r\n"
+msgstr "%s:%d: diretiva desconhecida %r\n"
+
+msgid "source repository doesn't support --filemap"
+msgstr "repositório de origem não suporta --filemap"
+
+#, python-format
+msgid "%s does not look like a GNU Arch repo"
+msgstr "%s não parece ser um repositório do GNU Arch"
+
+msgid "cannot find a GNU Arch tool"
+msgstr "não é possível encontrar uma ferramenta do GNU Arch"
+
+#, python-format
+msgid "analyzing tree version %s...\n"
+msgstr "analisando versão da árvore %s...\n"
+
+#, 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"
+
+#, python-format
+msgid "applying revision %s...\n"
+msgstr "aplicando revisão %s...\n"
+
+#, python-format
+msgid "computing changeset between %s and %s...\n"
+msgstr "computando changeset entre %s e %s...\n"
+
+#, python-format
+msgid "obtaining revision %s...\n"
+msgstr "obtendo revisão %s...\n"
+
+#, python-format
+msgid "analysing revision %s...\n"
+msgstr "analisando revisão %s...\n"
+
+#, python-format
+msgid "could not parse cat-log of %s"
+msgstr "não foi possível decodificar cat-log de %s"
+
+#, python-format
+msgid "%s is not a local Mercurial repo"
+msgstr "%s não é um repositório local do Mercurial"
+
+#, python-format
+msgid "initializing destination %s repository\n"
+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"
+
+msgid "run hg sink post-conversion action\n"
+msgstr "executa acã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 "updating tags\n"
+msgstr "atualizando tags\n"
+
+#, python-format
+msgid "%s is not a valid start revision"
+msgstr "%s não é uma revisão inicial válida"
+
+#, python-format
+msgid "ignoring: %s\n"
+msgstr "ignorando: %s\n"
+
+msgid "run hg source pre-conversion action\n"
+msgstr "executa acã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"
+
+#, python-format
+msgid "%s does not look like a monotone repo"
+msgstr "%s não parece um repositório do Monotone"
+
+#, python-format
+msgid "copying file in renamed directory from '%s' to '%s'"
+msgstr "copiando arquivo em diretório renomeado de '%s' para '%s'"
+
+msgid "reading p4 views\n"
+msgstr "lendo 'p4 views'\n"
+
+msgid "collecting p4 changelists\n"
+msgstr "coletando changelists do p4\n"
+
+msgid "Subversion python bindings could not be loaded"
+msgstr "Os módulos Python para o Subversion não puderam ser carregados"
+
+#, 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"
+
+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"
+
+#, python-format
+msgid "svn: revision %s is not an integer"
+msgstr "svn: revisão %s não é um inteiro"
+
+#, python-format
+msgid "svn: start revision %s is not an integer"
+msgstr "svn: revisão inicial %s não é um inteiro"
+
+#, python-format
+msgid "no revision found in module %s"
+msgstr "nenhuma revisão encontrada no módulo %s"
+
+#, python-format
+msgid "expected %s to be at %r, but not found"
+msgstr "%s esperado em %r, mas não encontrado"
+
+#, python-format
+msgid "found %s at %r\n"
+msgstr "encontrado %s em %r\n"
+
+#, python-format
+msgid "ignoring empty branch %s\n"
+msgstr "ignorando ramo vazio %s\n"
+
+#, python-format
+msgid "found branch %s at %d\n"
+msgstr "encontrado ramo %s em %d\n"
+
+msgid "svn: start revision is not supported with more than one branch"
+msgstr "svn: revisão inicial não é suportada com mais de um ramo"
+
+#, python-format
+msgid "svn: no revision found after start revision %d"
+msgstr "svn: nenhuma revisão encontrada após revisão inicial %d"
+
+#, python-format
+msgid "no tags found at revision %d\n"
+msgstr "nenhuma tag encontrada na revisão %d\n"
+
+#, python-format
+msgid "ignoring foreign branch %r\n"
+msgstr "ignorado ramo estrangeiro %r\n"
+
+#, python-format
+msgid "%s not found up to revision %d"
+msgstr "%s não encontrado até revisão %d"
+
+#, python-format
+msgid "branch renamed from %s to %s at %d\n"
+msgstr "ramo renomeado de %s para %s em %d\n"
+
+#, python-format
+msgid "reparent to %s\n"
+msgstr "pai mudado para %s\n"
+
+#, python-format
+msgid "copied to %s from %s@%s\n"
+msgstr "copiado para %s a partir de %s@%s\n"
+
+#, python-format
+msgid "gone from %s\n"
+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"
+
+#, python-format
+msgid "unknown path in revision %d: %s\n"
+msgstr "caminho desconhecido na revisão %d: %s\n"
+
+#, python-format
+msgid "mark %s came from %s:%d\n"
+msgstr "marcador %s veio de %s:%d\n"
+
+#, python-format
+msgid "parsing revision %d (%d changes)\n"
+msgstr "decodificando revisão %d (%d mudanças)\n"
+
+#, python-format
+msgid "found parent of branch %s at %d: %s\n"
+msgstr "encontrado pai do ramo %s em %d: %s\n"
+
+msgid "no copyfrom path, don't know what to do.\n"
+msgstr "sem caminho copyfrom, não sei o que fazer.\n"
+
+#, python-format
+msgid "fetching revision log for \"%s\" from %d to %d\n"
+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"
+
+#, python-format
+msgid "svn: branch has no revision %s"
+msgstr "svn: ramo não tem a revisão %s"
+
+#, python-format
+msgid "%r is not under %r, ignoring\n"
+msgstr "%r não está abaixo de %r, ignorando\n"
+
+#, python-format
+msgid "initializing svn repo %r\n"
+msgstr "iniciando repositório svn %r\n"
+
+#, python-format
+msgid "initializing svn wc %r\n"
+msgstr "iniciando svn wc %r\n"
+
+msgid "unexpected svn output:\n"
+msgstr "saída do svn inesperada:\n"
+
+msgid "unable to cope with svn output"
+msgstr "incapaz de lidar com saída do svn"
+
+msgid "XXX TAGS NOT IMPLEMENTED YET\n"
+msgstr "XXX TAGS AINDA NÃO IMPLEMENTADAS\n"
+
+# internal string, no need to translate
+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 ""
+
+# 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 ""
+
+#, python-format
+msgid "making snapshot of %d files from rev %s\n"
+msgstr "fazendo fotografia de %d arquivos da revisão %s\n"
+
+#, python-format
+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"
+
+#, python-format
+msgid "running %r in %s\n"
+msgstr "executando %r no %s\n"
+
+#, 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"
+
+msgid "cleaning up temp directory\n"
+msgstr "limpando o diretório temporário\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"
+"    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 ""
+"usa um programa externo para exibir diffs do repositório ou arquivos\n"
+"\n"
+"    Mostra diferenças entre revisões para os arquivos especificados,\n"
+"    usando um programa externo. O programa padrão usado é o diff, com\n"
+"    as opções padrão \"-Npru\".\n"
+"\n"
+"    Para selecionar um programa diferente, use a opção -p/--program.\n"
+"    Ao programa serão passados os nomes de dois diretórios para\n"
+"    comparar. Para passar opções adicionais para o programa, use a\n"
+"    opção -o/--option. Estas serão passadas antes dos nomes dos\n"
+"    diretórios a serem comparados.\n"
+"\n"
+"    Quando dois argumentos de revisão forem dados, são exibidas as\n"
+"    mudanças entre essas revisões. Se apenas uma revisão for\n"
+"    especificada, tal revisão será comparada com o diretório de\n"
+"    trabalho, e se nenhuma revisão for especificada, os arquivos do\n"
+"    diretório de trabalho serão comparados com seu pai."
+
+msgid "comparison program to run"
+msgstr "programa de comparação a executar"
+
+msgid "pass option to comparison program"
+msgstr "passa opções para o programa de comparação"
+
+msgid "change made by revision"
+msgstr "mudança feita pela revisão"
+
+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 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 ""
+"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"
+"\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"
+"    será consolidado. Caso contrário, o diretório de trabalho será\n"
+"    atualizado para incluir as novas mudanças.\n"
+"\n"
+"    Quando ocorre uma mesclagem, assume-se que as novas mudanças\n"
+"    trazidas sejam \"autoritativas\". A nova cabeça é usada como\n"
+"    primeiro pai, e as mudanças locais como o segundo. Para mudar a\n"
+"    ordem de mesclagem, use --switch-parent.\n"
+"\n"
+"    Veja 'hg help dates' para uma lista de formatos válidos para\n"
+"    -d/--date.\n"
+"    "
+
+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)"
+
+msgid "outstanding uncommitted merge"
+msgstr "mesclagem não consolidada pendente"
+
+msgid "outstanding uncommitted changes"
+msgstr "alterações não consolidadas pendentes"
+
+msgid "working directory is missing some files"
+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)"
+
+#, 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"
+
+#, python-format
+msgid "updating to %d:%s\n"
+msgstr "atualizando para %d:%s\n"
+
+#, python-format
+msgid "merging with %d:%s\n"
+msgstr "mesclando com %d:%s\n"
+
+#, python-format
+msgid "Automated merge with %s"
+msgstr "Mesclagem automática com %s"
+
+#, 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"
+
+msgid "a specific revision you would like to pull"
+msgstr "uma revisão específica que você gostaria de trazer"
+
+msgid "edit commit message"
+msgstr "editar mensagem de consolidação"
+
+msgid "edit commit message (DEPRECATED)"
+msgstr "editar mensagem de consolidação (OBSOLETO)"
+
+msgid "switch parents when merging"
+msgstr "troca de pais quando mesclando"
+
+msgid "hg fetch [SOURCE]"
+msgstr "hg fetch [ORIGEM]"
+
+msgid " returns of the good and bad signatures"
+msgstr " retornos das assinaturas boas e ruins"
+
+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"
+
+#, python-format
+msgid "%s Note: Signature has expired (signed by: \"%s\")\n"
+msgstr "%s Nota: A assinatura expirou (assinado por: \"%s\")\n"
+
+#, python-format
+msgid "%s Note: This key has expired (signed by: \"%s\")\n"
+msgstr "%s Nota: Esta chave expirou (assinada por: \"%s\")\n"
+
+msgid "list signed changesets"
+msgstr "lista os changsets 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"
+
+#, 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"
+"    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 ""
+"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"
+"    "
+
+msgid "uncommitted merge - please provide a specific revision"
+msgstr "mesclagem não consolidada - por favor forneça uma revisão específica"
+
+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)"
+
+#, 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"
+
+msgid "make the signature local"
+msgstr "torna a assinatura local"
+
+msgid "sign even if the sigfile is modified"
+msgstr "assina mesmo se o arquivo de assinatura está modificado"
+
+msgid "do not commit the sigfile after signing"
+msgstr "não consolida o arquivo de assinaturas após assinar"
+
+msgid "the key id to sign with"
+msgstr "o id da chave com a qual assinar"
+
+msgid "commit message"
+msgstr "mensagem de consolidação"
+
+msgid "hg sign [OPTION]... [REVISION]..."
+msgstr "hg sign [OPÇÃO]... [REVISÃO]..."
+
+msgid "hg sigcheck REVISION"
+msgstr "hg sigcheck REVISÃO"
+
+msgid "hg sigs"
+msgstr "hg sigs"
+
+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 ""
+"exibe grafos de revisão em janelas de terminal\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 ""
+
+#, python-format
+msgid "--graph option is incompatible with --%s"
+msgstr "a opção --graph é incompatível com --%s"
+
+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 ""
+"mostra histórico de revisões ao lado de um grafo ASCII de revisões\n"
+"\n"
+"    Imprime um histórico de revisões ao lado de um grafo de revisões\n"
+"    desenhado com caracteres ASCII.\n"
+"\n"
+"    Nós impressos como um caractere @ são pais do diretório de\n"
+"    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"
+
+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"
+
+msgid "limit number of changes displayed"
+msgstr "número limite de mudanças exibidas"
+
+msgid "show patch"
+msgstr "mostra o patch"
+
+msgid "show the specified revision or range"
+msgstr "mostra a revisão ou sequê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"
+"\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 ""
+
+# internal string, no need to translate
+msgid " A CIA message "
+msgstr ""
+
+# internal string, no need to translate
+msgid " CIA notification class "
+msgstr ""
+
+#, 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"
+
+msgid "cia: no user specified"
+msgstr "cia: nenhum usuário especificado"
+
+msgid "cia: no project specified"
+msgstr "cia: nenhum projeto especificado"
+
+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 ""
+"visualiza o repositório em modo gráfico\n"
+"\n"
+"A extensão hgk permite visualizar o histórico de um repositório\n"
+"graficamente. Ela requer o Tcl/Tk versão 8.4 ou posterior. (Tcl/Tk\n"
+"não é distribuído com o Mercurial.)\n"
+"\n"
+"hgk consiste de duas partes: um script Tcl que faz a exibição e\n"
+"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"
+"\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"
+"você pode especificar o caminho para o hgk em seu arquivo .hgrc:\n"
+"\n"
+"  [hgk]\n"
+"  path=/localização/do/hgk\n"
+"\n"
+"O hgk pode usar a extensão extdiff para visualizar revisões.\n"
+"Assumindo que você já configurou o comando vdiff da extdiff, basta\n"
+"adicionar:\n"
+"\n"
+"  [hgk]\n"
+"  vdiff=vdiff\n"
+"\n"
+"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
+msgid "output common ancestor information"
+msgstr ""
+
+msgid "cat a specific revision"
+msgstr "copia para a saída uma revisão específica"
+
+msgid "cat-file: type or revision not supplied\n"
+msgstr "cat-file: tipo ou revisão não fornecido\n"
+
+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 ""
+
+msgid "print revisions"
+msgstr "imprime as revisões"
+
+msgid "print extension options"
+msgstr "imprime opções da extensão"
+
+msgid "start interactive history viewer"
+msgstr "inicia um visualizador de histórico interativo"
+
+msgid "hg view [-l LIMIT] [REVRANGE]"
+msgstr "hg view [-l LIMITE] [SEQUÊNCIADEREVISÕES]"
+
+msgid "generate patch"
+msgstr "gera patch"
+
+msgid "recursive"
+msgstr "recursivo"
+
+msgid "pretty"
+msgstr "bonito"
+
+msgid "stdin"
+msgstr "stdin"
+
+msgid "detect copies"
+msgstr "detecta cópias"
+
+msgid "search"
+msgstr "procura"
+
+msgid "hg git-diff-tree [OPTION]... NODE1 NODE2 [FILE]..."
+msgstr "hg git-diff-tree [OPÇÃO]... NÓ1 NÓ2 [ARQUIVO]..."
+
+msgid "hg debug-cat-file [OPTION]... TYPE FILE"
+msgstr "hg debug-cat-file [OPÇÃO]... TIPO ARQUIVO"
+
+msgid "hg debug-config"
+msgstr "hg debug-config"
+
+msgid "hg debug-merge-base node node"
+msgstr "hg debug-merge-base nó nó"
+
+msgid "ignored"
+msgstr "ignorado"
+
+msgid "hg debug-rev-parse REV"
+msgstr "hg debug-rev-parse REV"
+
+msgid "header"
+msgstr "cabeçalho"
+
+msgid "topo-order"
+msgstr "ordem topológica"
+
+msgid "parents"
+msgstr "pais"
+
+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"
+"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"
+"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 "start an inotify server for this repository"
+msgstr "inicia um servidor inotify para este repositório"
+
+msgid "(found dead inotify server socket; removing it)\n"
+msgstr "(encontrado socket de um servidor inotify morto; removendo-o)\n"
+
+msgid "(starting inotify server)\n"
+msgstr "(iniciando servidor inotify)\n"
+
+#, python-format
+msgid "could not start inotify server: %s\n"
+msgstr "não foi possível iniciar servidor inotify: %s\n"
+
+#, python-format
+msgid "could not talk to new inotify server: %s\n"
+msgstr "não foi possível falar com o novo servidor inotify: %s\n"
+
+msgid "(inotify server not running)\n"
+msgstr "(servidor inotify não está em execução)\n"
+
+#, 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]..."
+
+#, 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"
+
+msgid "this system does not seem to support inotify"
+msgstr "esse sistema parece não suportar inotify"
+
+#, python-format
+msgid "*** the current per-user limit on the number of inotify watches is %s\n"
+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"
+
+msgid "*** counting directories: "
+msgstr "*** contando diretórios:"
+
+#, python-format
+msgid "found %d\n"
+msgstr "encontrado %d\n"
+
+#, python-format
+msgid "*** to raise the limit from %d to %d (run as root):\n"
+msgstr "*** para elevar o limite de %d para %d (rode como root):\n"
+
+#, python-format
+msgid "***  echo %d > %s\n"
+msgstr "***  ecoando  %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"
+
+#, python-format
+msgid "inotify service not available: %s"
+msgstr "serviço inotify indisponível: %s"
+
+#, python-format
+msgid "watching %r\n"
+msgstr "observando %r\n"
+
+#, python-format
+msgid "watching directories under %r\n"
+msgstr "observando diretórios sobre %r\n"
+
+#, python-format
+msgid "status: %r dir(%d) -> %s\n"
+msgstr "situação: %r dir(%d) -> %s\n"
+
+#, python-format
+msgid "status: %r %s -> %s\n"
+msgstr "situação: %r %s -> %s\n"
+
+#, python-format
+msgid "%s dirstate reload\n"
+msgstr "%s recarga de dirstate\n"
+
+#, python-format
+msgid "%s end dirstate reload\n"
+msgstr "%s fim da recarga de dirstate\n"
+
+msgid "rescanning due to .hgignore change\n"
+msgstr "varrendo novamente por mudança no .hgignore\n"
+
+#, python-format
+msgid "%s event: created %s\n"
+msgstr "evento %s: criado %s\n"
+
+#, python-format
+msgid "%s event: deleted %s\n"
+msgstr "evento %s: cancelado %s\n"
+
+#, python-format
+msgid "%s event: modified %s\n"
+msgstr "evento %s: modificado %s\n"
+
+#, python-format
+msgid "filesystem containing %s was unmounted\n"
+msgstr "sistema de arquivos contendo %s foi desmontado\n"
+
+#, python-format
+msgid "%s readable: %d bytes\n"
+msgstr "%s legível: %d bytes\n"
+
+#, python-format
+msgid "%s below threshold - unhooking\n"
+msgstr "%s abaixo do limiar - removendo o registro\n"
+
+#, python-format
+msgid "%s reading %d events\n"
+msgstr "%s lendo %d eventos\n"
+
+#, python-format
+msgid "%s hooking back up with %d bytes readable\n"
+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 "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 "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"
+
+#, python-format
+msgid "interhg: invalid pattern for %s: %s\n"
+msgstr "interhg: padrão inválido para %s: %s\n"
+
+#, python-format
+msgid "interhg: invalid regexp for %s: %s\n"
+msgstr "interhg: expressão regular inválida para %s: %s\n"
+
+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 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"
+"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"
+
+# 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 ""
+
+#, python-format
+msgid "overwriting %s expanding keywords\n"
+msgstr "sobrescrevendo %s palavras chave em expansão\n"
+
+#, python-format
+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"
+"\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 ""
+"imprime a configuração [keywordmaps] e um exemplo de expansão\n"
+"\n"
+"    Mostra os mapeamentos de modelo de palavras chave atual,\n"
+"    customizado ou padrão, e suas expansões.\n"
+"\n"
+"    Amplia a configuração atual com a especificação de mapas como\n"
+"    argumentos e opcionalmente lendo de um arquivo hgrc adicional.\n"
+"\n"
+"    Sobrepõe mapas de modelo de palavras chave atuais com opções\n"
+"    \"default\".\n"
+"    "
+
+#, 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"
+"%s keywords written to %s:\n"
+msgstr ""
+"\n"
+"%s palavras chave escritas em %s:\n"
+
+msgid "unhooked all commit hooks\n"
+msgstr "removidos os registros de todos os ganchos de consolidação\n"
+
+#, 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"
+"\n"
+"    Run after (re)enabling keyword expansion.\n"
+"\n"
+"    kwexpand refuses to run if given files contain local changes.\n"
+"    "
+msgstr ""
+"expande palavras chave no diretório de trabalho\n"
+"\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"
+"\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 ""
+"reverte palavras chave expandidas no diretório de trabalho\n"
+"\n"
+"    Execute antes de mudar ou desabilitar palavras chave ativas ou\n"
+"    se você tiver problemas com \"hg import\" ou \"hg merge\".\n"
+"\n"
+"    kwshrink se recusa a rodar se forem passados arquivos contendo\n"
+"    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"
+
+msgid "read maps from rcfile"
+msgstr "lê o mapeamento do arquivo rc"
+
+msgid "hg kwdemo [-d] [-f RCFILE] [TEMPLATEMAP]..."
+msgstr "hg kwdemo [-d] [-f ARQUIVORC] [MAPADEMODELOS]..."
+
+msgid "hg kwexpand [OPTION]... [FILE]..."
+msgstr "hg kwexpand [OPÇÃO]... [ARQUIVO]..."
+
+msgid "show keyword status flags of all files"
+msgstr "mostra indicadores de estado de palavras chave para todos os arquivos"
+
+msgid "show files excluded from expansion"
+msgstr "mostra arquivos excluídos da expansão"
+
+msgid "additionally show untracked files"
+msgstr "mostra também arquivos não rastreados"
+
+msgid "hg kwfiles [OPTION]... [FILE]..."
+msgstr "hg kwfiles [OPÇÃO]... [ARQUIVO]..."
+
+msgid "hg kwshrink [OPTION]... [FILE]..."
+msgstr "hg kwshrink [OPÇÃO]... [ARQUIVO]..."
+
+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 ""
+"gerenciamento e desenvolvimento 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"
+"os patches conhecidos, e patches aplicados (subconjunto dos patches\n"
+"conhecidos.).\n"
+"\n"
+"Patches conhecidos são representados como arquivos de patch no\n"
+"diretório .hg/patches . Patches aplicados são tanto arquivos de\n"
+"patch como changesets.\n"
+"\n"
+"Tarefas comuns (use \"hg help comando\" para mais detalhes):\n"
+"\n"
+"prepara um repositório para trabalhar com patches  qinit\n"
+"cria um novo patch                                 qnew\n"
+"importa um patch existente                         qimport\n"
+"\n"
+"imprime a série de patches                         qseries\n"
+"imprime patches aplicados                          qapplied\n"
+"imprime o nome do patch aplicado do topo           qtop\n"
+"\n"
+"adiciona um patch conhecido à pilha de aplicados   qpush\n"
+"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"
+
+msgid "guard cannot be an empty string"
+msgstr "uma guarda não pode ser uma string vazia"
+
+#, python-format
+msgid "guard %r starts with invalid character: %r"
+msgstr "a guarda %r inicia com um caractere inválido: %r"
+
+#, python-format
+msgid "invalid character in guard %r: %r"
+msgstr "caractere inválido na guarda %r: %r"
+
+#, python-format
+msgid "active guards: %s\n"
+msgstr "guardas ativas: %s\n"
+
+#, python-format
+msgid "guard %r too short"
+msgstr "guarda %r muito curta"
+
+#, python-format
+msgid "guard %r starts with invalid char"
+msgstr "a guarda %r inicia com um caractere inválido"
+
+#, python-format
+msgid "allowing %s - no guards in effect\n"
+msgstr "permitindo %s - nenhuma guarda em efeito\n"
+
+#, python-format
+msgid "allowing %s - no matching negative guards\n"
+msgstr "permitindo %s - nenhuma guarda negativa que case\n"
+
+#, python-format
+msgid "allowing %s - guarded by %r\n"
+msgstr "permitindo %s - guardada por %r\n"
+
+#, python-format
+msgid "skipping %s - guarded by %r\n"
+msgstr "omitindo %s - guardada por %r\n"
+
+#, python-format
+msgid "skipping %s - no matching guards\n"
+msgstr "omitindo %s - nenhuma guarda que case\n"
+
+#, python-format
+msgid "error removing undo: %s\n"
+msgstr "erro ao remover desfazimento: %s\n"
+
+#, python-format
+msgid "apply failed for patch %s"
+msgstr "a aplicação do patch %s falhou"
+
+#, python-format
+msgid "patch didn't work out, merging %s\n"
+msgstr "o patch não funcionou, mesclando %s\n"
+
+#, python-format
+msgid "update returned %d"
+msgstr "update retornou %d"
+
+msgid "repo commit failed"
+msgstr "consolidação no repositório falhou"
+
+#, python-format
+msgid "unable to read %s"
+msgstr "impossível ler %s"
+
+#, python-format
+msgid "patch %s does not exist\n"
+msgstr "o patch %s não existe\n"
+
+#, python-format
+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"
+
+#, python-format
+msgid "applying %s\n"
+msgstr "aplicando %s\n"
+
+#, python-format
+msgid "Unable to read %s\n"
+msgstr "Incapaz de ler %s\n"
+
+#, python-format
+msgid "imported patch %s\n"
+msgstr "patch %s importado\n"
+
+#, python-format
+msgid ""
+"\n"
+"imported patch %s"
+msgstr ""
+"\n"
+"patch %s importado"
+
+#, python-format
+msgid "patch %s is empty\n"
+msgstr "o patch %s é vazio\n"
+
+msgid "patch failed, rejects left in working dir\n"
+msgstr "o patch falhou, rejeitos deixados no diretório de trabalho\n"
+
+msgid "fuzz found when applying patch, stopping\n"
+msgstr "discrepância encontrada ao aplicar patch, parando\n"
+
+#, python-format
+msgid "revision %d is not managed"
+msgstr "a revisão %d não é gerenciada"
+
+#, python-format
+msgid "cannot delete revision %d above applied patches"
+msgstr "não se pode apagar a revisão %d acima de patches aplicados"
+
+msgid "qdelete requires at least one revision or patch name"
+msgstr "qdelete exige ao menos uma revisão ou nome de patch"
+
+#, python-format
+msgid "cannot delete applied patch %s"
+msgstr "não se pode remover o patch %s aplicado"
+
+#, python-format
+msgid "patch %s not in series file"
+msgstr "o patch %s não está no arquivo series"
+
+msgid "no patches applied"
+msgstr "nenhum patch aplicado"
+
+msgid "working directory revision is not qtip"
+msgstr "a revisão do diretório de trabalho não é a qtip"
+
+msgid "local changes found, refresh first"
+msgstr "mudanças locais encontradas, você deve primeiro renovar"
+
+msgid "local changes found"
+msgstr "mudanças locais encontradas"
+
+#, python-format
+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"
+
+#, python-format
+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"
+
+#, 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 "no patches in series\n"
+msgstr "nenhum patch na série\n"
+
+#, python-format
+msgid "cannot push to a previous patch: %s"
+msgstr "não se pode empilhar para um patch anterior: %s"
+
+#, python-format
+msgid "qpush: %s is already at the top\n"
+msgstr "qpush: %s já está no topo\n"
+
+#, python-format
+msgid "guarded by %r"
+msgstr "guardado por %r"
+
+msgid "no matching guards"
+msgstr "nenhuma guarda com nome semelhante"
+
+#, python-format
+msgid "cannot push '%s' - %s\n"
+msgstr "não se pode empilhar %s - %s\n"
+
+msgid "all patches are currently applied\n"
+msgstr "todos os patches estão aplicados nesse momento\n"
+
+msgid "patch series already fully applied\n"
+msgstr "série de patches já completamente aplicada\n"
+
+msgid "cleaning up working directory..."
+msgstr "limpando diretório de trabalho..."
+
+#, python-format
+msgid "errors during apply, please fix and refresh %s\n"
+msgstr "erros ao aplicar, por favor conserte e renove %s\n"
+
+#, python-format
+msgid "now at: %s\n"
+msgstr "agora em: %s\n"
+
+#, python-format
+msgid "patch %s is not applied"
+msgstr "o patch %s não está aplicado"
+
+msgid "no patches applied\n"
+msgstr "nenhum patch aplicado\n"
+
+#, python-format
+msgid "qpop: %s is already at the top\n"
+msgstr "qpop: %s já está no topo\n"
+
+msgid "qpop: forcing dirstate update\n"
+msgstr "qpop: forçando atualização do dirstate\n"
+
+#, python-format
+msgid "trying to pop unknown node %s"
+msgstr "tentando desempilhar nó desconhecido %s"
+
+msgid "popping would remove a revision not managed by this patch queue"
+msgstr "desempilhar removeria uma revisão não gerenciada por esta fila de patches"
+
+msgid "deletions found between repo revs"
+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"
+
+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 "patch queue directory already exists"
+msgstr "o diretório de fila de patches já existe"
+
+#, python-format
+msgid "patch %s is not in series file"
+msgstr "o patch %s não está no arquivo series"
+
+msgid "No saved patch data found\n"
+msgstr "Nenhum dado salvo de patches encontrado\n"
+
+#, python-format
+msgid "restoring status: %s\n"
+msgstr "restaurando o estado: %s\n"
+
+msgid "save entry has children, leaving it alone\n"
+msgstr "entrada de salvamento tem filhos, deixando-a como está\n"
+
+#, python-format
+msgid "removing save entry %s\n"
+msgstr "removendo entrada de salvamento %s\n"
+
+#, python-format
+msgid "saved queue repository parents: %s %s\n"
+msgstr "pais do repositório da fila salvos: %s %s\n"
+
+msgid "queue directory updating\n"
+msgstr "atualizando diretório da fila\n"
+
+msgid "Unable to load queue repository\n"
+msgstr "Incapaz de carregar o repositório da fila\n"
+
+msgid "save: no patches applied, exiting\n"
+msgstr "save: nenhum patch aplicado, saindo\n"
+
+msgid "status is already saved\n"
+msgstr "o estado já foi salvo\n"
+
+msgid "hg patches saved state"
+msgstr ""
+
+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"
+
+msgid "option \"-r\" not valid when importing files"
+msgstr "opção \"-r\" inválida ao importar arquivos"
+
+msgid "option \"-n\" not valid when importing multiple patches"
+msgstr "opção \"-n\" inválida ao importar múltiplos patches"
+
+#, python-format
+msgid "revision %d is the root of more than one branch"
+msgstr "a revisão %d é raiz de mais de um ramo"
+
+#, python-format
+msgid "revision %d is already managed"
+msgstr "revisão %d já gerenciada"
+
+#, python-format
+msgid "revision %d is not the parent of the queue"
+msgstr "a revisão %d não é o pai da fila"
+
+#, python-format
+msgid "revision %d has unmanaged children"
+msgstr "a revisão %d tem filhos não gerenciados"
+
+#, python-format
+msgid "cannot import merge revision %d"
+msgstr "não se pode importar a revisão de mesclagem %d"
+
+#, python-format
+msgid "revision %d is not the parent of %d"
+msgstr "a revisão %d não é pai de %d"
+
+msgid "-e is incompatible with import from -"
+msgstr "-e é incompatível com a importação de -"
+
+#, python-format
+msgid "patch %s does not exist"
+msgstr "o patch %s não existe"
+
+msgid "need --name to import a patch from -"
+msgstr "--name é necessário ao importar um patch de -"
+
+#, python-format
+msgid "adding %s to series file\n"
+msgstr "adicionando %s ao arquivo series\n"
+
+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 ""
+"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. "
+
+msgid "print the patches already applied"
+msgstr "imprime os patches já aplicados"
+
+msgid "print the patches not yet applied"
+msgstr "imprime os patches ainda não aplicados"
+
+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 ""
+"importa um patch\n"
+"\n"
+"    O patch é inserido na série após o último patch aplicado. Se\n"
+"    não houver nenhum patch aplicado, qimport adiciona o novo patch\n"
+"    no começo da série.\n"
+"\n"
+"    O patch terá o mesmo nome que seu arquivo de origem, a não ser\n"
+"    que você lhe dê um novo nome usando -n/--name.\n"
+"\n"
+"    Você pode registrar um patch já existente no diretório de\n"
+"    patches usando a opção -e/--existing.\n"
+"\n"
+"    Com -f/--force, um patch existente de mesmo nome será\n"
+"    sobrescrito.\n"
+"\n"
+"    Um changeset existente pode ser colocado sob o controle da mq\n"
+"    com -r/--rev (por exemplo, qimport --rev tip -n patch colocará a\n"
+"    tip sob o controle da mq). Com -g/--git, os patches importados\n"
+"    com --rev usarão o formato git diff. Veja o tópico de ajuda diff\n"
+"    para informações sobre por que isso é importante para preservar\n"
+"    informação de cópia e renomeação e mudanças de permissão.\n"
+"\n"
+"    Para importar um patch da entrada padrão, passe - como o arquivo\n"
+"    do patch. Ao importar da entrada padrão, um nome de patch deve\n"
+"    ser especificado usando a opção --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 ""
+"cria um novo repositório de fila\n"
+"\n"
+"    O repositório de fila é por padrão não versionado. Se for\n"
+"    especificado -c/--create-repo, qinit criará um repositório\n"
+"    separado aninhado para patches (qinit -c pode ser também\n"
+"    executado posteriormente para converter um repositório de\n"
+"    patches não versionado em um versionado). Você pode usar\n"
+"    qcommit para consolidar mudanças neste repositório de fila."
+
+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 ""
+"clona os repositórios principal e de fila ao mesmo tempo\n"
+"\n"
+"    Se a origem for local, o destino não terá patches aplicados. Se\n"
+"    a origem for remota, este comando não pode verificar se patches\n"
+"    estão aplicados na origem, então não pode garantir que os patches\n"
+"    não estarão aplicados no destino. Se você clonar um repositório\n"
+"    remoto, certifique-se primeiro que ele não tenha patches\n"
+"    aplicados.\n"
+"\n"
+"    O repositório de patches da origem é procurado por padrão em\n"
+"    <origem>/.hg/patches . Use -p <url> para mudar.\n"
+"\n"
+"    O diretório de patches deve ser um repositório aninhado do\n"
+"    Mercurial, como criado por qinit -c.\n"
+"    "
+
+msgid "versioned patch repository not found (see qinit -c)"
+msgstr "repositório versionado de patches não encontrado (veja qinit -c)"
+
+msgid "cloning main repository\n"
+msgstr "clonando repositório principal\n"
+
+msgid "cloning patch repository\n"
+msgstr "clonando o repositório de patches\n"
+
+msgid "stripping applied patches from destination repository\n"
+msgstr "removendo patches aplicados do repositório de destino\n"
+
+msgid "updating destination repository\n"
+msgstr "atualizando repositório de destino\n"
+
+msgid "commit changes in the queue repository"
+msgstr "consolida mudanças no repositório da fila"
+
+msgid "print the entire series file"
+msgstr "imprime todo o arquivo series"
+
+msgid "print the name of the current patch"
+msgstr "imprime o nome do patch atual"
+
+msgid "print the name of the next patch"
+msgstr "imprime o nome do próximo patch"
+
+msgid "all patches applied\n"
+msgstr "todos os patches aplicados\n"
+
+msgid "print the name of the previous patch"
+msgstr "imprime o nome do patch anterior"
+
+msgid "only one patch applied\n"
+msgstr "apenas um patch aplicado\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 ""
+"cria um novo patch\n"
+"\n"
+"    qnew cria um novo patch no topo do patch aplicado no momento (se\n"
+"    houver). Ele se recusará a rodar se houver qualquer mudança\n"
+"    pendente; a não ser que -f seja especificado, e nesse caso o\n"
+"    patch será inicializado com essas mudanças. Você pode também usar\n"
+"    -I/--include, -X/--exclude, e/ou uma lista de arquivos após o\n"
+"    nome do patch para adicionar ao novo patch apenas mudanças em\n"
+"    arquivos que casarem , mantendo as restantes como modificações\n"
+"    não consolidadas.\n"
+"\n"
+"    -u/--user e -d/--date podem ser usados para definir o usuário\n"
+"     e data pedidos, respectivamente. -U/--currentuser e\n"
+"     -D/--currentdate definem o usuário para o usuário atual e a\n"
+"     data para a data atual.\n"
+"\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"
+"    consolidação será '[mq]: PATCH'.\n"
+"\n"
+"    Use a opção -g/--git para manter o patch no formato estendido git\n"
+"    diff. Leia o tópico de ajuda diffs para mais informações sobre\n"
+"    por que isso é importante para preservar mudanças de permissão\n"
+"    e informações de cópia e renomeação.\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 ""
+"atualiza o patch atual\n"
+"\n"
+"    Se qualquer padrão de arquivos for fornecido, o patch renovado\n"
+"    conterá apenas as modificações em arquivos que casarem com esses\n"
+"    padrões; as modificações restantes permanecerão no diretório de\n"
+"    trabalho.\n"
+"\n"
+"    Se -s/--short for especificado, os arquivos incluídos no momento\n"
+"    no patch serão renovados da mesma forma que arquivos que casarem,\n"
+"    e permanecerão no patch.\n"
+"\n"
+"    hg add/remove/copy/rename funciona normalmente, mas você pode\n"
+"    querer usar patches estilo git (/g--git ou [diff] git=1) para\n"
+"    rastrear cópias e renomeações. Veja o tópico de ajuda diffs para\n"
+"    mais informações sobre o formato git diff.\n"
+"    "
+
+msgid "option \"-e\" incompatible with \"-m\" or \"-l\""
+msgstr "opção \"-e\" incompatível com \"-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 ""
+"diff do patch atual e modificações subsequentes\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"
+"    a última renovação (mostrando assim como ficaria o patch atual\n"
+"    após um qrefresh).\n"
+"\n"
+"    Use 'hg diff' se você quiser apenas ver as mudanças feitas desde\n"
+"    o último qrefresh, ou 'hg export qtip' se você quiser ver\n"
+"    mudanças feitas pelo patch atual sem incluir as mudanças feitas\n"
+"    desde o último qrefresh.\n"
+"    "
+
+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 ""
+"incorpora os patches pedidos no patch atual\n"
+"\n"
+"    Os patches não devem estar aplicados. Cada patch será\n"
+"    sucessivamente aplicado ao patch atual na ordem dada. Se todos\n"
+"    os patches forem aplicados com sucesso, o patch atual será\n"
+"    renovado com o novo patch cumulativo, e os patches incorporados\n"
+"    serão apagados. Com -k/--keep, os patches incorporados não serão\n"
+"    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 '* * *'."
+
+msgid "qfold requires at least one patch name"
+msgstr "qfold requer ao menos um nome de patch"
+
+msgid "No patches applied"
+msgstr "Nenhum patch aplicado"
+
+#, python-format
+msgid "Skipping already folded patch %s"
+msgstr "Omitindo patch %s já incorporado"
+
+#, python-format
+msgid "qfold cannot fold already applied patch %s"
+msgstr "qfold não pode incorporar o patch %s já aplicado"
+
+#, python-format
+msgid "Error folding patch %s"
+msgstr "Erro incorporando patch %s"
+
+msgid "push or pop patches until named patch is at top of stack"
+msgstr "empilha ou desempilha patches até que o patch nomeado esteja no topo"
+
+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 ""
+"define ou imprime guardas para um patch\n"
+"\n"
+"    Guardas controlam se um patch pode ser empilhado. Um patch sem\n"
+"    guardas sempre será empilhado. Um patch com uma guarda positiva\n"
+"    (\"+foo\") é empilhado apenas se ela tiver sido ativada pelo\n"
+"    comando qselect. Um patch com uma guarda negativa (\"-foo\")\n"
+"    nunca será empilhado se ela tiver sido ativada pelo comando\n"
+"    qselect.\n"
+"\n"
+"    Sem argumentos, imprime as guardas ativas no momento. Com\n"
+"    parâmetros, define guardas para o patch pedido.\n"
+"    NOTA: A especificação de guardas negativas agora exige '--'.\n"
+"\n"
+"    Para definir guardas em um outro patch:\n"
+"      hg qguard -- outro.patch +2.6.17 -stable\n"
+"    "
+
+msgid "cannot mix -l/--list with options or arguments"
+msgstr "não se pode misturar -l/--list com opções ou argumentos"
+
+msgid "no patch to work with"
+msgstr "nenhum patch com o qual trabalhar"
+
+#, python-format
+msgid "no patch named %s"
+msgstr "nenhum patch de nome %s"
+
+msgid "print the header of the topmost or specified patch"
+msgstr "imprime o cabeçalho do último patch ou do patch pedido"
+
+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 ""
+"empilha o próximo patch na pilha\n"
+"\n"
+"    Se -f/--force for pedido, todas as mudanças locais em arquivos\n"
+"    modificados pelo patch serão perdidas.\n"
+"    "
+
+msgid "no saved queues found, please use -n\n"
+msgstr "nenhuma fila salva encontrada, por favor use -n\n"
+
+#, python-format
+msgid "merging with queue at: %s\n"
+msgstr "mesclando com fila em: %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 ""
+"desempilha o patch atual da pilha\n"
+"\n"
+"    Por padrão, desempilha o topo da pilha de patches. Se for\n"
+"    passado um nome, desempilha sucessivamente os patches até que\n"
+"    o patch com esse nome esteja no topo da pilha.\n"
+"    "
+
+#, python-format
+msgid "using patch queue: %s\n"
+msgstr "usando fila de patches: %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 ""
+"renomeia um patch\n"
+"\n"
+"    Com um argumento, renomeia o patch atual para PATCH1.\n"
+"    Com dois argumentos, renomeia PATCH1 para PATCH2."
+
+#, python-format
+msgid "%s already exists"
+msgstr "%s já existe"
+
+#, python-format
+msgid "A patch named %s already exists in the series file"
+msgstr "Um patch de nome %s já existe no arquivo series"
+
+msgid "restore the queue state saved by a revision"
+msgstr "restaura o estado da fila salvo por uma revisão"
+
+msgid "save current queue state"
+msgstr "salva o estado atual da fila"
+
+#, python-format
+msgid "destination %s exists and is not a directory"
+msgstr "o destino %s existe e não é um diretório"
+
+#, python-format
+msgid "destination %s exists, use -f to force"
+msgstr "o destino %s existe, use -f para forçar"
+
+#, python-format
+msgid "copy %s to %s\n"
+msgstr "copia %s para %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 ""
+"remove do repositório uma revisão e todos os seus descendentes\n"
+"\n"
+"    Se um ancestral da revisão do diretório de trabalho for removido,\n"
+"    o diretório de trabalho será atualizado para o pai da revisão\n"
+"    removida.\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\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 ""
+"define ou imprime guardas de empilhamento de patches\n"
+"\n"
+"    Use o comando qguard para definir ou imprimir guardas no patch,\n"
+"    depois use qselect para dizer à mq quais guardas usar. Um patch\n"
+"    será empilhado se ele não tiver guardas ou se qualquer guarda\n"
+"    positiva casar com a guarda atual, mas não será empilhado se\n"
+"    qualquer guarda negativa casar com a guarda atual. Por exemplo:\n"
+"\n"
+"        qguard foo.patch -stable    (guarda negativa)\n"
+"        qguard bar.patch +stable    (guarda positiva)\n"
+"        qselect stable\n"
+"\n"
+"    Isso ativa a guarda \"stable\". mq omitirá o patch foo (porque\n"
+"    ele tem um casamento negativo) mas empilhará o patch bar (porque\n"
+"    ele tem um casamento positivo).\n"
+"\n"
+"    Sem argumentos, imprime as guardas ativas no momento. Com um\n"
+"    argumento, define a guarda ativa.\n"
+"\n"
+"    Use -n/--none para desativar guardas (nenhum outro argumento\n"
+"    é necessário). Se nenhuma guarda estiver ativa, patches com\n"
+"    guardas positivas são omitidos e patches com guardas negativas\n"
+"    são empilhados.\n"
+"\n"
+"    qselect pode mudar as guardas em patches aplicados. Ele por\n"
+"    padrão não desempilha patches guardados. Use --pop para\n"
+"    desempilhar até o último patch aplicado que não esteja guardado.\n"
+"    Use --reapply (que implica --pop) para empilhar novamente para o\n"
+"    patch atual em seguida, omitindo patches guardados.\n"
+"\n"
+"    Use -s/--series para imprimir uma lista de todas as guardas no\n"
+"    arquivo series (nenhum outro argumento necessário). Use -v para\n"
+"    mais informações."
+
+msgid "guards deactivated\n"
+msgstr "guardas desativadas\n"
+
+#, python-format
+msgid "number of unguarded, unapplied patches has changed from %d to %d\n"
+msgstr "número de patches sem guarda e não aplicados mudou de %d para %d\n"
+
+#, python-format
+msgid "number of guarded, applied patches has changed from %d to %d\n"
+msgstr "número de patches com guarda e aplicados mudou de %d para %d\n"
+
+msgid "guards in series file:\n"
+msgstr "guardas no arquivo series:\n"
+
+msgid "no guards in series file\n"
+msgstr "nenhuma guarda no arquivo series\n"
+
+msgid "active guards:\n"
+msgstr "guardas ativas:\n"
+
+msgid "no active guards\n"
+msgstr "nenhuma guarda ativa\n"
+
+msgid "popping guarded patches\n"
+msgstr "desempilhando patches com guarda\n"
+
+msgid "reapplying unguarded patches\n"
+msgstr "reaplicando patches sem guarda\n"
+
+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 ""
+"move patches aplicados para o histórico do repositório\n"
+"\n"
+"    Encerra as revisões especificadas (que correspondem a patches\n"
+"    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"
+"    --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"
+"    mudanças para upstream.\n"
+"    "
+
+msgid "no revisions specified"
+msgstr "nenhuma revisão especificada"
+
+msgid "cannot commit over an applied mq patch"
+msgstr "não se pode consolidar sobre um patch mq aplicado"
+
+msgid "source has mq patches applied"
+msgstr "a fonte tem patches mq aplicados"
+
+#, python-format
+msgid "mq status file refers to unknown node %s\n"
+msgstr "arquivo de estado da mq se refere ao nó desconhecido %s\n"
+
+#, python-format
+msgid "Tag %s overrides mq patch of the same name\n"
+msgstr "A etiqueta %s se sobrepõe ao patch mq de mesmo nome\n"
+
+msgid "cannot import over an applied patch"
+msgstr "não se pode importar sobre um patch aplicado"
+
+msgid "print first line of patch header"
+msgstr "imprime a primeira linha do cabeçalho do patch"
+
+msgid "hg qapplied [-s] [PATCH]"
+msgstr "hg qapplied [-s] [PATCH]"
+
+msgid "use pull protocol to copy metadata"
+msgstr "usa o protocolo pull para copiar metadados"
+
+msgid "do not update the new working directories"
+msgstr "não atualiza os novos diretórios de trabalho"
+
+msgid "use uncompressed transfer (fast over LAN)"
+msgstr "usa transferência não comprimida (mais rápido em LANs)"
+
+msgid "location of source patch repository"
+msgstr "localização do repositório de origem de patches"
+
+msgid "hg qclone [OPTION]... SOURCE [DEST]"
+msgstr "hg qclone [OPÇÃO]... ORIGEM [DEST]"
+
+msgid "hg qcommit [OPTION]... [FILE]..."
+msgstr "hg qcommit [OPÇÃO]... [ARQUIVO]..."
+
+msgid "hg qdiff [OPTION]... [FILE]..."
+msgstr "hg qdiff [OPCÃ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 "hg qdelete [-k] [-r REV]... [PATCH]..."
+msgstr "hg qdelete [-k] [-r REV]... [PATCH]..."
+
+msgid "edit patch header"
+msgstr "edita o header do patch"
+
+msgid "keep folded patch files"
+msgstr "mantém os arquivos dos patches incorporados"
+
+msgid "hg qfold [-e] [-k] [-m TEXT] [-l FILE] PATCH..."
+msgstr "hg qfold [-e] [-k] [-m TEXTO] [-l ARQUIVO] PATCH..."
+
+msgid "overwrite any local changes"
+msgstr "sobrescreve qualquer alteração local"
+
+msgid "hg qgoto [OPTION]... PATCH"
+msgstr "hg qgoto [OPÇÃO]... PATCH"
+
+msgid "list all patches and guards"
+msgstr "lista todos os patches e guardas"
+
+msgid "drop all guards"
+msgstr "descarta todas as guardas"
+
+msgid "hg qguard [-l] [-n] -- [PATCH] [+GUARD]... [-GUARD]..."
+msgstr "hg qguard [-l] [-n] -- [PATCH] [+GUARDA]... [-GUARDA]..."
+
+msgid "hg qheader [PATCH]"
+msgstr "hg qheader [PATCH]"
+
+msgid "import file in patch directory"
+msgstr "importa um arquivo do diretório de patches"
+
+msgid "patch file name"
+msgstr "nome do arquivo de patch"
+
+msgid "overwrite existing files"
+msgstr "sobrescreve arquivos existentes"
+
+msgid "place existing revisions under mq control"
+msgstr "põe revisões existentes sob controle da mq"
+
+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 "create queue repository"
+msgstr "cria o repositório da fila"
+
+msgid "hg qinit [-c]"
+msgstr "hg qinit [-c]"
+
+msgid "import uncommitted changes into patch"
+msgstr "umporta para o patch mudanças não consolidadas"
+
+msgid "add \"From: <current user>\" to patch"
+msgstr "adiciona \"From: <usuário atual>\" ao patch"
+
+msgid "add \"From: <given user>\" to patch"
+msgstr "adiciona \"From: <usuário fornecido>\" ao patch"
+
+msgid "add \"Date: <current date>\" to patch"
+msgstr "adiciona \"Date: <data atual>\" ao patch"
+
+msgid "add \"Date: <given date>\" to patch"
+msgstr "adiciona \"Date: <data fornecida>\" ao patch"
+
+msgid "hg qnew [-e] [-m TEXT] [-l FILE] [-f] PATCH [FILE]..."
+msgstr "hg qnew [-e] [-m TEXTO] [-l ARQUIVO] [-f] PATCH [ARQUIVO]..."
+
+msgid "hg qnext [-s]"
+msgstr "hg qnext [-s]"
+
+msgid "hg qprev [-s]"
+msgstr "hg qprev [-s]"
+
+msgid "pop all patches"
+msgstr "desempliha todos os patches"
+
+msgid "queue name to pop"
+msgstr "nome da fila para desempilhar"
+
+msgid "forget any local changes"
+msgstr "descarta qualquer mudança local"
+
+msgid "hg qpop [-a] [-n NAME] [-f] [PATCH | INDEX]"
+msgstr "hg qpop [-a] [-n NOME] [-f] [PATCH | ÍNDICE]"
+
+msgid "apply if the patch has rejects"
+msgstr "aplica se o patch tiver partes rejeitadas"
+
+msgid "list patch name in commit text"
+msgstr "lista o nome do patch no texto de consolidação"
+
+msgid "apply all patches"
+msgstr "aplica todos os patches"
+
+msgid "merge from another queue"
+msgstr "mescla com outra fila"
+
+msgid "merge queue name"
+msgstr "nome da fila de mesclagem"
+
+msgid "hg qpush [-f] [-l] [-a] [-m] [-n NAME] [PATCH | INDEX]"
+msgstr "hg qpush [-f] [-l] [-a] [-m] [-n NOME] [PATCH | ÍNDICE]"
+
+msgid "refresh only files already in the patch and specified files"
+msgstr "renova apenas os arquivos especificados ou que já estão no patch"
+
+msgid "add/update \"From: <current user>\" in patch"
+msgstr "adiciona/atualiza \"From: <usuário atual>\" no patch"
+
+msgid "add/update \"From: <given user>\" in patch"
+msgstr "adiciona/atualiza \"From: <usuário fornecido>\" no patch"
+
+msgid "update \"Date: <current date>\" in patch (if present)"
+msgstr "atualiza \"Date: <data atual>\" no patch (se presente)"
+
+msgid "update \"Date: <given date>\" in patch (if present)"
+msgstr "atualiza \"Date: <data fornecida>\" no patch (se presente)"
+
+msgid "hg qrefresh [-I] [-X] [-e] [-m TEXT] [-l FILE] [-s] [FILE]..."
+msgstr "hg qrefresh [-I] [-X] [-e] [-m TEXTO] [-l ARQUIVO] [-s] [ARQUIVO]..."
+
+msgid "hg qrename PATCH1 [PATCH2]"
+msgstr "hg qrename PATCH1 [PATCH2]"
+
+msgid "delete save entry"
+msgstr "apaga entrada salva"
+
+msgid "update queue working directory"
+msgstr "atualiza o diretório de trabalho da fila"
+
+msgid "hg qrestore [-d] [-u] REV"
+msgstr "hg qrestore [-d] [-u] REV"
+
+msgid "copy patch directory"
+msgstr "copia o diretório do patch"
+
+msgid "copy directory name"
+msgstr "copia o nome do diretório"
+
+msgid "clear queue status file"
+msgstr "limpa o arquivo de estado da fila"
+
+msgid "force copy"
+msgstr "força a cópia"
+
+msgid "hg qsave [-m TEXT] [-l FILE] [-c] [-n NAME] [-e] [-f]"
+msgstr "hg qsave [-m TEXTO] [-l ARQUIVO] [-c] [-n NOME] [-e] [-f]"
+
+msgid "disable all guards"
+msgstr "desabilita todas as guardas"
+
+msgid "list all guards in series file"
+msgstr "lista todas as guardas no arquivo series"
+
+msgid "pop to before first guarded applied patch"
+msgstr "desempilha até antes do primeiro patch aplicado com guarda"
+
+msgid "pop, then reapply patches"
+msgstr "desempilha, e em seguida reaplica os patches"
+
+msgid "hg qselect [OPTION]... [GUARD]..."
+msgstr "hg qselect [OPÇÃO]... [GUARDA]..."
+
+msgid "print patches not in series"
+msgstr "imprime os patches que não estão na série"
+
+msgid "hg qseries [-ms]"
+msgstr "hg qseries [-ms]"
+
+msgid "force removal with local changes"
+msgstr "força remoção com mudanças locais"
+
+msgid "bundle unrelated changesets"
+msgstr "armazena no bundle changesets não relacionados"
+
+msgid "no backups"
+msgstr "nenhuma cópia de segurança"
+
+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 "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"
+"\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 ""
+"gancho para o envio de e-mails de notificação 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"
+"\n"
+"Para usar, configure e habilite a extensão notify no hgrc, dessa\n"
+"forma:\n"
+"\n"
+"   [extensions]\n"
+"   hgext.notify =\n"
+"\n"
+"   [hooks]\n"
+"   # um e-mail para cada changeset que chegar\n"
+"   incoming.notify = python:hgext.notify.hook\n"
+"   # e-mails em lote quando muitos changesets chegarem de uma vez\n"
+"   changegroup.notify = python:hgext.notify.hook\n"
+"\n"
+"   [notify]\n"
+"   # ítens de configuração vão aqui\n"
+"\n"
+" ítens de configuração:\n"
+"\n"
+" NECESSÁRIOS:\n"
+"   config = /caminho/arquivo # arquivo contendo assinantes\n"
+"\n"
+" OPCIONAIS:\n"
+"   test = True            # imprime mensagens para stdout para teste\n"
+"   strip = 3              # número de barras a remover de URLs\n"
+"   domain = example.com   # domínio a usar se autor não tiver domínio\n"
+"   style = ...            # arquivo de estilo para formatar o e-mail\n"
+"   template = ...         # modelo para formatar o e-mail\n"
+"   incoming = ...         # modelo ao rodar como gancho de entrada\n"
+"   changegroup = ...      # modelo ao rodar como gancho changegroup\n"
+"   maxdiff = 300          # no. máximo de linhas de diff incluídas\n"
+"                          # (0=nenhuma, -1=todas)\n"
+"   maxsubject = 67        # trunca linhas de assunto maiores que isso\n"
+"   diffstat = True        # adiciona um diffstat antes do diff\n"
+"   sources = serve        # notifica se a fonte de mudanças recebidas\n"
+"                          # estiver nessa lista\n"
+"                          # (serve == ssh ou http, push, pull, bundle)\n"
+"   [email]\n"
+"   from = user@host.com   # endereço de e-mail de envio se não houver\n"
+"   [web]\n"
+"   baseurl = http://hgserver/... # raiz do web site hg para\n"
+"                                 # visualizar consolidações\n"
+"\n"
+" o arquivo de configuração do notify tem o mesmo formato que um\n"
+" hgrc comum. Possui duas seções, com isso você pode exprimir as\n"
+" assinaturas do modo mais conveniente para você.\n"
+"\n"
+"   [usersubs]\n"
+"   # a chave é o e-mail do assinante, o valor é uma lista separada\n"
+"   # por vírgulas de padrões glob\n"
+"   user@host = padrão,padrão\n"
+"\n"
+"   [reposubs]\n"
+"   # a chave é o padrão glob, o valor é uma lista separada por\n"
+"   # vírgulas de e-mails dos assinantes\n"
+"   padrão = user@host\n"
+"\n"
+" padrões glob são casados com o caminho da raiz do repositório.\n"
+"\n"
+" se você quiser, você pode colocar o arquivo de configuração do\n"
+" 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"
+
+#, python-format
+msgid "notify: sending %d subscribers %d changes\n"
+msgstr "notify: enviando a %d assinantes %d mudanças\n"
+
+#, python-format
+msgid ""
+"\n"
+"diffs (truncated from %d to %d lines):\n"
+"\n"
+msgstr ""
+"\n"
+"diffs (truncados de %d para %d linhas):\n"
+"\n"
+
+#, python-format
+msgid ""
+"\n"
+"diffs (%d lines):\n"
+"\n"
+msgstr ""
+"\n"
+"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"
+
+#, python-format
+msgid "notify: changes have source \"%s\" - skipping\n"
+msgstr "notify: mudanças têm origem \"%s\" - omitindo\n"
+
+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 ""
+"visualiza a saída do comando com um pager externo\n"
+"\n"
+"Para definir o pager a ser usado, defina a variável de aplicação:\n"
+"\n"
+"  [pager]\n"
+"  pager = LESS='FSRX' less\n"
+"\n"
+"Se nenhum pager estiver definido, as extensões de pager usa a variável\n"
+"ambiente $PAGER. Se nem pager.pager nem $PAGER estiverem definidas,\n"
+"nenhum pager será usado.\n"
+"\n"
+"Se você notar mensagens de erro \"PIPE QUEBRADO\" (ou\n"
+"\"BROKEN PIPE\"), você pode desabilitá-las definindo:\n"
+"\n"
+"  [pager]\n"
+"  quiet = True\n"
+"\n"
+"Você pode desabilitar o pager para certos comandos adicionando-os\n"
+"à lista pager.ignore:\n"
+"\n"
+"  [pager]\n"
+"  ignore = version, help, update\n"
+"\n"
+"Você também pode habilitar o pager para apenas certos comandos\n"
+"usando pager.attend:\n"
+"\n"
+"  [pager]\n"
+"  attend = log\n"
+"\n"
+"Se pager.attend estiver presente, pager.ignore será ignorado.\n"
+"\n"
+"Para ignorar comandos globais como \"hg version\" ou \"hg help\",\n"
+"você precisa especificá-los no .hgrc global.\n"
+
+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 ""
+"use sufixos para se referir 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"
+"\n"
+"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^0 = foo\n"
+"  foo^1 = primeiro pai de foo\n"
+"  foo^2 = segundo pai de foo\n"
+"  foo^  = foo^1\n"
+"\n"
+"- foo~N = N-ésimo avô de foo\n"
+"  foo~0 = foo\n"
+"  foo~1 = foo^1 = foo^ = primeiro pai de foo\n"
+"  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"
+"\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 remainder of 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 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"
+"\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 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,\n"
+"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 compatable 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"
+"\n"
+"A série é iniciada por uma introdução \"[PATCH 0 of N]\", que\n"
+"descreve a série como um todo.\n"
+"\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:\n"
+"\n"
+"  O restante da 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"
+"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"
+"\n"
+"Para configurar outros padrões, adicione uma seção como esta em seu\n"
+"arquivo hgrc:\n"
+"\n"
+"  [email]\n"
+"  from = Meu Nome <meu@email>\n"
+"  to = destinatario1, destinatario2, ...\n"
+"  cc = cc1, cc2, ...\n"
+"  bcc = bcc1, bcc2, ...\n"
+"\n"
+"Então você poderá usar o comando \"hg email\" para enviar por e-mail\n"
+"uma série de changesets como uma \"patchbomb\".\n"
+"\n"
+"Para evitar o envio de patches de forma prematura, é uma boa idéia\n"
+"executar o comando \"email\" com a opção \"-n\" (somente teste).\n"
+"Será pedido um endereço de e-mail de destino, um assunto e uma\n"
+"mensagem introdutória descrevendo os patches de seu patchbomb.\n"
+"Quando tudo estiver feito, as mensagens do patchbomb serão\n"
+"exibidas. Se a variável de ambiente PAGER estiver definida, seu\n"
+"visualizador será executado uma vez para cada mensagem do patchbomb,\n"
+"para que você possa verificar se tudo está certo.\n"
+"\n"
+"A opção -m/--mbox também é bem útil. Ao invés de visualizar as\n"
+"mensagens como texto ou enviá-las diretamente, o comando irá criar\n"
+"um arquivo de mailbox UNIX com os e-mails de patch. Este arquivo de\n"
+"mailbox pode ser visualizado com qualquer cliente de e-mails que\n"
+"suporte arquivos mbox UNIX, por exemplo o mutt:\n"
+"\n"
+"  % mutt -R -f mbox\n"
+"\n"
+"Ao rever cada mensagem do patchbomb, você pode usar `formail' (um\n"
+"utilitário comumente instalado como parte do pacote procmail) para\n"
+"enviar cada mensagem:\n"
+"\n"
+"  % formail -s sendmail -bm -t < mbox\n"
+"\n"
+"Isto deve ser o bastante. Agora seu patchbomb está a caminho.\n"
+"\n"
+"Você também pode tanto configurar a opção method na seção email\n"
+"para um programa de envio de e-mails compatível com o sendmail\n"
+"como preencher a seção [smtp] para que a extensão patchbomb possa\n"
+"automaticamente enviar patchbombs diretamente da linha de comando.\n"
+"Veja as seções [email] e [smtp] na página de manual hgrc(5) para\n"
+"mais detalhes."
+
+msgid "Please enter a valid value.\n"
+msgstr "Por favor, entre um valor válido.\n"
+
+msgid "does the diffstat above look okay? "
+msgstr "o diffstat abaixo parece bom?"
+
+msgid "diffstat rejected"
+msgstr "diffstat rejeitado"
+
+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 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 -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 ""
+"envia changesets por e-mail\n"
+"\n"
+"    Por padrão, diffs são enviados no formato gerado por hg export,\n"
+"    um por mensagem. A série inicia com uma introdução\n"
+"    \"[PATCH 0 of N]\", que descreve a série como um todo.\n"
+"\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"
+"\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"
+"    forem ancestrais das revisões, se estas forem especificadas)\n"
+"\n"
+"    Com -b/--bundle, os changesets são selecionados assim como em\n"
+"    --outgoing, mas um único e-mail contendo em anexo um bundle\n"
+"    binário do Mercurial será enviado.\n"
+"\n"
+"    Exemplos:\n"
+"\n"
+"    hg email -r 3000          # envia apenas o patch\n"
+"    hg email -r 3000 -r 3001  # envia os patches 3000 e 3001\n"
+"    hg email -r 3000:3005     # envia os patches de 3000 até 3005\n"
+"    hg email 3000             # envia o patch 3000 (obsoleto)\n"
+"\n"
+"    hg email -o               # envia todos os patches não presentes\n"
+"                              # no destino padrão\n"
+"    hg email -o DEST          # envia todos os patches não presentes\n"
+"                              # em DEST\n"
+"    hg email -o -r 3000       # envia todos os ancestrais de 3000 não\n"
+"                              # presentes no destino padrão\n"
+"    hg email -o -r 3000 DEST  # envia todos os ancestrais de 3000 não\n"
+"                              # presentes em DEST\n"
+"\n"
+"    hg email -b               # envia um bundle de todos os patches\n"
+"                              # não presentes no destino padrão\n"
+"    hg email -b DEST          # envia um bundle de todos os patches\n"
+"                              # não presentes em DEST\n"
+"    hg email -b -r 3000       # um bundle de todos os ancestrais de\n"
+"                              # 3000 não presentes no destino padrão\n"
+"    hg email -b -r 3000 DEST  # um bundle de todos os ancestrais de\n"
+"                              # 3000 não presentes em DEST\n"
+"\n"
+"    Antes de usar este comando, você precisará habilitar e-mail em\n"
+"    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"
+
+msgid "--outgoing mode always on with --bundle; do not re-specify --outgoing"
+msgstr "modo é sempre --outgoing com --bundle; não especifique --outgoing novamente"
+
+msgid "too many destinations"
+msgstr "muitos destinos"
+
+msgid "use only one form to specify the revision"
+msgstr "use apenas uma forma de especificar a revisão"
+
+msgid ""
+"\n"
+"Write the introductory message for the patch series.\n"
+"\n"
+msgstr ""
+"\n"
+"Escreve a mensagem introdutória para a série de patches.\n"
+"\n"
+
+#, python-format
+msgid ""
+"This patch series consists of %d patches.\n"
+"\n"
+msgstr ""
+"Esta série de patches consiste de %d patches.\n"
+"\n"
+
+msgid "Final summary:\n"
+msgstr "Sumário final:\n"
+
+msgid "Displaying "
+msgstr "Exibindo"
+
+msgid "Writing "
+msgstr "Escrevendo"
+
+msgid "Sending "
+msgstr "Enviando"
+
+msgid "send patches as attachments"
+msgstr "envia patchs (remendos) como anexos"
+
+msgid "send patches as inline attachments"
+msgstr "envia patches (remendos) como anexos embutidos"
+
+msgid "email addresses of blind carbon copy recipients"
+msgstr "endereços de e-mail de destinatários para cópia oculta"
+
+msgid "email addresses of copy recipients"
+msgstr "endereços de e-mail de destinatários para cópia"
+
+msgid "add diffstat output to messages"
+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"
+
+msgid "use the given file as the series description"
+msgstr "usa o arquivo dado como descrição da série"
+
+msgid "email address of sender"
+msgstr "endereço de email do remetente"
+
+msgid "print messages that would be sent"
+msgstr "imprime mensagens que seriam enviadas"
+
+msgid "write messages to mbox file instead of sending them"
+msgstr "escreve mensagens para arquivo mbox ao invés de enviá-las"
+
+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 "email addresses of recipients"
+msgstr "endereços de e-mail dos destinatários"
+
+msgid "omit hg patch header"
+msgstr "omite o cabeçalho do hg patch"
+
+msgid "send changes not found in the target repository"
+msgstr "envia mudanças não encontradas no repositório alvo"
+
+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"
+msgstr "nome do arquivo bundle anexado"
+
+msgid "a revision to send"
+msgstr "a revisão a enviar"
+
+msgid "run even when remote repository is unrelated (with -b/--bundle)"
+msgstr "executa mesmo se o repositório não for relacionado (com -b/--bundle)"
+
+msgid "a base changeset to specify instead of a destination (with -b/--bundle)"
+msgstr "um changeset base especificado ao invés de um destino (com -b/--bundle)"
+
+msgid "send an introduction email for a single patch"
+msgstr "manda um e-mail introdutório para um patch único"
+
+msgid "hg email [OPTION]... [DEST]..."
+msgstr "hg email [OPÇÃO]... [DEST]..."
+
+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 managment\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 ""
+"remove arquivos não rastreados pelo Mercurial\n"
+"\n"
+"    Apaga arquivos não rastreados pelo Mercurial. Isso é útil para\n"
+"    testar mudanças locais e não gravadas em uma árvore que contenha\n"
+"    apenas essas mudanças.\n"
+"\n"
+"    Isto quer dizer que purge irá apagar:\n"
+"     - Arquivos não conhecidos: arquivos marcados com \"?\" em\n"
+"       \"hg status\"\n"
+"     - Diretórios vazios: de fato o Mercurial ignora diretórios a\n"
+"       não ser que eles contenham arquivos versionados\n"
+"    Mas deixará como estão:\n"
+"     - Arquivos versionados, modificados ou não\n"
+"     - Arquivos ignorados (a não ser que --all seja especificado)\n"
+"     - Novos arquivos adicionados ao repositório (com \"hg add\")\n"
+"\n"
+"    Se diretórios forem passados na linha de comando, apenas arquivos\n"
+"    nesses diretórios serão considerados.\n"
+"\n"
+"    Tenha cuidado com o comando purge, pois você pode remover de\n"
+"    forma irreversível alguns arquivos que você esqueceu de adicionar\n"
+"    ao repositório. Se você deseja apenas imprimir a lista de\n"
+"    arquivos que este programa iria apagar, use a opção --print.\n"
+"    "
+
+#, python-format
+msgid "%s cannot be removed"
+msgstr "%s não pode ser removido"
+
+#, python-format
+msgid "warning: %s\n"
+msgstr "aviso: %s\n"
+
+#, python-format
+msgid "Removing file %s\n"
+msgstr "Removendo arquivo %s\n"
+
+#, python-format
+msgid "Removing directory %s\n"
+msgstr "Removendo diretório %s\n"
+
+msgid "abort if an error occurs"
+msgstr "aborta se ocorrer um erro"
+
+msgid "purge ignored files too"
+msgstr "remove também arquivos ignorados"
+
+msgid "print the file names 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)"
+msgstr "termina nomes de arquivo com NUL, para uso com xargs (implica -p/--print)"
+
+msgid "hg purge [OPTION]... [DIR]..."
+msgstr "hg purge [OPÇÃO]... [DIR]..."
+
+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 ""
+"move conjuntos de revisões para um ancestral diferente\n"
+"\n"
+"Esta estensã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"
+
+msgid "first revision, do not change ancestor\n"
+msgstr "primeira revisão, não mude o ancestral\n"
+
+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 ""
+"move o changeset (e descendentes) para um ramo diferente\n"
+"\n"
+"    Rebase usa mesclagens repetidamente para migrar changesets de uma\n"
+"    parte do histórico para outra. Isto pode ser útil para linearizar\n"
+"    mudanças locais relativas a uma árvore mestra de desenvolvimento.\n"
+"\n"
+"    Se um rebaseamento for interrompido para resolver uma mesclagem\n"
+"    manualmente, ele pode ser continuado com --continue/-c ou abortado\n"
+"    com --abort/-a.\n"
+"    "
+
+msgid "cannot use both abort and continue"
+msgstr "não se pode usar abort e continue simultaneamente"
+
+msgid "cannot use collapse with continue or abort"
+msgstr "não se pode usar collapse com continue ou abort"
+
+msgid "abort and continue do not allow specifying revisions"
+msgstr "abort e continue não permitem especificar revisões"
+
+msgid "cannot specify both a revision and a base"
+msgstr "não se pode especificar ao mesmo tempo uma revisão e uma base"
+
+msgid "nothing to rebase\n"
+msgstr "nada para rebasear\n"
+
+msgid "cannot use both keepbranches and extrafn"
+msgstr "não se pode usar keepbranches e extrafn simultaneamente"
+
+msgid "rebase merging completed\n"
+msgstr "mesclagem de rebaseamento completada\n"
+
+msgid "warning: new changesets detected on source branch, not stripping\n"
+msgstr "aviso: novos changesets detectados no ramo de origem, strip não realizado\n"
+
+msgid "rebase completed\n"
+msgstr "rebaseamento completado\n"
+
+#, python-format
+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"
+
+#, python-format
+msgid " future parents are %d and %d\n"
+msgstr " futuros pais são %d e %d\n"
+
+#, python-format
+msgid " update to %d:%s\n"
+msgstr " atualização para %d:%s\n"
+
+msgid " already in target\n"
+msgstr "já no alvo\n"
+
+#, python-format
+msgid " merge against %d:%s\n"
+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"
+
+msgid "resuming interrupted rebase\n"
+msgstr "retomando rebaseamento interrompido\n"
+
+#, python-format
+msgid "no changes, revision %d skipped\n"
+msgstr "nenhuma mudança, revisão %d omitida\n"
+
+#, python-format
+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"
+
+#, python-format
+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"
+
+msgid "cannot rebase an ancestor"
+msgstr "não se pode rebasear um ancestral"
+
+msgid "cannot rebase a descendant"
+msgstr "não se pode rebasear um descendente"
+
+msgid "already working on current\n"
+msgstr "já trabalhando no atual\n"
+
+msgid "already working on the current branch\n"
+msgstr "já trabalhando no ramo atual\n"
+
+#, python-format
+msgid "rebase onto %d starting from %d\n"
+msgstr "rebaseamento para %d iniciando de %d\n"
+
+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"
+
+msgid "rebase from a given revision"
+msgstr "rebaseia a partir de uma revisão dada"
+
+msgid "rebase from the base of a given revision"
+msgstr "rebaseia a partir da base de uma revisão dada"
+
+msgid "rebase onto a given revision"
+msgstr "rebaseia para a revisão dada"
+
+msgid "collapse the rebased revisions"
+msgstr "colapsa as revisões rebaseadas"
+
+msgid "keep original revisions"
+msgstr "mantém revisões originais"
+
+msgid "keep original branches"
+msgstr "mantém ramos originais"
+
+msgid "continue an interrupted rebase"
+msgstr "continua um rebaseamento interrompido"
+
+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 "this modifies a binary file (all or nothing)\n"
+msgstr "isto modifica um arquivo binário (tudo ou nada)\n"
+
+msgid "this is a binary file\n"
+msgstr "este é um arquivo binário\n"
+
+#, python-format
+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 "y"
+msgstr "y"
+
+msgid "?"
+msgstr "?"
+
+msgid "y - record this change"
+msgstr "y - grava esta mudança"
+
+msgid "s"
+msgstr "s"
+
+msgid "f"
+msgstr "f"
+
+msgid "d"
+msgstr "d"
+
+msgid "a"
+msgstr "a"
+
+msgid "q"
+msgstr "q"
+
+msgid "user quit"
+msgstr "usuário encerrou"
+
+#, python-format
+msgid "examine changes to %s?"
+msgstr "examinar mudanças em %s?"
+
+msgid " and "
+msgstr " e "
+
+#, python-format
+msgid "record this change to %r?"
+msgstr "gravar esta mudança em %r?"
+
+#, python-format
+msgid "record change %d/%d to %r?"
+msgstr "gravar mudança %d/%d em %r?"
+
+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 ""
+"seleção interativa de alterações para consolidação\n"
+"\n"
+"    Se for omitida uma lista de arquivos, todas as alterações\n"
+"    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"
+"\n"
+"    Você poderá selecionar interativamente a gravação de cada\n"
+"    arquivo modificado, além de cada alteração dentro dos arquivos\n"
+"    (no caso de arquivos com mais de uma alteração). Para cada\n"
+"    consulta, as seguintes respostas são possíveis:\n"
+"\n"
+"    y - grava essa alteração\n"
+"    n - omite a alteração\n"
+"\n"
+"    s - omite as alterações restantes desse arquivo\n"
+"    f - grava as alterações restantes desse arquivo\n"
+"\n"
+"    d - omite alterações e arquivos restantes\n"
+"    a - grava todas as alterações em todos os arquivos restantes\n"
+"    q - aborta, sem gravar qualquer alteração\n"
+"\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"
+
+#, python-format
+msgid "backup %r as %r\n"
+msgstr "fazendo uma cópia de segurança de %r em %r\n"
+
+msgid "applying patch\n"
+msgstr "aplicando patch\n"
+
+msgid "patch failed to apply"
+msgstr "aplicação do patch falhou"
+
+#, python-format
+msgid "restoring %r to %r\n"
+msgstr "restaurando %r a %r\n"
+
+msgid "hg record [OPTION]... [FILE]..."
+msgstr "hg record [OPÇÃO]... [ARQUIVO]..."
+
+msgid "hg qrecord [OPTION]... PATCH [FILE]..."
+msgstr "hg qrecord [OPÇÃO]... PATCH [ARQUIVO]..."
+
+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 ""
+"ferramenta de transplante de patches\n"
+"\n"
+"Esta extensão lhe permite transplantar patches de outro ramo.\n"
+"\n"
+"Patches transplantados são gravados em .hg/transplant/transplants,\n"
+"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"
+
+#, python-format
+msgid "skipping merge changeset %s:%s\n"
+msgstr "omitindo changeset de mesclagem %s:%s\n"
+
+#, python-format
+msgid "%s merged at %s\n"
+msgstr "%s mesclado em %s\n"
+
+#, python-format
+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"
+
+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"
+
+#, python-format
+msgid "%s: empty changeset"
+msgstr "%s: changeset vazio"
+
+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"
+
+#, python-format
+msgid "working dir not at transplant parent %s"
+msgstr "diretório de trabalho não está no pai do transplante %s"
+
+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?]:"
+
+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 ""
+"transplanta changesets de outro ramo\n"
+"\n"
+"    Os changesets selecionados serão aplicados sobre o diretório de\n"
+"    trabalho atual com o log do changeset original. Se --log for\n"
+"    especificado, mensagens de log terão anexado um comentário da\n"
+"    forma:\n"
+"\n"
+"    (transplanted from CHANGESETHASH)\n"
+"\n"
+"    Você pode reescrever a mensagem de changelog com a opção\n"
+"    --filter . Seu argumento será chamado com a mensagem atual de\n"
+"    changelog em $1 e o patch em $2.\n"
+"\n"
+"    Se --source/-s for especificado, seleciona changesets do\n"
+"    repositório pedido. Se --branch/-b for especificado, seleciona\n"
+"    changesets do ramo que contém a revisão especificada, até essa\n"
+"    revisão. Se --all/-a for especificado, todos os changesets do\n"
+"    ramo serão transplantados, de outro modo os changesets a serem\n"
+"    transplantados serão pedidos interativamente.\n"
+"\n"
+"    hg transplant --branch REVISÃO --all irá reposicionar o ramo\n"
+"    selecionado (até a revisão pedida) no seu diretório de trabalho\n"
+"    atual.\n"
+"\n"
+"    Você pode opcionalmente marcar os changesets selecionados para\n"
+"    transplante como changesets de mesclagem. Os ancestrais de um\n"
+"    transplante de mesclagem não serão pedidos interativamente, e\n"
+"    você pode mesclar descendentes dele normalmente ao invés de\n"
+"    transplantá-los.\n"
+"\n"
+"    Se mesclagens ou revisões não forem fornecidas, hg transplant\n"
+"    irá iniciar um visualizador interativo de changesets.\n"
+"\n"
+"    Se a aplicação de um changeset falhar, você pode corrigir\n"
+"    a mesclagem manualmente e em seguida usar hg transplant\n"
+"    -c/--continue para retomar o transplante.\n"
+"    "
+
+msgid "--continue is incompatible with branch, all or merge"
+msgstr "--continue é incompatível com branch, all ou merge"
+
+msgid "no source URL, branch tag or revision list provided"
+msgstr "URL de origem, nome de ramo ou lista de revisões não fornecidas"
+
+msgid "--all requires a branch revision"
+msgstr "--all exige uma revisão de ramo"
+
+msgid "--all is incompatible with a revision list"
+msgstr "--all é incompatível com uma lista de revisões"
+
+msgid "no revision checked out"
+msgstr "nenhuma revisão posicionada"
+
+msgid "outstanding uncommitted merges"
+msgstr "mesclagens pendentes não consolidadas"
+
+msgid "outstanding local changes"
+msgstr "alterações locais pendentes"
+
+msgid "pull patches from REPOSITORY"
+msgstr "traz patches do REPOSITORIO"
+
+msgid "pull patches from branch BRANCH"
+msgstr "traz patches do ramo RAMO"
+
+msgid "pull all changesets up to BRANCH"
+msgstr "traz todos os changesets até RAMO"
+
+msgid "skip over REV"
+msgstr "omite revisão REV"
+
+msgid "merge at REV"
+msgstr "mesclagem em REV"
+
+msgid "append transplant info to log message"
+msgstr "anexa informações de transplante à mensagem de log"
+
+msgid "continue last transplant session after repair"
+msgstr "continua a última sessão de transplante após reparos"
+
+msgid "filter changesets through FILTER"
+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"
+"\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 usefull 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 ""
+"permite o uso de caminhos MBCS com codificação problemática.\n"
+"\n"
+"Algumas codificações MBCS não são boas para certas operações de\n"
+"manipulação de caminhos (por exemplo, quebrar o caminho, conversão\n"
+"de maiúsculas / minúsculas, etc.) com seus bytes codificados.\n"
+"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"
+"\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"
+" * 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 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"
+"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"
+msgstr "[win32mbcs] conversão de nome de arquivo falha com codificação %s\n"
+
+msgid "[win32mbcs] cannot activate on this platform.\n"
+msgstr "[win32mbcs] não se pode ativar nesta plataforma.\n"
+
+#, python-format
+msgid "[win32mbcs] activated with encoding: %s\n"
+msgstr "[win32mbcs] ativado com codificação: %s\n"
+
+#, 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 ""
+"AVISO: %s já tem quebras de linha %s\n"
+"e não precisa da conversão de fim de linha do plugin win32text.\n"
+"Antes da próxima consolidação, por favor reconsidere suas\n"
+"configurações de encode/decode em\n"
+"Mercurial.ini ou %s.\n"
+
+#, 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"
+
+#, python-format
+msgid "in %s: %s\n"
+msgstr "em %s: %s\n"
+
+#, 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 ""
+"\n"
+"Para prevenir esse engano no seu repositório local,\n"
+"adicione ao Mercurial.ini ou .hg/hgrc:\n"
+"\n"
+"[hooks]\n"
+"pretxncommit.%s = python:hgext.win32text.forbid%s\n"
+"\n"
+"e considere também a adição de:\n"
+"\n"
+"[extensions]\n"
+"hgext.win32text =\n"
+"[encode]\n"
+"** = %sencode:\n"
+"[decode]\n"
+"** = %sdecode:\n"
+
+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 ""
+"suporte zeroconf para repositórios do Mercurial\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"
+" $ cd test\n"
+" $ hg serve\n"
+"\n"
+"Você pode encontrar repositórios com zeroconf habilitado executando\n"
+"\"hg paths\".\n"
+"\n"
+" $ hg paths\n"
+" zc-test = http://example.com:8000/test\n"
+
+msgid "archive prefix contains illegal components"
+msgstr "prefixo de arquivo contém componentes ilegais"
+
+msgid "cannot give prefix when archiving to files"
+msgstr "não é possível fornecer prefixo ao arquivar para arquivos"
+
+#, python-format
+msgid "unknown archive type '%s'"
+msgstr "tipo de arquivo %s desconhecido"
+
+msgid "invalid changegroup"
+msgstr "changegroup inválido"
+
+msgid "unknown parent"
+msgstr "pai desconhecido"
+
+#, python-format
+msgid "integrity check failed on %s:%d"
+msgstr "checagem de integridade falhou em %s:%d"
+
+#, python-format
+msgid "%s: not a Mercurial bundle file"
+msgstr "%s: não é um arquivo de bundle do Mercurial"
+
+#, python-format
+msgid "%s: unknown bundle version"
+msgstr "%s: versão de bundle desconhecida"
+
+#, python-format
+msgid "%s: unknown bundle compression type"
+msgstr "%s: tipo de compressão de bundle desconhecido"
+
+msgid "cannot create new bundle repository"
+msgstr "não é possível criar novo repositório de bundle"
+
+#, python-format
+msgid "premature EOF reading chunk (got %d bytes, expected %d)"
+msgstr "fim de arquivo prematuro lenfdo trecho (%d bytes obtidos, %d esperados)"
+
+#, python-format
+msgid "username %s contains a newline"
+msgstr "nome de usuário %s contém uma quebra de linha"
+
+msgid "options --message and --logfile are mutually exclusive"
+msgstr "opções --message e --logfile são mutuamente exclusivas"
+
+#, python-format
+msgid "can't read commit message '%s': %s"
+msgstr "não é possível ler mensagem de consolidação '%s': %s"
+
+msgid "limit must be a positive integer"
+msgstr "o limite deve ser um inteiro positivo"
+
+msgid "limit must be positive"
+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"
+msgstr "especificador inválido de formato '%%%s' no nome de arquivo de saída"
+
+#, python-format
+msgid "adding %s\n"
+msgstr "adicionando %s\n"
+
+#, python-format
+msgid "removing %s\n"
+msgstr "removendo %s\n"
+
+#, python-format
+msgid "recording removal of %s as rename to %s (%d%% similar)\n"
+msgstr "gravando remoção de %s como renomeação para %s (%d%% de similaridade)\n"
+
+#, python-format
+msgid "%s: not copying - file is not managed\n"
+msgstr "%s: não copiado - o arquivo não é gerenciado\n"
+
+#, python-format
+msgid "%s: not copying - file has been marked for remove\n"
+msgstr "%s: não copiado - o arquivo foi marcado para remoção\n"
+
+#, python-format
+msgid "%s: not overwriting - %s collides with %s\n"
+msgstr "%s: não sobrescrito - %s colide com %s\n"
+
+#, python-format
+msgid "%s: not overwriting - file exists\n"
+msgstr "%s: não sobrescrito - arquivo existe\n"
+
+#, python-format
+msgid "%s: deleted in working copy\n"
+msgstr "%s: apagado na cópia de trabalho\n"
+
+#, python-format
+msgid "%s: cannot copy - %s\n"
+msgstr "%s: impossível copiar - %s\n"
+
+#, python-format
+msgid "moving %s to %s\n"
+msgstr "movendo %s para %s\n"
+
+#, python-format
+msgid "copying %s to %s\n"
+msgstr "copiando %s para %s\n"
+
+#, 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"
+
+msgid "no source or destination specified"
+msgstr "nehnuma origem ou destino especificado"
+
+msgid "no destination specified"
+msgstr "nenhum destino especificado"
+
+msgid "with multiple sources, destination must be an existing directory"
+msgstr "com várias origens o destino deve ser um diretório existente"
+
+#, python-format
+msgid "destination %s is not a directory"
+msgstr "o destino %s não é um diretório"
+
+msgid "no files to copy"
+msgstr "nenhum arquivo para copiar"
+
+msgid "(consider using --after)\n"
+msgstr "(considere usar --after)\n"
+
+#, python-format
+msgid "changeset:   %d:%s\n"
+msgstr "changeset:   %d:%s\n"
+
+#, python-format
+msgid "branch:      %s\n"
+msgstr "ramo:        %s\n"
+
+#, python-format
+msgid "tag:         %s\n"
+msgstr "etiqueta:    %s\n"
+
+#, python-format
+msgid "parent:      %d:%s\n"
+msgstr "pai:         %d:%s\n"
+
+#, python-format
+msgid "manifest:    %d:%s\n"
+msgstr "manifesto:   %d:%s\n"
+
+#, python-format
+msgid "user:        %s\n"
+msgstr "usuário:     %s\n"
+
+#, python-format
+msgid "date:        %s\n"
+msgstr "data:        %s\n"
+
+msgid "files+:"
+msgstr "arquivos+:"
+
+msgid "files-:"
+msgstr "arquivos-:"
+
+msgid "files:"
+msgstr "arquivos:"
+
+#, python-format
+msgid "files:       %s\n"
+msgstr "arquivos:    %s\n"
+
+#, python-format
+msgid "copies:      %s\n"
+msgstr "cópias:      %s\n"
+
+#, python-format
+msgid "extra:       %s=%s\n"
+msgstr "extra:       %s=%s\n"
+
+msgid "description:\n"
+msgstr "descrição:\n"
+
+#, python-format
+msgid "summary:     %s\n"
+msgstr "sumário:     %s\n"
+
+#, python-format
+msgid "%s: no key named '%s'"
+msgstr "%s: nehuma chave nomeada '%s'"
+
+#, python-format
+msgid "%s: %s"
+msgstr "%s: %s"
+
+#, python-format
+msgid "Found revision %s from %s\n"
+msgstr "encontrada revisão %s de %s\n"
+
+msgid "revision matching date not found"
+msgstr "revisão com data equivalente não encontrada"
+
+#, python-format
+msgid "cannot follow nonexistent file: \"%s\""
+msgstr "não é possível seguir arquivo inexistente: \"%s\""
+
+#, python-format
+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 ""
+"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 ""
+"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"
+"\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"
+"\n"
+"    Se nomes não forem dados, adiciona todos os arquivos ao\n"
+"    repositório.\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 ""
+"adiciona arquivos novos e remove arquivos faltando\n"
+"\n"
+"    Adiciona ao repositório todos os arquivos novos, e remove do\n"
+"    repositório todos os arquivos ausentes.\n"
+"\n"
+"    Novos arquivos são ignorados se casarem com qualquer dos padrões\n"
+"    em .hgignore. Assim como em add, estas mudanças fazem efeito na\n"
+"    próxima consolidação.\n"
+"\n"
+"    Use a opção -s/--similarity para detectar arquivos renomeados.\n"
+"    Com um parâmetro > 0, compara cada arquivo removido com cada\n"
+"    arquivo adicionado e grava como renomeações aqueles semelhantes o\n"
+"    bastante. Esta opção usa uma porcentagem entre 0 (desabilitada)\n"
+"    e 100 (arquivos devem ser idênticos) como parâmetro. Detectar\n"
+"    desta maneira arquivos renomeados pode ser uma operação cara.\n"
+"    "
+
+msgid "similarity must be a number"
+msgstr "similaridade deve ser um número"
+
+msgid "similarity must be between 0 and 100"
+msgstr "similaridade deve ser um número entre 0 e 100"
+
+msgid ""
+"show changeset information per file line\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"
+"\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"
+"\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"
+"\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"
+msgstr "exigido ao menos um nome de arquivo ou padrão"
+
+msgid "at least one of -n/-c is required for -l"
+msgstr "ao menos uma das opções -n/-c é exigida para -l"
+
+#, python-format
+msgid "%s: binary file\n"
+msgstr "%s: arquivo binário\n"
+
+msgid ""
+"create 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 ""
+"cria um pacote não versionado contendo uma revisão do repositório\n"
+"\n"
+"    Por padrão, a revisão usada é o pai do diretório de trabalho; use\n"
+"    -r/--rev para especificar uma outra revisão.\n"
+"\n"
+"    Para especificar o tipo de pacote a ser criado, use -t/--type.\n"
+"    Tipos válidos são:\n"
+"\n"
+"    \"files\" (padrão): um diretório cheio de arquivos\n"
+"    \"tar\": pacote tar, não comprimido\n"
+"    \"tbz2\": pacote tar, comprimido com bzip2\n"
+"    \"tgz\": pacote tar, comprimido com gzip\n"
+"    \"uzip\": pacote zip, não comprimido\n"
+"    \"zip\": pacote zip, comprimido com deflate\n"
+"\n"
+"    O nome exato do pacote de destino ou diretório é dado por uma\n"
+"    string de formatação; veja 'hg help export' para detalhes.\n"
+"\n"
+"    Cada membro adicionado ao pacote tem um diretório de prefixo\n"
+"    adicionado. Use -p/--prefix para especificar uma string de\n"
+"    formatação para o prefixo. O padrão é o nome base do pacote,\n"
+"    com sufixos removidos.\n"
+"    "
+
+msgid "no working directory: please specify a revision"
+msgstr "sem cópia de trabalho: por favor especifique uma revisão"
+
+msgid "repository root cannot be destination"
+msgstr "o raiz do repositório não pode ser o destino"
+
+msgid "cannot archive plain files to stdout"
+msgstr "não se pode empacotar arquivos simples na saída padrão"
+
+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 back out 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"
+"\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 ""
+"anula o efeito de um changeset anterior\n"
+"\n"
+"    Consolida a anulação das mudanças como um novo changeset. O novo\n"
+"    changeset é um filho do changeset anulado.\n"
+"\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"
+"\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"
+"    logo em seguida. Isso poupa o trabalho de fazer uma mesclagem\n"
+"    manual. O resultado da mesclagem não é gravado, assim como em uma\n"
+"    mesclagem normal.\n"
+"\n"
+"    Veja 'hg help dates' para uma lista de formatos válidos para\n"
+"    -d/--date.\n"
+"    "
+
+msgid "please specify just one revision"
+msgstr "por favor especifique apenas uma revisão"
+
+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"
+msgstr "não se pode anular uma mudança em um ramo diferente"
+
+msgid "cannot back out 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"
+msgstr "não se pode anular um changeset de mesclagem sem --parent"
+
+#, python-format
+msgid "%s is not a parent of %s"
+msgstr "%s não é um pai de %s"
+
+msgid "cannot use --parent on non-merge changeset"
+msgstr "não se pode usar --parent num changeset que não seja uma mesclagem"
+
+#, python-format
+msgid "Backed out changeset %s"
+msgstr "Changeset %s anulado"
+
+#, python-format
+msgid "changeset %s backs out changeset %s\n"
+msgstr "o changeset %s anula o changeset %s\n"
+
+#, python-format
+msgid "merging with changeset %s\n"
+msgstr "mesclando com changeset %s\n"
+
+msgid "the backout changeset is a new head - do not forget to merge\n"
+msgstr "o changeset de anulação é uma nova cabeça - não esqueça de mesclar\n"
+
+msgid "(use \"backout --merge\" if you want to auto-merge)\n"
+msgstr "(use \"backout --merge\" se você quiser mesclar automaticamente)\n"
+
+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 bad or\n"
+"    good 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"
+"    "
+msgstr ""
+"busca changesets por subdivisão\n"
+"\n"
+"    Este comando ajuda a encontrar changesets que introduziram\n"
+"    problemas. Para usá-lo, marque como ruim o changeset mais antigo\n"
+"    que apresentar o problema, e como bom o mais recente que não\n"
+"    apresentar o problema. O comando bisect irá atualizar seu\n"
+"    diretório de trabalho para uma revisão a ser testada (a não ser\n"
+"    que a opção -U/--noupdate seja especificada). Uma vez que você\n"
+"    tenha realizado os testes, marque o diretório de trabalho como\n"
+"    ruim ou bom e bisect irá ou atualizar para outro changeset\n"
+"    candidato ou informar que encontrou a revisão ruim.\n"
+"\n"
+"    Como um atalho, você pode também usar o parâmetro de revisão para\n"
+"    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"
+"    "
+
+msgid "The first good revision is:\n"
+msgstr "A primeira revisão boa é:\n"
+
+msgid "The first bad revision is:\n"
+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"
+
+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"
+
+msgid "cannot bisect (no known good revisions)"
+msgstr "não é possível fazer o bisect (nenhuma revisão boa conhecida)"
+
+msgid "cannot bisect (no known bad revisions)"
+msgstr "não é possível fazer o bisect (nenhuma revisão ruim conhecida)"
+
+msgid "(use of 'hg bisect <cmd>' is deprecated)\n"
+msgstr "(uso 'hg bisect <cmd>' é obsoleto)\n"
+
+msgid "incompatible arguments"
+msgstr "argumentos incompatíveis"
+
+#, python-format
+msgid "failed to execute %s"
+msgstr "falhou ao executar %s"
+
+#, python-format
+msgid "%s killed"
+msgstr "%s morto"
+
+#, python-format
+msgid "Changeset %s: %s\n"
+msgstr "Changeset %s: %s\n"
+
+#, python-format
+msgid "Testing changeset %s:%s (%s changesets remaining, ~%s tests)\n"
+msgstr "Testando o changeset %s:%s (%s changesets restando, ~%s testes)\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"
+"\n"
+"    Unless -f/--force is specified, branch will not let you set a\n"
+"    branch name that shadows an existing branch.\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 ""
+"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"
+"\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"
+"\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"
+"    mudança de ramo anterior.\n"
+"\n"
+"    Use o comando 'hg update' para alternar para um ramo existente.\n"
+"    "
+
+#, python-format
+msgid "reset working directory to branch %s\n"
+msgstr "redefine o diretório de trabalho para o ramo %s\n"
+
+msgid "a branch of the same name already exists (use --force to override)"
+msgstr "um ramo de mesmo nome já existe (use --force para forçar)"
+
+#, python-format
+msgid "marked working directory as branch %s\n"
+msgstr "diretório de trabalho marcado como ramo %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"
+"\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 ""
+"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"
+"\n"
+"    Um ramo é considerado ativo se contém cabeças de repositório.\n"
+"\n"
+"    Use o comando 'hg update' para trocar para um ramo existente.\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 ""
+"cria um arquivo de changegroup (coleção de changesets)\n"
+"\n"
+"    Gera um arquivo de changegroup contendo changesets não\n"
+"    encontrados no outro repositório.\n"
+"\n"
+"    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"
+"\n"
+"    O arquivo bundle pode então ser transferido usando métodos\n"
+"    convencionais e aplicado a outro repositório com os comandos\n"
+"    unbundle ou pull. Isto pode ser útil caso o acesso direto para\n"
+"    push e pull não estiver disponível ou se exportar um repositório\n"
+"    completo não for desejável.\n"
+"\n"
+"    A aplicação de um bundle preserva todo o conteúdo dos changesets,\n"
+"    incluindo permissões, informação de cópia/renomeação, e histórico\n"
+"    de revisões.\n"
+"    "
+
+msgid "--base is incompatible with specifiying a destination"
+msgstr "--base é incompatível com uma especificação de destino"
+
+msgid "unknown bundle type specified with --type"
+msgstr "tipo de bundle especificado por --type desconhecido"
+
+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 ""
+"mostra o conteúdo de um arquivo na revisão atual ou pedida\n"
+"\n"
+"    Imprime o conteúdo dos arquivos especificados na revisão pedida.\n"
+"    Se a revisão não for dada, o pai do diretório de trabalho é usado,\n"
+"    ou a tip se nenhuma revisão estiver obtida.\n"
+"\n"
+"    A saída pode ser para um arquivo, e nesse caso o nome do arquivo é\n"
+"    dado através de uma string de formatação.As regras de formatação\n"
+"    são as mesmas que as do comando export, com as seguintes adições:\n"
+"\n"
+"    %s   nome base do arquivo impresso\n"
+"    %d   diretório do arquivo impresso, ou '.' se no raiz do\n"
+"         repositório\n"
+"    %p   caminho do arquivo impresso relativo à raiz\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"
+"    Look at the help text for URLs for important details about ssh://\n"
+"    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 ""
+"cria uma cópia de um repositório existente\n"
+"\n"
+"    Cria uma cópia de um repositório existente em um novo diretório.\n"
+"\n"
+"    Se um diretório de destino não for especificado, será usado o\n"
+"    nome base da origem.\n"
+"\n"
+"    A localização da origem é adicionada ao arquivo .hg/hgrc do novo\n"
+"    repositório, como o padrão a ser usado para futuros comandos\n"
+"    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"
+"    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"
+"    cabeça do ramo 'default'. Se a opção -U/--noupdate for usada, o\n"
+"    novo clone irá conter apenas um repositório (diretório .hg) e\n"
+"    nenhuma cópia de trabalho (o pai da cópia de trabalho será a\n"
+"    revisão null).\n"
+"\n"
+"    Veja 'hg help urls' para formatos válidos da origem.\n"
+"\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"
+"    URLs ssh:// .\n"
+"\n"
+"    Por eficiência, hardlinks são usados para a clonagem sempre que a\n"
+"    origem e o destino estiverem no mesmo sistema de arquivos (note\n"
+"    que isso se aplica apenas aos dados do repositório, e não aos\n"
+"    arquivos da cópia de trabalho). Alguns sistemas de arquivo, como\n"
+"    o AFS, implementam hardlinks incorretamente, mas não informam\n"
+"    erros. Nesses casos, use a opção --pull para evitar o uso de\n"
+"    hardlinks.\n"
+"\n"
+"    Em alguns casos, você pode clonar repositórios e arquivos da\n"
+"    cópia de trabalho usando hardlinks completos com\n"
+"\n"
+"      $ cp -al REPO REPOCLONE\n"
+"\n"
+"    Este é o jeito mais rápido de clonar, mas não é sempre seguro. A\n"
+"    operação não é atômica (garantir que REPO não seja modificado\n"
+"    durante a operação é sua responsabilidade) e você deve ter\n"
+"    certeza que seu editor quebre hardlinks (o Emacs e muitos\n"
+"    utilitários do kernel Linux fazem isso). Além disso, esse modo de\n"
+"    criar um clone não é compatível com certas extensões que colocam\n"
+"    seus metadados sob o diretório hg, como a 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 means 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\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 ""
+"consolida os arquivos pedidos ou todas as mudanças por gravar\n"
+"\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"
+"    informadas por \"hg status\" serão gravadas.\n"
+"\n"
+"    Se você estiver consolidando o resultado de uma mesclagem, não\n"
+"    forneça nenhum nome de arquivo ou filtros -I/-X .\n"
+"\n"
+"    Se uma mensagem de consolidação não for especificada, o editor\n"
+"    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"
+"    "
+
+msgid "created new head\n"
+msgstr "nova cabeça criada\n"
+
+#, python-format
+msgid "committed changeset %d:%s\n"
+msgstr "consolidado o changeset %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"
+"    stand 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 ""
+"marca arquivos como copiados para a próxima consolidação\n"
+"\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"
+"\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"
+"    -A/--after, a operação é gravada, mas nenhuma cópia é feita.\n"
+"\n"
+"    Este comando faz efeito na próxima consolidação. para desfazer\n"
+"    uma cópia antes disso, veja hg revert.\n"
+"    "
+
+msgid "find the ancestor revision of two revisions in a given index"
+msgstr "encontra a revisão ancestral de duas revisões no índice dado"
+
+msgid "There is no Mercurial repository here (.hg not found)"
+msgstr "Não há um repositório do Mercurial aqui (.hg não encontrado)"
+
+msgid "either two or three arguments required"
+msgstr "ou dois ou três argumentos necessários"
+
+msgid "returns the completion list associated with the given command"
+msgstr "devolve a lista de complementos associada ao comando dado"
+
+msgid "rebuild the dirstate as it would look like for the given revision"
+msgstr "reconstrói o dirstate como ele pareceria para a revisão dada"
+
+msgid "validate the correctness of the current dirstate"
+msgstr "valida a exatidão do dirstate atual"
+
+#, python-format
+msgid "%s in state %s, but not in manifest1\n"
+msgstr "%s no estado %s, mas não no manifest1\n"
+
+#, python-format
+msgid "%s in state %s, but also in manifest1\n"
+msgstr "%s no estado %s, mas também no manifest1\n"
+
+#, python-format
+msgid "%s in state %s, but not in either manifest\n"
+msgstr "%s no estado %s, mas não em qualquer manifesto\n"
+
+#, python-format
+msgid "%s in manifest1, but listed as state %s"
+msgstr "%s no manifest1, mas listado como estado %s"
+
+msgid ".hg/dirstate inconsistent with current parent's manifest"
+msgstr ".hg/dirstate inconsistente com manifesto do pai atual"
+
+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."
+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"
+"    configuração.\n"
+"\n"
+"    Com um argumento da forma 'secão.nome', imprime apenas o valor\n"
+"    desse ítem 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."
+
+msgid "only one config item permitted"
+msgstr "apenas um ítem de configuração permitido"
+
+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 ""
+"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"
+"    "
+
+msgid "show the contents of the current dirstate"
+msgstr "mostra o conteúdo do dirstate atual"
+
+#, python-format
+msgid "copy: %s -> %s\n"
+msgstr "cópia: %s -> %s\n"
+
+msgid "dump the contents of a data file revision"
+msgstr "exibe o conteúdo de uma revisão de dados de arquivo"
+
+#, python-format
+msgid "invalid revision identifier %s"
+msgstr "identificador de revisão inválido %s"
+
+msgid "parse and display a date"
+msgstr "decodifica e exibe uma data"
+
+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 "test Mercurial installation"
+msgstr "testa a instalação do Mercurial"
+
+#, python-format
+msgid "Checking encoding (%s)...\n"
+msgstr "Verificando codificação (%s)...\n"
+
+msgid " (check that your locale is properly set)\n"
+msgstr " (verifique se seu locale está configurado propriamente)\n"
+
+msgid "Checking extensions...\n"
+msgstr "Verificando extensões...\n"
+
+msgid " One or more extensions could not be found"
+msgstr " Uma ou mais extensões não puderam ser encontradas"
+
+msgid " (check that you compiled the extensions)\n"
+msgstr " (verifique se você compilou as extensões)\n"
+
+msgid "Checking templates...\n"
+msgstr "Verificando modelos...\n"
+
+msgid " (templates seem to have been installed incorrectly)\n"
+msgstr " (modelos parecem ter sido instalados incorretamente)\n"
+
+msgid "Checking patch...\n"
+msgstr "Verificando patch...\n"
+
+msgid " patch call failed:\n"
+msgstr "chamada de patch falhou:\n"
+
+msgid " unexpected patch output!\n"
+msgstr "saída de patch inesperada!\n"
+
+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 "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"
+
+msgid " (specify a commit editor in your .hgrc file)\n"
+msgstr " (especifique um editor para consolidação em seu arquivo .hgrc)\n"
+
+#, python-format
+msgid " Can't find editor '%s' in PATH\n"
+msgstr " Não é possível localizar editor '%s' no PATH\n"
+
+msgid "Checking username...\n"
+msgstr "Verificando nome de usuário...\n"
+
+msgid " (specify a username in your .hgrc file)\n"
+msgstr " (especifique um nome de usuário em seu arquivo .hgrc)\n"
+
+msgid "No problems detected\n"
+msgstr "Nenhum problema detectado\n"
+
+#, python-format
+msgid "%s problems detected, please check your install!\n"
+msgstr "%s problemas detectados, por favor verifique sua instalação!\n"
+
+msgid "dump rename information"
+msgstr "exibe informações de renomeação"
+
+#, python-format
+msgid "%s renamed from %s:%s\n"
+msgstr "%s renomeado de %s:%s\n"
+
+#, python-format
+msgid "%s not renamed\n"
+msgstr "%s não renomeado\n"
+
+msgid "show how files match on given patterns"
+msgstr "mostra como os arquivos casam com os padrões pedidos"
+
+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 ""
+"exibe um diff do repositório (ou arquivos selecionados)\n"
+"\n"
+"    Mostra diferenças entre revisões para os arquivos especificados.\n"
+"\n"
+"    Diferenças entre arquivos são mostradas usando o formato\n"
+"    \"unified diff\".\n"
+"\n"
+"    NOTA: diff pode gerar resultados inesperados para mesclagens, já\n"
+"    que por padrão irá comparar com o primeiro pai do diretório de\n"
+"    trabalho se uma revisão não for especificada.\n"
+"\n"
+"    Quando dois argumentos de revisão forem dados, as mudanças entre\n"
+"    essas revisões são mostradas. Se apenas uma revisão for\n"
+"    especificada, tal revisão será comparada com o diretório de\n"
+"    trabalho, e se não for especificada uma revisão, os arquivos do\n"
+"    diretório de trabalho serão comparados com seu pai.\n"
+"\n"
+"    Sem a opção -a/--text, diff evitará gerar diffs de arquivos que\n"
+"    detectar como binários. Com -a, diff irá 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 'hg help diffs' para mais informações.\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. Read the diffs help topic 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 ""
+"exibe o cabeçalho e diffs para um ou mais changesets\n"
+"\n"
+"    Imprime o cabeçalho de changeset e diffs para uma ou mais\n"
+"    revisões.\n"
+"\n"
+"    A informação exibida no cabeçalho de changeset é: autor, hash do\n"
+"    changeset, pai(s) e comentário de consolidação.\n"
+"\n"
+"    NOTA: export pode gerar saída de diff inesperada para changesets\n"
+"    de mesclagem, já que irá comparar o changeset de mesclagem apenas\n"
+"    com seu primeiro pai.\n"
+"\n"
+"    A saída pode ser gerada em um arquivo, e nesse caso o nome do\n"
+"    arquivo é dado usando uma string de formato. As regras de\n"
+"    formatação são como segue:\n"
+"\n"
+"    %%   caractere \"%\" literal\n"
+"    %H   hash do changeset (40 bytes hexadecimais)\n"
+"    %N   número de patches gerados\n"
+"    %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"
+"    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"
+"\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"
+"    "
+
+msgid "export requires at least one changeset"
+msgstr "export exige ao menos um changeset"
+
+msgid "exporting patches:\n"
+msgstr "exportando patches:\n"
+
+msgid "exporting patch:\n"
+msgstr "exportando patch:\n"
+
+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 ""
+"procura por um padrão nos arquivos e revisões especificados\n"
+"\n"
+"    Procura em revisões e arquivos por uma expressão regular.\n"
+"\n"
+"    Este comando se comporta de modo diferente do grep do Unix. Ele\n"
+"    aceita apenas expressões regulares Python/Perl. Ele procura no\n"
+"    histórico do repositório, não no diretório de trabalho. Ele\n"
+"    sempre imprime o número da revisão onde um casamento aparece.\n"
+"\n"
+"    Por padrão, grep imprime uma saída apenas para a primeira revisão\n"
+"    de um arquivo no qual ele encontra um casamento. Para fazê-lo\n"
+"    imprimir todas as revisões que contenham uma mudança no casamento\n"
+"    (\"-\" para um casamento que se torna um não-casamento, ou \"+\"\n"
+"    para um não-casamento que se torna um casamento), use a opção\n"
+"    --all .\n"
+"    "
+
+#, python-format
+msgid "grep: invalid match pattern: %s\n"
+msgstr "grep: padrão de busca inválido: %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 ""
+"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"
+"\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"
+"    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"
+"    "
+
+#, python-format
+msgid "no changes on branch %s containing %s are reachable from %s\n"
+msgstr "nenhuma mudança no ramo %s contendo %s pode ser alcançada a partir de %s\n"
+
+#, python-format
+msgid "no changes on branch %s are reachable from %s\n"
+msgstr "nenhuma mudança no ramo %s pode ser alcançada a partir de %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\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"
+"\n"
+"    Dado um tópico, extensão, ou nome de comando, imprime o texto de\n"
+"    ajuda para esse tópico."
+
+msgid "global options:"
+msgstr "opções globais:"
+
+msgid "use \"hg help\" for the full list of commands"
+msgstr "use \"hg help\" para a lista completa de comandos"
+
+msgid "use \"hg help\" for the full list of commands or \"hg -v\" for details"
+msgstr "use \"hg help\" para a lista completa de comandos ou \"hg -v\" para detalhes"
+
+#, python-format
+msgid "use \"hg -v help%s\" to show aliases and global options"
+msgstr "use \"hg -v help%s\" para mostrar apelidos de comandos e opções globais"
+
+#, python-format
+msgid "use \"hg -v help %s\" to show global options"
+msgstr "use \"hg -v help %s\" para mostrar opções globais"
+
+msgid ""
+"list of commands:\n"
+"\n"
+msgstr ""
+"lista de comandos:\n"
+"\n"
+
+#, python-format
+msgid ""
+"\n"
+"aliases: %s\n"
+msgstr ""
+"\n"
+"apelidos: %s\n"
+
+msgid "(no help text available)"
+msgstr "(texto de ajuda não disponível)"
+
+msgid "options:\n"
+msgstr "opções:\n"
+
+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 "no help text available"
+msgstr "texto de ajuda não disponível"
+
+#, python-format
+msgid "%s extension - %s\n"
+msgstr "extensão %s - %s\n"
+
+msgid "Mercurial Distributed SCM\n"
+msgstr "Sistema de controle de versão distribuído Mercurial\n"
+
+msgid ""
+"basic commands:\n"
+"\n"
+msgstr ""
+"comandos básicos:\n"
+"\n"
+
+msgid ""
+"\n"
+"additional help topics:\n"
+"\n"
+msgstr ""
+"\n"
+"tópicos adicionais de ajuda:\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"
+"    With a path, do a lookup in another repository.\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 ""
+"identifica a cópia de trabalho ou revisão especificada\n"
+"\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"
+"\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"
+"    mudanças não gravadas no diretório de trabalho, uma lista de\n"
+"    etiquetas para esta revisão e um nome de ramo para ramos\n"
+"    diferentes do default.\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 (body part must be type text/plain or\n"
+"    text/x-patch to be used). 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 patch name \"-\". See 'hg\n"
+"    help dates' for a list of formats valid for -d/--date.\n"
+"    "
+msgstr ""
+"importa um conjunto ordenado de patches\n"
+"\n"
+"    Importa uma lista de patches e consolida cada um individualmente.\n"
+"\n"
+"    Se houver mudanças não gravadas no diretório de trabalho, import\n"
+"    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"
+"\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"
+"\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"
+"    se o changeset resultante tiver um ID diferente do gravado no\n"
+"    patch. Isso pode acontecer por problemas de conjunto de\n"
+"    caracteres ou outras deficiências no formato de texto de patch.\n"
+"\n"
+"    Com -s/--similarity, hg irá tentar determinar renomeações e\n"
+"    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"
+"    para -d/--date.\n"
+"    "
+
+msgid "applying patch from stdin\n"
+msgstr "aplicando patch da entrada padrão\n"
+
+msgid "no diffs found"
+msgstr "nenhum diff encontrado"
+
+#, python-format
+msgid ""
+"message:\n"
+"%s\n"
+msgstr ""
+"mensagem:\n"
+"%s\n"
+
+msgid "not a mercurial patch"
+msgstr "não é um patch do Mercurial"
+
+msgid "patch is damaged or loses information"
+msgstr "o patch está danificado ou perde informação"
+
+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"
+"\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 ""
+"mostra novos changesets encontrados na origem\n"
+"\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"
+"\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"
+"    pull.\n"
+"\n"
+"    Veja pull para detalhes sobre formatos válidos da origem.\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"
+"\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 ""
+"cria um novo repositório no diretório pedido\n"
+"\n"
+"    Inicializa um novo repositório no diretório dado. Se o diretório\n"
+"    não existir, ele será criado.\n"
+"\n"
+"    Se o diretório não for dado, o diretório atual será usado.\n"
+"\n"
+"    É possível especificar uma URL ssh:// como destino.\n"
+"    Veja 'hg help urls' para mais informações.\n"
+"    "
+
+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"
+"\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"
+"    "
+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"
+"    "
+
+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 file name to follow history across\n"
+"    renames and copies. --follow without a file name 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 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/--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"
+"\n"
+"    Imprime o histórico de revisões dos arquivos especificados ou do\n"
+"    projeto como um todo.\n"
+"\n"
+"    O histórico de arquivos é mostrado sem que informações de cópia e\n"
+"    renomeação sejam seguidas. Use -f/--follow para seguir o\n"
+"    histórico através de renomeações e cópias. --follow sem um nome\n"
+"    de arquivo irá mostrar apenas ancestrais ou descendentes da\n"
+"    revisão de início. --follow-first segue apenas o primeiro pai em\n"
+"    revisões de mesclagem.\n"
+"\n"
+"    Se um intervalo de revisões não for pedido, o padrão é tip:0 a\n"
+"    não ser que --follow seja pedido; nesse caso, o pai do diretório\n"
+"    de trabalho é usado como revisão inicial.\n"
+"\n"
+"    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"
+"    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."
+
+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"
+"\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"
+"    do diretório de trabalho será usado, ou a revisão null se nenhuma\n"
+"    revisão estiver selecionada.\n"
+"\n"
+"    Com a opção -v, imprime permissões de arquivo, links simbólicos\n"
+"    e bits de execução. Com a opção --debug, imprime os hashes de\n"
+"   revisão de arquivo.\n"
+"    "
+
+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"
+"\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"
+"\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"
+"    "
+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"
+"\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"
+"\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"
+"    outra cabeça, a outra cabeça será usada para a mesclagem. Caso\n"
+"    contrário, uma revisão com a qual mesclar deve ser fornecida\n"
+"    explicitamente.\n"
+"    "
+
+#, python-format
+msgid "branch '%s' has %d heads - please merge with an explicit rev"
+msgstr "o ramo '%s' tem %d cabeças - por favor mescle com uma revisão específica"
+
+#, 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"
+
+msgid "there is nothing to merge"
+msgstr "não há nada para mesclar"
+
+#, python-format
+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 ""
+"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 ""
+"mostra changesets não encontrados no destino\n"
+"\n"
+"    Mostra changesets não encontrados no repositório de destino\n"
+"    especificado ou na localização padrão de push. Estes são os\n"
+"    changesets que seriam enviados se um push fosse pedido.\n"
+"\n"
+"    Veja pull para detalhes do formato do destino.\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, 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"
+"    "
+msgstr ""
+"mostra os pais do diretório de trabalho ou da revisão\n"
+"\n"
+"    Imprime as revisões pai do diretório de trabalho. Se uma revisão\n"
+"    for passada com -r/--rev, o pai dessa revisão será impresso. Se\n"
+"    um arquivo for passado, será impressa a revisão na qual esse\n"
+"    arquivo foi mudado por último (anterior à revisão do diretório de\n"
+"    trabalho ou ao argumento --rev, se passado).\n"
+"    "
+
+msgid "can only specify an explicit file name"
+msgstr "só é possível especificar um nome de arquivo explícito"
+
+#, python-format
+msgid "'%s' not found in manifest!"
+msgstr "'%s' não encontrado no manifesto!"
+
+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"
+"\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 ""
+"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"
+"\n"
+"    Nomes de caminho são definidos na seção [paths] de\n"
+"    /etc/mercurial/hgrc e $HOME/.hgrc. Se executado em um\n"
+"    repositório, .hg/hgrc também será usado.\n"
+"\n"
+"    Veja 'hg help urls' para mais informações.\n"
+"    "
+
+msgid "not found!\n"
+msgstr "não encontrado!\n"
+
+msgid "not updating, since new heads added\n"
+msgstr "não foi feita a atualização, já que novas cabeças foram acrescentadas\n"
+
+msgid "(run 'hg heads' to see heads, 'hg merge' to merge)\n"
+msgstr "(execute 'hg heads' para ver cabeças, 'hg merge' para mesclar)\n"
+
+msgid "(run 'hg update' to get a working copy)\n"
+msgstr "(execute 'hg update' para obter uma cópia de trabalho)\n"
+
+msgid ""
+"pull changes from the specified source\n"
+"\n"
+"    Pull changes from a remote repository to the 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"
+"\n"
+"    If SOURCE is omitted, the 'default' path will be used.\n"
+"    See 'hg help urls' for more information.\n"
+"    "
+msgstr ""
+"traz mudanças da origem especificada\n"
+"\n"
+"    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"
+"\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"
+"    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"
+"    the client has forgotten 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"
+"    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"
+"\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"
+"\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"
+"    URLs ssh:// . Se DESTINO for omitido, um caminho padrão será\n"
+"    usado. Veja 'hg help urls' para mais informações.\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"
+
+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 ""
+"desfaz uma transação interrompida\n"
+"\n"
+"    Recupera uma consolidação ou pull interrompido.\n"
+"\n"
+"    Este comando tenta consertar o estado do repositório após uma\n"
+"    operação interrompida. Deve ser necessário apenas se o Mercurial\n"
+"    sugeri-lo.\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.\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"
+"\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 ""
+"remove os arquivos pedidos na próxima consolidação\n"
+"\n"
+"    Agenda os arquivos indicados para remoção do repositório.\n"
+"\n"
+"    Isto apenas remove arquivos do ramo atual, e não de todo o\n"
+"    histórico do projeto. -A/--after pode ser usado para remover\n"
+"    apenas arquivos já removidos do diretório de trabalho,\n"
+"    -f/--force pode ser usado para forçar a remoção, e -Af pode ser\n"
+"    usado para remover os arquivos da próxima revisão sem removê-los\n"
+"    do diretório de trabalho.\n"
+"\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"
+"\n"
+"           A  C  M  !\n"
+"    nada   W  RD W  R\n"
+"    -f     R  RD RD R\n"
+"    -A     W  W  W  R\n"
+"    -Af    R  R  R  R\n"
+"\n"
+"    Este comando agenda os arquivos para serem removidos na próxima\n"
+"    consolidação. Para desfazer uma remoção antes disso, veja\n"
+"    hg revert.\n"
+"    "
+
+msgid "no files specified"
+msgstr "nenhum arquivo especificado"
+
+#, python-format
+msgid "not removing %s: file %s (use -f to force removal)\n"
+msgstr "arquivo %s não removido: %s (use -f para forçar a remoção)\n"
+
+msgid "still exists"
+msgstr "ainda existe"
+
+msgid "is modified"
+msgstr "alterado"
+
+msgid "has been marked for add"
+msgstr "foi marcado para adição"
+
+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 ""
+"renomeia arquivos; equivalente a uma cópia seguida de remoção\n"
+"\n"
+"    Marca dest como cópia da origem; marca as origens como removidas.\n"
+"    Se dest for um diretório, as cópias serão colocadas nesse\n"
+"    diretório. Se dest for um arquivo, só pode haver uma origem.\n"
+"\n"
+"    Por padrão, este comando copia o conteúdo dos arquivos do modo\n"
+"    como estão no diretório de trabalho. Se chamado com -A/--after, a\n"
+"    operação é gravada, mas a cópia não é realizada.\n"
+"\n"
+"    Este comando faz efeito na próxima consolidação. Para desfazer\n"
+"    uma renomeação antes disso, veja 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 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"
+"\n"
+"    The codes used to show the status of files are:\n"
+"    U = unresolved\n"
+"    R = resolved\n"
+"    "
+msgstr ""
+"tenta mesclar novamente arquivos em uma mesclagem ou atualização\n"
+"\n"
+"    Este comando irá de forma limpa tentar mesclar novamente arquivos\n"
+"    não resolvidos usando revisões de arquivo preservadas do último\n"
+"    update ou merge. Para tentar resolver todos os arquivos não\n"
+"    resolvidos, use a opção -a/--all.\n"
+"\n"
+"    Se um conflito foi resolvido manualmente, por favor note que as\n"
+"    alterações serão sobrescritas se a mesclagem for repetida usando\n"
+"    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"
+"    Os códigos usados para mostrar o estado dos arquivos são:\n"
+"    U = não resolvido\n"
+"    R = resolvido\n"
+"    "
+
+msgid "too many options specified"
+msgstr "opções demais especificadas"
+
+msgid "can't specify --all and patterns"
+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"
+
+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 ""
+"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"
+"\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"
+"    trabalho. Isto restaura o conteúdo do arquivos afetados para um\n"
+"    estado inalterado e reverte adições, remoções, cópias e\n"
+"    renomeações. Se o diretório de trabalho tiver dois pais, você\n"
+"    deve especificar explicitamente a revisão para a qual reverter.\n"
+"\n"
+"    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"
+"    Veja 'hg help dates' para uma lista de formatos válidos para\n"
+"    -d/--date.\n"
+"\n"
+"    O comando revert apenas modifica o diretório de trabalho. Ele não\n"
+"    grava nenhuma mudança, nem muda o pai do diretório de trabalho.\n"
+"    Se você reverter para uma revisão diferente do pai do diretório\n"
+"    de trabalho, os arquivos revertidos irão portanto aparecer como\n"
+"    modificados.\n"
+"\n"
+"    Se um arquivo tiver sido removido, será restaurado. Se o bit de\n"
+"    execução de um arquivo for modificado, ele será restaurado.\n"
+"\n"
+"    Se nomes forem fornecidos, todos os arquivos que casarem com\n"
+"    esses nomes serão revertidos. Se não forem passados argumentos,\n"
+"    nenhum arquivo será revertido.\n"
+"\n"
+"    Arquivos modificados são gravados com um sufixo .orig antes da\n"
+"    reversão. Para desabilitar essas cópias, use --no-backup.\n"
+"    "
+
+msgid "you can't specify a revision and a date"
+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"
+
+#, python-format
+msgid "forgetting %s\n"
+msgstr "esquecendo %s\n"
+
+#, python-format
+msgid "reverting %s\n"
+msgstr "revertendo %s\n"
+
+#, python-format
+msgid "undeleting %s\n"
+msgstr "revertendo remoção de %s\n"
+
+#, python-format
+msgid "saving current version of %s as %s\n"
+msgstr "gravando versão atual de %s como %s\n"
+
+#, python-format
+msgid "file not managed: %s\n"
+msgstr "arquivo não gerenciado: %s\n"
+
+#, python-format
+msgid "no changes needed to %s\n"
+msgstr "nenhuma mudança necessária para %s\n"
+
+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 ""
+"desfaz a última transação\n"
+"\n"
+"    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"
+"\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"
+"    repositório. Por exemplo, os seguintes comandos são transacionais,\n"
+"    e seus efeitos podem ser revertidos com rollback:\n"
+"\n"
+"      commit\n"
+"      import\n"
+"      pull\n"
+"      push (com este repositório como destino)\n"
+"      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"
+"    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"
+"    se um rollback for executado.\n"
+"    "
+
+msgid ""
+"print the root (top) of the current working directory\n"
+"\n"
+"    Print the root directory of the current repository.\n"
+"    "
+msgstr ""
+"imprime o raiz (topo) do diretório de trabalho atual\n"
+"\n"
+"    Imprime o diretório raiz do repositório atual.\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 and -E options to log to files.\n"
+"    "
+msgstr ""
+"exporta o repositório por HTTP\n"
+"\n"
+"    Inicial um visualizador e servidor de pull 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"
+"    "
+
+#, python-format
+msgid "listening at http://%s%s/%s (bound to %s:%d)\n"
+msgstr "ouvindo em http://%s%s/%s (associado a %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/--all is given. Unless options\n"
+"    described with \"show only ...\" are given, the options -mardu are\n"
+"    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 difference between them is 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"
+"      = the previous added file was copied from here\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"
+"\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"
+"    com -u/--unknown (desconhecidos) ou -i/--ignored (ignorados).\n"
+"\n"
+"    NOTA: o comando status pode aparentemente discordar do comando\n"
+"    diff se ocorrer uma mudança de permissões ou uma mesclagem. O\n"
+"    formato diff padrão não informa mudanças de permissão e o\n"
+"    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"
+"\n"
+"    Os códigos usados para exibir o estado dos arquivos são:\n"
+"    M = modificado\n"
+"    A = adicionado\n"
+"    R = removido\n"
+"    C = limpo (sem modificações)\n"
+"    ! = faltando (removido por um outro programa, mas ainda\n"
+"        rastreado pelo Mercurial)\n"
+"    ? = não rastreado\n"
+"    I = ignorado\n"
+"      = o arquivo adicionado anteriormente foi copiado deste\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 ""
+"adiciona uma ou mais etiquetas à revisão atual ou pedida\n"
+"\n"
+"    Nomeia uma revisão em particular 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"
+"    para voltar para versões significativas anteriores ou para marcar\n"
+"    pontos de ramificação para versões de distribuição, etc.\n"
+"\n"
+"    Se a revisão não for fornecida, será usada a revisão pai do\n"
+"    diretório de trabalho, ou a tip se a cópia de trabalho não\n"
+"    estiver em uma revisão.\n"
+"\n"
+"    Para facilitar o controle de versão, a distribuição e a\n"
+"    mesclagem de etiquetas, elas são armazenadas em um arquivo\n"
+"    chamado \".hgtags\" que é gerenciado de forma similar a\n"
+"    outros arquivos do projeto, e pode ser editado manualmente se\n"
+"    necessário. O arquivo '.hg/localtags' é usado para etiquetas\n"
+"    locais (não compartilhadas entre repositórios).\n"
+"\n"
+"    Veja 'hg help dates' para uma lista de formatos válidos para\n"
+"    -d/--date.\n"
+"    "
+
+msgid "tag names must be unique"
+msgstr "nomes de etiqueta devem ser únicos"
+
+#, python-format
+msgid "the name '%s' is reserved"
+msgstr "o nome '%s' é reservado"
+
+msgid "--rev and --remove are incompatible"
+msgstr "--rev e --remove são incompatíveis"
+
+#, python-format
+msgid "tag '%s' does not exist"
+msgstr "etiqueta '%s' não existe"
+
+#, python-format
+msgid "tag '%s' is not a global tag"
+msgstr "etiqueta '%s' não é uma etiqueta global"
+
+#, python-format
+msgid "tag '%s' is not a local tag"
+msgstr "etiqueta '%s' não é uma etiqueta local"
+
+#, python-format
+msgid "Removed tag %s"
+msgstr "Etiqueta %s removida"
+
+#, python-format
+msgid "tag '%s' already exists (use -f to force)"
+msgstr "etiqueta '%s' já existe (use -f para forçar)"
+
+#, python-format
+msgid "Added tag %s for changeset %s"
+msgstr "Adicionada etiqueta %s para o changeset %s"
+
+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 ""
+"lista as etiquetas do repositório\n"
+"\n"
+"    Isto 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"
+"    "
+
+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"
+"\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 ""
+"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"
+"\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"
+"    tip desse repositório será a tip do atual. A etiqueta \"tip\" é\n"
+"    especial e não pode ser renomeada ou atribuída a outro\n"
+"    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 ""
+"aplica um ou mais arquivos de changegroup\n"
+"\n"
+"    Aplica um ou mais arquivos comprimidos de changegroup gerados pelo\n"
+"    comando bundle.\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 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"
+"\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 ""
+"atualiza o diretório de trabalho\n"
+"\n"
+"    Atualiza o diretório de trabalho do repositório para a revisão\n"
+"    pedida, ou a tip do ramo atual se a revisão não for especificada.\n"
+"    Use null como revisão para remover a cópia de trabalho (como\n"
+"    'hg clone -U').\n"
+"\n"
+"    Se o diretório de trabalho não contiver mudanças não\n"
+"    consolidadas, será substituído pelo estado da revisão pedida do\n"
+"    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"
+"    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"
+"\n"
+"    Se você quiser atualizar apenas um arquivo para uma revisão\n"
+"    anterior, use o comando 'revert'.\n"
+"\n"
+"    Veja 'hg help dates' para uma lista de formatos válidos para\n"
+"    -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 ""
+"verifica a integridade do repositório\n"
+"\n"
+"    Verifica a integridade do repositório atual.\n"
+"\n"
+"    Isto irá realizar uma verificação ampla da integridade do\n"
+"    repositório, validando os hashes e checksums de cada entrada\n"
+"    no changelog, manifesto, e arquivos rastreados, bem como a\n"
+"    integridade de seus índices e ligações cruzadas.\n"
+"    "
+
+msgid "output version and copyright information"
+msgstr "exibe versão e informação de copyright"
+
+#, python-format
+msgid "Mercurial Distributed SCM (version %s)\n"
+msgstr "Sistema de controle de versão distribuído Mercurial (versão %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 "diretório raiz do repositório ou nome de caminho simbólico"
+
+msgid "change working directory"
+msgstr "muda o diretório de trabalho"
+
+msgid "do not prompt, assume 'yes' for any required answers"
+msgstr "não solicita entrada, assume \"sim\" para qualquer resposta necessária"
+
+msgid "suppress output"
+msgstr "suprime saída"
+
+msgid "enable additional output"
+msgstr "habilita saída adicional"
+
+msgid "set/override config option"
+msgstr "define/sobrepõe opção de configuração"
+
+msgid "enable debugging output"
+msgstr "habilita saída de depuração"
+
+msgid "start debugger"
+msgstr "inicia depurador"
+
+msgid "set the charset encoding"
+msgstr "define a codificação de caracteres"
+
+msgid "set the charset encoding mode"
+msgstr "define o modo de codificação de conjunto de caracteres"
+
+msgid "print traceback on exception"
+msgstr "imprime traceback em exceções"
+
+msgid "time how long the command takes"
+msgstr "mede o tempo de execução de cada comando"
+
+msgid "print command execution profile"
+msgstr "exibe profile de execução de comando"
+
+msgid "output version information and exit"
+msgstr "exibe informação de versão e sai"
+
+msgid "display help and exit"
+msgstr "exibe ajuda e sai"
+
+msgid "do not perform actions, just print output"
+msgstr "não realiza ações, apenas imprime a saída"
+
+msgid "specify ssh command to use"
+msgstr "especifica comando ssh a ser usado"
+
+msgid "specify hg command to run on the remote side"
+msgstr "especifica comando hg para executar do lado remoto"
+
+msgid "include names matching the given patterns"
+msgstr "inclui nomes que casem com os padrões fornecidos"
+
+msgid "exclude names matching the given patterns"
+msgstr "exclui nomes que casem com os padrões fornecidos"
+
+msgid "use <text> as commit message"
+msgstr "usa <texto> como mensagem de consolidação"
+
+msgid "read commit message from <file>"
+msgstr "lê a mensagem de consolidação do 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 "display using template map file"
+msgstr "exibe usando arquivo de mapeamento de modelo"
+
+msgid "display with template"
+msgstr "exibe usando modelo"
+
+msgid "do not show merges"
+msgstr "não mostra mesclagens"
+
+msgid "treat all files as text"
+msgstr "trata todos os arquivos como texto"
+
+msgid "don't include dates in diff headers"
+msgstr "não inclui datas nos cabeçalhos de diff"
+
+msgid "show which function each change is in"
+msgstr "mostra em qual função está cada mudança"
+
+msgid "ignore white space when comparing lines"
+msgstr "ignora espaços em branco ao comparar linhas"
+
+msgid "ignore changes in the amount of white space"
+msgstr "ignora mudanças na quantidade de espaços em branco"
+
+msgid "ignore changes whose lines are all blank"
+msgstr "ignora mudanças cujas linhas sejam todas brancas"
+
+msgid "number of lines of context to show"
+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)"
+
+msgid "[OPTION]... [FILE]..."
+msgstr "[OPÇÃO]... [ARQUIVO]..."
+
+msgid "annotate the specified revision"
+msgstr "faz um annotate da revisão especificada"
+
+msgid "follow file copies and renames"
+msgstr "segue cópias e renomeações"
+
+msgid "list the author (long with -v)"
+msgstr "lista o autor (formato longo com -v)"
+
+msgid "list the date (short with -q)"
+msgstr "lista a data (formato curto com -q)"
+
+msgid "list the revision number (default)"
+msgstr "lista o número de revisão (padrão)"
+
+msgid "list the changeset"
+msgstr "lista o changeset"
+
+msgid "show line number at the first appearance"
+msgstr "exibe números de linha na primeira ocorrência"
+
+msgid "[-r REV] [-f] [-a] [-u] [-d] [-n] [-c] [-l] FILE..."
+msgstr "[-r REV] [-f] [-a] [-u] [-d] [-n] [-c] [-l] FILE..."
+
+msgid "do not pass files through decoders"
+msgstr "não passar arquivos por decodificadores"
+
+msgid "directory prefix for files in archive"
+msgstr "prefixo de diretório para arquivos armazenados"
+
+msgid "revision to distribute"
+msgstr "revisão a ser distribuída"
+
+msgid "type of distribution to create"
+msgstr "tipo de distribuição a ser criada"
+
+msgid "[OPTION]... DEST"
+msgstr "[OPCÃO]... DEST"
+
+msgid "merge with old dirstate parent after backout"
+msgstr "mesclar com pai do dirstate anterior após o backout"
+
+msgid "parent to choose when backing out merge"
+msgstr "pai a ser escolhido ao fazer o backout de mesclagem"
+
+msgid "revision to backout"
+msgstr "revisão para fazer o backout"
+
+msgid "[OPTION]... [-r] REV"
+msgstr "[OPÇÃO]... [-r] REV"
+
+msgid "reset bisect state"
+msgstr "reinicia estado do bisect"
+
+msgid "mark changeset good"
+msgstr "marca changeset bom"
+
+msgid "mark changeset bad"
+msgstr "marca changeset ruim"
+
+msgid "skip testing changeset"
+msgstr "descartando changeset de teste"
+
+msgid "use command to check changeset state"
+msgstr "usa o comando para verificar o estado do changeset"
+
+msgid "do not update to target"
+msgstr "não atualiza para o alvo"
+
+msgid "[-gbsr] [-c CMD] [REV]"
+msgstr "[-gbsr] [-c CMD] [REV]"
+
+msgid "set branch name even if it shadows an existing branch"
+msgstr "especifica nome do ramo mesmo se ocultar um ramo existente"
+
+msgid "reset branch name to parent branch name"
+msgstr "especifica o nome do ramo como o nome do ramo do pai"
+
+msgid "[-fC] [NAME]"
+msgstr "[-fC] [NOME]"
+
+msgid "show only branches that have unmerged heads"
+msgstr "mostra apenas ramos que possuem cabeças não mescladas"
+
+msgid "[-a]"
+msgstr "[-a]"
+
+msgid "run even when remote repository is unrelated"
+msgstr "execute mesmo se o repositório remoto não for relacionado"
+
+msgid "a changeset up to which you would like to bundle"
+msgstr "um changeset até o qual você gostaria de armazenar no bundle"
+
+msgid "a base changeset to specify instead of a destination"
+msgstr "um changeset base a ser especificado ao invés de um destino"
+
+msgid "bundle all changesets in the repository"
+msgstr "cria um bundle com todos os changesets no repositório"
+
+msgid "bundle compression type to use"
+msgstr "tipo de compressão de bundle a ser usada"
+
+msgid "[-f] [-a] [-r REV]... [--base REV]... FILE [DEST]"
+msgstr "[-f] [-a] [-r REV]... [--base REV]... ARQUIVO [DEST]"
+
+msgid "print output to file with formatted name"
+msgstr "imprime a saída para o arquivo com o nome formatado"
+
+msgid "print the given revision"
+msgstr "imprime a revisão dada"
+
+msgid "apply any matching decode filter"
+msgstr "aplica qualquer filtro de decodificação que case"
+
+msgid "[OPTION]... FILE..."
+msgstr "[OPÇÃO]... ARQUIVO..."
+
+msgid "the clone will only contain a repository (no working copy)"
+msgstr "o clone irá conter apenas um repositório (sem cópia de trabalho)"
+
+msgid "a changeset you would like to have after cloning"
+msgstr "um changeset que você gostaria de ter após a clonagem"
+
+msgid "[OPTION]... SOURCE [DEST]"
+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"
+
+msgid "mark a branch as closed, hiding it from the branch list"
+msgstr "marca um ramo como fechado, escondendo-o da lista de ramos"
+
+msgid "record a copy that has already occurred"
+msgstr "grava uma cópia que já ocorreu"
+
+msgid "forcibly copy over an existing managed file"
+msgstr "força cópia sobre um arquivo não gerenciado existente"
+
+msgid "[OPTION]... [SOURCE]... DEST"
+msgstr "[OPÇÃO]... [ORIGEM]... DEST"
+
+msgid "[INDEX] REV1 REV2"
+msgstr "[ÍNDICE] REV1 REV2"
+
+msgid "[COMMAND]"
+msgstr "[COMANDO]"
+
+msgid "show the command options"
+msgstr "exibe opções dos comandos"
+
+msgid "[-o] CMD"
+msgstr "[-o] CMD"
+
+msgid "try extended date formats"
+msgstr "tenta formatos de data estendidos"
+
+msgid "[-e] DATE [RANGE]"
+msgstr "[-e] DATA [INTERVALO]"
+
+msgid "FILE REV"
+msgstr "ARQUIVO REV"
+
+msgid "[PATH]"
+msgstr "[CAMINHO]"
+
+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"
+
+msgid "[-r REV] [REV]"
+msgstr "[-r REV] [REV]"
+
+msgid "revision to debug"
+msgstr "revisão a ser depurada"
+
+msgid "[-r REV] FILE"
+msgstr "[-r REV] ARQUIVO"
+
+msgid "REV1 [REV2]"
+msgstr "REV1 [REV2]"
+
+msgid "do not display the saved mtime"
+msgstr "não exibe o mtime armazenado"
+
+msgid "[OPTION]..."
+msgstr "[OPÇÃO]..."
+
+msgid "[OPTION]... [-r REV1 [-r REV2]] [FILE]..."
+msgstr "[OPÇÃO]... [-r REV1 [-r REV2]] [ARQUIVO]..."
+
+msgid "diff against the second parent"
+msgstr "faz o diff com o segundo pai"
+
+msgid "[OPTION]... [-o OUTFILESPEC] REV..."
+msgstr "[OPÇÃO]... [-o PADRÃOARQSAÍDA] REV..."
+
+msgid "end fields with NUL"
+msgstr "termina campos com NUL"
+
+msgid "print all revisions that match"
+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"
+
+msgid "ignore case when matching"
+msgstr "ignora maiúsculas/minúsculas ao casar"
+
+msgid "print only filenames and revisions that match"
+msgstr "imprime apenas nomes de arquivo e revisões que casarem"
+
+msgid "print matching line numbers"
+msgstr "imprime número de linhas que casarem"
+
+msgid "search in given revision range"
+msgstr "procura no intervalo de revisões dado"
+
+msgid "[OPTION]... PATTERN [FILE]..."
+msgstr "[OPÇÃO]... PADRÃO [ARQUIVO]..."
+
+msgid "show only heads which are descendants of REV"
+msgstr "mostra apenas cabeças descendentes de REV"
+
+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 "[TOPIC]"
+msgstr "[TÓPICO]"
+
+msgid "identify the specified revision"
+msgstr "identifica a revisão especificada"
+
+msgid "show local revision number"
+msgstr "exibe número local de revisão"
+
+msgid "show global revision id"
+msgstr "exibe identificador global de revisão"
+
+msgid "show branch"
+msgstr "exibe ramo"
+
+msgid "show tags"
+msgstr "exibe etiquetas"
+
+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 "base path"
+msgstr "caminho base"
+
+msgid "skip check for outstanding uncommitted changes"
+msgstr "não faz verificação de mudanças ainda não consolidadas"
+
+msgid "don't commit, just update the working directory"
+msgstr "não consolida, apenas atualiza o diretório de trabalho"
+
+msgid "apply patch to the nodes from which it was generated"
+msgstr "aplica o patch aos nós a partir dos quais ele foi gerado"
+
+msgid "use any branch information in patch (implied by --exact)"
+msgstr "usa qualquer informação de ramo no patch (implicada por --exact)"
+
+msgid "[OPTION]... PATCH..."
+msgstr "[OPÇÃO]... PATCH..."
+
+msgid "show newest record first"
+msgstr "mostra registros mais novos primeiro"
+
+msgid "file to store the bundles into"
+msgstr "arquivo no qual armazenar os bundles"
+
+msgid "a specific revision up to which you would like to pull"
+msgstr "uma revisão específica até a qual você gostaria de trazer"
+
+msgid "[-p] [-n] [-M] [-f] [-r REV]... [--bundle FILENAME] [SOURCE]"
+msgstr "[-p] [-n] [-M] [-f] [-r REV]... [--bundle ARQUIVO] [ORIGEM]"
+
+msgid "[-e CMD] [--remotecmd CMD] [DEST]"
+msgstr "[-e CMD] [--remotecmd CMD] [DEST]"
+
+msgid "search the repository as it stood at REV"
+msgstr "procura no repositório como se estivesse em REV"
+
+msgid "end filenames with NUL, for use with xargs"
+msgstr "termina nomes de arquivo com NUL, para uso com xargs"
+
+msgid "print complete paths from the filesystem root"
+msgstr "imprime caminhos completos a partir do raiz do sistema de arquivos"
+
+msgid "[OPTION]... [PATTERN]..."
+msgstr "[OPÇÃO]... [PADRÃO]..."
+
+msgid "only follow the first parent of merge changesets"
+msgstr "acompanha apenas o primeiro pai de changesets de mesclagem"
+
+msgid "show revisions matching date spec"
+msgstr "mostra revisões que casem com a especificação de data"
+
+msgid "show copied files"
+msgstr "mostra arquivos copiados"
+
+msgid "do case-insensitive search for a keyword"
+msgstr "faz uma busca insensível a maiúsculas / minúsculas por uma palavra chave"
+
+msgid "include revisions where files were removed"
+msgstr "inclui revisões nas quais arquivos foram removidos"
+
+msgid "show only merges"
+msgstr "mostra apenas mesclagens"
+
+msgid "revisions committed by user"
+msgstr "revisões de autoria do usuário"
+
+msgid "show only changesets within the given named branch"
+msgstr "mostra apenas changesets dentro do ramo nomeado especificado"
+
+msgid "do not display revision or any of its ancestors"
+msgstr "não exibe revisão ou qualquer de seus ancestrais"
+
+msgid "[OPTION]... [FILE]"
+msgstr "[OPÇÃO]... [ARQUIVO]"
+
+msgid "revision to display"
+msgstr "revisão a ser exibida"
+
+msgid "[-r REV]"
+msgstr "[-r REV]"
+
+msgid "force a merge with outstanding changes"
+msgstr "força uma mesclagem com mudanças ainda não consideradas"
+
+msgid "revision to merge"
+msgstr "revisão a ser mesclada"
+
+msgid "[-f] [[-r] REV]"
+msgstr "[-f] [[-r] REV]"
+
+msgid "a specific revision up to which you would like to push"
+msgstr "uma revisão específica até a qual você gostaria de enviar"
+
+msgid "[-M] [-p] [-n] [-f] [-r REV]... [DEST]"
+msgstr "[-M] [-p] [-n] [-f] [-r REV]... [DEST]"
+
+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 "[NAME]"
+msgstr "[NOME]"
+
+msgid "update to new tip if changesets were pulled"
+msgstr "atualiza para nova tip se changesets forem trazidos"
+
+msgid "[-u] [-f] [-r REV]... [-e CMD] [--remotecmd CMD] [SOURCE]"
+msgstr "[-u] [-f] [-r REV]... [-e CMD] [--remotecmd CMD] [ORIGEM]"
+
+msgid "force push"
+msgstr "força um push"
+
+msgid "[-f] [-r REV]... [-e CMD] [--remotecmd CMD] [DEST]"
+msgstr "[-f] [-r REV]... [-e CMD] [--remotecmd CMD] [DEST]"
+
+msgid "record delete for missing files"
+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"
+
+msgid "record a rename that has already occurred"
+msgstr "grava uma renomeação que já ocorreu"
+
+msgid "[OPTION]... SOURCE... DEST"
+msgstr "[OPÇÃO]... ORIGEM... DESTINO"
+
+msgid "remerge all unresolved files"
+msgstr "mescla novamente todos os arquivos não solucionados"
+
+msgid "list state of files needing merge"
+msgstr "lista estado de arquivos que precisam ser mesclados"
+
+msgid "mark files as resolved"
+msgstr "marca arquivos como solucionados"
+
+msgid "unmark files as resolved"
+msgstr "desmarca arquivos como solucionados"
+
+msgid "revert all changes when no arguments given"
+msgstr "se parâmetros não forem fornecidos, reverte todas as mudanças"
+
+msgid "tipmost revision matching date"
+msgstr "revisão mais recente que casa com a data"
+
+msgid "revision to revert to"
+msgstr "revisão para a qual reverter"
+
+msgid "do not save backup copies of files"
+msgstr "não grava backups de arquivos"
+
+msgid "[OPTION]... [-r REV] [NAME]..."
+msgstr "[OPÇÃO]... [-r REV] [NOME]..."
+
+msgid "name of access log file to write to"
+msgstr "nome do arquivo de log de acesso a ser escrito"
+
+msgid "name of error log file to write to"
+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)"
+
+msgid "address to listen on (default: all interfaces)"
+msgstr "endereço onde escutar (padrão: todas as interfaces)"
+
+msgid "prefix path to serve from (default: server root)"
+msgstr "caminho de prefixo a ser servido (padrão: raiz do servidor)"
+
+msgid "name to show in web pages (default: working directory)"
+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)"
+
+msgid "for remote clients"
+msgstr "para clientes remotos"
+
+msgid "web templates to use"
+msgstr "modelo web a ser usado"
+
+msgid "template style to use"
+msgstr "estilo de modelo a ser usado"
+
+msgid "use IPv6 in addition to IPv4"
+msgstr "usa IPv6 além de IPv4"
+
+msgid "SSL certificate file"
+msgstr "arquivo de certificado de SSL"
+
+msgid "show untrusted configuration options"
+msgstr "mostra opções de configuração não confiáveis"
+
+msgid "[-u] [NAME]..."
+msgstr "[-u] [NOME]..."
+
+msgid "show status of all files"
+msgstr "mostra status de todos os arquivos"
+
+msgid "show only modified files"
+msgstr "mostra apenas arquivos modificados"
+
+msgid "show only added files"
+msgstr "mostra apenas arquivos adicionados"
+
+msgid "show only removed files"
+msgstr "mostra apenas arquivos removidos"
+
+msgid "show only deleted (but tracked) files"
+msgstr "mostra apenas arquivos removidos (mas rastreados)"
+
+msgid "show only files without changes"
+msgstr "mostra apenas arquivos sem mudanças"
+
+msgid "show only unknown (not tracked) files"
+msgstr "mostra apenas arquivos desconhecidos (não rastreados)"
+
+msgid "show only ignored files"
+msgstr "mostra apenas arquivos ignorados"
+
+msgid "hide status prefix"
+msgstr "esconde prefixo de status"
+
+msgid "show source of copied files"
+msgstr "mostra a origem de arquivos copiados"
+
+msgid "show difference from revision"
+msgstr "mostra diferença a partir da revisão"
+
+msgid "replace existing tag"
+msgstr "substitui etiqueta existente"
+
+msgid "make the tag local"
+msgstr "torna a etiqueta local"
+
+msgid "revision to tag"
+msgstr "revisão a receber a etiqueta"
+
+msgid "remove a tag"
+msgstr "remove uma etiqueta"
+
+msgid "[-l] [-m TEXT] [-d DATE] [-u USER] [-r REV] NAME..."
+msgstr "[-l] [-m TEXTO] [-d DATA] [-u USUÁRIO] [-r REV] NOME..."
+
+msgid "[-p]"
+msgstr "[-p]"
+
+msgid "update to new tip if changesets were unbundled"
+msgstr "atualiza para nova tip se os changesets forem extraídos do bundle"
+
+msgid "[-u] FILE..."
+msgstr "[-u] ARQUIVO..."
+
+msgid "overwrite locally modified files (no backup)"
+msgstr "sobrescreve arquivos locais modificados (sem backup)"
+
+msgid "[-C] [-d DATE] [[-r] REV]"
+msgstr "[-C] [-d DATA] [[-r] REV]"
+
+msgid "not found in manifest"
+msgstr "não encontrado no manifesto"
+
+msgid "branch name not in UTF-8!"
+msgstr "nome do ramo não está em UTF-8!"
+
+#, python-format
+msgid "  searching for copies back to rev %d\n"
+msgstr "  procurando por cópias para trás até a revisão %d\n"
+
+#, python-format
+msgid ""
+"  unmatched files in local:\n"
+"   %s\n"
+msgstr ""
+"  arquivo não encontrado localmente:\n"
+"   %s\n"
+
+#, python-format
+msgid ""
+"  unmatched files in other:\n"
+"   %s\n"
+msgstr ""
+"  arquivos não encontrados no outro:\n"
+"   %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"
+
+msgid "  checking for directory renames\n"
+msgstr "  procurando por diretórios renomeados\n"
+
+#, python-format
+msgid "  dir %s -> %s\n"
+msgstr "  dir %s -> %s\n"
+
+#, python-format
+msgid "  file %s -> %s\n"
+msgstr "  arquivo  %s -> %s\n"
+
+#, python-format
+msgid "'\\n' and '\\r' disallowed in filenames: %r"
+msgstr "'\\n' e '\\r' proibidos em nomes de arquivos: %r"
+
+#, python-format
+msgid "directory %r already in dirstate"
+msgstr "diretório %r já está em dirstate"
+
+#, python-format
+msgid "file %r in dirstate clashes with %r"
+msgstr "o arquivo %r em dirstate colide com %r"
+
+#, python-format
+msgid "not in dirstate: %s\n"
+msgstr "não em dirstate: %s\n"
+
+msgid "character device"
+msgstr "dispositivo de caracteres"
+
+msgid "block device"
+msgstr "dispositivo de bloco"
+
+msgid "fifo"
+msgstr "fifo"
+
+msgid "socket"
+msgstr "socket"
+
+msgid "directory"
+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"
+
+#, python-format
+msgid "abort: %s\n"
+msgstr "abortar: %s\n"
+
+#, python-format
+msgid ""
+"hg: command '%s' is ambiguous:\n"
+"    %s\n"
+msgstr ""
+"hg: o comando '%s' é ambiguo:\n"
+"    %s\n"
+
+#, python-format
+msgid "timed out waiting for lock held by %s"
+msgstr "tempo limite excedido esperando por trava de %s"
+
+#, python-format
+msgid "lock held by %s"
+msgstr "travado por %s"
+
+#, python-format
+msgid "abort: %s: %s\n"
+msgstr "abortar: %s: %s\n"
+
+#, python-format
+msgid "abort: could not lock %s: %s\n"
+msgstr "abortar: 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"
+
+#, python-format
+msgid "abort: %s"
+msgstr "abortar: %s"
+
+msgid " empty string\n"
+msgstr " string vazia\n"
+
+msgid "killed!\n"
+msgstr "morto!\n"
+
+#, python-format
+msgid "hg: unknown command '%s'\n"
+msgstr "hg: comando '%s' desconhecido\n"
+
+#, python-format
+msgid "abort: could not import module %s!\n"
+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"
+
+msgid "(is your Python install correct?)\n"
+msgstr "(Sua instalação do Python está correta?)\n"
+
+#, python-format
+msgid "abort: error: %s\n"
+msgstr "abortado: erro: %s\n"
+
+msgid "broken pipe\n"
+msgstr "pipe quebrado\n"
+
+msgid "interrupted!\n"
+msgstr "interrompido!\n"
+
+msgid ""
+"\n"
+"broken pipe\n"
+msgstr ""
+"\n"
+"pipe quebrado\n"
+
+msgid "abort: out of memory\n"
+msgstr "abortado: sem memória\n"
+
+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 "** or mercurial@selenic.com\n"
+msgstr "** ou mercurial@selenic.com\n"
+
+#, python-format
+msgid "** Mercurial Distributed SCM (version %s)\n"
+msgstr "** Mercurial SCM Distribuído (versão %s)\n"
+
+#, python-format
+msgid "** Extensions loaded: %s\n"
+msgstr "** Extenções carregadas: %s\n"
+
+#, python-format
+msgid "malformed --config option: %s"
+msgstr "opção --config mal formada: %s"
+
+#, python-format
+msgid "extension '%s' overrides commands: %s\n"
+msgstr "a extensão '%s' sobrepõe o comando: %s\n"
+
+msgid "Option --config may not be abbreviated!"
+msgstr "A opção --config não pode ser abreviada!"
+
+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!"
+
+#, python-format
+msgid "Time: real %.3f secs (user %.3f+%.3f sys %.3f+%.3f)\n"
+msgstr "Tempo: real %.3f segs (user %.3f+%.3f sys %.3f+%.3f)\n"
+
+#, python-format
+msgid "repository '%s' is not local"
+msgstr "o repositório '%s' não é local"
+
+msgid "invalid arguments"
+msgstr "argumentos inválidos"
+
+#, python-format
+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/"
+
+#, python-format
+msgid "*** failed to import extension %s from %s: %s\n"
+msgstr "*** falha ao importar a extensão %s de %s: %s\n"
+
+#, python-format
+msgid "*** failed to import extension %s: %s\n"
+msgstr "*** falha ao importar a extensão %s: %s\n"
+
+#, python-format
+msgid "couldn't find merge tool %s\n"
+msgstr "não foi possível encontrar ferramenta de mesclagem %s\n"
+
+#, python-format
+msgid "tool %s can't handle symlinks\n"
+msgstr "a ferramenta %s não pode tratar links simbólicos\n"
+
+#, python-format
+msgid "tool %s can't handle binary\n"
+msgstr "a ferramenta %s não pode tratar binários\n"
+
+#, python-format
+msgid "tool %s requires a GUI\n"
+msgstr "a ferramenta %s requer uma interface gráfica (GUI)\n"
+
+#, python-format
+msgid "picked tool '%s' for %s (binary %s symlink %s)\n"
+msgstr "escolhida ferramenta '%s' para %s (binário %s link simbólico %s)\n"
+
+#, python-format
+msgid ""
+" no tool found to merge %s\n"
+"keep (l)ocal or take (o)ther?"
+msgstr ""
+" nenhuma ferramenta encontrada para mesclar %s\n"
+"manter (l)ocal ou usar (o)utro?"
+
+msgid "[lo]"
+msgstr "[lo]"
+
+msgid "l"
+msgstr "l"
+
+#, python-format
+msgid "merging %s and %s to %s\n"
+msgstr "mesclando %s e %s para %s\n"
+
+#, python-format
+msgid "merging %s\n"
+msgstr "mesclando %s\n"
+
+#, python-format
+msgid "my %s other %s ancestor %s\n"
+msgstr "meu %s outro %s ancestral %s\n"
+
+msgid " premerge successful\n"
+msgstr " prémesclagem com sucesso\n"
+
+#, python-format
+msgid ""
+" output file %s appears unchanged\n"
+"was merge successful (yn)?"
+msgstr ""
+" arquivo de saída %s parece não ter modificações\n"
+"a mesclagem teve sucesso (sn)?"
+
+msgid "[yn]"
+msgstr "[sn]"
+
+msgid "n"
+msgstr "n"
+
+#, python-format
+msgid "merging %s failed!\n"
+msgstr "mesclagem de %s falhou!\n"
+
+#, python-format
+msgid "Inconsistent state, %s:%s is good and bad"
+msgstr "Estado inconsistente, %s:%s é bom e ruim"
+
+#, python-format
+msgid "unknown bisect kind %s"
+msgstr "tipo desconhecido de bisect %s"
+
+msgid "Date Formats"
+msgstr "Formatos de datas"
+
+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"
+"    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"
+"\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"
+"    \"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"
+"    \"Dec 6\" (meia noite)\n"
+"    \"13:18\" (data corrente assumida)\n"
+"    \"3:39\" (hora assumida 3:39AM)\n"
+"    \"3:39pm\" (15:39)\n"
+"    \"2006-12-06 13:18:29\" (formato ISO 8601)\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"
+"    E por fim, há um formato interno do Mercurial:\n"
+"\n"
+"    \"1165432709 0\" (Wed Dec 6 13:18:29 2006 UTC)\n"
+"\n"
+"    Este é o formato interno de representação de datas. unixtime é\n"
+"    o número de segundos desde a epoch (1970-01-01 00:00 UTC). offset\n"
+"    é a defasagem do fuso horário local, em segundos a oeste de UTC\n"
+"    (negativo para fusos horários a leste de UTC).\n"
+"\n"
+"    O comando log também aceita intervalos de data:\n"
+"\n"
+"    \"<{date}\" - na data fornecida, ou anterior\n"
+"    \">{date}\" - na data fornecida, ou posterior\n"
+"    \"{date} to {date}\" - um intervalo de data, incluindo os\n"
+"                           extremos\n"
+"    \"-{days}\" - dentro de um certo número de dias contados de hoje\n"
+"    "
+
+msgid "File Name Patterns"
+msgstr "Padrões de nome de arquivo"
+
+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 ""
+"\n"
+"    O Mercurial aceita diversas notações para identificar um ou mais\n"
+"    arquivos de uma vez.\n"
+"\n"
+"    Por padrão, o Mercurial trata nomes de arquivo como padrões\n"
+"    estendidos de glob do shell.\n"
+"\n"
+"    Notações alternativas de padrões devem ser especificadas\n"
+"    explicitamente.\n"
+"\n"
+"    Para usar um nome simples de caminho sem qualquer casamento de\n"
+"    padrões, comece o nome com \"path:\". Estes nomes de caminho\n"
+"    devem bater completamente, a partir da raiz do repositório\n"
+"    atual.\n"
+"\n"
+"    Para usar um glob estendido, comece um nome com \"glob:\". Globs\n"
+"    têm como raiz o diretório corrente; um glob como \"*.c\" baterá\n"
+"    com arquivos terminados em \".c\" apenas no diretório corrente.\n"
+"\n"
+"    As sintaxes de extensão do glob suportadas são \"**\" para bater\n"
+"    com qualquer string incluindo separadores de caminho, e \"{a,b}\"\n"
+"    para significar \"a ou b\".\n"
+"\n"
+"    Para usar uma expressão regular Perl/Python, comece um nome com\n"
+"    \"re:\". O casamento de padrões por expressão regular é feito a\n"
+"    partir do raiz do repositório.\n"
+"\n"
+"    Exemplos simples:\n"
+"\n"
+"    path:foo/bar   o nome bar em um diretório chamado foo no raiz do\n"
+"                   repositório\n"
+"    path:path:name um arquivo ou diretório chamado \"path:name\"\n"
+"\n"
+"    Exemplos de glob:\n"
+"\n"
+"    glob:*.c       qualquer nome terminado por \".c\" no diretório\n"
+"                   atual\n"
+"    *.c            qualquer nome terminado por \".c\" no diretório\n"
+"                   atual\n"
+"    **.c           qualquer nome terminado por \".c\" no diretório\n"
+"                   atual ou em qualquer subdiretório\n"
+"    foo/*.c        qualquer nome terminado por \".c\" no diretório\n"
+"                   foo\n"
+"    foo/**.c       qualquer nome terminado por \".c\" no diretório\n"
+"                   foo ou em qualquer subdiretório\n"
+"\n"
+"    Exemplos de regexp:\n"
+"\n"
+"    re:.*\\.c$     qualquer nome terminado por \".c\", em qualquer\n"
+"                   lugar no repositório\n"
+"\n"
+"    "
+
+msgid "Environment Variables"
+msgstr "Variáveis de ambiente"
+
+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 ""
+"\n"
+"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"
+"\n"
+"HGEDITOR::\n"
+"    Este é o nome do editor usado em consolidações. Veja EDITOR.\n"
+"\n"
+"    (deprecated, use .hgrc)\n"
+"\n"
+"HGENCODING::\n"
+"    É usado no lugar da configuração padrão de locale detectada\n"
+"    pelo Mercurial. Essa configuração é usada para converter dados\n"
+"    como nomes de usuário, descrições de changesets, nomes de\n"
+"    etiqueta e ramos. Essa configuração pode ser sobreposta com a\n"
+"    opção --encoding na linha de comando.\n"
+"\n"
+"HGENCODINGMODE::\n"
+"    Essa configuração ajusta o comportamento do Mercurial no\n"
+"    tratamento de caracteres desconhecidos, ao codificar entradas do\n"
+"    usuário. O padrão é \"strict\", o que faz com que o Mercurial\n"
+"    aborte se ele não puder traduzir um caractere. Outros valores\n"
+"    incluem \"replace\", que substitui caracteres desconhecidos, e\n"
+"    \"ignore\", que os descarta. Essa configuração pode ser\n"
+"    sobreposta com a opção --encodingmode na linha de comando.\n"
+"\n"
+"HGMERGE::\n"
+"    Um executável a ser usado para solucionar conflitos de mesclagem.\n"
+"    O programa será executado com três argumentos: arquivo local,\n"
+"    arquivo remoto, arquivo ancestral.\n"
+"\n"
+"    (obsoleta, use .hgrc)\n"
+"\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"
+"    plataforma será usado. Se vazio, será lido apenas .hg/hgrc no\n"
+"    repositório atual.\n"
+"\n"
+"    Para cada elemento no path que for um diretório, todas as\n"
+"    entradas no diretório terminadas por \".rc\" serão adicionadas\n"
+"    ao path. Caso contrário, o próprio elemento será adicionado ao\n"
+"    path.\n"
+"\n"
+"HGUSER::\n"
+"    Esta é a string usada para o autor de uma consolidação.\n"
+"\n"
+"    (deprecated, use .hgrc)\n"
+"\n"
+"EMAIL::\n"
+"    Se HGUSER não estiver definido, este valor será usado como autor\n"
+"    para consolidações.\n"
+"\n"
+"LOGNAME::\n"
+"    Se nem HGUSER nem EMAIL estiverem definidos, LOGNAME será usado\n"
+"    (com '@hostname' anexado) como o autor de uma consolidação.\n"
+"\n"
+"VISUAL::\n"
+"    Este é o nome do editor a ser usado em consolidações. Veja\n"
+"    EDITOR.\n"
+"\n"
+"EDITOR::\n"
+"    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"
+"    nessa ordem. O primeiro valor não vazio é escolhido. Se todos\n"
+"    estiverem vazios, o editor será o 'vi'.\n"
+"\n"
+"PYTHONPATH::\n"
+"    Isto é usado pelo Python para localizar módulos importados, e\n"
+"    pode precisar ser ajustado apropriadamente se o Mercurial não\n"
+"    estiver instalado para o sistema todo.\n"
+"    "
+
+msgid "Specifying Single Revisions"
+msgstr "Especificação de revisões únicas"
+
+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 ""
+"\n"
+"    O Mercurial aceita diversas notações para identificar revisões\n"
+"    individuais.\n"
+"\n"
+"    Um simples inteiro é tratado como um número de revisão. Inteiros\n"
+"    negativos são tratados como contados topologicamente a partir da\n"
+"    tip, com -1 denotando a tip. Assim, números negativos são úteis\n"
+"    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"
+"    Uma string hexadecimal de 40 dígitos é tratada como um\n"
+"    identificador único de revisão.\n"
+"\n"
+"    Uma string hexadecimal de menos de 40 caracteres é tratada como\n"
+"    um identificador único de revisão, e referida como um\n"
+"    identificador curto. Um identificador curto é válido apenas se\n"
+"    for o prefixo de um identificador completo.\n"
+"\n"
+"    Qualquer outra string é tratada como um nome de etiqueta, que é\n"
+"    um nome simbólico associado a um identificador de revisão. Nomes\n"
+"    de etiqueta não podem conter o caractere \":\".\n"
+"\n"
+"    O nome reservado \"tip\" é uma etiqueta especial que sempre\n"
+"    identifica a revisão mais recente.\n"
+"\n"
+"    O nome reservado \"null\" indica a revisão nula. Essa é a revisão\n"
+"    de um repositório vazio, e a revisão pai da revisão 0.\n"
+"\n"
+"    O nome reservado \".\" indica a revisão pai do diretório de\n"
+"    trabalho. Se nenhum diretório de trabalho estiver selecionado,\n"
+"    será equivalente a null. Se uma mesclagem estiver em progresso,\n"
+"    \".\" será a revisão do primeiro pai.\n"
+"    "
+
+msgid "Specifying Multiple Revisions"
+msgstr "Especificação de múltiplas revisões"
+
+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 ""
+"\n"
+"    Quando o Mercurial aceita mais de uma revisão, elas podem ser\n"
+"    especificadas individualmente, ou fornecidas como uma sequê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"
+"    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"
+"    \"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"
+"    "
+
+msgid "Diff Formats"
+msgstr "Formatos de diff"
+
+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 ""
+"\n"
+"    O formato padrão do Mercurial para exibir mudanças entre duas\n"
+"    versões de um arquivo é compatível com o formato unified do GNU\n"
+"    diff, que pode ser usado pelo GNU patch e muitos outros\n"
+"    utilitários padrão.\n"
+"\n"
+"    Apesar de esse formato padrão ser muitas vezes suficiente, ele\n"
+"    não codifica as seguintes informações:\n"
+"\n"
+"     - bits de execução e permissão\n"
+"     - informação de cópia ou renomeação\n"
+"     - mudanças em arquivos binários\n"
+"     - criação ou remoção de arquivos vazios\n"
+"\n"
+"    O Mercurial também suporta o formato diff estendido do VCS git\n"
+"    que trata dessas limitações. O formato git diff não é\n"
+"    produzido por padrão porque há muito poucas ferramentas que\n"
+"    entendem esse formato.\n"
+"\n"
+"    Isso quer dizer que ao gerar diffs de um repositório do Mercurial\n"
+"    (por exemplo, com \"hg export\"), você deve tomar cuidado com por\n"
+"    exemplo cópias e renomeações de arquivos ou outras coisas\n"
+"    mencionadas acima, porque essa informação extra é perdida ao\n"
+"    aplicar um diff padrão em um outro repositório. As operações\n"
+"    internas do Mercurial (como push e pull) não são afetadas por\n"
+"    isso, porque usam um formato binário interno para comunicar\n"
+"    mudanças.\n"
+"\n"
+"    Para fazer com que o Mercurial produza o formato estendido git\n"
+"    diff, use a opção --git disponível para vários comandos, ou\n"
+"    defina 'git = True' na seção [diff] de seu hgrc. Você não precisa\n"
+"    definir essa opção para importar diffs nesse formato, nem para\n"
+"    usá-lo com a extensão mq.\n"
+"    "
+
+msgid "Template Usage"
+msgstr "Uso de modelos"
+
+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 seprators). For example,\n"
+"          \"foo/bar/baz\" becomes \"baz\" and \"foo/bar//\" becomes \"bar\".\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"
+"    - 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\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 ""
+"\n"
+"    O Mercurial permite que você personalize a saída de comandos\n"
+"    usando modelos. Você pode tanto passar um modelo pela linha de\n"
+"    comando, usando a opção --template, como selecionar um\n"
+"    modelo-estilo existente (--style).\n"
+"\n"
+"    Você pode personalizar a saída de qualquer comando semelhante\n"
+"    ao log: log, outgoing, incoming, tip, parents, heads e glog.\n"
+"\n"
+"    Três estilos são incluídos na distribuição do Mercurial: default\n"
+"    (o estilo usado quando nenhuma preferência for passada), compact\n"
+"    e changelog. Uso:\n"
+"\n"
+"        $ hg log -r1 --style changelog\n"
+"\n"
+"    Um modelo é um texto com marcações que invocam expansão de\n"
+"    variáveis:\n"
+"\n"
+"        $ hg log -r1 --template \"{node}\\n\"\n"
+"        b56ce7b07c52de7d5fd79fb89701ea538af65746\n"
+"\n"
+"    Strings entre chaves são chamadas palavras chave. A\n"
+"    disponibilidade de palavras chave depende do contexto exato do\n"
+"    modelador. Estas palavras chave estão comumente disponíveis para\n"
+"    modelar comandos semelhantes ao log:\n"
+"\n"
+"    - author: String. O autor do changeset, sem modificações.\n"
+"    - branches: String. O nome do ramo no qual o changeset foi\n"
+"          consolidado. Será vazio se o nome do ramo for default.\n"
+"    - date: Informação de data. A data de consolidação do changeset.\n"
+"    - desc: String. O texto da descrição do changeset.\n"
+"    - diffstat: String. Estatísticas de mudanças no seguinte\n"
+"          formato: \"modified files: +added/-removed lines\"\n"
+"    - files: Lista de strings. Todos os arquivos modificados,\n"
+"          adicionados ou removidos por este changeset.\n"
+"    - file_adds: Lista de strings. Arquivos adicionados por este\n"
+"          changeset.\n"
+"    - file_mods: Lista de strings. Arquivos modificados por este\n"
+"          changeset.\n"
+"    - file_dels: Lista de strings. Arquivos removidos por este\n"
+"          changeset.\n"
+"    - node: String. O hash de identificação do changeset, como uma\n"
+"          string hexadecimal de 40 caracteres.\n"
+"    - parents: Lista de strings. Os pais do changeset.\n"
+"    - rev: Inteiro. O número de revisão do changeset no\n"
+"          repositório local.\n"
+"    - tags: Lista de strings. Quaisquer etiquetas associadas ao\n"
+"          changeset.\n"
+"\n"
+"    A palavra chave \"date\" não produz saída legível para humanos.\n"
+"    Se você quiser usar uma data em sua saída, você pode usar um\n"
+"    filtro para processá-la. Filtros são funções que devolvem uma\n"
+"    string baseada na variável de entrada. Você também pode encadear\n"
+"    filtros para obter a saída desejada:\n"
+"\n"
+"       $ hg tip --template \"{date|isodate}\\n\"\n"
+"       2008-08-21 18:22 +0000\n"
+"\n"
+"    Lista de filtros:\n"
+"\n"
+"    - addbreaks: Qualquer texto. Adiciona uma tag XHTML \"<br />\"\n"
+"          antes do fim de cada linha, exceto a última.\n"
+"    - age: Data. Devolve uma diferença de data/tempo legível entre\n"
+"          a data/hora dada e a data/hora atual.\n"
+"    - basename: Qualquer texto. Trata o texto como um caminho, e\n"
+"          devolve o último componente do caminho após quebrá-lo\n"
+"          usando o separador de caminhos (ignorando separadores à\n"
+"          direita). Por exemple, \"foo/bar/baz\" se torna \"baz\"\n"
+"          e \"foo/bar//\" se torna \"bar\".\n"
+"    - 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"
+"    - 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"
+"          'User <user@example.com>' se torna 'example.com'.\n"
+"    - email: Qualquer texto. Extrai a primeira string que se pareça\n"
+"          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"
+"    - 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"
+"    - 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"
+"    - obfuscate: Qualquer texto. Devolve o texto de entrada\n"
+"          renderizado como uma sequê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"
+"          utilizado em cabeçalhos de e-mail.\n"
+"    - short: Hash do changeset. Devolve a forma curta do hash de\n"
+"          um changeset, ou seja, uma string hexadecimal de 12 bytes.\n"
+"    - shortdate: Data. Devolve uma data como \"2006-09-18\".\n"
+"    - strip: Qualquer texto. Remove todos os espaços em branco no\n"
+"          início e no final do texto.\n"
+"    - tabindent: Qualquer texto. Devolve o texto todo, com a adição\n"
+"          de um caractere de tabulação ao início de cada linha,\n"
+"          exceto da primeira.\n"
+"    - urlescape: Qualquer texto. Codifica todos os caracteres\n"
+"          \"especiais\". Por exemplo, \"foo bar\" se torna\n"
+"          \"foo%20bar\".\n"
+"    - user: Qualquer texto. Devolve a parte do usuário de um\n"
+"          endereço de e-mail.\n"
+"    "
+
+msgid "URL Paths"
+msgstr "Caminhos URL"
+
+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 ""
+"\n"
+"    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"
+"\n"
+"    Caminhos no sistema de arquivos local podem tanto apontar para\n"
+"    repositórios do Mercurial como para arquivos bundle (criados por\n"
+"    'hg bundle' ou 'hg incoming --bundle').\n"
+"\n"
+"    Um identificador opcional após # indica um ramo, etiqueta ou\n"
+"    changeset do repositório remoto a ser usado.\n"
+"\n"
+"    Certas funcionalidades, como o push para URLs http:// e https://\n"
+"    são possíveis apenas se forem explicitamente habilitadas no\n"
+"    servidor remoto do Mercurial.\n"
+"\n"
+"    Algumas notas sobre o uso de SSH com o Mercurial:\n"
+"    - o SSH necessita de uma conta shell acessível na máquina de\n"
+"      destino e uma cópia do hg no caminho de execução remoto ou\n"
+"      especificado em remotecmd.\n"
+"    - o caminho é por padrão relativo ao diretório home do usuário\n"
+"      remoto.\n"
+"      Use uma barra extra no início de um caminho para especificar um\n"
+"      caminho absoluto:\n"
+"        ssh://exemplo.com//tmp/repositorio\n"
+"    - o Mercurial não usa sua própria compressão via SSH; a coisa\n"
+"      certa a fazer é configurá-la em seu ~/.ssh/config, por exemplo:\n"
+"        Host *.minharedelocal.exemplo.com\n"
+"          Compression no\n"
+"        Host *\n"
+"          Compression yes\n"
+"      Alternativamente especifique \"ssh -C\" como seu comando ssh\n"
+"      em seu hgrc ou pela opção de linha de comando --ssh .\n"
+"\n"
+"    Estas URLs podem ser todas armazenadas em seu hgrc com apelidos\n"
+"    de caminho na seção [paths] , da seguinte forma:\n"
+"    [paths]\n"
+"    apelido1 = URL1\n"
+"    apelido2 = URL2\n"
+"    ...\n"
+"\n"
+"    Você pode então usar o apelido em qualquer comando que receba uma\n"
+"    URL (por exemplo 'hg pull apelido1' iria trazer revisões do\n"
+"    caminho 'alias1').\n"
+"\n"
+"    Dois apelidos de caminho são especiais por serem usados como\n"
+"    valores padrão quando você não fornece a URL para um comando:\n"
+"\n"
+"    default:\n"
+"      Quando você cria um repositório com hg clone, o comando clone\n"
+"      grava a localização do repositório de origem como o novo\n"
+"      caminho 'default' do repositório. Ele é então usado quando você\n"
+"      omitir o caminho de comandos semelhantes ao push e ao pull\n"
+"      (incluindo incoming e outgoing).\n"
+"\n"
+"    default-push:\n"
+"      O comando push procurará por um caminho chamado 'default-push',\n"
+"      e o usará ao invés de 'default' se ambos estiverem definidos.\n"
+"    "
+
+#, python-format
+msgid "destination directory: %s\n"
+msgstr "diretório de destino: %s\n"
+
+#, python-format
+msgid "destination '%s' already exists"
+msgstr "o destino '%s' já existe"
+
+#, python-format
+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 "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"
+
+msgid "merged"
+msgstr "mesclado"
+
+msgid "removed"
+msgstr "removido"
+
+msgid "unresolved"
+msgstr "não resolvido"
+
+#, 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"
+
+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"
+
+msgid "SSL support is unavailable"
+msgstr "Suporte a SSL indisponível"
+
+msgid "IPv6 is not available on this system"
+msgstr "IPv6 indisponível nesse sistema"
+
+#, python-format
+msgid "cannot start server at '%s:%d': %s"
+msgstr "não é possível iniciar o servidor em '%s:%d': %s"
+
+#, python-format
+msgid "calling hook %s: %s\n"
+msgstr "invocando gancho %s: %s\n"
+
+#, python-format
+msgid "%s hook is invalid (\"%s\" not in a module)"
+msgstr "gancho %s inválido(\"%s\" não está em um módulo)"
+
+#, python-format
+msgid "%s hook is invalid (import of \"%s\" failed)"
+msgstr "hook %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)"
+
+#, python-format
+msgid "%s hook is invalid (\"%s\" is not callable)"
+msgstr "hook %s é inválido (\"%s\" não é executável)"
+
+#, python-format
+msgid "error: %s hook failed: %s\n"
+msgstr "erro: hook %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"
+
+#, python-format
+msgid "%s hook failed"
+msgstr "hook %s falhou"
+
+#, python-format
+msgid "warning: %s hook failed\n"
+msgstr "aviso: hook %s falhou\n"
+
+#, python-format
+msgid "running hook %s: %s\n"
+msgstr "executando hook %s: %s\n"
+
+#, python-format
+msgid "%s hook %s"
+msgstr "hook %s %s"
+
+#, python-format
+msgid "warning: %s hook %s\n"
+msgstr "aviso: hook %s %s\n"
+
+msgid "connection ended unexpectedly"
+msgstr "conexão terminou inesperadamente"
+
+#, python-format
+msgid "unsupported URL component: \"%s\""
+msgstr "componente de URL não suportado: \"%s\""
+
+#, python-format
+msgid "using %s\n"
+msgstr "usando %s\n"
+
+#, python-format
+msgid "capabilities: %s\n"
+msgstr "funcionalidades: %s\n"
+
+msgid "operation not supported over http"
+msgstr "operação não suportada sobre http"
+
+#, python-format
+msgid "sending %s command\n"
+msgstr "enviando comando %s\n"
+
+#, python-format
+msgid "sending %s bytes\n"
+msgstr "enviando %s bytes\n"
+
+msgid "authorization failed"
+msgstr "autorização falhou"
+
+#, python-format
+msgid "http error while sending %s command\n"
+msgstr "erro http ao enviar comando %s\n"
+
+msgid "http error, possibly caused by proxy setting"
+msgstr "erro http, possivelmente causado pela configuração de proxy"
+
+#, python-format
+msgid "real URL is %s\n"
+msgstr "URL real é %s\n"
+
+#, python-format
+msgid "requested URL: '%s'\n"
+msgstr "URL pedida: '%s'\n"
+
+#, python-format
+msgid "'%s' does not appear to be an hg repository"
+msgstr "'%s' não parece ser um repositório hg"
+
+#, python-format
+msgid "'%s' sent a broken Content-Type header (%s)"
+msgstr "'%s' enviou um cabeçalho Content-Type inválido (%s)"
+
+#, python-format
+msgid "'%s' uses newer protocol %s"
+msgstr "'%s' usa protocolo mais novo %s"
+
+msgid "look up remote revision"
+msgstr "procurar revisão remota"
+
+msgid "unexpected response:"
+msgstr "resposta inesperada:"
+
+msgid "look up remote changes"
+msgstr "procurar mudanças remotas"
+
+msgid "push failed (unexpected response):"
+msgstr "o push falhou (resposta inesperada):"
+
+#, python-format
+msgid "push failed: %s"
+msgstr "o push falhou: %s"
+
+msgid "Python support for SSL and HTTPS is not installed"
+msgstr "suporte do Python a SSL e HTTPS não está instalado"
+
+msgid "cannot create new http repository"
+msgstr "impossível criar novo repositório http"
+
+#, python-format
+msgid "%s: ignoring invalid syntax '%s'\n"
+msgstr "%s: ignorando sintaxe inválida '%s'\n"
+
+#, python-format
+msgid "skipping unreadable ignore file '%s': %s\n"
+msgstr "desconsiderando arquivo ignore ilegível '%s': %s\n"
+
+#, python-format
+msgid "repository %s not found"
+msgstr "repositório  %s não encontrado"
+
+#, python-format
+msgid "repository %s already exists"
+msgstr "repositório %s já existe"
+
+#, python-format
+msgid "requirement '%s' not supported"
+msgstr "requisito '%s' não suportado"
+
+#, 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)"
+
+#, python-format
+msgid "%s, line %s: %s\n"
+msgstr "%s, linha %s: %s\n"
+
+msgid "cannot parse entry"
+msgstr "não é possível decodificar entrada"
+
+#, python-format
+msgid "node '%s' is not well formed"
+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"
+
+#, python-format
+msgid "unknown revision '%s'"
+msgstr "revisão desconhecida %s"
+
+#, python-format
+msgid "filtering %s through %s\n"
+msgstr "filtrando %s através de %s\n"
+
+msgid "journal already exists - run hg recover"
+msgstr "journal já existe - execute hg recover"
+
+msgid "rolling back interrupted transaction\n"
+msgstr "desfazendo transação interrompida\n"
+
+msgid "no interrupted transaction available\n"
+msgstr "nenhuma transação interrompida disponível\n"
+
+msgid "rolling back last transaction\n"
+msgstr "desfazendo última transação\n"
+
+#, python-format
+msgid "Named branch could not be reset, current branch still is: %s\n"
+msgstr "O ramo nomeado não pode ser redefinido, o ramo corrente ainda é: %s\n"
+
+msgid "no rollback information available\n"
+msgstr "nenhuma informação de desfazimento disponível\n"
+
+#, python-format
+msgid "waiting for lock on %s held by %r\n"
+msgstr "esperando pelo bloqueio em %s feito por %r\n"
+
+#, python-format
+msgid "repository %s"
+msgstr "repositório %s"
+
+#, python-format
+msgid "working directory of %s"
+msgstr "diretório de trabalho de %s"
+
+#, python-format
+msgid " %s: searching for copy revision for %s\n"
+msgstr " %s: procurando por revisão de cópia para %s\n"
+
+#, python-format
+msgid " %s: copy %s:%s\n"
+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"
+
+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 "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"
+
+#, 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: arquivos acima de 10MB podem causar problemas de memória e desempenho\n"
+"(use 'hg revert %s' para reverter a adição do arquivo)\n"
+
+#, python-format
+msgid "%s not added: only files and symlinks supported currently\n"
+msgstr "%s não adicionado: apenas arquivos e links simbólicos suportados no momento\n"
+
+#, python-format
+msgid "%s already tracked!\n"
+msgstr "%s já rastreado!\n"
+
+#, python-format
+msgid "%s not added!\n"
+msgstr "%s não adicionado!\n"
+
+#, python-format
+msgid "%s still exists!\n"
+msgstr "%s ainda existe!\n"
+
+#, python-format
+msgid "%s not removed!\n"
+msgstr "%s não removido!\n"
+
+#, python-format
+msgid "copy failed: %s is not a file or a symbolic link\n"
+msgstr "cópia falhou: %s não é um arquivo ou um link simbólico\n"
+
+msgid "searching for changes\n"
+msgstr "procurando por mudanças\n"
+
+#, python-format
+msgid "examining %s:%s\n"
+msgstr "examinando %s:%s\n"
+
+msgid "branch already found\n"
+msgstr "ramo já encontrado\n"
+
+#, python-format
+msgid "found incomplete branch %s:%s\n"
+msgstr "encontrado ramo incompleto %s:%s\n"
+
+#, python-format
+msgid "found new changeset %s\n"
+msgstr "encontrado novo changeset %s\n"
+
+#, python-format
+msgid "request %d: %s\n"
+msgstr "pedido %d: %s\n"
+
+#, python-format
+msgid "received %s:%s\n"
+msgstr "recebido %s:%s\n"
+
+#, python-format
+msgid "narrowing %d:%d %s\n"
+msgstr "estreitando %d:%d %s\n"
+
+#, python-format
+msgid "found new branch changeset %s\n"
+msgstr "encontrado novo changeset de ramo %s\n"
+
+#, python-format
+msgid "narrowed branch search to %s:%s\n"
+msgstr "estreitou a busca de ramos para %s:%s\n"
+
+msgid "already have changeset "
+msgstr "já possui o changeset "
+
+msgid "warning: repository is unrelated\n"
+msgstr "aviso: repositório não é relacionado\n"
+
+msgid "repository is unrelated"
+msgstr "repositório não é relacionado"
+
+msgid "found new changesets starting at "
+msgstr "encontrados novos changesets com início em "
+
+#, python-format
+msgid "%d total queries\n"
+msgstr "%d consultas no total\n"
+
+msgid "common changesets up to "
+msgstr "changesets comuns até "
+
+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 "abort: push creates new remote heads!\n"
+msgstr "abortado: push cria novas cabeças remotas!\n"
+
+msgid "(did you forget to merge? use push -f to force)\n"
+msgstr "(você esqueceu de mesclar? Use push -f para forçar)\n"
+
+msgid "note: unsynced remote changes!\n"
+msgstr "aviso: mudanças remotas não sincronizadas!\n"
+
+#, python-format
+msgid "%d changesets found\n"
+msgstr "%d changesets encontrados\n"
+
+msgid "list of changesets:\n"
+msgstr "lista de changesets:\n"
+
+#, python-format
+msgid "empty or missing revlog for %s"
+msgstr "Revlog vazio ou não encontrado para %s"
+
+#, python-format
+msgid "add changeset %s\n"
+msgstr "adicionando changeset %s\n"
+
+msgid "adding changesets\n"
+msgstr "adicionando changesets\n"
+
+msgid "received changelog group is empty"
+msgstr "grupo de changelogs recebido é vazio"
+
+msgid "adding manifests\n"
+msgstr "adicionando manifestos\n"
+
+msgid "adding file changes\n"
+msgstr "adicionando mudanças de arquivo\n"
+
+#, python-format
+msgid "adding %s revisions\n"
+msgstr "adicionando %s revisões\n"
+
+msgid "received file revlog group is empty"
+msgstr "grupo recebido de arquivos revlog vazio"
+
+#, python-format
+msgid " (%+d heads)"
+msgstr " (%+d cabeças)"
+
+#, python-format
+msgid "added %d changesets with %d changes to %d files%s\n"
+msgstr "adicionados %d changesets com %d mudanças em %d arquivos%s\n"
+
+msgid "updating the branch cache\n"
+msgstr "atualizando o cache de ramos\n"
+
+msgid "Unexpected response from remote server:"
+msgstr "resposta inesperada do servidor:"
+
+msgid "operation forbidden by server"
+msgstr "operação não permitida pelo servidor"
+
+msgid "locking the remote repository failed"
+msgstr "o bloqueio do repositório remoto falhou"
+
+msgid "the server sent an unknown error code"
+msgstr "o servidor enviou um código de erro desconhecido"
+
+msgid "streaming all changes\n"
+msgstr "encadeando todas as mudanças\n"
+
+#, python-format
+msgid "%d files to transfer, %s of data\n"
+msgstr "%d arquivos para transferir, %s de dados\n"
+
+#, python-format
+msgid "adding %s (%s)\n"
+msgstr "adicionando %s (%s)\n"
+
+#, python-format
+msgid "transferred %s in %.1f seconds (%s/sec)\n"
+msgstr "transferidos %s em %.1f segundos (%s/s)\n"
+
+msgid "no [smtp]host in hgrc - cannot send mail"
+msgstr "nenhum servidor smtp ('host' em '[smtp]') no hgrc - impossível enviar e-mail"
+
+#, python-format
+msgid "sending mail: smtp host %s, port %s\n"
+msgstr "enviando e-mail: servidor smtp %s, porta %s\n"
+
+msgid "can't use TLS: Python SSL support not installed"
+msgstr "impossível usar TLS: suporte Python a SSL não instalado"
+
+msgid "(using tls)\n"
+msgstr "(usando tls)\n"
+
+#, python-format
+msgid "(authenticating to mail server as %s)\n"
+msgstr "(autenticando com o servidor de e-mail como %s)\n"
+
+#, python-format
+msgid "sending mail: %s\n"
+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"
+
+#, python-format
+msgid "%r specified as email transport, but not in PATH"
+msgstr "%r especificado como um transporte de e-mail, mas não encontrado no PATH"
+
+#, python-format
+msgid "ignoring invalid sendcharset: %s\n"
+msgstr "ignorando sendcharset inválido: %s\n"
+
+#, python-format
+msgid "invalid email address: %s"
+msgstr "endereço de e-mail inválido: %s"
+
+#, python-format
+msgid "invalid local address: %s"
+msgstr "endereço local inválido: %s"
+
+#, python-format
+msgid "failed to remove %s from manifest"
+msgstr "falha ao remover %s do manifesto"
+
+#, python-format
+msgid "diff context lines count must be an integer, not %r"
+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'"
+
+#, python-format
+msgid "case-folding collision between %s and %s"
+msgstr "conflito de maiúsculas e minúsculas entre %s e %s"
+
+msgid "resolving manifests\n"
+msgstr "examinando manifestos\n"
+
+#, python-format
+msgid " overwrite %s partial %s\n"
+msgstr "sobrescrito %s parcial %s\n"
+
+#, python-format
+msgid " ancestor %s local %s remote %s\n"
+msgstr "ancestral %s local %s remoto %s\n"
+
+#, 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 "c"
+msgstr "c"
+
+#, python-format
+msgid ""
+"remote changed %s which local deleted\n"
+"use (c)hanged version or leave (d)eleted?"
+msgstr ""
+"remota mudou %s, apagada pela local\n"
+"use (c) a versão alterada, ou (d) deixe apagada?"
+
+#, python-format
+msgid "preserving %s for resolve of %s\n"
+msgstr "preservando %s para resolução de %s\n"
+
+#, python-format
+msgid "update failed to remove %s: %s!\n"
+msgstr "update falhou ao remover %s: %s!\n"
+
+#, python-format
+msgid "getting %s\n"
+msgstr "obtendo %s\n"
+
+#, python-format
+msgid "getting %s to %s\n"
+msgstr "obtendo %s para %s\n"
+
+#, python-format
+msgid "warning: detected divergent renames of %s to:\n"
+msgstr "aviso: detectadas renomeações divergentes de %s para:\n"
+
+#, python-format
+msgid "branch %s not found"
+msgstr "ramo %s não encontrado"
+
+msgid "can't merge with ancestor"
+msgstr "não é possível mesclar com ancestral"
+
+msgid "nothing to merge (use 'hg update' or check 'hg heads')"
+msgstr "nada para mesclar (use 'hg update' ou verifique 'hg heads')"
+
+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)"
+
+msgid "crosses branches (use 'hg merge' or 'hg update -C')"
+msgstr "atravessa ramos (use 'hg merge' ou 'hg update -C')"
+
+msgid "crosses named branches (use 'hg update -C' to discard changes)"
+msgstr "atravessa ramos nomeados (use 'hg update -C' para descartar mudanças)"
+
+#, python-format
+msgid "cannot create %s: destination already exists"
+msgstr "impossível criar %s: destino já existe"
+
+#, python-format
+msgid "cannot create %s: unable to create destination directory"
+msgstr "impossível criar %s: impossível criar diretório de destino"
+
+#, python-format
+msgid "found patch at byte %d\n"
+msgstr "encontrado patch no byte %d\n"
+
+msgid "patch generated by hg export\n"
+msgstr "patch criado por hg export\n"
+
+#, python-format
+msgid "unable to find '%s' for patching\n"
+msgstr "incapaz de localizar '%s' para modificação\n"
+
+#, python-format
+msgid "patching file %s\n"
+msgstr "modificando arquivo %s\n"
+
+#, python-format
+msgid "%d out of %d hunks FAILED -- saving rejects to file %s\n"
+msgstr "%d de %d trechos FALHARAM -- gravando rejeitados no arquivo %s\n"
+
+#, python-format
+msgid "bad hunk #%d %s (%d %d %d %d)"
+msgstr "trecho ruim #%d %s (%d %d %d %d)"
+
+#, python-format
+msgid "file %s already exists\n"
+msgstr "arquivo %s já existe\n"
+
+#, python-format
+msgid "Hunk #%d succeeded at %d %s(offset %d line).\n"
+msgstr "Trecho #%d aplicado com sucesso em %d %s(distância %d linha).\n"
+
+#, python-format
+msgid "Hunk #%d succeeded at %d %s(offset %d lines).\n"
+msgstr "Trecho #%d aplicado com sucesso em %d %s(distância %d linhas).\n"
+
+#, python-format
+msgid "Hunk #%d FAILED at %d\n"
+msgstr "Trecho #%d FALHOU em %d\n"
+
+#, python-format
+msgid "bad hunk #%d"
+msgstr "trecho ruim #%d"
+
+#, python-format
+msgid "bad hunk #%d old text line %d"
+msgstr "trecho ruim #%d antiga linha de texto %d"
+
+msgid "could not extract binary patch"
+msgstr "não foi possível extrair o patch binário"
+
+#, python-format
+msgid "binary patch is %d bytes, not %d"
+msgstr "patch binário tem %d bytes, e não %d"
+
+#, python-format
+msgid "unable to strip away %d dirs from %s"
+msgstr "impossível remover %d diretórios de %s"
+
+msgid "undefined source and destination files"
+msgstr "arquivos de origem e destino não definidos"
+
+#, python-format
+msgid "malformed patch %s %s"
+msgstr "patch malformado %s %s"
+
+#, python-format
+msgid "unsupported parser state: %s"
+msgstr "estado do parser não suportado: %s"
+
+#, python-format
+msgid "patch command failed: %s"
+msgstr "comando de patch falhou: %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"
+
+#, python-format
+msgid "killed by signal %d"
+msgstr "morto pelo sinal %d"
+
+#, python-format
+msgid "stopped by signal %d"
+msgstr "parado pelo sinal %d"
+
+msgid "invalid exit code"
+msgstr "códogo de saída inválido"
+
+#, python-format
+msgid "saving bundle to %s\n"
+msgstr "salvando bundle em %s\n"
+
+msgid "adding branch\n"
+msgstr "adicionando ramo\n"
+
+#, python-format
+msgid "cannot %s; remote repository does not support the %r capability"
+msgstr "impossível %s; repositório remoto não suporta a funcionalidade '%r'"
+
+#, python-format
+msgid "unknown compression type %r"
+msgstr "tipo de compressão %r desconhecido"
+
+#, python-format
+msgid "index %s unknown flags %#04x for format v0"
+msgstr "índice %s marcadores desconhecidos %#04x para o formato v0"
+
+#, python-format
+msgid "index %s unknown flags %#04x for revlogng"
+msgstr "índice %s marcadores desconhecidos %#04x para o revlogng"
+
+#, python-format
+msgid "index %s unknown format %d"
+msgstr "índice %s formato desconhecido %d"
+
+#, python-format
+msgid "index %s is corrupted"
+msgstr "índice %s corrompido"
+
+msgid "no node"
+msgstr "nenhum nó"
+
+msgid "ambiguous identifier"
+msgstr "identificador ambíguo"
+
+msgid "no match found"
+msgstr "nenhum casamento encontrado"
+
+#, python-format
+msgid "incompatible revision flag %x"
+msgstr "marcação de revisão incompatível %x"
+
+#, python-format
+msgid "%s not found in the transaction"
+msgstr "%s não encontrado na transação"
+
+msgid "unknown base"
+msgstr "base desconhecida"
+
+msgid "consistency error adding group"
+msgstr "erro de concistencia adicionando grupo"
+
+#, python-format
+msgid "%s looks like a binary file."
+msgstr "%s parece um arquivo binário."
+
+msgid "can only specify two labels."
+msgstr "só pode especificar dois rótulos."
+
+msgid "warning: conflicts during merge.\n"
+msgstr "atenção: conflitos durante a mesclagem.\n"
+
+#, python-format
+msgid "couldn't parse location %s"
+msgstr "não foi possível processar localização %s"
+
+msgid "could not create remote repo"
+msgstr "não foi possível criar repositório remoto"
+
+msgid "remote: "
+msgstr "remoto: "
+
+msgid "no suitable response from remote hg"
+msgstr "nenhuma resposta aceitavel do hg remoto"
+
+#, python-format
+msgid "push refused: %s"
+msgstr "envio recusado: %s"
+
+msgid "unsynced changes"
+msgstr "alterações não sincronizadas"
+
+msgid "cannot lock static-http repository"
+msgstr "não é possível travar repositório http estático"
+
+msgid "cannot create new static-http repository"
+msgstr "não é possível criar novo repositório http estático"
+
+#, python-format
+msgid "invalid entry in fncache, line %s"
+msgstr "entrada inválida na fncache, linha %s"
+
+msgid "scanning\n"
+msgstr "lendo\n"
+
+#, python-format
+msgid "%d files, %d bytes to transfer\n"
+msgstr "%d arquivos, %d bytes para transferir\n"
+
+#, python-format
+msgid "sending %s (%d bytes)\n"
+msgstr "enviando %s (%d bytes)\n"
+
+msgid "unmatched quotes"
+msgstr "aspas não combinam"
+
+#, 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"
+
+#, python-format
+msgid "failed to truncate %s\n"
+msgstr "falha ao truncar %s\n"
+
+msgid "rollback completed\n"
+msgstr "desfazer completo\n"
+
+msgid "rollback failed - please run hg recover\n"
+msgstr "rollback falhou - por favor execute hg recover\n"
+
+#, 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"
+
+#, 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 "enter a commit username:"
+msgstr "entre o nome do usuário para consolidação:"
+
+#, python-format
+msgid "No username found, using '%s' instead\n"
+msgstr "Nome de usuário não encontrado, usando '%s'\n"
+
+msgid "Please specify a username."
+msgstr "Por favor, especifique o nome de usuário"
+
+#, python-format
+msgid "username %s contains a newline\n"
+msgstr "nome de usuário %s contém quebra de linha\n"
+
+msgid "unrecognized response\n"
+msgstr "resposta desconhecida\n"
+
+msgid "response expected"
+msgstr "resposta esperada"
+
+msgid "password: "
+msgstr "senha: "
+
+msgid "edit failed"
+msgstr "falha ao editar"
+
+msgid "http authorization required"
+msgstr "autorização http requerida"
+
+msgid "http authorization required\n"
+msgstr "autorização http requerida\n"
+
+#, python-format
+msgid "realm: %s\n"
+msgstr "domínio: %s\n"
+
+#, python-format
+msgid "user: %s\n"
+msgstr "usuário: %s\n"
+
+msgid "user:"
+msgstr "usuário:"
+
+#, 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"
+
+#, python-format
+msgid "path contains illegal component: %s"
+msgstr "o caminho contém componente ilegais: %s"
+
+#, python-format
+msgid "path %r is inside repo %r"
+msgstr "o caminho %r está dentro do repositório %r"
+
+#, python-format
+msgid "path %r traverses symbolic link %r"
+msgstr "o caminho %r percorre o link simbólico %r"
+
+msgid "Hardlinks not supported"
+msgstr "Hardlinks não suportados"
+
+#, python-format
+msgid "could not symlink to %r: %s"
+msgstr "impossível criar link simbólico para %r: %s"
+
+#, python-format
+msgid "invalid date: %r "
+msgstr "data inválida: %r "
+
+#, python-format
+msgid "date exceeds 32 bits: %d"
+msgstr "data supera 32 bit: %d"
+
+#, python-format
+msgid "impossible time zone offset: %d"
+msgstr "fuso horário impossível: %d"
+
+#, python-format
+msgid "invalid day spec: %s"
+msgstr "especificação de dia inválida: %s"
+
+#, 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 byte"
+
+msgid "cannot verify bundle or remote repos"
+msgstr "impossível verificar bundle ou repositório remoto"
+
+msgid "interrupted"
+msgstr "interrompido"
+
+#, python-format
+msgid "empty or missing %s"
+msgstr "%s vazio ou faltando"
+
+#, python-format
+msgid "data length off by %d bytes"
+msgstr "comprimento dos dados difere de %d bytes"
+
+#, python-format
+msgid "index contains %d extra bytes"
+msgstr "Índice contém %d bytes extras"
+
+#, python-format
+msgid "warning: `%s' uses revlog format 1"
+msgstr "aviso: `%s' usa revlog no formato 1"
+
+#, python-format
+msgid "warning: `%s' uses revlog format 0"
+msgstr "aviso: `%s' usa revlog no formato 0"
+
+#, python-format
+msgid "rev %d points to nonexistent changeset %d"
+msgstr "revisão %d aponta para changeset inexistente %d"
+
+#, python-format
+msgid "rev %d points to unexpected changeset %d"
+msgstr "revisão %d aponta para changeset inesperado %d"
+
+#, python-format
+msgid " (expected %s)"
+msgstr "(esperado %s)"
+
+#, python-format
+msgid "unknown parent 1 %s of %s"
+msgstr "pai 1 %s de %s desconhecido"
+
+#, python-format
+msgid "unknown parent 2 %s of %s"
+msgstr "pai 2 %s de %s desconhecido"
+
+#, python-format
+msgid "checking parents of %s"
+msgstr "checando pais de %s"
+
+#, python-format
+msgid "duplicate revision %d (%d)"
+msgstr "revisão duplicada %d (%d)"
+
+#, python-format
+msgid "repository uses revlog format %d\n"
+msgstr "repositório utiliza revlog no formato %d\n"
+
+msgid "checking changesets\n"
+msgstr "checando changesets\n"
+
+#, python-format
+msgid "unpacking changeset %s"
+msgstr "desempacotando changeset %s"
+
+msgid "checking manifests\n"
+msgstr "checando manifestos\n"
+
+msgid "file without name in manifest"
+msgstr "arquivo sem nome no manifesto"
+
+#, python-format
+msgid "reading manifest delta %s"
+msgstr "lendo alterações no manifesto %s"
+
+msgid "crosschecking files in changesets and manifests\n"
+msgstr "checagem cruzada de arquivos no changeset e no manifesto\n"
+
+#, python-format
+msgid "changeset refers to unknown manifest %s"
+msgstr "changeset se refere a manifesto desconhecido %s"
+
+msgid "in changeset but not in manifest"
+msgstr "no changeset mas não no manifesto"
+
+msgid "in manifest but not in changeset"
+msgstr "no manifesto mas não no changeset"
+
+msgid "checking files\n"
+msgstr "checando arquivos\n"
+
+#, python-format
+msgid "cannot decode filename '%s'"
+msgstr "impossível decodificar nome de arquivo '%s'"
+
+#, python-format
+msgid "broken revlog! (%s)"
+msgstr "revlog quebrado! (%s)"
+
+msgid "missing revlog!"
+msgstr "revlog faltando!"
+
+#, python-format
+msgid "%s not in manifests"
+msgstr "%s não está no manifesto"
+
+#, python-format
+msgid "unpacked size is %s, %s expected"
+msgstr "o tamanho descompactado é %s, esperado %s"
+
+#, python-format
+msgid "unpacking %s"
+msgstr "descompactando %s"
+
+#, python-format
+msgid "empty or missing copy source revlog %s:%s"
+msgstr "Revlog de origem %s:%s vazio ou faltando"
+
+#, python-format
+msgid "warning: %s@%s: copy source revision is nullid %s:%s"
+msgstr "aviso: %s@%s: revisão fonte da cópia é nullid %s:%s"
+
+#, python-format
+msgid "checking rename of %s"
+msgstr "checando renomeação de %s"
+
+#, python-format
+msgid "%s in manifests not found"
+msgstr "%s não encontrado no manifesto"
+
+#, python-format
+msgid "warning: orphan revlog '%s'"
+msgstr "atenção: Revlog '%s' orfão"
+
+#, python-format
+msgid "%d files, %d changesets, %d total revisions\n"
+msgstr "%d arquivos, %d changesets, %d revisões ao todo\n"
+
+#, python-format
+msgid "%d warnings encountered!\n"
+msgstr "%d avisos encontrados!\n"
+
+#, python-format
+msgid "%d integrity errors encountered!\n"
+msgstr "%d erros de integridade encontrados!\n"
+
+#, python-format
+msgid "(first damaged changeset appears to be %d)\n"
+msgstr "(primeiro changeset danificada 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.po	Sun Apr 26 11:35:53 2009 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,9204 +0,0 @@
-#
-# Chinese (simplified) translation for Mercurial
-# This file is distributed under the same license as Mercurial
-#
-# Copyright (C) 2009 the Mercurial team
-# Dongsheng Song <dongsheng.song@gmail.com>, 2009
-#
-# $Id: zh.po 1185 2009-02-17 15:10:31Z dongsheng.song $
-#
-# Update with pot file:
-#    msgmerge --update zh.po hg.pot
-#    msgfmt --statistics -c zh.po
-#
-# Please test your translation before commit:
-#    python setup.py build_py -c -d . build_ext -i build_mo
-#    LC_ALL=zh_CN.UTF-8 ./hg
-#
-# Please format your translation before commit:
-#    msgcat --width=80 --sort-by-file -o zh_new.po zh.po
-#    mv -f zh_new.po zh.po
-#
-# Please remove '#: filename:line' lines before submit to hg:
-#    msgcat --width=80 --no-location -o zh_new.po zh.po
-#    mv -f zh_new.po zh.po
-#
-# Dictionary:
-# blame             追溯
-# branch            分支
-# changes           改变
-# changeset         改变集
-# checkout          检出
-# remove            移除(从版本库删除)
-# delete            删除(只从文件系统删除)
-# patchset          补丁集
-# pushing to        推到
-# pulling from      拉自
-# rename            改名
-# repository        版本库
-# revert            恢复
-# revision          版本
-# tag               标签
-# tip               顶点
-# undo              撤销
-# unversioned       未版本控制
-# versioned         受版本控制
-# working copy      工作副本
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Mercurial 1.2\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-17 21:43+0800\n"
-"PO-Revision-Date: 2009-02-17 23:05+0800\n"
-"Last-Translator: Dongsheng Song <dongsheng.song@gmail.com>\n"
-"Language-Team: Chinese translation team <i18n-zh@googlegroups.com>\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"
-"X-Poedit-Language: Chinese\n"
-"X-Poedit-Country: CHINA\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"
-
-msgid "return tuple of (match function, list enabled)."
-msgstr "返回 tuple (匹配函数,启用列表)"
-
-#, 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 "配置错误 - 钩子类型 \"%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 ""
-"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"
-"\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"
-"    "
-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 ""
-"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 "强制"
-
-msgid "revision"
-msgstr "版本"
-
-msgid "delete a given bookmark"
-msgstr "删除指定书签"
-
-msgid "rename a given bookmark"
-msgstr "改名指定书签"
-
-msgid "hg bookmarks [-d] [-m NAME] [-r NAME] [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 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"
-"\n"
-"Configuring the extension:\n"
-"\n"
-"    [bugzilla]\n"
-"    host       Hostname of the MySQL server holding the Bugzilla 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"
-"    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"
-"    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"
-"               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"
-"\n"
-"    [usermap]\n"
-"    Any entries in this section specify mappings of Mercurial committer ID\n"
-"    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"
-"\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 repositories\n"
-"in /var/local/hg/repos/ used with a local Bugzilla 3.2 installation in\n"
-"/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 ""
-
-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"
-
-#, python-format
-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 ""
-
-#, 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 "完成\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 ""
-
-#, 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 ""
-
-#, 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 ""
-
-#, 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 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 ""
-
-msgid "hg children [-r REV] [FILE]"
-msgstr ""
-
-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 ""
-
-#, 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"
-"\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>"
-msgstr ""
-
-#, python-format
-msgid "assuming %i character terminal\n"
-msgstr ""
-
-msgid "count rate for the specified revision or range"
-msgstr ""
-
-msgid "count rate for revs 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 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"
-"\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 "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 ""
-
-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"
-"\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. Otherwise,\n"
-"    convert will only import up to the named revision (given in a format\n"
-"    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"
-"    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"
-"    <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"
-"    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 dirs not explicitely 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"
-"\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"
-"    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"
-"\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=True          (boolean)\n"
-"        allow target to preserve source revision ID\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\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"
-"    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 is a legacy option and may be removed in future.\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.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"
-"        --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"
-"\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"
-"    \"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"
-"\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"
-"    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 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 ""
-
-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 "try to sort changesets by date"
-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 ""
-
-#, 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 "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 "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 "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 "Overriding mapping for author %s, was %s, will be %s\n"
-msgstr ""
-
-#, python-format
-msgid "mapping author %s to %s\n"
-msgstr ""
-
-#, python-format
-msgid "Ignoring bad line in author map file %s: %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 ""
-
-#, 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 "writing cvs log cache %s\n"
-msgstr ""
-
-#, python-format
-msgid "%d log entries\n"
-msgstr ""
-
-msgid "creating changesets\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 "analysing 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 "%s 不是本地的水银版本库"
-
-#, python-format
-msgid "initializing destination %s repository\n"
-msgstr "初始化目标版本库 %s\n"
-
-msgid "run hg sink pre-conversion action\n"
-msgstr "执行动作 hg sink pre-conversion\n"
-
-msgid "run hg sink post-conversion action\n"
-msgstr "执行动作 hg sink post-conversion action\n"
-
-#, python-format
-msgid "pulling from %s into %s\n"
-msgstr "自 %s 拉到 %s\n"
-
-msgid "updating tags\n"
-msgstr "正在更新标签\n"
-
-#, python-format
-msgid "%s is not a valid start revision"
-msgstr "%s 不是有效的开始版本"
-
-#, python-format
-msgid "ignoring: %s\n"
-msgstr "忽略: %s\n"
-
-msgid "run hg source pre-conversion action\n"
-msgstr "执行动作 hg source pre-conversion\n"
-
-msgid "run hg source post-conversion action\n"
-msgstr "执行动作 hg source post-conversion\n"
-
-#, python-format
-msgid "%s does not look like a monotone repo"
-msgstr "%s 不像是单纯的 monotone 版本库"
-
-#, python-format
-msgid "copying file in renamed dir from '%s' to '%s'"
-msgstr "从已改名的目录 '%s' 复制文件到 '%s'"
-
-msgid "Subversion python bindings could not be loaded"
-msgstr "不能加载 svn 的 python 绑定"
-
-#, python-format
-msgid "Subversion python bindings %d.%d found, 1.4 or later required"
-msgstr "发现 svn 的 python 绑定版本 %d.%d,需要 1.4 或更新的版本"
-
-msgid "Subversion python bindings are too old, 1.4 or later required"
-msgstr "svn 的 python 绑定太旧,需要 1.4 或更新的版本"
-
-#, python-format
-msgid "svn: revision %s is not an integer"
-msgstr "svn: 版本 %s 不是整数"
-
-#, python-format
-msgid "svn: start revision %s is not an integer"
-msgstr "svn: 开始版本 %s 不是整数"
-
-#, python-format
-msgid "no revision found in module %s"
-msgstr "没有在模块 %s 中发现版本"
-
-#, python-format
-msgid "expected %s to be at %r, but not found"
-msgstr "期望 %s 位于 %r,但是没有发现"
-
-#, python-format
-msgid "found %s at %r\n"
-msgstr "发现 %s 位于 %r\n"
-
-#, python-format
-msgid "ignoring empty branch %s\n"
-msgstr "忽略空的分支 %s\n"
-
-#, python-format
-msgid "found branch %s at %d\n"
-msgstr "发现分支 %s 位于 %d\n"
-
-msgid "svn: start revision is not supported with with more than one branch"
-msgstr "svn: 在给出多于一个分支时不支持开始版本"
-
-#, python-format
-msgid "svn: no revision found after start revision %d"
-msgstr "svn: 在开始版本 %d 之后没有版本"
-
-#, python-format
-msgid "no tags found at revision %d\n"
-msgstr "在版本 %d 没有发现标签\n"
-
-#, python-format
-msgid "ignoring foreign branch %r\n"
-msgstr "忽略外部分支 %r\n"
-
-#, python-format
-msgid "%s not found up to revision %d"
-msgstr "没有发现 %s,一直到版本 %d"
-
-#, python-format
-msgid "branch renamed from %s to %s at %d\n"
-msgstr "分支从 %s 改名为 %s,在 %d\n"
-
-#, python-format
-msgid "reparent to %s\n"
-msgstr ""
-
-#, python-format
-msgid "copied to %s from %s@%s\n"
-msgstr "复制到 %s,自 %s@%s\n"
-
-#, python-format
-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"
-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"
-
-#, python-format
-msgid "mark %s came from %s:%d\n"
-msgstr "标记 %s 来自 %s:%d\n"
-
-#, python-format
-msgid "parsing revision %d (%d changes)\n"
-msgstr "解析版本 %d (%d 个改变)\n"
-
-#, python-format
-msgid "found parent of branch %s at %d: %s\n"
-msgstr "发现分支 %s 的父亲,在 %d: %s\n"
-
-msgid "no copyfrom path, don't know what to do.\n"
-msgstr "没有 copyfrom 路径,不知道该怎么办。\n"
-
-#, python-format
-msgid "fetching revision log for \"%s\" from %d to %d\n"
-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"
-
-#, python-format
-msgid "svn: branch has no revision %s"
-msgstr "svn: 分支没有版本 %s"
-
-#, python-format
-msgid "%r is not under %r, ignoring\n"
-msgstr "%r 不在 %r 之下,忽略之\n"
-
-#, python-format
-msgid "initializing svn repo %r\n"
-msgstr "初始化 svn 版本库 %r\n"
-
-#, python-format
-msgid "initializing svn wc %r\n"
-msgstr "初始化 svn 工作副本 %r\n"
-
-msgid "unexpected svn output:\n"
-msgstr "意外的 svn 输出:\n"
-
-msgid "unable to cope with svn output"
-msgstr "不能处理 svn 的输出"
-
-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 dir.  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\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"
-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"
-"    "
-msgstr ""
-
-msgid "cannot specify --rev and --change at the same time"
-msgstr "不能同时指定 '--rev' 和 '--change'"
-
-#, 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 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."
-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 ""
-
-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"
-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 automatically\n"
-"    merged, and the result of the merge is committed.  Otherwise, the\n"
-"    working directory is updated to include the new 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 "正在拉自 %s\n"
-
-msgid "fetch -r doesn't work for remote repositories yet"
-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 "新修改集 '%d:%s' 将远程修改与本地合并\n"
-
-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 " 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 ""
-
-#, 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 "associate a string to a key (username, comment)"
-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 "map a manifest into some text"
-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 ""
-
-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 ""
-
-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 ""
-
-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 ""
-
-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 "显示版本分支图"
-
-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 ""
-
-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 ""
-
-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\n"
-"not 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\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"
-"\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"
-"\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 "为此版本库启动服务 'inotify'"
-
-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 "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 ""
-
-#, python-format
-msgid "(inotify: received response from incompatible server version %d)\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 "%s processing %d deferred events as %d\n"
-msgstr ""
-
-#, python-format
-msgid "could not start server: %s"
-msgstr ""
-
-#, python-format
-msgid "received query from incompatible client version %d\n"
-msgstr ""
-
-#, python-format
-msgid "answering query for %r\n"
-msgstr ""
-
-msgid "finished setup\n"
-msgstr ""
-
-msgid "polling: no timeout\n"
-msgstr ""
-
-#, python-format
-msgid "polling: %sms timeout\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$\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"
-"\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 repos.\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"
-"\n"
-"Before changing/disabling active keywords, run \"hg kwshrink\" to avoid\n"
-"the risk of inadvertedly storing expanded keywords in the change 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"
-"\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 ""
-
-msgid "[keyword] patterns cannot match"
-msgstr ""
-
-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"
-"\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 ""
-
-#, python-format
-msgid ""
-"\n"
-"%s keywords written to %s:\n"
-msgstr ""
-
-msgid "unhooked all commit hooks\n"
-msgstr ""
-
-#, python-format
-msgid ""
-"\n"
-"removing temporary repo %s\n"
-msgstr ""
-"\n"
-"正在删除临时版本库 %s\n"
-
-msgid ""
-"expand keywords in 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"
-"    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 ""
-
-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 ""
-
-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 ""
-
-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 ""
-"Apply patchfile  to the working directory.\n"
-"        patchfile: file name of patch"
-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 ""
-
-msgid ""
-"options:\n"
-"           msg: a string or a no-argument function returning a string\n"
-"        "
-msgstr ""
-
-#, python-format
-msgid "patch \"%s\" already exists"
-msgstr ""
-
-#, python-format
-msgid "error unlinking %s\n"
-msgstr ""
-
-msgid "returns (index, rev, patch)"
-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 tip)\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 ""
-
-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 ""
-
-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\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 ""
-
-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 patch.\n"
-"    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"
-"    (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"
-"    format. See the diffs help topic for information on why this is\n"
-"    important for preserving rename/copy information and permission changes.\n"
-"    "
-msgstr ""
-"导入补丁\n"
-"\n"
-"    此补丁插入到最近一次应用的补丁序列中。\n"
-"    如果尚无应用补丁,qimport 会插入补丁到序列开始。\n"
-"\n"
-"    除非你使用 '--name' 给出补丁名称,否则就与源文件同名。\n"
-"\n"
-"    你可以使用 '--existing' 注册一个已在补丁目录中的补丁。\n"
-"\n"
-"    使用 '--force' 会覆盖已有的补丁。\n"
-"\n"
-"    可以使用 '--rev' 将已有的改变集置于 mq 控制下(例如 \n"
-"    'qimport --rev tip -n patch' 会将 tip 置于 mq 控制下)。当使用 '--git'\n"
-"    时,'--rev' 导入的补丁将会使用 git 差异格式。参见差异帮助主题,以了解\n"
-"    为什么这对于保留改名/复制信息和权限修改很重要。\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 ""
-"初始化队列仓库\n"
-"\n"
-"    默认队列仓库不受版本控制。如果指定了 '-c',那么 qinit 会为补丁创建一个\n"
-"    单独的嵌套版本库(也可以稍后运行 'qinit -c' 来将不受版本控制的补丁仓库\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"
-"    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 repo\n"
-msgstr ""
-
-msgid "cloning patch repo\n"
-msgstr ""
-
-msgid "stripping applied patches from destination repo\n"
-msgstr ""
-
-msgid "updating destination repo\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 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"
-"    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 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 ""
-"更新当前补丁\n"
-"\n"
-"    如果提供了文件匹配模式,更新后的补丁只包含匹配这些模式的修改,其它\n"
-"    的修改仍旧在工作目录中。\n"
-"\n"
-"    如果指定了 '--short',只更新已经在补丁中的文件,与文件匹配模式类似。\n"
-"\n"
-"    'hg add/remove/copy/rename' 如常工作,你可能想使用 git 格式补丁(使\n"
-"    用选项 '--git' 或在配置文件的 [diff] 区中设置 git=1)以跟踪复制和改\n"
-"    名。请参见差异帮助主题,以了解关于 git 差异格式的更多信息。\n"
-"    "
-
-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 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 ""
-"显式当前的补丁和后续的修改\n"
-"\n"
-"    显示当前的补丁和最近一次刷新之后的修改(因而在执行 'qrefresh' 之后就只\n"
-"    显示当前的补丁)。\n"
-"\n"
-"    如果你只想看到最近一次刷新之后的修改请使用 'hg diff',如果你只想看到当\n"
-"    前的补丁请使用 'hg export qtip'。\n"
-"    "
-
-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\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 ""
-
-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 --force is applied, all local changes in patched files will be "
-"lost.\n"
-"    "
-msgstr ""
-"将下个补丁压入堆栈\n"
-"\n"
-"    当指定 '--force' 时,所有在补丁文件中的本地修改都会丢失。\n"
-"    "
-
-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 name,\n"
-"    keeps popping off patches until the named patch is at the top of the "
-"stack.\n"
-"    "
-msgstr ""
-"将当前补丁弹出堆栈\n"
-"\n"
-"    默认将补丁堆栈的顶部弹出。如果指定了补丁名称,那么就会一直弹出,直到此\n"
-"    补丁位于堆栈顶部。\n"
-"    "
-
-#, 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 rev"
-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 dir's parent revisions is stripped, the working\n"
-"    directory will be updated to the parent of the stripped revision.\n"
-"    "
-msgstr ""
-"从版本库删除一个版本以及它的子孙\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"
-"\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"
-"\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"
-"\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 ""
-
-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 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 ""
-
-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 "数用协议 'pull' 来复制元数据"
-
-msgid "do not update the new working directories"
-msgstr ""
-
-msgid "use uncompressed transfer (fast over LAN)"
-msgstr "使用不压缩的传输(在局域网更快)"
-
-msgid "location of source patch repo"
-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 dir"
-msgstr "从补丁目录导入文件"
-
-msgid "patch file name"
-msgstr "补丁文件名称"
-
-msgid "overwrite existing files"
-msgstr "覆盖已有文件"
-
-msgid "place existing revisions under mq control"
-msgstr "将现有的版本置于 mq 控制下"
-
-msgid "use git extended diff format"
-msgstr "使用 git 扩展差异格式"
-
-msgid "hg qimport [-e] [-n NAME] [-f] [-g] [-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 "在补丁中增加/更新 \"From: <current user>\""
-
-msgid "add/update \"From: <given user>\" in patch"
-msgstr "在补丁中增加/更新 \"From: <given user>\""
-
-msgid "update \"Date: <current date>\" in patch (if present)"
-msgstr "在补丁中更新 \"Date: <current date>\" (如果存在)"
-
-msgid "update \"Date: <given date>\" in patch (if present)"
-msgstr "在补丁中更新 \"Date: <given date>\" (如果存在)"
-
-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 dir"
-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 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."
-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 ""
-
-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"
-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\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"
-"\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 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"
-"\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,\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"
-"\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"
-"\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 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, i.e. 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"
-"\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 ""
-
-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 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"
-"\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 hgrc.\n"
-"    See the [email] section in hgrc(5) for details.\n"
-"    "
-msgstr ""
-
-msgid "Return the revisions present locally but not in dest"
-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 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 "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 "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 ""
-
-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 and\n"
-"    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"
-"    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 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"
-"    "
-msgstr ""
-
-#, python-format
-msgid "%s cannot be removed"
-msgstr ""
-
-#, python-format
-msgid "warning: %s\n"
-msgstr ""
-
-#, python-format
-msgid "Removing file %s\n"
-msgstr "正在删除文件 %s\n"
-
-#, python-format
-msgid "Removing directory %s\n"
-msgstr "正在删除目录 %s\n"
-
-msgid "abort if an error occurs"
-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 ""
-
-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 "
-"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"
-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 "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 ""
-"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 ""
-
-#, 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 ""
-
-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 ""
-
-#, python-format
-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 ""
-
-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 "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 ""
-
-msgid "rebase from the base of a given revision"
-msgstr ""
-
-msgid "rebase onto a given revision"
-msgstr ""
-
-msgid "collapse the rebased revisions"
-msgstr ""
-
-msgid "continue an interrupted rebase"
-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 ""
-
-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 "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 "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 ""
-
-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 ""
-"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 ""
-
-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 ""
-"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 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 ""
-
-#, 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 ""
-
-msgid "arbitrarily rewrite changeset before applying it"
-msgstr ""
-
-#, python-format
-msgid "filtering %s\n"
-msgstr ""
-
-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 ""
-
-#, python-format
-msgid "%s: empty changeset"
-msgstr ""
-
-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 ""
-
-#, python-format
-msgid "working dir not at transplant parent %s"
-msgstr ""
-
-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 ""
-
-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\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"
-"\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 ""
-
-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\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"
-" * 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"
-"\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 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 ""
-
-#, 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 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"
-"\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 ""
-
-#, 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 file name"
-msgstr ""
-
-#, python-format
-msgid "adding %s\n"
-msgstr ""
-
-#, 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 "%s %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 "(考虑使用 --after)\n"
-
-#, python-format
-msgid "changeset:   %d:%s\n"
-msgstr "修改集:      %d:%s\n"
-
-#, python-format
-msgid "branch:      %s\n"
-msgstr "分支:        %s\n"
-
-#, python-format
-msgid "tag:         %s\n"
-msgstr "标签:        %s\n"
-
-#, python-format
-msgid "parent:      %d:%s\n"
-msgstr "父亲:        %d:%s\n"
-
-#, python-format
-msgid "manifest:    %d:%s\n"
-msgstr "清单:        %d:%s\n"
-
-#, python-format
-msgid "user:        %s\n"
-msgstr "用户:        %s\n"
-
-#, python-format
-msgid "date:        %s\n"
-msgstr "日期:        %s\n"
-
-msgid "files+:"
-msgstr "文件+:"
-
-msgid "files-:"
-msgstr "文件-:"
-
-msgid "files:"
-msgstr "文件:"
-
-#, python-format
-msgid "files:       %s\n"
-msgstr "文件:        %s\n"
-
-#, python-format
-msgid "copies:      %s\n"
-msgstr "复制:        %s\n"
-
-#, python-format
-msgid "extra:       %s=%s\n"
-msgstr "额外:        %s=%s\n"
-
-msgid "description:\n"
-msgstr "描述:\n"
-
-#, python-format
-msgid "summary:     %s\n"
-msgstr "摘要:        %s\n"
-
-#, 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 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 ""
-"add the specified files on the next commit\n"
-"\n"
-"    Schedule files to be version controlled and added to the 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 in the repository.\n"
-"    "
-msgstr ""
-"增加指定文件用于下次提交\n"
-"\n"
-"    调度文件受版本控制,增加到版本库。\n"
-"\n"
-"    这些文件将于下次提交时增加到版本库。要在提交前撤销增加,\n"
-"    请参见 'hg revert'。\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"
-"    "
-msgstr ""
-
-msgid "similarity must be a number"
-msgstr ""
-
-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"
-"    "
-msgstr ""
-"显示指定文件每行的改变集信息\n"
-"\n"
-"    列出文件中的修改,为每行显示版本标识\n"
-"\n"
-"    此命令用于查找谁做出的修改,或者什么时候发生的修改\n"
-"\n"
-"    当没有选项 '-a' 时,annotate 会避免处理检测为二进制的文件\n"
-"    当使用选项 '-a' 时,annotate 会直接产生追溯,可能会有不合需要的结果\n"
-"    "
-
-msgid "at least one file name or pattern required"
-msgstr ""
-
-msgid "at least one of -n/-c is required for -l"
-msgstr ""
-
-#, python-format
-msgid "%s: binary file\n"
-msgstr ""
-
-msgid ""
-"create 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"
-"    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\" to specify a format string for the prefix.\n"
-"    The default is the basename of the archive, with suffixes 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 back out 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"
-"\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 for a normal\n"
-"    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 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 ""
-
-#, 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.\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"
-"    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 and 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"
-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 "failed to execute %s"
-msgstr ""
-
-#, python-format
-msgid "%s killed"
-msgstr ""
-
-#, python-format
-msgid "Changeset %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 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"
-"\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"
-"    found in the other 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"
-"    --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"
-"\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"
-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.\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"
-"    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 repo 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"
-"    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"
-"    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"
-"    "
-
-msgid ""
-"commit the specified files or all outstanding changes\n"
-"\n"
-"    Commit changes to the given files into the repository.\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"
-"    enter 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"
-"    如果你要提交合并结果,请不要提供任何文件名称或过滤器 '-I/-X'。\n"
-"\n"
-"    如果没有指定提交日志,将会启动配置的编辑器,让你输入信息。\n"
-"\n"
-"    参见 'hg help dates' 以获得 '-d/--date' 的有效格式列表。\n"
-"    "
-
-msgid "created new head\n"
-msgstr ""
-
-#, 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"
-"    there can only be one source.\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"
-"    operation is recorded, but no copying is performed.\n"
-"\n"
-"    This command takes effect in 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 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."
-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 .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 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. Read the diffs help topic for more information.\n"
-"    "
-msgstr ""
-"在版本库中比较(指定的文件)\n"
-"\n"
-"    显示指定文件在版本间的差异。\n"
-"\n"
-"    文件间的差异使用同一差异格式显示。\n"
-"\n"
-"    注意: 对合并的比较可能会产生不期望的结果,因为没有指定版本时,默认\n"
-"    与工作目录的直接父亲比较。\n"
-"\n"
-"    当给出两个版本参数时,会显示在这些版本间的修改。如果只给出一个版本,\n"
-"    那么它将与工作目录比较。当没有指定版本时,将比较工作目录中的文件与\n"
-"    它的直接父亲。\n"
-"\n"
-"    当没有选项 '-a' 时,将会避免处理检测为二进制的文件。当使用选项 '-a'\n"
-"    时,可能会有不合需要的结果。\n"
-"\n"
-"    使用选项 '--git' 会使用 git 扩展差异格式。请阅读差异帮助主题以了解\n"
-"    更多信息。\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 changesets,\n"
-"    as it will compare the merge changeset against its 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 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 ""
-"为一个或多个改变集输出标题和差异\n"
-"\n"
-"    为一个或多个版本输出标题和差异。\n"
-"\n"
-"    在改变集标题中显示的信息是: 作者,改变集哈希,父亲和提交日志。\n"
-"\n"
-"    注意: 对于合并改变集,导出可能产生不期望的差异输出,因为它只会将合并\n"
-"    改变集与其第一个父亲比较。\n"
-"\n"
-"    可以输出到文件,这时会使用指定的格式化字符串构造文件名称。格式化规则\n"
-"    如下:\n"
-"\n"
-"    %%   字符 \"%\"\n"
-"    %H   改变集哈希 (40 位十六进制数字)\n"
-"    %N   产生的补丁号\n"
-"    %R   改变集版本号\n"
-"    %b   待导出的版本库的基本名称\n"
-"    %h   短改变集哈希(12 位十六进制数字)\n"
-"    %n   从 1 开始补 0 的序列号\n"
-"    %r   补 0 的改变集版本号\n"
-"\n"
-"    当没有选项 '-a' 时,将会避免处理检测为二进制的文件。当使用选项 '-a'\n"
-"    时,可能会有不合需要的结果。\n"
-"\n"
-"    使用选项 '--git' 会使用 git 扩展差异格式。请阅读差异帮助主题以了解\n"
-"    更多信息。\n"
-"\n"
-"    使用选项 '--switch-parent',将会与第二个父亲比较。对于复审合并很有用。\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\n"
-"    a 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"
-"    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 ""
-
-#, 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 and short help.\n"
-"\n"
-"    Given a topic, extension, or command name, print help for that 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 "使用 \"hg help\" 获得全部命令的列表,或 \"hg -v\" 获得详细信息"
-
-#, 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 ""
-
-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 "分布式软件配置管理工具 - 水银\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 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"
-"    "
-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 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"
-"    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"
-"    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 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"
-"\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 is 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 ""
-"在指定目录创建新版本库\n"
-"\n"
-"    在指定目录初始化新版本库。如果指定的目录不存在,那么会被创建。\n"
-"\n"
-"    如果没有指定目录,就使用当前目录。\n"
-"\n"
-"    可以指定位置 'ssh://' 作为目标。参见命令 'hg help urls' 的帮助信息,\n"
-"    以了解位置 'ssh://' 的重要详情。\n"
-"    "
-
-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"
-"\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 ""
-
-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 file name to follow history across\n"
-"    renames and copies. --follow without a file name 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 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"
-"    changesets, as it will compare the merge changeset against its\n"
-"    first parent only. Also, the files: list will only reflect files\n"
-"    that are different from BOTH parents.\n"
-"\n"
-"    "
-msgstr ""
-"显示全部版本库或指定文件的版本历史\n"
-"\n"
-"    显示全部版本库或指定文件的版本历史。\n"
-"\n"
-"    显示文件历史的时候不跟踪改名或复制。对文件名称使用 '-f/--follow'\n"
-"    会跟踪改名或复制的历史。当不给出文件名称时,使用 '--follow' 只显\n"
-"    示开始版本的直系祖先。使用 '--follow-first' 只显示合并版本的第一\n"
-"    个父亲。\n"
-"\n"
-"    如果没有指定版本范围,默认是 'tip:0'。当使用 '--follow' 时,使用\n"
-"    工作目录的父亲作为开始版本。\n"
-"\n"
-"    参见 'hg help dates' 以获得 '-d/--date' 的有效格式列表。\n"
-"\n"
-"    此命令缺省输出: 改变集标识和哈希,标签,父亲,提交者,日期和时间,\n"
-"    以及每次提交的概要信息。当使用选项 '-v/--verbose' 时,会显示文件\n"
-"    变更列表和完整的提交信息。\n"
-"\n"
-"    注意: 对于合并改变集,'log -p' 可能产生不期望的差异输出,因为它只\n"
-"    会将合并改变集与其第一个父亲比较。而且,只显示对所有父亲都不同的\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 ""
-
-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 ""
-
-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"
-"\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"
-"    "
-msgstr ""
-"将工作目录与其它版本合并\n"
-"\n"
-"    将当前工作目录中的内容与指定版本合并。对任一父亲而言改变的文件都会对\n"
-"    下次提交标记为已修改,在提交之前不允许再执行更新。\n"
-"\n"
-"    如果没有指定版本,那么工作目录的父亲是一个合并顶点,另一个在当前分支\n"
-"    中,合并后的内容是新的顶点。否则,必须明确的指定要合并的版本。\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 or\n"
-"    the default push location. These are the changesets that would be pushed\n"
-"    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"
-"    "
-msgstr ""
-"显示工作目录或指定版本的父亲\n"
-"\n"
-"    显示工作目录的父亲版本。如果使用 '--rev' 指定版本,就显示此版本的\n"
-"    父亲。如果指定了文件,那么使用此文件最后修改的版本(工作目录的起源\n"
-"    版本,或 '--rev' 指定的版本)。\n"
-"    "
-
-msgid "can only specify an explicit file name"
-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, show\n"
-"    definition of 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 the local repository. By default, this\n"
-"    does not update the copy of the project in the working directory.\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"
-"    查找位于指定路径或位置的版本库的全部修改,增加到版本版本库。默认不\n"
-"    更新工作目录。\n"
-"\n"
-"    如果没有指定位置,就使用路径 'default'。参见 'hg help urls' 以了解\n"
-"    更多信息。\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"
-"\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"
-"    这是 'pull' 的对称操作。它从当前版本库推送改变到其它版本库。如果目标\n"
-"    是本地版本库,那么此操作与在目标版本库从当前版本库执行 'pull' 操作等\n"
-"    同。\n"
-"\n"
-"    推送默认拒绝导致增加远程版本库顶点数目的操作。这通常表明客户端在推送\n"
-"    之前忘记取得远程版本库的修改,并且合并。\n"
-"\n"
-"    如果使用了选项 '-r',此命名改变集以及其祖先都会被推送到远程版本库。\n"
-"    \n"
-"\n"
-"    参见主题 'urls' 的帮助信息,以了解位置 'ssh://' 的重要详情。如果没有\n"
-"    给出目标位置,那么使用默认路径。参见 'hg help urls' 以了解更多信息。\n"
-"    "
-
-#, python-format
-msgid "pushing to %s\n"
-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 ""
-
-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"
-"\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 ""
-"在下次提交时删除指定文件\n"
-"\n"
-"    调度从版本库删除指定文件。\n"
-"\n"
-"    它只从当前分支删除文件,不删除历史。'-A' 用于只移除已经删除的文\n"
-"    件,'-f' 用于强制删除,'-Af' 用于从下个版本移除文件,但是不删除\n"
-"    它们。\n"
-"\n"
-"    下表给出了删除不同状态(列)文件的行为和可选的组合(行)。文件状态\n"
-"    ('hg status' 报告的状态)是增加(A),干净(C),已修改(M),丢失(!)。\n"
-"    动作是警告(W),移除(R,从分支),以及删除(D,从磁盘)。\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"
-"    此命令调度下次提交时删除文件。\n"
-"    要在此之前撤销删除,请参见 'hg revert'。\n"
-"    "
-
-msgid "no files specified"
-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\n"
-"    dest is a directory, copies are put in that directory. If dest is\n"
-"    a file, there can only be one source.\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"
-"    operation is recorded, but no copying is performed.\n"
-"\n"
-"    This command takes effect in 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 switch.\n"
-"\n"
-"    This command will also allow listing resolved files and manually\n"
-"    marking and unmarking files as resolved.\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 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"
-"\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 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"
-"\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\n"
-"    mode 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 "保存当前版本的 %s 为 %s\n"
-
-#, python-format
-msgid "file not managed: %s\n"
-msgstr "文件未被控制: %s\n"
-
-#, python-format
-msgid "no changes needed to %s\n"
-msgstr "不需要改变 %s\n"
-
-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 dir\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\" and \"-E\" options to log to files.\n"
-"    "
-msgstr ""
-"通过 HTTP 发布版本库\n"
-"\n"
-"    启动本地 HTTP 版本库浏览器和发布服务器。\n"
-"\n"
-"    默认服务器访问日志输出到 stdout,错误日志输出到 stderr。\n"
-"    可以使用选项 \"-A\" 和 \"-E\",将这些日志输出到文件。\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"
-"    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"
-"\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 difference between them is 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"
-"    ? = not tracked\n"
-"    I = ignored\n"
-"      = the previous added file was copied from here\n"
-"    "
-msgstr ""
-"显示工作目录中已改变的文件\n"
-"\n"
-"    显示版本库中的文件状态。如果指定文件名称,只显示匹配的文件。干净的\n"
-"    文件,被忽略的文件,复制/移动的源文件,不会被显示,除非使用了选项\n"
-"    '-c' (干净的),'-i' (被忽略的),'-C' (复制源) 或者 '-A' (全部)。除\n"
-"    非使用了选项 \"只显示 ...\",否则就使用选项 '-mardu'。\n"
-"\n"
-"    选项 '-q/--quiet' 隐藏未跟踪(未知或被忽略)的文件,除非明确地使用选\n"
-"    项 '-u/--unknown' 或 ‘-i/-ignored’。\n"
-"\n"
-"    注意: 如果修改了权限或者执行了合并,'status' 与 'diff' 的显示可能\n"
-"    不一致。标准差异格式不报告权限的改变,'diff' 只报告相对于一个合并\n"
-"    父亲的改变。\n"
-"\n"
-"    如果给出 1 个版本,就用于基础版本。如果给出 2 个版本,就显示其差异。\n"
-"\n"
-"    显示文件状态的代码是:\n"
-"    M = 已修改\n"
-"    A = 已增加\n"
-"    R = 已移除\n"
-"    C = 干净的\n"
-"    ! = 已删除,仍旧被跟踪\n"
-"    ? = 未跟踪\n"
-"    I = 已忽略\n"
-"      = 早先增加的文件自此复制\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 used,\n"
-"    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 %s 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 switch\n"
-"    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"
-"\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 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"
-"    "
-msgstr ""
-"更新工作目录\n"
-"\n"
-"    更新工作目录到指定版本,或者到当前分支的顶点。使用 'null' 作为版本可以\n"
-"    删除工作副本(类似于 'hg clone -U')。\n"
-"\n"
-"    当工作目录包含未提交的修改时,它会被版本库中指定版本的状态替换。当请求\n"
-"    的版本位于不同分支时,工作目录会被切换到此分支。\n"
-"\n"
-"    可以使用选项 '-C' 来丢弃未提交的修改,强制使用请求的版本替换工作目录的\n"
-"    状态。\n"
-"\n"
-"    当有未提交的修改,没有使用选项 '-C',父版本和请求版本位于不同分支,并且\n"
-"    其中一个是另一个的祖先时,那么新的工作目录包含请求版本与未提交的修改的\n"
-"    合并结果。否则,更新会失败,建议使用 'merge' 或 'update -C'。\n"
-"\n"
-"    如果你只想更新一个文件到旧版本,请使用 'revert'。\n"
-"\n"
-"    参见 'hg help dates' 以获得 '-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 ""
-
-msgid "output version and copyright information"
-msgstr "输出版本和版权信息"
-
-#, python-format
-msgid "Mercurial Distributed SCM (version %s)\n"
-msgstr "分布式软件配置管理工具 - 水银 (版本 %s)\n"
-
-msgid ""
-"\n"
-"Copyright (C) 2005-2008 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 ""
-"\n"
-"版权所有 (C) 2005-2008 Matt Mackall <mpm@selenic.com> 和其他人。\n"
-"这是自由软件,具体参见版权条款。这里没有任何担保,甚至没有适合\n"
-"特定目的的隐含的担保。\n"
-
-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 "不再询问,假定所有答案都是 'yes'"
-
-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 improved command execution profile"
-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 "指定要使用的 'ssh' 命令"
-
-msgid "specify hg command to run on the remote side"
-msgstr "指定要在远程运行的 'hg' 命令"
-
-msgid "include names matching the given patterns"
-msgstr "包含匹配指定模式的名称"
-
-msgid "exclude names matching the given patterns"
-msgstr "拒绝匹配指定模式的名称"
-
-msgid "use <text> as commit message"
-msgstr "使用 <text> 作为提交日志"
-
-msgid "read commit message from <file>"
-msgstr "从 <file> 读取提交日志"
-
-msgid "record datecode as commit date"
-msgstr "将提供的日期作为提交日期"
-
-msgid "record 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 "列出作者 (增加 '-v' 会以长格式显示)"
-
-msgid "list the date (short with -q)"
-msgstr "列出日期 (增加 '-q' 会以短格式显示)"
-
-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 "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 "parent"
-msgstr ""
-
-msgid "file list"
-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 "[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 revs 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 "[-r REV] [REV]..."
-msgstr ""
-
-msgid "[TOPIC]"
-msgstr ""
-
-msgid "identify the specified rev"
-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\n"
-"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 "在文件名称结尾增加 NUL,用于 xargs"
-
-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 revs matching date spec"
-msgstr "显示匹配日期的版本"
-
-msgid "show copied files"
-msgstr "显示复制的文件"
-
-msgid "do case-insensitive search for a keyword"
-msgstr "对关键字执行不区分大小写的搜索"
-
-msgid "include revs where files were removed"
-msgstr "包含删除文件的版本"
-
-msgid "show only merges"
-msgstr "只显示合并"
-
-msgid "revs 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 "[-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 rev"
-msgstr "从指定的版本显示父亲"
-
-msgid "hg parents [-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 "监听的端口(默认: 8000)"
-
-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 dir)"
-msgstr "在 WEB 页面中显示的名称(默认: 工作目录)"
-
-msgid "name of the webdir config file (serve more than one repo)"
-msgstr "webdir 配置文件的名称(发布多个版本库)"
-
-msgid "for remote clients"
-msgstr "针对远程客户端"
-
-msgid "web templates to use"
-msgstr "使用的 WEB 模板"
-
-msgid "template style to use"
-msgstr "使用的显示样式"
-
-msgid "use IPv6 in addition to IPv4"
-msgstr "同时使用 IPv6 和 IPv4"
-
-msgid "SSL certificate file"
-msgstr "SSL 证书文件"
-
-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 ""
-
-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 ""
-
-#, python-format
-msgid "   %s -> %s %s\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 ""
-
-#, 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 "character device"
-msgstr ""
-
-msgid "block device"
-msgstr ""
-
-msgid "fifo"
-msgstr ""
-
-msgid "socket"
-msgstr ""
-
-msgid "directory"
-msgstr ""
-
-#, python-format
-msgid "%s: unsupported file type (type is %s)\n"
-msgstr ""
-
-#, python-format
-msgid "abort: %s\n"
-msgstr "中止: %s\n"
-
-#, python-format
-msgid ""
-"hg: command '%s' is ambiguous:\n"
-"    %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 "中止: %s: %s\n"
-
-#, python-format
-msgid "abort: could not lock %s: %s\n"
-msgstr "中止: 不能锁定 %s: %s\n"
-
-#, python-format
-msgid "hg %s: %s\n"
-msgstr ""
-
-#, python-format
-msgid "hg: %s\n"
-msgstr ""
-
-#, python-format
-msgid "abort: %s!\n"
-msgstr "中止: %s!\n"
-
-#, python-format
-msgid "abort: %s"
-msgstr "中止: %s"
-
-msgid " empty string\n"
-msgstr ""
-
-msgid "killed!\n"
-msgstr ""
-
-#, python-format
-msgid "hg: unknown command '%s'\n"
-msgstr "hg: 未知命令 '%s'\n"
-
-#, python-format
-msgid "abort: could not import module %s!\n"
-msgstr "中止: 不能导入模块 %s!\n"
-
-msgid "(did you forget to compile extensions?)\n"
-msgstr "(你是否忘记了编译扩展?)\n"
-
-msgid "(is your Python install correct?)\n"
-msgstr "(你的 Python 安装正确吗?)\n"
-
-#, python-format
-msgid "abort: error: %s\n"
-msgstr "中止: 失败: %s\n"
-
-msgid "broken pipe\n"
-msgstr "坏掉的管道\n"
-
-msgid "interrupted!\n"
-msgstr "中断!\n"
-
-msgid ""
-"\n"
-"broken pipe\n"
-msgstr ""
-"\n"
-"坏掉的管道\n"
-
-msgid "abort: out of memory\n"
-msgstr "中止: 内存不足\n"
-
-msgid "** unknown exception encountered, details follow\n"
-msgstr "** 遇到了未知异常,详细信息如下\n"
-
-msgid "** report bug details to http://www.selenic.com/mercurial/bts\n"
-msgstr "** 报告问题详情到 http://www.selenic.com/mercurial/bts\n"
-
-msgid "** or mercurial@selenic.com\n"
-msgstr "** 或 mercurial@selenic.com\n"
-
-#, python-format
-msgid "** Mercurial Distributed SCM (version %s)\n"
-msgstr "** 分布式软件配置管理工具 - 水银 (版本 %s)\n"
-
-#, python-format
-msgid "** Extensions loaded: %s\n"
-msgstr "** 已加载的扩展: %s\n"
-
-#, python-format
-msgid "malformed --config option: %s"
-msgstr "非法 '--config' 选项: %s"
-
-#, python-format
-msgid "extension '%s' overrides commands: %s\n"
-msgstr "扩展 '%s' 覆盖了命令: %s\n"
-
-msgid "Option --config may not be abbreviated!"
-msgstr "选项 '--config' 不能简短!"
-
-msgid "Option --cwd may not be abbreviated!"
-msgstr "选项 '--cwd' 不能简短!"
-
-msgid ""
-"Option -R has to be separated from other options (i.e. not -qR) and --"
-"repository may only be abbreviated as --repo!"
-msgstr ""
-"选项 -R 必须隔离使用(也就是不能 -qR),并且 --repository 只能简短为 --repo!"
-
-#, python-format
-msgid "Time: real %.3f secs (user %.3f+%.3f sys %.3f+%.3f)\n"
-msgstr "时间: 实际 %.3f 秒(用户 %.3f+%.3f 系统 %.3f+%.3f)\n"
-
-#, python-format
-msgid "repository '%s' is not local"
-msgstr "非本地版本库 '%s'"
-
-msgid "invalid arguments"
-msgstr "非法参数"
-
-msgid "exception raised - generating profile anyway\n"
-msgstr ""
-
-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 "*** 加载扩展 '%s',自 '%s': %s\n"
-
-#, python-format
-msgid "*** failed to import extension %s: %s\n"
-msgstr "*** 加载扩展 '%s' 失败: %s\n"
-
-#, 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' 不能处理符号链接\n"
-
-#, python-format
-msgid "tool %s can't handle binary\n"
-msgstr "工具 '%s' 不能处理二进制\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(二进制 %s 符号链接 %s)\n"
-
-#, python-format
-msgid ""
-" no tool found to merge %s\n"
-"keep (l)ocal or take (o)ther?"
-msgstr ""
-" 没有找到工具合并 %s\n"
-"使用本地(l)或者他人(o)的内容?"
-
-msgid "[lo]"
-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 "[yn]"
-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 ""
-
-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). offset\n"
-"    is the offset of the local timezone, in seconds west of UTC (negative\n"
-"    if the timezone is east of UTC).\n"
-"\n"
-"    The log command also accepts date ranges:\n"
-"\n"
-"    \"<{date}\" - on or before a given date\n"
-"    \">{date}\" - on or after a given date\n"
-"    \"{date} to {date}\" - 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 a\n"
-"    name with \"path:\".  These path names must match completely, from\n"
-"    the root of the current repository.\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 match\n"
-"    files ending in \".c\" in the current directory only.\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 the current directory, or\n"
-"                   any subdirectory\n"
-"    foo/*.c        any name ending in \".c\" in the directory foo\n"
-"    foo/**.c       any name ending in \".c\" in the directory foo, or any\n"
-"                   subdirectory\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 hooks,\n"
-"    extensions or external tools. If unset or empty, an executable named\n"
-"    'hg' (with com/exe/bat/cmd extension on Windows) is searched.\n"
-"\n"
-"HGEDITOR::\n"
-"    This is the name of the editor to use 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 inputs. The default is \"strict\", which\n"
-"    causes Mercurial to abort if it can't translate 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 .hg/hgrc of\n"
-"    current repository is read.\n"
-"\n"
-"    For each element in path, if a directory, all entries in directory\n"
-"    ending with \".rc\" are added to path.  Else, element itself is\n"
-"    added to path.\n"
-"\n"
-"HGUSER::\n"
-"    This is the string used for the author of a commit.\n"
-"\n"
-"    (deprecated, use .hgrc)\n"
-"\n"
-"EMAIL::\n"
-"    If HGUSER is not set, this will be used as the author for a commit.\n"
-"\n"
-"LOGNAME::\n"
-"    If neither HGUSER nor EMAIL is set, LOGNAME will be used (with\n"
-"    '@hostname' appended) as the author value for a commit.\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\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"
-"    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 Mercurial is not installed system-wide.\n"
-"    "
-msgstr ""
-
-msgid "Specifying Single Revisions"
-msgstr ""
-
-msgid ""
-"\n"
-"    Mercurial accepts several notations for identifying individual\n"
-"    revisions.\n"
-"\n"
-"    A plain integer is treated as a revision number. Negative\n"
-"    integers are treated as offsets from the tip, with -1 denoting the\n"
-"    tip.\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 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.\n"
-"    If an uncommitted merge is in progress, \".\" is the revision of\n"
-"    the 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 continuous range,\n"
-"    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\n"
-"    means \"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 4:2 gives 4, 3, and 2.\n"
-"    "
-msgstr ""
-"\n"
-"    当水银接受多个版本时,它们可以单独给出,或者以字符 \":\" 分割的连续范围\n"
-"    格式提供。\n"
-"\n"
-"    范围的语法是 '[BEGIN]:[END]',其中 'BEGIN' 和 'END' 是版本标识。'BEGIN'\n"
-"    和 'END' 都是可选的。'BEGIN' 默认是 0,'END' 默认是 'tip'。因此范围 \":"
-"\"\n"
-"    意味着全部版本。\n"
-"\n"
-"    如果 'BEGIN' 大于 'END',版本视为反序。\n"
-"\n"
-"    范围是闭区间。即范围 '3:5' 是 '3','4','5'。同样,范围 '4:2' 是 '4',\n"
-"    '3','2'。\n"
-"    "
-
-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"
-"\n"
-"    While this standard format is often enough, it does not encode the\n"
-"    following information:\n"
-"\n"
-"     - executable status\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 there are very few tools which\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 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"
-"\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"
-"    "
-msgstr ""
-"\n"
-"    水银显示文件不同版本之间差异的格式与 GNU diff 标准格式兼容,可用于\n"
-"    GNU patch 和许多标准工具。\n"
-"\n"
-"    虽然标准格式在大多数情况下都能满足要求,但是它不包含下述信息:\n"
-"\n"
-"     - 可执行状态\n"
-"     - 复制或改名信息\n"
-"     - 二进制文件的修改\n"
-"     - 创建或删除空文件\n"
-"\n"
-"    水银也支持解决这些限制的 git 扩展差异格式。由于支持 git 差异格式的工具\n"
-"    很少,所以它不是默认格式。\n"
-"\n"
-"    这意味着当从水银版本库(例如 \"hg export\")产生差异时,在其它版本库应用标\n"
-"    准差异时,会丢失文件复制或改名等额外信息,所以你要小心处理。水银的内部\n"
-"    操作(例如 push 和 pull)在传达改变时,使用内部的二进制格式,所以不受影\n"
-"    响。\n"
-"\n"
-"    要让水银产生 git 扩展差异格式,可以对许多命令使用选项 '--git',或者在\n"
-"    你的 hgrc 文件中的节 '[diff]' 中增加 'git = True'。当你从此格式导入时,\n"
-"    或在 mq 扩展中使用时,不需要设置此选项。\n"
-"    "
-
-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 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 are all template-enabled.\n"
-"\n"
-"    Three styles are packaged with Mercurial: default (the style used\n"
-"    when no explicit preference is passed), compact and changelog. Usage:\n"
-"\n"
-"        $ hg log -r1 --style changelog\n"
-"\n"
-"    A template is a piece of text, with markup to invoke variable 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"
-"\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"
-"    - 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"
-"    - 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 wanted 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 age for the given date.\n"
-"    - basename: Any text. Treats the text as a path, and returns the\n"
-"          basename. For example, \"foo/bar/baz\" becomes \"baz\".\n"
-"    - date: Date. Returns a date in a Unix date command 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"
-"    - email: Any text. Extracts the first string that looks like an email\n"
-"          address.\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"
-"    - 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"
-"    - 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"
-"    - shortdate: Date. Returns a date like \"2006-09-04\".\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"
-"    - user: Any text. Returns the user portion of an email address.\n"
-"    "
-msgstr ""
-"\n"
-"    水银允许你通过模版定制命令的输出。你可以通过命令行选项 '--template'\n"
-"    来使用模版,或者选择已有的模版样式(--style)。\n"
-"\n"
-"    你可以定制任意输出与日志信息类似的命令,即: log,outgoing,incoming,\n"
-"    tip,parents,heads 和 glog 这些启用模版的命令。\n"
-"\n"
-"    水银中内置了 3 种样式: default (默认), compact 和 changelog。用法:\n"
-"\n"
-"        $ hg log -r1 --style changelog\n"
-"\n"
-"    模版是文本片断,其中的标记用于变量扩展:\n"
-"\n"
-"        $ hg log -r1 --template \"{node}\\n\"\n"
-"        b56ce7b07c52de7d5fd79fb89701ea538af65746\n"
-"\n"
-"    花括号中的字符串称为关键字。可用的关键字依赖于模版的上下文。下述关键字\n"
-"    可用于输出与日志信息类似的命令:\n"
-"\n"
-"    - author: 字符串。改变集的作者。\n"
-"    - branches: 字符串。改变集的分支。如果分支名称为 'default' 则为空。\n"
-"    - date: 日期信息。改变集的日期。\n"
-"    - desc: 字符串。改变集的描述。\n"
-"    - files: 字符串列表。改变集中被修改、增加和删除的全部文件。\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"
-"       $ hg tip --template \"{date|isodate}\\n\"\n"
-"       2008-08-21 18:22 +0000\n"
-"\n"
-"    过滤器列表:\n"
-"\n"
-"    - addbreaks: 输入任意文本。除了最后一行,在每行的结尾增加 XHTML 标签\n"
-"          \"<br />\"。\n"
-"    - age: 输入日期。返回指定日期的人工可读的字符串。\n"
-"    - basename: 输入任意文本。将输入视为路径,返回基础名称。例如\n"
-"          \"foo/bar/baz\" 成为 \"baz\"。\n"
-"    - date: 输入日期。返回指定日期的 Unix 命令 'date' 格式字符串,包含时\n"
-"          区,例如: \"Mon Sep 04 15:13:13 2006 0700\"。\n"
-"    - domain: 输入任意文本。找到第一个 email 地址,返回其域名。\n"
-"    - email: 输入任意文本。返回第一个 email 地址。\n"
-"    - escape: 输入任意文本。用 XML 实体来封装 XML/XHTML 的特殊字符 \"&\",\n"
-"          \"<\" 和 \">\"。\n"
-"    - fill68: 输入任意文本。格式化为 68 列文本。\n"
-"    - fill76: 输入任意文本。格式化为 76 列文本。\n"
-"    - firstline: 输入任意文本。返回首行。\n"
-"    - hgdate: 输入日期。返回一对数字:\n"
-"          \"1157407993 25200\" (Unix 时戳,时区偏移)。\n"
-"    - isodate: 输入日期。返回 ISO 8601 格式的日期。\n"
-"    - obfuscate: 输入任意文本。返回其 XML 实体序列。\n"
-"    - person: 输入任意文本。返回 email 地址前的文本。\n"
-"    - rfc822date: 输入日期。返回 email 头部使用的日期格式。\n"
-"    - short: 改变集哈系。返回改变集哈系的短格式。例如 12 字符的 16 进制\n"
-"          字符串。\n"
-"    - shortdate: 输入日期。返回格式类似于 \"2006-09-04\"。\n"
-"    - strip: 输入任意文本。删除全部行首与行尾空白。\n"
-"    - tabindent: 输入任意文本。除了首行,在每行的开始增加制表符号。\n"
-"    - urlescape: 输入任意文本。封装全部特殊字符。例如\n"
-"          \"foo bar\" 成为 \"foo%20bar\"。\n"
-"    - user: 输入任意文本。返回 email 地址中的用户名称部分。\n"
-"    "
-
-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 deal with in 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"
-"\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"
-"    - 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"
-"        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"
-"    [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"
-"\n"
-"    Two path aliases are more important 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 saves\n"
-"      the location of the source repository as the 'default' path. This is\n"
-"      then used when you omit a path from the push and pull commands.\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 ""
-"\n"
-"    有效的位置格式:\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"
-"    位于本地文件系统中的路径可以指向版本库,也可以指向打包的文件(被\n"
-"    'hg bundle' 或 'hg incoming --bundle' 创建)。\n"
-"\n"
-"    在 '#' 后面可选的标识符用于指定要取得的分支,标签或改变集。\n"
-"\n"
-"    仅当远程水银服务器显式启用时,才能推到 'http://' 和 'https://'。\n"
-"\n"
-"    在水银中使用 SSH 的一些提示:\n"
-"    - 使用 SSH 时,需要在远程主机上有可登录帐号,远程路径中还需要有\n"
-"      hg,或者有指定的远程命令。\n"
-"    - 默认 'path' 是相对于远程主机上的用户家目录。\n"
-"      可以在路径前增加一个斜线指定绝对路径:\n"
-"        ssh://example.com//tmp/repository\n"
-"    - 水银使用 SSH 时不使用压缩,所以你可以在 ~/.ssh/config 中配置\n"
-"      SSH 执行压缩,例如:\n"
-"        Host *.mylocalnetwork.example.com\n"
-"          Compression no\n"
-"        Host *\n"
-"          Compression yes\n"
-"      另一个方法是在你的 hgrc 中将 \"ssh -C\" 作为你的 ssh 命令,或\n"
-"      用于命令行参数 '--ssh' 中。\n"
-"\n"
-"    这些路径可以在你的 'hgrc' 中的节 '[paths]' 中定义别名:\n"
-"    [paths]\n"
-"    alias1 = URL1\n"
-"    alias2 = URL2\n"
-"    ...\n"
-"\n"
-"    然后你就可以在任意命令中使用这些别名作为路径(例如 'hg pull alias1'\n"
-"    会从 'alias1' 定义的路径取得指定版本)。\n"
-"\n"
-"    因为用于默认路径,所以这 2 个路径别名特别重要:\n"
-"\n"
-"    default:\n"
-"      当你使用 'hg clone' 创建版本库时,此命令会将源版本库的路径保存\n"
-"      为别名 'default',然后你可以对命令 'push' 和 'pull' 省略路径。\n"
-"\n"
-"    default-push:\n"
-"      命令 'push' 会查找别名是 'default-push' 的路径,它覆盖定义 'default'。\n"
-"    "
-
-#, python-format
-msgid "destination directory: %s\n"
-msgstr "目标目录: %s\n"
-
-#, python-format
-msgid "destination '%s' already exists"
-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 "updating working directory\n"
-msgstr "正在更新工作目录\n"
-
-msgid "updated"
-msgstr "已更新"
-
-msgid "merged"
-msgstr "已合并"
-
-msgid "removed"
-msgstr "已删除"
-
-msgid "unresolved"
-msgstr "未解决"
-
-#, python-format
-msgid "%d files %s"
-msgstr "%d 个文件%s"
-
-msgid "use 'hg resolve' to retry unresolved file merges\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 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 "使用 %s\n"
-
-#, python-format
-msgid "capabilities: %s\n"
-msgstr ""
-
-msgid "operation not supported over http"
-msgstr ""
-
-#, python-format
-msgid "sending %s command\n"
-msgstr "发送命令 '%s'\n"
-
-#, python-format
-msgid "sending %s bytes\n"
-msgstr "发送 %s 字节\n"
-
-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 "实际 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 "'%s' 似乎不是水银版本库"
-
-#, 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 "版本库 %s 已存在"
-
-#, python-format
-msgid "requirement '%s' not supported"
-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 "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 "回滚中断的事务\n"
-
-msgid "no interrupted transaction available\n"
-msgstr ""
-
-msgid "rolling back last transaction\n"
-msgstr "回滚最近的事务\n"
-
-#, python-format
-msgid "Named branch could not be reset, current branch still is: %s\n"
-msgstr ""
-
-msgid "no rollback information available\n"
-msgstr "没有回滚信息可用\n"
-
-#, 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 ""
-
-#, python-format
-msgid "%s not tracked!\n"
-msgstr "%s 没有被跟踪!\n"
-
-msgid "unresolved merge conflicts (see hg resolve)"
-msgstr "未解决的合并冲突(参见 'hg resolve')"
-
-msgid "nothing changed\n"
-msgstr "没有改变\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"
-
-#, 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 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 "正在搜索修改\n"
-
-#, 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 "正在请求全部修改\n"
-
-msgid ""
-"Partial pull cannot be done because other repository doesn't support "
-"changegroupsubset."
-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 "已发现 %d 个改变集\n"
-
-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 "正在增加修改集\n"
-
-msgid "received changelog group is empty"
-msgstr ""
-
-msgid "adding manifests\n"
-msgstr "正在增加清单\n"
-
-msgid "adding file changes\n"
-msgstr "正在增加文件改变\n"
-
-#, 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 "已增加 %d 个改变集,包含 %d 个改变,修改了 %d 个文件%s\n"
-
-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 ""
-
-msgid "'\\n' and '\\r' disallowed in filenames"
-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 ""
-
-msgid "resolving manifests\n"
-msgstr "正在解析清单\n"
-
-#, 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"
-"(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]"
-msgstr ""
-
-msgid "c"
-msgstr ""
-
-#, python-format
-msgid ""
-"remote changed %s which local deleted\n"
-"use (c)hanged version or leave (d)eleted?"
-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 "moving %s to %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 "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 %s).\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 "no valid hunks found; trying with %r instead\n"
-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 ""
-
-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 "正在扫描\n"
-
-#, python-format
-msgid "%d files, %d bytes to transfer\n"
-msgstr "需要传输 %d 个文件,%d 字节\n"
-
-#, python-format
-msgid "sending %s (%d bytes)\n"
-msgstr "正在发送 %s (%d 字节)\n"
-
-msgid "unmatched quotes"
-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"
-
-#, python-format
-msgid "failed to truncate %s\n"
-msgstr "截断 '%s' 失败\n"
-
-msgid "rollback completed\n"
-msgstr "完成回滚\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 ""
-"解析 '%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"
-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 "需要 http 授权"
-
-msgid "http authorization required\n"
-msgstr "需要 http 授权\n"
-
-#, python-format
-msgid "realm: %s\n"
-msgstr "领域: %s\n"
-
-#, python-format
-msgid "user: %s\n"
-msgstr "用户: %s\n"
-
-msgid "user:"
-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 ""
-
-#, 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 ""
-
-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 ""
-
-#, 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 point to %s 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 ""
-
-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 ""
-
-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 ""
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/i18n/zh_CN.po	Sun Apr 26 11:49:17 2009 +0200
@@ -0,0 +1,9258 @@
+#
+# Chinese (simplified) translation for Mercurial
+# This file is distributed under the same license as Mercurial
+#
+# 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 $
+#
+# Update with pot file:
+#    msgmerge --update zh_CN.po hg.pot
+#    msgfmt --statistics -c zh_CN.po
+#
+# Please test your translation before commit:
+#    python setup.py build_py -c -d . build_ext -i build_mo
+#    LC_ALL=zh_CN.UTF-8 ./hg
+#
+# Please format your translation before commit:
+#    msgcat --width=80 --sort-by-file -o zh_CN_new.po zh_CN.po
+#    mv -f zh_CN_new.po zh_CN.po
+#
+# Please remove '#: filename:line' lines before submit to hg:
+#    msgcat --width=80 --no-location -o zh_CN_new.po zh_CN.po
+#    mv -f zh_CN_new.po zh_CN.po
+#
+# Dictionary:
+# blame             追溯
+# branch            分支
+# changes           修改
+# changeset         修改集
+# checkout          检出
+# remove            移除(从版本库删除)
+# delete            删除(只从文件系统删除)
+# patchset          补丁集
+# pushing to        推到
+# pulling from      拉自
+# rename            改名
+# repository        版本库
+# revert            恢复
+# revision          版本
+# tag               标签
+# tip               顶点
+# undo              撤销
+# unversioned       未版本控制
+# versioned         受版本控制
+# working copy      工作副本
+# ...
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Mercurial 1.2\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-03-20 14:26+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"
+"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"
+"X-Poedit-Language: Chinese\n"
+"X-Poedit-Country: CHINA\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"
+
+msgid "return tuple of (match function, list enabled)."
+msgstr "返回 tuple (匹配函数,启用列表)"
+
+#, 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 "配置错误 - 钩子类型 \"%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 ""
+"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"
+"\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"
+"    "
+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 ""
+"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 "强制"
+
+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 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"
+"\n"
+"Configuring the extension:\n"
+"\n"
+"    [bugzilla]\n"
+"    host       Hostname of the MySQL server holding the Bugzilla 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"
+"    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"
+"    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"
+"               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"
+"\n"
+"    [usermap]\n"
+"    Any entries in this section specify mappings of Mercurial committer ID\n"
+"    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"
+"\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 repositories\n"
+"in /var/local/hg/repos/ used with a local Bugzilla 3.2 installation in\n"
+"/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 ""
+
+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"
+
+#, python-format
+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 ""
+
+#, 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 "完成\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 ""
+
+#, 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 ""
+
+#, 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 ""
+
+#, 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 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 ""
+
+msgid "hg children [-r REV] [FILE]"
+msgstr ""
+
+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 ""
+
+#, 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"
+"\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>"
+msgstr ""
+
+#, python-format
+msgid "assuming %i character terminal\n"
+msgstr ""
+
+msgid "count rate for the specified revision or range"
+msgstr ""
+
+msgid "count rate for revs 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 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"
+"\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 "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 ""
+
+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. Otherwise,\n"
+"    convert will only import up to the named revision (given in a format\n"
+"    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"
+"    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"
+"    <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"
+"    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 dirs not explicitely 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"
+"\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"
+"    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"
+"\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 "
+"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\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"
+"    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 is a legacy option and may be removed in future.\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.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"
+"        --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"
+"\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"
+"    \"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"
+"\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 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"
+"        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 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 ""
+
+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 "try to sort changesets by date"
+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 ""
+
+#, 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 "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 "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 "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 "Overriding mapping for author %s, was %s, will be %s\n"
+msgstr ""
+
+#, python-format
+msgid "mapping author %s to %s\n"
+msgstr ""
+
+#, python-format
+msgid "Ignoring bad line in author map file %s: %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 ""
+
+#, 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 "writing cvs log cache %s\n"
+msgstr ""
+
+#, python-format
+msgid "%d log entries\n"
+msgstr ""
+
+msgid "creating changesets\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 "analysing 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 "%s 不是本地的水银版本库"
+
+#, python-format
+msgid "initializing destination %s repository\n"
+msgstr "初始化目标版本库 %s\n"
+
+msgid "run hg sink pre-conversion action\n"
+msgstr "执行动作 hg sink pre-conversion\n"
+
+msgid "run hg sink post-conversion action\n"
+msgstr "执行动作 hg sink post-conversion action\n"
+
+#, python-format
+msgid "pulling from %s into %s\n"
+msgstr "自 %s 拉到 %s\n"
+
+msgid "updating tags\n"
+msgstr "正在更新标签\n"
+
+#, python-format
+msgid "%s is not a valid start revision"
+msgstr "%s 不是有效的开始版本"
+
+#, python-format
+msgid "ignoring: %s\n"
+msgstr "忽略: %s\n"
+
+msgid "run hg source pre-conversion action\n"
+msgstr "执行动作 hg source pre-conversion\n"
+
+msgid "run hg source post-conversion action\n"
+msgstr "执行动作 hg source post-conversion\n"
+
+#, python-format
+msgid "%s does not look like a monotone repo"
+msgstr "%s 不像是单纯的 monotone 版本库"
+
+#, python-format
+msgid "copying file in renamed dir from '%s' to '%s'"
+msgstr "从已改名的目录 '%s' 复制文件到 '%s'"
+
+msgid "reading p4 views\n"
+msgstr ""
+
+msgid "collecting p4 changelists\n"
+msgstr "正在搜索 p4 修改集\n"
+
+msgid "Subversion python bindings could not be loaded"
+msgstr "不能加载 svn 的 python 绑定"
+
+#, python-format
+msgid "Subversion python bindings %d.%d found, 1.4 or later required"
+msgstr "发现 svn 的 python 绑定版本 %d.%d,需要 1.4 或更新的版本"
+
+msgid "Subversion python bindings are too old, 1.4 or later required"
+msgstr "svn 的 python 绑定太旧,需要 1.4 或更新的版本"
+
+#, python-format
+msgid "svn: revision %s is not an integer"
+msgstr "svn: 版本 %s 不是整数"
+
+#, python-format
+msgid "svn: start revision %s is not an integer"
+msgstr "svn: 开始版本 %s 不是整数"
+
+#, python-format
+msgid "no revision found in module %s"
+msgstr "没有在模块 %s 中发现版本"
+
+#, python-format
+msgid "expected %s to be at %r, but not found"
+msgstr "期望 %s 位于 %r,但是没有发现"
+
+#, python-format
+msgid "found %s at %r\n"
+msgstr "发现 %s 位于 %r\n"
+
+#, python-format
+msgid "ignoring empty branch %s\n"
+msgstr "忽略空的分支 %s\n"
+
+#, python-format
+msgid "found branch %s at %d\n"
+msgstr "发现分支 %s 位于 %d\n"
+
+msgid "svn: start revision is not supported with with more than one branch"
+msgstr "svn: 在给出多于一个分支时不支持开始版本"
+
+#, python-format
+msgid "svn: no revision found after start revision %d"
+msgstr "svn: 在开始版本 %d 之后没有版本"
+
+#, python-format
+msgid "no tags found at revision %d\n"
+msgstr "在版本 %d 没有发现标签\n"
+
+#, python-format
+msgid "ignoring foreign branch %r\n"
+msgstr "忽略外部分支 %r\n"
+
+#, python-format
+msgid "%s not found up to revision %d"
+msgstr "没有发现 %s,一直到版本 %d"
+
+#, python-format
+msgid "branch renamed from %s to %s at %d\n"
+msgstr "分支从 %s 改名为 %s,在 %d\n"
+
+#, python-format
+msgid "reparent to %s\n"
+msgstr ""
+
+#, python-format
+msgid "copied to %s from %s@%s\n"
+msgstr "复制到 %s,自 %s@%s\n"
+
+#, python-format
+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"
+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"
+
+#, python-format
+msgid "mark %s came from %s:%d\n"
+msgstr "标记 %s 来自 %s:%d\n"
+
+#, python-format
+msgid "parsing revision %d (%d changes)\n"
+msgstr "解析版本 %d (%d 个改变)\n"
+
+#, python-format
+msgid "found parent of branch %s at %d: %s\n"
+msgstr "发现分支 %s 的父亲,在 %d: %s\n"
+
+msgid "no copyfrom path, don't know what to do.\n"
+msgstr "没有 copyfrom 路径,不知道该怎么办。\n"
+
+#, python-format
+msgid "fetching revision log for \"%s\" from %d to %d\n"
+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"
+
+#, python-format
+msgid "svn: branch has no revision %s"
+msgstr "svn: 分支没有版本 %s"
+
+#, python-format
+msgid "%r is not under %r, ignoring\n"
+msgstr "%r 不在 %r 之下,忽略之\n"
+
+#, python-format
+msgid "initializing svn repo %r\n"
+msgstr "初始化 svn 版本库 %r\n"
+
+#, python-format
+msgid "initializing svn wc %r\n"
+msgstr "初始化 svn 工作副本 %r\n"
+
+msgid "unexpected svn output:\n"
+msgstr "意外的 svn 输出:\n"
+
+msgid "unable to cope with svn output"
+msgstr "不能处理 svn 的输出"
+
+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 dir.  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\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"
+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"
+"    "
+msgstr ""
+
+msgid "cannot specify --rev and --change at the same time"
+msgstr "不能同时指定 '--rev' 和 '--change'"
+
+#, 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 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."
+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 ""
+
+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"
+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 automatically\n"
+"    merged, and the result of the merge is committed.  Otherwise, the\n"
+"    working directory is updated to include the new 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 "正在拉自 %s\n"
+
+msgid "fetch -r doesn't work for remote repositories yet"
+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 "新修改集 '%d:%s' 将远程修改与本地合并\n"
+
+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 " 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 ""
+
+#, 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 "associate a string to a key (username, comment)"
+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 "map a manifest into some text"
+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 ""
+
+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 ""
+
+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 ""
+
+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 ""
+
+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 "显示版本分支图"
+
+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 ""
+
+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 ""
+
+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\n"
+"not 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\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"
+"\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"
+"\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 "为此版本库启动服务 'inotify'"
+
+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 "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 ""
+
+#, python-format
+msgid "(inotify: received response from incompatible server version %d)\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 "%s processing %d deferred events as %d\n"
+msgstr ""
+
+#, python-format
+msgid "could not start server: %s"
+msgstr ""
+
+#, python-format
+msgid "received query from incompatible client version %d\n"
+msgstr ""
+
+#, python-format
+msgid "answering query for %r\n"
+msgstr ""
+
+msgid "finished setup\n"
+msgstr ""
+
+msgid "polling: no timeout\n"
+msgstr ""
+
+#, python-format
+msgid "polling: %sms timeout\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$\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"
+"\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 repos.\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"
+"\n"
+"Before changing/disabling active keywords, run \"hg kwshrink\" to avoid\n"
+"the risk of inadvertedly storing expanded keywords in the change 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"
+"\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 ""
+
+msgid "[keyword] patterns cannot match"
+msgstr ""
+
+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"
+"\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 ""
+
+#, python-format
+msgid ""
+"\n"
+"%s keywords written to %s:\n"
+msgstr ""
+
+msgid "unhooked all commit hooks\n"
+msgstr ""
+
+#, python-format
+msgid ""
+"\n"
+"removing temporary repo %s\n"
+msgstr ""
+"\n"
+"正在删除临时版本库 %s\n"
+
+msgid ""
+"expand keywords in 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"
+"    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 ""
+
+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 ""
+
+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 ""
+
+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 ""
+"Apply patchfile  to the working directory.\n"
+"        patchfile: file name of patch"
+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 ""
+
+msgid ""
+"options:\n"
+"           msg: a string or a no-argument function returning a string\n"
+"        "
+msgstr ""
+
+#, python-format
+msgid "patch \"%s\" already exists"
+msgstr ""
+
+#, python-format
+msgid "error unlinking %s\n"
+msgstr ""
+
+msgid "returns (index, rev, patch)"
+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 tip)\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 ""
+
+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 ""
+
+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\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 ""
+
+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 patch.\n"
+"    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"
+"    (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"
+"    format. See the diffs help topic for information on why this is\n"
+"    important for preserving rename/copy information and permission changes.\n"
+"    "
+msgstr ""
+"导入补丁\n"
+"\n"
+"    此补丁插入到最近一次应用的补丁序列中。\n"
+"    如果尚无应用补丁,qimport 会插入补丁到序列开始。\n"
+"\n"
+"    除非你使用 '--name' 给出补丁名称,否则就与源文件同名。\n"
+"\n"
+"    你可以使用 '--existing' 注册一个已在补丁目录中的补丁。\n"
+"\n"
+"    使用 '--force' 会覆盖已有的补丁。\n"
+"\n"
+"    可以使用 '--rev' 将已有的修改集置于 mq 控制下(例如 \n"
+"    'qimport --rev tip -n patch' 会将 tip 置于 mq 控制下)。当使用 '--git'\n"
+"    时,'--rev' 导入的补丁将会使用 git 差异格式。参见差异帮助主题,以了解\n"
+"    为什么这对于保留改名/复制信息和权限修改很重要。\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 ""
+"初始化队列仓库\n"
+"\n"
+"    默认队列仓库不受版本控制。如果指定了 '-c',那么 qinit 会为补丁创建一个\n"
+"    单独的嵌套版本库(也可以稍后运行 'qinit -c' 来将不受版本控制的补丁仓库\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"
+"    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 repo\n"
+msgstr ""
+
+msgid "cloning patch repo\n"
+msgstr ""
+
+msgid "stripping applied patches from destination repo\n"
+msgstr ""
+
+msgid "updating destination repo\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 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"
+"    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 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 ""
+"更新当前补丁\n"
+"\n"
+"    如果提供了文件匹配模式,更新后的补丁只包含匹配这些模式的修改,其它\n"
+"    的修改仍旧在工作目录中。\n"
+"\n"
+"    如果指定了 '--short',只更新已经在补丁中的文件,与文件匹配模式类似。\n"
+"\n"
+"    'hg add/remove/copy/rename' 如常工作,你可能想使用 git 格式补丁(使\n"
+"    用选项 '--git' 或在配置文件的 [diff] 区中设置 git=1)以跟踪复制和改\n"
+"    名。请参见差异帮助主题,以了解关于 git 差异格式的更多信息。\n"
+"    "
+
+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 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 ""
+"显式当前的补丁和后续的修改\n"
+"\n"
+"    显示当前的补丁和最近一次刷新之后的修改(因而在执行 'qrefresh' 之后就只\n"
+"    显示当前的补丁)。\n"
+"\n"
+"    如果你只想看到最近一次刷新之后的修改请使用 'hg diff',如果你只想看到当\n"
+"    前的补丁请使用 'hg export qtip'。\n"
+"    "
+
+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\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 ""
+
+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 --force is applied, all local changes in patched files will be "
+"lost.\n"
+"    "
+msgstr ""
+"将下个补丁压入堆栈\n"
+"\n"
+"    当指定 '--force' 时,所有在补丁文件中的本地修改都会丢失。\n"
+"    "
+
+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 name,\n"
+"    keeps popping off patches until the named patch is at the top of the "
+"stack.\n"
+"    "
+msgstr ""
+"将当前补丁弹出堆栈\n"
+"\n"
+"    默认将补丁堆栈的顶部弹出。如果指定了补丁名称,那么就会一直弹出,直到此\n"
+"    补丁位于堆栈顶部。\n"
+"    "
+
+#, 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 rev"
+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 dir's parent revisions is stripped, the working\n"
+"    directory will be updated to the parent of the stripped revision.\n"
+"    "
+msgstr ""
+"从版本库删除一个版本以及它的子孙\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"
+"\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"
+"\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"
+"\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 ""
+
+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 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 ""
+
+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 "数用协议 'pull' 来复制元数据"
+
+msgid "do not update the new working directories"
+msgstr ""
+
+msgid "use uncompressed transfer (fast over LAN)"
+msgstr "使用不压缩的传输(在局域网更快)"
+
+msgid "location of source patch repo"
+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 dir"
+msgstr "从补丁目录导入文件"
+
+msgid "patch file name"
+msgstr "补丁文件名称"
+
+msgid "overwrite existing files"
+msgstr "覆盖已有文件"
+
+msgid "place existing revisions under mq control"
+msgstr "将现有的版本置于 mq 控制下"
+
+msgid "use git extended diff format"
+msgstr "使用 git 扩展差异格式"
+
+msgid "hg qimport [-e] [-n NAME] [-f] [-g] [-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 "在补丁中增加/更新 \"From: <current user>\""
+
+msgid "add/update \"From: <given user>\" in patch"
+msgstr "在补丁中增加/更新 \"From: <given user>\""
+
+msgid "update \"Date: <current date>\" in patch (if present)"
+msgstr "在补丁中更新 \"Date: <current date>\" (如果存在)"
+
+msgid "update \"Date: <given date>\" in patch (if present)"
+msgstr "在补丁中更新 \"Date: <given date>\" (如果存在)"
+
+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 dir"
+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 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."
+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 ""
+
+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"
+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\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"
+"\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 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"
+"\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,\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"
+"\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"
+"\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 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"
+"\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"
+"\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 ""
+
+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 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"
+"\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 hgrc.\n"
+"    See the [email] section in hgrc(5) for details.\n"
+"    "
+msgstr ""
+
+msgid "Return the revisions present locally but not in dest"
+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 "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 "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 ""
+
+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 and\n"
+"    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"
+"    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 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"
+"    "
+msgstr ""
+
+#, python-format
+msgid "%s cannot be removed"
+msgstr ""
+
+#, python-format
+msgid "warning: %s\n"
+msgstr ""
+
+#, python-format
+msgid "Removing file %s\n"
+msgstr "正在删除文件 %s\n"
+
+#, python-format
+msgid "Removing directory %s\n"
+msgstr "正在删除目录 %s\n"
+
+msgid "abort if an error occurs"
+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 ""
+
+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 "
+"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"
+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 "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 ""
+"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 ""
+
+#, 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 ""
+
+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 ""
+
+#, python-format
+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 ""
+
+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 "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 ""
+
+msgid "rebase from the base of a given revision"
+msgstr ""
+
+msgid "rebase onto a given revision"
+msgstr ""
+
+msgid "collapse the rebased revisions"
+msgstr ""
+
+msgid "continue an interrupted rebase"
+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 ""
+
+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 "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 "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 ""
+
+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 ""
+"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 ""
+
+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 ""
+"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 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 ""
+
+#, 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 ""
+
+msgid "arbitrarily rewrite changeset before applying it"
+msgstr ""
+
+#, python-format
+msgid "filtering %s\n"
+msgstr ""
+
+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 ""
+
+#, python-format
+msgid "%s: empty changeset"
+msgstr ""
+
+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 ""
+
+#, python-format
+msgid "working dir not at transplant parent %s"
+msgstr ""
+
+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 ""
+
+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\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"
+"\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 ""
+
+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\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"
+" * 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"
+"\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 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 ""
+
+#, 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 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"
+"\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 ""
+
+#, 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 file name"
+msgstr ""
+
+#, python-format
+msgid "adding %s\n"
+msgstr ""
+
+#, 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 "%s %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 "(考虑使用 --after)\n"
+
+#, python-format
+msgid "changeset:   %d:%s\n"
+msgstr "修改集:      %d:%s\n"
+
+#, python-format
+msgid "branch:      %s\n"
+msgstr "分支:        %s\n"
+
+#, python-format
+msgid "tag:         %s\n"
+msgstr "标签:        %s\n"
+
+#, python-format
+msgid "parent:      %d:%s\n"
+msgstr "父亲:        %d:%s\n"
+
+#, python-format
+msgid "manifest:    %d:%s\n"
+msgstr "清单:        %d:%s\n"
+
+#, python-format
+msgid "user:        %s\n"
+msgstr "用户:        %s\n"
+
+#, python-format
+msgid "date:        %s\n"
+msgstr "日期:        %s\n"
+
+msgid "files+:"
+msgstr "文件+:"
+
+msgid "files-:"
+msgstr "文件-:"
+
+msgid "files:"
+msgstr "文件:"
+
+#, python-format
+msgid "files:       %s\n"
+msgstr "文件:        %s\n"
+
+#, python-format
+msgid "copies:      %s\n"
+msgstr "复制:        %s\n"
+
+#, python-format
+msgid "extra:       %s=%s\n"
+msgstr "额外:        %s=%s\n"
+
+msgid "description:\n"
+msgstr "描述:\n"
+
+#, python-format
+msgid "summary:     %s\n"
+msgstr "摘要:        %s\n"
+
+#, 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 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 ""
+"add the specified files on the next commit\n"
+"\n"
+"    Schedule files to be version controlled and added to the 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 ""
+"增加指定文件用于下次提交\n"
+"\n"
+"    调度文件受版本控制,增加到版本库。\n"
+"\n"
+"    这些文件将于下次提交时增加到版本库。需要在提交前撤销增加,\n"
+"    参见 'hg revert'。\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"
+"    "
+msgstr ""
+
+msgid "similarity must be a number"
+msgstr ""
+
+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"
+"    "
+msgstr ""
+"显示指定文件每行的修改集信息\n"
+"\n"
+"    列出文件中的修改,为每行显示版本标识\n"
+"\n"
+"    此命令用于查找谁做出的修改,或者什么时候发生的修改\n"
+"\n"
+"    当没有选项 '-a' 时,annotate 会避免处理检测为二进制的文件\n"
+"    当使用选项 '-a' 时,annotate 会直接产生追溯,可能会有不合需要的结果\n"
+"    "
+
+msgid "at least one file name or pattern required"
+msgstr ""
+
+msgid "at least one of -n/-c is required for -l"
+msgstr ""
+
+#, python-format
+msgid "%s: binary file\n"
+msgstr ""
+
+msgid ""
+"create 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"
+"    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\" to specify a format string for the prefix.\n"
+"    The default is the basename of the archive, with suffixes 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 back out 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"
+"\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"
+"\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 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 ""
+
+#, 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.\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"
+"    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"
+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 "failed to execute %s"
+msgstr ""
+
+#, python-format
+msgid "%s killed"
+msgstr ""
+
+#, python-format
+msgid "Changeset %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 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"
+"\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"
+"    --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"
+"\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"
+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.\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"
+"    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 repo 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"
+"    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"
+"    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"
+"    "
+
+msgid ""
+"commit the specified files or all outstanding changes\n"
+"\n"
+"    Commit changes to the given files into the repository.\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"
+"\n"
+"    See 'hg help dates' for a list of formats valid for -d/--date.\n"
+"    "
+msgstr ""
+"提交指定文件的修改或全部修改\n"
+"\n"
+"    将指定文件的修改提交到版本库。\n"
+"\n"
+"    如果省略了文件列表,那么 \"hg status\" 报告的所有修改都被提交。\n"
+"\n"
+"    如果你要提交合并结果,请不要提供任何文件名称或过滤器 '-I/-X'。\n"
+"\n"
+"    如果没有指定提交日志,将会启动配置的编辑器,让你输入信息。\n"
+"\n"
+"    参见 'hg help dates' 以获得 '-d/--date' 的有效格式列表。\n"
+"    "
+
+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"
+"    stand in the working directory. If invoked with --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 "此处没有水银版本库(没有找到 .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 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."
+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 .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 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"
+"    "
+msgstr ""
+"在版本库中比较(指定的文件)\n"
+"\n"
+"    显示指定文件在版本间的差异。\n"
+"\n"
+"    文件间的差异使用同一差异格式显示。\n"
+"\n"
+"    注意: 对合并的比较可能会产生不期望的结果,因为没有指定版本时,默认\n"
+"    与工作目录的直接父亲比较。\n"
+"\n"
+"    当给出两个版本参数时,会显示在这些版本间的修改。如果只给出一个版本,\n"
+"    那么它将与工作目录比较。当没有指定版本时,将比较工作目录中的文件与\n"
+"    它的直接父亲。\n"
+"\n"
+"    当没有选项 '-a' 时,将会避免处理检测为二进制的文件。当使用选项 '-a'\n"
+"    时,可能会有不合需要的结果。\n"
+"\n"
+"    使用选项 '--git' 会使用 git 扩展差异格式。请阅读 'hg help diffs' 以\n"
+"    了解更多信息。\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 changesets,\n"
+"    as it will compare the merge changeset against its 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 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 ""
+"为一个或多个修改集输出标题和差异\n"
+"\n"
+"    为一个或多个版本输出标题和差异。\n"
+"\n"
+"    在修改集标题中显示的信息是: 作者,修改集哈希,父亲和提交日志。\n"
+"\n"
+"    注意: 对于合并修改集,导出可能产生不期望的差异输出,因为它只会将合并\n"
+"    修改集与其第一个父亲比较。\n"
+"\n"
+"    可以输出到文件,这时会使用指定的格式化字符串构造文件名称。格式化规则\n"
+"    如下:\n"
+"\n"
+"    %%   字符 \"%\"\n"
+"    %H   修改集哈希 (40 位十六进制数字)\n"
+"    %N   产生的补丁号\n"
+"    %R   修改集版本号\n"
+"    %b   待导出的版本库的基本名称\n"
+"    %h   短修改集哈希(12 位十六进制数字)\n"
+"    %n   从 1 开始补 0 的序列号\n"
+"    %r   补 0 的修改集版本号\n"
+"\n"
+"    当没有选项 '-a' 时,将会避免处理检测为二进制的文件。当使用选项 '-a'\n"
+"    时,可能会有不合需要的结果。\n"
+"\n"
+"    使用选项 '--git' 会使用 git 扩展差异格式。请阅读差异帮助主题以了解\n"
+"    更多信息。\n"
+"\n"
+"    使用选项 '--switch-parent',将会与第二个父亲比较。对于复审合并很有用。\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\n"
+"    a 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"
+"    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 ""
+
+#, 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 and short help.\n"
+"\n"
+"    Given a topic, extension, or command name, print help for that 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 "使用 \"hg help\" 获得全部命令的列表,或 \"hg -v\" 获得详细信息"
+
+#, 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 ""
+
+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 "分布式软件配置管理工具 - 水银\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 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"
+"    "
+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 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"
+"    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"
+"    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 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"
+"\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 is 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 ""
+"在指定目录创建新版本库\n"
+"\n"
+"    在指定目录初始化新版本库。如果指定的目录不存在,那么会被创建。\n"
+"\n"
+"    如果没有指定目录,就使用当前目录。\n"
+"\n"
+"    可以指定位置 'ssh://' 作为目标。参见命令 'hg help urls' 的帮助信息,\n"
+"    以了解位置 'ssh://' 的重要详情。\n"
+"    "
+
+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"
+"\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 ""
+
+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 file name to follow history across\n"
+"    renames and copies. --follow without a file name 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 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"
+"    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 ""
+"显示全部版本库或指定文件的版本历史\n"
+"\n"
+"    显示全部版本库或指定文件的版本历史。\n"
+"\n"
+"    显示文件历史的时候不跟踪改名或复制。对文件名称使用 '-f/--follow'\n"
+"    会跟踪改名或复制的历史。当不给出文件名称时,使用 '--follow' 只显\n"
+"    示开始版本的直系祖先。使用 '--follow-first' 只显示合并版本的第一\n"
+"    个父亲。\n"
+"\n"
+"    如果没有指定版本范围,默认是 'tip:0'。当使用 '--follow' 时,使用\n"
+"    工作目录的父亲作为开始版本。\n"
+"\n"
+"    参见 'hg help dates' 以获得 '-d/--date' 的有效格式列表。\n"
+"\n"
+"    此命令缺省输出: 修改集标识和哈希,标签,父亲,提交者,日期和时间,\n"
+"    以及每次提交的概要信息。当使用选项 '-v/--verbose' 时,会显示文件\n"
+"    变更列表和完整的提交信息。\n"
+"\n"
+"    注意: 对于合并修改集,'log -p' 可能产生不期望的差异输出,因为它只\n"
+"    会将合并修改集与其第一个父亲比较。而且,只显示对所有父亲都不同的\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 ""
+
+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 ""
+
+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"
+"\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"
+"    "
+msgstr ""
+"将工作目录与其它版本合并\n"
+"\n"
+"    将当前工作目录中的内容与指定版本合并。对任一父亲而言改变的文件都会对\n"
+"    下次提交标记为已修改,在提交之前不允许再执行更新。\n"
+"\n"
+"    如果没有指定版本,那么工作目录的父亲是一个合并顶点,另一个在当前分支\n"
+"    中,合并后的内容是新的顶点。否则,必须明确的指定要合并的版本。\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 or\n"
+"    the default push location. These are the changesets that would be pushed\n"
+"    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"
+"    "
+msgstr ""
+"显示工作目录或指定版本的父亲\n"
+"\n"
+"    显示工作目录的父亲版本。如果使用 '--rev' 指定版本,就显示此版本的\n"
+"    父亲。如果指定了文件,那么使用此文件最后修改的版本(工作目录的起源\n"
+"    版本,或 '--rev' 指定的版本)。\n"
+"    "
+
+msgid "can only specify an explicit file name"
+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, show\n"
+"    definition of 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 the local repository. By default, this\n"
+"    does not update the copy of the project in the working directory.\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"
+"    查找位于指定路径或位置的版本库的全部修改,增加到版本版本库。默认不\n"
+"    更新工作目录。\n"
+"\n"
+"    如果没有指定位置,就使用路径 'default'。参见 'hg help urls' 以了解\n"
+"    更多信息。\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"
+"\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"
+"    这是 'pull' 的对称操作。它从当前版本库推送改变到其它版本库。如果目标\n"
+"    是本地版本库,那么此操作与在目标版本库从当前版本库执行 'pull' 操作等\n"
+"    同。\n"
+"\n"
+"    推送默认拒绝导致增加远程版本库顶点数目的操作。这通常表明客户端在推送\n"
+"    之前忘记取得远程版本库的修改,并且合并。\n"
+"\n"
+"    如果使用了选项 '-r',此命名修改集以及其祖先都会被推送到远程版本库。\n"
+"    \n"
+"\n"
+"    参见主题 'urls' 的帮助信息,以了解位置 'ssh://' 的重要详情。如果没有\n"
+"    给出目标位置,那么使用默认路径。参见 'hg help urls' 以了解更多信息。\n"
+"    "
+
+#, python-format
+msgid "pushing to %s\n"
+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 ""
+
+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"
+"\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 ""
+"在下次提交时删除指定文件\n"
+"\n"
+"    调度从版本库删除指定文件。\n"
+"\n"
+"    它只从当前分支删除文件,不删除历史。'-A' 用于只移除已经删除的文\n"
+"    件,'-f' 用于强制删除,'-Af' 用于从下个版本移除文件,但是不删除\n"
+"    它们。\n"
+"\n"
+"    下表给出了删除不同状态(列)文件的行为和可选的组合(行)。文件状态\n"
+"    ('hg status' 报告的状态)是增加(A),干净(C),已修改(M),丢失(!)。\n"
+"    动作是警告(W),移除(R,从分支),以及删除(D,从磁盘)。\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"
+"    此命令调度下次提交时删除文件。\n"
+"    要在此之前撤销删除,请参见 'hg revert'。\n"
+"    "
+
+msgid "no files specified"
+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\n"
+"    dest is a directory, copies are put in that directory. If dest is\n"
+"    a 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"
+"    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 switch.\n"
+"\n"
+"    This command will also allow listing resolved files and manually\n"
+"    marking and unmarking files as resolved.\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 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"
+"\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 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"
+"\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\n"
+"    mode 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 "保存当前版本的 %s 为 %s\n"
+
+#, python-format
+msgid "file not managed: %s\n"
+msgstr "文件未被控制: %s\n"
+
+#, python-format
+msgid "no changes needed to %s\n"
+msgstr "不需要改变 %s\n"
+
+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 dir\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\" and \"-E\" options to log to files.\n"
+"    "
+msgstr ""
+"通过 HTTP 发布版本库\n"
+"\n"
+"    启动本地 HTTP 版本库浏览器和发布服务器。\n"
+"\n"
+"    默认服务器访问日志输出到 stdout,错误日志输出到 stderr。\n"
+"    可以使用选项 \"-A\" 和 \"-E\",将这些日志输出到文件。\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"
+"    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"
+"\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 difference between them is 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"
+"    ? = not tracked\n"
+"    I = ignored\n"
+"      = the previous added file was copied from here\n"
+"    "
+msgstr ""
+"显示工作目录中已改变的文件\n"
+"\n"
+"    显示版本库中的文件状态。如果指定文件名称,只显示匹配的文件。干净的\n"
+"    文件,被忽略的文件,复制/移动的源文件,不会被显示,除非使用了选项\n"
+"    '-c' (干净的),'-i' (被忽略的),'-C' (复制源) 或者 '-A' (全部)。除\n"
+"    非使用了选项 \"只显示 ...\",否则就使用选项 '-mardu'。\n"
+"\n"
+"    选项 '-q/--quiet' 隐藏未跟踪(未知或被忽略)的文件,除非明确地使用选\n"
+"    项 '-u/--unknown' 或 ‘-i/-ignored’。\n"
+"\n"
+"    注意: 如果修改了权限或者执行了合并,'status' 与 'diff' 的显示可能\n"
+"    不一致。标准差异格式不报告权限的改变,'diff' 只报告相对于一个合并\n"
+"    父亲的改变。\n"
+"\n"
+"    如果给出 1 个版本,就用于基础版本。如果给出 2 个版本,就显示其差异。\n"
+"\n"
+"    显示文件状态的代码是:\n"
+"    M = 已修改\n"
+"    A = 已增加\n"
+"    R = 已移除\n"
+"    C = 干净的\n"
+"    ! = 已删除,仍旧被跟踪\n"
+"    ? = 未跟踪\n"
+"    I = 已忽略\n"
+"      = 早先增加的文件自此复制\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 used,\n"
+"    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 %s 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 switch\n"
+"    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"
+"\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 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"
+"    "
+msgstr ""
+"更新工作目录\n"
+"\n"
+"    更新工作目录到指定版本,或者到当前分支的顶点。使用 'null' 作为版本可以\n"
+"    删除工作副本(类似于 'hg clone -U')。\n"
+"\n"
+"    当工作目录包含未提交的修改时,它会被版本库中指定版本的状态替换。当请求\n"
+"    的版本位于不同分支时,工作目录会被切换到此分支。\n"
+"\n"
+"    可以使用选项 '-C' 来丢弃未提交的修改,强制使用请求的版本替换工作目录的\n"
+"    状态。\n"
+"\n"
+"    当有未提交的修改,没有使用选项 '-C',父版本和请求版本位于不同分支,并且\n"
+"    其中一个是另一个的祖先时,那么新的工作目录包含请求版本与未提交的修改的\n"
+"    合并结果。否则,更新会失败,建议使用 'merge' 或 'update -C'。\n"
+"\n"
+"    如果你只想更新一个文件到旧版本,请使用 'revert'。\n"
+"\n"
+"    参见 'hg help dates' 以获得 '-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 ""
+
+msgid "output version and copyright information"
+msgstr "输出版本和版权信息"
+
+#, python-format
+msgid "Mercurial Distributed SCM (version %s)\n"
+msgstr "分布式软件配置管理工具 - 水银 (版本 %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 ""
+"\n"
+"版权所有 (C) 2005-2009 Matt Mackall <mpm@selenic.com> 和其他人。\n"
+"这是自由软件,具体参见版权条款。这里没有任何担保,甚至没有适合\n"
+"特定目的的隐含的担保。\n"
+
+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 "不再询问,假定所有答案都是 'yes'"
+
+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 improved command execution profile"
+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 "指定要使用的 'ssh' 命令"
+
+msgid "specify hg command to run on the remote side"
+msgstr "指定要在远程运行的 'hg' 命令"
+
+msgid "include names matching the given patterns"
+msgstr "包含匹配指定模式的名称"
+
+msgid "exclude names matching the given patterns"
+msgstr "拒绝匹配指定模式的名称"
+
+msgid "use <text> as commit message"
+msgstr "使用 <text> 作为提交日志"
+
+msgid "read commit message from <file>"
+msgstr "从 <file> 读取提交日志"
+
+msgid "record datecode as commit date"
+msgstr "将提供的日期作为提交日期"
+
+msgid "record 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 "列出作者 (增加 '-v' 会以长格式显示)"
+
+msgid "list the date (short with -q)"
+msgstr "列出日期 (增加 '-q' 会以短格式显示)"
+
+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 "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 "parent"
+msgstr ""
+
+msgid "file list"
+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 "[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 revs 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 "[-r REV] [REV]..."
+msgstr ""
+
+msgid "[TOPIC]"
+msgstr ""
+
+msgid "identify the specified rev"
+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\n"
+"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 "在文件名称结尾增加 NUL,用于 xargs"
+
+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 revs matching date spec"
+msgstr "显示匹配日期的版本"
+
+msgid "show copied files"
+msgstr "显示复制的文件"
+
+msgid "do case-insensitive search for a keyword"
+msgstr "对关键字执行不区分大小写的搜索"
+
+msgid "include revs where files were removed"
+msgstr "包含删除文件的版本"
+
+msgid "show only merges"
+msgstr "只显示合并"
+
+msgid "revs 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 "[-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 rev"
+msgstr "从指定的版本显示父亲"
+
+msgid "hg parents [-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 "监听的端口(默认: 8000)"
+
+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 dir)"
+msgstr "在 WEB 页面中显示的名称(默认: 工作目录)"
+
+msgid "name of the webdir config file (serve more than one repo)"
+msgstr "webdir 配置文件的名称(发布多个版本库)"
+
+msgid "for remote clients"
+msgstr "针对远程客户端"
+
+msgid "web templates to use"
+msgstr "使用的 WEB 模板"
+
+msgid "template style to use"
+msgstr "使用的显示样式"
+
+msgid "use IPv6 in addition to IPv4"
+msgstr "同时使用 IPv6 和 IPv4"
+
+msgid "SSL certificate file"
+msgstr "SSL 证书文件"
+
+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 ""
+
+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 ""
+
+#, python-format
+msgid "   %s -> %s %s\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 ""
+
+#, 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 "character device"
+msgstr ""
+
+msgid "block device"
+msgstr ""
+
+msgid "fifo"
+msgstr ""
+
+msgid "socket"
+msgstr ""
+
+msgid "directory"
+msgstr ""
+
+#, python-format
+msgid "%s: unsupported file type (type is %s)\n"
+msgstr ""
+
+#, python-format
+msgid "abort: %s\n"
+msgstr "中止: %s\n"
+
+#, python-format
+msgid ""
+"hg: command '%s' is ambiguous:\n"
+"    %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 "中止: %s: %s\n"
+
+#, python-format
+msgid "abort: could not lock %s: %s\n"
+msgstr "中止: 不能锁定 %s: %s\n"
+
+#, python-format
+msgid "hg %s: %s\n"
+msgstr ""
+
+#, python-format
+msgid "hg: %s\n"
+msgstr ""
+
+#, python-format
+msgid "abort: %s!\n"
+msgstr "中止: %s!\n"
+
+#, python-format
+msgid "abort: %s"
+msgstr "中止: %s"
+
+msgid " empty string\n"
+msgstr ""
+
+msgid "killed!\n"
+msgstr ""
+
+#, python-format
+msgid "hg: unknown command '%s'\n"
+msgstr "hg: 未知命令 '%s'\n"
+
+#, python-format
+msgid "abort: could not import module %s!\n"
+msgstr "中止: 不能导入模块 %s!\n"
+
+msgid "(did you forget to compile extensions?)\n"
+msgstr "(你是否忘记了编译扩展?)\n"
+
+msgid "(is your Python install correct?)\n"
+msgstr "(你的 Python 安装正确吗?)\n"
+
+#, python-format
+msgid "abort: error: %s\n"
+msgstr "中止: 失败: %s\n"
+
+msgid "broken pipe\n"
+msgstr "坏掉的管道\n"
+
+msgid "interrupted!\n"
+msgstr "中断!\n"
+
+msgid ""
+"\n"
+"broken pipe\n"
+msgstr ""
+"\n"
+"坏掉的管道\n"
+
+msgid "abort: out of memory\n"
+msgstr "中止: 内存不足\n"
+
+msgid "** unknown exception encountered, details follow\n"
+msgstr "** 遇到了未知异常,详细信息如下\n"
+
+msgid "** report bug details to http://www.selenic.com/mercurial/bts\n"
+msgstr "** 报告问题详情到 http://www.selenic.com/mercurial/bts\n"
+
+msgid "** or mercurial@selenic.com\n"
+msgstr "** 或 mercurial@selenic.com\n"
+
+#, python-format
+msgid "** Mercurial Distributed SCM (version %s)\n"
+msgstr "** 分布式软件配置管理工具 - 水银 (版本 %s)\n"
+
+#, python-format
+msgid "** Extensions loaded: %s\n"
+msgstr "** 已加载的扩展: %s\n"
+
+#, python-format
+msgid "malformed --config option: %s"
+msgstr "非法 '--config' 选项: %s"
+
+#, python-format
+msgid "extension '%s' overrides commands: %s\n"
+msgstr "扩展 '%s' 覆盖了命令: %s\n"
+
+msgid "Option --config may not be abbreviated!"
+msgstr "选项 '--config' 不能简短!"
+
+msgid "Option --cwd may not be abbreviated!"
+msgstr "选项 '--cwd' 不能简短!"
+
+msgid ""
+"Option -R has to be separated from other options (i.e. not -qR) and --"
+"repository may only be abbreviated as --repo!"
+msgstr ""
+"选项 -R 必须隔离使用(也就是不能 -qR),并且 --repository 只能简短为 --repo!"
+
+#, python-format
+msgid "Time: real %.3f secs (user %.3f+%.3f sys %.3f+%.3f)\n"
+msgstr "时间: 实际 %.3f 秒(用户 %.3f+%.3f 系统 %.3f+%.3f)\n"
+
+#, python-format
+msgid "repository '%s' is not local"
+msgstr "非本地版本库 '%s'"
+
+msgid "invalid arguments"
+msgstr "非法参数"
+
+msgid "exception raised - generating profile anyway\n"
+msgstr ""
+
+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 "*** 加载扩展 '%s',自 '%s': %s\n"
+
+#, python-format
+msgid "*** failed to import extension %s: %s\n"
+msgstr "*** 加载扩展 '%s' 失败: %s\n"
+
+#, 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' 不能处理符号链接\n"
+
+#, python-format
+msgid "tool %s can't handle binary\n"
+msgstr "工具 '%s' 不能处理二进制\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(二进制 %s 符号链接 %s)\n"
+
+#, python-format
+msgid ""
+" no tool found to merge %s\n"
+"keep (l)ocal or take (o)ther?"
+msgstr ""
+" 没有找到工具合并 %s\n"
+"使用本地(l)或者他人(o)的内容?"
+
+msgid "[lo]"
+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 "[yn]"
+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 ""
+
+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). offset\n"
+"    is the offset of the local timezone, in seconds west of UTC (negative\n"
+"    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 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"
+"    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 directories ending with .rc are added\n"
+"    * otherwise, the directory 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\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"
+"    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"
+"    "
+msgstr ""
+
+msgid "Specifying Single Revisions"
+msgstr ""
+
+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"
+"\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.\n"
+"    If an uncommitted merge is in progress, \".\" is the revision of\n"
+"    the 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\n"
+"    means \"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 ""
+"\n"
+"    当水银接受多个版本时,它们可以单独给出,或者以字符 \":\" 分割的拓扑连续\n"
+"    范围格式提供。\n"
+"\n"
+"    范围的语法是 '[BEGIN]:[END]',其中 'BEGIN' 和 'END' 是版本标识。'BEGIN'\n"
+"    和 'END' 都是可选的。'BEGIN' 默认是 0,'END' 默认是 'tip'。因此范围 \":"
+"\"\n"
+"    意味着全部版本。\n"
+"\n"
+"    如果 'BEGIN' 大于 'END',版本视为反序。\n"
+"\n"
+"    范围是闭区间。即范围 '3:5' 是 '3','4','5'。同样,范围 '9:6' 是 '9',\n"
+"    '8','7' 和 '6'。\n"
+"    "
+
+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"
+"\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 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"
+"\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"
+"    "
+msgstr ""
+"\n"
+"    水银显示文件不同版本之间差异的格式与 GNU diff 标准格式兼容,可用于\n"
+"    GNU patch 和许多标准工具。\n"
+"\n"
+"    虽然标准格式在大多数情况下都能满足要求,但是它不包含下述信息:\n"
+"\n"
+"     - 可执行状态和其它权限位\n"
+"     - 复制或改名信息\n"
+"     - 二进制文件的修改\n"
+"     - 创建或删除空文件\n"
+"\n"
+"    水银也支持解决这些限制的 git 扩展差异格式。由于一些常用的工具还不支持\n"
+"    此格式,所以它不是默认格式。\n"
+"\n"
+"    这意味着当从水银版本库(例如 \"hg export\")产生差异时,在其它版本库应用标\n"
+"    准差异时,会丢失文件复制或改名等额外信息,所以你要小心处理。水银的内部\n"
+"    操作(例如 push 和 pull)在传达改变时,使用内部的二进制格式,所以不受影\n"
+"    响。\n"
+"\n"
+"    要让水银产生 git 扩展差异格式,可以对许多命令使用选项 '--git',或者在\n"
+"    你的 hgrc 文件中的节 '[diff]' 中增加 'git = True'。当你从此格式导入时,\n"
+"    或在 mq 扩展中使用时,不需要设置此选项。\n"
+"    "
+
+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 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"
+"\n"
+"    Three styles are packaged with Mercurial: default (the style used\n"
+"    when no explicit preference is passed), compact and changelog. Usage:\n"
+"\n"
+"        $ hg log -r1 --style changelog\n"
+"\n"
+"    A template is a piece of text, with markup to invoke variable 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"
+"\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"
+"    - 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"
+"    - 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"
+"\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 seprators). For example,\n"
+"          \"foo/bar/baz\" becomes \"baz\" and \"foo/bar//\" becomes \"bar\".\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"
+"          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"
+"          '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"
+"    - 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"
+"    - 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"
+"    - 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"
+"    - user: Any text. Returns the user portion of an email address.\n"
+"    "
+msgstr ""
+"\n"
+"    水银允许你通过模版定制命令的输出。你可以通过命令行选项 '--template'\n"
+"    来使用模版,或者选择已有的模版样式(--style)。\n"
+"\n"
+"    你可以定制任意输出与日志信息类似的命令,即: log,outgoing,incoming,\n"
+"    tip,parents,heads 和 glog。\n"
+"\n"
+"    水银中内置了 3 种样式: default (默认), compact 和 changelog。用法:\n"
+"\n"
+"        $ hg log -r1 --style changelog\n"
+"\n"
+"    模版是文本片断,其中的标记用于变量扩展:\n"
+"\n"
+"        $ hg log -r1 --template \"{node}\\n\"\n"
+"        b56ce7b07c52de7d5fd79fb89701ea538af65746\n"
+"\n"
+"    花括号中的字符串称为关键字。可用的关键字依赖于模版的上下文。下述关键字\n"
+"    可用于输出与日志信息类似的命令:\n"
+"\n"
+"    - author: 字符串。修改集的作者。\n"
+"    - branches: 字符串。修改集的分支。如果分支名称为 'default' 则为空。\n"
+"    - date: 日期信息。修改集的日期。\n"
+"    - desc: 字符串。修改集的描述。\n"
+"    - files: 字符串列表。修改集中被修改、增加和删除的全部文件。\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"
+"       $ hg tip --template \"{date|isodate}\\n\"\n"
+"       2008-08-21 18:22 +0000\n"
+"\n"
+"    过滤器列表:\n"
+"\n"
+"    - addbreaks: 输入任意文本。除了最后一行,在每行的结尾增加 XHTML 标签\n"
+"          \"<br />\"。\n"
+"    - age: 输入日期。返回指定日期与当前日期差异的人工可读的字符串。\n"
+"    - basename: 输入任意文本。将输入视为路径,返回被路径分隔符隔开的最后\n"
+"          一个组件的名称(忽略结尾的分隔符)。例如 \"foo/bar/baz\" 成为 \"baz"
+"\",\n"
+"          \"foo/bar//\" 成为 \"bar\"。\n"
+"    - date: 输入日期。返回指定日期的 Unix 日期格式字符串,包含时区,例如: \n"
+"          \"Mon Sep 04 15:13:13 2006 0700\"。\n"
+"    - domain: 输入任意文本。找到第一个 email 地址,返回其域名。例如: \n"
+"          'User <user@example.com>' 成为 'example.com'。\n"
+"    - email: 输入任意文本。返回第一个 email 地址。例如: \n"
+"          'User <user@example.com>' 成为 'user@example.com'。\n"
+"    - escape: 输入任意文本。用 XML 实体来封装 XML/XHTML 的特殊字符 \"&\",\n"
+"          \"<\" 和 \">\"。\n"
+"    - fill68: 输入任意文本。格式化为 68 列文本。\n"
+"    - fill76: 输入任意文本。格式化为 76 列文本。\n"
+"    - firstline: 输入任意文本。返回首行。\n"
+"    - hgdate: 输入日期。返回一对数字:\n"
+"          \"1157407993 25200\" (Unix 时戳,时区偏移)。\n"
+"    - isodate: 输入日期。返回 ISO 8601 格式的日期。\n"
+"    - obfuscate: 输入任意文本。返回其 XML 实体序列。\n"
+"    - person: 输入任意文本。返回 email 地址前的文本。\n"
+"    - rfc822date: 输入日期。返回 email 头部使用的日期格式。\n"
+"    - short: 修改集哈系。返回修改集哈系的短格式。例如 12 字符的 16 进制\n"
+"          字符串。\n"
+"    - shortdate: 输入日期。返回格式类似于 \"2006-09-18\"。\n"
+"    - strip: 输入任意文本。删除全部行首与行尾空白。\n"
+"    - tabindent: 输入任意文本。除了首行,在每行的开始增加制表符号。\n"
+"    - urlescape: 输入任意文本。封装全部特殊字符。例如\n"
+"          \"foo bar\" 成为 \"foo%20bar\"。\n"
+"    - user: 输入任意文本。返回 email 地址中的用户名称部分。\n"
+"    "
+
+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\n"
+"    remote 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"
+"    - 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"
+"        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"
+"    [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"
+"\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 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"
+"\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 ""
+"\n"
+"    有效的位置格式:\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"
+"    位于本地文件系统中的路径可以指向版本库,也可以指向打包的文件(被\n"
+"    'hg bundle' 或 'hg incoming --bundle' 创建)。\n"
+"\n"
+"    在 '#' 后面可选的标识符用于指定要取得的远程版本库的分支,标签或\n"
+"    修改集。\n"
+"\n"
+"    仅当远程水银服务器显式启用时,才能推到 'http://' 和 'https://'。\n"
+"\n"
+"    在水银中使用 SSH 的一些提示:\n"
+"    - 使用 SSH 时,需要在远程主机上有可登录帐号,远程路径中还需要有\n"
+"      hg,或者有指定的远程命令。\n"
+"    - 默认 'path' 是相对于远程主机上的用户家目录。\n"
+"      可以在路径前增加一个斜线指定绝对路径:\n"
+"        ssh://example.com//tmp/repository\n"
+"    - 水银使用 SSH 时不使用压缩,所以你可以在 ~/.ssh/config 中配置\n"
+"      SSH 执行压缩,例如:\n"
+"        Host *.mylocalnetwork.example.com\n"
+"          Compression no\n"
+"        Host *\n"
+"          Compression yes\n"
+"      另一个方法是在你的 hgrc 中将 \"ssh -C\" 作为你的 ssh 命令,或\n"
+"      用于命令行参数 '--ssh' 中。\n"
+"\n"
+"    这些路径可以在你的 'hgrc' 中的节 '[paths]' 中定义别名:\n"
+"    [paths]\n"
+"    alias1 = URL1\n"
+"    alias2 = URL2\n"
+"    ...\n"
+"\n"
+"    然后你就可以在任意命令中使用这些别名作为路径(例如 'hg pull alias1'\n"
+"    会从 'alias1' 定义的路径取得指定版本)。\n"
+"\n"
+"    因为用于默认路径,所以这 2 个路径别名比较特殊:\n"
+"\n"
+"    default:\n"
+"      当你使用 'hg clone' 创建版本库时,此命令会将源版本库的位置保存\n"
+"      为新版本库的 'default' 路径,然后你可以对类似 'push' 和 'pull'\n"
+"      的命令省略路径(包含进和出)。\n"
+"\n"
+"    default-push:\n"
+"      命令 'push' 会查找别名是 'default-push' 的路径,它覆盖定义 'default'。\n"
+"    "
+
+#, python-format
+msgid "destination directory: %s\n"
+msgstr "目标目录: %s\n"
+
+#, python-format
+msgid "destination '%s' already exists"
+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 "updating working directory\n"
+msgstr "正在更新工作目录\n"
+
+msgid "updated"
+msgstr "已更新"
+
+msgid "merged"
+msgstr "已合并"
+
+msgid "removed"
+msgstr "已删除"
+
+msgid "unresolved"
+msgstr "未解决"
+
+#, python-format
+msgid "%d files %s"
+msgstr "%d 个文件%s"
+
+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 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 "使用 %s\n"
+
+#, python-format
+msgid "capabilities: %s\n"
+msgstr ""
+
+msgid "operation not supported over http"
+msgstr ""
+
+#, python-format
+msgid "sending %s command\n"
+msgstr "发送命令 '%s'\n"
+
+#, python-format
+msgid "sending %s bytes\n"
+msgstr "发送 %s 字节\n"
+
+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 "实际 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 "'%s' 似乎不是水银版本库"
+
+#, 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 "版本库 %s 已存在"
+
+#, python-format
+msgid "requirement '%s' not supported"
+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 "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 "回滚中断的事务\n"
+
+msgid "no interrupted transaction available\n"
+msgstr ""
+
+msgid "rolling back last transaction\n"
+msgstr "回滚最近的事务\n"
+
+#, python-format
+msgid "Named branch could not be reset, current branch still is: %s\n"
+msgstr ""
+
+msgid "no rollback information available\n"
+msgstr "没有回滚信息可用\n"
+
+#, 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 ""
+
+#, python-format
+msgid "%s not tracked!\n"
+msgstr "%s 没有被跟踪!\n"
+
+msgid "unresolved merge conflicts (see hg resolve)"
+msgstr "未解决的合并冲突(参见 'hg resolve')"
+
+msgid "nothing changed\n"
+msgstr "没有改变\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"
+
+#, 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 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 "正在搜索修改\n"
+
+#, 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 "正在请求全部修改\n"
+
+msgid ""
+"Partial pull cannot be done because other repository doesn't support "
+"changegroupsubset."
+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 "已发现 %d 个修改集\n"
+
+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 "正在增加修改集\n"
+
+msgid "received changelog group is empty"
+msgstr ""
+
+msgid "adding manifests\n"
+msgstr "正在增加清单\n"
+
+msgid "adding file changes\n"
+msgstr "正在增加文件改变\n"
+
+#, 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 "已增加 %d 个修改集,包含 %d 个改变,修改了 %d 个文件%s\n"
+
+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 ""
+
+msgid "'\\n' and '\\r' disallowed in filenames"
+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 ""
+
+msgid "resolving manifests\n"
+msgstr "正在解析清单\n"
+
+#, 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"
+"(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]"
+msgstr ""
+
+msgid "c"
+msgstr ""
+
+#, python-format
+msgid ""
+"remote changed %s which local deleted\n"
+"use (c)hanged version or leave (d)eleted?"
+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 "moving %s to %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 "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 %s).\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 "no valid hunks found; trying with %r instead\n"
+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 ""
+
+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 "正在扫描\n"
+
+#, python-format
+msgid "%d files, %d bytes to transfer\n"
+msgstr "需要传输 %d 个文件,%d 字节\n"
+
+#, python-format
+msgid "sending %s (%d bytes)\n"
+msgstr "正在发送 %s (%d 字节)\n"
+
+msgid "unmatched quotes"
+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"
+
+#, python-format
+msgid "failed to truncate %s\n"
+msgstr "截断 '%s' 失败\n"
+
+msgid "rollback completed\n"
+msgstr "完成回滚\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 ""
+"解析 '%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"
+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 "需要 http 授权"
+
+msgid "http authorization required\n"
+msgstr "需要 http 授权\n"
+
+#, python-format
+msgid "realm: %s\n"
+msgstr "领域: %s\n"
+
+#, python-format
+msgid "user: %s\n"
+msgstr "用户: %s\n"
+
+msgid "user:"
+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 ""
+
+#, 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 ""
+
+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 ""
+
+#, 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 point to %s 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 ""
+
+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 ""
--- a/mercurial/ancestor.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/ancestor.py	Sun Apr 26 11:49:17 2009 +0200
@@ -19,11 +19,13 @@
         return a
 
     # find depth from root of all ancestors
+    parentcache = {}
     visit = [a, b]
     depth = {}
     while visit:
         vertex = visit[-1]
         pl = pfunc(vertex)
+        parentcache[vertex] = pl
         if not pl:
             depth[vertex] = 0
             visit.pop()
@@ -46,7 +48,7 @@
             if n not in seen:
                 seen[n] = 1
                 yield (d, n)
-                for p in pfunc(n):
+                for p in parentcache[n]:
                     heapq.heappush(h, (depth[p], p))
 
     def generations(vertex):
--- a/mercurial/bundlerepo.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/bundlerepo.py	Sun Apr 26 11:49:17 2009 +0200
@@ -10,10 +10,10 @@
 of the GNU General Public License, incorporated herein by reference.
 """
 
-from node import hex, nullid, short
+from node import nullid
 from i18n import _
 import changegroup, util, os, struct, bz2, zlib, tempfile, shutil, mdiff
-import repo, localrepo, changelog, manifest, filelog, revlog, context, error
+import localrepo, changelog, manifest, filelog, revlog, error
 
 class bundlerevlog(revlog.revlog):
     def __init__(self, opener, indexfile, bundlefile,
@@ -158,7 +158,7 @@
             localrepo.localrepository.__init__(self, ui, path)
         except error.RepoError:
             self._tempparent = tempfile.mkdtemp()
-            tmprepo = localrepo.instance(ui,self._tempparent,1)
+            localrepo.instance(ui,self._tempparent,1)
             localrepo.localrepository.__init__(self, ui, self._tempparent)
 
         if path:
--- a/mercurial/changelog.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/changelog.py	Sun Apr 26 11:49:17 2009 +0200
@@ -7,7 +7,7 @@
 
 from node import bin, hex, nullid
 from i18n import _
-import util, error, revlog
+import util, error, revlog, encoding
 
 def _string_escape(text):
     """
@@ -175,10 +175,10 @@
         if not text:
             return (nullid, "", (0, 0), [], "", {'branch': 'default'})
         last = text.index("\n\n")
-        desc = util.tolocal(text[last + 2:])
+        desc = encoding.tolocal(text[last + 2:])
         l = text[:last].split('\n')
         manifest = bin(l[0])
-        user = util.tolocal(l[1])
+        user = encoding.tolocal(l[1])
 
         extra_data = l[2].split(' ', 2)
         if len(extra_data) != 3:
@@ -205,7 +205,7 @@
         if "\n" in user:
             raise error.RevlogError(_("username %s contains a newline")
                                     % repr(user))
-        user, desc = util.fromlocal(user), util.fromlocal(desc)
+        user, desc = encoding.fromlocal(user), encoding.fromlocal(desc)
 
         if date:
             parseddate = "%d %d" % util.parsedate(date)
--- a/mercurial/cmdutil.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/cmdutil.py	Sun Apr 26 11:49:17 2009 +0200
@@ -7,7 +7,7 @@
 
 from node import hex, nullid, nullrev, short
 from i18n import _
-import os, sys, bisect, stat
+import os, sys, bisect, stat, encoding
 import mdiff, bdiff, util, templater, templatefilters, patch, errno, error
 import match as _match
 
@@ -359,7 +359,7 @@
 
         # check for overwrites
         exists = os.path.exists(target)
-        if (not after and exists or after and state in 'mn'):
+        if not after and exists or after and state in 'mn':
             if not opts['force']:
                 ui.warn(_('%s: not overwriting - file exists\n') %
                         reltarget)
@@ -385,8 +385,10 @@
                     return True # report a failure
 
         if ui.verbose or not exact:
-            action = rename and "moving" or "copying"
-            ui.status(_('%s %s to %s\n') % (action, relsrc, reltarget))
+            if rename:
+                ui.status(_('moving %s to %s\n') % (relsrc, reltarget))
+            else:
+                ui.status(_('copying %s to %s\n') % (relsrc, reltarget))
 
         targets[abstarget] = abssrc
 
@@ -624,7 +626,7 @@
 
         # don't show the default branch name
         if branch != 'default':
-            branch = util.tolocal(branch)
+            branch = encoding.tolocal(branch)
             self.ui.write(_("branch:      %s\n") % branch)
         for tag in self.repo.nodetags(changenode):
             self.ui.write(_("tag:         %s\n") % tag)
@@ -710,13 +712,20 @@
         '''set template string to use'''
         self.t.cache['changeset'] = t
 
+    def _meaningful_parentrevs(self, ctx):
+        """Return list of meaningful (or all if debug) parentrevs for rev.
+        """
+        parents = ctx.parents()
+        if len(parents) > 1:
+            return parents
+        if self.ui.debugflag:
+            return [parents[0], self.repo['null']]
+        if parents[0].rev() >= ctx.rev() - 1:
+            return []
+        return parents
+
     def _show(self, ctx, copies, props):
         '''show a single changeset or file revision'''
-        changenode = ctx.node()
-        rev = ctx.rev()
-
-        log = self.repo.changelog
-        changes = log.read(changenode)
 
         def showlist(name, values, plural=None, **args):
             '''expand set of values.
@@ -780,21 +789,21 @@
                 yield self.t(endname, **args)
 
         def showbranches(**args):
-            branch = changes[5].get("branch")
+            branch = ctx.branch()
             if branch != 'default':
-                branch = util.tolocal(branch)
+                branch = encoding.tolocal(branch)
                 return showlist('branch', [branch], plural='branches', **args)
 
         def showparents(**args):
-            parents = [[('rev', p), ('node', hex(log.node(p)))]
-                       for p in self._meaningful_parentrevs(log, rev)]
+            parents = [[('rev', p.rev()), ('node', p.hex())]
+                       for p in self._meaningful_parentrevs(ctx)]
             return showlist('parent', parents, **args)
 
         def showtags(**args):
-            return showlist('tag', self.repo.nodetags(changenode), **args)
+            return showlist('tag', ctx.tags(), **args)
 
         def showextras(**args):
-            for key, value in util.sort(changes[5].items()):
+            for key, value in util.sort(ctx.extra().items()):
                 args = args.copy()
                 args.update(dict(key=key, value=value))
                 yield self.t('extra', **args)
@@ -806,11 +815,11 @@
         files = []
         def getfiles():
             if not files:
-                files[:] = self.repo.status(
-                    log.parents(changenode)[0], changenode)[:3]
+                files[:] = self.repo.status(ctx.parents()[0].node(),
+                                            ctx.node())[:3]
             return files
         def showfiles(**args):
-            return showlist('file', changes[3], **args)
+            return showlist('file', ctx.files(), **args)
         def showmods(**args):
             return showlist('file_mod', getfiles()[0], **args)
         def showadds(**args):
@@ -819,60 +828,74 @@
             return showlist('file_del', getfiles()[2], **args)
         def showmanifest(**args):
             args = args.copy()
-            args.update(dict(rev=self.repo.manifest.rev(changes[0]),
-                             node=hex(changes[0])))
+            args.update(dict(rev=self.repo.manifest.rev(ctx.changeset()[0]),
+                             node=hex(ctx.changeset()[0])))
             return self.t('manifest', **args)
 
+        def showdiffstat(**args):
+            diff = patch.diff(self.repo, ctx.parents()[0].node(), ctx.node())
+            files, adds, removes = 0, 0, 0
+            for i in patch.diffstatdata(util.iterlines(diff)):
+                files += 1
+                adds += i[1]
+                removes += i[2]
+            return '%s: +%s/-%s' % (files, adds, removes)
+
         defprops = {
-            'author': changes[1],
+            'author': ctx.user(),
             'branches': showbranches,
-            'date': changes[2],
-            'desc': changes[4].strip(),
+            'date': ctx.date(),
+            'desc': ctx.description().strip(),
             'file_adds': showadds,
             'file_dels': showdels,
             'file_mods': showmods,
             'files': showfiles,
             'file_copies': showcopies,
             'manifest': showmanifest,
-            'node': hex(changenode),
+            'node': ctx.hex(),
             'parents': showparents,
-            'rev': rev,
+            'rev': ctx.rev(),
             'tags': showtags,
             'extras': showextras,
+            'diffstat': showdiffstat,
             }
         props = props.copy()
         props.update(defprops)
 
+        # find correct templates for current mode
+
+        tmplmodes = [
+            (True, None),
+            (self.ui.verbose, 'verbose'),
+            (self.ui.quiet, 'quiet'),
+            (self.ui.debugflag, 'debug'),
+        ]
+
+        types = {'header': '', 'changeset': 'changeset'}
+        for mode, postfix  in tmplmodes:
+            for type in types:
+                cur = postfix and ('%s_%s' % (type, postfix)) or type
+                if mode and cur in self.t:
+                    types[type] = cur
+
         try:
-            if self.ui.debugflag and 'header_debug' in self.t:
-                key = 'header_debug'
-            elif self.ui.quiet and 'header_quiet' in self.t:
-                key = 'header_quiet'
-            elif self.ui.verbose and 'header_verbose' in self.t:
-                key = 'header_verbose'
-            elif 'header' in self.t:
-                key = 'header'
-            else:
-                key = ''
-            if key:
-                h = templater.stringify(self.t(key, **props))
+
+            # write header
+            if types['header']:
+                h = templater.stringify(self.t(types['header'], **props))
                 if self.buffered:
-                    self.header[rev] = h
+                    self.header[ctx.rev()] = h
                 else:
                     self.ui.write(h)
-            if self.ui.debugflag and 'changeset_debug' in self.t:
-                key = 'changeset_debug'
-            elif self.ui.quiet and 'changeset_quiet' in self.t:
-                key = 'changeset_quiet'
-            elif self.ui.verbose and 'changeset_verbose' in self.t:
-                key = 'changeset_verbose'
-            else:
-                key = 'changeset'
+
+            # write changeset metadata, then patch if requested
+            key = types['changeset']
             self.ui.write(templater.stringify(self.t(key, **props)))
-            self.showpatch(changenode)
+            self.showpatch(ctx.node())
+
         except KeyError, inst:
-            raise util.Abort(_("%s: no key named '%s'") % (self.t.mapfile,
-                                                           inst.args[0]))
+            msg = _("%s: no key named '%s'")
+            raise util.Abort(msg % (self.t.mapfile, inst.args[0]))
         except SyntaxError, inst:
             raise util.Abort(_('%s: %s') % (self.t.mapfile, inst.args[0]))
 
@@ -893,32 +916,37 @@
         patch = matchfn or matchall(repo)
 
     tmpl = opts.get('template')
-    mapfile = None
+    style = None
     if tmpl:
         tmpl = templater.parsestring(tmpl, quoted=False)
     else:
-        mapfile = opts.get('style')
-        # ui settings
-        if not mapfile:
-            tmpl = ui.config('ui', 'logtemplate')
-            if tmpl:
-                tmpl = templater.parsestring(tmpl)
-            else:
-                mapfile = ui.config('ui', 'style')
+        style = opts.get('style')
+
+    # ui settings
+    if not (tmpl or style):
+        tmpl = ui.config('ui', 'logtemplate')
+        if tmpl:
+            tmpl = templater.parsestring(tmpl)
+        else:
+            style = ui.config('ui', 'style')
+
+    if not (tmpl or style):
+        return changeset_printer(ui, repo, patch, opts, buffered)
 
-    if tmpl or mapfile:
-        if mapfile:
-            if not os.path.split(mapfile)[0]:
-                mapname = (templater.templatepath('map-cmdline.' + mapfile)
-                           or templater.templatepath(mapfile))
-                if mapname: mapfile = mapname
-        try:
-            t = changeset_templater(ui, repo, patch, opts, mapfile, buffered)
-        except SyntaxError, inst:
-            raise util.Abort(inst.args[0])
-        if tmpl: t.use_template(tmpl)
-        return t
-    return changeset_printer(ui, repo, patch, opts, buffered)
+    mapfile = None
+    if style and not tmpl:
+        mapfile = style
+        if not os.path.split(mapfile)[0]:
+            mapname = (templater.templatepath('map-cmdline.' + mapfile)
+                       or templater.templatepath(mapfile))
+            if mapname: mapfile = mapname
+
+    try:
+        t = changeset_templater(ui, repo, patch, opts, mapfile, buffered)
+    except SyntaxError, inst:
+        raise util.Abort(inst.args[0])
+    if tmpl: t.use_template(tmpl)
+    return t
 
 def finddate(ui, repo, date):
     """Find the tipmost changeset that matches the given date spec"""
@@ -989,13 +1017,13 @@
     else:
         defrange = '-1:0'
     revs = revrange(repo, opts['rev'] or [defrange])
-    wanted = {}
+    wanted = set()
     slowpath = m.anypats() or (m.files() and opts.get('removed'))
     fncache = {}
 
     if not slowpath and not m.files():
         # No files, no patterns.  Display all revs.
-        wanted = dict.fromkeys(revs)
+        wanted = set(revs)
     copies = []
     if not slowpath:
         # Only files, no patterns.  Check the history of each file.
@@ -1043,7 +1071,7 @@
                         break
                     fncache.setdefault(rev, [])
                     fncache[rev].append(file_)
-                    wanted[rev] = 1
+                    wanted.add(rev)
                     if follow and copied:
                         copies.append(copied)
     if slowpath:
@@ -1061,7 +1089,7 @@
             matches = filter(m, changefiles)
             if matches:
                 fncache[rev] = matches
-                wanted[rev] = 1
+                wanted.add(rev)
 
     class followfilter:
         def __init__(self, onlyfirst=False):
@@ -1107,16 +1135,14 @@
         ff = followfilter()
         stop = min(revs[0], revs[-1])
         for x in xrange(rev, stop-1, -1):
-            if ff.match(x) and x in wanted:
-                del wanted[x]
+            if ff.match(x):
+                wanted.discard(x)
 
     def iterate():
         if follow and not m.files():
             ff = followfilter(onlyfirst=opts.get('follow_first'))
             def want(rev):
-                if ff.match(rev) and rev in wanted:
-                    return True
-                return False
+                return ff.match(rev) and rev in wanted
         else:
             def want(rev):
                 return rev in wanted
--- a/mercurial/commands.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/commands.py	Sun Apr 26 11:49:17 2009 +0200
@@ -6,10 +6,11 @@
 # of the GNU General Public License, incorporated herein by reference.
 
 from node import hex, nullid, nullrev, short
+from lock import release
 from i18n import _, gettext
-import os, re, sys
+import os, re, sys, textwrap
 import hg, util, revlog, bundlerepo, extensions, copies, context, error
-import difflib, patch, time, help, mdiff, tempfile, url
+import difflib, patch, time, help, mdiff, tempfile, url, encoding
 import archival, changegroup, cmdutil, hgweb.server, sshserver, hbisect
 import merge as merge_
 
@@ -18,7 +19,8 @@
 def add(ui, repo, *pats, **opts):
     """add the specified files on the next commit
 
-    Schedule files to be version controlled and added to the repository.
+    Schedule files to be version controlled and added to the
+    repository.
 
     The files will be added to the repository at the next commit. To
     undo an add before that, see hg revert.
@@ -48,16 +50,19 @@
 def addremove(ui, repo, *pats, **opts):
     """add all new files, delete all missing files
 
-    Add all new files and remove all missing files from the repository.
-
-    New files are ignored if they match any of the patterns in .hgignore. As
-    with add, these changes take effect at the next commit.
-
-    Use the -s option to detect renamed files. With a parameter > 0,
-    this compares every removed file with every added file and records
-    those similar enough as renames. This option takes a percentage
-    between 0 (disabled) and 100 (files must be identical) as its
-    parameter. Detecting renamed files this way can be expensive.
+    Add all new files and remove all missing files from the
+    repository.
+
+    New files are ignored if they match any of the patterns in
+    .hgignore. As with add, these changes take effect at the next
+    commit.
+
+    Use the -s/--similarity option to detect renamed files. With a
+    parameter > 0, this compares every removed file with every added
+    file and records those similar enough as renames. This option
+    takes a percentage between 0 (disabled) and 100 (files must be
+    identical) as its parameter. Detecting renamed files this way can
+    be expensive.
     """
     try:
         sim = float(opts.get('similarity') or 0)
@@ -70,14 +75,15 @@
 def annotate(ui, repo, *pats, **opts):
     """show changeset information per file line
 
-    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.
-
-    Without the -a option, annotate will avoid processing files it
-    detects as binary. With -a, annotate will generate an annotation
-    anyway, probably with undesirable results.
+    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.
+
+    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.
     """
     datefunc = ui.quiet and util.shortdate or util.datestr
     getdate = util.cachefunc(lambda x: datefunc(x[0].date()))
@@ -132,9 +138,9 @@
     '''create unversioned archive of a repository revision
 
     By default, the revision used is the parent of the working
-    directory; use "-r" to specify a different revision.
-
-    To specify the type of archive to create, use "-t". Valid
+    directory; use -r/--rev to specify a different revision.
+
+    To specify the type of archive to create, use -t/--type. Valid
     types are:
 
     "files" (default): a directory full of files
@@ -145,11 +151,12 @@
     "zip": zip archive, compressed using deflate
 
     The exact name of the destination archive or directory is given
-    using a format string; see "hg help export" for details.
+    using a format string; see 'hg help export' for details.
 
     Each member added to an archive file has a directory prefix
-    prepended. Use "-p" to specify a format string for the prefix.
-    The default is the basename of the archive, with suffixes removed.
+    prepended. Use -p/--prefix to specify a format string for the
+    prefix. The default is the basename of the archive, with suffixes
+    removed.
     '''
 
     ctx = repo[opts.get('rev')]
@@ -183,9 +190,8 @@
 
     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.
+    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.
     '''
@@ -262,35 +268,41 @@
                reset=None, good=None, bad=None, skip=None, noupdate=None):
     """subdivision search of changesets
 
-    This command helps to find changesets which introduce problems.
-    To use, mark the earliest changeset you know exhibits the problem
-    as 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 --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
+    This command helps to find changesets which introduce problems. To
+    use, mark the earliest changeset you know exhibits the problem as
+    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
     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 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.
     """
     def print_result(nodes, good):
         displayer = cmdutil.show_changeset(ui, repo, {})
-        transition = (good and "good" or "bad")
         if len(nodes) == 1:
             # narrowed it down to a single revision
-            ui.write(_("The first %s revision is:\n") % transition)
+            if good:
+                ui.write(_("The first good revision is:\n"))
+            else:
+                ui.write(_("The first bad revision is:\n"))
             displayer.show(repo[nodes[0]])
         else:
             # multiple possible revisions
-            ui.write(_("Due to skipped revisions, the first "
-                       "%s revision could be any of:\n") % transition)
+            if good:
+                ui.write(_("Due to skipped revisions, the first "
+                        "good revision could be any of:\n"))
+            else:
+                ui.write(_("Due to skipped revisions, the first "
+                        "bad revision could be any of:\n"))
             for n in nodes:
                 displayer.show(repo[n])
 
@@ -393,14 +405,16 @@
     """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).
-
-    Unless --force is specified, branch will not let you set a
+    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.
+
+    Unless -f/--force is specified, branch will not let you set a
     branch name that shadows an existing branch.
 
-    Use --clean to reset the working directory branch to that of the
-    parent of the working directory, negating a previous branch change.
+    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.
     """
@@ -414,10 +428,10 @@
             if label not in [p.branch() for p in repo.parents()]:
                 raise util.Abort(_('a branch of the same name already exists'
                                    ' (use --force to override)'))
-        repo.dirstate.setbranch(util.fromlocal(label))
+        repo.dirstate.setbranch(encoding.fromlocal(label))
         ui.status(_('marked working directory as branch %s\n') % label)
     else:
-        ui.write("%s\n" % util.tolocal(repo.dirstate.branch()))
+        ui.write("%s\n" % encoding.tolocal(repo.dirstate.branch()))
 
 def branches(ui, repo, active=False):
     """list repository named branches
@@ -430,7 +444,7 @@
     Use the command 'hg update' to switch to an existing branch.
     """
     hexfunc = ui.debugflag and hex or short
-    activebranches = [util.tolocal(repo[n].branch())
+    activebranches = [encoding.tolocal(repo[n].branch())
                             for n in repo.heads(closed=False)]
     branches = util.sort([(tag in activebranches, repo.changelog.rev(node), tag)
                           for tag, node in repo.branchtags().items()])
@@ -448,7 +462,7 @@
                     notice = ' (closed)'
                 else:
                     notice = ' (inactive)'
-                rev = str(node).rjust(31 - util.colwidth(tag))
+                rev = str(node).rjust(31 - encoding.colwidth(tag))
                 data = tag, rev, hexfunc(hn), notice
                 ui.write("%s %s:%s%s\n" % data)
 
@@ -461,13 +475,14 @@
     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
-    --all (or --base null). To change the compression method applied,
-    use the -t option (by default, bundles are compressed using bz2).
-
-    The bundle file can then be transferred using conventional means and
-    applied to another repository with the unbundle or pull command.
-    This is useful when direct push and pull are not available or when
-    exporting an entire repository is undesirable.
+    -a/--all (or --base null). To change the compression method
+    applied, use the -t/--type option (by default, bundles are
+    compressed using bz2).
+
+    The bundle file can then be transferred using conventional means
+    and applied to another repository with the unbundle or pull
+    command. This is useful when direct push and pull are not
+    available or when exporting an entire repository is undesirable.
 
     Applying bundles preserves all changeset contents including
     permissions, copy/rename information, and revision history.
@@ -528,8 +543,8 @@
 def cat(ui, repo, file1, *pats, **opts):
     """output the current or given revision of files
 
-    Print the specified files as they were at the given revision.
-    If no revision is given, the parent of the working directory is used,
+    Print the specified files as they were at the given revision. If
+    no revision is given, the parent of the working directory is used,
     or tip if no revision is checked out.
 
     Output may be to a file, in which case the name of the file is
@@ -537,7 +552,7 @@
     for the export command, with the following additions:
 
     %s   basename of file being printed
-    %d   dirname of file being printed, or '.' if in repo root
+    %d   dirname of file being printed, or '.' if in repository root
     %p   root-relative path name of file being printed
     """
     ctx = repo[opts.get('rev')]
@@ -563,6 +578,23 @@
     The location of the source is added to the new repository's
     .hg/hgrc file, as the default to be used for future pulls.
 
+    If you use the -r/--rev option to clone up to a specific revision,
+    no subsequent revisions (including subsequent tags) will be
+    present in the cloned repository. This option implies --pull, even
+    on local repositories.
+
+    By default, clone will check out the head of the 'default' branch.
+    If the -U/--noupdate option is used, the new clone will contain
+    only a repository (.hg) and no working copy (the working copy
+    parent is the null revision).
+
+    See 'hg help urls' for valid source format details.
+
+    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.
+
     For efficiency, hardlinks are used for cloning whenever the source
     and destination are on the same filesystem (note this applies only
     to the repository data, not to the checked out files). Some
@@ -575,25 +607,13 @@
 
       $ cp -al REPO REPOCLONE
 
-    This is the fastest way to clone, but it is not always safe.  The
+    This is the fastest way to clone, but it is not always safe. The
     operation is not atomic (making sure REPO is not modified during
     the operation is up to you) and you have to make sure your editor
-    breaks hardlinks (Emacs and most Linux Kernel tools do so).  Also,
+    breaks hardlinks (Emacs and most Linux Kernel tools do so). Also,
     this is not compatible with certain extensions that place their
     metadata under the .hg directory, such as mq.
 
-    If you use the -r option to clone up to a specific revision, no
-    subsequent revisions will be present in the cloned repository.
-    This option implies --pull, even on local repositories.
-
-    If the -U option is used, the new clone will contain only a repository
-    (.hg) and no working copy (the working copy parent is the null revision).
-
-    See 'hg help urls' for valid source format details.
-
-    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.
     """
     cmdutil.setremoteconfig(ui, opts)
     hg.clone(ui, source, dest,
@@ -605,7 +625,9 @@
 def commit(ui, repo, *pats, **opts):
     """commit the specified files or all outstanding changes
 
-    Commit changes to the given files into the repository.
+    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.
 
     If a list of files is omitted, all changes reported by "hg status"
     will be committed.
@@ -613,8 +635,8 @@
     If you are committing the result of a merge, do not provide any
     file names or -I/-X filters.
 
-    If no commit message is specified, the configured editor is started to
-    prompt you for a message.
+    If no commit message is specified, the configured editor is
+    started to prompt you for a message.
 
     See 'hg help dates' for a list of formats valid for -d/--date.
     """
@@ -653,7 +675,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 --after, the
+    stand 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
@@ -663,7 +685,7 @@
     try:
         return cmdutil.copy(ui, repo, pats, opts)
     finally:
-        del wlock
+        wlock.release()
 
 def debugancestor(ui, repo, *args):
     """find the ancestor revision of two revisions in a given index"""
@@ -683,6 +705,12 @@
     a = r.ancestor(lookup(rev1), lookup(rev2))
     ui.write("%d:%s\n" % (r.rev(a), hex(a)))
 
+def debugcommands(ui, cmd='', *args):
+    for cmd, vals in util.sort(table.iteritems()):
+        cmd = cmd.split('|')[0].strip('^')
+        opts = ', '.join([i[1] for i in vals[1]])
+        ui.write('%s: %s\n' % (cmd, opts))
+
 def debugcomplete(ui, cmd='', **opts):
     """returns the completion list associated with the given command"""
 
@@ -720,7 +748,7 @@
     try:
         repo.dirstate.rebuild(ctx.node(), ctx.manifest())
     finally:
-        del wlock
+        wlock.release()
 
 def debugcheckstate(ui, repo):
     """validate the correctness of the current dirstate"""
@@ -789,7 +817,7 @@
     try:
         repo.dirstate.setparents(repo.lookup(rev1), repo.lookup(rev2))
     finally:
-        del wlock
+        wlock.release()
 
 def debugstate(ui, repo, nodates=None):
     """show the contents of the current dirstate"""
@@ -872,9 +900,9 @@
     problems = 0
 
     # encoding
-    ui.status(_("Checking encoding (%s)...\n") % util._encoding)
+    ui.status(_("Checking encoding (%s)...\n") % encoding.encoding)
     try:
-        util.fromlocal("test")
+        encoding.fromlocal("test")
     except util.Abort, inst:
         ui.write(" %s\n" % inst)
         ui.write(_(" (check that your locale is properly set)\n"))
@@ -894,7 +922,7 @@
     ui.status(_("Checking templates...\n"))
     try:
         import templater
-        t = templater.templater(templater.templatepath("map-cmdline.default"))
+        templater.templater(templater.templatepath("map-cmdline.default"))
     except Exception, inst:
         ui.write(" %s\n" % inst)
         ui.write(_(" (templates seem to have been installed incorrectly)\n"))
@@ -1015,12 +1043,12 @@
     revisions are specified, the working directory files are compared
     to its parent.
 
-    Without the -a option, diff will avoid generating diffs of files
-    it detects as binary. With -a, diff will generate a diff anyway,
-    probably with undesirable results.
-
-    Use the --git option to generate diffs in the git extended diff
-    format. For more information, read hg help diffs.
+    Without the -a/--text option, diff will avoid generating diffs of
+    files it detects as binary. With -a, diff will generate a diff
+    anyway, probably with undesirable results.
+
+    Use the -g/--git option to generate diffs in the git extended diff
+    format. For more information, read 'hg help diffs'.
     """
 
     revs = opts.get('rev')
@@ -1048,8 +1076,9 @@
     The information shown in the changeset header is: author,
     changeset hash, parent(s) and commit comment.
 
-    NOTE: export may generate unexpected diff output for merge changesets,
-    as it will compare the merge changeset against its first parent only.
+    NOTE: export may generate unexpected diff output for merge
+    changesets, as it will compare the merge changeset against its
+    first parent only.
 
     Output may be to a file, in which case the name of the file is
     given using a format string. The formatting rules are as follows:
@@ -1063,15 +1092,15 @@
     %n   zero-padded sequence number, starting at 1
     %r   zero-padded changeset revision number
 
-    Without the -a option, export will avoid generating diffs of files
-    it detects as binary. With -a, export will generate a diff anyway,
-    probably with undesirable results.
-
-    Use the --git option to generate diffs in the git extended diff
+    Without the -a/--text option, export will avoid generating diffs
+    of files it detects as binary. With -a, export will generate a
+    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.
 
-    With the --switch-parent option, the diff will be against the second
-    parent. It can be useful to review a merge.
+    With the --switch-parent option, the diff will be against the
+    second parent. It can be useful to review a merge.
     """
     if not changesets:
         raise util.Abort(_("export requires at least one changeset"))
@@ -1091,8 +1120,8 @@
 
     This command behaves differently than Unix grep. It only accepts
     Python/Perl regexps. It searches repository history, not the
-    working directory. It always prints the revision number in which
-    a match appears.
+    working directory. It always prints the revision number in which a
+    match appears.
 
     By default, grep only prints output for the first revision of a
     file in which it finds a match. To get it to print every revision
@@ -1277,7 +1306,7 @@
         heads = repo.heads(start, closed=closed)
     else:
         heads = []
-        visitedset = util.set()
+        visitedset = set()
         for branchrev in branchrevs:
             branch = repo[branchrev].branch()
             if branch in visitedset:
@@ -1304,7 +1333,8 @@
 
     With no arguments, print a list of commands and short help.
 
-    Given a topic, extension, or command name, print help for that topic."""
+    Given a topic, extension, or command name, print help for that
+    topic."""
     option_lists = []
 
     def addglobalopts(aliases):
@@ -1405,7 +1435,7 @@
             maxlength = 0
             exthelps = []
             for ename, ext in exts:
-                doc = (ext.__doc__ or _('(no help text available)'))
+                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()))
@@ -1450,8 +1480,8 @@
         except AttributeError:
             ct = {}
 
-        modcmds = dict.fromkeys([c.split('|', 1)[0] for c in ct])
-        helplist(_('list of commands:\n\n'), modcmds.has_key)
+        modcmds = set([c.split('|', 1)[0] for c in ct])
+        helplist(_('list of commands:\n\n'), modcmds.__contains__)
 
     if name and name != 'shortlist':
         i = None
@@ -1509,7 +1539,11 @@
         opts_len = max([len(line[0]) for line in opt_output if line[1]] or [0])
         for first, second in opt_output:
             if second:
-                ui.write(" %-*s  %s\n" % (opts_len, first, 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)))
             else:
                 ui.write("%s\n" % first)
 
@@ -1517,14 +1551,15 @@
              rev=None, num=None, id=None, branch=None, tags=None):
     """identify the working copy or specified revision
 
-    With no revision, print a summary of the current state of the repo.
+    With no revision, print a summary of the current state of the
+    repository.
 
     With a path, do a lookup in another repository.
 
-    This summary identifies the repository state using one or two parent
-    hash identifiers, followed by a "+" if there are uncommitted changes
-    in the working directory, a list of tags for this revision and a branch
-    name for non-default branches.
+    This summary identifies the repository state using one or two
+    parent hash identifiers, followed by a "+" if there are
+    uncommitted changes in the working directory, a list of tags for
+    this revision and a branch name for non-default branches.
     """
 
     if not repo and not source:
@@ -1569,7 +1604,7 @@
             output.append(str(ctx.rev()))
 
     if repo.local() and default and not ui.quiet:
-        b = util.tolocal(ctx.branch())
+        b = encoding.tolocal(ctx.branch())
         if b != 'default':
             output.append("(%s)" % b)
 
@@ -1579,7 +1614,7 @@
             output.append(t)
 
     if branch:
-        output.append(util.tolocal(ctx.branch()))
+        output.append(encoding.tolocal(ctx.branch()))
 
     if tags:
         output.extend(ctx.tags())
@@ -1592,7 +1627,7 @@
     Import a list of patches and commit them individually.
 
     If there are outstanding changes in the working directory, import
-    will abort unless given the -f flag.
+    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
@@ -1601,21 +1636,22 @@
     text/plain body parts before first diff are added to commit
     message.
 
-    If the imported patch was generated by hg export, user and description
-    from patch override values from message headers and body. Values
-    given on command line with -m and -u override these.
-
-    If --exact is specified, import will set the working directory
-    to the parent of each patch before applying it, and will abort
-    if the resulting changeset has a different ID than the one
-    recorded in the patch. This may happen due to character set
-    problems or other deficiencies in the text patch format.
-
-    With --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.
+    If the imported patch was generated by hg export, user and
+    description from patch override values from message headers and
+    body. Values given on command line with -m/--message and -u/--user
+    override these.
+
+    If --exact is specified, import will set the working directory to
+    the parent of each patch before applying it, and will abort if the
+    resulting changeset has a different ID than the one recorded in
+    the patch. This may happen due to character set problems or other
+    deficiencies in the text patch format.
+
+    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.
     """
     patches = (patch1,) + patches
 
@@ -1690,8 +1726,8 @@
 
                 files = {}
                 try:
-                    fuzz = patch.patch(tmpname, ui, strip=strip, cwd=repo.root,
-                                       files=files)
+                    patch.patch(tmpname, ui, strip=strip, cwd=repo.root,
+                                files=files)
                 finally:
                     files = patch.updatedir(ui, repo, files, similarity=sim/100.)
                 if not opts.get('no_commit'):
@@ -1708,17 +1744,17 @@
             finally:
                 os.unlink(tmpname)
     finally:
-        del lock, wlock
+        release(lock, wlock)
 
 def incoming(ui, repo, source="default", **opts):
     """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.
-
-    For remote repository, using --bundle avoids downloading the changesets
-    twice if the incoming is followed by a pull.
+    pull location. These are the changesets that would be pulled if a
+    pull was requested.
+
+    For remote repository, using --bundle avoids downloading the
+    changesets twice if the incoming is followed by a pull.
 
     See pull for valid source format details.
     """
@@ -1809,9 +1845,9 @@
     names.
 
     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.
+    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.
     """
     end = opts.get('print0') and '\0' or '\n'
     rev = opts.get('rev') or None
@@ -1853,7 +1889,7 @@
     commit. When the -v/--verbose switch is used, the list of changed
     files and full commit message is shown.
 
-    NOTE: log -p may generate unexpected diff output for merge
+    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.
@@ -1942,12 +1978,7 @@
 
             if opts['user']:
                 changes = get(rev)
-                miss = 0
-                for k in opts['user']:
-                    if k != changes[1]:
-                        miss = 1
-                        break
-                if miss:
+                if not [k for k in opts['user'] if k in changes[1]]:
                     continue
 
             copies = []
@@ -1969,8 +2000,8 @@
     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.
+    With -v flag, print file permissions, symlink and executable bits.
+    With --debug flag, print file revision hashes.
     """
 
     if rev and node:
@@ -1991,15 +2022,18 @@
 def merge(ui, repo, node=None, force=None, rev=None):
     """merge working directory with another revision
 
-    Merge the contents of the current working directory and the
-    requested 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 contents of 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.
 
     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.
+    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.
     """
 
     if rev and node:
@@ -2035,9 +2069,9 @@
 def outgoing(ui, repo, dest=None, **opts):
     """show changesets not found in destination
 
-    Show changesets not found in the specified destination repository or
-    the default push location. These are the changesets that would be pushed
-    if a push was requested.
+    Show changesets not found in the specified destination repository
+    or the default push location. These are the changesets that would
+    be pushed if a push was requested.
 
     See pull for valid destination format details.
     """
@@ -2069,13 +2103,13 @@
         displayer.show(repo[n])
 
 def parents(ui, repo, file_=None, **opts):
-    """show the parents of the working dir or revision
-
-    Print the working directory's parent revisions. If a
-    revision is given via --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.
+    """show the parents of the working directory or revision
+
+    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.
     """
     rev = opts.get('rev')
     if rev:
@@ -2111,8 +2145,8 @@
 def paths(ui, repo, search=None):
     """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 symbolic path name NAME. If no name is given,
+    show definition of 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.
@@ -2146,12 +2180,15 @@
 def pull(ui, repo, source="default", **opts):
     """pull changes from the specified source
 
-    Pull changes from a remote repository to a local one.
+    Pull changes from a remote repository to the 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.
+
     If SOURCE is omitted, the 'default' path will be used.
     See 'hg help urls' for more information.
     """
@@ -2176,20 +2213,20 @@
 
     Push changes from the local repository to the given destination.
 
-    This is the symmetrical operation for pull. It helps to move
-    changes from the current repository to a different one. If the
-    destination is local this is identical to a pull in that directory
-    from the current one.
+    This is the symmetrical operation for pull. It moves changes from
+    the current repository to a different one. If the destination is
+    local this is identical to a pull in that directory from the
+    current one.
 
     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.
 
-    If -r is used, the named changeset and all its ancestors will be pushed
-    to the remote repository.
-
-    Look at the help text for urls for important details about ssh:// URLs.
-    If DESTINATION is omitted, a default path will be used.
+    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://
+    URLs. If DESTINATION is omitted, a default path will be used.
     See 'hg help urls' for more information.
     """
     dest, revs, checkout = hg.parseurl(
@@ -2236,8 +2273,9 @@
 
     Recover from an interrupted commit or pull.
 
-    This command tries to fix the repository status after an interrupted
-    operation. It should only be necessary when Mercurial suggests it.
+    This command tries to fix the repository status after an
+    interrupted operation. It should only be necessary when Mercurial
+    suggests it.
     """
     if repo.recover():
         return hg.verify(repo)
@@ -2248,15 +2286,17 @@
 
     Schedule the indicated files for removal from the repository.
 
-    This only removes files from the current branch, not from the entire
-    project history. -A can be used to remove only files that have already
-    been deleted, -f can be used to force deletion, and -Af can be used
-    to remove files from the next revision without deleting them.
-
-    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).
+    This only removes files from the current branch, not from the
+    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.
+
+    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).
 
            A  C  M  !
     none   W  RD W  R
@@ -2301,12 +2341,12 @@
 def rename(ui, repo, *pats, **opts):
     """rename files; equivalent of copy + remove
 
-    Mark dest as copies of sources; mark sources for deletion. If
-    dest is a directory, copies are put in that directory. If dest is
-    a file, there can only be one source.
+    Mark dest as copies of sources; mark sources for deletion. If dest
+    is a directory, copies are put in that directory. If dest is a
+    file, there can only be one source.
 
     By default, this command copies the contents of files as they
-    exist in the working directory. If invoked with --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 at the next commit. To undo a rename
@@ -2316,17 +2356,22 @@
     try:
         return cmdutil.copy(ui, repo, pats, opts, rename=True)
     finally:
-        del wlock
+        wlock.release()
 
 def resolve(ui, repo, *pats, **opts):
     """retry file merges from a merge or update
 
     This command will cleanly retry unresolved file merges using file
     revisions preserved from the last update or merge. To attempt to
-    resolve all unresolved files, use the -a switch.
+    resolve all unresolved files, use the -a/--all switch.
+
+    If a conflict is resolved manually, please note that the changes
+    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.
+    marking and unmarking files as resolved. All files must be marked
+    as resolved before the new commits are permitted.
 
     The codes used to show the status of files are:
     U = unresolved
@@ -2369,10 +2414,10 @@
                 util.rename(a + ".resolve", a + ".orig")
 
 def revert(ui, repo, *pats, **opts):
-    """restore individual files or dirs to an earlier state
+    """restore individual files or directories to an earlier state
 
     (use update -r to check out earlier revisions, revert does not
-    change the working dir parents)
+    change the working directory parents)
 
     With no revision specified, revert the named files or directories
     to the contents they had in the parent of the working directory.
@@ -2381,10 +2426,10 @@
     working directory has two parents, you must explicitly specify the
     revision to revert to.
 
-    Using the -r option, revert the given files or directories to their
-    contents as of a specific revision. This can be helpful to "roll
-    back" some or all of an earlier change.
-    See 'hg help dates' for a list of formats valid for -d/--date.
+    Using the -r/--rev option, revert the given files or directories
+    to their contents as of a specific revision. This can be helpful
+    to "roll back" some or all of an earlier change. See 'hg help
+    dates' for a list of formats valid for -d/--date.
 
     Revert modifies the working directory. It does not commit any
     changes, or change the parent of the working directory. If you
@@ -2392,8 +2437,8 @@
     directory, the reverted files will thus appear modified
     afterwards.
 
-    If a file has been deleted, it is restored. If the executable
-    mode of a file was changed, it is reset.
+    If a file has been deleted, it is restored. If the executable mode
+    of a file was changed, it is reset.
 
     If names are given, all files matching the names are reverted.
     If no arguments are given, no files are reverted.
@@ -2432,7 +2477,6 @@
     wlock = repo.wlock()
     try:
         # walk dirstate.
-        files = []
 
         m = cmdutil.match(repo, pats, opts)
         m.bad = lambda x,y: False
@@ -2459,14 +2503,14 @@
 
         m = cmdutil.matchfiles(repo, names)
         changes = repo.status(match=m)[:4]
-        modified, added, removed, deleted = map(dict.fromkeys, changes)
+        modified, added, removed, deleted = map(set, changes)
 
         # if f is a rename, also revert the source
         cwd = repo.getcwd()
         for f in added:
             src = repo.dirstate.copied(f)
             if src and src not in names and repo.dirstate[src] == 'r':
-                removed[src] = None
+                removed.add(src)
                 names[src] = (repo.pathto(src, cwd), True)
 
         def removeforget(abs):
@@ -2584,7 +2628,7 @@
                 normal(f)
 
     finally:
-        del wlock
+        wlock.release()
 
 def rollback(ui, repo):
     """roll back the last transaction
@@ -2615,7 +2659,7 @@
     repo.rollback()
 
 def root(ui, repo):
-    """print the root (top) of the current working dir
+    """print the root (top) of the current working directory
 
     Print the root directory of the current repository.
     """
@@ -2627,7 +2671,7 @@
     Start a local HTTP repository browser and pull server.
 
     By default, the server logs accesses to stdout and errors to
-    stderr. Use the "-A" and "-E" options to log to files.
+    stderr. Use the -A and -E options to log to files.
     """
 
     if opts["stdio"]:
@@ -2690,12 +2734,13 @@
 
     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 is given. Unless options described
-    with "show only ..." are given, the options -mardu are used.
+    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.
 
     Option -q/--quiet hides untracked (unknown and ignored) files
-    unless explicitly requested with -u/--unknown or -i/-ignored.
+    unless explicitly requested with -u/--unknown or -i/--ignored.
 
     NOTE: status may appear to disagree with diff if permissions have
     changed or a merge has occurred. The standard diff format does not
@@ -2710,7 +2755,7 @@
     A = added
     R = removed
     C = clean
-    ! = deleted, but still tracked
+    ! = missing (deleted by non-hg command, but still tracked)
     ? = not tracked
     I = ignored
       = the previous added file was copied from here
@@ -2765,8 +2810,8 @@
     very useful to compare different revisions, to go back to significant
     earlier versions or to mark branch points as releases, etc.
 
-    If no revision is given, the parent of the working directory is used,
-    or tip if no revision is checked out.
+    If no revision is given, the parent of the working directory is
+    used, or tip if no revision is checked out.
 
     To facilitate version control, distribution, and merging of tags,
     they are stored as a file named ".hgtags" which is managed
@@ -2779,7 +2824,7 @@
 
     rev_ = "."
     names = (name1,) + names
-    if len(names) != len(dict.fromkeys(names)):
+    if len(names) != len(set(names)):
         raise util.Abort(_('tag names must be unique'))
     for n in names:
         if n in ['tip', '.', 'null']:
@@ -2795,8 +2840,10 @@
             if not repo.tagtype(n):
                 raise util.Abort(_('tag \'%s\' does not exist') % n)
             if repo.tagtype(n) != expectedtype:
-                raise util.Abort(_('tag \'%s\' is not a %s tag') %
-                                 (n, expectedtype))
+                if expectedtype == 'global':
+                    raise util.Abort(_('tag \'%s\' is not a global tag') % n)
+                else:
+                    raise util.Abort(_('tag \'%s\' is not a local tag') % n)
         rev_ = nullid
         if not message:
             message = _('Removed tag %s') % ', '.join(names)
@@ -2823,8 +2870,8 @@
 def tags(ui, repo):
     """list repository tags
 
-    This lists both regular and local tags. When the -v/--verbose switch
-    is used, a third column "local" is printed for local tags.
+    This lists both regular and local tags. When the -v/--verbose
+    switch is used, a third column "local" is printed for local tags.
     """
 
     l = repo.tagslist()
@@ -2843,7 +2890,7 @@
         except error.LookupError:
             r = "    ?:%s" % hn
         else:
-            spaces = " " * (30 - util.colwidth(t))
+            spaces = " " * (30 - encoding.colwidth(t))
             if ui.verbose:
                 if repo.tagtype(t) == 'local':
                     tagtype = " local"
@@ -2873,44 +2920,46 @@
     """
     fnames = (fname1,) + fnames
 
-    lock = None
+    lock = repo.lock()
     try:
-        lock = repo.lock()
         for fname in fnames:
             f = url.open(ui, fname)
             gen = changegroup.readbundle(f, fname)
             modheads = repo.addchangegroup(gen, 'unbundle', 'bundle:' + fname)
     finally:
-        del lock
+        lock.release()
 
     return postincoming(ui, repo, modheads, opts.get('update'), None)
 
 def update(ui, repo, node=None, rev=None, clean=False, date=None):
     """update working directory
 
-    Update the repository's working directory to the specified revision,
-    or the tip of the current branch if none is specified. Use null as
-    the revision to remove the working copy (like 'hg clone -U').
-
-    When the working dir contains no uncommitted changes, it will be
-    replaced by the state of the requested revision from the repo.  When
-    the requested revision is on a different branch, the working dir
-    will additionally be switched to that branch.
+    Update the repository's working directory to the specified
+    revision, or the tip of the current branch if none is specified.
+    Use null as the revision to remove the working copy (like 'hg
+    clone -U').
+
+    When the working directory contains no uncommitted changes, it
+    will be replaced by the state of the requested revision from the
+    repository. When the requested revision is on a different branch,
+    the working directory will additionally be switched to that
+    branch.
 
     When there are uncommitted changes, use option -C to discard them,
-    forcibly replacing the state of the working dir with the requested
-    revision.
+    forcibly replacing the state of the working directory with the
+    requested revision.
 
     When there are uncommitted changes and option -C is not used, and
     the parent revision and requested revision are on the same branch,
     and one of them is an ancestor of the other, then the new working
     directory will contain the requested revision merged with the
-    uncommitted changes.  Otherwise, the update will fail with a
+    uncommitted changes. Otherwise, the update will fail with a
     suggestion to use 'merge' or 'update -C' instead.
 
-    If you want to update just one file to an older revision, use revert.
-
-    See 'hg help dates' for a list of formats valid for --date.
+    If you want to update just one file to an older revision, use
+    revert.
+
+    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"))
@@ -2964,9 +3013,9 @@
     ('', 'config', [], _('set/override config option')),
     ('', 'debug', None, _('enable debugging output')),
     ('', 'debugger', None, _('start debugger')),
-    ('', 'encoding', util._encoding, _('set the charset encoding')),
-    ('', 'encodingmode', util._encodingmode, _('set the charset encoding mode')),
-    ('', 'lsprof', None, _('print improved command execution profile')),
+    ('', 'encoding', encoding.encoding, _('set the charset encoding')),
+    ('', 'encodingmode', encoding.encodingmode,
+     _('set the charset encoding mode')),
     ('', 'traceback', None, _('print traceback on exception')),
     ('', 'time', None, _('time how long the command takes')),
     ('', 'profile', None, _('print command execution profile')),
@@ -3132,6 +3181,7 @@
          _('[OPTION]... [SOURCE]... DEST')),
     "debugancestor": (debugancestor, [], _('[INDEX] REV1 REV2')),
     "debugcheckstate": (debugcheckstate, []),
+    "debugcommands": (debugcommands, [], _('[COMMAND]')),
     "debugcomplete":
         (debugcomplete,
          [('o', 'options', None, _('show the command options'))],
@@ -3186,7 +3236,7 @@
            _('follow changeset history, or file history across copies and renames')),
           ('i', 'ignore-case', None, _('ignore case when matching')),
           ('l', 'files-with-matches', None,
-           _('print only filenames and revs that match')),
+           _('print only filenames and revisions that match')),
           ('n', 'line-number', None, _('print matching line numbers')),
           ('r', 'rev', [], _('search in given revision range')),
           ('u', 'user', None, _('list the author (long with -v)')),
@@ -3195,7 +3245,7 @@
          _('[OPTION]... PATTERN [FILE]...')),
     "heads":
         (heads,
-         [('r', 'rev', '', _('show only heads which are descendants of rev')),
+         [('r', 'rev', '', _('show only heads which are descendants of REV')),
           ('a', 'active', False,
            _('show only the active heads from open branches')),
          ] + templateopts,
@@ -3203,7 +3253,7 @@
     "help": (help_, [], _('[TOPIC]')),
     "identify|id":
         (identify,
-         [('r', 'rev', '', _('identify the specified rev')),
+         [('r', 'rev', '', _('identify the specified revision')),
           ('n', 'num', None, _('show local revision number')),
           ('i', 'id', None, _('show global revision id')),
           ('b', 'branch', None, _('show branch')),
@@ -3212,7 +3262,7 @@
     "import|patch":
         (import_,
          [('p', 'strip', 1,
-           _('directory strip option for patch. This has the same\n'
+           _('directory strip option for patch. This has the same '
              'meaning as the corresponding patch option')),
           ('b', 'base', '', _('base path')),
           ('f', 'force', None,
@@ -3221,7 +3271,7 @@
           ('', 'exact', None,
            _('apply patch to the nodes from which it was generated')),
           ('', 'import-branch', None,
-           _('Use any branch information in patch (implied by --exact)'))] +
+           _('use any branch information in patch (implied by --exact)'))] +
          commitopts + commitopts2 + similarityopts,
          _('[OPTION]... PATCH...')),
     "incoming|in":
@@ -3241,7 +3291,7 @@
          _('[-e CMD] [--remotecmd CMD] [DEST]')),
     "locate":
         (locate,
-         [('r', 'rev', '', _('search the repository as it stood at rev')),
+         [('r', 'rev', '', _('search the repository as it stood at REV')),
           ('0', 'print0', None,
            _('end filenames with NUL, for use with xargs')),
           ('f', 'fullpath', None,
@@ -3254,13 +3304,13 @@
            _('follow changeset history, or file history across copies and renames')),
           ('', 'follow-first', None,
            _('only follow the first parent of merge changesets')),
-          ('d', 'date', '', _('show revs matching date spec')),
+          ('d', 'date', '', _('show revisions matching date spec')),
           ('C', 'copies', None, _('show copied files')),
           ('k', 'keyword', [], _('do case-insensitive search for a keyword')),
           ('r', 'rev', [], _('show the specified revision or range')),
-          ('', 'removed', None, _('include revs where files were removed')),
+          ('', 'removed', None, _('include revisions where files were removed')),
           ('m', 'only-merges', None, _('show only merges')),
-          ('u', 'user', [], _('revs committed by user')),
+          ('u', 'user', [], _('revisions committed by user')),
           ('b', 'only-branch', [],
             _('show only changesets within the given named branch')),
           ('P', 'prune', [], _('do not display revision or any of its ancestors')),
@@ -3287,7 +3337,7 @@
          _('[-M] [-p] [-n] [-f] [-r REV]... [DEST]')),
     "^parents":
         (parents,
-         [('r', 'rev', '', _('show parents from the specified rev')),
+         [('r', 'rev', '', _('show parents from the specified revision')),
          ] + templateopts,
          _('hg parents [-r REV] [FILE]')),
     "paths": (paths, [], _('[NAME]')),
@@ -3351,9 +3401,9 @@
           ('a', 'address', '', _('address to listen on (default: all interfaces)')),
           ('', 'prefix', '', _('prefix path to serve from (default: server root)')),
           ('n', 'name', '',
-           _('name to show in web pages (default: working dir)')),
+           _('name to show in web pages (default: working directory)')),
           ('', 'webdir-conf', '', _('name of the webdir config file'
-                                    ' (serve more than one repo)')),
+                                    ' (serve more than one repository)')),
           ('', 'pid-file', '', _('name of file to write process ID to')),
           ('', 'stdio', None, _('for remote clients')),
           ('t', 'templates', '', _('web templates to use')),
@@ -3414,6 +3464,6 @@
     "version": (version_, []),
 }
 
-norepo = ("clone init version help debugcomplete debugdata"
+norepo = ("clone init version help debugcommands debugcomplete debugdata"
           " debugindex debugindexdot debugdate debuginstall debugfsinfo")
 optionalrepo = ("identify paths serve showconfig debugancestor")
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/config.py	Sun Apr 26 11:49:17 2009 +0200
@@ -0,0 +1,93 @@
+from i18n import _
+import re, error
+
+class sortdict(dict):
+    'a simple append-only sorted dictionary'
+    def __init__(self, data=None):
+        self._list = []
+        if data:
+            if hasattr(data, '_list'):
+                self._list = list(data._list)
+            self.update(data)
+    def copy(self):
+        return sortdict(self)
+    def __setitem__(self, key, val):
+        if key in self:
+            self._list.remove(key)
+        self._list.append(key)
+        dict.__setitem__(self, key, val)
+    def __iter__(self):
+        return self._list.__iter__()
+    def update(self, src):
+        for k in src:
+            self[k] = src[k]
+    def items(self):
+        return [(k,self[k]) for k in self._list]
+
+class config:
+    def __init__(self, data=None):
+        self._data = {}
+        if data:
+            for k in data._data:
+                self._data[k] = data[k].copy()
+    def copy(self):
+        return config(self)
+    def __contains__(self, section):
+        return section in self._data
+    def update(self, src, sections=None):
+        if not sections:
+            sections = src.sections()
+        for s in sections:
+            if s not in src:
+                continue
+            if s not in self:
+                self._data[s] = sortdict()
+            for k in src._data[s]:
+                self._data[s][k] = src._data[s][k]
+    def get(self, section, item, default=None):
+        return self._data.get(section, {}).get(item, (default, ""))[0]
+    def getsource(self, section, item):
+        return self._data.get(section, {}).get(item, (None, ""))[1]
+    def sections(self):
+        return sorted(self._data.keys())
+    def items(self, section):
+        return [(k, v[0]) for k,v in self._data.get(section, {}).items()]
+    def set(self, section, item, value, source=""):
+        if section not in self:
+            self._data[section] = sortdict()
+        self._data[section][item] = (value, source)
+
+    def read(self, path, fp):
+        sectionre = re.compile(r'\[([^\[]+)\]')
+        itemre = re.compile(r'([^=\s]+)\s*=\s*(.*)')
+        contre = re.compile(r'\s+(\S.*)')
+        emptyre = re.compile(r'(;|#|\s*$)')
+        section = ""
+        item = None
+        line = 0
+        cont = 0
+        for l in fp:
+            line += 1
+            if cont:
+                m = contre.match(l)
+                if m:
+                    v = self.get(section, item) + "\n" + m.group(1)
+                    self.set(section, item, v, "%s:%d" % (path, line))
+                    continue
+                item = None
+            if emptyre.match(l):
+                continue
+            m = sectionre.match(l)
+            if m:
+                section = m.group(1)
+                if section not in self:
+                    self._data[section] = sortdict()
+                continue
+            m = itemre.match(l)
+            if m:
+                item = m.group(1)
+                self.set(section, item, m.group(2), "%s:%d" % (path, line))
+                cont = 1
+                continue
+            raise error.ConfigError(_('config error at %s:%d: \'%s\'')
+                                    % (path, line, l.rstrip()))
--- a/mercurial/context.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/context.py	Sun Apr 26 11:49:17 2009 +0200
@@ -60,24 +60,24 @@
     def __nonzero__(self):
         return self._rev != nullrev
 
+    @propertycache
     def _changeset(self):
         return self._repo.changelog.read(self.node())
-    _changeset = propertycache(_changeset)
 
+    @propertycache
     def _manifest(self):
         return self._repo.manifest.read(self._changeset[0])
-    _manifest = propertycache(_manifest)
 
+    @propertycache
     def _manifestdelta(self):
         return self._repo.manifest.readdelta(self._changeset[0])
-    _manifestdelta = propertycache(_manifestdelta)
 
+    @propertycache
     def _parents(self):
         p = self._repo.changelog.parentrevs(self._rev)
         if p[1] == nullrev:
             p = p[:-1]
         return [changectx(self._repo, x) for x in p]
-    _parents = propertycache(_parents)
 
     def __contains__(self, key):
         return key in self._manifest
@@ -201,39 +201,39 @@
         if fileid is not None:
             self._fileid = fileid
 
+    @propertycache
     def _changectx(self):
         return changectx(self._repo, self._changeid)
-    _changectx = propertycache(_changectx)
 
+    @propertycache
     def _filelog(self):
         return self._repo.file(self._path)
-    _filelog = propertycache(_filelog)
 
+    @propertycache
     def _changeid(self):
         if '_changectx' in self.__dict__:
             return self._changectx.rev()
         else:
             return self._filelog.linkrev(self._filerev)
-    _changeid = propertycache(_changeid)
 
+    @propertycache
     def _filenode(self):
         if '_fileid' in self.__dict__:
             return self._filelog.lookup(self._fileid)
         else:
             return self._changectx.filenode(self._path)
-    _filenode = propertycache(_filenode)
 
+    @propertycache
     def _filerev(self):
         return self._filelog.rev(self._filenode)
-    _filerev = propertycache(_filerev)
 
+    @propertycache
     def _repopath(self):
         return self._path
-    _repopath = propertycache(_repopath)
 
     def __nonzero__(self):
         try:
-            n = self._filenode
+            self._filenode
             return True
         except error.LookupError:
             # file is missing
@@ -515,6 +515,7 @@
     def __contains__(self, key):
         return self._repo.dirstate[key] not in "?r"
 
+    @propertycache
     def _manifest(self):
         """generate a manifest corresponding to the working directory"""
 
@@ -536,27 +537,26 @@
                 del man[f]
 
         return man
-    _manifest = propertycache(_manifest)
 
+    @propertycache
     def _status(self):
         return self._repo.status(unknown=True)
-    _status = propertycache(_status)
 
+    @propertycache
     def _user(self):
         return self._repo.ui.username()
-    _user = propertycache(_user)
 
+    @propertycache
     def _date(self):
         return util.makedate()
-    _date = propertycache(_date)
 
+    @propertycache
     def _parents(self):
         p = self._repo.dirstate.parents()
         if p[1] == nullid:
             p = p[:-1]
         self._parents = [changectx(self._repo, x) for x in p]
         return self._parents
-    _parents = propertycache(_parents)
 
     def manifest(self): return self._manifest
 
@@ -631,17 +631,17 @@
         if workingctx:
             self._changectx = workingctx
 
+    @propertycache
     def _changectx(self):
         return workingctx(self._repo)
-    _changectx = propertycache(_changectx)
 
+    @propertycache
     def _repopath(self):
         return self._repo.dirstate.copied(self._path) or self._path
-    _repopath = propertycache(_repopath)
 
+    @propertycache
     def _filelog(self):
         return self._repo.file(self._repopath)
-    _filelog = propertycache(_filelog)
 
     def __nonzero__(self):
         return True
@@ -734,7 +734,7 @@
         parents = [(p or nullid) for p in parents]
         p1, p2 = parents
         self._parents = [changectx(self._repo, p) for p in (p1, p2)]
-        files = util.sort(util.unique(files))
+        files = util.sort(set(files))
         self._status = [files, [], [], [], []]
         self._filectxfn = filectxfn
 
--- a/mercurial/copies.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/copies.py	Sun Apr 26 11:49:17 2009 +0200
@@ -5,7 +5,6 @@
 # This software may be used and distributed according to the terms
 # of the GNU General Public License, incorporated herein by reference.
 
-from node import nullid, nullrev
 from i18n import _
 import util, heapq
 
@@ -161,12 +160,12 @@
     for f in u2:
         checkcopies(f, m2, m1)
 
-    diverge2 = {}
+    diverge2 = set()
     for of, fl in diverge.items():
         if len(fl) == 1:
             del diverge[of] # not actually divergent
         else:
-            diverge2.update(dict.fromkeys(fl)) # reverse map for below
+            diverge2.update(fl) # reverse map for below
 
     if fullcopy:
         repo.ui.debug(_("  all copies found (* = to merge, ! = divergent):\n"))
--- a/mercurial/dirstate.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/dirstate.py	Sun Apr 26 11:49:17 2009 +0200
@@ -454,7 +454,7 @@
         work = []
         wadd = work.append
 
-        files = util.unique(match.files())
+        files = set(match.files())
         if not files or '.' in files:
             files = ['']
         results = {'.hg': None}
--- a/mercurial/dispatch.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/dispatch.py	Sun Apr 26 11:49:17 2009 +0200
@@ -7,8 +7,8 @@
 
 from i18n import _
 import os, sys, atexit, signal, pdb, socket, errno, shlex, time
-import util, commands, hg, lock, fancyopts, extensions, hook, error
-import cmdutil
+import util, commands, hg, fancyopts, extensions, hook, error
+import cmdutil, encoding
 import ui as _ui
 
 def run():
@@ -18,7 +18,9 @@
 def dispatch(args):
     "run the command specified in args"
     try:
-        u = _ui.ui(traceback='--traceback' in args)
+        u = _ui.ui()
+        if '--traceback' in args:
+            u.setconfig('ui', 'traceback', 'on')
     except util.Abort, inst:
         sys.stderr.write(_("abort: %s\n") % inst)
         return -1
@@ -53,6 +55,8 @@
     except error.AmbiguousCommand, inst:
         ui.warn(_("hg: command '%s' is ambiguous:\n    %s\n") %
                 (inst.args[0], " ".join(inst.args[1])))
+    except error.ConfigError, inst:
+        ui.warn(_("hg: %s\n") % inst.args[0])
     except error.LockHeld, inst:
         if inst.errno == errno.ETIMEDOUT:
             reason = _('timed out waiting for lock held by %s') % inst.locker
@@ -196,19 +200,17 @@
 
     return (cmd, cmd and i[0] or None, args, options, cmdoptions)
 
-def _parseconfig(config):
+def _parseconfig(ui, config):
     """parse the --config options from the command line"""
-    parsed = []
     for cfg in config:
         try:
             name, value = cfg.split('=', 1)
             section, name = name.split('.', 1)
             if not section or not name:
                 raise IndexError
-            parsed.append((section, name, value))
+            ui.setconfig(section, name, value)
         except (IndexError, ValueError):
             raise util.Abort(_('malformed --config option: %s') % cfg)
-    return parsed
 
 def _earlygetopt(aliases, args):
     """Return list of values for an option (or aliases).
@@ -254,9 +256,7 @@
 def _dispatch(ui, args):
     # read --config before doing anything else
     # (e.g. to change trust settings for reading .hg/hgrc)
-    config = _earlygetopt(['--config'], args)
-    if config:
-        ui.updateopts(config=_parseconfig(config))
+    _parseconfig(ui, _earlygetopt(['--config'], args))
 
     # check for cwd
     cwd = _earlygetopt(['--cwd'], args)
@@ -304,7 +304,7 @@
     # check for fallback encoding
     fallback = lui.config('ui', 'fallbackencoding')
     if fallback:
-        util._fallbackencoding = fallback
+        encoding.fallbackencoding = fallback
 
     fullargs = args
     cmd, func, args, options, cmdoptions = _parse(lui, args)
@@ -319,9 +319,9 @@
             "and --repository may only be abbreviated as --repo!"))
 
     if options["encoding"]:
-        util._encoding = options["encoding"]
+        encoding.encoding = options["encoding"]
     if options["encodingmode"]:
-        util._encodingmode = options["encodingmode"]
+        encoding.encodingmode = options["encodingmode"]
     if options["time"]:
         def get_times():
             t = os.times()
@@ -335,8 +335,14 @@
                 (t[4]-s[4], t[0]-s[0], t[2]-s[2], t[1]-s[1], t[3]-s[3]))
         atexit.register(print_time)
 
-    ui.updateopts(options["verbose"], options["debug"], options["quiet"],
-                 not options["noninteractive"], options["traceback"])
+    if options['verbose'] or options['debug'] or options['quiet']:
+        ui.setconfig('ui', 'verbose', str(bool(options['verbose'])))
+        ui.setconfig('ui', 'debug', str(bool(options['debug'])))
+        ui.setconfig('ui', 'quiet', str(bool(options['quiet'])))
+    if options['traceback']:
+        ui.setconfig('ui', 'traceback', 'on')
+    if options['noninteractive']:
+        ui.setconfig('ui', 'interactive', 'off')
 
     if options['help']:
         return commands.help_(ui, cmd, options['version'])
@@ -379,25 +385,22 @@
             raise error.ParseError(cmd, _("invalid arguments"))
 
     if options['profile']:
-        import hotshot, hotshot.stats
-        prof = hotshot.Profile("hg.prof")
-        try:
-            try:
-                return prof.runcall(checkargs)
-            except:
-                try:
-                    ui.warn(_('exception raised - generating '
-                             'profile anyway\n'))
-                except:
-                    pass
-                raise
-        finally:
-            prof.close()
-            stats = hotshot.stats.load("hg.prof")
-            stats.strip_dirs()
-            stats.sort_stats('time', 'calls')
-            stats.print_stats(40)
-    elif options['lsprof']:
+        format = ui.config('profiling', 'format', default='text')
+
+        if not format in ['text', 'kcachegrind']:
+            ui.warn(_("unrecognized profiling format '%s'"
+                        " - Ignored\n") % format)
+            format = 'text'
+
+        output = ui.config('profiling', 'output')
+
+        if output:
+            path = os.path.expanduser(output)
+            path = ui.expandpath(path)
+            ostream = open(path, 'wb')
+        else:
+            ostream = sys.stderr
+
         try:
             from mercurial import lsprof
         except ImportError:
@@ -410,8 +413,18 @@
             return checkargs()
         finally:
             p.disable()
-            stats = lsprof.Stats(p.getstats())
-            stats.sort()
-            stats.pprint(top=10, file=sys.stderr, climit=5)
+
+            if format == 'kcachegrind':
+                import lsprofcalltree
+                calltree = lsprofcalltree.KCacheGrind(p)
+                calltree.output(ostream)
+            else:
+                # format == 'text'
+                stats = lsprof.Stats(p.getstats())
+                stats.sort()
+                stats.pprint(top=10, file=ostream, climit=5)
+
+            if output:
+                ostream.close()
     else:
         return checkargs()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/encoding.py	Sun Apr 26 11:49:17 2009 +0200
@@ -0,0 +1,77 @@
+"""
+encoding.py - character transcoding support for Mercurial
+
+ Copyright 2005-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 sys, unicodedata, locale, os, error
+
+_encodingfixup = {'646': 'ascii', 'ANSI_X3.4-1968': 'ascii'}
+
+try:
+    encoding = os.environ.get("HGENCODING")
+    if sys.platform == 'darwin' and not encoding:
+        # On darwin, getpreferredencoding ignores the locale environment and
+        # always returns mac-roman. We override this if the environment is
+        # not C (has been customized by the user).
+        locale.setlocale(locale.LC_CTYPE, '')
+        encoding = locale.getlocale()[1]
+    if not encoding:
+        encoding = locale.getpreferredencoding() or 'ascii'
+        encoding = _encodingfixup.get(encoding, encoding)
+except locale.Error:
+    encoding = 'ascii'
+encodingmode = os.environ.get("HGENCODINGMODE", "strict")
+fallbackencoding = 'ISO-8859-1'
+
+def tolocal(s):
+    """
+    Convert a string from internal UTF-8 to local encoding
+
+    All internal strings should be UTF-8 but some repos before the
+    implementation of locale support may contain latin1 or possibly
+    other character sets. We attempt to decode everything strictly
+    using UTF-8, then Latin-1, and failing that, we use UTF-8 and
+    replace unknown characters.
+    """
+    for e in ('UTF-8', fallbackencoding):
+        try:
+            u = s.decode(e) # attempt strict decoding
+            return u.encode(encoding, "replace")
+        except LookupError, k:
+            raise error.Abort("%s, please check your locale settings" % k)
+        except UnicodeDecodeError:
+            pass
+    u = s.decode("utf-8", "replace") # last ditch
+    return u.encode(encoding, "replace")
+
+def fromlocal(s):
+    """
+    Convert a string from the local character encoding to UTF-8
+
+    We attempt to decode strings using the encoding mode set by
+    HGENCODINGMODE, which defaults to 'strict'. In this mode, unknown
+    characters will cause an error message. Other modes include
+    'replace', which replaces unknown characters with a special
+    Unicode character, and 'ignore', which drops the character.
+    """
+    try:
+        return s.decode(encoding, encodingmode).encode("utf-8")
+    except UnicodeDecodeError, inst:
+        sub = s[max(0, inst.start-10):inst.start+10]
+        raise error.Abort("decoding near '%s': %s!" % (sub, inst))
+    except LookupError, k:
+        raise error.Abort("%s, please check your locale settings" % k)
+
+def colwidth(s):
+    "Find the column width of a UTF-8 string for display"
+    d = s.decode(encoding, 'replace')
+    if hasattr(unicodedata, 'east_asian_width'):
+        w = unicodedata.east_asian_width
+        return sum([w(c) in 'WF' and 2 or 1 for c in d])
+    return len(d)
+
--- a/mercurial/error.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/error.py	Sun Apr 26 11:49:17 2009 +0200
@@ -28,6 +28,9 @@
 class ParseError(Exception):
     """Exception raised on errors in parsing the command line."""
 
+class ConfigError(Exception):
+    'Exception raised when parsing config files'
+
 class RepoError(Exception):
     pass
 
@@ -62,3 +65,6 @@
 
 class SignatureError(Exception):
     pass
+
+class Abort(Exception):
+    """Raised if a command needs to print an error and exit."""
--- a/mercurial/extensions.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/extensions.py	Sun Apr 26 11:49:17 2009 +0200
@@ -28,6 +28,17 @@
                 return v
         raise KeyError(name)
 
+def loadpath(path, module_name):
+    module_name = module_name.replace('.', '_')
+    path = os.path.expanduser(path)
+    if os.path.isdir(path):
+        # module/__init__.py style
+        d, f = os.path.split(path.rstrip('/'))
+        fd, fpath, desc = imp.find_module(f, [d])
+        return imp.load_module(module_name, fd, fpath, desc)
+    else:
+        return imp.load_source(module_name, path)
+
 def load(ui, name, path):
     if name.startswith('hgext.') or name.startswith('hgext/'):
         shortname = name[6:]
@@ -40,14 +51,7 @@
         # the module will be loaded in sys.modules
         # choose an unique name so that it doesn't
         # conflicts with other modules
-        module_name = "hgext_%s" % name.replace('.', '_')
-        if os.path.isdir(path):
-            # module/__init__.py style
-            d, f = os.path.split(path)
-            fd, fpath, desc = imp.find_module(f, [d])
-            mod = imp.load_module(module_name, fd, fpath, desc)
-        else:
-            mod = imp.load_source(module_name, path)
+        mod = loadpath(path, 'hgext.%s' % name)
     else:
         def importh(name):
             mod = __import__(name)
@@ -68,11 +72,10 @@
 
 def loadall(ui):
     result = ui.configitems("extensions")
-    for i, (name, path) in enumerate(result):
+    for (name, path) in result:
         if path:
             if path[0] == '!':
                 continue
-            path = os.path.expanduser(path)
         try:
             load(ui, name, path)
         except KeyboardInterrupt:
--- a/mercurial/filemerge.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/filemerge.py	Sun Apr 26 11:49:17 2009 +0200
@@ -5,7 +5,7 @@
 # This software may be used and distributed according to the terms
 # of the GNU General Public License, incorporated herein by reference.
 
-from node import nullrev, short
+from node import short
 from i18n import _
 import util, os, tempfile, simplemerge, re, filecmp
 
--- a/mercurial/graphmod.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/graphmod.py	Sun Apr 26 11:49:17 2009 +0200
@@ -6,8 +6,7 @@
 # This software may be used and distributed according to the terms of
 # the GNU General Public License, incorporated herein by reference.
 
-from node import nullrev, short
-import ui, hg, util, templatefilters
+from node import nullrev
 
 def graph(repo, start_rev, stop_rev):
     """incremental revision grapher
--- a/mercurial/hbisect.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/hbisect.py	Sun Apr 26 11:49:17 2009 +0200
@@ -24,7 +24,7 @@
     """
 
     clparents = changelog.parentrevs
-    skip = dict.fromkeys([changelog.rev(n) for n in state['skip']])
+    skip = set([changelog.rev(n) for n in state['skip']])
 
     def buildancestors(bad, good):
         # only the earliest bad revision matters
@@ -78,7 +78,7 @@
     unskipped = [c for c in candidates if (c not in skip) and (c != badrev)]
     if tot == 1 or not unskipped:
         return ([changelog.node(rev) for rev in candidates], 0, good)
-    perfect = tot / 2
+    perfect = tot // 2
 
     # find the best node to test
     best_rev = None
@@ -109,7 +109,7 @@
 
         for c in children.get(rev, []):
             if ancestors[c]:
-                ancestors[c] = dict.fromkeys(ancestors[c] + a).keys()
+                ancestors[c] = list(set(ancestors[c] + a))
             else:
                 ancestors[c] = a + [c]
 
@@ -140,5 +140,5 @@
                 f.write("%s %s\n" % (kind, hex(node)))
         f.rename()
     finally:
-        del wlock
+        wlock.release()
 
--- a/mercurial/help.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/help.py	Sun Apr 26 11:49:17 2009 +0200
@@ -35,9 +35,9 @@
     "1165432709 0" (Wed Dec 6 13:18:29 2006 UTC)
 
     This is the internal representation format for dates. unixtime is
-    the number of seconds since the epoch (1970-01-01 00:00 UTC). offset
-    is the offset of the local timezone, in seconds west of UTC (negative
-    if the timezone is east of UTC).
+    the number of seconds since the epoch (1970-01-01 00:00 UTC).
+    offset is the offset of the local timezone, in seconds west of UTC
+    (negative if the timezone is east of UTC).
 
     The log command also accepts date ranges:
 
@@ -96,10 +96,10 @@
     (['environment', 'env'], _('Environment Variables'),
      _(r'''
 HG::
-    Path to the 'hg' executable, automatically passed when running hooks,
-    extensions or external tools. If unset or empty, this is the hg
-    executable's name if it's frozen, or an executable named 'hg'
-    (with %PATHEXT% [defaulting to COM/EXE/BAT/CMD] extensions on
+    Path to the 'hg' executable, automatically passed when running
+    hooks, extensions or external tools. If unset or empty, this is
+    the hg executable's name if it's frozen, or an executable named
+    'hg' (with %PATHEXT% [defaulting to COM/EXE/BAT/CMD] extensions on
     Windows) is searched.
 
 HGEDITOR::
@@ -135,8 +135,8 @@
     from the current repository is read.
 
     For each element in HGRCPATH:
-    * if it's a directory, all directories ending with .rc are added
-    * otherwise, the directory itself will be added
+    * if it's a directory, all files ending with .rc are added
+    * otherwise, the file itself will be added
 
 HGUSER::
     This is the string used as the author of a commit. If not set,
@@ -160,28 +160,27 @@
     This is the name of the editor to use when committing. See EDITOR.
 
 EDITOR::
-    Sometimes Mercurial needs to open a text file in an editor
-    for a user to modify, for example when writing commit messages.
-    The editor it uses is determined by looking at the environment
+    Sometimes Mercurial needs to open a text file in an editor for a
+    user to modify, for example when writing commit messages. The
+    editor it uses is determined by looking at the environment
     variables HGEDITOR, VISUAL and EDITOR, in that order. The first
     non-empty one is chosen. If all of them are empty, the editor
     defaults to 'vi'.
 
 PYTHONPATH::
-    This is used by Python to find imported modules and may need to be set
-    appropriately if this Mercurial is not installed system-wide.
+    This is used by Python to find imported modules and may need to be
+    set appropriately if this Mercurial is not installed system-wide.
     ''')),
 
     (['revs', 'revisions'], _('Specifying Single Revisions'),
      _(r'''
-    Mercurial supports several ways to specify individual
-    revisions.
+    Mercurial supports several ways to specify individual revisions.
 
-    A plain integer is treated as a revision number. Negative
-    integers are treated as toplogical offsets from the tip, with
-    -1 denoting the tip. As such, negative numbers are only useful
-    if you've memorized your local tree numbers and want to save
-    typing a single digit. This editor suggests copy and paste.
+    A plain integer is treated as a revision number. Negative integers
+    are treated as topological offsets from the tip, with -1 denoting
+    the tip. As such, negative numbers are only useful if you've
+    memorized your local tree numbers and want to save typing a single
+    digit. This editor suggests copy and paste.
 
     A 40-digit hexadecimal string is treated as a unique revision
     identifier.
@@ -202,9 +201,9 @@
     revision of an empty repository, and the parent of revision 0.
 
     The reserved name "." indicates the working directory parent. If
-    no working directory is checked out, it is equivalent to null.
-    If an uncommitted merge is in progress, "." is the revision of
-    the first parent.
+    no working directory is checked out, it is equivalent to null. If
+    an uncommitted merge is in progress, "." is the revision of the
+    first parent.
     ''')),
 
     (['mrevs', 'multirevs'], _('Specifying Multiple Revisions'),
@@ -216,8 +215,8 @@
     The syntax of range notation is [BEGIN]:[END], where BEGIN and END
     are revision identifiers. Both BEGIN and END are optional. If
     BEGIN is not specified, it defaults to revision number 0. If END
-    is not specified, it defaults to the tip. The range ":" thus
-    means "all revisions".
+    is not specified, it defaults to the tip. The range ":" thus means
+    "all revisions".
 
     If BEGIN is greater than END, revisions are treated in reverse
     order.
@@ -228,9 +227,10 @@
 
     (['diffs'], _('Diff Formats'),
      _(r'''
-    Mercurial's default format for showing changes between two versions
-    of a file is compatible with the unified format of GNU diff, which
-    can be used by GNU patch and many other standard tools.
+    Mercurial's default format for showing changes between two
+    versions of a file is compatible with the unified format of GNU
+    diff, which can be used by GNU patch and many other standard
+    tools.
 
     While this standard format is often enough, it does not encode the
     following information:
@@ -248,59 +248,66 @@
     This means that when generating diffs from a Mercurial repository
     (e.g. with "hg export"), you should be careful about things like
     file copies and renames or other things mentioned above, because
-    when applying a standard diff to a different repository, this extra
-    information is lost. Mercurial's internal operations (like push and
-    pull) are not affected by this, because they use an internal binary
-    format for communicating changes.
+    when applying a standard diff to a different repository, this
+    extra information is lost. Mercurial's internal operations (like
+    push and pull) are not affected by this, because they use an
+    internal binary format for communicating changes.
 
     To make Mercurial produce the git extended diff format, use the
-    --git option available for many commands, or set 'git = True' in the
-    [diff] section of your hgrc. You do not need to set this option when
-    importing diffs in this format or using them in the mq extension.
+    --git option available for many commands, or set 'git = True' in
+    the [diff] section of your hgrc. You do not need to set this
+    option when importing diffs in this format or using them in the mq
+    extension.
     ''')),
     (['templating'], _('Template Usage'),
      _(r'''
     Mercurial allows you to customize output of commands through
-    templates. You can either pass in a template from the command line,
-    via the --template option, or select an existing template-style (--style).
+    templates. You can either pass in a template from the command
+    line, via the --template option, or select an existing
+    template-style (--style).
 
-    You can customize output for any "log-like" command: log, outgoing,
-    incoming, tip, parents, heads and glog.
+    You can customize output for any "log-like" command: log,
+    outgoing, incoming, tip, parents, heads and glog.
 
     Three styles are packaged with Mercurial: default (the style used
-    when no explicit preference is passed), compact and changelog. Usage:
+    when no explicit preference is passed), compact and changelog.
+    Usage:
 
         $ hg log -r1 --style changelog
 
-    A template is a piece of text, with markup to invoke variable expansion:
+    A template is a piece of text, with markup to invoke variable
+    expansion:
 
         $ hg log -r1 --template "{node}\n"
         b56ce7b07c52de7d5fd79fb89701ea538af65746
 
     Strings in curly braces are called keywords. The availability of
-    keywords depends on the exact context of the templater. These keywords
-    are usually available for templating a log-like command:
+    keywords depends on the exact context of the templater. These
+    keywords are usually available for templating a log-like command:
 
     - author: String. The unmodified author of the changeset.
     - branches: String. The name of the branch on which the changeset
           was committed. Will be empty if the branch name was default.
     - date: Date information. The date when the changeset was committed.
     - desc: String. The text of the changeset description.
+    - diffstat: String. Statistics of changes with the following
+          format: "modified files: +added/-removed lines"
     - files: List of strings. All files modified, added, or removed by
           this changeset.
     - file_adds: List of strings. Files added by this changeset.
     - file_mods: List of strings. Files modified by this changeset.
     - file_dels: List of strings. Files removed by this changeset.
-    - node: String. The changeset identification hash, as a 40-character
-          hexadecimal string.
+    - node: String. The changeset identification hash, as a
+          40-character hexadecimal string.
     - parents: List of strings. The parents of the changeset.
     - rev: Integer. The repository-local changeset revision number.
     - tags: List of strings. Any tags associated with the changeset.
 
     The "date" keyword does not produce human-readable output. If you
-    want to use a date in your output, you can use a filter to process it.
-    Filters are functions which return a string based on the input variable.
-    You can also use a chain of filters to get the desired output:
+    want to use a date in your output, you can use a filter to process
+    it. Filters are functions which return a string based on the input
+    variable. You can also use a chain of filters to get the desired
+    output:
 
        $ hg tip --template "{date|isodate}\n"
        2008-08-21 18:22 +0000
@@ -315,13 +322,15 @@
           last component of the path after splitting by the path
           separator (ignoring trailing seprators). For example,
           "foo/bar/baz" becomes "baz" and "foo/bar//" becomes "bar".
+    - stripdir: Treat the text as path and strip a directory level, if
+          possible. For example, "foo" and "foo/bar" becomes "foo".
     - date: Date. Returns a date in a Unix date format, including
           the timezone: "Mon Sep 04 15:13:13 2006 0700".
-    - domain: Any text. Finds the first string that looks like an email
-          address, and extracts just the domain component.
+    - domain: Any text. Finds the first string that looks like an
+          email address, and extracts just the domain component.
           Example: 'User <user@example.com>' becomes 'example.com'.
-    - email: Any text. Extracts the first string that looks like an email
-          address. Example: 'User <user@example.com>' becomes
+    - email: Any text. Extracts the first string that looks like an
+          email address. Example: 'User <user@example.com>' becomes
           'user@example.com'.
     - escape: Any text. Replaces the special XML/XHTML characters "&",
           "<" and ">" with XML entities.
@@ -331,23 +340,23 @@
     - 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.
-    - obfuscate: Any text. Returns the input text rendered as a sequence
-          of XML entities.
+    - obfuscate: Any text. Returns the input text rendered as a
+          sequence of XML entities.
     - person: Any text. Returns the text before an email address.
     - rfc822date: Date. Returns a date using the same format used
           in email headers.
-    - short: Changeset hash. Returns the short form of a changeset hash,
-          i.e. a 12-byte hexadecimal string.
+    - short: Changeset hash. Returns the short form of a changeset
+          hash, i.e. a 12-byte hexadecimal string.
     - shortdate: Date. Returns a date like "2006-09-18".
     - strip: Any text. Strips all leading and trailing whitespace.
-    - tabindent: Any text. Returns the text, with every line except the
-          first starting with a tab character.
-    - urlescape: Any text. Escapes all "special" characters. For example,
-          "foo bar" becomes "foo%20bar".
+    - tabindent: Any text. Returns the text, with every line except
+          the first starting with a tab character.
+    - urlescape: Any text. Escapes all "special" characters. For
+          example, "foo bar" becomes "foo%20bar".
     - user: Any text. Returns the user portion of an email address.
     ''')),
 
-    (['urls'], _('Url Paths'),
+    (['urls'], _('URL Paths'),
      _(r'''
     Valid URLs are of the form:
 
@@ -364,42 +373,44 @@
     or changeset to use from the remote repository.
 
     Some features, such as pushing to http:// and https:// URLs are
-    only possible if the feature is explicitly enabled on the
-    remote Mercurial server.
+    only possible if the feature is explicitly enabled on the remote
+    Mercurial server.
 
     Some notes about using SSH with Mercurial:
-    - SSH requires an accessible shell account on the destination machine
-      and a copy of hg in the remote path or specified with as remotecmd.
+    - SSH requires an accessible shell account on the destination
+      machine and a copy of hg in the remote path or specified with as
+      remotecmd.
     - path is relative to the remote user's home directory by default.
       Use an extra slash at the start of a path to specify an absolute path:
         ssh://example.com//tmp/repository
-    - Mercurial doesn't use its own compression via SSH; the right thing
-      to do is to configure it in your ~/.ssh/config, e.g.:
+    - Mercurial doesn't use its own compression via SSH; the right
+      thing to do is to configure it in your ~/.ssh/config, e.g.:
         Host *.mylocalnetwork.example.com
           Compression no
         Host *
           Compression yes
-      Alternatively specify "ssh -C" as your ssh command in your hgrc or
-      with the --ssh command line option.
+      Alternatively specify "ssh -C" as your ssh command in your hgrc
+      or with the --ssh command line option.
 
-    These urls can all be stored in your hgrc with path aliases under the
-    [paths] section like so:
+    These URLs can all be stored in your hgrc with path aliases under
+    the [paths] section like so:
     [paths]
     alias1 = URL1
     alias2 = URL2
     ...
 
-    You can then use the alias for any command that uses a url (for example
-    'hg pull alias1' would pull from the 'alias1' path).
+    You can then use the alias for any command that uses a URL (for
+    example 'hg pull alias1' would pull from the 'alias1' path).
 
     Two path aliases are special because they are used as defaults
-    when you do not provide the url to a command:
+    when you do not provide the URL to a command:
 
     default:
-      When you create a repository with hg clone, the clone command saves
-      the location of the source repository as the new repository's
-      'default' path. This is then used when you omit path from push-
-      and pull-like commands (including in and out).
+      When you create a repository with hg clone, the clone command
+      saves the location of the source repository as the new
+      repository's 'default' path. This is then used when you omit
+      path from push- and pull-like commands (including incoming and
+      outgoing).
 
     default-push:
       The push command will look for a path named 'default-push', and
--- a/mercurial/hg.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/hg.py	Sun Apr 26 11:49:17 2009 +0200
@@ -7,6 +7,7 @@
 # of the GNU General Public License, incorporated herein by reference.
 
 from i18n import _
+from lock import release
 import localrepo, bundlerepo, httprepo, sshrepo, statichttprepo
 import errno, lock, os, shutil, util, extensions, error
 import merge as _merge
@@ -131,7 +132,10 @@
     source = localpath(source)
 
     if os.path.exists(dest):
-        raise util.Abort(_("destination '%s' already exists") % dest)
+        if not os.path.isdir(dest):
+            raise util.Abort(_("destination '%s' already exists") % dest)
+        elif os.listdir(dest):
+            raise util.Abort(_("destination '%s' is not empty") % dest)
 
     class DirCleanup(object):
         def __init__(self, dir_):
@@ -139,7 +143,7 @@
             self.dir_ = dir_
         def close(self):
             self.dir_ = None
-        def __del__(self):
+        def cleanup(self):
             if self.dir_:
                 self.rmtree(self.dir_, True)
 
@@ -165,10 +169,14 @@
                 copy = False
 
         if copy:
+            hgdir = os.path.realpath(os.path.join(dest, ".hg"))
             if not os.path.exists(dest):
                 os.mkdir(dest)
+            else:
+                # only clean up directories we create ourselves
+                dir_cleanup.dir_ = hgdir
             try:
-                dest_path = os.path.realpath(os.path.join(dest, ".hg"))
+                dest_path = hgdir
                 os.mkdir(dest_path)
             except OSError, inst:
                 if inst.errno == errno.EEXIST:
@@ -242,7 +250,9 @@
 
         return src_repo, dest_repo
     finally:
-        del src_lock, dest_lock, dir_cleanup
+        release(src_lock, dest_lock)
+        if dir_cleanup is not None:
+            dir_cleanup.cleanup()
 
 def _showstats(repo, stats):
     stats = ((stats[0], _("updated")),
--- a/mercurial/hgweb/common.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/hgweb/common.py	Sun Apr 26 11:49:17 2009 +0200
@@ -78,25 +78,6 @@
         else:
             raise ErrorResponse(HTTP_SERVER_ERROR, err.strerror)
 
-def style_map(templatepath, style):
-    """Return path to mapfile for a given style.
-
-    Searches mapfile in the following locations:
-    1. templatepath/style/map
-    2. templatepath/map-style
-    3. templatepath/map
-    """
-    locations = style and [os.path.join(style, "map"), "map-"+style] or []
-    locations.append("map")
-    if isinstance(templatepath, str):
-        templatepath = [templatepath]
-    for path in templatepath:
-        for location in locations:
-            mapfile = os.path.join(path, location)
-            if os.path.isfile(mapfile):
-                return mapfile
-    raise RuntimeError("No hgweb templates found in %r" % templatepath)
-
 def paritygen(stripecount, offset=0):
     """count parity of horizontal stripes for easier reading"""
     if stripecount and offset:
--- a/mercurial/hgweb/hgweb_mod.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/hgweb/hgweb_mod.py	Sun Apr 26 11:49:17 2009 +0200
@@ -6,11 +6,10 @@
 # This software may be used and distributed according to the terms
 # of the GNU General Public License, incorporated herein by reference.
 
-import os, mimetypes
-from mercurial.node import hex, nullid
-from mercurial import ui, hg, util, hook, error
+import os
+from mercurial import ui, hg, util, hook, error, encoding
 from mercurial import templater, templatefilters
-from common import get_mtime, style_map, ErrorResponse
+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
 from request import wsgirequest
@@ -26,7 +25,9 @@
 class hgweb(object):
     def __init__(self, repo, name=None):
         if isinstance(repo, str):
-            parentui = ui.ui(report_untrusted=False, interactive=False)
+            parentui = ui.ui()
+            parentui.setconfig('ui', 'report_untrusted', 'off')
+            parentui.setconfig('ui', 'interactive', 'off')
             self.repo = hg.repository(parentui, repo)
         else:
             self.repo = repo
@@ -38,9 +39,7 @@
         self.stripecount = 1
         # a repo owner may set web.templates in .hg/hgrc to get any file
         # readable by the user running the CGI script
-        self.templatepath = self.config("web", "templates",
-                                        templater.templatepath(),
-                                        untrusted=False)
+        self.templatepath = self.config('web', 'templates')
 
     # The CGI scripts are often run by a user different from the repo owner.
     # Trust the settings from the .hg/hgrc files by default.
@@ -66,7 +65,7 @@
             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", util._encoding)
+            self.encoding = self.config("web", "encoding", encoding.encoding)
 
     def run(self):
         if not os.environ.get('GATEWAY_INTERFACE', '').startswith("CGI/1."):
@@ -238,7 +237,7 @@
 
         start = req.url[-1] == '?' and '&' or '?'
         sessionvars = webutil.sessionvars(vars, start)
-        mapfile = style_map(self.templatepath, style)
+        mapfile = templater.stylemap(style, self.templatepath)
 
         if not self.reponame:
             self.reponame = (self.config("web", "name")
--- a/mercurial/hgweb/hgwebdir_mod.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/hgweb/hgwebdir_mod.py	Sun Apr 26 11:49:17 2009 +0200
@@ -8,8 +8,8 @@
 
 import os
 from mercurial.i18n import _
-from mercurial import ui, hg, util, templater, templatefilters, error
-from common import ErrorResponse, get_mtime, staticfile, style_map, paritygen,\
+from mercurial import ui, hg, util, templater, templatefilters, 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
 from request import wsgirequest
@@ -21,8 +21,13 @@
             return [(util.pconvert(name).strip('/'), path)
                     for name, path in items]
 
-        self.parentui = parentui or ui.ui(report_untrusted=False,
-                                          interactive = False)
+        if parentui:
+           self.parentui = parentui
+        else:
+            self.parentui = ui.ui()
+            self.parentui.setconfig('ui', 'report_untrusted', 'off')
+            self.parentui.setconfig('ui', 'interactive', 'off')
+
         self.motd = None
         self.style = 'paper'
         self.stripecount = None
@@ -119,7 +124,7 @@
 
                 virtual = req.env.get("PATH_INFO", "").strip('/')
                 tmpl = self.templater(req)
-                ctype = tmpl('mimetype', encoding=util._encoding)
+                ctype = tmpl('mimetype', encoding=encoding.encoding)
                 ctype = templater.stringify(ctype)
 
                 # a static file
@@ -285,7 +290,7 @@
     def templater(self, req):
 
         def header(**map):
-            yield tmpl('header', encoding=util._encoding, **map)
+            yield tmpl('header', encoding=encoding.encoding, **map)
 
         def footer(**map):
             yield tmpl("footer", **map)
@@ -317,7 +322,7 @@
             style = req.form['style'][0]
         if self.stripecount is None:
             self.stripecount = int(config('web', 'stripes', 1))
-        mapfile = style_map(templater.templatepath(), style)
+        mapfile = templater.stylemap(style)
         tmpl = templater.templater(mapfile, templatefilters.filters,
                                    defaults={"header": header,
                                              "footer": footer,
--- a/mercurial/hgweb/protocol.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/hgweb/protocol.py	Sun Apr 26 11:49:17 2009 +0200
@@ -163,7 +163,7 @@
                 req.respond(HTTP_OK, HGTYPE)
                 return '%d\n%s' % (ret, val),
             finally:
-                del lock
+                lock.release()
         except ValueError, inst:
             raise ErrorResponse(HTTP_OK, inst)
         except (OSError, IOError), inst:
--- a/mercurial/hgweb/server.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/hgweb/server.py	Sun Apr 26 11:49:17 2009 +0200
@@ -275,7 +275,7 @@
 
         def __init__(self, *args, **kwargs):
             if self.address_family is None:
-                raise error.RepoError(_('IPv6 not available on this system'))
+                raise error.RepoError(_('IPv6 is not available on this system'))
             super(IPv6HTTPServer, self).__init__(*args, **kwargs)
 
     if ssl_cert:
--- a/mercurial/hgweb/webcommands.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/hgweb/webcommands.py	Sun Apr 26 11:49:17 2009 +0200
@@ -7,9 +7,9 @@
 
 import os, mimetypes, re, cgi, copy
 import webutil
-from mercurial import error, archival, templatefilters
-from mercurial.node import short, hex, nullid
-from mercurial.util import binary, datestr
+from mercurial import error, archival, templater, templatefilters
+from mercurial.node import short, hex
+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
@@ -172,7 +172,6 @@
             return _search(web, tmpl, hi) # XXX redirect to 404 page?
 
     def changelist(limit=0, **map):
-        cl = web.repo.changelog
         l = [] # build a list in forward order for efficiency
         for i in xrange(start, end):
             ctx = web.repo[i]
@@ -611,7 +610,7 @@
     # readable by the user running the CGI script
     static = web.config("web", "static", None, untrusted=False)
     if not static:
-        tp = web.templatepath
+        tp = web.templatepath or templater.templatepath()
         if isinstance(tp, str):
             tp = [tp]
         static = [os.path.join(p, 'static') for p in tp]
@@ -643,7 +642,7 @@
     tree = list(graphmod.graph(web.repo, rev, downrev))
     canvasheight = (len(tree) + 1) * bg_height - 27;
     data = []
-    for i, (ctx, vtx, edges) in enumerate(tree):
+    for (ctx, vtx, edges) in tree:
         node = short(ctx.node())
         age = templatefilters.age(ctx.date())
         desc = templatefilters.firstline(ctx.description())
--- a/mercurial/hook.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/hook.py	Sun Apr 26 11:49:17 2009 +0200
@@ -7,6 +7,7 @@
 
 from i18n import _
 import util, os, sys
+from mercurial import extensions
 
 def _pythonhook(ui, repo, name, hname, funcname, args, throw):
     '''call python hook. hook is callable object, looked up as
@@ -109,8 +110,13 @@
             if callable(cmd):
                 r = _pythonhook(ui, repo, name, hname, cmd, args, throw) or r
             elif cmd.startswith('python:'):
-                r = _pythonhook(ui, repo, name, hname, cmd[7:].strip(),
-                                args, throw) or r
+                if cmd.count(':') == 2:
+                    path, cmd = cmd[7:].split(':')
+                    mod = extensions.loadpath(path, 'hgkook.%s' % hname)
+                    hookfn = getattr(mod, cmd)
+                else:
+                    hookfn = cmd[7:].strip()
+                r = _pythonhook(ui, repo, name, hname, hookfn, args, throw) or r
             else:
                 r = _exthook(ui, repo, hname, cmd, args, throw) or r
     finally:
--- a/mercurial/httprepo.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/httprepo.py	Sun Apr 26 11:49:17 2009 +0200
@@ -52,9 +52,9 @@
     def get_caps(self):
         if self.caps is None:
             try:
-                self.caps = util.set(self.do_read('capabilities').split())
+                self.caps = set(self.do_read('capabilities').split())
             except error.RepoError:
-                self.caps = util.set()
+                self.caps = set()
             self.ui.debug(_('capabilities: %s\n') %
                           (' '.join(self.caps or ['none'])))
         return self.caps
@@ -104,7 +104,7 @@
         if not (proto.startswith('application/mercurial-') or
                 proto.startswith('text/plain') or
                 proto.startswith('application/hg-changegroup')):
-            self.ui.debug(_("Requested URL: '%s'\n") % url.hidepassword(cu))
+            self.ui.debug(_("requested URL: '%s'\n") % url.hidepassword(cu))
             raise error.RepoError(_("'%s' does not appear to be an hg repository")
                                   % safeurl)
 
--- a/mercurial/i18n.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/i18n.py	Sun Apr 26 11:49:17 2009 +0200
@@ -7,7 +7,7 @@
 of the GNU General Public License, incorporated herein by reference.
 """
 
-import gettext, sys, os
+import gettext, sys, os, encoding
 
 # modelled after templater.templatepath:
 if hasattr(sys, 'frozen'):
@@ -37,15 +37,13 @@
     if message is None:
         return message
 
-    # We cannot just run the text through util.tolocal since that
-    # leads to infinite recursion when util._encoding is invalid.
+    # We cannot just run the text through encoding.tolocal since that
+    # leads to infinite recursion when encoding._encoding is invalid.
     try:
         u = t.ugettext(message)
-        return u.encode(util._encoding, "replace")
+        return u.encode(encoding.encoding, "replace")
     except LookupError:
         return message
 
 _ = gettext
 
-# Moved after _ because of circular import.
-import util
--- a/mercurial/keepalive.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/keepalive.py	Sun Apr 26 11:49:17 2009 +0200
@@ -307,15 +307,28 @@
         return r
 
     def _start_transaction(self, h, req):
-        headers = req.headers.copy()
-        body = req.data
-        if sys.version_info >= (2, 4):
-            headers.update(req.unredirected_hdrs)
         try:
-            h.request(req.get_method(), req.get_selector(), body, headers)
-        except socket.error, err: # XXX what error?
+            if req.has_data():
+                data = req.get_data()
+                h.putrequest('POST', req.get_selector())
+                if 'Content-type' not in req.headers:
+                    h.putheader('Content-type',
+                                'application/x-www-form-urlencoded')
+                if 'Content-length' not in req.headers:
+                    h.putheader('Content-length', '%d' % len(data))
+            else:
+                h.putrequest('GET', req.get_selector())
+        except (socket.error), err:
             raise urllib2.URLError(err)
 
+        for args in self.parent.addheaders:
+            h.putheader(*args)
+        for k, v in req.headers.items():
+            h.putheader(k, v)
+        h.endheaders()
+        if req.has_data():
+            h.send(data)
+
 class HTTPHandler(KeepAliveHandler, urllib2.HTTPHandler):
     pass
 
@@ -447,7 +460,6 @@
         return value
 
     def readline(self, limit=-1):
-        data = ""
         i = self._rbuf.find('\n')
         while i < 0 and not (0 < limit <= len(self._rbuf)):
             new = self._raw_read(self._rbufsize)
@@ -494,7 +506,7 @@
         HANDLE_ERRORS = i
         try:
             fo = urllib2.urlopen(url)
-            foo = fo.read()
+            fo.read()
             fo.close()
             try: status, reason = fo.status, fo.reason
             except AttributeError: status, reason = None, None
@@ -616,7 +628,7 @@
 def test(url, N=10):
     print "checking error hander (do this on a non-200)"
     try: error_handler(url)
-    except IOError, e:
+    except IOError:
         print "exiting - exception will prevent further tests"
         sys.exit()
     print
--- a/mercurial/localrepo.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/localrepo.py	Sun Apr 26 11:49:17 2009 +0200
@@ -9,13 +9,15 @@
 from i18n import _
 import repo, changegroup
 import changelog, dirstate, filelog, manifest, context, weakref
-import lock, transaction, stat, errno, ui, store
+import lock, transaction, stat, errno, ui, store, encoding
 import os, time, util, extensions, hook, inspect, error
 import match as match_
 import merge as merge_
 
+from lock import release
+
 class localrepository(repo.repository):
-    capabilities = util.set(('lookup', 'changegroupsubset'))
+    capabilities = set(('lookup', 'changegroupsubset'))
     supported = ('revlogv1', 'store', 'fncache')
 
     def __init__(self, parentui, path=None, create=0):
@@ -160,7 +162,7 @@
         if local:
             try:
                 fp = self.opener('localtags', 'r+')
-            except IOError, err:
+            except IOError:
                 fp = self.opener('localtags', 'a')
             else:
                 prevtags = fp.read()
@@ -174,7 +176,7 @@
         if use_dirstate:
             try:
                 fp = self.wfile('.hgtags', 'rb+')
-            except IOError, err:
+            except IOError:
                 fp = self.wfile('.hgtags', 'ab')
             else:
                 prevtags = fp.read()
@@ -188,7 +190,7 @@
                 fp.write(prevtags)
 
         # committed tags are stored in UTF-8
-        writetags(fp, names, util.fromlocal, prevtags)
+        writetags(fp, names, encoding.fromlocal, prevtags)
 
         if use_dirstate and '.hgtags' not in self.dirstate:
             self.add(['.hgtags'])
@@ -254,7 +256,7 @@
                     warn(_("cannot parse entry"))
                     continue
                 node, key = s
-                key = util.tolocal(key.strip()) # stored in UTF-8
+                key = encoding.tolocal(key.strip()) # stored in UTF-8
                 try:
                     bin_n = bin(node)
                 except TypeError:
@@ -297,7 +299,7 @@
             readtags(f.data().splitlines(), f, "global")
 
         try:
-            data = util.fromlocal(self.opener("localtags").read())
+            data = encoding.fromlocal(self.opener("localtags").read())
             # localtags are stored in the local character set
             # while the internal tag table is stored in UTF-8
             readtags(data.splitlines(), "localtags", "local")
@@ -397,7 +399,7 @@
         # the branch cache is stored on disk as UTF-8, but in the local
         # charset internally
         for k, v in partial.iteritems():
-            self.branchcache[util.tolocal(k)] = v
+            self.branchcache[encoding.tolocal(k)] = v
         return self.branchcache
 
 
@@ -593,8 +595,9 @@
         return self._filter("decode", filename, data)
 
     def transaction(self):
-        if self._transref and self._transref():
-            return self._transref().nest()
+        tr = self._transref and self._transref() or None
+        if tr and tr.running():
+            return tr.nest()
 
         # abort here if the journal already exists
         if os.path.exists(self.sjoin("journal")):
@@ -619,7 +622,7 @@
         return tr
 
     def recover(self):
-        l = self.lock()
+        lock = self.lock()
         try:
             if os.path.exists(self.sjoin("journal")):
                 self.ui.status(_("rolling back interrupted transaction\n"))
@@ -630,7 +633,7 @@
                 self.ui.warn(_("no interrupted transaction available\n"))
                 return False
         finally:
-            del l
+            lock.release()
 
     def rollback(self):
         wlock = lock = None
@@ -647,13 +650,13 @@
                 except IOError:
                     self.ui.warn(_("Named branch could not be reset, "
                                    "current branch still is: %s\n")
-                                 % util.tolocal(self.dirstate.branch()))
+                                 % encoding.tolocal(self.dirstate.branch()))
                 self.invalidate()
                 self.dirstate.invalidate()
             else:
                 self.ui.warn(_("no rollback information available\n"))
         finally:
-            del lock, wlock
+            release(lock, wlock)
 
     def invalidate(self):
         for a in "changelog manifest".split():
@@ -682,8 +685,10 @@
         return l
 
     def lock(self, wait=True):
-        if self._lockref and self._lockref():
-            return self._lockref()
+        l = self._lockref and self._lockref()
+        if l is not None and l.held:
+            l.lock()
+            return l
 
         l = self._lock(self.sjoin("lock"), wait, None, self.invalidate,
                        _('repository %s') % self.origroot)
@@ -691,8 +696,10 @@
         return l
 
     def wlock(self, wait=True):
-        if self._wlockref and self._wlockref():
-            return self._wlockref()
+        l = self._wlockref and self._wlockref()
+        if l is not None and l.held:
+            l.lock()
+            return l
 
         l = self._lock(self.join("wlock"), wait, self.dirstate.write,
                        self.dirstate.invalidate, _('working directory of %s') %
@@ -784,7 +791,7 @@
         if extra.get("close"):
             force = True
         if files:
-            files = util.unique(files)
+            files = list(set(files))
         try:
             wlock = self.wlock()
             lock = self.lock()
@@ -830,7 +837,7 @@
             return r
 
         finally:
-            del lock, wlock
+            release(lock, wlock)
 
     def commitctx(self, ctx):
         """Add a new revision to current repository.
@@ -846,7 +853,7 @@
                                    empty_ok=True, use_dirstate=False,
                                    update_dirstate=False)
         finally:
-            del lock, wlock
+            release(lock, wlock)
 
     def _commitctx(self, wctx, force=False, force_editor=False, empty_ok=False,
                   use_dirstate=True, update_dirstate=True):
@@ -943,7 +950,8 @@
                 if p2 != nullid:
                     edittext.append("HG: branch merge")
                 if branchname:
-                    edittext.append("HG: branch '%s'" % util.tolocal(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])
@@ -1060,13 +1068,15 @@
                     wlock = None
                     try:
                         try:
+                            # updating the dirstate is optional
+                            # so we dont wait on the lock
                             wlock = self.wlock(False)
                             for f in fixup:
                                 self.dirstate.normal(f)
                         except error.LockError:
                             pass
                     finally:
-                        del wlock
+                        release(wlock)
 
         if not parentworking:
             mf1 = mfmatches(ctx1)
@@ -1132,7 +1142,7 @@
                     self.dirstate.add(f)
             return rejected
         finally:
-            del wlock
+            wlock.release()
 
     def forget(self, list):
         wlock = self.wlock()
@@ -1143,7 +1153,7 @@
                 else:
                     self.dirstate.forget(f)
         finally:
-            del wlock
+            wlock.release()
 
     def remove(self, list, unlink=False):
         wlock = None
@@ -1166,14 +1176,13 @@
                 else:
                     self.dirstate.remove(f)
         finally:
-            del wlock
+            release(wlock)
 
     def undelete(self, list):
-        wlock = None
+        manifests = [self.manifest.read(self.changelog.read(p)[0])
+                     for p in self.dirstate.parents() if p != nullid]
+        wlock = self.wlock()
         try:
-            manifests = [self.manifest.read(self.changelog.read(p)[0])
-                         for p in self.dirstate.parents() if p != nullid]
-            wlock = self.wlock()
             for f in list:
                 if self.dirstate[f] != 'r':
                     self.ui.warn(_("%s not removed!\n") % f)
@@ -1183,24 +1192,23 @@
                     self.wwrite(f, t, m.flags(f))
                     self.dirstate.normal(f)
         finally:
-            del wlock
+            wlock.release()
 
     def copy(self, source, dest):
-        wlock = None
-        try:
-            p = self.wjoin(dest)
-            if not (os.path.exists(p) or os.path.islink(p)):
-                self.ui.warn(_("%s does not exist!\n") % dest)
-            elif not (os.path.isfile(p) or os.path.islink(p)):
-                self.ui.warn(_("copy failed: %s is not a file or a "
-                               "symbolic link\n") % dest)
-            else:
-                wlock = self.wlock()
+        p = self.wjoin(dest)
+        if not (os.path.exists(p) or os.path.islink(p)):
+            self.ui.warn(_("%s does not exist!\n") % dest)
+        elif not (os.path.isfile(p) or os.path.islink(p)):
+            self.ui.warn(_("copy failed: %s is not a file or a "
+                           "symbolic link\n") % dest)
+        else:
+            wlock = self.wlock()
+            try:
                 if self.dirstate[dest] in '?r':
                     self.dirstate.add(dest)
                 self.dirstate.copy(source, dest)
-        finally:
-            del wlock
+            finally:
+                wlock.release()
 
     def heads(self, start=None, closed=True):
         heads = self.changelog.heads(start)
@@ -1297,9 +1305,9 @@
         """
         m = self.changelog.nodemap
         search = []
-        fetch = {}
-        seen = {}
-        seenbranch = {}
+        fetch = set()
+        seen = set()
+        seenbranch = set()
         if base == None:
             base = {}
 
@@ -1327,7 +1335,7 @@
         if not unknown:
             return base.keys(), [], []
 
-        req = dict.fromkeys(unknown)
+        req = set(unknown)
         reqcnt = 0
 
         # search through remote branches
@@ -1353,13 +1361,13 @@
                     self.ui.debug(_("found incomplete branch %s:%s\n")
                                   % (short(n[0]), short(n[1])))
                     search.append(n[0:2]) # schedule branch range for scanning
-                    seenbranch[n] = 1
+                    seenbranch.add(n)
                 else:
                     if n[1] not in seen and n[1] not in fetch:
                         if n[2] in m and n[3] in m:
                             self.ui.debug(_("found new changeset %s\n") %
                                           short(n[1]))
-                            fetch[n[1]] = 1 # earliest unknown
+                            fetch.add(n[1]) # earliest unknown
                         for p in n[2:4]:
                             if p in m:
                                 base[p] = 1 # latest known
@@ -1367,8 +1375,8 @@
                     for p in n[2:4]:
                         if p not in req and p not in m:
                             r.append(p)
-                            req[p] = 1
-                seen[n[0]] = 1
+                            req.add(p)
+                seen.add(n[0])
 
             if r:
                 reqcnt += 1
@@ -1394,7 +1402,7 @@
                         if f <= 2:
                             self.ui.debug(_("found new branch changeset %s\n") %
                                               short(p))
-                            fetch[p] = 1
+                            fetch.add(p)
                             base[i] = 1
                         else:
                             self.ui.debug(_("narrowed branch search to %s:%s\n")
@@ -1405,7 +1413,7 @@
                 search = newsearch
 
         # sanity check our fetch list
-        for f in fetch.keys():
+        for f in fetch:
             if f in m:
                 raise error.RepoError(_("already have changeset ")
                                       + short(f[:4]))
@@ -1421,7 +1429,7 @@
 
         self.ui.debug(_("%d total queries\n") % reqcnt)
 
-        return base.keys(), fetch.keys(), heads
+        return base.keys(), list(fetch), heads
 
     def findoutgoing(self, remote, base=None, heads=None, force=False):
         """Return list of nodes that are roots of subsets not in remote
@@ -1439,15 +1447,15 @@
         self.ui.debug(_("common changesets up to ")
                       + " ".join(map(short, base.keys())) + "\n")
 
-        remain = dict.fromkeys(self.changelog.nodemap)
+        remain = set(self.changelog.nodemap)
 
         # prune everything remote has from the tree
-        del remain[nullid]
+        remain.remove(nullid)
         remove = base.keys()
         while remove:
             n = remove.pop(0)
             if n in remain:
-                del remain[n]
+                remain.remove(n)
                 for p in self.changelog.parents(n):
                     remove.append(p)
 
@@ -1494,7 +1502,7 @@
                 cg = remote.changegroupsubset(fetch, heads, 'pull')
             return self.addchangegroup(cg, 'pull', remote.url())
         finally:
-            del lock
+            lock.release()
 
     def push(self, remote, force=False, revs=None):
         # there are two ways to push to remote repo:
@@ -1575,7 +1583,7 @@
                 return remote.addchangegroup(cg, 'push', self.url())
             return ret[1]
         finally:
-            del lock
+            lock.release()
 
     def push_unbundle(self, remote, force, revs):
         # local repo finds heads on server, finds out what revs it
@@ -1662,11 +1670,11 @@
             has_cl_set, junk, junk = cl.nodesbetween(None, knownheads)
             junk = None
             # Transform the list into an ersatz set.
-            has_cl_set = dict.fromkeys(has_cl_set)
+            has_cl_set = set(has_cl_set)
         else:
             # If there were no known heads, the recipient cannot be assumed to
             # know about any changesets.
-            has_cl_set = {}
+            has_cl_set = set()
 
         # Make it easy to refer to self.manifest
         mnfst = self.manifest
@@ -1924,7 +1932,7 @@
 
         cl = self.changelog
         nodes = cl.findmissing(common)
-        revset = dict.fromkeys([cl.rev(n) for n in nodes])
+        revset = set([cl.rev(n) for n in nodes])
         self.changegroupinfo(nodes, source)
 
         def identity(x):
--- a/mercurial/lock.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/lock.py	Sun Apr 26 11:49:17 2009 +0200
@@ -6,6 +6,7 @@
 # of the GNU General Public License, incorporated herein by reference.
 
 import errno, os, socket, time, util, error
+import warnings
 
 class lock(object):
     # lock is symlink on platforms that support it, file on others.
@@ -27,6 +28,15 @@
         self.lock()
 
     def __del__(self):
+        if self.held:
+            warnings.warn("use lock.release instead of del lock",
+                    category=DeprecationWarning,
+                    stacklevel=2)
+
+            # ensure the lock will be removed
+            # even if recursive locking did occur
+            self.held = 1
+
         self.release()
 
     def lock(self):
@@ -45,6 +55,9 @@
                                      inst.locker)
 
     def trylock(self):
+        if self.held:
+            self.held += 1
+            return
         if lock._host is None:
             lock._host = socket.gethostname()
         lockname = '%s:%s' % (lock._host, os.getpid())
@@ -97,7 +110,9 @@
             return locker
 
     def release(self):
-        if self.held:
+        if self.held > 1:
+            self.held -= 1
+        elif self.held is 1:
             self.held = 0
             if self.releasefn:
                 self.releasefn()
@@ -105,3 +120,8 @@
                 os.unlink(self.f)
             except: pass
 
+def release(*locks):
+    for lock in locks:
+        if lock is not None:
+            lock.release()
+
--- a/mercurial/lsprof.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/lsprof.py	Sun Apr 26 11:49:17 2009 +0200
@@ -42,7 +42,6 @@
             d = d[:top]
         cols = "% 12s %12s %11.4f %11.4f   %s\n"
         hcols = "% 12s %12s %12s %12s %s\n"
-        cols2 = "+%12s %12s %11.4f %11.4f +  %s\n"
         file.write(hcols % ("CallCount", "Recursive", "Total(ms)",
                             "Inline(ms)", "module:lineno(function)"))
         count = 0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/lsprofcalltree.py	Sun Apr 26 11:49:17 2009 +0200
@@ -0,0 +1,90 @@
+"""
+lsprofcalltree.py - lsprof output which is readable by kcachegrind
+
+Authors:
+    * David Allouche <david <at> allouche.net>
+    * Jp Calderone & Itamar Shtull-Trauring
+    * Johan Dahlin
+
+This software may be used and distributed according to the terms
+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)
+    else:
+        return '%s %s:%d' % (code.co_name,
+                             code.co_filename,
+                             code.co_firstlineno)
+
+class KCacheGrind(object):
+    def __init__(self, profiler):
+        self.data = profiler.getstats()
+        self.out_file = None
+
+    def output(self, out_file):
+        self.out_file = out_file
+        print >> out_file, 'events: Ticks'
+        self._print_summary()
+        for entry in self.data:
+            self._entry(entry)
+
+    def _print_summary(self):
+        max_cost = 0
+        for entry in self.data:
+            totaltime = int(entry.totaltime * 1000)
+            max_cost = max(max_cost, totaltime)
+        print >> self.out_file, 'summary: %d' % (max_cost,)
+
+    def _entry(self, entry):
+        out_file = self.out_file
+
+        code = entry.code
+        #print >> out_file, 'ob=%s' % (code.co_filename,)
+        if isinstance(code, str):
+            print >> out_file, 'fi=~'
+        else:
+            print >> out_file, 'fi=%s' % (code.co_filename,)
+        print >> out_file, 'fn=%s' % (label(code),)
+
+        inlinetime = int(entry.inlinetime * 1000)
+        if isinstance(code, str):
+            print >> out_file, '0 ', inlinetime
+        else:
+            print >> out_file, '%d %d' % (code.co_firstlineno, inlinetime)
+
+        # recursive calls are counted in entry.calls
+        if entry.calls:
+            calls = entry.calls
+        else:
+            calls = []
+
+        if isinstance(code, str):
+            lineno = 0
+        else:
+            lineno = code.co_firstlineno
+
+        for subentry in calls:
+            self._subentry(lineno, subentry)
+        print >> out_file
+
+    def _subentry(self, lineno, subentry):
+        out_file = self.out_file
+        code = subentry.code
+        #print >> out_file, 'cob=%s' % (code.co_filename,)
+        print >> out_file, 'cfn=%s' % (label(code),)
+        if isinstance(code, str):
+            print >> out_file, 'cfi=~'
+            print >> out_file, 'calls=%d 0' % (subentry.callcount,)
+        else:
+            print >> out_file, 'cfi=%s' % (code.co_filename,)
+            print >> out_file, 'calls=%d %d' % (
+                subentry.callcount, code.co_firstlineno)
+
+        totaltime = int(subentry.totaltime * 1000)
+        print >> out_file, '%d %d' % (lineno, totaltime)
--- a/mercurial/mail.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/mail.py	Sun Apr 26 11:49:17 2009 +0200
@@ -8,7 +8,7 @@
 from i18n import _
 import os, smtplib, socket
 import email.Header, email.MIMEText, email.Utils
-import util
+import util, encoding
 
 def _smtp(ui):
     '''build an smtp connection and return a function to send mail'''
@@ -100,8 +100,8 @@
 def _charsets(ui):
     '''Obtains charsets to send mail parts not containing patches.'''
     charsets = [cs.lower() for cs in ui.configlist('email', 'charsets')]
-    fallbacks = [util._fallbackencoding.lower(),
-                 util._encoding.lower(), 'utf-8']
+    fallbacks = [encoding.fallbackencoding.lower(),
+                 encoding.encoding.lower(), 'utf-8']
     for cs in fallbacks: # util.unique does not keep order
         if cs not in charsets:
             charsets.append(cs)
@@ -110,14 +110,14 @@
 def _encode(ui, s, charsets):
     '''Returns (converted) string, charset tuple.
     Finds out best charset by cycling through sendcharsets in descending
-    order. Tries both _encoding and _fallbackencoding for input. Only as
+    order. Tries both encoding and fallbackencoding for input. Only as
     last resort send as is in fake ascii.
     Caveat: Do not use for mail parts containing patches!'''
     try:
         s.decode('ascii')
     except UnicodeDecodeError:
         sendcharsets = charsets or _charsets(ui)
-        for ics in (util._encoding, util._fallbackencoding):
+        for ics in (encoding.encoding, encoding.fallbackencoding):
             try:
                 u = s.decode(ics)
             except UnicodeDecodeError:
--- a/mercurial/manifest.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/manifest.py	Sun Apr 26 11:49:17 2009 +0200
@@ -125,7 +125,7 @@
             for f in l:
                 if '\n' in f or '\r' in f:
                     raise error.RevlogError(
-                        _("'\\n' and '\\r' disallowed in filenames"))
+                        _("'\\n' and '\\r' disallowed in filenames: %r") % f)
 
         # if we're using the listcache, make sure it is valid and
         # parented by the same node we're diffing against
--- a/mercurial/match.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/match.py	Sun Apr 26 11:49:17 2009 +0200
@@ -5,7 +5,7 @@
         self._root = root
         self._cwd = cwd
         self._files = files
-        self._fmap = dict.fromkeys(files)
+        self._fmap = set(files)
         self.matchfn = mf
         self._anypats = ap
     def __call__(self, fn):
--- a/mercurial/merge.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/merge.py	Sun Apr 26 11:49:17 2009 +0200
@@ -166,7 +166,7 @@
         if repo.ui.configbool("merge", "followcopies", True):
             dirs = repo.ui.configbool("merge", "followdirs", True)
             copy, diverge = copies.copies(repo, p1, p2, pa, dirs)
-        copied = dict.fromkeys(copy.values())
+        copied = set(copy.values())
         for of, fl in diverge.iteritems():
             act("divergent renames", "dr", of, fl)
 
@@ -504,4 +504,4 @@
 
         return stats
     finally:
-        del wlock
+        wlock.release()
--- a/mercurial/patch.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/patch.py	Sun Apr 26 11:49:17 2009 +0200
@@ -8,8 +8,8 @@
 
 from i18n import _
 from node import hex, nullid, short
-import base85, cmdutil, mdiff, util, revlog, diffhelpers, copies
-import cStringIO, email.Parser, os, re, errno, math
+import base85, cmdutil, mdiff, util, diffhelpers, copies
+import cStringIO, email.Parser, os, re, math
 import sys, tempfile, zlib
 
 gitre = re.compile('diff --git a/(.*) b/(.*)')
@@ -421,11 +421,12 @@
                             f = self.ui.note
                         offset = l - orig_start - fuzzlen
                         if offset == 1:
-                            linestr = "line"
+                            msg = _("Hunk #%d succeeded at %d %s"
+                                    "(offset %d line).\n")
                         else:
-                            linestr = "lines"
-                        f(_("Hunk #%d succeeded at %d %s(offset %d %s).\n") %
-                          (h.number, l+1, fuzzstr, offset, linestr))
+                            msg = _("Hunk #%d succeeded at %d %s"
+                                    "(offset %d lines).\n")
+                        f(msg % (h.number, l+1, fuzzstr, offset))
                         return fuzzlen
         self.printfile(True)
         self.ui.warn(_("Hunk #%d FAILED at %d\n") % (h.number, orig_start))
@@ -910,7 +911,7 @@
                 # else error?
                 # copy/rename + modify should modify target, not source
                 gp = changed.get(bfile)
-                if gp and gp.op in ('COPY', 'DELETE', 'RENAME'):
+                if gp and gp.op in ('COPY', 'DELETE', 'RENAME', 'ADD'):
                     afile = bfile
                     gitworkdone = True
             newfile = True
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/posix.py	Sun Apr 26 11:49:17 2009 +0200
@@ -0,0 +1,220 @@
+"""
+posix.py - Posix utility function implementations for Mercurial
+
+ Copyright 2005-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.
+"""
+
+from i18n import _
+import os, sys, osutil, errno, stat, getpass, pwd, grp
+
+posixfile = file
+nulldev = '/dev/null'
+normpath = os.path.normpath
+samestat = os.path.samestat
+
+umask = os.umask(0)
+os.umask(umask)
+
+def openhardlinks():
+    '''return true if it is safe to hold open file handles to hardlinks'''
+    return True
+
+def rcfiles(path):
+    rcs = [os.path.join(path, 'hgrc')]
+    rcdir = os.path.join(path, 'hgrc.d')
+    try:
+        rcs.extend([os.path.join(rcdir, f)
+                    for f, kind in osutil.listdir(rcdir)
+                    if f.endswith(".rc")])
+    except OSError:
+        pass
+    return rcs
+
+def system_rcpath():
+    path = []
+    # old mod_python does not set sys.argv
+    if len(getattr(sys, 'argv', [])) > 0:
+        path.extend(rcfiles(os.path.dirname(sys.argv[0]) +
+                              '/../etc/mercurial'))
+    path.extend(rcfiles('/etc/mercurial'))
+    return path
+
+def user_rcpath():
+    return [os.path.expanduser('~/.hgrc')]
+
+def parse_patch_output(output_line):
+    """parses the output produced by patch and returns the file name"""
+    pf = output_line[14:]
+    if os.sys.platform == 'OpenVMS':
+        if pf[0] == '`':
+            pf = pf[1:-1] # Remove the quotes
+    else:
+       if pf.startswith("'") and pf.endswith("'") and " " in pf:
+            pf = pf[1:-1] # Remove the quotes
+    return pf
+
+def sshargs(sshcmd, host, user, port):
+    '''Build argument list for ssh'''
+    args = user and ("%s@%s" % (user, host)) or host
+    return port and ("%s -p %s" % (args, port)) or args
+
+def is_exec(f):
+    """check whether a file is executable"""
+    return (os.lstat(f).st_mode & 0100 != 0)
+
+def set_flags(f, l, x):
+    s = os.lstat(f).st_mode
+    if l:
+        if not stat.S_ISLNK(s):
+            # switch file to link
+            data = file(f).read()
+            os.unlink(f)
+            try:
+                os.symlink(data, f)
+            except:
+                # failed to make a link, rewrite file
+                file(f, "w").write(data)
+        # no chmod needed at this point
+        return
+    if stat.S_ISLNK(s):
+        # switch link to file
+        data = os.readlink(f)
+        os.unlink(f)
+        file(f, "w").write(data)
+        s = 0666 & ~umask # avoid restatting for chmod
+
+    sx = s & 0100
+    if x and not sx:
+        # Turn on +x for every +r bit when making a file executable
+        # and obey umask.
+        os.chmod(f, s | (s & 0444) >> 2 & ~umask)
+    elif not x and sx:
+        # Turn off all +x bits
+        os.chmod(f, s & 0666)
+
+def set_binary(fd):
+    pass
+
+def pconvert(path):
+    return path
+
+def localpath(path):
+    return path
+
+def shellquote(s):
+    if os.sys.platform == 'OpenVMS':
+        return '"%s"' % s
+    else:
+        return "'%s'" % s.replace("'", "'\\''")
+
+def quotecommand(cmd):
+    return cmd
+
+def popen(command, mode='r'):
+    return os.popen(command, mode)
+
+def testpid(pid):
+    '''return False if pid dead, True if running or not sure'''
+    if os.sys.platform == 'OpenVMS':
+        return True
+    try:
+        os.kill(pid, 0)
+        return True
+    except OSError, inst:
+        return inst.errno != errno.ESRCH
+
+def explain_exit(code):
+    """return a 2-tuple (desc, code) describing a process's status"""
+    if os.WIFEXITED(code):
+        val = os.WEXITSTATUS(code)
+        return _("exited with status %d") % val, val
+    elif os.WIFSIGNALED(code):
+        val = os.WTERMSIG(code)
+        return _("killed by signal %d") % val, val
+    elif os.WIFSTOPPED(code):
+        val = os.WSTOPSIG(code)
+        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)
+    return st.st_uid == os.getuid()
+
+def find_exe(command):
+    '''Find executable for command searching like which does.
+    If command is a basename then PATH is searched for command.
+    PATH isn't searched if command is an absolute or relative path.
+    If command isn't found None is returned.'''
+    if sys.platform == 'OpenVMS':
+        return command
+
+    def findexisting(executable):
+        'Will return executable if existing file'
+        if os.path.exists(executable):
+            return executable
+        return None
+
+    if os.sep in command:
+        return findexisting(command)
+
+    for path in os.environ.get('PATH', '').split(os.pathsep):
+        executable = findexisting(os.path.join(path, command))
+        if executable is not None:
+            return executable
+    return None
+
+def set_signal_handler():
+    pass
+
+def statfiles(files):
+    'Stat each file in files and yield stat or None if file does not exist.'
+    lstat = os.lstat
+    for nf in files:
+        try:
+            st = lstat(nf)
+        except OSError, err:
+            if err.errno not in (errno.ENOENT, errno.ENOTDIR):
+                raise
+            st = None
+        yield st
+
+def getuser():
+    '''return name of current user'''
+    return getpass.getuser()
+
+def expand_glob(pats):
+    '''On Windows, expand the implicit globs in a list of patterns'''
+    return list(pats)
+
+def username(uid=None):
+    """Return the name of the user with the given uid.
+
+    If uid is None, return the name of the current user."""
+
+    if uid is None:
+        uid = os.getuid()
+    try:
+        return pwd.getpwuid(uid)[0]
+    except KeyError:
+        return str(uid)
+
+def groupname(gid=None):
+    """Return the name of the group with the given gid.
+
+    If gid is None, return the name of the current group."""
+
+    if gid is None:
+        gid = os.getgid()
+    try:
+        return grp.getgrgid(gid)[0]
+    except KeyError:
+        return str(gid)
--- a/mercurial/pure/base85.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/pure/base85.py	Sun Apr 26 11:49:17 2009 +0200
@@ -9,6 +9,7 @@
 
 _b85chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" \
             "abcdefghijklmnopqrstuvwxyz!#$%&()*+-;<=>?@^_`{|}~"
+_b85chars2 = [(a + b) for a in _b85chars for b in _b85chars]
 _b85dec = {}
 
 def _mkb85dec():
@@ -22,24 +23,13 @@
     if r:
         text += '\0' * (4 - r)
     longs = len(text) >> 2
-    out = []
     words = struct.unpack('>%dL' % (longs), text)
-    for word in words:
-        # unrolling improved speed by 33%
-        word, r = divmod(word, 85)
-        e = _b85chars[r]
-        word, r = divmod(word, 85)
-        d = _b85chars[r]
-        word, r = divmod(word, 85)
-        c = _b85chars[r]
-        word, r = divmod(word, 85)
-        b = _b85chars[r]
-        word, r = divmod(word, 85)
-        a = _b85chars[r]
 
-        out += (a, b, c, d, e)
+    out = ''.join(_b85chars[(word / 52200625) % 85] +
+                  _b85chars2[(word / 7225) % 7225] +
+                  _b85chars2[word % 7225]
+                  for word in words)
 
-    out = ''.join(out)
     if pad:
         return out
 
--- a/mercurial/pure/bdiff.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/pure/bdiff.py	Sun Apr 26 11:49:17 2009 +0200
@@ -6,7 +6,16 @@
 # of the GNU General Public License, incorporated herein by reference.
 
 import struct, difflib
-# mdiff import moved to bottom due to import cycle
+
+def splitnewlines(text):
+    '''like str.splitlines, but only split on newlines.'''
+    lines = [l + '\n' for l in text.split('\n')]
+    if lines:
+        if lines[-1] == '\n':
+            lines.pop()
+        else:
+            lines[-1] = lines[-1][:-1]
+    return lines
 
 def _normalizeblocks(a, b, blocks):
     prev = None
@@ -59,11 +68,9 @@
     return "".join(bin)
 
 def blocks(a, b):
-    an = mdiff.splitnewlines(a)
-    bn = mdiff.splitnewlines(b)
+    an = splitnewlines(a)
+    bn = splitnewlines(b)
     d = difflib.SequenceMatcher(None, an, bn).get_matching_blocks()
     d = _normalizeblocks(an, bn, d)
     return [(i, i + n, j, j + n) for (i, j, n) in d]
 
-# this breaks an import cycle
-import mdiff
--- a/mercurial/pure/parsers.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/pure/parsers.py	Sun Apr 26 11:49:17 2009 +0200
@@ -5,8 +5,9 @@
 # This software may be used and distributed according to the terms
 # of the GNU General Public License, incorporated herein by reference.
 
-from node import bin, hex, nullid, nullrev
-import revlog, dirstate, struct, util, zlib
+from mercurial.node import bin, nullid, nullrev
+from mercurial import util
+import struct, zlib
 
 _pack = struct.pack
 _unpack = struct.unpack
@@ -24,7 +25,14 @@
             mfdict[f] = bin(n)
 
 def parse_index(data, inline):
-    indexformatng = revlog.indexformatng
+    def gettype(q):
+        return int(q & 0xFFFF)
+
+    def offset_type(offset, type):
+        return long(long(offset) << 16 | type)
+
+    indexformatng = ">Qiiiiii20s12x"
+
     s = struct.calcsize(indexformatng)
     index = []
     cache = None
@@ -52,8 +60,8 @@
             off += s
 
     e = list(index[0])
-    type = revlog.gettype(e[0])
-    e[0] = revlog.offset_type(0, type)
+    type = gettype(e[0])
+    e[0] = offset_type(0, type)
     index[0] = tuple(e)
 
     # add the magic null revision at -1
@@ -64,7 +72,8 @@
 def parse_dirstate(dmap, copymap, st):
     parents = [st[:20], st[20: 40]]
     # deref fields so they will be local in loop
-    e_size = struct.calcsize(dirstate._format)
+    format = ">cllll"
+    e_size = struct.calcsize(format)
     pos1 = 40
     l = len(st)
 
--- a/mercurial/repair.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/repair.py	Sun Apr 26 11:49:17 2009 +0200
@@ -118,11 +118,25 @@
         chgrpfile = _bundle(repo, savebases, saveheads, node, 'temp',
                             extranodes)
 
-    cl.strip(striprev)
-    repo.manifest.strip(striprev)
-    for name in files:
-        f = repo.file(name)
-        f.strip(striprev)
+    fs = [repo.file(name) for name in files]
+    mfst = repo.manifest
+
+    tr = repo.transaction()
+    offset = len(tr.entries)
+
+    cl.strip(striprev, tr)
+    mfst.strip(striprev, tr)
+    for f in fs:
+        f.strip(striprev, tr)
+
+    try:
+        for i in xrange(offset, len(tr.entries)):
+            file, troffset, ignore = tr.entries[i]
+            repo.sopener(file, 'a').truncate(troffset)
+        tr.close()
+    except:
+        tr.abort()
+        raise
 
     if saveheads or extranodes:
         ui.status(_("adding branch\n"))
--- a/mercurial/repo.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/repo.py	Sun Apr 26 11:49:17 2009 +0200
@@ -7,6 +7,7 @@
 # of the GNU General Public License, incorporated herein by reference.
 
 from i18n import _
+import error
 
 class repository(object):
     def capable(self, name):
--- a/mercurial/revlog.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/revlog.py	Sun Apr 26 11:49:17 2009 +0200
@@ -10,7 +10,8 @@
 of the GNU General Public License, incorporated herein by reference.
 """
 
-from node import bin, hex, nullid, nullrev, short
+# import stuff from node for others to import from revlog
+from node import bin, hex, nullid, nullrev, short #@UnusedImport
 from i18n import _
 import changegroup, errno, ancestor, mdiff, parsers
 import struct, util, zlib, error
@@ -41,6 +42,8 @@
 def offset_type(offset, type):
     return long(long(offset) << 16 | type)
 
+nullhash = _sha(nullid)
+
 def hash(text, p1, p2):
     """generate a hash from the given text and its parent hashes
 
@@ -48,10 +51,17 @@
     in a manner that makes it easy to distinguish nodes with the same
     content in the revision graph.
     """
-    l = [p1, p2]
-    l.sort()
-    s = _sha(l[0])
-    s.update(l[1])
+    # As of now, if one of the parent node is null, p2 is null
+    if p2 == nullid:
+        # deep copy of a hash is faster than creating one
+        s = nullhash.copy()
+        s.update(p1)
+    else:
+        # none of the parent nodes are nullid
+        l = [p1, p2]
+        l.sort()
+        s = _sha(l[0])
+        s.update(l[1])
     s.update(text)
     return s.digest()
 
@@ -566,7 +576,7 @@
     def ancestors(self, *revs):
         'Generate the ancestors of revs using a breadth-first visit'
         visit = list(revs)
-        seen = util.set([nullrev])
+        seen = set([nullrev])
         while visit:
             for parent in self.parentrevs(visit.pop(0)):
                 if parent not in seen:
@@ -576,7 +586,7 @@
 
     def descendants(self, *revs):
         'Generate the descendants of revs in topological order'
-        seen = util.set(revs)
+        seen = set(revs)
         for i in xrange(min(revs) + 1, len(self)):
             for x in self.parentrevs(i):
                 if x != nullrev and x in seen:
@@ -603,10 +613,9 @@
         heads = [self.rev(n) for n in heads]
 
         # we want the ancestors, but inclusive
-        has = dict.fromkeys(self.ancestors(*common))
-        has[nullrev] = None
-        for r in common:
-            has[r] = None
+        has = set(self.ancestors(*common))
+        has.add(nullrev)
+        has.update(common)
 
         # take all ancestors from heads that aren't in has
         missing = {}
@@ -669,7 +678,7 @@
             # find from roots.
             heads = dict.fromkeys(heads, 0)
             # Start at the top and keep marking parents until we're done.
-            nodestotag = heads.keys()
+            nodestotag = set(heads)
             # Remember where the top was so we can use it as a limit later.
             highestrev = max([self.rev(n) for n in nodestotag])
             while nodestotag:
@@ -687,7 +696,7 @@
                         # and we haven't already been marked as an ancestor
                         ancestors[n] = 1 # Mark as ancestor
                         # Add non-nullid parents to list of nodes to tag.
-                        nodestotag.extend([p for p in self.parents(n) if
+                        nodestotag.update([p for p in self.parents(n) if
                                            p != nullid])
                     elif n in heads: # We've seen it before, is it a fake head?
                         # So it is, real heads should not be the ancestors of
@@ -716,9 +725,8 @@
                 # any other roots.
                 lowestrev = nullrev
                 roots = [nullid]
-        # Transform our roots list into a 'set' (i.e. a dictionary where the
-        # values don't matter.
-        descendents = dict.fromkeys(roots, 1)
+        # Transform our roots list into a set.
+        descendents = set(roots)
         # Also, keep the original roots so we can filter out roots that aren't
         # 'real' roots (i.e. are descended from other roots).
         roots = descendents.copy()
@@ -742,14 +750,14 @@
                     p = tuple(self.parents(n))
                     # If any of its parents are descendents, it's not a root.
                     if (p[0] in descendents) or (p[1] in descendents):
-                        roots.pop(n)
+                        roots.remove(n)
             else:
                 p = tuple(self.parents(n))
                 # A node is a descendent if either of its parents are
                 # descendents.  (We seeded the dependents list with the roots
                 # up there, remember?)
                 if (p[0] in descendents) or (p[1] in descendents):
-                    descendents[n] = 1
+                    descendents.add(n)
                     isdescendent = True
             if isdescendent and ((ancestors is None) or (n in ancestors)):
                 # Only include nodes that are both descendents and ancestors.
@@ -768,7 +776,7 @@
                     for p in self.parents(n):
                         heads.pop(p, None)
         heads = [n for n in heads.iterkeys() if heads[n] != 0]
-        roots = roots.keys()
+        roots = list(roots)
         assert orderedout
         assert roots
         assert heads
@@ -797,7 +805,7 @@
             start = nullid
         if stop is None:
             stop = []
-        stoprevs = dict.fromkeys([self.rev(n) for n in stop])
+        stoprevs = set([self.rev(n) for n in stop])
         startrev = self.rev(start)
         reachable = {startrev: 1}
         heads = {startrev: 1}
@@ -837,7 +845,7 @@
             # odds of a binary node being all hex in ASCII are 1 in 10**25
             try:
                 node = id
-                r = self.rev(node) # quick search the index
+                self.rev(node) # quick search the index
                 return node
             except LookupError:
                 pass # may be partial hex id
@@ -857,7 +865,7 @@
             try:
                 # a full hex nodeid?
                 node = bin(id)
-                r = self.rev(node)
+                self.rev(node)
                 return node
             except (TypeError, LookupError):
                 pass
@@ -1275,7 +1283,7 @@
 
         return node
 
-    def strip(self, minlink):
+    def strip(self, minlink, transaction):
         """truncate the revlog on the first revision with a linkrev >= minlink
 
         This function is called when we're stripping revision minlink and
@@ -1304,14 +1312,12 @@
         # first truncate the files on disk
         end = self.start(rev)
         if not self._inline:
-            df = self.opener(self.datafile, "a")
-            df.truncate(end)
+            transaction.add(self.datafile, end)
             end = rev * self._io.size
         else:
             end += rev * self._io.size
 
-        indexf = self.opener(self.indexfile, "a")
-        indexf.truncate(end)
+        transaction.add(self.indexfile, end)
 
         # then reset internal state in memory to forget those revisions
         self._cache = None
--- a/mercurial/sshrepo.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/sshrepo.py	Sun Apr 26 11:49:17 2009 +0200
@@ -7,7 +7,7 @@
 
 from node import bin, hex
 from i18n import _
-import repo, os, re, util, error
+import repo, re, util, error
 
 class remotelock(object):
     def __init__(self, repo):
@@ -80,7 +80,7 @@
         else:
             self.abort(error.RepoError(_("no suitable response from remote hg")))
 
-        self.capabilities = util.set()
+        self.capabilities = set()
         lines.reverse()
         for l in lines:
             if l.startswith("capabilities:"):
--- a/mercurial/sshserver.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/sshserver.py	Sun Apr 26 11:49:17 2009 +0200
@@ -37,7 +37,11 @@
         self.fout.flush()
 
     def serve_forever(self):
-        while self.serve_one(): pass
+        try:
+            while self.serve_one(): pass
+        finally:
+            if self.lock is not None:
+                self.lock.release()
         sys.exit(0)
 
     def serve_one(self):
@@ -122,8 +126,6 @@
         self.fout.flush()
 
     def do_changegroupsubset(self):
-        bases = []
-        heads = []
         argmap = dict([self.getarg(), self.getarg()])
         bases = [bin(n) for n in argmap['bases'].split(' ')]
         heads = [bin(n) for n in argmap['heads'].split(' ')]
--- a/mercurial/statichttprepo.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/statichttprepo.py	Sun Apr 26 11:49:17 2009 +0200
@@ -9,7 +9,7 @@
 
 from i18n import _
 import changelog, byterange, url, error
-import repo, localrepo, manifest, util, store
+import localrepo, manifest, util, store
 import urllib, urllib2, errno
 
 class httprangereader(object):
--- a/mercurial/store.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/store.py	Sun Apr 26 11:49:17 2009 +0200
@@ -136,7 +136,7 @@
         # files in .hg/ will be created using this mode
         mode = os.stat(path).st_mode
             # avoid some useless chmods
-        if (0777 & ~util._umask) == (0777 & mode):
+        if (0777 & ~util.umask) == (0777 & mode):
             mode = None
     except OSError:
         mode = None
--- a/mercurial/streamclone.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/streamclone.py	Sun Apr 26 11:49:17 2009 +0200
@@ -41,16 +41,15 @@
     entries = []
     total_bytes = 0
     try:
-        l = None
+        # get consistent snapshot of repo, lock during scan
+        lock = repo.lock()
         try:
             repo.ui.debug(_('scanning\n'))
-            # get consistent snapshot of repo, lock during scan
-            l = repo.lock()
             for name, ename, size in repo.store.walk():
                 entries.append((name, size))
                 total_bytes += size
         finally:
-            del l
+            lock.release()
     except error.LockError:
         raise StreamException(2)
 
--- a/mercurial/strutil.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/strutil.py	Sun Apr 26 11:49:17 2009 +0200
@@ -32,10 +32,3 @@
             break
         yield c
         end = c - 1
-
-def rsplit(s, sep=None, maxsplit=-1):
-    try:
-        return s.rsplit(sep, maxsplit)
-    except AttributeError:
-        return [chunk[::-1] for chunk in
-                s[::-1].split(sep, maxsplit)[::-1]]
--- a/mercurial/templatefilters.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/templatefilters.py	Sun Apr 26 11:49:17 2009 +0200
@@ -6,7 +6,7 @@
 # of the GNU General Public License, incorporated herein by reference.
 
 import cgi, re, os, time, urllib, textwrap
-import util, templater
+import util, templater, encoding
 
 agescales = [("second", 1),
              ("minute", 60),
@@ -76,7 +76,7 @@
     return text.replace('\n', '<br/>\n')
 
 def obfuscate(text):
-    text = unicode(text, util._encoding, 'replace')
+    text = unicode(text, encoding.encoding, 'replace')
     return ''.join(['&#%d;' % ord(c) for c in text])
 
 def domain(author):
@@ -129,15 +129,18 @@
     ('\r', '\\r'), ('\f', '\\f'), ('\b', '\\b'),
 ]
 
+def jsonescape(s):
+    for k, v in _escapes:
+        s = s.replace(k, v)
+    return s
+
 def json(obj):
     if obj is None or obj is False or obj is True:
         return {None: 'null', False: 'false', True: 'true'}[obj]
     elif isinstance(obj, int) or isinstance(obj, float):
         return str(obj)
     elif isinstance(obj, str):
-        for k, v in _escapes:
-            obj = obj.replace(k, v)
-        return '"%s"' % obj
+        return '"%s"' % jsonescape(obj)
     elif isinstance(obj, unicode):
         return json(obj.encode('utf-8'))
     elif hasattr(obj, 'keys'):
@@ -154,9 +157,18 @@
     else:
         raise TypeError('cannot encode type %s' % obj.__class__.__name__)
 
+def stripdir(text):
+    '''Treat the text as path and strip a directory level, if possible.'''
+    dir = os.path.dirname(text)
+    if dir == "":
+        return os.path.basename(text)
+    else:
+        return dir
+
 filters = {
     "addbreaks": nl2br,
     "basename": os.path.basename,
+    "stripdir": stripdir,
     "age": age,
     "date": lambda x: util.datestr(x),
     "domain": domain,
@@ -169,6 +181,8 @@
     "hgdate": lambda x: "%d %d" % x,
     "isodate": lambda x: util.datestr(x, '%Y-%m-%d %H:%M %1%2'),
     "isodatesec": lambda x: util.datestr(x, '%Y-%m-%d %H:%M:%S %1%2'),
+    "json": json,
+    "jsonescape": jsonescape,
     "obfuscate": obfuscate,
     "permissions": permissions,
     "person": person,
@@ -182,5 +196,4 @@
     "user": lambda x: util.shortuser(x),
     "stringescape": lambda x: x.encode('string_escape'),
     "xmlescape": xmlescape,
-    "json": json,
 }
--- a/mercurial/templater.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/templater.py	Sun Apr 26 11:49:17 2009 +0200
@@ -183,9 +183,32 @@
 
     return normpaths
 
+def stylemap(style, paths=None):
+    """Return path to mapfile for a given style.
+
+    Searches mapfile in the following locations:
+    1. templatepath/style/map
+    2. templatepath/map-style
+    3. templatepath/map
+    """
+
+    if paths is None:
+        paths = templatepath()
+    elif isinstance(paths, str):
+        paths = [templatepath]
+
+    locations = style and [os.path.join(style, "map"), "map-" + style] or []
+    locations.append("map")
+    for path in paths:
+        for location in locations:
+            mapfile = os.path.join(path, location)
+            if os.path.isfile(mapfile):
+                return mapfile
+
+    raise RuntimeError("No hgweb templates found in %r" % paths)
+
 def stringify(thing):
     '''turn nested template iterator into string.'''
-    if hasattr(thing, '__iter__'):
+    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	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/transaction.py	Sun Apr 26 11:49:17 2009 +0200
@@ -34,8 +34,6 @@
         if self.journal:
             if self.entries: self.abort()
             self.file.close()
-            try: os.unlink(self.journal)
-            except: pass
 
     def add(self, file, offset, data=None):
         if file in self.map: return
@@ -82,15 +80,23 @@
 
         self.report(_("transaction abort!\n"))
 
+        failed = False
         for f, o, ignore in self.entries:
             try:
                 self.opener(f, "a").truncate(o)
             except:
+                failed = True
                 self.report(_("failed to truncate %s\n") % f)
 
         self.entries = []
 
-        self.report(_("rollback completed\n"))
+        if not failed:
+            self.file.close()
+            os.unlink(self.journal)
+            self.journal = None
+            self.report(_("rollback completed\n"))
+        else:
+            self.report(_("rollback failed - please run hg recover\n"))
 
 def rollback(opener, file):
     files = {}
--- a/mercurial/ui.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/ui.py	Sun Apr 26 11:49:17 2009 +0200
@@ -7,194 +7,100 @@
 
 from i18n import _
 import errno, getpass, os, re, socket, sys, tempfile
-import ConfigParser, traceback, util
-
-def dupconfig(orig):
-    new = util.configparser(orig.defaults())
-    updateconfig(orig, new)
-    return new
+import config, traceback, util, error
 
-def updateconfig(source, dest, sections=None):
-    if not sections:
-        sections = source.sections()
-    for section in sections:
-        if not dest.has_section(section):
-            dest.add_section(section)
-        for name, value in source.items(section, raw=True):
-            dest.set(section, name, value)
+_booleans = {'1':True, 'yes':True, 'true':True, 'on':True,
+             '0':False, 'no':False, 'false':False, 'off':False}
 
 class ui(object):
-    _isatty = None
-
-    def __init__(self, verbose=False, debug=False, quiet=False,
-                 interactive=True, traceback=False, report_untrusted=True,
-                 parentui=None):
-        self.overlay = None
+    def __init__(self, parentui=None):
         self.buffers = []
-        if parentui is None:
-            # this is the parent of all ui children
-            self.parentui = None
-            self.quiet = quiet
-            self.verbose = verbose
-            self.debugflag = debug
-            self.interactive = interactive
-            self.traceback = traceback
-            self.report_untrusted = report_untrusted
-            self.trusted_users = {}
-            self.trusted_groups = {}
-            # if ucdata is not None, its keys must be a superset of cdata's
-            self.cdata = util.configparser()
-            self.ucdata = None
-            # we always trust global config files
-            self.check_trusted = False
-            self.readconfig(util.rcpath())
-            self.check_trusted = True
-            self.updateopts(verbose, debug, quiet, interactive)
-        else:
+        self.quiet = self.verbose = self.debugflag = self.traceback = False
+        self.interactive = self.report_untrusted = True
+        self.overlay = config.config()
+        self.cdata = config.config()
+        self.ucdata = config.config()
+        self.parentui = None
+        self.trusted_users = {}
+        self.trusted_groups = {}
+
+        if parentui:
             # parentui may point to an ui object which is already a child
             self.parentui = parentui.parentui or parentui
+            self.cdata.update(self.parentui.cdata)
+            self.ucdata.update(self.parentui.ucdata)
+            # we want the overlay from the parent, not the root
+            self.overlay.update(parentui.overlay)
+            self.buffers = parentui.buffers
             self.trusted_users = parentui.trusted_users.copy()
             self.trusted_groups = parentui.trusted_groups.copy()
-            self.cdata = dupconfig(self.parentui.cdata)
-            if self.parentui.ucdata:
-                self.ucdata = dupconfig(self.parentui.ucdata)
-            if self.parentui.overlay:
-                self.overlay = dupconfig(self.parentui.overlay)
-            if self.parentui is not parentui and parentui.overlay is not None:
-                if self.overlay is None:
-                    self.overlay = util.configparser()
-                updateconfig(parentui.overlay, self.overlay)
-            self.buffers = parentui.buffers
+            self.fixconfig()
+        else:
+            # we always trust global config files
+            for f in util.rcpath():
+                self.readconfig(f, assumetrusted=True)
 
     def __getattr__(self, key):
         return getattr(self.parentui, key)
 
+    _isatty = None
     def isatty(self):
         if ui._isatty is None:
-            ui._isatty = sys.stdin.isatty()
+            try:
+                ui._isatty = sys.stdin.isatty()
+            except AttributeError: # not a real file object
+                ui._isatty = False
         return ui._isatty
 
-    def updateopts(self, verbose=False, debug=False, quiet=False,
-                   interactive=True, traceback=False, config=[]):
-        for section, name, value in config:
-            self.setconfig(section, name, value)
-
-        if quiet or verbose or debug:
-            self.setconfig('ui', 'quiet', str(bool(quiet)))
-            self.setconfig('ui', 'verbose', str(bool(verbose)))
-            self.setconfig('ui', 'debug', str(bool(debug)))
-
-        self.verbosity_constraints()
-
-        if not interactive:
-            self.setconfig('ui', 'interactive', 'False')
-            self.interactive = False
-
-        self.traceback = self.traceback or traceback
-
-    def verbosity_constraints(self):
-        self.quiet = self.configbool('ui', 'quiet')
-        self.verbose = self.configbool('ui', 'verbose')
-        self.debugflag = self.configbool('ui', 'debug')
-
-        if self.debugflag:
-            self.verbose = True
-            self.quiet = False
-        elif self.verbose and self.quiet:
-            self.quiet = self.verbose = False
-
-    def _is_trusted(self, fp, f, warn=True):
-        if not self.check_trusted:
-            return True
+    def _is_trusted(self, fp, f):
         st = util.fstat(fp)
         if util.isowner(fp, st):
             return True
+
         tusers = self.trusted_users
         tgroups = self.trusted_groups
-        if not tusers:
-            user = util.username()
-            if user is not None:
-                self.trusted_users[user] = 1
-                self.fixconfig(section='trusted')
-        if (tusers or tgroups) and '*' not in tusers and '*' not in tgroups:
-            user = util.username(st.st_uid)
-            group = util.groupname(st.st_gid)
-            if user not in tusers and group not in tgroups:
-                if warn and self.report_untrusted:
-                    self.warn(_('Not trusting file %s from untrusted '
-                                'user %s, group %s\n') % (f, user, group))
-                return False
-        return True
+        if '*' in tusers or '*' in tgroups:
+            return True
+
+        user = util.username(st.st_uid)
+        group = util.groupname(st.st_gid)
+        if user in tusers or group in tgroups or user == util.username():
+            return True
+
+        if self.report_untrusted:
+            self.warn(_('Not trusting file %s from untrusted '
+                        'user %s, group %s\n') % (f, user, group))
+        return False
 
-    def readconfig(self, fn, root=None):
-        if isinstance(fn, basestring):
-            fn = [fn]
-        for f in fn:
-            try:
-                fp = open(f)
-            except IOError:
-                continue
-            cdata = self.cdata
-            trusted = self._is_trusted(fp, f)
-            if not trusted:
-                if self.ucdata is None:
-                    self.ucdata = dupconfig(self.cdata)
-                cdata = self.ucdata
-            elif self.ucdata is not None:
-                # use a separate configparser, so that we don't accidentally
-                # override ucdata settings later on.
-                cdata = util.configparser()
+    def readconfig(self, filename, root=None, assumetrusted=False,
+                   sections = None):
+        try:
+            fp = open(filename)
+        except IOError:
+            if not sections: # ignore unless we were looking for something
+                return
+            raise
+
+        cdata = config.config()
+        trusted = sections or assumetrusted or self._is_trusted(fp, filename)
 
-            try:
-                cdata.readfp(fp, f)
-            except ConfigParser.ParsingError, inst:
-                msg = _("Failed to parse %s\n%s") % (f, inst)
-                if trusted:
-                    raise util.Abort(msg)
-                self.warn(_("Ignored: %s\n") % msg)
+        try:
+            cdata.read(filename, fp)
+        except error.ConfigError, inst:
+            if trusted:
+                raise
+            self.warn(_("Ignored: %s\n") % str(inst))
 
-            if trusted:
-                if cdata != self.cdata:
-                    updateconfig(cdata, self.cdata)
-                if self.ucdata is not None:
-                    updateconfig(cdata, self.ucdata)
-        # override data from config files with data set with ui.setconfig
-        if self.overlay:
-            updateconfig(self.overlay, self.cdata)
+        if trusted:
+            self.cdata.update(cdata, sections)
+            self.cdata.update(self.overlay, sections)
+        self.ucdata.update(cdata, sections)
+        self.ucdata.update(self.overlay, sections)
+
         if root is None:
             root = os.path.expanduser('~')
         self.fixconfig(root=root)
 
-    def readsections(self, filename, *sections):
-        """Read filename and add only the specified sections to the config data
-
-        The settings are added to the trusted config data.
-        """
-        if not sections:
-            return
-
-        cdata = util.configparser()
-        try:
-            try:
-                fp = open(filename)
-            except IOError, inst:
-                raise util.Abort(_("unable to open %s: %s") %
-                                 (filename, getattr(inst, "strerror", inst)))
-            try:
-                cdata.readfp(fp, filename)
-            finally:
-                fp.close()
-        except ConfigParser.ParsingError, inst:
-            raise util.Abort(_("failed to parse %s\n%s") % (filename, inst))
-
-        for section in sections:
-            if not cdata.has_section(section):
-                cdata.add_section(section)
-
-        updateconfig(cdata, self.cdata, sections)
-        if self.ucdata:
-            updateconfig(cdata, self.ucdata, sections)
-
     def fixconfig(self, section=None, name=None, value=None, root=None):
         # translate paths relative to root (or home) into absolute paths
         if section is None or section == 'paths':
@@ -202,8 +108,7 @@
                 root = os.getcwd()
             items = section and [(name, value)] or []
             for cdata in self.cdata, self.ucdata, self.overlay:
-                if not cdata: continue
-                if not items and cdata.has_section('paths'):
+                if not items and 'paths' in cdata:
                     pathsitems = cdata.items('paths')
                 else:
                     pathsitems = items
@@ -212,73 +117,54 @@
                         cdata.set("paths", n,
                                   os.path.normpath(os.path.join(root, path)))
 
-        # update verbosity/interactive/report_untrusted settings
+        # update ui options
         if section is None or section == 'ui':
-            if name is None or name in ('quiet', 'verbose', 'debug'):
-                self.verbosity_constraints()
-            if name is None or name == 'interactive':
-                interactive = self.configbool("ui", "interactive", None)
-                if interactive is None and self.interactive:
-                    self.interactive = self.isatty()
-                else:
-                    self.interactive = interactive
-            if name is None or name == 'report_untrusted':
-                self.report_untrusted = (
-                    self.configbool("ui", "report_untrusted", True))
+            self.debugflag = self.configbool('ui', 'debug')
+            self.verbose = self.debugflag or self.configbool('ui', 'verbose')
+            self.quiet = not self.debugflag and self.configbool('ui', 'quiet')
+            if self.verbose and self.quiet:
+                self.quiet = self.verbose = False
+
+            self.report_untrusted = self.configbool("ui", "report_untrusted",
+                                                    True)
+            self.interactive = self.configbool("ui", "interactive",
+                                               self.isatty())
+            self.traceback = self.configbool('ui', 'traceback', False)
 
         # update trust information
-        if (section is None or section == 'trusted') and self.trusted_users:
+        if section is None or section == 'trusted':
             for user in self.configlist('trusted', 'users'):
                 self.trusted_users[user] = 1
             for group in self.configlist('trusted', 'groups'):
                 self.trusted_groups[group] = 1
 
     def setconfig(self, section, name, value):
-        if not self.overlay:
-            self.overlay = util.configparser()
         for cdata in (self.overlay, self.cdata, self.ucdata):
-            if not cdata: continue
-            if not cdata.has_section(section):
-                cdata.add_section(section)
             cdata.set(section, name, value)
         self.fixconfig(section, name, value)
 
     def _get_cdata(self, untrusted):
-        if untrusted and self.ucdata:
+        if untrusted:
             return self.ucdata
         return self.cdata
 
-    def _config(self, section, name, default, funcname, untrusted, abort):
-        cdata = self._get_cdata(untrusted)
-        if cdata.has_option(section, name):
-            try:
-                func = getattr(cdata, funcname)
-                return func(section, name)
-            except (ConfigParser.InterpolationError, ValueError), inst:
-                msg = _("Error in configuration section [%s] "
-                        "parameter '%s':\n%s") % (section, name, inst)
-                if abort:
-                    raise util.Abort(msg)
-                self.warn(_("Ignored: %s\n") % msg)
-        return default
-
-    def _configcommon(self, section, name, default, funcname, untrusted):
-        value = self._config(section, name, default, funcname,
-                             untrusted, abort=True)
-        if self.debugflag and not untrusted and self.ucdata:
-            uvalue = self._config(section, name, None, funcname,
-                                  untrusted=True, abort=False)
+    def config(self, section, name, default=None, untrusted=False):
+        value = self._get_cdata(untrusted).get(section, name, default)
+        if self.debugflag and not untrusted:
+            uvalue = self.ucdata.get(section, name)
             if uvalue is not None and uvalue != value:
                 self.warn(_("Ignoring untrusted configuration option "
                             "%s.%s = %s\n") % (section, name, uvalue))
         return value
 
-    def config(self, section, name, default=None, untrusted=False):
-        return self._configcommon(section, name, default, 'get', untrusted)
-
     def configbool(self, section, name, default=False, untrusted=False):
-        return self._configcommon(section, name, default, 'getboolean',
-                                  untrusted)
+        v = self.config(section, name, None, untrusted)
+        if v == None:
+            return default
+        if v.lower() not in _booleans:
+            raise error.ConfigError(_("%s.%s not a boolean ('%s')")
+                                    % (section, name, v))
+        return _booleans[v.lower()]
 
     def configlist(self, section, name, default=None, untrusted=False):
         """Return a list of comma/space separated strings"""
@@ -291,38 +177,20 @@
 
     def has_section(self, section, untrusted=False):
         '''tell whether section exists in config.'''
-        cdata = self._get_cdata(untrusted)
-        return cdata.has_section(section)
-
-    def _configitems(self, section, untrusted, abort):
-        items = {}
-        cdata = self._get_cdata(untrusted)
-        if cdata.has_section(section):
-            try:
-                items.update(dict(cdata.items(section)))
-            except ConfigParser.InterpolationError, inst:
-                msg = _("Error in configuration section [%s]:\n"
-                        "%s") % (section, inst)
-                if abort:
-                    raise util.Abort(msg)
-                self.warn(_("Ignored: %s\n") % msg)
-        return items
+        return section in self._get_cdata(untrusted)
 
     def configitems(self, section, untrusted=False):
-        items = self._configitems(section, untrusted=untrusted, abort=True)
-        if self.debugflag and not untrusted and self.ucdata:
-            uitems = self._configitems(section, untrusted=True, abort=False)
-            for k in util.sort(uitems):
-                if uitems[k] != items.get(k):
+        items = self._get_cdata(untrusted).items(section)
+        if self.debugflag and not untrusted:
+            for k,v in self.ucdata.items(section):
+                if self.cdata.get(section, k) != v:
                     self.warn(_("Ignoring untrusted configuration option "
-                                "%s.%s = %s\n") % (section, k, uitems[k]))
-        return util.sort(items.items())
+                                "%s.%s = %s\n") % (section, k, v))
+        return items
 
     def walkconfig(self, untrusted=False):
         cdata = self._get_cdata(untrusted)
-        sections = cdata.sections()
-        sections.sort()
-        for section in sections:
+        for section in cdata.sections():
             for name, value in self.configitems(section, untrusted):
                 yield section, name, str(value).replace('\n', '\\n')
 
--- a/mercurial/url.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/url.py	Sun Apr 26 11:49:17 2009 +0200
@@ -84,8 +84,8 @@
     '''
     global _safeset, _hex
     if _safeset is None:
-        _safeset = util.set(_safe)
-        _hex = util.set('abcdefABCDEF0123456789')
+        _safeset = set(_safe)
+        _hex = set('abcdefABCDEF0123456789')
     l = list(path)
     for i in xrange(len(l)):
         c = l[i]
--- a/mercurial/util.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/util.py	Sun Apr 26 11:49:17 2009 +0200
@@ -13,18 +13,12 @@
 """
 
 from i18n import _
-import cStringIO, errno, getpass, re, shutil, sys, tempfile, traceback, error
-import os, stat, threading, time, calendar, ConfigParser, locale, glob, osutil
-import imp, unicodedata
+import cStringIO, errno, re, shutil, sys, tempfile, traceback, error
+import os, stat, threading, time, calendar, ConfigParser, glob, osutil
+import imp
 
 # Python compatibility
 
-try:
-    set = set
-    frozenset = frozenset
-except NameError:
-    from sets import Set as set, ImmutableSet as frozenset
-
 _md5 = None
 def md5(s):
     global _md5
@@ -81,71 +75,6 @@
     popen3 = os.popen3
 
 
-_encodingfixup = {'646': 'ascii', 'ANSI_X3.4-1968': 'ascii'}
-
-try:
-    _encoding = os.environ.get("HGENCODING")
-    if sys.platform == 'darwin' and not _encoding:
-        # On darwin, getpreferredencoding ignores the locale environment and
-        # always returns mac-roman. We override this if the environment is
-        # not C (has been customized by the user).
-        locale.setlocale(locale.LC_CTYPE, '')
-        _encoding = locale.getlocale()[1]
-    if not _encoding:
-        _encoding = locale.getpreferredencoding() or 'ascii'
-        _encoding = _encodingfixup.get(_encoding, _encoding)
-except locale.Error:
-    _encoding = 'ascii'
-_encodingmode = os.environ.get("HGENCODINGMODE", "strict")
-_fallbackencoding = 'ISO-8859-1'
-
-def tolocal(s):
-    """
-    Convert a string from internal UTF-8 to local encoding
-
-    All internal strings should be UTF-8 but some repos before the
-    implementation of locale support may contain latin1 or possibly
-    other character sets. We attempt to decode everything strictly
-    using UTF-8, then Latin-1, and failing that, we use UTF-8 and
-    replace unknown characters.
-    """
-    for e in ('UTF-8', _fallbackencoding):
-        try:
-            u = s.decode(e) # attempt strict decoding
-            return u.encode(_encoding, "replace")
-        except LookupError, k:
-            raise Abort(_("%s, please check your locale settings") % k)
-        except UnicodeDecodeError:
-            pass
-    u = s.decode("utf-8", "replace") # last ditch
-    return u.encode(_encoding, "replace")
-
-def fromlocal(s):
-    """
-    Convert a string from the local character encoding to UTF-8
-
-    We attempt to decode strings using the encoding mode set by
-    HGENCODINGMODE, which defaults to 'strict'. In this mode, unknown
-    characters will cause an error message. Other modes include
-    'replace', which replaces unknown characters with a special
-    Unicode character, and 'ignore', which drops the character.
-    """
-    try:
-        return s.decode(_encoding, _encodingmode).encode("utf-8")
-    except UnicodeDecodeError, inst:
-        sub = s[max(0, inst.start-10):inst.start+10]
-        raise Abort("decoding near '%s': %s!" % (sub, inst))
-    except LookupError, k:
-        raise Abort(_("%s, please check your locale settings") % k)
-
-def colwidth(s):
-    "Find the column width of a UTF-8 string for display"
-    d = s.decode(_encoding, 'replace')
-    if hasattr(unicodedata, 'east_asian_width'):
-        w = unicodedata.east_asian_width
-        return sum([w(c) in 'WF' and 2 or 1 for c in d])
-    return len(d)
-
 def version():
     """Return version information if available."""
     try:
@@ -288,13 +217,7 @@
 
 def binary(s):
     """return true if a string is binary data"""
-    if s and '\0' in s:
-        return True
-    return False
-
-def unique(g):
-    """return the uniq elements of iterable g"""
-    return dict.fromkeys(g).keys()
+    return bool(s and '\0' in s)
 
 def sort(l):
     if not isinstance(l, list):
@@ -333,28 +256,11 @@
     if buf:
         yield ''.join(buf)
 
-class Abort(Exception):
-    """Raised if a command needs to print an error and exit."""
+Abort = error.Abort
 
 def always(fn): return True
 def never(fn): return False
 
-def expand_glob(pats):
-    '''On Windows, expand the implicit globs in a list of patterns'''
-    if os.name != 'nt':
-        return list(pats)
-    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
-
 def patkind(name, default):
     """Split a string into an optional pattern kind prefix and the
     actual pattern."""
@@ -858,14 +764,6 @@
         # want to add "foo/bar/baz" before checking if there's a "foo/.hg"
         self.auditeddir.update(prefixes)
 
-def _makelock_file(info, pathname):
-    ld = os.open(pathname, os.O_CREAT | os.O_WRONLY | os.O_EXCL)
-    os.write(ld, info)
-    os.close(ld)
-
-def _readlock_file(pathname):
-    return posixfile(pathname).read()
-
 def nlinks(pathname):
     """Return number of hardlinks for the given file."""
     return os.lstat(pathname).st_nlink
@@ -876,6 +774,50 @@
     def os_link(src, dst):
         raise OSError(0, _("Hardlinks not supported"))
 
+def lookup_reg(key, name=None, scope=None):
+    return None
+
+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 *
+
+def makelock(info, pathname):
+    try:
+        return os.symlink(info, pathname)
+    except OSError, why:
+        if why.errno == errno.EEXIST:
+            raise
+    except AttributeError: # no symlink in os
+        pass
+
+    ld = os.open(pathname, os.O_CREAT | os.O_WRONLY | os.O_EXCL)
+    os.write(ld, info)
+    os.close(ld)
+
+def readlock(pathname):
+    try:
+        return os.readlink(pathname)
+    except OSError, why:
+        if why.errno not in (errno.EINVAL, errno.ENOSYS):
+            raise
+    except AttributeError: # no symlink in os
+        pass
+    return posixfile(pathname).read()
+
 def fstat(fp):
     '''stat file object that may not have fileno method.'''
     try:
@@ -883,104 +825,6 @@
     except AttributeError:
         return os.stat(fp.name)
 
-posixfile = file
-
-def openhardlinks():
-    '''return true if it is safe to hold open file handles to hardlinks'''
-    return True
-
-def _statfiles(files):
-    'Stat each file in files and yield stat or None if file does not exist.'
-    lstat = os.lstat
-    for nf in files:
-        try:
-            st = lstat(nf)
-        except OSError, err:
-            if err.errno not in (errno.ENOENT, errno.ENOTDIR):
-                raise
-            st = None
-        yield st
-
-def _statfiles_clustered(files):
-    '''Stat each file in files and yield stat or None if file does not exist.
-    Cluster and cache stat per directory to minimize number of OS stat calls.'''
-    lstat = os.lstat
-    ncase = os.path.normcase
-    sep   = os.sep
-    dircache = {} # dirname -> filename -> status | None if file does not exist
-    for nf in files:
-        nf  = ncase(nf)
-        pos = nf.rfind(sep)
-        if pos == -1:
-            dir, base = '.', nf
-        else:
-            dir, base = nf[:pos+1], nf[pos+1:]
-        cache = dircache.get(dir, None)
-        if cache is None:
-            try:
-                dmap = dict([(ncase(n), s)
-                    for n, k, s in osutil.listdir(dir, True)])
-            except OSError, err:
-                # handle directory not found in Python version prior to 2.5
-                # Python <= 2.4 returns native Windows code 3 in errno
-                # Python >= 2.5 returns ENOENT and adds winerror field
-                # EINVAL is raised if dir is not a directory.
-                if err.errno not in (3, errno.ENOENT, errno.EINVAL,
-                                     errno.ENOTDIR):
-                    raise
-                dmap = {}
-            cache = dircache.setdefault(dir, dmap)
-        yield cache.get(base, None)
-
-if sys.platform == 'win32':
-    statfiles = _statfiles_clustered
-else:
-    statfiles = _statfiles
-
-getuser_fallback = None
-
-def getuser():
-    '''return name of current user'''
-    try:
-        return getpass.getuser()
-    except ImportError:
-        # import of pwd will fail on windows - try fallback
-        if getuser_fallback:
-            return getuser_fallback()
-    # raised if win32api not available
-    raise Abort(_('user name not available - set USERNAME '
-                  'environment variable'))
-
-def username(uid=None):
-    """Return the name of the user with the given uid.
-
-    If uid is None, return the name of the current user."""
-    try:
-        import pwd
-        if uid is None:
-            uid = os.getuid()
-        try:
-            return pwd.getpwuid(uid)[0]
-        except KeyError:
-            return str(uid)
-    except ImportError:
-        return None
-
-def groupname(gid=None):
-    """Return the name of the group with the given gid.
-
-    If gid is None, return the name of the current group."""
-    try:
-        import grp
-        if gid is None:
-            gid = os.getgid()
-        try:
-            return grp.getgrgid(gid)[0]
-        except KeyError:
-            return str(gid)
-    except ImportError:
-        return None
-
 # File system features
 
 def checkcase(path):
@@ -1089,9 +933,6 @@
     except (OSError, AttributeError):
         return False
 
-_umask = os.umask(0)
-os.umask(_umask)
-
 def needbinarypatch():
     """return True if patches should be applied in binary mode by default."""
     return os.name == 'nt'
@@ -1112,382 +953,6 @@
     '''Are we running in a GUI?'''
     return os.name == "nt" or os.name == "mac" or os.environ.get("DISPLAY")
 
-def lookup_reg(key, name=None, scope=None):
-    return None
-
-# Platform specific variants
-if os.name == 'nt':
-    import msvcrt
-    nulldev = 'NUL:'
-
-    class winstdout:
-        '''stdout on windows misbehaves if sent through a pipe'''
-
-        def __init__(self, fp):
-            self.fp = fp
-
-        def __getattr__(self, key):
-            return getattr(self.fp, key)
-
-        def close(self):
-            try:
-                self.fp.close()
-            except: pass
-
-        def write(self, s):
-            try:
-                # This is workaround for "Not enough space" error on
-                # writing large size of data to console.
-                limit = 16000
-                l = len(s)
-                start = 0
-                while start < l:
-                    end = start + limit
-                    self.fp.write(s[start:end])
-                    start = end
-            except IOError, inst:
-                if inst.errno != 0: raise
-                self.close()
-                raise IOError(errno.EPIPE, 'Broken pipe')
-
-        def flush(self):
-            try:
-                return self.fp.flush()
-            except IOError, inst:
-                if inst.errno != errno.EINVAL: raise
-                self.close()
-                raise IOError(errno.EPIPE, 'Broken pipe')
-
-    sys.stdout = winstdout(sys.stdout)
-
-    def _is_win_9x():
-        '''return true if run on windows 95, 98 or me.'''
-        try:
-            return sys.getwindowsversion()[3] == 1
-        except AttributeError:
-            return 'command' in os.environ.get('comspec', '')
-
-    def openhardlinks():
-        return not _is_win_9x and "win32api" in locals()
-
-    def system_rcpath():
-        try:
-            return system_rcpath_win32()
-        except:
-            return [r'c:\mercurial\mercurial.ini']
-
-    def user_rcpath():
-        '''return os-specific hgrc search path to the user dir'''
-        try:
-            path = user_rcpath_win32()
-        except:
-            home = os.path.expanduser('~')
-            path = [os.path.join(home, 'mercurial.ini'),
-                    os.path.join(home, '.hgrc')]
-        userprofile = os.environ.get('USERPROFILE')
-        if userprofile:
-            path.append(os.path.join(userprofile, 'mercurial.ini'))
-            path.append(os.path.join(userprofile, '.hgrc'))
-        return path
-
-    def parse_patch_output(output_line):
-        """parses the output produced by patch and returns the file name"""
-        pf = output_line[14:]
-        if pf[0] == '`':
-            pf = pf[1:-1] # Remove the quotes
-        return pf
-
-    def sshargs(sshcmd, host, user, port):
-        '''Build argument list for ssh or Plink'''
-        pflag = 'plink' in sshcmd.lower() and '-P' or '-p'
-        args = user and ("%s@%s" % (user, host)) or host
-        return port and ("%s %s %s" % (args, pflag, port)) or args
-
-    def testpid(pid):
-        '''return False if pid dead, True if running or not known'''
-        return True
-
-    def set_flags(f, l, x):
-        pass
-
-    def set_binary(fd):
-        # When run without console, pipes may expose invalid
-        # fileno(), usually set to -1.
-        if hasattr(fd, 'fileno') and fd.fileno() >= 0:
-            msvcrt.setmode(fd.fileno(), os.O_BINARY)
-
-    def pconvert(path):
-        return '/'.join(splitpath(path))
-
-    def localpath(path):
-        return path.replace('/', '\\')
-
-    def normpath(path):
-        return pconvert(os.path.normpath(path))
-
-    makelock = _makelock_file
-    readlock = _readlock_file
-
-    def samestat(s1, s2):
-        return False
-
-    # A sequence of backslashes is special iff it precedes a double quote:
-    # - if there's an even number of backslashes, the double quote is not
-    #   quoted (i.e. it ends the quoted region)
-    # - if there's an odd number of backslashes, the double quote is quoted
-    # - in both cases, every pair of backslashes is unquoted into a single
-    #   backslash
-    # (See http://msdn2.microsoft.com/en-us/library/a1y7w461.aspx )
-    # So, to quote a string, we must surround it in double quotes, double
-    # the number of backslashes that preceed double quotes and add another
-    # backslash before every double quote (being careful with the double
-    # quote we've appended to the end)
-    _quotere = None
-    def shellquote(s):
-        global _quotere
-        if _quotere is None:
-            _quotere = re.compile(r'(\\*)("|\\$)')
-        return '"%s"' % _quotere.sub(r'\1\1\\\2', s)
-
-    def quotecommand(cmd):
-        """Build a command string suitable for os.popen* calls."""
-        # The extra quotes are needed because popen* runs the command
-        # through the current COMSPEC. cmd.exe suppress enclosing quotes.
-        return '"' + cmd + '"'
-
-    def popen(command, mode='r'):
-        # Work around "popen spawned process may not write to stdout
-        # under windows"
-        # http://bugs.python.org/issue1366
-        command += " 2> %s" % nulldev
-        return os.popen(quotecommand(command), mode)
-
-    def explain_exit(code):
-        return _("exited with status %d") % code, code
-
-    # 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):
-        return True
-
-    def find_exe(command):
-        '''Find executable for command searching like cmd.exe does.
-        If command is a basename then PATH is searched for command.
-        PATH isn't searched if command is an absolute or relative path.
-        An extension from PATHEXT is found and added if not present.
-        If command isn't found None is returned.'''
-        pathext = os.environ.get('PATHEXT', '.COM;.EXE;.BAT;.CMD')
-        pathexts = [ext for ext in pathext.lower().split(os.pathsep)]
-        if os.path.splitext(command)[1].lower() in pathexts:
-            pathexts = ['']
-
-        def findexisting(pathcommand):
-            'Will append extension (if needed) and return existing file'
-            for ext in pathexts:
-                executable = pathcommand + ext
-                if os.path.exists(executable):
-                    return executable
-            return None
-
-        if os.sep in command:
-            return findexisting(command)
-
-        for path in os.environ.get('PATH', '').split(os.pathsep):
-            executable = findexisting(os.path.join(path, command))
-            if executable is not None:
-                return executable
-        return None
-
-    def set_signal_handler():
-        try:
-            set_signal_handler_win32()
-        except NameError:
-            pass
-
-    try:
-        # override functions with win32 versions if possible
-        from util_win32 import *
-        if not _is_win_9x():
-            posixfile = posixfile_nt
-    except ImportError:
-        pass
-
-else:
-    nulldev = '/dev/null'
-
-    def rcfiles(path):
-        rcs = [os.path.join(path, 'hgrc')]
-        rcdir = os.path.join(path, 'hgrc.d')
-        try:
-            rcs.extend([os.path.join(rcdir, f)
-                        for f, kind in osutil.listdir(rcdir)
-                        if f.endswith(".rc")])
-        except OSError:
-            pass
-        return rcs
-
-    def system_rcpath():
-        path = []
-        # old mod_python does not set sys.argv
-        if len(getattr(sys, 'argv', [])) > 0:
-            path.extend(rcfiles(os.path.dirname(sys.argv[0]) +
-                                  '/../etc/mercurial'))
-        path.extend(rcfiles('/etc/mercurial'))
-        return path
-
-    def user_rcpath():
-        return [os.path.expanduser('~/.hgrc')]
-
-    def parse_patch_output(output_line):
-        """parses the output produced by patch and returns the file name"""
-        pf = output_line[14:]
-        if os.sys.platform == 'OpenVMS':
-            if pf[0] == '`':
-                pf = pf[1:-1] # Remove the quotes
-        else:
-           if pf.startswith("'") and pf.endswith("'") and " " in pf:
-                pf = pf[1:-1] # Remove the quotes
-        return pf
-
-    def sshargs(sshcmd, host, user, port):
-        '''Build argument list for ssh'''
-        args = user and ("%s@%s" % (user, host)) or host
-        return port and ("%s -p %s" % (args, port)) or args
-
-    def is_exec(f):
-        """check whether a file is executable"""
-        return (os.lstat(f).st_mode & 0100 != 0)
-
-    def set_flags(f, l, x):
-        s = os.lstat(f).st_mode
-        if l:
-            if not stat.S_ISLNK(s):
-                # switch file to link
-                data = file(f).read()
-                os.unlink(f)
-                try:
-                    os.symlink(data, f)
-                except:
-                    # failed to make a link, rewrite file
-                    file(f, "w").write(data)
-            # no chmod needed at this point
-            return
-        if stat.S_ISLNK(s):
-            # switch link to file
-            data = os.readlink(f)
-            os.unlink(f)
-            file(f, "w").write(data)
-            s = 0666 & ~_umask # avoid restatting for chmod
-
-        sx = s & 0100
-        if x and not sx:
-            # Turn on +x for every +r bit when making a file executable
-            # and obey umask.
-            os.chmod(f, s | (s & 0444) >> 2 & ~_umask)
-        elif not x and sx:
-            # Turn off all +x bits
-            os.chmod(f, s & 0666)
-
-    def set_binary(fd):
-        pass
-
-    def pconvert(path):
-        return path
-
-    def localpath(path):
-        return path
-
-    normpath = os.path.normpath
-    samestat = os.path.samestat
-
-    def makelock(info, pathname):
-        try:
-            os.symlink(info, pathname)
-        except OSError, why:
-            if why.errno == errno.EEXIST:
-                raise
-            else:
-                _makelock_file(info, pathname)
-
-    def readlock(pathname):
-        try:
-            return os.readlink(pathname)
-        except OSError, why:
-            if why.errno in (errno.EINVAL, errno.ENOSYS):
-                return _readlock_file(pathname)
-            else:
-                raise
-
-    def shellquote(s):
-        if os.sys.platform == 'OpenVMS':
-            return '"%s"' % s
-        else:
-            return "'%s'" % s.replace("'", "'\\''")
-
-    def quotecommand(cmd):
-        return cmd
-
-    def popen(command, mode='r'):
-        return os.popen(command, mode)
-
-    def testpid(pid):
-        '''return False if pid dead, True if running or not sure'''
-        if os.sys.platform == 'OpenVMS':
-            return True
-        try:
-            os.kill(pid, 0)
-            return True
-        except OSError, inst:
-            return inst.errno != errno.ESRCH
-
-    def explain_exit(code):
-        """return a 2-tuple (desc, code) describing a process's status"""
-        if os.WIFEXITED(code):
-            val = os.WEXITSTATUS(code)
-            return _("exited with status %d") % val, val
-        elif os.WIFSIGNALED(code):
-            val = os.WTERMSIG(code)
-            return _("killed by signal %d") % val, val
-        elif os.WIFSTOPPED(code):
-            val = os.WSTOPSIG(code)
-            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)
-        return st.st_uid == os.getuid()
-
-    def find_exe(command):
-        '''Find executable for command searching like which does.
-        If command is a basename then PATH is searched for command.
-        PATH isn't searched if command is an absolute or relative path.
-        If command isn't found None is returned.'''
-        if sys.platform == 'OpenVMS':
-            return command
-
-        def findexisting(executable):
-            'Will return executable if existing file'
-            if os.path.exists(executable):
-                return executable
-            return None
-
-        if os.sep in command:
-            return findexisting(command)
-
-        for path in os.environ.get('PATH', '').split(os.pathsep):
-            executable = findexisting(os.path.join(path, command))
-            if executable is not None:
-                return executable
-        return None
-
-    def set_signal_handler():
-        pass
-
 def mktempcopy(name, emptyok=False, createmode=None):
     """Create a temporary file with the same contents from name
 
@@ -1511,7 +976,7 @@
             raise
         st_mode = createmode
         if st_mode is None:
-            st_mode = ~_umask
+            st_mode = ~umask
         st_mode &= 0666
     os.chmod(temp, st_mode)
     if emptyok:
@@ -1838,6 +1303,7 @@
         d["d"] = "28"
         return parsedate(date, extendeddateformats, d)[0]
 
+    date = date.strip()
     if date[0] == "<":
         when = upper(date[1:])
         return lambda x: x <= when
@@ -2018,3 +1484,8 @@
     except ImportError:
         pass
     return 80
+
+def iterlines(iterator):
+    for chunk in iterator:
+        for line in chunk.splitlines():
+            yield line
--- a/mercurial/util_win32.py	Sun Apr 26 11:35:53 2009 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,375 +0,0 @@
-# util_win32.py - utility functions that use win32 API
-#
-# Copyright 2005 Matt Mackall <mpm@selenic.com>
-# Copyright 2006 Vadim Gelfer <vadim.gelfer@gmail.com>
-#
-# This software may be used and distributed according to the terms of
-# the GNU General Public License, incorporated herein by reference.
-
-# Mark Hammond's win32all package allows better functionality on
-# Windows.  this module overrides definitions in util.py.  if not
-# available, import of this module will fail, and generic code will be
-# used.
-
-import win32api
-
-import errno, os, sys, pywintypes, win32con, win32file, win32process
-import cStringIO, winerror
-import osutil
-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):
-        self.win_errno, self.win_function, self.win_strerror = err
-        if self.win_strerror.endswith('.'):
-            self.win_strerror = self.win_strerror[:-1]
-
-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)
-        # CreateHardLink sometimes succeeds on mapped drives but
-        # following nlinks() returns 1. Check it now and bail out.
-        if nlinks(src) < 2:
-            try:
-                win32file.DeleteFile(dst)
-            except:
-                pass
-            # Fake hardlinking error
-            raise WinOSError((18, 'CreateHardLink', 'The system cannot '
-                              'move the file to a different disk drive'))
-    except pywintypes.error, details:
-        raise WinOSError(details)
-    except NotImplementedError: # Another fake error win Win98
-        raise WinOSError((18, 'CreateHardLink', 'Hardlinking not supported'))
-
-def nlinks(pathname):
-    """Return number of hardlinks for the given file."""
-    try:
-        fh = win32file.CreateFile(pathname,
-            win32file.GENERIC_READ, win32file.FILE_SHARE_READ,
-            None, win32file.OPEN_EXISTING, 0, None)
-        res = win32file.GetFileInformationByHandle(fh)
-        fh.Close()
-        return res[7]
-    except pywintypes.error:
-        return os.lstat(pathname).st_nlink
-
-def testpid(pid):
-    '''return True if pid is still running or unable to
-    determine, False otherwise'''
-    try:
-        handle = win32api.OpenProcess(
-            win32con.PROCESS_QUERY_INFORMATION, False, pid)
-        if handle:
-            status = win32process.GetExitCodeProcess(handle)
-            return status == win32con.STILL_ACTIVE
-    except pywintypes.error, details:
-        return details[0] != winerror.ERROR_INVALID_PARAMETER
-    return True
-
-def lookup_reg(key, valname=None, scope=None):
-    ''' Look up a key/value name in the Windows registry.
-
-    valname: value name. If unspecified, the default value for the key
-    is used.
-    scope: optionally specify scope for registry lookup, this can be
-    a sequence of scopes to look up in order. Default (CURRENT_USER,
-    LOCAL_MACHINE).
-    '''
-    try:
-        from _winreg import HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, \
-            QueryValueEx, OpenKey
-    except ImportError:
-        return None
-
-    if scope is None:
-        scope = (HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE)
-    elif not isinstance(scope, (list, tuple)):
-        scope = (scope,)
-    for s in scope:
-        try:
-            val = QueryValueEx(OpenKey(s, key), valname)[0]
-            # never let a Unicode string escape into the wild
-            return util.tolocal(val.encode('UTF-8'))
-        except EnvironmentError:
-            pass
-
-def system_rcpath_win32():
-    '''return default os-specific hgrc search path'''
-    proc = win32api.GetCurrentProcess()
-    try:
-        # This will fail on windows < NT
-        filename = win32process.GetModuleFileNameEx(proc, 0)
-    except:
-        filename = win32api.GetModuleFileName(0)
-    # Use mercurial.ini found in directory with hg.exe
-    progrc = os.path.join(os.path.dirname(filename), 'mercurial.ini')
-    if os.path.isfile(progrc):
-        return [progrc]
-    # else look for a system rcpath in the registry
-    try:
-        value = win32api.RegQueryValue(
-                win32con.HKEY_LOCAL_MACHINE, 'SOFTWARE\\Mercurial')
-        rcpath = []
-        for p in value.split(os.pathsep):
-            if p.lower().endswith('mercurial.ini'):
-                rcpath.append(p)
-            elif os.path.isdir(p):
-                for f, kind in osutil.listdir(p):
-                    if f.endswith('.rc'):
-                        rcpath.append(os.path.join(p, f))
-        return rcpath
-    except pywintypes.error:
-        return []
-
-def user_rcpath_win32():
-    '''return os-specific hgrc search path to the user dir'''
-    userdir = os.path.expanduser('~')
-    if sys.getwindowsversion()[3] != 2 and userdir == '~':
-        # We are on win < nt: fetch the APPDATA directory location and use
-        # the parent directory as the user home dir.
-        appdir = shell.SHGetPathFromIDList(
-            shell.SHGetSpecialFolderLocation(0, shellcon.CSIDL_APPDATA))
-        userdir = os.path.dirname(appdir)
-    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.'''
-
-    # tried to use win32file._open_osfhandle to pass fd to os.fdopen,
-    # but does not work at all. wrap win32 file api instead.
-
-    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)
-
-getuser_fallback = win32api.GetUserName
-
-def set_signal_handler_win32():
-    """Register a termination handler for console events including
-    CTRL+C. python signal handlers do not work well with socket
-    operations.
-    """
-    def handler(event):
-        win32process.ExitProcess(1)
-    win32api.SetConsoleCtrlHandler(handler)
--- a/mercurial/verify.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/mercurial/verify.py	Sun Apr 26 11:49:17 2009 +0200
@@ -14,7 +14,7 @@
     try:
         return _verify(repo)
     finally:
-        del lock
+        lock.release()
 
 def _verify(repo):
     mflinkrevs = {}
@@ -72,10 +72,11 @@
     def checkentry(obj, i, node, seen, linkrevs, f):
         lr = obj.linkrev(obj.rev(node))
         if lr < 0 or (havecl and lr not in linkrevs):
-            t = "unexpected"
             if lr < 0 or lr >= len(cl):
-                t = "nonexistent"
-            err(None, _("rev %d point to %s changeset %d") % (i, t, lr), f)
+                msg = _("rev %d points to nonexistent changeset %d")
+            else:
+                msg = _("rev %d points to unexpected changeset %d")
+            err(None, msg % (i, lr), f)
             if linkrevs:
                 warn(_(" (expected %s)") % " ".join(map(str,linkrevs)))
             lr = None # can't be trusted
@@ -170,7 +171,7 @@
         elif size > 0:
             storefiles[f] = True
 
-    files = util.sort(util.unique(filenodes.keys() + filelinkrevs.keys()))
+    files = util.sort(set(filenodes) | set(filelinkrevs))
     for f in files:
         lr = filelinkrevs[f][0]
         try:
@@ -219,7 +220,7 @@
                         warn(_("warning: %s@%s: copy source revision is nullid %s:%s")
                             % (f, lr, rp[0], short(rp[1])))
                     else:
-                        rev = fl2.rev(rp[1])
+                        fl2.rev(rp[1])
             except Exception, inst:
                 exc(lr, _("checking rename of %s") % short(n), inst, f)
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/win32.py	Sun Apr 26 11:49:17 2009 +0200
@@ -0,0 +1,379 @@
+'''
+win32.py - utility functions that use win32 API
+
+Copyright 2005-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, incorporated herein by reference.
+
+Mark Hammond's win32all package allows better functionality on
+Windows.  this module overrides definitions in util.py.  if not
+available, import of this module will fail, and generic code will be
+used.
+'''
+
+import win32api
+
+import errno, os, sys, pywintypes, win32con, win32file, win32process
+import cStringIO, 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):
+        self.win_errno, self.win_function, self.win_strerror = err
+        if self.win_strerror.endswith('.'):
+            self.win_strerror = self.win_strerror[:-1]
+
+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)
+        # CreateHardLink sometimes succeeds on mapped drives but
+        # following nlinks() returns 1. Check it now and bail out.
+        if nlinks(src) < 2:
+            try:
+                win32file.DeleteFile(dst)
+            except:
+                pass
+            # Fake hardlinking error
+            raise WinOSError((18, 'CreateHardLink', 'The system cannot '
+                              'move the file to a different disk drive'))
+    except pywintypes.error, details:
+        raise WinOSError(details)
+    except NotImplementedError: # Another fake error win Win98
+        raise WinOSError((18, 'CreateHardLink', 'Hardlinking not supported'))
+
+def nlinks(pathname):
+    """Return number of hardlinks for the given file."""
+    try:
+        fh = win32file.CreateFile(pathname,
+            win32file.GENERIC_READ, win32file.FILE_SHARE_READ,
+            None, win32file.OPEN_EXISTING, 0, None)
+        res = win32file.GetFileInformationByHandle(fh)
+        fh.Close()
+        return res[7]
+    except pywintypes.error:
+        return os.lstat(pathname).st_nlink
+
+def testpid(pid):
+    '''return True if pid is still running or unable to
+    determine, False otherwise'''
+    try:
+        handle = win32api.OpenProcess(
+            win32con.PROCESS_QUERY_INFORMATION, False, pid)
+        if handle:
+            status = win32process.GetExitCodeProcess(handle)
+            return status == win32con.STILL_ACTIVE
+    except pywintypes.error, details:
+        return details[0] != winerror.ERROR_INVALID_PARAMETER
+    return True
+
+def lookup_reg(key, valname=None, scope=None):
+    ''' Look up a key/value name in the Windows registry.
+
+    valname: value name. If unspecified, the default value for the key
+    is used.
+    scope: optionally specify scope for registry lookup, this can be
+    a sequence of scopes to look up in order. Default (CURRENT_USER,
+    LOCAL_MACHINE).
+    '''
+    try:
+        from _winreg import HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE, \
+            QueryValueEx, OpenKey
+    except ImportError:
+        return None
+
+    if scope is None:
+        scope = (HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE)
+    elif not isinstance(scope, (list, tuple)):
+        scope = (scope,)
+    for s in scope:
+        try:
+            val = QueryValueEx(OpenKey(s, key), valname)[0]
+            # never let a Unicode string escape into the wild
+            return encoding.tolocal(val.encode('UTF-8'))
+        except EnvironmentError:
+            pass
+
+def system_rcpath_win32():
+    '''return default os-specific hgrc search path'''
+    proc = win32api.GetCurrentProcess()
+    try:
+        # This will fail on windows < NT
+        filename = win32process.GetModuleFileNameEx(proc, 0)
+    except:
+        filename = win32api.GetModuleFileName(0)
+    # Use mercurial.ini found in directory with hg.exe
+    progrc = os.path.join(os.path.dirname(filename), 'mercurial.ini')
+    if os.path.isfile(progrc):
+        return [progrc]
+    # else look for a system rcpath in the registry
+    try:
+        value = win32api.RegQueryValue(
+                win32con.HKEY_LOCAL_MACHINE, 'SOFTWARE\\Mercurial')
+        rcpath = []
+        for p in value.split(os.pathsep):
+            if p.lower().endswith('mercurial.ini'):
+                rcpath.append(p)
+            elif os.path.isdir(p):
+                for f, kind in osutil.listdir(p):
+                    if f.endswith('.rc'):
+                        rcpath.append(os.path.join(p, f))
+        return rcpath
+    except pywintypes.error:
+        return []
+
+def user_rcpath_win32():
+    '''return os-specific hgrc search path to the user dir'''
+    userdir = os.path.expanduser('~')
+    if sys.getwindowsversion()[3] != 2 and userdir == '~':
+        # We are on win < nt: fetch the APPDATA directory location and use
+        # the parent directory as the user home dir.
+        appdir = shell.SHGetPathFromIDList(
+            shell.SHGetSpecialFolderLocation(0, shellcon.CSIDL_APPDATA))
+        userdir = os.path.dirname(appdir)
+    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.'''
+
+    # tried to use win32file._open_osfhandle to pass fd to os.fdopen,
+    # but does not work at all. wrap win32 file api instead.
+
+    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()
+
+def set_signal_handler_win32():
+    """Register a termination handler for console events including
+    CTRL+C. python signal handlers do not work well with socket
+    operations.
+    """
+    def handler(event):
+        win32process.ExitProcess(1)
+    win32api.SetConsoleCtrlHandler(handler)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/windows.py	Sun Apr 26 11:49:17 2009 +0200
@@ -0,0 +1,253 @@
+"""
+windows.py - Windows utility function implementations for Mercurial
+
+ Copyright 2005-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.
+"""
+
+from i18n import _
+import errno, msvcrt, os, osutil, re, sys, error
+nulldev = 'NUL:'
+
+umask = 002
+
+class winstdout:
+    '''stdout on windows misbehaves if sent through a pipe'''
+
+    def __init__(self, fp):
+        self.fp = fp
+
+    def __getattr__(self, key):
+        return getattr(self.fp, key)
+
+    def close(self):
+        try:
+            self.fp.close()
+        except: pass
+
+    def write(self, s):
+        try:
+            # This is workaround for "Not enough space" error on
+            # writing large size of data to console.
+            limit = 16000
+            l = len(s)
+            start = 0
+            while start < l:
+                end = start + limit
+                self.fp.write(s[start:end])
+                start = end
+        except IOError, inst:
+            if inst.errno != 0: raise
+            self.close()
+            raise IOError(errno.EPIPE, 'Broken pipe')
+
+    def flush(self):
+        try:
+            return self.fp.flush()
+        except IOError, inst:
+            if inst.errno != errno.EINVAL: raise
+            self.close()
+            raise IOError(errno.EPIPE, 'Broken pipe')
+
+sys.stdout = winstdout(sys.stdout)
+
+def _is_win_9x():
+    '''return true if run on windows 95, 98 or me.'''
+    try:
+        return sys.getwindowsversion()[3] == 1
+    except AttributeError:
+        return 'command' in os.environ.get('comspec', '')
+
+def openhardlinks():
+    return not _is_win_9x and "win32api" in locals()
+
+def system_rcpath():
+    try:
+        return system_rcpath_win32()
+    except:
+        return [r'c:\mercurial\mercurial.ini']
+
+def user_rcpath():
+    '''return os-specific hgrc search path to the user dir'''
+    try:
+        path = user_rcpath_win32()
+    except:
+        home = os.path.expanduser('~')
+        path = [os.path.join(home, 'mercurial.ini'),
+                os.path.join(home, '.hgrc')]
+    userprofile = os.environ.get('USERPROFILE')
+    if userprofile:
+        path.append(os.path.join(userprofile, 'mercurial.ini'))
+        path.append(os.path.join(userprofile, '.hgrc'))
+    return path
+
+def parse_patch_output(output_line):
+    """parses the output produced by patch and returns the file name"""
+    pf = output_line[14:]
+    if pf[0] == '`':
+        pf = pf[1:-1] # Remove the quotes
+    return pf
+
+def sshargs(sshcmd, host, user, port):
+    '''Build argument list for ssh or Plink'''
+    pflag = 'plink' in sshcmd.lower() and '-P' or '-p'
+    args = user and ("%s@%s" % (user, host)) or host
+    return port and ("%s %s %s" % (args, pflag, port)) or args
+
+def testpid(pid):
+    '''return False if pid dead, True if running or not known'''
+    return True
+
+def set_flags(f, l, x):
+    pass
+
+def set_binary(fd):
+    # When run without console, pipes may expose invalid
+    # fileno(), usually set to -1.
+    if hasattr(fd, 'fileno') and fd.fileno() >= 0:
+        msvcrt.setmode(fd.fileno(), os.O_BINARY)
+
+def pconvert(path):
+    return '/'.join(path.split(os.sep))
+
+def localpath(path):
+    return path.replace('/', '\\')
+
+def normpath(path):
+    return pconvert(os.path.normpath(path))
+
+def samestat(s1, s2):
+    return False
+
+# A sequence of backslashes is special iff it precedes a double quote:
+# - if there's an even number of backslashes, the double quote is not
+#   quoted (i.e. it ends the quoted region)
+# - if there's an odd number of backslashes, the double quote is quoted
+# - in both cases, every pair of backslashes is unquoted into a single
+#   backslash
+# (See http://msdn2.microsoft.com/en-us/library/a1y7w461.aspx )
+# So, to quote a string, we must surround it in double quotes, double
+# the number of backslashes that preceed double quotes and add another
+# backslash before every double quote (being careful with the double
+# quote we've appended to the end)
+_quotere = None
+def shellquote(s):
+    global _quotere
+    if _quotere is None:
+        _quotere = re.compile(r'(\\*)("|\\$)')
+    return '"%s"' % _quotere.sub(r'\1\1\\\2', s)
+
+def quotecommand(cmd):
+    """Build a command string suitable for os.popen* calls."""
+    # The extra quotes are needed because popen* runs the command
+    # through the current COMSPEC. cmd.exe suppress enclosing quotes.
+    return '"' + cmd + '"'
+
+def popen(command, mode='r'):
+    # Work around "popen spawned process may not write to stdout
+    # under windows"
+    # http://bugs.python.org/issue1366
+    command += " 2> %s" % nulldev
+    return os.popen(quotecommand(command), mode)
+
+def explain_exit(code):
+    return _("exited with status %d") % code, code
+
+# 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):
+    return True
+
+def find_exe(command):
+    '''Find executable for command searching like cmd.exe does.
+    If command is a basename then PATH is searched for command.
+    PATH isn't searched if command is an absolute or relative path.
+    An extension from PATHEXT is found and added if not present.
+    If command isn't found None is returned.'''
+    pathext = os.environ.get('PATHEXT', '.COM;.EXE;.BAT;.CMD')
+    pathexts = [ext for ext in pathext.lower().split(os.pathsep)]
+    if os.path.splitext(command)[1].lower() in pathexts:
+        pathexts = ['']
+
+    def findexisting(pathcommand):
+        'Will append extension (if needed) and return existing file'
+        for ext in pathexts:
+            executable = pathcommand + ext
+            if os.path.exists(executable):
+                return executable
+        return None
+
+    if os.sep in command:
+        return findexisting(command)
+
+    for path in os.environ.get('PATH', '').split(os.pathsep):
+        executable = findexisting(os.path.join(path, command))
+        if executable is not None:
+            return executable
+    return None
+
+def set_signal_handler():
+    try:
+        set_signal_handler_win32()
+    except NameError:
+        pass
+
+def statfiles(files):
+    '''Stat each file in files and yield stat or None if file does not exist.
+    Cluster and cache stat per directory to minimize number of OS stat calls.'''
+    ncase = os.path.normcase
+    sep   = os.sep
+    dircache = {} # dirname -> filename -> status | None if file does not exist
+    for nf in files:
+        nf  = ncase(nf)
+        pos = nf.rfind(sep)
+        if pos == -1:
+            dir, base = '.', nf
+        else:
+            dir, base = nf[:pos+1], nf[pos+1:]
+        cache = dircache.get(dir, None)
+        if cache is None:
+            try:
+                dmap = dict([(ncase(n), s)
+                    for n, k, s in osutil.listdir(dir, True)])
+            except OSError, err:
+                # handle directory not found in Python version prior to 2.5
+                # Python <= 2.4 returns native Windows code 3 in errno
+                # Python >= 2.5 returns ENOENT and adds winerror field
+                # EINVAL is raised if dir is not a directory.
+                if err.errno not in (3, errno.ENOENT, errno.EINVAL,
+                                     errno.ENOTDIR):
+                    raise
+                dmap = {}
+            cache = dircache.setdefault(dir, dmap)
+        yield cache.get(base, None)
+
+def getuser():
+    '''return name of current user'''
+    raise error.Abort(_('user name not available - set USERNAME '
+                       'environment variable'))
+
+def username(uid=None):
+    """Return the name of the user with the given uid.
+
+    If uid is None, return the name of the current user."""
+    return None
+
+def groupname(gid=None):
+    """Return the name of the group with the given gid.
+
+    If gid is None, return the name of the current group."""
+    return None
+
+posixfile = file
+try:
+    # override functions with win32 versions if possible
+    from win32 import *
+    if not _is_win_9x():
+        posixfile = posixfile_nt
+except ImportError:
+    pass
+
--- a/setup.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/setup.py	Sun Apr 26 11:49:17 2009 +0200
@@ -97,10 +97,7 @@
 except ImportError:
     pass
 
-def getversion():
-    if not os.path.exists('.hg'):
-        return None # not in a repository
-
+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', '')
@@ -108,6 +105,7 @@
     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
 
     try:
         l = os.popen(cmd).read().split()
@@ -122,16 +120,18 @@
         version = l[-1] # latest tag or revision number
         if version.endswith('+'):
             version += time.strftime('%Y%m%d')
-        return version
 
-version = getversion()
-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()
-else:
-    version = "unknown"
+    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__
+    version = __version__.version
+except ImportError:
+    version = 'unknown'
 
 class install_package_data(install_data):
     def finalize_options(self):
@@ -220,7 +220,6 @@
     pass
 
 try:
-    import posix
     ext_modules.append(Extension('mercurial.osutil', ['mercurial/osutil.c']))
 
     if sys.platform == 'linux2' and os.uname()[2] > '2.6':
--- a/templates/paper/error.tmpl	Sun Apr 26 11:35:53 2009 +0200
+++ b/templates/paper/error.tmpl	Sun Apr 26 11:49:17 2009 +0200
@@ -7,7 +7,7 @@
 <div class="menu">
 <div class="logo">
 <a href="http://www.selenic.com/mercurial/">
-<img src="{staticurl}hglogo.png" width=75 height=90 border=0 alt="mercurial"></a>
+<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>
--- a/templates/paper/index.tmpl	Sun Apr 26 11:35:53 2009 +0200
+++ b/templates/paper/index.tmpl	Sun Apr 26 11:49:17 2009 +0200
@@ -6,7 +6,7 @@
 <div class="container">
 <div class="menu">
 <a href="http://www.selenic.com/mercurial/">
-<img src="{staticurl}hglogo.png" width=75 height=90 border=0 alt="mercurial"></a>
+<img src="{staticurl}hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
 </div>
 <div class="main">
 <h2>Mercurial Repositories</h2>
--- a/templates/static/style-monoblue.css	Sun Apr 26 11:35:53 2009 +0200
+++ b/templates/static/style-monoblue.css	Sun Apr 26 11:49:17 2009 +0200
@@ -219,6 +219,9 @@
 table tr td {
   padding: 5px 5px;
 }
+table.annotated tr td {
+  padding: 0px 5px;
+}
 
 span.logtags span {
   padding: 2px 6px;
@@ -250,10 +253,12 @@
   font-size: 1.2em;
   padding: 3px 0;
 }
-div.source {
+td.source {
+  white-space: pre;
+  font-family: monospace;
   margin: 10px 30px 0;
-  font-family: Tahoma, sans-serif, monospace;
-  font-size: 100%;
+  font-size: 1.2em;
+  font-family: monospace;
 }
   div.source div.parity0,
   div.source div.parity1 {
@@ -274,6 +279,12 @@
   color: #999;
   text-align: right;
 }
+.lineno {
+  text-align: right;
+}
+.lineno a {
+  color: #999;
+}
 td.linenr {
   width: 60px;
 }
--- a/tests/hghave	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/hghave	Sun Apr 26 11:49:17 2009 +0200
@@ -199,7 +199,20 @@
         desc = feature[1]
         print name + ':', desc
 
+def test_features():
+    failed = 0
+    for name, feature in checks.iteritems():
+        check, _ = feature
+        try:
+            check()
+        except Exception, e:
+            print "feature %s failed:  %s" % (name, e)
+            failed += 1
+    return failed
+
 parser = optparse.OptionParser("%prog [options] [features]")
+parser.add_option("--test-features", action="store_true",
+                  help="test available features")
 parser.add_option("--list-features", action="store_true",
                   help="list available features")
 parser.add_option("-q", "--quiet", action="store_true",
@@ -211,6 +224,9 @@
         list_features()
         sys.exit(0)
 
+    if options.test_features:
+        sys.exit(test_features())
+
     quiet = options.quiet
 
     failures = 0
@@ -231,9 +247,15 @@
             continue
 
         check, desc = checks[feature]
-        if not negate and not check():
+        try:
+            available = check()
+        except Exception, e:
+            error('hghave check failed: ' + feature)
+            continue
+
+        if not negate and not available:
             error('skipped: missing feature: ' + desc)
-        elif negate and check():
+        elif negate and available:
             error('skipped: system supports %s' % desc)
 
     if failures != 0:
--- a/tests/run-tests.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/run-tests.py	Sun Apr 26 11:49:17 2009 +0200
@@ -36,8 +36,10 @@
 # reserved exit code to skip test (used by hghave)
 SKIPPED_STATUS = 80
 SKIPPED_PREFIX = 'skipped: '
+FAILED_PREFIX  = 'hghave check failed: '
+PYTHON = sys.executable
 
-required_tools = ["python", "diff", "grep", "unzip", "gunzip", "bunzip2", "sed"]
+requiredtools = ["python", "diff", "grep", "unzip", "gunzip", "bunzip2", "sed"]
 
 defaults = {
     'jobs': ('HGTEST_JOBS', 1),
@@ -45,61 +47,73 @@
     'port': ('HGTEST_PORT', 20059),
 }
 
-parser = optparse.OptionParser("%prog [options] [tests]")
-parser.add_option("-C", "--annotate", action="store_true",
-    help="output files annotated with coverage")
-parser.add_option("--child", type="int",
-    help="run as child process, summary to given fd")
-parser.add_option("-c", "--cover", action="store_true",
-    help="print a test coverage report")
-parser.add_option("-f", "--first", action="store_true",
-    help="exit on the first test failure")
-parser.add_option("-i", "--interactive", action="store_true",
-    help="prompt to accept changed output")
-parser.add_option("-j", "--jobs", type="int",
-    help="number of jobs to run in parallel"
-         " (default: $%s or %d)" % defaults['jobs'])
-parser.add_option("--keep-tmpdir", action="store_true",
-    help="keep temporary directory after running tests"
-         " (best used with --tmpdir)")
-parser.add_option("-R", "--restart", action="store_true",
-    help="restart at last error")
-parser.add_option("-p", "--port", type="int",
-    help="port on which servers should listen"
-         " (default: $%s or %d)" % defaults['port'])
-parser.add_option("-r", "--retest", action="store_true",
-    help="retest failed tests")
-parser.add_option("-s", "--cover_stdlib", action="store_true",
-    help="print a test coverage report inc. standard libraries")
-parser.add_option("-t", "--timeout", type="int",
-    help="kill errant tests after TIMEOUT seconds"
-         " (default: $%s or %d)" % defaults['timeout'])
-parser.add_option("--tmpdir", type="string",
-    help="run tests in the given temporary directory")
-parser.add_option("-v", "--verbose", action="store_true",
-    help="output verbose messages")
-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")
-parser.add_option("--pure", action="store_true",
-    help="use pure Python code instead of C extensions")
+def parseargs():
+    parser = optparse.OptionParser("%prog [options] [tests]")
+    parser.add_option("-C", "--annotate", action="store_true",
+        help="output files annotated with coverage")
+    parser.add_option("--child", type="int",
+        help="run as child process, summary to given fd")
+    parser.add_option("-c", "--cover", action="store_true",
+        help="print a test coverage report")
+    parser.add_option("-f", "--first", action="store_true",
+        help="exit on the first test failure")
+    parser.add_option("-i", "--interactive", action="store_true",
+        help="prompt to accept changed output")
+    parser.add_option("-j", "--jobs", type="int",
+        help="number of jobs to run in parallel"
+             " (default: $%s or %d)" % defaults['jobs'])
+    parser.add_option("--keep-tmpdir", action="store_true",
+        help="keep temporary directory after running tests"
+             " (best used with --tmpdir)")
+    parser.add_option("-R", "--restart", action="store_true",
+        help="restart at last error")
+    parser.add_option("-p", "--port", type="int",
+        help="port on which servers should listen"
+             " (default: $%s or %d)" % defaults['port'])
+    parser.add_option("-r", "--retest", action="store_true",
+        help="retest failed tests")
+    parser.add_option("-s", "--cover_stdlib", action="store_true",
+        help="print a test coverage report inc. standard libraries")
+    parser.add_option("-t", "--timeout", type="int",
+        help="kill errant tests after TIMEOUT seconds"
+             " (default: $%s or %d)" % defaults['timeout'])
+    parser.add_option("--tmpdir", type="string",
+        help="run tests in the given temporary directory")
+    parser.add_option("-v", "--verbose", action="store_true",
+        help="output verbose messages")
+    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")
+    parser.add_option("--pure", action="store_true",
+        help="use pure Python code instead of C extensions")
 
-for option, default in defaults.items():
-    defaults[option] = int(os.environ.get(*default))
-parser.set_defaults(**defaults)
-(options, args) = parser.parse_args()
-verbose = options.verbose
-nodiff = options.nodiff
-coverage = options.cover or options.cover_stdlib or options.annotate
-python = sys.executable
+    for option, default in defaults.items():
+        defaults[option] = int(os.environ.get(*default))
+    parser.set_defaults(**defaults)
+    (options, args) = parser.parse_args()
+
+    global vlog
+    options.anycoverage = (options.cover or
+                           options.cover_stdlib or
+                           options.annotate)
 
-if options.jobs < 1:
-    print >> sys.stderr, 'ERROR: -j/--jobs must be positive'
-    sys.exit(1)
-if options.interactive and options.jobs > 1:
-    print '(--interactive overrides --jobs)'
-    options.jobs = 1
+    if options.verbose:
+        def vlog(*msg):
+            for m in msg:
+                print m,
+            print
+    else:
+        vlog = lambda *msg: None
+
+    if options.jobs < 1:
+        print >> sys.stderr, 'ERROR: -j/--jobs must be positive'
+        sys.exit(1)
+    if options.interactive and options.jobs > 1:
+        print '(--interactive overrides --jobs)'
+        options.jobs = 1
+
+    return (options, args)
 
 def rename(src, dst):
     """Like os.rename(), trade atomicity and opened files friendliness
@@ -108,12 +122,6 @@
     shutil.copy(src, dst)
     os.remove(src)
 
-def vlog(*msg):
-    if verbose:
-        for m in msg:
-            print m,
-        print
-
 def splitnewlines(text):
     '''like str.splitlines, but only split on newlines.
     keep line endings.'''
@@ -129,23 +137,29 @@
         lines.append(text[i:n+1])
         i = n + 1
 
-def extract_missing_features(lines):
-    '''Extract missing/unknown features log lines as a list'''
+def parsehghaveoutput(lines):
+    '''Parse hghave log lines.
+    Return tuple of lists (missing, failed):
+      * the missing/unknown features
+      * the features for which existence check failed'''
     missing = []
+    failed = []
     for line in lines:
-        if not line.startswith(SKIPPED_PREFIX):
-            continue
-        line = line.splitlines()[0]
-        missing.append(line[len(SKIPPED_PREFIX):])
+        if line.startswith(SKIPPED_PREFIX):
+            line = line.splitlines()[0]
+            missing.append(line[len(SKIPPED_PREFIX):])
+        elif line.startswith(FAILED_PREFIX):
+            line = line.splitlines()[0]
+            failed.append(line[len(FAILED_PREFIX):])
 
-    return missing
+    return missing, failed
 
-def show_diff(expected, output):
+def showdiff(expected, output):
     for line in difflib.unified_diff(expected, output,
             "Expected output", "Test output"):
         sys.stdout.write(line)
 
-def find_program(program):
+def findprogram(program):
     """Search PATH for a executable program"""
     for p in os.environ.get('PATH', os.defpath).split(os.pathsep):
         name = os.path.join(p, program)
@@ -153,43 +167,43 @@
             return name
     return None
 
-def check_required_tools():
+def checktools():
     # Before we go any further, check for pre-requisite tools
     # stuff from coreutils (cat, rm, etc) are not tested
-    for p in required_tools:
+    for p in requiredtools:
         if os.name == 'nt':
             p += '.exe'
-        found = find_program(p)
+        found = findprogram(p)
         if found:
             vlog("# Found prerequisite", p, "at", found)
         else:
             print "WARNING: Did not find prerequisite tool: "+p
 
-def cleanup_exit():
+def cleanup(options):
     if not options.keep_tmpdir:
-        if verbose:
+        if options.verbose:
             print "# Cleaning up HGTMP", HGTMP
         shutil.rmtree(HGTMP, True)
 
-def use_correct_python():
+def usecorrectpython():
     # some tests run python interpreter. they must use same
     # interpreter we use or bad things will happen.
     exedir, exename = os.path.split(sys.executable)
     if exename == 'python':
-        path = find_program('python')
+        path = findprogram('python')
         if os.path.dirname(path) == exedir:
             return
     vlog('# Making python executable in test path use correct Python')
-    my_python = os.path.join(BINDIR, 'python')
+    mypython = os.path.join(BINDIR, 'python')
     try:
-        os.symlink(sys.executable, my_python)
+        os.symlink(sys.executable, mypython)
     except AttributeError:
         # windows fallback
-        shutil.copyfile(sys.executable, my_python)
-        shutil.copymode(sys.executable, my_python)
+        shutil.copyfile(sys.executable, mypython)
+        shutil.copymode(sys.executable, mypython)
 
-def install_hg():
-    global python
+def installhg(options):
+    global PYTHON
     vlog("# Performing temporary installation of HG")
     installerrs = os.path.join("tests", "install.err")
     pure = options.pure and "--pure" or ""
@@ -202,7 +216,7 @@
            % (sys.executable, pure, INST, PYTHONDIR, BINDIR, installerrs))
     vlog("# Running", cmd)
     if os.system(cmd) == 0:
-        if not verbose:
+        if not options.verbose:
             os.remove(installerrs)
     else:
         f = open(installerrs)
@@ -222,7 +236,7 @@
         pythonpath = pydir
     os.environ["PYTHONPATH"] = pythonpath
 
-    use_correct_python()
+    usecorrectpython()
     global hgpkg
     hgpkg = _hgpath()
 
@@ -238,7 +252,7 @@
     f.close()
     os.chmod(os.path.join(BINDIR, 'diffstat'), 0700)
 
-    if coverage:
+    if options.anycoverage:
         vlog("# Installing coverage wrapper")
         os.environ['COVERAGE_FILE'] = COVERAGE_FILE
         if os.path.exists(COVERAGE_FILE):
@@ -253,10 +267,17 @@
                  os.path.join(BINDIR, '_hg.py')))
         f.close()
         os.chmod(os.path.join(BINDIR, 'hg'), 0700)
-        python = '"%s" "%s" -x' % (sys.executable,
+        PYTHON = '"%s" "%s" -x' % (sys.executable,
                                    os.path.join(TESTDIR,'coverage.py'))
 
-def output_coverage():
+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")
     omit = [BINDIR, TESTDIR, PYTHONDIR]
     if not options.cover_stdlib:
@@ -284,7 +305,7 @@
 def alarmed(signum, frame):
     raise Timeout
 
-def run(cmd):
+def run(cmd, options):
     """Run command in a sub-process, capturing the output (stdout and stderr).
     Return the exist code, and output."""
     # TODO: Use subprocess.Popen if we're running on Python 2.4
@@ -314,14 +335,14 @@
                        % options.timeout)
     return ret, splitnewlines(output)
 
-def run_one(test, skips, fails):
+def runone(options, test, skips, fails):
     '''tristate output:
     None -> skipped
     True -> passed
     False -> failed'''
 
     def skip(msg):
-        if not verbose:
+        if not options.verbose:
             skips.append((test, msg))
         else:
             print "\nSkipping %s: %s" % (test, msg)
@@ -329,7 +350,7 @@
 
     def fail(msg):
         fails.append((test, msg))
-        if not nodiff:
+        if not options.nodiff:
             print "\nERROR: %s %s" % (test, msg)
         return None
 
@@ -367,7 +388,7 @@
     lctest = test.lower()
 
     if lctest.endswith('.py') or firstline == '#!/usr/bin/env python':
-        cmd = '%s "%s"' % (python, testpath)
+        cmd = '%s "%s"' % (PYTHON, testpath)
     elif lctest.endswith('.bat'):
         # do not run batch scripts on non-windows
         if os.name != 'nt':
@@ -390,7 +411,7 @@
         signal.alarm(options.timeout)
 
     vlog("# Running", cmd)
-    ret, out = run(cmd)
+    ret, out = run(cmd, options)
     vlog("# Ret was:", ret)
 
     if options.timeout > 0:
@@ -402,30 +423,34 @@
     # If reference output file exists, check test output against it
     if os.path.exists(ref):
         f = open(ref, "r")
-        ref_out = splitnewlines(f.read())
+        refout = splitnewlines(f.read())
         f.close()
     else:
-        ref_out = []
+        refout = []
     if skipped:
         mark = 's'
-        missing = extract_missing_features(out)
+        missing, failed = parsehghaveoutput(out)
         if not missing:
             missing = ['irrelevant']
-        skip(missing[-1])
-    elif out != ref_out:
+        if failed:
+            fail("hghave failed checking for %s" % failed[-1])
+            skipped = False
+        else:
+            skip(missing[-1])
+    elif out != refout:
         mark = '!'
         if ret:
             fail("output changed and returned error code %d" % ret)
         else:
             fail("output changed")
-        if not nodiff:
-            show_diff(ref_out, out)
+        if not options.nodiff:
+            showdiff(refout, out)
         ret = 1
     elif ret:
         mark = '!'
         fail("returned error code %d" % ret)
 
-    if not verbose:
+    if not options.verbose:
         sys.stdout.write(mark)
         sys.stdout.flush()
 
@@ -467,54 +492,9 @@
         return None
     return ret == 0
 
-if not options.child:
-    os.umask(022)
-
-    check_required_tools()
-
-# Reset some environment variables to well-known values so that
-# the tests produce repeatable output.
-os.environ['LANG'] = os.environ['LC_ALL'] = 'C'
-os.environ['TZ'] = 'GMT'
-os.environ["EMAIL"] = "Foo Bar <foo.bar@example.com>"
-os.environ['CDPATH'] = ''
-
-TESTDIR = os.environ["TESTDIR"] = os.getcwd()
-HGTMP = os.environ['HGTMP'] = os.path.realpath(tempfile.mkdtemp('', 'hgtests.',
-                                               options.tmpdir))
-DAEMON_PIDS = None
-HGRCPATH = None
-
-os.environ["HGEDITOR"] = sys.executable + ' -c "import sys; sys.exit(0)"'
-os.environ["HGMERGE"] = "internal:merge"
-os.environ["HGUSER"]   = "test"
-os.environ["HGENCODING"] = "ascii"
-os.environ["HGENCODINGMODE"] = "strict"
-os.environ["HGPORT"] = str(options.port)
-os.environ["HGPORT1"] = str(options.port + 1)
-os.environ["HGPORT2"] = str(options.port + 2)
-
-if options.with_hg:
-    INST = options.with_hg
-else:
-    INST = os.path.join(HGTMP, "install")
-BINDIR = os.environ["BINDIR"] = os.path.join(INST, "bin")
-PYTHONDIR = os.path.join(INST, "lib", "python")
-COVERAGE_FILE = os.path.join(TESTDIR, ".coverage")
-
-def _hgpath():
-    cmd = '%s -c "import mercurial; print mercurial.__path__[0]"'
-    hgpath = os.popen(cmd % python)
-    path = hgpath.read().strip()
-    hgpath.close()
-    return path
-
-expecthg = os.path.join(HGTMP, 'install', 'lib', 'python', 'mercurial')
-hgpkg = None
-
-def run_children(tests):
+def runchildren(options, expecthg, tests):
     if not options.with_hg:
-        install_hg()
+        installhg(options)
         if hgpkg != expecthg:
             print '# Testing unexpected mercurial: %s' % hgpkg
 
@@ -532,17 +512,16 @@
     tests.reverse()
     jobs = [[] for j in xrange(options.jobs)]
     while tests:
-        for j in xrange(options.jobs):
+        for job in jobs:
             if not tests: break
-            jobs[j].append(tests.pop())
+            job.append(tests.pop())
     fps = {}
-    for j in xrange(len(jobs)):
-        job = jobs[j]
+    for j, job in enumerate(jobs):
         if not job:
             continue
         rfd, wfd = os.pipe()
         childopts = ['--child=%d' % wfd, '--port=%d' % (options.port + j * 3)]
-        cmdline = [python, sys.argv[0]] + opts + childopts + job
+        cmdline = [PYTHON, sys.argv[0]] + opts + childopts + job
         vlog(' '.join(cmdline))
         fps[os.spawnvp(os.P_NOWAIT, cmdline[0], cmdline)] = os.fdopen(rfd, 'r')
         os.close(wfd)
@@ -577,14 +556,14 @@
         tested, skipped, failed)
     sys.exit(failures != 0)
 
-def run_tests(tests):
+def runtests(options, expecthg, 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:
-            install_hg()
+            installhg(options)
 
             if hgpkg != expecthg:
                 print '# Testing unexpected mercurial: %s' % hgpkg
@@ -618,7 +597,7 @@
             if options.retest and not os.path.exists(test + ".err"):
                 skipped += 1
                 continue
-            ret = run_one(test, skips, fails)
+            ret = runone(options, test, skips, fails)
             if ret is None:
                 skipped += 1
             elif not ret:
@@ -654,8 +633,8 @@
             print "# Ran %d tests, %d skipped, %d failed." % (
                 tested, skipped, failed)
 
-        if coverage:
-            output_coverage()
+        if options.anycoverage:
+            outputcoverage(options)
     except KeyboardInterrupt:
         failed = True
         print "\ninterrupted!"
@@ -663,24 +642,67 @@
     if failed:
         sys.exit(1)
 
-if len(args) == 0:
-    args = os.listdir(".")
-    args.sort()
+def main():
+    (options, args) = parseargs()
+    if not options.child:
+        os.umask(022)
+
+        checktools()
+
+    # Reset some environment variables to well-known values so that
+    # the tests produce repeatable output.
+    os.environ['LANG'] = os.environ['LC_ALL'] = 'C'
+    os.environ['TZ'] = 'GMT'
+    os.environ["EMAIL"] = "Foo Bar <foo.bar@example.com>"
+    os.environ['CDPATH'] = ''
 
-tests = []
-for test in args:
-    if (test.startswith("test-") and '~' not in test and
-        ('.' not in test or test.endswith('.py') or
-         test.endswith('.bat'))):
-        tests.append(test)
+    global TESTDIR, HGTMP, INST, BINDIR, PYTHONDIR, COVERAGE_FILE
+    TESTDIR = os.environ["TESTDIR"] = os.getcwd()
+    HGTMP = os.environ['HGTMP'] = os.path.realpath(tempfile.mkdtemp('', 'hgtests.',
+                                                   options.tmpdir))
+    DAEMON_PIDS = None
+    HGRCPATH = None
+
+    os.environ["HGEDITOR"] = sys.executable + ' -c "import sys; sys.exit(0)"'
+    os.environ["HGMERGE"] = "internal:merge"
+    os.environ["HGUSER"]   = "test"
+    os.environ["HGENCODING"] = "ascii"
+    os.environ["HGENCODINGMODE"] = "strict"
+    os.environ["HGPORT"] = str(options.port)
+    os.environ["HGPORT1"] = str(options.port + 1)
+    os.environ["HGPORT2"] = str(options.port + 2)
 
-vlog("# Using TESTDIR", TESTDIR)
-vlog("# Using HGTMP", HGTMP)
+    if options.with_hg:
+        INST = options.with_hg
+    else:
+        INST = os.path.join(HGTMP, "install")
+    BINDIR = os.environ["BINDIR"] = os.path.join(INST, "bin")
+    PYTHONDIR = os.path.join(INST, "lib", "python")
+    COVERAGE_FILE = os.path.join(TESTDIR, ".coverage")
+
+    expecthg = os.path.join(HGTMP, 'install', 'lib', 'python', 'mercurial')
+    hgpkg = None
+
+    if len(args) == 0:
+        args = os.listdir(".")
+        args.sort()
 
-try:
-    if len(tests) > 1 and options.jobs > 1:
-        run_children(tests)
-    else:
-        run_tests(tests)
-finally:
-    cleanup_exit()
+    tests = []
+    for test in args:
+        if (test.startswith("test-") and '~' not in test and
+            ('.' not in test or test.endswith('.py') or
+             test.endswith('.bat'))):
+            tests.append(test)
+
+    vlog("# Using TESTDIR", TESTDIR)
+    vlog("# Using HGTMP", HGTMP)
+
+    try:
+        if len(tests) > 1 and options.jobs > 1:
+            runchildren(options, expecthg, tests)
+        else:
+            runtests(options, expecthg, tests)
+    finally:
+        cleanup(options)
+
+main()
--- a/tests/test-acl.out	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-acl.out	Sun Apr 26 11:49:17 2009 +0200
@@ -473,10 +473,10 @@
 adding quux/file.py revisions
 added 3 changesets with 3 changes to 3 files
 calling hook pretxnchangegroup.acl: hgext.acl.hook
-error: pretxnchangegroup.acl hook failed: unable to open ../acl.config: No such file or directory
+error: pretxnchangegroup.acl hook raised an exception: [Errno 2] No such file or directory: '../acl.config'
 transaction abort!
 rollback completed
-abort: unable to open ../acl.config: No such file or directory
+abort: No such file or directory: ../acl.config
 no rollback information available
 0:6675d58eff77
 
--- a/tests/test-archive	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-archive	Sun Apr 26 11:49:17 2009 +0200
@@ -58,8 +58,8 @@
                     % (os.environ['HGPORT'], node, archive))
 sys.stdout.write(f.read())
 EOF
-http_proxy= python getarchive.py "$TIP" gz | gunzip | tar tf - | sed "s/$QTIP/TIP/"
-http_proxy= python getarchive.py "$TIP" bz2 | bunzip2 | tar tf - | sed "s/$QTIP/TIP/"
+http_proxy= python getarchive.py "$TIP" gz | gunzip | tar tf - 2>/dev/null | sed "s/$QTIP/TIP/"
+http_proxy= python getarchive.py "$TIP" bz2 | bunzip2 | tar tf - 2>/dev/null | sed "s/$QTIP/TIP/"
 http_proxy= python getarchive.py "$TIP" zip > archive.zip
 unzip -t archive.zip | sed "s/$QTIP/TIP/"
 
@@ -69,10 +69,10 @@
 tar tf test.tar
 
 hg archive -t tbz2 -X baz test.tar.bz2
-bunzip2 -dc test.tar.bz2 | tar tf -
+bunzip2 -dc test.tar.bz2 | tar tf - 2>/dev/null
 
 hg archive -t tgz -p %b-%h test-%h.tar.gz
-gzip -dc test-$QTIP.tar.gz | tar tf - | sed "s/$QTIP/TIP/"
+gzip -dc test-$QTIP.tar.gz | tar tf - 2>/dev/null | sed "s/$QTIP/TIP/"
 
 cat > md5comp.py <<EOF
 from mercurial.util import md5
@@ -98,7 +98,7 @@
 hg archive --config ui.archivemeta=false -t zip -r 2 test.zip
 unzip -t test.zip
 
-hg archive -t tar - | tar tf - | sed "s/$QTIP/TIP/"
+hg archive -t tar - | tar tf - 2>/dev/null | sed "s/$QTIP/TIP/"
 
 hg archive -r 0 -t tar rev-%r.tar
 if [ -f rev-0.tar ]; then
--- a/tests/test-churn	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-churn	Sun Apr 26 11:49:17 2009 +0200
@@ -20,7 +20,15 @@
 hg ci -m changeca -u user3 -d 12:00 a
 hg ci -m changecb -u user3 -d 12:15 b
 hg ci -Am addc -u user3 -d 12:30
+mkdir -p d/e
+echo abc > d/e/f1.txt
+hg ci -Am "add d/e/f1.txt" -u user1 -d 12:45 d/e/f1.txt
+mkdir -p d/g
+echo def > d/g/f2.txt
+hg ci -Am "add d/g/f2.txt" -u user1 -d 13:00 d/g/f2.txt
 
+echo % churn separate directories
+hg churn d/e
 echo % churn all
 hg churn
 echo % churn up to rev 2
--- a/tests/test-churn.out	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-churn.out	Sun Apr 26 11:49:17 2009 +0200
@@ -2,22 +2,25 @@
 adding a
 adding b
 adding c
+% churn separate directories
+user1      1 ***************************************************************
 % churn all
 user3      3 ***************************************************************
+user1      3 ***************************************************************
 user2      2 ******************************************
-user1      1 *********************
 % churn up to rev 2
 user2      2 ***************************************************************
 user1      1 *******************************
 % churn with aliases
 alias3      3 **************************************************************
+alias1      3 **************************************************************
 user2       2 *****************************************
-alias1      1 ********************
 % churn with column specifier
 user3      3 ***********************
+user1      3 ***********************
 user2      2 ***************
-user1      1 *******
 % churn by hour
-06      1 **********************
-09      2 ********************************************
-12      3 ******************************************************************
+06      1 ****************
+09      2 *********************************
+12      4 ******************************************************************
+13      1 ****************
--- a/tests/test-clone	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-clone	Sun Apr 26 11:49:17 2009 +0200
@@ -60,4 +60,11 @@
 hg clone --pull a g
 hg -R g verify
 
+echo
+echo % clone to '.'
+mkdir h
+cd h
+hg clone ../a .
+cd ..
+
 exit 0
--- a/tests/test-clone-failure	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-clone-failure	Sun Apr 26 11:49:17 2009 +0200
@@ -43,4 +43,23 @@
 cd ..
 hg clone q
 
+# destination directory not empty
+mkdir a 
+echo stuff > a/a
+hg clone q a
+echo $?
+
+# leave existing directory in place after clone failure
+hg init c
+cd c
+echo c > c
+hg commit -A -m test -d '0 0'
+chmod -rx .hg/store/data
+cd ..
+mkdir d
+hg clone c d 2> err
+echo $?
+test -d d && echo "dir is still here" || echo "dir is gone"
+test -d d/.hg && echo "repo is still here" || echo "repo is gone"
+
 true
--- a/tests/test-clone-failure.out	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-clone-failure.out	Sun Apr 26 11:49:17 2009 +0200
@@ -4,9 +4,15 @@
 255
 abort: repository a not found!
 255
-abort: destination '../a' already exists
+abort: Permission denied: ../a
 255
 abort: repository a not found!
 255
 destination directory: q
-abort: destination 'q' already exists
+abort: destination 'q' is not empty
+abort: destination 'a' is not empty
+255
+adding c
+255
+dir is still here
+repo is gone
--- a/tests/test-clone.out	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-clone.out	Sun Apr 26 11:49:17 2009 +0200
@@ -50,3 +50,7 @@
 crosschecking files in changesets and manifests
 checking files
 2 files, 11 changesets, 11 total revisions
+
+% clone to .
+updating working directory
+2 files updated, 0 files merged, 0 files removed, 0 files unresolved
--- a/tests/test-command-template	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-command-template	Sun Apr 26 11:49:17 2009 +0200
@@ -43,15 +43,15 @@
 echo '#  normal'
 hg log > log.out
 hg log --style default > style.out
-diff log.out style.out
+diff -u log.out style.out
 echo '#  verbose'
 hg log -v > log.out
 hg log -v --style default > style.out
-diff log.out style.out
+diff -u log.out style.out
 echo '#  debug'
 hg log --debug > log.out
 hg log --debug --style default > style.out
-diff log.out style.out
+diff -u log.out style.out
 
 echo '# revision with no copies (used to print a traceback)'
 hg tip -v --template '\n'
@@ -93,7 +93,7 @@
 
 echo "# keys work"
 for key in author branches date desc file_adds file_dels file_mods \
-        files manifest node parents rev tags; do
+        files manifest node parents rev tags diffstat; do
     for mode in '' --verbose --debug; do
         hg log $mode --template "$key$mode: {$key}\n"
     done
--- a/tests/test-command-template.out	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-command-template.out	Sun Apr 26 11:49:17 2009 +0200
@@ -534,6 +534,33 @@
 tags--debug: 
 tags--debug: 
 tags--debug: 
+diffstat: 1: +1/-0
+diffstat: 1: +1/-0
+diffstat: 0: +0/-0
+diffstat: 1: +1/-0
+diffstat: 0: +0/-0
+diffstat: 1: +1/-0
+diffstat: 1: +4/-0
+diffstat: 1: +2/-0
+diffstat: 1: +1/-0
+diffstat--verbose: 1: +1/-0
+diffstat--verbose: 1: +1/-0
+diffstat--verbose: 0: +0/-0
+diffstat--verbose: 1: +1/-0
+diffstat--verbose: 0: +0/-0
+diffstat--verbose: 1: +1/-0
+diffstat--verbose: 1: +4/-0
+diffstat--verbose: 1: +2/-0
+diffstat--verbose: 1: +1/-0
+diffstat--debug: 1: +1/-0
+diffstat--debug: 1: +1/-0
+diffstat--debug: 0: +0/-0
+diffstat--debug: 1: +1/-0
+diffstat--debug: 0: +0/-0
+diffstat--debug: 1: +1/-0
+diffstat--debug: 1: +4/-0
+diffstat--debug: 1: +2/-0
+diffstat--debug: 1: +1/-0
 # filters work
 
 hostname
--- a/tests/test-convert	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-convert	Sun Apr 26 11:49:17 2009 +0200
@@ -44,3 +44,7 @@
 echo 'include b' > filemap
 hg convert --debug --filemap filemap a partialb | \
     grep 'run hg'
+
+echo % converting empty dir should fail "nicely"
+mkdir emptydir
+PATH=$BINDIR hg convert emptydir 2>&1 | sed 's,file://.*/emptydir,.../emptydir,g'
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-convert-authormap	Sun Apr 26 11:49:17 2009 +0200
@@ -0,0 +1,37 @@
+#!/bin/sh
+
+cat >> $HGRCPATH <<EOF
+[extensions]
+convert=
+EOF
+
+# Prepare orig repo
+hg init orig
+cd orig
+echo foo > foo
+HGUSER='user name' hg ci -qAm 'foo' -d '0 0'
+cd ..
+
+# Explicit --authors
+cat > authormap.txt <<EOF
+user name = Long User Name
+
+# comment
+this line is ignored
+EOF
+
+hg convert --authors authormap.txt orig new
+echo $?
+cat new/.hg/authormap
+
+hg -Rnew log
+rm -rf new
+
+# Implicit .hg/authormap
+hg init new
+mv authormap.txt new/.hg/authormap
+
+hg convert orig new
+echo $?
+
+hg -Rnew log
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-convert-authormap.out	Sun Apr 26 11:49:17 2009 +0200
@@ -0,0 +1,27 @@
+initializing destination new repository
+Ignoring bad line in author map file authormap.txt: this line is ignored
+scanning source...
+sorting...
+converting...
+0 foo
+Writing author map file new/.hg/authormap
+0
+user name=Long User Name
+changeset:   0:d89716e88087
+tag:         tip
+user:        Long User Name
+date:        Thu Jan 01 00:00:00 1970 +0000
+summary:     foo
+
+Ignoring bad line in author map file new/.hg/authormap: this line is ignored
+scanning source...
+sorting...
+converting...
+0 foo
+0
+changeset:   0:d89716e88087
+tag:         tip
+user:        Long User Name
+date:        Thu Jan 01 00:00:00 1970 +0000
+summary:     foo
+
--- a/tests/test-convert-bzr-merges	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-convert-bzr-merges	Sun Apr 26 11:49:17 2009 +0200
@@ -1,5 +1,9 @@
 #!/bin/sh
 
+# N.B. bzr 1.13 has a bug that breaks this test.  If you see this
+# test fail, check your bzr version.  Upgrading to bzr 1.13.1
+# should fix it.
+
 . "$TESTDIR/bzr-definitions"
 
 echo % test multiple merges at once
--- a/tests/test-convert-cvs-branch.out	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-convert-cvs-branch.out	Sun Apr 26 11:49:17 2009 +0200
@@ -23,13 +23,13 @@
 % Convert
 assuming destination src-hg
 initializing destination src-hg repository
+connecting to cvsrepo
+scanning source...
 using builtin cvsps
 collecting CVS rlog
 7 log entries
 creating changesets
 5 changeset entries
-connecting to cvsrepo
-scanning source...
 sorting...
 converting...
 4 Initial revision
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-convert-cvs-builtincvsps-cvsnt-mergepoints	Sun Apr 26 11:49:17 2009 +0200
@@ -0,0 +1,78 @@
+#!/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 ..
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-convert-cvs-builtincvsps-cvsnt-mergepoints.out	Sun Apr 26 11:49:17 2009 +0200
@@ -0,0 +1,138 @@
+% 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 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-convert-cvs-builtincvsps-cvsnt-mergepoints.rlog	Sun Apr 26 11:49:17 2009 +0200
@@ -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-cvs-builtincvsps.out	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-convert-cvs-builtincvsps.out	Sun Apr 26 11:49:17 2009 +0200
@@ -13,13 +13,13 @@
 checking in src/b/c,v
 % convert fresh repo
 initializing destination src-hg repository
+connecting to cvsrepo
+scanning source...
 using builtin cvsps
 collecting CVS rlog
 5 log entries
 creating changesets
 3 changeset entries
-connecting to cvsrepo
-scanning source...
 sorting...
 converting...
 2 Initial revision
@@ -31,13 +31,13 @@
 c
 % convert fresh repo with --filemap
 initializing destination src-filemap repository
+connecting to cvsrepo
+scanning source...
 using builtin cvsps
 collecting CVS rlog
 5 log entries
 creating changesets
 3 changeset entries
-connecting to cvsrepo
-scanning source...
 sorting...
 converting...
 2 Initial revision
@@ -54,13 +54,13 @@
 checking in src/a,v
 checking in src/b/c,v
 % convert again
+connecting to cvsrepo
+scanning source...
 using builtin cvsps
 collecting CVS rlog
 7 log entries
 creating changesets
 4 changeset entries
-connecting to cvsrepo
-scanning source...
 sorting...
 converting...
 0 ci1
@@ -70,13 +70,13 @@
 c
 c
 % convert again with --filemap
+connecting to cvsrepo
+scanning source...
 using builtin cvsps
 collecting CVS rlog
 7 log entries
 creating changesets
 4 changeset entries
-connecting to cvsrepo
-scanning source...
 sorting...
 converting...
 0 ci1
@@ -93,13 +93,13 @@
 T b/c
 checking in src/b/c,v
 % convert again
+connecting to cvsrepo
+scanning source...
 using builtin cvsps
 collecting CVS rlog
 8 log entries
 creating changesets
 5 changeset entries
-connecting to cvsrepo
-scanning source...
 sorting...
 converting...
 0 ci2
@@ -107,13 +107,13 @@
 c
 d
 % convert again with --filemap
+connecting to cvsrepo
+scanning source...
 using builtin cvsps
 collecting CVS rlog
 8 log entries
 creating changesets
 5 changeset entries
-connecting to cvsrepo
-scanning source...
 sorting...
 converting...
 0 ci2
@@ -127,13 +127,13 @@
 % commit a new revision with funny log message
 checking in src/a,v
 % convert again
+connecting to cvsrepo
+scanning source...
 using builtin cvsps
 collecting CVS rlog
 9 log entries
 creating changesets
 6 changeset entries
-connecting to cvsrepo
-scanning source...
 sorting...
 converting...
 0 funny
--- a/tests/test-convert-cvs-synthetic.out	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-convert-cvs-synthetic.out	Sun Apr 26 11:49:17 2009 +0200
@@ -37,13 +37,13 @@
 revision 1.1.2.1
 % convert to hg
 initializing destination proj.hg repository
+connecting to *REPO*
+scanning source...
 using builtin cvsps
 collecting CVS rlog
 9 log entries
 creating changesets
 4 changeset entries
-connecting to *REPO*
-scanning source...
 sorting...
 converting...
 3 add file1 on trunk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-convert-mtn-rename-directory.out	Sun Apr 26 11:49:17 2009 +0200
@@ -0,0 +1,23 @@
+% tedious monotone keys configuration
+% create monotone repository
+mtn: adding dir1 to workspace manifest
+mtn: adding dir1/subdir1 to workspace manifest
+mtn: adding dir1/subdir1/file1 to workspace manifest
+mtn: beginning commit on branch 'com.selenic.test'
+mtn: committed revision 5ed13ff5582d8d1e319f079b694a37d2b45edfc8
+% rename directory
+mtn: skipping dir1, already accounted for in workspace
+mtn: renaming dir1/subdir1 to dir1/subdir2 in workspace manifest
+mtn: beginning commit on branch 'com.selenic.test'
+mtn: committed revision 985204142a822b22ee86b509d61f3c5ab6857d2b
+% convert
+assuming destination repo.mtn-hg
+initializing destination repo.mtn-hg repository
+scanning source...
+sorting...
+converting...
+1 initialize
+0 rename
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+% manifest
+dir1/subdir2/file1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-convert-splicemap	Sun Apr 26 11:49:17 2009 +0200
@@ -0,0 +1,51 @@
+#!/bin/sh
+
+echo "[extensions]" >> $HGRCPATH
+echo "convert=" >> $HGRCPATH
+echo 'hgext.graphlog =' >> $HGRCPATH
+
+glog()
+{
+    hg glog --template '#rev# "#desc|firstline#" files: #files#\n' "$@"
+}
+
+hg init repo1
+cd repo1
+echo a > a
+hg ci -Am adda
+echo b > b
+echo a >> a
+hg ci -Am addb
+PARENTID1=`hg id --debug -i`
+echo c > c
+hg ci -Am addc
+PARENTID2=`hg id --debug -i`
+cd ..
+
+hg init repo2
+cd repo2
+echo b > a
+echo d > d
+hg ci -Am addaandd
+CHILDID1=`hg id --debug -i`
+echo d >> d
+hg ci -Am changed
+CHILDID2=`hg id --debug -i`
+echo e > e
+hg ci -Am adde
+cd ..
+
+echo '% test invalid splicemap'
+cat > splicemap <<EOF
+$CHILDID2
+EOF
+hg convert --splicemap splicemap repo2 repo1
+
+echo '% splice repo2 on repo1'
+cat > splicemap <<EOF
+$CHILDID1 $PARENTID1
+$CHILDID2 $PARENTID2,$CHILDID1
+EOF
+hg clone repo1 target1
+hg convert --splicemap splicemap repo2 target1
+glog -R target1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-convert-splicemap.out	Sun Apr 26 11:49:17 2009 +0200
@@ -0,0 +1,31 @@
+adding a
+adding b
+adding c
+adding a
+adding d
+adding e
+% test invalid splicemap
+abort: syntax error in splicemap(1): key/value pair expected
+% splice repo2 on repo1
+updating working directory
+3 files updated, 0 files merged, 0 files removed, 0 files unresolved
+scanning source...
+sorting...
+converting...
+2 addaandd
+spliced in ['6d4c2037ddc2cb2627ac3a244ecce35283268f8e'] as parents of 527cdedf31fbd5ea708aa14eeecf53d4676f38db
+1 changed
+spliced in ['e55c719b85b60e5102fac26110ba626e7cb6b7dc', '527cdedf31fbd5ea708aa14eeecf53d4676f38db'] as parents of e4ea00df91897da3079a10fab658c1eddba6617b
+0 adde
+o  5 "adde" files: e
+|
+o    4 "changed" files: d
+|\
+| o  3 "addaandd" files: a d
+| |
+@ |  2 "addc" files: c
+|/
+o  1 "addb" files: a b
+|
+o  0 "adda" files: a
+
--- a/tests/test-convert.out	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-convert.out	Sun Apr 26 11:49:17 2009 +0200
@@ -17,32 +17,32 @@
     - Mercurial [hg]
     - Subversion [svn] (history on branches is not preserved)
 
-    If no revision is given, all revisions will be converted. Otherwise,
-    convert will only import up to the named revision (given in a format
-    understood by the source).
+    If no revision is given, all revisions will be converted.
+    Otherwise, convert will only import up to the named revision
+    (given in a format understood by the source).
 
     If no destination directory name is specified, it defaults to the
-    basename of the source with '-hg' appended.  If the destination
+    basename of the source with '-hg' appended. If the destination
     repository doesn't exist, it will be created.
 
     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 revision, like so:
+    (<dest>/.hg/shamap by default). The <REVMAP> is a simple text file
+    that maps each source commit ID to the destination ID for that
+    revision, like so:
     <source ID> <destination ID>
 
-    If the file doesn't exist, it's automatically created.  It's updated
-    on each commit copied, so convert-repo can be interrupted and can
-    be run repeatedly to copy new commits.
+    If the file doesn't exist, it's automatically created. It's
+    updated on each commit copied, so convert-repo can be interrupted
+    and can be run repeatedly to copy new commits.
 
-    The [username mapping] file is a simple text file that maps each source
-    commit author to a destination commit author. It is handy for source SCMs
-    that use unix logins to identify authors (eg: CVS). One line per author
-    mapping and the line format is:
+    The [username mapping] file is a simple text file that maps each
+    source commit author to a destination commit author. It is handy
+    for source SCMs that use unix logins to identify authors (eg:
+    CVS). One line per author mapping and the line format is:
     srcauthor=whatever string you want
 
     The filemap is a file that allows filtering and remapping of files
-    and directories.  Comment lines start with '#'.  Each line can
+    and directories. Comment lines start with '#'. Each line can
     contain one of the following directives:
 
       include path/to/file
@@ -53,32 +53,33 @@
 
     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 dirs not explicitely included.
+    exclusion of all other files and directories not explicitely 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 path to
-    rename to.
+    The 'rename' directive renames a file or directory. To rename from
+    a subdirectory into the root of the repository, use '.' as the
+    path to rename to.
 
     The splicemap is a file that allows insertion of synthetic
-    history, letting you specify the parents of a revision.  This is
+    history, letting you specify the parents of a revision. This is
     useful if you want to e.g. give a Subversion merge two parents, or
-    graft two disconnected series of history together.  Each entry
+    graft two disconnected series of history together. Each entry
     contains a key, followed by a space, followed by one or two
-    values, separated by spaces.  The key is the revision ID in the
-    source revision control system whose parents should be modified
-    (same format as a key in .hg/shamap).  The values are the revision
-    IDs (in either the source or destination revision control system)
-    that should be used as the new parents for that node.
+    comma-separated values. The key is the revision ID in the source
+    revision control system whose parents should be modified (same
+    format as a key in .hg/shamap). The values are the revision IDs
+    (in either the source or destination revision control system) that
+    should be used as the new parents for that node.
 
     Mercurial Source
     -----------------
 
-    --config convert.hg.ignoreerrors=False (boolean)
+    --config convert.hg.ignoreerrors=False    (boolean)
         ignore integrity errors when reading. Use it to fix Mercurial
         repositories with missing revlogs, by converting from and to
         Mercurial.
-    --config convert.hg.saverev=False          (boolean)
-        store original revision ID in changeset (forces target IDs to change)
+    --config convert.hg.saverev=False         (boolean)
+        store original revision ID in changeset (forces target IDs to
+        change)
     --config convert.hg.startrev=0            (hg revision identifier)
         convert start revision and its descendants
 
@@ -87,11 +88,11 @@
 
     CVS source will use a sandbox (i.e. a checked-out copy) from CVS
     to indicate the starting point of what will be converted. Direct
-    access to the repository files is not needed, unless of course
-    the repository is :local:. The conversion uses the top level
-    directory 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
+    access to the repository files is not needed, unless of course the
+    repository is :local:. The conversion uses the top level directory
+    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
     sandbox is ignored.
 
@@ -107,34 +108,37 @@
     Internal cvsps is selected by setting
         --config convert.cvsps=builtin
     and has a few more configurable options:
-        --config convert.cvsps.fuzz=60   (integer)
-            Specify the maximum time (in seconds) that is allowed between
-            commits with identical user and log message in a 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.fuzz=60        (integer)
+            Specify the maximum time (in seconds) that is allowed
+            between commits with identical user and log message in a
+            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]+)}}'
-            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.
+            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]+)}}'
-            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 indicated in the
-            regex as the second parent of the changeset.
+            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
+            indicated in the regex as the second parent of the
+            changeset.
 
-    The hgext/convert/cvsps wrapper script allows the builtin changeset
-    merging code to be run without doing a conversion. Its parameters and
-    output are similar to that of cvsps 2.1.
+    The hgext/convert/cvsps wrapper script allows the builtin
+    changeset merging code to be run without doing a conversion. Its
+    parameters and output are similar to that of cvsps 2.1.
 
     Subversion Source
     -----------------
 
     Subversion source detects classical trunk/branches/tags layouts.
     By default, the supplied "svn://repo/path/" source URL is
-    converted as a single branch. If "svn://repo/path/trunk" exists
-    it replaces the default branch. If "svn://repo/path/branches"
-    exists, its subdirectories are listed as possible branches. If
+    converted as a single branch. If "svn://repo/path/trunk" exists it
+    replaces the default branch. If "svn://repo/path/branches" exists,
+    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
@@ -158,16 +162,17 @@
     Perforce Source
     ---------------
 
-    The Perforce (P4) importer can be given a p4 depot path or a client
-    specification as source. It will convert all files in the source to
-    a flat Mercurial repository, ignoring labels, branches and integrations.
-    Note that when a depot path is given you then usually should specify a
-    target directory, because otherwise the target may be named ...-hg.
+    The Perforce (P4) importer can be given a p4 depot path or a
+    client specification as source. It will convert all files in the
+    source to a flat Mercurial repository, ignoring labels, branches
+    and integrations. Note that when a depot path is given you then
+    usually should specify a target directory, because otherwise the
+    target may be named ...-hg.
 
-    It is possible to limit the amount of source history to be converted
-    by specifying an initial Perforce revision.
+    It is possible to limit the amount of source history to be
+    converted by specifying an initial Perforce revision.
 
-    --config convert.p4.startrev=0           (perforce changelist number)
+    --config convert.p4.startrev=0            (perforce changelist number)
         specify initial Perforce revision.
 
 
@@ -226,3 +231,16 @@
 run hg sink pre-conversion action
 run hg sink post-conversion action
 run hg source post-conversion action
+% converting empty dir should fail nicely
+assuming destination emptydir-hg
+initializing destination emptydir-hg repository
+emptydir does not look like a CVS checkout
+emptydir does not look like a Git repo
+emptydir does not look like a Subversion repo
+emptydir is not a local Mercurial repo
+emptydir does not look like a darcs repo
+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
+abort: emptydir: missing or unsupported repository
--- a/tests/test-debugcomplete	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-debugcomplete	Sun Apr 26 11:49:17 2009 +0200
@@ -36,4 +36,8 @@
 echo '% Show an error if we use --options with an ambiguous abbreviation'
 hg debugcomplete --options s
 
+echo
+echo '% Show all commands + options'
+hg debugcommands
+
 exit 0
--- a/tests/test-debugcomplete.out	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-debugcomplete.out	Sun Apr 26 11:49:17 2009 +0200
@@ -60,6 +60,7 @@
 % Show debug commands if there are no other candidates
 debugancestor
 debugcheckstate
+debugcommands
 debugcomplete
 debugconfig
 debugdata
@@ -96,7 +97,6 @@
 --encoding
 --encodingmode
 --help
---lsprof
 --noninteractive
 --profile
 --quiet
@@ -126,7 +126,6 @@
 --errorlog
 --help
 --ipv6
---lsprof
 --name
 --noninteractive
 --pid-file
@@ -160,3 +159,69 @@
 % Show an error if we use --options with an ambiguous abbreviation
 hg: command 's' is ambiguous:
     serve showconfig status
+
+% Show all commands + options
+add: include, exclude, dry-run
+annotate: rev, follow, text, user, date, number, changeset, line-number, include, exclude
+clone: noupdate, rev, pull, uncompressed, ssh, remotecmd
+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
+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
+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
+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
+bundle: force, rev, base, all, type, ssh, remotecmd
+cat: output, rev, decode, include, exclude
+copy: after, force, include, exclude, dry-run
+debugancestor: 
+debugcheckstate: 
+debugcommands: 
+debugcomplete: options
+debugdata: 
+debugdate: extended
+debugfsinfo: 
+debugindex: 
+debugindexdot: 
+debuginstall: 
+debugrawcommit: parent, files, message, logfile, date, user
+debugrebuildstate: rev
+debugrename: rev
+debugsetparents: 
+debugstate: nodates
+debugwalk: include, exclude
+grep: print0, all, follow, ignore-case, files-with-matches, line-number, rev, user, date, include, exclude
+heads: rev, active, style, template
+help: 
+identify: rev, num, id, branch, tags
+import: strip, base, force, no-commit, exact, import-branch, message, logfile, date, user, similarity
+incoming: force, newest-first, bundle, rev, patch, git, limit, no-merges, style, template, ssh, remotecmd
+locate: rev, print0, fullpath, include, exclude
+manifest: rev
+outgoing: force, rev, newest-first, patch, git, limit, no-merges, style, template, ssh, remotecmd
+paths: 
+recover: 
+rename: after, force, include, exclude, dry-run
+resolve: all, list, mark, unmark, include, exclude
+revert: all, date, rev, no-backup, include, exclude, dry-run
+rollback: 
+root: 
+showconfig: untrusted
+tag: force, local, rev, remove, message, date, user
+tags: 
+tip: patch, git, style, template
+unbundle: update
+verify: 
+version: 
--- a/tests/test-dispatch.out	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-dispatch.out	Sun Apr 26 11:49:17 2009 +0200
@@ -5,8 +5,8 @@
 
 output the current or given revision of files
 
-    Print the specified files as they were at the given revision.
-    If no revision is given, the parent of the working directory is used,
+    Print the specified files as they were at the given revision. If
+    no revision is given, the parent of the working directory is used,
     or tip if no revision is checked out.
 
     Output may be to a file, in which case the name of the file is
@@ -14,7 +14,7 @@
     for the export command, with the following additions:
 
     %s   basename of file being printed
-    %d   dirname of file being printed, or '.' if in repo root
+    %d   dirname of file being printed, or '.' if in repository root
     %p   root-relative path name of file being printed
 
 options:
--- a/tests/test-extension.out	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-extension.out	Sun Apr 26 11:49:17 2009 +0200
@@ -40,7 +40,8 @@
 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
@@ -48,7 +49,6 @@
     --debugger        start debugger
     --encoding        set the charset encoding (default: ascii)
     --encodingmode    set the charset encoding mode (default: strict)
-    --lsprof          print improved command execution profile
     --traceback       print traceback on exception
     --time            time how long the command takes
     --profile         print command execution profile
--- a/tests/test-globalopts.out	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-globalopts.out	Sun Apr 26 11:49:17 2009 +0200
@@ -176,7 +176,7 @@
  manifest     output the current or given revision of the project manifest
  merge        merge working directory with another revision
  outgoing     show changesets not found in destination
- parents      show the parents of the working dir or revision
+ parents      show the parents of the working directory or revision
  paths        show aliases for remote repositories
  pull         pull changes from the specified source
  push         push changes to the specified destination
@@ -184,9 +184,9 @@
  remove       remove the specified files on the next commit
  rename       rename files; equivalent of copy + remove
  resolve      retry file merges from a merge or update
- revert       restore individual files or dirs to an earlier state
+ revert       restore individual files or directories to an earlier state
  rollback     roll back the last transaction
- root         print the root (top) of the current working dir
+ root         print the root (top) of the current working directory
  serve        export the repository via HTTP
  showconfig   show combined config settings from all hgrc files
  status       show changed files in the working directory
@@ -207,7 +207,7 @@
  multirevs    Specifying Multiple Revisions
  diffs        Diff Formats
  templating   Template Usage
- urls         Url Paths
+ urls         URL Paths
 
 use "hg -v help" to show aliases and global options
 Mercurial Distributed SCM
@@ -241,7 +241,7 @@
  manifest     output the current or given revision of the project manifest
  merge        merge working directory with another revision
  outgoing     show changesets not found in destination
- parents      show the parents of the working dir or revision
+ parents      show the parents of the working directory or revision
  paths        show aliases for remote repositories
  pull         pull changes from the specified source
  push         push changes to the specified destination
@@ -249,9 +249,9 @@
  remove       remove the specified files on the next commit
  rename       rename files; equivalent of copy + remove
  resolve      retry file merges from a merge or update
- revert       restore individual files or dirs to an earlier state
+ revert       restore individual files or directories to an earlier state
  rollback     roll back the last transaction
- root         print the root (top) of the current working dir
+ root         print the root (top) of the current working directory
  serve        export the repository via HTTP
  showconfig   show combined config settings from all hgrc files
  status       show changed files in the working directory
@@ -272,7 +272,7 @@
  multirevs    Specifying Multiple Revisions
  diffs        Diff Formats
  templating   Template Usage
- urls         Url Paths
+ urls         URL Paths
 
 use "hg -v help" to show aliases and global options
 %% not tested: --debugger
--- a/tests/test-help.out	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-help.out	Sun Apr 26 11:49:17 2009 +0200
@@ -11,7 +11,7 @@
  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
- parents    show the parents of the working dir or revision
+ parents    show the parents of the working directory or revision
  pull       pull changes from the specified source
  push       push changes to the specified destination
  remove     remove the specified files on the next commit
@@ -29,7 +29,7 @@
  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
- parents    show the parents of the working dir or revision
+ parents    show the parents of the working directory or revision
  pull       pull changes from the specified source
  push       push changes to the specified destination
  remove     remove the specified files on the next commit
@@ -67,7 +67,7 @@
  manifest     output the current or given revision of the project manifest
  merge        merge working directory with another revision
  outgoing     show changesets not found in destination
- parents      show the parents of the working dir or revision
+ parents      show the parents of the working directory or revision
  paths        show aliases for remote repositories
  pull         pull changes from the specified source
  push         push changes to the specified destination
@@ -75,9 +75,9 @@
  remove       remove the specified files on the next commit
  rename       rename files; equivalent of copy + remove
  resolve      retry file merges from a merge or update
- revert       restore individual files or dirs to an earlier state
+ revert       restore individual files or directories to an earlier state
  rollback     roll back the last transaction
- root         print the root (top) of the current working dir
+ root         print the root (top) of the current working directory
  serve        export the repository via HTTP
  showconfig   show combined config settings from all hgrc files
  status       show changed files in the working directory
@@ -98,7 +98,7 @@
  multirevs    Specifying Multiple Revisions
  diffs        Diff Formats
  templating   Template Usage
- urls         Url Paths
+ urls         URL Paths
 
 use "hg -v help" to show aliases and global options
  add          add the specified files on the next commit
@@ -128,7 +128,7 @@
  manifest     output the current or given revision of the project manifest
  merge        merge working directory with another revision
  outgoing     show changesets not found in destination
- parents      show the parents of the working dir or revision
+ parents      show the parents of the working directory or revision
  paths        show aliases for remote repositories
  pull         pull changes from the specified source
  push         push changes to the specified destination
@@ -136,9 +136,9 @@
  remove       remove the specified files on the next commit
  rename       rename files; equivalent of copy + remove
  resolve      retry file merges from a merge or update
- revert       restore individual files or dirs to an earlier state
+ revert       restore individual files or directories to an earlier state
  rollback     roll back the last transaction
- root         print the root (top) of the current working dir
+ root         print the root (top) of the current working directory
  serve        export the repository via HTTP
  showconfig   show combined config settings from all hgrc files
  status       show changed files in the working directory
@@ -159,12 +159,13 @@
  multirevs    Specifying Multiple Revisions
  diffs        Diff Formats
  templating   Template Usage
- urls         Url Paths
+ urls         URL Paths
 hg add [OPTION]... [FILE]...
 
 add the specified files on the next commit
 
-    Schedule files to be version controlled and added to the repository.
+    Schedule files to be version controlled and added to the
+    repository.
 
     The files will be added to the repository at the next commit. To
     undo an add before that, see hg revert.
@@ -183,7 +184,8 @@
 
 add the specified files on the next commit
 
-    Schedule files to be version controlled and added to the repository.
+    Schedule files to be version controlled and added to the
+    repository.
 
     The files will be added to the repository at the next commit. To
     undo an add before that, see hg revert.
@@ -215,12 +217,12 @@
     revisions are specified, the working directory files are compared
     to its parent.
 
-    Without the -a option, diff will avoid generating diffs of files
-    it detects as binary. With -a, diff will generate a diff anyway,
-    probably with undesirable results.
+    Without the -a/--text option, diff will avoid generating diffs of
+    files it detects as binary. With -a, diff will generate a diff
+    anyway, probably with undesirable results.
 
-    Use the --git option to generate diffs in the git extended diff
-    format. For more information, read hg help diffs.
+    Use the -g/--git option to generate diffs in the git extended diff
+    format. For more information, read 'hg help diffs'.
 
 options:
 
@@ -246,12 +248,13 @@
 
     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 is given. Unless options described
-    with "show only ..." are given, the options -mardu are used.
+    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.
 
     Option -q/--quiet hides untracked (unknown and ignored) files
-    unless explicitly requested with -u/--unknown or -i/-ignored.
+    unless explicitly requested with -u/--unknown or -i/--ignored.
 
     NOTE: status may appear to disagree with diff if permissions have
     changed or a merge has occurred. The standard diff format does not
@@ -266,7 +269,7 @@
     A = added
     R = removed
     C = clean
-    ! = deleted, but still tracked
+    ! = missing (deleted by non-hg command, but still tracked)
     ? = not tracked
     I = ignored
       = the previous added file was copied from here
@@ -306,7 +309,7 @@
  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
- parents    show the parents of the working dir or revision
+ parents    show the parents of the working directory or revision
  pull       pull changes from the specified source
  push       push changes to the specified destination
  remove     remove the specified files on the next commit
@@ -329,7 +332,7 @@
  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
- parents    show the parents of the working dir or revision
+ parents    show the parents of the working directory or revision
  pull       pull changes from the specified source
  push       push changes to the specified destination
  remove     remove the specified files on the next commit
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-hghave	Sun Apr 26 11:49:17 2009 +0200
@@ -0,0 +1,4 @@
+#!/bin/sh
+# Testing that hghave does not crash when checking features
+
+"$TESTDIR/hghave" --test-features 2>/dev/null
--- a/tests/test-hgrc.out	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-hgrc.out	Sun Apr 26 11:49:17 2009 +0200
@@ -1,16 +1,13 @@
-abort: Failed to parse .../t/.hg/hgrc
-File contains no section headers.
-file: .../t/.hg/hgrc, line: 1
-'invalid\n'
+hg: config error at .../t/.hg/hgrc:1: 'invalid'
 updating working directory
 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
 [paths]
 default = .../foo%%bar
-default = .../foo%bar
+default = .../foo%%bar
 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
+paths.default=.../foo%%bar
 ui.slash=True
--- a/tests/test-hgweb-filelog.out	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-hgweb-filelog.out	Sun Apr 26 11:49:17 2009 +0200
@@ -421,7 +421,7 @@
 <div class="menu">
 <div class="logo">
 <a href="http://www.selenic.com/mercurial/">
-<img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial"></a>
+<img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
 </div>
 <ul>
 <li><a href="/shortlog">log</a></li>
--- a/tests/test-hgweb.out	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-hgweb.out	Sun Apr 26 11:49:17 2009 +0200
@@ -36,7 +36,7 @@
 <div class="menu">
 <div class="logo">
 <a href="http://www.selenic.com/mercurial/">
-<img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial"></a>
+<img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
 </div>
 <ul>
 <li><a href="/shortlog">log</a></li>
@@ -105,7 +105,7 @@
 <div class="menu">
 <div class="logo">
 <a href="http://www.selenic.com/mercurial/">
-<img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial"></a>
+<img src="/static/hglogo.png" width=75 height=90 border=0 alt="mercurial" /></a>
 </div>
 <ul>
 <li><a href="/shortlog">log</a></li>
--- a/tests/test-highlight	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-highlight	Sun Apr 26 11:49:17 2009 +0200
@@ -14,7 +14,7 @@
 cp $TESTDIR/get-with-headers.py ./
 
 # check for UnicodeDecodeError with iso-8859-1 file contents
-python -c 'fp = open("isolatin", "w"); fp.write("h\xFCbsch\n"); fp.close();'
+python -c 'fp = open("isolatin.txt", "w"); fp.write("h\xFCbsch\n"); fp.close();'
 
 hg ci -Ama
 
@@ -24,15 +24,15 @@
 
 echo % hgweb filerevision, html
 ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/get-with-headers.py') \
-    | sed "s/class=\"k\"/class=\"kn\"/g"
+    | sed "s/class=\"k\"/class=\"kn\"/g" | sed "s/class=\"mf\"/class=\"mi\"/g"
 
 echo % hgweb filerevision, html
-("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/isolatin') \
+("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/isolatin.txt') \
     | sed "s/class=\"k\"/class=\"kn\"/g"
 
 echo % hgweb fileannotate, html
 ("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/annotate/tip/get-with-headers.py') \
-    | sed "s/class=\"k\"/class=\"kn\"/g"
+    | 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') \
--- a/tests/test-highlight.out	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-highlight.out	Sun Apr 26 11:49:17 2009 +0200
@@ -1,5 +1,5 @@
 adding get-with-headers.py
-adding isolatin
+adding isolatin.txt
 % hg serve
 % hgweb filerevision, html
 200 Script output follows
@@ -12,7 +12,7 @@
 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
 
 <link rel="stylesheet" href="/highlightcss" type="text/css" />
-<title>test: e55e3a42c53a get-with-headers.py</title>
+<title>test: 7c3facd7c58a get-with-headers.py</title>
 </head>
 <body>
 
@@ -23,26 +23,26 @@
 <img src="/static/hglogo.png" alt="mercurial" /></a>
 </div>
 <ul>
-<li><a href="/shortlog/e55e3a42c53a">log</a></li>
-<li><a href="/graph/e55e3a42c53a">graph</a></li>
+<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/e55e3a42c53a">changeset</a></li>
-<li><a href="/file/e55e3a42c53a/">browse</a></li>
+<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/e55e3a42c53a/get-with-headers.py">diff</a></li>
-<li><a href="/annotate/e55e3a42c53a/get-with-headers.py">annotate</a></li>
-<li><a href="/log/e55e3a42c53a/get-with-headers.py">file log</a></li>
-<li><a href="/raw-file/e55e3a42c53a/get-with-headers.py">raw</a></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>
 </ul>
 </div>
 
 <div class="main">
 <h2><a href="/">test</a></h2>
-<h3>view get-with-headers.py @ 0:e55e3a42c53a</h3>
+<h3>view get-with-headers.py @ 0:7c3facd7c58a</h3>
 
 <form class="search" action="/log">
 
@@ -75,7 +75,7 @@
 
 <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="mf">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="mf">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="mf">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="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></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="mf">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="mf">1</span><span class="p">)</span></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="sourcelast"></div>
 </div>
 </div>
@@ -97,7 +97,7 @@
 <link rel="stylesheet" href="/static/style-paper.css" type="text/css" />
 
 <link rel="stylesheet" href="/highlightcss" type="text/css" />
-<title>test: e55e3a42c53a isolatin</title>
+<title>test: 7c3facd7c58a isolatin.txt</title>
 </head>
 <body>
 
@@ -108,26 +108,26 @@
 <img src="/static/hglogo.png" alt="mercurial" /></a>
 </div>
 <ul>
-<li><a href="/shortlog/e55e3a42c53a">log</a></li>
-<li><a href="/graph/e55e3a42c53a">graph</a></li>
+<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/e55e3a42c53a">changeset</a></li>
-<li><a href="/file/e55e3a42c53a/">browse</a></li>
+<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/e55e3a42c53a/isolatin">diff</a></li>
-<li><a href="/annotate/e55e3a42c53a/isolatin">annotate</a></li>
-<li><a href="/log/e55e3a42c53a/isolatin">file log</a></li>
-<li><a href="/raw-file/e55e3a42c53a/isolatin">raw</a></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>
 </ul>
 </div>
 
 <div class="main">
 <h2><a href="/">test</a></h2>
-<h3>view isolatin @ 0:e55e3a42c53a</h3>
+<h3>view isolatin.txt @ 0:7c3facd7c58a</h3>
 
 <form class="search" action="/log">
 
@@ -193,27 +193,27 @@
 <img src="/static/hglogo.png" alt="mercurial" /></a>
 </div>
 <ul>
-<li><a href="/shortlog/e55e3a42c53a">log</a></li>
-<li><a href="/graph/e55e3a42c53a">graph</a></li>
+<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/e55e3a42c53a">changeset</a></li>
-<li><a href="/file/e55e3a42c53a/">browse</a></li>
+<li><a href="/rev/7c3facd7c58a">changeset</a></li>
+<li><a href="/file/7c3facd7c58a/">browse</a></li>
 </ul>
 <ul>
-<li><a href="/file/e55e3a42c53a/get-with-headers.py">file</a></li>
-<li><a href="/diff/e55e3a42c53a/get-with-headers.py">diff</a></li>
+<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/e55e3a42c53a/get-with-headers.py">file log</a></li>
-<li><a href="/raw-annotate/e55e3a42c53a/get-with-headers.py">raw</a></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:e55e3a42c53a</h3>
+<h3>annotate get-with-headers.py @ 0:7c3facd7c58a</h3>
 
 <form class="search" action="/log">
 
@@ -252,7 +252,7 @@
  <th class="annotate">rev</th>
  <th class="line">&nbsp;&nbsp;line source</th>
 </tr>
-<tr class="parity0"><td class="annotate"><a href="/annotate/e55e3a42c53a/get-with-headers.py#1" title="e55e3a42c53a: 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/e55e3a42c53a/get-with-headers.py#2" title="e55e3a42c53a: 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/e55e3a42c53a/get-with-headers.py#3" title="e55e3a42c53a: 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/e55e3a42c53a/get-with-headers.py#4" title="e55e3a42c53a: 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/e55e3a42c53a/get-with-headers.py#5" title="e55e3a42c53a: 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/e55e3a42c53a/get-with-headers.py#6" title="e55e3a42c53a: 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/e55e3a42c53a/get-with-headers.py#7" title="e55e3a42c53a: 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/e55e3a42c53a/get-with-headers.py#8" title="e55e3a42c53a: 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/e55e3a42c53a/get-with-headers.py#9" title="e55e3a42c53a: 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/e55e3a42c53a/get-with-headers.py#10" title="e55e3a42c53a: 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/e55e3a42c53a/get-with-headers.py#11" title="e55e3a42c53a: 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/e55e3a42c53a/get-with-headers.py#12" title="e55e3a42c53a: 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/e55e3a42c53a/get-with-headers.py#13" title="e55e3a42c53a: 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/e55e3a42c53a/get-with-headers.py#14" title="e55e3a42c53a: 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/e55e3a42c53a/get-with-headers.py#15" title="e55e3a42c53a: 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/e55e3a42c53a/get-with-headers.py#16" title="e55e3a42c53a: 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/e55e3a42c53a/get-with-headers.py#17" title="e55e3a42c53a: 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/e55e3a42c53a/get-with-headers.py#18" title="e55e3a42c53a: 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/e55e3a42c53a/get-with-headers.py#19" title="e55e3a42c53a: 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/e55e3a42c53a/get-with-headers.py#20" title="e55e3a42c53a: 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/e55e3a42c53a/get-with-headers.py#21" title="e55e3a42c53a: 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/e55e3a42c53a/get-with-headers.py#22" title="e55e3a42c53a: 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/e55e3a42c53a/get-with-headers.py#23" title="e55e3a42c53a: 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/e55e3a42c53a/get-with-headers.py#24" title="e55e3a42c53a: 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/e55e3a42c53a/get-with-headers.py#25" title="e55e3a42c53a: 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/e55e3a42c53a/get-with-headers.py#26" title="e55e3a42c53a: 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/e55e3a42c53a/get-with-headers.py#27" title="e55e3a42c53a: 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/e55e3a42c53a/get-with-headers.py#28" title="e55e3a42c53a: 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/e55e3a42c53a/get-with-headers.py#29" title="e55e3a42c53a: 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/e55e3a42c53a/get-with-headers.py#30" title="e55e3a42c53a: 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/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>
 </table>
 </div>
 </div>
--- a/tests/test-import	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-import	Sun Apr 26 11:49:17 2009 +0200
@@ -313,3 +313,22 @@
 hg import --no-commit -v -s 100 ../rename.diff
 hg st -C
 cd ..
+
+
+echo '% add empty file from the end of patch (issue 1495)'
+hg init addemptyend
+cd addemptyend
+touch a
+hg addremove
+hg ci -m "commit"
+cat > a.patch <<EOF
+diff --git a/a b/a
+--- a/a
++++ b/a
+@@ -0,0 +1,1 @@
++a
+diff --git a/b b/b
+new file mode 100644
+EOF
+hg import --no-commit a.patch
+cd ..
--- a/tests/test-import.out	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-import.out	Sun Apr 26 11:49:17 2009 +0200
@@ -293,3 +293,6 @@
 adding b
 A b
 R a
+% add empty file from the end of patch (issue 1495)
+adding a
+applying a.patch
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-inotify-issue1542	Sun Apr 26 11:49:17 2009 +0200
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+"$TESTDIR/hghave" inotify || exit 80
+
+hg init
+
+touch a
+mkdir dir
+touch dir/b
+touch dir/c
+
+echo "[extensions]" >> $HGRCPATH
+echo "inotify=" >> $HGRCPATH
+
+hg add dir/c
+
+echo % inserve
+hg inserve -d --pid-file=hg.pid 2>&1
+cat hg.pid >> "$DAEMON_PIDS"
+
+hg st
+
+echo % moving dir out
+mv dir ../tmp-test-inotify-issue1542
+
+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-issue1542.out	Sun Apr 26 11:49:17 2009 +0200
@@ -0,0 +1,11 @@
+% inserve
+A dir/c
+? a
+? dir/b
+? hg.pid
+% moving dir out
+% status
+! dir/c
+? a
+? hg.pid
+Are we able to kill the service? if not, the service died on some error
--- a/tests/test-keyword.out	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-keyword.out	Sun Apr 26 11:49:17 2009 +0200
@@ -1,15 +1,15 @@
 % help
 keyword extension - keyword expansion in local repositories
 
-This extension expands RCS/CVS-like or self-customized $Keywords$
-in tracked text files selected by your configuration.
+This extension expands RCS/CVS-like or self-customized $Keywords$ in
+tracked text files selected by your configuration.
 
-Keywords are only expanded in local repositories and not stored in
-the change history. The mechanism can be regarded as a convenience
-for the current user or for archive distribution.
+Keywords are only expanded in local repositories and not stored in the
+change history. The mechanism can be regarded as a convenience for the
+current user or for archive distribution.
 
-Configuration is done in the [keyword] and [keywordmaps] sections
-of hgrc files.
+Configuration is done in the [keyword] and [keywordmaps] sections of
+hgrc files.
 
 Example:
 
@@ -19,26 +19,28 @@
     x*    = ignore
 
 Note: the more specific you are in your filename patterns
-      the less you lose speed in huge repos.
+      the less you lose speed in huge repositories.
 
 For [keywordmaps] template mapping and expansion demonstration and
 control run "hg kwdemo".
 
 An additional date template filter {date|utcdate} is provided.
 
-The default template mappings (view with "hg kwdemo -d") can be replaced
-with customized keywords and templates.
-Again, run "hg kwdemo" to control the results of your config changes.
+The default template mappings (view with "hg kwdemo -d") can be
+replaced with customized keywords and templates. Again, run "hg
+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 history.
+the risk of inadvertedly storing expanded keywords in the change
+history.
 
 To force expansion after enabling it, or a configuration change, run
 "hg kwexpand".
 
-Also, when committing with the record extension or using mq's qrecord, be aware
-that keywords cannot be updated. Again, run "hg kwexpand" on the files in
-question to update keyword expansions after all changes have been checked in.
+Also, when committing with the record extension or using mq's qrecord,
+be aware that keywords cannot be updated. Again, run "hg kwexpand" on
+the files in question to update keyword expansions after all changes
+have been checked in.
 
 Expansions spanning more than one line and incremental expansions,
 like CVS' $Log$, are not supported. A keyword template map
--- a/tests/test-log	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-log	Sun Apr 26 11:49:17 2009 +0200
@@ -104,4 +104,18 @@
 echo '% log -r <some unknown node id>'
 hg log -r 1000000000000000000000000000000000000000
 
+cd ..
+
+hg init usertest
+cd usertest
+
+echo a > a
+hg ci -A -m "a" -u "User One <user1@example.org>"
+echo b > b
+hg ci -A -m "b" -u "User Two <user2@example.org>"
+
+hg log -u "User One <user1@example.org>"
+hg log -u "user1" -u "user2"
+hg log -u "user3"
+
 exit 0
--- a/tests/test-log.out	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-log.out	Sun Apr 26 11:49:17 2009 +0200
@@ -239,3 +239,21 @@
 abort: 00changelog.i@: ambiguous identifier!
 % log -r <some unknown node id>
 abort: unknown revision '1000000000000000000000000000000000000000'!
+adding a
+adding b
+changeset:   0:29a4c94f1924
+user:        User One <user1@example.org>
+date:        Thu Jan 01 00:00:00 1970 +0000
+summary:     a
+
+changeset:   1:e834b5e69c0e
+tag:         tip
+user:        User Two <user2@example.org>
+date:        Thu Jan 01 00:00:00 1970 +0000
+summary:     b
+
+changeset:   0:29a4c94f1924
+user:        User One <user1@example.org>
+date:        Thu Jan 01 00:00:00 1970 +0000
+summary:     a
+
--- a/tests/test-merge-tools	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-merge-tools	Sun Apr 26 11:49:17 2009 +0200
@@ -104,6 +104,24 @@
 echo "# merge-patterns specifies executable with bogus path and gets warning:"
 domerge -r 2 --config merge-patterns.f=true --config merge-tools.true.executable=/bin/nonexistingmergetool
 
+echo
+echo ui.merge overrules priority
+echo
+
+echo "# ui.merge specifies false:"
+domerge -r 2 --config ui.merge=false
+
+echo "# ui.merge specifies internal:fail:"
+domerge -r 2 --config ui.merge=internal:fail
+
+echo "# ui.merge specifies internal:local:"
+domerge -r 2 --config ui.merge=internal:local
+
+echo "# ui.merge specifies internal:other:"
+domerge -r 2 --config ui.merge=internal:other
+
+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
 
 echo
 echo Premerge
--- a/tests/test-merge-tools.out	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-merge-tools.out	Sun Apr 26 11:49:17 2009 +0200
@@ -232,6 +232,90 @@
 ? f.orig
 
 
+ui.merge overrules priority
+
+# ui.merge specifies false:
+[merge-tools]
+false.whatever=
+true.priority=1
+true.executable=cat
+# hg update -C 1
+# hg merge -r 2 --config ui.merge=false
+merging f
+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
+# cat f
+revision 1
+space
+# hg stat
+M f
+? f.orig
+
+# ui.merge specifies internal:fail:
+[merge-tools]
+false.whatever=
+true.priority=1
+true.executable=cat
+# hg update -C 1
+# hg merge -r 2 --config ui.merge=internal:fail
+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
+
+# ui.merge specifies internal:local:
+[merge-tools]
+false.whatever=
+true.priority=1
+true.executable=cat
+# hg update -C 1
+# hg merge -r 2 --config ui.merge=internal:local
+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:other:
+[merge-tools]
+false.whatever=
+true.priority=1
+true.executable=cat
+# hg update -C 1
+# hg merge -r 2 --config ui.merge=internal:other
+0 files updated, 1 files merged, 0 files removed, 0 files unresolved
+(branch merge, don't forget to commit)
+# cat f
+revision 2
+space
+# hg stat
+M f
+
+# ui.merge specifies internal:other but is overruled by pattern for false:
+[merge-tools]
+false.whatever=
+true.priority=1
+true.executable=cat
+# hg update -C 1
+# hg merge -r 2 --config ui.merge=internal:other --config merge-patterns.f=false
+merging f
+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
+# cat f
+revision 1
+space
+# hg stat
+M f
+? f.orig
+
+
 Premerge
 
 # Default is silent simplemerge:
--- a/tests/test-mq.out	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-mq.out	Sun Apr 26 11:49:17 2009 +0200
@@ -2,11 +2,11 @@
 mq extension - patch management and development
 
 This extension lets you work with a stack of patches in a Mercurial
-repository.  It manages two stacks of patches - all known patches, and
+repository. It manages two stacks of patches - all known patches, and
 applied patches (subset of known patches).
 
 Known patches are represented as patch files in the .hg/patches
-directory.  Applied patches are both patch files and changesets.
+directory. Applied patches are both patch files and changesets.
 
 Common tasks (use "hg help command" for more details):
 
@@ -43,7 +43,7 @@
  qpush        push the next patch onto the stack
  qrefresh     update the current patch
  qrename      rename a patch
- qrestore     restore the queue state saved by a rev
+ qrestore     restore the queue state saved by a revision
  qsave        save current queue state
  qselect      set or print guarded patches to push
  qseries      print the entire series file
--- a/tests/test-non-interactive-wsgi	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-non-interactive-wsgi	Sun Apr 26 11:49:17 2009 +0200
@@ -30,9 +30,6 @@
     def readline(self):
         print >> sys.__stdout__, 'READLINE'
         return self.real.readline()
-    def isatty(self):
-        print >> sys.__stdout__, 'ISATTY'
-        return False
 
 sys.stdin = FileLike(sys.stdin)
 errors = StringIO()
--- a/tests/test-notify	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-notify	Sun Apr 26 11:49:17 2009 +0200
@@ -60,7 +60,7 @@
 
 echo % fail for config file is missing
 hg --cwd b rollback
-hg --cwd b pull ../a 2>&1 | grep 'unable to open.*\.notify\.conf' > /dev/null && echo pull failed
+hg --cwd b pull ../a 2>&1 | grep 'error.*\.notify\.conf' > /dev/null && echo pull failed
 
 touch "$HGTMP/.notify.conf"
 
--- a/tests/test-notify.out	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-notify.out	Sun Apr 26 11:49:17 2009 +0200
@@ -52,10 +52,10 @@
    # key is glob pattern, value is ","-separated list of subscriber emails
    pattern = user@host
 
- glob patterns are matched against path to repo root.
+ glob patterns are matched against path to repository root.
 
- if you like, you can put notify config file in repo that users can
- push changes to, they can manage their own subscriptions.
+ if you like, you can put notify config file in repository that users
+ can push changes to, they can manage their own subscriptions.
 
 no commands defined
 % commit
--- a/tests/test-parse-date	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-parse-date	Sun Apr 26 11:49:17 2009 +0200
@@ -43,3 +43,41 @@
 hg debugdate "1000000000 16200"  # -0430
 hg debugdate "Sat Sep 08 21:16:40 2001 +0430"
 hg debugdate "Sat Sep 08 21:16:40 2001 -0430"
+
+#Test date formats with '>' or '<' accompanied by space characters
+hg log -d '>' --template '{date|date}\n'
+hg log -d '<' hg log -d '>' --template '{date|date}\n'
+
+hg log -d ' >' --template '{date|date}\n'
+hg log -d ' <' --template '{date|date}\n'
+
+hg log -d '> ' --template '{date|date}\n'
+hg log -d '< ' --template '{date|date}\n'
+
+hg log -d ' > ' --template '{date|date}\n'
+hg log -d ' < ' --template '{date|date}\n'
+
+
+hg log -d '>02/01' --template '{date|date}\n'
+hg log -d '<02/01' --template '{date|date}\n'
+
+hg log -d ' >02/01' --template '{date|date}\n'
+hg log -d ' <02/01' --template '{date|date}\n'
+
+hg log -d '> 02/01' --template '{date|date}\n'
+hg log -d '< 02/01' --template '{date|date}\n'
+
+hg log -d ' > 02/01' --template '{date|date}\n'
+hg log -d ' < 02/01' --template '{date|date}\n'
+
+hg log -d '>02/01 ' --template '{date|date}\n'
+hg log -d '<02/01 ' --template '{date|date}\n'
+
+hg log -d ' >02/01 ' --template '{date|date}\n'
+hg log -d ' <02/01 ' --template '{date|date}\n'
+
+hg log -d '> 02/01 ' --template '{date|date}\n'
+hg log -d '< 02/01 ' --template '{date|date}\n'
+
+hg log -d ' > 02/01 ' --template '{date|date}\n'
+hg log -d ' < 02/01 ' --template '{date|date}\n'
\ No newline at end of file
--- a/tests/test-parse-date.out	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-parse-date.out	Sun Apr 26 11:49:17 2009 +0200
@@ -34,3 +34,111 @@
 standard: Sat Sep 08 21:16:40 2001 +0430
 internal: 1000000000 16200
 standard: Sat Sep 08 21:16:40 2001 -0430
+Sun Jan 15 13:30:00 2006 +0500
+Sun Jan 15 13:30:00 2006 -0800
+Sat Jul 15 13:30:00 2006 +0500
+Sat Jul 15 13:30:00 2006 -0700
+Sun Jun 11 00:26:40 2006 -0400
+Sat Apr 15 13:30:00 2006 +0200
+Sat Apr 15 13:30:00 2006 +0000
+Wed Feb 01 13:00:30 2006 -0500
+Wed Feb 01 13:00:30 2006 +0000
+Sun Jan 15 13:30:00 2006 +0500
+Sun Jan 15 13:30:00 2006 -0800
+Sat Jul 15 13:30:00 2006 +0500
+Sat Jul 15 13:30:00 2006 -0700
+Sun Jun 11 00:26:40 2006 -0400
+Sat Apr 15 13:30:00 2006 +0200
+Sat Apr 15 13:30:00 2006 +0000
+Wed Feb 01 13:00:30 2006 -0500
+Wed Feb 01 13:00:30 2006 +0000
+Sun Jan 15 13:30:00 2006 +0500
+Sun Jan 15 13:30:00 2006 -0800
+Sat Jul 15 13:30:00 2006 +0500
+Sat Jul 15 13:30:00 2006 -0700
+Sun Jun 11 00:26:40 2006 -0400
+Sat Apr 15 13:30:00 2006 +0200
+Sat Apr 15 13:30:00 2006 +0000
+Wed Feb 01 13:00:30 2006 -0500
+Wed Feb 01 13:00:30 2006 +0000
+Sun Jan 15 13:30:00 2006 +0500
+Sun Jan 15 13:30:00 2006 -0800
+Sat Jul 15 13:30:00 2006 +0500
+Sat Jul 15 13:30:00 2006 -0700
+Sun Jun 11 00:26:40 2006 -0400
+Sat Apr 15 13:30:00 2006 +0200
+Sat Apr 15 13:30:00 2006 +0000
+Wed Feb 01 13:00:30 2006 -0500
+Wed Feb 01 13:00:30 2006 +0000
+Sun Jan 15 13:30:00 2006 +0500
+Sun Jan 15 13:30:00 2006 -0800
+Sat Jul 15 13:30:00 2006 +0500
+Sat Jul 15 13:30:00 2006 -0700
+Sun Jun 11 00:26:40 2006 -0400
+Sat Apr 15 13:30:00 2006 +0200
+Sat Apr 15 13:30:00 2006 +0000
+Wed Feb 01 13:00:30 2006 -0500
+Wed Feb 01 13:00:30 2006 +0000
+Sun Jan 15 13:30:00 2006 +0500
+Sun Jan 15 13:30:00 2006 -0800
+Sat Jul 15 13:30:00 2006 +0500
+Sat Jul 15 13:30:00 2006 -0700
+Sun Jun 11 00:26:40 2006 -0400
+Sat Apr 15 13:30:00 2006 +0200
+Sat Apr 15 13:30:00 2006 +0000
+Wed Feb 01 13:00:30 2006 -0500
+Wed Feb 01 13:00:30 2006 +0000
+Sun Jan 15 13:30:00 2006 +0500
+Sun Jan 15 13:30:00 2006 -0800
+Sat Jul 15 13:30:00 2006 +0500
+Sat Jul 15 13:30:00 2006 -0700
+Sun Jun 11 00:26:40 2006 -0400
+Sat Apr 15 13:30:00 2006 +0200
+Sat Apr 15 13:30:00 2006 +0000
+Wed Feb 01 13:00:30 2006 -0500
+Wed Feb 01 13:00:30 2006 +0000
+Sun Jan 15 13:30:00 2006 +0500
+Sun Jan 15 13:30:00 2006 -0800
+Sat Jul 15 13:30:00 2006 +0500
+Sat Jul 15 13:30:00 2006 -0700
+Sun Jun 11 00:26:40 2006 -0400
+Sat Apr 15 13:30:00 2006 +0200
+Sat Apr 15 13:30:00 2006 +0000
+Wed Feb 01 13:00:30 2006 -0500
+Wed Feb 01 13:00:30 2006 +0000
+Sun Jan 15 13:30:00 2006 +0500
+Sun Jan 15 13:30:00 2006 -0800
+Sat Jul 15 13:30:00 2006 +0500
+Sat Jul 15 13:30:00 2006 -0700
+Sun Jun 11 00:26:40 2006 -0400
+Sat Apr 15 13:30:00 2006 +0200
+Sat Apr 15 13:30:00 2006 +0000
+Wed Feb 01 13:00:30 2006 -0500
+Wed Feb 01 13:00:30 2006 +0000
+Sun Jan 15 13:30:00 2006 +0500
+Sun Jan 15 13:30:00 2006 -0800
+Sat Jul 15 13:30:00 2006 +0500
+Sat Jul 15 13:30:00 2006 -0700
+Sun Jun 11 00:26:40 2006 -0400
+Sat Apr 15 13:30:00 2006 +0200
+Sat Apr 15 13:30:00 2006 +0000
+Wed Feb 01 13:00:30 2006 -0500
+Wed Feb 01 13:00:30 2006 +0000
+Sun Jan 15 13:30:00 2006 +0500
+Sun Jan 15 13:30:00 2006 -0800
+Sat Jul 15 13:30:00 2006 +0500
+Sat Jul 15 13:30:00 2006 -0700
+Sun Jun 11 00:26:40 2006 -0400
+Sat Apr 15 13:30:00 2006 +0200
+Sat Apr 15 13:30:00 2006 +0000
+Wed Feb 01 13:00:30 2006 -0500
+Wed Feb 01 13:00:30 2006 +0000
+Sun Jan 15 13:30:00 2006 +0500
+Sun Jan 15 13:30:00 2006 -0800
+Sat Jul 15 13:30:00 2006 +0500
+Sat Jul 15 13:30:00 2006 -0700
+Sun Jun 11 00:26:40 2006 -0400
+Sat Apr 15 13:30:00 2006 +0200
+Sat Apr 15 13:30:00 2006 +0000
+Wed Feb 01 13:00:30 2006 -0500
+Wed Feb 01 13:00:30 2006 +0000
--- a/tests/test-parseindex2.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-parseindex2.py	Sun Apr 26 11:49:17 2009 +0200
@@ -102,10 +102,10 @@
     py_res_2 = py_parseindex(data_non_inlined, False)
     c_res_2 = parsers.parse_index(data_non_inlined, False)
 
-    if (py_res_1 != c_res_1) :
+    if py_res_1 != c_res_1:
         print "Parse index result (with inlined data) differs!"
 
-    if (py_res_2 != c_res_2) :
+    if py_res_2 != c_res_2:
         print "Parse index result (no inlined data) differs!"
 
     print "done"
--- a/tests/test-patchbomb	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-patchbomb	Sun Apr 26 11:49:17 2009 +0200
@@ -5,6 +5,7 @@
     sed -e 's/\(Message-Id:.*@\).*/\1/'  \
         -e 's/\(In-Reply-To:.*@\).*/\1/' \
         -e 's/\(References:.*@\).*/\1/'  \
+        -e 's/\(User-Agent:.*\)\/.*/\1/'  \
         -e 's/===.*/===/'
 }
 
@@ -117,3 +118,6 @@
 hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -i 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
--- a/tests/test-patchbomb.out	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-patchbomb.out	Sun Apr 26 11:49:17 2009 +0200
@@ -9,6 +9,7 @@
 Subject: [PATCH] a
 X-Mercurial-Node: 8580ff50825a50c8f716709acdf8de0deddcd6ab
 Message-Id: <8580ff50825a50c8f716.60@
+User-Agent: Mercurial-patchbomb
 Date: Thu, 01 Jan 1970 00:01:00 +0000
 From: quux
 To: foo
@@ -40,6 +41,7 @@
 Content-Transfer-Encoding: 7bit
 Subject: [PATCH 0 of 2] test
 Message-Id: <patchbomb.120@
+User-Agent: Mercurial-patchbomb
 Date: Thu, 01 Jan 1970 00:02:00 +0000
 From: quux
 To: foo
@@ -55,6 +57,7 @@
 Message-Id: <8580ff50825a50c8f716.121@
 In-Reply-To: <patchbomb.120@
 References: <patchbomb.120@
+User-Agent: Mercurial-patchbomb
 Date: Thu, 01 Jan 1970 00:02:01 +0000
 From: quux
 To: foo
@@ -82,6 +85,7 @@
 Message-Id: <97d72e5f12c7e84f8506.122@
 In-Reply-To: <patchbomb.120@
 References: <patchbomb.120@
+User-Agent: Mercurial-patchbomb
 Date: Thu, 01 Jan 1970 00:02:02 +0000
 From: quux
 To: foo
@@ -119,6 +123,7 @@
 MIME-Version: 1.0
 Subject: test
 Message-Id: <patchbomb.180@
+User-Agent: Mercurial-patchbomb
 Date: Thu, 01 Jan 1970 00:03:00 +0000
 From: quux
 To: foo
@@ -152,7 +157,7 @@
 adding utf
 % no mime encoding for email --test
 % md5sum of 8-bit output
-ad877786716d09fd7843cf0ed5e3d2a8  mailtest
+e726c29b3008e77994c7572563e57c34  mailtest
 % mime encoded mbox
 This patch series consists of 1 patches.
 
@@ -165,6 +170,7 @@
 Subject: [PATCH] charset=utf-8; content-transfer-encoding: base64
 X-Mercurial-Node: c3c9e37db9f4fe4882cda39baf42fed6bad8b15a
 Message-Id: <c3c9e37db9f4fe4882cd.240@
+User-Agent: Mercurial-patchbomb
 Date: Thu, 01 Jan 1970 00:04:00 +0000
 From: quux
 To: foo
@@ -190,7 +196,7 @@
 
 Writing [PATCH] charset=us-ascii; content-transfer-encoding: 8bit ...
 % md5sum of 8-bit output
-90fae277a4a85255e8262174fcefb59f  mboxfix
+40190791e367a851e42f0887b2d9439e  mboxfix
 % test diffstat for single patch
 This patch series consists of 1 patches.
 
@@ -207,6 +213,7 @@
 Subject: [PATCH] test
 X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
 Message-Id: <ff2c9fa2018b15fa74b3.60@
+User-Agent: Mercurial-patchbomb
 Date: Thu, 01 Jan 1970 00:01:00 +0000
 From: quux
 To: foo
@@ -258,6 +265,7 @@
 Content-Transfer-Encoding: 7bit
 Subject: [PATCH 0 of 2] test
 Message-Id: <patchbomb.60@
+User-Agent: Mercurial-patchbomb
 Date: Thu, 01 Jan 1970 00:01:00 +0000
 From: quux
 To: foo
@@ -277,6 +285,7 @@
 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
@@ -308,6 +317,7 @@
 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
@@ -340,6 +350,7 @@
 Subject: [PATCH] test
 X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
 Message-Id: <ff2c9fa2018b15fa74b3.60@
+User-Agent: Mercurial-patchbomb
 Date: Thu, 01 Jan 1970 00:01:00 +0000
 From: quux
 To: foo
@@ -378,6 +389,7 @@
 Content-Transfer-Encoding: 7bit
 Subject: [PATCH 0 of 2] test
 Message-Id: <patchbomb.60@
+User-Agent: Mercurial-patchbomb
 Date: Thu, 01 Jan 1970 00:01:00 +0000
 From: quux
 To: foo
@@ -392,6 +404,7 @@
 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
@@ -425,6 +438,7 @@
 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
@@ -460,6 +474,7 @@
 Subject: [PATCH] test
 X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
 Message-Id: <ff2c9fa2018b15fa74b3.60@
+User-Agent: Mercurial-patchbomb
 Date: Thu, 01 Jan 1970 00:01:00 +0000
 From: quux
 To: foo
@@ -507,6 +522,7 @@
 Content-Transfer-Encoding: 7bit
 Subject: [PATCH 0 of 2] test
 Message-Id: <patchbomb.60@
+User-Agent: Mercurial-patchbomb
 Date: Thu, 01 Jan 1970 00:01:00 +0000
 From: quux
 To: foo
@@ -521,6 +537,7 @@
 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
@@ -563,6 +580,7 @@
 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
@@ -610,6 +628,7 @@
 Content-Transfer-Encoding: 7bit
 Subject: [PATCH 0 of 1] test
 Message-Id: <patchbomb.60@
+User-Agent: Mercurial-patchbomb
 Date: Thu, 01 Jan 1970 00:01:00 +0000
 From: quux
 To: foo
@@ -625,6 +644,7 @@
 Message-Id: <ff2c9fa2018b15fa74b3.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
@@ -656,6 +676,7 @@
 Content-Transfer-Encoding: 7bit
 Subject: [PATCH 0 of 2] test
 Message-Id: <patchbomb.60@
+User-Agent: Mercurial-patchbomb
 Date: Thu, 01 Jan 1970 00:01:00 +0000
 From: quux
 To: foo
@@ -671,6 +692,7 @@
 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
@@ -698,6 +720,7 @@
 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
@@ -727,6 +750,7 @@
 Subject: [PATCH] test
 X-Mercurial-Node: ff2c9fa2018b15fa74b33363bda9527323e2a99f
 Message-Id: <ff2c9fa2018b15fa74b3.60@
+User-Agent: Mercurial-patchbomb
 Date: Thu, 01 Jan 1970 00:01:00 +0000
 From: quux
 To: foo
@@ -765,6 +789,7 @@
 Content-Transfer-Encoding: 7bit
 Subject: [PATCH 0 of 2] test
 Message-Id: <patchbomb.60@
+User-Agent: Mercurial-patchbomb
 Date: Thu, 01 Jan 1970 00:01:00 +0000
 From: quux
 To: foo
@@ -779,6 +804,7 @@
 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
@@ -812,6 +838,7 @@
 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
@@ -837,3 +864,39 @@
 +b
 
 --===
+% test inreplyto
+This patch series consists of 1 patches.
+
+
+Displaying [PATCH] Added tag two, two.diff for changeset ff2c9fa2018b ...
+Content-Type: text/plain; charset="us-ascii"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+Subject: [PATCH] Added tag two, two.diff for changeset ff2c9fa2018b
+X-Mercurial-Node: 2c502b2db30e1ddd5e4ecabd68d9002f6c77a5a3
+Message-Id: <2c502b2db30e1ddd5e4e.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
+
+# HG changeset patch
+# User test
+# Date 0 0
+# Node ID 2c502b2db30e1ddd5e4ecabd68d9002f6c77a5a3
+# Parent  91c0d1bdb4bc9cfd3b38a53a5ec53e9ae412a275
+Added tag two, two.diff for changeset ff2c9fa2018b
+
+diff -r 91c0d1bdb4bc -r 2c502b2db30e .hgtags
+--- a/.hgtags	Thu Jan 01 00:00:00 1970 +0000
++++ b/.hgtags	Thu Jan 01 00:00:00 1970 +0000
+@@ -2,3 +2,5 @@
+ 8580ff50825a50c8f716709acdf8de0deddcd6ab zero.foo
+ 97d72e5f12c7e84f85064aa72e5a297142c36ed9 one
+ 97d72e5f12c7e84f85064aa72e5a297142c36ed9 one.patch
++ff2c9fa2018b15fa74b33363bda9527323e2a99f two
++ff2c9fa2018b15fa74b33363bda9527323e2a99f two.diff
+
--- a/tests/test-profile	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-profile	Sun Apr 26 11:49:17 2009 +0200
@@ -3,13 +3,30 @@
 echo % test --time
 hg --time help -q help 2>&1 | grep Time > /dev/null || echo --time failed
 
+hg init a
+cd a
+
 echo % test --profile
-if "$TESTDIR/hghave" -q hotshot; then
-    # hotshot might be missing for licensing issues
-    hg --profile help -q help 2>&1 | grep ncalls > /dev/null || echo --profile failed
+if "$TESTDIR/hghave" -q lsprof; then
+    hg --profile st 2>../out || echo --profile failed
+    grep CallCount < ../out > /dev/null || echo wrong --profile
+
+    hg --profile --config profiling.output=../out st 2>&1 \
+        || echo --profile + output to file failed
+    grep CallCount < ../out > /dev/null \
+        || echo wrong --profile output when saving to a file
+
+    hg --profile --config profiling.format=text st 2>&1 \
+        | grep CallCount > /dev/null || echo --profile format=text failed
+
+    echo "[profiling]" >> $HGRCPATH
+    echo "format=kcachegrind" >> $HGRCPATH
+
+    hg --profile st 2>../out || echo --profile format=kcachegrind failed
+    grep 'events: Ticks' < ../out > /dev/null || echo --profile output is wrong
+
+    hg --profile --config profiling.output=../out st 2>&1 \
+        || echo --profile format=kcachegrind + output to file failed
+    grep 'events: Ticks' < ../out > /dev/null \
+        || echo --profile output is wrong
 fi
-
-echo % test --lsprof
-if "$TESTDIR/hghave" -q lsprof; then
-    hg --lsprof help -q help 2>&1 | grep CallCount > /dev/null || echo --lsprof failed
-fi
--- a/tests/test-profile.out	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-profile.out	Sun Apr 26 11:49:17 2009 +0200
@@ -1,3 +1,2 @@
 % test --time
 % test --profile
-% test --lsprof
--- a/tests/test-purge	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-purge	Sun Apr 26 11:49:17 2009 +0200
@@ -34,6 +34,12 @@
 
 echo % delete an untracked file
 touch untracked_file
+touch untracked_file_readonly
+python <<EOF
+import os, stat
+f= 'untracked_file_readonly'
+os.chmod(f, stat.S_IMODE(os.stat(f).st_mode) & ~stat.S_IWRITE)
+EOF
 hg purge -p
 hg purge -v
 ls
--- a/tests/test-purge.out	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-purge.out	Sun Apr 26 11:49:17 2009 +0200
@@ -15,7 +15,9 @@
 r1
 % delete an untracked file
 untracked_file
+untracked_file_readonly
 Removing file untracked_file
+Removing file untracked_file_readonly
 directory
 r1
 % delete an untracked file in a tracked directory
--- a/tests/test-qrecord.out	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-qrecord.out	Sun Apr 26 11:49:17 2009 +0200
@@ -13,7 +13,7 @@
  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
- parents    show the parents of the working dir or revision
+ parents    show the parents of the working directory or revision
  pull       pull changes from the specified source
  push       push changes to the specified destination
  remove     remove the specified files on the next commit
@@ -84,12 +84,12 @@
 -2
 +2 2
  3
-record this change to '1.txt'? [Ynsfdaq?]  @@ -3,3 +3,3 @@
+record change 1/6 to '1.txt'? [Ynsfdaq?]  @@ -3,3 +3,3 @@
  3
 -4
 +4 4
  5
-record this change to '1.txt'? [Ynsfdaq?]  diff --git a/2.txt b/2.txt
+record change 2/6 to '1.txt'? [Ynsfdaq?]  diff --git a/2.txt b/2.txt
 1 hunks, 2 lines changed
 examine changes to '2.txt'? [Ynsfdaq?]  @@ -1,5 +1,5 @@
  a
@@ -98,7 +98,7 @@
  c
  d
  e
-record this change to '2.txt'? [Ynsfdaq?]  diff --git a/dir/a.txt b/dir/a.txt
+record change 4/6 to '2.txt'? [Ynsfdaq?]  diff --git a/dir/a.txt b/dir/a.txt
 1 hunks, 2 lines changed
 examine changes to 'dir/a.txt'? [Ynsfdaq?]  
 % after qrecord a.patch 'tip'
@@ -163,7 +163,7 @@
 -4
 +4 4
  5
-record this change to '1.txt'? [Ynsfdaq?]  diff --git a/dir/a.txt b/dir/a.txt
+record change 1/3 to '1.txt'? [Ynsfdaq?]  diff --git a/dir/a.txt b/dir/a.txt
 1 hunks, 2 lines changed
 examine changes to 'dir/a.txt'? [Ynsfdaq?]  @@ -1,4 +1,4 @@
 -hello world
@@ -171,7 +171,7 @@
  
  someone
  up
-record this change to 'dir/a.txt'? [Ynsfdaq?]  
+record change 3/3 to 'dir/a.txt'? [Ynsfdaq?]  
 % after qrecord b.patch 'tip'
 changeset:   2:b056198bf878
 tag:         qtip
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-rebase-check-restore	Sun Apr 26 11:49:17 2009 +0200
@@ -0,0 +1,68 @@
+#!/bin/sh
+
+echo "[extensions]" >> $HGRCPATH
+echo "graphlog=" >> $HGRCPATH
+echo "rebase=" >> $HGRCPATH
+
+BASE=`pwd`
+
+addcommit () {
+    echo $1 > $1
+    hg add $1
+    hg commit -d "${2} 0" -u test -m $1
+}
+
+commit () {
+    hg commit -d "${2} 0" -u test -m $1
+}
+
+createrepo () {
+    cd $BASE
+    rm -rf a
+    hg init a
+    cd a
+    addcommit "A" 0
+    addcommit "B" 1
+    echo "C" >> A
+    commit "C" 2
+
+    hg update -C 0
+    echo "D" >> A
+    commit "D" 3
+    addcommit "E" 4
+
+    hg update -C 0
+    hg branch 'notdefault'
+    echo "F" >> A
+    commit "F" 5
+}
+
+echo
+echo "% - Rebasing B onto E - check keep"
+createrepo > /dev/null 2>&1
+hg glog  --template '{rev}:{desc}:{branches}\n'
+hg rebase -s 1 -d 4 --keep 2>&1 | sed 's/\(saving bundle to \).*/\1/'
+
+echo
+echo "% - Solve the conflict and go on"
+echo 'conflict solved' > A
+rm A.orig
+hg resolve -m A
+hg rebase --continue 2>&1 | sed 's/\(saving bundle to \).*/\1/'
+hg glog  --template '{rev}:{desc}:{branches}\n'
+
+echo
+echo "% - Rebase F onto E - check keepbranches"
+createrepo > /dev/null 2>&1
+hg glog  --template '{rev}:{desc}:{branches}\n'
+hg rebase -s 5 -d 4 --keepbranches 2>&1 | sed 's/\(saving bundle to \).*/\1/'
+
+echo
+echo "% - Solve the conflict and go on"
+echo 'conflict solved' > A
+rm A.orig
+hg resolve -m A
+hg rebase --continue 2>&1 | sed 's/\(saving bundle to \).*/\1/'
+hg glog  --template '{rev}:{desc}:{branches}\n'
+
+exit 0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-rebase-check-restore.out	Sun Apr 26 11:49:17 2009 +0200
@@ -0,0 +1,76 @@
+
+% - Rebasing B onto E - check keep
+@  5:F:notdefault
+|
+| o  4:E:
+| |
+| o  3:D:
+|/
+| o  2:C:
+| |
+| o  1:B:
+|/
+o  0:A:
+
+merging A
+warning: conflicts during merge.
+merging A failed!
+abort: fix unresolved conflicts with hg resolve then run hg rebase --continue
+
+% - Solve the conflict and go on
+rebase completed
+@  7:C:
+|
+o  6:B:
+|
+| o  5:F:notdefault
+| |
+o |  4:E:
+| |
+o |  3:D:
+|/
+| o  2:C:
+| |
+| o  1:B:
+|/
+o  0:A:
+
+
+% - Rebase F onto E - check keepbranches
+@  5:F:notdefault
+|
+| o  4:E:
+| |
+| o  3:D:
+|/
+| o  2:C:
+| |
+| o  1:B:
+|/
+o  0:A:
+
+merging A
+warning: conflicts during merge.
+merging A failed!
+abort: fix unresolved conflicts with hg resolve then run hg rebase --continue
+
+% - Solve the conflict and go on
+saving bundle to 
+adding branch
+adding changesets
+adding manifests
+adding file changes
+added 1 changesets with 1 changes to 1 files
+rebase completed
+@  5:F:notdefault
+|
+o  4:E:
+|
+o  3:D:
+|
+| o  2:C:
+| |
+| o  1:B:
+|/
+o  0:A:
+
--- a/tests/test-rebase-mq	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-rebase-mq	Sun Apr 26 11:49:17 2009 +0200
@@ -11,6 +11,7 @@
         -e "s/^\(# Node ID\).*/\1/" \
         -e "s/^\(# Parent\).*/\1/" \
         -e "s/^\(diff -r \)\([a-f0-9]* \)\(-r \)\([a-f0-9]* \)/\1x \3y /" \
+        -e "s/^\(diff -r \)\([a-f0-9]* \)/\1x /" \
         -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/" \
         -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/"
 }
@@ -74,3 +75,38 @@
 echo '% And the patch is correct'
 cat .hg/patches/f2.patch | filterpatch
 
+echo
+echo '% Adding one git-style patch and one normal'
+hg qpop -a
+rm -fr .hg/patches
+hg qinit -c
+
+hg up 0
+hg qnew --git f_git.patch
+echo 'mq1' > p
+hg add p
+hg qref --git -m 'P0 (git)'
+
+hg qnew f.patch
+echo 'mq2' > p
+hg qref -m 'P1'
+
+echo '% Git patch'
+cat .hg/patches/f_git.patch  | filterpatch
+
+echo
+echo '% Normal patch'
+cat .hg/patches/f.patch | filterpatch
+
+echo
+echo '% Rebase the applied mq patches'
+hg rebase -s 2 -d 1 --quiet 2>&1 | sed -e 's/\(saving bundle to \).*/\1/'
+
+echo '% And the patches are correct'
+echo '% Git patch'
+cat .hg/patches/f_git.patch  | filterpatch
+
+echo
+echo '% Normal patch'
+cat .hg/patches/f.patch | filterpatch
+
--- a/tests/test-rebase-mq.out	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-rebase-mq.out	Sun Apr 26 11:49:17 2009 +0200
@@ -77,3 +77,58 @@
 @@ -1,1 +1,1 @@
 -mq1r1
 +mq1r1mq2
+
+% Adding one git-style patch and one normal
+patch queue now empty
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+% Git patch
+P0 (git)
+
+diff --git a/p b/p
+new file mode 100644
+--- /dev/null
++++ b/p
+@@ -0,0 +1,1 @@
++mq1
+
+% Normal patch
+P1
+
+diff -r x p
+--- a/p
++++ b/p
+@@ -1,1 +1,1 @@
+-mq1
++mq2
+
+% Rebase the applied mq patches
+saving bundle to 
+% And the patches are correct
+% Git patch
+# HG changeset patch
+# User test
+# Date
+# Node ID
+# Parent
+P0 (git)
+
+diff --git a/p b/p
+new file mode 100644
+--- /dev/null
++++ b/p
+@@ -0,0 +1,1 @@
++mq1
+
+% Normal patch
+# HG changeset patch
+# User test
+# Date
+# Node ID
+# Parent
+P1
+
+--- a/p
++++ b/p
+@@ -1,1 +1,1 @@
+-mq1
++mq2
--- a/tests/test-rebase-parameters.out	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-rebase-parameters.out	Sun Apr 26 11:49:17 2009 +0200
@@ -2,25 +2,25 @@
 
 % Use continue and abort
 hg rebase: cannot use both abort and continue
-hg rebase [-s rev | -b rev] [-d rev] [--collapse] | [-c] | [-a] | [--keep]
+hg rebase [-s REV | -b REV] [-d REV] [--collapse] [--keep] [--keepbranches] | [-c] | [-a]
 
 move changeset (and descendants) to a different branch
 
-    Rebase uses repeated merging to graft changesets from one part of history
-    onto another. This can be useful for linearizing local changes relative to
-    a master development tree.
+    Rebase uses repeated merging to graft changesets from one part of
+    history onto another. This can be useful for linearizing local
+    changes relative to a master development tree.
 
-    If a rebase is interrupted to manually resolve a merge, it can be continued
-    with --continue or aborted with --abort.
+    If a rebase is interrupted to manually resolve a merge, it can be
+    continued with --continue/-c or aborted with --abort/-a.
 
 options:
 
-    --keep          keep original revisions
-    --keepbranches  keep original branches
  -s --source        rebase from a given revision
  -b --base          rebase from the base of a given revision
  -d --dest          rebase onto a given revision
     --collapse      collapse the rebased revisions
+    --keep          keep original revisions
+    --keepbranches  keep original branches
  -c --continue      continue an interrupted rebase
  -a --abort         abort an interrupted rebase
     --style         display using template map file
@@ -30,25 +30,25 @@
 
 % Use continue and collapse
 hg rebase: cannot use collapse with continue or abort
-hg rebase [-s rev | -b rev] [-d rev] [--collapse] | [-c] | [-a] | [--keep]
+hg rebase [-s REV | -b REV] [-d REV] [--collapse] [--keep] [--keepbranches] | [-c] | [-a]
 
 move changeset (and descendants) to a different branch
 
-    Rebase uses repeated merging to graft changesets from one part of history
-    onto another. This can be useful for linearizing local changes relative to
-    a master development tree.
+    Rebase uses repeated merging to graft changesets from one part of
+    history onto another. This can be useful for linearizing local
+    changes relative to a master development tree.
 
-    If a rebase is interrupted to manually resolve a merge, it can be continued
-    with --continue or aborted with --abort.
+    If a rebase is interrupted to manually resolve a merge, it can be
+    continued with --continue/-c or aborted with --abort/-a.
 
 options:
 
-    --keep          keep original revisions
-    --keepbranches  keep original branches
  -s --source        rebase from a given revision
  -b --base          rebase from the base of a given revision
  -d --dest          rebase onto a given revision
     --collapse      collapse the rebased revisions
+    --keep          keep original revisions
+    --keepbranches  keep original branches
  -c --continue      continue an interrupted rebase
  -a --abort         abort an interrupted rebase
     --style         display using template map file
@@ -58,25 +58,25 @@
 
 % Use continue/abort and dest/source
 hg rebase: abort and continue do not allow specifying revisions
-hg rebase [-s rev | -b rev] [-d rev] [--collapse] | [-c] | [-a] | [--keep]
+hg rebase [-s REV | -b REV] [-d REV] [--collapse] [--keep] [--keepbranches] | [-c] | [-a]
 
 move changeset (and descendants) to a different branch
 
-    Rebase uses repeated merging to graft changesets from one part of history
-    onto another. This can be useful for linearizing local changes relative to
-    a master development tree.
+    Rebase uses repeated merging to graft changesets from one part of
+    history onto another. This can be useful for linearizing local
+    changes relative to a master development tree.
 
-    If a rebase is interrupted to manually resolve a merge, it can be continued
-    with --continue or aborted with --abort.
+    If a rebase is interrupted to manually resolve a merge, it can be
+    continued with --continue/-c or aborted with --abort/-a.
 
 options:
 
-    --keep          keep original revisions
-    --keepbranches  keep original branches
  -s --source        rebase from a given revision
  -b --base          rebase from the base of a given revision
  -d --dest          rebase onto a given revision
     --collapse      collapse the rebased revisions
+    --keep          keep original revisions
+    --keepbranches  keep original branches
  -c --continue      continue an interrupted rebase
  -a --abort         abort an interrupted rebase
     --style         display using template map file
@@ -86,25 +86,25 @@
 
 % Use source and base
 hg rebase: cannot specify both a revision and a base
-hg rebase [-s rev | -b rev] [-d rev] [--collapse] | [-c] | [-a] | [--keep]
+hg rebase [-s REV | -b REV] [-d REV] [--collapse] [--keep] [--keepbranches] | [-c] | [-a]
 
 move changeset (and descendants) to a different branch
 
-    Rebase uses repeated merging to graft changesets from one part of history
-    onto another. This can be useful for linearizing local changes relative to
-    a master development tree.
+    Rebase uses repeated merging to graft changesets from one part of
+    history onto another. This can be useful for linearizing local
+    changes relative to a master development tree.
 
-    If a rebase is interrupted to manually resolve a merge, it can be continued
-    with --continue or aborted with --abort.
+    If a rebase is interrupted to manually resolve a merge, it can be
+    continued with --continue/-c or aborted with --abort/-a.
 
 options:
 
-    --keep          keep original revisions
-    --keepbranches  keep original branches
  -s --source        rebase from a given revision
  -b --base          rebase from the base of a given revision
  -d --dest          rebase onto a given revision
     --collapse      collapse the rebased revisions
+    --keep          keep original revisions
+    --keepbranches  keep original branches
  -c --continue      continue an interrupted rebase
  -a --abort         abort an interrupted rebase
     --style         display using template map file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-rebase-rename	Sun Apr 26 11:49:17 2009 +0200
@@ -0,0 +1,59 @@
+#!/bin/sh
+
+echo "[extensions]" >> $HGRCPATH
+echo "rebase=" >> $HGRCPATH
+echo "[diff]" >> $HGRCPATH
+echo "git=1" >> $HGRCPATH
+
+BASE=`pwd`
+
+cleanoutput () {
+    sed -e 's/\(Rebase status stored to\).*/\1/'  \
+        -e 's/\(Rebase status restored from\).*/\1/' \
+        -e 's/\(saving bundle to \).*/\1/'
+}
+
+hg init repo1
+cd repo1
+echo "a">a
+hg commit -Am "A" --date '0 0'
+echo "b"> b
+hg commit -Am "B" --date '1 0'
+hg up -C 0
+hg mv a a-renamed
+hg commit -m 'rename A' --date '2 0'
+
+echo
+echo '% Rename is tracked'
+hg log -p -r tip --template '{rev}:{desc}\n'
+
+echo '% Rebase the revision containing the rename'
+hg rebase -s 2 -d 1 --quiet 2>&1 | cleanoutput
+
+echo
+echo '% Rename is not lost'
+hg log -p -r tip --template '{rev}:{desc}\n'
+
+cd $BASE
+rm -rf repo1
+hg init repo1
+cd repo1
+echo "a">a
+hg commit -Am "A" --date '0 0'
+echo "b"> b
+hg commit -Am "B" --date '1 0'
+hg up -C 0
+hg cp a a-copied
+hg commit -m 'copy A' --date '2 0'
+
+echo
+echo '% Copy is tracked'
+hg log -p -r tip --template '{rev}:{desc}\n'
+
+echo '% Rebase the revision containing the copy'
+hg rebase -s 2 -d 1 --quiet 2>&1 | cleanoutput
+
+echo
+echo '% Copy is not lost'
+hg log -p -r tip --template '{rev}:{desc}\n'
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-rebase-rename.out	Sun Apr 26 11:49:17 2009 +0200
@@ -0,0 +1,40 @@
+adding a
+adding b
+0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+created new head
+
+% Rename is tracked
+2:rename A
+diff --git a/a b/a-renamed
+rename from a
+rename to a-renamed
+
+% Rebase the revision containing the rename
+saving bundle to 
+
+% Rename is not lost
+2:rename A
+diff --git a/a b/a-renamed
+rename from a
+rename to a-renamed
+
+adding a
+adding b
+0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+created new head
+
+% Copy is tracked
+2:copy A
+diff --git a/a b/a-copied
+copy from a
+copy to a-copied
+
+% Rebase the revision containing the copy
+saving bundle to 
+
+% Copy is not lost
+2:copy A
+diff --git a/a b/a-copied
+copy from a
+copy to a-copied
+
--- a/tests/test-record.out	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-record.out	Sun Apr 26 11:49:17 2009 +0200
@@ -10,7 +10,7 @@
 
     You will be prompted for whether to record changes to each
     modified file, and for files with multiple changes, for each
-    change to use.  For each query, the following responses are
+    change to use. For each query, the following responses are
     possible:
 
     y - record this change
@@ -27,8 +27,10 @@
 
 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
@@ -215,13 +217,13 @@
  2
  3
  4
-record this change to 'plain'? [Ynsfdaq?]  @@ -8,5 +8,3 @@
+record change 1/2 to 'plain'? [Ynsfdaq?]  @@ -8,5 +8,3 @@
  8
  9
  10
 -11
 -cf81a2760718a74d44c0c2eecb72f659e63a69c5
-record this change to 'plain'? [Ynsfdaq?]  
+record change 2/2 to 'plain'? [Ynsfdaq?]  
 changeset:   11:d09ab1967dab
 tag:         tip
 user:        test
@@ -258,7 +260,7 @@
  7
  8
  9
-record this change to 'plain'? [Ynsfdaq?]  @@ -4,7 +1,7 @@
+record change 1/2 to 'plain'? [Ynsfdaq?]  @@ -4,7 +1,7 @@
  4
  5
  6
@@ -267,7 +269,7 @@
  9
 -10
 +10.new
-record this change to 'plain'? [Ynsfdaq?]  
+record change 2/2 to 'plain'? [Ynsfdaq?]  
 changeset:   12:44516c9708ae
 tag:         tip
 user:        test
@@ -326,7 +328,7 @@
  7
  8
  9
-record this change to 'plain'? [Ynsfdaq?]  @@ -1,7 +4,6 @@
+record change 1/2 to 'plain'? [Ynsfdaq?]  @@ -1,7 +4,6 @@
  4
  5
  6
@@ -334,7 +336,7 @@
  8
  9
 -10.new
-record this change to 'plain'? [Ynsfdaq?]  % add to beginning, middle, end
+record change 2/2 to 'plain'? [Ynsfdaq?]  % add to beginning, middle, end
 % record beginning, middle
 diff --git a/plain b/plain
 3 hunks, 7 lines changed
@@ -344,7 +346,7 @@
 +3
  4
  5
-record this change to 'plain'? [Ynsfdaq?]  @@ -1,6 +4,8 @@
+record change 1/3 to 'plain'? [Ynsfdaq?]  @@ -1,6 +4,8 @@
  4
  5
 +5.new
@@ -353,14 +355,14 @@
  7
  8
  9
-record this change to 'plain'? [Ynsfdaq?]  @@ -3,4 +8,6 @@
+record change 2/3 to 'plain'? [Ynsfdaq?]  @@ -3,4 +8,6 @@
  6
  7
  8
  9
 +10
 +11
-record this change to 'plain'? [Ynsfdaq?]  
+record change 3/3 to 'plain'? [Ynsfdaq?]  
 changeset:   15:c1c639d8b268
 tag:         tip
 user:        test
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-repair-strip	Sun Apr 26 11:49:17 2009 +0200
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+echo "[extensions]" >> $HGRCPATH
+echo "mq=">> $HGRCPATH
+
+teststrip() {
+    hg -q up -C $1
+    echo % before update $1, strip $2
+    hg parents
+    chmod -$3 $4
+    hg strip $2 2>&1 | sed 's/\(saving bundle to \).*/\1/' | sed 's/Permission denied.*\.hg\/store\/\(.*\)/Permission denied \.hg\/store\/\1/'
+    echo % after update $1, strip $2
+    chmod +$3 $4
+    hg verify
+    echo % journal contents
+    cat .hg/store/journal | sed 's/\.i[^\n]*/\.i/'
+    ls .hg/store/journal >/dev/null 2>&1 && hg recover
+    ls .hg/strip-backup/* >/dev/null 2>&1 && hg unbundle -q .hg/strip-backup/*
+    rm -rf .hg/strip-backup
+}
+
+hg init test
+cd test
+
+echo a > a
+hg -q ci -m "a" -A
+
+echo b > b
+hg -q ci -m "b" -A
+
+echo c > c
+hg -q ci -m "c" -A
+
+teststrip 0 1 w .hg/store/data/b.i
+teststrip 0 1 r .hg/store/data/b.i
+teststrip 0 1 w .hg/store/00changelog.i
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-repair-strip.out	Sun Apr 26 11:49:17 2009 +0200
@@ -0,0 +1,83 @@
+% before update 0, strip 1
+changeset:   0:cb9a9f314b8b
+user:        test
+date:        Thu Jan 01 00:00:00 1970 +0000
+summary:     a
+
+saving bundle to 
+transaction abort!
+failed to truncate data/b.i
+rollback failed - please run hg recover
+abort: Permission denied .hg/store/data/b.i
+% after update 0, strip 1
+checking changesets
+checking manifests
+crosschecking files in changesets and manifests
+checking files
+warning: orphan revlog 'data/b.i'
+1 files, 1 changesets, 1 total revisions
+1 warnings encountered!
+% journal contents
+00changelog.i
+00manifest.i
+data/b.i
+data/c.i
+rolling back interrupted transaction
+checking changesets
+checking manifests
+crosschecking files in changesets and manifests
+checking files
+1 files, 1 changesets, 1 total revisions
+% before update 0, strip 1
+changeset:   0:cb9a9f314b8b
+user:        test
+date:        Thu Jan 01 00:00:00 1970 +0000
+summary:     a
+
+abort: Permission denied .hg/store/data/b.i
+% after update 0, strip 1
+checking changesets
+checking manifests
+crosschecking files in changesets and manifests
+checking files
+3 files, 3 changesets, 3 total revisions
+% journal contents
+cat: .hg/store/journal: No such file or directory
+% before update 0, strip 1
+changeset:   0:cb9a9f314b8b
+user:        test
+date:        Thu Jan 01 00:00:00 1970 +0000
+summary:     a
+
+saving bundle to 
+transaction abort!
+failed to truncate 00changelog.i
+rollback failed - please run hg recover
+abort: Permission denied .hg/store/00changelog.i
+% after update 0, strip 1
+checking changesets
+checking manifests
+crosschecking files in changesets and manifests
+ 1: changeset refers to unknown manifest a539ce0c1a22
+ 2: changeset refers to unknown manifest e3738bf54399
+ b@1: in changeset but not in manifest
+ c@2: in changeset but not in manifest
+checking files
+ data/b.i@1: missing revlog!
+ 0: empty or missing b
+ data/c.i@2: missing revlog!
+ 0: empty or missing c
+3 files, 3 changesets, 1 total revisions
+8 integrity errors encountered!
+(first damaged changeset appears to be 0)
+% journal contents
+00changelog.i
+00manifest.i
+data/b.i
+data/c.i
+rolling back interrupted transaction
+checking changesets
+checking manifests
+crosschecking files in changesets and manifests
+checking files
+1 files, 1 changesets, 1 total revisions
--- a/tests/test-strict.out	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-strict.out	Sun Apr 26 11:49:17 2009 +0200
@@ -14,7 +14,7 @@
  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
- parents    show the parents of the working dir or revision
+ parents    show the parents of the working directory or revision
  pull       pull changes from the specified source
  push       push changes to the specified destination
  remove     remove the specified files on the next commit
--- a/tests/test-trusted.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-trusted.py	Sun Apr 26 11:49:17 2009 +0200
@@ -3,7 +3,7 @@
 # monkey-patching some functions in the util module
 
 import os
-from mercurial import ui, util
+from mercurial import ui, util, error
 
 hgrc = os.environ['HGRCPATH']
 f = open(hgrc)
@@ -60,7 +60,7 @@
                                      trusted)
 
     parentui = ui.ui()
-    parentui.updateopts(debug=debug)
+    parentui.setconfig('ui', 'debug', str(bool(debug)))
     u = ui.ui(parentui=parentui)
     u.readconfig('.hg/hgrc')
     if silent:
@@ -85,7 +85,6 @@
 f = open('.hg/hgrc', 'w')
 f.write('[paths]\n')
 f.write('local = /another/path\n\n')
-f.write('interpolated = %(global)s%(local)s\n\n')
 f.close()
 
 #print '# Everything is run by user foo, group bar\n'
@@ -133,19 +132,19 @@
 print "# prints debug warnings"
 u = testui(user='abc', group='def', cuser='foo', debug=True)
 
-print "# ui.readsections"
+print "# ui.readconfig sections"
 filename = 'foobar'
 f = open(filename, 'w')
 f.write('[foobar]\n')
 f.write('baz = quux\n')
 f.close()
-u.readsections(filename, 'foobar')
+u.readconfig(filename, sections = ['foobar'])
 print u.config('foobar', 'baz')
 
 print
 print "# read trusted, untrusted, new ui, trusted"
 u = ui.ui()
-u.updateopts(debug=True)
+u.setconfig('ui', 'debug', 'on')
 u.readconfig(filename)
 u2 = ui.ui(parentui=u)
 def username(uid=None):
@@ -154,10 +153,8 @@
 u2.readconfig('.hg/hgrc')
 print 'trusted:'
 print u2.config('foobar', 'baz')
-print u2.config('paths', 'interpolated')
 print 'untrusted:'
 print u2.config('foobar', 'baz', untrusted=True)
-print u2.config('paths', 'interpolated', untrusted=True)
 
 print
 print "# error handling"
@@ -179,33 +176,15 @@
 print
 print "# parse error"
 f = open('.hg/hgrc', 'w')
-f.write('foo = bar')
-f.close()
-testui(user='abc', group='def', silent=True)
-assertraises(lambda: testui(debug=True, silent=True))
-
-print
-print "# interpolation error"
-f = open('.hg/hgrc', 'w')
-f.write('[foo]\n')
-f.write('bar = %(')
+f.write('foo')
 f.close()
-u = testui(debug=True, silent=True)
-print '# regular config:'
-print '  trusted',
-assertraises(lambda: u.config('foo', 'bar'))
-print 'untrusted',
-assertraises(lambda: u.config('foo', 'bar', untrusted=True))
 
-u = testui(user='abc', group='def', debug=True, silent=True)
-print '  trusted ',
-print u.config('foo', 'bar')
-print 'untrusted',
-assertraises(lambda: u.config('foo', 'bar', untrusted=True))
+try:
+    testui(user='abc', group='def', silent=True)
+except error.ConfigError, inst:
+    print inst
 
-print '# configitems:'
-print '  trusted ',
-print u.configitems('foo')
-print 'untrusted',
-assertraises(lambda: u.configitems('foo', untrusted=True))
-
+try:
+    testui(debug=True, silent=True)
+except error.ConfigError, inst:
+    print inst
--- a/tests/test-trusted.py.out	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-trusted.py.out	Sun Apr 26 11:49:17 2009 +0200
@@ -1,21 +1,17 @@
 # same user, same group
 trusted
     global = /some/path
-    interpolated = /some/path/another/path
     local = /another/path
 untrusted
 . . global = /some/path
-. . interpolated = /some/path/another/path
 . . local = /another/path
 
 # same user, different group
 trusted
     global = /some/path
-    interpolated = /some/path/another/path
     local = /another/path
 untrusted
 . . global = /some/path
-. . interpolated = /some/path/another/path
 . . local = /another/path
 
 # different user, same group
@@ -24,17 +20,14 @@
     global = /some/path
 untrusted
 . . global = /some/path
-. . interpolated = /some/path/another/path
 . . local = /another/path
 
 # different user, same group, but we trust the group
 trusted
     global = /some/path
-    interpolated = /some/path/another/path
     local = /another/path
 untrusted
 . . global = /some/path
-. . interpolated = /some/path/another/path
 . . local = /another/path
 
 # different user, different group
@@ -43,70 +36,57 @@
     global = /some/path
 untrusted
 . . global = /some/path
-. . interpolated = /some/path/another/path
 . . local = /another/path
 
 # different user, different group, but we trust the user
 trusted
     global = /some/path
-    interpolated = /some/path/another/path
     local = /another/path
 untrusted
 . . global = /some/path
-. . interpolated = /some/path/another/path
 . . local = /another/path
 
 # different user, different group, but we trust the group
 trusted
     global = /some/path
-    interpolated = /some/path/another/path
     local = /another/path
 untrusted
 . . global = /some/path
-. . interpolated = /some/path/another/path
 . . local = /another/path
 
 # different user, different group, but we trust the user and the group
 trusted
     global = /some/path
-    interpolated = /some/path/another/path
     local = /another/path
 untrusted
 . . global = /some/path
-. . interpolated = /some/path/another/path
 . . local = /another/path
 
 # we trust all users
 # different user, different group
 trusted
     global = /some/path
-    interpolated = /some/path/another/path
     local = /another/path
 untrusted
 . . global = /some/path
-. . interpolated = /some/path/another/path
 . . local = /another/path
 
 # we trust all groups
 # different user, different group
 trusted
     global = /some/path
-    interpolated = /some/path/another/path
     local = /another/path
 untrusted
 . . global = /some/path
-. . interpolated = /some/path/another/path
 . . local = /another/path
 
 # we trust all users and groups
 # different user, different group
 trusted
     global = /some/path
-    interpolated = /some/path/another/path
     local = /another/path
 untrusted
 . . global = /some/path
-. . interpolated = /some/path/another/path
 . . local = /another/path
 
 # we don't get confused by users and groups with the same name
@@ -116,57 +96,47 @@
     global = /some/path
 untrusted
 . . global = /some/path
-. . interpolated = /some/path/another/path
 . . local = /another/path
 
 # list of user names
 # different user, different group, but we trust the user
 trusted
     global = /some/path
-    interpolated = /some/path/another/path
     local = /another/path
 untrusted
 . . global = /some/path
-. . interpolated = /some/path/another/path
 . . local = /another/path
 
 # list of group names
 # different user, different group, but we trust the group
 trusted
     global = /some/path
-    interpolated = /some/path/another/path
     local = /another/path
 untrusted
 . . global = /some/path
-. . interpolated = /some/path/another/path
 . . local = /another/path
 
 # Can't figure out the name of the user running this process
 # different user, different group
+Not trusting file .hg/hgrc from untrusted user abc, group def
 trusted
     global = /some/path
-    interpolated = /some/path/another/path
-    local = /another/path
 untrusted
 . . global = /some/path
-. . interpolated = /some/path/another/path
 . . local = /another/path
 
 # prints debug warnings
 # different user, different group
 Not trusting file .hg/hgrc from untrusted user abc, group def
 trusted
-Ignoring untrusted configuration option paths.interpolated = /some/path/another/path
 Ignoring untrusted configuration option paths.local = /another/path
     global = /some/path
 untrusted
 . . global = /some/path
-.Ignoring untrusted configuration option paths.interpolated = /some/path/another/path
- . interpolated = /some/path/another/path
 .Ignoring untrusted configuration option paths.local = /another/path
  . local = /another/path
 
-# ui.readsections
+# ui.readconfig sections
 quux
 
 # read trusted, untrusted, new ui, trusted
@@ -174,10 +144,8 @@
 trusted:
 Ignoring untrusted configuration option foobar.baz = quux
 None
-/some/path/another/path
 untrusted:
 quux
-/some/path/another/path
 
 # error handling
 # file doesn't exist
@@ -187,26 +155,6 @@
 # parse error
 # different user, different group
 Not trusting file .hg/hgrc from untrusted user abc, group def
-Ignored: Failed to parse .hg/hgrc
-File contains no section headers.
-file: .hg/hgrc, line: 1
-'foo = bar'
-# same user, same group
-raised Abort
-
-# interpolation error
+Ignored: config error at .hg/hgrc:1: 'foo'
 # same user, same group
-# regular config:
-  trusted raised Abort
-untrusted raised Abort
-# different user, different group
-Not trusting file .hg/hgrc from untrusted user abc, group def
-  trusted Ignored: Error in configuration section [foo] parameter 'bar':
-bad interpolation variable reference '%('
- None
-untrusted raised Abort
-# configitems:
-  trusted Ignored: Error in configuration section [foo]:
-bad interpolation variable reference '%('
- []
-untrusted raised Abort
+config error at .hg/hgrc:1: 'foo'
--- a/tests/test-ui-config	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-ui-config	Sun Apr 26 11:49:17 2009 +0200
@@ -1,10 +1,9 @@
 #!/usr/bin/env python
 
-import ConfigParser
-from mercurial import ui, util, dispatch
+from mercurial import ui, util, dispatch, error
 
 testui = ui.ui()
-parsed = dispatch._parseconfig([
+parsed = dispatch._parseconfig(testui, [
     'values.string=string value',
     'values.bool1=true',
     'values.bool2=false',
@@ -12,20 +11,10 @@
     'lists.list2=foo bar baz',
     'lists.list3=alice, bob',
     'lists.list4=foo bar baz alice, bob',
-    'interpolation.value1=hallo',
-    'interpolation.value2=%(value1)s world',
-    'interpolation.value3=%(novalue)s',
-    'interpolation.value4=%(bad)1',
-    'interpolation.value5=%bad2',
 ])
-testui.updateopts(config=parsed)
 
 print repr(testui.configitems('values'))
 print repr(testui.configitems('lists'))
-try:
-    print repr(testui.configitems('interpolation'))
-except util.Abort, inst:
-    print inst
 print "---"
 print repr(testui.config('values', 'string'))
 print repr(testui.config('values', 'bool1'))
@@ -34,7 +23,7 @@
 print "---"
 try:
     print repr(testui.configbool('values', 'string'))
-except util.Abort, inst:
+except error.ConfigError, inst:
     print inst
 print repr(testui.configbool('values', 'bool1'))
 print repr(testui.configbool('values', 'bool2'))
@@ -55,37 +44,12 @@
 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 "---"
-print repr(testui.config('interpolation', 'value1'))
-print repr(testui.config('interpolation', 'value2'))
-try:
-    print repr(testui.config('interpolation', 'value3'))
-except util.Abort, inst:
-    print inst
-try:
-    print repr(testui.config('interpolation', 'value4'))
-except util.Abort, inst:
-    print inst
-try:
-    print repr(testui.config('interpolation', 'value5'))
-except util.Abort, inst:
-    print inst
-print "---"
 
-cp = util.configparser()
-cp.add_section('foo')
-cp.set('foo', 'bar', 'baz')
-try:
-    # should fail - keys are case-sensitive
-    cp.get('foo', 'Bar')
-except ConfigParser.NoOptionError, inst:
-    print inst
+print repr(testui.config('values', 'String'))
 
 def function():
     pass
 
-cp.add_section('hook')
 # values that aren't strings should work
-cp.set('hook', 'commit', function)
-f = cp.get('hook', 'commit')
-print "f %s= function" % (f == function and '=' or '!')
+testui.setconfig('hook', 'commit', function)
+print function == testui.config('hook', 'commit')
--- a/tests/test-ui-config.out	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-ui-config.out	Sun Apr 26 11:49:17 2009 +0200
@@ -1,15 +1,12 @@
-[('bool1', 'true'), ('bool2', 'false'), ('string', 'string value')]
+[('string', 'string value'), ('bool1', 'true'), ('bool2', 'false')]
 [('list1', 'foo'), ('list2', 'foo bar baz'), ('list3', 'alice, bob'), ('list4', 'foo bar baz alice, bob')]
-Error in configuration section [interpolation]:
-'%' must be followed by '%' or '(', found: '%bad2'
 ---
 'string value'
 'true'
 'false'
 None
 ---
-Error in configuration section [values] parameter 'string':
-Not a boolean: string value
+values.string not a boolean ('string value')
 True
 False
 False
@@ -29,20 +26,5 @@
 ['foo', 'bar']
 ['foo bar']
 ['foo', 'bar']
----
-'hallo'
-'hallo world'
-Error in configuration section [interpolation] parameter 'value3':
-Bad value substitution:
-	section: [interpolation]
-	option : value3
-	key    : novalue
-	rawval : 
-
-Error in configuration section [interpolation] parameter 'value4':
-bad interpolation variable reference '%(bad)1'
-Error in configuration section [interpolation] parameter 'value5':
-'%' must be followed by '%' or '(', found: '%bad2'
----
-No option 'Bar' in section: 'foo'
-f == function
+None
+True
--- a/tests/test-ui-verbosity	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-ui-verbosity	Sun Apr 26 11:49:17 2009 +0200
@@ -31,7 +31,10 @@
     f.close()
 
     u = ui.ui()
-    u.updateopts(quiet=cmd_quiet, verbose=cmd_verbose, debug=cmd_debug)
+    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:
--- a/tests/test-walkrepo.py	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-walkrepo.py	Sun Apr 26 11:49:17 2009 +0200
@@ -1,7 +1,7 @@
 import os
 import os.path
 from mercurial import hg, ui
-from mercurial.util import walkrepos, set, frozenset
+from mercurial.util import walkrepos
 from os import mkdir, chdir
 from os.path import join as pjoin
 
--- a/tests/test-win32text	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-win32text	Sun Apr 26 11:49:17 2009 +0200
@@ -1,5 +1,8 @@
 #!/bin/sh
 
+hg init t
+cd t
+
 cat > unix2dos.py <<EOF
 import sys
 
@@ -14,7 +17,6 @@
 print(sys.stdin.read().replace('\n', '<LF>').replace('\r', '<CR>').replace('\0', '<NUL>'))
 EOF
 
-hg init
 echo '[hooks]' >> .hg/hgrc
 echo 'pretxncommit.crlf = python:hgext.win32text.forbidcrlf' >> .hg/hgrc
 echo 'pretxnchangegroup.crlf = python:hgext.win32text.forbidcrlf' >> .hg/hgrc
@@ -23,14 +25,41 @@
 
 echo hello > f
 hg add f
+echo commit should succeed
 hg ci -m 1 -d'0 0'
 echo
 
+hg clone . ../zoz
+cp .hg/hgrc ../zoz/.hg
+
 python unix2dos.py f
+echo commit should fail
+hg ci -m 2.1 -d'0 0'
+echo
+
+mv .hg/hgrc .hg/hgrc.bak
+echo commits should succeed
 hg ci -m 2 -d'0 0'
-hg revert -a
+hg cp f g
+hg ci -m 2.2 -d'0 0'
 echo
 
+echo push should fail
+hg push ../zoz
+echo
+
+mv .hg/hgrc.bak .hg/hgrc
+echo hello > f
+hg rm g
+echo commit should succeed
+hg ci -m 2.3 -d'0 0'
+echo
+
+echo push should succeed
+hg push ../zoz
+echo
+
+echo and now for something completely different
 mkdir d
 echo hello > d/f2
 python unix2dos.py d/f2
--- a/tests/test-win32text.out	Sun Apr 26 11:35:53 2009 +0200
+++ b/tests/test-win32text.out	Sun Apr 26 11:49:17 2009 +0200
@@ -2,115 +2,29 @@
 pretxncommit.crlf = python:hgext.win32text.forbidcrlf
 pretxnchangegroup.crlf = python:hgext.win32text.forbidcrlf
 
-
-Attempt to commit or push text file(s) using CRLF line endings
-in b1aa5cde7ff4: f
-transaction abort!
-rollback completed
-abort: pretxncommit.crlf hook failed
-reverting f
-
-Attempt to commit or push text file(s) using CRLF line endings
-in 88b17af74937: d/f2
-transaction abort!
-rollback completed
-abort: pretxncommit.crlf hook failed
-forgetting d/f2
-
-
-changeset:   2:b67b2dae057a
-tag:         tip
-user:        test
-date:        Thu Jan 01 00:00:00 1970 +0000
-files:       bin
-description:
-5
-
-
-changeset:   1:c72a7d1d0907
-user:        test
-date:        Thu Jan 01 00:00:00 1970 +0000
-files:       f
-description:
-4
-
-
-changeset:   0:fcf06d5c4e1d
-user:        test
-date:        Thu Jan 01 00:00:00 1970 +0000
-files:       f
-description:
-1
-
-
+commit should succeed
 
 updating working directory
 1 files updated, 0 files merged, 0 files removed, 0 files unresolved
-
-adding dupe/a
-adding dupe/b
-adding dupe/c
-adding dupe/d
-changeset:   5:6e8a7629ff5b
-tag:         tip
-user:        test
-date:        Thu Jan 01 00:00:00 1970 +0000
-files:       d
-description:
-d
-
-
-changeset:   4:ac30a42ce8bc
-user:        test
-date:        Thu Jan 01 00:00:00 1970 +0000
-files:       b c
-description:
-b/c
-
+commit should fail
+Attempt to commit or push text file(s) using CRLF line endings
+in f583ea08d42a: f
+transaction abort!
+rollback completed
+abort: pretxncommit.crlf hook failed
 
-changeset:   3:a73b85ef1fb7
-user:        test
-date:        Thu Jan 01 00:00:00 1970 +0000
-files:       a
-description:
-a
-
-
-changeset:   2:b67b2dae057a
-user:        test
-date:        Thu Jan 01 00:00:00 1970 +0000
-files:       bin
-description:
-5
-
+commits should succeed
 
-changeset:   1:c72a7d1d0907
-user:        test
-date:        Thu Jan 01 00:00:00 1970 +0000
-files:       f
-description:
-4
-
-
-changeset:   0:fcf06d5c4e1d
-user:        test
-date:        Thu Jan 01 00:00:00 1970 +0000
-files:       f
-description:
-1
-
-
-
-pulling from dupe
+push should fail
+pushing to ../zoz
 searching for changes
 adding changesets
 adding manifests
 adding file changes
-added 3 changesets with 4 changes to 4 files
+added 2 changesets with 2 changes to 2 files
 Attempt to commit or push text file(s) using CRLF line endings
-in ac30a42ce8bc: b
-in ac30a42ce8bc: c
-in 6e8a7629ff5b: d
+in b94ebd309a6d: g
+in b1aa5cde7ff4: f
 
 To prevent this mistake in your local repository,
 add to Mercurial.ini or .hg/hgrc:
@@ -130,7 +44,26 @@
 rollback completed
 abort: pretxnchangegroup.crlf hook failed
 
-changeset:   2:b67b2dae057a
+commit should succeed
+
+push should succeed
+pushing to ../zoz
+searching for changes
+adding changesets
+adding manifests
+adding file changes
+added 3 changesets with 3 changes to 2 files
+
+and now for something completely different
+Attempt to commit or push text file(s) using CRLF line endings
+in cefdb8d0b741: d/f2
+transaction abort!
+rollback completed
+abort: pretxncommit.crlf hook failed
+forgetting d/f2
+
+
+changeset:   5:d4ea9ae21be3
 tag:         tip
 user:        test
 date:        Thu Jan 01 00:00:00 1970 +0000
@@ -139,7 +72,88 @@
 5
 
 
-changeset:   1:c72a7d1d0907
+changeset:   4:6ba409927d51
+user:        test
+date:        Thu Jan 01 00:00:00 1970 +0000
+files:       f
+description:
+4
+
+
+changeset:   3:788a4e595187
+user:        test
+date:        Thu Jan 01 00:00:00 1970 +0000
+files:       f g
+description:
+2.3
+
+
+changeset:   2:b94ebd309a6d
+user:        test
+date:        Thu Jan 01 00:00:00 1970 +0000
+files:       g
+description:
+2.2
+
+
+changeset:   1:b1aa5cde7ff4
+user:        test
+date:        Thu Jan 01 00:00:00 1970 +0000
+files:       f
+description:
+2
+
+
+changeset:   0:fcf06d5c4e1d
+user:        test
+date:        Thu Jan 01 00:00:00 1970 +0000
+files:       f
+description:
+1
+
+
+
+updating working directory
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+adding dupe/a
+adding dupe/b
+adding dupe/c
+adding dupe/d
+changeset:   8:7654104f33c3
+tag:         tip
+user:        test
+date:        Thu Jan 01 00:00:00 1970 +0000
+files:       d
+description:
+d
+
+
+changeset:   7:9be4c2808cc9
+user:        test
+date:        Thu Jan 01 00:00:00 1970 +0000
+files:       b c
+description:
+b/c
+
+
+changeset:   6:aa4367ed325a
+user:        test
+date:        Thu Jan 01 00:00:00 1970 +0000
+files:       a
+description:
+a
+
+
+changeset:   5:d4ea9ae21be3
+user:        test
+date:        Thu Jan 01 00:00:00 1970 +0000
+files:       bin
+description:
+5
+
+
+changeset:   4:6ba409927d51
 user:        test
 date:        Thu Jan 01 00:00:00 1970 +0000
 files:       f
@@ -147,6 +161,109 @@
 4
 
 
+changeset:   3:788a4e595187
+user:        test
+date:        Thu Jan 01 00:00:00 1970 +0000
+files:       f g
+description:
+2.3
+
+
+changeset:   2:b94ebd309a6d
+user:        test
+date:        Thu Jan 01 00:00:00 1970 +0000
+files:       g
+description:
+2.2
+
+
+changeset:   1:b1aa5cde7ff4
+user:        test
+date:        Thu Jan 01 00:00:00 1970 +0000
+files:       f
+description:
+2
+
+
+changeset:   0:fcf06d5c4e1d
+user:        test
+date:        Thu Jan 01 00:00:00 1970 +0000
+files:       f
+description:
+1
+
+
+
+pulling from dupe
+searching for changes
+adding changesets
+adding manifests
+adding file changes
+added 3 changesets with 4 changes to 4 files
+Attempt to commit or push text file(s) using CRLF line endings
+in 7654104f33c3: d
+in 9be4c2808cc9: b
+in 9be4c2808cc9: c
+
+To prevent this mistake in your local repository,
+add to Mercurial.ini or .hg/hgrc:
+
+[hooks]
+pretxncommit.crlf = python:hgext.win32text.forbidcrlf
+
+and also consider adding:
+
+[extensions]
+hgext.win32text =
+[encode]
+** = cleverencode:
+[decode]
+** = cleverdecode:
+transaction abort!
+rollback completed
+abort: pretxnchangegroup.crlf hook failed
+
+changeset:   5:d4ea9ae21be3
+tag:         tip
+user:        test
+date:        Thu Jan 01 00:00:00 1970 +0000
+files:       bin
+description:
+5
+
+
+changeset:   4:6ba409927d51
+user:        test
+date:        Thu Jan 01 00:00:00 1970 +0000
+files:       f
+description:
+4
+
+
+changeset:   3:788a4e595187
+user:        test
+date:        Thu Jan 01 00:00:00 1970 +0000
+files:       f g
+description:
+2.3
+
+
+changeset:   2:b94ebd309a6d
+user:        test
+date:        Thu Jan 01 00:00:00 1970 +0000
+files:       g
+description:
+2.2
+
+
+changeset:   1:b1aa5cde7ff4
+user:        test
+date:        Thu Jan 01 00:00:00 1970 +0000
+files:       f
+description:
+2
+
+
 changeset:   0:fcf06d5c4e1d
 user:        test
 date:        Thu Jan 01 00:00:00 1970 +0000