|
1 | | -use std::borrow::Cow; |
2 | 1 | use std::fmt::{self, Display}; |
3 | 2 | use std::io; |
4 | 3 | use std::path::{Path, PathBuf}; |
5 | 4 | use std::process::Command; |
6 | 5 | use std::str::FromStr; |
7 | 6 | use std::sync::Arc; |
| 7 | +use std::{borrow::Cow, iter}; |
8 | 8 |
|
9 | 9 | use anyhow::{anyhow, bail, Context, Result}; |
10 | 10 | use derivative::Derivative; |
@@ -580,13 +580,15 @@ impl Cfg { |
580 | 580 | dir: &Path, |
581 | 581 | settings: &Settings, |
582 | 582 | ) -> Result<Option<(OverrideFile, OverrideReason)>> { |
| 583 | + let mut override_ = None; |
| 584 | + |
583 | 585 | let notify = self.notify_handler.as_ref(); |
584 | 586 |
|
585 | 587 | for d in iter::successors(Some(dir), |d| d.parent()) { |
586 | 588 | // First check the override database |
587 | 589 | if let Some(name) = settings.dir_override(d, notify) { |
588 | 590 | let reason = OverrideReason::OverrideDB(d.to_owned()); |
589 | | - return Ok(Some((name.into(), reason))); |
| 591 | + update_override(&mut override_, name.into(), reason); |
590 | 592 | } |
591 | 593 |
|
592 | 594 | // Then look for 'rust-toolchain' or 'rust-toolchain.toml' |
@@ -661,11 +663,15 @@ impl Cfg { |
661 | 663 | } |
662 | 664 |
|
663 | 665 | let reason = OverrideReason::ToolchainFile(toolchain_file); |
664 | | - return Ok(Some((override_file, reason))); |
| 666 | + update_override(&mut override_, override_file, reason); |
| 667 | + } |
| 668 | + |
| 669 | + if override_.is_some() { |
| 670 | + break; |
665 | 671 | } |
666 | 672 | } |
667 | 673 |
|
668 | | - Ok(None) |
| 674 | + Ok(override_) |
669 | 675 | } |
670 | 676 |
|
671 | 677 | fn parse_override_file<S: AsRef<str>>( |
|
0 commit comments