From 2946b70930a8c7ebe46833bb7ad51bd6f3daf8bf Mon Sep 17 00:00:00 2001 From: rami3l Date: Mon, 25 Sep 2023 12:41:48 +0800 Subject: [PATCH] Make `rustup override` and `rust-toolchain.toml` hierarchical --- src/config.rs | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/config.rs b/src/config.rs index 14eee1ce7d..480bf0f518 100644 --- a/src/config.rs +++ b/src/config.rs @@ -580,14 +580,15 @@ impl Cfg { dir: &Path, settings: &Settings, ) -> Result> { + let mut override_ = None; + let notify = self.notify_handler.as_ref(); - let mut dir = Some(dir); - while let Some(d) = dir { + for d in std::iter::successors(Some(dir), |d| d.parent()) { // First check the override database if let Some(name) = settings.dir_override(d, notify) { let reason = OverrideReason::OverrideDB(d.to_owned()); - return Ok(Some((name.into(), reason))); + update_override(&mut override_, name.into(), reason); } // Then look for 'rust-toolchain' or 'rust-toolchain.toml' @@ -662,13 +663,11 @@ impl Cfg { } let reason = OverrideReason::ToolchainFile(toolchain_file); - return Ok(Some((override_file, reason))); + update_override(&mut override_, override_file, reason); } - - dir = d.parent(); } - Ok(None) + Ok(override_) } fn parse_override_file>(