# HG changeset patch # User Pierre-Yves David # Date 1356137082 -3600 # Node ID 79db6d40bcedd40c7f27c009459dfe7820893802 # Parent 6fb3b8c61775ca53cdd1c69505295fb51c265883 branchmap: store branchcache in a dedicated object Value and key of branchcache would benefit from being hold by the same object. Moreover some logic (update, write, validation) could be move on such object. The creation of this object is the first step toward this move. The result will clarify branchcache related code and hide most of the detail in the class itself. This encapsulation will greatly helps implementation of branchcache for filtered view of the repo. diff -r 6fb3b8c61775 -r 79db6d40bced mercurial/branchmap.py --- a/mercurial/branchmap.py Sat Dec 22 01:34:23 2012 +0100 +++ b/mercurial/branchmap.py Sat Dec 22 01:44:42 2012 +0100 @@ -9,13 +9,13 @@ import encoding def read(repo): - partial = {} + partial = branchcache() try: f = repo.opener("cache/branchheads") lines = f.read().split('\n') f.close() except (IOError, OSError): - return {}, nullid, nullrev + return branchcache(), nullid, nullrev try: last, lrev = lines.pop(0).split(" ", 1) @@ -37,7 +37,7 @@ except Exception, inst: if repo.ui.debugflag: repo.ui.warn(str(inst), '\n') - partial, last, lrev = {}, nullid, nullrev + partial, last, lrev = branchcache(), nullid, nullrev return partial, last, lrev def write(repo, branches, tip, tiprev): @@ -143,3 +143,7 @@ update(repo, partial, ctxgen) repo._branchcache = partial repo._branchcachetip = tip + +class branchcache(dict): + """A dict like object that hold branches heads cache""" + diff -r 6fb3b8c61775 -r 79db6d40bced mercurial/discovery.py --- a/mercurial/discovery.py Sat Dec 22 01:34:23 2012 +0100 +++ b/mercurial/discovery.py Sat Dec 22 01:44:42 2012 +0100 @@ -193,8 +193,9 @@ # D. Update newmap with outgoing changes. # This will possibly add new heads and remove existing ones. - newmap = dict((branch, heads[1]) for branch, heads in headssum.iteritems() - if heads[0] is not None) + newmap = branchmap.branchcache((branch, heads[1]) + for branch, heads in headssum.iteritems() + if heads[0] is not None) branchmap.update(repo, newmap, missingctx) for branch, newheads in newmap.iteritems(): headssum[branch][1][:] = newheads diff -r 6fb3b8c61775 -r 79db6d40bced mercurial/localrepo.py --- a/mercurial/localrepo.py Sat Dec 22 01:34:23 2012 +0100 +++ b/mercurial/localrepo.py Sat Dec 22 01:44:42 2012 +0100 @@ -666,7 +666,7 @@ '''returns a dictionary {branch: [branchheads]}''' if self.changelog.filteredrevs: # some changeset are excluded we can't use the cache - bmap = {} + bmap = branchmap.branchcache() branchmap.update(self, bmap, (self[r] for r in self)) return bmap else: @@ -2495,7 +2495,7 @@ if rbheads: rtiprev = max((int(self.changelog.rev(node)) for node in rbheads)) - self._branchcache = rbranchmap + self._branchcache = branchmap.branchcache(rbranchmap) rtipnode = self._branchcachetip = self[rtiprev].node() branchmap.write(self, self._branchcache, rtipnode, rtiprev) self.invalidate()