changeset 7922:06bf76009249

merge with -stable
author Benoit Boissinot <benoit.boissinot@ens-lyon.org>
date Mon, 30 Mar 2009 01:30:58 +0200
parents 9ea05fbfa7ab (diff) f62482848d1b (current diff)
children 016d6357646d
files
diffstat 85 files changed, 12277 insertions(+), 1561 deletions(-) [+]
line wrap: on
line diff
--- a/Makefile	Fri Mar 27 11:17:46 2009 -0400
+++ b/Makefile	Mon Mar 30 01:30:58 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	Fri Mar 27 11:17:46 2009 -0400
+++ b/contrib/perf.py	Mon Mar 30 01:30:58 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	Mon Mar 30 01:30:58 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/doc/hgrc.5.txt	Fri Mar 27 11:17:46 2009 -0400
+++ b/doc/hgrc.5.txt	Mon Mar 30 01:30:58 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
--- a/hgext/churn.py	Fri Mar 27 11:17:46 2009 -0400
+++ b/hgext/churn.py	Mon Mar 30 01:30:58 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'):
--- a/hgext/convert/__init__.py	Fri Mar 27 11:17:46 2009 -0400
+++ b/hgext/convert/__init__.py	Mon Mar 30 01:30:58 2009 +0200
@@ -8,6 +8,7 @@
 
 import convcmd
 import cvsps
+import subversion
 from mercurial import commands
 from mercurial.i18n import _
 
@@ -199,7 +200,7 @@
     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
--- a/hgext/convert/convcmd.py	Fri Mar 27 11:17:46 2009 -0400
+++ b/hgext/convert/convcmd.py	Mon Mar 30 01:30:58 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
@@ -188,11 +188,11 @@
     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')
--- a/hgext/convert/cvs.py	Fri Mar 27 11:17:46 2009 -0400
+++ b/hgext/convert/cvs.py	Mon Mar 30 01:30:58 2009 +0200
@@ -327,7 +327,7 @@
                 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)
 
--- a/hgext/convert/filemap.py	Fri Mar 27 11:17:46 2009 -0400
+++ b/hgext/convert/filemap.py	Mon Mar 30 01:30:58 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, ''
 
--- a/hgext/convert/git.py	Fri Mar 27 11:17:46 2009 -0400
+++ b/hgext/convert/git.py	Mon Mar 30 01:30:58 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	Fri Mar 27 11:17:46 2009 -0400
+++ b/hgext/convert/gnuarch.py	Mon Mar 30 01:30:58 2009 +0200
@@ -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	Fri Mar 27 11:17:46 2009 -0400
+++ b/hgext/convert/hg.py	Mon Mar 30 01:30:58 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
@@ -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	Fri Mar 27 11:17:46 2009 -0400
+++ b/hgext/convert/monotone.py	Mon Mar 30 01:30:58 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 _
 
--- a/hgext/convert/p4.py	Fri Mar 27 11:17:46 2009 -0400
+++ b/hgext/convert/p4.py	Mon Mar 30 01:30:58 2009 +0200
@@ -28,7 +28,7 @@
     def __init__(self, ui, path, rev=None):
         super(p4_source, self).__init__(ui, path, rev=rev)
 
-        checktool('p4')
+        checktool('p4', abort=False)
 
         self.p4changes = {}
         self.heads = {}
--- a/hgext/convert/subversion.py	Fri Mar 27 11:17:46 2009 -0400
+++ b/hgext/convert/subversion.py	Mon Mar 30 01:30:58 2009 +0200
@@ -177,7 +177,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 +194,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 +215,7 @@
 
         try:
             self.get_blacklist()
-        except IOError, e:
+        except IOError:
             pass
 
         self.head = self.latest(self.module, latest)
@@ -246,7 +246,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):
@@ -438,7 +438,7 @@
                 pendings = remainings
                 tagspath = srctagspath
 
-        except SubversionException, (inst, num):
+        except SubversionException:
             self.ui.note(_('no tags found at revision %d\n') % start)
         return tags
 
@@ -533,7 +533,7 @@
                 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):
@@ -1103,7 +1103,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)
--- a/hgext/graphlog.py	Fri Mar 27 11:17:46 2009 -0400
+++ b/hgext/graphlog.py	Mon Mar 30 01:30:58 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
@@ -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/inotify/linux/__init__.py	Fri Mar 27 11:17:46 2009 -0400
+++ b/hgext/inotify/linux/__init__.py	Mon Mar 30 01:30:58 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	Fri Mar 27 11:17:46 2009 -0400
+++ b/hgext/inotify/server.py	Mon Mar 30 01:30:58 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/mq.py	Fri Mar 27 11:17:46 2009 -0400
+++ b/hgext/mq.py	Mon Mar 30 01:30:58 2009 +0200
@@ -1742,7 +1742,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)'))
@@ -1768,9 +1768,9 @@
                       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'])
+    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'))
--- a/hgext/notify.py	Fri Mar 27 11:17:46 2009 -0400
+++ b/hgext/notify.py	Mon Mar 30 01:30:58 2009 +0200
@@ -65,7 +65,6 @@
  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
 
--- a/hgext/parentrevspec.py	Fri Mar 27 11:17:46 2009 -0400
+++ b/hgext/parentrevspec.py	Mon Mar 30 01:30:58 2009 +0200
@@ -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	Fri Mar 27 11:17:46 2009 -0400
+++ b/hgext/patchbomb.py	Mon Mar 30 01:30:58 2009 +0200
@@ -230,8 +230,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 +344,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'))
@@ -468,6 +469,8 @@
            _('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)')),
--- a/hgext/rebase.py	Fri Mar 27 11:17:46 2009 -0400
+++ b/hgext/rebase.py	Mon Mar 30 01:30:58 2009 +0200
@@ -26,7 +26,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)
@@ -337,11 +336,10 @@
 
 def buildstate(repo, dest, src, base, collapse):
     'Define which revisions are going to be rebased and where'
-    state = {}
     targetancestors = util.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:
--- a/hgext/record.py	Fri Mar 27 11:17:46 2009 -0400
+++ b/hgext/record.py	Mon Mar 30 01:30:58 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], [])
 
--- a/hgext/transplant.py	Fri Mar 27 11:17:46 2009 -0400
+++ b/hgext/transplant.py	Mon Mar 30 01:30:58 2009 +0200
@@ -216,8 +216,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))
--- a/hgext/win32mbcs.py	Fri Mar 27 11:17:46 2009 -0400
+++ b/hgext/win32mbcs.py	Mon Mar 30 01:30:58 2009 +0200
@@ -46,54 +46,54 @@
 from mercurial import util
 
 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(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
 
 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(util._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"
+    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))
 
 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 +109,14 @@
  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 util._encoding.lower() in problematic_encodings.split():
+        for f in funcs.split():
+            wrapname(f)
+        ui.debug(_("[win32mbcs] activated with encoding: %s\n") % util._encoding)
 
--- a/hgext/win32text.py	Fri Mar 27 11:17:46 2009 -0400
+++ b/hgext/win32text.py	Mon Mar 30 01:30:58 2009 +0200
@@ -28,7 +28,7 @@
 # # 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
 
--- a/hgext/zeroconf/Zeroconf.py	Fri Mar 27 11:17:46 2009 -0400
+++ b/hgext/zeroconf/Zeroconf.py	Mon Mar 30 01:30:58 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,7 +256,7 @@
 
 class DNSQuestion(DNSEntry):
 	"""A DNS question entry"""
-	
+
 	def __init__(self, name, type, clazz):
 		if not name.endswith(".local."):
 			raise NonLocalNameException
@@ -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,7 +491,7 @@
 			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)
 
@@ -561,7 +561,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 +574,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 +607,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 +620,7 @@
 		self.names = {}
 		self.data = []
 		self.size = 12
-		
+
 		self.questions = []
 		self.answers = []
 		self.authorities = []
@@ -660,7 +660,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 +739,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 +758,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 +773,7 @@
 
 class DNSCache(object):
 	"""A cache of DNS entries"""
