diff options
author | jcater <jcater@google.com> | 2017-08-31 18:52:59 +0200 |
---|---|---|
committer | Vladimir Moskva <vladmos@google.com> | 2017-09-01 12:27:40 +0200 |
commit | 9d9e1a7f11d68680c87aefd16ac26ad6af4fd94c (patch) | |
tree | 249643064dc761ddefcaed89e9462573f94c1426 /src/main/java/com/google/devtools/build/lib/skyframe/packages | |
parent | 6df6a5ec179acd0eb4ad3f51f79a06ae7d16e3c6 (diff) |
Fix BazelPackageLoader to handle local repositories, and clean up API by
removing unused methods and making the Builder more general.
PiperOrigin-RevId: 167150478
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/packages')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java | 47 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skyframe/packages/BazelPackageLoader.java | 41 |
2 files changed, 56 insertions, 32 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java b/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java index 493130641f..24affca883 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/packages/AbstractPackageLoader.java @@ -86,7 +86,10 @@ import com.google.devtools.build.skyframe.SkyValue; import com.google.devtools.build.skyframe.Version; import com.google.devtools.build.skyframe.WalkableGraph; import com.google.devtools.common.options.Options; +import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; @@ -121,9 +124,9 @@ public abstract class AbstractPackageLoader implements PackageLoader { protected final Path workspaceDir; protected RuleClassProvider ruleClassProvider = getDefaultRuleClassProvider(); protected Reporter reporter = new Reporter(new EventBus()); - protected ImmutableMap<SkyFunctionName, SkyFunction> extraSkyFunctions = ImmutableMap.of(); - protected ImmutableList<PrecomputedValue.Injected> extraPrecomputedValues = ImmutableList.of(); - protected String defaultsPackageContents = getDefaultDefaulsPackageContents(); + protected Map<SkyFunctionName, SkyFunction> extraSkyFunctions = new HashMap<>(); + protected List<PrecomputedValue.Injected> extraPrecomputedValues = new ArrayList<>(); + protected String defaultsPackageContents = getDefaultDefaultPackageContents(); protected int legacyGlobbingThreads = 1; int skyframeThreads = 1; @@ -136,25 +139,24 @@ public abstract class AbstractPackageLoader implements PackageLoader { return this; } - public Builder setDefaultsPackageContents(String defaultsPackageContents) { - this.defaultsPackageContents = defaultsPackageContents; - return this; - } - public Builder setReporter(Reporter reporter) { this.reporter = reporter; return this; } - public Builder setExtraSkyFunctions( + public Builder addExtraSkyFunctions( ImmutableMap<SkyFunctionName, SkyFunction> extraSkyFunctions) { - this.extraSkyFunctions = extraSkyFunctions; + this.extraSkyFunctions.putAll(extraSkyFunctions); return this; } - public Builder setExtraPrecomputedValues( - ImmutableList<PrecomputedValue.Injected> extraPrecomputedValues) { - this.extraPrecomputedValues = extraPrecomputedValues; + public Builder addExtraPrecomputedValues(PrecomputedValue.Injected... extraPrecomputedValues) { + return this.addExtraPrecomputedValues(Arrays.asList(extraPrecomputedValues)); + } + + public Builder addExtraPrecomputedValues( + List<PrecomputedValue.Injected> extraPrecomputedValues) { + this.extraPrecomputedValues.addAll(extraPrecomputedValues); return this; } @@ -172,7 +174,7 @@ public abstract class AbstractPackageLoader implements PackageLoader { protected abstract RuleClassProvider getDefaultRuleClassProvider(); - protected abstract String getDefaultDefaulsPackageContents(); + protected abstract String getDefaultDefaultPackageContents(); } protected AbstractPackageLoader(Builder builder) { @@ -181,7 +183,7 @@ public abstract class AbstractPackageLoader implements PackageLoader { new PathPackageLocator(null, ImmutableList.of(workspaceDir)); this.ruleClassProvider = builder.ruleClassProvider; this.reporter = builder.reporter; - this.extraSkyFunctions = builder.extraSkyFunctions; + this.extraSkyFunctions = ImmutableMap.copyOf(builder.extraSkyFunctions); this.pkgLocatorRef = new AtomicReference<>(pkgLocator); this.legacyGlobbingThreads = builder.legacyGlobbingThreads; this.skyframeThreads = builder.skyframeThreads; @@ -204,11 +206,12 @@ public abstract class AbstractPackageLoader implements PackageLoader { UnixGlob.DEFAULT_SYSCALLS_REF); } }; - this.preinjectedDiff = makePreinjectedDiff( - pkgLocator, - builder.defaultsPackageContents, - builder.extraPrecomputedValues, - directories); + this.preinjectedDiff = + makePreinjectedDiff( + pkgLocator, + builder.defaultsPackageContents, + ImmutableList.copyOf(builder.extraPrecomputedValues), + directories); } private static ImmutableDiff makePreinjectedDiff( @@ -312,7 +315,6 @@ public abstract class AbstractPackageLoader implements PackageLoader { getCrossRepositoryLabelViolationStrategy(); protected abstract ImmutableList<BuildFileName> getBuildFilesByPriority(); protected abstract ActionOnIOExceptionReadingBuildFile getActionOnIOExceptionReadingBuildFile(); - protected abstract ImmutableMap<SkyFunctionName, SkyFunction> getExtraExtraSkyFunctions(); protected final ImmutableMap<SkyFunctionName, SkyFunction> makeFreshSkyFunctions() { AtomicReference<TimestampGranularityMonitor> tsgm = @@ -374,8 +376,7 @@ public abstract class AbstractPackageLoader implements PackageLoader { /*skylarkImportLookupFunctionForInlining=*/ null, /*packageProgress=*/ null, getActionOnIOExceptionReadingBuildFile())) - .putAll(extraSkyFunctions) - .putAll(getExtraExtraSkyFunctions()); + .putAll(extraSkyFunctions); return builder.build(); } } diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/packages/BazelPackageLoader.java b/src/main/java/com/google/devtools/build/lib/skyframe/packages/BazelPackageLoader.java index 7c388e5536..fb95707874 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/packages/BazelPackageLoader.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/packages/BazelPackageLoader.java @@ -13,21 +13,29 @@ // limitations under the License. package com.google.devtools.build.lib.skyframe.packages; +import com.google.common.base.Suppliers; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.devtools.build.lib.bazel.rules.BazelRuleClassProvider; import com.google.devtools.build.lib.packages.PackageFactory.EnvironmentExtension; import com.google.devtools.build.lib.packages.RuleClassProvider; +import com.google.devtools.build.lib.rules.repository.LocalRepositoryFunction; +import com.google.devtools.build.lib.rules.repository.LocalRepositoryRule; +import com.google.devtools.build.lib.rules.repository.RepositoryDelegatorFunction; +import com.google.devtools.build.lib.rules.repository.RepositoryFunction; +import com.google.devtools.build.lib.rules.repository.RepositoryLoaderFunction; import com.google.devtools.build.lib.runtime.proto.InvocationPolicyOuterClass.InvocationPolicy; import com.google.devtools.build.lib.skyframe.BazelSkyframeExecutorConstants; import com.google.devtools.build.lib.skyframe.LocalRepositoryLookupFunction; import com.google.devtools.build.lib.skyframe.PackageFunction.ActionOnIOExceptionReadingBuildFile; import com.google.devtools.build.lib.skyframe.PackageLookupFunction.CrossRepositoryLabelViolationStrategy; import com.google.devtools.build.lib.skyframe.PackageLookupValue.BuildFileName; +import com.google.devtools.build.lib.skyframe.PrecomputedValue; import com.google.devtools.build.lib.skyframe.SkyFunctions; import com.google.devtools.build.lib.vfs.Path; import com.google.devtools.build.skyframe.SkyFunction; import com.google.devtools.build.skyframe.SkyFunctionName; +import java.util.concurrent.atomic.AtomicBoolean; /** * Concrete implementation of {@link PackageLoader} that uses skyframe under the covers, but with @@ -36,7 +44,29 @@ import com.google.devtools.build.skyframe.SkyFunctionName; public class BazelPackageLoader extends AbstractPackageLoader { /** Returns a fresh {@link Builder} instance. */ public static Builder builder(Path workspaceDir) { - return new Builder(workspaceDir); + Builder builder = new Builder(workspaceDir); + + // Set up SkyFunctions and PrecomputedValues needed to make local repositories work correctly. + ImmutableMap<String, RepositoryFunction> repositoryHandlers = + ImmutableMap.of( + LocalRepositoryRule.NAME, (RepositoryFunction) new LocalRepositoryFunction()); + + builder.addExtraSkyFunctions( + ImmutableMap.<SkyFunctionName, SkyFunction>of( + SkyFunctions.LOCAL_REPOSITORY_LOOKUP, + new LocalRepositoryLookupFunction(), + SkyFunctions.REPOSITORY_DIRECTORY, + new RepositoryDelegatorFunction(repositoryHandlers, null, new AtomicBoolean(true)), + SkyFunctions.REPOSITORY, + new RepositoryLoaderFunction())); + + // Set extra precomputed values. + builder.addExtraPrecomputedValues( + PrecomputedValue.injected( + RepositoryDelegatorFunction.REPOSITORY_OVERRIDES, + Suppliers.ofInstance(ImmutableMap.of()))); + + return builder; } /** Builder for {@link BazelPackageLoader} instances. */ @@ -56,7 +86,7 @@ public class BazelPackageLoader extends AbstractPackageLoader { } @Override - protected String getDefaultDefaulsPackageContents() { + protected String getDefaultDefaultPackageContents() { return BazelRuleClassProvider.create().getDefaultsPackageContent( InvocationPolicy.getDefaultInstance()); } @@ -90,11 +120,4 @@ public class BazelPackageLoader extends AbstractPackageLoader { protected ActionOnIOExceptionReadingBuildFile getActionOnIOExceptionReadingBuildFile() { return BazelSkyframeExecutorConstants.ACTION_ON_IO_EXCEPTION_READING_BUILD_FILE; } - - @Override - protected ImmutableMap<SkyFunctionName, SkyFunction> getExtraExtraSkyFunctions() { - return ImmutableMap.<SkyFunctionName, SkyFunction>of( - SkyFunctions.LOCAL_REPOSITORY_LOOKUP, new LocalRepositoryLookupFunction()); - // TODO(nharmata): Add support for external repositories. - } } |