From 874a8a04bf737f6749ff96bf3fb2d8af73f273da Mon Sep 17 00:00:00 2001 From: Ed Page Date: Tue, 27 Aug 2024 14:56:33 -0500 Subject: [PATCH] refactor(compile): Extract test collection --- src/cargo/core/compiler/build_runner/mod.rs | 53 +++++++++++---------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/src/cargo/core/compiler/build_runner/mod.rs b/src/cargo/core/compiler/build_runner/mod.rs index 43d00e1ec..3a6cd2a70 100644 --- a/src/cargo/core/compiler/build_runner/mod.rs +++ b/src/cargo/core/compiler/build_runner/mod.rs @@ -214,31 +214,7 @@ impl<'a, 'gctx> BuildRunner<'a, 'gctx> { // Collect the result of the build into `self.compilation`. for unit in &self.bcx.roots { - // Collect tests and executables. - for output in self.outputs(unit)?.iter() { - if output.flavor == FileFlavor::DebugInfo || output.flavor == FileFlavor::Auxiliary - { - continue; - } - - let bindst = output.bin_dst(); - - if unit.mode == CompileMode::Test { - self.compilation - .tests - .push(self.unit_output(unit, &output.path)); - } else if unit.target.is_executable() { - self.compilation - .binaries - .push(self.unit_output(unit, bindst)); - } else if unit.target.is_cdylib() - && !self.compilation.cdylibs.iter().any(|uo| uo.unit == *unit) - { - self.compilation - .cdylibs - .push(self.unit_output(unit, bindst)); - } - } + self.collect_tests_and_executables(unit)?; // Collect information for `rustdoc --test`. if unit.mode.is_doc_test() { @@ -307,6 +283,33 @@ impl<'a, 'gctx> BuildRunner<'a, 'gctx> { Ok(self.compilation) } + fn collect_tests_and_executables(&mut self, unit: &Unit) -> CargoResult<()> { + for output in self.outputs(unit)?.iter() { + if output.flavor == FileFlavor::DebugInfo || output.flavor == FileFlavor::Auxiliary { + continue; + } + + let bindst = output.bin_dst(); + + if unit.mode == CompileMode::Test { + self.compilation + .tests + .push(self.unit_output(unit, &output.path)); + } else if unit.target.is_executable() { + self.compilation + .binaries + .push(self.unit_output(unit, bindst)); + } else if unit.target.is_cdylib() + && !self.compilation.cdylibs.iter().any(|uo| uo.unit == *unit) + { + self.compilation + .cdylibs + .push(self.unit_output(unit, bindst)); + } + } + Ok(()) + } + /// Returns the executable for the specified unit (if any). pub fn get_executable(&mut self, unit: &Unit) -> CargoResult> { let is_binary = unit.target.is_executable();