diff -r 59cc09240afb -r 77fd1fb538cd mercurial/branchmap.py --- a/mercurial/branchmap.py Tue Feb 10 19:53:48 2015 -0800 +++ b/mercurial/branchmap.py Tue Feb 10 19:57:51 2015 -0800 @@ -98,7 +98,7 @@ partial.write(repo) if repo._revbranchcache is not None: - repo._revbranchcache.write(repo) + repo._revbranchcache.write() assert partial.validfor(repo), filtername repo._branchcaches[repo.filtername] = partial @@ -239,11 +239,9 @@ cl = repo.changelog # collect new branch entries newbranches = {} - urepo = repo.unfiltered() - ucl = urepo.changelog getbranchinfo = repo.revbranchcache().branchinfo for r in revgen: - branch, closesbranch = getbranchinfo(ucl, r) + branch, closesbranch = getbranchinfo(r) newbranches.setdefault(branch, []).append(r) if closesbranch: self._closednodes.add(cl.node(r)) @@ -331,6 +329,7 @@ def __init__(self, repo, readonly=True): assert repo.filtername is None + self._repo = repo self._names = [] # branch names in local encoding with static index self._rbcrevs = array('c') # structs of type _rbcrecfmt self._rbcsnameslen = 0 @@ -360,9 +359,10 @@ self._rbcnamescount = len(self._names) # number of good names on disk self._namesreverse = dict((b, r) for r, b in enumerate(self._names)) - def branchinfo(self, changelog, rev): + def branchinfo(self, rev): """Return branch name and close flag for rev, using and updating persistent cache.""" + changelog = self._repo.changelog rbcrevidx = rev * _rbcrecsize # if requested rev is missing, add and populate all missing revs @@ -371,7 +371,7 @@ self._rbcrevs.extend('\0' * (len(changelog) * _rbcrecsize - len(self._rbcrevs))) for r in xrange(first, len(changelog)): - self._branchinfo(changelog, r) + self._branchinfo(r) # fast path: extract data from cache, use it if node is matching reponode = changelog.node(rev)[:_rbcnodelen] @@ -384,10 +384,11 @@ return self._names[branchidx], close # fall back to slow path and make sure it will be written to disk self._rbcrevslen = min(self._rbcrevslen, rev) - return self._branchinfo(changelog, rev) + return self._branchinfo(rev) - def _branchinfo(self, changelog, rev): + def _branchinfo(self, rev): """Retrieve branch info from changelog and update _rbcrevs""" + changelog = self._repo.changelog b, close = changelog.branchinfo(rev) if b in self._namesreverse: branchidx = self._namesreverse[b] @@ -404,8 +405,9 @@ self._rbcrevs[rbcrevidx:rbcrevidx + _rbcrecsize] = rec return b, close - def write(self, repo): + def write(self): """Save branch cache if it is dirty.""" + repo = self._repo if self._rbcnamescount < len(self._names): try: if self._rbcnamescount != 0: