aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skyframe/packages
diff options
context:
space:
mode:
authorGravatar jcater <jcater@google.com>2017-08-31 18:52:59 +0200
committerGravatar Vladimir Moskva <vladmos@google.com>2017-09-01 12:27:40 +0200
commit9d9e1a7f11d68680c87aefd16ac26ad6af4fd94c (patch)
tree249643064dc761ddefcaed89e9462573f94c1426 /src/main/java/com/google/devtools/build/lib/skyframe/packages
parent6df6a5ec179acd0eb4ad3f51f79a06ae7d16e3c6 (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.java47
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/packages/BazelPackageLoader.java41
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.
- }
}