Skip to content

Commit 9794c7d

Browse files
author
Luciano
committed
shows (override) in toolchain list (with test)
1 parent 201e71f commit 9794c7d

File tree

2 files changed

+65
-10
lines changed

2 files changed

+65
-10
lines changed

src/cli/common.rs

Lines changed: 32 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -422,7 +422,13 @@ pub fn list_installed_components(toolchain: &Toolchain<'_>) -> Result<()> {
422422
Ok(())
423423
}
424424

425-
fn print_toolchain_path(cfg: &Cfg, toolchain: &str, if_default: &str, verbose: bool) -> Result<()> {
425+
fn print_toolchain_path(
426+
cfg: &Cfg,
427+
toolchain: &str,
428+
if_default: &str,
429+
if_override: &str,
430+
verbose: bool,
431+
) -> Result<()> {
426432
let toolchain_path = {
427433
let mut t_path = cfg.toolchains_dir.clone();
428434
t_path.push(&toolchain);
@@ -438,27 +444,43 @@ fn print_toolchain_path(cfg: &Cfg, toolchain: &str, if_default: &str, verbose: b
438444
} else {
439445
String::new()
440446
};
441-
println!("{}{}{}", &toolchain, if_default, toolchain_path);
447+
println!(
448+
"{}{}{}{}",
449+
&toolchain, if_default, if_override, toolchain_path
450+
);
442451
Ok(())
443452
}
444453

445454
pub fn list_toolchains(cfg: &Cfg, verbose: bool) -> Result<()> {
446455
let toolchains = cfg.list_toolchains()?;
447456
if toolchains.is_empty() {
448457
println!("no installed toolchains");
449-
} else if let Ok(Some(def_toolchain)) = cfg.find_default() {
458+
} else {
459+
let def_toolchain_name = if let Ok(Some(def_toolchain)) = cfg.find_default() {
460+
def_toolchain.name().to_string()
461+
} else {
462+
String::new()
463+
};
464+
let cwd = utils::current_dir()?;
465+
let ovr_toolchain_name = if let Ok(Some((ovr_toolchain, _reason))) = cfg.find_override(&cwd)
466+
{
467+
ovr_toolchain.name().to_string()
468+
} else {
469+
String::new()
470+
};
450471
for toolchain in toolchains {
451-
let if_default = if def_toolchain.name() == &*toolchain {
472+
let if_default = if def_toolchain_name == &*toolchain {
452473
" (default)"
453474
} else {
454475
""
455476
};
456-
print_toolchain_path(cfg, &toolchain, if_default, verbose)
457-
.expect("Failed to list toolchains' directories");
458-
}
459-
} else {
460-
for toolchain in toolchains {
461-
print_toolchain_path(cfg, &toolchain, "", verbose)
477+
let if_override = if ovr_toolchain_name == &*toolchain {
478+
" (override)"
479+
} else {
480+
""
481+
};
482+
483+
print_toolchain_path(cfg, &toolchain, if_default, if_override, verbose)
462484
.expect("Failed to list toolchains' directories");
463485
}
464486
}

tests/cli-rustup.rs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -772,6 +772,39 @@ fn list_default_toolchain() {
772772
});
773773
}
774774

775+
#[test]
776+
fn list_override_toolchain() {
777+
setup(&|config| {
778+
expect_ok(config, &["rustup", "override", "set", "nightly"]);
779+
expect_ok_ex(
780+
config,
781+
&["rustup", "toolchain", "list"],
782+
for_host!(
783+
r"nightly-{0} (override)
784+
"
785+
),
786+
r"",
787+
);
788+
});
789+
}
790+
791+
#[test]
792+
fn list_default_and_override_toolchain() {
793+
setup(&|config| {
794+
expect_ok(config, &["rustup", "default", "nightly"]);
795+
expect_ok(config, &["rustup", "override", "set", "nightly"]);
796+
expect_ok_ex(
797+
config,
798+
&["rustup", "toolchain", "list"],
799+
for_host!(
800+
r"nightly-{0} (default) (override)
801+
"
802+
),
803+
r"",
804+
);
805+
});
806+
}
807+
775808
#[test]
776809
#[ignore = "FIXME: Windows shows UNC paths"]
777810
fn show_toolchain_override() {

0 commit comments

Comments
 (0)