diff -r 46ed5226503a -r b9026ba002f6 mercurial/localrepo.py --- a/mercurial/localrepo.py Tue Jan 01 21:27:13 2013 +0100 +++ b/mercurial/localrepo.py Mon Dec 24 03:21:15 2012 +0100 @@ -229,7 +229,7 @@ self._writerequirements() - self._branchcache = None + self._branchcaches = {} self.filterpats = {} self._datafilters = {} self._transref = self._lockref = self._wlockref = None @@ -664,14 +664,10 @@ def branchmap(self): '''returns a dictionary {branch: [branchheads]}''' - if self.changelog.filteredrevs: - # some changeset are excluded we can't use the cache - bmap = branchmap.branchcache() - bmap.update(self, (self[r] for r in self)) - return bmap - else: - branchmap.updatecache(self) - return self._branchcache + if self.filtername and not self.changelog.filteredrevs: + return self.unfiltered().branchmap() + branchmap.updatecache(self) + return self._branchcaches[self.filtername] def _branchtip(self, heads): @@ -978,7 +974,7 @@ # can't use delattr on proxy del self.__dict__['_tagscache'] - self.unfiltered()._branchcache = None # in UTF-8 + self.unfiltered()._branchcaches.clear() self.invalidatevolatilesets() def invalidatevolatilesets(self): @@ -1437,7 +1433,7 @@ if newheadnodes: ctxgen = (self[node] for node in newheadnodes if self.changelog.hasnode(node)) - cache = self._branchcache + cache = self._branchcaches[None] cache.update(self, ctxgen) cache.write(self) @@ -2500,8 +2496,8 @@ cache = branchmap.branchcache(rbranchmap, self[rtiprev].node(), rtiprev) - self._branchcache = cache - cache.write(self) + self._branchcaches[None] = cache + cache.write(self.unfiltered()) self.invalidate() return len(self.heads()) + 1 finally: