From bcc2c408018fac66545d7ae10b6e4c503318d66d Mon Sep 17 00:00:00 2001 From: ychampion Date: Tue, 14 Jul 2026 14:35:14 +0000 Subject: [PATCH 1/2] test(set-version): expose unmatched selector no-ops --- tests/cargo-set-version/main.rs | 4 +++ .../package_not_found/in/Cargo.toml | 9 ++++++ .../package_not_found/mod.rs | 24 +++++++++++++++ .../package_not_found/out/Cargo.toml | 9 ++++++ .../package_not_found/stderr.term.svg | 21 +++++++++++++ .../package_not_found/stdout.term.svg | 21 +++++++++++++ .../package_not_found_mixed/in/Cargo.toml | 9 ++++++ .../package_not_found_mixed/mod.rs | 24 +++++++++++++++ .../package_not_found_mixed/out/Cargo.toml | 9 ++++++ .../package_not_found_mixed/stderr.term.svg | 25 ++++++++++++++++ .../package_not_found_mixed/stdout.term.svg | 21 +++++++++++++ .../package_not_found_repeated/in/Cargo.toml | 9 ++++++ .../package_not_found_repeated/mod.rs | 24 +++++++++++++++ .../package_not_found_repeated/out/Cargo.toml | 9 ++++++ .../stderr.term.svg | 21 +++++++++++++ .../stdout.term.svg | 21 +++++++++++++ .../packages_not_found/in/Cargo.toml | 9 ++++++ .../packages_not_found/mod.rs | 30 +++++++++++++++++++ .../packages_not_found/out/Cargo.toml | 9 ++++++ .../packages_not_found/stderr.term.svg | 21 +++++++++++++ .../packages_not_found/stdout.term.svg | 21 +++++++++++++ 21 files changed, 350 insertions(+) create mode 100644 tests/cargo-set-version/package_not_found/in/Cargo.toml create mode 100644 tests/cargo-set-version/package_not_found/mod.rs create mode 100644 tests/cargo-set-version/package_not_found/out/Cargo.toml create mode 100644 tests/cargo-set-version/package_not_found/stderr.term.svg create mode 100644 tests/cargo-set-version/package_not_found/stdout.term.svg create mode 100644 tests/cargo-set-version/package_not_found_mixed/in/Cargo.toml create mode 100644 tests/cargo-set-version/package_not_found_mixed/mod.rs create mode 100644 tests/cargo-set-version/package_not_found_mixed/out/Cargo.toml create mode 100644 tests/cargo-set-version/package_not_found_mixed/stderr.term.svg create mode 100644 tests/cargo-set-version/package_not_found_mixed/stdout.term.svg create mode 100644 tests/cargo-set-version/package_not_found_repeated/in/Cargo.toml create mode 100644 tests/cargo-set-version/package_not_found_repeated/mod.rs create mode 100644 tests/cargo-set-version/package_not_found_repeated/out/Cargo.toml create mode 100644 tests/cargo-set-version/package_not_found_repeated/stderr.term.svg create mode 100644 tests/cargo-set-version/package_not_found_repeated/stdout.term.svg create mode 100644 tests/cargo-set-version/packages_not_found/in/Cargo.toml create mode 100644 tests/cargo-set-version/packages_not_found/mod.rs create mode 100644 tests/cargo-set-version/packages_not_found/out/Cargo.toml create mode 100644 tests/cargo-set-version/packages_not_found/stderr.term.svg create mode 100644 tests/cargo-set-version/packages_not_found/stdout.term.svg diff --git a/tests/cargo-set-version/main.rs b/tests/cargo-set-version/main.rs index 0008434031..1dbb0df3ca 100644 --- a/tests/cargo-set-version/main.rs +++ b/tests/cargo-set-version/main.rs @@ -5,6 +5,10 @@ mod downgrade_error; mod dry_run; mod ignore_dependent; +mod package_not_found; +mod package_not_found_mixed; +mod package_not_found_repeated; +mod packages_not_found; mod relative_absolute_conflict; mod set_absolute_version; mod set_absolute_workspace_version; diff --git a/tests/cargo-set-version/package_not_found/in/Cargo.toml b/tests/cargo-set-version/package_not_found/in/Cargo.toml new file mode 100644 index 0000000000..2d25724afe --- /dev/null +++ b/tests/cargo-set-version/package_not_found/in/Cargo.toml @@ -0,0 +1,9 @@ +[workspace] + +[package] +name = "sample" +version = "0.1.0" +edition = "2015" + +[lib] +path = "dummy.rs" diff --git a/tests/cargo-set-version/package_not_found/mod.rs b/tests/cargo-set-version/package_not_found/mod.rs new file mode 100644 index 0000000000..57ad78b099 --- /dev/null +++ b/tests/cargo-set-version/package_not_found/mod.rs @@ -0,0 +1,24 @@ +use cargo_test_support::Project; +use cargo_test_support::compare::assert_ui; +use cargo_test_support::current_dir; +use cargo_test_support::file; +use cargo_test_support::prelude::*; + +use crate::CargoCommand; + +#[cargo_test] +fn case() { + let project = Project::from_template(current_dir!().join("in")); + let project_root = project.root(); + + snapbox::cmd::Command::cargo_ui() + .arg("set-version") + .args(["2.0.0", "--package", "missing"]) + .current_dir(&project_root) + .assert() + .code(0) + .stdout_eq(file!["stdout.term.svg"]) + .stderr_eq(file!["stderr.term.svg"]); + + assert_ui().subset_matches(current_dir!().join("out"), &project_root); +} diff --git a/tests/cargo-set-version/package_not_found/out/Cargo.toml b/tests/cargo-set-version/package_not_found/out/Cargo.toml new file mode 100644 index 0000000000..2d25724afe --- /dev/null +++ b/tests/cargo-set-version/package_not_found/out/Cargo.toml @@ -0,0 +1,9 @@ +[workspace] + +[package] +name = "sample" +version = "0.1.0" +edition = "2015" + +[lib] +path = "dummy.rs" diff --git a/tests/cargo-set-version/package_not_found/stderr.term.svg b/tests/cargo-set-version/package_not_found/stderr.term.svg new file mode 100644 index 0000000000..824d5a945c --- /dev/null +++ b/tests/cargo-set-version/package_not_found/stderr.term.svg @@ -0,0 +1,21 @@ + + + + + + + + + diff --git a/tests/cargo-set-version/package_not_found/stdout.term.svg b/tests/cargo-set-version/package_not_found/stdout.term.svg new file mode 100644 index 0000000000..824d5a945c --- /dev/null +++ b/tests/cargo-set-version/package_not_found/stdout.term.svg @@ -0,0 +1,21 @@ + + + + + + + + + diff --git a/tests/cargo-set-version/package_not_found_mixed/in/Cargo.toml b/tests/cargo-set-version/package_not_found_mixed/in/Cargo.toml new file mode 100644 index 0000000000..2d25724afe --- /dev/null +++ b/tests/cargo-set-version/package_not_found_mixed/in/Cargo.toml @@ -0,0 +1,9 @@ +[workspace] + +[package] +name = "sample" +version = "0.1.0" +edition = "2015" + +[lib] +path = "dummy.rs" diff --git a/tests/cargo-set-version/package_not_found_mixed/mod.rs b/tests/cargo-set-version/package_not_found_mixed/mod.rs new file mode 100644 index 0000000000..3c0639b3ba --- /dev/null +++ b/tests/cargo-set-version/package_not_found_mixed/mod.rs @@ -0,0 +1,24 @@ +use cargo_test_support::Project; +use cargo_test_support::compare::assert_ui; +use cargo_test_support::current_dir; +use cargo_test_support::file; +use cargo_test_support::prelude::*; + +use crate::CargoCommand; + +#[cargo_test] +fn case() { + let project = Project::from_template(current_dir!().join("in")); + let project_root = project.root(); + + snapbox::cmd::Command::cargo_ui() + .arg("set-version") + .args(["2.0.0", "--package", "sample", "--package", "missing"]) + .current_dir(&project_root) + .assert() + .code(0) + .stdout_eq(file!["stdout.term.svg"]) + .stderr_eq(file!["stderr.term.svg"]); + + assert_ui().subset_matches(current_dir!().join("out"), &project_root); +} diff --git a/tests/cargo-set-version/package_not_found_mixed/out/Cargo.toml b/tests/cargo-set-version/package_not_found_mixed/out/Cargo.toml new file mode 100644 index 0000000000..690ebe7d3f --- /dev/null +++ b/tests/cargo-set-version/package_not_found_mixed/out/Cargo.toml @@ -0,0 +1,9 @@ +[workspace] + +[package] +name = "sample" +version = "2.0.0" +edition = "2015" + +[lib] +path = "dummy.rs" diff --git a/tests/cargo-set-version/package_not_found_mixed/stderr.term.svg b/tests/cargo-set-version/package_not_found_mixed/stderr.term.svg new file mode 100644 index 0000000000..a71fee8efc --- /dev/null +++ b/tests/cargo-set-version/package_not_found_mixed/stderr.term.svg @@ -0,0 +1,25 @@ + + + + + + + Upgrading sample from 0.1.0 to 2.0.0 + + + + + + diff --git a/tests/cargo-set-version/package_not_found_mixed/stdout.term.svg b/tests/cargo-set-version/package_not_found_mixed/stdout.term.svg new file mode 100644 index 0000000000..824d5a945c --- /dev/null +++ b/tests/cargo-set-version/package_not_found_mixed/stdout.term.svg @@ -0,0 +1,21 @@ + + + + + + + + + diff --git a/tests/cargo-set-version/package_not_found_repeated/in/Cargo.toml b/tests/cargo-set-version/package_not_found_repeated/in/Cargo.toml new file mode 100644 index 0000000000..2d25724afe --- /dev/null +++ b/tests/cargo-set-version/package_not_found_repeated/in/Cargo.toml @@ -0,0 +1,9 @@ +[workspace] + +[package] +name = "sample" +version = "0.1.0" +edition = "2015" + +[lib] +path = "dummy.rs" diff --git a/tests/cargo-set-version/package_not_found_repeated/mod.rs b/tests/cargo-set-version/package_not_found_repeated/mod.rs new file mode 100644 index 0000000000..f89e1bde02 --- /dev/null +++ b/tests/cargo-set-version/package_not_found_repeated/mod.rs @@ -0,0 +1,24 @@ +use cargo_test_support::Project; +use cargo_test_support::compare::assert_ui; +use cargo_test_support::current_dir; +use cargo_test_support::file; +use cargo_test_support::prelude::*; + +use crate::CargoCommand; + +#[cargo_test] +fn case() { + let project = Project::from_template(current_dir!().join("in")); + let project_root = project.root(); + + snapbox::cmd::Command::cargo_ui() + .arg("set-version") + .args(["2.0.0", "-p", "missing", "-p", "missing"]) + .current_dir(&project_root) + .assert() + .code(0) + .stdout_eq(file!["stdout.term.svg"]) + .stderr_eq(file!["stderr.term.svg"]); + + assert_ui().subset_matches(current_dir!().join("out"), &project_root); +} diff --git a/tests/cargo-set-version/package_not_found_repeated/out/Cargo.toml b/tests/cargo-set-version/package_not_found_repeated/out/Cargo.toml new file mode 100644 index 0000000000..2d25724afe --- /dev/null +++ b/tests/cargo-set-version/package_not_found_repeated/out/Cargo.toml @@ -0,0 +1,9 @@ +[workspace] + +[package] +name = "sample" +version = "0.1.0" +edition = "2015" + +[lib] +path = "dummy.rs" diff --git a/tests/cargo-set-version/package_not_found_repeated/stderr.term.svg b/tests/cargo-set-version/package_not_found_repeated/stderr.term.svg new file mode 100644 index 0000000000..824d5a945c --- /dev/null +++ b/tests/cargo-set-version/package_not_found_repeated/stderr.term.svg @@ -0,0 +1,21 @@ + + + + + + + + + diff --git a/tests/cargo-set-version/package_not_found_repeated/stdout.term.svg b/tests/cargo-set-version/package_not_found_repeated/stdout.term.svg new file mode 100644 index 0000000000..824d5a945c --- /dev/null +++ b/tests/cargo-set-version/package_not_found_repeated/stdout.term.svg @@ -0,0 +1,21 @@ + + + + + + + + + diff --git a/tests/cargo-set-version/packages_not_found/in/Cargo.toml b/tests/cargo-set-version/packages_not_found/in/Cargo.toml new file mode 100644 index 0000000000..2d25724afe --- /dev/null +++ b/tests/cargo-set-version/packages_not_found/in/Cargo.toml @@ -0,0 +1,9 @@ +[workspace] + +[package] +name = "sample" +version = "0.1.0" +edition = "2015" + +[lib] +path = "dummy.rs" diff --git a/tests/cargo-set-version/packages_not_found/mod.rs b/tests/cargo-set-version/packages_not_found/mod.rs new file mode 100644 index 0000000000..de63809a8b --- /dev/null +++ b/tests/cargo-set-version/packages_not_found/mod.rs @@ -0,0 +1,30 @@ +use cargo_test_support::Project; +use cargo_test_support::compare::assert_ui; +use cargo_test_support::current_dir; +use cargo_test_support::file; +use cargo_test_support::prelude::*; + +use crate::CargoCommand; + +#[cargo_test] +fn case() { + let project = Project::from_template(current_dir!().join("in")); + let project_root = project.root(); + + snapbox::cmd::Command::cargo_ui() + .arg("set-version") + .args([ + "2.0.0", + "--package", + "first-missing", + "--package", + "second-missing", + ]) + .current_dir(&project_root) + .assert() + .code(0) + .stdout_eq(file!["stdout.term.svg"]) + .stderr_eq(file!["stderr.term.svg"]); + + assert_ui().subset_matches(current_dir!().join("out"), &project_root); +} diff --git a/tests/cargo-set-version/packages_not_found/out/Cargo.toml b/tests/cargo-set-version/packages_not_found/out/Cargo.toml new file mode 100644 index 0000000000..2d25724afe --- /dev/null +++ b/tests/cargo-set-version/packages_not_found/out/Cargo.toml @@ -0,0 +1,9 @@ +[workspace] + +[package] +name = "sample" +version = "0.1.0" +edition = "2015" + +[lib] +path = "dummy.rs" diff --git a/tests/cargo-set-version/packages_not_found/stderr.term.svg b/tests/cargo-set-version/packages_not_found/stderr.term.svg new file mode 100644 index 0000000000..824d5a945c --- /dev/null +++ b/tests/cargo-set-version/packages_not_found/stderr.term.svg @@ -0,0 +1,21 @@ + + + + + + + + + diff --git a/tests/cargo-set-version/packages_not_found/stdout.term.svg b/tests/cargo-set-version/packages_not_found/stdout.term.svg new file mode 100644 index 0000000000..824d5a945c --- /dev/null +++ b/tests/cargo-set-version/packages_not_found/stdout.term.svg @@ -0,0 +1,21 @@ + + + + + + + + + From b91afe9bd1a5656527bf54f3acc05aa5b7c7cef1 Mon Sep 17 00:00:00 2001 From: ychampion Date: Tue, 14 Jul 2026 14:41:45 +0000 Subject: [PATCH 2/2] fix(set-version): reject unmatched package selectors --- src/bin/set-version/set_version.rs | 17 +++++++++++++++++ .../cargo-set-version/package_not_found/mod.rs | 2 +- .../package_not_found/stderr.term.svg | 6 +++++- .../package_not_found_mixed/mod.rs | 2 +- .../package_not_found_mixed/out/Cargo.toml | 2 +- .../package_not_found_mixed/stderr.term.svg | 2 +- .../package_not_found_repeated/mod.rs | 2 +- .../package_not_found_repeated/stderr.term.svg | 6 +++++- .../cargo-set-version/packages_not_found/mod.rs | 2 +- .../packages_not_found/stderr.term.svg | 6 +++++- 10 files changed, 38 insertions(+), 9 deletions(-) diff --git a/src/bin/set-version/set_version.rs b/src/bin/set-version/set_version.rs index bcf10a5a16..3812072e62 100644 --- a/src/bin/set-version/set_version.rs +++ b/src/bin/set-version/set_version.rs @@ -119,6 +119,23 @@ fn exec(args: VersionArgs) -> CargoResult<()> { let root_manifest_path = ws_metadata.workspace_root.as_std_path().join("Cargo.toml"); let workspace_members = find_ws_members(&ws_metadata); + let mut missing = Vec::new(); + for name in &pkgid { + let name = name.as_str(); + if !workspace_members + .iter() + .any(|package| package.name.as_str() == name) + && !missing.contains(&name) + { + missing.push(name); + } + } + match missing.len() { + 0 => {} + 1 => anyhow::bail!("package {} doesn't exist", missing.join(", ")), + _ => anyhow::bail!("packages {} don't exist", missing.join(", ")), + } + if all { shell_warn("The flag `--all` has been deprecated in favor of `--workspace`")?; } diff --git a/tests/cargo-set-version/package_not_found/mod.rs b/tests/cargo-set-version/package_not_found/mod.rs index 57ad78b099..8a4c20fb91 100644 --- a/tests/cargo-set-version/package_not_found/mod.rs +++ b/tests/cargo-set-version/package_not_found/mod.rs @@ -16,7 +16,7 @@ fn case() { .args(["2.0.0", "--package", "missing"]) .current_dir(&project_root) .assert() - .code(0) + .code(1) .stdout_eq(file!["stdout.term.svg"]) .stderr_eq(file!["stderr.term.svg"]); diff --git a/tests/cargo-set-version/package_not_found/stderr.term.svg b/tests/cargo-set-version/package_not_found/stderr.term.svg index 824d5a945c..ce1443ca8c 100644 --- a/tests/cargo-set-version/package_not_found/stderr.term.svg +++ b/tests/cargo-set-version/package_not_found/stderr.term.svg @@ -1,4 +1,4 @@ - + diff --git a/tests/cargo-set-version/package_not_found_mixed/mod.rs b/tests/cargo-set-version/package_not_found_mixed/mod.rs index 3c0639b3ba..516f7b93b8 100644 --- a/tests/cargo-set-version/package_not_found_mixed/mod.rs +++ b/tests/cargo-set-version/package_not_found_mixed/mod.rs @@ -16,7 +16,7 @@ fn case() { .args(["2.0.0", "--package", "sample", "--package", "missing"]) .current_dir(&project_root) .assert() - .code(0) + .code(1) .stdout_eq(file!["stdout.term.svg"]) .stderr_eq(file!["stderr.term.svg"]); diff --git a/tests/cargo-set-version/package_not_found_mixed/out/Cargo.toml b/tests/cargo-set-version/package_not_found_mixed/out/Cargo.toml index 690ebe7d3f..2d25724afe 100644 --- a/tests/cargo-set-version/package_not_found_mixed/out/Cargo.toml +++ b/tests/cargo-set-version/package_not_found_mixed/out/Cargo.toml @@ -2,7 +2,7 @@ [package] name = "sample" -version = "2.0.0" +version = "0.1.0" edition = "2015" [lib] diff --git a/tests/cargo-set-version/package_not_found_mixed/stderr.term.svg b/tests/cargo-set-version/package_not_found_mixed/stderr.term.svg index a71fee8efc..ce1443ca8c 100644 --- a/tests/cargo-set-version/package_not_found_mixed/stderr.term.svg +++ b/tests/cargo-set-version/package_not_found_mixed/stderr.term.svg @@ -16,7 +16,7 @@ - Upgrading sample from 0.1.0 to 2.0.0 + Error: package missing doesn't exist diff --git a/tests/cargo-set-version/package_not_found_repeated/mod.rs b/tests/cargo-set-version/package_not_found_repeated/mod.rs index f89e1bde02..d03d0f1e22 100644 --- a/tests/cargo-set-version/package_not_found_repeated/mod.rs +++ b/tests/cargo-set-version/package_not_found_repeated/mod.rs @@ -16,7 +16,7 @@ fn case() { .args(["2.0.0", "-p", "missing", "-p", "missing"]) .current_dir(&project_root) .assert() - .code(0) + .code(1) .stdout_eq(file!["stdout.term.svg"]) .stderr_eq(file!["stderr.term.svg"]); diff --git a/tests/cargo-set-version/package_not_found_repeated/stderr.term.svg b/tests/cargo-set-version/package_not_found_repeated/stderr.term.svg index 824d5a945c..ce1443ca8c 100644 --- a/tests/cargo-set-version/package_not_found_repeated/stderr.term.svg +++ b/tests/cargo-set-version/package_not_found_repeated/stderr.term.svg @@ -1,4 +1,4 @@ - + diff --git a/tests/cargo-set-version/packages_not_found/mod.rs b/tests/cargo-set-version/packages_not_found/mod.rs index de63809a8b..8e3c10a728 100644 --- a/tests/cargo-set-version/packages_not_found/mod.rs +++ b/tests/cargo-set-version/packages_not_found/mod.rs @@ -22,7 +22,7 @@ fn case() { ]) .current_dir(&project_root) .assert() - .code(0) + .code(1) .stdout_eq(file!["stdout.term.svg"]) .stderr_eq(file!["stderr.term.svg"]); diff --git a/tests/cargo-set-version/packages_not_found/stderr.term.svg b/tests/cargo-set-version/packages_not_found/stderr.term.svg index 824d5a945c..ec7dc79bb4 100644 --- a/tests/cargo-set-version/packages_not_found/stderr.term.svg +++ b/tests/cargo-set-version/packages_not_found/stderr.term.svg @@ -1,4 +1,4 @@ - +