diff options
author | 2018-07-23 04:47:48 -0700 | |
---|---|---|
committer | 2018-07-23 04:48:57 -0700 | |
commit | 258efc466fb0fdd55d8e189361a33491e1a9406d (patch) | |
tree | 7269c4db193de9acf5654cc312448fea33c1ce13 /src/main/java/com/google/devtools/build/lib/skyframe | |
parent | dc1148ebd8b7629f9668924eece5da47370c4d5e (diff) |
Introduce option flag experimental_enable_tools_defaults_package.
Default value is true, and behavior related to //tools/defaults package is not
changed. If set it to false, then in-memory Dfaultpacked will not be created.
RELNOTES:none
PiperOrigin-RevId: 205643628
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe')
5 files changed, 28 insertions, 7 deletions
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 6b2296ab93..405ef5e804 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 @@ -438,14 +438,14 @@ public class PackageFunction implements SkyFunction { Path buildFilePath = buildFileRootedPath.asPath(); String replacementContents = null; - if (!isDefaultsPackage(packageId)) { - buildFileValue = getBuildFileValue(env, buildFileRootedPath); - if (buildFileValue == null) { + if (isDefaultsPackage(packageId) && PrecomputedValue.isInMemoryToolsDefaults(env)) { + replacementContents = PrecomputedValue.DEFAULTS_PACKAGE_CONTENTS.get(env); + if (replacementContents == null) { return null; } } else { - replacementContents = PrecomputedValue.DEFAULTS_PACKAGE_CONTENTS.get(env); - if (replacementContents == null) { + buildFileValue = getBuildFileValue(env, buildFileRootedPath); + if (buildFileValue == null) { 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 bc1b80a049..b3496b087c 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 @@ -71,7 +71,9 @@ public class PackageLookupFunction implements SkyFunction { PathPackageLocator pkgLocator = PrecomputedValue.PATH_PACKAGE_LOCATOR.get(env); PackageIdentifier packageKey = (PackageIdentifier) skyKey.argument(); - if (PackageFunction.isDefaultsPackage(packageKey)) { + + if (PackageFunction.isDefaultsPackage(packageKey) + && PrecomputedValue.isInMemoryToolsDefaults(env)) { return PackageLookupValue.success(pkgLocator.getPathEntries().get(0), BuildFileName.BUILD); } diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PrecomputedValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/PrecomputedValue.java index ad91c60730..937e59c782 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/PrecomputedValue.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/PrecomputedValue.java @@ -79,6 +79,17 @@ public final class PrecomputedValue implements SkyValue { return new Injected(precomputed, Suppliers.ofInstance(value)); } + public static final Precomputed<Boolean> ENABLE_DEFAULTS_PACKAGE = + new Precomputed<>(Key.create("enable_default_pkg")); + + // TODO(dbabkin): better to move this code to PrecomputedValueUtils. + // It will gone soon after removing tools/defaults + public static boolean isInMemoryToolsDefaults(SkyFunction.Environment env) + throws InterruptedException { + Boolean enableDefaultsPackage = PrecomputedValue.ENABLE_DEFAULTS_PACKAGE.get(env); + return Preconditions.checkNotNull(enableDefaultsPackage); + } + public static final Precomputed<String> DEFAULTS_PACKAGE_CONTENTS = new Precomputed<>(Key.create("default_pkg")); 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 fcd6047e80..f89fb2403a 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 @@ -1107,7 +1107,14 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory { setShowLoadingProgress(packageCacheOptions.showLoadingProgress); setDefaultVisibility(packageCacheOptions.defaultVisibility); setSkylarkSemantics(skylarkSemanticsOptions.toSkylarkSemantics()); - setupDefaultPackage(defaultsPackageContents); + if (packageCacheOptions.experimentalInMemoryToolsDefaultsPackage) { + setupDefaultPackage(defaultsPackageContents); + PrecomputedValue.ENABLE_DEFAULTS_PACKAGE.set(injectable(), true); + } else { + setupDefaultPackage("# //tools/defaults in-memory package is not enabled."); + PrecomputedValue.ENABLE_DEFAULTS_PACKAGE.set(injectable(), false); + } + setPackageLocator(pkgLocator); syscalls.set(getPerBuildSyscallCache(packageCacheOptions.globbingThreads)); 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 d0f74c5957..242a5ac66e 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 @@ -279,6 +279,7 @@ public abstract class AbstractPackageLoader implements PackageLoader { PrecomputedValue.DEFAULT_VISIBILITY.set(injectable, ConstantRuleVisibility.PRIVATE); PrecomputedValue.SKYLARK_SEMANTICS.set(injectable, skylarkSemantics); PrecomputedValue.DEFAULTS_PACKAGE_CONTENTS.set(injectable, defaultsPackageContents); + PrecomputedValue.ENABLE_DEFAULTS_PACKAGE.set(injectable, true); return new ImmutableDiff(ImmutableList.of(), valuesToInject); } |