@@ -44,27 +44,8 @@ impl DependencySet {
44
44
pub ( crate ) fn new_for_node (
45
45
node : & Node ,
46
46
metadata : & CargoMetadata ,
47
- resolver_data : & TreeResolverMetadata ,
47
+ tree_data : Option < & Select < BTreeSet < CrateId > > > ,
48
48
) -> Self {
49
- // Build a dep tree mapping that's easily indexable via `cargo_metadata::PackageId`
50
- let dep_tree: BTreeMap < CrateId , Select < BTreeSet < CrateId > > > = resolver_data
51
- . iter ( )
52
- . map ( |( id, tree_data) | {
53
- let mut select = Select :: new ( ) ;
54
- for ( config, data) in tree_data. items ( ) {
55
- for dep in data. deps {
56
- select. insert ( dep, config. clone ( ) ) ;
57
- }
58
- }
59
- ( id. clone ( ) , select)
60
- } )
61
- . collect ( ) ;
62
-
63
- let crate_id = {
64
- let package = & metadata[ & node. id ] ;
65
- CrateId :: from ( package)
66
- } ;
67
-
68
49
let ( normal_dev_deps, normal_deps) = {
69
50
let ( dev, normal) = node
70
51
. deps
@@ -81,15 +62,9 @@ impl DependencySet {
81
62
dev,
82
63
metadata,
83
64
DependencyKind :: Development ,
84
- dep_tree. get ( & crate_id) ,
85
- ) ,
86
- collect_deps_selectable (
87
- node,
88
- normal,
89
- metadata,
90
- DependencyKind :: Normal ,
91
- dep_tree. get ( & crate_id) ,
65
+ tree_data,
92
66
) ,
67
+ collect_deps_selectable ( node, normal, metadata, DependencyKind :: Normal , tree_data) ,
93
68
)
94
69
} ;
95
70
@@ -109,15 +84,9 @@ impl DependencySet {
109
84
dev,
110
85
metadata,
111
86
DependencyKind :: Development ,
112
- dep_tree. get ( & crate_id) ,
113
- ) ,
114
- collect_deps_selectable (
115
- node,
116
- normal,
117
- metadata,
118
- DependencyKind :: Normal ,
119
- dep_tree. get ( & crate_id) ,
87
+ tree_data,
120
88
) ,
89
+ collect_deps_selectable ( node, normal, metadata, DependencyKind :: Normal , tree_data) ,
121
90
)
122
91
} ;
123
92
@@ -139,15 +108,9 @@ impl DependencySet {
139
108
proc_macro,
140
109
metadata,
141
110
DependencyKind :: Build ,
142
- dep_tree. get ( & crate_id) ,
143
- ) ,
144
- collect_deps_selectable (
145
- node,
146
- normal,
147
- metadata,
148
- DependencyKind :: Build ,
149
- dep_tree. get ( & crate_id) ,
111
+ tree_data,
150
112
) ,
113
+ collect_deps_selectable ( node, normal, metadata, DependencyKind :: Build , tree_data) ,
151
114
)
152
115
} ;
153
116
@@ -166,7 +129,7 @@ impl DependencySet {
166
129
. filter ( |( _, dependency) | metadata[ & dependency. package_id ] . links . is_some ( ) )
167
130
{
168
131
// Add any normal dependency to build dependencies that are associated `*-sys` crates
169
- build_link_deps. insert ( dependency. clone ( ) , configuration. clone ( ) ) ;
132
+ build_link_deps. insert ( dependency, configuration) ;
170
133
}
171
134
172
135
Self {
@@ -181,6 +144,24 @@ impl DependencySet {
181
144
}
182
145
}
183
146
147
+ /// Build a dep tree mapping that's easily indexable via `cargo_metadata::PackageId`
148
+ pub ( crate ) fn build_dep_tree (
149
+ resolver_data : & TreeResolverMetadata ,
150
+ ) -> BTreeMap < CrateId , Select < BTreeSet < CrateId > > > {
151
+ resolver_data
152
+ . iter ( )
153
+ . map ( |( id, tree_data) | {
154
+ let mut select = Select :: new ( ) ;
155
+ for ( config, data) in tree_data. items ( ) {
156
+ for dep in data. deps {
157
+ select. insert ( dep, config. clone ( ) ) ;
158
+ }
159
+ }
160
+ ( id. clone ( ) , select)
161
+ } )
162
+ . collect ( )
163
+ }
164
+
184
165
/// For details on optional dependencies see [the Rust docs](https://doc.rust-lang.org/cargo/reference/features.html#optional-dependencies).
185
166
fn is_optional_dependency (
186
167
parent : & Node ,
@@ -539,8 +520,7 @@ mod test {
539
520
let metadata = metadata:: example_proc_macro_dep ( ) ;
540
521
541
522
let node = find_metadata_node ( "example-proc-macro-dep" , & metadata) ;
542
- let dependencies =
543
- DependencySet :: new_for_node ( node, & metadata, & TreeResolverMetadata :: default ( ) ) ;
523
+ let dependencies = DependencySet :: new_for_node ( node, & metadata, None ) ;
544
524
545
525
let normal_deps: Vec < _ > = dependencies
546
526
. normal_deps
@@ -564,8 +544,7 @@ mod test {
564
544
let metadata = metadata:: alias ( ) ;
565
545
566
546
let node = find_metadata_node ( "surrealdb-core" , & metadata) ;
567
- let dependencies =
568
- DependencySet :: new_for_node ( node, & metadata, & TreeResolverMetadata :: default ( ) ) ;
547
+ let dependencies = DependencySet :: new_for_node ( node, & metadata, None ) ;
569
548
570
549
let bindings = dependencies. normal_deps . items ( ) ;
571
550
@@ -588,8 +567,7 @@ mod test {
588
567
589
568
let openssl_node = find_metadata_node ( "openssl" , & metadata) ;
590
569
591
- let dependencies =
592
- DependencySet :: new_for_node ( openssl_node, & metadata, & TreeResolverMetadata :: default ( ) ) ;
570
+ let dependencies = DependencySet :: new_for_node ( openssl_node, & metadata, None ) ;
593
571
594
572
let normal_sys_crate =
595
573
dependencies
@@ -622,8 +600,7 @@ mod test {
622
600
let metadata = metadata:: build_scripts ( ) ;
623
601
624
602
let libssh2 = find_metadata_node ( "libssh2-sys" , & metadata) ;
625
- let libssh2_depset =
626
- DependencySet :: new_for_node ( libssh2, & metadata, & TreeResolverMetadata :: default ( ) ) ;
603
+ let libssh2_depset = DependencySet :: new_for_node ( libssh2, & metadata, None ) ;
627
604
628
605
// Collect build dependencies into a set
629
606
let build_deps: BTreeSet < String > = libssh2_depset
@@ -672,8 +649,7 @@ mod test {
672
649
let metadata = metadata:: alias ( ) ;
673
650
674
651
let aliases_node = find_metadata_node ( "aliases" , & metadata) ;
675
- let dependencies =
676
- DependencySet :: new_for_node ( aliases_node, & metadata, & TreeResolverMetadata :: default ( ) ) ;
652
+ let dependencies = DependencySet :: new_for_node ( aliases_node, & metadata, None ) ;
677
653
678
654
let aliases: Vec < Dependency > = dependencies
679
655
. normal_deps
@@ -699,8 +675,7 @@ mod test {
699
675
let metadata = metadata:: crate_types ( ) ;
700
676
701
677
let node = find_metadata_node ( "crate-types" , & metadata) ;
702
- let dependencies =
703
- DependencySet :: new_for_node ( node, & metadata, & TreeResolverMetadata :: default ( ) ) ;
678
+ let dependencies = DependencySet :: new_for_node ( node, & metadata, None ) ;
704
679
705
680
let rlib_deps: Vec < Dependency > = dependencies
706
681
. normal_deps
@@ -730,8 +705,7 @@ mod test {
730
705
let metadata = metadata:: multi_cfg_dep ( ) ;
731
706
732
707
let node = find_metadata_node ( "cpufeatures" , & metadata) ;
733
- let dependencies =
734
- DependencySet :: new_for_node ( node, & metadata, & TreeResolverMetadata :: default ( ) ) ;
708
+ let dependencies = DependencySet :: new_for_node ( node, & metadata, None ) ;
735
709
736
710
let libc_cfgs: BTreeSet < Option < String > > = dependencies
737
711
. normal_deps
@@ -756,8 +730,7 @@ mod test {
756
730
let metadata = metadata:: multi_kind_proc_macro_dep ( ) ;
757
731
758
732
let node = find_metadata_node ( "multi-kind-proc-macro-dep" , & metadata) ;
759
- let dependencies =
760
- DependencySet :: new_for_node ( node, & metadata, & TreeResolverMetadata :: default ( ) ) ;
733
+ let dependencies = DependencySet :: new_for_node ( node, & metadata, None ) ;
761
734
762
735
let lib_deps: Vec < _ > = dependencies
763
736
. proc_macro_deps
@@ -781,8 +754,7 @@ mod test {
781
754
let metadata = metadata:: optional_deps_disabled ( ) ;
782
755
783
756
let node = find_metadata_node ( "clap" , & metadata) ;
784
- let dependencies =
785
- DependencySet :: new_for_node ( node, & metadata, & TreeResolverMetadata :: default ( ) ) ;
757
+ let dependencies = DependencySet :: new_for_node ( node, & metadata, None ) ;
786
758
787
759
assert ! ( !dependencies
788
760
. normal_deps
@@ -797,8 +769,7 @@ mod test {
797
769
let metadata = metadata:: renamed_optional_deps_disabled ( ) ;
798
770
799
771
let serde_with = find_metadata_node ( "serde_with" , & metadata) ;
800
- let serde_with_depset =
801
- DependencySet :: new_for_node ( serde_with, & metadata, & TreeResolverMetadata :: new ( ) ) ;
772
+ let serde_with_depset = DependencySet :: new_for_node ( serde_with, & metadata, None ) ;
802
773
assert ! ( !serde_with_depset
803
774
. normal_deps
804
775
. items( )
@@ -820,13 +791,13 @@ mod test {
820
791
} ,
821
792
None ,
822
793
) ;
823
- let resolver_data = TreeResolverMetadata :: from ( [ (
824
- CrateId :: new ( "clap" . to_owned ( ) , Version :: new ( 4 , 1 , 1 ) ) ,
825
- select,
826
- ) ] ) ;
794
+
795
+ let crate_id = CrateId :: new ( "clap" . to_owned ( ) , Version :: new ( 4 , 1 , 1 ) ) ;
796
+ let resolver_data = TreeResolverMetadata :: from ( [ ( crate_id. clone ( ) , select) ] ) ;
827
797
828
798
let clap = find_metadata_node ( "clap" , & metadata) ;
829
- let clap_depset = DependencySet :: new_for_node ( clap, & metadata, & resolver_data) ;
799
+ let dep_tree = build_dep_tree ( & resolver_data) ;
800
+ let clap_depset = DependencySet :: new_for_node ( clap, & metadata, dep_tree. get ( & crate_id) ) ;
830
801
assert_eq ! (
831
802
clap_depset
832
803
. normal_deps
@@ -839,8 +810,7 @@ mod test {
839
810
) ;
840
811
841
812
let notify = find_metadata_node ( "notify" , & metadata) ;
842
- let notify_depset =
843
- DependencySet :: new_for_node ( notify, & metadata, & TreeResolverMetadata :: default ( ) ) ;
813
+ let notify_depset = DependencySet :: new_for_node ( notify, & metadata, None ) ;
844
814
845
815
// mio is not present in the common list of dependencies
846
816
assert ! ( !notify_depset
@@ -873,8 +843,7 @@ mod test {
873
843
let metadata = metadata:: optional_deps_disabled_build_dep_enabled ( ) ;
874
844
875
845
let node = find_metadata_node ( "gherkin" , & metadata) ;
876
- let dependencies =
877
- DependencySet :: new_for_node ( node, & metadata, & TreeResolverMetadata :: default ( ) ) ;
846
+ let dependencies = DependencySet :: new_for_node ( node, & metadata, None ) ;
878
847
879
848
assert ! ( !dependencies
880
849
. normal_deps
@@ -901,13 +870,13 @@ mod test {
901
870
} ,
902
871
None ,
903
872
) ;
904
- let resolver_data = TreeResolverMetadata :: from ( [ (
905
- CrateId :: new ( "p256" . to_owned ( ) , Version :: new ( 0 , 13 , 2 ) ) ,
906
- select,
907
- ) ] ) ;
873
+
874
+ let crate_id = CrateId :: new ( "p256" . to_owned ( ) , Version :: new ( 0 , 13 , 2 ) ) ;
875
+ let resolver_data = TreeResolverMetadata :: from ( [ ( crate_id. clone ( ) , select) ] ) ;
908
876
909
877
let p256 = find_metadata_node ( "p256" , & metadata) ;
910
- let p256_depset = DependencySet :: new_for_node ( p256, & metadata, & resolver_data) ;
878
+ let dep_tree = build_dep_tree ( & resolver_data) ;
879
+ let p256_depset = DependencySet :: new_for_node ( p256, & metadata, dep_tree. get ( & crate_id) ) ;
911
880
assert_eq ! (
912
881
p256_depset
913
882
. normal_deps
@@ -959,13 +928,13 @@ mod test {
959
928
None ,
960
929
) ;
961
930
962
- let tree_metadata = TreeResolverMetadata :: from ( [ (
963
- CrateId :: new ( "tokio" . to_owned ( ) , Version :: new ( 1 , 37 , 0 ) ) ,
964
- select,
965
- ) ] ) ;
931
+ let crate_id = CrateId :: new ( "tokio" . to_owned ( ) , Version :: new ( 1 , 37 , 0 ) ) ;
932
+ let resolver_data = TreeResolverMetadata :: from ( [ ( crate_id. clone ( ) , select) ] ) ;
966
933
967
934
let tokio_node = find_metadata_node ( "tokio" , & metadata) ;
968
- let tokio_depset = DependencySet :: new_for_node ( tokio_node, & metadata, & tree_metadata) ;
935
+ let dep_tree = build_dep_tree ( & resolver_data) ;
936
+ let tokio_depset =
937
+ DependencySet :: new_for_node ( tokio_node, & metadata, dep_tree. get ( & crate_id) ) ;
969
938
assert_eq ! (
970
939
tokio_depset
971
940
. normal_deps
0 commit comments