Thread the repository name all the way from TargetPatternResolver to RecursivePkgFunction.
This introduces some redundancy with RootedPath, but only in the case of remote repositories. There doesn't seem to be a good way of removing this redundancy.
--
MOS_MIGRATED_REVID=103621610
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternFunction.java
index c769738..b116595 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternFunction.java
@@ -18,6 +18,7 @@
import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.cmdline.PackageIdentifier;
+import com.google.devtools.build.lib.cmdline.PackageIdentifier.RepositoryName;
import com.google.devtools.build.lib.cmdline.ResolvedTargets;
import com.google.devtools.build.lib.cmdline.TargetParsingException;
import com.google.devtools.build.lib.cmdline.TargetPattern;
@@ -210,18 +211,21 @@
}
@Override
- public ResolvedTargets<Void> findTargetsBeneathDirectory(String originalPattern,
- String directory, boolean rulesOnly, ImmutableSet<String> excludedSubdirectories)
+ public ResolvedTargets<Void> findTargetsBeneathDirectory(RepositoryName repository,
+ String originalPattern, String directory, boolean rulesOnly,
+ ImmutableSet<String> excludedSubdirectories)
throws TargetParsingException, InterruptedException {
FilteringPolicy policy =
rulesOnly ? FilteringPolicies.RULES_ONLY : FilteringPolicies.NO_FILTER;
ImmutableSet<PathFragment> excludedPathFragments =
TargetPatternResolverUtil.getPathFragments(excludedSubdirectories);
PathFragment pathFragment = TargetPatternResolverUtil.getPathFragment(directory);
+ // TODO(bazel-team): This is where we need to depend on the RepositoryValue of a remote
+ // repository in order figure out its root and thus support recursive package search in them.
for (Path root : pkgPath.getPathEntries()) {
RootedPath rootedPath = RootedPath.toRootedPath(root, pathFragment);
- SkyValue token = env.getValue(PrepareDepsOfTargetsUnderDirectoryValue.key(rootedPath,
- excludedPathFragments, policy));
+ SkyValue token = env.getValue(PrepareDepsOfTargetsUnderDirectoryValue.key(
+ repository, rootedPath, excludedPathFragments, policy));
if (token == null) {
// A null token value means there is a missing dependency, because RecursivePkgFunction
// never throws.