mercurial/commands.py
changeset 30124 0aea706060cc
parent 30123 2e360578688d
child 30125 3528117c7b4e
equal deleted inserted replaced
30123:2e360578688d 30124:0aea706060cc
   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 checkstate(state, interactive=True):
   838     def checkstate(state):
   839         if not state['good'] or not state['bad']:
   839         if not state['good'] or not state['bad']:
   840             if (good or bad or skip or reset) and interactive:
       
   841                 return
       
   842             if not state['good']:
   840             if not state['good']:
   843                 raise error.Abort(_('cannot bisect (no known good revisions)'))
   841                 raise error.Abort(_('cannot bisect (no known good revisions)'))
   844             else:
   842             else:
   845                 raise error.Abort(_('cannot bisect (no known bad revisions)'))
   843                 raise error.Abort(_('cannot bisect (no known bad revisions)'))
   846         return True
   844         return True
   877         elif bad:
   875         elif bad:
   878             state['bad'] += nodes
   876             state['bad'] += nodes
   879         elif skip:
   877         elif skip:
   880             state['skip'] += nodes
   878             state['skip'] += nodes
   881         hbisect.save_state(repo, state)
   879         hbisect.save_state(repo, state)
       
   880         if not (state['good'] and state['bad']):
       
   881             return
   882 
   882 
   883     if command:
   883     if command:
   884         changesets = 1
   884         changesets = 1
   885         if noupdate:
   885         if noupdate:
   886             try:
   886             try:
   911                     transition = "bad"
   911                     transition = "bad"
   912                 ctx = scmutil.revsingle(repo, rev, node)
   912                 ctx = scmutil.revsingle(repo, rev, node)
   913                 rev = None # clear for future iterations
   913                 rev = None # clear for future iterations
   914                 state[transition].append(ctx.node())
   914                 state[transition].append(ctx.node())
   915                 ui.status(_('changeset %d:%s: %s\n') % (ctx, ctx, transition))
   915                 ui.status(_('changeset %d:%s: %s\n') % (ctx, ctx, transition))
   916                 checkstate(state, interactive=False)
   916                 checkstate(state)
   917                 # bisect
   917                 # bisect
   918                 nodes, changesets, bgood = hbisect.bisect(repo.changelog, state)
   918                 nodes, changesets, bgood = hbisect.bisect(repo.changelog, state)
   919                 # update to next check
   919                 # update to next check
   920                 node = nodes[0]
   920                 node = nodes[0]
   921                 if not noupdate:
   921                 if not noupdate:
   926             hbisect.save_state(repo, state)
   926             hbisect.save_state(repo, state)
   927         displayer = cmdutil.show_changeset(ui, repo, {})
   927         displayer = cmdutil.show_changeset(ui, repo, {})
   928         hbisect.printresult(ui, repo, state, displayer, nodes, bgood)
   928         hbisect.printresult(ui, repo, state, displayer, nodes, bgood)
   929         return
   929         return
   930 
   930 
   931     if not checkstate(state):
   931     checkstate(state)
   932         return
       
   933 
   932 
   934     # actually bisect
   933     # actually bisect
   935     nodes, changesets, good = hbisect.bisect(repo.changelog, state)
   934     nodes, changesets, good = hbisect.bisect(repo.changelog, state)
   936     if extend:
   935     if extend:
   937         if not changesets:
   936         if not changesets: