6
6
7
7
mod versions;
8
8
9
- use crate :: versions:: PkgType ;
9
+ use crate :: versions:: { PkgType , Versions } ;
10
10
use serde:: Serialize ;
11
11
use std:: collections:: BTreeMap ;
12
12
use std:: collections:: HashMap ;
@@ -227,14 +227,7 @@ macro_rules! t {
227
227
}
228
228
229
229
struct 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 ,
238
231
239
232
input : PathBuf ,
240
233
output : PathBuf ,
@@ -281,15 +274,9 @@ fn main() {
281
274
let input = PathBuf :: from ( args. next ( ) . unwrap ( ) ) ;
282
275
let output = PathBuf :: from ( args. next ( ) . unwrap ( ) ) ;
283
276
let date = args. next ( ) . unwrap ( ) ;
284
- let rust_release = args. next ( ) . unwrap ( ) ;
285
277
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 ( ) ;
293
280
294
281
// Do not ask for a passphrase while manually testing
295
282
let mut passphrase = String :: new ( ) ;
@@ -299,14 +286,7 @@ fn main() {
299
286
}
300
287
301
288
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 ( ) ,
310
290
311
291
input,
312
292
output,
@@ -363,10 +343,11 @@ impl Builder {
363
343
self . check_toolstate ( ) ;
364
344
self . digest_and_sign ( ) ;
365
345
let manifest = self . build_manifest ( ) ;
366
- self . write_channel_files ( & self . rust_release , & manifest) ;
367
346
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) ;
370
351
}
371
352
}
372
353
@@ -473,7 +454,7 @@ impl Builder {
473
454
// The compiler libraries are not stable for end users, and they're also huge, so we only
474
455
// `rustc-dev` for nightly users, and only in the "complete" profile. It's still possible
475
456
// for users to install the additional component manually, if needed.
476
- if self . rust_release == "nightly" {
457
+ if self . versions . channel ( ) == "nightly" {
477
458
self . extend_profile ( "complete" , & mut manifest. profiles , & [ "rustc-dev" ] ) ;
478
459
self . extend_profile ( "complete" , & mut manifest. profiles , & [ "rustc-docs" ] ) ;
479
460
}
@@ -511,7 +492,7 @@ impl Builder {
511
492
}
512
493
513
494
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 ( ) ;
515
496
let digest = self . digests . remove ( & filename) ?;
516
497
let xz_filename = filename. replace ( ".tar.gz" , ".tar.xz" ) ;
517
498
let xz_digest = self . digests . remove ( & xz_filename) ;
@@ -610,7 +591,7 @@ impl Builder {
610
591
. unwrap_or_default ( ) ; // `is_present` defaults to `false` here.
611
592
612
593
// 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) {
614
595
is_present = false ; // Pretend the component is entirely missing.
615
596
}
616
597
@@ -619,7 +600,10 @@ impl Builder {
619
600
. map ( |name| {
620
601
if is_present {
621
602
// 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 ( ) ;
623
607
let digest = match self . digests . remove ( & filename) {
624
608
Some ( digest) => digest,
625
609
// This component does not exist for this target -- skip it.
@@ -662,23 +646,6 @@ impl Builder {
662
646
format ! ( "{}/{}/{}" , self . s3_address, self . date, filename)
663
647
}
664
648
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
-
682
649
fn cached_version ( & self , component : & str ) -> & Option < String > {
683
650
use PkgType :: * ;
684
651
match PkgType :: from_component ( component) {
@@ -707,20 +674,24 @@ impl Builder {
707
674
}
708
675
}
709
676
710
- fn version ( & self , component : & str , target : & str ) -> Option < String > {
677
+ fn version ( & mut self , component : & str , target : & str ) -> Option < String > {
711
678
self . untar ( component, target, |filename| format ! ( "{}/version" , filename) )
712
679
}
713
680
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 > {
715
682
self . untar ( component, target, |filename| format ! ( "{}/git-commit-hash" , filename) )
716
683
}
717
684
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 >
719
686
where
720
687
F : FnOnce ( String ) -> String ,
721
688
{
689
+ let filename = self
690
+ . versions
691
+ . tarball_name ( & PkgType :: from_component ( component) , target)
692
+ . expect ( "failed to retrieve the tarball path" ) ;
693
+
722
694
let mut cmd = Command :: new ( "tar" ) ;
723
- let filename = self . filename ( component, target) ;
724
695
cmd. arg ( "xf" )
725
696
. arg ( self . input . join ( & filename) )
726
697
. arg ( dir ( filename. replace ( ".tar.gz" , "" ) ) )
0 commit comments