equal
deleted
inserted
replaced
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: |