D6023: branchcache: move loading of branch names and nodes into it's own function

pulkit (Pulkit Goyal) phabricator at mercurial-scm.org
Mon Feb 25 10:07:19 EST 2019


pulkit created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  This will help me in implementing lazy loading of the branchcache in upcoming
  patches.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D6023

AFFECTED FILES
  mercurial/branchmap.py

CHANGE DETAILS

diff --git a/mercurial/branchmap.py b/mercurial/branchmap.py
--- a/mercurial/branchmap.py
+++ b/mercurial/branchmap.py
@@ -179,23 +179,7 @@
             if not bcache.validfor(repo):
                 # invalidate the cache
                 raise ValueError(r'tip differs')
-            cl = repo.changelog
-            for line in lineiter:
-                line = line.rstrip('\n')
-                if not line:
-                    continue
-                node, state, label = line.split(" ", 2)
-                if state not in 'oc':
-                    raise ValueError(r'invalid branch state')
-                label = encoding.tolocal(label.strip())
-                node = bin(node)
-                if not cl.hasnode(node):
-                    raise ValueError(
-                        r'node %s does not exist' % pycompat.sysstr(hex(node)))
-                bcache.setdefault(label, []).append(node)
-                if state == 'c':
-                    bcache._closednodes.add(node)
-
+            bcache.load(repo, f)
         except (IOError, OSError):
             return None
 
@@ -214,6 +198,26 @@
 
         return bcache
 
+    def load(self, repo, f):
+        """ fully loads the branchcache by reading from the file f """
+        cl = repo.changelog
+        lineiter = iter(f)
+        for line in lineiter:
+            line = line.rstrip('\n')
+            if not line:
+                continue
+            node, state, label = line.split(" ", 2)
+            if state not in 'oc':
+                raise ValueError(r'invalid branch state')
+            label = encoding.tolocal(label.strip())
+            node = bin(node)
+            if not cl.hasnode(node):
+                raise ValueError(
+                    r'node %s does not exist' % pycompat.sysstr(hex(node)))
+            self.setdefault(label, []).append(node)
+            if state == 'c':
+                self._closednodes.add(node)
+
     @staticmethod
     def _filename(repo):
         """name of a branchcache file for a given repo or repoview"""



To: pulkit, #hg-reviewers
Cc: mercurial-devel


More information about the Mercurial-devel mailing list