diff options
| author | bors <bors@rust-lang.org> | 2018-12-22 17:46:11 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2018-12-22 17:46:11 +0000 |
| commit | 9723a495d4aeda267b5657750bf0f7f4436af507 (patch) | |
| tree | 2d13b334e3ac75a87b68e6b78e3737e6a4045bb5 | |
| parent | fa922ab876cb3140de2ead9c8ad88a75982c167c (diff) | |
| parent | d966e57407fc2c09ce3345b7d797633aa4046912 (diff) | |
| download | rust-9723a495d4aeda267b5657750bf0f7f4436af507.tar.gz rust-9723a495d4aeda267b5657750bf0f7f4436af507.zip | |
Auto merge of #56680 - vakaras:issue56280, r=nagisa
Use compiletest timestamp to check if the tests should be rerun. An attempt to fix #56280 by checking if timestamps of compile test files are older than the timestamp of the stamp file. ?r nagisa
| -rw-r--r-- | Cargo.lock | 1 | ||||
| -rw-r--r-- | src/tools/compiletest/Cargo.toml | 1 | ||||
| -rw-r--r-- | src/tools/compiletest/src/main.rs | 25 |
3 files changed, 17 insertions, 10 deletions
diff --git a/Cargo.lock b/Cargo.lock index 7e03474565d..365d14c579b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -431,6 +431,7 @@ dependencies = [ "serde 1.0.81 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.81 (registry+https://github.com/rust-lang/crates.io-index)", "serde_json 1.0.33 (registry+https://github.com/rust-lang/crates.io-index)", + "walkdir 2.2.7 (registry+https://github.com/rust-lang/crates.io-index)", "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", ] diff --git a/src/tools/compiletest/Cargo.toml b/src/tools/compiletest/Cargo.toml index 0ee31439358..edf4aeab1c7 100644 --- a/src/tools/compiletest/Cargo.toml +++ b/src/tools/compiletest/Cargo.toml @@ -15,6 +15,7 @@ serde_json = "1.0" serde_derive = "1.0" rustfix = "0.4.1" lazy_static = "1.0" +walkdir = "2" [target.'cfg(unix)'.dependencies] libc = "0.2" diff --git a/src/tools/compiletest/src/main.rs b/src/tools/compiletest/src/main.rs index 9aefd15765d..a532e900ea3 100644 --- a/src/tools/compiletest/src/main.rs +++ b/src/tools/compiletest/src/main.rs @@ -28,6 +28,7 @@ extern crate serde_derive; extern crate serde_json; extern crate test; extern crate rustfix; +extern crate walkdir; use common::CompareMode; use common::{expected_output_path, output_base_dir, output_relative_path, UI_EXTENSIONS}; @@ -43,6 +44,7 @@ use std::path::{Path, PathBuf}; use std::process::Command; use test::ColorConfig; use util::logv; +use walkdir::WalkDir; use self::header::{EarlyProps, Ignore}; @@ -682,6 +684,15 @@ fn stamp(config: &Config, testpaths: &TestPaths, revision: Option<&str>) -> Path output_base_dir(config, testpaths, revision).join("stamp") } +/// Return an iterator over timestamps of files in the directory at `path`. +fn collect_timestamps(path: &PathBuf) -> impl Iterator<Item=FileTime> { + WalkDir::new(path) + .into_iter() + .map(|entry| entry.unwrap()) + .filter(|entry| entry.metadata().unwrap().is_file()) + .map(|entry| mtime(entry.path())) +} + fn up_to_date( config: &Config, testpaths: &TestPaths, @@ -725,16 +736,7 @@ fn up_to_date( for pretty_printer_file in &pretty_printer_files { inputs.push(mtime(&rust_src_dir.join(pretty_printer_file))); } - let mut entries = config.run_lib_path.read_dir().unwrap().collect::<Vec<_>>(); - while let Some(entry) = entries.pop() { - let entry = entry.unwrap(); - let path = entry.path(); - if entry.metadata().unwrap().is_file() { - inputs.push(mtime(&path)); - } else { - entries.extend(path.read_dir().unwrap()); - } - } + inputs.extend(collect_timestamps(&config.run_lib_path)); if let Some(ref rustdoc_path) = config.rustdoc_path { inputs.push(mtime(&rustdoc_path)); inputs.push(mtime(&rust_src_dir.join("src/etc/htmldocck.py"))); @@ -746,6 +748,9 @@ fn up_to_date( inputs.push(mtime(path)); } + // Compiletest itself. + inputs.extend(collect_timestamps(&rust_src_dir.join("src/tools/compiletest/"))); + inputs.iter().any(|input| *input > stamp) } |
