about summary refs log tree commit diff
diff options
context:
space:
mode:
authorPhilipp Hansch <dev@phansch.net>2020-12-19 08:25:42 +0100
committerPhilipp Hansch <dev@phansch.net>2020-12-19 08:43:45 +0100
commitdfb4ea588c2af7633b2d01d2dfa3d6ffc7d07ee7 (patch)
tree7046d72a153bf187c215836d7a5ba3b90ef9a984
parent896d82f7ff64644656bda7a4ed8bbd55ca3b7619 (diff)
downloadrust-dfb4ea588c2af7633b2d01d2dfa3d6ffc7d07ee7.tar.gz
rust-dfb4ea588c2af7633b2d01d2dfa3d6ffc7d07ee7.zip
Fix blessing of new reference files
Adding of new reference files wasn't handled correctly. It was trying to
read a file that didn't exist yet.

Instead of unwrapping, we now treat a missing reference file as empty
(`Vec::new`). This makes the following conditional work. We then also
have to re-read the reference file after it was being copied. This
second read is technically the same as in the old shell script, but
wasn't really obvious. The shell script did a `-s` test which reads the
file.
-rw-r--r--clippy_dev/src/bless.rs5
1 files changed, 4 insertions, 1 deletions
diff --git a/clippy_dev/src/bless.rs b/clippy_dev/src/bless.rs
index 8d5c2e95055..645098e4cfc 100644
--- a/clippy_dev/src/bless.rs
+++ b/clippy_dev/src/bless.rs
@@ -46,13 +46,16 @@ fn update_reference_file(reference_file_path: PathBuf) {
     }
 
     let test_output_file = fs::read(&test_output_path).expect("Unable to read test output file");
-    let reference_file = fs::read(&reference_file_path).expect("Unable to read reference file");
+    let reference_file = fs::read(&reference_file_path).unwrap_or_default();
 
     if test_output_file != reference_file {
         // If a test run caused an output file to change, update the reference file
         println!("updating {}", &relative_reference_file_path.display());
         fs::copy(test_output_path, &reference_file_path).expect("Could not update reference file");
 
+        // We need to re-read the file now because it was potentially updated from copying
+        let reference_file = fs::read(&reference_file_path).unwrap_or_default();
+
         if reference_file.is_empty() {
             // If we copied over an empty output file, we remove the now empty reference file
             println!("removing {}", &relative_reference_file_path.display());