mercurial/commands.py
changeset 16647 14913fcb30c6
parent 16642 5cf18921bb7b
child 16648 1388cc711ea7
equal deleted inserted replaced
16646:a1dcd842ce17 16647:14913fcb30c6
   560 
   560 
   561       - see all changesets whose states are already known in the current
   561       - see all changesets whose states are already known in the current
   562         bisection::
   562         bisection::
   563 
   563 
   564           hg log -r "bisect(pruned)"
   564           hg log -r "bisect(pruned)"
       
   565 
       
   566       - see the changeset currently being bisected (especially useful
       
   567         if running with -U/--noupdate)::
       
   568 
       
   569           hg log -r "bisect(current)"
   565 
   570 
   566       - see all changesets that took part in the current bisection::
   571       - see all changesets that took part in the current bisection::
   567 
   572 
   568           hg log -r "bisect(range)"
   573           hg log -r "bisect(range)"
   569 
   574 
   645     state = hbisect.load_state(repo)
   650     state = hbisect.load_state(repo)
   646 
   651 
   647     if command:
   652     if command:
   648         changesets = 1
   653         changesets = 1
   649         try:
   654         try:
       
   655             node = state['current'][0]
       
   656         except LookupError:
       
   657             if noupdate:
       
   658                 raise util.Abort(_('current bisect revision is unknown - '
       
   659                                    'start a new bisect to fix'))
       
   660             node, p2 = repo.dirstate.parents()
       
   661             if p2 != nullid:
       
   662                 raise util.Abort(_('current bisect revision is a merge'))
       
   663         try:
   650             while changesets:
   664             while changesets:
   651                 # update state
   665                 # update state
       
   666                 state['current'] = [node]
   652                 hbisect.save_state(repo, state)
   667                 hbisect.save_state(repo, state)
   653                 status = util.system(command, out=ui.fout)
   668                 status = util.system(command, out=ui.fout)
   654                 if status == 125:
   669                 if status == 125:
   655                     transition = "skip"
   670                     transition = "skip"
   656                 elif status == 0:
   671                 elif status == 0:
   660                     raise util.Abort(_("failed to execute %s") % command)
   675                     raise util.Abort(_("failed to execute %s") % command)
   661                 elif status < 0:
   676                 elif status < 0:
   662                     raise util.Abort(_("%s killed") % command)
   677                     raise util.Abort(_("%s killed") % command)
   663                 else:
   678                 else:
   664                     transition = "bad"
   679                     transition = "bad"
   665                 ctx = scmutil.revsingle(repo, rev)
   680                 ctx = scmutil.revsingle(repo, rev, node)
   666                 rev = None # clear for future iterations
   681                 rev = None # clear for future iterations
   667                 state[transition].append(ctx.node())
   682                 state[transition].append(ctx.node())
   668                 ui.status(_('Changeset %d:%s: %s\n') % (ctx, ctx, transition))
   683                 ui.status(_('Changeset %d:%s: %s\n') % (ctx, ctx, transition))
   669                 check_state(state, interactive=False)
   684                 check_state(state, interactive=False)
   670                 # bisect
   685                 # bisect
   671                 nodes, changesets, good = hbisect.bisect(repo.changelog, state)
   686                 nodes, changesets, good = hbisect.bisect(repo.changelog, state)
   672                 # update to next check
   687                 # update to next check
   673                 cmdutil.bailifchanged(repo)
   688                 node = nodes[0]
   674                 hg.clean(repo, nodes[0], show_stats=False)
   689                 if not noupdate:
       
   690                     cmdutil.bailifchanged(repo)
       
   691                     hg.clean(repo, node, show_stats=False)
   675         finally:
   692         finally:
       
   693             state['current'] = [node]
   676             hbisect.save_state(repo, state)
   694             hbisect.save_state(repo, state)
   677         print_result(nodes, good)
   695         print_result(nodes, good)
   678         return
   696         return
   679 
   697 
   680     # update state
   698     # update state
   702         if not changesets:
   720         if not changesets:
   703             extendnode = extendbisectrange(nodes, good)
   721             extendnode = extendbisectrange(nodes, good)
   704             if extendnode is not None:
   722             if extendnode is not None:
   705                 ui.write(_("Extending search to changeset %d:%s\n"
   723                 ui.write(_("Extending search to changeset %d:%s\n"
   706                          % (extendnode.rev(), extendnode)))
   724                          % (extendnode.rev(), extendnode)))
       
   725                 state['current'] = [extendnode.node()]
       
   726                 hbisect.save_state(repo, state)
   707                 if noupdate:
   727                 if noupdate:
   708                     return
   728                     return
   709                 cmdutil.bailifchanged(repo)
   729                 cmdutil.bailifchanged(repo)
   710                 return hg.clean(repo, extendnode.node())
   730                 return hg.clean(repo, extendnode.node())
   711         raise util.Abort(_("nothing to extend"))
   731         raise util.Abort(_("nothing to extend"))
   721             tests, size = tests + 1, size * 2
   741             tests, size = tests + 1, size * 2
   722         rev = repo.changelog.rev(node)
   742         rev = repo.changelog.rev(node)
   723         ui.write(_("Testing changeset %d:%s "
   743         ui.write(_("Testing changeset %d:%s "
   724                    "(%d changesets remaining, ~%d tests)\n")
   744                    "(%d changesets remaining, ~%d tests)\n")
   725                  % (rev, short(node), changesets, tests))
   745                  % (rev, short(node), changesets, tests))
       
   746         state['current'] = [node]
       
   747         hbisect.save_state(repo, state)
   726         if not noupdate:
   748         if not noupdate:
   727             cmdutil.bailifchanged(repo)
   749             cmdutil.bailifchanged(repo)
   728             return hg.clean(repo, node)
   750             return hg.clean(repo, node)
   729 
   751 
   730 @command('bookmarks',
   752 @command('bookmarks',