fn try_run(build: &Build, cmd: &mut Command) {
if !build.fail_fast {
if !build.try_run(cmd) {
- let failures = build.delayed_failures.get();
- build.delayed_failures.set(failures + 1);
+ let mut failures = build.delayed_failures.borrow_mut();
+ failures.push(format!("{:?}", cmd));
}
} else {
build.run(cmd);
fn try_run_quiet(build: &Build, cmd: &mut Command) {
if !build.fail_fast {
if !build.try_run_quiet(cmd) {
- let failures = build.delayed_failures.get();
- build.delayed_failures.set(failures + 1);
+ let mut failures = build.delayed_failures.borrow_mut();
+ failures.push(format!("{:?}", cmd));
}
} else {
build.run_quiet(cmd);
#[cfg(unix)]
extern crate libc;
-use std::cell::Cell;
+use std::cell::RefCell;
use std::collections::{HashSet, HashMap};
use std::env;
use std::fs::{self, File};
use std::io::Read;
use std::path::{PathBuf, Path};
-use std::process::Command;
+use std::process::{self, Command};
use std::slice;
use build_helper::{run_silent, run_suppressed, try_run_silent, try_run_suppressed, output, mtime};
crates: HashMap<Interned<String>, Crate>,
is_sudo: bool,
ci_env: CiEnv,
- delayed_failures: Cell<usize>,
+ delayed_failures: RefCell<Vec<String>>,
}
#[derive(Debug)]
lldb_python_dir: None,
is_sudo,
ci_env: CiEnv::current(),
- delayed_failures: Cell::new(0),
+ delayed_failures: RefCell::new(Vec::new()),
}
}
metadata::build(self);
builder::Builder::run(&self);
+
+ // Check for postponed failures from `test --no-fail-fast`.
+ let failures = self.delayed_failures.borrow();
+ if failures.len() > 0 {
+ println!("\n{} command(s) did not execute successfully:\n", failures.len());
+ for failure in failures.iter() {
+ println!(" - {}\n", failure);
+ }
+ process::exit(1);
+ }
}
/// Clear out `dir` if `input` is newer.