summaryrefslogtreecommitdiffstats
path: root/src/bootstrap/download.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 03:59:24 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 03:59:24 +0000
commit023939b627b7dc93b01471f7d41fb8553ddb4ffa (patch)
tree60fc59477c605c72b0a1051409062ddecc43f877 /src/bootstrap/download.rs
parentAdding debian version 1.72.1+dfsg1-1. (diff)
downloadrustc-023939b627b7dc93b01471f7d41fb8553ddb4ffa.tar.xz
rustc-023939b627b7dc93b01471f7d41fb8553ddb4ffa.zip
Merging upstream version 1.73.0+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/bootstrap/download.rs')
-rw-r--r--src/bootstrap/download.rs86
1 files changed, 53 insertions, 33 deletions
diff --git a/src/bootstrap/download.rs b/src/bootstrap/download.rs
index cb40521dd..a4135b06e 100644
--- a/src/bootstrap/download.rs
+++ b/src/bootstrap/download.rs
@@ -7,7 +7,7 @@ use std::{
process::{Command, Stdio},
};
-use build_helper::util::try_run;
+use build_helper::ci::CiEnv;
use once_cell::sync::OnceCell;
use xz2::bufread::XzDecoder;
@@ -21,6 +21,12 @@ use crate::{
static SHOULD_FIX_BINS_AND_DYLIBS: OnceCell<bool> = OnceCell::new();
+/// `Config::try_run` wrapper for this module to avoid warnings on `try_run`, since we don't have access to a `builder` yet.
+fn try_run(config: &Config, cmd: &mut Command) -> Result<(), ()> {
+ #[allow(deprecated)]
+ config.try_run(cmd)
+}
+
/// Generic helpers that are useful anywhere in bootstrap.
impl Config {
pub fn is_verbose(&self) -> bool {
@@ -52,24 +58,13 @@ impl Config {
}
/// Runs a command, printing out nice contextual information if it fails.
- /// Exits if the command failed to execute at all, otherwise returns its
- /// `status.success()`.
- pub(crate) fn try_run(&self, cmd: &mut Command) -> Result<(), ()> {
- if self.dry_run() {
- return Ok(());
- }
- self.verbose(&format!("running: {:?}", cmd));
- try_run(cmd, self.is_verbose())
- }
-
- /// Runs a command, printing out nice contextual information if it fails.
/// Returns false if do not execute at all, otherwise returns its
/// `status.success()`.
pub(crate) fn check_run(&self, cmd: &mut Command) -> bool {
if self.dry_run() {
return true;
}
- self.verbose(&format!("running: {:?}", cmd));
+ self.verbose(&format!("running: {cmd:?}"));
check_run(cmd, self.is_verbose())
}
@@ -156,14 +151,16 @@ impl Config {
];
}
";
- nix_build_succeeded = self
- .try_run(Command::new("nix-build").args(&[
+ nix_build_succeeded = try_run(
+ self,
+ Command::new("nix-build").args(&[
Path::new("-E"),
Path::new(NIX_EXPR),
Path::new("-o"),
&nix_deps_dir,
- ]))
- .is_ok();
+ ]),
+ )
+ .is_ok();
nix_deps_dir
});
if !nix_build_succeeded {
@@ -188,7 +185,7 @@ impl Config {
patchelf.args(&["--set-interpreter", dynamic_linker.trim_end()]);
}
- self.try_run(patchelf.arg(fname)).unwrap();
+ let _ = try_run(self, patchelf.arg(fname));
}
fn download_file(&self, url: &str, dest_path: &Path, help_on_error: &str) {
@@ -209,11 +206,10 @@ impl Config {
}
fn download_http_with_retries(&self, tempfile: &Path, url: &str, help_on_error: &str) {
- println!("downloading {}", url);
+ println!("downloading {url}");
// Try curl. If that fails and we are on windows, fallback to PowerShell.
let mut curl = Command::new("curl");
curl.args(&[
- "-#",
"-y",
"30",
"-Y",
@@ -224,6 +220,12 @@ impl Config {
"3",
"-SRf",
]);
+ // Don't print progress in CI; the \r wrapping looks bad and downloads don't take long enough for progress to be useful.
+ if CiEnv::is_ci() {
+ curl.arg("-s");
+ } else {
+ curl.arg("--progress-bar");
+ }
curl.arg(url);
let f = File::create(tempfile).unwrap();
curl.stdout(Stdio::from(f));
@@ -231,7 +233,7 @@ impl Config {
if self.build.contains("windows-msvc") {
eprintln!("Fallback to PowerShell");
for _ in 0..3 {
- if self.try_run(Command::new("PowerShell.exe").args(&[
+ if try_run(self, Command::new("PowerShell.exe").args(&[
"/nologo",
"-Command",
"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12;",
@@ -246,9 +248,9 @@ impl Config {
}
}
if !help_on_error.is_empty() {
- eprintln!("{}", help_on_error);
+ eprintln!("{help_on_error}");
}
- crate::detail_exit_macro!(1);
+ crate::exit!(1);
}
}
@@ -402,7 +404,11 @@ impl Config {
fn ci_component_contents(&self, stamp_file: &str) -> Vec<String> {
assert!(self.download_rustc());
- let ci_rustc_dir = self.out.join(&*self.build.triple).join("ci-rustc");
+ if self.dry_run() {
+ return vec![];
+ }
+
+ let ci_rustc_dir = self.ci_rustc_dir();
let stamp_file = ci_rustc_dir.join(stamp_file);
let contents_file = t!(File::open(&stamp_file), stamp_file.display().to_string());
t!(BufReader::new(contents_file).lines().collect())
@@ -419,7 +425,7 @@ impl Config {
self.download_toolchain(
&version,
"ci-rustc",
- commit,
+ &format!("{commit}-{}", self.llvm_assertions),
&extra_components,
Self::download_ci_component,
);
@@ -495,8 +501,15 @@ impl Config {
/// Download a single component of a CI-built toolchain (not necessarily a published nightly).
// NOTE: intentionally takes an owned string to avoid downloading multiple times by accident
- fn download_ci_component(&self, filename: String, prefix: &str, commit: &str) {
- Self::download_component(self, DownloadSource::CI, filename, prefix, commit, "ci-rustc")
+ fn download_ci_component(&self, filename: String, prefix: &str, commit_with_assertions: &str) {
+ Self::download_component(
+ self,
+ DownloadSource::CI,
+ filename,
+ prefix,
+ commit_with_assertions,
+ "ci-rustc",
+ )
}
fn download_component(
@@ -516,11 +529,18 @@ impl Config {
let bin_root = self.out.join(self.build.triple).join(destination);
let tarball = cache_dir.join(&filename);
let (base_url, url, should_verify) = match mode {
- DownloadSource::CI => (
- self.stage0_metadata.config.artifacts_server.clone(),
- format!("{key}/{filename}"),
- false,
- ),
+ DownloadSource::CI => {
+ let dist_server = if self.llvm_assertions {
+ self.stage0_metadata.config.artifacts_with_llvm_assertions_server.clone()
+ } else {
+ self.stage0_metadata.config.artifacts_server.clone()
+ };
+ let url = format!(
+ "{}/{filename}",
+ key.strip_suffix(&format!("-{}", self.llvm_assertions)).unwrap()
+ );
+ (dist_server, url, false)
+ }
DownloadSource::Dist => {
let dist_server = env::var("RUSTUP_DIST_SERVER")
.unwrap_or(self.stage0_metadata.config.dist_server.to_string());
@@ -626,7 +646,7 @@ download-rustc = false
fn download_ci_llvm(&self, llvm_sha: &str) {
let llvm_assertions = self.llvm_assertions;
- let cache_prefix = format!("llvm-{}-{}", llvm_sha, llvm_assertions);
+ let cache_prefix = format!("llvm-{llvm_sha}-{llvm_assertions}");
let cache_dst = self.out.join("cache");
let rustc_cache = cache_dst.join(cache_prefix);
if !rustc_cache.exists() {