diff options
author | 2017-05-03 22:58:50 +0200 | |
---|---|---|
committer | 2017-05-04 13:13:54 +0200 | |
commit | d746655be6a46ac05252cf460dfed14d1f7ca120 (patch) | |
tree | 46f2e7da93f68844b1e92b58bb0072f67b9712ee /src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java | |
parent | 5f1d88646b35625aa90a178efb8ef8ca4b736a00 (diff) |
BuildOptions cleanup:
1) Remove obsolete originalOptions field. This was originally added to
support "parent" transitions, which supported config1 -> config2 -> config1
transitions by having config2 store config1's options.
The purpose of this feature was to support LIPO (which has a DATA -> TARGET
transition). But https://github.com/bazelbuild/bazel/commit/ff29c0b39cf936a2699b05edd54f483f1a037d93
makes this unnecessary.
2) Support the "disable actions" feature of the LIPO context collector configuration.
Putting this in BuildOptions make this dynamic config-compatible.
This change intentionally doesn't add disableOptions to BuildOptions.equals() or
BuildOptions.hashCode(). It'd be great to do that. But that has semantic consequences.
And we've run into really tricky bugs in the past with dynamic configurations and
BuildOptions.equals / BuildConfiguration.equals. So it's best to experiment with
that in its own change.
PiperOrigin-RevId: 154999718
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/analysis/config/BuildConfiguration.java | 18 |
1 files changed, 10 insertions, 8 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 3273a6d3e6..af68c8b9fa 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 @@ -1119,6 +1119,7 @@ public final class BuildConfiguration { private final ImmutableMap<Class<? extends Fragment>, Fragment> fragments; private final ImmutableMap<String, Class<? extends Fragment>> skylarkVisibleFragments; + /** * Directories in the output tree. * @@ -1221,7 +1222,8 @@ public final class BuildConfiguration { private final Root testlogsDirectoryForMainRepository; private final Root middlemanDirectoryForMainRepository; - /** If false, AnalysisEnviroment doesn't register any actions created by the ConfiguredTarget. */ + // Cache this value for quicker access. We don't cache it inside BuildOptions because BuildOptions + // is mutable, so a cached value there could fall out of date when it's updated. private final boolean actionsEnabled; // TODO(bazel-team): Move this to a configuration fragment. @@ -1304,7 +1306,7 @@ public final class BuildConfiguration { } private int computeHashCode() { - return Objects.hash(actionsEnabled, fragments, buildOptions.getOptions()); + return Objects.hash(isActionsEnabled(), fragments, buildOptions.getOptions()); } @Override @@ -1425,15 +1427,14 @@ public final class BuildConfiguration { */ public BuildConfiguration(BlazeDirectories directories, Map<Class<? extends Fragment>, Fragment> fragmentsMap, - BuildOptions buildOptions, - boolean actionsDisabled) { + BuildOptions buildOptions) { this.directories = directories; - this.actionsEnabled = !actionsDisabled; this.fragments = ImmutableSortedMap.copyOf(fragmentsMap, lexicalFragmentSorter); this.skylarkVisibleFragments = buildIndexOfSkylarkVisibleFragments(); - this.buildOptions = buildOptions; + this.buildOptions = buildOptions.clone(); + this.actionsEnabled = buildOptions.enableActions(); this.options = buildOptions.get(Options.class); Map<String, String> testEnv = new TreeMap<>(); @@ -1521,7 +1522,7 @@ public final class BuildConfiguration { BuildOptions options = buildOptions.trim( getOptionsClasses(fragmentsMap.keySet(), ruleClassProvider)); BuildConfiguration newConfig = - new BuildConfiguration(directories, fragmentsMap, options, !actionsEnabled); + new BuildConfiguration(directories, fragmentsMap, options); newConfig.setConfigurationTransitions(this.transitions); return newConfig; } @@ -2447,6 +2448,7 @@ public final class BuildConfiguration { return options.useLLVMCoverageMapFormat; } + /** If false, AnalysisEnviroment doesn't register any actions created by the ConfiguredTarget. */ public boolean isActionsEnabled() { return actionsEnabled; } @@ -2492,7 +2494,7 @@ public final class BuildConfiguration { } public List<Label> getActionListeners() { - return actionsEnabled ? options.actionListeners : ImmutableList.<Label>of(); + return isActionsEnabled() ? options.actionListeners : ImmutableList.<Label>of(); } /** |