u-output-failed-commands
authorRust Maintainers <pkg-rust-maintainers@lists.alioth.debian.org>
Mon, 6 Nov 2017 09:03:32 +0000 (09:03 +0000)
committerXimin Luo <infinity0@debian.org>
Mon, 6 Nov 2017 09:03:32 +0000 (09:03 +0000)
Gbp-Pq: Name u-output-failed-commands.patch

src/bootstrap/check.rs
src/bootstrap/lib.rs

index 92fb2105b7c5d57133c6425069cc09ae853ae5a8..2cf30a04479470b61fda24ecf562068f9e4a047b 100644 (file)
@@ -67,8 +67,8 @@ impl fmt::Display for TestKind {
 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);
@@ -78,8 +78,8 @@ fn try_run(build: &Build, cmd: &mut Command) {
 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);
index 84a9e56b644c8cb2d2551b6463249aba745d14cf..6692241d40af6c4e6c97081ecb59f67293dd64d2 100644 (file)
@@ -134,13 +134,13 @@ extern crate toml;
 #[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};
@@ -245,7 +245,7 @@ pub struct Build {
     crates: HashMap<Interned<String>, Crate>,
     is_sudo: bool,
     ci_env: CiEnv,
-    delayed_failures: Cell<usize>,
+    delayed_failures: RefCell<Vec<String>>,
 }
 
 #[derive(Debug)]
@@ -327,7 +327,7 @@ impl Build {
             lldb_python_dir: None,
             is_sudo,
             ci_env: CiEnv::current(),
-            delayed_failures: Cell::new(0),
+            delayed_failures: RefCell::new(Vec::new()),
         }
     }
 
@@ -366,6 +366,16 @@ impl Build {
         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.