aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skyframe/ActionTemplateExpansionFunction.java
diff options
context:
space:
mode:
authorGravatar Rumou Duan <rduan@google.com>2017-02-10 17:24:03 +0000
committerGravatar Kristina Chodorow <kchodorow@google.com>2017-02-10 18:19:31 +0000
commit5490757be5e527df82eee5094a0f59c86a5de766 (patch)
tree6d75800e0348de7e3472dd37de75d467a65fb468 /src/main/java/com/google/devtools/build/lib/skyframe/ActionTemplateExpansionFunction.java
parent762576e5e7a3ee0da39dbb24134cb8530cbb911e (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.java23
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) {