about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLeón Orell Valerian Liehr <me@fmease.dev>2024-06-19 13:04:59 +0200
committerGitHub <noreply@github.com>2024-06-19 13:04:59 +0200
commitcbf9d57e89a4dc756b27d22053d19f98f99e06f0 (patch)
tree512574773aa5ba17679e0cf39322a8fe9fe1ffbc
parent035285b4646266e3a73447d8a08d9f16a1022311 (diff)
parent5ae2446109ccdc64921561228eb983f795705b17 (diff)
downloadrust-cbf9d57e89a4dc756b27d22053d19f98f99e06f0.tar.gz
rust-cbf9d57e89a4dc756b27d22053d19f98f99e06f0.zip
Rollup merge of #126572 - onur-ozkan:channel-problem, r=clubby789
override user defined channel when using precompiled rustc

We need to override `rust.channel` if it's manually specified when using the CI rustc. This is because if the compiler uses a different channel than the one specified in config.toml, tests may fail due to using a different channel than the one used by the compiler during tests.

For more context, see https://github.com/rust-lang/rust/pull/122709#issuecomment-2165246281.
-rw-r--r--src/bootstrap/src/core/builder.rs23
-rw-r--r--src/bootstrap/src/core/config/config.rs18
2 files changed, 23 insertions, 18 deletions
diff --git a/src/bootstrap/src/core/builder.rs b/src/bootstrap/src/core/builder.rs
index dd47ae96329..3c4806a1311 100644
--- a/src/bootstrap/src/core/builder.rs
+++ b/src/bootstrap/src/core/builder.rs
@@ -1031,23 +1031,12 @@ impl<'a> Builder<'a> {
     }
 
     pub fn doc_rust_lang_org_channel(&self) -> String {
-        // When using precompiled compiler from CI, we need to use CI rustc's channel and
-        // ignore `rust.channel` from the configuration. Otherwise most of the rustdoc tests
-        // will fail due to incompatible `DOC_RUST_LANG_ORG_CHANNEL`.
-        let channel = if let Some(commit) = self.config.download_rustc_commit() {
-            self.config
-                .read_file_by_commit(&PathBuf::from("src/ci/channel"), commit)
-                .trim()
-                .to_owned()
-        } else {
-            match &*self.config.channel {
-                "stable" => &self.version,
-                "beta" => "beta",
-                "nightly" | "dev" => "nightly",
-                // custom build of rustdoc maybe? link to the latest stable docs just in case
-                _ => "stable",
-            }
-            .to_owned()
+        let channel = match &*self.config.channel {
+            "stable" => &self.version,
+            "beta" => "beta",
+            "nightly" | "dev" => "nightly",
+            // custom build of rustdoc maybe? link to the latest stable docs just in case
+            _ => "stable",
         };
 
         format!("https://doc.rust-lang.org/{channel}")
diff --git a/src/bootstrap/src/core/config/config.rs b/src/bootstrap/src/core/config/config.rs
index a1d8ca3cbca..0438dee7241 100644
--- a/src/bootstrap/src/core/config/config.rs
+++ b/src/bootstrap/src/core/config/config.rs
@@ -1718,7 +1718,23 @@ impl Config {
         config.omit_git_hash = omit_git_hash.unwrap_or(default);
         config.rust_info = GitInfo::new(config.omit_git_hash, &config.src);
 
-        if config.rust_info.is_from_tarball() && !is_user_configured_rust_channel {
+        // We need to override `rust.channel` if it's manually specified when using the CI rustc.
+        // This is because if the compiler uses a different channel than the one specified in config.toml,
+        // tests may fail due to using a different channel than the one used by the compiler during tests.
+        if let Some(commit) = &config.download_rustc_commit {
+            if is_user_configured_rust_channel {
+                println!(
+                    "WARNING: `rust.download-rustc` is enabled. The `rust.channel` option will be overridden by the CI rustc's channel."
+                );
+
+                let channel = config
+                    .read_file_by_commit(&PathBuf::from("src/ci/channel"), commit)
+                    .trim()
+                    .to_owned();
+
+                config.channel = channel;
+            }
+        } else if config.rust_info.is_from_tarball() && !is_user_configured_rust_channel {
             ci_channel.clone_into(&mut config.channel);
         }