aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build
diff options
context:
space:
mode:
authorGravatar John Cater <jcater@google.com>2016-10-12 17:23:30 +0000
committerGravatar Yue Gan <yueg@google.com>2016-10-13 08:52:42 +0000
commit5e9ce943bf24fef5e95231f2507344ea24f5c732 (patch)
tree0aea4233ab143e52682bdf029d5ca24c6282e2b4 /src/main/java/com/google/devtools/build
parentfac9be905f0f82f793eb1cc61afab42698769dcf (diff)
Adds an enum to describe how PackageLookupFunction should handle package labels
which cross into a sub-repository. Part of #1592. -- MOS_MIGRATED_REVID=135931868
Diffstat (limited to 'src/main/java/com/google/devtools/build')
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/PackageLookupFunction.java22
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java22
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorFactory.java4
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java11
4 files changed, 46 insertions, 13 deletions
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 6e425e8dd7..8654501138 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
@@ -39,11 +39,22 @@ import javax.annotation.Nullable;
* SkyFunction for {@link PackageLookupValue}s.
*/
public class PackageLookupFunction implements SkyFunction {
+ /** Lists possible ways to handle a package label which crosses into a new repository. */
+ public enum CrossRepositoryLabelViolationStrategy {
+ /** Ignore the violation. */
+ IGNORE,
+ /** Generate an error. */
+ ERROR;
+ }
private final AtomicReference<ImmutableSet<PackageIdentifier>> deletedPackages;
+ private final CrossRepositoryLabelViolationStrategy crossRepositoryLabelViolationStrategy;
- public PackageLookupFunction(AtomicReference<ImmutableSet<PackageIdentifier>> deletedPackages) {
+ public PackageLookupFunction(
+ AtomicReference<ImmutableSet<PackageIdentifier>> deletedPackages,
+ CrossRepositoryLabelViolationStrategy crossRepositoryLabelViolationStrategy) {
this.deletedPackages = deletedPackages;
+ this.crossRepositoryLabelViolationStrategy = crossRepositoryLabelViolationStrategy;
}
@Override
@@ -123,7 +134,7 @@ public class PackageLookupFunction implements SkyFunction {
return fileValue;
}
- private static PackageLookupValue getPackageLookupValue(
+ private PackageLookupValue getPackageLookupValue(
Environment env,
ImmutableList<Path> packagePathEntries,
PackageIdentifier packageIdentifier,
@@ -137,6 +148,11 @@ public class PackageLookupFunction implements SkyFunction {
PathFragment buildFileFragment = buildFileName.getBuildFileFragment(packageIdentifier);
RootedPath buildFileRootedPath = RootedPath.toRootedPath(packagePathEntry,
buildFileFragment);
+
+ if (crossRepositoryLabelViolationStrategy != CrossRepositoryLabelViolationStrategy.IGNORE) {
+ // TODO(jcater): Check for cross repository package label violations.
+ }
+
FileValue fileValue = getFileValue(buildFileRootedPath, env, packageIdentifier);
if (fileValue == null) {
return null;
@@ -148,7 +164,7 @@ public class PackageLookupFunction implements SkyFunction {
return PackageLookupValue.NO_BUILD_FILE_VALUE;
}
- private static PackageLookupValue computeWorkspacePackageLookupValue(
+ private PackageLookupValue computeWorkspacePackageLookupValue(
Environment env, ImmutableList<Path> packagePathEntries)
throws PackageLookupFunctionException, InterruptedException {
PackageLookupValue result =
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 bda49c2284..03f0b34ed9 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
@@ -46,6 +46,7 @@ import com.google.devtools.build.lib.skyframe.DirtinessCheckerUtils.MissingDiffD
import com.google.devtools.build.lib.skyframe.DirtinessCheckerUtils.UnionDirtinessChecker;
import com.google.devtools.build.lib.skyframe.ExternalFilesHelper.ExternalFilesKnowledge;
import com.google.devtools.build.lib.skyframe.ExternalFilesHelper.FileType;
+import com.google.devtools.build.lib.skyframe.PackageLookupFunction.CrossRepositoryLabelViolationStrategy;
import com.google.devtools.build.lib.util.AbruptExitException;
import com.google.devtools.build.lib.util.Pair;
import com.google.devtools.build.lib.util.Preconditions;
@@ -108,7 +109,8 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor {
ImmutableList<PrecomputedValue.Injected> extraPrecomputedValues,
Iterable<SkyValueDirtinessChecker> customDirtinessCheckers,
PathFragment blacklistedPackagePrefixesFile,
- String productName) {
+ String productName,
+ CrossRepositoryLabelViolationStrategy crossRepositoryLabelViolationStrategy) {
super(
evaluatorSupplier,
pkgFactory,
@@ -122,7 +124,8 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor {
extraPrecomputedValues,
false,
blacklistedPackagePrefixesFile,
- productName);
+ productName,
+ crossRepositoryLabelViolationStrategy);
this.diffAwarenessManager = new DiffAwarenessManager(diffAwarenessFactories);
this.customDirtinessCheckers = customDirtinessCheckers;
}
@@ -139,7 +142,8 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor {
ImmutableMap<SkyFunctionName, SkyFunction> extraSkyFunctions,
ImmutableList<PrecomputedValue.Injected> extraPrecomputedValues,
Iterable<SkyValueDirtinessChecker> customDirtinessCheckers,
- String productName) {
+ String productName,
+ CrossRepositoryLabelViolationStrategy crossRepositoryLabelViolationStrategy) {
return create(
pkgFactory,
directories,
@@ -153,7 +157,8 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor {
extraPrecomputedValues,
customDirtinessCheckers,
/*blacklistedPackagePrefixesFile=*/ PathFragment.EMPTY_FRAGMENT,
- productName);
+ productName,
+ crossRepositoryLabelViolationStrategy);
}
private static SequencedSkyframeExecutor create(
@@ -169,7 +174,8 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor {
ImmutableList<PrecomputedValue.Injected> extraPrecomputedValues,
Iterable<SkyValueDirtinessChecker> customDirtinessCheckers,
PathFragment blacklistedPackagePrefixesFile,
- String productName) {
+ String productName,
+ CrossRepositoryLabelViolationStrategy crossRepositoryLabelViolationStrategy) {
SequencedSkyframeExecutor skyframeExecutor =
new SequencedSkyframeExecutor(
InMemoryMemoizingEvaluator.SUPPLIER,
@@ -185,7 +191,8 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor {
extraPrecomputedValues,
customDirtinessCheckers,
blacklistedPackagePrefixesFile,
- productName);
+ productName,
+ crossRepositoryLabelViolationStrategy);
skyframeExecutor.init();
return skyframeExecutor;
}
@@ -211,7 +218,8 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor {
ImmutableList.<PrecomputedValue.Injected>of(),
ImmutableList.<SkyValueDirtinessChecker>of(),
blacklistedPackagePrefixesFile,
- productName);
+ productName,
+ CrossRepositoryLabelViolationStrategy.ERROR);
}
@Override
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorFactory.java b/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorFactory.java
index 6ae70ff3ed..1e3b046738 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorFactory.java
@@ -22,6 +22,7 @@ import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoFactory;
import com.google.devtools.build.lib.analysis.config.BinTools;
import com.google.devtools.build.lib.packages.PackageFactory;
import com.google.devtools.build.lib.packages.Preprocessor;
+import com.google.devtools.build.lib.skyframe.PackageLookupFunction.CrossRepositoryLabelViolationStrategy;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.skyframe.SkyFunction;
import com.google.devtools.build.skyframe.SkyFunctionName;
@@ -57,6 +58,7 @@ public class SequencedSkyframeExecutorFactory implements SkyframeExecutorFactory
extraSkyFunctions,
extraPrecomputedValues,
customDirtinessCheckers,
- productName);
+ productName,
+ CrossRepositoryLabelViolationStrategy.ERROR);
}
}
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 93e3323f20..c0d157aa7c 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
@@ -106,6 +106,7 @@ import com.google.devtools.build.lib.profiler.AutoProfiler;
import com.google.devtools.build.lib.skyframe.AspectValue.AspectValueKey;
import com.google.devtools.build.lib.skyframe.DirtinessCheckerUtils.FileDirtinessChecker;
import com.google.devtools.build.lib.skyframe.PackageFunction.CacheEntryWithGlobDeps;
+import com.google.devtools.build.lib.skyframe.PackageLookupFunction.CrossRepositoryLabelViolationStrategy;
import com.google.devtools.build.lib.skyframe.SkyframeActionExecutor.ActionCompletedReceiver;
import com.google.devtools.build.lib.skyframe.SkyframeActionExecutor.ProgressSupplier;
import com.google.devtools.build.lib.util.AbruptExitException;
@@ -271,6 +272,8 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory {
private final RuleClassProvider ruleClassProvider;
+ private final CrossRepositoryLabelViolationStrategy crossRepositoryLabelViolationStrategy;
+
private static final Logger LOG = Logger.getLogger(SkyframeExecutor.class.getName());
protected SkyframeExecutor(
@@ -286,7 +289,8 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory {
ImmutableList<PrecomputedValue.Injected> extraPrecomputedValues,
boolean errorOnExternalFiles,
PathFragment blacklistedPackagePrefixesFile,
- String productName) {
+ String productName,
+ CrossRepositoryLabelViolationStrategy crossRepositoryLabelViolationStrategy) {
// Strictly speaking, these arguments are not required for initialization, but all current
// callsites have them at hand, so we might as well set them during construction.
this.evaluatorSupplier = evaluatorSupplier;
@@ -319,6 +323,7 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory {
this.externalFilesHelper = new ExternalFilesHelper(
pkgLocator, this.errorOnExternalFiles, directories);
this.productName = productName;
+ this.crossRepositoryLabelViolationStrategy = crossRepositoryLabelViolationStrategy;
}
private ImmutableMap<SkyFunctionName, SkyFunction> skyFunctions(
@@ -340,7 +345,9 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory {
new FileSymlinkInfiniteExpansionUniquenessFunction());
map.put(SkyFunctions.FILE, new FileFunction(pkgLocator));
map.put(SkyFunctions.DIRECTORY_LISTING, new DirectoryListingFunction());
- map.put(SkyFunctions.PACKAGE_LOOKUP, new PackageLookupFunction(deletedPackages));
+ map.put(
+ SkyFunctions.PACKAGE_LOOKUP,
+ new PackageLookupFunction(deletedPackages, crossRepositoryLabelViolationStrategy));
map.put(SkyFunctions.CONTAINING_PACKAGE_LOOKUP, new ContainingPackageLookupFunction());
map.put(SkyFunctions.AST_FILE_LOOKUP, new ASTFileLookupFunction(ruleClassProvider));
map.put(