-	
+
 	def __init__(self):
 		self.cache = {}
 
@@ -866,12 +866,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 +895,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 +922,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 +946,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 +957,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 +1017,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 +1087,7 @@
 				index += 1
 				strs.append(text[index:index+length])
 				index += length
-			
+
 			for s in strs:
 				eindex = s.find('=')
 				if eindex == -1:
@@ -1111,7 +1110,7 @@
 		except:
 			traceback.print_exc()
 			self.properties = None
-			
+
 	def getType(self):
 		"""Type accessor"""
 		return self.type
@@ -1201,7 +1200,7 @@
 			result = 1
 		finally:
 			zeroconf.removeListener(self)
-			
+
 		return result
 
 	def __eq__(self, other):
@@ -1226,7 +1225,7 @@
 				result += self.text[:17] + "..."
 		result += "]"
 		return result
-				
+
 
 class Zeroconf(object):
 	"""Implementation of Zeroconf Multicast DNS Service Discovery
@@ -1266,7 +1265,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 +1276,7 @@
 		self.cache = DNSCache()
 
 		self.condition = threading.Condition()
-		
+
 		self.engine = Engine(self)
 		self.listener = Listener(self)
 		self.reaper = Reaper(self)
@@ -1472,7 +1471,7 @@
 						record = entry
 			else:
 				self.cache.add(record)
-				
+
 			self.updateRecord(now, record)
 
 	def handleQuery(self, msg, addr, port):
@@ -1486,14 +1485,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 +1502,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 +1520,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 +1530,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 +1545,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	Fri Mar 27 11:17:46 2009 -0400
+++ b/hgext/zeroconf/__init__.py	Mon Mar 30 01:30:58 2009 +0200
@@ -77,8 +77,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 +131,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	Fri Mar 27 11:17:46 2009 -0400
+++ b/i18n/da.po	Mon Mar 30 01:30:58 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-03-09 23:19+0100\n"
+"PO-Revision-Date: 2009-03-10 23:40+0100\n"
 "Last-Translator:  <mg@daimi.au.dk>\n"
 "Language-Team: Danish\n"
 "MIME-Version: 1.0\n"
@@ -241,7 +243,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 ""
@@ -712,6 +714,7 @@
 "    - Monotone [mtn]\n"
 "    - GNU Arch [gnuarch]\n"
 "    - Bazaar [bzr]\n"
+"    - Perforce [p4]\n"
 "\n"
 "    Accepted destination formats [identifiers]:\n"
 "    - Mercurial [hg]\n"
@@ -778,8 +781,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"
@@ -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 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"
@@ -1203,6 +1224,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 ""
 
@@ -1501,7 +1528,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)"
@@ -2659,7 +2686,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"
@@ -3666,7 +3693,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"
@@ -3784,7 +3811,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"
@@ -4626,7 +4653,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 ""
@@ -4813,17 +4840,17 @@
 "    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"
 "    "
 
@@ -4865,6 +4892,17 @@
 "    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 ""
@@ -4923,12 +4961,30 @@
 "    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"
 "    "
 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"
@@ -4991,8 +5047,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 ""
@@ -5077,7 +5132,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"
@@ -5163,6 +5218,51 @@
 "    Look at the help text for urls for important details about ssh:// URLs.\n"
 "    "
 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"
+"    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"
+"    Hvis du bruger -r tilvalget for at klone op til en specifik\n"
+"    revision, så vil ingen efterfølgende revisioner findes i det\n"
+"    klonede arkiv. Denne valgmulighed medfører --pull, selv ved lokale\n"
+"    arkiver.\n"
+"\n"
+"    Hvis -U tilvalget bruges vil den nye klon kun indeholde et arkiv\n"
+"    (.hg) og intet arbejdskatalog (arbejdskatalogets forældre er sat\n"
+"    til nul revisionen).\n"
+"\n"
+"    Se 'hg help urls' for detaljer om gyldige formatter for kilden.\n"
+"\n"
+"    Det er muligt at specificere en ssh:// URL som destination, men\n"
+"    der vil ikke bliver oprettet nogen .hg/hgrc fil eller noget\n"
+"    arbejdskatalog på den anden side. Se hjælpeteksten for URLer for\n"
+"    vigtige detaljer om ssh:// URLer.\n"
+"    "
 
 msgid ""
 "commit the specified files or all outstanding changes\n"
@@ -5176,11 +5276,26 @@
 "    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"
 "    "
 msgstr ""
+"arkiver de specificerede filer eller alle udestående ændringer\n"
+"\n"
+"    Arkiver ændringer i de angivne filer ind i arkivet.\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 +5309,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 +5512,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"
@@ -5435,6 +5573,41 @@
 "    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 ""
@@ -5677,6 +5850,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 +5906,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"
 "    "
@@ -5766,6 +5950,19 @@
 "    revision to merge with must be provided.\n"
 "    "
 msgstr ""
+"sammenføj arbejdskataloget med en anden revision\n"
+"\n"
+"    Sammenføj indholdet af det nuværende arbejdskataloget og den\n"
+"    ønskede revision. Filer som ændrede sig i forhold til en af\n"
+"    forældrene bliver markeret som ændret med hensyn til næste\n"
+"    arkivering, og arkiveringen skal laves før yderligere opdateringer\n"
+"    er tilladt.\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"
@@ -5809,6 +6006,14 @@
 "    revision or the 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 "can only specify an explicit file name"
 msgstr ""
@@ -5855,6 +6060,17 @@
 "    See 'hg help urls' for more information.\n"
 "    "
 msgstr ""
+"hent ændringer fra den angivne kilde\n"
+"\n"
+"    Hiver ændringer fra et fjert arkiv til et lokalt.\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"
+"    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 "
@@ -5883,6 +6099,27 @@
 "    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 hjælper med at\n"
+"    flytte ændringer fra det nuværende arkiv til et andet et. Hvis\n"
+"    destinationen er lokal, så er dette identisk til et pull i\n"
+"    destinationen af det nuværende 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 ændring og alle dets forfædre\n"
+"    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"
@@ -5940,6 +6177,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 ""
@@ -5965,10 +6227,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 ""
@@ -6111,6 +6373,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"
@@ -6147,6 +6416,38 @@
 "      = 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"
+"    ! = slettet, 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"
@@ -6263,6 +6564,34 @@
 "    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 +6614,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 +6623,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 +6683,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 ""
@@ -7249,9 +7578,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 ""
@@ -7287,8 +7616,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 +7635,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 +7659,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"
@@ -7350,11 +7679,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"
@@ -7366,8 +7697,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,26 +7711,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"
@@ -7414,7 +7751,7 @@
 "\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 ""
 
@@ -7423,12 +7760,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"
@@ -7436,7 +7775,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"
@@ -7461,8 +7800,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"
@@ -7474,7 +7813,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 ""
 
@@ -7490,14 +7829,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"
@@ -7526,7 +7865,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"
@@ -7563,7 +7902,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"
@@ -7572,15 +7911,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"
@@ -7596,7 +7941,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"
@@ -7623,7 +7968,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"
@@ -7655,13 +8000,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"
@@ -7686,7 +8032,7 @@
 msgstr ""
 
 msgid "updating working directory\n"
-msgstr "opdaterer arbejdsbibliotek\n"
+msgstr "opdaterer arbejdskatalog\n"
 
 msgid "updated"
 msgstr "opdateret"
@@ -7707,6 +8053,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 ""
 
@@ -7929,7 +8280,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"
@@ -8533,7 +8884,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"
@@ -8775,6 +9126,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!"
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/i18n/de.po	Mon Mar 30 01:30:58 2009 +0200
@@ -0,0 +1,9814 @@
+# 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-03-29 13:09+0200\n"
+"PO-Revision-Date: 2009-03-29 13:41+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"
+
+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"
+
+# Nicht übersetzen
+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 ""
+
+# 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 '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 ""
+"mercurial bookmarks (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 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 "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 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 ""
+"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 rev"
+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 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 "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. 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 "found synthetic rev 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 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 ""
+
+#, 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 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 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\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 "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 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 ""
+"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\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 ""
+
+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$\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 ""
+
+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 "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\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 ""
+
+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 ""
+
+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 ""
+
+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 ""
+
+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 ""
+
+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 ""
+
+#, 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 ""
+
+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 "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 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 ""
+
+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 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 "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 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 ""
+
+#, 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 ""
+
+# Nicht übersetzen
+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 ""
+
+# 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 "
+"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 ""
+"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 keepbranches and extrafn"
+msgstr "keepbranches und extrafn können nicht gleichzeitig genutzt werden"
+
+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 "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"
+
+# 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 "keep original revisions"
+msgstr "Behält die ursprünglichen Revisionen"
+
+msgid "keep original branches"
+msgstr "Behält die ursprünglichen Zweige"
+
+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 "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] | [-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 ""
+
+#, python-format
+msgid "record change %d/%d to %r?"
+msgstr ""
+
+msgid ""
+"interactively select changes to commit\n"
+"\n"
+"    If a list of files is omitted, all changes reported by \"hg status\"\n"
+"    will be candidates for recording.\n"
+"\n"
+"    See 'hg help dates' for a list of formats valid for -d/--date.\n"
+"\n"
+"    You will be prompted for whether to record changes to each\n"
+"    modified file, and for files with multiple changes, for each\n"
+"    change to use.  For each query, the following responses are\n"
+"    possible:\n"
+"\n"
+"    y - record this change\n"
+"    n - skip this change\n"
+"\n"
+"    s - skip remaining changes to this file\n"
+"    f - record remaining changes to this file\n"
+"\n"
+"    d - done, skip remaining changes and files\n"
+"    a - record all changes to all remaining files\n"
+"    q - quit, recording no changes\n"
+"\n"
+"    ? - display help"
+msgstr ""
+
+msgid ""
+"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 "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 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 bei der nächsten Übertragung\n"
+"    (commit) hinzugefügt. Um diese Aktion rückgängig zu machen,\n"
+"    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 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 ""
+"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 bei der\n"
+"    nächsten Übertragung (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 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 ""
+"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\" 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 ""
+"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\" 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\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 ""
+"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.\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 ""
+"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 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 ""
+"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"
+"\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"
+"    --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 ""
+"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.\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 ""
+"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"
+"    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 ""
+"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"
+"    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"
+"    Wenn die -r Option zum klonen bis zu einer bestimmten Revision genutzt\n"
+"    wird, werden keine Folgeversionen im geklonten Archiv vorhanden sein.\n"
+"    Diese Option impliziert --pull, auch bei lokalen Archiven.\n"
+"\n"
+"    Bei Nutzung der -U Option wird der Klon zwar das Projektarchiv "
+"enthalten\n"
+"    (.hg) aber keine Arbeitskopie laden (die Vorgängerversion der "
+"Arbeitskopie\n"
+"    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"
+"    "
+
+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 ""
+"Übernimmt die vorgemerkten Änderungen und erzeugt eine neue Revision\n"
+"\n"
+"    Erzeugt eine neue Revision mit allen (von \"hg status\" angezeigten) "
+"oder\n"
+"    den angegegebenen geänderten Dateien des Arbeitsverzeichnisses im "
+"Archiv.\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 --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 mehere 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 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 ""
+"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 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 ""
+"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\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 "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 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 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 ""
+"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 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 ""
+"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 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 ""
+"Zeigt neue Revisionen in einer externen Quelle an\n"
+"\n"
+"    Zeigt alle neuen Änderungen an, die durch ein \"hg pull\" von der ange-\n"
+"    gebenen oder Standardquelle geholt werden würden.\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\".\n"
+"    This will avoid the problem of \"xargs\" treating single filenames\n"
+"    that 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 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 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 ""
+"Gibt das Manifest der angegebenen oder aktuellen Revision aus.\n"
+"\n"
+"    Das Manifest enthält die Liste aller Dateien under Versionskontrolle.\n"
+"    Wenn keine Revision angegeben ist, wird die Vorgängerversion des "
+"Arbeits-\n"
+"    verzeichnisses (bzw. die Spitze, falls dies leer ist) verwendet.\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"
+"    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 ""
+"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. Diese müssen mit \"hg commit\" "
+"zunächst\n"
+"    übernommen werden, bevor weitere Änderungen (add, delete, merge) zuge-\n"
+"    lassen werden.\n"
+"\n"
+"    Nach dem Übernehmen hat 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 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 ""
+"Zeigt die Vorgänger des Arbeitsverzeichnisses oder einer Revision\n"
+"\n"
+"    Gibt die Vorgängerversionen 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, 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 ""
+"Holt Änderungen aus dem angegebenen Projektarchiv\n"
+"\n"
+"    Bringt Änderungen aus einem entfernten Archiv in ein lokales.\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"
+"    Bei Weglassen der QUELLE wird standardmäßig der 'default'-Pfad genutzt.\n"
+"    Siehe 'hg help urls' für weitere Informationen.\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 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 ""
+"Liefert Änderungen zum angegebenen Ziel aus\n"
+"\n"
+"    Liefert Änderungen vom lokalen Archiv zum angegebenen Ziel aus.\n"
+"\n"
+"    Dies ist die symmetrische Operation zu 'pull'. Es hilft bei der "
+"Verteilung\n"
+"    der Änderungen von aktuellen Archiv zu einem anderen. Bei einem lokalen\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. Dies\n"
+"    bedeute normalerweise, dass der Nutzer vergessen hat vorher Änderungen\n"
+"    zu holen und zusammenzuführen vor der Auslieferung.\n"
+"\n"
+"    Bei Nutzung von -r wird der benannte Änderungssatz mit all seinen\n"
+"    Vorläufern auf das entfernte Archiv ausgeliefert.\n"
+"\n"
+"    Wichtige Details zu Urls mit ssh:// finden sich unter 'hg help urls'.\n"
+"    Falls das Ziel nicht angegeben wird, wird einer der Standardpfade "
+"genutzt.\n"
+"    Siehe 'hg help urls' für weitere Informationen.\n"
+"    "
+
+#, python-format
+msgid "pushing to %s\n"
+msgstr "Liefere nach %s aus\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 ""
+"Entfernt die angegebenen Dateien in der nächsten Version\n"
+"\n"
+"    Merkt die benannten Datei 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. -A kann genutzt werden, um Dateien zu "
+"entfernen,\n"
+"    die bereits gelöscht wurden, -f kann genutzt werden, um die Löschung zu\n"
+"    erzwingen. -AF entfernt Dateien aus der nächsten Revision, ohne sie zu\n"
+"    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"
+"    Dieser Befehl merkt Dateien für die Entfernung zur nächsten Version "
+"vor.\n"
+"    Um eine vorherige Entfernung 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 immer noch"
+
+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\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 ""
+
+#, python-format
+msgid "undeleting %s\n"
+msgstr ""
+
+#, python-format
+msgid "saving current version of %s as %s\n"
+msgstr ""
+
+#, python-format
+msgid "file not managed: %s\n"
+msgstr ""
+
+#, python-format
+msgid "no changes needed to %s\n"
+msgstr ""
+
+msgid ""
+"roll back the last transaction\n"
+"\n"
+"    This command should be used with care. There is only one level of\n"
+"    rollback, and there is no way to undo a rollback. It will also\n"
+"    restore the dirstate at the time of the last transaction, losing\n"
+"    any dirstate changes since that time.\n"
+"\n"
+"    Transactions are used to encapsulate the effects of all commands\n"
+"    that create new changesets or propagate existing changesets into a\n"
+"    repository. For example, the following commands are transactional,\n"
+"    and their effects can be rolled back:\n"
+"\n"
+"      commit\n"
+"      import\n"
+"      pull\n"
+"      push (with this repository as destination)\n"
+"      unbundle\n"
+"\n"
+"    This command is not intended for use on public repositories. Once\n"
+"    changes are visible for pull by other users, rolling a transaction\n"
+"    back locally is ineffective (someone else may already have pulled\n"
+"    the changes). Furthermore, a race is possible with readers of the\n"
+"    repository; for example an in-progress pull from the repository\n"
+"    may fail if a rollback is performed.\n"
+"    "
+msgstr ""
+
+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 ""
+"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 Dateien zu nutzen.\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 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 ""
+"Zeigt geänderte Dateien im Arbeitsverzeichnis an\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, außer -c (unverändert), -i (ignoriert), -C (Kopien) "
+"oder\n"
+"    -A wurde angegeben. Außer bei Angabe von Optionen, die mit \"Zeigt "
+"nur ...\"\n"
+"    beschrieben werden, werden die Optionen -mardu genutzt.\n"
+"\n"
+"    Die Option -q/--quiet blendet unüberwachte (unbekannte und ignorierte)\n"
+"    Dateien aus, außer sie werden explizit mit -u/--unknown oder -i/-"
+"ignored\n"
+"    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"
+"    ! = gelöscht, aber immer 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 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 ""
+"Aktualisiert das Arbeitsverzeichnis\n"
+"    Hebt das Arbeitsverzeichnis auf die angegebene Revision oder die\n"
+"    Spitze des aktuellen Zweiges an, falls sonst nichts 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 --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 ""
+"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"
+"    "
+
+msgid "output version and copyright information"
+msgstr ""
+
+#, python-format
+msgid "Mercurial Distributed SCM (version %s)\n"
+msgstr ""
+
+msgid ""
+"\n"
+"Copyright (C) 2005-2009 Matt Mackall <mpm@selenic.com> and others\n"
+"This is free software; see the source for copying conditions. There is NO\n"
+"warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
+msgstr ""
+
+msgid "repository root directory or symbolic path name"
+msgstr ""
+
+msgid "change working directory"
+msgstr ""
+
+msgid "do not prompt, assume 'yes' for any required answers"
+msgstr ""
+
+msgid "suppress output"
+msgstr ""
+
+msgid "enable additional output"
+msgstr ""
+
+msgid "set/override config option"
+msgstr ""
+
+msgid "enable debugging output"
+msgstr ""
+
+msgid "start debugger"
+msgstr ""
+
+msgid "set the charset encoding"
+msgstr ""
+
+msgid "set the charset encoding mode"
+msgstr ""
+
+msgid "print 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 "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 ""
+
+msgid "[OPTION]... [FILE]..."
+msgstr ""
+
+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 ""
+
+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 "Auch ausführen wenn das entfernte Archiv keinen Bezug hat"
+
+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 "[-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 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 "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 revs 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 revs where files were removed"
+msgstr "Revisionen hinzufügen, in denen Dateien entfernt wurden"
+
+msgid "show only merges"
+msgstr "Zeigt nur Zusammenführungen"
+
+msgid "revs 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 rev"
+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 dir)"
+msgstr ""
+"Name der auf der Webseite angezeigt wird (Standard: Arbeitsverzeichnis)"
+
+msgid "name of the webdir config file (serve more than one repo)"
+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 ""
+
+msgid "exception raised - generating profile anyway\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). 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 ""
+"\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 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 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\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 "Angabe Einzelner Revisionen"
+
+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 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"
+"\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 ""
+"\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\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 ""
+
+msgid "Diff Formats"
+msgstr "Diff-Formate"
+
+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 ""
+
+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 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"
+"    - 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"
+"    - 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 ""
+
+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\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"
+"    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 "
+"'in'\n"
+"      oder 'out').\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"
+
+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 not available on this system"
+msgstr ""
+
+#, python-format
+msgid "cannot start server at '%s:%d': %s"
+msgstr ""
+
+#, python-format
+msgid "calling hook %s: %s\n"
+msgstr ""
+
+#, python-format
+msgid "%s hook is invalid (\"%s\" not in a module)"
+msgstr ""
+
+#, python-format
+msgid "%s hook is invalid (import of \"%s\" failed)"
+msgstr ""
+
+#, python-format
+msgid "%s hook is invalid (\"%s\" is not defined)"
+msgstr ""
+
+#, python-format
+msgid "%s hook is invalid (\"%s\" is not callable)"
+msgstr ""
+
+#, python-format
+msgid "error: %s hook failed: %s\n"
+msgstr ""
+
+#, python-format
+msgid "error: %s hook raised an exception: %s\n"
+msgstr ""
+
+#, python-format
+msgid "%s hook failed"
+msgstr ""
+
+#, python-format
+msgid "warning: %s hook failed\n"
+msgstr ""
+
+#, python-format
+msgid "running hook %s: %s\n"
+msgstr ""
+
+#, python-format
+msgid "%s hook %s"
+msgstr ""
+
+#, python-format
+msgid "warning: %s hook %s\n"
+msgstr ""
+
+msgid "connection ended unexpectedly"
+msgstr ""
+
+#, python-format
+msgid "unsupported URL component: \"%s\""
+msgstr ""
+
+#, python-format
+msgid "using %s\n"
+msgstr ""
+
+#, python-format
+msgid "capabilities: %s\n"
+msgstr ""
+
+msgid "operation not supported over http"
+msgstr ""
+
+#, python-format
+msgid "sending %s command\n"
+msgstr ""
+
+#, python-format
+msgid "sending %s bytes\n"
+msgstr ""
+
+msgid "authorization failed"
+msgstr ""
+
+#, python-format
+msgid "http error while sending %s command\n"
+msgstr ""
+
+msgid "http error, possibly caused by proxy setting"
+msgstr ""
+
+#, python-format
+msgid "real URL is %s\n"
+msgstr ""
+
+#, python-format
+msgid "Requested URL: '%s'\n"
+msgstr ""
+
+#, python-format
+msgid "'%s' does not appear to be an hg repository"
+msgstr ""
+
+#, python-format
+msgid "'%s' sent a broken Content-Type header (%s)"
+msgstr ""
+
+#, python-format
+msgid "'%s' uses newer protocol %s"
+msgstr ""
+
+msgid "look up remote revision"
+msgstr ""
+
+msgid "unexpected response:"
+msgstr ""
+
+msgid "look up remote changes"
+msgstr ""
+
+msgid "push failed (unexpected response):"
+msgstr "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 ""
+
+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 ""
+
+#, python-format
+msgid ""
+"Failed to parse %s\n"
+"%s"
+msgstr ""
+
+#, 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 ""
+
+msgid "http authorization required\n"
+msgstr ""
+
+#, python-format
+msgid "realm: %s\n"
+msgstr ""
+
+#, python-format
+msgid "user: %s\n"
+msgstr ""
+
+msgid "user:"
+msgstr ""
+
+#, python-format
+msgid "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 ""
+
+#, 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 "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	Fri Mar 27 11:17:46 2009 -0400
+++ b/i18n/it.po	Mon Mar 30 01:30:58 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-11 15:14+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"
@@ -295,8 +297,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"
@@ -740,6 +742,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 +809,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 +888,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"
@@ -1231,6 +1252,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"
 
@@ -1808,7 +1835,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"
@@ -4332,7 +4359,7 @@
 msgstr "?"
 
 msgid "y - record this change"
-msgstr ""
+msgstr "y - registra questa modifica"
 
 msgid "s"
 msgstr "s"
@@ -4361,7 +4388,7 @@
 
 #, python-format
 msgid "record this change to %r?"
-msgstr ""
+msgstr "registrare questa modifica a %r?"
 
 msgid ""
 "interactively select changes to commit\n"
@@ -4886,7 +4913,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 +5255,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 +6124,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"
@@ -6216,10 +6249,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 +6266,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 +6323,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 +6897,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"
@@ -7908,7 +7945,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"
@@ -8281,6 +8318,12 @@
 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"
 
@@ -9365,7 +9408,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!"
--- a/i18n/ja.po	Fri Mar 27 11:17:46 2009 -0400
+++ b/i18n/ja.po	Mon Mar 30 01:30:58 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 ""
 
--- a/i18n/zh.po	Fri Mar 27 11:17:46 2009 -0400
+++ b/i18n/zh.po	Mon Mar 30 01:30:58 2009 +0200
@@ -5,7 +5,7 @@
 # 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 $
+# $Id: zh.po 1217 2009-03-11 09:20:30Z dongsheng.song@gmail.com $
 #
 # Update with pot file:
 #    msgmerge --update zh.po hg.pot
@@ -26,8 +26,8 @@
 # Dictionary:
 # blame             追溯
 # branch            分支
-# changes           改变
-# changeset         改变集
+# changes           修改
+# changeset         修改集
 # checkout          检出
 # remove            移除(从版本库删除)
 # delete            删除(只从文件系统删除)
@@ -44,12 +44,13 @@
 # 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"
+"POT-Creation-Date: 2009-03-20 14:26+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"
@@ -94,7 +95,7 @@
 
 #, python-format
 msgid "config error - hook type \"%s\" cannot stop incoming changesets"
-msgstr "配置错误 - 钩子类型 \"%s\" 不能终止进入的改变集"
+msgstr "配置错误 - 钩子类型 \"%s\" 不能终止进入的修改集"
 
 #, python-format
 msgid "acl: changes have source \"%s\" - skipping\n"
@@ -106,7 +107,7 @@
 
 #, python-format
 msgid "acl: access denied for changeset %s"
-msgstr "acl: 拒绝访问改变集 %s"
+msgstr "acl: 拒绝访问修改集 %s"
 
 #, python-format
 msgid "acl: user %s not allowed on %s\n"
@@ -114,7 +115,7 @@
 
 #, python-format
 msgid "acl: allowing changeset %s\n"
-msgstr "acl: 允许改变集 %s\n"
+msgstr "acl: 允许修改集 %s\n"
 
 msgid ""
 "allow user-defined command aliases\n"
@@ -178,8 +179,7 @@
 msgid ""
 "Parse .hg/bookmarks file and return a dictionary\n"
 "\n"
-"    Bookmarks are stored as {HASH}\\s{NAME}\n"
-" (localtags format) values\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"
@@ -282,7 +282,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 ""
@@ -719,6 +719,7 @@
 "    - Monotone [mtn]\n"
 "    - GNU Arch [gnuarch]\n"
 "    - Bazaar [bzr]\n"
+"    - Perforce [p4]\n"
 "\n"
 "    Accepted destination formats [identifiers]:\n"
 "    - Mercurial [hg]\n"
@@ -785,8 +786,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"
@@ -863,6 +865,22 @@
 "    --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"
@@ -1210,6 +1228,12 @@
 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 绑定"
 
@@ -1765,7 +1789,7 @@
 msgstr "显示版本分支图"
 
 msgid "limit number of changes displayed"
-msgstr "限制显示的改变集数量"
+msgstr "限制显示的修改集数量"
 
 msgid "show patch"
 msgstr "显示补丁"
@@ -2836,7 +2860,7 @@
 "\n"
 "    使用 '--force' 会覆盖已有的补丁。\n"
 "\n"
-"    可以使用 '--rev' 将已有的改变集置于 mq 控制下(例如 \n"
+"    可以使用 '--rev' 将已有的修改集置于 mq 控制下(例如 \n"
 "    'qimport --rev tip -n patch' 会将 tip 置于 mq 控制下)。当使用 '--git'\n"
 "    时,'--rev' 导入的补丁将会使用 git 差异格式。参见差异帮助主题,以了解\n"
 "    为什么这对于保留改名/复制信息和权限修改很重要。\n"
@@ -3444,7 +3468,7 @@
 msgstr "强制删除,纵然有本地修改"
 
 msgid "bundle unrelated changesets"
-msgstr "打包不相关的改变集"
+msgstr "打包不相关的修改集"
 
 msgid "no backups"
 msgstr "不备份"
@@ -3691,7 +3715,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"
@@ -3809,7 +3833,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"
@@ -4834,15 +4858,15 @@
 "    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"
 "\n"
 "    调度文件受版本控制,增加到版本库。\n"
 "\n"
-"    这些文件将于下次提交时增加到版本库。要在提交前撤销增加,\n"
-"    请参见 'hg revert'。\n"
+"    这些文件将于下次提交时增加到版本库。需要在提交前撤销增加,\n"
+"    参见 'hg revert'。\n"
 "\n"
 "    如果没有给出文件名称,就增加所有文件到版本库。\n"
 "    "
@@ -4883,7 +4907,7 @@
 "    anyway, probably with undesirable results.\n"
 "    "
 msgstr ""
-"显示指定文件每行的改变集信息\n"
+"显示指定文件每行的修改集信息\n"
 "\n"
 "    列出文件中的修改,为每行显示版本标识\n"
 "\n"
@@ -4950,7 +4974,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"
@@ -5018,8 +5042,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 ""
@@ -5104,7 +5127,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"
@@ -5236,7 +5259,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"
 "    "
@@ -5255,7 +5278,7 @@
 "    "
 
 msgid "created new head\n"
-msgstr ""
+msgstr "已经创建新顶点\n"
 
 #, python-format
 msgid "committed changeset %d:%s\n"
@@ -5266,13 +5289,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 ""
@@ -5281,10 +5304,10 @@
 msgstr ""
 
 msgid "There is no Mercurial repository here (.hg not found)"
-msgstr ""
+msgstr "此处没有水银版本库(没有找到 .hg)"
 
 msgid "either two or three arguments required"
-msgstr ""
+msgstr "需要两个或三个参数"
 
 msgid "returns the completion list associated with the given command"
 msgstr ""
@@ -5469,7 +5492,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"
@@ -5488,8 +5511,8 @@
 "    当没有选项 '-a' 时,将会避免处理检测为二进制的文件。当使用选项 '-a'\n"
 "    时,可能会有不合需要的结果。\n"
 "\n"
-"    使用选项 '--git' 会使用 git 扩展差异格式。请阅读差异帮助主题以了解\n"
-"    更多信息。\n"
+"    使用选项 '--git' 会使用 git 扩展差异格式。请阅读 'hg help diffs' 以\n"
+"    了解更多信息。\n"
 "    "
 
 msgid ""
@@ -5526,26 +5549,26 @@
 "    parent. It can be useful to review a merge.\n"
 "    "
 msgstr ""
-"为一个或多个改变集输出标题和差异\n"
+"为一个或多个修改集输出标题和差异\n"
 "\n"
 "    为一个或多个版本输出标题和差异。\n"
 "\n"
-"    在改变集标题中显示的信息是: 作者,改变集哈希,父亲和提交日志。\n"
-"\n"
-"    注意: 对于合并改变集,导出可能产生不期望的差异输出,因为它只会将合并\n"
-"    改变集与其第一个父亲比较。\n"
+"    在修改集标题中显示的信息是: 作者,修改集哈希,父亲和提交日志。\n"
+"\n"
+"    注意: 对于合并修改集,导出可能产生不期望的差异输出,因为它只会将合并\n"
+"    修改集与其第一个父亲比较。\n"
 "\n"
 "    可以输出到文件,这时会使用指定的格式化字符串构造文件名称。格式化规则\n"
 "    如下:\n"
 "\n"
 "    %%   字符 \"%\"\n"
-"    %H   改变集哈希 (40 位十六进制数字)\n"
+"    %H   修改集哈希 (40 位十六进制数字)\n"
 "    %N   产生的补丁号\n"
-"    %R   改变集版本号\n"
+"    %R   修改集版本号\n"
 "    %b   待导出的版本库的基本名称\n"
-"    %h   短改变集哈希(12 位十六进制数字)\n"
+"    %h   短修改集哈希(12 位十六进制数字)\n"
 "    %n   从 1 开始补 0 的序列号\n"
-"    %r   补 0 的改变集版本号\n"
+"    %r   补 0 的修改集版本号\n"
 "\n"
 "    当没有选项 '-a' 时,将会避免处理检测为二进制的文件。当使用选项 '-a'\n"
 "    时,可能会有不合需要的结果。\n"
@@ -5847,8 +5870,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"
 "    "
@@ -5867,12 +5890,12 @@
 "\n"
 "    参见 'hg help dates' 以获得 '-d/--date' 的有效格式列表。\n"
 "\n"
-"    此命令缺省输出: 改变集标识和哈希,标签,父亲,提交者,日期和时间,\n"
+"    此命令缺省输出: 修改集标识和哈希,标签,父亲,提交者,日期和时间,\n"
 "    以及每次提交的概要信息。当使用选项 '-v/--verbose' 时,会显示文件\n"
 "    变更列表和完整的提交信息。\n"
 "\n"
-"    注意: 对于合并改变集,'log -p' 可能产生不期望的差异输出,因为它只\n"
-"    会将合并改变集与其第一个父亲比较。而且,只显示对所有父亲都不同的\n"
+"    注意: 对于合并修改集,'log -p' 可能产生不期望的差异输出,因为它只\n"
+"    会将合并修改集与其第一个父亲比较。而且,只显示对所有父亲都不同的\n"
 "    文件列表。\n"
 "\n"
 "    "
@@ -6016,9 +6039,9 @@
 "    See 'hg help urls' for more information.\n"
 "    "
 msgstr ""
-"从指定版本库取得改变集\n"
-"\n"
-"    从远程版本库取得改变集到本地版本库。\n"
+"从指定版本库取得修改集\n"
+"\n"
+"    从远程版本库取得修改集到本地版本库。\n"
 "\n"
 "    查找位于指定路径或位置的版本库的全部修改,增加到版本版本库。默认不\n"
 "    更新工作目录。\n"
@@ -6065,7 +6088,7 @@
 "    推送默认拒绝导致增加远程版本库顶点数目的操作。这通常表明客户端在推送\n"
 "    之前忘记取得远程版本库的修改,并且合并。\n"
 "\n"
-"    如果使用了选项 '-r',此命名改变集以及其祖先都会被推送到远程版本库。\n"
+"    如果使用了选项 '-r',此命名修改集以及其祖先都会被推送到远程版本库。\n"
 "    \n"
 "\n"
 "    参见主题 'urls' 的帮助信息,以了解位置 'ssh://' 的重要详情。如果没有\n"
@@ -6174,10 +6197,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 ""
@@ -6537,12 +6560,12 @@
 
 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"
-"版权所有 (C) 2005-2008 Matt Mackall <mpm@selenic.com> 和其他人。\n"
+"版权所有 (C) 2005-2009 Matt Mackall <mpm@selenic.com> 和其他人。\n"
 "这是自由软件,具体参见版权条款。这里没有任何担保,甚至没有适合\n"
 "特定目的的隐含的担保。\n"
 
@@ -6673,7 +6696,7 @@
 msgstr "列出版本号 (默认)"
 
 msgid "list the changeset"
-msgstr "列出改变集"
+msgstr "列出修改集"
 
 msgid "show line number at the first appearance"
 msgstr "列出首次出现时的行号"
@@ -6778,7 +6801,7 @@
 msgstr "只复制版本库(没有工作副本)"
 
 msgid "a changeset you would like to have after cloning"
-msgstr "复制后你期望有的改变集"
+msgstr "复制后你期望有的修改集"
 
 msgid "[OPTION]... SOURCE [DEST]"
 msgstr ""
@@ -6865,7 +6888,7 @@
 msgstr ""
 
 msgid "follow changeset history, or file history across copies and renames"
-msgstr "跟踪改变集历史,或者跟踪文件的复制与改名操作"
+msgstr "跟踪修改集历史,或者跟踪文件的复制与改名操作"
 
 msgid "ignore case when matching"
 msgstr ""
@@ -6963,7 +6986,7 @@
 msgstr ""
 
 msgid "only follow the first parent of merge changesets"
-msgstr "只跟踪改变集的第一个父亲"
+msgstr "只跟踪修改集的第一个父亲"
 
 msgid "show revs matching date spec"
 msgstr "显示匹配日期的版本"
@@ -6984,7 +7007,7 @@
 msgstr "指定用户提交的版本"
 
 msgid "show only changesets within the given named branch"
-msgstr "只显示位于指定命名分支中的改变集"
+msgstr "只显示位于指定命名分支中的修改集"
 
 msgid "do not display revision or any of its ancestors"
 msgstr "不显示指定版本或其祖先"
@@ -7023,7 +7046,7 @@
 msgstr ""
 
 msgid "update to new tip if changesets were pulled"
-msgstr "如果有新的改变集,就更新到最新版本"
+msgstr "如果有新的修改集,就更新到最新版本"
 
 msgid "[-u] [-f] [-r REV]... [-e CMD] [--remotecmd CMD] [SOURCE]"
 msgstr ""
@@ -7509,9 +7532,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 ""
@@ -7529,16 +7552,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"
@@ -7553,11 +7576,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"
@@ -7573,11 +7596,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"
@@ -7589,8 +7614,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"
@@ -7603,26 +7628,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"
@@ -7637,7 +7668,7 @@
 "\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 ""
 
@@ -7646,12 +7677,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"
@@ -7659,7 +7692,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"
@@ -7684,8 +7717,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"
@@ -7697,12 +7730,12 @@
 "    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"
+"    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'。因此范围 \":"
@@ -7711,8 +7744,8 @@
 "\n"
 "    如果 'BEGIN' 大于 'END',版本视为反序。\n"
 "\n"
-"    范围是闭区间。即范围 '3:5' 是 '3','4','5'。同样,范围 '4:2' 是 '4',\n"
-"    '3','2'。\n"
+"    范围是闭区间。即范围 '3:5' 是 '3','4','5'。同样,范围 '9:6' 是 '9',\n"
+"    '8','7' 和 '6'。\n"
 "    "
 
 msgid "Diff Formats"
@@ -7727,14 +7760,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"
@@ -7757,13 +7790,13 @@
 "\n"
 "    虽然标准格式在大多数情况下都能满足要求,但是它不包含下述信息:\n"
 "\n"
-"     - 可执行状态\n"
+"     - 可执行状态和其它权限位\n"
 "     - 复制或改名信息\n"
 "     - 二进制文件的修改\n"
 "     - 创建或删除空文件\n"
 "\n"
-"    水银也支持解决这些限制的 git 扩展差异格式。由于支持 git 差异格式的工具\n"
-"    很少,所以它不是默认格式。\n"
+"    水银也支持解决这些限制的 git 扩展差异格式。由于一些常用的工具还不支持\n"
+"    此格式,所以它不是默认格式。\n"
 "\n"
 "    这意味着当从水银版本库(例如 \"hg export\")产生差异时,在其它版本库应用标\n"
 "    准差异时,会丢失文件复制或改名等额外信息,所以你要小心处理。水银的内部\n"
@@ -7786,7 +7819,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"
@@ -7821,7 +7854,7 @@
 "    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"
+"    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"
@@ -7830,15 +7863,20 @@
 "\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"
@@ -7854,7 +7892,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"
@@ -7868,7 +7906,7 @@
 "    来使用模版,或者选择已有的模版样式(--style)。\n"
 "\n"
 "    你可以定制任意输出与日志信息类似的命令,即: log,outgoing,incoming,\n"
-"    tip,parents,heads 和 glog 这些启用模版的命令。\n"
+"    tip,parents,heads 和 glog。\n"
 "\n"
 "    水银中内置了 3 种样式: default (默认), compact 和 changelog。用法:\n"
 "\n"
@@ -7882,22 +7920,22 @@
 "    花括号中的字符串称为关键字。可用的关键字依赖于模版的上下文。下述关键字\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"
+"    - 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"
 "\n"
 "       $ hg tip --template \"{date|isodate}\\n\"\n"
 "       2008-08-21 18:22 +0000\n"
@@ -7906,13 +7944,17 @@
 "\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"
+"    - 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"
@@ -7924,9 +7966,9 @@
 "    - obfuscate: 输入任意文本。返回其 XML 实体序列。\n"
 "    - person: 输入任意文本。返回 email 地址前的文本。\n"
 "    - rfc822date: 输入日期。返回 email 头部使用的日期格式。\n"
-"    - short: 改变集哈系。返回改变集哈系的短格式。例如 12 字符的 16 进制\n"
+"    - short: 修改集哈系。返回修改集哈系的短格式。例如 12 字符的 16 进制\n"
 "          字符串。\n"
-"    - shortdate: 输入日期。返回格式类似于 \"2006-09-04\"。\n"
+"    - shortdate: 输入日期。返回格式类似于 \"2006-09-18\"。\n"
 "    - strip: 输入任意文本。删除全部行首与行尾空白。\n"
 "    - tabindent: 输入任意文本。除了首行,在每行的开始增加制表符号。\n"
 "    - urlescape: 输入任意文本。封装全部特殊字符。例如\n"
@@ -7951,7 +7993,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"
@@ -7982,13 +8024,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"
@@ -8006,7 +8049,8 @@
 "    位于本地文件系统中的路径可以指向版本库,也可以指向打包的文件(被\n"
 "    'hg bundle' 或 'hg incoming --bundle' 创建)。\n"
 "\n"
-"    在 '#' 后面可选的标识符用于指定要取得的分支,标签或改变集。\n"
+"    在 '#' 后面可选的标识符用于指定要取得的远程版本库的分支,标签或\n"
+"    修改集。\n"
 "\n"
 "    仅当远程水银服务器显式启用时,才能推到 'http://' 和 'https://'。\n"
 "\n"
@@ -8034,11 +8078,12 @@
 "    然后你就可以在任意命令中使用这些别名作为路径(例如 'hg pull alias1'\n"
 "    会从 'alias1' 定义的路径取得指定版本)。\n"
 "\n"
-"    因为用于默认路径,所以这 2 个路径别名特别重要:\n"
+"    因为用于默认路径,所以这 2 个路径别名比较特殊:\n"
 "\n"
 "    default:\n"
-"      当你使用 'hg clone' 创建版本库时,此命令会将源版本库的路径保存\n"
-"      为别名 'default',然后你可以对命令 'push' 和 'pull' 省略路径。\n"
+"      当你使用 'hg clone' 创建版本库时,此命令会将源版本库的位置保存\n"
+"      为新版本库的 'default' 路径,然后你可以对类似 'push' 和 'pull'\n"
+"      的命令省略路径(包含进和出)。\n"
 "\n"
 "    default-push:\n"
 "      命令 'push' 会查找别名是 'default-push' 的路径,它覆盖定义 'default'。\n"
@@ -8082,6 +8127,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 ""
 
@@ -8447,7 +8497,7 @@
 
 #, python-format
 msgid "%d changesets found\n"
-msgstr "已发现 %d 个改变集\n"
+msgstr "已发现 %d 个修改集\n"
 
 msgid "list of changesets:\n"
 msgstr ""
@@ -8485,7 +8535,7 @@
 
 #, python-format
 msgid "added %d changesets with %d changes to %d files%s\n"
-msgstr "已增加 %d 个改变集,包含 %d 个改变,修改了 %d 个文件%s\n"
+msgstr "已增加 %d 个修改集,包含 %d 个改变,修改了 %d 个文件%s\n"
 
 msgid "updating the branch cache\n"
 msgstr ""
@@ -9152,6 +9202,10 @@
 msgid "cannot decode filename '%s'"
 msgstr ""
 
+#, python-format
+msgid "broken revlog! (%s)"
+msgstr ""
+
 msgid "missing revlog!"
 msgstr ""
 
--- a/mercurial/ancestor.py	Fri Mar 27 11:17:46 2009 -0400
+++ b/mercurial/ancestor.py	Mon Mar 30 01:30:58 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	Fri Mar 27 11:17:46 2009 -0400
+++ b/mercurial/bundlerepo.py	Mon Mar 30 01:30:58 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/cmdutil.py	Fri Mar 27 11:17:46 2009 -0400
+++ b/mercurial/cmdutil.py	Mon Mar 30 01:30:58 2009 +0200
@@ -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
 
@@ -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)
                 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,26 +828,36 @@
             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)
@@ -857,7 +876,7 @@
             if key:
                 h = templater.stringify(self.t(key, **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:
@@ -869,7 +888,7 @@
             else:
                 key = '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]))
--- a/mercurial/commands.py	Fri Mar 27 11:17:46 2009 -0400
+++ b/mercurial/commands.py	Mon Mar 30 01:30:58 2009 +0200
@@ -683,6 +683,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"""
 
