mercurial/commands.py
changeset 30067 6e88cd060ba2
parent 30066 5f93737d0ba8
child 30122 b710dca9937a
equal deleted inserted replaced
30066:5f93737d0ba8 30067:6e88cd060ba2
   833 
   833 
   834       See :hg:`help revsets` for more about the `bisect()` keyword.
   834       See :hg:`help revsets` for more about the `bisect()` keyword.
   835 
   835 
   836     Returns 0 on success.
   836     Returns 0 on success.
   837     """
   837     """
   838     def print_result(nodes, good):
       
   839         displayer = cmdutil.show_changeset(ui, repo, {})
       
   840         if len(nodes) == 1:
       
   841             # narrowed it down to a single revision
       
   842             if good:
       
   843                 ui.write(_("The first good revision is:\n"))
       
   844             else:
       
   845                 ui.write(_("The first bad revision is:\n"))
       
   846             displayer.show(repo[nodes[0]])
       
   847             extendnode = hbisect.extendrange(repo, state, nodes, good)
       
   848             if extendnode is not None:
       
   849                 ui.write(_('Not all ancestors of this changeset have been'
       
   850                            ' checked.\nUse bisect --extend to continue the '
       
   851                            'bisection from\nthe common ancestor, %s.\n')
       
   852                          % extendnode)
       
   853         else:
       
   854             # multiple possible revisions
       
   855             if good:
       
   856                 ui.write(_("Due to skipped revisions, the first "
       
   857                         "good revision could be any of:\n"))
       
   858             else:
       
   859                 ui.write(_("Due to skipped revisions, the first "
       
   860                         "bad revision could be any of:\n"))
       
   861             for n in nodes:
       
   862                 displayer.show(repo[n])
       
   863         displayer.close()
       
   864 
       
   865     def check_state(state, interactive=True):
   838     def check_state(state, interactive=True):
   866         if not state['good'] or not state['bad']:
   839         if not state['good'] or not state['bad']:
   867             if (good or bad or skip or reset) and interactive:
   840             if (good or bad or skip or reset) and interactive:
   868                 return
   841                 return
   869             if not state['good']:
   842             if not state['good']:
   935                     cmdutil.bailifchanged(repo)
   908                     cmdutil.bailifchanged(repo)
   936                     hg.clean(repo, node, show_stats=False)
   909                     hg.clean(repo, node, show_stats=False)
   937         finally:
   910         finally:
   938             state['current'] = [node]
   911             state['current'] = [node]
   939             hbisect.save_state(repo, state)
   912             hbisect.save_state(repo, state)
   940         print_result(nodes, bgood)
   913         displayer = cmdutil.show_changeset(ui, repo, {})
       
   914         hbisect.printresult(ui, repo, state, displayer, nodes, bgood)
   941         return
   915         return
   942 
   916 
   943     # update state
   917     # update state
   944 
   918 
   945     if rev:
   919     if rev:
   974                 cmdutil.bailifchanged(repo)
   948                 cmdutil.bailifchanged(repo)
   975                 return hg.clean(repo, extendnode.node())
   949                 return hg.clean(repo, extendnode.node())
   976         raise error.Abort(_("nothing to extend"))
   950         raise error.Abort(_("nothing to extend"))
   977 
   951 
   978     if changesets == 0:
   952     if changesets == 0:
   979         print_result(nodes, good)
   953         displayer = cmdutil.show_changeset(ui, repo, {})
       
   954         hbisect.printresult(ui, repo, state, displayer, nodes, good)
   980     else:
   955     else:
   981         assert len(nodes) == 1 # only a single node can be tested next
   956         assert len(nodes) == 1 # only a single node can be tested next
   982         node = nodes[0]
   957         node = nodes[0]
   983         # compute the approximate number of remaining tests
   958         # compute the approximate number of remaining tests
   984         tests, size = 0, 2
   959         tests, size = 0, 2