diff --git a/src/cargo/ops/cargo_add/mod.rs b/src/cargo/ops/cargo_add/mod.rs index 8409df7324b..51ad938f371 100644 --- a/src/cargo/ops/cargo_add/mod.rs +++ b/src/cargo/ops/cargo_add/mod.rs @@ -934,7 +934,7 @@ fn populate_available_features( } let possibilities = loop { - match registry.query_vec(&query, QueryKind::Fuzzy) { + match registry.query_vec(&query, QueryKind::Exact) { std::task::Poll::Ready(res) => { break res?; } diff --git a/tests/testsuite/cargo_add/git_multiple_packages_features/in b/tests/testsuite/cargo_add/git_multiple_packages_features/in new file mode 120000 index 00000000000..6c6a27fcfb5 --- /dev/null +++ b/tests/testsuite/cargo_add/git_multiple_packages_features/in @@ -0,0 +1 @@ +../add-basic.in \ No newline at end of file diff --git a/tests/testsuite/cargo_add/git_multiple_packages_features/mod.rs b/tests/testsuite/cargo_add/git_multiple_packages_features/mod.rs new file mode 100644 index 00000000000..eb76b6f3450 --- /dev/null +++ b/tests/testsuite/cargo_add/git_multiple_packages_features/mod.rs @@ -0,0 +1,63 @@ +use cargo_test_support::compare::assert_ui; +use cargo_test_support::prelude::*; +use cargo_test_support::Project; + +use cargo_test_support::curr_dir; + +#[cargo_test] +fn case() { + cargo_test_support::registry::init(); + + let main_manifest = r#" + [package] + name = "main-package" + version = "0.1.1+main-package" + authors = [] + + [workspace] + members = ["package-wo-feature", "package-with-feature"] + "#; + + let manifest_feature = r#" + [package] + name = "package-with-feature" + version = "0.1.3+package-with-feature" + [features] + target_feature = [] + "#; + + let project = Project::from_template(curr_dir!().join("in")); + let project_root = project.root(); + let cwd = &project_root; + let git_dep = cargo_test_support::git::new("git-package", |project| { + project + .file("Cargo.toml", &main_manifest) + .file( + "package-wo-feature/Cargo.toml", + &cargo_test_support::basic_manifest( + "package-wo-feature", + "0.1.1+package-wo-feature", + ), + ) + .file("package-wo-feature/src/lib.rs", "") + .file("package-with-feature/Cargo.toml", &manifest_feature) + .file("package-with-feature/src/lib.rs", "") + }); + let git_url = git_dep.url().to_string(); + + snapbox::cmd::Command::cargo_ui() + .arg("add") + .args([ + "--git", + &git_url, + "package-with-feature", + "--features=target_feature", + ]) + .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_add/git_multiple_packages_features/out/Cargo.toml b/tests/testsuite/cargo_add/git_multiple_packages_features/out/Cargo.toml new file mode 100644 index 00000000000..939d818840f --- /dev/null +++ b/tests/testsuite/cargo_add/git_multiple_packages_features/out/Cargo.toml @@ -0,0 +1,8 @@ +[workspace] + +[package] +name = "cargo-list-test-fixture" +version = "0.0.0" + +[dependencies] +package-with-feature = { git = "[ROOTURL]/git-package", version = "0.1.3", features = ["target_feature"] } diff --git a/tests/testsuite/cargo_add/git_multiple_packages_features/stderr.log b/tests/testsuite/cargo_add/git_multiple_packages_features/stderr.log new file mode 100644 index 00000000000..3748cf9b090 --- /dev/null +++ b/tests/testsuite/cargo_add/git_multiple_packages_features/stderr.log @@ -0,0 +1,5 @@ + Updating git repository `[ROOTURL]/git-package` + Adding package-with-feature (git) to dependencies. + Features: + + target_feature + Updating git repository `[ROOTURL]/git-package` diff --git a/tests/testsuite/cargo_add/git_multiple_packages_features/stdout.log b/tests/testsuite/cargo_add/git_multiple_packages_features/stdout.log new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/testsuite/cargo_add/mod.rs b/tests/testsuite/cargo_add/mod.rs index 653c2db94cb..949f3a28297 100644 --- a/tests/testsuite/cargo_add/mod.rs +++ b/tests/testsuite/cargo_add/mod.rs @@ -35,6 +35,7 @@ mod git_dev; mod git_inferred_name; mod git_inferred_name_multiple; mod git_multiple_names; +mod git_multiple_packages_features; mod git_normalized_name; mod git_registry; mod git_rev;