mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-18 18:04:13 +00:00
rustbuild: refactor how the wrapper deals with exit codes
This commit is contained in:
parent
3dcab2922c
commit
e7089a97e7
@ -16,7 +16,6 @@
|
||||
//! never get replaced.
|
||||
|
||||
use std::env;
|
||||
use std::io;
|
||||
use std::path::PathBuf;
|
||||
use std::process::Command;
|
||||
use std::str::FromStr;
|
||||
@ -147,22 +146,15 @@ fn main() {
|
||||
eprintln!("libdir: {:?}", libdir);
|
||||
}
|
||||
|
||||
if let Some(mut on_fail) = on_fail {
|
||||
let e = match cmd.status() {
|
||||
Ok(s) => if s.success() { std::process::exit(0) } else { format!("Ok({})", s) },
|
||||
Err(e) => format!("Err({})", e),
|
||||
};
|
||||
println!("\nDid not run successfully: {}\n{:?}\n-------------", e, cmd);
|
||||
status_code(&mut on_fail).expect("could not run the backup command");
|
||||
std::process::exit(1);
|
||||
}
|
||||
let start = Instant::now();
|
||||
let status = {
|
||||
let errmsg = format!("\nFailed to run:\n{:?}\n-------------", cmd);
|
||||
cmd.status().expect(&errmsg)
|
||||
};
|
||||
|
||||
if env::var_os("RUSTC_PRINT_STEP_TIMINGS").is_some() {
|
||||
if let Some(crate_name) = crate_name {
|
||||
let start = Instant::now();
|
||||
let status = cmd.status().unwrap_or_else(|_| panic!("\n\n failed to run {:?}", cmd));
|
||||
let dur = start.elapsed();
|
||||
|
||||
let is_test = args.iter().any(|a| a == "--test");
|
||||
eprintln!(
|
||||
"[RUSTC-TIMING] {} test:{} {}.{:03}",
|
||||
@ -171,21 +163,27 @@ fn main() {
|
||||
dur.as_secs(),
|
||||
dur.subsec_millis()
|
||||
);
|
||||
|
||||
match status.code() {
|
||||
Some(i) => std::process::exit(i),
|
||||
None => {
|
||||
eprintln!("rustc exited with {}", status);
|
||||
std::process::exit(0xfe);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let code = status_code(&mut cmd).unwrap_or_else(|_| panic!("\n\n failed to run {:?}", cmd));
|
||||
std::process::exit(code);
|
||||
}
|
||||
if status.success() {
|
||||
std::process::exit(0);
|
||||
// note: everything below here is unreachable. do not put code that
|
||||
// should run on success, after this block.
|
||||
}
|
||||
println!("\nDid not run successfully: {}\n{:?}\n-------------", status, cmd);
|
||||
|
||||
fn status_code(cmd: &mut Command) -> io::Result<i32> {
|
||||
cmd.status().map(|status| status.code().unwrap())
|
||||
if let Some(mut on_fail) = on_fail {
|
||||
on_fail.status().expect("Could not run the on_fail command");
|
||||
}
|
||||
|
||||
// Preserve the exit code. In case of signal, exit with 0xfe since it's
|
||||
// awkward to preserve this status in a cross-platform way.
|
||||
match status.code() {
|
||||
Some(i) => std::process::exit(i),
|
||||
None => {
|
||||
eprintln!("rustc exited with {}", status);
|
||||
std::process::exit(0xfe);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user