@@ -44,27 +44,8 @@ impl DependencySet {
4444 pub ( crate ) fn new_for_node (
4545 node : & Node ,
4646 metadata : & CargoMetadata ,
47- resolver_data : & TreeResolverMetadata ,
47+ tree_data : Option < & Select < BTreeSet < CrateId > > > ,
4848 ) -> 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-
6849 let ( normal_dev_deps, normal_deps) = {
6950 let ( dev, normal) = node
7051 . deps
@@ -81,15 +62,9 @@ impl DependencySet {
8162 dev,
8263 metadata,
8364 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,
9266 ) ,
67+ collect_deps_selectable ( node, normal, metadata, DependencyKind :: Normal , tree_data) ,
9368 )
9469 } ;
9570
@@ -109,15 +84,9 @@ impl DependencySet {
10984 dev,
11085 metadata,
11186 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,
12088 ) ,
89+ collect_deps_selectable ( node, normal, metadata, DependencyKind :: Normal , tree_data) ,
12190 )
12291 } ;
12392
@@ -139,15 +108,9 @@ impl DependencySet {
139108 proc_macro,
140109 metadata,
141110 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,
150112 ) ,
113+ collect_deps_selectable ( node, normal, metadata, DependencyKind :: Build , tree_data) ,
151114 )
152115 } ;
153116
@@ -166,7 +129,7 @@ impl DependencySet {
166129 . filter ( |( _, dependency) | metadata[ & dependency. package_id ] . links . is_some ( ) )
167130 {
168131 // 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) ;
170133 }
171134
172135 Self {
@@ -181,6 +144,24 @@ impl DependencySet {
181144 }
182145}
183146
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+
184165/// For details on optional dependencies see [the Rust docs](https://doc.rust-lang.org/cargo/reference/features.html#optional-dependencies).
185166fn is_optional_dependency (
186167 parent : & Node ,
@@ -539,8 +520,7 @@ mod test {
539520 let metadata = metadata:: example_proc_macro_dep ( ) ;
540521
541522 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 ) ;
544524
545525 let normal_deps: Vec < _ > = dependencies
546526 . normal_deps
@@ -564,8 +544,7 @@ mod test {
564544 let metadata = metadata:: alias ( ) ;
565545
566546 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 ) ;
569548
570549 let bindings = dependencies. normal_deps . items ( ) ;
571550
@@ -588,8 +567,7 @@ mod test {
588567
589568 let openssl_node = find_metadata_node ( "openssl" , & metadata) ;
590569
591- let dependencies =
592- DependencySet :: new_for_node ( openssl_node, & metadata, & TreeResolverMetadata :: default ( ) ) ;
570+ let dependencies = DependencySet :: new_for_node ( openssl_node, & metadata, None ) ;
593571
594572 let normal_sys_crate =
595573 dependencies
@@ -622,8 +600,7 @@ mod test {
622600 let metadata = metadata:: build_scripts ( ) ;
623601
624602 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 ) ;
627604
628605 // Collect build dependencies into a set
629606 let build_deps: BTreeSet < String > = libssh2_depset
@@ -672,8 +649,7 @@ mod test {
672649 let metadata = metadata:: alias ( ) ;
673650
674651 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 ) ;
677653
678654 let aliases: Vec < Dependency > = dependencies
679655 . normal_deps
@@ -699,8 +675,7 @@ mod test {
699675 let metadata = metadata:: crate_types ( ) ;
700676
701677 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 ) ;
704679
705680 let rlib_deps: Vec < Dependency > = dependencies
706681 . normal_deps
@@ -730,8 +705,7 @@ mod test {
730705 let metadata = metadata:: multi_cfg_dep ( ) ;
731706
732707 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 ) ;
735709
736710 let libc_cfgs: BTreeSet < Option < String > > = dependencies
737711 . normal_deps
@@ -756,8 +730,7 @@ mod test {
756730 let metadata = metadata:: multi_kind_proc_macro_dep ( ) ;
757731
758732 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 ) ;
761734
762735 let lib_deps: Vec < _ > = dependencies
763736 . proc_macro_deps
@@ -781,8 +754,7 @@ mod test {
781754 let metadata = metadata:: optional_deps_disabled ( ) ;
782755
783756 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 ) ;
786758
787759 assert ! ( !dependencies
788760 . normal_deps
@@ -797,8 +769,7 @@ mod test {
797769 let metadata = metadata:: renamed_optional_deps_disabled ( ) ;
798770
799771 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 ) ;
802773 assert ! ( !serde_with_depset
803774 . normal_deps
804775 . items( )
@@ -820,13 +791,13 @@ mod test {
820791 } ,
821792 None ,
822793 ) ;
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) ] ) ;
827797
828798 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) ) ;
830801 assert_eq ! (
831802 clap_depset
832803 . normal_deps
@@ -839,8 +810,7 @@ mod test {
839810 ) ;
840811
841812 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 ) ;
844814
845815 // mio is not present in the common list of dependencies
846816 assert ! ( !notify_depset
@@ -873,8 +843,7 @@ mod test {
873843 let metadata = metadata:: optional_deps_disabled_build_dep_enabled ( ) ;
874844
875845 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 ) ;
878847
879848 assert ! ( !dependencies
880849 . normal_deps
@@ -901,13 +870,13 @@ mod test {
901870 } ,
902871 None ,
903872 ) ;
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) ] ) ;
908876
909877 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) ) ;
911880 assert_eq ! (
912881 p256_depset
913882 . normal_deps
@@ -959,13 +928,13 @@ mod test {
959928 None ,
960929 ) ;
961930
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) ] ) ;
966933
967934 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) ) ;
969938 assert_eq ! (
970939 tokio_depset
971940 . normal_deps
0 commit comments