@@ -84,12 +84,37 @@ impl VersionPreferences {
8484 return previous_cmp;
8585 }
8686
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+ }
93118 }
94119 }
95120
@@ -245,15 +270,15 @@ mod test {
245270 vp. sort_summaries ( & mut summaries, None ) ;
246271 assert_eq ! (
247272 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"
249274 . to_string( )
250275 ) ;
251276
252277 vp. version_ordering ( VersionOrdering :: MinimumVersionsFirst ) ;
253278 vp. sort_summaries ( & mut summaries, None ) ;
254279 assert_eq ! (
255280 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"
257282 . to_string( )
258283 ) ;
259284 }
0 commit comments