about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJoshua Nelson <jnelson@cloudflare.com>2022-07-01 23:47:48 -0500
committerJoshua Nelson <jnelson@cloudflare.com>2022-07-01 23:47:48 -0500
commit75dfd5e1c1a51c44c8eb8d7474879f6ae5969085 (patch)
treefcfbb3d317f11ae1b28d05138323366c8d99f1d0
parentacdcdfb61b7b472bfacbb8bb889bdf3204827f2e (diff)
downloadrust-75dfd5e1c1a51c44c8eb8d7474879f6ae5969085.tar.gz
rust-75dfd5e1c1a51c44c8eb8d7474879f6ae5969085.zip
Fix caching bug in `download-rustc = true`
When moving this to rustbuild, I introduced a bug: if you had the file already downloaded, but
deleted the sysroot for whatever reason, rustbuil would fail to unpack the cached tarball.

This only affects people if they have a cached tarball, which is probably why we haven't seen an issue yet -
wiping `build/cache` would work around the issue, or just not deleting `build/$TARGET/stage2`.
-rw-r--r--src/bootstrap/builder.rs1
-rw-r--r--src/bootstrap/config.rs3
2 files changed, 3 insertions, 1 deletions
diff --git a/src/bootstrap/builder.rs b/src/bootstrap/builder.rs
index 62b5416cee8..5eab464456b 100644
--- a/src/bootstrap/builder.rs
+++ b/src/bootstrap/builder.rs
@@ -945,6 +945,7 @@ impl<'a> Builder<'a> {
     }
 
     pub(crate) fn download_component(&self, url: &str, dest_path: &Path, help_on_error: &str) {
+        self.verbose(&format!("download {url}"));
         // Use a temporary file in case we crash while downloading, to avoid a corrupt download in cache/.
         let tempfile = self.tempdir().join(dest_path.file_name().unwrap());
         // While bootstrap itself only supports http and https downloads, downstream forks might
diff --git a/src/bootstrap/config.rs b/src/bootstrap/config.rs
index 14607741932..c7e15f4625a 100644
--- a/src/bootstrap/config.rs
+++ b/src/bootstrap/config.rs
@@ -1560,7 +1560,7 @@ fn download_ci_rustc(builder: &Builder<'_>, commit: &str) {
         builder.fix_bin_or_dylib(&bin_root.join("bin").join("rustc"));
         builder.fix_bin_or_dylib(&bin_root.join("bin").join("rustdoc"));
         let lib_dir = bin_root.join("lib");
-        for lib in t!(fs::read_dir(lib_dir)) {
+        for lib in t!(fs::read_dir(&lib_dir), lib_dir.display().to_string()) {
             let lib = t!(lib);
             if lib.path().extension() == Some(OsStr::new("so")) {
                 builder.fix_bin_or_dylib(&lib.path());
@@ -1636,6 +1636,7 @@ fn download_component(
         }
         Some(sha256)
     } else if tarball.exists() {
+        builder.unpack(&tarball, &bin_root, prefix);
         return;
     } else {
         None