@@ -43,11 +43,11 @@ enum Kind<P: Package, V: Version> {
43
43
/// Initial incompatibility aiming at picking the root package for the first decision.
44
44
NotRoot ( P , V ) ,
45
45
/// There are no versions in the given range for this package.
46
- NoVersions ( P , Range < V > ) ,
46
+ NoVersions ( P ) ,
47
47
/// Dependencies of the package are unavailable for versions in that range.
48
- UnavailableDependencies ( P , Range < V > ) ,
48
+ UnavailableDependencies ( P ) ,
49
49
/// Incompatibility coming from the dependencies of a given package.
50
- FromDependencyOf ( P , Range < V > , P , Range < V > ) ,
50
+ FromDependencyOf ( P , P ) ,
51
51
/// Derived from two causes. Stores cause ids.
52
52
DerivedFrom ( IncompId < P , V > , IncompId < P , V > ) ,
53
53
}
@@ -84,24 +84,23 @@ impl<P: Package, V: Version> Incompatibility<P, V> {
84
84
/// Create an incompatibility to remember
85
85
/// that a given range does not contain any version.
86
86
pub fn no_versions ( package : P , term : Term < V > ) -> Self {
87
- let range = match & term {
88
- Term :: Positive ( r) => r. clone ( ) ,
89
- Term :: Negative ( _) => panic ! ( "No version should have a positive term" ) ,
90
- } ;
87
+ assert ! ( term. is_positive( ) , "No version should have a positive term" ) ;
91
88
Self {
92
89
package_terms : SmallMap :: One ( [ ( package. clone ( ) , term) ] ) ,
93
- kind : Kind :: NoVersions ( package, range ) ,
90
+ kind : Kind :: NoVersions ( package) ,
94
91
}
95
92
}
96
93
97
94
/// Create an incompatibility to remember
98
95
/// that a package version is not selectable
99
96
/// because its list of dependencies is unavailable.
100
97
pub fn unavailable_dependencies ( package : P , version : V ) -> Self {
101
- let range = Range :: exact ( version) ;
102
98
Self {
103
- package_terms : SmallMap :: One ( [ ( package. clone ( ) , Term :: Positive ( range. clone ( ) ) ) ] ) ,
104
- kind : Kind :: UnavailableDependencies ( package, range) ,
99
+ package_terms : SmallMap :: One ( [ (
100
+ package. clone ( ) ,
101
+ Term :: Positive ( Range :: exact ( version) ) ,
102
+ ) ] ) ,
103
+ kind : Kind :: UnavailableDependencies ( package) ,
105
104
}
106
105
}
107
106
@@ -114,7 +113,7 @@ impl<P: Package, V: Version> Incompatibility<P, V> {
114
113
( package. clone ( ) , Term :: Positive ( range1. clone ( ) ) ) ,
115
114
( p2. clone ( ) , Term :: Negative ( range2. clone ( ) ) ) ,
116
115
] ) ,
117
- kind : Kind :: FromDependencyOf ( package, range1 , p2 . clone ( ) , range2 . clone ( ) ) ,
116
+ kind : Kind :: FromDependencyOf ( package, p2 . clone ( ) ) ,
118
117
}
119
118
}
120
119
@@ -239,7 +238,8 @@ impl<P: Package, V: Version> Incompatibility<P, V> {
239
238
shared_ids : & Set < Id < Self > > ,
240
239
store : & Arena < Self > ,
241
240
) -> DerivationTree < P , V > {
242
- match & store[ self_id] . kind {
241
+ let val = & store[ self_id] ;
242
+ match & val. kind {
243
243
Kind :: DerivedFrom ( id1, id2) => {
244
244
let cause1 = Self :: build_derivation_tree ( * id1, shared_ids, store) ;
245
245
let cause2 = Self :: build_derivation_tree ( * id2, shared_ids, store) ;
@@ -254,18 +254,22 @@ impl<P: Package, V: Version> Incompatibility<P, V> {
254
254
Kind :: NotRoot ( package, version) => {
255
255
DerivationTree :: External ( External :: NotRoot ( package. clone ( ) , version. clone ( ) ) )
256
256
}
257
- Kind :: NoVersions ( package, range) => {
258
- DerivationTree :: External ( External :: NoVersions ( package. clone ( ) , range. clone ( ) ) )
257
+ Kind :: NoVersions ( package) => DerivationTree :: External ( External :: NoVersions (
258
+ package. clone ( ) ,
259
+ val. package_terms [ package] . as_range ( ) . clone ( ) ,
260
+ ) ) ,
261
+ Kind :: UnavailableDependencies ( package) => {
262
+ DerivationTree :: External ( External :: UnavailableDependencies (
263
+ package. clone ( ) ,
264
+ val. package_terms [ package] . as_range ( ) . clone ( ) ,
265
+ ) )
259
266
}
260
- Kind :: UnavailableDependencies ( package, range) => DerivationTree :: External (
261
- External :: UnavailableDependencies ( package. clone ( ) , range. clone ( ) ) ,
262
- ) ,
263
- Kind :: FromDependencyOf ( package, range, dep_package, dep_range) => {
267
+ Kind :: FromDependencyOf ( package, dep_package) => {
264
268
DerivationTree :: External ( External :: FromDependencyOf (
265
269
package. clone ( ) ,
266
- range . clone ( ) ,
270
+ val . package_terms [ package ] . as_range ( ) . clone ( ) ,
267
271
dep_package. clone ( ) ,
268
- dep_range . clone ( ) ,
272
+ val . package_terms [ dep_package ] . as_range ( ) . clone ( ) ,
269
273
) )
270
274
}
271
275
}
@@ -305,12 +309,12 @@ pub mod tests {
305
309
let mut store = Arena :: new( ) ;
306
310
let i1 = store. alloc( Incompatibility {
307
311
package_terms: SmallMap :: Two ( [ ( "p1" , t1. clone( ) ) , ( "p2" , t2. negate( ) ) ] ) ,
308
- kind: Kind :: UnavailableDependencies ( "0" , Range :: any ( ) )
312
+ kind: Kind :: UnavailableDependencies ( "0" )
309
313
} ) ;
310
314
311
315
let i2 = store. alloc( Incompatibility {
312
316
package_terms: SmallMap :: Two ( [ ( "p2" , t2) , ( "p3" , t3. clone( ) ) ] ) ,
313
- kind: Kind :: UnavailableDependencies ( "0" , Range :: any ( ) )
317
+ kind: Kind :: UnavailableDependencies ( "0" )
314
318
} ) ;
315
319
316
320
let mut i3 = Map :: default ( ) ;
0 commit comments