From 921618c7fc600b10d452bf637f467ed6c3088459 Mon Sep 17 00:00:00 2001 From: Eric Huss Date: Sat, 11 Feb 2023 15:07:51 -0800 Subject: [PATCH] Add RUSTUP_TOOLCHAIN_DIR --- src/toolchain.rs | 1 + tests/cli-rustup.rs | 18 +++++++++++++++++- tests/mock/mock_bin_src.rs | 5 +++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/toolchain.rs b/src/toolchain.rs index c91b9777ca..0e1300f90f 100644 --- a/src/toolchain.rs +++ b/src/toolchain.rs @@ -401,6 +401,7 @@ impl<'a> InstalledCommonToolchain<'a> { cmd.env("RUSTUP_TOOLCHAIN", &self.0.name); cmd.env("RUSTUP_HOME", &self.0.cfg.rustup_dir); + cmd.env("RUSTUP_TOOLCHAIN_DIR", &self.0.path); } fn set_ldpath(&self, cmd: &mut Command) { diff --git a/tests/cli-rustup.rs b/tests/cli-rustup.rs index ea8a9c32fa..2f8bdb3eb3 100644 --- a/tests/cli-rustup.rs +++ b/tests/cli-rustup.rs @@ -4,7 +4,7 @@ pub mod mock; use std::env::consts::EXE_SUFFIX; use std::fs; -use std::path::{PathBuf, MAIN_SEPARATOR}; +use std::path::{Path, PathBuf, MAIN_SEPARATOR}; use rustup::for_host; use rustup::test::this_host_triple; @@ -2252,3 +2252,19 @@ fn warn_on_duplicate_rust_toolchain_file() { ); }); } + +/// Checks that the RUSTUP_TOOLCHAIN_DIR is set. +#[test] +fn toolchain_dir_env() { + setup(&|config| { + expect_ok(config, &["rustup", "default", "nightly"]); + let output = clitools::run(config, "rustup", &["which", "rustc"], &[]); + let real_mock_rustc = Path::new(output.stdout.trim()); + let toolchain_dir = real_mock_rustc.parent().unwrap().parent().unwrap(); + expect_stderr_ok( + config, + &["rustc", "--echo-env", "RUSTUP_TOOLCHAIN_DIR"], + toolchain_dir.to_str().unwrap(), + ); + }); +} diff --git a/tests/mock/mock_bin_src.rs b/tests/mock/mock_bin_src.rs index 7acafb67e1..e8e10cbae7 100644 --- a/tests/mock/mock_bin_src.rs +++ b/tests/mock/mock_bin_src.rs @@ -71,6 +71,11 @@ fn main() { let mut out = io::stderr(); writeln!(out, "{}", std::env::var("PATH").unwrap()).unwrap(); } + Some("--echo-env") => { + let mut out = io::stderr(); + let var = args.next().unwrap(); + writeln!(out, "{}", std::env::var(var).unwrap_or_default()).unwrap(); + } _ => panic!("bad mock proxy commandline"), } }