diff --git a/src/cargo/util/semver_ext.rs b/src/cargo/util/semver_ext.rs index 5ad61f5787f..7863ba15d1f 100644 --- a/src/cargo/util/semver_ext.rs +++ b/src/cargo/util/semver_ext.rs @@ -76,12 +76,6 @@ impl OptVersionReq { } pub fn update_precise(&mut self, version: &Version) { - assert!( - self.matches(version), - "cannot update_precise {} to {}", - self, - version - ); use OptVersionReq::*; let version = version.clone(); *self = match self { diff --git a/tests/testsuite/update.rs b/tests/testsuite/update.rs index 8a58e4c801c..e636435b00e 100644 --- a/tests/testsuite/update.rs +++ b/tests/testsuite/update.rs @@ -391,6 +391,60 @@ fn update_precise() { .run(); } +#[cargo_test] +fn update_precise_mismatched() { + Package::new("serde", "1.2.0").publish(); + Package::new("serde", "1.2.1").publish(); + Package::new("serde", "1.6.0").publish(); + + let p = project() + .file( + "Cargo.toml", + r#" + [package] + name = "bar" + version = "0.0.1" + authors = [] + + [dependencies] + serde = "~1.2" + "#, + ) + .file("src/lib.rs", "") + .build(); + + p.cargo("check").run(); + + // `1.6.0` does not match `"~1.2"` + p.cargo("update serde:1.2 --precise 1.6.0") + .with_stderr( + "\ +[UPDATING] `[..]` index +[ERROR] failed to select a version for the requirement `serde = \"~1.2\"` +candidate versions found which didn't match: 1.6.0 +location searched: `[..]` index (which is replacing registry `crates-io`) +required by package `bar v0.0.1 ([..]/foo)` +perhaps a crate was updated and forgotten to be re-vendored? +", + ) + .with_status(101) + .run(); + + // `1.9.0` does not exist + p.cargo("update serde:1.2 --precise 1.9.0") + // This terrible error message has been the same for a long time. A fix is more than welcome! + .with_stderr( + "\ +[UPDATING] `[..]` index +[ERROR] no matching package named `serde` found +location searched: registry `crates-io` +required by package `bar v0.0.1 ([..]/foo)` +", + ) + .with_status(101) + .run(); +} + #[cargo_test] fn update_precise_build_metadata() { Package::new("serde", "0.0.1+first").publish();