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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
+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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 ..
 
 
--- a/tests/test-revset.t	Sat Feb 28 01:12:54 2015 -0500
+++ b/tests/test-revset.t	Mon Mar 02 01:20:14 2015 -0600
@@ -791,7 +791,6 @@
   6
   $ log 'named("tags")'
   6
-  9
 
 issue2437