@@ -10,20 +10,43 @@ pub struct ListCmd;
1010
1111impl ListCmd {
1212 pub async fn run ( self ) -> anyhow:: Result < ( ) > {
13- let all_versions = svm:: all_versions ( ) . await ?;
14- let installed_versions = svm:: installed_versions ( ) . unwrap_or_default ( ) ;
15- let current_version = svm:: get_global_version ( ) ?;
13+ let mut failed = false ;
14+ let mut err = |e : & svm:: SvmError , s : & str | {
15+ failed = true ;
16+ eprintln ! ( "{s}: {e}" ) ;
17+ } ;
1618
17- let a: HashSet < Version > = all_versions. iter ( ) . cloned ( ) . collect ( ) ;
18- let b: HashSet < Version > = installed_versions. iter ( ) . cloned ( ) . collect ( ) ;
19- let c = & a - & b;
19+ let all_versions = svm:: all_versions ( )
20+ . await
21+ . inspect_err ( |e| err ( e, "Error fetching all versions" ) )
22+ . unwrap_or_default ( ) ;
23+ let installed_versions = svm:: installed_versions ( )
24+ . inspect_err ( |e| err ( e, "Error fetching installed versions" ) )
25+ . unwrap_or_default ( ) ;
26+ let current_version =
27+ svm:: get_global_version ( ) . inspect_err ( |e| err ( e, "Error fetching current version" ) ) ;
2028
21- let mut available_versions = c. iter ( ) . cloned ( ) . collect :: < Vec < Version > > ( ) ;
29+ let mut available_versions = {
30+ let a: HashSet < Version > = all_versions. iter ( ) . cloned ( ) . collect ( ) ;
31+ let b: HashSet < Version > = installed_versions. iter ( ) . cloned ( ) . collect ( ) ;
32+ let c = & a - & b;
33+ c. iter ( ) . cloned ( ) . collect :: < Vec < Version > > ( )
34+ } ;
2235 available_versions. sort ( ) ;
2336
24- print:: current_version ( current_version) ;
25- print:: installed_versions ( installed_versions) ;
26- print:: available_versions ( available_versions) ;
37+ if let Ok ( current_version) = current_version {
38+ print:: current_version ( current_version) ;
39+ }
40+ if !installed_versions. is_empty ( ) {
41+ print:: installed_versions ( installed_versions) ;
42+ }
43+ if !available_versions. is_empty ( ) {
44+ print:: available_versions ( available_versions) ;
45+ }
46+
47+ if failed {
48+ std:: process:: exit ( 1 ) ;
49+ }
2750
2851 Ok ( ( ) )
2952 }
0 commit comments