diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
13 files changed, 128 insertions, 50 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); |