diff -r a25af3af941c -r 0491be4448bf mercurial/hbisect.py --- a/mercurial/hbisect.py Mon Oct 12 14:52:53 2009 -0500 +++ b/mercurial/hbisect.py Mon Oct 12 14:59:28 2009 -0500 @@ -31,8 +31,16 @@ # only the earliest bad revision matters badrev = min([changelog.rev(n) for n in bad]) goodrevs = [changelog.rev(n) for n in good] - # build ancestors array - ancestors = [[]] * (len(changelog) + 1) # an extra for [-1] + goodrev = min(goodrevs) + # build visit array + ancestors = [None] * (len(changelog) + 1) # an extra for [-1] + + # set nodes descended from goodrev + ancestors[goodrev] = [] + for rev in xrange(goodrev + 1, len(changelog)): + for prev in clparents(rev): + if ancestors[prev] == []: + ancestors[rev] = [] # clear good revs from array for node in goodrevs: