Implement run_cmd in terms of run_tracked · rust-lang/rust@5c4318d (original) (raw)

`@@ -1034,79 +1034,8 @@ impl Build {

`

1034

1034

``

1035

1035

`/// A centralized function for running commands that do not return output.

`

1036

1036

`pub(crate) fn run_cmd<'a, C: Into<BootstrapCommand<'a>>>(&self, cmd: C) -> bool {

`

1037

``

`-

if self.config.dry_run() {

`

1038

``

`-

return true;

`

1039

``

`-

}

`

1040

``

-

1041

1037

`let command = cmd.into();

`

1042

``

`-

self.verbose(|| println!("running: {command:?}"));

`

1043

``

-

1044

``

`-

let output_mode = command.output_mode.unwrap_or_else(|| match self.is_verbose() {

`

1045

``

`-

true => OutputMode::PrintAll,

`

1046

``

`-

false => OutputMode::PrintOutput,

`

1047

``

`-

});

`

1048

``

`-

let (output, print_error) = match output_mode {

`

1049

``

`-

mode @ (OutputMode::PrintAll | OutputMode::PrintOutput) => (

`

1050

``

`-

command.command.status().map(|status| Output {

`

1051

``

`-

status,

`

1052

``

`-

stdout: Vec::new(),

`

1053

``

`-

stderr: Vec::new(),

`

1054

``

`-

}),

`

1055

``

`-

matches!(mode, OutputMode::PrintAll),

`

1056

``

`-

),

`

1057

``

`-

OutputMode::PrintOnFailure => (command.command.output(), true),

`

1058

``

`-

};

`

1059

``

-

1060

``

`-

let output = match output {

`

1061

``

`-

Ok(output) => output,

`

1062

``

`-

Err(e) => fail(&format!("failed to execute command: {:?}\nerror: {}", command, e)),

`

1063

``

`-

};

`

1064

``

`-

let result = if !output.status.success() {

`

1065

``

`-

if print_error {

`

1066

``

`-

println!(

`

1067

``

`-

"\n\nCommand did not execute successfully.\

`

1068

``

`-

\nExpected success, got: {}",

`

1069

``

`-

output.status,

`

1070

``

`-

);

`

1071

``

-

1072

``

`-

if !self.is_verbose() {

`

1073

``

`` -

println!("Add -v to see more details.\n");

``

1074

``

`-

}

`

1075

``

-

1076

``

`-

self.verbose(|| {

`

1077

``

`-

println!(

`

1078

``

`-

"\nSTDOUT ----\n{}\n\

`

1079

``

`-

STDERR ----\n{}\n",

`

1080

``

`-

String::from_utf8_lossy(&output.stdout),

`

1081

``

`-

String::from_utf8_lossy(&output.stderr)

`

1082

``

`-

)

`

1083

``

`-

});

`

1084

``

`-

}

`

1085

``

`-

Err(())

`

1086

``

`-

} else {

`

1087

``

`-

Ok(())

`

1088

``

`-

};

`

1089

``

-

1090

``

`-

match result {

`

1091

``

`-

Ok(_) => true,

`

1092

``

`-

Err(_) => {

`

1093

``

`-

match command.failure_behavior {

`

1094

``

`-

BehaviorOnFailure::DelayFail => {

`

1095

``

`-

if self.fail_fast {

`

1096

``

`-

exit!(1);

`

1097

``

`-

}

`

1098

``

-

1099

``

`-

let mut failures = self.delayed_failures.borrow_mut();

`

1100

``

`-

failures.push(format!("{command:?}"));

`

1101

``

`-

}

`

1102

``

`-

BehaviorOnFailure::Exit => {

`

1103

``

`-

exit!(1);

`

1104

``

`-

}

`

1105

``

`-

BehaviorOnFailure::Ignore => {}

`

1106

``

`-

}

`

1107

``

`-

false

`

1108

``

`-

}

`

1109

``

`-

}

`

``

1038

`+

self.run_tracked(command).is_success()

`

1110

1039

`}

`

1111

1040

``

1112

1041

`` /// Check if verbosity is greater than the level

``