Skip to content

Commit 12af562

Browse files
committed
fix cleaning temporary build directories, add test
1 parent 3e1a26d commit 12af562

File tree

1 file changed

+43
-3
lines changed

1 file changed

+43
-3
lines changed

src/utils/queue_builder.rs

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,13 +84,53 @@ fn remove_tempdirs() -> Result<(), io::Error> {
8484
// NOTE: hardcodes that `tempfile::tempdir()` uses `std::env::temp_dir`.
8585
for entry in std::fs::read_dir(std::env::temp_dir())? {
8686
let entry = entry?;
87-
if !entry.path().starts_with(TEMPDIR_PREFIX) {
87+
if !entry.metadata()?.is_dir() {
8888
continue;
8989
}
90-
if entry.metadata()?.is_dir() {
91-
fs::remove_dir_all(entry.path())?;
90+
91+
if let Some(dir_name) = entry.path().file_name() {
92+
if dir_name.to_string_lossy().starts_with(TEMPDIR_PREFIX) {
93+
fs::remove_dir_all(entry.path())?;
94+
}
9295
}
9396
}
9497

9598
Ok(())
9699
}
100+
101+
#[cfg(test)]
102+
mod tests {
103+
use super::*;
104+
105+
#[test]
106+
fn remove_existing_tempdirs() {
107+
let file_with_prefix = tempfile::Builder::new()
108+
.prefix(TEMPDIR_PREFIX)
109+
.tempfile()
110+
.unwrap();
111+
112+
let dir_with_prefix = tempfile::Builder::new()
113+
.prefix(TEMPDIR_PREFIX)
114+
.tempdir()
115+
.unwrap();
116+
117+
let file_inside = dir_with_prefix.path().join("some_file_name");
118+
fs::File::create(&file_inside).unwrap();
119+
120+
let other_file = tempfile::Builder::new().tempfile().unwrap();
121+
122+
let other_dir = tempfile::Builder::new().tempdir().unwrap();
123+
124+
assert!(dir_with_prefix.path().exists());
125+
126+
remove_tempdirs().unwrap();
127+
128+
assert!(!dir_with_prefix.path().exists());
129+
assert!(!file_inside.exists());
130+
131+
// all these still exist
132+
assert!(file_with_prefix.path().exists());
133+
assert!(other_file.path().exists());
134+
assert!(other_dir.path().exists());
135+
}
136+
}

0 commit comments

Comments
 (0)