diff -r b181a650a886 -r db0095c83344 mercurial/branchmap.py --- a/mercurial/branchmap.py Mon Jul 18 22:21:42 2016 +0200 +++ b/mercurial/branchmap.py Mon Jul 18 22:22:38 2016 +0200 @@ -402,10 +402,9 @@ if rev == nullrev: return changelog.branchinfo(rev) - # if requested rev is missing, add and populate all missing revs + # if requested rev isn't allocated, grow and cache the rev info if len(self._rbcrevs) < rbcrevidx + _rbcrecsize: - self._rbcrevs.extend('\0' * (len(changelog) * _rbcrecsize - - len(self._rbcrevs))) + return self._branchinfo(rev) # fast path: extract data from cache, use it if node is matching reponode = changelog.node(rev)[:_rbcnodelen] @@ -452,6 +451,10 @@ rbcrevidx = rev * _rbcrecsize rec = array('c') rec.fromstring(pack(_rbcrecfmt, node, branchidx)) + if len(self._rbcrevs) < rbcrevidx + _rbcrecsize: + self._rbcrevs.extend('\0' * + (len(self._repo.changelog) * _rbcrecsize - + len(self._rbcrevs))) self._rbcrevs[rbcrevidx:rbcrevidx + _rbcrecsize] = rec self._rbcrevslen = min(self._rbcrevslen, rev)