Mercurial > hg
changeset 24163:bb11081562d7
merge with stable
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Mon, 02 Mar 2015 01:20:14 -0600 |
parents | 758dd85b6ad6 (current diff) 80af610c4ffb (diff) |
children | 90f08728e0f7 |
files | hgext/largefiles/overrides.py hgext/largefiles/reposetup.py mercurial/branchmap.py mercurial/dispatch.py mercurial/revset.py tests/test-largefiles-misc.t tests/test-revset.t |
diffstat | 18 files changed, 139 insertions(+), 32 deletions(-) [+] |
line wrap: on
line diff
--- a/.hgsigs Sat Feb 28 01:12:54 2015 -0500 +++ b/.hgsigs Mon Mar 02 01:20:14 2015 -0600 @@ -102,3 +102,4 @@ 1265a3a71d75396f5d4cf6935ae7d9ba5407a547 0 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
--- a/.hgtags Sat Feb 28 01:12:54 2015 -0500 +++ b/.hgtags Mon Mar 02 01:20:14 2015 -0600 @@ -115,3 +115,4 @@ 1265a3a71d75396f5d4cf6935ae7d9ba5407a547 3.2.4 db8e3f7948b1fdeb9ad12d448fc3525759908b9f 3.3-rc fbdd5195528fae4f41feebc1838215c110b25d6a 3.3 +5b4ed033390bf6e2879c8f5c28c84e1ee3b87231 3.3.1
--- a/hgext/largefiles/lfutil.py Sat Feb 28 01:12:54 2015 -0500 +++ b/hgext/largefiles/lfutil.py Mon Mar 02 01:20:14 2015 -0600 @@ -577,7 +577,7 @@ Otherwise, this returns the function to always write out (or ignore if ``not forcibly``) status. ''' - if forcibly is None: + if forcibly is None and util.safehasattr(repo, '_largefilesenabled'): return repo._lfstatuswriters[-1] else: if forcibly:
--- a/hgext/largefiles/overrides.py Sat Feb 28 01:12:54 2015 -0500 +++ b/hgext/largefiles/overrides.py Mon Mar 02 01:20:14 2015 -0600 @@ -848,6 +848,9 @@ return result def overriderebase(orig, ui, repo, **opts): + if not util.safehasattr(repo, '_largefilesenabled'): + return orig(ui, repo, **opts) + resuming = opts.get('continue') repo._lfcommithooks.append(lfutil.automatedcommithook(resuming)) repo._lfstatuswriters.append(lambda *msg, **opts: None)
--- a/hgext/largefiles/reposetup.py Sat Feb 28 01:12:54 2015 -0500 +++ b/hgext/largefiles/reposetup.py Mon Mar 02 01:20:14 2015 -0600 @@ -24,6 +24,9 @@ return class lfilesrepo(repo.__class__): + # the mark to examine whether "repo" object enables largefiles or not + _largefilesenabled = True + lfstatus = False def status_nolfiles(self, *args, **kwargs): return super(lfilesrepo, self).status(*args, **kwargs)
--- a/i18n/ja.po Sat Feb 28 01:12:54 2015 -0500 +++ b/i18n/ja.po Mon Mar 02 01:20:14 2015 -0600 @@ -149,8 +149,8 @@ msgstr "" "Project-Id-Version: Mercurial\n" "Report-Msgid-Bugs-To: <mercurial-devel@selenic.com>\n" -"POT-Creation-Date: 2015-01-31 23:43+0900\n" -"PO-Revision-Date: 2015-02-01 08:15+0900\n" +"POT-Creation-Date: 2015-02-28 17:53+0900\n" +"PO-Revision-Date: 2015-03-01 01:23+0900\n" "Last-Translator: Japanese translation team <mercurial-ja@googlegroups.com>\n" "Language-Team: Japanese\n" "Language: ja\n" @@ -24938,13 +24938,13 @@ msgid "parsing obsolete marker: unknown version %r" msgstr "廃止情報解析: 未知のリビジョン %r" +msgid "bad obsolescence marker detected: invalid successors nullid" +msgstr "不正な廃止情報を検出: 後継としての null 指定は不正です" + #, python-format msgid "in-marker cycle with %s" msgstr "マーカ %s における循環参照があります" -msgid "bad obsolescence marker detected: invalid successors nullid" -msgstr "不正な廃止情報を検出: 後継としての null 指定は不正です" - #, python-format msgid "unknown key: %r" msgstr "未知のキーです: %r" @@ -25559,6 +25559,9 @@ "we'll\n" " work around it to return a non-filtered value." msgstr "" +" 不可視なリビジョンが該当する場合は、 別な可視リビジョンが無いか、\n" +" ある程度の事後処理が実施されます (※ 訳注: 代替リビジョンの返却は、\n" +" 未保証です)" #. i18n: "filelog" is a keyword msgid "filelog requires a pattern" @@ -26990,6 +26993,9 @@ msgid ":subrepos: List of strings. Updated subrepositories in the changeset." msgstr ":subrepos: 文字列挙。 当該リビジョンで更新されたサブリポジトリ名。" +msgid ":tags: List of strings. Any tags associated with the changeset." +msgstr ":tags: 文字列列挙。 当該リビジョンに付与されたタグの一覧。" + msgid "" ":parents: List of strings. The parents of the changeset in \"rev:node\"\n" " format. If the changeset has only one \"natural\" parent (the " @@ -27591,6 +27597,3 @@ msgid "number of cpus must be an integer" msgstr "CPU 数には数値を指定してください" - -msgid ":tags: List of strings. Any tags associated with the changeset." -msgstr ":tags: 文字列列挙。 当該リビジョンに付与されたタグの一覧。"
--- a/i18n/pt_BR.po Sat Feb 28 01:12:54 2015 -0500 +++ b/i18n/pt_BR.po Mon Mar 02 01:20:14 2015 -0600 @@ -25509,14 +25509,14 @@ msgid "parsing obsolete marker: unknown version %r" msgstr "decodificando marcações de obsolescência: versão desconhecida %r" +msgid "bad obsolescence marker detected: invalid successors nullid" +msgstr "" +"marcação de obsolescência inválida detectada: sucessores nullid inválidos" + #, python-format msgid "in-marker cycle with %s" msgstr "ciclo nos marcadores com %s" -msgid "bad obsolescence marker detected: invalid successors nullid" -msgstr "" -"marcação de obsolescência inválida detectada: sucessores nullid inválidos" - #, python-format msgid "unknown key: %r" msgstr "chave desconhecida: %r" @@ -25690,8 +25690,9 @@ msgstr "morto pelo sinal %d" #, python-format -msgid "unknown strip-bundle2-version value %r; " -msgstr "valor desconhecido de strip-bundle2-version %r; " +msgid "unknown strip-bundle2-version value %r; should be one of %r\n" +msgstr "" +"valor desconhecido de strip-bundle2-version %r; deveria ser um dentre %r\n" #, python-format msgid "saved backup bundle to %s\n" @@ -27610,6 +27611,9 @@ msgid ":subrepos: List of strings. Updated subrepositories in the changeset." msgstr ":subrepos: Lista de strings. Sub-repositórios atualizados na revisão." +msgid ":tags: List of strings. Any tags associated with the changeset." +msgstr ":tags: Lista de strings. Quaisquer etiquetas associadas à revisão." + msgid "" ":parents: List of strings. The parents of the changeset in \"rev:node\"\n" " format. If the changeset has only one \"natural\" parent (the predecessor\n" @@ -28249,6 +28253,3 @@ #~ msgid "graft for revision %s is empty\n" #~ msgstr "o enxerto para a revisão %s é vazio\n" - -#~ msgid ":tags: List of strings. Any tags associated with the changeset." -#~ msgstr ":tags: Lista de strings. Quaisquer etiquetas associadas à revisão."
--- a/mercurial/branchmap.py Sat Feb 28 01:12:54 2015 -0500 +++ b/mercurial/branchmap.py Mon Mar 02 01:20:14 2015 -0600 @@ -330,7 +330,7 @@ and will grow with it but be 1/8th of its size. """ - def __init__(self, repo): + def __init__(self, repo, readonly=True): assert repo.filtername is None self._names = [] # branch names in local encoding with static index self._rbcrevs = array('c') # structs of type _rbcrecfmt @@ -342,6 +342,10 @@ except (IOError, OSError), inst: repo.ui.debug("couldn't read revision branch cache names: %s\n" % inst) + if readonly: + # don't try to use cache - fall back to the slow path + self.branchinfo = self._branchinfo + if self._names: try: data = repo.vfs.read(_rbcrevs)
--- a/mercurial/dispatch.py Sat Feb 28 01:12:54 2015 -0500 +++ b/mercurial/dispatch.py Mon Mar 02 01:20:14 2015 -0600 @@ -227,6 +227,9 @@ except (AttributeError, IndexError): # it might be anything, for example a string reason = inst.reason + if isinstance(reason, unicode): + # SSLError of Python 2.7.9 contains a unicode + reason = reason.encode(encoding.encoding, 'replace') ui.warn(_("abort: error: %s\n") % reason) elif (util.safehasattr(inst, "args") and inst.args and inst.args[0] == errno.EPIPE):
--- a/mercurial/namespaces.py Sat Feb 28 01:12:54 2015 -0500 +++ b/mercurial/namespaces.py Mon Mar 02 01:20:14 2015 -0600 @@ -41,7 +41,8 @@ # i18n: column positioning for "hg log" logfmt=_("tag: %s\n"), listnames=tagnames, - namemap=tagnamemap, nodemap=tagnodemap) + namemap=tagnamemap, nodemap=tagnodemap, + deprecated=set(['tip'])) self.addnamespace(n) bnames = lambda repo: repo.branchmap().keys() @@ -126,11 +127,13 @@ dictionary) 'namemap': function that takes a name and returns a list of nodes 'nodemap': function that takes a node and returns a list of names + 'deprecated': set of names to be masked for ordinary use """ def __init__(self, name, templatename=None, logname=None, colorname=None, - logfmt=None, listnames=None, namemap=None, nodemap=None): + logfmt=None, listnames=None, namemap=None, nodemap=None, + deprecated=None): """create a namespace name: the namespace to be registered (in plural form) @@ -144,6 +147,7 @@ listnames: function to list all names namemap: function that inputs a node, output name(s) nodemap: function that inputs a name, output node(s) + deprecated: set of names to be masked for ordinary use """ self.name = name @@ -168,6 +172,11 @@ # i18n: column positioning for "hg log" self.logfmt = ("%s:" % self.logname).ljust(13) + "%s\n" + if deprecated is None: + self.deprecated = set() + else: + self.deprecated = deprecated + def names(self, repo, node): """method that returns a (sorted) list of names in a namespace that match a given node"""
--- a/mercurial/repoview.py Sat Feb 28 01:12:54 2015 -0500 +++ b/mercurial/repoview.py Mon Mar 02 01:20:14 2015 -0600 @@ -274,7 +274,8 @@ unfichangelog = unfi.changelog revs = filterrevs(unfi, self.filtername) cl = self._clcache - newkey = (len(unfichangelog), unfichangelog.tip(), hash(revs)) + newkey = (len(unfichangelog), unfichangelog.tip(), hash(revs), + unfichangelog._delayed) if cl is not None: # we need to check curkey too for some obscure reason. # MQ test show a corruption of the underlying repo (in _clcache) @@ -282,7 +283,7 @@ oldfilter = cl.filteredrevs try: cl.filteredrevs = () # disable filtering for tip - curkey = (len(cl), cl.tip(), hash(oldfilter)) + curkey = (len(cl), cl.tip(), hash(oldfilter), cl._delayed) finally: cl.filteredrevs = oldfilter if newkey != self._clcachekey or newkey != curkey:
--- a/mercurial/revset.py Sat Feb 28 01:12:54 2015 -0500 +++ b/mercurial/revset.py Mon Mar 02 01:20:14 2015 -0600 @@ -527,7 +527,7 @@ import branchmap urepo = repo.unfiltered() ucl = urepo.changelog - getbi = branchmap.revbranchcache(urepo).branchinfo + getbi = branchmap.revbranchcache(urepo, readonly=True).branchinfo try: b = getstring(x, '') @@ -1277,7 +1277,8 @@ names = set() for ns in namespaces: for name in ns.listnames(repo): - names.update(repo[n].rev() for n in ns.nodes(repo, name)) + if name not in ns.deprecated: + names.update(repo[n].rev() for n in ns.nodes(repo, name)) names -= set([node.nullrev]) return subset & names
--- a/mercurial/templatekw.py Sat Feb 28 01:12:54 2015 -0500 +++ b/mercurial/templatekw.py Mon Mar 02 01:20:14 2015 -0600 @@ -199,10 +199,10 @@ """ repo = args['ctx']._repo bookmarks = args['ctx'].bookmarks() - hybrid = showlist('bookmark', bookmarks, **args) - for value in hybrid.values: - value['current'] = repo._bookmarkcurrent - return hybrid + current = repo._bookmarkcurrent + c = [{'bookmark': x, 'current': current} for x in bookmarks] + f = _showlist('bookmark', bookmarks, **args) + return _hybrid(f, c, lambda x: x['bookmark']) def showchildren(**args): """:children: List of strings. The children of the changeset."""
--- a/mercurial/util.py Sat Feb 28 01:12:54 2015 -0500 +++ b/mercurial/util.py Mon Mar 02 01:20:14 2015 -0600 @@ -720,7 +720,9 @@ "copy a file, preserving mode and atime/mtime" if os.path.lexists(dest): unlink(dest) - if hardlink: + # hardlinks are problematic on CIFS, quietly ignore this flag + # until we find a way to work around it cleanly (issue4546) + if False or hardlink: try: oslink(src, dest) return
--- a/tests/test-command-template.t Sat Feb 28 01:12:54 2015 -0500 +++ b/tests/test-command-template.t Mon Mar 02 01:20:14 2015 -0600 @@ -2381,6 +2381,11 @@ 2 1 0 + $ hg book -r1 baz + $ hg log --template "{rev} {join(bookmarks, ' ')}\n" + 2 bar foo + 1 baz + 0 Test stringify on sub expressions
--- a/tests/test-extdiff.t Sat Feb 28 01:12:54 2015 -0500 +++ b/tests/test-extdiff.t Mon Mar 02 01:20:14 2015 -0600 @@ -179,7 +179,7 @@ TODO #else $ hg --debug odd | grep '^running' - running "*/bin/echo --foo='sp ace' 'sp ace' --bar='sp ace' 'sp ace'" in * (glob) + running "*/echo --foo='sp ace' 'sp ace' --bar='sp ace' 'sp ace'" in * (glob) #endif Empty argument must be quoted
--- a/tests/test-largefiles-misc.t Sat Feb 28 01:12:54 2015 -0500 +++ b/tests/test-largefiles-misc.t Mon Mar 02 01:20:14 2015 -0600 @@ -915,6 +915,77 @@ $ "$TESTDIR/killdaemons.py" $DAEMON_PIDS #endif +Test overridden functions work correctly even for repos disabling +largefiles (issue4547) + + $ hg showconfig extensions | grep largefiles + extensions.largefiles=! + +(test updating implied by clone) + + $ hg init enabled-but-no-largefiles + $ echo normal1 > enabled-but-no-largefiles/normal1 + $ hg -R enabled-but-no-largefiles add enabled-but-no-largefiles/normal1 + $ hg -R enabled-but-no-largefiles commit -m '#0@enabled-but-no-largefiles' + Invoking status precommit hook + A normal1 + $ cat >> enabled-but-no-largefiles/.hg/hgrc <<EOF + > [extensions] + > # enable locally + > largefiles= + > EOF + $ hg clone -q enabled-but-no-largefiles no-largefiles + +(test rebasing implied by pull: precommit while rebasing unexpectedly +shows "normal3" as "?", because lfdirstate isn't yet written out at +that time) + + $ echo normal2 > enabled-but-no-largefiles/normal2 + $ hg -R enabled-but-no-largefiles add enabled-but-no-largefiles/normal2 + $ hg -R enabled-but-no-largefiles commit -m '#1@enabled-but-no-largefiles' + Invoking status precommit hook + A normal2 + + $ echo normal3 > no-largefiles/normal3 + $ hg -R no-largefiles add no-largefiles/normal3 + $ hg -R no-largefiles commit -m '#1@no-largefiles' + Invoking status precommit hook + A normal3 + + $ hg -R no-largefiles -q pull --rebase + Invoking status precommit hook + ? normal3 + +(test reverting) + + $ hg init subrepo-root + $ cat >> subrepo-root/.hg/hgrc <<EOF + > [extensions] + > # enable locally + > largefiles= + > EOF + $ echo large > subrepo-root/large + $ hg -R subrepo-root add --large subrepo-root/large + $ hg clone -q no-largefiles subrepo-root/no-largefiles + $ cat > subrepo-root/.hgsub <<EOF + > no-largefiles = no-largefiles + > EOF + $ hg -R subrepo-root add subrepo-root/.hgsub + $ hg -R subrepo-root commit -m '#0' + Invoking status precommit hook + A .hgsub + A large + ? .hgsubstate + $ echo dirty >> subrepo-root/large + $ echo dirty >> subrepo-root/no-largefiles/normal1 + $ hg -R subrepo-root status -S + M large + M no-largefiles/normal1 + $ hg -R subrepo-root revert --all + reverting subrepo-root/.hglf/large (glob) + reverting subrepo no-largefiles + reverting subrepo-root/no-largefiles/normal1 (glob) + $ cd ..