Mercurial > public > mercurial-scm > hg
comparison mercurial/hbisect.py @ 35130:8287df8b7be5
hbisect: use a defaultdict to avoid large allocations for a large changelogs
We can avoid a SPACE(len(changelog)) allocation by using a defaultdict.
Test Plan:
python run-tests.py test-bisect*
Differential Revision: https://phab.mercurial-scm.org/D1499
author | David Soria Parra <davidsp@fb.com> |
---|---|
date | Thu, 23 Nov 2017 14:13:14 -0800 |
parents | ec25c8275cfa |
children | 80da79b6fbe4 |
comparison
equal
deleted
inserted
replaced
35129:ec25c8275cfa | 35130:8287df8b7be5 |
---|---|
36 clparents = changelog.parentrevs | 36 clparents = changelog.parentrevs |
37 skip = set([changelog.rev(n) for n in state['skip']]) | 37 skip = set([changelog.rev(n) for n in state['skip']]) |
38 | 38 |
39 def buildancestors(bad, good): | 39 def buildancestors(bad, good): |
40 badrev = min([changelog.rev(n) for n in bad]) | 40 badrev = min([changelog.rev(n) for n in bad]) |
41 ancestors = [None] * (len(changelog) + 1) | 41 ancestors = collections.defaultdict(lambda: None) |
42 for rev in repo.revs("descendants(%ln) - ancestors(%ln)", good, good): | 42 for rev in repo.revs("descendants(%ln) - ancestors(%ln)", good, good): |
43 ancestors[rev] = [] | 43 ancestors[rev] = [] |
44 if ancestors[badrev] is None: | 44 if ancestors[badrev] is None: |
45 return badrev, None | 45 return badrev, None |
46 return badrev, ancestors | 46 return badrev, ancestors |