diff --git a/src/config.rs b/src/config.rs index 14eee1ce7d..6c266a2319 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,15 @@ impl Cfg { } let reason = OverrideReason::ToolchainFile(toolchain_file); - return Ok(Some((override_file, reason))); + update_override(&mut override_, override_file, reason); } - dir = d.parent(); + if override_.is_some() { + break; + } } - Ok(None) + Ok(override_) } fn parse_override_file>(