diff --git a/src/bin/cargo/commands/remove.rs b/src/bin/cargo/commands/remove.rs index 798e6fff669..e8f6ab98e80 100644 --- a/src/bin/cargo/commands/remove.rs +++ b/src/bin/cargo/commands/remove.rs @@ -216,7 +216,6 @@ fn gc_workspace(workspace: &Workspace<'_>) -> CargoResult<()> { // // Example tables: // - profile.dev.package.foo - // - profile.release.package."*" // - profile.release.package."foo:2.1.0" if let Some(toml_edit::Item::Table(profile_section_table)) = manifest.get_mut("profile") { profile_section_table.set_implicit(true); @@ -231,8 +230,14 @@ fn gc_workspace(workspace: &Workspace<'_>) -> CargoResult<()> { package_table.set_implicit(true); for (key, item) in package_table.iter_mut() { + let key = key.get(); + // Skip globs. Can't do anything with them. + // For example, profile.release.package."*". + if crate::util::restricted_names::is_glob_pattern(key) { + continue; + } if !spec_has_match( - &PackageIdSpec::parse(key.get())?, + &PackageIdSpec::parse(key)?, &dependencies, workspace.config(), )? { diff --git a/tests/testsuite/cargo_remove/mod.rs b/tests/testsuite/cargo_remove/mod.rs index ea7902bd8f6..4403e242554 100644 --- a/tests/testsuite/cargo_remove/mod.rs +++ b/tests/testsuite/cargo_remove/mod.rs @@ -23,6 +23,7 @@ mod optional_dep_feature; mod optional_feature; mod package; mod remove_basic; +mod skip_gc_glob_profile; mod target; mod target_build; mod target_dev; diff --git a/tests/testsuite/cargo_remove/skip_gc_glob_profile/in/Cargo.toml b/tests/testsuite/cargo_remove/skip_gc_glob_profile/in/Cargo.toml new file mode 100644 index 00000000000..a25e33ae09b --- /dev/null +++ b/tests/testsuite/cargo_remove/skip_gc_glob_profile/in/Cargo.toml @@ -0,0 +1,13 @@ +[package] +name = "cargo-remove-test-fixture" +version = "0.1.0" + +[[bin]] +name = "main" +path = "src/main.rs" + +[dependencies] +toml = "0.1" + +[profile.dev.package."*"] +opt-level = 3 \ No newline at end of file diff --git a/tests/testsuite/cargo_remove/skip_gc_glob_profile/in/src/lib.rs b/tests/testsuite/cargo_remove/skip_gc_glob_profile/in/src/lib.rs new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/tests/testsuite/cargo_remove/skip_gc_glob_profile/in/src/lib.rs @@ -0,0 +1 @@ + diff --git a/tests/testsuite/cargo_remove/skip_gc_glob_profile/mod.rs b/tests/testsuite/cargo_remove/skip_gc_glob_profile/mod.rs new file mode 100644 index 00000000000..2d587455c5a --- /dev/null +++ b/tests/testsuite/cargo_remove/skip_gc_glob_profile/mod.rs @@ -0,0 +1,25 @@ +use cargo_test_support::compare::assert_ui; +use cargo_test_support::curr_dir; +use cargo_test_support::CargoCommand; +use cargo_test_support::Project; + +#[cargo_test] +fn case() { + cargo_test_support::registry::init(); + cargo_test_support::registry::Package::new("toml", "0.1.1+my-package").publish(); + + let project = Project::from_template(curr_dir!().join("in")); + let project_root = project.root(); + let cwd = &project_root; + + snapbox::cmd::Command::cargo_ui() + .arg("remove") + .args(["toml"]) + .current_dir(cwd) + .assert() + .success() + .stdout_matches_path(curr_dir!().join("stdout.log")) + .stderr_matches_path(curr_dir!().join("stderr.log")); + + assert_ui().subset_matches(curr_dir!().join("out"), &project_root); +} diff --git a/tests/testsuite/cargo_remove/skip_gc_glob_profile/out/Cargo.toml b/tests/testsuite/cargo_remove/skip_gc_glob_profile/out/Cargo.toml new file mode 100644 index 00000000000..76e3bcf7751 --- /dev/null +++ b/tests/testsuite/cargo_remove/skip_gc_glob_profile/out/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "cargo-remove-test-fixture" +version = "0.1.0" + +[[bin]] +name = "main" +path = "src/main.rs" + +[profile.dev.package."*"] +opt-level = 3 diff --git a/tests/testsuite/cargo_remove/skip_gc_glob_profile/stderr.log b/tests/testsuite/cargo_remove/skip_gc_glob_profile/stderr.log new file mode 100644 index 00000000000..9dee9e2b713 --- /dev/null +++ b/tests/testsuite/cargo_remove/skip_gc_glob_profile/stderr.log @@ -0,0 +1 @@ + Removing toml from dependencies diff --git a/tests/testsuite/cargo_remove/skip_gc_glob_profile/stdout.log b/tests/testsuite/cargo_remove/skip_gc_glob_profile/stdout.log new file mode 100644 index 00000000000..e69de29bb2d