Allow customizing the priority list of WORKSPACE files.
We currently assume the order of WORKSPACE files is WORKSPACE.bazel and
WORKSPACE. Introduce ExternalPackageHelper to resolve the WORKSPACE files,
which allows to specify the priority list at the creation time. Use the new
class in place of the old helper which had a hardcoded list.
PiperOrigin-RevId: 306460197
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/BazelRepositoryModule.java b/src/main/java/com/google/devtools/build/lib/bazel/BazelRepositoryModule.java
index ee0022a..3894ccd 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/BazelRepositoryModule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/BazelRepositoryModule.java
@@ -67,6 +67,7 @@
import com.google.devtools.build.lib.server.FailureDetails.ExternalRepository;
import com.google.devtools.build.lib.server.FailureDetails.ExternalRepository.Code;
import com.google.devtools.build.lib.server.FailureDetails.FailureDetail;
+import com.google.devtools.build.lib.skyframe.BazelSkyframeExecutorConstants;
import com.google.devtools.build.lib.skyframe.MutableSupplier;
import com.google.devtools.build.lib.skyframe.PrecomputedValue;
import com.google.devtools.build.lib.skyframe.PrecomputedValue.Injected;
@@ -197,7 +198,8 @@
isFetch,
clientEnvironmentSupplier,
directories,
- managedDirectoriesKnowledge);
+ managedDirectoriesKnowledge,
+ BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER);
builder.addSkyFunction(SkyFunctions.REPOSITORY_DIRECTORY, repositoryDelegatorFunction);
filesystem = runtime.getFileSystem();
}
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaGraph.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaGraph.java
index 4b18836..4ce6857 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaGraph.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/ninja/actions/NinjaGraph.java
@@ -44,7 +44,7 @@
import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.concurrent.ExecutorUtil;
import com.google.devtools.build.lib.packages.Type;
-import com.google.devtools.build.lib.repository.ExternalPackageUtil;
+import com.google.devtools.build.lib.skyframe.BazelSkyframeExecutorConstants;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.lib.vfs.Root;
@@ -258,7 +258,8 @@
throws InterruptedException {
Environment env = ruleContext.getAnalysisEnvironment().getSkyframeEnv();
ImmutableSortedSet<String> notSymlinkedDirs =
- ExternalPackageUtil.getNotSymlinkedInExecrootDirectories(env);
+ BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER.getNotSymlinkedInExecrootDirectories(
+ env);
if (env.valuesMissing()) {
return;
}
diff --git a/src/main/java/com/google/devtools/build/lib/repository/ExternalPackageUtil.java b/src/main/java/com/google/devtools/build/lib/repository/ExternalPackageHelper.java
similarity index 84%
rename from src/main/java/com/google/devtools/build/lib/repository/ExternalPackageUtil.java
rename to src/main/java/com/google/devtools/build/lib/repository/ExternalPackageHelper.java
index 9d45366..b5d916c 100644
--- a/src/main/java/com/google/devtools/build/lib/repository/ExternalPackageUtil.java
+++ b/src/main/java/com/google/devtools/build/lib/repository/ExternalPackageHelper.java
@@ -14,6 +14,7 @@
package com.google.devtools.build.lib.repository;
+import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSortedSet;
import com.google.common.collect.Iterables;
@@ -35,15 +36,22 @@
import com.google.devtools.build.skyframe.SkyKey;
import javax.annotation.Nullable;
-/** Utility class to centralize looking up data from the external package. */
-public class ExternalPackageUtil {
+/** Helper class for looking up data from the external package. */
+public class ExternalPackageHelper {
+ private final ImmutableList<BuildFileName> workspaceFilesByPriority;
+
+ public ExternalPackageHelper(ImmutableList<BuildFileName> workspaceFilesByPriority) {
+ Preconditions.checkArgument(!workspaceFilesByPriority.isEmpty());
+ this.workspaceFilesByPriority = workspaceFilesByPriority;
+ }
+
/**
* Returns directories, that should not be symlinked under the execroot.
*
* <p>Searches for toplevel_output_directories calls in the WORKSPACE file, and gathers values of
* all "paths" attributes.
*/
- public static ImmutableSortedSet<String> getNotSymlinkedInExecrootDirectories(Environment env)
+ public ImmutableSortedSet<String> getNotSymlinkedInExecrootDirectories(Environment env)
throws InterruptedException {
ImmutableSortedSet.Builder<String> builder = ImmutableSortedSet.naturalOrder();
WorkspaceFileValueProcessor gatherer =
@@ -63,7 +71,7 @@
/** Uses a rule name to fetch the corresponding Rule from the external package. */
@Nullable
- public static Rule getRuleByName(final String ruleName, Environment env)
+ public Rule getRuleByName(String ruleName, Environment env)
throws ExternalPackageException, InterruptedException {
ExternalPackageRuleExtractor extractor = new ExternalPackageRuleExtractor(env, ruleName);
@@ -93,28 +101,20 @@
* so then it lies and returns the RootedPath corresponding to the last package path entry.
*/
@Nullable
- public static RootedPath findWorkspaceFile(Environment env) throws InterruptedException {
+ public RootedPath findWorkspaceFile(Environment env) throws InterruptedException {
PathPackageLocator packageLocator = PrecomputedValue.PATH_PACKAGE_LOCATOR.get(env);
ImmutableList<Root> packagePath = packageLocator.getPathEntries();
for (Root candidateRoot : packagePath) {
- RootedPath path =
- checkWorkspaceFile(
- env, candidateRoot, BuildFileName.WORKSPACE_DOT_BAZEL.getFilenameFragment());
- if (env.valuesMissing()) {
- return null;
- }
+ for (BuildFileName workspaceFile : workspaceFilesByPriority) {
+ RootedPath path =
+ checkWorkspaceFile(env, candidateRoot, workspaceFile.getFilenameFragment());
+ if (env.valuesMissing()) {
+ return null;
+ }
- if (path != null) {
- return path;
- }
-
- path = checkWorkspaceFile(env, candidateRoot, BuildFileName.WORKSPACE.getFilenameFragment());
- if (env.valuesMissing()) {
- return null;
- }
-
- if (path != null) {
- return path;
+ if (path != null) {
+ return path;
+ }
}
}
@@ -126,8 +126,8 @@
}
/** Returns false if some SkyValues were missing. */
- private static boolean iterateWorkspaceFragments(
- Environment env, WorkspaceFileValueProcessor processor) throws InterruptedException {
+ private boolean iterateWorkspaceFragments(Environment env, WorkspaceFileValueProcessor processor)
+ throws InterruptedException {
RootedPath workspacePath = findWorkspaceFile(env);
if (env.valuesMissing()) {
return false;
diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java
index 76ecc8f..507d0d1 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorFunction.java
@@ -32,7 +32,7 @@
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.packages.RuleFormatter;
import com.google.devtools.build.lib.repository.ExternalPackageException;
-import com.google.devtools.build.lib.repository.ExternalPackageUtil;
+import com.google.devtools.build.lib.repository.ExternalPackageHelper;
import com.google.devtools.build.lib.repository.ExternalRuleNotFoundException;
import com.google.devtools.build.lib.repository.RepositoryFailedEvent;
import com.google.devtools.build.lib.rules.repository.RepositoryFunction.RepositoryFunctionException;
@@ -106,6 +106,8 @@
// before each command.
private final ManagedDirectoriesKnowledge managedDirectoriesKnowledge;
+ private final ExternalPackageHelper externalPackageHelper;
+
private final Supplier<Map<String, String>> clientEnvironmentSupplier;
public RepositoryDelegatorFunction(
@@ -114,13 +116,15 @@
AtomicBoolean isFetch,
Supplier<Map<String, String>> clientEnvironmentSupplier,
BlazeDirectories directories,
- ManagedDirectoriesKnowledge managedDirectoriesKnowledge) {
+ ManagedDirectoriesKnowledge managedDirectoriesKnowledge,
+ ExternalPackageHelper externalPackageHelper) {
this.handlers = handlers;
this.skylarkHandler = skylarkHandler;
this.isFetch = isFetch;
this.clientEnvironmentSupplier = clientEnvironmentSupplier;
this.directories = directories;
this.managedDirectoriesKnowledge = managedDirectoriesKnowledge;
+ this.externalPackageHelper = externalPackageHelper;
}
public static RepositoryDirectoryValue.Builder symlink(
@@ -363,10 +367,9 @@
* returns null.
*/
@Nullable
- private static Rule getRepository(
- RepositoryName repositoryName, Environment env)
+ private Rule getRepository(RepositoryName repositoryName, Environment env)
throws ExternalPackageException, InterruptedException {
- return ExternalPackageUtil.getRuleByName(repositoryName.strippedName(), env);
+ return externalPackageHelper.getRuleByName(repositoryName.strippedName(), env);
}
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryFunction.java b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryFunction.java
index faed6d9..689576d 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/repository/RepositoryFunction.java
@@ -34,7 +34,7 @@
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.packages.Type;
import com.google.devtools.build.lib.repository.ExternalPackageException;
-import com.google.devtools.build.lib.repository.ExternalPackageUtil;
+import com.google.devtools.build.lib.repository.ExternalPackageHelper;
import com.google.devtools.build.lib.repository.ExternalRuleNotFoundException;
import com.google.devtools.build.lib.skyframe.ActionEnvironmentFunction;
import com.google.devtools.build.lib.skyframe.PackageLookupFunction;
@@ -548,7 +548,11 @@
* encourage nor optimize for since it is not common. So the set of external files is small.
*/
public static void addExternalFilesDependencies(
- RootedPath rootedPath, boolean isDirectory, BlazeDirectories directories, Environment env)
+ RootedPath rootedPath,
+ boolean isDirectory,
+ BlazeDirectories directories,
+ Environment env,
+ ExternalPackageHelper externalPackageHelper)
throws InterruptedException {
Path externalRepoDir = getExternalRepositoryDirectory(directories);
PathFragment repositoryPath = rootedPath.asPath().relativeTo(externalRepoDir);
@@ -564,7 +568,7 @@
// dependency already but we want to catch RepositoryNotFoundException, so invoke
// #getRuleByName
// first.
- Rule rule = ExternalPackageUtil.getRuleByName(repositoryName, env);
+ Rule rule = externalPackageHelper.getRuleByName(repositoryName, env);
if (rule == null) {
// Still an override might change the content of the repository.
RepositoryDelegatorFunction.REPOSITORY_OVERRIDES.get(env);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BazelSkyframeExecutorConstants.java b/src/main/java/com/google/devtools/build/lib/skyframe/BazelSkyframeExecutorConstants.java
index 8353f5f..1b0072c 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/BazelSkyframeExecutorConstants.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/BazelSkyframeExecutorConstants.java
@@ -16,6 +16,7 @@
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.packages.BuildFileName;
+import com.google.devtools.build.lib.repository.ExternalPackageHelper;
import com.google.devtools.build.lib.skyframe.PackageFunction.ActionOnIOExceptionReadingBuildFile;
import com.google.devtools.build.lib.skyframe.PackageLookupFunction.CrossRepositoryLabelViolationStrategy;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -48,6 +49,12 @@
public static final ImmutableList<BuildFileName> BUILD_FILES_BY_PRIORITY =
ImmutableList.of(BuildFileName.BUILD_DOT_BAZEL, BuildFileName.BUILD);
+ private static final ImmutableList<BuildFileName> WORKSPACE_FILES_BY_PRIORITY =
+ ImmutableList.of(BuildFileName.WORKSPACE_DOT_BAZEL, BuildFileName.WORKSPACE);
+
+ public static final ExternalPackageHelper EXTERNAL_PACKAGE_HELPER =
+ new ExternalPackageHelper(WORKSPACE_FILES_BY_PRIORITY);
+
public static final ActionOnIOExceptionReadingBuildFile
ACTION_ON_IO_EXCEPTION_READING_BUILD_FILE =
ActionOnIOExceptionReadingBuildFile.UseOriginalIOException.INSTANCE;
@@ -57,6 +64,7 @@
.setBlacklistedPackagePrefixesFunction(BLACKLISTED_PACKAGE_PREFIXES_FUNCTION)
.setActionOnIOExceptionReadingBuildFile(ACTION_ON_IO_EXCEPTION_READING_BUILD_FILE)
.setCrossRepositoryLabelViolationStrategy(CROSS_REPOSITORY_LABEL_VIOLATION_STRATEGY)
- .setBuildFilesByPriority(BUILD_FILES_BY_PRIORITY);
+ .setBuildFilesByPriority(BUILD_FILES_BY_PRIORITY)
+ .setExternalPackageHelper(EXTERNAL_PACKAGE_HELPER);
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ExternalFilesHelper.java b/src/main/java/com/google/devtools/build/lib/skyframe/ExternalFilesHelper.java
index 11e68ca..fd497b2 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ExternalFilesHelper.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ExternalFilesHelper.java
@@ -21,6 +21,7 @@
import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadCompatible;
import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe;
import com.google.devtools.build.lib.pkgcache.PathPackageLocator;
+import com.google.devtools.build.lib.repository.ExternalPackageHelper;
import com.google.devtools.build.lib.rules.repository.ManagedDirectoriesKnowledge;
import com.google.devtools.build.lib.rules.repository.RepositoryFunction;
import com.google.devtools.build.lib.util.Pair;
@@ -42,6 +43,7 @@
private final BlazeDirectories directories;
private final int maxNumExternalFilesToLog;
private final AtomicInteger numExternalFilesLogged = new AtomicInteger(0);
+ private final ExternalPackageHelper externalPackageHelper;
// These variables are set to true from multiple threads, but only read in the main thread.
// So volatility or an AtomicBoolean is not needed.
@@ -55,27 +57,36 @@
ExternalFileAction externalFileAction,
BlazeDirectories directories,
int maxNumExternalFilesToLog,
- ManagedDirectoriesKnowledge managedDirectoriesKnowledge) {
+ ManagedDirectoriesKnowledge managedDirectoriesKnowledge,
+ ExternalPackageHelper externalPackageHelper) {
this.pkgLocator = pkgLocator;
this.externalFileAction = externalFileAction;
this.directories = directories;
this.maxNumExternalFilesToLog = maxNumExternalFilesToLog;
this.managedDirectoriesKnowledge = managedDirectoriesKnowledge;
+ this.externalPackageHelper = externalPackageHelper;
}
public static ExternalFilesHelper create(
AtomicReference<PathPackageLocator> pkgLocator,
ExternalFileAction externalFileAction,
BlazeDirectories directories,
- ManagedDirectoriesKnowledge managedDirectoriesKnowledge) {
+ ManagedDirectoriesKnowledge managedDirectoriesKnowledge,
+ ExternalPackageHelper externalPackageHelper) {
return IN_TEST
- ? createForTesting(pkgLocator, externalFileAction, directories, managedDirectoriesKnowledge)
+ ? createForTesting(
+ pkgLocator,
+ externalFileAction,
+ directories,
+ managedDirectoriesKnowledge,
+ externalPackageHelper)
: new ExternalFilesHelper(
pkgLocator,
externalFileAction,
directories,
/*maxNumExternalFilesToLog=*/ 100,
- managedDirectoriesKnowledge);
+ managedDirectoriesKnowledge,
+ externalPackageHelper);
}
public static ExternalFilesHelper createForTesting(
@@ -86,21 +97,36 @@
pkgLocator,
externalFileAction,
directories,
- ManagedDirectoriesKnowledge.NO_MANAGED_DIRECTORIES);
+ BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER);
+ }
+
+ public static ExternalFilesHelper createForTesting(
+ AtomicReference<PathPackageLocator> pkgLocator,
+ ExternalFileAction externalFileAction,
+ BlazeDirectories directories,
+ ExternalPackageHelper externalPackageHelper) {
+ return createForTesting(
+ pkgLocator,
+ externalFileAction,
+ directories,
+ ManagedDirectoriesKnowledge.NO_MANAGED_DIRECTORIES,
+ externalPackageHelper);
}
private static ExternalFilesHelper createForTesting(
AtomicReference<PathPackageLocator> pkgLocator,
ExternalFileAction externalFileAction,
BlazeDirectories directories,
- ManagedDirectoriesKnowledge managedDirectoriesKnowledge) {
+ ManagedDirectoriesKnowledge managedDirectoriesKnowledge,
+ ExternalPackageHelper externalPackageHelper) {
return new ExternalFilesHelper(
pkgLocator,
externalFileAction,
directories,
// These log lines are mostly spam during unit and integration tests.
/*maxNumExternalFilesToLog=*/ 0,
- managedDirectoriesKnowledge);
+ managedDirectoriesKnowledge,
+ externalPackageHelper);
}
@@ -210,7 +236,8 @@
externalFileAction,
directories,
maxNumExternalFilesToLog,
- managedDirectoriesKnowledge);
+ managedDirectoriesKnowledge,
+ externalPackageHelper);
}
public FileType getAndNoteFileType(RootedPath rootedPath) {
@@ -297,7 +324,8 @@
Preconditions.checkState(
externalFileAction == ExternalFileAction.DEPEND_ON_EXTERNAL_PKG_FOR_EXTERNAL_REPO_PATHS,
externalFileAction);
- RepositoryFunction.addExternalFilesDependencies(rootedPath, isDirectory, directories, env);
+ RepositoryFunction.addExternalFilesDependencies(
+ rootedPath, isDirectory, directories, env, externalPackageHelper);
break;
}
return fileType;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ExternalPackageFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ExternalPackageFunction.java
index 71fa63a..29568f4 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ExternalPackageFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ExternalPackageFunction.java
@@ -17,7 +17,7 @@
import com.google.common.collect.Interner;
import com.google.devtools.build.lib.concurrent.BlazeInterners;
import com.google.devtools.build.lib.packages.WorkspaceFileValue;
-import com.google.devtools.build.lib.repository.ExternalPackageUtil;
+import com.google.devtools.build.lib.repository.ExternalPackageHelper;
import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec;
import com.google.devtools.build.lib.vfs.RootedPath;
import com.google.devtools.build.skyframe.AbstractSkyKey;
@@ -35,10 +35,16 @@
*/
public class ExternalPackageFunction implements SkyFunction {
+ private final ExternalPackageHelper externalPackageHelper;
+
+ public ExternalPackageFunction(ExternalPackageHelper externalPackageHelper) {
+ this.externalPackageHelper = externalPackageHelper;
+ }
+
@Nullable
@Override
public SkyValue compute(SkyKey skyKey, Environment env) throws InterruptedException {
- RootedPath workspacePath = ExternalPackageUtil.findWorkspaceFile(env);
+ RootedPath workspacePath = externalPackageHelper.findWorkspaceFile(env);
if (env.valuesMissing()) {
return null;
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/LocalRepositoryLookupFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/LocalRepositoryLookupFunction.java
index 86e21c1..ea32186 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/LocalRepositoryLookupFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/LocalRepositoryLookupFunction.java
@@ -28,7 +28,7 @@
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.packages.Type;
import com.google.devtools.build.lib.packages.WorkspaceFileValue;
-import com.google.devtools.build.lib.repository.ExternalPackageUtil;
+import com.google.devtools.build.lib.repository.ExternalPackageHelper;
import com.google.devtools.build.lib.rules.repository.LocalRepositoryRule;
import com.google.devtools.build.lib.rules.repository.WorkspaceFileHelper;
import com.google.devtools.build.lib.skyframe.PackageFunction.PackageFunctionException;
@@ -46,6 +46,12 @@
/** SkyFunction for {@link LocalRepositoryLookupValue}s. */
public class LocalRepositoryLookupFunction implements SkyFunction {
+ private final ExternalPackageHelper externalPackageHelper;
+
+ public LocalRepositoryLookupFunction(ExternalPackageHelper externalPackageHelper) {
+ this.externalPackageHelper = externalPackageHelper;
+ }
+
@Override
@Nullable
public String extractTag(SkyKey skyKey) {
@@ -135,7 +141,7 @@
private Optional<LocalRepositoryLookupValue> maybeCheckWorkspaceForRepository(
Environment env, final RootedPath directory)
throws InterruptedException, LocalRepositoryLookupFunctionException {
- RootedPath workspacePath = ExternalPackageUtil.findWorkspaceFile(env);
+ RootedPath workspacePath = externalPackageHelper.findWorkspaceFile(env);
if (env.valuesMissing()) {
return Optional.absent();
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java
index c2fd540..e73c1a0 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java
@@ -51,7 +51,7 @@
import com.google.devtools.build.lib.profiler.Profiler;
import com.google.devtools.build.lib.profiler.ProfilerTask;
import com.google.devtools.build.lib.profiler.SilentCloseable;
-import com.google.devtools.build.lib.repository.ExternalPackageUtil;
+import com.google.devtools.build.lib.repository.ExternalPackageHelper;
import com.google.devtools.build.lib.rules.repository.WorkspaceFileHelper;
import com.google.devtools.build.lib.skyframe.GlobValue.InvalidGlobPatternException;
import com.google.devtools.build.lib.skyframe.StarlarkImportLookupFunction.StarlarkImportFailedException;
@@ -102,6 +102,7 @@
private final AtomicInteger numPackagesLoaded;
@Nullable private final PackageProgressReceiver packageProgress;
private final Label preludeLabel;
+ private final ExternalPackageHelper externalPackageHelper;
// Not final only for testing.
@Nullable private StarlarkImportLookupFunction starlarkImportLookupFunctionForInlining;
@@ -120,7 +121,8 @@
@Nullable StarlarkImportLookupFunction starlarkImportLookupFunctionForInlining,
@Nullable PackageProgressReceiver packageProgress,
ActionOnIOExceptionReadingBuildFile actionOnIOExceptionReadingBuildFile,
- IncrementalityIntent incrementalityIntent) {
+ IncrementalityIntent incrementalityIntent,
+ ExternalPackageHelper externalPackageHelper) {
this.starlarkImportLookupFunctionForInlining = starlarkImportLookupFunctionForInlining;
// Can be null in tests.
this.preludeLabel = packageFactory == null
@@ -135,6 +137,7 @@
this.packageProgress = packageProgress;
this.actionOnIOExceptionReadingBuildFile = actionOnIOExceptionReadingBuildFile;
this.incrementalityIntent = incrementalityIntent;
+ this.externalPackageHelper = externalPackageHelper;
}
@VisibleForTesting
@@ -145,7 +148,8 @@
Cache<PackageIdentifier, LoadedPackageCacheEntry> packageFunctionCache,
Cache<PackageIdentifier, StarlarkFile> fileSyntaxCache,
AtomicInteger numPackagesLoaded,
- @Nullable StarlarkImportLookupFunction starlarkImportLookupFunctionForInlining) {
+ @Nullable StarlarkImportLookupFunction starlarkImportLookupFunctionForInlining,
+ ExternalPackageHelper externalPackageHelper) {
this(
packageFactory,
pkgLocator,
@@ -156,7 +160,8 @@
starlarkImportLookupFunctionForInlining,
/*packageProgress=*/ null,
ActionOnIOExceptionReadingBuildFile.UseOriginalIOException.INSTANCE,
- IncrementalityIntent.INCREMENTAL);
+ IncrementalityIntent.INCREMENTAL,
+ externalPackageHelper);
}
public void setStarlarkImportLookupFunctionForInliningForTesting(
@@ -297,7 +302,7 @@
private SkyValue getExternalPackage(Environment env)
throws PackageFunctionException, InterruptedException {
StarlarkSemantics starlarkSemantics = PrecomputedValue.STARLARK_SEMANTICS.get(env);
- RootedPath workspacePath = ExternalPackageUtil.findWorkspaceFile(env);
+ RootedPath workspacePath = externalPackageHelper.findWorkspaceFile(env);
if (env.valuesMissing()) {
return null;
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java
index 0249681..9a22cda 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java
@@ -15,6 +15,7 @@
import com.google.common.base.Preconditions;
import com.google.common.base.Verify;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.actions.FileValue;
import com.google.devtools.build.lib.actions.InconsistentFilesystemException;
@@ -27,7 +28,7 @@
import com.google.devtools.build.lib.packages.NoSuchPackageException;
import com.google.devtools.build.lib.packages.RepositoryFetchException;
import com.google.devtools.build.lib.pkgcache.PathPackageLocator;
-import com.google.devtools.build.lib.repository.ExternalPackageUtil;
+import com.google.devtools.build.lib.repository.ExternalPackageHelper;
import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.syntax.StarlarkSemantics;
import com.google.devtools.build.lib.vfs.PathFragment;
@@ -39,7 +40,6 @@
import com.google.devtools.build.skyframe.SkyKey;
import com.google.devtools.build.skyframe.SkyValue;
import java.io.IOException;
-import java.util.List;
import java.util.concurrent.atomic.AtomicReference;
import javax.annotation.Nullable;
@@ -57,15 +57,18 @@
private final AtomicReference<ImmutableSet<PackageIdentifier>> deletedPackages;
private final CrossRepositoryLabelViolationStrategy crossRepositoryLabelViolationStrategy;
- private final List<BuildFileName> buildFilesByPriority;
+ private final ImmutableList<BuildFileName> buildFilesByPriority;
+ private final ExternalPackageHelper externalPackageHelper;
public PackageLookupFunction(
AtomicReference<ImmutableSet<PackageIdentifier>> deletedPackages,
CrossRepositoryLabelViolationStrategy crossRepositoryLabelViolationStrategy,
- List<BuildFileName> buildFilesByPriority) {
+ ImmutableList<BuildFileName> buildFilesByPriority,
+ ExternalPackageHelper externalPackageHelper) {
this.deletedPackages = deletedPackages;
this.crossRepositoryLabelViolationStrategy = crossRepositoryLabelViolationStrategy;
this.buildFilesByPriority = buildFilesByPriority;
+ this.externalPackageHelper = externalPackageHelper;
}
@Override
@@ -288,9 +291,9 @@
return false;
}
- private static PackageLookupValue computeWorkspacePackageLookupValue(Environment env)
+ private PackageLookupValue computeWorkspacePackageLookupValue(Environment env)
throws InterruptedException {
- RootedPath workspaceFile = ExternalPackageUtil.findWorkspaceFile(env);
+ RootedPath workspaceFile = externalPackageHelper.findWorkspaceFile(env);
if (env.valuesMissing()) {
return null;
}
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 f55d13f..59fd8ea 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
@@ -61,6 +61,7 @@
import com.google.devtools.build.lib.profiler.ProfilerTask;
import com.google.devtools.build.lib.profiler.SilentCloseable;
import com.google.devtools.build.lib.query2.aquery.AqueryActionFilter;
+import com.google.devtools.build.lib.repository.ExternalPackageHelper;
import com.google.devtools.build.lib.rules.repository.ManagedDirectoriesKnowledge;
import com.google.devtools.build.lib.skyframe.AspectValue.AspectKey;
import com.google.devtools.build.lib.skyframe.DiffAwarenessManager.ProcessableModifiedFileSet;
@@ -165,7 +166,8 @@
Iterable<SkyValueDirtinessChecker> customDirtinessCheckers,
SkyFunction blacklistedPackagePrefixesFunction,
CrossRepositoryLabelViolationStrategy crossRepositoryLabelViolationStrategy,
- List<BuildFileName> buildFilesByPriority,
+ ImmutableList<BuildFileName> buildFilesByPriority,
+ ExternalPackageHelper externalPackageHelper,
ActionOnIOExceptionReadingBuildFile actionOnIOExceptionReadingBuildFile,
BuildOptions defaultBuildOptions,
MutableArtifactFactorySupplier mutableArtifactFactorySupplier,
@@ -183,6 +185,7 @@
blacklistedPackagePrefixesFunction,
crossRepositoryLabelViolationStrategy,
buildFilesByPriority,
+ externalPackageHelper,
actionOnIOExceptionReadingBuildFile,
/*shouldUnblockCpuWorkWhenFetchingDeps=*/ false,
GraphInconsistencyReceiver.THROWING,
@@ -1011,7 +1014,8 @@
protected ActionKeyContext actionKeyContext;
protected BuildOptions defaultBuildOptions;
private CrossRepositoryLabelViolationStrategy crossRepositoryLabelViolationStrategy;
- private List<BuildFileName> buildFilesByPriority;
+ private ImmutableList<BuildFileName> buildFilesByPriority;
+ private ExternalPackageHelper externalPackageHelper;
private ActionOnIOExceptionReadingBuildFile actionOnIOExceptionReadingBuildFile;
@Nullable private ManagedDirectoriesKnowledge managedDirectoriesKnowledge;
@@ -1036,6 +1040,7 @@
Preconditions.checkNotNull(defaultBuildOptions);
Preconditions.checkNotNull(crossRepositoryLabelViolationStrategy);
Preconditions.checkNotNull(buildFilesByPriority);
+ Preconditions.checkNotNull(externalPackageHelper);
Preconditions.checkNotNull(actionOnIOExceptionReadingBuildFile);
Preconditions.checkNotNull(blacklistedPackagePrefixesFunction);
@@ -1054,6 +1059,7 @@
blacklistedPackagePrefixesFunction,
crossRepositoryLabelViolationStrategy,
buildFilesByPriority,
+ externalPackageHelper,
actionOnIOExceptionReadingBuildFile,
defaultBuildOptions,
mutableArtifactFactorySupplier,
@@ -1122,11 +1128,16 @@
return this;
}
- public Builder setBuildFilesByPriority(List<BuildFileName> buildFilesByPriority) {
+ public Builder setBuildFilesByPriority(ImmutableList<BuildFileName> buildFilesByPriority) {
this.buildFilesByPriority = buildFilesByPriority;
return this;
}
+ public Builder setExternalPackageHelper(ExternalPackageHelper externalPackageHelper) {
+ this.externalPackageHelper = externalPackageHelper;
+ return this;
+ }
+
public Builder setActionOnIOExceptionReadingBuildFile(
ActionOnIOExceptionReadingBuildFile actionOnIOExceptionReadingBuildFile) {
this.actionOnIOExceptionReadingBuildFile = actionOnIOExceptionReadingBuildFile;
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 90455f9..8dbe784 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
@@ -132,6 +132,7 @@
import com.google.devtools.build.lib.profiler.SilentCloseable;
import com.google.devtools.build.lib.remote.options.RemoteOptions;
import com.google.devtools.build.lib.remote.options.RemoteOutputsMode;
+import com.google.devtools.build.lib.repository.ExternalPackageHelper;
import com.google.devtools.build.lib.rules.repository.ManagedDirectoriesKnowledge;
import com.google.devtools.build.lib.rules.repository.ResolvedFileFunction;
import com.google.devtools.build.lib.rules.repository.ResolvedHashesFunction;
@@ -320,7 +321,9 @@
private final CrossRepositoryLabelViolationStrategy crossRepositoryLabelViolationStrategy;
- private final List<BuildFileName> buildFilesByPriority;
+ private final ImmutableList<BuildFileName> buildFilesByPriority;
+
+ private final ExternalPackageHelper externalPackageHelper;
private final ActionOnIOExceptionReadingBuildFile actionOnIOExceptionReadingBuildFile;
@@ -393,7 +396,8 @@
ExternalFileAction externalFileAction,
SkyFunction blacklistedPackagePrefixesFunction,
CrossRepositoryLabelViolationStrategy crossRepositoryLabelViolationStrategy,
- List<BuildFileName> buildFilesByPriority,
+ ImmutableList<BuildFileName> buildFilesByPriority,
+ ExternalPackageHelper externalPackageHelper,
ActionOnIOExceptionReadingBuildFile actionOnIOExceptionReadingBuildFile,
boolean shouldUnblockCpuWorkWhenFetchingDeps,
GraphInconsistencyReceiver graphInconsistencyReceiver,
@@ -443,9 +447,11 @@
directories,
managedDirectoriesKnowledge != null
? managedDirectoriesKnowledge
- : ManagedDirectoriesKnowledge.NO_MANAGED_DIRECTORIES);
+ : ManagedDirectoriesKnowledge.NO_MANAGED_DIRECTORIES,
+ externalPackageHelper);
this.crossRepositoryLabelViolationStrategy = crossRepositoryLabelViolationStrategy;
this.buildFilesByPriority = buildFilesByPriority;
+ this.externalPackageHelper = externalPackageHelper;
this.actionOnIOExceptionReadingBuildFile = actionOnIOExceptionReadingBuildFile;
this.packageProgress = packageProgress;
this.configuredTargetProgress = configuredTargetProgress;
@@ -477,7 +483,10 @@
map.put(
SkyFunctions.PACKAGE_LOOKUP,
new PackageLookupFunction(
- deletedPackages, crossRepositoryLabelViolationStrategy, buildFilesByPriority));
+ deletedPackages,
+ crossRepositoryLabelViolationStrategy,
+ buildFilesByPriority,
+ externalPackageHelper));
map.put(SkyFunctions.CONTAINING_PACKAGE_LOOKUP, new ContainingPackageLookupFunction());
map.put(SkyFunctions.AST_FILE_LOOKUP, new ASTFileLookupFunction(ruleClassProvider));
map.put(
@@ -503,7 +512,8 @@
map.put(SkyFunctions.BLACKLISTED_PACKAGE_PREFIXES, blacklistedPackagePrefixesFunction);
map.put(SkyFunctions.TESTS_IN_SUITE, new TestExpansionFunction());
map.put(SkyFunctions.TEST_SUITE_EXPANSION, new TestsForTargetPatternFunction());
- map.put(SkyFunctions.TARGET_PATTERN_PHASE, new TargetPatternPhaseFunction());
+ map.put(
+ SkyFunctions.TARGET_PATTERN_PHASE, new TargetPatternPhaseFunction(externalPackageHelper));
map.put(
SkyFunctions.PREPARE_ANALYSIS_PHASE,
new PrepareAnalysisPhaseFunction(ruleClassProvider, defaultBuildOptions));
@@ -522,7 +532,8 @@
actionOnIOExceptionReadingBuildFile,
tracksStateForIncrementality()
? IncrementalityIntent.INCREMENTAL
- : IncrementalityIntent.NON_INCREMENTAL));
+ : IncrementalityIntent.NON_INCREMENTAL,
+ externalPackageHelper));
map.put(SkyFunctions.PACKAGE_ERROR, new PackageErrorFunction());
map.put(SkyFunctions.PACKAGE_ERROR_MESSAGE, new PackageErrorMessageFunction());
map.put(SkyFunctions.TARGET_PATTERN_ERROR, new TargetPatternErrorFunction());
@@ -562,7 +573,7 @@
pkgFactory,
directories,
starlarkImportLookupFunctionForInliningPackageAndWorkspaceNodes));
- map.put(SkyFunctions.EXTERNAL_PACKAGE, new ExternalPackageFunction());
+ map.put(SkyFunctions.EXTERNAL_PACKAGE, new ExternalPackageFunction(externalPackageHelper));
map.put(
SkyFunctions.TARGET_COMPLETION,
TargetCompletor.targetCompletionFunction(
@@ -592,7 +603,9 @@
map.put(
SkyFunctions.ACTION_TEMPLATE_EXPANSION,
new ActionTemplateExpansionFunction(actionKeyContext));
- map.put(SkyFunctions.LOCAL_REPOSITORY_LOOKUP, new LocalRepositoryLookupFunction());
+ map.put(
+ SkyFunctions.LOCAL_REPOSITORY_LOOKUP,
+ new LocalRepositoryLookupFunction(externalPackageHelper));
map.put(
SkyFunctions.REGISTERED_EXECUTION_PLATFORMS, new RegisteredExecutionPlatformsFunction());
map.put(SkyFunctions.REGISTERED_TOOLCHAINS, new RegisteredToolchainsFunction());
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 7491047..d3087dc 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
@@ -44,7 +44,7 @@
import com.google.devtools.build.lib.pkgcache.ParsingFailedEvent;
import com.google.devtools.build.lib.pkgcache.TargetParsingCompleteEvent;
import com.google.devtools.build.lib.pkgcache.TestFilter;
-import com.google.devtools.build.lib.repository.ExternalPackageUtil;
+import com.google.devtools.build.lib.repository.ExternalPackageHelper;
import com.google.devtools.build.lib.skyframe.TargetPatternPhaseValue.TargetPatternPhaseKey;
import com.google.devtools.build.lib.skyframe.TargetPatternValue.TargetPatternKey;
import com.google.devtools.build.lib.skyframe.TargetPatternValue.TargetPatternSkyKeyOrException;
@@ -67,7 +67,10 @@
*/
final class TargetPatternPhaseFunction implements SkyFunction {
- public TargetPatternPhaseFunction() {
+ private final ExternalPackageHelper externalPackageHelper;
+
+ public TargetPatternPhaseFunction(ExternalPackageHelper externalPackageHelper) {
+ this.externalPackageHelper = externalPackageHelper;
}
@Override
@@ -75,7 +78,7 @@
TargetPatternPhaseKey options = (TargetPatternPhaseKey) key.argument();
WorkspaceNameValue workspaceName = (WorkspaceNameValue) env.getValue(WorkspaceNameValue.key());
ImmutableSortedSet<String> notSymlinkedInExecrootDirectories =
- ExternalPackageUtil.getNotSymlinkedInExecrootDirectories(env);
+ externalPackageHelper.getNotSymlinkedInExecrootDirectories(env);
if (env.valuesMissing()) {
return null;
}
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 3318c3d..0e3800b 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
@@ -41,6 +41,7 @@
import com.google.devtools.build.lib.packages.PackageValidator;
import com.google.devtools.build.lib.packages.WorkspaceFileValue;
import com.google.devtools.build.lib.pkgcache.PathPackageLocator;
+import com.google.devtools.build.lib.repository.ExternalPackageHelper;
import com.google.devtools.build.lib.rules.repository.ManagedDirectoriesKnowledge;
import com.google.devtools.build.lib.skyframe.ASTFileLookupFunction;
import com.google.devtools.build.lib.skyframe.BlacklistedPackagePrefixesFunction;
@@ -138,6 +139,7 @@
protected final BlazeDirectories directories;
protected final PathPackageLocator pkgLocator;
final AtomicReference<PathPackageLocator> pkgLocatorRef;
+ private final ExternalPackageHelper externalPackageHelper;
private ExternalFileAction externalFileAction;
protected ExternalFilesHelper externalFilesHelper;
protected ConfiguredRuleClassProvider ruleClassProvider = getDefaultRuleClassProvider();
@@ -153,6 +155,7 @@
Path installBase,
Path outputBase,
ImmutableList<BuildFileName> buildFilesByPriority,
+ ExternalPackageHelper externalPackageHelper,
ExternalFileAction externalFileAction) {
this.workspaceDir = workspaceDir.asPath();
Path devNull = workspaceDir.getRelative("/dev/null");
@@ -168,6 +171,7 @@
directories.getOutputBase(), ImmutableList.of(workspaceDir), buildFilesByPriority);
this.pkgLocatorRef = new AtomicReference<>(pkgLocator);
this.externalFileAction = externalFileAction;
+ this.externalPackageHelper = externalPackageHelper;
}
public Builder setRuleClassProvider(ConfiguredRuleClassProvider ruleClassProvider) {
@@ -236,7 +240,8 @@
pkgLocatorRef,
externalFileAction,
directories,
- ManagedDirectoriesKnowledge.NO_MANAGED_DIRECTORIES);
+ ManagedDirectoriesKnowledge.NO_MANAGED_DIRECTORIES,
+ externalPackageHelper);
return buildImpl();
}
@@ -381,6 +386,8 @@
protected abstract ImmutableList<BuildFileName> getBuildFilesByPriority();
+ protected abstract ExternalPackageHelper getExternalPackageHelper();
+
protected abstract ActionOnIOExceptionReadingBuildFile getActionOnIOExceptionReadingBuildFile();
private ImmutableMap<SkyFunctionName, SkyFunction> makeFreshSkyFunctions() {
@@ -404,6 +411,7 @@
return pkgLocatorRef.get().getPackageBuildFileNullable(packageName, syscallCacheRef);
}
};
+ ExternalPackageHelper externalPackageHelper = getExternalPackageHelper();
ImmutableMap.Builder<SkyFunctionName, SkyFunction> builder = ImmutableMap.builder();
builder
.put(SkyFunctions.PRECOMPUTED, new PrecomputedFunction())
@@ -420,7 +428,8 @@
new PackageLookupFunction(
/* deletedPackages= */ new AtomicReference<>(ImmutableSet.of()),
getCrossRepositoryLabelViolationStrategy(),
- getBuildFilesByPriority()))
+ getBuildFilesByPriority(),
+ getExternalPackageHelper()))
.put(
SkyFunctions.BLACKLISTED_PACKAGE_PREFIXES,
new BlacklistedPackagePrefixesFunction(
@@ -439,7 +448,7 @@
pkgFactory,
directories,
/*starlarkImportLookupFunctionForInlining=*/ null))
- .put(SkyFunctions.EXTERNAL_PACKAGE, new ExternalPackageFunction())
+ .put(SkyFunctions.EXTERNAL_PACKAGE, new ExternalPackageFunction(getExternalPackageHelper()))
.put(SkyFunctions.REPOSITORY_MAPPING, new RepositoryMappingFunction())
.put(
SkyFunctions.PACKAGE,
@@ -454,7 +463,8 @@
/*packageProgress=*/ null,
getActionOnIOExceptionReadingBuildFile(),
// Tell PackageFunction to optimize for our use-case of no incrementality.
- IncrementalityIntent.NON_INCREMENTAL))
+ IncrementalityIntent.NON_INCREMENTAL,
+ externalPackageHelper))
.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 2712b5f..d7d4b4f 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
@@ -26,6 +26,7 @@
import com.google.devtools.build.lib.bazel.rules.BazelRulesModule;
import com.google.devtools.build.lib.packages.BuildFileName;
import com.google.devtools.build.lib.packages.PackageFactory.EnvironmentExtension;
+import com.google.devtools.build.lib.repository.ExternalPackageHelper;
import com.google.devtools.build.lib.rules.repository.ManagedDirectoriesKnowledge;
import com.google.devtools.build.lib.rules.repository.RepositoryDelegatorFunction;
import com.google.devtools.build.lib.rules.repository.RepositoryLoaderFunction;
@@ -57,6 +58,9 @@
private static final ImmutableList<BuildFileName> BUILD_FILES_BY_PRIORITY =
BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY;
+ private static final ExternalPackageHelper EXTERNAL_PACKAGE_HELPER =
+ BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER;
+
/** Returns a fresh {@link Builder} instance. */
public static Builder builder(Root workspaceDir, Path installBase, Path outputBase) {
// Prevent PackageLoader from fetching any remote repositories; these should only be fetched by
@@ -85,6 +89,7 @@
installBase,
outputBase,
BUILD_FILES_BY_PRIORITY,
+ EXTERNAL_PACKAGE_HELPER,
ExternalFileAction.DEPEND_ON_EXTERNAL_PKG_FOR_EXTERNAL_REPO_PATHS);
this.isFetch = isFetch;
}
@@ -106,7 +111,9 @@
externalFilesHelper, new AtomicReference<>(UnixGlob.DEFAULT_SYSCALLS)))
.put(SkyFunctions.ACTION_ENVIRONMENT_VARIABLE, new ActionEnvironmentFunction())
.put(SkyFunctions.DIRECTORY_LISTING, new DirectoryListingFunction())
- .put(SkyFunctions.LOCAL_REPOSITORY_LOOKUP, new LocalRepositoryLookupFunction())
+ .put(
+ SkyFunctions.LOCAL_REPOSITORY_LOOKUP,
+ new LocalRepositoryLookupFunction(EXTERNAL_PACKAGE_HELPER))
.put(
SkyFunctions.REPOSITORY_DIRECTORY,
new RepositoryDelegatorFunction(
@@ -115,7 +122,8 @@
isFetch,
ImmutableMap::of,
directories,
- ManagedDirectoriesKnowledge.NO_MANAGED_DIRECTORIES))
+ ManagedDirectoriesKnowledge.NO_MANAGED_DIRECTORIES,
+ EXTERNAL_PACKAGE_HELPER))
.put(SkyFunctions.REPOSITORY, new RepositoryLoaderFunction())
.build());
addExtraPrecomputedValues(
@@ -165,6 +173,11 @@
}
@Override
+ protected ExternalPackageHelper getExternalPackageHelper() {
+ return EXTERNAL_PACKAGE_HELPER;
+ }
+
+ @Override
protected ActionOnIOExceptionReadingBuildFile getActionOnIOExceptionReadingBuildFile() {
return BazelSkyframeExecutorConstants.ACTION_ON_IO_EXCEPTION_READING_BUILD_FILE;
}
diff --git a/src/test/java/com/google/devtools/build/lib/BUILD b/src/test/java/com/google/devtools/build/lib/BUILD
index 4b40fcc..ee164fe 100644
--- a/src/test/java/com/google/devtools/build/lib/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/BUILD
@@ -470,6 +470,7 @@
"//src/test/java/com/google/devtools/build/skyframe:testutil",
"//third_party:auto_value",
"//third_party:guava",
+ "//third_party:mockito",
"//third_party:truth",
],
)
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisMock.java b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisMock.java
index 43b2733..decc03e 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisMock.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisMock.java
@@ -34,6 +34,7 @@
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.skyframe.BazelSkyframeExecutorConstants;
import com.google.devtools.build.lib.skyframe.SkyFunctions;
import com.google.devtools.build.lib.skyframe.packages.PackageFactoryBuilderWithSkyframeForTesting;
import com.google.devtools.build.lib.testutil.TestConstants;
@@ -132,7 +133,8 @@
new AtomicBoolean(true),
ImmutableMap::of,
directories,
- ManagedDirectoriesKnowledge.NO_MANAGED_DIRECTORIES),
+ ManagedDirectoriesKnowledge.NO_MANAGED_DIRECTORIES,
+ BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER),
SkyFunctions.REPOSITORY,
new RepositoryLoaderFunction(),
CcSkyframeFdoSupportValue.SKYFUNCTION,
diff --git a/src/test/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryIntegrationTest.java b/src/test/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryIntegrationTest.java
index 94be36d..1143a26 100644
--- a/src/test/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryIntegrationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/bazel/repository/skylark/SkylarkRepositoryIntegrationTest.java
@@ -33,6 +33,7 @@
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.skyframe.BazelSkyframeExecutorConstants;
import com.google.devtools.build.lib.skyframe.ConfiguredTargetAndData;
import com.google.devtools.build.lib.skyframe.SkyFunctions;
import com.google.devtools.build.lib.skylarkbuildapi.repository.RepositoryBootstrap;
@@ -85,7 +86,8 @@
new AtomicBoolean(true),
ImmutableMap::of,
directories,
- ManagedDirectoriesKnowledge.NO_MANAGED_DIRECTORIES);
+ ManagedDirectoriesKnowledge.NO_MANAGED_DIRECTORIES,
+ BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER);
return ImmutableMap.of(
SkyFunctions.REPOSITORY_DIRECTORY,
function,
diff --git a/src/test/java/com/google/devtools/build/lib/repository/ExternalPackageUtilTest.java b/src/test/java/com/google/devtools/build/lib/repository/ExternalPackageHelperTest.java
similarity index 71%
rename from src/test/java/com/google/devtools/build/lib/repository/ExternalPackageUtilTest.java
rename to src/test/java/com/google/devtools/build/lib/repository/ExternalPackageHelperTest.java
index 6476dfb..55a936f 100644
--- a/src/test/java/com/google/devtools/build/lib/repository/ExternalPackageUtilTest.java
+++ b/src/test/java/com/google/devtools/build/lib/repository/ExternalPackageHelperTest.java
@@ -16,6 +16,8 @@
import static com.google.common.truth.Truth.assertThat;
import static com.google.devtools.build.skyframe.EvaluationResultSubjectFactory.assertThatEvaluationResult;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
import com.google.auto.value.AutoValue;
import com.google.common.base.Optional;
@@ -29,6 +31,7 @@
import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
import com.google.devtools.build.lib.cmdline.PackageIdentifier;
import com.google.devtools.build.lib.events.NullEventHandler;
+import com.google.devtools.build.lib.packages.BuildFileName;
import com.google.devtools.build.lib.packages.Rule;
import com.google.devtools.build.lib.packages.RuleClassProvider;
import com.google.devtools.build.lib.packages.WorkspaceFileValue;
@@ -53,6 +56,7 @@
import com.google.devtools.build.lib.skyframe.WorkspaceFileFunction;
import com.google.devtools.build.lib.syntax.StarlarkSemantics;
import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor;
+import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.Root;
import com.google.devtools.build.lib.vfs.RootedPath;
import com.google.devtools.build.lib.vfs.UnixGlob;
@@ -65,6 +69,7 @@
import com.google.devtools.build.skyframe.SequencedRecordingDifferencer;
import com.google.devtools.build.skyframe.SequentialBuildDriver;
import com.google.devtools.build.skyframe.SkyFunction;
+import com.google.devtools.build.skyframe.SkyFunction.Environment;
import com.google.devtools.build.skyframe.SkyFunctionException;
import com.google.devtools.build.skyframe.SkyFunctionName;
import com.google.devtools.build.skyframe.SkyKey;
@@ -79,9 +84,17 @@
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;
-/** Unit tests for {@link ExternalPackageUtil}. */
+/** Unit tests for {@link ExternalPackageHelper}. */
@RunWith(JUnit4.class)
-public class ExternalPackageUtilTest extends BuildViewTestCase {
+public class ExternalPackageHelperTest extends BuildViewTestCase {
+ private static final Root MOCK_ROOT = mockRoot();
+
+ private static Root mockRoot() {
+ Root root = mock(Root.class);
+ when(root.isAbsolute()).thenReturn(false);
+ return root;
+ }
+
private static final EvaluationContext EVALUATION_OPTIONS =
EvaluationContext.newBuilder()
.setKeepGoing(false)
@@ -120,7 +133,8 @@
new PackageLookupFunction(
deletedPackages,
CrossRepositoryLabelViolationStrategy.ERROR,
- BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY));
+ BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY,
+ BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER));
skyFunctions.put(
FileStateValue.FILE_STATE,
new FileStateFunction(
@@ -140,9 +154,22 @@
directories,
/*starlarkImportLookupFunctionForInlining=*/ null));
skyFunctions.put(
- SkyFunctions.PACKAGE, new PackageFunction(null, null, null, null, null, null, null));
- skyFunctions.put(SkyFunctions.EXTERNAL_PACKAGE, new ExternalPackageFunction());
- skyFunctions.put(SkyFunctions.LOCAL_REPOSITORY_LOOKUP, new LocalRepositoryLookupFunction());
+ SkyFunctions.PACKAGE,
+ new PackageFunction(
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ null,
+ BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER));
+ skyFunctions.put(
+ SkyFunctions.EXTERNAL_PACKAGE,
+ new ExternalPackageFunction(BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER));
+ skyFunctions.put(
+ SkyFunctions.LOCAL_REPOSITORY_LOOKUP,
+ new LocalRepositoryLookupFunction(BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER));
// Helper Skyfunctions to call ExternalPackageUtil.
skyFunctions.put(GET_RULE_BY_NAME_FUNCTION, new GetRuleByNameFunction());
@@ -198,24 +225,72 @@
}
@Test
- public void getRegisteredToolchains() throws Exception {
+ public void getRegisteredToolchains_addedInWorkspace() throws Exception {
scratch.overwriteFile(
"WORKSPACE", "register_toolchains(", " '//toolchain:tc1',", " '//toolchain:tc2')");
- SkyKey key = getRegisteredToolchainsKey();
- EvaluationResult<GetRegisteredToolchainsValue> result = getRegisteredToolchains(key);
-
- assertThatEvaluationResult(result).hasNoError();
-
- assertThat(result.get(key).registeredToolchains())
+ assertThat(getRegisteredToolchains())
// There are default toolchains that are always registered, so just check for the ones added
.containsAtLeast("//toolchain:tc1", "//toolchain:tc2")
.inOrder();
}
- EvaluationResult<GetRegisteredToolchainsValue> getRegisteredToolchains(SkyKey key)
- throws InterruptedException {
- return driver.<GetRegisteredToolchainsValue>evaluate(ImmutableList.of(key), EVALUATION_OPTIONS);
+ @Test
+ public void getRegisteredToolchains_workspaceBazelPreferred() throws Exception {
+ scratch.overwriteFile("WORKSPACE", "register_toolchains('//toolchain:WORKSPACE')");
+ scratch.overwriteFile("WORKSPACE.bazel", "register_toolchains('//toolchain:WORKSPACE_bazel')");
+
+ getRegisteredToolchains();
+ ImmutableList<String> registeredToolchains = getRegisteredToolchains();
+
+ assertThat(registeredToolchains).contains("//toolchain:WORKSPACE_bazel");
+ assertThat(registeredToolchains).doesNotContain("//toolchain:WORKSPACE");
+ }
+
+ @Test
+ public void getRegisteredToolchains_workspaceBazelNotAFile() throws Exception {
+ scratch.overwriteFile("WORKSPACE", "register_toolchains('//toolchain:WORKSPACE')");
+ scratch.dir("WORKSPACE.bazel");
+
+ getRegisteredToolchains();
+ ImmutableList<String> registeredToolchains = getRegisteredToolchains();
+
+ assertThat(registeredToolchains).contains("//toolchain:WORKSPACE");
+ }
+
+ @Test
+ public void findWorkspaceFile_firstIsFile() throws Exception {
+ ExternalPackageHelper helper =
+ new ExternalPackageHelper(
+ ImmutableList.of(BuildFileName.WORKSPACE, BuildFileName.WORKSPACE_DOT_BAZEL));
+ Environment env = createMockEnvironment();
+ mockFileValue(env, BuildFileName.WORKSPACE, /*isFile=*/ true);
+
+ assertThat(helper.findWorkspaceFile(env)).isEqualTo(rootedPath(BuildFileName.WORKSPACE));
+ }
+
+ @Test
+ public void findWorkspaceFile_firstNotAFileFallbackToSecond() throws Exception {
+ ExternalPackageHelper helper =
+ new ExternalPackageHelper(
+ ImmutableList.of(BuildFileName.WORKSPACE_DOT_BAZEL, BuildFileName.WORKSPACE));
+ Environment env = createMockEnvironment();
+ mockFileValue(env, BuildFileName.WORKSPACE_DOT_BAZEL, /*isFile=*/ false);
+ mockFileValue(env, BuildFileName.WORKSPACE, /*isFile=*/ true);
+
+ assertThat(helper.findWorkspaceFile(env)).isEqualTo(rootedPath(BuildFileName.WORKSPACE));
+ }
+
+ @Test
+ public void findWorkspaceFile_noneAreFilesReturnLast() throws Exception {
+ ExternalPackageHelper helper =
+ new ExternalPackageHelper(
+ ImmutableList.of(BuildFileName.WORKSPACE_DOT_BAZEL, BuildFileName.WORKSPACE));
+ Environment env = createMockEnvironment();
+ mockFileValue(env, BuildFileName.WORKSPACE_DOT_BAZEL, /*isFile=*/ false);
+ mockFileValue(env, BuildFileName.WORKSPACE, /*isFile=*/ false);
+
+ assertThat(helper.findWorkspaceFile(env)).isEqualTo(rootedPath(BuildFileName.WORKSPACE));
}
@Test
@@ -223,7 +298,7 @@
scratch.overwriteFile(
"WORKSPACE", "register_execution_platforms(", " '//platform:ep1',", " '//platform:ep2')");
- SkyKey key = getRegisteredExecutionPlatformsKey();
+ SkyKey key = () -> GET_REGISTERED_EXECUTION_PLATFORMS_FUNCTION;
EvaluationResult<GetRegisteredExecutionPlatformsValue> result =
getRegisteredExecutionPlatforms(key);
@@ -242,6 +317,36 @@
// HELPER SKYFUNCTIONS
+ private static Environment createMockEnvironment() throws InterruptedException {
+ Environment env = mock(Environment.class);
+ when(env.getValue(PrecomputedValue.PATH_PACKAGE_LOCATOR.getKeyForTesting()))
+ .thenReturn(
+ new PrecomputedValue(
+ new PathPackageLocator(
+ mock(Path.class), ImmutableList.of(MOCK_ROOT), ImmutableList.of())));
+ return env;
+ }
+
+ private static void mockFileValue(Environment env, BuildFileName buildFileName, boolean isFile)
+ throws InterruptedException {
+ FileValue fileValue = mock(FileValue.class);
+ when(fileValue.isFile()).thenReturn(isFile);
+ when(env.getValue(FileValue.key(rootedPath(buildFileName)))).thenReturn(fileValue);
+ }
+
+ private static RootedPath rootedPath(BuildFileName buildFileName) {
+ return RootedPath.toRootedPath(MOCK_ROOT, buildFileName.getFilenameFragment());
+ }
+
+ private ImmutableList<String> getRegisteredToolchains() throws InterruptedException {
+ SkyKey key = getRegisteredToolchainsKey();
+ EvaluationResult<GetRegisteredToolchainsValue> result =
+ driver.evaluate(ImmutableList.of(key), EVALUATION_OPTIONS);
+
+ assertThatEvaluationResult(result).hasNoError();
+ return result.get(key).registeredToolchains();
+ }
+
// GetRuleByName.
private static SkyKey getRuleByNameKey(String ruleName) {
return new Key(ruleName);
@@ -255,7 +360,7 @@
abstract Rule rule();
static GetRuleByNameValue create(Rule rule) {
- return new AutoValue_ExternalPackageUtilTest_GetRuleByNameValue(rule);
+ return new AutoValue_ExternalPackageHelperTest_GetRuleByNameValue(rule);
}
}
@@ -267,7 +372,8 @@
throws SkyFunctionException, InterruptedException {
String ruleName = (String) skyKey.argument();
- Rule rule = ExternalPackageUtil.getRuleByName(ruleName, env);
+ Rule rule =
+ BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER.getRuleByName(ruleName, env);
if (rule == null) {
return null;
}
@@ -294,7 +400,7 @@
abstract ImmutableList<String> registeredToolchains();
static GetRegisteredToolchainsValue create(Iterable<String> registeredToolchains) {
- return new AutoValue_ExternalPackageUtilTest_GetRegisteredToolchainsValue(
+ return new AutoValue_ExternalPackageHelperTest_GetRegisteredToolchainsValue(
ImmutableList.copyOf(registeredToolchains));
}
}
@@ -319,11 +425,6 @@
}
}
- // GetRegisteredExecutionPlatforms.
- private static SkyKey getRegisteredExecutionPlatformsKey() {
- return () -> GET_REGISTERED_EXECUTION_PLATFORMS_FUNCTION;
- }
-
private static final SkyFunctionName GET_REGISTERED_EXECUTION_PLATFORMS_FUNCTION =
SkyFunctionName.createHermetic("GET_REGISTERED_EXECUTION_PLATFORMS_FUNCTION");
@@ -333,7 +434,7 @@
static GetRegisteredExecutionPlatformsValue create(
Iterable<String> registeredExecutionPlatforms) {
- return new AutoValue_ExternalPackageUtilTest_GetRegisteredExecutionPlatformsValue(
+ return new AutoValue_ExternalPackageHelperTest_GetRegisteredExecutionPlatformsValue(
ImmutableList.copyOf(registeredExecutionPlatforms));
}
}
diff --git a/src/test/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorTest.java b/src/test/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorTest.java
index 8ebc7f1..4055ddd 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/repository/RepositoryDelegatorTest.java
@@ -130,7 +130,8 @@
new AtomicBoolean(true),
ImmutableMap::of,
directories,
- managedDirectoriesKnowledge);
+ managedDirectoriesKnowledge,
+ BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER);
AtomicReference<PathPackageLocator> pkgLocator =
new AtomicReference<>(
new PathPackageLocator(
@@ -172,13 +173,14 @@
.put(SkyFunctions.REPOSITORY_DIRECTORY, delegatorFunction)
.put(
SkyFunctions.PACKAGE,
- new PackageFunction(null, null, null, null, null, null, null))
+ new PackageFunction(null, null, null, null, null, null, null, null))
.put(
SkyFunctions.PACKAGE_LOOKUP,
new PackageLookupFunction(
new AtomicReference<>(ImmutableSet.of()),
CrossRepositoryLabelViolationStrategy.ERROR,
- BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY))
+ BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY,
+ BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER))
.put(SkyFunctions.WORKSPACE_AST, new WorkspaceASTFunction(ruleClassProvider))
.put(
WorkspaceFileValue.WORKSPACE_FILE,
@@ -190,8 +192,14 @@
directories,
starlarkImportLookupFunction))
.put(SkyFunctions.REPOSITORY, new RepositoryLoaderFunction())
- .put(SkyFunctions.LOCAL_REPOSITORY_LOOKUP, new LocalRepositoryLookupFunction())
- .put(SkyFunctions.EXTERNAL_PACKAGE, new ExternalPackageFunction())
+ .put(
+ SkyFunctions.LOCAL_REPOSITORY_LOOKUP,
+ new LocalRepositoryLookupFunction(
+ BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER))
+ .put(
+ SkyFunctions.EXTERNAL_PACKAGE,
+ new ExternalPackageFunction(
+ BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER))
.put(SkyFunctions.PRECOMPUTED, new PrecomputedFunction())
.put(SkyFunctions.AST_FILE_LOOKUP, new ASTFileLookupFunction(ruleClassProvider))
.put(SkyFunctions.CONTAINING_PACKAGE_LOOKUP, new ContainingPackageLookupFunction())
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTestCase.java b/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTestCase.java
index 51a339f..95472e0 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/ArtifactFunctionTestCase.java
@@ -88,10 +88,12 @@
root,
/* defaultSystemJavabase= */ null,
TestConstants.PRODUCT_NAME);
- ExternalFilesHelper externalFilesHelper = ExternalFilesHelper.createForTesting(
- pkgLocator,
- ExternalFileAction.DEPEND_ON_EXTERNAL_PKG_FOR_EXTERNAL_REPO_PATHS,
- directories);
+ ExternalFilesHelper externalFilesHelper =
+ ExternalFilesHelper.createForTesting(
+ pkgLocator,
+ ExternalFileAction.DEPEND_ON_EXTERNAL_PKG_FOR_EXTERNAL_REPO_PATHS,
+ directories,
+ BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER);
differencer = new SequencedRecordingDifferencer();
evaluator =
new InMemoryMemoizingEvaluator(
@@ -107,13 +109,14 @@
.put(SkyFunctions.ACTION_EXECUTION, new SimpleActionExecutionFunction())
.put(
SkyFunctions.PACKAGE,
- new PackageFunction(null, null, null, null, null, null, null))
+ new PackageFunction(null, null, null, null, null, null, null, null))
.put(
SkyFunctions.PACKAGE_LOOKUP,
new PackageLookupFunction(
null,
CrossRepositoryLabelViolationStrategy.ERROR,
- BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY))
+ BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY,
+ BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER))
.put(
SkyFunctions.WORKSPACE_AST,
new WorkspaceASTFunction(TestRuleClassProvider.getRuleClassProvider()))
@@ -126,7 +129,10 @@
.build(TestRuleClassProvider.getRuleClassProvider(), fs),
directories,
/*starlarkImportLookupFunctionForInlining=*/ null))
- .put(SkyFunctions.EXTERNAL_PACKAGE, new ExternalPackageFunction())
+ .put(
+ SkyFunctions.EXTERNAL_PACKAGE,
+ new ExternalPackageFunction(
+ BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER))
.put(
SkyFunctions.ACTION_TEMPLATE_EXPANSION,
new ActionTemplateExpansionFunction(actionKeyContext))
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupFunctionTest.java
index a89220b..5cd51aa 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/ContainingPackageLookupFunctionTest.java
@@ -110,9 +110,10 @@
new PackageLookupFunction(
deletedPackages,
CrossRepositoryLabelViolationStrategy.ERROR,
- BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY));
+ BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY,
+ BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER));
skyFunctions.put(
- SkyFunctions.PACKAGE, new PackageFunction(null, null, null, null, null, null, null));
+ SkyFunctions.PACKAGE, new PackageFunction(null, null, null, null, null, null, null, null));
skyFunctions.put(
SkyFunctions.BLACKLISTED_PACKAGE_PREFIXES,
new BlacklistedPackagePrefixesFunction(
@@ -140,8 +141,12 @@
.build(ruleClassProvider, fileSystem),
directories,
/*starlarkImportLookupFunctionForInlining=*/ null));
- skyFunctions.put(SkyFunctions.EXTERNAL_PACKAGE, new ExternalPackageFunction());
- skyFunctions.put(SkyFunctions.LOCAL_REPOSITORY_LOOKUP, new LocalRepositoryLookupFunction());
+ skyFunctions.put(
+ SkyFunctions.EXTERNAL_PACKAGE,
+ new ExternalPackageFunction(BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER));
+ skyFunctions.put(
+ SkyFunctions.LOCAL_REPOSITORY_LOOKUP,
+ new LocalRepositoryLookupFunction(BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER));
skyFunctions.put(
SkyFunctions.FILE_SYMLINK_CYCLE_UNIQUENESS, new FileSymlinkCycleUniquenessFunction());
ImmutableMap<String, RepositoryFunction> repositoryHandlers =
@@ -155,7 +160,8 @@
new AtomicBoolean(true),
ImmutableMap::of,
directories,
- ManagedDirectoriesKnowledge.NO_MANAGED_DIRECTORIES));
+ ManagedDirectoriesKnowledge.NO_MANAGED_DIRECTORIES,
+ BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER));
skyFunctions.put(SkyFunctions.REPOSITORY, new RepositoryLoaderFunction());
differencer = new SequencedRecordingDifferencer();
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/FileFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/FileFunctionTest.java
index 4f15eb2..b8badae 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/FileFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/FileFunctionTest.java
@@ -174,13 +174,14 @@
.put(FileValue.FILE, new FileFunction(pkgLocatorRef))
.put(
SkyFunctions.PACKAGE,
- new PackageFunction(null, null, null, null, null, null, null))
+ new PackageFunction(null, null, null, null, null, null, null, null))
.put(
SkyFunctions.PACKAGE_LOOKUP,
new PackageLookupFunction(
new AtomicReference<>(ImmutableSet.of()),
CrossRepositoryLabelViolationStrategy.ERROR,
- BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY))
+ BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY,
+ BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER))
.put(SkyFunctions.WORKSPACE_AST, new WorkspaceASTFunction(ruleClassProvider))
.put(
WorkspaceFileValue.WORKSPACE_FILE,
@@ -191,8 +192,14 @@
.build(ruleClassProvider, fs),
directories,
/*starlarkImportLookupFunctionForInlining=*/ null))
- .put(SkyFunctions.EXTERNAL_PACKAGE, new ExternalPackageFunction())
- .put(SkyFunctions.LOCAL_REPOSITORY_LOOKUP, new LocalRepositoryLookupFunction())
+ .put(
+ SkyFunctions.EXTERNAL_PACKAGE,
+ new ExternalPackageFunction(
+ BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER))
+ .put(
+ SkyFunctions.LOCAL_REPOSITORY_LOOKUP,
+ new LocalRepositoryLookupFunction(
+ BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER))
.build(),
differencer);
PrecomputedValue.BUILD_ID.set(differencer, UUID.randomUUID());
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunctionTest.java
index 60fd338..bebd3f5 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunctionTest.java
@@ -125,7 +125,8 @@
new PackageLookupFunction(
deletedPackages,
CrossRepositoryLabelViolationStrategy.ERROR,
- BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY));
+ BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY,
+ BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER));
skyFunctions.put(
SkyFunctions.BLACKLISTED_PACKAGE_PREFIXES,
new BlacklistedPackagePrefixesFunction(
@@ -133,7 +134,9 @@
skyFunctions.put(
SkyFunctions.FILESET_ENTRY, new FilesetEntryFunction((unused) -> rootDirectory));
skyFunctions.put(SkyFunctions.WORKSPACE_NAME, new TestWorkspaceNameFunction());
- skyFunctions.put(SkyFunctions.LOCAL_REPOSITORY_LOOKUP, new LocalRepositoryLookupFunction());
+ skyFunctions.put(
+ SkyFunctions.LOCAL_REPOSITORY_LOOKUP,
+ new LocalRepositoryLookupFunction(BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER));
differencer = new SequencedRecordingDifferencer();
evaluator = new InMemoryMemoizingEvaluator(skyFunctions, differencer);
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java
index f7e1c21..f9ebf7f 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/FilesystemValueCheckerTest.java
@@ -152,14 +152,15 @@
skyFunctions.put(
SkyFunctions.FILE_SYMLINK_INFINITE_EXPANSION_UNIQUENESS,
new FileSymlinkInfiniteExpansionUniquenessFunction());
- skyFunctions.put(SkyFunctions.PACKAGE,
- new PackageFunction(null, null, null, null, null, null, null));
+ skyFunctions.put(
+ SkyFunctions.PACKAGE, new PackageFunction(null, null, null, null, null, null, null, null));
skyFunctions.put(
SkyFunctions.PACKAGE_LOOKUP,
new PackageLookupFunction(
new AtomicReference<>(ImmutableSet.<PackageIdentifier>of()),
CrossRepositoryLabelViolationStrategy.ERROR,
- BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY));
+ BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY,
+ BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER));
skyFunctions.put(SkyFunctions.WORKSPACE_AST,
new WorkspaceASTFunction(TestRuleClassProvider.getRuleClassProvider()));
skyFunctions.put(
@@ -171,7 +172,9 @@
.build(TestRuleClassProvider.getRuleClassProvider(), fs),
directories,
/*starlarkImportLookupFunctionForInlining=*/ null));
- skyFunctions.put(SkyFunctions.EXTERNAL_PACKAGE, new ExternalPackageFunction());
+ skyFunctions.put(
+ SkyFunctions.EXTERNAL_PACKAGE,
+ new ExternalPackageFunction(BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER));
differencer = new SequencedRecordingDifferencer();
evaluator = new InMemoryMemoizingEvaluator(skyFunctions.build(), differencer);
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/GlobFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/GlobFunctionTest.java
index c245ae4..9ce1d92 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/GlobFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/GlobFunctionTest.java
@@ -169,7 +169,8 @@
new PackageLookupFunction(
deletedPackages,
CrossRepositoryLabelViolationStrategy.ERROR,
- BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY));
+ BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY,
+ BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER));
skyFunctions.put(
SkyFunctions.BLACKLISTED_PACKAGE_PREFIXES,
BazelSkyframeExecutorConstants.BLACKLISTED_PACKAGE_PREFIXES_FUNCTION);
@@ -198,8 +199,12 @@
.build(ruleClassProvider, fs),
directories,
/*starlarkImportLookupFunctionForInlining=*/ null));
- skyFunctions.put(SkyFunctions.EXTERNAL_PACKAGE, new ExternalPackageFunction());
- skyFunctions.put(SkyFunctions.LOCAL_REPOSITORY_LOOKUP, new LocalRepositoryLookupFunction());
+ skyFunctions.put(
+ SkyFunctions.EXTERNAL_PACKAGE,
+ new ExternalPackageFunction(BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER));
+ skyFunctions.put(
+ SkyFunctions.LOCAL_REPOSITORY_LOOKUP,
+ new LocalRepositoryLookupFunction(BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER));
return skyFunctions;
}
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/LocalRepositoryLookupFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/LocalRepositoryLookupFunctionTest.java
index 6505635..dcf4a09 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/LocalRepositoryLookupFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/LocalRepositoryLookupFunctionTest.java
@@ -93,7 +93,8 @@
new PackageLookupFunction(
deletedPackages,
CrossRepositoryLabelViolationStrategy.ERROR,
- BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY));
+ BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY,
+ BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER));
skyFunctions.put(
FileStateValue.FILE_STATE,
new FileStateFunction(
@@ -117,8 +118,12 @@
.build(ruleClassProvider, fileSystem),
directories,
/*starlarkImportLookupFunctionForInlining=*/ null));
- skyFunctions.put(SkyFunctions.EXTERNAL_PACKAGE, new ExternalPackageFunction());
- skyFunctions.put(SkyFunctions.LOCAL_REPOSITORY_LOOKUP, new LocalRepositoryLookupFunction());
+ skyFunctions.put(
+ SkyFunctions.EXTERNAL_PACKAGE,
+ new ExternalPackageFunction(BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER));
+ skyFunctions.put(
+ SkyFunctions.LOCAL_REPOSITORY_LOOKUP,
+ new LocalRepositoryLookupFunction(BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER));
skyFunctions.put(
SkyFunctions.FILE_SYMLINK_CYCLE_UNIQUENESS, new FileSymlinkCycleUniquenessFunction());
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java
index 19c7632..e297fc8 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/PackageLookupFunctionTest.java
@@ -118,10 +118,10 @@
new PackageLookupFunction(
deletedPackages,
crossRepositoryLabelViolationStrategy(),
- BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY));
+ BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY,
+ BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER));
skyFunctions.put(
- SkyFunctions.PACKAGE,
- new PackageFunction(null, null, null, null, null, null, null));
+ SkyFunctions.PACKAGE, new PackageFunction(null, null, null, null, null, null, null, null));
skyFunctions.put(
FileStateValue.FILE_STATE,
new FileStateFunction(
@@ -149,8 +149,12 @@
.build(ruleClassProvider, fileSystem),
directories,
/*starlarkImportLookupFunctionForInlining=*/ null));
- skyFunctions.put(SkyFunctions.EXTERNAL_PACKAGE, new ExternalPackageFunction());
- skyFunctions.put(SkyFunctions.LOCAL_REPOSITORY_LOOKUP, new LocalRepositoryLookupFunction());
+ skyFunctions.put(
+ SkyFunctions.EXTERNAL_PACKAGE,
+ new ExternalPackageFunction(BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER));
+ skyFunctions.put(
+ SkyFunctions.LOCAL_REPOSITORY_LOOKUP,
+ new LocalRepositoryLookupFunction(BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER));
skyFunctions.put(
SkyFunctions.FILE_SYMLINK_CYCLE_UNIQUENESS, new FileSymlinkCycleUniquenessFunction());
@@ -165,7 +169,8 @@
new AtomicBoolean(true),
ImmutableMap::of,
directories,
- ManagedDirectoriesKnowledge.NO_MANAGED_DIRECTORIES));
+ ManagedDirectoriesKnowledge.NO_MANAGED_DIRECTORIES,
+ BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER));
skyFunctions.put(SkyFunctions.REPOSITORY, new RepositoryLoaderFunction());
differencer = new SequencedRecordingDifferencer();
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java
index f563cc7..74fda80 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunctionTest.java
@@ -157,13 +157,14 @@
new PackageLookupFunction(
deletedPackages,
CrossRepositoryLabelViolationStrategy.ERROR,
- BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY));
+ BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY,
+ BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER));
skyFunctions.put(
SkyFunctions.BLACKLISTED_PACKAGE_PREFIXES,
new BlacklistedPackagePrefixesFunction(
/*blacklistedPackagePrefixesFile=*/ PathFragment.EMPTY_FRAGMENT));
- skyFunctions.put(SkyFunctions.PACKAGE,
- new PackageFunction(null, null, null, null, null, null, null));
+ skyFunctions.put(
+ SkyFunctions.PACKAGE, new PackageFunction(null, null, null, null, null, null, null, null));
skyFunctions.put(SkyFunctions.WORKSPACE_AST, new WorkspaceASTFunction(ruleClassProvider));
skyFunctions.put(
WorkspaceFileValue.WORKSPACE_FILE,
@@ -174,8 +175,12 @@
.build(ruleClassProvider, fileSystem),
directories,
/*starlarkImportLookupFunctionForInlining=*/ null));
- skyFunctions.put(SkyFunctions.EXTERNAL_PACKAGE, new ExternalPackageFunction());
- skyFunctions.put(SkyFunctions.LOCAL_REPOSITORY_LOOKUP, new LocalRepositoryLookupFunction());
+ skyFunctions.put(
+ SkyFunctions.EXTERNAL_PACKAGE,
+ new ExternalPackageFunction(BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER));
+ skyFunctions.put(
+ SkyFunctions.LOCAL_REPOSITORY_LOOKUP,
+ new LocalRepositoryLookupFunction(BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER));
skyFunctions.put(
SkyFunctions.FILE_SYMLINK_INFINITE_EXPANSION_UNIQUENESS,
new FileSymlinkInfiniteExpansionUniquenessFunction());
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java b/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java
index e482577..a7635bb 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java
@@ -246,13 +246,14 @@
new ActionExecutionFunction(skyframeActionExecutor, directories, tsgmRef))
.put(
SkyFunctions.PACKAGE,
- new PackageFunction(null, null, null, null, null, null, null))
+ new PackageFunction(null, null, null, null, null, null, null, null))
.put(
SkyFunctions.PACKAGE_LOOKUP,
new PackageLookupFunction(
null,
CrossRepositoryLabelViolationStrategy.ERROR,
- BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY))
+ BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY,
+ BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER))
.put(
SkyFunctions.WORKSPACE_AST,
new WorkspaceASTFunction(TestRuleClassProvider.getRuleClassProvider()))
@@ -265,7 +266,10 @@
.build(TestRuleClassProvider.getRuleClassProvider(), fileSystem),
directories,
/*starlarkImportLookupFunctionForInlining=*/ null))
- .put(SkyFunctions.EXTERNAL_PACKAGE, new ExternalPackageFunction())
+ .put(
+ SkyFunctions.EXTERNAL_PACKAGE,
+ new ExternalPackageFunction(
+ BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER))
.put(
SkyFunctions.ACTION_TEMPLATE_EXPANSION,
new DelegatingActionTemplateExpansionFunction())
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunctionTest.java
index 31aaddb..a50493e 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/WorkspaceFileFunctionTest.java
@@ -138,7 +138,8 @@
pkgFactory,
directories,
/*starlarkImportLookupFunctionForInlining=*/ null);
- externalSkyFunc = new ExternalPackageFunction();
+ externalSkyFunc =
+ new ExternalPackageFunction(BazelSkyframeExecutorConstants.EXTERNAL_PACKAGE_HELPER);
astSkyFunc = new WorkspaceASTFunction(ruleClassProvider);
fakeWorkspaceFileValue = new FakeFileValue();
}