@@ -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,37 +84,35 @@ 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
108
107
/// Build an incompatibility from a given dependency.
109
108
pub fn from_dependency ( package : P , version : V , dep : ( & P , & Range < V > ) ) -> Self {
110
- let range1 = Range :: exact ( version) ;
111
109
let ( p2, range2) = dep;
112
110
Self {
113
111
package_terms : SmallMap :: Two ( [
114
- ( package. clone ( ) , Term :: Positive ( range1 . clone ( ) ) ) ,
112
+ ( package. clone ( ) , Term :: Positive ( Range :: exact ( version ) ) ) ,
115
113
( p2. clone ( ) , Term :: Negative ( range2. clone ( ) ) ) ,
116
114
] ) ,
117
- kind : Kind :: FromDependencyOf ( package, range1 , p2 . clone ( ) , range2 . clone ( ) ) ,
115
+ kind : Kind :: FromDependencyOf ( package, p2 . clone ( ) ) ,
118
116
}
119
117
}
120
118
@@ -239,7 +237,8 @@ impl<P: Package, V: Version> Incompatibility<P, V> {
239
237
shared_ids : & Set < Id < Self > > ,
240
238
store : & Arena < Self > ,
241
239
) -> DerivationTree < P , V > {
242
- match & store[ self_id] . kind {
240
+ let val = & store[ self_id] ;
241
+ match & val. kind {
243
242
Kind :: DerivedFrom ( id1, id2) => {
244
243
let cause1 = Self :: build_derivation_tree ( * id1, shared_ids, store) ;
245
244
let cause2 = Self :: build_derivation_tree ( * id2, shared_ids, store) ;
@@ -254,18 +253,22 @@ impl<P: Package, V: Version> Incompatibility<P, V> {
254
253
Kind :: NotRoot ( package, version) => {
255
254
DerivationTree :: External ( External :: NotRoot ( package. clone ( ) , version. clone ( ) ) )
256
255
}
257
- Kind :: NoVersions ( package, range) => {
258
- DerivationTree :: External ( External :: NoVersions ( package. clone ( ) , range. clone ( ) ) )
256
+ Kind :: NoVersions ( package) => DerivationTree :: External ( External :: NoVersions (
257
+ package. clone ( ) ,
258
+ val. package_terms [ package] . as_range ( ) . clone ( ) ,
259
+ ) ) ,
260
+ Kind :: UnavailableDependencies ( package) => {
261
+ DerivationTree :: External ( External :: UnavailableDependencies (
262
+ package. clone ( ) ,
263
+ val. package_terms [ package] . as_range ( ) . clone ( ) ,
264
+ ) )
259
265
}
260
- Kind :: UnavailableDependencies ( package, range) => DerivationTree :: External (
261
- External :: UnavailableDependencies ( package. clone ( ) , range. clone ( ) ) ,
262
- ) ,
263
- Kind :: FromDependencyOf ( package, range, dep_package, dep_range) => {
266
+ Kind :: FromDependencyOf ( package, dep_package) => {
264
267
DerivationTree :: External ( External :: FromDependencyOf (
265
268
package. clone ( ) ,
266
- range . clone ( ) ,
269
+ val . package_terms [ package ] . as_range ( ) . clone ( ) ,
267
270
dep_package. clone ( ) ,
268
- dep_range . clone ( ) ,
271
+ val . package_terms [ dep_package ] . as_range ( ) . clone ( ) ,
269
272
) )
270
273
}
271
274
}
@@ -305,12 +308,12 @@ pub mod tests {
305
308
let mut store = Arena :: new( ) ;
306
309
let i1 = store. alloc( Incompatibility {
307
310
package_terms: SmallMap :: Two ( [ ( "p1" , t1. clone( ) ) , ( "p2" , t2. negate( ) ) ] ) ,
308
- kind: Kind :: UnavailableDependencies ( "0" , Range :: any ( ) )
311
+ kind: Kind :: UnavailableDependencies ( "0" )
309
312
} ) ;
310
313
311
314
let i2 = store. alloc( Incompatibility {
312
315
package_terms: SmallMap :: Two ( [ ( "p2" , t2) , ( "p3" , t3. clone( ) ) ] ) ,
313
- kind: Kind :: UnavailableDependencies ( "0" , Range :: any ( ) )
316
+ kind: Kind :: UnavailableDependencies ( "0" )
314
317
} ) ;
315
318
316
319
let mut i3 = Map :: default ( ) ;
0 commit comments