diff --git a/hgext/mq.py b/hgext/mq.py --- a/hgext/mq.py +++ b/hgext/mq.py @@ -2603,7 +2603,8 @@ def reposetup(ui, repo): start = lrev + 1 if start < qbase: # update the cache (excluding the patches) and save it - self._updatebranchcache(partial, lrev + 1, qbase) + ctxgen = (self[r] for r in xrange(lrev + 1, qbase)) + self._updatebranchcache(partial, ctxgen) self._writebranchcache(partial, cl.node(qbase - 1), qbase - 1) start = qbase # if start = qbase, the cache is as updated as it should be. @@ -2611,7 +2612,8 @@ def reposetup(ui, repo): # we might as well use it, but we won't save it. # update the cache up to the tip - self._updatebranchcache(partial, start, len(cl)) + ctxgen = (self[r] for r in xrange(start, len(cl))) + self._updatebranchcache(partial, ctxgen) return partial diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py --- a/mercurial/localrepo.py +++ b/mercurial/localrepo.py @@ -320,7 +320,8 @@ class localrepository(repo.repository): # TODO: rename this function? tiprev = len(self) - 1 if lrev != tiprev: - self._updatebranchcache(partial, lrev + 1, tiprev + 1) + ctxgen = (self[r] for r in xrange(lrev + 1, tiprev + 1)) + self._updatebranchcache(partial, ctxgen) self._writebranchcache(partial, self.changelog.tip(), tiprev) return partial @@ -398,11 +399,10 @@ class localrepository(repo.repository): except (IOError, OSError): pass - def _updatebranchcache(self, partial, start, end): + def _updatebranchcache(self, partial, ctxgen): # collect new branch entries newbranches = {} - for r in xrange(start, end): - c = self[r] + for c in ctxgen: newbranches.setdefault(c.branch(), []).append(c.node()) # if older branchheads are reachable from new ones, they aren't # really branchheads. Note checking parents is insufficient: