# HG changeset patch # User Martijn Pieters # Date 1534191734 -3600 # Node ID 2a4bfbb5211171bdd5f084db0bfb3016d5690425 # Parent 222aba76601543db5267f77c75ac697c618f96b9 branchmap: load branchmap as an iterable This avoids reading all the file into memory if the cache turns out to be invalid. Differential Revision: https://phab.mercurial-scm.org/D4281 diff -r 222aba766015 -r 2a4bfbb52111 mercurial/branchmap.py --- a/mercurial/branchmap.py Mon Aug 13 20:31:01 2018 +0100 +++ b/mercurial/branchmap.py Mon Aug 13 21:22:14 2018 +0100 @@ -40,13 +40,7 @@ def read(repo): try: f = repo.cachevfs(_filename(repo)) - lines = f.read().split('\n') - f.close() - except (IOError, OSError): - return None - - try: - cachekey = lines.pop(0).split(" ", 2) + cachekey = next(f).split(" ", 2) last, lrev = cachekey[:2] last, lrev = bin(last), int(lrev) filteredhash = None @@ -58,7 +52,7 @@ # invalidate the cache raise ValueError(r'tip differs') cl = repo.changelog - for l in lines: + for l in f: if not l: continue node, state, label = l.split(" ", 2) @@ -72,6 +66,10 @@ partial.setdefault(label, []).append(node) if state == 'c': partial._closednodes.add(node) + + except (IOError, OSError): + return None + except Exception as inst: if repo.ui.debugflag: msg = 'invalid branchheads cache'