@@ -44,27 +44,8 @@ impl DependencySet {
4444pub ( 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