66
77mod versions;
88
9- use crate :: versions:: PkgType ;
9+ use crate :: versions:: { PkgType , Versions } ;
1010use serde:: Serialize ;
1111use std:: collections:: BTreeMap ;
1212use std:: collections:: HashMap ;
@@ -227,14 +227,7 @@ macro_rules! t {
227227}
228228
229229struct Builder {
230- rust_release : String ,
231- cargo_release : String ,
232- rls_release : String ,
233- rust_analyzer_release : String ,
234- clippy_release : String ,
235- rustfmt_release : String ,
236- llvm_tools_release : String ,
237- miri_release : String ,
230+ versions : Versions ,
238231
239232 input : PathBuf ,
240233 output : PathBuf ,
@@ -281,15 +274,9 @@ fn main() {
281274 let input = PathBuf :: from ( args. next ( ) . unwrap ( ) ) ;
282275 let output = PathBuf :: from ( args. next ( ) . unwrap ( ) ) ;
283276 let date = args. next ( ) . unwrap ( ) ;
284- let rust_release = args. next ( ) . unwrap ( ) ;
285277 let s3_address = args. next ( ) . unwrap ( ) ;
286- let cargo_release = args. next ( ) . unwrap ( ) ;
287- let rls_release = args. next ( ) . unwrap ( ) ;
288- let rust_analyzer_release = args. next ( ) . unwrap ( ) ;
289- let clippy_release = args. next ( ) . unwrap ( ) ;
290- let miri_release = args. next ( ) . unwrap ( ) ;
291- let rustfmt_release = args. next ( ) . unwrap ( ) ;
292- let llvm_tools_release = args. next ( ) . unwrap ( ) ;
278+ let channel = args. next ( ) . unwrap ( ) ;
279+ let monorepo_path = args. next ( ) . unwrap ( ) ;
293280
294281 // Do not ask for a passphrase while manually testing
295282 let mut passphrase = String :: new ( ) ;
@@ -299,14 +286,7 @@ fn main() {
299286 }
300287
301288 Builder {
302- rust_release,
303- cargo_release,
304- rls_release,
305- rust_analyzer_release,
306- clippy_release,
307- rustfmt_release,
308- llvm_tools_release,
309- miri_release,
289+ versions : Versions :: new ( & channel, Path :: new ( & monorepo_path) ) . unwrap ( ) ,
310290
311291 input,
312292 output,
@@ -363,10 +343,11 @@ impl Builder {
363343 self . check_toolstate ( ) ;
364344 self . digest_and_sign ( ) ;
365345 let manifest = self . build_manifest ( ) ;
366- self . write_channel_files ( & self . rust_release , & manifest) ;
367346
368- if self . rust_release != "beta" && self . rust_release != "nightly" {
369- self . write_channel_files ( "stable" , & manifest) ;
347+ let rust_version = self . versions . package_version ( & PkgType :: Rust ) . unwrap ( ) ;
348+ self . write_channel_files ( self . versions . channel ( ) , & manifest) ;
349+ if self . versions . channel ( ) != rust_version {
350+ self . write_channel_files ( & rust_version, & manifest) ;
370351 }
371352 }
372353
@@ -473,7 +454,7 @@ impl Builder {
473454 // The compiler libraries are not stable for end users, and they're also huge, so we only
474455 // `rustc-dev` for nightly users, and only in the "complete" profile. It's still possible
475456 // for users to install the additional component manually, if needed.
476- if self . rust_release == "nightly" {
457+ if self . versions . channel ( ) == "nightly" {
477458 self . extend_profile ( "complete" , & mut manifest. profiles , & [ "rustc-dev" ] ) ;
478459 self . extend_profile ( "complete" , & mut manifest. profiles , & [ "rustc-docs" ] ) ;
479460 }
@@ -511,7 +492,7 @@ impl Builder {
511492 }
512493
513494 fn target_host_combination ( & mut self , host : & str , manifest : & Manifest ) -> Option < Target > {
514- let filename = self . filename ( "rust" , host) ;
495+ let filename = self . versions . tarball_name ( & PkgType :: Rust , host) . unwrap ( ) ;
515496 let digest = self . digests . remove ( & filename) ?;
516497 let xz_filename = filename. replace ( ".tar.gz" , ".tar.xz" ) ;
517498 let xz_digest = self . digests . remove ( & xz_filename) ;
@@ -610,7 +591,7 @@ impl Builder {
610591 . unwrap_or_default ( ) ; // `is_present` defaults to `false` here.
611592
612593 // Never ship nightly-only components for other trains.
613- if self . rust_release != "nightly" && NIGHTLY_ONLY_COMPONENTS . contains ( & pkgname) {
594+ if self . versions . channel ( ) != "nightly" && NIGHTLY_ONLY_COMPONENTS . contains ( & pkgname) {
614595 is_present = false ; // Pretend the component is entirely missing.
615596 }
616597
@@ -619,7 +600,10 @@ impl Builder {
619600 . map ( |name| {
620601 if is_present {
621602 // The component generally exists, but it might still be missing for this target.
622- let filename = self . filename ( pkgname, name) ;
603+ let filename = self
604+ . versions
605+ . tarball_name ( & PkgType :: from_component ( pkgname) , name)
606+ . unwrap ( ) ;
623607 let digest = match self . digests . remove ( & filename) {
624608 Some ( digest) => digest,
625609 // This component does not exist for this target -- skip it.
@@ -662,23 +646,6 @@ impl Builder {
662646 format ! ( "{}/{}/{}" , self . s3_address, self . date, filename)
663647 }
664648
665- fn filename ( & self , component : & str , target : & str ) -> String {
666- use PkgType :: * ;
667- match PkgType :: from_component ( component) {
668- RustSrc => format ! ( "rust-src-{}.tar.gz" , self . rust_release) ,
669- Cargo => format ! ( "cargo-{}-{}.tar.gz" , self . cargo_release, target) ,
670- Rls => format ! ( "rls-{}-{}.tar.gz" , self . rls_release, target) ,
671- RustAnalyzer => {
672- format ! ( "rust-analyzer-{}-{}.tar.gz" , self . rust_analyzer_release, target)
673- }
674- Clippy => format ! ( "clippy-{}-{}.tar.gz" , self . clippy_release, target) ,
675- Rustfmt => format ! ( "rustfmt-{}-{}.tar.gz" , self . rustfmt_release, target) ,
676- LlvmTools => format ! ( "llvm-tools-{}-{}.tar.gz" , self . llvm_tools_release, target) ,
677- Miri => format ! ( "miri-{}-{}.tar.gz" , self . miri_release, target) ,
678- Other ( _) => format ! ( "{}-{}-{}.tar.gz" , component, self . rust_release, target) ,
679- }
680- }
681-
682649 fn cached_version ( & self , component : & str ) -> & Option < String > {
683650 use PkgType :: * ;
684651 match PkgType :: from_component ( component) {
@@ -707,20 +674,24 @@ impl Builder {
707674 }
708675 }
709676
710- fn version ( & self , component : & str , target : & str ) -> Option < String > {
677+ fn version ( & mut self , component : & str , target : & str ) -> Option < String > {
711678 self . untar ( component, target, |filename| format ! ( "{}/version" , filename) )
712679 }
713680
714- fn git_commit_hash ( & self , component : & str , target : & str ) -> Option < String > {
681+ fn git_commit_hash ( & mut self , component : & str , target : & str ) -> Option < String > {
715682 self . untar ( component, target, |filename| format ! ( "{}/git-commit-hash" , filename) )
716683 }
717684
718- fn untar < F > ( & self , component : & str , target : & str , dir : F ) -> Option < String >
685+ fn untar < F > ( & mut self , component : & str , target : & str , dir : F ) -> Option < String >
719686 where
720687 F : FnOnce ( String ) -> String ,
721688 {
689+ let filename = self
690+ . versions
691+ . tarball_name ( & PkgType :: from_component ( component) , target)
692+ . expect ( "failed to retrieve the tarball path" ) ;
693+
722694 let mut cmd = Command :: new ( "tar" ) ;
723- let filename = self . filename ( component, target) ;
724695 cmd. arg ( "xf" )
725696 . arg ( self . input . join ( & filename) )
726697 . arg ( dir ( filename. replace ( ".tar.gz" , "" ) ) )
0 commit comments