Fix getBuildFiles to not assume BUILD is the name of the build file.
Fixes #4056.
Change-Id: Ia7425c2146f15e9293605ee3da53007805e82275
PiperOrigin-RevId: 177813070
diff --git a/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java
index 35c412f..f3bdc78 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java
@@ -99,6 +99,7 @@
import com.google.devtools.build.lib.skyframe.TargetPatternValue.TargetPatternKey;
import com.google.devtools.build.lib.skyframe.TransitiveTraversalValue;
import com.google.devtools.build.lib.util.Pair;
+import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.lib.vfs.RootedPath;
import com.google.devtools.build.skyframe.EvaluationResult;
@@ -760,15 +761,26 @@
}
for (Label subinclude : extensions) {
- addIfUniqueLabel(getSubincludeTarget(subinclude, pkg), seenLabels, dependentFiles);
+ Target subincludeTarget = getSubincludeTarget(subinclude, pkg);
+ addIfUniqueLabel(subincludeTarget, seenLabels, dependentFiles);
+
+ // Also add the BUILD file of the subinclude.
if (buildFiles) {
- // Also add the BUILD file of the subinclude.
- addIfUniqueLabel(
- getSubincludeTarget(
- Label.createUnvalidated(subinclude.getPackageIdentifier(), "BUILD"), pkg),
- seenLabels,
- dependentFiles);
+ Path buildFileForSubinclude = null;
+ try {
+ buildFileForSubinclude =
+ pkgPath.getPackageBuildFile(subincludeTarget.getLabel().getPackageIdentifier());
+ } catch (NoSuchPackageException e) {
+ throw new QueryException(
+ subincludeTarget.getLabel().getPackageIdentifier() + " does not exist in graph");
+ }
+ Label buildFileLabel =
+ Label.createUnvalidated(
+ subincludeTarget.getLabel().getPackageIdentifier(),
+ buildFileForSubinclude.getBaseName());
+
+ addIfUniqueLabel(new FakeLoadTarget(buildFileLabel, pkg), seenLabels, dependentFiles);
}
}
}
@@ -782,7 +794,7 @@
}
}
- private static Target getSubincludeTarget(Label label, Package pkg) {
+ private Target getSubincludeTarget(Label label, Package pkg) {
return new FakeLoadTarget(label, pkg);
}
@@ -793,30 +805,36 @@
}
@ThreadSafe
- @Override
- public Target getTarget(Label label)
- throws TargetNotFoundException, QueryException, InterruptedException {
- SkyKey packageKey = PackageValue.key(label.getPackageIdentifier());
- try {
+ private Package getPackage(PackageIdentifier packageIdentifier)
+ throws InterruptedException, QueryException, NoSuchPackageException {
+ SkyKey packageKey = PackageValue.key(packageIdentifier);
PackageValue packageValue = (PackageValue) graph.getValue(packageKey);
if (packageValue != null) {
Package pkg = packageValue.getPackage();
if (pkg.containsErrors()) {
- throw new BuildFileContainsErrorsException(label.getPackageIdentifier());
+ throw new BuildFileContainsErrorsException(packageIdentifier);
}
- return packageValue.getPackage().getTarget(label.getName());
+ return pkg;
} else {
- NoSuchThingException exception = (NoSuchThingException) graph.getException(packageKey);
+ NoSuchPackageException exception = (NoSuchPackageException) graph.getException(packageKey);
if (exception != null) {
throw exception;
}
if (graph.isCycle(packageKey)) {
- throw new NoSuchPackageException(
- label.getPackageIdentifier(), "Package depends on a cycle");
+ throw new NoSuchPackageException(packageIdentifier, "Package depends on a cycle");
} else {
throw new QueryException(packageKey + " does not exist in graph");
}
}
+ }
+
+ @ThreadSafe
+ @Override
+ public Target getTarget(Label label)
+ throws TargetNotFoundException, QueryException, InterruptedException {
+ try {
+ Package pkg = getPackage(label.getPackageIdentifier());
+ return pkg.getTarget(label.getName());
} catch (NoSuchThingException e) {
throw new TargetNotFoundException(e);
}