branchmap: extract write logic from localrepo
authorPierre-Yves David <pierre-yves.david@ens-lyon.org>
Thu, 20 Dec 2012 13:37:37 +0100
changeset 18117 526e7ec5c96e
parent 18116 bcee63733aad
child 18118 e70ff1e599f4
branchmap: extract write logic from localrepo
mercurial/branchmap.py
mercurial/localrepo.py
--- a/mercurial/branchmap.py	Wed Dec 19 14:43:33 2012 +0100
+++ b/mercurial/branchmap.py	Thu Dec 20 13:37:37 2012 +0100
@@ -4,3 +4,17 @@
 #
 # This software may be used and distributed according to the terms of the
 # GNU General Public License version 2 or any later version.
+
+from node import hex
+import encoding
+
+def write(repo, branches, tip, tiprev):
+    try:
+        f = repo.opener("cache/branchheads", "w", atomictemp=True)
+        f.write("%s %s\n" % (hex(tip), tiprev))
+        for label, nodes in branches.iteritems():
+            for node in nodes:
+                f.write("%s %s\n" % (hex(node), encoding.fromlocal(label)))
+        f.close()
+    except (IOError, OSError):
+        pass
--- a/mercurial/localrepo.py	Wed Dec 19 14:43:33 2012 +0100
+++ b/mercurial/localrepo.py	Thu Dec 20 13:37:37 2012 +0100
@@ -15,6 +15,7 @@
 import tags as tagsmod
 from lock import release
 import weakref, errno, os, time, inspect
+import branchmap
 propertycache = util.propertycache
 filecache = scmutil.filecache
 
@@ -682,7 +683,7 @@
         if lrev < catip:
             ctxgen = (self[r] for r in cl.revs(lrev + 1, catip))
             self._updatebranchcache(partial, ctxgen)
-            self._writebranchcache(partial, cl.node(catip), catip)
+            branchmap.write(self, partial, cl.node(catip), catip)
             lrev = catip
         # If cacheable tip were lower than actual tip, we need to update the
         # cache up to tip. This update (from cacheable to actual tip) is not
@@ -763,18 +764,6 @@
         return partial, last, lrev
 
     @unfilteredmethod # Until we get a smarter cache management
-    def _writebranchcache(self, branches, tip, tiprev):
-        try:
-            f = self.opener("cache/branchheads", "w", atomictemp=True)
-            f.write("%s %s\n" % (hex(tip), tiprev))
-            for label, nodes in branches.iteritems():
-                for node in nodes:
-                    f.write("%s %s\n" % (hex(node), encoding.fromlocal(label)))
-            f.close()
-        except (IOError, OSError):
-            pass
-
-    @unfilteredmethod # Until we get a smarter cache management
     def _updatebranchcache(self, partial, ctxgen):
         """Given a branchhead cache, partial, that may have extra nodes or be
         missing heads, and a generator of nodes that are at least a superset of
@@ -1578,8 +1567,8 @@
             ctxgen = (self[node] for node in newheadnodes
                       if self.changelog.hasnode(node))
             self._updatebranchcache(self._branchcache, ctxgen)
-            self._writebranchcache(self._branchcache, self.changelog.tip(),
-                                   tiprev)
+            branchmap.write(self, self._branchcache, self.changelog.tip(),
+                            tiprev)
 
         # Ensure the persistent tag cache is updated.  Doing it now
         # means that the tag cache only has to worry about destroyed
@@ -2634,7 +2623,7 @@
                 if rbheads:
                     rtiprev = max((int(self.changelog.rev(node))
                             for node in rbheads))
-                    self._writebranchcache(self.branchcache,
+                    branchmap.write(self, self.branchcache,
                             self[rtiprev].node(), rtiprev)
             self.invalidate()
             return len(self.heads()) + 1