aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib
diff options
context:
space:
mode:
authorGravatar Greg Estren <gregce@google.com>2016-10-04 18:01:01 +0000
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2016-10-05 12:25:35 +0000
commitc396f9c90f8deeac6320ba8032410ad21ac4e008 (patch)
tree0f240115c2ffbdf2fff5bc95a2b8e008bcd7beb1 /src/main/java/com/google/devtools/build/lib
parent4f9d77c95555f97f5f1a5f157befaa3ba6466b70 (diff)
Don't inherit the host configuration's fragments from the target config in --experimental_dynamic_configs=notrim mode.
-- MOS_MIGRATED_REVID=135126724
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java15
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/ConfigurationCollectionFunction.java9
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java5
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java16
4 files changed, 27 insertions, 18 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
index 2037dbbb38..2d3119c4ac 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
@@ -25,6 +25,7 @@ import com.google.common.cache.LoadingCache;
import com.google.common.collect.ImmutableBiMap;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoFactory;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.analysis.config.BuildOptions;
@@ -63,6 +64,7 @@ import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.TreeMap;
import javax.annotation.Nullable;
@@ -716,4 +718,17 @@ public class ConfiguredRuleClassProvider implements RuleClassProvider {
public String getDefaultWorkspaceSuffix() {
return defaultWorkspaceFileSuffix;
}
+
+ /**
+ * Returns all registered {@link BuildConfiguration.Fragment} classes.
+ */
+ public Set<Class<? extends BuildConfiguration.Fragment>> getAllFragments() {
+ ImmutableSet.Builder<Class<? extends BuildConfiguration.Fragment>> fragmentsBuilder =
+ ImmutableSet.builder();
+ for (ConfigurationFragmentFactory factory : getConfigurationFragments()) {
+ fragmentsBuilder.add(factory.creates());
+ }
+ fragmentsBuilder.add(getUniversalFragment());
+ return fragmentsBuilder.build();
+ }
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ConfigurationCollectionFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ConfigurationCollectionFunction.java
index e73b2b4cd5..007a5c129b 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ConfigurationCollectionFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ConfigurationCollectionFunction.java
@@ -17,6 +17,7 @@ import com.google.common.base.Supplier;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import com.google.common.collect.ImmutableSet;
+import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.analysis.config.BuildConfigurationCollection;
import com.google.devtools.build.lib.analysis.config.BuildOptions;
@@ -116,13 +117,17 @@ public class ConfigurationCollectionFunction implements SkyFunction {
}
/** Returns the host configuration, or null on missing Skyframe deps. */
- private static BuildConfiguration getHostConfiguration(
+ private BuildConfiguration getHostConfiguration(
Environment env, BuildConfiguration targetConfiguration)
throws InvalidConfigurationException, InterruptedException {
if (targetConfiguration.useDynamicConfigurations()) {
BuildOptions hostOptions = HostTransition.INSTANCE.apply(targetConfiguration.getOptions());
SkyKey hostConfigKey =
- BuildConfigurationValue.key(targetConfiguration.fragmentClasses(), hostOptions);
+ BuildConfigurationValue.key(
+ targetConfiguration.trimConfigurations()
+ ? targetConfiguration.fragmentClasses()
+ : ((ConfiguredRuleClassProvider) ruleClassProvider).getAllFragments(),
+ hostOptions);
BuildConfigurationValue skyValHost = (BuildConfigurationValue)
env.getValueOrThrow(hostConfigKey, InvalidConfigurationException.class);
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java
index e9ec6f417f..0c162b1783 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeBuildView.java
@@ -517,7 +517,10 @@ public final class SkyframeBuildView {
// trims a host configuration to the same scope as a target configuration. Since their options
// are different, the host instance may actually be able to produce the fragment. So it's
// wrong and potentially dangerous to unilaterally exclude it.
- Set<Class<? extends BuildConfiguration.Fragment>> fragmentClasses = config.fragmentClasses();
+ Set<Class<? extends BuildConfiguration.Fragment>> fragmentClasses =
+ config.trimConfigurations()
+ ? config.fragmentClasses()
+ : ((ConfiguredRuleClassProvider) ruleClassProvider).getAllFragments();
BuildConfiguration hostConfig = hostConfigurationCache.get(fragmentClasses);
if (hostConfig != null) {
return hostConfig;
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 804b950d4d..c87db1e6b4 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
@@ -1247,7 +1247,7 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory {
// Check: if !Configuration.useDynamicConfigs then just return the original configs.
Set<Class<? extends BuildConfiguration.Fragment>> allFragments = null;
if (useUntrimmedDynamicConfigs(fromOptions)) {
- allFragments = getAllFragments();
+ allFragments = ((ConfiguredRuleClassProvider) ruleClassProvider).getAllFragments();
}
// Get the fragments needed for dynamic configuration nodes.
@@ -1323,20 +1323,6 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory {
}
/**
- * Returns all configuration fragments registered with Blaze.
- */
- private Set<Class<? extends BuildConfiguration.Fragment>> getAllFragments() {
- ImmutableSet.Builder<Class<? extends BuildConfiguration.Fragment>> fragmentsBuilder =
- ImmutableSet.builder();
- for (ConfigurationFragmentFactory factory :
- ((ConfiguredRuleClassProvider) ruleClassProvider).getConfigurationFragments()) {
- fragmentsBuilder.add(factory.creates());
- }
- fragmentsBuilder.add(((ConfiguredRuleClassProvider) ruleClassProvider).getUniversalFragment());
- return fragmentsBuilder.build();
- }
-
- /**
* Computes the build options needed for the given key, accounting for transitions possibly
* specified in the key.
*/