@@ -894,7 +900,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"))
@@ -1690,8 +1696,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'):
@@ -2435,7 +2441,6 @@
     wlock = repo.wlock()
     try:
         # walk dirstate.
-        files = []
 
         m = cmdutil.match(repo, pats, opts)
         m.bad = lambda x,y: False
@@ -3135,6 +3140,7 @@
          _('[OPTION]... [SOURCE]... DEST')),
     "debugancestor": (debugancestor, [], _('[INDEX] REV1 REV2')),
     "debugcheckstate": (debugcheckstate, []),
+    "debugcommands": (debugcommands, [], _('[COMMAND]')),
     "debugcomplete":
         (debugcomplete,
          [('o', 'options', None, _('show the command options'))],
@@ -3417,6 +3423,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")
--- a/mercurial/context.py	Fri Mar 27 11:17:46 2009 -0400
+++ b/mercurial/context.py	Mon Mar 30 01:30:58 2009 +0200
@@ -233,7 +233,7 @@
 
     def __nonzero__(self):
         try:
-            n = self._filenode
+            self._filenode
             return True
         except error.LookupError:
             # file is missing
--- a/mercurial/copies.py	Fri Mar 27 11:17:46 2009 -0400
+++ b/mercurial/copies.py	Mon Mar 30 01:30:58 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
 
--- a/mercurial/dispatch.py	Fri Mar 27 11:17:46 2009 -0400
+++ b/mercurial/dispatch.py	Mon Mar 30 01:30:58 2009 +0200
@@ -7,7 +7,7 @@
 
 from i18n import _
 import os, sys, atexit, signal, pdb, socket, errno, shlex, time
-import util, commands, hg, lock, fancyopts, extensions, hook, error
+import util, commands, hg, fancyopts, extensions, hook, error
 import cmdutil
 import ui as _ui
 
--- a/mercurial/extensions.py	Fri Mar 27 11:17:46 2009 -0400
+++ b/mercurial/extensions.py	Mon Mar 30 01:30:58 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)
+        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	Fri Mar 27 11:17:46 2009 -0400
+++ b/mercurial/filemerge.py	Mon Mar 30 01:30:58 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	Fri Mar 27 11:17:46 2009 -0400
+++ b/mercurial/graphmod.py	Mon Mar 30 01:30:58 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	Fri Mar 27 11:17:46 2009 -0400
+++ b/mercurial/hbisect.py	Mon Mar 30 01:30:58 2009 +0200
@@ -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
--- a/mercurial/help.py	Fri Mar 27 11:17:46 2009 -0400
+++ b/mercurial/help.py	Mon Mar 30 01:30:58 2009 +0200
@@ -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,
@@ -178,7 +178,7 @@
     revisions.
 
     A plain integer is treated as a revision number. Negative
