in gui/mozregui/bisection.py [0:0]
def _bisect_next(self):
# this is executed in the working thread
if self.test_runner.verdict != "r":
try:
self.mid = self.bisection.search_mid_point(interrupt=self.should_stop.is_set)
except MozRegressionError:
self._finish_on_exception(self.bisection)
return
except StopIteration:
return
# if our last answer was skip, and that the next build
# to use is not chosen yet, ask to choose it.
if (
self._next_build_index is None
and self.test_runner.verdict == "s"
and len(self.bisection.build_range) > 3
):
self.choose_next_build.emit()
return
if self._next_build_index is not None:
# here user asked for specific build (eg from choose_next_build)
self.mid = self._next_build_index
# this will download build infos if required
if self.bisection.build_range[self.mid] is False:
# in case no build info is found, ask to choose again
self.choose_next_build.emit()
return
self._next_build_index = None
self.step_started.emit(self.bisection)
result = self.bisection.init_handler(self.mid)
if result != Bisection.RUNNING:
self.finished.emit(self.bisection, result)
else:
self.build_infos = self.bisection.handler.build_range[self.mid]
(
found,
self.mid,
self.build_infos,
self._persist_files,
) = self.bisection._find_approx_build(self.mid, self.build_infos)
if not found:
self.download_manager.focus_download(self.build_infos)
self.step_build_found.emit(self.bisection, self.build_infos)
if found:
# to continue the bisection, act as if it was downloaded
self._build_dl_finished(None, self.build_infos.build_file)