Skip to content

Commit 3299605

Browse files
committed
feat(config): warn user if auto-install is enabled
1 parent 37a46a4 commit 3299605

2 files changed

Lines changed: 46 additions & 5 deletions

File tree

src/config.rs

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -384,12 +384,26 @@ impl<'a> Cfg<'a> {
384384
return Ok(false);
385385
}
386386

387-
if let Ok(mode) = self.process.var("RUSTUP_AUTO_INSTALL") {
388-
Ok(mode != "0")
389-
} else {
390-
self.settings_file
391-
.with(|s| Ok(s.auto_install != Some(AutoInstallMode::Disable)))
387+
let should_auto = match self.process.var("RUSTUP_AUTO_INSTALL") {
388+
Ok(mode) => mode != "0",
389+
Err(_) => self
390+
.settings_file
391+
.with(|s| Ok(s.auto_install != Some(AutoInstallMode::Disable)))?,
392+
};
393+
if !should_auto {
394+
return Ok(false);
392395
}
396+
397+
// We also need to suppress this warning if we're deep inside a recursive call.
398+
let recursions = self.process.var("RUST_RECURSION_COUNT");
399+
if recursions.is_ok_and(|it| it != "0") {
400+
return Ok(true);
401+
}
402+
403+
warn!("auto-install is enabled, active toolchain will be installed if absent");
404+
warn!("this might cause rustup commands to take longer time to finish than expected");
405+
info!("you may opt out with `RUSTUP_AUTO_INSTALL=0` or `rustup set auto-install disable`");
406+
Ok(true)
393407
}
394408

395409
// Returns a profile, if one exists in the settings file.

tests/suite/cli_misc.rs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1749,3 +1749,30 @@ info: falling back to "[EXTERN_PATH]"
17491749
"#]])
17501750
.is_ok();
17511751
}
1752+
1753+
#[tokio::test]
1754+
async fn warn_auto_install() {
1755+
let cx = CliTestContext::new(Scenario::SimpleV2).await;
1756+
cx.config
1757+
.expect_with_env(
1758+
["rustc", "--version"],
1759+
[
1760+
("RUSTUP_TOOLCHAIN", "stable"),
1761+
("RUSTUP_AUTO_INSTALL", "1"),
1762+
("RUST_RECURSION_COUNT", ""),
1763+
],
1764+
)
1765+
.await
1766+
.with_stdout(snapbox::str![[r#"
1767+
1.1.0 (hash-stable-1.1.0)
1768+
1769+
"#]])
1770+
.with_stderr(snapbox::str![[r#"
1771+
...
1772+
warn: auto-install is enabled, active toolchain will be installed if absent
1773+
warn: this might cause rustup commands to take longer time to finish than expected
1774+
info: you may opt out with `RUSTUP_AUTO_INSTALL=0` or `rustup set auto-install disable`
1775+
...
1776+
"#]])
1777+
.is_ok();
1778+
}

0 commit comments

Comments
 (0)