@@ -750,20 +750,6 @@ pub(crate) async fn update_from_dist(
750750 }
751751 }
752752
753- let res = update_from_dist_ ( prefix, opts) . await ;
754- // Don't leave behind an empty / broken installation directory
755- if res. is_err ( ) && fresh_install {
756- // FIXME Ignoring cascading errors
757- let _ = utils:: remove_dir ( "toolchain" , prefix. path ( ) , opts. dl_cfg . notify_handler ) ;
758- }
759-
760- res
761- }
762-
763- async fn update_from_dist_ (
764- prefix : & InstallPrefix ,
765- opts : & DistOptions < ' _ > ,
766- ) -> Result < Option < String > > {
767753 let mut fetched = String :: new ( ) ;
768754 let mut first_err = None ;
769755 let backtrack = opts. desc . channel == "nightly" && opts. desc . date . is_none ( ) ;
@@ -811,7 +797,7 @@ async fn update_from_dist_(
811797 } ;
812798
813799 let mut toolchain = opts. desc . clone ( ) ;
814- loop {
800+ let res = loop {
815801 let result = try_update_from_dist_ (
816802 opts. dl_cfg ,
817803 opts. update_hash ,
@@ -829,8 +815,8 @@ async fn update_from_dist_(
829815 . await ;
830816
831817 let e = match result {
832- Ok ( v) => return Ok ( v) ,
833- Err ( e) if !backtrack => return Err ( e) ,
818+ Ok ( v) => break Ok ( v) ,
819+ Err ( e) if !backtrack => break Err ( e) ,
834820 Err ( e) => e,
835821 } ;
836822
@@ -892,7 +878,15 @@ async fn update_from_dist_(
892878 }
893879
894880 toolchain. date = Some ( try_next. format ( "%Y-%m-%d" ) . to_string ( ) ) ;
881+ } ;
882+
883+ // Don't leave behind an empty / broken installation directory
884+ if res. is_err ( ) && fresh_install {
885+ // FIXME Ignoring cascading errors
886+ let _ = utils:: remove_dir ( "toolchain" , prefix. path ( ) , opts. dl_cfg . notify_handler ) ;
895887 }
888+
889+ res
896890}
897891
898892async fn try_update_from_dist_ (
0 commit comments