Change:
If I modify a file in the rustc source code (), is smart enough to rerun all tests. However, if I modify something in , then still ignores the tests that completed successfully in the previous run. Steps to reproduce: tests: . For example, replace the function in  with: tests again: Expected output: some tests fail. Actual output:
I would be interested in fixing this issue myself if someone could give me some guidance on how to do that. The main thing that I do not understand is how understands that was changed. It seems that it does not use files for this because they include only the hash of the configuration options which do not include version. cc
The most likely culprit (that ignores the test files) is in module. It is called from and will set the flag for the test depending on its output.
That being said, I find it hard to see how to adjust compiletest itself to take the dependencies into account. rustbuild should probably have some sort of dependency edge and delete the stamp files if/when stuff like compiletest changes.
Compiletest source code has only 9 files. Would it be acceptable to check that their timestamps are newer than the timestamp of the stamp file? PR:

Discussion:
"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)", <ins> "walkdir 2.2.7 (registry+https://github.com/rust-lang/crates.io-index)", </ins> "winapi 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", ]

serde_derive = "1.0" rustfix = "0.4.1" lazy_static = "1.0" <ins> walkdir = "2" </ins> [target.'cfg(unix)'.dependencies] libc = "0.2"

extern crate serde_json; extern crate test; extern crate rustfix; <ins> extern crate walkdir; </ins> use common::CompareMode; use common::{expected_output_path, output_base_dir, output_relative_path, UI_EXTENSIONS};

use std::process::Command; use test::ColorConfig; use util::logv; <ins> use walkdir::WalkDir; </ins> use self::header::{EarlyProps, Ignore};

output_base_dir(config, testpaths, revision).join("stamp") } <ins> /// 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())) } </ins> fn up_to_date( config: &Config, testpaths: &TestPaths,

for pretty_printer_file in &pretty_printer_files { inputs.push(mtime(&rust_src_dir.join(pretty_printer_file))); } <del> 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()); } } </del> <ins> inputs.extend(collect_timestamps(&config.run_lib_path)); </ins> 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")));

inputs.push(mtime(path)); } <ins> // Compiletest itself. inputs.extend(collect_timestamps(&rust_src_dir.join("src/tools/compiletest/"))); </ins> inputs.iter().any(|input| *input > stamp) }