@@ -111,13 +111,17 @@ impl OptVersionReq {
111111 }
112112 }
113113
114- /// Since Semver does not support prerelease versions,
115- /// the simplest implementation is taken here without comparing the prerelease section.
116- /// The logic here is temporary, we'll have to consider more boundary conditions later,
117- /// and we're not sure if this part of the functionality should be implemented in semver or cargo.
114+ /// An interim approach allows to update to SemVer-Compatible prerelease version.
118115 pub fn matches_prerelease ( & self , version : & Version ) -> bool {
116+ // Others Non `OptVersionReq::Req` have their own implementation.
117+ if !matches ! ( self , OptVersionReq :: Req ( _) ) {
118+ return self . matches ( version) ;
119+ }
120+
121+ // TODO: In the future we have a prerelease semantic to be implemented.
119122 if version. is_prerelease ( ) {
120- let mut version = version. clone ( ) ;
123+ let mut version: Version = version. clone ( ) ;
124+ // Ignores the Prerelease tag to unlock the limit of non prerelease unpdate to prerelease.
121125 version. pre = semver:: Prerelease :: EMPTY ;
122126 return self . matches ( & version) ;
123127 }
@@ -251,9 +255,9 @@ mod matches_prerelease {
251255 assert ! ( req. matches_prerelease( & to_ver) ) ;
252256
253257 let req = OptVersionReq :: Locked ( to_ver. clone ( ) , req_ver. clone ( ) ) ;
254- assert ! ( ! req. matches_prerelease( & to_ver) ) ;
258+ assert ! ( req. matches_prerelease( & to_ver) ) ;
255259
256260 let req = OptVersionReq :: Precise ( to_ver. clone ( ) , req_ver. clone ( ) ) ;
257- assert ! ( ! req. matches_prerelease( & to_ver) ) ;
261+ assert ! ( req. matches_prerelease( & to_ver) ) ;
258262 }
259263}
0 commit comments