--- a/Makefile Mon Feb 13 17:22:35 2012 +0100
+++ b/Makefile Thu Feb 16 16:40:29 2012 -0600
@@ -91,8 +91,10 @@
i18n/hg.pot: $(PYFILES) $(DOCFILES)
$(PYTHON) i18n/hggettext mercurial/commands.py \
- hgext/*.py hgext/*/__init__.py mercurial/fileset.py mercurial/revset.py \
+ hgext/*.py hgext/*/__init__.py \
+ mercurial/fileset.py mercurial/revset.py \
mercurial/templatefilters.py mercurial/templatekw.py \
+ mercurial/filemerge.py \
$(DOCFILES) > i18n/hg.pot
# All strings marked for translation in Mercurial contain
# ASCII characters only. But some files contain string
--- a/hgext/convert/bzr.py Mon Feb 13 17:22:35 2012 +0100
+++ b/hgext/convert/bzr.py Thu Feb 16 16:40:29 2012 -0600
@@ -23,7 +23,7 @@
try:
# bazaar imports
- from bzrlib import branch, revision, errors
+ from bzrlib import bzrdir, revision, errors
from bzrlib.revisionspec import RevisionSpec
except ImportError:
pass
@@ -42,14 +42,17 @@
try:
# access bzrlib stuff
- branch
+ bzrdir
except NameError:
raise NoRepo(_('Bazaar modules could not be loaded'))
path = os.path.abspath(path)
self._checkrepotype(path)
- self.branch = branch.Branch.open(path)
- self.sourcerepo = self.branch.repository
+ try:
+ self.sourcerepo = bzrdir.BzrDir.open(path).open_repository()
+ except errors.NoRepositoryPresent:
+ raise NoRepo(_('%s does not look like a Bazaar repository')
+ % path)
self._parentids = {}
def _checkrepotype(self, path):
@@ -88,16 +91,28 @@
def after(self):
self.sourcerepo.unlock()
+ def _bzrbranches(self):
+ return self.sourcerepo.find_branches(using=True)
+
def getheads(self):
if not self.rev:
- return [self.branch.last_revision()]
- try:
- r = RevisionSpec.from_string(self.rev)
- info = r.in_history(self.branch)
- except errors.BzrError:
- raise util.Abort(_('%s is not a valid revision in current branch')
- % self.rev)
- return [info.rev_id]
+ # Set using=True to avoid nested repositories (see issue3254)
+ heads = sorted([b.last_revision() for b in self._bzrbranches()])
+ else:
+ revid = None
+ for branch in self._bzrbranches():
+ try:
+ r = RevisionSpec.from_string(self.rev)
+ info = r.in_history(branch)
+ except errors.BzrError:
+ pass
+ revid = info.rev_id
+ if revid is None:
+ raise util.Abort(_('%s is not a valid revision') % self.rev)
+ heads = [revid]
+ # Empty repositories return 'null:', which cannot be retrieved
+ heads = [h for h in heads if h != 'null:']
+ return heads
def getfile(self, name, rev):
revtree = self.sourcerepo.revision_tree(rev)
@@ -140,20 +155,24 @@
parents = self._filterghosts(rev.parent_ids)
self._parentids[version] = parents
+ branch = self.recode(rev.properties.get('branch-nick', u'default'))
+ if branch == 'trunk':
+ branch = 'default'
return commit(parents=parents,
date='%d %d' % (rev.timestamp, -rev.timezone),
author=self.recode(rev.committer),
- # bzr returns bytestrings or unicode, depending on the content
desc=self.recode(rev.message),
+ branch=branch,
rev=version)
def gettags(self):
- if not self.branch.supports_tags():
- return {}
- tagdict = self.branch.tags.get_tag_dict()
bytetags = {}
- for name, rev in tagdict.iteritems():
- bytetags[self.recode(name)] = rev
+ for branch in self._bzrbranches():
+ if not branch.supports_tags():
+ return {}
+ tagdict = branch.tags.get_tag_dict()
+ for name, rev in tagdict.iteritems():
+ bytetags[self.recode(name)] = rev
return bytetags
def getchangedfiles(self, rev, i):
@@ -231,7 +250,11 @@
continue
# we got unicode paths, need to convert them
- path, topath = [self.recode(part) for part in paths]
+ path, topath = paths
+ if path is not None:
+ path = self.recode(path)
+ if topath is not None:
+ topath = self.recode(topath)
seen.add(path or topath)
if topath is None:
@@ -260,19 +283,3 @@
parentmap = self.sourcerepo.get_parent_map(ids)
parents = tuple([parent for parent in ids if parent in parentmap])
return parents
-
- def recode(self, s, encoding=None):
- """This version of recode tries to encode unicode to bytecode,
- and preferably using the UTF-8 codec.
- Other types than Unicode are silently returned, this is by
- intention, e.g. the None-type is not going to be encoded but instead
- just passed through
- """
- if not encoding:
- encoding = self.encoding or 'utf-8'
-
- if isinstance(s, unicode):
- return s.encode(encoding)
- else:
- # leave it alone
- return s
--- a/hgext/largefiles/lfutil.py Mon Feb 13 17:22:35 2012 +0100
+++ b/hgext/largefiles/lfutil.py Thu Feb 16 16:40:29 2012 -0600
@@ -457,3 +457,11 @@
newheads = repo.branchheads(branch)
heads = heads + newheads
return heads
+
+def getstandinsstate(repo):
+ standins = []
+ matcher = getstandinmatcher(repo)
+ for standin in dirstate_walk(repo.dirstate, matcher):
+ lfile = splitstandin(standin)
+ standins.append((lfile, readstandin(repo, lfile)))
+ return standins
--- a/hgext/largefiles/overrides.py Mon Feb 13 17:22:35 2012 +0100
+++ b/hgext/largefiles/overrides.py Thu Feb 16 16:40:29 2012 -0600
@@ -265,13 +265,10 @@
# The overridden function filters the unknown files by removing any
# largefiles. This makes the merge proceed and we can then handle this
# case further in the overridden manifestmerge function below.
-def override_checkunknown(origfn, wctx, mctx, folding):
- origunknown = wctx.unknown()
- wctx._unknown = filter(lambda f: lfutil.standin(f) not in wctx, origunknown)
- try:
- return origfn(wctx, mctx, folding)
- finally:
- wctx._unknown = origunknown
+def override_checkunknownfile(origfn, repo, wctx, mctx, f):
+ if lfutil.standin(f) in wctx:
+ return False
+ return origfn(repo, wctx, mctx, f)
# The manifest merge handles conflicts on the manifest level. We want
# to handle changes in largefile-ness of files at this level too.
@@ -322,7 +319,7 @@
processed.append((standin, "g", p2.flags(standin)))
else:
processed.append((standin, "r"))
- elif m == "m" and lfutil.standin(f) in p1 and f in p2:
+ elif m == "g" and lfutil.standin(f) in p1 and f in p2:
# Case 2: largefile in the working copy, normal file in
# the second parent
standin = lfutil.standin(f)
@@ -454,7 +451,7 @@
m._fmap = set(m._files)
orig_matchfn = m.matchfn
m.matchfn = lambda f: (lfutil.isstandin(f) and
- lfile(lfutil.splitstandin(f)) and
+ (f in manifest) and
orig_matchfn(lfutil.splitstandin(f)) or
None)
return m
@@ -546,7 +543,7 @@
match = oldmatch(ctx, pats, opts, globbed, default)
m = copy.copy(match)
def tostandin(f):
- if lfutil.standin(f) in ctx or lfutil.standin(f) in ctx:
+ if lfutil.standin(f) in ctx:
return lfutil.standin(f)
elif lfutil.standin(f) in repo[None]:
return None
@@ -605,8 +602,20 @@
wlock.release()
def hg_update(orig, repo, node):
+ # In order to not waste a lot of extra time during the update largefiles
+ # step, we keep track of the state of the standins before and after we
+ # call the original update function, and only update the standins that
+ # have changed in the hg.update() call
+ oldstandins = lfutil.getstandinsstate(repo)
result = orig(repo, node)
- lfcommands.updatelfiles(repo.ui, repo)
+ newstandins = lfutil.getstandinsstate(repo)
+ tobeupdated = set(oldstandins).symmetric_difference(set(newstandins))
+ filelist = []
+ for f in tobeupdated:
+ if f[0] not in filelist:
+ filelist.append(f[0])
+
+ lfcommands.updatelfiles(repo.ui, repo, filelist=filelist, printmessage=True)
return result
def hg_clean(orig, repo, node, show_stats=True):
--- a/hgext/largefiles/uisetup.py Mon Feb 13 17:22:35 2012 +0100
+++ b/hgext/largefiles/uisetup.py Thu Feb 16 16:40:29 2012 -0600
@@ -64,8 +64,8 @@
overrides.override_update)
entry = extensions.wrapcommand(commands.table, 'pull',
overrides.override_pull)
- entry = extensions.wrapfunction(merge, '_checkunknown',
- overrides.override_checkunknown)
+ entry = extensions.wrapfunction(merge, '_checkunknownfile',
+ overrides.override_checkunknownfile)
entry = extensions.wrapfunction(merge, 'manifestmerge',
overrides.override_manifestmerge)
entry = extensions.wrapfunction(filemerge, 'filemerge',
--- a/hgext/mq.py Mon Feb 13 17:22:35 2012 +0100
+++ b/hgext/mq.py Thu Feb 16 16:40:29 2012 -0600
@@ -257,10 +257,11 @@
ci += 1
del self.comments[ci]
-def secretcommit(repo, phase, *args, **kwargs):
- """helper dedicated to ensure a commit are secret
-
- It should be used instead of repo.commit inside the mq source
+def newcommit(repo, phase, *args, **kwargs):
+ """helper dedicated to ensure a commit respect mq.secret setting
+
+ It should be used instead of repo.commit inside the mq source for operation
+ creating new changeset.
"""
if phase is None:
if repo.ui.configbool('mq', 'secret', False):
@@ -581,7 +582,7 @@
ret = hg.merge(repo, rev)
if ret:
raise util.Abort(_("update returned %d") % ret)
- n = secretcommit(repo, None, ctx.description(), ctx.user(), force=True)
+ n = newcommit(repo, None, ctx.description(), ctx.user(), force=True)
if n is None:
raise util.Abort(_("repo commit failed"))
try:
@@ -621,7 +622,7 @@
# the first patch in the queue is never a merge patch
#
pname = ".hg.patches.merge.marker"
- n = secretcommit(repo, None, '[mq]: merge marker', force=True)
+ n = newcommit(repo, None, '[mq]: merge marker', force=True)
self.removeundo(repo)
self.applied.append(statusentry(n, pname))
self.applieddirty = True
@@ -752,8 +753,8 @@
match = scmutil.matchfiles(repo, files or [])
oldtip = repo['tip']
- n = secretcommit(repo, None, message, ph.user, ph.date, match=match,
- force=True)
+ n = newcommit(repo, None, message, ph.user, ph.date, match=match,
+ force=True)
if repo['tip'] == oldtip:
raise util.Abort(_("qpush exactly duplicates child changeset"))
if n is None:
@@ -993,8 +994,8 @@
if util.safehasattr(msg, '__call__'):
msg = msg()
commitmsg = msg and msg or ("[mq]: %s" % patchfn)
- n = secretcommit(repo, None, commitmsg, user, date, match=match,
- force=True)
+ n = newcommit(repo, None, commitmsg, user, date, match=match,
+ force=True)
if n is None:
raise util.Abort(_("repo commit failed"))
try:
@@ -1548,8 +1549,8 @@
# Ensure we create a new changeset in the same phase than
# the old one.
- n = secretcommit(repo, oldphase, message, user, ph.date,
- match=match, force=True)
+ n = newcommit(repo, oldphase, message, user, ph.date,
+ match=match, force=True)
# only write patch after a successful commit
patchf.close()
self.applied.append(statusentry(n, patchfn))
--- a/i18n/de.po Mon Feb 13 17:22:35 2012 +0100
+++ b/i18n/de.po Thu Feb 16 16:40:29 2012 -0600
@@ -43,7 +43,7 @@
#
# Schlecht:
# Mergen Sie zunächst die Branche.
-# Falls der Tag im Filelog zu finden ist...
+# Falls der Tag im Filelog nicht gecheckt werden kann...
#
# Übersetzungen:
# backup Sicherheitskopie (gewinnt in google-fight gegen Sicherungsk.)
@@ -54,9 +54,12 @@
# changeset Änderungssatz
# commit Commit/Übernahme
# commit (v) übernehmen
+# comm. message Versionsmeldung
# committer Autor
+# corrupt beschädigt (nicht korrumpiert)
# deprecated veraltet
# force (v) erzwingen
+# history Historie
# merge zusammenführen
# notation Schreibweise
# queue Reihe
@@ -64,24 +67,25 @@
# manage/track versionieren
# pull abrufen
# push übertragen
-# rebase Pfropfung/Verschiebung
+# rebase Verschiebung (Pfropfung)
# section Abschnitt (nicht Sektion)
# tag Etikett (svn verwendet "Marke")
#
# Nicht übersetzt bleiben
-# hook mangels guter Übersetzung (Einhängeaktion?)
-# token Fachbegriff auch im Deutschen
-# parser Fachbegriff auch im Deutschen
-# patch Bezieht sich auf ein sehr altes Programm mit demselben Namen und
+# Hook (m) mangels guter Übersetzung (Einhängeaktion?)
+# Token (n) Fachbegriff auch im Deutschen
+# Parser(m) Fachbegriff auch im Deutschen
+# Patch (m) Bezieht sich auf ein sehr altes Programm mit demselben Namen und
# Dateien in dessen Syntax/Format
# Die ursprüngliche Bedeutung des englischen Wortes (Flicken) trifft
# heute eh nicht mehr zu.
-# diff Siehe patch, ausserdem Abkürzung eines auch deutschen Worts
-# glob
+# Diff (n) Siehe patch, ausserdem Abkürzung eines auch deutschen Worts
+# glob (n)
# dirstate Nur für Entwickler interessant. Im sonstigen Handbuch umschreiben!
# .. note:: Dies ist spezielle reStructured-Syntax und darf nicht geändert
# werden
-#
+# Pager (m) mangels guter Übersetzung (Theoretisch "Verseitener" :)
+#
# Weiteres:
# graft/transplant: Da graft eine Reimplementierung von transplant als
# Kernfunktion ist, kann in beiden Fällen "Transplantation" als
@@ -92,12 +96,14 @@
# kann die Übersetzung "Revision" lauten.
# largefile: Binärriese (neues Wort, vielleicht fällt jemandem ein besseres
# ein. Dies ist zur Zeit konsequent verwendet)
+# default: Sollte dies nicht lieber eine Voreinstellung statt des Standards
+# sein?
#
msgid ""
msgstr ""
"Project-Id-Version: Mercurial\n"
"Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n"
-"POT-Creation-Date: 2011-12-04 13:42+0200\n"
+"POT-Creation-Date: 2012-01-21 14:20+0200\n"
"PO-Revision-Date: 2010-12-24 15:09+0100\n"
"Last-Translator: Fabian Kreutz <fabian.kreutz@qvantel.com>\n"
"Language-Team: \n"
@@ -470,8 +476,7 @@
#, python-format
msgid "acl: user \"%s\" denied on \"%s\" (changeset \"%s\")"
-msgstr ""
-"acl: Zugriff für \"%s\" auf \"%s\" abgelehnt (Änderungssatz \"%s\")"
+msgstr "acl: Zugriff für \"%s\" auf \"%s\" abgelehnt (Änderungssatz \"%s\")"
#, python-format
msgid "acl: user \"%s\" not allowed on \"%s\" (changeset \"%s\")"
@@ -529,7 +534,8 @@
msgstr ""
"Direktes Schreiben in die Datenbank führt leicht zu Problemen bei Schema-\n"
"veränderungen. Ausserdem wird ein externes Bugzilla Script benötigt, um\n"
-"Benachrichtigungsemails zu versenden. Dieses Script wird mit den Rechten des\n"
+"Benachrichtigungsemails zu versenden. Dieses Script wird mit den Rechten "
+"des\n"
"Mercurial-Benutzers ausgeführt, benötigt eine lokale Bugzilla-Installation\n"
"sowie Leserechte an der Bugzilla Konfigurationsdatei und MySQL Benutzername\n"
"und Passwort, um vollen Zugriff auf die Bugzilla Datenbank zu haben. Aus\n"
@@ -650,7 +656,8 @@
msgstr ""
"bugzilla.strip\n"
" Die Anzahl von Verzeichnisebenen, die vom Anfang des Archivpfads\n"
-" (``{root}`` in Vorlagen) abgeschnitten wird, um ``{webroot}`` zu erhalten.\n"
+" (``{root}`` in Vorlagen) abgeschnitten wird, um ``{webroot}`` zu "
+"erhalten.\n"
" Zum Beispiel mit ``{root}`` als ``/var/local/mein-projekt`` und einem\n"
" Wert 2, wird ``{webroot}`` auf ``mein-projekt`` gesetzt. Standard 0."
@@ -721,8 +728,7 @@
msgid ""
"XMLRPC+email access mode uses the XMLRPC access mode configuration items,\n"
"and also:"
-msgstr ""
-"XMLRPC+email nutzt die gleichen Zugriffskonfiguration wie XMLRPC plus:"
+msgstr "XMLRPC+email nutzt die gleichen Zugriffskonfiguration wie XMLRPC plus:"
msgid ""
"bugzilla.bzemail\n"
@@ -928,7 +934,8 @@
"with a collection of Mercurial repositories in ``/var/local/hg/repos/``,\n"
"with a web interface at ``http://my-project.org/hg``. ::"
msgstr ""
-"MySQL Beispielkonfiguration. Bugzilla 3.2 ist lokal in ``/opt/bugzilla-3.2``\n"
+"MySQL Beispielkonfiguration. Bugzilla 3.2 ist lokal in ``/opt/"
+"bugzilla-3.2``\n"
"installiert. Die MySQL Datenbank wird per ``localhost`` angesprochen,\n"
"der Name der Bugzilla Datenbank ist ``bugs`` und der MySQL Zugriff ist für\n"
"enutzer ``bugs`` mit Password ``XYZZY`` erlaubt. Die Archive, deren\n"
@@ -1341,7 +1348,8 @@
"(fettgeschrieben), 'dim' (gedämmt), 'inverse' (Vorder- und Hintergrund\n"
"getauscht), 'italic' (Schrägschrift), 'standout' (hervorstehend) und\n"
"'underline' (unterstrichen); im ECMA-48 Modus nur 'bold', 'inverse',\n"
-"'italic' und 'underline'. Wie dies tatsächlich aussieht, hängt vom Terminal-\n"
+"'italic' und 'underline'. Wie dies tatsächlich aussieht, hängt vom "
+"Terminal-\n"
"emulator ab. Effekte, die nicht realisiert werden können, werden ohne\n"
"Warnung ignoriert."
@@ -1415,13 +1423,11 @@
"deaktivieren.\n"
msgid "no terminfo entry for setab/setaf: reverting to ECMA-48 color\n"
-msgstr ""
-"Kein terminfo-Eintrag für setab/setaf: Falle auf ECMA-48 zurück\n"
+msgstr "Kein terminfo-Eintrag für setab/setaf: Falle auf ECMA-48 zurück\n"
#, python-format
msgid "warning: failed to set color mode to %s\n"
-msgstr ""
-"Warnung: Konnte Farbmodus nicht auf %s setzen\n"
+msgstr "Warnung: Konnte Farbmodus nicht auf %s setzen\n"
#, python-format
msgid "ignoring unknown color/effect %r (configured in color.%s)\n"
@@ -1569,8 +1575,7 @@
msgstr " Quellautor = Zielautor"
msgid " Empty lines and lines starting with a ``#`` are ignored."
-msgstr ""
-" Leere Zeilen und Zeilen, die mit ``#`` beginnen, werden ignoriert."
+msgstr " Leere Zeilen und Zeilen, die mit ``#`` beginnen, werden ignoriert."
msgid ""
" The filemap is a file that allows filtering and remapping of files\n"
@@ -2476,7 +2481,7 @@
msgstr ""
msgid "failed to reach end of mtn automate stdio headers"
-msgstr ""
+msgstr "Konnte den Endpunkt der mtn automate-Schnittstelle nicht erreichen"
#, python-format
msgid "%s does not look like a P4 repository"
@@ -2493,6 +2498,10 @@
"Mercurial konnte sich selbst nicht ausführen, prüfe, ob die Programmdatei\n"
"in PATH enthalten ist."
+#, python-format
+msgid "log stream exception '%s'"
+msgstr ""
+
msgid ""
"svn: cannot probe remote repository, assume it could be a subversion "
"repository. Use --source-type if you know better.\n"
@@ -3331,10 +3340,10 @@
" project = foo\n"
" # das Modul (Unterprojekt) (optional)\n"
" #module = foo\n"
-" # Hänge eine Statistik über die Änderungen an die Commit-Nachricht an\n"
+" # Hänge eine Statistik über Änderungen an die Versionsmeldung an\n"
" # (optional)\n"
" #diffstat = False\n"
-" # Vorlage für die Commit-Nachrichten (optional)\n"
+" # Vorlage für die Versionsmeldungen (optional)\n"
" #template = {desc}\\n{baseurl}{webroot}/rev/{node}-- {diffstat}\n"
" # zu verwendender Stil (optional)\n"
" #style = foo\n"
@@ -4160,9 +4169,10 @@
"enabled for this to work."
msgstr ""
"Wird ein Änderungssatz, welcher einen Binärriesen ändert oder hinzufügt,\n"
-"in ein entferntes Archiv übertragen, so werden auch die Revisionen der\n"
-"Binärdatei übertragen. Das entfernte Mercurial muss hierfür die\n"
-"largefiles-Erweiterung unterstützen."
+"in ein entferntes Archiv übertragen, so werden gleichzeitig (asymmetrisch\n"
+"zum Abrufen per pull) auch die (neuen) Revisionen der Binärdatei "
+"übertragen.\n"
+"Das entfernte Mercurial muss hierfür die largefiles-Erweiterung unterstützen."
msgid ""
"When you pull a changeset that affects largefiles from a remote\n"
@@ -4242,10 +4252,18 @@
msgid ""
"Files that match one of these patterns will be added as largefiles\n"
-"regardless of their size.\n"
+"regardless of their size."
msgstr ""
"Dateien, die auf ein solches Muster passen, werden unabhängig von ihrer\n"
-"Größe als Binärriesen hinzugefügt.\n"
+"Größe als Binärriesen hinzugefügt."
+
+msgid ""
+"The ``largefiles.minsize`` and ``largefiles.patterns`` config options\n"
+"will be ignored for any repositories not already containing a\n"
+"largefile. To add the first largefile to a repository, you must\n"
+"explicitly do so with the --large flag passed to the :hg:`add`\n"
+"command.\n"
+msgstr ""
msgid "convert a normal repository to a largefiles repository"
msgstr "Konvertiert ein normales Archiv in ein Archiv mit Binärriesen"
@@ -4335,6 +4353,18 @@
msgid "largefile %s becomes symlink"
msgstr "Binärriese %s wird ein symbolischer Verweis"
+#, python-format
+msgid "skipping incorrectly formatted tag %s\n"
+msgstr "Überspringe fehlerhaft formatiertes Etikett: %s\n"
+
+#, python-format
+msgid "skipping incorrectly formatted id %s\n"
+msgstr "Überspringe fehlerhaft formatierte ID: %s\n"
+
+#, python-format
+msgid "no mapping for id %s\n"
+msgstr "Keine Abbildung für ID %s\n"
+
msgid "uploading largefiles"
msgstr "Lade Binärriesen hoch"
@@ -4378,10 +4408,6 @@
msgid "Found %s in system cache\n"
msgstr "%s im Zwischenspeicher gefunden\n"
-#, python-format
-msgid "bad hash in '%s' (only %d bytes long)"
-msgstr "Prüfsummenfehler in '%s' (nur %d Bytes lang)"
-
msgid "Can't get file locally"
msgstr "Kann Datei nicht lokal abrufen"
@@ -4417,8 +4443,8 @@
msgstr "Keine Dateien angegeben"
#, python-format
-msgid "not removing %s: %s (use -f to force removal)\n"
-msgstr "Entferne nicht %s: %s (Nutze -f um Entfernung zu erzwingen)\n"
+msgid "not removing %s: %s (use forget to undo)\n"
+msgstr "Entferne nicht %s: %s (Nutze ``forget`` um rückgängig zu machen)\n"
msgid "file still exists"
msgstr "Datei existiert noch"
@@ -4436,6 +4462,28 @@
msgid "uncommitted local changes"
msgstr "Ausstehende nicht versionierte Änderungen"
+msgid "&Largefile"
+msgstr "&Binärriese"
+
+msgid "&Normal file"
+msgstr "&Normale Datei"
+
+#, python-format
+msgid ""
+"%s has been turned into a largefile\n"
+"use (l)argefile or keep as (n)ormal file?"
+msgstr ""
+"%s wurde in einen Binärriesen umgewandelt.\n"
+"Nutze als (B)inärriese oder als (n)ormale Datei?"
+
+#, python-format
+msgid ""
+"%s has been turned into a normal file\n"
+"keep as (l)argefile or use (n)ormal file?"
+msgstr ""
+"%s wurde in eine normale Datei umgewandelt.\n"
+"Nutze als (B)inärriese oder als (n)ormale Datei?"
+
#, python-format
msgid "merging %s and %s to %s\n"
msgstr "Führe %s und %s zusammen zu %s\n"
@@ -4464,6 +4512,13 @@
msgid "no files to copy"
msgstr "Keine Dateien zu kopieren"
+msgid "caching new largefiles\n"
+msgstr "Lade neue Binärriesen in den Zwischenspeicher\n"
+
+#, python-format
+msgid "%d largefiles cached\n"
+msgstr "%d Binärriesen in den Zwischenspeicher geladen\n"
+
#, python-format
msgid "unknown archive type '%s'"
msgstr "Unbekannter Archivtyp '%s'"
@@ -4472,6 +4527,10 @@
msgstr "Bei Archivierung in Dateien kann kein Präfix angegeben werden"
#, python-format
+msgid "largefile %s not found in repo store or system cache"
+msgstr "Binärriese %s weder im Archivlager noch Zwischenspeicher gefunden"
+
+#, python-format
msgid "not removing %s: file is already untracked\n"
msgstr "Entferne %s nicht: Datei ist nicht versioniert\n"
@@ -4485,18 +4544,24 @@
msgid "largefiles: %d to upload\n"
msgstr "largefiles: %d hochzuladen\n"
-msgid "addremove cannot be run on a repo with largefiles"
-msgstr ""
-"'addremove' kann nicht auf ein Archiv mit Binärriesen angewendet werden"
-
-#, python-format
-msgid "largefiles: failed to put %s (%s) into store: %s"
-msgstr "largefiles: Konnte %s (%s) nicht in einlagern: %s"
+msgid "largefile contents do not match hash"
+msgstr "Inhalt des Binärriesen passt nicht auf Prüfsumme"
+
+#, python-format
+msgid "largefiles: failed to put %s into store: %s"
+msgstr "largefiles: Konnte %s nicht in einlagern: %s"
#, python-format
msgid "requested largefile %s not present in cache"
msgstr "Angeforderer Binärriese %s ist nicht im Zwischenspeicher"
+msgid "remote: "
+msgstr "Entfernt: "
+
+#, python-format
+msgid "unexpected putlfile response: %s"
+msgstr "Unerwartete Antwort von putlfile: %s"
+
msgid "putlfile failed:"
msgstr "putlfile fehlgeschlagen:"
@@ -4539,7 +4604,8 @@
"largefiles: repo method %r appears to have already been wrapped by another "
"extension: largefiles may behave incorrectly\n"
msgstr ""
-"largefiles: Aktion %r scheint bereits von einer anderen Erweiterung verändert zu sein. Dadurch kann es zu Fehlern in largefiles kommen\n"
+"largefiles: Aktion %r scheint bereits von einer anderen Erweiterung "
+"verändert zu sein. Dadurch kann es zu Fehlern in largefiles kommen\n"
#, python-format
msgid "file \"%s\" is a largefile standin"
@@ -5011,6 +5077,13 @@
msgstr "Nachfahren der Revision %d werden nicht verwaltet"
#, python-format
+msgid "revision %d is not mutable"
+msgstr "Revision %d ist unveränderbar"
+
+msgid "see \"hg help phases\" for details"
+msgstr "siehe \"hg help phases\" für Details"
+
+#, python-format
msgid "cannot import merge revision %d"
msgstr "Kann Zusammenführung %d nicht importieren"
@@ -5030,7 +5103,8 @@
msgstr "Benenne %s in %s um\n"
msgid "need --name to import a patch from -"
-msgstr "Beim Import von der Standardeingabe muss die Option --name angegeben werden"
+msgstr ""
+"Beim Import von der Standardeingabe muss die Option --name angegeben werden"
#, python-format
msgid "unable to read file %s"
@@ -5054,11 +5128,13 @@
msgid ""
" The patches must not be applied, and at least one patch is required. "
-"With\n"
-" -k/--keep, the patch files are preserved in the patch directory."
+"Exact\n"
+" patch identifiers must be given. With -k/--keep, the patch files are\n"
+" preserved in the patch directory."
msgstr ""
" Die Patches dürfen nicht angewendet sein und mindestens einer muss\n"
-" angegeben sein. Mit -k/--keep werden die Patchdateien erhalten."
+" angegeben sein. Exakte Patch-IDs müssen verwendet werden. Mit -k/--keep\n"
+" werden die Patchdateien erhalten."
msgid ""
" To stop managing a patch and move it into permanent history,\n"
@@ -5896,12 +5972,12 @@
" Beispiel::"
msgid ""
-" qguard foo.patch -stable (negative guard)\n"
-" qguard bar.patch +stable (positive guard)\n"
+" qguard foo.patch -- -stable (negative guard)\n"
+" qguard bar.patch +stable (positive guard)\n"
" qselect stable"
msgstr ""
-" qguard foo.patch -stable (negativer Wächter)\n"
-" qguard bar.patch +stable (positiver Wächter)\n"
+" qguard foo.patch -- -stable (negativer Wächter)\n"
+" qguard bar.patch +stable (positiver Wächter)\n"
" qselect stable"
msgid ""
@@ -6005,7 +6081,7 @@
msgstr ""
" Schließt die angegebenen Revisionen ab (entspricht den angewandten\n"
" Patches), indem sie aus der Kontrolle von mq entfernt und in die\n"
-" reguläre Projektgeschichte übernommen werden."
+" reguläre Projekthistorie übernommen werden."
msgid ""
" Accepts a revision range or the -a/--applied option. If --applied\n"
@@ -6025,8 +6101,7 @@
msgstr ""
" Dies kann insbes. nützlich sein, wenn Ihre Änderungen in einem\n"
" vorgelagerten Projektarchiv angewandt wurden, oder wenn Sie Ihre\n"
-" Änderungen in ein vorgelagertes Archiv übertragen wollen.\n"
-" "
+" Änderungen in ein vorgelagertes Archiv übertragen wollen."
msgid "no revisions specified"
msgstr "Keine Revisionen angegeben"
@@ -6062,9 +6137,8 @@
" Supports switching between different patch queues, as well as creating\n"
" new patch queues and deleting existing ones."
msgstr ""
-" Unterstützt das Wechseln zwischen verschiedener Patch-Reihen, ebenso "
-"wie\n"
-" das erstellen neuer Reihen und das Löschen bereits bestehender."
+" Unterstützt das Wechseln zwischen verschiedener Patch-Reihen, sowie\n"
+" das Erstellen neuer Reihen und das Löschen bereits bestehender."
msgid ""
" Omitting a queue name or specifying -l/--list will show you the "
@@ -6130,7 +6204,7 @@
#, python-format
msgid "non-queue directory \"%s\" already exists"
-msgstr "Nicht-Reihen-Verzeichnis \"%s\" existiert bereits"
+msgstr "Verzeichnis \"%s\" existiert bereits, ist aber keine Reihe"
msgid "use --create to create a new queue"
msgstr "Verwenden Sie --create, um eine neue Reihe zu erzeugen"
@@ -6192,6 +6266,9 @@
"This extension let you run hooks sending email notifications when\n"
"changesets are being pushed, from the sending or receiving side."
msgstr ""
+"Diese Erweiterung ermöglicht das Senden von Benachrichtigungsemails,\n"
+"wannimmer Änderungssätze übertragen werden. Dies kann von der über-\n"
+"tragenden oder der empfangenden Seite aus geschehen."
msgid ""
"First, enable the extension as explained in :hg:`help extensions`, and\n"
@@ -6199,6 +6276,10 @@
"are run by the changesets receiver while the ``outgoing`` one is for\n"
"the sender::"
msgstr ""
+"Zunächst muss die Erweiterung (wie in :hg:`help extensions` beschrieben)\n"
+"aktiviert werden und dann als Hook registriert werden. Für den Empfänger\n"
+"sind dies die ``incoming`` und ``outgoing`` Hooks, für den Sender der\n"
+"``outgoing`` Hook::"
msgid ""
" [hooks]\n"
@@ -6217,6 +6298,8 @@
" # one email for all outgoing changesets\n"
" outgoing.notify = python:hgext.notify.hook"
msgstr ""
+" # eine E-Mail für jeden übertragenen Änderungssatz\n"
+" outgoing.notify = python:hgext.notify.hook"
msgid ""
"Now the hooks are running, subscribers must be assigned to\n"
@@ -6224,6 +6307,9 @@
"given email or the ``[reposubs]`` section to map emails to a single\n"
"repository::"
msgstr ""
+"Schliesslich müssen noch die Abonnements für die Projektarchive definiert\n"
+"werden. Im Abschnitt ``[usersubs]`` kann man mehrere Archive einer Email\n"
+"zuweisen, in ``[reposubs]`` umgekehrt mehrere Emails für ein Archiv angeben."
msgid ""
" [usersubs]\n"
@@ -6252,6 +6338,9 @@
"root. The subscriptions can be defined in their own file and\n"
"referenced with::"
msgstr ""
+"Die glob-Muster müssen auf den absoluten Pfad zum Archiv passen. Alle\n"
+"Abonnements können in einer eigenen Datei gesammelt werden und folgender-\n"
+"maßen in der Konfiguration eingebunden werden::"
msgid ""
" [notify]\n"
@@ -6264,23 +6353,33 @@
"Alternatively, they can be added to Mercurial configuration files by\n"
"setting the previous entry to an empty value."
msgstr ""
+"Alternativ (mit leerem Wert für ``notify.config``) können die Abonnements\n"
+"in der Mercurial Konfigurationsdatei angegeben werden."
msgid ""
"At this point, notifications should be generated but will not be sent until "
"you\n"
"set the ``notify.test`` entry to ``False``."
msgstr ""
+"Nach dieser Konfiguration werden die Benachrichtigungen nun generiert, aber\n"
+"noch nicht gesendet, bis der Wert von ``notify.test`` auf ``False`` gesetzt\n"
+"wird."
msgid ""
"Notifications content can be tweaked with the following configuration "
"entries:"
msgstr ""
+"Der Inhalt der Benachrichtigungen kann mit der folgenden Konfiguration\n"
+"angepasst werden:"
msgid ""
"notify.test\n"
" If ``True``, print messages to stdout instead of sending them. Default: "
"True."
msgstr ""
+"notify.test\n"
+" Falls ``True`` werden die Nachrichten auf die Standardausgabe und nicht\n"
+" als Email versendet. Standard: True."
msgid ""
"notify.sources\n"
@@ -6292,6 +6391,14 @@
" locally. Outgoing sources are the same except for ``unbundle`` which\n"
" is replaced by ``bundle``. Default: serve."
msgstr ""
+"notify.sources\n"
+" Kommaseparierte Liste von Quellaktionen. Benachrichtigungen werden nur\n"
+" gesendet, wenn die Änderungen von einer solchen Aktion ausgelöst wurden.\n"
+" Quellen für ankommende Änderungen sind ``serve`` (Änderungen via http\n"
+" oder ssh), ``pull`` (aktiv abgerufen), ``unbundle`` (per :hg:`unbundle`\n"
+" eingefügt) oder ``push`` (lokal übertragen). Für ausgehende Änderungen\n"
+" gibt es die gleichen, nur mit ``unbundle`` gegen ``bundle`` getauscht.\n"
+" Standard: serve."
msgid ""
"notify.strip\n"
@@ -6303,12 +6410,21 @@
"change\n"
" ``/long/path/repository`` into ``repository``. Default: 0."
msgstr ""
+"notify.strip\n"
+" Anzahl der Schrägstriche, die vom URL-Pfad abgeschnitten werden sollen.\n"
+" Standardmäßig werden Archive mit ihrem absoluten Pfad benannt.\n"
+" Mit ``notify.strip`` lässt sich das in relative Pfade abwandeln. Zum\n"
+" Beispiel wird ``/langer/pfad/zum/archiv`` mit ``strip=4`` zu ``archiv``.\n"
+" Standard: 0."
msgid ""
"notify.domain\n"
" If subscribers emails or the from email have no domain set, complete them\n"
" with this value."
msgstr ""
+"notify.domain\n"
+" Falls eine Abonnementen- oder die Sender-Adresse keine Domäne haben,\n"
+" wird dieser Wert eingefügt."
msgid ""
"notify.style\n"
@@ -6328,62 +6444,103 @@
"notify.incoming\n"
" Template to use when run as incoming hook, override ``notify.template``."
msgstr ""
+"notify.incoming\n"
+" Vorlage (mit höherer Priorität als ``notify.template``), falls die Aktion\n"
+" durch einen 'incoming'-Hook ausgelöst wurde."
msgid ""
"notify.outgoing\n"
" Template to use when run as outgoing hook, override ``notify.template``."
msgstr ""
+"notify.outcoming\n"
+" Vorlage (mit höherer Priorität als ``notify.template``), falls die Aktion\n"
+" durch einen 'outcoming'-Hook ausgelöst wurde."
msgid ""
"notify.changegroup\n"
" Template to use when running as changegroup hook, override\n"
" ``notify.template``."
msgstr ""
+"notify.changegroup\n"
+" Vorlage (mit höherer Priorität als ``notify.template``), falls die Aktion\n"
+" durch einen 'changegroup'-Hook ausgelöst wurde."
msgid ""
"notify.maxdiff\n"
" Maximum number of diff lines to include in notification email. Set to 0\n"
" to disable the diff, -1 to include all of it. Default: 300."
msgstr ""
+"notify.maxdiff\n"
+" Maximale Zeilenanzahl des Diffs in der Benachrichtigungsemail. Der Wert\n"
+" 0 unterbindet die Anzeige des Diffs, -1 wird das gesamte Diff ausgeben.\n"
+" Standard: 300."
msgid ""
"notify.maxsubject\n"
" Maximum number of characters in emails subject line. Default: 67."
msgstr ""
+"notify.maxsubject\n"
+" Maximale Länge der Betreffszeile. Standard: 67."
msgid ""
"notify.diffstat\n"
" Set to True to include a diffstat before diff content. Default: True."
msgstr ""
+"notify.diffstat\n"
+" Zeige eine Diff-Statistik vor dem eigentlich Diff an. Standard: True."
msgid ""
"notify.merge\n"
" If True, send notifications for merge changesets. Default: True."
msgstr ""
+"notify.merge\n"
+" Sende Nachrichten auch für Zusammenführungen. Standard: True."
msgid ""
"notify.mbox\n"
" If set, append mails to this mbox file instead of sending. Default: None."
msgstr ""
"notify.mbox\n"
-" Schreibe Nachrichten in mbox Datei, anstatt sie zu versenden. Standard: None"
+" Schreibe Nachrichten in mbox Datei, anstatt sie zu versenden. Standard: "
+"None"
+
+msgid ""
+"notify.fromauthor\n"
+" If set, use the first committer of the changegroup for the \"From\" field "
+"of\n"
+" the notification mail. If not set, take the user from the pushing repo.\n"
+" Default: False."
+msgstr ""
+"notify.fromauthor\n"
+" Verwende den Autoren der ersten Änderungsgruppe als Absender der\n"
+" Benachrichtigungsemail. Falls nicht gesetzt, verwende den Nutzer im\n"
+" übertragenden Archiv. Standard: False."
+
msgid ""
"If set, the following entries will also be used to customize the "
"notifications:"
msgstr ""
+"Durch Setzen der folgenden Einträge können die Benachrichtigungen weiter\n"
+"angepasst werden:"
msgid ""
"email.from\n"
" Email ``From`` address to use if none can be found in generated email "
"content."
msgstr ""
+"email.from\n"
+" Die zu verwendende Senderadresse (``From``), falls die Vorlage keinen\n"
+" Wert setzt."
msgid ""
"web.baseurl\n"
" Root repository browsing URL to combine with repository paths when making\n"
" references. See also ``notify.strip``."
msgstr ""
+"web.baseurl\n"
+" Die Basis-URL für alle Archive, die mit dem abgeschnittenen (siehe\n"
+" ``notify.strip``) Archivpfad für Referenzen verwendet wird."
#, python-format
msgid "%s: %d new changesets"
@@ -6487,7 +6644,7 @@
"Befehle den Pager benutzen."
msgid "If pager.attend is present, pager.ignore will be ignored."
-msgstr "Wenn pager.attend vorhanden ist, wird pager.ignore ignoriert."
+msgstr "Wenn pager.attend vorhanden ist, ist pager.ignore wirkungslos."
msgid ""
"To ignore global commands like :hg:`version` or :hg:`help`, you have\n"
@@ -6550,7 +6707,7 @@
"configuration file::"
msgstr ""
"Andere Standardwerte können beispielsweise durch den folgenden Abschnitt\n"
-"in der hgrc konfiguriert werden::"
+"in der Konfigurationsdatei gesetzt werden::"
msgid ""
" [email]\n"
@@ -6571,8 +6728,8 @@
"Use ``[patchbomb]`` as configuration section name if you need to\n"
"override global ``[email]`` address settings."
msgstr ""
-"Benutzen Sie [patchbomb] als Abschnittsnamen, falls Sie globale\n"
-"[email]-Einstellungen überschreiben müssen."
+"Benutzen Sie ``[patchbomb]`` als Abschnittsnamen, falls Sie globale\n"
+"``[email]``-Einstellungen überschreiben müssen."
msgid ""
"Then you can use the :hg:`email` command to mail a series of\n"
@@ -6709,9 +6866,9 @@
" with a final summary of all messages and asked for confirmation before\n"
" the messages are sent."
msgstr ""
-"Bei der Angabe der Optionen -d/--diffstat oder -c/--confirm wird eine\n"
-"abschließende Zusammenfassung aller Nachrichten angezeigt und um\n"
-"Bestätigung gebeten, bevor die Nachrichten versendet werden."
+" Bei der Angabe der Optionen -d/--diffstat oder -c/--confirm wird eine\n"
+" abschließende Zusammenfassung aller Nachrichten angezeigt und um\n"
+" Bestätigung gebeten, bevor die Nachrichten versendet werden."
msgid ""
" By default the patch is included as text in the email body for\n"
@@ -6747,9 +6904,9 @@
" previewed with any mail user agent which supports UNIX mbox\n"
" files."
msgstr ""
-"Alternativ werden die Nachrichten mit der Option -m/--mbox in eine Datei\n"
-"geschrieben, die von jedem Emailprogramm, welches das UNIX-mbox-Format\n"
-"unterstützt, geprüft werden, zum Beispiel mit mutt::"
+" Alternativ werden die Nachrichten mit der Option -m/--mbox in eine\n"
+" Datei geschrieben, die von jedem Emailprogramm, welches das UNIX-mbox-\n"
+" Format unterstützt, geprüft werden, zum Beispiel mit mutt::"
msgid ""
" With -n/--test, all steps will run, but mail will not be sent.\n"
@@ -6759,13 +6916,13 @@
" PAGER environment variable is set, your pager will be fired up once\n"
" for each patchbomb message, so you can verify everything is alright."
msgstr ""
-"Um das Versenden verfrühter Patches zu verhindern, sollte man :hg:`email`\n"
-"mit der Option \"-n\" (Testmodus) aufrufen. Sie werden nach einer\n"
-"Empfängeradresse, einem Betreff und einer einleitenden Nachricht gefragt,\n"
-"die die Patches Ihrer Patchbombe beschreibt. Danach werden die\n"
-"Patchbombennachrichten angezeigt. Wenn die PAGER-Umgebungsvariable gesetzt\n"
-"ist, wird Ihr Pager für jede Patchbombe einzeln aufgerufen, so dass alles\n"
-"überprüft werden kann."
+" Mit der Option -n/--test werden alle Schritte ausgeführt und das\n"
+" Ergebnis angezeigt, aber keine Email versendet. Sie werden also nach\n"
+" einer Empfängeradresse, einem Betreff und einer einleitenden Nachricht,\n"
+" die die Patches Ihrer Patchbombe beschreibt, gefragt. Dann werden alle\n"
+" Patchbombennachrichten angezeigt. Wenn die PAGER-Umgebungsvariable\n"
+" gesetzt ist, wird Ihr Pager für jede Patchbombe einzeln aufgerufen, so\n"
+" dass alles überprüft werden kann."
msgid ""
" In case email sending fails, you will find a backup of your series\n"
@@ -6828,7 +6985,7 @@
" hgrc. See the [email] section in hgrc(5) for details.\n"
" "
msgstr ""
-" Um dieses Kommando zu benutzen muss das Email-Versenden im Abschnitt\n"
+" Um dieses Kommando zu benutzen muss der Emailversand im Abschnitt\n"
" [email] der Konfiguration aktiviert sein. Siehe hgrc(5) für Details.\n"
" "
@@ -6863,23 +7020,23 @@
msgstr "Diese Patch-Serie besteht aus %d Patches."
msgid "no recipient addresses provided"
-msgstr ""
+msgstr "Keine Empfängeradresse angegeben"
msgid ""
"\n"
"Final summary:"
msgstr ""
"\n"
-"Zusammenfassung:"
+"Engültige Zusammenfassung:"
msgid "are you sure you want to send (yn)?"
-msgstr "Sicher, dass Sie jetzt senden möchten (y/n)?"
+msgstr "Sicher, dass Sie jetzt senden möchten (j/n)?"
msgid "&No"
msgstr "&Nein"
msgid "&Yes"
-msgstr "Ja (&y)"
+msgstr "&Ja"
msgid "patchbomb canceled"
msgstr "patchbomb abgebrochen"
@@ -6957,36 +7114,36 @@
#. i18n: format XX seconds as "XXs"
#, python-format
msgid "%02ds"
-msgstr ""
+msgstr "%02dsek"
#. i18n: format X minutes and YY seconds as "XmYYs"
#, python-format
msgid "%dm%02ds"
-msgstr ""
+msgstr "%d:%02d"
#. i18n: format X hours and YY minutes as "XhYYm"
#, python-format
msgid "%dh%02dm"
-msgstr ""
+msgstr "%d:%02d"
#. i18n: format X days and YY hours as "XdYYh"
#, python-format
msgid "%dd%02dh"
-msgstr ""
+msgstr "%dd%02dh"
#. i18n: format X weeks and YY days as "XwYYd"
#, python-format
msgid "%dw%02dd"
-msgstr ""
+msgstr "%dw%02dd"
#. i18n: format X years and YY weeks as "XyYYw"
#, python-format
msgid "%dy%02dw"
-msgstr ""
+msgstr "%dy%02dw"
#, python-format
msgid "%d %s/sec"
-msgstr ""
+msgstr "%d %s/Sek"
msgid "command to delete untracked files from the working directory"
msgstr "Löscht nicht versionierte Dateien aus dem Arbeitsverzeichnis"
@@ -7056,7 +7213,7 @@
" option.\n"
" "
msgstr ""
-" Seien Sie mit purge vorsichtig, da Sie Dateien unwiderbringlich\n"
+" Seien Sie mit purge vorsichtig, da Sie Dateien unwiederbringlich\n"
" löschen könnten, die Sie nicht zum Projektarchiv hinzugefügt\n"
" haben. Wenn Sie nur die Liste der Dateien sehen wollen, die dieses\n"
" Programm entfernen würde, nutzen Sie die Option --print.\n"
@@ -7112,16 +7269,16 @@
msgstr "Verschiebe auf den gegebenen Änderungssatz"
msgid "collapse the rebased changesets"
-msgstr "Faltet die erzeugten Änderungssätze nach dem Rebase zusammen"
+msgstr "Fügt die verschobenen Änderungssätze zu einem einzelnen zusammen"
msgid "use text as collapse commit message"
-msgstr "Nimm Text als gefaltete Commit-Nachricht"
+msgstr "Setzt die Versionsmeldung des zusammengefügten Änderungssatzes"
msgid "invoke editor on commit messages"
-msgstr "Ruft Editor zum setzen der Versionsmeldung auf"
+msgstr "Ruft Editor zum Setzen der Versionsmeldung auf"
msgid "read collapse commit message from file"
-msgstr "Liest gefaltete Commit-Nachricht aus Datei"
+msgstr "Liest Versionsmeldung für den zusammengefügten Änderungssatz aus Datei"
msgid "keep original changesets"
msgstr "Behält die ursprünglichen Änderungssätze bei"
@@ -7136,15 +7293,17 @@
msgstr "Methode für das Zusammenführen"
msgid "continue an interrupted rebase"
-msgstr "Führt einen unterbrochenen Rebase fort"
+msgstr "Führt eine unterbrochene Pfropfung fort"
msgid "abort an interrupted rebase"
-msgstr "Bricht einen unterbrochenen Rebase ab"
+msgstr "Bricht eine unterbrochene Pfropfung ab"
msgid ""
"hg rebase [-s REV | -b REV] [-d REV] [options]\n"
"hg rebase {-a|-c}"
msgstr ""
+"hg rebase [-s REV | -b REV] [-d REV] [Optionen]\n"
+"hg rebase {-a|-c}"
msgid "move changeset (and descendants) to a different branch"
msgstr ""
@@ -7170,7 +7329,7 @@
" Sie sollten keine Änderungssätze umpfropfen, die auch andere bereits\n"
" haben, ansonsten zwingen Sie jeden anderen die gleiche rebase-\n"
" Operation durchzuführen, um die verschobenen Versionen nicht\n"
-" doppelt zu haben, wenn sie Ihre Änderungen ziehen."
+" doppelt zu haben, sobald sie Ihre Änderungen abrufen."
msgid ""
" If you don't specify a destination changeset (``-d/--dest``),\n"
@@ -7178,10 +7337,10 @@
" destination. (The destination changeset is not modified by\n"
" rebasing, but new changesets are added as its descendants.)"
msgstr ""
-" Wenn Sie keine Zielversion spezifizieren (``-d/--dest``),\n"
-" verwendet rebase den head des aktuellen named branch, der am \n"
-" nächsten an tip ist als Ziel (die Zielversion wird durch rebase\n"
-" nicht verändert. Sie erhält nur neue changesets als Kinder)."
+" Wenn Sie keine Zielversion spezifizieren (``-d/--dest``), verwendet\n"
+" rebase als Ziel den Kopf des aktuellen benannten Zweigs, der\n"
+" der Projektspitze (tip) am nächsten ist. (Die Zielversion wird durch\n"
+" die Verschiebung nicht verändert, aber erhält neue Kinder.)"
msgid ""
" You can specify which changesets to rebase in two ways: as a\n"
@@ -7196,19 +7355,17 @@
" the whole branch. If you specify neither ``-s`` nor ``-b``, rebase\n"
" uses the parent of the working directory as the base."
msgstr ""
-" Sie können auf zwei Arten angeben, welche Changesets rebased werden\n"
-" sollen: als \"source\" oder als \"base\" Changesets. Beide sind\n"
-" Abkürzungen für ein Menge von Changesets, die topologisch\n"
-" zusammenhängen (die \"source\" Branch). Wenn Sie source angeben\n"
-" (``-s/--source``), rebase wird dieses Changeset und all seine\n"
-" Descendants nach dest pfropfen. Wenn Sie base angeben (``-b/--base``),\n"
-" rebase wird Vorgänger von base auswählen, bis zu aber nicht\n"
-" einschließlich dem gemeinsamen Vorgänger mit dest. Es ist also\n"
-" ``-b`` weniger präzise, aber bequemer, als ``-s``: Sie können\n"
-" jegliches Changeset im Quell-Branch angeben, und rebase wird den\n"
-" gesamten Branch auswählen. Wenn Sie weder ``-s``noch ``-b`` angeben,\n"
-" wird rebase den Parent des aktuellen Verzeichnisses als Base\n"
-" auswählen."
+" Sie können die zu verschiebenden Versionen auf zwei Arten angeben: Als\n"
+" \"Quell-\" oder als \"Basisversion\". Mit diesen ist jeweils eine Menge\n"
+" von topologisch verwandten Revisionen gemeint (der \"Quell\"-zweig).\n"
+" Wenn Sie eine Quellversion (``-s/--source``) angeben, wird Mercurial\n"
+" diese Version und alle ihrer Nachfahren verschieben. Geben Sie eine\n"
+" Basisversion (``-b/--base``) an, so sucht Mercurial den jüngsten\n"
+" gemeinsamen Vorfahren der Basis und des Ziels und verschiebt den Zweig,\n"
+" der die Basis enthält, nicht jedoch den gemeinsamen Vorfahren.\n"
+" Somit ist ``-s`` genauer, aber ``-b`` praktischer: Man gibt irgendeine\n"
+" Version im zu verschiebenden Zweig an. Wenn Sie weder ``-s`` noch\n"
+" ``-b`` angeben, wird den Vorfahr der Arbeitskopie als Basis verwendet."
msgid ""
" By default, rebase recreates the changesets in the source branch\n"
@@ -7217,12 +7374,11 @@
" changesets in the source branch (e.g. merges from the destination\n"
" branch) may be dropped if they no longer contribute any change."
msgstr ""
-" Per Default erzeugt rebase die Changesets im Quell-Branch als\n"
-" Descendants von dest neu, und zerstört dann die Originale. Benutzen\n"
-" Sie ``--keep``, um die originalen Quell-Changesets zu bewahren.\n"
-" Einige Changeset im Quell-Branch (z.B. Merges vom Ziel-Branch),\n"
-" können gelöscht werden, wenn sie keine weiteren Änderungen\n"
-" mehr beisteuern."
+" Standardmäßig werden die Änderungssätze des Quellzweigs als Nachfahren\n"
+" des Ziels erzeugt und ihr Original zerstört. Mit ``--keep`` werden\n"
+" die Originale erhalten. Einige Änderungssätze des Quellzweigs könnten\n"
+" entfernt werden (z.B. Zusammenführungen aus dem Zielzweig, die keine\n"
+" eigenen Änderungen über die Zusammenführung hinaus enthalten)."
msgid ""
" One result of the rules for selecting the destination changeset\n"
@@ -7232,11 +7388,14 @@
" destination (or ``update`` to the other head, if it's the head of\n"
" the intended source branch)."
msgstr ""
-" Ein Ergebnis der Regeln für das Auswählen der Ziel-Changesets und des\n"
-" Quell-Branches ist, daß, im Gegensatz zu ``merge``, rebase nichts\n"
-" tun wird, wenn Sie auf dem neuesten (tipmost) Head eines benannten\n"
-" Branches mit zwei Heads sind. Sie müssen Quelle und/oder Ziel angeben\n"
-" (oder auf den anderen Head ``update``en)."
+" Als Folge der automatischen Auswahlregeln für Quelle und Ziel wird\n"
+" (im Gegensatz zu einer Zusammenführung) keine Verschiebung "
+"durchgeführt,\n"
+" wenn der jüngere von zwei Köpfen eines Zweiges aktuell ist. In diesem\n"
+" Falle (z.B. bei lokaler Versionsübernahme nach einem Abrufen), muss\n"
+" eine Quelle und/oder ein Ziel explizit angegeben werden. Dieser Fall\n"
+" tritt aber vor allem ein, wenn das Arbeitsverzeichnis im Zielzweig\n"
+" liegt, also zunächst auf den Quellzweig aktualisiert werden muss."
msgid ""
" If a rebase is interrupted to manually resolve a merge, it can be\n"
@@ -7255,9 +7414,11 @@
msgid "message can only be specified with collapse"
msgstr ""
+"Eine Versionsmeldung kann nur für beim Zusammenfalten (--collapse) gegeben\n"
+"werden"
msgid "cannot use both abort and continue"
-msgstr "abort und continue können nicht gleichzeitig genutzt werden"
+msgstr "abort und continue dürfen nicht gleichzeitig angegeben werden"
msgid "cannot use collapse with continue or abort"
msgstr "collapse kann nicht mit continue oder abort genutzt werden"
@@ -7266,19 +7427,19 @@
msgstr "detach 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"
+msgstr "abort und continue erlauben keine Angabe einer Revision"
msgid "tool option will be ignored\n"
-msgstr ""
+msgstr "Die Option tool wird ignoriert\n"
msgid "cannot specify both a source and a base"
-msgstr "Es können nicht Quelle und Basis gleichzeitig angegeben werden"
+msgstr "Quelle und Basis dürfen nicht gleichzeitig angegeben werden"
msgid "cannot specify both a revision and a base"
-msgstr "Es können nicht Revision und Basis gleichzeitig angegeben werden"
+msgstr "Revision und Basis dürfen nicht gleichzeitig angegeben werden"
msgid "cannot specify both a revision and a source"
-msgstr "Es können nicht Revision und Quelle gleichzeitig angegeben werden"
+msgstr "Revision und Quelle dürfen nicht gleichzeitig angegeben werden"
msgid "detach requires a revision to be specified"
msgstr "detach benötigt eine Revision"
@@ -7292,11 +7453,18 @@
msgid "use --keep to keep original changesets"
msgstr "Verwende --keep, um die ursprünglichen Änderungssätze zu behalten"
+#, python-format
+msgid "Can't rebase immutable changeset %s"
+msgstr "Nicht veränderbarer Änderungssatz %s kann nicht verschoben werden"
+
+msgid "see hg help phases for details"
+msgstr "Siehe hg help phases für Details"
+
msgid "nothing to rebase\n"
-msgstr "Kein Rebase nötig\n"
+msgstr "Kein Verschiebung nötig\n"
msgid "cannot collapse multiple named branches"
-msgstr "Kann nicht mehrere benannte Zweige kollabieren"
+msgstr "Mehrere benannte Zweige können nicht zusammengefaltet werden"
msgid "rebasing"
msgstr "Verschiebe"
@@ -7313,13 +7481,13 @@
msgstr "keine Änderungen, Revision %d übersprungen\n"
msgid "rebase merging completed\n"
-msgstr "Zusammenführungen des Rebase abgeschlossen\n"
+msgstr "Zusammenführungen der Verschiebung 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"
+msgstr "Verschiebung abgeschlossen\n"
#, python-format
msgid "%d revisions have been skipped\n"
@@ -7332,39 +7500,43 @@
#, 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 "
+"Revision %d kann nicht als Basis genutzt werden: das Ergebnis hätte 3 "
"Vorgänger"
msgid "no rebase in progress"
-msgstr "Kein vorheriger Rebase zur Wiederaufnahme"
+msgstr "Keine vorherige Verschiebung zur Wiederaufnahme"
+
+msgid "warning: immutable rebased changeset detected, can't abort\n"
+msgstr ""
+"Warnung: Unveränderbare Änderungssätze gefunden. Kann nicht abbrechen\n"
msgid "warning: new changesets detected on target branch, can't abort\n"
msgstr ""
-"Warnung: Neue Änderungssätze auf Zielzweig gefunden, kann nicht abbrechen\n"
+"Warnung: Neue Änderungssätze auf Zielzweig gefunden. Kann nicht abbrechen\n"
msgid "rebase aborted\n"
-msgstr "Rebase abgebrochen\n"
+msgstr "Verschiebung abgebrochen\n"
msgid "cannot rebase onto an applied mq patch"
-msgstr "Rebase kann auf einem angewandten MQ-Patch nicht aufsetzen"
+msgstr "Verschiebung kann nicht auf einem angewandten MQ-Patch aufsetzen"
msgid "no matching revisions"
msgstr "keine passenden Revisionen"
msgid "can't rebase multiple roots"
-msgstr ""
+msgstr "Mehrere Wurzeln können nicht verschoben werden"
msgid "source is ancestor of destination"
msgstr "Quelle ist ein Vorfahr des Ziels"
msgid "--tool can only be used with --rebase"
-msgstr ""
+msgstr "--tool kann nicht gleichzeitig mit --rebase verwendet werden"
msgid "rebase working directory to branch head"
-msgstr "Führt Rebase zu einem Zweigkopf auf dem Arbeitsverzeichnis aus"
+msgstr "Führt Verschiebung des Arbeitsverzeichnisses auf den Zweigkopf"
msgid "specify merge tool for rebase"
-msgstr "Method für Zusammenführungen innerhalb der Verschiebung"
+msgstr "Methode für Zusammenführungen innerhalb der Verschiebung"
msgid "commands to interactively select changes for commit/qrefresh"
msgstr "Befehle um interaktiv Änderungen für commit/qrefresh zu wählen"
@@ -7389,16 +7561,16 @@
msgstr "%d Hunks, %d Zeilen geändert\n"
msgid "[Ynsfdaq?]"
-msgstr ""
+msgstr "[Jnsdfab?]"
msgid "&Yes, record this change"
-msgstr "&Yes - übernimmt diese Änderung"
+msgstr "&Ja - übernimmt diese Änderung"
msgid "&No, skip this change"
-msgstr "&No, überspringt diese Änderung"
+msgstr "&Nein, überspringt diese Änderung"
msgid "&Skip remaining changes to this file"
-msgstr "&Überspringe die restlichen Änderungen an dieser Datei"
+msgstr "Über&springe die restlichen Änderungen an dieser Datei"
msgid "Record remaining changes to this &file"
msgstr "Zeichne die restlichen Änderungen an dieser &Datei auf"
@@ -7407,13 +7579,13 @@
msgstr "&Fertig, überspringe die restlichen Änderungen und Dateien"
msgid "Record &all changes to all remaining files"
-msgstr "Übernimmt &alle Änderungen aller restlichen Dateien"
+msgstr "Zeichne &alle Änderungen der verbleibenden Dateien auf"
msgid "&Quit, recording no changes"
-msgstr "&Quit, übernimmt keine Änderungen"
+msgstr "&Beende, zeichnet keine Änderungen auf"
msgid "&?"
-msgstr ""
+msgstr "&?"
msgid "user quit"
msgstr "Abbruch durch Benutzer"
@@ -7460,7 +7632,7 @@
" y - record this change\n"
" n - skip this change"
msgstr ""
-" y - übernimmt diese Änderung\n"
+" j - übernimmt diese Änderung\n"
" n - überspringt diese Änderung"
msgid ""
@@ -7475,9 +7647,9 @@
" a - record all changes to all remaining files\n"
" q - quit, recording no changes"
msgstr ""
-" d - fertig, überspringt verbleibende Änderungen und Dateien\n"
+" f - fertig, überspringt verbleibende Änderungen und Dateien\n"
" a - übernimmt alle Änderungen aller verbleibenden Dateien\n"
-" q - beendet ohne Änderungen zu übernehmen"
+" b - beendet ohne Änderungen zu übernehmen"
msgid " ? - display help"
msgstr " ? - zeigt Hilfe an"
@@ -7507,8 +7679,8 @@
msgid "cannot partially commit a merge (use \"hg commit\" instead)"
msgstr ""
-"Eine Zusammenführung kann nicht teilweise übernommen werden (verwende "
-"stattdessen :h:`commit`)"
+"Eine Zusammenführung kann nicht teilweise übernommen werden (verwende :hg:"
+"`commit`)"
msgid "no changes to record\n"
msgstr "Keine Änderungen zu übernehmen\n"
@@ -7520,49 +7692,51 @@
msgstr "Interaktive Auswahl der Änderungen für refresh"
msgid "recreates hardlinks between repository clones"
-msgstr "stellt Hardlinks zwischen Repository Clones wieder her"
+msgstr "stellt Hardlinks zwischen Archivklonen wieder her"
msgid "recreate hardlinks between two repositories"
-msgstr "stellt Hardlinks zwischen zwei Repositories wieder her"
+msgstr "stellt harte Verknüpfungen zwischen zwei Archiven wieder her"
msgid ""
" When repositories are cloned locally, their data files will be\n"
" hardlinked so that they only use the space of a single repository."
msgstr ""
-" Wenn Repositories lokal geklont werden, werden ihre Datendateien\n"
-" hart gelinkt, sodaß sie nur den Platz eines einzelnen Repositories\n"
-" belegen."
+" Wenn Archive lokal geklont werden, werden ihre Datendateien hart\n"
+" verknüpft, sodass sie nur den Platz eines einzelnen Archivs belegen."
msgid ""
" Unfortunately, subsequent pulls into either repository will break\n"
" hardlinks for any files touched by the new changesets, even if\n"
" both repositories end up pulling the same changes."
msgstr ""
-" Unglücklicherweise werden nachfolgende ``pull``s in jedes von diesen\n"
-" Repositories Hardlinks für alle Dateien, die von dem neuen Changeset\n"
-" betroffen sind, brechen, selbst wenn beide Repositories schlussendlich\n"
-" die gleichen Änderungen einbeziehen."
+" Unglücklicherweise brechen spätere Archivänderungen (z.B. Abrufen) die\n"
+" Verknüpfungen aller Dateien, die von neuen Änderungssätzen betroffen\n"
+" sind, selbst wenn beide Archive letzlich dieselben Änderungen enthalten."
msgid ""
" Similarly, passing --rev to \"hg clone\" will fail to use any\n"
" hardlinks, falling back to a complete copy of the source\n"
" repository."
msgstr ""
-" In gleicher Weise scheitert \"hg clone\" mit --rev an Hardlinks,\n"
-" sondern nutzt eine komplette Kopie des Quell-Repositories."
+" In gleicher Weise scheitert \"hg clone\" mit --rev an harten\n"
+" Verknüpfungen und nutzt eine komplette Kopie des Quellarchivs."
msgid ""
" This command lets you recreate those hardlinks and reclaim that\n"
" wasted space."
msgstr ""
-" Dieses Kommando erlaubt Ihnen, diese Hardlinks wieder herzustellen und\n"
-" den verlorenen Platz wieder zurück zu gewinnen."
+" Dieses Kommando erlaubt es, diese Verknüpfungen wieder herzustellen\n"
+" und den verlorenen Platz zurückzugewinnen."
msgid ""
" This repository will be relinked to share space with ORIGIN, which\n"
" must be on the same local disk. If ORIGIN is omitted, looks for\n"
" \"default-relink\", then \"default\", in [paths]."
msgstr ""
+" Dieses Archiv wird neu verknüpft um den Speicher mit HERKUNFT, welches\n"
+" auf derselben lokalen Platte sein muss, zu teilen. Wenn HERKUNFT nicht\n"
+" angegeben ist, wird der Pfade (siehe [paths]) mit dem Namen\n"
+" \"default-relink\" und schliesslich \"default\" verwendet."
msgid ""
" Do not attempt any read operations on this repository while the\n"
@@ -7570,9 +7744,12 @@
" writes.)\n"
" "
msgstr ""
+" Versuchen Sie nicht, während der Aktion Leseoperationen auf diesem\n"
+" Archiv durchzuführen. Schreiben wird von beiden Archive verhindert.\n"
+" "
msgid "hardlinks are not supported on this system"
-msgstr "Hardlinks werden von diesem System nicht unterstützt"
+msgstr "Harte Verknüpfungen werden von diesem System nicht unterstützt"
msgid "must specify local origin repository"
msgstr "Lokales Quellarchiv muss angegeben werden"
@@ -7582,11 +7759,11 @@
msgstr "Wiederverknüpft: %s nach %s\n"
msgid "there is nothing to relink\n"
-msgstr ""
+msgstr "Es gibt nichts zum wiederverknüpfen\n"
#, python-format
msgid "tip has %d files, estimated total number of files: %s\n"
-msgstr ""
+msgstr "Die Archivspitze (tip) hat %d Dateien. Geschätzte Gesamtzahl: %s\n"
msgid "collecting"
msgstr "Sammle"
@@ -7602,21 +7779,21 @@
msgstr "Quelle und Ziel sind auf unterschiedlichen Geräten"
msgid "pruning"
-msgstr ""
+msgstr "Schränke ein"
#, python-format
msgid "pruned down to %d probably relinkable files\n"
-msgstr ""
+msgstr "Schränke auf %d wahrscheinlich wiederverknüpfbare Dateien ein\n"
msgid "relinking"
-msgstr ""
+msgstr "Verknüpfe erneut"
#, python-format
msgid "relinked %d files (%s reclaimed)\n"
-msgstr ""
+msgstr "%d Dateien wiederverknüpft (%s zurückgewonnen)\n"
msgid "[ORIGIN]"
-msgstr ""
+msgstr "[HERKUNFT]"
msgid "extend schemes with shortcuts to repository swarms"
msgstr ""
@@ -7731,7 +7908,7 @@
#, python-format
msgid "skipping already applied revision %s\n"
-msgstr ""
+msgstr "Überspringe bereits angewendete Revision %s\n"
#, python-format
msgid "skipping merge changeset %s:%s\n"
@@ -7750,14 +7927,14 @@
msgstr ""
msgid "filter failed"
-msgstr ""
+msgstr "Filter fehlgeschlagen"
msgid "can only omit patchfile if merging"
msgstr ""
#, python-format
msgid "%s: empty changeset"
-msgstr ""
+msgstr "%s: leerer Änderungssatz"
msgid "fix up the merge and run hg transplant --continue"
msgstr ""
@@ -7774,7 +7951,7 @@
msgstr ""
msgid "commit failed"
-msgstr ""
+msgstr "Übernahme der Änderungen schlug fehl"
msgid "filter corrupted changeset (no user or date)"
msgstr "filtriere beschädigte Änderungssätze (ohne Nutzer oder Datum)"
@@ -8129,8 +8306,8 @@
msgstr "Aktualisiere Lesezeichen %s\n"
#, python-format
-msgid "not updating divergent bookmark %s\n"
-msgstr "Aktualisiere nicht divergierendes Lesezeichen %s\n"
+msgid "divergent bookmark %s stored as %s\n"
+msgstr "Divergierendes Lesezeichen %s als %s gespeichert\n"
msgid "searching for changed bookmarks\n"
msgstr "Suche nach geänderten Lesezeichen\n"
@@ -8288,6 +8465,10 @@
msgstr "Marke: %s\n"
#, python-format
+msgid "phase: %s\n"
+msgstr "Phase: %s\n"
+
+#, python-format
msgid "parent: %d:%s\n"
msgstr "Vorgänger: %d:%s\n"
@@ -8585,6 +8766,8 @@
" Returns 0 if all files are successfully added.\n"
" "
msgstr ""
+" Gibt 0 zurück, wenn alle Dateien erfolgreich hinzugefügt wurden.\n"
+" "
msgid "add all new files, delete all missing files"
msgstr "Fügt alle neuen Dateien hinzu, löscht alle fehlenden Dateien"
@@ -8601,8 +8784,8 @@
" ``.hgignore``. As with add, these changes take effect at the next\n"
" commit."
msgstr ""
-" Neue Dateien werden ignoriert, wenn sie einem der Muster aus "
-"``.hgignore``\n"
+" Neue Dateien werden ignoriert, wenn sie einem der Muster aus ``."
+"hgignore``\n"
" entsprechen. Genau wie add, wirken diese Änderungen erst beim nächsten\n"
" Übernehmen (commit)."
@@ -8632,8 +8815,7 @@
msgstr "Annotiert die angegebene Revision"
msgid "follow copies/renames and list the filename (DEPRECATED)"
-msgstr ""
-"Folge Kopien/Umbenennungen und liste Dateinamen auf (VERALTET)"
+msgstr "Folge Kopien/Umbenennungen und liste Dateinamen auf (VERALTET)"
msgid "don't follow copies and renames"
msgstr "Unterläßt das Folgen von Dateikopien und Umbenennungen"
@@ -9086,17 +9268,18 @@
msgid "track a line of development with movable markers"
msgstr "Folgt einem Entwicklungsstrang mit einer beweglichen Markierung"
-msgid ""
-" Bookmarks are pointers to certain commits that move when\n"
-" committing. Bookmarks are local. They can be renamed, copied and\n"
-" deleted. It is possible to use bookmark names in :hg:`merge` and\n"
-" :hg:`update` to merge and update respectively to a given bookmark."
+#, fuzzy
+msgid ""
+" Bookmarks are pointers to certain commits that move when committing.\n"
+" Bookmarks are local. They can be renamed, copied and deleted. It is\n"
+" possible to use :hg:`merge NAME` to merge from a given bookmark, and\n"
+" :hg:`update NAME` to update to a given bookmark."
msgstr ""
" 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."
+" Lesezeichen bei :hg: `merge` und :hg:`update` anzugeben, um das an-\n"
+" gegebene Lesezeichen zusammenzuführen, bzw. darauf zu aktualisieren."
msgid ""
" You can use :hg:`bookmark NAME` to set a bookmark on the working\n"
@@ -9165,6 +9348,14 @@
msgstr "Setzt oder zeigt den Namen des aktuellen Zweigs"
msgid ""
+" .. note::\n"
+" Branch names are permanent and global. Use :hg:`bookmark` to create "
+"a\n"
+" light-weight bookmark instead. See :hg:`help glossary` for more\n"
+" information about named branches and bookmarks."
+msgstr ""
+
+msgid ""
" With no argument, show the current branch name. With one argument,\n"
" set the working directory branch name (the branch will not exist\n"
" in the repository until the next commit). Standard practice\n"
@@ -9201,13 +9392,6 @@
" :hg:`update`. Mit :hg:`commit --close-branch` wird der aktuelle Zweig\n"
" geschlossen."
-msgid ""
-" .. note::\n"
-" Branch names are permanent. Use :hg:`bookmark` to create a\n"
-" light-weight bookmark instead. See :hg:`help glossary` for more\n"
-" information about named branches and bookmarks."
-msgstr ""
-
#, python-format
msgid "reset working directory to branch %s\n"
msgstr "Setze Arbeitsverzeichnis auf Zweig %s zurück\n"
@@ -9223,6 +9407,9 @@
msgid "marked working directory as branch %s\n"
msgstr "Arbeitsverzeichnis wurde als Zweig %s markiert\n"
+msgid "(branches are permanent and global, did you want a bookmark?)\n"
+msgstr ""
+
msgid "show only branches that have unmerged heads"
msgstr "Zeigt nur Branches deren Köpfe nicht zusammengeführt wurden"
@@ -9259,12 +9446,14 @@
" Returns 0.\n"
" "
msgstr ""
+" Gibt 0 zurück.\n"
+" "
msgid " (closed)"
-msgstr ""
+msgstr " (geschlossen)"
msgid " (inactive)"
-msgstr ""
+msgstr " (inaktiv)"
msgid "run even when the destination is unrelated"
msgstr "Auch ausführen, wenn das Ziel keinen Bezug hat"
@@ -9461,7 +9650,8 @@
" --pull option to avoid hardlinking."
msgstr ""
" Aus Effizienzgründen werden 'hardlinks' für das Klonen genutzt, wann\n"
-" immer Quelle und Ziel auf dem selben Dateisystem liegen (dies gilt nur\n"
+" immer Quelle und Ziel auf dem selben Dateisystem liegen (dies gilt "
+"nur\n"
" für die Daten des Archivs, nicht für die Arbeitskopie). Einige\n"
" Dateisyteme, wie etwa AFS, implementieren 'hardlinks' fehlerhaft,\n"
" erzeugen dabei aber keine Fehlermeldung. Dann muss die --pull Option\n"
@@ -9554,8 +9744,7 @@
msgstr ""
msgid " See :hg:`help urls` for details on specifying URLs."
-msgstr ""
-" Siehe auch :hg:`help urls` für das Format von Adressangaben."
+msgstr " Siehe auch :hg:`help urls` für das Format von Adressangaben."
msgid "cannot specify both --noupdate and --updaterev"
msgstr ""
@@ -10171,8 +10360,7 @@
msgstr "[OPTION]... [-o DATEINAMENMUSTER] REV..."
msgid "dump the header and diffs for one or more changesets"
-msgstr ""
-"Gibt Kopfzeilen und Änderungsverlauf einer oder mehrerer Versionen aus"
+msgstr "Gibt Kopfzeilen und Änderungsverlauf einer oder mehrerer Versionen aus"
msgid " Print the changeset header and diffs for one or more revisions."
msgstr ""
@@ -10221,8 +10409,10 @@
" :``%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"
-" :``%m``: Erste Zeile der Übernahmenachricht (nur alphanumerische Zeichen)\n"
+" :``%h``: Kurzform der Prüfsumme des Änderungssatzes (12 Byte "
+"hexadezimal)\n"
+" :``%m``: Erste Zeile der Übernahmenachricht (nur alphanumerische "
+"Zeichen)\n"
" :``%n``: Laufende Nummer mit führenden Nullen, beginnend bei 1\n"
" :``%r``: Revisionsnummer mit führenden Nullen"
@@ -10349,9 +10539,9 @@
msgid ""
" If a graft merge results in conflicts, the graft process is\n"
-" aborted so that the current merge can be manually resolved. Once\n"
-" all conflicts are addressed, the graft process can be continued\n"
-" with the -c/--continue option."
+" interrupted so that the current merge can be manually resolved.\n"
+" Once all conflicts are addressed, the graft process can be\n"
+" continued with the -c/--continue option."
msgstr ""
msgid ""
@@ -10913,10 +11103,10 @@
msgid ""
" With -s/--similarity, hg will attempt to discover renames and\n"
-" copies in the patch in the same way as 'addremove'."
+" copies in the patch in the same way as :hg:`addremove`."
msgstr ""
" Mit der Option -s/--similarity werden Umbenennungen und Kopien auf\n"
-" gleiche Weise wie mit dem Befehl \"hg addremove\" erkannt."
+" gleiche Weise wie mit dem Befehl :hg:`addremove` erkannt."
msgid ""
" To read a patch from standard input, use \"-\" as the patch name. If\n"
@@ -10966,7 +11156,7 @@
msgstr ""
msgid "patch is damaged or loses information"
-msgstr "Prüfsumme stimmt nicht überein: Patch korrumpiert"
+msgstr "Prüfsumme stimmt nicht überein: Patch beschädigt"
msgid "applied to working directory"
msgstr "Angewendet aufs Arbeitsverzeichnis"
@@ -11404,12 +11594,11 @@
msgid "run 'hg heads' to see all heads"
msgstr "'hg heads' zeigt alle Köpfe"
-msgid "there is nothing to merge"
+msgid "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 "use 'hg update' instead"
+msgstr "Nutze stattdessen 'hg update'"
msgid "working directory not at a head revision"
msgstr "Arbeitsverzeichnis ist nicht auf Stand der Kopfversion"
@@ -11478,7 +11667,7 @@
msgstr "'%s' nicht im Manifest gefunden!"
msgid "[NAME]"
-msgstr ""
+msgstr "[NAME]"
msgid "show aliases for remote repositories"
msgstr "Zeigt Adresse für Aliasnamen von entfernten Projektarchiven an"
@@ -11525,6 +11714,61 @@
msgid "not found!\n"
msgstr "nicht gefunden!\n"
+msgid "set changeset phase to public"
+msgstr ""
+
+msgid "set changeset phase to draft"
+msgstr ""
+
+msgid "set changeset phase to secret"
+msgstr ""
+
+msgid "allow to move boundary backward"
+msgstr ""
+
+msgid "target revision"
+msgstr ""
+
+msgid "[-p|-d|-s] [-f] [-r] REV..."
+msgstr ""
+
+msgid "set or show the current phase name"
+msgstr ""
+
+msgid " With no argument, show the phase name of specified revisions."
+msgstr ""
+
+msgid ""
+" With one of -p/--public, -d/--draft or -s/--secret, change the\n"
+" phase value of the specified revisions."
+msgstr ""
+
+msgid ""
+" Unless -f/--force is specified, :hg:`phase` won't move changeset from a\n"
+" lower phase to an higher phase. Phases are ordered as follows::"
+msgstr ""
+
+msgid " public < draft < secret"
+msgstr ""
+
+msgid ""
+" Return 0 on success, 1 if no phases were changed.\n"
+" "
+msgstr ""
+
+msgid "only one phase can be specified"
+msgstr ""
+
+msgid "no revisions specified!"
+msgstr ""
+
+#, python-format
+msgid "phase change for %i changesets\n"
+msgstr ""
+
+msgid "no phases changed\n"
+msgstr ""
+
#, python-format
msgid "not updating: %s\n"
msgstr "aktualisiere nicht: %s\n"
@@ -11672,8 +11916,7 @@
msgid ""
" Push changesets from the local repository to the specified\n"
" destination."
-msgstr ""
-" Überträgt lokale Änderungen in das angegebene Ziel."
+msgstr " Überträgt lokale Änderungen in das angegebene Ziel."
msgid ""
" This operation is symmetrical to pull: it is identical to a pull\n"
@@ -11728,7 +11971,6 @@
"gezogen\n"
" werden. Beim Weglassen des ZIELs wird standardmäßig der 'default'-Pfad\n"
" genutzt. Weitere Hilfe gibt unter :hg:`help urls`."
-" "
msgid ""
" Returns 0 if push was successful, 1 if nothing to push.\n"
@@ -11809,7 +12051,8 @@
msgstr ""
" Option -A/--after kann genutzt werden, um Dateien zu entfernen, die\n"
" bereits gelöscht wurden, -f/--force kann genutzt werden, um die\n"
-" Löschung zu erzwingen. -Af entfernt Dateien aus der nächsten Revision,\n"
+" Löschung zu erzwingen. -Af entfernt Dateien aus der nächsten "
+"Revision,\n"
" ohne sie im Arbeitsverzeichnis zu löschen"
msgid ""
@@ -11819,7 +12062,8 @@
" (as reported by :hg:`status`). The actions are Warn, Remove\n"
" (from branch) and Delete (from disk):"
msgstr ""
-" Die folgende Tabelle beschreibt detailliert das Verhalten von 'remove'\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"
@@ -11871,7 +12115,9 @@
#, python-format
msgid "not removing %s: file has been marked for add (use forget to undo)\n"
-msgstr "Entferne nicht %s: Datei soll hinzugefügt werden ('hg forget' um dies rückgängig zu machen)\n"
+msgstr ""
+"Entferne nicht %s: Datei soll hinzugefügt werden ('hg forget' um dies "
+"rückgängig zu machen)\n"
msgid "record a rename that has already occurred"
msgstr ""
@@ -11994,8 +12240,7 @@
msgstr ""
msgid "restore files to their checkout state"
-msgstr ""
-"Setzt gegebene Dateien oder Verzeichnisse auf frühere Version zurück"
+msgstr "Setzt gegebene Dateien oder Verzeichnisse auf frühere Version zurück"
msgid ""
" .. note::\n"
@@ -12033,7 +12278,8 @@
msgstr ""
" Mit der -r/--rev oder der -d/--date Option werden die Dateien oder\n"
" Verzeichnisse auf die gegebene Revision zurückgesetzt. Da 'revert' aber\n"
-" nicht die mit dem Arbeitsverzeichnis assoziierte Revisionsnummer ändert,\n"
+" nicht die mit dem Arbeitsverzeichnis assoziierte Revisionsnummer "
+"ändert,\n"
" gelten die betroffenen Dateien dann als modifiziert. Damit kann man\n"
" ungewollte aber bereits übernommene Änderungen rückgängig machen. Siehe\n"
" auch :hg:`backout` für eine ähnliche Methode."
@@ -12155,17 +12401,14 @@
" - unbundle"
msgid ""
-" It's possible to lose data with rollback: commit, update back to\n"
-" an older changeset, and then rollback. The update removes the\n"
-" changes you committed from the working directory, and rollback\n"
-" removes them from history. To avoid data loss, you must pass\n"
-" --force in this case."
-msgstr ""
-" Es gibt die Möglichkeit durch das Zurückrollen Daten zu verlieren, z.B.\n"
-" die Übernahme neuer Änderungen (commit) gefolgt von einer Aktualisierung\n"
-" auf eine andere Revision und einem Zurückrollen der Übernahme.\n"
-" Damit dies nicht aus Versehen passiert, wird in diesem Falle --force als\n"
-" Parameter gefordert."
+" To avoid permanent data loss, rollback will refuse to rollback a\n"
+" commit transaction if it isn't checked out. Use --force to\n"
+" override this protection."
+msgstr ""
+" Um einen versehentlichen Datenverlust zu verhindern, wird rollback\n"
+" keine Änderungssätze aus der Historie entfernen, die nicht im\n"
+" Arbeitsverzeichnis aktuell sind. Um diesen Schutz abzuschalten,\n"
+" muss --force (erzwingen) angegeben werden."
msgid ""
" This command is not intended for use on public repositories. Once\n"
@@ -12396,7 +12639,8 @@
" relative to one merge parent."
msgstr ""
" .. note:\n"
-" Der Status kann sich vom Diff unterscheiden, wenn sich Berechtigungen\n"
+" Der Status kann sich vom Diff unterscheiden, wenn sich "
+"Berechtigungen\n"
" geändert haben oder eine Zusammenführung durchgeführt wurde. Das\n"
" Standard-Diff-Format zeigt keine Berechtigungsänderungen an und\n"
" 'diff' zeigt nur Änderungen relativ zu einer Vorgängerversion einer\n"
@@ -12436,9 +12680,12 @@
" I = ignoriert\n"
" = die zuvor hinzugefügt Datei (A) wurde von hier kopiert"
-msgid " - show changes in the working directory relative to a changeset:"
-msgstr ""
-" - zeigt Änderungen zwischen dem Arbeitsverzeichnis und einer Revision:"
+msgid ""
+" - show changes in the working directory relative to a\n"
+" changeset::"
+msgstr ""
+" - zeigt Änderungen zwischen dem Arbeitsverzeichnis und einer\n"
+" Revision::"
msgid " hg status --rev 9353"
msgstr ""
@@ -12721,7 +12968,8 @@
" umbenannt oder manuell einem anderen Änderungssatz angehängt werden."
msgid "update to new branch head if changesets were unbundled"
-msgstr "aktualisiere auf den neuen Zweigkopf when Änderungssätze entpackt wurden"
+msgstr ""
+"aktualisiere auf den neuen Zweigkopf when Änderungssätze entpackt wurden"
msgid "[-u] FILE..."
msgstr "[-u] DATEI..."
@@ -12745,7 +12993,9 @@
msgstr "entferne nicht versionierte Änderungen (kein Backup)"
msgid "update across branches if no uncommitted changes"
-msgstr "Aktualisiere auf anderen Zweig (falls keine unversionierte Änderungen ausstehen)"
+msgstr ""
+"Aktualisiere auf anderen Zweig (falls keine unversionierten Änderungen "
+"ausstehen)"
msgid "[-c] [-C] [-d DATE] [[-r] REV]"
msgstr "[-c] [-C] [-d DATUM] [[-r] REV]"
@@ -12756,10 +13006,11 @@
msgid ""
" Update the repository's working directory to the specified\n"
" changeset. If no changeset is specified, update to the tip of the\n"
-" current named branch."
+" current named branch and move the current bookmark."
msgstr ""
" Hebt das Arbeitsverzeichnis auf die angegebene Revision an. Ohne\n"
-" Angabe einer Revision wird der Spitze des aktuellen Zweigs gewählt."
+" Angabe einer Revision wird der Spitze des aktuellen Zweigs gewählt\n"
+" und ggf. das aktuelle Lesezeichen verschoben."
msgid ""
" If the changeset is not a descendant of the working directory's\n"
@@ -12867,11 +13118,11 @@
msgstr "(siehe http://mercurial.selenic.com für mehr Information)"
msgid ""
-"Copyright (C) 2005-2011 Matt Mackall and others\n"
+"Copyright (C) 2005-2012 Matt Mackall 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 ""
-"Copyright (C) 2005-2011 Matt Mackall und andere\n"
+"Copyright (C) 2005-2012 Matt Mackall und andere\n"
"Dies ist freie Software; siehe Quellen für Kopierbestimmungen. Es besteht\n"
"KEINE Gewährleistung für das Programm, nicht einmal der Marktreife oder der\n"
"Verwendbarkeit für einen bestimmten Zweck.\n"
@@ -13175,7 +13426,7 @@
msgstr "Option --cwd kann nicht abgekürzt werden!"
msgid ""
-"Option -R has to be separated from other options (e.g. not -qR) and --"
+"option -R has to be separated from other options (e.g. not -qR) and --"
"repository may only be abbreviated as --repo!"
msgstr ""
"Option -R muss von anderen Optionen getrennt werden (also z.B. nicht -qR) "
@@ -13899,7 +14150,7 @@
msgid ""
"\n"
"``annotate``\n"
-"\"\"\"\"\"\"\"\""
+"\"\"\"\"\"\"\"\"\"\"\"\""
msgstr ""
msgid ""
@@ -14502,11 +14753,14 @@
"various actions such as starting or finishing a commit. Multiple\n"
"hooks can be run for the same action by appending a suffix to the\n"
"action. Overriding a site-wide hook can be done by changing its\n"
-"value or setting it to an empty string."
+"value or setting it to an empty string. Hooks can be prioritized\n"
+"by adding a prefix of ``priority`` to the hook name on a new line\n"
+"and setting the priority. The default priority is 0 if\n"
+"not specified."
msgstr ""
msgid "Example ``.hg/hgrc``::"
-msgstr ""
+msgstr "Beispiel ``.hg/hgrc``-Datei::"
msgid ""
" [hooks]\n"
@@ -14515,7 +14769,9 @@
" # do not use the site-wide hook\n"
" incoming =\n"
" incoming.email = /my/email/hook\n"
-" incoming.autobuild = /my/build/hook"
+" incoming.autobuild = /my/build/hook\n"
+" # force autobuild hook to run before other incoming hooks\n"
+" priority.incoming.autobuild = 1"
msgstr ""
msgid ""
@@ -15798,11 +16054,12 @@
msgstr ""
"EDITOR\n"
" Manchmal muss Mercurial eine Textdatei in einem Editor öffnen, damit\n"
-" der Nutzer sie bearbeiten kann, zum Beispiel when eine Commit-\n"
-" Nachricht geschrieben wird. Der verwendete Editor wird aus den drei\n"
-" Umgebungsvariablen HGEDITOR, VISUAL und EDITOR (in dieser Reihenfolge)\n"
-" ermittelt. Der erste nicht-leere wird verwendet. Wenn alle Angaben\n"
-" leer sind, wird der Standard 'vi' verwendet."
+" der Nutzer sie bearbeiten kann, zum Beispiel wenn eine Versionsmeldung\n"
+" geschrieben wird. Der verwendete Editor wird aus den drei Umgebungs-\n"
+" variablen HGEDITOR, VISUAL und EDITOR (in dieser Reihenfolge) "
+"ermittelt.\n"
+" Der erste nicht-leere wird verwendet. Wenn alle Angaben leer sind, wird\n"
+" der Standard 'vi' verwendet."
msgid ""
"PYTHONPATH\n"
@@ -15993,7 +16250,7 @@
msgid "- Find C files in a non-standard encoding::"
msgstr ""
-msgid " hg locate \"set:**.c and not encoding(ascii)\""
+msgid " hg locate \"set:**.c and not encoding('UTF-8')\""
msgstr ""
msgid "- Revert copies of large binary files::"
@@ -16656,9 +16913,8 @@
"character is treated as a comment character, and the ``\\`` character\n"
"is treated as an escape character."
msgstr ""
-"Eine ignore-Datei ist eine Textdatei, die aus einer Liste von Patterns "
-"besteht,\n"
-"mit einem Ausdruck pro Zeile. Leere Zeilen werden übersprungen.\n"
+"Eine ignore-Datei ist eine Textdatei, die aus einer Liste von Dateimustern\n"
+"besteht, mit einem Ausdruck pro Zeile. Leere Zeilen werden übersprungen.\n"
"Das ``#``-Zeichen wird als Kommentarzeichen behandelt und das \n"
"``\\``-Zeichen als Escape-Zeichen."
@@ -16666,11 +16922,11 @@
"Mercurial supports several pattern syntaxes. The default syntax used\n"
"is Python/Perl-style regular expressions."
msgstr ""
-"Mercurial unterstützt verschiedene Pattern-Syntaxen. Im Normalfall\n"
+"Mercurial unterstützt verschiedene Dateimuster-Syntaxen. Im Normalfall\n"
"werden Python/Perl-artige Reguläre Ausdrücke verwendet."
msgid "To change the syntax used, use a line of the following form::"
-msgstr ""
+msgstr "Die folgende Zeile ändert die von diesem Punkt an verwendete Syntax::"
msgid " syntax: NAME"
msgstr " Syntax: NAME"
@@ -16689,7 +16945,7 @@
"The chosen syntax stays in effect when parsing all patterns that\n"
"follow, until another syntax is selected."
msgstr ""
-"Die gewählte Syntax wird auf auf alle folgenden Patterns angewendet\n"
+"Die gewählte Syntax wird auf auf alle folgenden Muster angewendet\n"
"bis eine andere Syntax ausgewählt wird."
msgid ""
@@ -17103,8 +17359,7 @@
msgstr "Beispiel mit regulärem Ausdruck::"
msgid " re:.*\\.c$ any name ending in \".c\", anywhere in the repository"
-msgstr ""
-" re:.*\\.c$ jeder Name endend mit \".c\" überall im Projektarchiv"
+msgstr " re:.*\\.c$ jeder Name endend mit \".c\" überall im Projektarchiv"
msgid "File examples::"
msgstr "Datei-Beispiele::"
@@ -17398,16 +17653,16 @@
"subrepositories."
msgstr ""
"Mercurial unterstützt im Augenblick Mercurial-, Git- und Subversion-\n"
-"Subrepositories."
+"Unterarchive."
msgid "Subrepositories are made of three components:"
-msgstr "Subrespositories bestehen aus drei Komponenten:"
+msgstr "Unterarchive bestehen aus drei Komponenten:"
msgid ""
"1. Nested repository checkouts. They can appear anywhere in the\n"
" parent working directory."
msgstr ""
-"1. Verschachtelte Repository Checkouts. Sie können überall im\n"
+"1. Verschachtelte Archivaktualisierungen. Sie können überall im\n"
" übergeordneten Arbeitsverzeichnis auftauchen."
msgid ""
@@ -17415,9 +17670,9 @@
" tell where the subrepository checkouts come from. Mercurial\n"
" subrepositories are referenced like:"
msgstr ""
-"2. Verschachtelte Repository References. Sie werden in ``.hgsub``\n"
-" definiert und geben an, wo Subrepository Checkouts herkommen.\n"
-" Mercurial Subrepositories werden wie folgt angegeben:"
+"2. Verschachtelte Archivreferenzen. Sie werden in ``.hgsub`` definiert\n"
+" und geben an, wo Archivaktualisierungen herkommen.\n"
+" Mercurial-Unterarchive werden wie folgt angegeben:"
msgid " path/to/nested = https://example.com/nested/repo/path"
msgstr ""
@@ -17506,8 +17761,8 @@
"To remove a subrepository from the parent repository, delete its\n"
"reference from ``.hgsub``, then remove its files."
msgstr ""
-"Um ein Subrepository aus seinem Parent Repository zu entfernen,\n"
-"entfernen Sie seine Verweise aus ``.hgsub`` und löschen die Dateien."
+"Um ein Unterarchiv aus seinem Elternarchiv zu entfernen, löschen Sie\n"
+"seine Verweise aus ``.hgsub`` und seine Dateien."
msgid ""
"Interaction with Mercurial Commands\n"
@@ -18125,7 +18380,7 @@
msgstr ""
msgid "use -f to force"
-msgstr "Benutzen Sie -f, um dennoch fortzufahren"
+msgstr "Benutzen Sie -f zum erzwingen"
#, python-format
msgid "named branch could not be reset: current branch is still '%s'\n"
@@ -18203,6 +18458,10 @@
"changegroupsubset nicht unterstützt."
#, python-format
+msgid "updating %s to public failed!\n"
+msgstr ""
+
+#, python-format
msgid "%d changesets found\n"
msgstr "%d Änderungssätze gefunden\n"
@@ -18339,11 +18598,13 @@
msgstr "Zeilenangaben im Diff-Kontext müssen Zahlen sein, nicht %r"
#, python-format
-msgid ""
-"untracked file in working directory differs from file in requested revision: "
-"'%s'"
-msgstr ""
-"Unversionierte Datei in der Arbeitskopie unterscheidet sich von der "
+msgid "%s: untracked file differs\n"
+msgstr "%s: Unversionierte Datei verändert\n"
+
+msgid ""
+"untracked files in working directory differ from files in requested revision"
+msgstr ""
+"Unversionierte Dateien in der Arbeitskopie unterscheidet sich von der "
"angeforderten Revision: '%s'"
#, python-format
@@ -18415,15 +18676,11 @@
msgid "merging with a working directory ancestor has no effect"
msgstr "Zusammenführen mit einem Vorfahren der Arbeitskopie hat keinen Effekt"
-msgid "nothing to merge (use 'hg update' or check 'hg heads')"
-msgstr ""
-"Nichts zum Zusammenführen gefunden (nutze 'hg update' oder überprüfe 'hg "
-"heads')"
-
-msgid "outstanding uncommitted changes (use 'hg status' to list changes)"
-msgstr ""
-"Ausstehende nicht versionierte Änderungen (nutze 'hg status' zur Auflistung "
-"der Änderungen)"
+msgid "use 'hg update' or check 'hg heads'"
+msgstr "nutze 'hg update' oder überprüfe 'hg heads'"
+
+msgid "use 'hg status' to list changes"
+msgstr "nutze 'hg status' zur Auflistung der Änderungen"
#, python-format
msgid "outstanding uncommitted changes in subrepository '%s'"
@@ -18571,6 +18828,14 @@
msgstr ""
#, python-format
+msgid "ignoring inconsistense public root from remote: %s"
+msgstr ""
+
+#, python-format
+msgid "ignoring unexpected root from remote: %i %s"
+msgstr ""
+
+#, python-format
msgid "exited with status %d"
msgstr "Beendet mit Status %d"
@@ -18796,6 +19061,14 @@
" Nachkommen der Änderungssätze in der Liste sind."
msgid ""
+"``draft()``\n"
+" Changeset in draft phase."
+msgstr ""
+
+msgid "draft takes no arguments"
+msgstr "draft erwartet keine Argumente"
+
+msgid ""
"``filelog(pattern)``\n"
" Changesets connected to the specified filelog."
msgstr ""
@@ -19047,6 +19320,33 @@
" ein Eintrag nicht gefunden wird, die leere Menge."
msgid ""
+"``public()``\n"
+" Changeset in public phase."
+msgstr ""
+
+msgid "public takes no arguments"
+msgstr "public erwartet keine Argumente"
+
+msgid ""
+"``remote([id], [path])``\n"
+" Local revision that corresponds to the given identifier in a\n"
+" remote repository, if present. Here, the '.' identifier is a\n"
+" synonym for the current local branch."
+msgstr ""
+
+#. i18n: "remote" is a keyword
+msgid "outgoing takes one or two arguments"
+msgstr "'outgoing' erwartet ein oder zwei Argumente"
+
+#. i18n: "remote" is a keyword
+msgid "remote requires a string id"
+msgstr "remote erwartet eine Zeichenkette (ID)"
+
+#. i18n: "remote" is a keyword
+msgid "remote requires a repository path"
+msgstr "'remote' erwartet einen Projektarchivpfad"
+
+msgid ""
"``removes(pattern)``\n"
" Changesets which remove files matching pattern."
msgstr ""
@@ -19089,6 +19389,14 @@
" Änderungssätze, die keine Eltern in der Menge haben."
msgid ""
+"``secret()``\n"
+" Changeset in secret phase."
+msgstr ""
+
+msgid "secret takes no arguments"
+msgstr "secret erwartet keine Argumente"
+
+msgid ""
"``sort(set[, [-]key...])``\n"
" Sort set by keys. The default sort order is ascending, specify a key\n"
" as ``-key`` to sort in descending order."
@@ -19109,7 +19417,7 @@
msgstr ""
" - ``rev`` für die Revisionsnummer,\n"
" - ``branch`` für den Zweignamen,\n"
-" - ``desc`` für die Commit-Nachricht (description),\n"
+" - ``desc`` für die Versionsmeldung (description),\n"
" - ``user`` für den Benutzernamen (Alias ``author``),\n"
" - ``date`` für das Datum des Commits"
@@ -19163,7 +19471,7 @@
#, python-format
msgid "possible case-folding collision for %s"
-msgstr ""
+msgstr "Groß-/Kleinschreibungskonflikt bei %s"
#, python-format
msgid "path ends in directory separator: %s"
@@ -19197,7 +19505,7 @@
"kopiert).\n"
msgid ".hg/requires file is corrupt"
-msgstr ".hg/requires file ist korrumpiert"
+msgstr ".hg/requires file ist beschädigt"
#, python-format
msgid "unknown repository format: requires features '%s' (upgrade Mercurial)"
@@ -19216,7 +19524,7 @@
msgstr ""
msgid "searching"
-msgstr "suchen"
+msgstr ""
msgid "repository is unrelated"
msgstr "Projektarchiv steht in keinem Zusammenhang"
@@ -19253,13 +19561,13 @@
msgid "no suitable response from remote hg"
msgstr "Keine passende Antwort des entfernten hg"
-msgid "remote: "
-msgstr "Entfernt: "
-
#, python-format
msgid "push refused: %s"
msgstr "Hochladen abgewiesen: %s"
+msgid "ssl connection failed"
+msgstr "ssk-Verbindung fehlgeschlagen"
+
msgid "Python SSL support not found"
msgstr "SSL-Unterstützung für Python nicht gefunden"
@@ -19276,33 +19584,17 @@
msgid "IDN in certificate not supported"
msgstr ""
-#, fuzzy
msgid "no commonName or subjectAltName found in certificate"
-msgstr "Kein commonName oder subjectAltNamt gefunden im Zertifikat"
+msgstr "Kein commonName oder subjectAltName im Zertifikat gefunden"
#, python-format
msgid "could not find web.cacerts: %s"
msgstr "Konnte web.cacerts nicht finden: %s"
#, python-format
-msgid "%s certificate error: %s (use --insecure to connect insecurely)"
-msgstr ""
-"%s Zertifikatsfehler: %s (Benutzen Sie --insecure, um unsicher zu verbinden)"
-
-#, python-format
-msgid "invalid certificate for %s with fingerprint %s"
-msgstr ""
-
-#, python-format
-msgid ""
-"warning: %s certificate with fingerprint %s not verified (check "
-"hostfingerprints or web.cacerts config setting)\n"
-msgstr ""
-
-#, python-format
msgid "host fingerprint for %s can't be verified (Python too old)"
msgstr ""
-"Host fingerprint für %s kann nicht verifiziert werden (Python ist zu alt)"
+"Server Authentizität für %s kann nicht verifiziert werden (Python ist zu alt)"
#, python-format
msgid "warning: certificate for %s can't be verified (Python too old)\n"
@@ -19311,6 +19603,34 @@
"alt)\n"
#, python-format
+msgid "%s ssl connection error"
+msgstr ""
+
+#, python-format
+msgid "%s certificate error: no certificate received"
+msgstr "%s Zertifikatfehler: Kein Zertifikat empfangen"
+
+#, python-format
+msgid "invalid certificate for %s with fingerprint %s"
+msgstr ""
+
+#, python-format
+msgid "%s certificate error: %s"
+msgstr "%s Zertifikatfehler: %s"
+
+#, , python-format
+msgid "configure hostfingerprint %s or use --insecure to connect insecurely"
+msgstr ""
+"Erlauben Sie Serverkennung %s in der Konfiguration oder benutzen Sie "
+"--insecure, um unsicher zu verbinden"
+
+#, python-format
+msgid ""
+"warning: %s certificate with fingerprint %s not verified (check "
+"hostfingerprints or web.cacerts config setting)\n"
+msgstr ""
+
+#, python-format
msgid "'%s' does not appear to be an hg repository"
msgstr "'%s' scheint kein hg-Projektarchiv zu sein"
@@ -19451,13 +19771,13 @@
msgid "pushing branch %s of subrepo %s\n"
msgstr "Übertrage Zweig %s von Unterarchiv %s\n"
-#, fuzzy, python-format
+#, python-format
msgid ""
"no branch checked out in subrepo %s\n"
"cannot push revision %s"
msgstr ""
-"kein Branch in Subrepo %s ausgecheckt\n"
-"Revision %s kann nicht gepusht werden"
+"kein Zweig in Unterarchiv %s aktuell\n"
+"Revision %s kann nicht übertragen werden"
#, python-format
msgid "%s, line %s: %s\n"
@@ -19540,13 +19860,12 @@
msgid ":firstline: Any text. Returns the first line of text."
msgstr ":firstline: Beliebiger Text. Gibt die erste Zeile des Texts zurück."
-#, fuzzy
msgid ""
":hex: Any text. Convert a binary Mercurial node identifier into\n"
" its long hexadecimal representation."
msgstr ""
-":hex: Beliebiger Text. Konvertiert einen binären Mercurial node identifier \n"
-" in seine lange hexadezimale Repräsentation."
+":hex: Beliebiger Text. Konvertiert eine binären Mercurial Knoten-ID \n"
+" in eine lange hexadezimale Repräsentation."
msgid ""
":hgdate: Date. Returns the date as a pair of numbers: \"1157407993\n"
@@ -19613,7 +19932,6 @@
":short: Prüfsumme. Gibt die Kurzform der Prüfsumme zurück, d.h.\n"
" als 12 Zeichen lange hexadezimale Zeichenkette."
-#, fuzzy
msgid ""
":shortbisect: Any text. Treats `text` as a bisection status, and\n"
" returns a single-character representing the status (G: good, B: bad,\n"
@@ -19621,11 +19939,9 @@
" is not a valid bisection status."
msgstr ""
":shortbisect: Beliebiger text. Behandelt `text` als Teilungsstatus, und\n"
-" gibt ein einzelnes Zeichen zurück, dass den Status repräsentiert (G: "
-"gut, B: schlecht,\n"
-" S: übersprungen, U: ungetestet, I: ignoriert). Gibt ein einzelnes "
-"Leerzeichen zurück,\n"
-" wenn `text` kein gültiger Teilungsstatus ist."
+" gibt einen repräsentatives Buchstaben zurück (G: gut, B: schlecht,\n"
+" S: übersprungen, U: ungetestet, I: ignoriert). Wenn `text` kein\n"
+" gültiger Teilungsstatus ist, wird ein Leerzeichen zurückgegeben."
msgid ":shortdate: Date. Returns a date like \"2006-09-18\"."
msgstr ":shortdate: Datumsangabe. Gibt ein Datum wie \"2006-09-18\" zurück."
@@ -19762,9 +20078,11 @@
":node: Zeichenkette. Die Prüfsumme, die einen Änderungssatz identifiziert,\n"
" als 40 Zeichen lange hexadezimale Zeichenkette."
-#, fuzzy
-msgid ":rev: Integer. The changeset phase."
-msgstr ":rev: Ganze Zahl. Die Phase des Changesets."
+msgid ":rev: String. The changeset phase name."
+msgstr ""
+
+msgid ":rev: Integer. The changeset phase index."
+msgstr ""
msgid ":rev: Integer. The repository-local changeset revision number."
msgstr ""
--- a/mercurial/commands.py Mon Feb 13 17:22:35 2012 +0100
+++ b/mercurial/commands.py Thu Feb 16 16:40:29 2012 -0600
@@ -2154,7 +2154,11 @@
@command('debugrevspec', [], ('REVSPEC'))
def debugrevspec(ui, repo, expr):
- '''parse and apply a revision specification'''
+ """parse and apply a revision specification
+
+ Use --verbose to print the parsed tree before and after aliases
+ expansion.
+ """
if ui.verbose:
tree = revset.parse(expr)[0]
ui.note(tree, "\n")
@@ -4210,7 +4214,8 @@
public < draft < secret
- Return 0 on success, 1 if no phases were changed.
+ Return 0 on success, 1 if no phases were changed or some could not
+ be changed.
"""
# search for a unique phase argument
targetphase = None
@@ -4252,8 +4257,18 @@
changes = 0
newdata = repo._phaserev
changes = sum(o != newdata[i] for i, o in enumerate(olddata))
+ rejected = [n for n in nodes
+ if newdata[repo[n].rev()] < targetphase]
+ if rejected:
+ ui.warn(_('cannot move %i changesets to a more permissive '
+ 'phase, use --force\n') % len(rejected))
+ ret = 1
if changes:
- ui.note(_('phase change for %i changesets\n') % changes)
+ msg = _('phase changed for %i changesets\n') % changes
+ if ret:
+ ui.status(msg)
+ else:
+ ui.note(msg)
else:
ui.warn(_('no phases changed\n'))
ret = 1
@@ -5710,18 +5725,21 @@
if check and clean:
raise util.Abort(_("cannot specify both -c/--check and -C/--clean"))
+ if date:
+ if rev is not None:
+ raise util.Abort(_("you can't specify a revision and a date"))
+ rev = cmdutil.finddate(ui, repo, date)
+
if check:
# we could use dirty() but we can ignore merge and branch trivia
c = repo[None]
if c.modified() or c.added() or c.removed():
raise util.Abort(_("uncommitted local changes"))
-
- if date:
- if rev is not None:
- raise util.Abort(_("you can't specify a revision and a date"))
- rev = cmdutil.finddate(ui, repo, date)
-
- if clean or check:
+ if not rev:
+ rev = repo[repo[None].branch()].rev()
+ mergemod._checkunknown(repo, repo[None], repo[rev])
+
+ if clean:
ret = hg.clean(repo, rev)
else:
ret = hg.update(repo, rev)
--- a/mercurial/context.py Mon Feb 13 17:22:35 2012 +0100
+++ b/mercurial/context.py Thu Feb 16 16:40:29 2012 -0600
@@ -698,9 +698,6 @@
def _manifest(self):
"""generate a manifest corresponding to the working directory"""
- if self._unknown is None:
- self.status(unknown=True)
-
man = self._parents[0].manifest().copy()
if len(self._parents) > 1:
man2 = self.p2().manifest()
@@ -714,8 +711,7 @@
copied = self._repo.dirstate.copies()
ff = self._flagfunc
modified, added, removed, deleted = self._status
- unknown = self._unknown
- for i, l in (("a", added), ("m", modified), ("u", unknown)):
+ for i, l in (("a", added), ("m", modified)):
for f in l:
orig = copied.get(f, f)
man[f] = getman(orig).get(orig, nullid) + i
--- a/mercurial/filemerge.py Mon Feb 13 17:22:35 2012 +0100
+++ b/mercurial/filemerge.py Thu Feb 16 16:40:29 2012 -0600
@@ -19,11 +19,21 @@
def _toollist(ui, tool, part, default=[]):
return ui.configlist("merge-tools", tool + "." + part, default)
-_internal = ['internal:' + s
- for s in 'fail local other merge prompt dump'.split()]
+internals = {}
+
+def internaltool(name, trymerge, onfailure=None):
+ '''return a decorator for populating internal merge tool table'''
+ def decorator(func):
+ fullname = 'internal:' + name
+ func.__doc__ = "``%s``\n" % fullname + func.__doc__.strip()
+ internals[fullname] = func
+ func.trymerge = trymerge
+ func.onfailure = onfailure
+ return func
+ return decorator
def _findtool(ui, tool):
- if tool in _internal:
+ if tool in internals:
return tool
for kn in ("regkey", "regkeyalt"):
k = _toolstr(ui, tool, kn)
@@ -123,6 +133,131 @@
if newdata != data:
util.writefile(file, newdata)
+@internaltool('prompt', False)
+def _iprompt(repo, mynode, orig, fcd, fco, fca, toolconf):
+ """Asks the user which of the local or the other version to keep as
+ the merged version."""
+ ui = repo.ui
+ fd = fcd.path()
+
+ if ui.promptchoice(_(" no tool found to merge %s\n"
+ "keep (l)ocal or take (o)ther?") % fd,
+ (_("&Local"), _("&Other")), 0):
+ return _iother(repo, mynode, orig, fcd, fco, fca, toolconf)
+ else:
+ return _ilocal(repo, mynode, orig, fcd, fco, fca, toolconf)
+
+@internaltool('local', False)
+def _ilocal(repo, mynode, orig, fcd, fco, fca, toolconf):
+ """Uses the local version of files as the merged version."""
+ return 0
+
+@internaltool('other', False)
+def _iother(repo, mynode, orig, fcd, fco, fca, toolconf):
+ """Uses the other version of files as the merged version."""
+ repo.wwrite(fcd.path(), fco.data(), fco.flags())
+ return 0
+
+@internaltool('fail', False)
+def _ifail(repo, mynode, orig, fcd, fco, fca, toolconf):
+ """
+ Rather than attempting to merge files that were modified on both
+ branches, it marks them as unresolved. The resolve command must be
+ used to resolve these conflicts."""
+ return 1
+
+def _premerge(repo, toolconf, files):
+ tool, toolpath, binary, symlink = toolconf
+ a, b, c, back = files
+
+ ui = repo.ui
+
+ # do we attempt to simplemerge first?
+ try:
+ premerge = _toolbool(ui, tool, "premerge", not (binary or symlink))
+ except error.ConfigError:
+ premerge = _toolstr(ui, tool, "premerge").lower()
+ valid = 'keep'.split()
+ if premerge not in valid:
+ _valid = ', '.join(["'" + v + "'" for v in valid])
+ raise error.ConfigError(_("%s.premerge not valid "
+ "('%s' is neither boolean nor %s)") %
+ (tool, premerge, _valid))
+
+ if premerge:
+ r = simplemerge.simplemerge(ui, a, b, c, quiet=True)
+ if not r:
+ ui.debug(" premerge successful\n")
+ return 0
+ if premerge != 'keep':
+ util.copyfile(back, a) # restore from backup and try again
+ return 1 # continue merging
+
+@internaltool('merge', True,
+ _("merging %s incomplete! "
+ "(edit conflicts, then use 'hg resolve --mark')\n"))
+def _imerge(repo, mynode, orig, fcd, fco, fca, toolconf, files):
+ """
+ Uses the internal non-interactive simple merge algorithm for merging
+ files. It will fail if there are any conflicts and leave markers in
+ the partially merged file."""
+ r = _premerge(repo, toolconf, files)
+ if r:
+ a, b, c, back = files
+
+ ui = repo.ui
+
+ r = simplemerge.simplemerge(ui, a, b, c, label=['local', 'other'])
+ return True, r
+ return False, 0
+
+@internaltool('dump', True)
+def _idump(repo, mynode, orig, fcd, fco, fca, toolconf, files):
+ """
+ Creates three versions of the files to merge, containing the
+ contents of local, other and base. These files can then be used to
+ perform a merge manually. If the file to be merged is named
+ ``a.txt``, these files will accordingly be named ``a.txt.local``,
+ ``a.txt.other`` and ``a.txt.base`` and they will be placed in the
+ same directory as ``a.txt``."""
+ r = _premerge(repo, toolconf, files)
+ if r:
+ a, b, c, back = files
+
+ fd = fcd.path()
+
+ util.copyfile(a, a + ".local")
+ repo.wwrite(fd + ".other", fco.data(), fco.flags())
+ repo.wwrite(fd + ".base", fca.data(), fca.flags())
+ return False, r
+
+def _xmerge(repo, mynode, orig, fcd, fco, fca, toolconf, files):
+ r = _premerge(repo, toolconf, files)
+ if r:
+ tool, toolpath, binary, symlink = toolconf
+ a, b, c, back = files
+ out = ""
+ env = dict(HG_FILE=fcd.path(),
+ HG_MY_NODE=short(mynode),
+ HG_OTHER_NODE=str(fco.changectx()),
+ HG_BASE_NODE=str(fca.changectx()),
+ HG_MY_ISLINK='l' in fcd.flags(),
+ HG_OTHER_ISLINK='l' in fco.flags(),
+ HG_BASE_ISLINK='l' in fca.flags())
+
+ ui = repo.ui
+
+ args = _toolstr(ui, tool, "args", '$local $base $other')
+ if "$output" in args:
+ out, a = a, back # read input from backup, write to original
+ replace = dict(local=a, base=b, other=c, output=out)
+ args = util.interpolate(r'\$', replace, args,
+ lambda s: '"%s"' % util.localpath(s))
+ r = util.system(toolpath + ' ' + args, cwd=repo.root, environ=env,
+ out=ui.fout)
+ return True, r
+ return False, 0
+
def filemerge(repo, mynode, orig, fcd, fco, fca):
"""perform a 3-way merge in the working directory
@@ -153,25 +288,23 @@
ui.debug("picked tool '%s' for %s (binary %s symlink %s)\n" %
(tool, fd, binary, symlink))
- if not tool or tool == 'internal:prompt':
- tool = "internal:local"
- if ui.promptchoice(_(" no tool found to merge %s\n"
- "keep (l)ocal or take (o)ther?") % fd,
- (_("&Local"), _("&Other")), 0):
- tool = "internal:other"
- if tool == "internal:local":
- return 0
- if tool == "internal:other":
- repo.wwrite(fd, fco.data(), fco.flags())
- return 0
- if tool == "internal:fail":
- return 1
+ if tool in internals:
+ func = internals[tool]
+ trymerge = func.trymerge
+ onfailure = func.onfailure
+ else:
+ func = _xmerge
+ trymerge = True
+ onfailure = _("merging %s failed!\n")
- # do the actual merge
+ toolconf = tool, toolpath, binary, symlink
+
+ if not trymerge:
+ return func(repo, mynode, orig, fcd, fco, fca, toolconf)
+
a = repo.wjoin(fd)
b = temp("base", fca)
c = temp("other", fco)
- out = ""
back = a + ".orig"
util.copyfile(a, back)
@@ -182,54 +315,18 @@
ui.debug("my %s other %s ancestor %s\n" % (fcd, fco, fca))
- # do we attempt to simplemerge first?
- try:
- premerge = _toolbool(ui, tool, "premerge", not (binary or symlink))
- except error.ConfigError:
- premerge = _toolstr(ui, tool, "premerge").lower()
- valid = 'keep'.split()
- if premerge not in valid:
- _valid = ', '.join(["'" + v + "'" for v in valid])
- raise error.ConfigError(_("%s.premerge not valid "
- "('%s' is neither boolean nor %s)") %
- (tool, premerge, _valid))
-
- if premerge:
- r = simplemerge.simplemerge(ui, a, b, c, quiet=True)
- if not r:
- ui.debug(" premerge successful\n")
+ needcheck, r = func(repo, mynode, orig, fcd, fco, fca, toolconf,
+ (a, b, c, back))
+ if not needcheck:
+ if r:
+ if onfailure:
+ ui.warn(onfailure % fd)
+ else:
os.unlink(back)
- os.unlink(b)
- os.unlink(c)
- return 0
- if premerge != 'keep':
- util.copyfile(back, a) # restore from backup and try again
- env = dict(HG_FILE=fd,
- HG_MY_NODE=short(mynode),
- HG_OTHER_NODE=str(fco.changectx()),
- HG_BASE_NODE=str(fca.changectx()),
- HG_MY_ISLINK='l' in fcd.flags(),
- HG_OTHER_ISLINK='l' in fco.flags(),
- HG_BASE_ISLINK='l' in fca.flags())
-
- if tool == "internal:merge":
- r = simplemerge.simplemerge(ui, a, b, c, label=['local', 'other'])
- elif tool == 'internal:dump':
- a = repo.wjoin(fd)
- util.copyfile(a, a + ".local")
- repo.wwrite(fd + ".other", fco.data(), fco.flags())
- repo.wwrite(fd + ".base", fca.data(), fca.flags())
- return 1 # unresolved
- else:
- args = _toolstr(ui, tool, "args", '$local $base $other')
- if "$output" in args:
- out, a = a, back # read input from backup, write to original
- replace = dict(local=a, base=b, other=c, output=out)
- args = util.interpolate(r'\$', replace, args,
- lambda s: '"%s"' % util.localpath(s))
- r = util.system(toolpath + ' ' + args, cwd=repo.root, environ=env,
- out=ui.fout)
+ os.unlink(b)
+ os.unlink(c)
+ return r
if not r and (_toolbool(ui, tool, "checkconflicts") or
'conflicts' in _toollist(ui, tool, "check")):
@@ -246,24 +343,24 @@
if not r and not checked and (_toolbool(ui, tool, "checkchanged") or
'changed' in _toollist(ui, tool, "check")):
- if filecmp.cmp(repo.wjoin(fd), back):
+ if filecmp.cmp(a, back):
if ui.promptchoice(_(" output file %s appears unchanged\n"
"was merge successful (yn)?") % fd,
(_("&Yes"), _("&No")), 1):
r = 1
if _toolbool(ui, tool, "fixeol"):
- _matcheol(repo.wjoin(fd), back)
+ _matcheol(a, back)
if r:
- if tool == "internal:merge":
- ui.warn(_("merging %s incomplete! "
- "(edit conflicts, then use 'hg resolve --mark')\n") % fd)
- else:
- ui.warn(_("merging %s failed!\n") % fd)
+ if onfailure:
+ ui.warn(onfailure % fd)
else:
os.unlink(back)
os.unlink(b)
os.unlink(c)
return r
+
+# tell hggettext to extract docstrings from these functions:
+i18nfunctions = internals.values()
--- a/mercurial/help.py Mon Feb 13 17:22:35 2012 +0100
+++ b/mercurial/help.py Thu Feb 16 16:40:29 2012 -0600
@@ -7,7 +7,7 @@
from i18n import gettext, _
import sys, os
-import extensions, revset, fileset, templatekw, templatefilters
+import extensions, revset, fileset, templatekw, templatefilters, filemerge
import util
def listexts(header, exts, indent=1):
@@ -105,6 +105,7 @@
addtopichook(topic, add)
addtopicsymbols('filesets', '.. predicatesmarker', fileset.symbols)
+addtopicsymbols('merge-tools', '.. internaltoolsmarker', filemerge.internals)
addtopicsymbols('revsets', '.. predicatesmarker', revset.symbols)
addtopicsymbols('templates', '.. keywordsmarker', templatekw.keywords)
addtopicsymbols('templates', '.. filtersmarker', templatefilters.filters)
--- a/mercurial/help/merge-tools.txt Mon Feb 13 17:22:35 2012 +0100
+++ b/mercurial/help/merge-tools.txt Thu Feb 16 16:40:29 2012 -0600
@@ -34,33 +34,7 @@
There are some internal merge tools which can be used. The internal
merge tools are:
-``internal:merge``
- Uses the internal non-interactive simple merge algorithm for merging
- files. It will fail if there are any conflicts and leave markers in
- the partially merged file.
-
-``internal:fail``
- Rather than attempting to merge files that were modified on both
- branches, it marks them as unresolved. The resolve command must be
- used to resolve these conflicts.
-
-``internal:local``
- Uses the local version of files as the merged version.
-
-``internal:other``
- Uses the other version of files as the merged version.
-
-``internal:prompt``
- Asks the user which of the local or the other version to keep as
- the merged version.
-
-``internal:dump``
- Creates three versions of the files to merge, containing the
- contents of local, other and base. These files can then be used to
- perform a merge manually. If the file to be merged is named
- ``a.txt``, these files will accordingly be named ``a.txt.local``,
- ``a.txt.other`` and ``a.txt.base`` and they will be placed in the
- same directory as ``a.txt``.
+.. internaltoolsmarker
Internal tools are always available and do not require a GUI but will by default
not handle symlinks or binary files.
--- a/mercurial/localrepo.py Mon Feb 13 17:22:35 2012 +0100
+++ b/mercurial/localrepo.py Thu Feb 16 16:40:29 2012 -0600
@@ -1097,37 +1097,58 @@
# check subrepos
subs = []
- removedsubs = set()
+ commitsubs = set()
+ newstate = wctx.substate.copy()
+ # only manage subrepos and .hgsubstate if .hgsub is present
if '.hgsub' in wctx:
- # only manage subrepos and .hgsubstate if .hgsub is present
+ # we'll decide whether to track this ourselves, thanks
+ if '.hgsubstate' in changes[0]:
+ changes[0].remove('.hgsubstate')
+ if '.hgsubstate' in changes[2]:
+ changes[2].remove('.hgsubstate')
+
+ # compare current state to last committed state
+ # build new substate based on last committed state
+ oldstate = wctx.p1().substate
+ for s in sorted(newstate.keys()):
+ if not match(s):
+ # ignore working copy, use old state if present
+ if s in oldstate:
+ newstate[s] = oldstate[s]
+ continue
+ if not force:
+ raise util.Abort(
+ _("commit with new subrepo %s excluded") % s)
+ if wctx.sub(s).dirty(True):
+ if not self.ui.configbool('ui', 'commitsubrepos'):
+ raise util.Abort(
+ _("uncommitted changes in subrepo %s") % s,
+ hint=_("use --subrepos for recursive commit"))
+ subs.append(s)
+ commitsubs.add(s)
+ else:
+ bs = wctx.sub(s).basestate()
+ newstate[s] = (newstate[s][0], bs, newstate[s][2])
+ if oldstate.get(s, (None, None, None))[1] != bs:
+ subs.append(s)
+
+ # check for removed subrepos
for p in wctx.parents():
- removedsubs.update(s for s in p.substate if match(s))
- for s in wctx.substate:
- removedsubs.discard(s)
- if match(s) and wctx.sub(s).dirty():
- subs.append(s)
- if (subs or removedsubs):
+ r = [s for s in p.substate if s not in newstate]
+ subs += [s for s in r if match(s)]
+ if subs:
if (not match('.hgsub') and
'.hgsub' in (wctx.modified() + wctx.added())):
raise util.Abort(
_("can't commit subrepos without .hgsub"))
- if '.hgsubstate' not in changes[0]:
- changes[0].insert(0, '.hgsubstate')
- if '.hgsubstate' in changes[2]:
- changes[2].remove('.hgsubstate')
+ changes[0].insert(0, '.hgsubstate')
+
elif '.hgsub' in changes[2]:
# clean up .hgsubstate when .hgsub is removed
if ('.hgsubstate' in wctx and
'.hgsubstate' not in changes[0] + changes[1] + changes[2]):
changes[2].insert(0, '.hgsubstate')
- if subs and not self.ui.configbool('ui', 'commitsubrepos', False):
- changedsubs = [s for s in subs if wctx.sub(s).dirty(True)]
- if changedsubs:
- raise util.Abort(_("uncommitted changes in subrepo %s")
- % changedsubs[0],
- hint=_("use --subrepos for recursive commit"))
-
# make sure all explicit patterns are matched
if not force and match.files():
matched = set(changes[0] + changes[1] + changes[2])
@@ -1163,16 +1184,15 @@
cctx._text = editor(self, cctx, subs)
edited = (text != cctx._text)
- # commit subs
- if subs or removedsubs:
- state = wctx.substate.copy()
- for s in sorted(subs):
+ # commit subs and write new state
+ if subs:
+ for s in sorted(commitsubs):
sub = wctx.sub(s)
self.ui.status(_('committing subrepository %s\n') %
subrepo.subrelpath(sub))
sr = sub.commit(cctx._text, user, date)
- state[s] = (state[s][0], sr)
- subrepo.writestate(self, state)
+ newstate[s] = (newstate[s][0], sr)
+ subrepo.writestate(self, newstate)
# Save commit message in case this transaction gets rolled back
# (e.g. by a pretxncommit hook). Leave the content alone on
--- a/mercurial/merge.py Mon Feb 13 17:22:35 2012 +0100
+++ b/mercurial/merge.py Thu Feb 16 16:40:29 2012 -0600
@@ -81,22 +81,19 @@
self.mark(dfile, 'r')
return r
-def _checkunknown(wctx, mctx, folding):
+def _checkunknownfile(repo, wctx, mctx, f):
+ return (not repo.dirstate._ignore(f)
+ and os.path.exists(repo.wjoin(f))
+ and mctx[f].cmp(wctx[f]))
+
+def _checkunknown(repo, wctx, mctx):
"check for collisions between unknown files and files in mctx"
- if folding:
- foldf = util.normcase
- else:
- foldf = lambda fn: fn
- folded = {}
- for fn in mctx:
- folded[foldf(fn)] = fn
error = False
- for fn in wctx.unknown():
- f = foldf(fn)
- if f in folded and mctx[folded[f]].cmp(wctx[f]):
+ for f in mctx:
+ if f not in wctx and _checkunknownfile(repo, wctx, mctx, f):
error = True
- wctx._repo.ui.warn(_("%s: untracked file differs\n") % fn)
+ wctx._repo.ui.warn(_("%s: untracked file differs\n") % f)
if error:
raise util.Abort(_("untracked files in working directory differ "
"from files in requested revision"))
@@ -248,7 +245,7 @@
act("prompt keep", "a", f)
elif n[20:] == "a": # added, no remote
act("remote deleted", "f", f)
- elif n[20:] != "u":
+ else:
act("other deleted", "r", f)
for f, n in m2.iteritems():
@@ -268,7 +265,13 @@
act("remote moved to " + f, "m",
f2, f, f, fmerge(f2, f, f2), True)
elif f not in ma:
- act("remote created", "g", f, m2.flags(f))
+ if (not overwrite
+ and _checkunknownfile(repo, p1, p2, f)):
+ rflags = fmerge(f, f, f)
+ act("remote differs from untracked local",
+ "m", f, f, f, rflags, False)
+ else:
+ act("remote created", "g", f, m2.flags(f))
elif n != ma[f]:
if repo.ui.promptchoice(
_("remote changed %s which local deleted\n"
@@ -542,6 +545,8 @@
if not force and (wc.files() or wc.deleted()):
raise util.Abort(_("outstanding uncommitted changes"),
hint=_("use 'hg status' to list changes"))
+ if not force:
+ _checkunknown(repo, wc, p2)
for s in wc.substate:
if wc.sub(s).dirty():
raise util.Abort(_("outstanding uncommitted changes in "
@@ -558,14 +563,11 @@
" --check to force update)"))
else:
# Allow jumping branches if clean and specific rev given
- overwrite = True
+ pa = p1
### calculate phase
action = []
- wc.status(unknown=True) # prime cache
folding = not util.checkcase(repo.path)
- if not force:
- _checkunknown(wc, p2, folding)
if folding:
_checkcollision(p2, branchmerge and p1)
action += _forgetremoved(wc, p2, branchmerge)
--- a/mercurial/revset.py Mon Feb 13 17:22:35 2012 +0100
+++ b/mercurial/revset.py Thu Feb 16 16:40:29 2012 -0600
@@ -1071,46 +1071,85 @@
h = heads(default)
b($1) = ancestors($1) - ancestors(default)
'''
- if isinstance(name, tuple): # parameter substitution
- self.tree = name
- self.replacement = value
- else: # alias definition
- m = self.funcre.search(name)
- if m:
- self.tree = ('func', ('symbol', m.group(1)))
- self.args = [x.strip() for x in m.group(2).split(',')]
- for arg in self.args:
- value = value.replace(arg, repr(arg))
- else:
- self.tree = ('symbol', name)
+ m = self.funcre.search(name)
+ if m:
+ self.name = m.group(1)
+ self.tree = ('func', ('symbol', m.group(1)))
+ self.args = [x.strip() for x in m.group(2).split(',')]
+ for arg in self.args:
+ value = value.replace(arg, repr(arg))
+ else:
+ self.name = name
+ self.tree = ('symbol', name)
+
+ self.replacement, pos = parse(value)
+ if pos != len(value):
+ raise error.ParseError(_('invalid token'), pos)
- self.replacement, pos = parse(value)
- if pos != len(value):
- raise error.ParseError(_('invalid token'), pos)
+def _getalias(aliases, tree):
+ """If tree looks like an unexpanded alias, return it. Return None
+ otherwise.
+ """
+ if isinstance(tree, tuple) and tree:
+ if tree[0] == 'symbol' and len(tree) == 2:
+ name = tree[1]
+ alias = aliases.get(name)
+ if alias and alias.args is None and alias.tree == tree:
+ return alias
+ if tree[0] == 'func' and len(tree) > 1:
+ if tree[1][0] == 'symbol' and len(tree[1]) == 2:
+ name = tree[1][1]
+ alias = aliases.get(name)
+ if alias and alias.args is not None and alias.tree == tree[:2]:
+ return alias
+ return None
- def process(self, tree):
- if isinstance(tree, tuple):
- if self.args is None:
- if tree == self.tree:
- return self.replacement
- elif tree[:2] == self.tree:
- l = getlist(tree[2])
- if len(l) != len(self.args):
- raise error.ParseError(
- _('invalid number of arguments: %s') % len(l))
- result = self.replacement
- for a, v in zip(self.args, l):
- valalias = revsetalias(('string', a), v)
- result = valalias.process(result)
- return result
- return tuple(map(self.process, tree))
+def _expandargs(tree, args):
+ """Replace all occurences of ('string', name) with the
+ substitution value of the same name in args, recursively.
+ """
+ if not isinstance(tree, tuple):
+ return tree
+ if len(tree) == 2 and tree[0] == 'string':
+ return args.get(tree[1], tree)
+ return tuple(_expandargs(t, args) for t in tree)
+
+def _expandaliases(aliases, tree, expanding):
+ """Expand aliases in tree, recursively.
+
+ 'aliases' is a dictionary mapping user defined aliases to
+ revsetalias objects.
+ """
+ if not isinstance(tree, tuple):
+ # Do not expand raw strings
return tree
+ alias = _getalias(aliases, tree)
+ if alias is not None:
+ if alias in expanding:
+ raise error.ParseError(_('infinite expansion of revset alias "%s" '
+ 'detected') % alias.name)
+ expanding.append(alias)
+ result = alias.replacement
+ if alias.args is not None:
+ l = getlist(tree[2])
+ if len(l) != len(alias.args):
+ raise error.ParseError(
+ _('invalid number of arguments: %s') % len(l))
+ result = _expandargs(result, dict(zip(alias.args, l)))
+ # Recurse in place, the base expression may have been rewritten
+ result = _expandaliases(aliases, result, expanding)
+ expanding.pop()
+ else:
+ result = tuple(_expandaliases(aliases, t, expanding)
+ for t in tree)
+ return result
def findaliases(ui, tree):
+ aliases = {}
for k, v in ui.configitems('revsetalias'):
alias = revsetalias(k, v)
- tree = alias.process(tree)
- return tree
+ aliases[alias.name] = alias
+ return _expandaliases(aliases, tree, [])
parse = parser.parser(tokenize, elements).parse
--- a/mercurial/subrepo.py Mon Feb 13 17:22:35 2012 +0100
+++ b/mercurial/subrepo.py Thu Feb 16 16:40:29 2012 -0600
@@ -275,6 +275,11 @@
"""
raise NotImplementedError
+ def basestate(self):
+ """current working directory base state, disregarding .hgsubstate
+ state and working directory modifications"""
+ raise NotImplementedError
+
def checknested(self, path):
"""check if path is a subrepository within this repository"""
return False
@@ -446,6 +451,9 @@
return True
return w.dirty() # working directory changed
+ def basestate(self):
+ return self._repo['.'].hex()
+
def checknested(self, path):
return self._repo._checknested(self._repo.wjoin(path))
@@ -666,6 +674,9 @@
return False
return True
+ def basestate(self):
+ return self._wcrev()
+
def commit(self, text, user, date):
# user and date are out of our hands since svn is centralized
changed, extchanged = self._wcchanged()
@@ -907,6 +918,9 @@
out, code = self._gitdir(['diff-index', '--quiet', 'HEAD'])
return code == 1
+ def basestate(self):
+ return self._gitstate()
+
def get(self, state, overwrite=False):
source, revision, kind = state
if not revision:
--- a/mercurial/windows.py Mon Feb 13 17:22:35 2012 +0100
+++ b/mercurial/windows.py Thu Feb 16 16:40:29 2012 -0600
@@ -123,7 +123,7 @@
msvcrt.setmode(fno(), os.O_BINARY)
def pconvert(path):
- return '/'.join(path.split(os.sep))
+ return path.replace(os.sep, '/')
def localpath(path):
return path.replace('/', '\\')
--- a/tests/bzr-definitions Mon Feb 13 17:22:35 2012 +0100
+++ b/tests/bzr-definitions Thu Feb 16 16:40:29 2012 -0600
@@ -9,7 +9,7 @@
glog()
{
- hg glog --template '{rev} "{desc|firstline}" files: {files}\n' "$@"
+ hg glog --template '{rev}@{branch} "{desc|firstline}" files: {files}\n' "$@"
}
manifest()
--- a/tests/test-check-code-hg.t Mon Feb 13 17:22:35 2012 +0100
+++ b/tests/test-check-code-hg.t Thu Feb 16 16:40:29 2012 -0600
@@ -474,9 +474,6 @@
> except:
warning: naked except clause
mercurial/localrepo.py:0:
- > hint=_("use --subrepos for recursive commit"))
- warning: line over 80 characters
- mercurial/localrepo.py:0:
> # we return an integer indicating remote head count change
warning: line over 80 characters
mercurial/localrepo.py:0:
--- a/tests/test-convert-bzr-ghosts.t Mon Feb 13 17:22:35 2012 +0100
+++ b/tests/test-convert-bzr-ghosts.t Thu Feb 16 16:40:29 2012 -0600
@@ -30,7 +30,7 @@
1 Initial layout setup
0 Commit with ghost revision
$ glog -R source-hg
- o 1 "Commit with ghost revision" files: somefile
+ o 1@source "Commit with ghost revision" files: somefile
|
- o 0 "Initial layout setup" files: somefile
+ o 0@source "Initial layout setup" files: somefile
--- a/tests/test-convert-bzr-merges.t Mon Feb 13 17:22:35 2012 +0100
+++ b/tests/test-convert-bzr-merges.t Thu Feb 16 16:40:29 2012 -0600
@@ -48,17 +48,17 @@
1 Added brach2 file
0 Merged branches
$ glog -R source-hg
- o 5 "(octopus merge fixup)" files:
+ o 5@source "(octopus merge fixup)" files:
|\
- | o 4 "Merged branches" files: file-branch2
+ | o 4@source "Merged branches" files: file-branch2
| |\
- o---+ 3 "Added brach2 file" files: file-branch2
+ o---+ 3@source-branch2 "Added brach2 file" files: file-branch2
/ /
- | o 2 "Added parent file" files: file-parent
+ | o 2@source "Added parent file" files: file-parent
| |
- o | 1 "Added branch1 file" files: file file-branch1
+ o | 1@source-branch1 "Added branch1 file" files: file file-branch1
|/
- o 0 "Initial add" files: file
+ o 0@source "Initial add" files: file
$ manifest source-hg tip
% manifest of tip
--- a/tests/test-convert-bzr.t Mon Feb 13 17:22:35 2012 +0100
+++ b/tests/test-convert-bzr.t Thu Feb 16 16:40:29 2012 -0600
@@ -7,6 +7,17 @@
$ mkdir test-createandrename
$ cd test-createandrename
$ bzr init -q source
+
+test empty repo conversion (issue3233)
+
+ $ hg convert source source-hg
+ initializing destination source-hg repository
+ scanning source...
+ sorting...
+ converting...
+
+back to the rename stuff
+
$ cd source
$ echo a > a
$ echo c > c
@@ -25,16 +36,15 @@
$ bzr commit -q -m 'rename a into b, create a, rename c into d'
$ cd ..
$ hg convert source source-hg
- initializing destination source-hg repository
scanning source...
sorting...
converting...
1 Initial add: a, c, e
0 rename a into b, create a, rename c into d
$ glog -R source-hg
- o 1 "rename a into b, create a, rename c into d" files: a b c d e f
+ o 1@source "rename a into b, create a, rename c into d" files: a b c d e f
|
- o 0 "Initial add: a, c, e" files: a c e
+ o 0@source "Initial add: a, c, e" files: a c e
manifest
@@ -54,7 +64,7 @@
converting...
0 Initial add: a, c, e
$ glog -R source-1-hg
- o 0 "Initial add: a, c, e" files: a c e
+ o 0@source "Initial add: a, c, e" files: a c e
test with filemap
@@ -77,22 +87,12 @@
convert from lightweight checkout
$ bzr checkout --lightweight source source-light
- $ hg convert source-light source-light-hg
+ $ hg convert -s bzr source-light source-light-hg
initializing destination source-light-hg repository
warning: lightweight checkouts may cause conversion failures, try with a regular branch instead.
- scanning source...
- sorting...
- converting...
- 1 Initial add: a, c, e
- 0 rename a into b, create a, rename c into d
-
-lightweight manifest
-
- $ hg manifest -R source-light-hg -r tip
- a
- b
- d
- f
+ $TESTTMP/test-createandrename/source-light does not look like a Bazaar repository
+ abort: source-light: missing or unsupported repository
+ [255]
extract timestamps that look just like hg's {date|isodate}:
yyyy-mm-dd HH:MM zzzz (no seconds!)
@@ -147,13 +147,13 @@
1 Editing b
0 Merged improve branch
$ glog -R source-hg
- o 3 "Merged improve branch" files:
+ o 3@source "Merged improve branch" files:
|\
- | o 2 "Editing b" files: b
+ | o 2@source-improve "Editing b" files: b
| |
- o | 1 "Editing a" files: a
+ o | 1@source "Editing a" files: a
|/
- o 0 "Initial add" files: a b
+ o 0@source "Initial add" files: a b
$ cd ..
@@ -208,3 +208,77 @@
$ hg cat syma; echo
a
+Multiple branches
+
+ $ bzr init-repo -q --no-trees repo
+ $ bzr init -q repo/trunk
+ $ bzr co repo/trunk repo-trunk
+ $ cd repo-trunk
+ $ echo a > a
+ $ bzr add a
+ adding a
+ $ bzr ci -qm adda --commit-time '2012-01-01 00:00:01 +0000'
+ $ bzr tag trunk-tag
+ Created tag trunk-tag.
+ $ bzr switch -b branch
+ Tree is up to date at revision 1.
+ Switched to branch: *repo/branch/ (glob)
+ $ echo b > b
+ $ bzr add b
+ adding b
+ $ bzr ci -qm addb --commit-time '2012-01-01 00:00:02 +0000'
+ $ bzr tag branch-tag
+ Created tag branch-tag.
+ $ bzr switch --force ../repo/trunk
+ Updated to revision 1.
+ Switched to branch: */repo/trunk/ (glob)
+ $ echo a >> a
+ $ bzr ci -qm changea --commit-time '2012-01-01 00:00:03 +0000'
+ $ cd ..
+ $ hg convert --datesort repo repo-bzr
+ initializing destination repo-bzr repository
+ scanning source...
+ sorting...
+ converting...
+ 2 adda
+ 1 addb
+ 0 changea
+ updating tags
+ $ (cd repo-bzr; glog)
+ o 3@default "update tags" files: .hgtags
+ |
+ o 2@default "changea" files: a
+ |
+ | o 1@branch "addb" files: b
+ |/
+ o 0@default "adda" files: a
+
+
+Test tags (converted identifiers are not stable because bzr ones are
+not and get incorporated in extra fields).
+
+ $ hg -R repo-bzr tags
+ tip 3:* (glob)
+ branch-tag 1:* (glob)
+ trunk-tag 0:* (glob)
+
+Nested repositories (issue3254)
+
+ $ bzr init-repo -q --no-trees repo/inner
+ $ bzr init -q repo/inner/trunk
+ $ bzr co repo/inner/trunk inner-trunk
+ $ cd inner-trunk
+ $ echo b > b
+ $ bzr add b
+ adding b
+ $ bzr ci -qm addb
+ $ cd ..
+ $ hg convert --datesort repo noinner-bzr
+ initializing destination noinner-bzr repository
+ scanning source...
+ sorting...
+ converting...
+ 2 adda
+ 1 addb
+ 0 changea
+ updating tags
--- a/tests/test-graft.t Mon Feb 13 17:22:35 2012 +0100
+++ b/tests/test-graft.t Thu Feb 16 16:40:29 2012 -0600
@@ -114,7 +114,6 @@
grafting revision 1
searching for copies back to rev 1
unmatched files in local:
- a.orig
b
all copies found (* = to merge, ! = divergent):
b -> a *
@@ -130,8 +129,6 @@
b: copy a:b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3
grafting revision 5
searching for copies back to rev 1
- unmatched files in local:
- a.orig
resolving manifests
overwrite: False, partial: False
ancestor: 4c60f11aa304, local: 6f5ea6ac8b70+, remote: 97f8bfe72746
@@ -141,8 +138,6 @@
e
grafting revision 4
searching for copies back to rev 1
- unmatched files in local:
- a.orig
resolving manifests
overwrite: False, partial: False
ancestor: 4c60f11aa304, local: 77eb504366ab+, remote: 9c233e8e184d
--- a/tests/test-issue612.t Mon Feb 13 17:22:35 2012 +0100
+++ b/tests/test-issue612.t Thu Feb 16 16:40:29 2012 -0600
@@ -24,11 +24,11 @@
$ hg merge
merging src/a.c and source/a.c to source/a.c
- 1 files updated, 1 files merged, 0 files removed, 0 files unresolved
+ 0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg status
M source/a.c
R src/a.c
- ? source/a.o
+ ? src/a.o
--- a/tests/test-mq-subrepo-svn.t Mon Feb 13 17:22:35 2012 +0100
+++ b/tests/test-mq-subrepo-svn.t Thu Feb 16 16:40:29 2012 -0600
@@ -37,7 +37,6 @@
$ hg status -S -X '**/format'
A .hgsub
$ hg qnew -m0 0.diff
- committing subrepository sub
$ cd sub
$ echo a > a
$ svn add a
--- a/tests/test-mq-subrepo.t Mon Feb 13 17:22:35 2012 +0100
+++ b/tests/test-mq-subrepo.t Thu Feb 16 16:40:29 2012 -0600
@@ -105,7 +105,6 @@
% update substate when adding .hgsub w/clean updated subrepo
A .hgsub
% qnew -m0 0.diff
- committing subrepository sub
path sub
source sub
revision b2fdb12cd82b021c3b7053d67802e77b6eeaee31
@@ -121,7 +120,6 @@
% update substate when modifying .hgsub w/clean updated subrepo
M .hgsub
% qnew -m1 1.diff
- committing subrepository sub2
path sub
source sub
revision b2fdb12cd82b021c3b7053d67802e77b6eeaee31
@@ -166,7 +164,6 @@
% update substate when adding .hgsub w/clean updated subrepo
A .hgsub
% qrefresh
- committing subrepository sub
path sub
source sub
revision b2fdb12cd82b021c3b7053d67802e77b6eeaee31
@@ -183,7 +180,6 @@
% update substate when modifying .hgsub w/clean updated subrepo
M .hgsub
% qrefresh
- committing subrepository sub2
path sub
source sub
revision b2fdb12cd82b021c3b7053d67802e77b6eeaee31
@@ -225,7 +221,6 @@
$ echo sub = sub > .hgsub
$ hg add .hgsub
$ hg qnew -m0 0.diff
- committing subrepository sub
$ hg debugsub
path sub
source sub
@@ -277,7 +272,6 @@
diff --git a/.hgsub b/.hgsub
new file mode 100644
examine changes to '.hgsub'? [Ynsfdaq?]
- committing subrepository sub
path sub
source sub
revision b2fdb12cd82b021c3b7053d67802e77b6eeaee31
@@ -310,7 +304,6 @@
sub = sub
+sub2 = sub2
record this change to '.hgsub'? [Ynsfdaq?]
- committing subrepository sub2
path sub
source sub
revision b2fdb12cd82b021c3b7053d67802e77b6eeaee31
@@ -360,4 +353,3 @@
$ echo sub = sub >> .hgsub
$ hg add .hgsub
$ hg qnew 0.diff
- committing subrepository sub
--- a/tests/test-phases.t Mon Feb 13 17:22:35 2012 +0100
+++ b/tests/test-phases.t Thu Feb 16 16:40:29 2012 -0600
@@ -402,3 +402,34 @@
|
o 0 public A
+test partial failure
+
+ $ hg phase --public 7
+ $ hg phase --draft '5 or 7'
+ cannot move 1 changesets to a more permissive phase, use --force
+ phase changed for 1 changesets
+ [1]
+ $ hg log -G --template "{rev} {phase} {desc}\n"
+ @ 7 public merge B' and E
+ |\
+ | o 6 public B'
+ | |
+ +---o 5 draft H
+ | |
+ o | 4 public E
+ | |
+ o | 3 public D
+ | |
+ o | 2 public C
+ |/
+ o 1 public B
+ |
+ o 0 public A
+
+
+test complete failure
+
+ $ hg phase --draft 7
+ cannot move 1 changesets to a more permissive phase, use --force
+ no phases changed
+ [1]
--- a/tests/test-rename-dir-merge.t Mon Feb 13 17:22:35 2012 +0100
+++ b/tests/test-rename-dir-merge.t Thu Feb 16 16:40:29 2012 -0600
@@ -27,7 +27,6 @@
searching for copies back to rev 1
unmatched files in local:
a/c
- a/d
unmatched files in other:
b/a
b/b
@@ -37,33 +36,29 @@
checking for directory renames
dir a/ -> b/
file a/c -> b/c
- file a/d -> b/d
resolving manifests
overwrite: False, partial: False
ancestor: f9b20c0d4c51, local: ce36d17b18fb+, remote: 397f8b00a740
- a/d: remote renamed directory to b/d -> d
a/c: remote renamed directory to b/c -> d
a/b: other deleted -> r
a/a: other deleted -> r
b/a: remote created -> g
b/b: remote created -> g
- updating: a/a 1/6 files (16.67%)
+ updating: a/a 1/5 files (20.00%)
removing a/a
- updating: a/b 2/6 files (33.33%)
+ updating: a/b 2/5 files (40.00%)
removing a/b
- updating: a/c 3/6 files (50.00%)
+ updating: a/c 3/5 files (60.00%)
moving a/c to b/c
- updating: a/d 4/6 files (66.67%)
- moving a/d to b/d
- updating: b/a 5/6 files (83.33%)
+ updating: b/a 4/5 files (80.00%)
getting b/a
- updating: b/b 6/6 files (100.00%)
+ updating: b/b 5/5 files (100.00%)
getting b/b
- 4 files updated, 0 files merged, 2 files removed, 0 files unresolved
+ 3 files updated, 0 files merged, 2 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ echo a/* b/*
- a/* b/a b/b b/c b/d
+ a/d b/a b/b b/c
$ hg st -C
M b/a
M b/b
@@ -72,7 +67,7 @@
R a/a
R a/b
R a/c
- ? b/d
+ ? a/d
$ hg ci -m "3 merge 2+1"
$ hg debugrename b/c
b/c renamed from a/c:354ae8da6e890359ef49ade27b68bbc361f3ca88 (glob)
@@ -84,7 +79,6 @@
unmatched files in local:
b/a
b/b
- b/d
unmatched files in other:
a/c
all copies found (* = to merge, ! = divergent):
@@ -103,11 +97,11 @@
(branch merge, don't forget to commit)
$ echo a/* b/*
- a/* b/a b/b b/c b/d
+ a/d b/a b/b b/c
$ hg st -C
A b/c
a/c
- ? b/d
+ ? a/d
$ hg ci -m "4 merge 1+2"
created new head
$ hg debugrename b/c
--- a/tests/test-revset.t Mon Feb 13 17:22:35 2012 +0100
+++ b/tests/test-revset.t Thu Feb 16 16:40:29 2012 -0600
@@ -430,6 +430,7 @@
$ echo '[revsetalias]' >> .hg/hgrc
$ echo 'm = merge()' >> .hg/hgrc
+ $ echo 'sincem = descendants(m)' >> .hg/hgrc
$ echo 'd($1) = reverse(sort($1, date))' >> .hg/hgrc
$ echo 'rs(ARG1, ARG2) = reverse(sort(ARG1, ARG2))' >> .hg/hgrc
$ echo 'rs4(ARG1, ARGA, ARGB, ARG2) = reverse(sort(ARG1, ARG2))' >> .hg/hgrc
@@ -438,6 +439,46 @@
('symbol', 'm')
('func', ('symbol', 'merge'), None)
6
+
+test alias recursion
+
+ $ try sincem
+ ('symbol', 'sincem')
+ ('func', ('symbol', 'descendants'), ('func', ('symbol', 'merge'), None))
+ 6
+ 7
+
+test infinite recursion
+
+ $ echo 'recurse1 = recurse2' >> .hg/hgrc
+ $ echo 'recurse2 = recurse1' >> .hg/hgrc
+ $ try recurse1
+ ('symbol', 'recurse1')
+ hg: parse error: infinite expansion of revset alias "recurse1" detected
+ [255]
+
+test nesting and variable passing
+
+ $ echo 'nested($1) = nested2($1)' >> .hg/hgrc
+ $ echo 'nested2($1) = nested3($1)' >> .hg/hgrc
+ $ echo 'nested3($1) = max($1)' >> .hg/hgrc
+ $ try 'nested(2:5)'
+ ('func', ('symbol', 'nested'), ('range', ('symbol', '2'), ('symbol', '5')))
+ ('func', ('symbol', 'max'), ('range', ('symbol', '2'), ('symbol', '5')))
+ 5
+
+test variable isolation, variable placeholders are rewritten as string
+then parsed and matched again as string. Check they do not leak too
+far away.
+
+ $ echo 'injectparamasstring = max("$1")' >> .hg/hgrc
+ $ echo 'callinjection($1) = descendants(injectparamasstring)' >> .hg/hgrc
+ $ try 'callinjection(2:5)'
+ ('func', ('symbol', 'callinjection'), ('range', ('symbol', '2'), ('symbol', '5')))
+ ('func', ('symbol', 'descendants'), ('func', ('symbol', 'max'), ('string', '$1')))
+ abort: unknown revision '$1'!
+ [255]
+
$ try 'd(2:5)'
('func', ('symbol', 'd'), ('range', ('symbol', '2'), ('symbol', '5')))
('func', ('symbol', 'reverse'), ('func', ('symbol', 'sort'), ('list', ('range', ('symbol', '2'), ('symbol', '5')), ('symbol', 'date'))))
--- a/tests/test-subrepo-deep-nested-change.t Mon Feb 13 17:22:35 2012 +0100
+++ b/tests/test-subrepo-deep-nested-change.t Thu Feb 16 16:40:29 2012 -0600
@@ -18,7 +18,6 @@
adding sub1/.hgsub (glob)
adding sub1/sub1 (glob)
$ hg commit -R sub1 -m "sub1 import"
- committing subrepository sub2
Preparing the 'main' repo which depends on the subrepo 'sub1'
@@ -33,7 +32,6 @@
adding main/.hgsub (glob)
adding main/main (glob)
$ hg commit -R main -m "main import"
- committing subrepository sub1
Cleaning both repositories, just as a clone -U
--- a/tests/test-subrepo-git.t Mon Feb 13 17:22:35 2012 +0100
+++ b/tests/test-subrepo-git.t Thu Feb 16 16:40:29 2012 -0600
@@ -34,7 +34,6 @@
$ git clone -q ../gitroot s
$ hg add .hgsub
$ hg commit -m 'new git subrepo'
- committing subrepository s
$ hg debugsub
path s
source ../gitroot
@@ -55,7 +54,6 @@
$ hg status --subrepos
M s/g
$ hg commit -m 'update git subrepo'
- committing subrepository s
$ hg debugsub
path s
source ../gitroot
@@ -222,7 +220,6 @@
$ git pull -q >/dev/null 2>/dev/null
$ cd ..
$ hg commit -m 'git upstream sync'
- committing subrepository s
$ hg debugsub
path s
source ../gitroot
@@ -287,7 +284,6 @@
$ echo inner = inner > .hgsub
$ hg add .hgsub
$ hg commit -m 'nested sub'
- committing subrepository inner
nested commit
@@ -339,27 +335,32 @@
$ hg update 1 -q
$ hg rm .hgsubstate
$ hg commit .hgsubstate -m 'no substate'
- created new head
+ nothing changed
+ [1]
$ hg tag -l nosubstate
$ hg manifest
.hgsub
+ .hgsubstate
a
$ hg status -S
+ R .hgsubstate
$ hg sum | grep commit
- commit: 1 subrepos
+ commit: 1 removed, 1 subrepos (new branch head)
$ hg commit -m 'restore substate'
- committing subrepository s
+ nothing changed
+ [1]
$ hg manifest
.hgsub
.hgsubstate
a
$ hg sum | grep commit
- commit: (clean)
+ commit: 1 removed, 1 subrepos (new branch head)
$ hg update -qC nosubstate
$ ls s
+ g
issue3109: false positives in git diff-index
--- a/tests/test-subrepo-missing.t Mon Feb 13 17:22:35 2012 +0100
+++ b/tests/test-subrepo-missing.t Thu Feb 16 16:40:29 2012 -0600
@@ -7,12 +7,10 @@
$ echo 'subrepo = subrepo' > .hgsub
$ hg ci -Am addsubrepo
adding .hgsub
- committing subrepository subrepo
$ echo b > subrepo/b
$ hg -R subrepo ci -Am addb
adding b
$ hg ci -m updatedsub
- committing subrepository subrepo
delete .hgsub and revert it
--- a/tests/test-subrepo-recursion.t Mon Feb 13 17:22:35 2012 +0100
+++ b/tests/test-subrepo-recursion.t Thu Feb 16 16:40:29 2012 -0600
@@ -79,11 +79,9 @@
$ cd ..
$ hg commit -m 0-2-1
- committing subrepository bar
$ cd ..
$ hg commit -m 1-2-1
- committing subrepository foo
Change working directory:
--- a/tests/test-subrepo-relative-path.t Mon Feb 13 17:22:35 2012 +0100
+++ b/tests/test-subrepo-relative-path.t Thu Feb 16 16:40:29 2012 -0600
@@ -20,7 +20,6 @@
adding main/.hgsub (glob)
adding main/main (glob)
$ hg commit -R main -m "main import"
- committing subrepository sub
Cleaning both repositories, just as a clone -U
--- a/tests/test-subrepo-svn.t Mon Feb 13 17:22:35 2012 +0100
+++ b/tests/test-subrepo-svn.t Thu Feb 16 16:40:29 2012 -0600
@@ -69,8 +69,6 @@
$ svn co --quiet "$SVNREPO"/src subdir/s
$ hg add .hgsub
$ hg ci -m1
- committing subrepository s
- committing subrepository subdir/s
make sure we avoid empty commits (issue2445)
@@ -432,7 +430,6 @@
$ echo "s = [svn] $SVNREPO/src" >> .hgsub
$ hg add .hgsub
$ hg ci -m addsub
- committing subrepository s
$ echo a > a
$ hg ci -Am adda
adding a
@@ -440,7 +437,6 @@
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ svn up -qr6 s
$ hg ci -m updatesub
- committing subrepository s
created new head
$ echo pyc > s/dir/epsilon.pyc
$ hg up 1
@@ -462,14 +458,12 @@
$ echo "obstruct = [svn] $SVNREPO/externals" >> .hgsub
$ svn co -r5 --quiet "$SVNREPO"/externals obstruct
$ hg commit -m 'Start making obstructed working copy'
- committing subrepository obstruct
$ hg book other
$ hg co -r 'p1(tip)'
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ echo "obstruct = [svn] $SVNREPO/src" >> .hgsub
$ svn co -r5 --quiet "$SVNREPO"/src obstruct
$ hg commit -m 'Other branch which will be obstructed'
- committing subrepository obstruct
created new head
Switching back to the head where we have another path mapped to the
@@ -530,12 +524,10 @@
Checked out revision 10.
$ echo "recreated = [svn] $SVNREPO/branch" >> .hgsub
$ hg ci -m addsub
- committing subrepository recreated
$ cd recreated
$ svn up -q
$ cd ..
$ hg ci -m updatesub
- committing subrepository recreated
$ hg up -r-2
D *recreated/somethingnew (glob)
A *recreated/somethingold (glob)
--- a/tests/test-subrepo.t Mon Feb 13 17:22:35 2012 +0100
+++ b/tests/test-subrepo.t Thu Feb 16 16:40:29 2012 -0600
@@ -37,7 +37,6 @@
commit: 1 added, 1 subrepos
update: (current)
$ hg ci -m1
- committing subrepository s
Revert can't (yet) revert subrepos:
@@ -105,7 +104,6 @@
$ echo b > s/a
$ hg -R s ci -ms1
$ hg --config ui.commitsubrepos=no ci -m3
- committing subrepository s
leave sub dirty (and check ui.commitsubrepos=no aborts the commit)
@@ -455,7 +453,6 @@
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ hg ci -Am1
adding .hgsub
- committing subrepository s
$ hg branch br
marked working directory as branch br
(branches are permanent and global, did you want a bookmark?)
@@ -464,7 +461,6 @@
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg ci -Am1
adding b
- committing subrepository s
$ hg up default
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ echo c > c
@@ -483,7 +479,6 @@
$ echo d > d
$ hg ci -Am1
adding d
- committing subrepository s
$ hg up 3
2 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ hg -R s up 5
@@ -491,7 +486,6 @@
$ echo e > e
$ hg ci -Am1
adding e
- committing subrepository s
$ hg up 5
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
@@ -519,8 +513,6 @@
$ hg -R testdelete add
adding testdelete/.hgsub (glob)
$ hg -R testdelete ci -m "nested 1 & 2 added"
- committing subrepository nested
- committing subrepository nested2
$ echo nested = nested > testdelete/.hgsub
$ hg -R testdelete ci -m "nested 2 deleted"
$ cat testdelete/.hgsubstate
@@ -550,8 +542,6 @@
$ hg -R main add
adding main/.hgsub (glob)
$ hg -R main ci -m "add subrepos"
- committing subrepository nested_absolute
- committing subrepository nested_relative
$ cd ..
$ hg clone mercurial/main mercurial2/main
updating to branch default
@@ -574,7 +564,6 @@
$ echo s = s > repo/.hgsub
$ hg -R repo ci -Am1
adding .hgsub
- committing subrepository s
$ hg clone repo repo2
updating to branch default
cloning subrepo s from $TESTTMP/sub/repo/s (glob)
@@ -589,7 +578,6 @@
$ hg -R repo2/s ci -m3
created new head
$ hg -R repo2 ci -m3
- committing subrepository s
$ hg -q -R repo2 push
abort: push creates new remote head 9d66565e64e1!
(did you forget to merge? use push -f to force)
@@ -699,7 +687,6 @@
$ echo subrepo-2 = subrepo-2 >> .hgsub
$ hg add .hgsub
$ hg ci -m 'Added subrepos'
- committing subrepository subrepo-1
committing subrepository subrepo-2
$ hg st subrepo-2/file
@@ -857,17 +844,16 @@
$ hg rm -f .hgsubstate
$ hg ci -mrm
- committing subrepository s
- committing subrepository t
- created new head
+ nothing changed
+ [1]
$ hg log -vr tip
- changeset: 14:3941e0aa5236
+ changeset: 13:925c17564ef8
tag: tip
- parent: 11:365661e5936a
user: test
date: Thu Jan 01 00:00:00 1970 +0000
+ files: .hgsubstate
description:
- rm
+ 13
@@ -875,9 +861,11 @@
$ hg rm .hgsub
$ hg ci -mrm2
+ created new head
$ hg log -vr tip
- changeset: 15:8b31de9d13d1
+ changeset: 14:2400bccd50af
tag: tip
+ parent: 11:365661e5936a
user: test
date: Thu Jan 01 00:00:00 1970 +0000
files: .hgsub .hgsubstate
@@ -888,13 +876,13 @@
Test issue3153: diff -S with deleted subrepos
$ hg diff --nodates -S -c .
- diff -r 3941e0aa5236 -r 8b31de9d13d1 .hgsub
+ diff -r 365661e5936a -r 2400bccd50af .hgsub
--- a/.hgsub
+++ /dev/null
@@ -1,2 +0,0 @@
-s = s
-t = t
- diff -r 3941e0aa5236 -r 8b31de9d13d1 .hgsubstate
+ diff -r 365661e5936a -r 2400bccd50af .hgsubstate
--- a/.hgsubstate
+++ /dev/null
@@ -1,2 +0,0 @@
@@ -909,7 +897,6 @@
$ hg add .hgsub
$ hg init s
$ hg ci -m0
- committing subrepository s
Adding with an explicit path in a subrepo adds the file
$ echo c1 > f1
$ echo c2 > s/f2
@@ -923,7 +910,6 @@
$ hg ci -R s -m0
$ hg ci -Am1
adding f1
- committing subrepository s
Adding with an explicit path in a subrepo with -S has the same behavior
$ echo c3 > f3
$ echo c4 > s/f4
@@ -937,7 +923,6 @@
$ hg ci -R s -m1
$ hg ci -Ama2
adding f3
- committing subrepository s
Adding without a path or pattern silently ignores subrepos
$ echo c5 > f5
$ echo c6 > s/f6
@@ -956,7 +941,6 @@
adding f6
adding f7
$ hg ci -m3
- committing subrepository s
Adding without a path or pattern with -S also adds files in subrepos
$ echo c8 > f8
$ echo c9 > s/f9
@@ -975,7 +959,6 @@
A s/f9
$ hg ci -R s -m3
$ hg ci -m4
- committing subrepository s
Adding with a pattern silently ignores subrepos
$ echo c11 > fm11
$ echo c12 > fn12
@@ -998,7 +981,6 @@
adding fn14
$ hg ci -Am5
adding fn12
- committing subrepository s
Adding with a pattern with -S also adds matches in subrepos
$ echo c15 > fm15
$ echo c16 > fn16
@@ -1021,7 +1003,6 @@
adding fn18
$ hg ci -Am6
adding fn16
- committing subrepository s
Test behavior of forget for explicit path in subrepo:
Forgetting an explicit path in a subrepo untracks the file