branchcache: move loading of branch names and nodes into it's own function
This will help me in implementing lazy loading of the branchcache in upcoming
patches.
Differential Revision: https://phab.mercurial-scm.org/D6023
--- a/mercurial/branchmap.py Wed Feb 20 15:02:59 2019 -0500
+++ b/mercurial/branchmap.py Mon Feb 25 16:49:01 2019 +0300
@@ -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"""