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 |