@@ -14,7 +14,6 @@ use once_cell::sync::Lazy;
14
14
15
15
use super :: self_update;
16
16
use crate :: cli:: download_tracker:: DownloadTracker ;
17
- use crate :: config:: ActiveReason ;
18
17
use crate :: currentprocess:: {
19
18
argsource:: ArgSource ,
20
19
filesource:: { StdinSource , StdoutSource } ,
@@ -24,6 +23,7 @@ use crate::currentprocess::{
24
23
use crate :: dist:: dist:: { TargetTriple , ToolchainDesc } ;
25
24
use crate :: dist:: manifest:: ComponentStatus ;
26
25
use crate :: install:: UpdateStatus ;
26
+ use crate :: toolchain:: names:: { LocalToolchainName , ToolchainName } ;
27
27
use crate :: utils:: notifications as util_notifications;
28
28
use crate :: utils:: notify:: NotificationLevel ;
29
29
use crate :: utils:: utils;
@@ -426,78 +426,72 @@ fn list_items(
426
426
Ok ( utils:: ExitCode ( 0 ) )
427
427
}
428
428
429
- fn print_toolchain_path (
430
- cfg : & Cfg ,
431
- toolchain : & str ,
432
- if_default : & str ,
433
- if_override : & str ,
434
- verbose : bool ,
435
- ) -> Result < ( ) > {
436
- let toolchain_path = cfg. toolchains_dir . join ( toolchain) ;
437
- let toolchain_meta = fs:: symlink_metadata ( & toolchain_path) ?;
438
- let toolchain_path = if verbose {
439
- if toolchain_meta. is_dir ( ) {
440
- format ! ( "\t {}" , toolchain_path. display( ) )
441
- } else {
442
- format ! ( "\t {}" , fs:: read_link( toolchain_path) ?. display( ) )
443
- }
444
- } else {
445
- String :: new ( )
446
- } ;
447
- writeln ! (
448
- process( ) . stdout( ) . lock( ) ,
449
- "{}{}{}{}" ,
450
- & toolchain,
451
- if_default,
452
- if_override,
453
- toolchain_path
454
- ) ?;
455
- Ok ( ( ) )
456
- }
457
-
458
429
pub ( crate ) fn list_toolchains ( cfg : & Cfg , verbose : bool ) -> Result < utils:: ExitCode > {
459
- // Work with LocalToolchainName to accommodate path based overrides
460
- let toolchains = cfg
461
- . list_toolchains ( ) ?
462
- . iter ( )
463
- . map ( Into :: into)
464
- . collect :: < Vec < _ > > ( ) ;
430
+ let toolchains = cfg. list_toolchains ( ) ?;
465
431
if toolchains. is_empty ( ) {
466
432
writeln ! ( process( ) . stdout( ) . lock( ) , "no installed toolchains" ) ?;
467
433
} else {
468
- let def_toolchain_name = cfg. get_default ( ) ?. map ( |t| ( & t ) . into ( ) ) ;
434
+ let default_toolchain_name = cfg. get_default ( ) ?;
469
435
let cwd = utils:: current_dir ( ) ?;
470
- let ovr_toolchain_name =
471
- if let Ok ( Some ( ( toolchain, reason) ) ) = cfg. find_active_toolchain ( & cwd) {
472
- match reason {
473
- ActiveReason :: Default => None ,
474
- _ => Some ( toolchain) ,
475
- }
436
+ let active_toolchain_name: Option < ToolchainName > =
437
+ if let Ok ( Some ( ( LocalToolchainName :: Named ( toolchain) , _reason) ) ) =
438
+ cfg. find_active_toolchain ( & cwd)
439
+ {
440
+ Some ( toolchain)
476
441
} else {
477
442
None
478
443
} ;
444
+
479
445
for toolchain in toolchains {
480
- let if_default = if def_toolchain_name. as_ref ( ) == Some ( & toolchain) {
481
- " (default)"
482
- } else {
483
- ""
484
- } ;
485
- let if_override = if ovr_toolchain_name. as_ref ( ) == Some ( & toolchain) {
486
- " (override)"
487
- } else {
488
- ""
489
- } ;
446
+ let is_default_toolchain = default_toolchain_name. as_ref ( ) == Some ( & toolchain) ;
447
+ let is_active_toolchain = active_toolchain_name. as_ref ( ) == Some ( & toolchain) ;
490
448
491
- print_toolchain_path (
449
+ print_toolchain (
492
450
cfg,
493
451
& toolchain. to_string ( ) ,
494
- if_default ,
495
- if_override ,
452
+ is_default_toolchain ,
453
+ is_active_toolchain ,
496
454
verbose,
497
455
)
498
456
. context ( "Failed to list toolchains' directories" ) ?;
499
457
}
500
458
}
459
+
460
+ fn print_toolchain (
461
+ cfg : & Cfg ,
462
+ toolchain : & str ,
463
+ is_default : bool ,
464
+ is_active : bool ,
465
+ verbose : bool ,
466
+ ) -> Result < ( ) > {
467
+ let toolchain_path = cfg. toolchains_dir . join ( toolchain) ;
468
+ let toolchain_meta = fs:: symlink_metadata ( & toolchain_path) ?;
469
+ let toolchain_path = if verbose {
470
+ if toolchain_meta. is_dir ( ) {
471
+ format ! ( " {}" , toolchain_path. display( ) )
472
+ } else {
473
+ format ! ( " {}" , fs:: read_link( toolchain_path) ?. display( ) )
474
+ }
475
+ } else {
476
+ String :: new ( )
477
+ } ;
478
+ let status_str = match ( is_default, is_active) {
479
+ ( true , true ) => " (active, default)" ,
480
+ ( true , false ) => " (default)" ,
481
+ ( false , true ) => " (active)" ,
482
+ ( false , false ) => "" ,
483
+ } ;
484
+
485
+ writeln ! (
486
+ process( ) . stdout( ) . lock( ) ,
487
+ "{}{}{}" ,
488
+ & toolchain,
489
+ status_str,
490
+ toolchain_path
491
+ ) ?;
492
+ Ok ( ( ) )
493
+ }
494
+
501
495
Ok ( utils:: ExitCode ( 0 ) )
502
496
}
503
497
0 commit comments