From cf547496382a75f194642eba24c88e7f91f8be04 Mon Sep 17 00:00:00 2001 From: Stu Hood Date: Wed, 24 Mar 2021 17:16:43 -0700 Subject: [PATCH] Fix RunTracker completion for help/no-goals/ctrl+c. # Rust tests and lints will be skipped. Delete if not intended. [ci skip-rust] # Building wheels and fs_util will be skipped. Delete if not intended. [ci skip-build-wheels] --- src/python/pants/bin/local_pants_runner.py | 44 ++++++++++++---------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/src/python/pants/bin/local_pants_runner.py b/src/python/pants/bin/local_pants_runner.py index 98977afcbc73..0f5f76195815 100644 --- a/src/python/pants/bin/local_pants_runner.py +++ b/src/python/pants/bin/local_pants_runner.py @@ -217,14 +217,27 @@ def _get_workunits_callbacks(self) -> Tuple[WorkunitsCallback, ...]: ) return tuple(wcf.callback_factory() for wcf in workunits_callback_factories) - def run(self, start_time: float) -> ExitCode: - spec_parser = SpecsParser(get_buildroot()) - specs = [str(spec_parser.parse_spec(spec)) for spec in self.options.specs] - self.run_tracker.start(run_start_time=start_time, specs=specs) + def _run_inner(self) -> ExitCode: + goals = tuple(self.options.goals) + if self.options.help_request: + return self._print_help(self.options.help_request) + if not goals: + return PANTS_SUCCEEDED_EXIT_CODE + + try: + return self._perform_run(goals) + except Exception as e: + ExceptionSink.log_exception(e) + return PANTS_FAILED_EXIT_CODE + except KeyboardInterrupt: + return PANTS_FAILED_EXIT_CODE + def run(self, start_time: float) -> ExitCode: with maybe_profiled(self.profile_path): + spec_parser = SpecsParser(get_buildroot()) + specs = [str(spec_parser.parse_spec(spec)) for spec in self.options.specs] + self.run_tracker.start(run_start_time=start_time, specs=specs) global_options = self.options.for_global_scope() - goals = tuple(self.options.goals) streaming_reporter = StreamingWorkunitHandler( self.graph_session.scheduler_session, @@ -236,19 +249,12 @@ def run(self, start_time: float) -> ExitCode: pantsd=global_options.pantsd, ) with streaming_reporter: - if self.options.help_request: - return self._print_help(self.options.help_request) - if not goals: - return PANTS_SUCCEEDED_EXIT_CODE - + engine_result = PANTS_FAILED_EXIT_CODE try: - engine_result = self._perform_run(goals) - except Exception as e: - ExceptionSink.log_exception(e) - engine_result = PANTS_FAILED_EXIT_CODE - - metrics = self.graph_session.scheduler_session.metrics() - self.run_tracker.set_pantsd_scheduler_metrics(metrics) - self.run_tracker.end_run(engine_result) + engine_result = self._run_inner() + finally: + metrics = self.graph_session.scheduler_session.metrics() + self.run_tracker.set_pantsd_scheduler_metrics(metrics) + self.run_tracker.end_run(engine_result) - return engine_result + return engine_result