diff options
author | 2017-02-10 17:24:03 +0000 | |
---|---|---|
committer | 2017-02-10 18:19:31 +0000 | |
commit | 5490757be5e527df82eee5094a0f59c86a5de766 (patch) | |
tree | 6d75800e0348de7e3472dd37de75d467a65fb468 /src/main/java/com/google/devtools/build/lib/skyframe/ActionTemplateExpansionFunction.java | |
parent | 762576e5e7a3ee0da39dbb24134cb8530cbb911e (diff) |
Introduce CppCompileActionTemplate, which expands into a list of CppCompileActions that to be executed at execution time.
--
PiperOrigin-RevId: 147163077
MOS_MIGRATED_REVID=147163077
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/ActionTemplateExpansionFunction.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skyframe/ActionTemplateExpansionFunction.java | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ActionTemplateExpansionFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ActionTemplateExpansionFunction.java index 6a18db78dd..3164f16973 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/ActionTemplateExpansionFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/ActionTemplateExpansionFunction.java @@ -15,16 +15,20 @@ package com.google.devtools.build.lib.skyframe; import com.google.common.collect.ImmutableList; import com.google.devtools.build.lib.actions.Action; +import com.google.devtools.build.lib.actions.ActionAnalysisMetadata; +import com.google.devtools.build.lib.actions.Actions; +import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.Artifact.TreeFileArtifact; import com.google.devtools.build.lib.actions.ArtifactPrefixConflictException; import com.google.devtools.build.lib.actions.MutableActionGraph.ActionConflictException; -import com.google.devtools.build.lib.analysis.actions.SpawnActionTemplate; +import com.google.devtools.build.lib.analysis.actions.ActionTemplate; import com.google.devtools.build.lib.events.Event; import com.google.devtools.build.lib.skyframe.ActionTemplateExpansionValue.ActionTemplateExpansionKey; import com.google.devtools.build.skyframe.SkyFunction; import com.google.devtools.build.skyframe.SkyFunctionException; import com.google.devtools.build.skyframe.SkyKey; import com.google.devtools.build.skyframe.SkyValue; +import java.util.Map; import javax.annotation.Nullable; /** @@ -40,7 +44,7 @@ public class ActionTemplateExpansionFunction implements SkyFunction { public SkyValue compute(SkyKey skyKey, Environment env) throws ActionTemplateExpansionFunctionException, InterruptedException { ActionTemplateExpansionKey key = (ActionTemplateExpansionKey) skyKey.argument(); - SpawnActionTemplate actionTemplate = key.getActionTemplate(); + ActionTemplate actionTemplate = key.getActionTemplate(); // Requests the TreeArtifactValue object for the input TreeArtifact. SkyKey artifactValueKey = ArtifactSkyKey.key(actionTemplate.getInputTreeArtifact(), true); @@ -56,6 +60,9 @@ public class ActionTemplateExpansionFunction implements SkyFunction { // Expand the action template using the list of expanded input TreeFileArtifacts. expandedActions = ImmutableList.<Action>copyOf( actionTemplate.generateActionForInputArtifacts(inputTreeFileArtifacts, key)); + // TODO(rduan): Add a check to verify the inputs of expanded actions are subsets of inputs + // of the ActionTemplate. + checkActionAndArtifactConflicts(expandedActions); } catch (ActionConflictException e) { e.reportTo(env.getListener()); throw new ActionTemplateExpansionFunctionException(e); @@ -78,6 +85,18 @@ public class ActionTemplateExpansionFunction implements SkyFunction { } } + private static void checkActionAndArtifactConflicts(Iterable<Action> actions) + throws ActionConflictException, ArtifactPrefixConflictException { + Map<Artifact, ActionAnalysisMetadata> generatingActions = + Actions.findAndThrowActionConflict(ImmutableList.<ActionAnalysisMetadata>copyOf(actions)); + Map<ActionAnalysisMetadata, ArtifactPrefixConflictException> artifactPrefixConflictMap = + Actions.findArtifactPrefixConflicts(generatingActions); + + if (!artifactPrefixConflictMap.isEmpty()) { + throw artifactPrefixConflictMap.values().iterator().next(); + } + } + @Nullable @Override public String extractTag(SkyKey skyKey) { |