aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/google/devtools/build/lib/pkgcache/PackageManager.java7
-rw-r--r--src/main/java/com/google/devtools/build/lib/pkgcache/PackageProvider.java3
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/BlazeQueryEnvironment.java31
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/QueryEnvironmentFactory.java18
-rw-r--r--src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java54
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/EnvironmentBackedRecursivePackageProvider.java13
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/GraphBackedRecursivePackageProvider.java8
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternFunction.java2
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternFunction.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java15
-rwxr-xr-xsrc/test/shell/integration/bazel_query_test.sh45
14 files changed, 172 insertions, 51 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/PackageManager.java b/src/main/java/com/google/devtools/build/lib/pkgcache/PackageManager.java
index d38e16e714..08761f32be 100644
--- a/src/main/java/com/google/devtools/build/lib/pkgcache/PackageManager.java
+++ b/src/main/java/com/google/devtools/build/lib/pkgcache/PackageManager.java
@@ -14,14 +14,13 @@
package com.google.devtools.build.lib.pkgcache;
import com.google.devtools.build.lib.concurrent.ThreadSafety;
-import com.google.devtools.build.lib.packages.CachingPackageLocator;
import java.io.PrintStream;
/**
- * A PackageManager keeps state about loaded packages around for quick lookup, and provides
- * related functionality: Recursive package finding, loaded package checking, etc.
+ * A PackageManager keeps state about loaded packages around for quick lookup, and provides related
+ * functionality: Recursive package finding, loaded package checking, etc.
*/
-public interface PackageManager extends PackageProvider, CachingPackageLocator {
+public interface PackageManager extends PackageProvider {
PackageManagerStatistics getAndClearStatistics();
/**
diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/PackageProvider.java b/src/main/java/com/google/devtools/build/lib/pkgcache/PackageProvider.java
index e04a7c6f5f..f42ea3dd9e 100644
--- a/src/main/java/com/google/devtools/build/lib/pkgcache/PackageProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/pkgcache/PackageProvider.java
@@ -16,6 +16,7 @@ package com.google.devtools.build.lib.pkgcache;
import com.google.devtools.build.lib.cmdline.PackageIdentifier;
import com.google.devtools.build.lib.events.ExtendedEventHandler;
+import com.google.devtools.build.lib.packages.CachingPackageLocator;
import com.google.devtools.build.lib.packages.NoSuchPackageException;
import com.google.devtools.build.lib.packages.Package;
@@ -24,7 +25,7 @@ import com.google.devtools.build.lib.packages.Package;
*
* <p><b>Concurrency</b>: Implementations should be thread safe for {@link #getPackage}.
*/
-public interface PackageProvider extends TargetProvider {
+public interface PackageProvider extends TargetProvider, CachingPackageLocator {
/**
* Returns the {@link Package} named "packageName". If there is no such package (e.g. {@code
diff --git a/src/main/java/com/google/devtools/build/lib/query2/BlazeQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/BlazeQueryEnvironment.java
index 1fbc8d9e88..5445d40fc3 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/BlazeQueryEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/BlazeQueryEnvironment.java
@@ -33,9 +33,9 @@ import com.google.devtools.build.lib.packages.OutputFile;
import com.google.devtools.build.lib.packages.Package;
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.packages.Target;
+import com.google.devtools.build.lib.pkgcache.PackageProvider;
import com.google.devtools.build.lib.pkgcache.TargetEdgeObserver;
import com.google.devtools.build.lib.pkgcache.TargetPatternEvaluator;
-import com.google.devtools.build.lib.pkgcache.TargetProvider;
import com.google.devtools.build.lib.pkgcache.TransitivePackageLoader;
import com.google.devtools.build.lib.query2.engine.Callback;
import com.google.devtools.build.lib.query2.engine.DigraphQueryEvalResult;
@@ -50,6 +50,7 @@ import com.google.devtools.build.lib.query2.engine.QueryUtil.UniquifierImpl;
import com.google.devtools.build.lib.query2.engine.SkyframeRestartQueryException;
import com.google.devtools.build.lib.query2.engine.ThreadSafeOutputFormatterCallback;
import com.google.devtools.build.lib.query2.engine.Uniquifier;
+import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.io.IOException;
import java.util.ArrayList;
@@ -70,7 +71,7 @@ public class BlazeQueryEnvironment extends AbstractBlazeQueryEnvironment<Target>
private final Map<String, Set<Target>> resolvedTargetPatterns = new HashMap<>();
private final TargetPatternEvaluator targetPatternEvaluator;
private final TransitivePackageLoader transitivePackageLoader;
- private final TargetProvider targetProvider;
+ private final PackageProvider packageProvider;
private final Digraph<Target> graph = new Digraph<>();
private final ErrorPrintingTargetEdgeErrorObserver errorObserver;
private final LabelVisitor labelVisitor;
@@ -92,7 +93,7 @@ public class BlazeQueryEnvironment extends AbstractBlazeQueryEnvironment<Target>
*/
BlazeQueryEnvironment(
TransitivePackageLoader transitivePackageLoader,
- TargetProvider targetProvider,
+ PackageProvider packageProvider,
TargetPatternEvaluator targetPatternEvaluator,
boolean keepGoing,
boolean strictScope,
@@ -104,10 +105,10 @@ public class BlazeQueryEnvironment extends AbstractBlazeQueryEnvironment<Target>
super(keepGoing, strictScope, labelFilter, eventHandler, settings, extraFunctions);
this.targetPatternEvaluator = targetPatternEvaluator;
this.transitivePackageLoader = transitivePackageLoader;
- this.targetProvider = targetProvider;
+ this.packageProvider = packageProvider;
this.errorObserver = new ErrorPrintingTargetEdgeErrorObserver(this.eventHandler);
this.loadingPhaseThreads = loadingPhaseThreads;
- this.labelVisitor = new LabelVisitor(targetProvider, dependencyFilter);
+ this.labelVisitor = new LabelVisitor(packageProvider, dependencyFilter);
}
@Override
@@ -365,7 +366,7 @@ public class BlazeQueryEnvironment extends AbstractBlazeQueryEnvironment<Target>
private Target getTargetOrThrow(Label label)
throws NoSuchThingException, SkyframeRestartQueryException, InterruptedException {
- Target target = targetProvider.getTarget(eventHandler, label);
+ Target target = packageProvider.getTarget(eventHandler, label);
if (target == null) {
throw new SkyframeRestartQueryException();
}
@@ -406,15 +407,21 @@ public class BlazeQueryEnvironment extends AbstractBlazeQueryEnvironment<Target>
}
for (Label subinclude : extensions) {
- addIfUniqueLabel(getSubincludeTarget(subinclude, pkg), seenLabels, dependentFiles);
+
+ Node<Target> subincludeTarget = getSubincludeTarget(subinclude, pkg);
+ addIfUniqueLabel(subincludeTarget, seenLabels, dependentFiles);
// Also add the BUILD file of the subinclude.
if (buildFiles) {
+ Path buildFileForSubinclude =
+ packageProvider.getBuildFileForPackage(
+ subincludeTarget.getLabel().getLabel().getPackageIdentifier());
+ Label buildFileLabel =
+ Label.createUnvalidated(
+ subincludeTarget.getLabel().getLabel().getPackageIdentifier(),
+ buildFileForSubinclude.getBaseName());
addIfUniqueLabel(
- getSubincludeTarget(
- Label.createUnvalidated(subinclude.getPackageIdentifier(), "BUILD"), pkg),
- seenLabels,
- dependentFiles);
+ getNode(new FakeLoadTarget(buildFileLabel, pkg)), seenLabels, dependentFiles);
}
}
}
@@ -440,7 +447,7 @@ public class BlazeQueryEnvironment extends AbstractBlazeQueryEnvironment<Target>
}
}
- private Node<Target> getSubincludeTarget(final Label label, Package pkg) {
+ private Node<Target> getSubincludeTarget(Label label, Package pkg) {
return getNode(new FakeLoadTarget(label, pkg));
}
diff --git a/src/main/java/com/google/devtools/build/lib/query2/QueryEnvironmentFactory.java b/src/main/java/com/google/devtools/build/lib/query2/QueryEnvironmentFactory.java
index 0f52e88735..da08aa2798 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/QueryEnvironmentFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/QueryEnvironmentFactory.java
@@ -19,9 +19,9 @@ import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.events.ExtendedEventHandler;
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.packages.Target;
+import com.google.devtools.build.lib.pkgcache.PackageProvider;
import com.google.devtools.build.lib.pkgcache.PathPackageLocator;
import com.google.devtools.build.lib.pkgcache.TargetPatternEvaluator;
-import com.google.devtools.build.lib.pkgcache.TargetProvider;
import com.google.devtools.build.lib.pkgcache.TransitivePackageLoader;
import com.google.devtools.build.lib.query2.engine.QueryEnvironment.QueryFunction;
import com.google.devtools.build.lib.query2.engine.QueryEnvironment.Setting;
@@ -36,7 +36,7 @@ public class QueryEnvironmentFactory {
public AbstractBlazeQueryEnvironment<Target> create(
TransitivePackageLoader transitivePackageLoader,
WalkableGraphFactory graphFactory,
- TargetProvider targetProvider,
+ PackageProvider packageProvider,
TargetPatternEvaluator targetPatternEvaluator,
boolean keepGoing,
boolean strictScope,
@@ -63,9 +63,17 @@ public class QueryEnvironmentFactory {
packagePath,
blockUniverseEvaluationErrors);
} else {
- return new BlazeQueryEnvironment(transitivePackageLoader, targetProvider,
- targetPatternEvaluator, keepGoing, strictScope, loadingPhaseThreads, labelFilter,
- eventHandler, settings, functions);
+ return new BlazeQueryEnvironment(
+ transitivePackageLoader,
+ packageProvider,
+ targetPatternEvaluator,
+ keepGoing,
+ strictScope,
+ loadingPhaseThreads,
+ labelFilter,
+ eventHandler,
+ settings,
+ functions);
}
}
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 35c412ffc9..f3bdc78760 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;
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 @@ public class SkyQueryEnvironment extends AbstractBlazeQueryEnvironment<Target>
}
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 @@ public class SkyQueryEnvironment extends AbstractBlazeQueryEnvironment<Target>
}
}
- private static Target getSubincludeTarget(Label label, Package pkg) {
+ private Target getSubincludeTarget(Label label, Package pkg) {
return new FakeLoadTarget(label, pkg);
}
@@ -793,30 +805,36 @@ public class SkyQueryEnvironment extends AbstractBlazeQueryEnvironment<Target>
}
@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);
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java b/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java
index f14db5ab54..af785a57fd 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java
@@ -77,6 +77,7 @@ import com.google.devtools.build.lib.skyframe.TransitiveTargetValue;
import com.google.devtools.build.lib.syntax.Type;
import com.google.devtools.build.lib.util.Fingerprint;
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.skyframe.LegacySkyKey;
import com.google.devtools.build.skyframe.SkyFunction;
@@ -560,6 +561,15 @@ public class GenQuery implements RuleConfiguredTargetFactory {
public boolean isPackage(ExtendedEventHandler eventHandler, PackageIdentifier packageName) {
throw new UnsupportedOperationException();
}
+
+ @Override
+ public Path getBuildFileForPackage(PackageIdentifier packageId) {
+ Package pkg = pkgMap.get(packageId);
+ if (pkg == null) {
+ return null;
+ }
+ return pkg.getBuildFile().getPath();
+ }
}
private static class BrokenQueryScopeException extends Exception {
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/EnvironmentBackedRecursivePackageProvider.java b/src/main/java/com/google/devtools/build/lib/skyframe/EnvironmentBackedRecursivePackageProvider.java
index 81c7c7afe2..285c45fa1c 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/EnvironmentBackedRecursivePackageProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/EnvironmentBackedRecursivePackageProvider.java
@@ -52,9 +52,11 @@ import java.util.Map;
public final class EnvironmentBackedRecursivePackageProvider implements RecursivePackageProvider {
private final Environment env;
+ private final PathPackageLocator pkgPath;
- public EnvironmentBackedRecursivePackageProvider(Environment env) {
+ public EnvironmentBackedRecursivePackageProvider(Environment env, PathPackageLocator pkgPath) {
this.env = env;
+ this.pkgPath = pkgPath;
}
@Override
@@ -94,6 +96,15 @@ public final class EnvironmentBackedRecursivePackageProvider implements Recursiv
}
@Override
+ public Path getBuildFileForPackage(PackageIdentifier packageName) {
+ try {
+ return pkgPath.getPackageBuildFile(packageName);
+ } catch (NoSuchPackageException e) {
+ return null;
+ }
+ }
+
+ @Override
public boolean isPackage(ExtendedEventHandler eventHandler, PackageIdentifier packageId)
throws MissingDepException, InterruptedException {
SkyKey packageLookupKey = PackageLookupValue.key(packageId);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/GraphBackedRecursivePackageProvider.java b/src/main/java/com/google/devtools/build/lib/skyframe/GraphBackedRecursivePackageProvider.java
index 7985fcf965..d7e74ffae5 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/GraphBackedRecursivePackageProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/GraphBackedRecursivePackageProvider.java
@@ -132,6 +132,14 @@ public final class GraphBackedRecursivePackageProvider implements RecursivePacka
return pkgResults.build();
}
+ @Override
+ public Path getBuildFileForPackage(PackageIdentifier packageName) {
+ try {
+ return pkgPath.getPackageBuildFile(packageName);
+ } catch (NoSuchPackageException e) {
+ return null;
+ }
+ }
@Override
public boolean isPackage(ExtendedEventHandler eventHandler, PackageIdentifier packageName)
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 a137551f5e..fd0f08fc44 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
@@ -144,7 +144,7 @@ public class PrepareDepsOfPatternFunction implements SkyFunction {
public DepsOfPatternPreparer(Environment env, PathPackageLocator pkgPath) {
this.env = env;
- this.packageProvider = new EnvironmentBackedRecursivePackageProvider(env);
+ this.packageProvider = new EnvironmentBackedRecursivePackageProvider(env, pkgPath);
this.pkgPath = pkgPath;
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java
index f93c96e613..4e68fb7818 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java
@@ -260,7 +260,9 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor {
SkyFunctions.TARGET_PATTERN,
SkyFunctions.PREPARE_DEPS_OF_PATTERN,
SkyFunctions.WORKSPACE_FILE,
- SkyFunctions.EXTERNAL_PACKAGE);
+ SkyFunctions.EXTERNAL_PACKAGE,
+ SkyFunctions.TARGET_PATTERN,
+ SkyFunctions.TARGET_PATTERN_PHASE);
@Override
protected void onNewPackageLocator(PathPackageLocator oldLocator, PathPackageLocator pkgLocator) {
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
index 6ab30a3372..1e89fe5ff1 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
@@ -374,7 +374,7 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory {
SkyFunctions.SKYLARK_IMPORTS_LOOKUP,
newSkylarkImportLookupFunction(ruleClassProvider, pkgFactory));
map.put(SkyFunctions.GLOB, newGlobFunction());
- map.put(SkyFunctions.TARGET_PATTERN, new TargetPatternFunction());
+ map.put(SkyFunctions.TARGET_PATTERN, new TargetPatternFunction(pkgLocator));
map.put(SkyFunctions.PREPARE_DEPS_OF_PATTERNS, new PrepareDepsOfPatternsFunction());
map.put(SkyFunctions.PREPARE_DEPS_OF_PATTERN, new PrepareDepsOfPatternFunction(pkgLocator));
map.put(
@@ -387,7 +387,7 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory {
map.put(SkyFunctions.BLACKLISTED_PACKAGE_PREFIXES, new BlacklistedPackagePrefixesFunction());
map.put(SkyFunctions.TESTS_IN_SUITE, new TestsInSuiteFunction());
map.put(SkyFunctions.TEST_SUITE_EXPANSION, new TestSuiteExpansionFunction());
- map.put(SkyFunctions.TARGET_PATTERN_PHASE, new TargetPatternPhaseFunction());
+ map.put(SkyFunctions.TARGET_PATTERN_PHASE, new TargetPatternPhaseFunction(pkgLocator));
map.put(SkyFunctions.RECURSIVE_PKG, new RecursivePkgFunction(directories));
map.put(
SkyFunctions.PACKAGE,
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternFunction.java
index b97e51a509..b4a012fcdc 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternFunction.java
@@ -25,6 +25,7 @@ import com.google.devtools.build.lib.collect.compacthashset.CompactHashSet;
import com.google.devtools.build.lib.concurrent.MultisetSemaphore;
import com.google.devtools.build.lib.packages.Target;
import com.google.devtools.build.lib.pkgcache.ParsingFailedEvent;
+import com.google.devtools.build.lib.pkgcache.PathPackageLocator;
import com.google.devtools.build.lib.skyframe.EnvironmentBackedRecursivePackageProvider.MissingDepException;
import com.google.devtools.build.lib.util.BatchCallback;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -33,6 +34,7 @@ import com.google.devtools.build.skyframe.SkyFunctionException;
import com.google.devtools.build.skyframe.SkyKey;
import com.google.devtools.build.skyframe.SkyValue;
import java.util.Set;
+import java.util.concurrent.atomic.AtomicReference;
import javax.annotation.Nullable;
/**
@@ -41,7 +43,10 @@ import javax.annotation.Nullable;
*/
public class TargetPatternFunction implements SkyFunction {
- public TargetPatternFunction() {
+ private final AtomicReference<PathPackageLocator> pkgPath;
+
+ public TargetPatternFunction(AtomicReference<PathPackageLocator> pkgPath) {
+ this.pkgPath = pkgPath;
}
@Override
@@ -52,7 +57,7 @@ public class TargetPatternFunction implements SkyFunction {
ResolvedTargets<Target> resolvedTargets;
try {
EnvironmentBackedRecursivePackageProvider provider =
- new EnvironmentBackedRecursivePackageProvider(env);
+ new EnvironmentBackedRecursivePackageProvider(env, pkgPath.get());
RecursivePackageProviderBackedTargetPatternResolver resolver =
new RecursivePackageProviderBackedTargetPatternResolver(
provider,
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java
index b3fd6e92b5..5a005827b0 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TargetPatternPhaseFunction.java
@@ -28,6 +28,7 @@ import com.google.devtools.build.lib.pkgcache.CompileOneDependencyTransformer;
import com.google.devtools.build.lib.pkgcache.FilteringPolicies;
import com.google.devtools.build.lib.pkgcache.LoadingPhaseRunner;
import com.google.devtools.build.lib.pkgcache.ParsingFailedEvent;
+import com.google.devtools.build.lib.pkgcache.PathPackageLocator;
import com.google.devtools.build.lib.pkgcache.TargetParsingCompleteEvent;
import com.google.devtools.build.lib.pkgcache.TargetProvider;
import com.google.devtools.build.lib.pkgcache.TestFilter;
@@ -45,6 +46,7 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.concurrent.atomic.AtomicReference;
import javax.annotation.Nullable;
/**
@@ -53,6 +55,12 @@ import javax.annotation.Nullable;
*/
final class TargetPatternPhaseFunction implements SkyFunction {
+ private final AtomicReference<PathPackageLocator> pkgPath;
+
+ public TargetPatternPhaseFunction(AtomicReference<PathPackageLocator> pkgPath) {
+ this.pkgPath = pkgPath;
+ }
+
@Override
public TargetPatternPhaseValue compute(SkyKey key, Environment env) throws InterruptedException {
TargetPatternPhaseKey options = (TargetPatternPhaseKey) key.argument();
@@ -74,7 +82,7 @@ final class TargetPatternPhaseFunction implements SkyFunction {
}
// Determine targets to build:
- ResolvedTargets<Target> targets = getTargetsToBuild(env, options);
+ ResolvedTargets<Target> targets = getTargetsToBuild(env, options, pkgPath.get());
// If the --build_tests_only option was specified or we want to run tests, we need to determine
// the list of targets to test. For that, we remove manual tests and apply the command-line
@@ -197,7 +205,8 @@ final class TargetPatternPhaseFunction implements SkyFunction {
* @param options the command-line arguments in structured form
*/
private static ResolvedTargets<Target> getTargetsToBuild(
- Environment env, TargetPatternPhaseKey options) throws InterruptedException {
+ Environment env, TargetPatternPhaseKey options, PathPackageLocator pkgPath)
+ throws InterruptedException {
List<TargetPatternKey> patternSkyKeys = new ArrayList<>();
for (TargetPatternSkyKeyOrException keyOrException :
TargetPatternValue.keys(
@@ -249,7 +258,7 @@ final class TargetPatternPhaseFunction implements SkyFunction {
.filter(TargetUtils.tagFilter(options.getBuildTargetFilter()))
.build();
if (options.getCompileOneDependency()) {
- TargetProvider targetProvider = new EnvironmentBackedRecursivePackageProvider(env);
+ TargetProvider targetProvider = new EnvironmentBackedRecursivePackageProvider(env, pkgPath);
try {
return new CompileOneDependencyTransformer(targetProvider)
.transformCompileOneDependency(env.getListener(), result);
diff --git a/src/test/shell/integration/bazel_query_test.sh b/src/test/shell/integration/bazel_query_test.sh
index eed50de082..f5de27c8e5 100755
--- a/src/test/shell/integration/bazel_query_test.sh
+++ b/src/test/shell/integration/bazel_query_test.sh
@@ -26,6 +26,7 @@ add_to_bazelrc "build --package_path=%workspace%"
#### TESTS #############################################################
function test_does_not_fail_horribly() {
+ rm -rf peach
mkdir -p peach
cat > peach/BUILD <<EOF
sh_library(name='brighton', deps=[':harken'])
@@ -39,6 +40,7 @@ EOF
}
function test_visibility_affects_xml_output() {
+ rm -rf kiwi
mkdir -p kiwi
cat > kiwi/BUILD <<EOF
@@ -71,6 +73,7 @@ EOF
}
function test_visibility_affects_proto_output() {
+ rm -rf kiwi
mkdir -p kiwi
cat > kiwi/BUILD <<EOF
@@ -97,6 +100,8 @@ EOF
}
function make_depth_tests() {
+ rm -rf depth
+ rm -rf depth2
mkdir -p depth depth2 || die "Could not create test directory"
cat > "depth/BUILD" <<EOF
sh_binary(name = 'one', srcs = ['one.sh'], deps = [':two'])
@@ -154,6 +159,7 @@ function test_depth_query_idempotence_unordered() {
}
function test_universe_scope_with_without_star() {
+ rm -rf foo
mkdir -p foo || fail "Couldn't mkdir"
echo "sh_library(name = 'foo')" > foo/BUILD || fail "Couldn't write BUILD"
bazel query --order_output=no \
@@ -171,6 +177,8 @@ function test_universe_scope_with_without_star() {
}
function test_outside_universe_ok() {
+ rm -rf foo
+ rm -rf bar
mkdir -p foo bar || fail "Couldn't mkdir"
echo "sh_library(name = 'foo', deps = ['//bar:bar'])" > foo/BUILD ||
fail "Couldn't write BUILD"
@@ -209,6 +217,8 @@ function test_minrank_le_depth_bound() {
}
function test_skylark_dep_in_sky_query() {
+ rm -rf foo
+ rm -rf bar
mkdir -p foo bar || fail "Couldn't make directories"
echo 'load("//bar:fakerule.bzl", "const")' > foo/BUILD || fail "Couldn't write"
touch bar/BUILD || fail "Couldn't touch bar/BUILD"
@@ -221,6 +231,7 @@ function test_skylark_dep_in_sky_query() {
}
function test_skylark_regular_file_not_included_in_rbuildfiles() {
+ rm -rf foo
mkdir -p foo || fail "Couldn't make directories"
echo "baz" > "foo/baz.bzl" || fail "Couldn't create baz.bzl"
echo 'sh_library(name = "foo", srcs = ["baz.bzl"])' > foo/BUILD
@@ -233,6 +244,7 @@ function test_skylark_regular_file_not_included_in_rbuildfiles() {
}
function test_skylark_symlink_source_not_included_in_rbuildfiles() {
+ rm -rf foo
mkdir -p foo || fail "Couldn't make directories"
echo "moo" > "foo/moo" || fail "Couldn't create moo"
ln -s "foo/moo" "foo/baz.bzl" || fail "Couldn't create baz.bzl symlink"
@@ -246,6 +258,7 @@ function test_skylark_symlink_source_not_included_in_rbuildfiles() {
}
function test_skylark_symlink_target_not_included_in_rbuildfiles() {
+ rm -rf foo
mkdir -p foo || fail "Couldn't make directories"
echo "baz" > "foo/baz.bzl" || fail "Couldn't create baz.bzl"
ln -s "foo/baz.bzl" "foo/Moo.java" || fail "Couldn't create Moo.java symlink"
@@ -259,6 +272,7 @@ function test_skylark_symlink_target_not_included_in_rbuildfiles() {
}
function test_skylark_glob_regular_file_not_included_in_rbuildfiles() {
+ rm -rf foo
mkdir -p foo || fail "Couldn't make directories"
echo "baz" > "foo/baz.bzl" || fail "Couldn't create baz.bzl"
echo 'sh_library(name = "foo", srcs = glob(["*.bzl"]))' > foo/BUILD
@@ -271,6 +285,7 @@ function test_skylark_glob_regular_file_not_included_in_rbuildfiles() {
}
function test_skylark_glob_symlink_source_not_included_in_rbuildfiles() {
+ rm -rf foo
mkdir -p foo || fail "Couldn't make directories"
echo "moo" > "foo/moo" || fail "Couldn't create moo"
ln -s "foo/moo" "foo/baz.bzl" || fail "Couldn't create baz.bzl symlink"
@@ -284,6 +299,7 @@ function test_skylark_glob_symlink_source_not_included_in_rbuildfiles() {
}
function test_skylark_glob_symlink_target_not_included_in_rbuildfiles() {
+ rm -rf foo
mkdir -p foo || fail "Couldn't make directories"
echo "baz" > "foo/baz.bzl" || fail "Couldn't create baz.bzl"
ln -s "foo/baz.bzl" "foo/Moo.java" || fail "Couldn't create Moo.java symlink"
@@ -297,6 +313,7 @@ function test_skylark_glob_symlink_target_not_included_in_rbuildfiles() {
}
function test_skylark_recursive_glob_regular_file_not_included_in_rbuildfiles() {
+ rm -rf foo
mkdir -p foo/bar || fail "Couldn't make directories"
echo "baz" > "foo/bar/baz.bzl" || fail "Couldn't create baz.bzl"
echo 'sh_library(name = "foo", srcs = glob(["**/*.bzl"]))' > foo/BUILD
@@ -309,6 +326,7 @@ function test_skylark_recursive_glob_regular_file_not_included_in_rbuildfiles()
}
function test_skylark_recursive_glob_symlink_source_not_included_in_rbuildfiles() {
+ rm -rf foo
mkdir -p foo/bar || fail "Couldn't make directories"
echo "moo" > "foo/moo" || fail "Couldn't create moo"
ln -s "foo/moo" "foo/bar/baz.bzl" || fail "Couldn't create baz.bzl symlink"
@@ -322,6 +340,7 @@ function test_skylark_recursive_glob_symlink_source_not_included_in_rbuildfiles(
}
function test_skylark_recursive_glob_symlink_target_not_included_in_rbuildfiles() {
+ rm -rf foo
mkdir -p foo/bar || fail "Couldn't make directories"
echo "baz" > "foo/bar/baz.bzl" || fail "Couldn't create baz.bzl"
ln -s "foo/bar/baz.bzl" "foo/Moo.java" || fail "Couldn't create Moo.java symlink"
@@ -335,6 +354,7 @@ function test_skylark_recursive_glob_symlink_target_not_included_in_rbuildfiles(
}
function test_skylark_subdir_dep_in_sky_query() {
+ rm -rf foo
mkdir -p foo bar/baz || fail "Couldn't make directories"
echo 'load("//bar:baz/fakerule.bzl", "const")' > foo/BUILD || fail "Couldn't write"
touch bar/BUILD || fail "Couldn't touch bar/BUILD"
@@ -347,6 +367,7 @@ function test_skylark_subdir_dep_in_sky_query() {
}
function test_parent_independent_of_child() {
+ rm -rf foo
mkdir -p foo/subdir || fail "Couldn't make directories"
echo 'sh_library(name = "sh", data = glob(["**"]))' > foo/BUILD ||
fail "Couldn't write"
@@ -358,6 +379,7 @@ function test_parent_independent_of_child() {
}
function test_does_not_fail_horribly_with_file() {
+ rm -rf peach
mkdir -p peach
cat > peach/BUILD <<EOF
sh_library(name='brighton', deps=[':harken'])
@@ -372,7 +394,8 @@ EOF
}
function test_location_output_not_allowed_with_buildfiles_or_loadfiles() {
- mkdir foo
+ rm -rf foo
+ mkdir -p foo
cat > foo/bzl.bzl <<EOF
x = 2
EOF
@@ -414,6 +437,26 @@ EOF
expect_log "//foo/bar:t2"
}
+function test_buildfiles_with_build_bazel() {
+ if [ "${PRODUCT_NAME}" != "bazel" ]; then
+ return 0
+ fi
+ rm -rf foo
+ mkdir -p foo
+ cat > foo/bzl.bzl <<EOF
+x = 2
+EOF
+ cat > foo/BUILD.bazel <<EOF
+load('//foo:bzl.bzl', 'x')
+sh_library(name='foo')
+EOF
+
+ bazel query 'buildfiles(//foo)' >& $TEST_log || fail "Expected success"
+ expect_log "//foo:bzl.bzl$"
+ expect_log "//foo:BUILD.bazel$"
+ expect_not_log "//foo:BUILD$"
+}
+
function tear_down() {
bazel shutdown
}