322 |
322 |
323 if not state['good'] or not state['bad']: |
323 if not state['good'] or not state['bad']: |
324 return |
324 return |
325 |
325 |
326 # actually bisect |
326 # actually bisect |
327 node, changesets, good = hbisect.bisect(repo.changelog, state) |
327 nodes, changesets, good = hbisect.bisect(repo.changelog, state) |
328 if changesets == 0: |
328 if changesets == 0: |
329 ui.write(_("The first %s revision is:\n") % (good and "good" or "bad")) |
|
330 displayer = cmdutil.show_changeset(ui, repo, {}) |
329 displayer = cmdutil.show_changeset(ui, repo, {}) |
331 displayer.show(changenode=node) |
330 transition = (good and "good" or "bad") |
332 elif node is not None: |
331 if len(nodes) == 1: |
|
332 # narrowed it down to a single revision |
|
333 ui.write(_("The first %s revision is:\n") % transition) |
|
334 displayer.show(changenode=nodes[0]) |
|
335 else: |
|
336 # multiple possible revisions |
|
337 ui.write(_("Due to skipped revisions, the first " |
|
338 "%s revision could be any of:\n") % transition) |
|
339 for n in nodes: |
|
340 displayer.show(changenode=n) |
|
341 else: |
|
342 assert len(nodes) == 1 # only a single node can be tested next |
|
343 node = nodes[0] |
333 # compute the approximate number of remaining tests |
344 # compute the approximate number of remaining tests |
334 tests, size = 0, 2 |
345 tests, size = 0, 2 |
335 while size <= changesets: |
346 while size <= changesets: |
336 tests, size = tests + 1, size * 2 |
347 tests, size = tests + 1, size * 2 |
337 rev = repo.changelog.rev(node) |
348 rev = repo.changelog.rev(node) |