# HG changeset patch # User Matt Mackall # Date 2016-03-02 22:44:56 # Node ID 549ff28a345f595cad7e06fb08c2ac6973e2f030 # Parent ffc693f871483da11af1026e2c704fcb6134185f # Parent 8949d73b2e1f5c0b9c4c6c195bef2fe284349c6e merge with stable diff --git a/.hgsigs b/.hgsigs --- a/.hgsigs +++ b/.hgsigs @@ -121,3 +121,4 @@ ea389970c08449440587712117f178d33bab3f1e 158bdc8965720ca4061f8f8d806563cfc7cdb62e 0 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 diff --git a/.hgtags b/.hgtags --- a/.hgtags +++ b/.hgtags @@ -134,3 +134,4 @@ ea389970c08449440587712117f178d33bab3f1e 158bdc8965720ca4061f8f8d806563cfc7cdb62e 3.7-rc 2408645de650d8a29a6ce9e7dce601d8dd0d1474 3.7 b698abf971e7377d9b7ec7fc8c52df45255b0329 3.7.1 +d493d64757eb45ada99fcb3693e479a51b7782da 3.7.2 diff --git a/hgext/strip.py b/hgext/strip.py --- a/hgext/strip.py +++ b/hgext/strip.py @@ -90,7 +90,7 @@ def strip(ui, repo, revs, update=True, b "strip")), ('B', 'bookmark', [], _("remove revs only reachable from given" " bookmark"))], - _('hg strip [-k] [-f] [-n] [-B bookmark] [-r] REV...')) + _('hg strip [-k] [-f] [-B bookmark] [-r] REV...')) def stripcmd(ui, repo, *revs, **opts): """strip changesets and all their descendants from the repository diff --git a/i18n/pt_BR.po b/i18n/pt_BR.po --- a/i18n/pt_BR.po +++ b/i18n/pt_BR.po @@ -5175,7 +5175,7 @@ msgstr " - `roll` como `fold`, mas descartando a descrição da revisão" msgid " - `edit` to edit this changeset" msgstr " - `edit` para editar a revisão" -msgid " There are a number of ways to select the root changset:" +msgid " There are a number of ways to select the root changeset:" msgstr " Há diversas maneiras de selecionar a revisão raiz:" msgid " - Specify ANCESTOR directly" @@ -18670,6 +18670,10 @@ msgstr "" " contendo quebras de linha misturadas são incluídos em cada\n" " um dos estilos correspondentes." +#. i18n: "eol" is a keyword +msgid "eol requires a style name" +msgstr "eol requer um nome de estilo" + msgid "" "``copied()``\n" " File that is recorded as being copied." @@ -19569,8 +19573,8 @@ msgstr "" "fará com que ``hg echo foo`` imprima ``foo`` em seu terminal.\n" "Um exemplo melhor (em um Unix) poderia ser::" -msgid " purge = !$HG status --no-status --unknown -0 | xargs -0 rm" -msgstr " purge = !$HG status --no-status --unknown -0 | xargs -0 rm" +msgid " purge = !$HG status --no-status --unknown -0 re: | xargs -0 rm" +msgstr " purge = !$HG status --no-status --unknown -0 re: | xargs -0 rm" msgid "" "which will make ``hg purge`` delete all unknown files in the\n" @@ -19694,12 +19698,12 @@ msgstr "" "autenticação. Por exemplo::" msgid "" -" foo.prefix = hg.intevation.org/mercurial\n" +" foo.prefix = hg.intevation.de/mercurial\n" " foo.username = foo\n" " foo.password = bar\n" " foo.schemes = http https" msgstr "" -" foo.prefix = hg.intevation.org/mercurial\n" +" foo.prefix = hg.intevation.de/mercurial\n" " foo.username = foo\n" " foo.password = bar\n" " foo.schemes = http https" @@ -21079,10 +21083,12 @@ msgstr "Por exemplo::" msgid "" " [hostfingerprints]\n" -" hg.intevation.org = fa:1f:d9:48:f1:e7:74:30:38:8d:d8:58:b6:94:b8:58:28:7d:8b:d0" +" hg.intevation.de = fc:e2:8d:d9:51:cd:cb:c1:4d:18:6b:b7:44:8d:49:72:57:e6:cd:33\n" +" hg.intevation.org = fc:e2:8d:d9:51:cd:cb:c1:4d:18:6b:b7:44:8d:49:72:57:e6:cd:33" msgstr "" " [hostfingerprints]\n" -" hg.intevation.org = fa:1f:d9:48:f1:e7:74:30:38:8d:d8:58:b6:94:b8:58:28:7d:8b:d0" +" hg.intevation.de = fc:e2:8d:d9:51:cd:cb:c1:4d:18:6b:b7:44:8d:49:72:57:e6:cd:33\n" +" hg.intevation.org = fc:e2:8d:d9:51:cd:cb:c1:4d:18:6b:b7:44:8d:49:72:57:e6:cd:33" msgid "This feature is only supported when using Python 2.6 or later." msgstr "" @@ -23447,7 +23453,7 @@ msgid "" "``backgroundclose``\n" " Whether to enable closing file handles on background threads during certain\n" " operations. Some platforms aren't very efficient at closing file\n" -" handles that have been written or appened to. By performing file closing\n" +" handles that have been written or appended to. By performing file closing\n" " on background threads, file write rate can increase substantially.\n" " (default: true on Windows, false elsewhere)" msgstr "" @@ -27665,22 +27671,22 @@ msgid ".. functionsmarker" msgstr ".. functionsmarker" msgid "" -"Also, for any expression that returns a list, there is a list operator:" +"Also, for any expression that returns a list, there is a list operator::" msgstr "" "Além disso, para cada expressão que devolve uma lista, há um\n" -"operador de lista:" - -msgid "- expr % \"{template}\"" -msgstr "- expr % \"{modelo}\"" - -msgid "" -"As seen in the above example, \"{template}\" is interpreted as a template.\n" -"To prevent it from being interpreted, you can use an escape character \"\\{\"\n" -"or a raw string prefix, \"r'...'\"." -msgstr "" -"Como visto no exemplo acima, \"{modelo}\" é interpretado como um modelo.\n" +"operador de lista::" + +msgid " expr % \"{template}\"" +msgstr " expr % \"{modelo}\"" + +msgid "" +"As seen in the above example, ``{template}`` is interpreted as a template.\n" +"To prevent it from being interpreted, you can use an escape character ``\\{``\n" +"or a raw string prefix, ``r'...'``." +msgstr "" +"Como visto no exemplo acima, ``{modelo}`` é interpretado como um modelo.\n" "Para impedir que seja interpretado, você pode usar um caractere de\n" -"escape \"\\{\" ou um prefixo de string literal \"r'...'\"." +"escape ``\\{`` ou um prefixo de string literal ``r'...'``." msgid "Some sample command line templates:" msgstr "Alguns exemplos de modelos de linha de comando:" @@ -32230,7 +32236,7 @@ msgstr "arquivo sem nome no manifesto" #, python-format msgid "reading manifest delta %s" -msgstr "lendo alterações no manifesto %s" +msgstr "lendo delta %s do manifesto" msgid "crosschecking files in changesets and manifests\n" msgstr "checagem cruzada de arquivos em revisões e no manifesto\n" @@ -32321,6 +32327,121 @@ msgstr "procurar mudanças remotas" msgid "number of cpus must be an integer" msgstr "o número de cpus deve ser um inteiro" +#~ msgid "Check for unrecorded moves at commit time (EXPERIMENTAL)" +#~ msgstr "" +#~ "Testa por renomeações não registradas no momento da consolidação " +#~ "(EXPERIMENTAL)" + +#~ msgid "" +#~ "This extension checks at commit/amend time if any of the committed files\n" +#~ "comes from an unrecorded mv." +#~ msgstr "" +#~ "Esta extensão verifica durante consolidações se algum arquivo consolidado\n" +#~ "foi renomeado sem registrar essa renomeação pelo comando mv." + +#~ msgid "" +#~ "The threshold at which a file is considered a move can be set with the\n" +#~ "``automv.similarity`` config option. This option takes a percentage between 0\n" +#~ "(disabled) and 100 (files must be identical), the default is 95." +#~ msgstr "" +#~ "O limiar no qual um arquivo será considerado uma renomeação\n" +#~ "pode ser definido com a opção de configuração ``automv.similarity``.\n" +#~ "Esta opção recebe uma porcentagem entre 0 (desabilitado) e 100\n" +#~ "(os arquivos devem ser idênticos). O valor padrão é 95." + +#~ msgid "disable automatic file move detection" +#~ msgstr "desabilita detecção automática de renomeações" + +#~ msgid "automv.similarity must be between 0 and 100" +#~ msgstr "automv.similarity deve ser um número entre 0 e 100" + +#~ msgid "detected move of %s as %s (%d%% similar)\n" +#~ msgstr "detectada remoção de %s como %s (%d%% de similaridade)\n" + +#~ msgid "detected move of %d files\n" +#~ msgstr "foram detectadas renomeações de %d arquivos\n" + +#~ msgid "" +#~ " [blackbox]\n" +#~ " track = *\n" +#~ " dirty = True" +#~ msgstr "" +#~ " [blackbox]\n" +#~ " track = *" + +#~ msgid "histedit" +#~ msgstr "histedit" + +#~ msgid "rebase" +#~ msgstr "%d rebaseados" + +#~ msgid "nothing to rebase - updating instead\n" +#~ msgstr "nada para rebasear de %s para %s\n" + +#~ msgid "invalid value for --daemon-postexec" +#~ msgstr "valor %r inválido para a opção %s, int esperado" + +#~ msgid "forget added file %s (yn)?$$ &Yes $$ &No" +#~ msgstr "a mesclagem de '%s' teve sucesso (yn)?$$ (&Y) sim $$ &Não" + +#~ msgid "no %s in progress" +#~ msgstr "nenhum rebaseamento em andamento" + +#~ msgid "graft" +#~ msgstr "força o enxerto" + +#~ msgid "" +#~ "multiple matching bookmarks to rebase - please rebase to an explicit rev or " +#~ "bookmark" +#~ msgstr "" +#~ "múltiplos marcadores para mesclar - por favor mescle com uma revisão ou " +#~ "marcador explícitos" + +#~ msgid "" +#~ "no matching bookmark to rebase - please rebase to an explicit rev or " +#~ "bookmark" +#~ msgstr "" +#~ "nenhum marcador correspondente para mesclar - por favor mescle com uma " +#~ "revisão ou marcador explícitos" + +#~ msgid "branch '%s' has %d heads - please rebase to an explicit rev" +#~ msgstr "" +#~ "o ramo '%s' tem %d cabeças - por favor mescle com uma revisão explícita" + +#~ msgid "heads are bookmarked - please rebase to an explicit rev" +#~ msgstr "" +#~ "as cabeças estão marcadas com bookmarks - por favor mescle com uma revisão " +#~ "explícita" + +#~ msgid "branch '%s' has one head - please rebase to an explicit rev" +#~ msgstr "" +#~ "o ramo '%s' tem apenas uma cabeça - por favor mescle com uma revisão " +#~ "explícita" + +#~ msgid "nothing to rebase" +#~ msgstr "nada para rebasear\n" + +#~ msgid "use 'hg update' or rebase to an explicit revision" +#~ msgstr "use 'hg update' ou mescle com uma revisão explícita" + +#~ msgid "source set is empty" +#~ msgstr "o patch %s é vazio\n" + +#~ msgid "source set is rooted in multiple branches" +#~ msgstr "a origem cvs não suporta a especificação de múltiplas revisões" + +#~ msgid "rebaseset is rooted in multiple named branches" +#~ msgstr "não é possível colapsar múltiplos ramos nomeados" + +#~ msgid "specify an explicit destination with --dest" +#~ msgstr "você não pode especificar uma revisão com --all" + +#~ msgid "%i other divergent bookmarks for \"%s\"\n" +#~ msgstr "marcador divergente %s guardado como %s\n" + +#~ msgid "%i other heads for branch \"%s\"\n" +#~ msgstr "novas cabeças remotas no ramo '%s':\n" + #~ msgid "" #~ "``merge``\n" #~ "---------" @@ -32368,6 +32489,25 @@ msgstr "o número de cpus deve ser um inteiro" #~ " que não são ignorados.\n" #~ " (padrão: ``abort``)" +#~ msgid "%s not in parent-directory manifest" +#~ msgstr "abre o manifesto do diretório" + +#~ msgid "parent-directory manifest refers to unknown revision %s" +#~ msgstr "revisão se refere a manifesto desconhecido %s" + +#~ msgid "checking directory manifests\n" +#~ msgstr "abre o manifesto do diretório" + +#~ msgid "manifest refers to unknown revision %s" +#~ msgstr "revisão se refere a manifesto desconhecido %s" + +#~ msgid "" +#~ " [hostfingerprints]\n" +#~ " hg.intevation.org = fa:1f:d9:48:f1:e7:74:30:38:8d:d8:58:b6:94:b8:58:28:7d:8b:d0" +#~ msgstr "" +#~ " [hostfingerprints]\n" +#~ " hg.intevation.org = fa:1f:d9:48:f1:e7:74:30:38:8d:d8:58:b6:94:b8:58:28:7d:8b:d0" + #~ msgid "" #~ "# Edit history between %s and %s\n" #~ "#\n" diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -1270,7 +1270,7 @@ def branch(ui, repo, label=None, **opts) _('show only branches that have unmerged heads (DEPRECATED)')), ('c', 'closed', False, _('show normal and closed branches')), ] + formatteropts, - _('[-ac]')) + _('[-c]')) def branches(ui, repo, active=False, closed=False, **opts): """list repository named branches @@ -5234,7 +5234,7 @@ def manifest(ui, repo, node=None, rev=No ('P', 'preview', None, _('review revisions to merge (no merge is performed)')) ] + mergetoolopts, - _('[-P] [-f] [[-r] REV]')) + _('[-P] [[-r] REV]')) def merge(ui, repo, node=None, **opts): """merge another revision into working directory diff --git a/mercurial/hg.py b/mercurial/hg.py --- a/mercurial/hg.py +++ b/mercurial/hg.py @@ -343,17 +343,30 @@ def clonewithshare(ui, peeropts, sharepa "support clone by revision")) revs = [srcpeer.lookup(r) for r in rev] + # Obtain a lock before checking for or cloning the pooled repo otherwise + # 2 clients may race creating or populating it. + pooldir = os.path.dirname(sharepath) + # lock class requires the directory to exist. + try: + util.makedir(pooldir, False) + except OSError as e: + if e.errno != errno.EEXIST: + raise + + poolvfs = scmutil.vfs(pooldir) basename = os.path.basename(sharepath) - if os.path.exists(sharepath): - ui.status(_('(sharing from existing pooled repository %s)\n') % - basename) - else: - ui.status(_('(sharing from new pooled repository %s)\n') % basename) - # Always use pull mode because hardlinks in share mode don't work well. - # Never update because working copies aren't necessary in share mode. - clone(ui, peeropts, source, dest=sharepath, pull=True, - rev=rev, update=False, stream=stream) + with lock.lock(poolvfs, '%s.lock' % basename): + if os.path.exists(sharepath): + ui.status(_('(sharing from existing pooled repository %s)\n') % + basename) + else: + ui.status(_('(sharing from new pooled repository %s)\n') % basename) + # Always use pull mode because hardlinks in share mode don't work + # well. Never update because working copies aren't necessary in + # share mode. + clone(ui, peeropts, source, dest=sharepath, pull=True, + rev=rev, update=False, stream=stream) sharerepo = repository(ui, path=sharepath) share(ui, sharerepo, dest=dest, update=False, bookmarks=False) diff --git a/tests/lockdelay.py b/tests/lockdelay.py new file mode 100644 --- /dev/null +++ b/tests/lockdelay.py @@ -0,0 +1,26 @@ +# Dummy extension that adds a delay after acquiring a lock. +# +# This extension can be used to test race conditions between lock acquisition. + +from __future__ import absolute_import + +import os +import time + +from mercurial import ( + lock as lockmod, +) + +class delaylock(lockmod.lock): + def lock(self): + delay = float(os.environ.get('HGPRELOCKDELAY', '0.0')) + if delay: + time.sleep(delay) + res = super(delaylock, self).lock() + delay = float(os.environ.get('HGPOSTLOCKDELAY', '0.0')) + if delay: + time.sleep(delay) + return res + +def extsetup(ui): + lockmod.lock = delaylock diff --git a/tests/test-clone.t b/tests/test-clone.t --- a/tests/test-clone.t +++ b/tests/test-clone.t @@ -1036,3 +1036,49 @@ Test that auto sharing doesn't cause fai $ hg --config share.pool=share -q clone -e "python \"$TESTDIR/dummyssh\"" a ssh://user@dummy/remote $ hg -R remote id -r 0 acb14030fe0a + +Cloning into pooled storage doesn't race (issue5104) + + $ HGPOSTLOCKDELAY=2.0 hg --config share.pool=racepool --config extensions.lockdelay=$TESTDIR/lockdelay.py clone source1a share-destrace1 > race1.log 2>&1 & + $ HGPRELOCKDELAY=1.0 hg --config share.pool=racepool --config extensions.lockdelay=$TESTDIR/lockdelay.py clone source1a share-destrace2 > race2.log 2>&1 + $ wait + + $ hg -R share-destrace1 log -r tip + changeset: 2:e5bfe23c0b47 + bookmark: bookA + tag: tip + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: 1a + + + $ hg -R share-destrace2 log -r tip + changeset: 2:e5bfe23c0b47 + bookmark: bookA + tag: tip + user: test + date: Thu Jan 01 00:00:00 1970 +0000 + summary: 1a + + $ cat race1.log + (sharing from new pooled repository b5f04eac9d8f7a6a9fcb070243cccea7dc5ea0c1) + requesting all changes + adding changesets + adding manifests + adding file changes + added 3 changesets with 3 changes to 1 files + updating working directory + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + searching for changes + no changes found + adding remote bookmark bookA + + $ cat race2.log + (sharing from existing pooled repository b5f04eac9d8f7a6a9fcb070243cccea7dc5ea0c1) + updating working directory + 1 files updated, 0 files merged, 0 files removed, 0 files unresolved + waiting for lock on repository share-destrace2 held by * (glob) + got lock after \d+ seconds (re) + searching for changes + no changes found + adding remote bookmark bookA diff --git a/tests/test-strip.t b/tests/test-strip.t --- a/tests/test-strip.t +++ b/tests/test-strip.t @@ -660,7 +660,7 @@ Make sure no one adds back a -b option: $ hg strip -b tip hg strip: option -b not recognized - hg strip [-k] [-f] [-n] [-B bookmark] [-r] REV... + hg strip [-k] [-f] [-B bookmark] [-r] REV... strip changesets and all their descendants from the repository