Skip to content

Commit ec7d432

Browse files
committed
compiletest: use recursive_remove instead of aggressive_rm_rf
`aggressive_rm_rf` does not correctly handle distinction between symlink-to-file vs symlink-to-dir on Windows.
1 parent 339bbcf commit ec7d432

File tree

3 files changed

+7
-30
lines changed

3 files changed

+7
-30
lines changed

src/tools/compiletest/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ indexmap = "2.0.0"
1616
miropt-test-tools = { path = "../miropt-test-tools" }
1717
build_helper = { path = "../../build_helper" }
1818
tracing = "0.1"
19-
tracing-subscriber = { version = "0.3.3", default-features = false, features = ["fmt", "env-filter", "smallvec", "parking_lot", "ansi"] }
19+
tracing-subscriber = { version = "0.3.3", default-features = false, features = ["ansi", "env-filter", "fmt", "parking_lot", "smallvec"] }
2020
regex = "1.0"
2121
semver = { version = "1.0.23", features = ["serde"] }
2222
serde = { version = "1.0", features = ["derive"] }

src/tools/compiletest/src/runtest.rs

-23
Original file line numberDiff line numberDiff line change
@@ -2809,29 +2809,6 @@ impl<'test> TestCx<'test> {
28092809
println!("init_incremental_test: incremental_dir={}", incremental_dir.display());
28102810
}
28112811
}
2812-
2813-
fn aggressive_rm_rf(&self, path: &Path) -> io::Result<()> {
2814-
for e in path.read_dir()? {
2815-
let entry = e?;
2816-
let path = entry.path();
2817-
if entry.file_type()?.is_dir() {
2818-
self.aggressive_rm_rf(&path)?;
2819-
} else {
2820-
// Remove readonly files as well on windows (by default we can't)
2821-
fs::remove_file(&path).or_else(|e| {
2822-
if cfg!(windows) && e.kind() == io::ErrorKind::PermissionDenied {
2823-
let mut meta = entry.metadata()?.permissions();
2824-
meta.set_readonly(false);
2825-
fs::set_permissions(&path, meta)?;
2826-
fs::remove_file(&path)
2827-
} else {
2828-
Err(e)
2829-
}
2830-
})?;
2831-
}
2832-
}
2833-
fs::remove_dir(path)
2834-
}
28352812
}
28362813

28372814
struct ProcArgs {

src/tools/compiletest/src/runtest/run_make.rs

+6-6
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ use std::path::Path;
22
use std::process::{Command, Output, Stdio};
33
use std::{env, fs};
44

5+
use build_helper::fs::{ignore_not_found, recursive_remove};
6+
57
use super::{ProcRes, TestCx, disable_error_reporting};
68
use crate::util::{copy_dir_all, dylib_env_var};
79

@@ -27,9 +29,8 @@ impl TestCx<'_> {
2729
// are hopefully going away, it seems safer to leave this perilous code
2830
// as-is until it can all be deleted.
2931
let tmpdir = cwd.join(self.output_base_name());
30-
if tmpdir.exists() {
31-
self.aggressive_rm_rf(&tmpdir).unwrap();
32-
}
32+
ignore_not_found(|| recursive_remove(&tmpdir)).unwrap();
33+
3334
fs::create_dir_all(&tmpdir).unwrap();
3435

3536
let host = &self.config.host;
@@ -218,9 +219,8 @@ impl TestCx<'_> {
218219
//
219220
// This setup intentionally diverges from legacy Makefile run-make tests.
220221
let base_dir = self.output_base_dir();
221-
if base_dir.exists() {
222-
self.aggressive_rm_rf(&base_dir).unwrap();
223-
}
222+
ignore_not_found(|| recursive_remove(&base_dir)).unwrap();
223+
224224
let rmake_out_dir = base_dir.join("rmake_out");
225225
fs::create_dir_all(&rmake_out_dir).unwrap();
226226

0 commit comments

Comments
 (0)