@@ -18,7 +18,7 @@ pub struct Resolve {
18
18
/// A graph, whose vertices are packages and edges are dependency specifications
19
19
/// from `Cargo.toml`. We need a `Vec` here because the same package
20
20
/// might be present in both `[dependencies]` and `[build-dependencies]`.
21
- graph : Graph < PackageId , Vec < Dependency > > ,
21
+ graph : Graph < PackageId , HashSet < Dependency > > ,
22
22
/// Replacements from the `[replace]` table.
23
23
replacements : HashMap < PackageId , PackageId > ,
24
24
/// Inverted version of `replacements`.
@@ -70,7 +70,7 @@ pub enum ResolveVersion {
70
70
71
71
impl Resolve {
72
72
pub fn new (
73
- graph : Graph < PackageId , Vec < Dependency > > ,
73
+ graph : Graph < PackageId , HashSet < Dependency > > ,
74
74
replacements : HashMap < PackageId , PackageId > ,
75
75
features : HashMap < PackageId , Vec < InternedString > > ,
76
76
checksums : HashMap < PackageId , Option < String > > ,
@@ -264,18 +264,18 @@ unable to verify that `{0}` is the same as when the lockfile was generated
264
264
self . graph . iter ( ) . cloned ( )
265
265
}
266
266
267
- pub fn deps ( & self , pkg : PackageId ) -> impl Iterator < Item = ( PackageId , & [ Dependency ] ) > {
267
+ pub fn deps ( & self , pkg : PackageId ) -> impl Iterator < Item = ( PackageId , & HashSet < Dependency > ) > {
268
268
self . deps_not_replaced ( pkg)
269
269
. map ( move |( id, deps) | ( self . replacement ( id) . unwrap_or ( id) , deps) )
270
270
}
271
271
272
272
pub fn deps_not_replaced (
273
273
& self ,
274
274
pkg : PackageId ,
275
- ) -> impl Iterator < Item = ( PackageId , & [ Dependency ] ) > {
275
+ ) -> impl Iterator < Item = ( PackageId , & HashSet < Dependency > ) > {
276
276
self . graph
277
277
. edges ( & pkg)
278
- . map ( |( id, deps) | ( * id, deps. as_slice ( ) ) )
278
+ . map ( |( id, deps) | ( * id, deps) )
279
279
}
280
280
281
281
pub fn replacement ( & self , pkg : PackageId ) -> Option < PackageId > {
@@ -325,8 +325,9 @@ unable to verify that `{0}` is the same as when the lockfile was generated
325
325
to : PackageId ,
326
326
to_target : & Target ,
327
327
) -> CargoResult < String > {
328
+ let empty_set: HashSet < Dependency > = HashSet :: new ( ) ;
328
329
let deps = if from == to {
329
- & [ ]
330
+ & empty_set
330
331
} else {
331
332
self . dependencies_listed ( from, to)
332
333
} ;
@@ -349,7 +350,7 @@ unable to verify that `{0}` is the same as when the lockfile was generated
349
350
Ok ( name)
350
351
}
351
352
352
- fn dependencies_listed ( & self , from : PackageId , to : PackageId ) -> & [ Dependency ] {
353
+ fn dependencies_listed ( & self , from : PackageId , to : PackageId ) -> & HashSet < Dependency > {
353
354
// We've got a dependency on `from` to `to`, but this dependency edge
354
355
// may be affected by [replace]. If the `to` package is listed as the
355
356
// target of a replacement (aka the key of a reverse replacement map)
0 commit comments