From 6b320cb8016fd49dda55dcc07b8d2db3e7b1e5d8 Mon Sep 17 00:00:00 2001 From: Eric Huss Date: Sun, 14 Mar 2021 19:05:12 -0700 Subject: [PATCH] Fix --feature pkg/feat for V1 resolver for non-member. --- src/cargo/core/workspace.rs | 3 ++- tests/testsuite/package_features.rs | 31 +++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/cargo/core/workspace.rs b/src/cargo/core/workspace.rs index f72f0915c9f..b10656ffbae 100644 --- a/src/cargo/core/workspace.rs +++ b/src/cargo/core/workspace.rs @@ -1091,7 +1091,8 @@ impl<'cfg> Workspace<'cfg> { for feature in requested_features.features.iter() { if let Some(index) = feature.find('/') { let name = &feature[..index]; - if specs.iter().any(|spec| spec.name() == name) { + let is_member = self.members().any(|member| member.name() == name); + if is_member && specs.iter().any(|spec| spec.name() == name) { member_specific_features .entry(name) .or_default() diff --git a/tests/testsuite/package_features.rs b/tests/testsuite/package_features.rs index 0893e0c5bf3..15ed37e5cc9 100644 --- a/tests/testsuite/package_features.rs +++ b/tests/testsuite/package_features.rs @@ -458,3 +458,34 @@ fn resolver1_member_features() { .with_stdout("m1-feature set") .run(); } + +#[cargo_test] +fn resolver1_non_member_optional_feature() { + // --features x/y for an optional dependency `x` with the v1 resolver. + Package::new("bar", "1.0.0") + .feature("feat1", &[]) + .file( + "src/lib.rs", + r#" + #[cfg(not(feature = "feat1"))] + compile_error!("feat1 should be activated"); + "#, + ) + .publish(); + let p = project() + .file( + "Cargo.toml", + r#" + [package] + name = "foo" + version = "0.1.0" + + [dependencies] + bar = { version="1.0", optional=true } + "#, + ) + .file("src/lib.rs", "") + .build(); + + p.cargo("check -p bar --features bar/feat1").run(); +}