From af0e20f9d9808d8fba03b712491ad8851b3d5c26 Mon Sep 17 00:00:00 2001 From: gregce Date: Thu, 9 Sep 2021 13:51:38 -0700 Subject: [PATCH] Remove outdated "output directory name" option. This was exclusively used to set the host configuration's output directory to "host". We can achieve that more directly. This also reduces the conceptual complexity of understanding the various flags affecting output directories. PiperOrigin-RevId: 395779491 --- .../analysis/config/BuildConfiguration.java | 7 ------- .../lib/analysis/config/CoreOptions.java | 18 ----------------- .../config/ExecutionTransitionFactory.java | 1 - .../analysis/config/OutputDirectories.java | 3 +-- .../build/lib/analysis/BuildViewTest.java | 20 ------------------- .../skyframe/PlatformMappingFunctionTest.java | 6 +++--- 6 files changed, 4 insertions(+), 51 deletions(-) diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java index a617659da0ec08..5d2d77bf26a755 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java @@ -37,7 +37,6 @@ import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.cmdline.RepositoryName; import com.google.devtools.build.lib.concurrent.BlazeInterners; -import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.events.EventHandler; import com.google.devtools.build.lib.packages.RuleClassProvider; import com.google.devtools.build.lib.skyframe.serialization.autocodec.AutoCodec; @@ -181,12 +180,6 @@ public void reportInvalidOptions(EventHandler reporter) { for (Fragment fragment : fragments.values()) { fragment.reportInvalidOptions(reporter, this.buildOptions); } - - if (options.outputDirectoryName != null) { - reporter.handle( - Event.error( - "The internal '--output directory name' option cannot be used on the command line")); - } } /** diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/CoreOptions.java b/src/main/java/com/google/devtools/build/lib/analysis/config/CoreOptions.java index 296967ab99c13c..bb77ae65b0b188 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/config/CoreOptions.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/config/CoreOptions.java @@ -230,23 +230,6 @@ public class CoreOptions extends FragmentOptions implements Cloneable { + "'fastbuild', 'dbg', 'opt'.") public CompilationMode hostCompilationMode; - /** - * This option is used internally to set output directory name of the host configuration to - * a constant, so that the output files for the host are completely independent of those for the - * target, no matter what options are in force (k8/piii, opt/dbg, etc). - */ - @Option( - name = "output directory name", - defaultValue = "null", - documentationCategory = OptionDocumentationCategory.UNDOCUMENTED, - effectTags = { - OptionEffectTag.LOSES_INCREMENTAL_STATE, - OptionEffectTag.AFFECTS_OUTPUTS, - OptionEffectTag.LOADING_AND_ANALYSIS - }, - metadataTags = {OptionMetadataTag.INTERNAL}) - public String outputDirectoryName; - /** * This option is used by starlark transitions to add a distinguishing element to the output * directory name, in order to avoid name clashing. @@ -841,7 +824,6 @@ public IncludeConfigFragmentsEnumConverter() { public FragmentOptions getHost() { CoreOptions host = (CoreOptions) getDefault(); - host.outputDirectoryName = "host"; host.transitionDirectoryNameFragment = transitionDirectoryNameFragment; host.affectedByStarlarkTransition = affectedByStarlarkTransition; host.compilationMode = hostCompilationMode; diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/ExecutionTransitionFactory.java b/src/main/java/com/google/devtools/build/lib/analysis/config/ExecutionTransitionFactory.java index 175ddf73d56da9..3aba1d27aa8490 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/config/ExecutionTransitionFactory.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/config/ExecutionTransitionFactory.java @@ -127,7 +127,6 @@ private static BuildOptions transitionImpl(BuildOptionsView options, Label execu CoreOptions coreOptions = checkNotNull(execOptions.get(CoreOptions.class)); coreOptions.isHost = false; coreOptions.isExec = true; - coreOptions.outputDirectoryName = null; coreOptions.platformSuffix = String.format("-exec-%X", executionPlatform.getCanonicalForm().hashCode()); diff --git a/src/main/java/com/google/devtools/build/lib/analysis/config/OutputDirectories.java b/src/main/java/com/google/devtools/build/lib/analysis/config/OutputDirectories.java index a42f4bcbfb1ce5..8d9528090b051f 100644 --- a/src/main/java/com/google/devtools/build/lib/analysis/config/OutputDirectories.java +++ b/src/main/java/com/google/devtools/build/lib/analysis/config/OutputDirectories.java @@ -147,8 +147,7 @@ public ArtifactRoot getRoot( throws InvalidMnemonicException { this.directories = directories; this.mnemonic = buildMnemonic(options, fragments); - this.outputDirName = - (options.outputDirectoryName != null) ? options.outputDirectoryName : mnemonic; + this.outputDirName = options.isHost ? "host" : mnemonic; this.outputDirectory = OutputDirectory.OUTPUT.getRoot(outputDirName, directories, mainRepositoryName); diff --git a/src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java b/src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java index e14e7295660d06..11cfae0f36efb3 100644 --- a/src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java +++ b/src/test/java/com/google/devtools/build/lib/analysis/BuildViewTest.java @@ -29,7 +29,6 @@ import com.google.devtools.build.lib.actions.Actions; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.FailAction; -import com.google.devtools.build.lib.analysis.config.CoreOptions; import com.google.devtools.build.lib.analysis.config.transitions.NoTransition; import com.google.devtools.build.lib.analysis.config.transitions.NullTransition; import com.google.devtools.build.lib.analysis.configuredtargets.InputFileConfiguredTarget; @@ -54,8 +53,6 @@ import com.google.devtools.build.lib.vfs.Path; import com.google.devtools.build.lib.vfs.PathFragment; import com.google.devtools.build.skyframe.NotifyingHelper.Listener; -import com.google.devtools.common.options.Options; -import com.google.devtools.common.options.OptionsParsingException; import java.util.ArrayList; import java.util.Collection; import java.util.LinkedHashSet; @@ -550,23 +547,6 @@ reporter, top, getBuildConfigurationCollection(), /* toolchainContexts= */ null) assertThat(targets).containsExactly(innerDependency, fileDependency); } - /** Tests that the {@code --output directory name} option cannot be used on the command line. */ - @Test - public void testConfigurationShortName() { - // Check that output directory name is still the name, otherwise this test is not testing what - // we expect. - CoreOptions options = Options.getDefaults(CoreOptions.class); - options.outputDirectoryName = "/home/wonkaw/wonka_chocolate/factory/out"; - assertWithMessage("The flag's name may have been changed; this test may need to be updated.") - .that(options.asMap().get("output directory name")) - .isEqualTo("/home/wonkaw/wonka_chocolate/factory/out"); - - OptionsParsingException e = - assertThrows( - OptionsParsingException.class, () -> useConfiguration("--output directory name=foo")); - assertThat(e).hasMessageThat().isEqualTo("Unrecognized option: --output directory name=foo"); - } - // Regression test: "output_filter broken (but in a different way)" @Test @Ignore("b/182560362 Starlark java_library can't output warnings") diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/PlatformMappingFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/PlatformMappingFunctionTest.java index 40b603de37b7aa..f8d778664a9a95 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/PlatformMappingFunctionTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/PlatformMappingFunctionTest.java @@ -210,7 +210,7 @@ public void multiplePackagePathsFirstWins() throws Exception { assertThat(mapped.getOptions().get(CoreOptions.class).cpu).isEqualTo("one"); } - // Internal flags, such as "output directory name", cannot be set from the command-line, but + // Internal flags (OptionMetadataTag.INTERNAL) cannot be set from the command-line, but // platform mapping needs to access them. @Test public void ableToChangeInternalOption() throws Exception { @@ -218,7 +218,7 @@ public void ableToChangeInternalOption() throws Exception { "my_mapping_file", "platforms:", // Force line break " //platforms:one", // Force line break - " --output directory name=updated_output_dir"); + " --transition directory name fragment=updated_output_dir"); PlatformMappingValue platformMappingValue = executeFunction(PlatformMappingValue.Key.create(PathFragment.create("my_mapping_file"))); @@ -228,7 +228,7 @@ public void ableToChangeInternalOption() throws Exception { BuildConfigurationValue.Key mapped = platformMappingValue.map(keyForOptions(modifiedOptions)); - assertThat(mapped.getOptions().get(CoreOptions.class).outputDirectoryName) + assertThat(mapped.getOptions().get(CoreOptions.class).transitionDirectoryNameFragment) .isEqualTo("updated_output_dir"); }