From 45df2a5ef85d25c727e3d1dbe157edb6e363cb89 Mon Sep 17 00:00:00 2001 From: Daniel Wagner-Hall Date: Tue, 24 Sep 2024 19:53:33 +0100 Subject: [PATCH] [7.4.0] cquery: Factor RepositoryName into fetching ignored packages (#23727) Previously this code was assuming that all cquery target patterns should use the root repository's .bazelignore contents which was incorrect. Because the way this manifested itself was that when cquery drives populating the graph and when it queries it, it would use different keys, this led to misleading messages about packages not being in scope. Closes #22142. PiperOrigin-RevId: 628477138 Change-Id: I84e3381848b843ca9813acdd0762a3b3e4711a90 --- .../query2/PostAnalysisQueryEnvironment.java | 7 +++-- .../aquery/ActionGraphQueryEnvironment.java | 2 +- .../ConfiguredTargetQueryEnvironment.java | 2 +- .../integration/configured_query_test.sh | 30 +++++++++++++++++++ 4 files changed, 36 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/google/devtools/build/lib/query2/PostAnalysisQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/PostAnalysisQueryEnvironment.java index a9815fdd5d96ab..8480ea29e9d3b3 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/PostAnalysisQueryEnvironment.java +++ b/src/main/java/com/google/devtools/build/lib/query2/PostAnalysisQueryEnvironment.java @@ -32,6 +32,7 @@ import com.google.devtools.build.lib.analysis.config.BuildConfigurationValue; import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget; import com.google.devtools.build.lib.cmdline.Label; +import com.google.devtools.build.lib.cmdline.RepositoryName; import com.google.devtools.build.lib.cmdline.TargetParsingException; import com.google.devtools.build.lib.cmdline.TargetPattern; import com.google.devtools.build.lib.collect.compacthashset.CompactHashSet; @@ -253,12 +254,12 @@ private boolean isAliasConfiguredTarget(ConfiguredTargetKey key) throws Interrup ((ConfiguredTargetValue) getConfiguredTargetValue(key)).getConfiguredTarget()); } - public InterruptibleSupplier> - getIgnoredPackagePrefixesPathFragments() { + public InterruptibleSupplier> getIgnoredPackagePrefixesPathFragments( + RepositoryName repositoryName) { return () -> { IgnoredPackagePrefixesValue ignoredPackagePrefixesValue = (IgnoredPackagePrefixesValue) - walkableGraphSupplier.get().getValue(IgnoredPackagePrefixesValue.key()); + walkableGraphSupplier.get().getValue(IgnoredPackagePrefixesValue.key(repositoryName)); return ignoredPackagePrefixesValue == null ? ImmutableSet.of() : ignoredPackagePrefixesValue.getPatterns(); diff --git a/src/main/java/com/google/devtools/build/lib/query2/aquery/ActionGraphQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/aquery/ActionGraphQueryEnvironment.java index 72e183cf6a9fa2..f1aaabb9ef2c4c 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/aquery/ActionGraphQueryEnvironment.java +++ b/src/main/java/com/google/devtools/build/lib/query2/aquery/ActionGraphQueryEnvironment.java @@ -312,7 +312,7 @@ public QueryTaskFuture getTargetsMatchingPattern( Futures.catchingAsync( patternToEval.evalAdaptedForAsync( resolver, - getIgnoredPackagePrefixesPathFragments(), + getIgnoredPackagePrefixesPathFragments(patternToEval.getRepository()), /* excludedSubdirectories= */ ImmutableSet.of(), (Callback) partialResult -> { diff --git a/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetQueryEnvironment.java index 8a4f21d64d87e7..0de8a1f5e0a534 100644 --- a/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetQueryEnvironment.java +++ b/src/main/java/com/google/devtools/build/lib/query2/cquery/ConfiguredTargetQueryEnvironment.java @@ -274,7 +274,7 @@ public QueryTaskFuture getTargetsMatchingPattern( Futures.catchingAsync( patternToEval.evalAdaptedForAsync( resolver, - getIgnoredPackagePrefixesPathFragments(), + getIgnoredPackagePrefixesPathFragments(patternToEval.getRepository()), /* excludedSubdirectories= */ ImmutableSet.of(), (Callback) partialResult -> { diff --git a/src/test/shell/integration/configured_query_test.sh b/src/test/shell/integration/configured_query_test.sh index 91961040d10371..471948813cdc0a 100755 --- a/src/test/shell/integration/configured_query_test.sh +++ b/src/test/shell/integration/configured_query_test.sh @@ -1435,6 +1435,36 @@ EOF expect_log "@repo//:japanese" } +function test_external_repo_scope_with_bazelignore() { + if [ "${PRODUCT_NAME}" != "bazel" ]; then + # Tests of external repositories only work under bazel. + return 0 + fi + + local -r dir=$FUNCNAME + + mkdir -p $dir/repo + touch $dir/repo/REPO.bazel + cat > $dir/repo/BUILD < $dir/main/WORKSPACE < $dir/main/.bazelignore + + cd $dir/main + bazel cquery @repo//... &>"$TEST_log" || fail "Unexpected failure" + expect_not_log "no targets found beneath" + expect_log "@repo//:maple" + expect_log "@repo//:japanese" +} + function test_test_arg_in_bazelrc() { local -r pkg=$FUNCNAME mkdir -p $pkg