Patchwork [06,of,10,V2] branchmap: extract write logic from localrepo

login
register
mail settings
Submitter Pierre-Yves David
Date Dec. 20, 2012, 2:08 p.m.
Message ID <0944e637aec93c80e003.1356012516@crater2.logilab.fr>
Download mbox | patch
Permalink /patch/206/
State Accepted
Commit 526e7ec5c96efc69d043cfc2de7db6c1fc04233e
Headers show

Comments

Pierre-Yves David - Dec. 20, 2012, 2:08 p.m.
# HG changeset patch
# User Pierre-Yves David <pierre-yves.david at ens-lyon.org>
# Date 1356007057 -3600
# Node ID 0944e637aec93c80e003d477258f8914c722b9de
# Parent  a43f6900d52ce07f908fc49dcf96549a0db8cf07
branchmap: extract write logic from localrepo

Patch

diff --git a/mercurial/branchmap.py b/mercurial/branchmap.py
--- a/mercurial/branchmap.py
+++ b/mercurial/branchmap.py
@@ -2,5 +2,19 @@ 
 #
 # Copyright 2005-2007 Matt Mackall <mpm at selenic.com>
 #
 # 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
diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
--- a/mercurial/localrepo.py
+++ b/mercurial/localrepo.py
@@ -13,10 +13,11 @@  import scmutil, util, extensions, hook, 
 import match as matchmod
 import merge as mergemod
 import tags as tagsmod
 from lock import release
 import weakref, errno, os, time, inspect
+import branchmap
 propertycache = util.propertycache
 filecache = scmutil.filecache
 
 class repofilecache(filecache):
     """All filecache usage on repo are done for logic that should be unfiltered
@@ -663,11 +664,11 @@  class localrepository(object):
         # if lrev >  catip: we have uncachable element in `partial` can't write
         #                   on disk
         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
         # written to disk since it's not cacheable.
         tiprev = len(self) - 1
@@ -744,22 +745,10 @@  class localrepository(object):
                 self.ui.warn(str(inst), '\n')
             partial, last, lrev = {}, nullid, nullrev
         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
         heads missing, this function updates partial to be correct.
         """
@@ -1553,12 +1542,12 @@  class localrepository(object):
         if newheadnodes:
             tiprev = len(self) - 1
             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
         # heads immediately after a strip/rollback.  That in turn
         # guarantees that "cachetip == currenttip" (comparing both rev
@@ -2608,11 +2597,11 @@  class localrepository(object):
 
                 self.branchcache = rbranchmap
                 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
         finally:
             lock.release()