# HG changeset patch # User Alexis S. L. Carvalho # Date 1161657176 10800 # Node ID 23cffef5d424729a47d1d2cd2de5879099abc115 # Parent c3345b0f2fcdb3bb8cf3a6bf572159ec7e190a90 Split branchtags into two additional functions. This makes it easier to override only parts of the cache saving process. diff -r c3345b0f2fcd -r 23cffef5d424 mercurial/localrepo.py --- a/mercurial/localrepo.py Mon Oct 23 14:56:51 2006 +0200 +++ b/mercurial/localrepo.py Mon Oct 23 23:32:56 2006 -0300 @@ -295,6 +295,18 @@ self.branchcache = {} # avoid recursion in changectx + partial, last, lrev = self._readbranchcache() + + tiprev = self.changelog.count() - 1 + if lrev != tiprev: + self._updatebranchcache(partial, lrev+1, tiprev+1) + self._writebranchcache(partial, self.changelog.tip(), tiprev) + + self.branchcache = partial + return self.branchcache + + def _readbranchcache(self): + partial = {} try: f = self.opener("branches.cache") last, lrev = f.readline().rstrip().split(" ", 1) @@ -303,34 +315,30 @@ self.changelog.node(lrev) == last): # sanity check for l in f: node, label = l.rstrip().split(" ", 1) - self.branchcache[label] = bin(node) + partial[label] = bin(node) else: # invalidate the cache last, lrev = nullid, -1 f.close() except IOError: last, lrev = nullid, -1 + return partial, last, lrev - tip = self.changelog.count() - 1 - if lrev != tip: - for r in xrange(lrev + 1, tip + 1): - c = self.changectx(r) - b = c.branch() - if b: - self.branchcache[b] = c.node() - self._writebranchcache() - - return self.branchcache - - def _writebranchcache(self): + def _writebranchcache(self, branches, tip, tiprev): try: f = self.opener("branches.cache", "w") - t = self.changelog.tip() - f.write("%s %s\n" % (hex(t), self.changelog.count() - 1)) - for label, node in self.branchcache.iteritems(): + f.write("%s %s\n" % (hex(tip), tiprev)) + for label, node in branches.iteritems(): f.write("%s %s\n" % (hex(node), label)) except IOError: pass + def _updatebranchcache(self, partial, start, end): + for r in xrange(start, end): + c = self.changectx(r) + b = c.branch() + if b: + partial[b] = c.node() + def lookup(self, key): if key == '.': key = self.dirstate.parents()[0]