@@ -15,6 +15,15 @@ use std::iter;
15
15
use std:: path:: Path ;
16
16
use std:: process:: { self , Command } ;
17
17
18
+ fn handle_epipe ( res : Result < ( ) > ) -> Result < ( ) > {
19
+ match res {
20
+ Err ( Error ( ErrorKind :: Io ( ref err) , _) ) if err. kind ( ) == std:: io:: ErrorKind :: BrokenPipe => {
21
+ Ok ( ( ) )
22
+ }
23
+ res => res,
24
+ }
25
+ }
26
+
18
27
pub fn main ( ) -> Result < ( ) > {
19
28
crate :: self_update:: cleanup_self_updater ( ) ?;
20
29
@@ -30,8 +39,8 @@ pub fn main() -> Result<()> {
30
39
31
40
match matches. subcommand ( ) {
32
41
( "show" , Some ( c) ) => match c. subcommand ( ) {
33
- ( "active-toolchain" , Some ( _) ) => show_active_toolchain ( cfg) ?,
34
- ( _, _) => show ( cfg) ?,
42
+ ( "active-toolchain" , Some ( _) ) => handle_epipe ( show_active_toolchain ( cfg) ) ?,
43
+ ( _, _) => handle_epipe ( show ( cfg) ) ?,
35
44
} ,
36
45
( "install" , Some ( m) ) => update ( cfg, m) ?,
37
46
( "update" , Some ( m) ) => update ( cfg, m) ?,
@@ -667,11 +676,11 @@ fn show(cfg: &Cfg) -> Result<()> {
667
676
// Print host triple
668
677
{
669
678
let mut t = term2:: stdout ( ) ;
670
- let _ = t. attr ( term2:: Attr :: Bold ) ;
671
- let _ = write ! ( t, "Default host: " ) ;
672
- let _ = t. reset ( ) ;
673
- println ! ( "{}" , cfg. get_default_host_triple( ) ?) ;
674
- println ! ( ) ;
679
+ t. attr ( term2:: Attr :: Bold ) ? ;
680
+ write ! ( t, "Default host: " ) ? ;
681
+ t. reset ( ) ? ;
682
+ writeln ! ( t , "{}" , cfg. get_default_host_triple( ) ?) ? ;
683
+ writeln ! ( t ) ? ;
675
684
}
676
685
677
686
let ref cwd = utils:: current_dir ( ) ?;
@@ -712,80 +721,84 @@ fn show(cfg: &Cfg) -> Result<()> {
712
721
> 1 ;
713
722
714
723
if show_installed_toolchains {
724
+ let mut t = term2:: stdout ( ) ;
715
725
if show_headers {
716
- print_header ( "installed toolchains" )
726
+ print_header ( & mut t , "installed toolchains" ) ? ;
717
727
}
718
728
let default_name = cfg. get_default ( ) ?;
719
- for t in installed_toolchains {
720
- if default_name == t {
721
- println ! ( "{} (default)" , t ) ;
729
+ for it in installed_toolchains {
730
+ if default_name == it {
731
+ writeln ! ( t , "{} (default)" , it ) ? ;
722
732
} else {
723
- println ! ( "{}" , t ) ;
733
+ writeln ! ( t , "{}" , it ) ? ;
724
734
}
725
735
}
726
736
if show_headers {
727
- println ! ( )
737
+ writeln ! ( t ) ?
728
738
} ;
729
739
}
730
740
731
741
if show_active_targets {
742
+ let mut t = term2:: stdout ( ) ;
732
743
if show_headers {
733
- print_header ( "installed targets for active toolchain" ) ;
744
+ print_header ( & mut t , "installed targets for active toolchain" ) ? ;
734
745
}
735
- for t in active_targets {
736
- println ! (
746
+ for at in active_targets {
747
+ writeln ! (
748
+ t,
737
749
"{}" ,
738
- t . component
750
+ at . component
739
751
. target
740
752
. as_ref( )
741
753
. expect( "rust-std should have a target" )
742
- ) ;
754
+ ) ? ;
743
755
}
744
756
if show_headers {
745
- println ! ( )
757
+ writeln ! ( t ) ? ;
746
758
} ;
747
759
}
748
760
749
761
if show_active_toolchain {
762
+ let mut t = term2:: stdout ( ) ;
750
763
if show_headers {
751
- print_header ( "active toolchain" )
764
+ print_header ( & mut t , "active toolchain" ) ? ;
752
765
}
753
766
754
767
match active_toolchain {
755
768
Ok ( atc) => match atc {
756
769
Some ( ( ref toolchain, Some ( ref reason) ) ) => {
757
- println ! ( "{} ({})" , toolchain. name( ) , reason) ;
758
- println ! ( "{}" , common:: rustc_version( toolchain) ) ;
770
+ writeln ! ( t , "{} ({})" , toolchain. name( ) , reason) ? ;
771
+ writeln ! ( t , "{}" , common:: rustc_version( toolchain) ) ? ;
759
772
}
760
773
Some ( ( ref toolchain, None ) ) => {
761
- println ! ( "{} (default)" , toolchain. name( ) ) ;
762
- println ! ( "{}" , common:: rustc_version( toolchain) ) ;
774
+ writeln ! ( t , "{} (default)" , toolchain. name( ) ) ? ;
775
+ writeln ! ( t , "{}" , common:: rustc_version( toolchain) ) ? ;
763
776
}
764
777
None => {
765
- println ! ( "no active toolchain" ) ;
778
+ writeln ! ( t , "no active toolchain" ) ? ;
766
779
}
767
780
} ,
768
781
Err ( err) => {
769
782
if let Some ( cause) = err. source ( ) {
770
- println ! ( "(error: {}, {})" , err, cause) ;
783
+ writeln ! ( t , "(error: {}, {})" , err, cause) ? ;
771
784
} else {
772
- println ! ( "(error: {})" , err) ;
785
+ writeln ! ( t , "(error: {})" , err) ? ;
773
786
}
774
787
}
775
788
}
776
789
777
790
if show_headers {
778
- println ! ( )
779
- } ;
791
+ writeln ! ( t ) ?
792
+ }
780
793
}
781
794
782
- fn print_header ( s : & str ) {
783
- let mut t = term2:: stdout ( ) ;
784
- let _ = t . attr ( term2 :: Attr :: Bold ) ;
785
- let _ = writeln ! ( t, "{}" , s ) ;
786
- let _ = writeln ! ( t, "{}" , iter :: repeat ( "-" ) . take ( s . len ( ) ) . collect :: < String > ( ) ) ;
787
- let _ = writeln ! ( t , "" ) ;
788
- let _ = t . reset ( ) ;
795
+ fn print_header ( t : & mut term2 :: Terminal < std :: io :: Stdout > , s : & str ) -> Result < ( ) > {
796
+ t . attr ( term2:: Attr :: Bold ) ? ;
797
+ writeln ! ( t , "{}" , s ) ? ;
798
+ writeln ! ( t, "{}" , iter :: repeat ( "-" ) . take ( s . len ( ) ) . collect :: < String > ( ) ) ? ;
799
+ writeln ! ( t) ? ;
800
+ t . reset ( ) ? ;
801
+ Ok ( ( ) )
789
802
}
790
803
791
804
Ok ( ( ) )
0 commit comments