Skip to content

Commit 0fe5f00

Browse files
committed
Fix upgrading of pre-release.
1 parent 659039c commit 0fe5f00

File tree

2 files changed

+11
-10
lines changed

2 files changed

+11
-10
lines changed

src/cargo/util/toml_mut/upgrade.rs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
use std::fmt::Display;
22

3-
use anyhow::bail;
4-
53
use crate::CargoResult;
64

75
/// Upgrade an existing requirement to a new version.
@@ -23,15 +21,18 @@ pub(crate) fn upgrade_requirement(
2321
.map(|p| set_comparator(p, version))
2422
.collect();
2523
let comparators = comparators?;
26-
let new_req = semver::VersionReq { comparators };
24+
let mut new_req = semver::VersionReq { comparators };
25+
// Validate contract
26+
if !new_req.matches(version) {
27+
// If req is ^0.1 and version is 0.2.0-beta, new_req becomes ^0.2.
28+
// This does not match version. In such cases, we should let new_req
29+
// be ^version.
30+
new_req = semver::VersionReq::parse(&format!("^{version}"))?;
31+
}
2732
let mut new_req_text = new_req.to_string();
2833
if new_req_text.starts_with('^') && !req.starts_with('^') {
2934
new_req_text.remove(0);
3035
}
31-
// Validate contract
32-
if !new_req.matches(version) {
33-
bail!("new requirement {new_req_text} is invalid, because it doesn't match {version}")
34-
}
3536
if new_req_text == req_text {
3637
Ok(None)
3738
} else {

tests/testsuite/update.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1785,7 +1785,7 @@ fn update_precise_breaking_alternative() {
17851785
}
17861786

17871787
#[cargo_test]
1788-
fn update_precise_breaking_pre_release_cannot_upgrade_nonexplicit_version_req() {
1788+
fn update_precise_breaking_pre_release() {
17891789
Package::new("pre", "0.1.0").publish();
17901790

17911791
let p = project()
@@ -1811,9 +1811,9 @@ fn update_precise_breaking_pre_release_cannot_upgrade_nonexplicit_version_req()
18111811

18121812
p.cargo("update -Zunstable-options pre --precise 0.2.0-beta")
18131813
.masquerade_as_nightly_cargo(&["update-precise-breaking"])
1814-
.with_status(101)
18151814
.with_stderr_data(str![[r#"
1816-
[ERROR] new requirement ^0.2 is invalid, because it doesn't match 0.2.0-beta
1815+
[UPGRADING] pre ^0.1 -> ^0.2.0-beta
1816+
[UPDATING] `dummy-registry` index
18171817
18181818
"#]])
18191819
.run();

0 commit comments

Comments
 (0)