@@ -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 } ;
@@ -385,9 +384,12 @@ impl Builder {
385384
386385 fn target_host_combination ( & mut self , host : & str , manifest : & Manifest ) -> Option < Target > {
387386 let filename = self . versions . tarball_name ( & PkgType :: Rust , host) . unwrap ( ) ;
388- let digest = self . digests . remove ( & filename) ?;
389- let xz_filename = filename. replace ( ".tar.gz" , ".tar.xz" ) ;
390- let xz_digest = self . digests . remove ( & xz_filename) ;
387+
388+ let mut target = Target :: from_compressed_tar ( self , & filename) ;
389+ if !target. available {
390+ return None ;
391+ }
392+
391393 let mut components = Vec :: new ( ) ;
392394 let mut extensions = Vec :: new ( ) ;
393395
@@ -443,15 +445,9 @@ impl Builder {
443445 extensions. retain ( & has_component) ;
444446 components. retain ( & has_component) ;
445447
446- Some ( Target {
447- available : true ,
448- url : Some ( self . url ( & filename) ) ,
449- hash : Some ( digest) ,
450- xz_url : xz_digest. as_ref ( ) . map ( |_| self . url ( & xz_filename) ) ,
451- xz_hash : xz_digest,
452- components : Some ( components) ,
453- extensions : Some ( extensions) ,
454- } )
448+ target. components = Some ( components) ;
449+ target. extensions = Some ( extensions) ;
450+ Some ( target)
455451 }
456452
457453 fn profile (
@@ -489,37 +485,19 @@ impl Builder {
489485 let targets = targets
490486 . iter ( )
491487 . map ( |name| {
492- if is_present {
493- // The component generally exists, but it might still be missing for this target.
488+ let target = if is_present {
494489 let filename = self
495490 . versions
496491 . tarball_name ( & PkgType :: from_component ( pkgname) , name)
497492 . unwrap ( ) ;
498- let digest = match self . digests . remove ( & filename) {
499- Some ( digest) => digest,
500- // This component does not exist for this target -- skip it.
501- None => return ( name. to_string ( ) , Target :: unavailable ( ) ) ,
502- } ;
503- let xz_filename = filename. replace ( ".tar.gz" , ".tar.xz" ) ;
504- let xz_digest = self . digests . remove ( & xz_filename) ;
505-
506- (
507- name. to_string ( ) ,
508- Target {
509- available : true ,
510- url : Some ( self . url ( & filename) ) ,
511- hash : Some ( digest) ,
512- xz_url : xz_digest. as_ref ( ) . map ( |_| self . url ( & xz_filename) ) ,
513- xz_hash : xz_digest,
514- components : None ,
515- extensions : None ,
516- } ,
517- )
493+
494+ Target :: from_compressed_tar ( self , & filename)
518495 } else {
519496 // If the component is not present for this build add it anyway but mark it as
520497 // unavailable -- this way rustup won't allow upgrades without --force
521- ( name. to_string ( ) , Target :: unavailable ( ) )
522- }
498+ Target :: unavailable ( )
499+ } ;
500+ ( name. to_string ( ) , target)
523501 } )
524502 . collect ( ) ;
525503
@@ -533,8 +511,9 @@ impl Builder {
533511 ) ;
534512 }
535513
536- fn url ( & self , filename : & str ) -> String {
537- format ! ( "{}/{}/{}" , self . s3_address, self . date, filename)
514+ fn url ( & self , path : & Path ) -> String {
515+ let file_name = path. file_name ( ) . unwrap ( ) . to_str ( ) . unwrap ( ) ;
516+ format ! ( "{}/{}/{}" , self . s3_address, self . date, file_name)
538517 }
539518
540519 fn hash ( & self , path : & Path ) -> String {
0 commit comments