mercurial/hbisect.py
changeset 35150 ec25c8275cfa
parent 35149 fd8b6b183073
child 35151 8287df8b7be5
equal deleted inserted replaced
35149:fd8b6b183073 35150:ec25c8275cfa
    35     changelog = repo.changelog
    35     changelog = repo.changelog
    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         # only the earliest bad revision matters
       
    41         badrev = min([changelog.rev(n) for n in bad])
    40         badrev = min([changelog.rev(n) for n in bad])
    42         goodrevs = [changelog.rev(n) for n in good]
    41         ancestors = [None] * (len(changelog) + 1)
    43         goodrev = min(goodrevs)
    42         for rev in repo.revs("descendants(%ln) - ancestors(%ln)", good, good):
    44         # build visit array
       
    45         ancestors = [None] * (len(changelog) + 1) # an extra for [-1]
       
    46 
       
    47         # set nodes descended from goodrevs
       
    48         for rev in goodrevs:
       
    49             ancestors[rev] = []
    43             ancestors[rev] = []
    50         for rev in changelog.revs(goodrev + 1):
       
    51             for prev in clparents(rev):
       
    52                 if ancestors[prev] == []:
       
    53                     ancestors[rev] = []
       
    54 
       
    55         # clear good revs from array
       
    56         for rev in goodrevs:
       
    57             ancestors[rev] = None
       
    58         for rev in changelog.revs(len(changelog), goodrev):
       
    59             if ancestors[rev] is None:
       
    60                 for prev in clparents(rev):
       
    61                     ancestors[prev] = None
       
    62 
       
    63         if ancestors[badrev] is None:
    44         if ancestors[badrev] is None:
    64             return badrev, None
    45             return badrev, None
    65         return badrev, ancestors
    46         return badrev, ancestors
    66 
    47 
    67     good = False
    48     good = False