about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorZalathar <Zalathar@users.noreply.github.com>2024-08-13 16:17:25 +1000
committerZalathar <Zalathar@users.noreply.github.com>2024-08-13 17:11:39 +1000
commitcc58cf6443a1982aa613a6f3b4032fc31aefd6b9 (patch)
tree934a0c90b12bf758051866c11a30cd68ac3fa12c /src
parent6d91017b026af9531e3b066e06ff04230acbffda (diff)
downloadrust-cc58cf6443a1982aa613a6f3b4032fc31aefd6b9.tar.gz
rust-cc58cf6443a1982aa613a6f3b4032fc31aefd6b9.zip
Fix blessing of rmake tests
Diffstat (limited to 'src')
-rw-r--r--src/tools/compiletest/src/runtest.rs15
-rw-r--r--src/tools/run-make-support/src/diff/mod.rs13
2 files changed, 16 insertions, 12 deletions
diff --git a/src/tools/compiletest/src/runtest.rs b/src/tools/compiletest/src/runtest.rs
index ce6569f5537..59fce44d1c7 100644
--- a/src/tools/compiletest/src/runtest.rs
+++ b/src/tools/compiletest/src/runtest.rs
@@ -3735,15 +3735,14 @@ impl<'test> TestCx<'test> {
         }
 
         if self.config.bless {
-            cmd.env("RUSTC_BLESS_TEST", "--bless");
-            // Assume this option is active if the environment variable is "defined", with _any_ value.
-            // As an example, a `Makefile` can use this option by:
+            // If we're running in `--bless` mode, set an environment variable to tell
+            // `run_make_support` to bless snapshot files instead of checking them.
             //
-            //   ifdef RUSTC_BLESS_TEST
-            //       cp "$(TMPDIR)"/actual_something.ext expected_something.ext
-            //   else
-            //       $(DIFF) expected_something.ext "$(TMPDIR)"/actual_something.ext
-            //   endif
+            // The value is this test's source directory, because the support code
+            // will need that path in order to bless the _original_ snapshot files,
+            // not the copies in `rmake_out`.
+            // (See <https://github.com/rust-lang/rust/issues/129038>.)
+            cmd.env("RUSTC_BLESS_TEST", &self.testpaths.file);
         }
 
         if self.config.target.contains("msvc") && !self.config.cc.is_empty() {
diff --git a/src/tools/run-make-support/src/diff/mod.rs b/src/tools/run-make-support/src/diff/mod.rs
index 61c724c9520..ee48e373366 100644
--- a/src/tools/run-make-support/src/diff/mod.rs
+++ b/src/tools/run-make-support/src/diff/mod.rs
@@ -140,16 +140,21 @@ impl Diff {
 
     /// If we have an expected file to write into, and `RUSTC_BLESS_TEST` is
     /// set, then write the actual output into the file and return `true`.
+    ///
+    /// We assume that `RUSTC_BLESS_TEST` contains the path to the original test's
+    /// source directory. That lets us bless the original snapshot file in the
+    /// source tree, not the copy in `rmake_out` that we would normally use.
     fn maybe_bless_expected_file(&self, actual: &str) -> bool {
         let Some(ref expected_file) = self.expected_file else {
             return false;
         };
-        if std::env::var("RUSTC_BLESS_TEST").is_err() {
+        let Ok(bless_dir) = std::env::var("RUSTC_BLESS_TEST") else {
             return false;
-        }
+        };
 
-        println!("Blessing `{}`", expected_file.display());
-        fs::write(expected_file, actual);
+        let bless_file = Path::new(&bless_dir).join(expected_file);
+        println!("Blessing `{}`", bless_file.display());
+        fs::write(bless_file, actual);
         true
     }
 }