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/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..8a4c20fb91 --- /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(1) + .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..ce1443ca8c --- /dev/null +++ b/tests/cargo-set-version/package_not_found/stderr.term.svg @@ -0,0 +1,25 @@ + + + + + + + Error: package missing doesn't exist + + + + + + 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..516f7b93b8 --- /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(1) + .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..2d25724afe --- /dev/null +++ b/tests/cargo-set-version/package_not_found_mixed/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_mixed/stderr.term.svg b/tests/cargo-set-version/package_not_found_mixed/stderr.term.svg new file mode 100644 index 0000000000..ce1443ca8c --- /dev/null +++ b/tests/cargo-set-version/package_not_found_mixed/stderr.term.svg @@ -0,0 +1,25 @@ + + + + + + + Error: package missing doesn't exist + + + + + + 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..d03d0f1e22 --- /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(1) + .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..ce1443ca8c --- /dev/null +++ b/tests/cargo-set-version/package_not_found_repeated/stderr.term.svg @@ -0,0 +1,25 @@ + + + + + + + Error: package missing doesn't exist + + + + + + 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..8e3c10a728 --- /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(1) + .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..ec7dc79bb4 --- /dev/null +++ b/tests/cargo-set-version/packages_not_found/stderr.term.svg @@ -0,0 +1,25 @@ + + + + + + + Error: packages first-missing, second-missing don't exist + + + + + + 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 @@ + + + + + + + + +