comparison mercurial/hbisect.py @ 30066:5f93737d0ba8

bisect: move the 'extendrange' to the 'hbisect' module We have a module ready to host any bisect logic. That logic was already isolated in a function so we just migrate it as is.
author Pierre-Yves David <pierre-yves.david@ens-lyon.org>
date Wed, 24 Aug 2016 04:16:07 +0200
parents ee21ed7fc7a2
children 6e88cd060ba2
comparison
equal deleted inserted replaced
30065:ee21ed7fc7a2 30066:5f93737d0ba8
137 assert best_rev is not None 137 assert best_rev is not None
138 best_node = changelog.node(best_rev) 138 best_node = changelog.node(best_rev)
139 139
140 return ([best_node], tot, good) 140 return ([best_node], tot, good)
141 141
142 def extendrange(repo, state, nodes, good):
143 # bisect is incomplete when it ends on a merge node and
144 # one of the parent was not checked.
145 parents = repo[nodes[0]].parents()
146 if len(parents) > 1:
147 if good:
148 side = state['bad']
149 else:
150 side = state['good']
151 num = len(set(i.node() for i in parents) & set(side))
152 if num == 1:
153 return parents[0].ancestor(parents[1])
154 return None
142 155
143 def load_state(repo): 156 def load_state(repo):
144 state = {'current': [], 'good': [], 'bad': [], 'skip': []} 157 state = {'current': [], 'good': [], 'bad': [], 'skip': []}
145 for l in repo.vfs.tryreadlines("bisect.state"): 158 for l in repo.vfs.tryreadlines("bisect.state"):
146 kind, node = l[:-1].split() 159 kind, node = l[:-1].split()