-    integers are treated as toplogical offsets from the tip, with
+    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.
@@ -286,6 +286,8 @@
           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.
--- a/mercurial/hgweb/hgweb_mod.py	Fri Mar 27 11:17:46 2009 -0400
+++ b/mercurial/hgweb/hgweb_mod.py	Mon Mar 30 01:30:58 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.
 
-import os, mimetypes
-from mercurial.node import hex, nullid
+import os
 from mercurial import ui, hg, util, hook, error
 from mercurial import templater, templatefilters
 from common import get_mtime, style_map, ErrorResponse
--- a/mercurial/hgweb/webcommands.py	Fri Mar 27 11:17:46 2009 -0400
+++ b/mercurial/hgweb/webcommands.py	Mon Mar 30 01:30:58 2009 +0200
@@ -8,8 +8,8 @@
 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.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]
@@ -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	Fri Mar 27 11:17:46 2009 -0400
+++ b/mercurial/hook.py	Mon Mar 30 01:30:58 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/keepalive.py	Fri Mar 27 11:17:46 2009 -0400
+++ b/mercurial/keepalive.py	Mon Mar 30 01:30:58 2009 +0200
@@ -447,7 +447,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 +493,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 +615,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	Fri Mar 27 11:17:46 2009 -0400
+++ b/mercurial/localrepo.py	Mon Mar 30 01:30:58 2009 +0200
@@ -160,7 +160,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 +174,7 @@
         if use_dirstate:
             try:
                 fp = self.wfile('.hgtags', 'rb+')
