Mercurial > public > mercurial-scm > hg-stable
diff mercurial/branchmap.py @ 18118:e70ff1e599f4
branchmap: extract read logic from repo
author | Pierre-Yves David <pierre-yves.david@logilab.fr> |
---|---|
date | Wed, 19 Dec 2012 14:46:57 +0100 |
parents | 526e7ec5c96e |
children | 88990d3e3d75 |
line wrap: on
line diff
--- a/mercurial/branchmap.py Thu Dec 20 13:37:37 2012 +0100 +++ b/mercurial/branchmap.py Wed Dec 19 14:46:57 2012 +0100 @@ -5,9 +5,41 @@ # This software may be used and distributed according to the terms of the # GNU General Public License version 2 or any later version. -from node import hex +from node import bin, hex, nullid, nullrev import encoding +def read(repo): + partial = {} + try: + f = repo.opener("cache/branchheads") + lines = f.read().split('\n') + f.close() + except (IOError, OSError): + return {}, nullid, nullrev + + try: + last, lrev = lines.pop(0).split(" ", 1) + last, lrev = bin(last), int(lrev) + if lrev >= len(repo) or repo[lrev].node() != last: + # invalidate the cache + raise ValueError('invalidating branch cache (tip differs)') + for l in lines: + if not l: + continue + node, label = l.split(" ", 1) + label = encoding.tolocal(label.strip()) + if not node in repo: + raise ValueError('invalidating branch cache because node '+ + '%s does not exist' % node) + partial.setdefault(label, []).append(bin(node)) + except KeyboardInterrupt: + raise + except Exception, inst: + if repo.ui.debugflag: + repo.ui.warn(str(inst), '\n') + partial, last, lrev = {}, nullid, nullrev + return partial, last, lrev + def write(repo, branches, tip, tiprev): try: f = repo.opener("cache/branchheads", "w", atomictemp=True)