diff options
author | 2017-11-28 08:25:33 -0800 | |
---|---|---|
committer | 2017-11-28 08:26:51 -0800 | |
commit | b64119807b014d9f3b99fb8a02e22daf1a8299b6 (patch) | |
tree | 1d0300023d6786aa6b8e7a294db34b54962b56d8 | |
parent | c478aea4c872b7ce3395746fd86168376f909284 (diff) |
Change BlacklistedPackagesPrefixesFunction to take a pair of a hardcoded set of directories and a file path containing more directories to blacklist. The current usage of PrecomputedValue#BLACKLISTED_PACKAGE_PREFIXES_FILE is overly general and is only meaningfully used by unit tests; in practice, the blacklist file path can never change over the lifetime of the Bazel server. Perform a minor simplifying refactor as a result of this.
RELNOTES: None.
PiperOrigin-RevId: 177164057
21 files changed, 174 insertions, 91 deletions
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 6b892a8319..5d4d272eb9 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 @@ -14,15 +14,23 @@ package com.google.devtools.build.lib.skyframe; import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; import com.google.devtools.build.lib.skyframe.PackageFunction.ActionOnIOExceptionReadingBuildFile; import com.google.devtools.build.lib.skyframe.PackageLookupFunction.CrossRepositoryLabelViolationStrategy; import com.google.devtools.build.lib.skyframe.PackageLookupValue.BuildFileName; +import com.google.devtools.build.lib.vfs.PathFragment; /** Hardcoded constants describing bazel-on-skyframe behavior. */ public class BazelSkyframeExecutorConstants { private BazelSkyframeExecutorConstants() { } + public static final ImmutableSet<PathFragment> HARDCODED_BLACKLISTED_PACKAGE_PREFIXES = + ImmutableSet.of(); + + public static final PathFragment ADDITIONAL_BLACKLISTED_PACKAGE_PREFIXES_FILE = + PathFragment.EMPTY_FRAGMENT; + public static final CrossRepositoryLabelViolationStrategy CROSS_REPOSITORY_LABEL_VIOLATION_STRATEGY = CrossRepositoryLabelViolationStrategy.ERROR; diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BlacklistedPackagePrefixesFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/BlacklistedPackagePrefixesFunction.java index a3c6768c96..02c9ae824d 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/BlacklistedPackagePrefixesFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/BlacklistedPackagePrefixesFunction.java @@ -32,50 +32,63 @@ import java.nio.charset.StandardCharsets; import javax.annotation.Nullable; /** - * A function that retrieves a set of blacklisted package pattern prefixes from the file given by - * PrecomputedValue.BLACKLISTED_PACKAGE_PREFIXES_FILE. + * A function that returns the union of a set of hardcoded blacklisted package prefixes and the + * contents of a hardcoded filepath whose contents is a blacklisted package prefix on each line. */ public class BlacklistedPackagePrefixesFunction implements SkyFunction { + private ImmutableSet<PathFragment> hardcodedBlacklistedPackagePrefixes; + private PathFragment additionalBlacklistedPackagePrefixesFile; + + public BlacklistedPackagePrefixesFunction( + ImmutableSet<PathFragment> hardcodedBlacklistedPackagePrefixes, + PathFragment additionalBlacklistedPackagePrefixesFile) { + this.hardcodedBlacklistedPackagePrefixes = hardcodedBlacklistedPackagePrefixes; + this.additionalBlacklistedPackagePrefixesFile = additionalBlacklistedPackagePrefixesFile; + } + @Nullable @Override public SkyValue compute(SkyKey key, Environment env) throws SkyFunctionException, InterruptedException { - PathPackageLocator pkgLocator = PrecomputedValue.PATH_PACKAGE_LOCATOR.get(env); - PathFragment patternsFile = PrecomputedValue.BLACKLISTED_PACKAGE_PREFIXES_FILE.get(env); - if (env.valuesMissing()) { - return null; - } + ImmutableSet.Builder<PathFragment> blacklistedPackagePrefixesBuilder = ImmutableSet.builder(); - if (patternsFile.equals(PathFragment.EMPTY_FRAGMENT)) { - return new BlacklistedPackagePrefixesValue(ImmutableSet.<PathFragment>of()); - } + blacklistedPackagePrefixesBuilder.addAll(hardcodedBlacklistedPackagePrefixes); - for (Path packagePathEntry : pkgLocator.getPathEntries()) { - RootedPath rootedPatternFile = RootedPath.toRootedPath(packagePathEntry, patternsFile); - FileValue patternFileValue = (FileValue) env.getValue(FileValue.key(rootedPatternFile)); - if (patternFileValue == null) { + if (!additionalBlacklistedPackagePrefixesFile.equals(PathFragment.EMPTY_FRAGMENT)) { + PathPackageLocator pkgLocator = PrecomputedValue.PATH_PACKAGE_LOCATOR.get(env); + if (env.valuesMissing()) { return null; } - if (patternFileValue.isFile()) { - try { - try (InputStreamReader reader = - new InputStreamReader(rootedPatternFile.asPath().getInputStream(), - StandardCharsets.UTF_8)) { - return new BlacklistedPackagePrefixesValue( - CharStreams.readLines(reader, new PathFragmentLineProcessor())); + + for (Path packagePathEntry : pkgLocator.getPathEntries()) { + RootedPath rootedPatternFile = + RootedPath.toRootedPath(packagePathEntry, additionalBlacklistedPackagePrefixesFile); + FileValue patternFileValue = (FileValue) env.getValue(FileValue.key(rootedPatternFile)); + if (patternFileValue == null) { + return null; + } + if (patternFileValue.isFile()) { + try { + try (InputStreamReader reader = + new InputStreamReader(rootedPatternFile.asPath().getInputStream(), + StandardCharsets.UTF_8)) { + blacklistedPackagePrefixesBuilder.addAll( + CharStreams.readLines(reader, new PathFragmentLineProcessor())); + break; + } + } catch (IOException e) { + String errorMessage = e.getMessage() != null + ? "error '" + e.getMessage() + "'" : "an error"; + throw new BlacklistedPatternsFunctionException( + new InconsistentFilesystemException( + rootedPatternFile.asPath() + " is not readable because: " + errorMessage + + ". Was it modified mid-build?")); } - } catch (IOException e) { - String errorMessage = e.getMessage() != null - ? "error '" + e.getMessage() + "'" : "an error"; - throw new BlacklistedPatternsFunctionException( - new InconsistentFilesystemException( - rootedPatternFile.asPath() + " is not readable because: " + errorMessage - + ". Was it modified mid-build?")); } } } - return new BlacklistedPackagePrefixesValue(ImmutableSet.<PathFragment>of()); + return new BlacklistedPackagePrefixesValue(blacklistedPackagePrefixesBuilder.build()); } private static final class PathFragmentLineProcessor 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 0d21adc540..8f5277a98a 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 @@ -26,7 +26,6 @@ import com.google.devtools.build.lib.packages.RuleVisibility; import com.google.devtools.build.lib.pkgcache.PathPackageLocator; import com.google.devtools.build.lib.skyframe.SkyframeActionExecutor.ConflictException; import com.google.devtools.build.lib.syntax.SkylarkSemantics; -import com.google.devtools.build.lib.vfs.PathFragment; import com.google.devtools.build.skyframe.Injectable; import com.google.devtools.build.skyframe.LegacySkyKey; import com.google.devtools.build.skyframe.SkyFunction; @@ -78,10 +77,6 @@ public final class PrecomputedValue implements SkyValue { public static final Precomputed<String> DEFAULTS_PACKAGE_CONTENTS = new Precomputed<>(LegacySkyKey.create(SkyFunctions.PRECOMPUTED, "default_pkg")); - public static final Precomputed<PathFragment> BLACKLISTED_PACKAGE_PREFIXES_FILE = - new Precomputed<>( - LegacySkyKey.create(SkyFunctions.PRECOMPUTED, "blacklisted_package_prefixes_file")); - public static final Precomputed<RuleVisibility> DEFAULT_VISIBILITY = new Precomputed<>(LegacySkyKey.create(SkyFunctions.PRECOMPUTED, "default_visibility")); 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 5dac255451..8f8a0c8144 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 @@ -139,7 +139,8 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor { Predicate<PathFragment> allowedMissingInputs, ImmutableMap<SkyFunctionName, SkyFunction> extraSkyFunctions, Iterable<SkyValueDirtinessChecker> customDirtinessCheckers, - PathFragment blacklistedPackagePrefixesFile, + ImmutableSet<PathFragment> hardcodedBlacklistedPackagePrefixes, + PathFragment additionalBlacklistedPackagePrefixesFile, CrossRepositoryLabelViolationStrategy crossRepositoryLabelViolationStrategy, List<BuildFileName> buildFilesByPriority, ActionOnIOExceptionReadingBuildFile actionOnIOExceptionReadingBuildFile) { @@ -153,7 +154,8 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor { allowedMissingInputs, extraSkyFunctions, ExternalFileAction.DEPEND_ON_EXTERNAL_PKG_FOR_EXTERNAL_REPO_PATHS, - blacklistedPackagePrefixesFile, + hardcodedBlacklistedPackagePrefixes, + additionalBlacklistedPackagePrefixesFile, crossRepositoryLabelViolationStrategy, buildFilesByPriority, actionOnIOExceptionReadingBuildFile); @@ -171,7 +173,8 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor { Predicate<PathFragment> allowedMissingInputs, ImmutableMap<SkyFunctionName, SkyFunction> extraSkyFunctions, Iterable<SkyValueDirtinessChecker> customDirtinessCheckers, - PathFragment blacklistedPackagePrefixesFile, + ImmutableSet<PathFragment> hardcodedBlacklistedPackagePrefixes, + PathFragment additionalBlacklistedPackagePrefixesFile, CrossRepositoryLabelViolationStrategy crossRepositoryLabelViolationStrategy, List<BuildFileName> buildFilesByPriority, ActionOnIOExceptionReadingBuildFile actionOnIOExceptionReadingBuildFile) { @@ -187,7 +190,8 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor { allowedMissingInputs, extraSkyFunctions, customDirtinessCheckers, - blacklistedPackagePrefixesFile, + hardcodedBlacklistedPackagePrefixes, + additionalBlacklistedPackagePrefixesFile, crossRepositoryLabelViolationStrategy, buildFilesByPriority, actionOnIOExceptionReadingBuildFile); 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 0b645fb34b..a6cd8115ea 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 @@ -51,7 +51,8 @@ public class SequencedSkyframeExecutorFactory implements SkyframeExecutorFactory allowedMissingInputs, extraSkyFunctions, customDirtinessCheckers, - PathFragment.EMPTY_FRAGMENT, + BazelSkyframeExecutorConstants.HARDCODED_BLACKLISTED_PACKAGE_PREFIXES, + BazelSkyframeExecutorConstants.ADDITIONAL_BLACKLISTED_PACKAGE_PREFIXES_FILE, BazelSkyframeExecutorConstants.CROSS_REPOSITORY_LABEL_VIOLATION_STRATEGY, BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY, BazelSkyframeExecutorConstants.ACTION_ON_IO_EXCEPTION_READING_BUILD_FILE); 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 ec365660ce..47c091bd4d 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 @@ -274,7 +274,8 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory { private MutableSupplier<ImmutableList<ConfigurationFragmentFactory>> configurationFragments = new MutableSupplier<>(); - private final PathFragment blacklistedPackagePrefixesFile; + private final ImmutableSet<PathFragment> hardcodedBlacklistedPackagePrefixes; + private final PathFragment additionalBlacklistedPackagePrefixesFile; private final RuleClassProvider ruleClassProvider; @@ -299,7 +300,8 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory { Predicate<PathFragment> allowedMissingInputs, ImmutableMap<SkyFunctionName, SkyFunction> extraSkyFunctions, ExternalFileAction externalFileAction, - PathFragment blacklistedPackagePrefixesFile, + ImmutableSet<PathFragment> hardcodedBlacklistedPackagePrefixes, + PathFragment additionalBlacklistedPackagePrefixesFile, CrossRepositoryLabelViolationStrategy crossRepositoryLabelViolationStrategy, List<BuildFileName> buildFilesByPriority, ActionOnIOExceptionReadingBuildFile actionOnIOExceptionReadingBuildFile) { @@ -324,7 +326,8 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory { this.allowedMissingInputs = allowedMissingInputs; this.extraSkyFunctions = extraSkyFunctions; this.externalFileAction = externalFileAction; - this.blacklistedPackagePrefixesFile = blacklistedPackagePrefixesFile; + this.hardcodedBlacklistedPackagePrefixes = hardcodedBlacklistedPackagePrefixes; + this.additionalBlacklistedPackagePrefixesFile = additionalBlacklistedPackagePrefixesFile; this.ruleClassProvider = pkgFactory.getRuleClassProvider(); this.skyframeBuildView = new SkyframeBuildView( @@ -383,7 +386,9 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory { map.put( SkyFunctions.COLLECT_PACKAGES_UNDER_DIRECTORY, new CollectPackagesUnderDirectoryFunction(directories)); - map.put(SkyFunctions.BLACKLISTED_PACKAGE_PREFIXES, new BlacklistedPackagePrefixesFunction()); + map.put(SkyFunctions.BLACKLISTED_PACKAGE_PREFIXES, + new BlacklistedPackagePrefixesFunction( + hardcodedBlacklistedPackagePrefixes, additionalBlacklistedPackagePrefixesFile)); map.put(SkyFunctions.TESTS_IN_SUITE, new TestsInSuiteFunction()); map.put(SkyFunctions.TEST_SUITE_EXPANSION, new TestSuiteExpansionFunction()); map.put(SkyFunctions.TARGET_PATTERN_PHASE, new TargetPatternPhaseFunction()); @@ -573,11 +578,6 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory { } } - @VisibleForTesting - public PathFragment getBlacklistedPackagePrefixesFile() { - return blacklistedPackagePrefixesFile; - } - class BuildViewProvider { /** * Returns the current {@link SkyframeBuildView} instance. @@ -991,11 +991,6 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory { @VisibleForTesting // productionVisibility = Visibility.PRIVATE public abstract void setDeletedPackages(Iterable<PackageIdentifier> pkgs); - @VisibleForTesting - public final void setBlacklistedPackagePrefixesFile(PathFragment blacklistedPkgFile) { - PrecomputedValue.BLACKLISTED_PACKAGE_PREFIXES_FILE.set(injectable(), blacklistedPkgFile); - } - /** * Prepares the evaluator for loading. * @@ -1019,7 +1014,6 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory { setCommandId(commandId); PrecomputedValue.ACTION_ENV.set(injectable(), actionEnv); this.clientEnv.set(clientEnv); - setBlacklistedPackagePrefixesFile(getBlacklistedPackagePrefixesFile()); setShowLoadingProgress(packageCacheOptions.showLoadingProgress); setDefaultVisibility(packageCacheOptions.defaultVisibility); setSkylarkSemantics(skylarkSemanticsOptions); 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 ec0769bb40..fb00cf11c2 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 @@ -267,7 +267,6 @@ 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.BLACKLISTED_PACKAGE_PREFIXES_FILE.set(injectable, PathFragment.EMPTY_FRAGMENT); return new ImmutableDiff(ImmutableList.<SkyKey>of(), valuesToInject); } @@ -375,7 +374,10 @@ public abstract class AbstractPackageLoader implements PackageLoader { /* deletedPackages= */ new AtomicReference<>(ImmutableSet.<PackageIdentifier>of()), getCrossRepositoryLabelViolationStrategy(), getBuildFilesByPriority())) - .put(SkyFunctions.BLACKLISTED_PACKAGE_PREFIXES, new BlacklistedPackagePrefixesFunction()) + .put(SkyFunctions.BLACKLISTED_PACKAGE_PREFIXES, + new BlacklistedPackagePrefixesFunction( + /*hardcodedBlacklistedPackagePrefixes=*/ ImmutableSet.of(), + /*additionalBlacklistedPackagePrefixesFile=*/ PathFragment.EMPTY_FRAGMENT)) .put(SkyFunctions.CONTAINING_PACKAGE_LOOKUP, new ContainingPackageLookupFunction()) .put(SkyFunctions.AST_FILE_LOOKUP, new ASTFileLookupFunction(ruleClassProvider)) .put( diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java index 16c991b8ac..76a75f6f84 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/util/AnalysisTestCase.java @@ -169,7 +169,8 @@ public abstract class AnalysisTestCase extends FoundationTestCase { input -> false, analysisMock.getSkyFunctions(directories), ImmutableList.of(), - PathFragment.EMPTY_FRAGMENT, + BazelSkyframeExecutorConstants.HARDCODED_BLACKLISTED_PACKAGE_PREFIXES, + BazelSkyframeExecutorConstants.ADDITIONAL_BLACKLISTED_PACKAGE_PREFIXES_FILE, BazelSkyframeExecutorConstants.CROSS_REPOSITORY_LABEL_VIOLATION_STRATEGY, BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY, BazelSkyframeExecutorConstants.ACTION_ON_IO_EXCEPTION_READING_BUILD_FILE); diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java index 1a5b3dcf11..60facef827 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/util/BuildViewTestCase.java @@ -240,7 +240,8 @@ public abstract class BuildViewTestCase extends FoundationTestCase { Predicates.<PathFragment>alwaysFalse(), analysisMock.getSkyFunctions(directories), ImmutableList.<SkyValueDirtinessChecker>of(), - PathFragment.EMPTY_FRAGMENT, + BazelSkyframeExecutorConstants.HARDCODED_BLACKLISTED_PACKAGE_PREFIXES, + BazelSkyframeExecutorConstants.ADDITIONAL_BLACKLISTED_PACKAGE_PREFIXES_FILE, BazelSkyframeExecutorConstants.CROSS_REPOSITORY_LABEL_VIOLATION_STRATEGY, BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY, BazelSkyframeExecutorConstants.ACTION_ON_IO_EXCEPTION_READING_BUILD_FILE); diff --git a/src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java b/src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java index 57db7b0237..e7b5611479 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/util/ConfigurationTestCase.java @@ -122,7 +122,8 @@ public abstract class ConfigurationTestCase extends FoundationTestCase { Predicates.<PathFragment>alwaysFalse(), analysisMock.getSkyFunctions(directories), ImmutableList.<SkyValueDirtinessChecker>of(), - PathFragment.EMPTY_FRAGMENT, + BazelSkyframeExecutorConstants.HARDCODED_BLACKLISTED_PACKAGE_PREFIXES, + BazelSkyframeExecutorConstants.ADDITIONAL_BLACKLISTED_PACKAGE_PREFIXES_FILE, BazelSkyframeExecutorConstants.CROSS_REPOSITORY_LABEL_VIOLATION_STRATEGY, BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY, BazelSkyframeExecutorConstants.ACTION_ON_IO_EXCEPTION_READING_BUILD_FILE); diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/PackageLoadingTestCase.java b/src/test/java/com/google/devtools/build/lib/packages/util/PackageLoadingTestCase.java index 5a9d3f6ddd..2bb00a95b8 100644 --- a/src/test/java/com/google/devtools/build/lib/packages/util/PackageLoadingTestCase.java +++ b/src/test/java/com/google/devtools/build/lib/packages/util/PackageLoadingTestCase.java @@ -120,7 +120,8 @@ public abstract class PackageLoadingTestCase extends FoundationTestCase { Predicates.<PathFragment>alwaysFalse(), ImmutableMap.<SkyFunctionName, SkyFunction>of(), ImmutableList.<SkyValueDirtinessChecker>of(), - PathFragment.EMPTY_FRAGMENT, + BazelSkyframeExecutorConstants.HARDCODED_BLACKLISTED_PACKAGE_PREFIXES, + BazelSkyframeExecutorConstants.ADDITIONAL_BLACKLISTED_PACKAGE_PREFIXES_FILE, BazelSkyframeExecutorConstants.CROSS_REPOSITORY_LABEL_VIOLATION_STRATEGY, BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY, BazelSkyframeExecutorConstants.ACTION_ON_IO_EXCEPTION_READING_BUILD_FILE); diff --git a/src/test/java/com/google/devtools/build/lib/pkgcache/BuildFileModificationTest.java b/src/test/java/com/google/devtools/build/lib/pkgcache/BuildFileModificationTest.java index fbdf45e2ac..02090b9339 100644 --- a/src/test/java/com/google/devtools/build/lib/pkgcache/BuildFileModificationTest.java +++ b/src/test/java/com/google/devtools/build/lib/pkgcache/BuildFileModificationTest.java @@ -90,7 +90,8 @@ public class BuildFileModificationTest extends FoundationTestCase { Predicates.<PathFragment>alwaysFalse(), analysisMock.getSkyFunctions(directories), ImmutableList.<SkyValueDirtinessChecker>of(), - PathFragment.EMPTY_FRAGMENT, + BazelSkyframeExecutorConstants.HARDCODED_BLACKLISTED_PACKAGE_PREFIXES, + BazelSkyframeExecutorConstants.ADDITIONAL_BLACKLISTED_PACKAGE_PREFIXES_FILE, BazelSkyframeExecutorConstants.CROSS_REPOSITORY_LABEL_VIOLATION_STRATEGY, BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY, BazelSkyframeExecutorConstants.ACTION_ON_IO_EXCEPTION_READING_BUILD_FILE); diff --git a/src/test/java/com/google/devtools/build/lib/pkgcache/IncrementalLoadingTest.java b/src/test/java/com/google/devtools/build/lib/pkgcache/IncrementalLoadingTest.java index 2c4b00f2d7..85562800ae 100644 --- a/src/test/java/com/google/devtools/build/lib/pkgcache/IncrementalLoadingTest.java +++ b/src/test/java/com/google/devtools/build/lib/pkgcache/IncrementalLoadingTest.java @@ -481,7 +481,8 @@ public class IncrementalLoadingTest { Predicates.<PathFragment>alwaysFalse(), ImmutableMap.<SkyFunctionName, SkyFunction>of(), ImmutableList.<SkyValueDirtinessChecker>of(), - PathFragment.EMPTY_FRAGMENT, + BazelSkyframeExecutorConstants.HARDCODED_BLACKLISTED_PACKAGE_PREFIXES, + BazelSkyframeExecutorConstants.ADDITIONAL_BLACKLISTED_PACKAGE_PREFIXES_FILE, BazelSkyframeExecutorConstants.CROSS_REPOSITORY_LABEL_VIOLATION_STRATEGY, BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY, BazelSkyframeExecutorConstants.ACTION_ON_IO_EXCEPTION_READING_BUILD_FILE); diff --git a/src/test/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseRunnerTest.java b/src/test/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseRunnerTest.java index 53687a7305..7ca9f834e0 100644 --- a/src/test/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseRunnerTest.java +++ b/src/test/java/com/google/devtools/build/lib/pkgcache/LoadingPhaseRunnerTest.java @@ -629,7 +629,8 @@ public class LoadingPhaseRunnerTest { Predicates.<PathFragment>alwaysFalse(), analysisMock.getSkyFunctions(directories), ImmutableList.<SkyValueDirtinessChecker>of(), - PathFragment.EMPTY_FRAGMENT, + BazelSkyframeExecutorConstants.HARDCODED_BLACKLISTED_PACKAGE_PREFIXES, + BazelSkyframeExecutorConstants.ADDITIONAL_BLACKLISTED_PACKAGE_PREFIXES_FILE, BazelSkyframeExecutorConstants.CROSS_REPOSITORY_LABEL_VIOLATION_STRATEGY, BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY, BazelSkyframeExecutorConstants.ACTION_ON_IO_EXCEPTION_READING_BUILD_FILE); diff --git a/src/test/java/com/google/devtools/build/lib/pkgcache/PackageCacheTest.java b/src/test/java/com/google/devtools/build/lib/pkgcache/PackageCacheTest.java index 1d26d0107f..e4ac4c09a0 100644 --- a/src/test/java/com/google/devtools/build/lib/pkgcache/PackageCacheTest.java +++ b/src/test/java/com/google/devtools/build/lib/pkgcache/PackageCacheTest.java @@ -99,7 +99,8 @@ public class PackageCacheTest extends FoundationTestCase { Predicates.<PathFragment>alwaysFalse(), analysisMock.getSkyFunctions(directories), ImmutableList.<SkyValueDirtinessChecker>of(), - PathFragment.EMPTY_FRAGMENT, + BazelSkyframeExecutorConstants.HARDCODED_BLACKLISTED_PACKAGE_PREFIXES, + BazelSkyframeExecutorConstants.ADDITIONAL_BLACKLISTED_PACKAGE_PREFIXES_FILE, BazelSkyframeExecutorConstants.CROSS_REPOSITORY_LABEL_VIOLATION_STRATEGY, BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY, BazelSkyframeExecutorConstants.ACTION_ON_IO_EXCEPTION_READING_BUILD_FILE); 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 19b0c95224..7b929f045e 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 @@ -100,7 +100,9 @@ public class ContainingPackageLookupFunctionTest extends FoundationTestCase { skyFunctions.put( SkyFunctions.PACKAGE, new PackageFunction(null, null, null, null, null, null, null)); skyFunctions.put(SkyFunctions.BLACKLISTED_PACKAGE_PREFIXES, - new BlacklistedPackagePrefixesFunction()); + new BlacklistedPackagePrefixesFunction( + /*hardcodedBlacklistedPackagePrefixes=*/ ImmutableSet.of(), + /*additionalBlacklistedPackagePrefixesFile=*/ PathFragment.EMPTY_FRAGMENT)); skyFunctions.put(SkyFunctions.FILE_STATE, new FileStateFunction( new AtomicReference<TimestampGranularityMonitor>(), externalFilesHelper)); skyFunctions.put(SkyFunctions.FILE, new FileFunction(pkgLocator)); @@ -138,8 +140,6 @@ public class ContainingPackageLookupFunctionTest extends FoundationTestCase { evaluator = new InMemoryMemoizingEvaluator(skyFunctions, differencer); driver = new SequentialBuildDriver(evaluator); PrecomputedValue.BUILD_ID.set(differencer, UUID.randomUUID()); - PrecomputedValue.BLACKLISTED_PACKAGE_PREFIXES_FILE.set(differencer, - PathFragment.EMPTY_FRAGMENT); PrecomputedValue.PATH_PACKAGE_LOCATOR.set(differencer, pkgLocator.get()); PrecomputedValue.SKYLARK_SEMANTICS.set(differencer, SkylarkSemantics.DEFAULT_SEMANTICS); RepositoryDelegatorFunction.REPOSITORY_OVERRIDES.set( 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 a9e0fbe762..f82e1ba03e 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 @@ -112,7 +112,9 @@ public final class FilesetEntryFunctionTest extends FoundationTestCase { CrossRepositoryLabelViolationStrategy.ERROR, ImmutableList.of(BuildFileName.BUILD_DOT_BAZEL, BuildFileName.BUILD))); skyFunctions.put(SkyFunctions.BLACKLISTED_PACKAGE_PREFIXES, - new BlacklistedPackagePrefixesFunction()); + new BlacklistedPackagePrefixesFunction( + /*hardcodedBlacklistedPackagePrefixes=*/ ImmutableSet.of(), + /*additionalBlacklistedPackagePrefixesFile=*/ PathFragment.EMPTY_FRAGMENT)); skyFunctions.put(SkyFunctions.FILESET_ENTRY, new FilesetEntryFunction()); skyFunctions.put(SkyFunctions.LOCAL_REPOSITORY_LOOKUP, new LocalRepositoryLookupFunction()); @@ -121,8 +123,6 @@ public final class FilesetEntryFunctionTest extends FoundationTestCase { driver = new SequentialBuildDriver(evaluator); PrecomputedValue.BUILD_ID.set(differencer, UUID.randomUUID()); PrecomputedValue.PATH_PACKAGE_LOCATOR.set(differencer, pkgLocator.get()); - PrecomputedValue.BLACKLISTED_PACKAGE_PREFIXES_FILE.set(differencer, - PathFragment.EMPTY_FRAGMENT); } private Artifact getSourceArtifact(String path) throws Exception { 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 7724160cec..d526c2905d 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 @@ -120,8 +120,6 @@ public abstract class GlobFunctionTest { driver = new SequentialBuildDriver(evaluator); PrecomputedValue.BUILD_ID.set(differencer, UUID.randomUUID()); PrecomputedValue.PATH_PACKAGE_LOCATOR.set(differencer, pkgLocator.get()); - PrecomputedValue.BLACKLISTED_PACKAGE_PREFIXES_FILE.set( - differencer, PathFragment.EMPTY_FRAGMENT); PrecomputedValue.SKYLARK_SEMANTICS.set(differencer, SkylarkSemantics.DEFAULT_SEMANTICS); createTestFiles(); @@ -151,7 +149,9 @@ public abstract class GlobFunctionTest { CrossRepositoryLabelViolationStrategy.ERROR, ImmutableList.of(BuildFileName.BUILD_DOT_BAZEL, BuildFileName.BUILD))); skyFunctions.put(SkyFunctions.BLACKLISTED_PACKAGE_PREFIXES, - new BlacklistedPackagePrefixesFunction()); + new BlacklistedPackagePrefixesFunction( + /*hardcodedBlacklistedPackagePrefixes=*/ ImmutableSet.of(), + /*additionalBlacklistedPackagePrefixesFile=*/ PathFragment.EMPTY_FRAGMENT)); skyFunctions.put( SkyFunctions.FILE_STATE, new FileStateFunction( 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 27eef90146..8692fdf41c 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 @@ -79,6 +79,8 @@ public abstract class PackageLookupFunctionTest extends FoundationTestCase { private SequentialBuildDriver driver; private RecordingDifferencer differencer; private Path emptyPackagePath; + private static final String ADDITIONAL_BLACKLISTED_PACKAGE_PREFIXES_FILE_PATH_STRING = + "config/blacklisted.txt"; protected abstract CrossRepositoryLabelViolationStrategy crossRepositoryLabelViolationStrategy(); @@ -117,7 +119,9 @@ public abstract class PackageLookupFunctionTest extends FoundationTestCase { SkyFunctions.DIRECTORY_LISTING_STATE, new DirectoryListingStateFunction(externalFilesHelper)); skyFunctions.put(SkyFunctions.BLACKLISTED_PACKAGE_PREFIXES, - new BlacklistedPackagePrefixesFunction()); + new BlacklistedPackagePrefixesFunction( + /*hardcodedBlacklistedPackagePrefixes=*/ ImmutableSet.of(), + PathFragment.create(ADDITIONAL_BLACKLISTED_PACKAGE_PREFIXES_FILE_PATH_STRING))); RuleClassProvider ruleClassProvider = analysisMock.createRuleClassProvider(); skyFunctions.put(SkyFunctions.WORKSPACE_AST, new WorkspaceASTFunction(ruleClassProvider)); skyFunctions.put( @@ -149,8 +153,6 @@ public abstract class PackageLookupFunctionTest extends FoundationTestCase { evaluator = new InMemoryMemoizingEvaluator(skyFunctions, differencer); driver = new SequentialBuildDriver(evaluator); PrecomputedValue.BUILD_ID.set(differencer, UUID.randomUUID()); - PrecomputedValue.BLACKLISTED_PACKAGE_PREFIXES_FILE.set( - differencer, PathFragment.EMPTY_FRAGMENT); PrecomputedValue.PATH_PACKAGE_LOCATOR.set(differencer, pkgLocator.get()); PrecomputedValue.SKYLARK_SEMANTICS.set(differencer, SkylarkSemantics.DEFAULT_SEMANTICS); RepositoryDelegatorFunction.REPOSITORY_OVERRIDES.set( @@ -205,14 +207,12 @@ public abstract class PackageLookupFunctionTest extends FoundationTestCase { assertThat(packageLookupValue.getErrorMsg()).isNotNull(); } - @Test public void testBlacklistedPackage() throws Exception { scratch.file("blacklisted/subdir/BUILD"); scratch.file("blacklisted/BUILD"); - PrecomputedValue.BLACKLISTED_PACKAGE_PREFIXES_FILE.set(differencer, - PathFragment.create("config/blacklisted.txt")); - Path blacklist = scratch.file("config/blacklisted.txt", "blacklisted"); + Path blacklist = scratch.overwriteFile( + ADDITIONAL_BLACKLISTED_PACKAGE_PREFIXES_FILE_PATH_STRING, "blacklisted"); ImmutableSet<String> pkgs = ImmutableSet.of("blacklisted/subdir", "blacklisted"); for (String pkg : pkgs) { @@ -222,7 +222,8 @@ public abstract class PackageLookupFunctionTest extends FoundationTestCase { assertThat(packageLookupValue.getErrorMsg()).isNotNull(); } - scratch.overwriteFile("config/blacklisted.txt", "not_blacklisted"); + scratch.overwriteFile( + ADDITIONAL_BLACKLISTED_PACKAGE_PREFIXES_FILE_PATH_STRING, "not_blacklisted"); RootedPath rootedBlacklist = RootedPath.toRootedPath( blacklist.getParentDirectory().getParentDirectory(), PathFragment.create("config/blacklisted.txt")); diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunctionSmartNegationTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunctionSmartNegationTest.java index bbf9f945d9..cea8acb063 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunctionSmartNegationTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/PrepareDepsOfPatternsFunctionSmartNegationTest.java @@ -17,25 +17,43 @@ import static com.google.common.truth.Truth.assertThat; import static com.google.devtools.build.skyframe.WalkableGraphUtils.exists; import com.google.common.base.Preconditions; +import com.google.common.base.Predicates; import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; import com.google.common.eventbus.EventBus; -import com.google.devtools.build.lib.analysis.util.BuildViewTestCase; +import com.google.devtools.build.lib.analysis.BlazeDirectories; +import com.google.devtools.build.lib.analysis.ServerDirectories; +import com.google.devtools.build.lib.analysis.util.AnalysisMock; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.PackageIdentifier; +import com.google.devtools.build.lib.cmdline.RepositoryName; import com.google.devtools.build.lib.events.Reporter; +import com.google.devtools.build.lib.packages.SkylarkSemanticsOptions; +import com.google.devtools.build.lib.pkgcache.PackageCacheOptions; +import com.google.devtools.build.lib.pkgcache.PathPackageLocator; +import com.google.devtools.build.lib.rules.repository.RepositoryDelegatorFunction; +import com.google.devtools.build.lib.testutil.FoundationTestCase; +import com.google.devtools.build.lib.testutil.TestConstants; +import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor; import com.google.devtools.build.lib.vfs.PathFragment; import com.google.devtools.build.skyframe.EvaluationResult; import com.google.devtools.build.skyframe.SkyKey; import com.google.devtools.build.skyframe.SkyValue; import com.google.devtools.build.skyframe.WalkableGraph; +import com.google.devtools.common.options.Options; import java.io.IOException; +import java.util.UUID; +import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; /** Tests for {@link PrepareDepsOfPatternsFunction}. */ @RunWith(JUnit4.class) -public class PrepareDepsOfPatternsFunctionSmartNegationTest extends BuildViewTestCase { +public class PrepareDepsOfPatternsFunctionSmartNegationTest extends FoundationTestCase { + private SkyframeExecutor skyframeExecutor; + private static final String ADDITIONAL_BLACKLISTED_PACKAGE_PREFIXES_FILE_PATH_STRING = + "config/blacklist.txt"; private static SkyKey getKeyForLabel(Label label) { // Note that these tests used to look for TargetMarker SkyKeys before TargetMarker was @@ -44,6 +62,47 @@ public class PrepareDepsOfPatternsFunctionSmartNegationTest extends BuildViewTes return TransitiveTraversalValue.key(label); } + @Before + public void setUp() throws Exception { + BlazeDirectories directories = + new BlazeDirectories( + new ServerDirectories(getScratch().dir("/install"), getScratch().dir("/output")), + rootDirectory, + AnalysisMock.get().getProductName()); + skyframeExecutor = + SequencedSkyframeExecutor.create( + AnalysisMock.get() + .getPackageFactoryBuilderForTesting(directories) + .build(AnalysisMock.get().createRuleClassProvider(), fileSystem), + fileSystem, + directories, + /*workspaceStatusActionFactory=*/ null, + AnalysisMock.get().createRuleClassProvider().getBuildInfoFactories(), + ImmutableList.of(), + Predicates.alwaysFalse(), + AnalysisMock.get().getSkyFunctions(directories), + ImmutableList.of(), + BazelSkyframeExecutorConstants.HARDCODED_BLACKLISTED_PACKAGE_PREFIXES, + PathFragment.create(ADDITIONAL_BLACKLISTED_PACKAGE_PREFIXES_FILE_PATH_STRING), + BazelSkyframeExecutorConstants.CROSS_REPOSITORY_LABEL_VIOLATION_STRATEGY, + BazelSkyframeExecutorConstants.BUILD_FILES_BY_PRIORITY, + BazelSkyframeExecutorConstants.ACTION_ON_IO_EXCEPTION_READING_BUILD_FILE); + TestConstants.processSkyframeExecutorForTesting(skyframeExecutor); + skyframeExecutor.preparePackageLoading( + new PathPackageLocator(outputBase, ImmutableList.of(rootDirectory)), + Options.getDefaults(PackageCacheOptions.class), + Options.getDefaults(SkylarkSemanticsOptions.class), + AnalysisMock.get().getDefaultsPackageContent(), + UUID.randomUUID(), + ImmutableMap.<String, String>of(), + ImmutableMap.<String, String>of(), + new TimestampGranularityMonitor(null)); + skyframeExecutor.injectExtraPrecomputedValues(ImmutableList.of(PrecomputedValue.injected( + RepositoryDelegatorFunction.REPOSITORY_OVERRIDES, + ImmutableMap.<RepositoryName, PathFragment>of()))); + scratch.file(ADDITIONAL_BLACKLISTED_PACKAGE_PREFIXES_FILE_PATH_STRING); + } + @Test public void testRecursiveEvaluationFailsOnBadBuildFile() throws Exception { // Given a well-formed package "@//foo" and a malformed package "@//foo/foo", @@ -89,9 +148,7 @@ public class PrepareDepsOfPatternsFunctionSmartNegationTest extends BuildViewTes ImmutableList<String> patternSequence = ImmutableList.of("//foo/..."); // and a blacklist for the malformed package, - getSkyframeExecutor().setBlacklistedPackagePrefixesFile( - PathFragment.create("config/blacklist.txt")); - scratch.file("config/blacklist.txt", "foo/foo"); + scratch.overwriteFile(ADDITIONAL_BLACKLISTED_PACKAGE_PREFIXES_FILE_PATH_STRING, "foo/foo"); assertSkipsFoo(patternSequence); } @@ -140,12 +197,12 @@ public class PrepareDepsOfPatternsFunctionSmartNegationTest extends BuildViewTes // When PrepareDepsOfPatternsFunction completes evaluation, EvaluationResult<SkyValue> evaluationResult = - getSkyframeExecutor() + skyframeExecutor .getDriverForTesting() .evaluate( singletonTargetPattern, keepGoing, - LOADING_PHASE_THREADS, + /*numThreads=*/ 100, new Reporter(new EventBus(), eventCollector)); // The evaluation has no errors if success was expected. assertThat(evaluationResult.hasError()).isNotEqualTo(successExpected); 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 e0d3bdfab7..f18e2b6149 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 @@ -116,7 +116,9 @@ public final class RecursiveFilesystemTraversalFunctionTest extends FoundationTe CrossRepositoryLabelViolationStrategy.ERROR, ImmutableList.of(BuildFileName.BUILD_DOT_BAZEL, BuildFileName.BUILD))); skyFunctions.put(SkyFunctions.BLACKLISTED_PACKAGE_PREFIXES, - new BlacklistedPackagePrefixesFunction()); + new BlacklistedPackagePrefixesFunction( + /*hardcodedBlacklistedPackagePrefixes=*/ ImmutableSet.of(), + /*additionalBlacklistedPackagePrefixesFile=*/ PathFragment.EMPTY_FRAGMENT)); skyFunctions.put(SkyFunctions.PACKAGE, new PackageFunction(null, null, null, null, null, null, null)); skyFunctions.put(SkyFunctions.WORKSPACE_AST, new WorkspaceASTFunction(ruleClassProvider)); @@ -142,8 +144,6 @@ public final class RecursiveFilesystemTraversalFunctionTest extends FoundationTe driver = new SequentialBuildDriver(evaluator); PrecomputedValue.BUILD_ID.set(differencer, UUID.randomUUID()); PrecomputedValue.PATH_PACKAGE_LOCATOR.set(differencer, pkgLocator.get()); - PrecomputedValue.BLACKLISTED_PACKAGE_PREFIXES_FILE.set( - differencer, PathFragment.EMPTY_FRAGMENT); } private Artifact sourceArtifact(String path) { |