changeset 18118:e70ff1e599f4

branchmap: extract read logic from repo
author Pierre-Yves David <pierre-yves.david@logilab.fr>
date Wed, 19 Dec 2012 14:46:57 +0100
parents 526e7ec5c96e
children 5264464b5f68
files mercurial/branchmap.py mercurial/localrepo.py
diffstat 2 files changed, 35 insertions(+), 36 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/branchmap.py	Thu Dec 20 13:37:37 2012 +0100
+++ b/mercurial/branchmap.py	Wed Dec 19 14:46:57 2012 +0100
@@ -5,9 +5,41 @@
 # 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
+from node import bin, hex, nullid, nullrev
 import encoding
 
+def read(repo):
+    partial = {}
+    try:
+        f = repo.opener("cache/branchheads")
+        lines = f.read().split('\n')
+        f.close()
+    except (IOError, OSError):
+        return {}, nullid, nullrev
+
+    try:
+        last, lrev = lines.pop(0).split(" ", 1)
+        last, lrev = bin(last), int(lrev)
+        if lrev >= len(repo) or repo[lrev].node() != last:
+            # invalidate the cache
+            raise ValueError('invalidating branch cache (tip differs)')
+        for l in lines:
+            if not l:
+                continue
+            node, label = l.split(" ", 1)
+            label = encoding.tolocal(label.strip())
+            if not node in repo:
+                raise ValueError('invalidating branch cache because node '+
+                                 '%s does not exist' % node)
+            partial.setdefault(label, []).append(bin(node))
+    except KeyboardInterrupt:
+        raise
+    except Exception, inst:
+        if repo.ui.debugflag:
+            repo.ui.warn(str(inst), '\n')
+        partial, last, lrev = {}, nullid, nullrev
+    return partial, last, lrev
+
 def write(repo, branches, tip, tiprev):
     try:
         f = repo.opener("cache/branchheads", "w", atomictemp=True)
--- a/mercurial/localrepo.py	Thu Dec 20 13:37:37 2012 +0100
+++ b/mercurial/localrepo.py	Wed Dec 19 14:46:57 2012 +0100
@@ -4,7 +4,7 @@
 #
 # 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 bin, hex, nullid, nullrev, short
+from node import hex, nullid, short
 from i18n import _
 import peer, changegroup, subrepo, discovery, pushkey, obsolete, repoview
 import changelog, dirstate, filelog, manifest, context, bookmarks, phases
@@ -671,7 +671,7 @@
 
         oldtip = self._branchcachetip
         if oldtip is None or oldtip not in cl.nodemap:
-            partial, last, lrev = self._readbranchcache()
+            partial, last, lrev = branchmap.read(self)
         else:
             lrev = cl.rev(oldtip)
             partial = self._branchcache
@@ -731,39 +731,6 @@
         return bt
 
     @unfilteredmethod # Until we get a smarter cache management
-    def _readbranchcache(self):
-        partial = {}
-        try:
-            f = self.opener("cache/branchheads")
-            lines = f.read().split('\n')
-            f.close()
-        except (IOError, OSError):
-            return {}, nullid, nullrev
-
-        try:
-            last, lrev = lines.pop(0).split(" ", 1)
-            last, lrev = bin(last), int(lrev)
-            if lrev >= len(self) or self[lrev].node() != last:
-                # invalidate the cache
-                raise ValueError('invalidating branch cache (tip differs)')
-            for l in lines:
-                if not l:
-                    continue
-                node, label = l.split(" ", 1)
-                label = encoding.tolocal(label.strip())
-                if not node in self:
-                    raise ValueError('invalidating branch cache because node '+
-                                     '%s does not exist' % node)
-                partial.setdefault(label, []).append(bin(node))
-        except KeyboardInterrupt:
-            raise
-        except Exception, inst:
-            if self.ui.debugflag:
-                self.ui.warn(str(inst), '\n')
-            partial, last, lrev = {}, nullid, nullrev
-        return partial, last, lrev
-
-    @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