Inject the BlazeDirectories in SkyframeExecutor. The BlazeDirectories are also needed for loading the WORKSPACE file, so inject them as part of preparePackageLoading rather than in createConfigurations, which is too late. -- MOS_MIGRATED_REVID=119931633
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/BuildTool.java b/src/main/java/com/google/devtools/build/lib/buildtool/BuildTool.java index 78e4e74..98add31 100644 --- a/src/main/java/com/google/devtools/build/lib/buildtool/BuildTool.java +++ b/src/main/java/com/google/devtools/build/lib/buildtool/BuildTool.java
@@ -178,7 +178,7 @@ } configurations = env.getSkyframeExecutor().createConfigurations( env.getReporter(), runtime.getConfigurationFactory(), buildOptions, - env.getDirectories(), request.getMultiCpus(), request.getViewOptions().keepGoing); + request.getMultiCpus(), request.getViewOptions().keepGoing); env.getEventBus().post(new ConfigurationsCreatedEvent(configurations)); env.throwPendingException();
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/CommandEnvironment.java b/src/main/java/com/google/devtools/build/lib/runtime/CommandEnvironment.java index 7e0b21a..0900086 100644 --- a/src/main/java/com/google/devtools/build/lib/runtime/CommandEnvironment.java +++ b/src/main/java/com/google/devtools/build/lib/runtime/CommandEnvironment.java
@@ -335,7 +335,7 @@ throw new InvalidConfigurationException("Configuration creation failed"); } return getSkyframeExecutor().createConfigurations(reporter, runtime.getConfigurationFactory(), - buildOptions, getDirectories(), ImmutableSet.<String>of(), keepGoing); + buildOptions, ImmutableSet.<String>of(), keepGoing); } // TODO(ulfjack): Do we even need this method? With Skyframe, the config creation should
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 ffe4091..6049fd4 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
@@ -639,8 +639,9 @@ PrecomputedValue.DEFAULT_VISIBILITY.set(injectable(), defaultVisibility); } - private void maybeInjectPrecomputedValuesForAnalysis() { + protected void maybeInjectPrecomputedValuesForAnalysis() { if (needToInjectPrecomputedValuesForAnalysis) { + PrecomputedValue.BLAZE_DIRECTORIES.set(injectable(), directories); injectBuildInfoFactories(); injectExtraPrecomputedValues(); needToInjectPrecomputedValuesForAnalysis = false; @@ -981,28 +982,17 @@ this.skyframeActionExecutor.setActionLogBufferPathGenerator(actionLogBufferPathGenerator); } - @VisibleForTesting - public void setConfigurationDataForTesting(BlazeDirectories directories, - ConfigurationFactory configurationFactory) { - PrecomputedValue.BLAZE_DIRECTORIES.set(injectable(), directories); - this.configurationFactory.set(configurationFactory); - this.configurationFragments.set(ImmutableList.copyOf(configurationFactory.getFactories())); - } - /** * Asks the Skyframe evaluator to build the value for BuildConfigurationCollection and returns the * result. Also invalidates {@link PrecomputedValue#BLAZE_DIRECTORIES} if it has changed. */ public BuildConfigurationCollection createConfigurations( EventHandler eventHandler, ConfigurationFactory configurationFactory, - BuildOptions buildOptions, BlazeDirectories directories, Set<String> multiCpu, + BuildOptions buildOptions, Set<String> multiCpu, boolean keepGoing) throws InvalidConfigurationException, InterruptedException { this.configurationFactory.set(configurationFactory); this.configurationFragments.set(ImmutableList.copyOf(configurationFactory.getFactories())); - // TODO(bazel-team): find a way to use only BuildConfigurationKey instead of - // BlazeDirectories. - PrecomputedValue.BLAZE_DIRECTORIES.set(injectable(), directories); SkyKey skyKey = ConfigurationCollectionValue.key( buildOptions, ImmutableSortedSet.copyOf(multiCpu));
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 8183f24..e116f0a 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
@@ -274,7 +274,7 @@ BuildRequestOptions requestOptions = optionsParser.getOptions(BuildRequestOptions.class); ImmutableSortedSet<String> multiCpu = ImmutableSortedSet.copyOf(requestOptions.multiCpus); masterConfig = skyframeExecutor.createConfigurations( - reporter, configurationFactory, buildOptions, directories, multiCpu, false); + reporter, configurationFactory, buildOptions, multiCpu, false); analysisResult = buildView.update( loadingResult,
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 a690340..d71b8ba 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
@@ -285,7 +285,7 @@ ensureTargetsVisited(buildOptions.getAllLabels().values()); skyframeExecutor.invalidateConfigurationCollection(); return skyframeExecutor.createConfigurations(reporter, configurationFactory, buildOptions, - directories, ImmutableSet.<String>of(), false); + ImmutableSet.<String>of(), false); } protected Target getTarget(String label)
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 f7c83ff..a973f8c 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
@@ -39,7 +39,6 @@ import com.google.devtools.build.lib.skyframe.PrecomputedValue; import com.google.devtools.build.lib.skyframe.SequencedSkyframeExecutor; import com.google.devtools.build.lib.skyframe.SkyValueDirtinessChecker; -import com.google.devtools.build.lib.skyframe.SkyframeExecutor; import com.google.devtools.build.lib.testutil.FoundationTestCase; import com.google.devtools.build.lib.testutil.TestConstants; import com.google.devtools.build.lib.testutil.TestRuleClassProvider; @@ -80,7 +79,7 @@ public List<String> multiCpus; } - protected SkyframeExecutor skyframeExecutor; + protected SequencedSkyframeExecutor skyframeExecutor; protected ConfigurationFactory configurationFactory; protected Path workspace; protected ImmutableList<Class<? extends FragmentOptions>> buildOptionClasses; @@ -163,9 +162,9 @@ parser.getOptions(TestOptions.class).multiCpus); BuildOptions buildOptions = BuildOptions.of(buildOptionClasses, parser); + skyframeExecutor.handleDiffs(reporter); BuildConfigurationCollection collection = skyframeExecutor.createConfigurations( - reporter, configurationFactory, buildOptions, - new BlazeDirectories(outputBase, outputBase, workspace), multiCpu, false); + reporter, configurationFactory, buildOptions, multiCpu, false); return collection; }