-            except IOError, err:
+            except IOError:
                 fp = self.wfile('.hgtags', 'ab')
             else:
                 prevtags = fp.read()
--- a/mercurial/lsprof.py	Fri Mar 27 11:17:46 2009 -0400
+++ b/mercurial/lsprof.py	Mon Mar 30 01:30:58 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
--- a/mercurial/patch.py	Fri Mar 27 11:17:46 2009 -0400
+++ b/mercurial/patch.py	Mon Mar 30 01:30:58 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/(.*)')
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mercurial/posix.py	Mon Mar 30 01:30:58 2009 +0200
@@ -0,0 +1,222 @@
+"""
+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	Fri Mar 27 11:17:46 2009 -0400
+++ b/mercurial/pure/base85.py	Mon Mar 30 01:30:58 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/parsers.py	Fri Mar 27 11:17:46 2009 -0400
+++ b/mercurial/pure/parsers.py	Mon Mar 30 01:30:58 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 bin, hex, nullid, nullrev
+from node import bin, nullid, nullrev
 import revlog, dirstate, struct, util, zlib
 
 _pack = struct.pack
--- a/mercurial/repo.py	Fri Mar 27 11:17:46 2009 -0400
+++ b/mercurial/repo.py	Mon Mar 30 01:30:58 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	Fri Mar 27 11:17:46 2009 -0400
+++ b/mercurial/revlog.py	Mon Mar 30 01:30:58 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()
 
@@ -834,7 +844,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
@@ -854,7 +864,7 @@
             try:
                 # a full hex nodeid?
                 node = bin(id)
-                r = self.rev(node)
+                self.rev(node)
                 return node
             except (TypeError, LookupError):
                 pass
--- a/mercurial/sshrepo.py	Fri Mar 27 11:17:46 2009 -0400
+++ b/mercurial/sshrepo.py	Mon Mar 30 01:30:58 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):
--- a/mercurial/sshserver.py	Fri Mar 27 11:17:46 2009 -0400
+++ b/mercurial/sshserver.py	Mon Mar 30 01:30:58 2009 +0200
@@ -122,8 +122,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	Fri Mar 27 11:17:46 2009 -0400
+++ b/mercurial/statichttprepo.py	Mon Mar 30 01:30:58 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	Fri Mar 27 11:17:46 2009 -0400
+++ b/mercurial/store.py	Mon Mar 30 01:30:58 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/util.py	Fri Mar 27 11:17:46 2009 -0400
+++ b/mercurial/util.py	Mon Mar 30 01:30:58 2009 +0200
@@ -13,7 +13,7 @@
 """
 
 from i18n import _
