comparison mercurial/commands.py @ 30067:6e88cd060ba2

bisect: move 'printresult' in the 'hbisect' module The logic is already extracted into a closure. We move it into the module dedicated to bisect. A minor change is applied: the creation of the 'displayer' is kept in the main command function, it remove the needs to import 'cmdutil' in 'hbisect'. This would create an import circle otherwise.
author Pierre-Yves David <pierre-yves.david@ens-lyon.org>
date Wed, 24 Aug 2016 04:19:11 +0200
parents 5f93737d0ba8
children b710dca9937a
comparison
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