Skip to content

Commit 066d0fb

Browse files
committed
fix: Skip update --breaking in prerelase version
1 parent 0b801d1 commit 066d0fb

File tree

2 files changed

+12
-9
lines changed

2 files changed

+12
-9
lines changed

src/cargo/util/toml_mut/upgrade.rs

+12-6
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,10 @@ pub(crate) fn upgrade_requirement(
2020
.into_iter()
2121
.map(|p| set_comparator(p, version))
2222
.collect();
23-
let comparators = comparators?;
23+
let comparators: Vec<_> = comparators?.into_iter().flatten().collect();
24+
if comparators.is_empty() {
25+
return Ok(None);
26+
}
2427
let new_req = semver::VersionReq { comparators };
2528
let mut new_req_text = new_req.to_string();
2629
if new_req_text.starts_with('^') && !req.starts_with('^') {
@@ -48,7 +51,7 @@ pub(crate) fn upgrade_requirement(
4851
fn set_comparator(
4952
mut pred: semver::Comparator,
5053
version: &semver::Version,
51-
) -> CargoResult<semver::Comparator> {
54+
) -> CargoResult<Option<semver::Comparator>> {
5255
match pred.op {
5356
semver::Op::Wildcard => {
5457
pred.major = version.major;
@@ -58,7 +61,7 @@ fn set_comparator(
5861
if pred.patch.is_some() {
5962
pred.patch = Some(version.patch);
6063
}
61-
Ok(pred)
64+
Ok(Some(pred))
6265
}
6366
semver::Op::Exact => Ok(assign_partial_req(version, pred)),
6467
semver::Op::Greater | semver::Op::GreaterEq | semver::Op::Less | semver::Op::LessEq => {
@@ -77,7 +80,10 @@ fn set_comparator(
7780
fn assign_partial_req(
7881
version: &semver::Version,
7982
mut pred: semver::Comparator,
80-
) -> semver::Comparator {
83+
) -> Option<semver::Comparator> {
84+
if !pred.pre.is_empty() {
85+
return None;
86+
}
8187
pred.major = version.major;
8288
if pred.minor.is_some() {
8389
pred.minor = Some(version.minor);
@@ -86,7 +92,7 @@ fn assign_partial_req(
8692
pred.patch = Some(version.patch);
8793
}
8894
pred.pre = version.pre.clone();
89-
pred
95+
Some(pred)
9096
}
9197

9298
fn unsupported_version_req(req: impl Display) -> anyhow::Error {
@@ -220,7 +226,7 @@ mod test {
220226

221227
#[test]
222228
fn caret_prerelease() {
223-
assert_req_bump("1.7.0", "2.0.0-beta.21", "1.7.0");
229+
assert_req_bump("1.7.0", "2.0.0-beta.21", None);
224230
}
225231
}
226232
}

tests/testsuite/update.rs

-3
Original file line numberDiff line numberDiff line change
@@ -2646,9 +2646,6 @@ fn update_breaking_pre_release() {
26462646
.masquerade_as_nightly_cargo(&["update-breaking"])
26472647
.with_stderr_data(str![[r#"
26482648
[UPDATING] `dummy-registry` index
2649-
[UPGRADING] bar ^2.0.0-beta.21 -> ^1.7.0
2650-
[LOCKING] 1 package to latest compatible version
2651-
[DOWNGRADING] bar v2.0.0-beta.21 -> v1.7.0
26522649
26532650
"#]])
26542651
.run();

0 commit comments

Comments
 (0)