-import cStringIO, errno, getpass, re, shutil, sys, tempfile, traceback, error
+import cStringIO, errno, re, shutil, sys, tempfile, traceback, error
 import os, stat, threading, time, calendar, ConfigParser, locale, glob, osutil
 import imp, unicodedata
 
@@ -339,22 +339,6 @@
 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,12 +842,45 @@
         # want to add "foo/bar/baz" before checking if there's a "foo/.hg"
         self.auditeddir.update(prefixes)
 
-def _makelock_file(info, pathname):
+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_file(pathname):
+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 nlinks(pathname):
@@ -883,104 +900,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 +1008,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'
@@ -1115,379 +1031,6 @@
 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 +1054,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:
@@ -2018,3 +1561,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	Fri Mar 27 11:17:46 2009 -0400
+++ /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	Fri Mar 27 11:17:46 2009 -0400
+++ b/mercurial/verify.py	Mon Mar 30 01:30:58 2009 +0200
@@ -219,7 +219,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	Mon Mar 30 01:30:58 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
+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)
+
+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	Mon Mar 30 01:30:58 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
+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 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 util_win32 import *
+    if not _is_win_9x():
+        posixfile = posixfile_nt
+except ImportError:
+    pass
+
--- a/templates/paper/error.tmpl	Fri Mar 27 11:17:46 2009 -0400
+++ b/templates/paper/error.tmpl	Mon Mar 30 01:30:58 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	Fri Mar 27 11:17:46 2009 -0400
+++ b/templates/paper/index.tmpl	Mon Mar 30 01:30:58 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/tests/test-churn	Fri Mar 27 11:17:46 2009 -0400
+++ b/tests/test-churn	Mon Mar 30 01:30:58 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	Fri Mar 27 11:17:46 2009 -0400
+++ b/tests/test-churn.out	Mon Mar 30 01:30:58 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-command-template	Fri Mar 27 11:17:46 2009 -0400
+++ b/tests/test-command-template	Mon Mar 30 01:30:58 2009 +0200
@@ -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	Fri Mar 27 11:17:46 2009 -0400
+++ b/tests/test-command-template.out	Mon Mar 30 01:30:58 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	Fri Mar 27 11:17:46 2009 -0400
+++ b/tests/test-convert	Mon Mar 30 01:30:58 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'
--- a/tests/test-convert.out	Fri Mar 27 11:17:46 2009 -0400
+++ b/tests/test-convert.out	Mon Mar 30 01:30:58 2009 +0200
@@ -226,3 +226,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
+cannot find required "mtn" tool
+emptydir does not look like a GNU Arch repo
+emptydir does not look like a Bazaar repo
+cannot find required "p4" tool
+abort: emptydir: missing or unsupported repository
--- a/tests/test-debugcomplete	Fri Mar 27 11:17:46 2009 -0400
+++ b/tests/test-debugcomplete	Mon Mar 30 01:30:58 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	Fri Mar 27 11:17:46 2009 -0400
+++ b/tests/test-debugcomplete.out	Mon Mar 30 01:30:58 2009 +0200
@@ -60,6 +60,7 @@
 % Show debug commands if there are no other candidates
 debugancestor
 debugcheckstate
