Mercurial > hg
changeset 35129:ec25c8275cfa
hbisect: use a revset for ancestor calculation
Since we have revsets we can be more concise in doing the ancestor calulcation.
Significant commits are all descendent of the topmost good commits.
Test Plan:
python run-tests.py test-bisect*
Differential Revision: https://phab.mercurial-scm.org/D1498
author | David Soria Parra <davidsp@fb.com> |
---|---|
date | Thu, 23 Nov 2017 14:12:55 -0800 |
parents | fd8b6b183073 |
children | 8287df8b7be5 |
files | mercurial/hbisect.py |
diffstat | 1 files changed, 2 insertions(+), 21 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/hbisect.py Thu Nov 23 14:11:27 2017 -0800 +++ b/mercurial/hbisect.py Thu Nov 23 14:12:55 2017 -0800 @@ -37,29 +37,10 @@ skip = set([changelog.rev(n) for n in state['skip']]) def buildancestors(bad, good): - # only the earliest bad revision matters badrev = min([changelog.rev(n) for n in bad]) - goodrevs = [changelog.rev(n) for n in good] - goodrev = min(goodrevs) - # build visit array - ancestors = [None] * (len(changelog) + 1) # an extra for [-1] - - # set nodes descended from goodrevs - for rev in goodrevs: + ancestors = [None] * (len(changelog) + 1) + for rev in repo.revs("descendants(%ln) - ancestors(%ln)", good, good): ancestors[rev] = [] - for rev in changelog.revs(goodrev + 1): - for prev in clparents(rev): - if ancestors[prev] == []: - ancestors[rev] = [] - - # clear good revs from array - for rev in goodrevs: - ancestors[rev] = None - for rev in changelog.revs(len(changelog), goodrev): - if ancestors[rev] is None: - for prev in clparents(rev): - ancestors[prev] = None - if ancestors[badrev] is None: return badrev, None return badrev, ancestors