diff --git a/src/cargo/ops/cargo_update.rs b/src/cargo/ops/cargo_update.rs index 3b72a93582e9..95d7b35172f3 100644 --- a/src/cargo/ops/cargo_update.rs +++ b/src/cargo/ops/cargo_update.rs @@ -15,6 +15,7 @@ use crate::util::toml_mut::manifest::LocalManifest; use crate::util::toml_mut::upgrade::upgrade_requirement; use crate::util::{style, OptVersionReq}; use crate::util::{CargoResult, VersionExt}; +use anyhow::Context as _; use itertools::Itertools; use semver::{Op, Version, VersionReq}; use std::cmp::Ordering; @@ -269,7 +270,10 @@ pub fn upgrade_manifests( let to_update = to_update .iter() - .map(|s| PackageIdSpec::parse(s)) + .map(|spec| { + PackageIdSpec::parse(spec) + .with_context(|| format!("invalid package ID specification: `{spec}`")) + }) .collect::, _>>()?; // Updates often require a lot of modifications to the registry, so ensure diff --git a/tests/testsuite/update.rs b/tests/testsuite/update.rs index a8b7bf3a45f4..366243a6ffb9 100644 --- a/tests/testsuite/update.rs +++ b/tests/testsuite/update.rs @@ -2269,7 +2269,10 @@ fn update_breaking_spec_version() { .masquerade_as_nightly_cargo(&["update-breaking"]) .with_status(101) .with_stderr_data(str![[r#" -[ERROR] expected a version like "1.32" +[ERROR] invalid package ID specification: `incompatible@foo` + +Caused by: + expected a version like "1.32" "#]]) .run();