@@ -9,8 +9,7 @@ mod versions;
99
1010use crate :: manifest:: { Component , Manifest , Package , Rename , Target } ;
1111use crate :: versions:: { PkgType , Versions } ;
12- use std:: collections:: BTreeMap ;
13- use std:: collections:: HashMap ;
12+ use std:: collections:: { BTreeMap , HashMap } ;
1413use std:: env;
1514use std:: fs:: { self , File } ;
1615use std:: io:: { self , Read , Write } ;
@@ -389,9 +388,12 @@ impl Builder {
389388
390389 fn target_host_combination ( & mut self , host : & str , manifest : & Manifest ) -> Option < Target > {
391390 let filename = self . versions . tarball_name ( & PkgType :: Rust , host) . unwrap ( ) ;
392- let digest = self . digests . remove ( & filename) ?;
393- let xz_filename = filename. replace ( ".tar.gz" , ".tar.xz" ) ;
394- let xz_digest = self . digests . remove ( & xz_filename) ;
391+
392+ let mut target = Target :: from_compressed_tar ( self , & filename) ;
393+ if !target. available {
394+ return None ;
395+ }
396+
395397 let mut components = Vec :: new ( ) ;
396398 let mut extensions = Vec :: new ( ) ;
397399
@@ -447,15 +449,9 @@ impl Builder {
447449 extensions. retain ( & has_component) ;
448450 components. retain ( & has_component) ;
449451
450- Some ( Target {
451- available : true ,
452- url : Some ( self . url ( & filename) ) ,
453- hash : Some ( digest) ,
454- xz_url : xz_digest. as_ref ( ) . map ( |_| self . url ( & xz_filename) ) ,
455- xz_hash : xz_digest,
456- components : Some ( components) ,
457- extensions : Some ( extensions) ,
458- } )
452+ target. components = Some ( components) ;
453+ target. extensions = Some ( extensions) ;
454+ Some ( target)
459455 }
460456
461457 fn profile (
@@ -493,37 +489,19 @@ impl Builder {
493489 let targets = targets
494490 . iter ( )
495491 . map ( |name| {
496- if is_present {
497- // The component generally exists, but it might still be missing for this target.
492+ let target = if is_present {
498493 let filename = self
499494 . versions
500495 . tarball_name ( & PkgType :: from_component ( pkgname) , name)
501496 . unwrap ( ) ;
502- let digest = match self . digests . remove ( & filename) {
503- Some ( digest) => digest,
504- // This component does not exist for this target -- skip it.
505- None => return ( name. to_string ( ) , Target :: unavailable ( ) ) ,
506- } ;
507- let xz_filename = filename. replace ( ".tar.gz" , ".tar.xz" ) ;
508- let xz_digest = self . digests . remove ( & xz_filename) ;
509-
510- (
511- name. to_string ( ) ,
512- Target {
513- available : true ,
514- url : Some ( self . url ( & filename) ) ,
515- hash : Some ( digest) ,
516- xz_url : xz_digest. as_ref ( ) . map ( |_| self . url ( & xz_filename) ) ,
517- xz_hash : xz_digest,
518- components : None ,
519- extensions : None ,
520- } ,
521- )
497+
498+ Target :: from_compressed_tar ( self , & filename)
522499 } else {
523500 // If the component is not present for this build add it anyway but mark it as
524501 // unavailable -- this way rustup won't allow upgrades without --force
525- ( name. to_string ( ) , Target :: unavailable ( ) )
526- }
502+ Target :: unavailable ( )
503+ } ;
504+ ( name. to_string ( ) , target)
527505 } )
528506 . collect ( ) ;
529507
@@ -537,8 +515,9 @@ impl Builder {
537515 ) ;
538516 }
539517
540- fn url ( & self , filename : & str ) -> String {
541- format ! ( "{}/{}/{}" , self . s3_address, self . date, filename)
518+ fn url ( & self , path : & Path ) -> String {
519+ let file_name = path. file_name ( ) . unwrap ( ) . to_str ( ) . unwrap ( ) ;
520+ format ! ( "{}/{}/{}" , self . s3_address, self . date, file_name)
542521 }
543522
544523 fn hash ( & self , path : & Path ) -> String {
0 commit comments