@@ -479,6 +479,15 @@ enum RlsStatus {
479
479
Unavailable ,
480
480
}
481
481
482
+ impl RlsStatus {
483
+ fn pkg_name ( self ) -> & ' static str {
484
+ match self {
485
+ Self :: Renamed => "rls-preview" ,
486
+ _ => "rls" ,
487
+ }
488
+ }
489
+ }
490
+
482
491
struct Release {
483
492
// Either "nightly", "stable", "beta", or an explicit version number
484
493
channel : String ,
@@ -690,6 +699,36 @@ fn create_mock_dist_server(path: &Path, s: Scenario) {
690
699
}
691
700
}
692
701
702
+ #[ derive( Default ) ]
703
+ struct MockChannelContent {
704
+ std : Vec < ( MockInstallerBuilder , String ) > ,
705
+ rustc : Vec < ( MockInstallerBuilder , String ) > ,
706
+ cargo : Vec < ( MockInstallerBuilder , String ) > ,
707
+ rls : Vec < ( MockInstallerBuilder , String ) > ,
708
+ docs : Vec < ( MockInstallerBuilder , String ) > ,
709
+ src : Vec < ( MockInstallerBuilder , String ) > ,
710
+ analysis : Vec < ( MockInstallerBuilder , String ) > ,
711
+ combined : Vec < ( MockInstallerBuilder , String ) > ,
712
+ }
713
+
714
+ impl MockChannelContent {
715
+ fn into_packages (
716
+ self ,
717
+ rls_name : & ' static str ,
718
+ ) -> Vec < ( & ' static str , Vec < ( MockInstallerBuilder , String ) > ) > {
719
+ vec ! [
720
+ ( "rust-std" , self . std) ,
721
+ ( "rustc" , self . rustc) ,
722
+ ( "cargo" , self . cargo) ,
723
+ ( rls_name, self . rls) ,
724
+ ( "rust-docs" , self . docs) ,
725
+ ( "rust-src" , self . src) ,
726
+ ( "rust-analysis" , self . analysis) ,
727
+ ( "rust" , self . combined) ,
728
+ ]
729
+ }
730
+ }
731
+
693
732
fn build_mock_channel (
694
733
channel : & str ,
695
734
date : & str ,
@@ -717,85 +756,61 @@ fn build_mock_channel(
717
756
718
757
// Convert the mock installers to mock package definitions for the
719
758
// mock dist server
720
- let mut all = vec ! [
721
- (
722
- "rust-std" ,
723
- vec![
724
- ( std, host_triple. clone( ) ) ,
725
- ( cross_std1, CROSS_ARCH1 . to_string( ) ) ,
726
- ( cross_std2, CROSS_ARCH2 . to_string( ) ) ,
727
- ] ,
728
- ) ,
729
- ( "rustc" , vec![ ( rustc, host_triple. clone( ) ) ] ) ,
730
- ( "cargo" , vec![ ( cargo, host_triple. clone( ) ) ] ) ,
731
- ] ;
759
+ let mut all = MockChannelContent :: default ( ) ;
760
+ all. std . extend (
761
+ vec ! [
762
+ ( std, host_triple. clone( ) ) ,
763
+ ( cross_std1, CROSS_ARCH1 . to_string( ) ) ,
764
+ ( cross_std2, CROSS_ARCH2 . to_string( ) ) ,
765
+ ]
766
+ . into_iter ( ) ,
767
+ ) ;
768
+ all. rustc . push ( ( rustc, host_triple. clone ( ) ) ) ;
769
+ all. cargo . push ( ( cargo, host_triple. clone ( ) ) ) ;
732
770
733
- if rls == RlsStatus :: Renamed {
734
- let rls = build_mock_rls_installer ( version, version_hash, true ) ;
735
- all. push ( ( "rls-preview" , vec ! [ ( rls, host_triple. clone( ) ) ] ) ) ;
736
- } else if rls == RlsStatus :: Available {
737
- let rls = build_mock_rls_installer ( version, version_hash, false ) ;
738
- all. push ( ( "rls" , vec ! [ ( rls, host_triple. clone( ) ) ] ) ) ;
771
+ if rls != RlsStatus :: Unavailable {
772
+ let rls = build_mock_rls_installer ( version, version_hash, rls. pkg_name ( ) ) ;
773
+ all. rls . push ( ( rls, host_triple. clone ( ) ) ) ;
739
774
} else {
740
- all. push ( (
741
- "rls" ,
742
- vec ! [ (
743
- MockInstallerBuilder { components: vec![ ] } ,
744
- host_triple. clone( ) ,
745
- ) ] ,
746
- ) )
775
+ all. rls . push ( (
776
+ MockInstallerBuilder { components : vec ! [ ] } ,
777
+ host_triple. clone ( ) ,
778
+ ) ) ;
747
779
}
748
780
749
- let more = vec ! [
750
- ( "rust-docs" , vec![ ( rust_docs, host_triple. clone( ) ) ] ) ,
751
- ( "rust-src" , vec![ ( rust_src, "*" . to_string( ) ) ] ) ,
752
- ( "rust-analysis" , vec![ ( rust_analysis, "*" . to_string( ) ) ] ) ,
753
- ( "rust" , vec![ ( rust, host_triple) ] ) ,
754
- ] ;
755
- all. extend ( more) ;
781
+ all. docs . push ( ( rust_docs, host_triple. clone ( ) ) ) ;
782
+ all. src . push ( ( rust_src, "*" . to_string ( ) ) ) ;
783
+ all. analysis . push ( ( rust_analysis, "*" . to_string ( ) ) ) ;
784
+ all. combined . push ( ( rust, host_triple) ) ;
756
785
757
786
if multi_arch {
758
787
let std = build_mock_std_installer ( MULTI_ARCH1 ) ;
759
788
let rustc = build_mock_rustc_installer ( MULTI_ARCH1 , version, version_hash) ;
760
789
let cargo = build_mock_cargo_installer ( version, version_hash) ;
761
790
let rust_docs = build_mock_rust_doc_installer ( ) ;
762
791
let rust = build_combined_installer ( & [ & std, & rustc, & cargo, & rust_docs] ) ;
763
- let cross_std1 = build_mock_cross_std_installer ( CROSS_ARCH1 , date) ;
764
- let cross_std2 = build_mock_cross_std_installer ( CROSS_ARCH2 , date) ;
765
- let rust_src = build_mock_rust_src_installer ( ) ;
766
792
767
793
let triple = MULTI_ARCH1 . to_string ( ) ;
768
- let more = vec ! [
769
- (
770
- "rust-std" ,
771
- vec![
772
- ( std, triple. clone( ) ) ,
773
- ( cross_std1, CROSS_ARCH1 . to_string( ) ) ,
774
- ( cross_std2, CROSS_ARCH2 . to_string( ) ) ,
775
- ] ,
776
- ) ,
777
- ( "rustc" , vec![ ( rustc, triple. clone( ) ) ] ) ,
778
- ( "cargo" , vec![ ( cargo, triple. clone( ) ) ] ) ,
779
- ] ;
780
- all. extend ( more) ;
781
-
782
- if rls == RlsStatus :: Renamed {
783
- let rls = build_mock_rls_installer ( version, version_hash, true ) ;
784
- all. push ( ( "rls-preview" , vec ! [ ( rls, triple. clone( ) ) ] ) ) ;
785
- } else if rls == RlsStatus :: Available {
786
- let rls = build_mock_rls_installer ( version, version_hash, false ) ;
787
- all. push ( ( "rls" , vec ! [ ( rls, triple. clone( ) ) ] ) ) ;
788
- }
794
+ all. std . push ( ( std, triple. clone ( ) ) ) ;
795
+ all. rustc . push ( ( rustc, triple. clone ( ) ) ) ;
796
+ all. cargo . push ( ( cargo, triple. clone ( ) ) ) ;
789
797
790
- let more = vec ! [
791
- ( "rust-docs" , vec![ ( rust_docs, triple. clone( ) ) ] ) ,
792
- ( "rust-src" , vec![ ( rust_src, "*" . to_string( ) ) ] ) ,
793
- ( "rust" , vec![ ( rust, triple) ] ) ,
794
- ] ;
798
+ if rls != RlsStatus :: Unavailable {
799
+ let rls = build_mock_rls_installer ( version, version_hash, rls. pkg_name ( ) ) ;
800
+ all. rls . push ( ( rls, triple. clone ( ) ) ) ;
801
+ } else {
802
+ all. rls
803
+ . push ( ( MockInstallerBuilder { components : vec ! [ ] } , triple. clone ( ) ) ) ;
804
+ }
795
805
796
- all. extend ( more) ;
806
+ all. docs . push ( ( rust_docs, triple. to_string ( ) ) ) ;
807
+ all. combined . push ( ( rust, triple) ) ;
797
808
}
798
809
810
+ let all_std_archs: Vec < String > = all. std . iter ( ) . map ( |( _, arch) | arch) . cloned ( ) . collect ( ) ;
811
+
812
+ let all = all. into_packages ( rls. pkg_name ( ) ) ;
813
+
799
814
let packages = all. into_iter ( ) . map ( |( name, target_pkgs) | {
800
815
let target_pkgs = target_pkgs
801
816
. into_iter ( )
@@ -858,16 +873,16 @@ fn build_mock_channel(
858
873
is_extension : true ,
859
874
} )
860
875
}
861
- target_pkg . components . push ( MockComponent {
862
- name : "rust-std" . to_string ( ) ,
863
- target : CROSS_ARCH1 . to_string ( ) ,
864
- is_extension : false ,
865
- } ) ;
866
- target_pkg . components . push ( MockComponent {
867
- name : "rust-std" . to_string ( ) ,
868
- target : CROSS_ARCH2 . to_string ( ) ,
869
- is_extension : false ,
870
- } ) ;
876
+ for other_target in & all_std_archs {
877
+ if other_target != target {
878
+ target_pkg . components . push ( MockComponent {
879
+ name : "rust-std" . to_string ( ) ,
880
+ target : other_target . to_string ( ) ,
881
+ is_extension : false ,
882
+ } ) ;
883
+ }
884
+ }
885
+
871
886
target_pkg. components . push ( MockComponent {
872
887
name : "rust-src" . to_string ( ) ,
873
888
target : "*" . to_string ( ) ,
@@ -1027,15 +1042,11 @@ fn build_mock_cargo_installer(version: &str, version_hash: &str) -> MockInstalle
1027
1042
fn build_mock_rls_installer (
1028
1043
version : & str ,
1029
1044
version_hash : & str ,
1030
- preview : bool ,
1045
+ pkg_name : & str ,
1031
1046
) -> MockInstallerBuilder {
1032
1047
MockInstallerBuilder {
1033
1048
components : vec ! [ MockComponentBuilder {
1034
- name: if preview {
1035
- "rls-preview" . to_string( )
1036
- } else {
1037
- "rls" . to_string( )
1038
- } ,
1049
+ name: pkg_name. to_string( ) ,
1039
1050
files: mock_bin( "rls" , version, version_hash) ,
1040
1051
} ] ,
1041
1052
}
0 commit comments