Skip to content

Commit 3a1bb8b

Browse files
committed
fix: Limiting prerelease match semantics to use only on OptVersionReq::Req
1 parent 4e62eb4 commit 3a1bb8b

File tree

1 file changed

+11
-7
lines changed

1 file changed

+11
-7
lines changed

src/cargo/util/semver_ext.rs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)