From 1e14d89b1595fe87f6cbc007f398a41cc9abd4f3 Mon Sep 17 00:00:00 2001 From: Andreas Hartmetz Date: Thu, 5 Mar 2026 18:19:56 +0100 Subject: [PATCH 1/3] Eliminate another not-so-useful destructuring --- src/bin/sccache-dist/build.rs | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/bin/sccache-dist/build.rs b/src/bin/sccache-dist/build.rs index bfd7a980e5..37969fac9c 100644 --- a/src/bin/sccache-dist/build.rs +++ b/src/bin/sccache-dist/build.rs @@ -424,14 +424,10 @@ impl OverlayBuilder { fn finish_overlay(&self, _tc: &Toolchain, overlay: OverlaySpec) { // TODO: collect toolchain directories - let OverlaySpec { - build_dir, - toolchain_dir: _, - } = overlay; - if let Err(e) = fs::remove_dir_all(&build_dir) { + if let Err(e) = fs::remove_dir_all(&overlay.build_dir) { error!( "Failed to remove build directory {}: {}", - build_dir.display(), + overlay.build_dir.display(), e ); } From 94491792fcf2ebb93b97e6b8f7e6085e02e0cfe9 Mon Sep 17 00:00:00 2001 From: Andreas Hartmetz Date: Thu, 5 Mar 2026 17:50:16 +0100 Subject: [PATCH 2/3] Remove useless (empty) unpacked toolchain dirs before others --- src/bin/sccache-dist/build.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/bin/sccache-dist/build.rs b/src/bin/sccache-dist/build.rs index 37969fac9c..5d6d2f34c8 100644 --- a/src/bin/sccache-dist/build.rs +++ b/src/bin/sccache-dist/build.rs @@ -222,6 +222,16 @@ impl OverlayBuilder { }; toolchain_dir_map.insert(tc.clone(), entry.clone()); + + // Drop entries with nonexistent or empty (these somehow happen) extraction dirs + // before deleting anything that might still be usable + if toolchain_dir_map.len() > tccache.len() { + toolchain_dir_map.retain(|tc, _| { + let toolchain_dir = self.dir.join("toolchains").join(&tc.archive_id); + toolchain_dir.exists() && !fs::remove_dir(&toolchain_dir).is_ok() + }); + } + if toolchain_dir_map.len() > tccache.len() { let dir_map = toolchain_dir_map.clone(); let mut entries: Vec<_> = dir_map.iter().collect(); From a9a728a3355fc3708100c6d71c48d170ba9e123a Mon Sep 17 00:00:00 2001 From: Andreas Hartmetz Date: Thu, 5 Mar 2026 18:17:26 +0100 Subject: [PATCH 3/3] Never delete the current unpacked toolchain when cache cleaning --- src/bin/sccache-dist/build.rs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/bin/sccache-dist/build.rs b/src/bin/sccache-dist/build.rs index 5d6d2f34c8..20618a7cbb 100644 --- a/src/bin/sccache-dist/build.rs +++ b/src/bin/sccache-dist/build.rs @@ -241,11 +241,16 @@ impl OverlayBuilder { // toolchains to prevent repeated sort/delete cycles. entries.sort_by(|a, b| (a.1).ctime.cmp(&(b.1).ctime)); entries.truncate(entries.len() / 2); - for (tc, _) in entries { - warn!("Removing old un-compressed toolchain: {:?}", tc); - assert!(toolchain_dir_map.remove(tc).is_some()); - fs::remove_dir_all(self.dir.join("toolchains").join(&tc.archive_id)) + for (del_tc, _) in entries { + // In any case, don't delete the current toolchain + if del_tc.archive_id != tc.archive_id { + warn!("Removing old un-compressed toolchain: {:?}", del_tc); + assert!(toolchain_dir_map.remove(tc).is_some()); + fs::remove_dir_all( + self.dir.join("toolchains").join(&del_tc.archive_id), + ) .context("Failed to remove old toolchain directory")?; + } } } entry