@@ -84,12 +84,37 @@ impl VersionPreferences {
84
84
return previous_cmp;
85
85
}
86
86
87
- if self . max_rust_version . is_some ( ) {
88
- let msrv_a = a. rust_version ( ) <= self . max_rust_version . as_ref ( ) ;
89
- let msrv_b = b. rust_version ( ) <= self . max_rust_version . as_ref ( ) ;
90
- let msrv_cmp = msrv_a. cmp ( & msrv_b) . reverse ( ) ;
91
- if msrv_cmp != Ordering :: Equal {
92
- return msrv_cmp;
87
+ if let Some ( max_rust_version) = & self . max_rust_version {
88
+ match ( a. rust_version ( ) , b. rust_version ( ) ) {
89
+ // Fallback
90
+ ( None , None ) => { }
91
+ ( Some ( a) , Some ( b) ) if a == b => { }
92
+ // Primary comparison
93
+ ( Some ( a) , Some ( b) ) => {
94
+ let a_is_compat = a <= max_rust_version;
95
+ let b_is_compat = b <= max_rust_version;
96
+ match ( a_is_compat, b_is_compat) {
97
+ ( true , true ) => { } // fallback
98
+ ( false , false ) => { } // fallback
99
+ ( true , false ) => return Ordering :: Less ,
100
+ ( false , true ) => return Ordering :: Greater ,
101
+ }
102
+ }
103
+ // Prioritize `None` over incompatible
104
+ ( None , Some ( b) ) => {
105
+ if b <= max_rust_version {
106
+ return Ordering :: Greater ;
107
+ } else {
108
+ return Ordering :: Less ;
109
+ }
110
+ }
111
+ ( Some ( a) , None ) => {
112
+ if a <= max_rust_version {
113
+ return Ordering :: Less ;
114
+ } else {
115
+ return Ordering :: Greater ;
116
+ }
117
+ }
93
118
}
94
119
}
95
120
@@ -245,15 +270,15 @@ mod test {
245
270
vp. sort_summaries ( & mut summaries, None ) ;
246
271
assert_eq ! (
247
272
describe( & summaries) ,
248
- "foo/1.2.4 , foo/1.2.2 , foo/1.2.1 , foo/1.2.0 , foo/1.1 .0, foo/1.0.9, foo/1.2.3"
273
+ "foo/1.2.1 , foo/1.1.0 , foo/1.2.4 , foo/1.2.2 , foo/1.2 .0, foo/1.0.9, foo/1.2.3"
249
274
. to_string( )
250
275
) ;
251
276
252
277
vp. version_ordering ( VersionOrdering :: MinimumVersionsFirst ) ;
253
278
vp. sort_summaries ( & mut summaries, None ) ;
254
279
assert_eq ! (
255
280
describe( & summaries) ,
256
- "foo/1.0.9 , foo/1.1.0 , foo/1.2.0 , foo/1.2.1 , foo/1.2.2, foo/1.2.4, foo/1.2.3"
281
+ "foo/1.1.0 , foo/1.2.1 , foo/1.0.9 , foo/1.2.0 , foo/1.2.2, foo/1.2.4, foo/1.2.3"
257
282
. to_string( )
258
283
) ;
259
284
}
0 commit comments