+debugcommands
 debugcomplete
 debugconfig
 debugdata
@@ -160,3 +161,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-hgweb-filelog.out	Fri Mar 27 11:17:46 2009 -0400
+++ b/tests/test-hgweb-filelog.out	Mon Mar 30 01:30:58 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	Fri Mar 27 11:17:46 2009 -0400
+++ b/tests/test-hgweb.out	Mon Mar 30 01:30:58 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>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-inotify-issue1542	Mon Mar 30 01:30:58 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	Mon Mar 30 01:30:58 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-merge-tools	Fri Mar 27 11:17:46 2009 -0400
+++ b/tests/test-merge-tools	Mon Mar 30 01:30:58 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	Fri Mar 27 11:17:46 2009 -0400
+++ b/tests/test-merge-tools.out	Mon Mar 30 01:30:58 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-qrecord.out	Fri Mar 27 11:17:46 2009 -0400
+++ b/tests/test-qrecord.out	Mon Mar 30 01:30:58 2009 +0200
@@ -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
--- a/tests/test-record.out	Fri Mar 27 11:17:46 2009 -0400
+++ b/tests/test-record.out	Mon Mar 30 01:30:58 2009 +0200
@@ -215,13 +215,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 +258,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 +267,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 +326,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 +334,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 +344,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 +353,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