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