aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionFunction.java
diff options
context:
space:
mode:
authorGravatar janakr <janakr@google.com>2018-02-26 15:54:57 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-02-26 15:57:11 -0800
commit0175ce3630f15262172731e00e8413c534ed6a62 (patch)
tree3adaa426206428f314dba5a0a4721f032ec1abc4 /src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionFunction.java
parent8cfc6cd2f1165e52b28a858b849463998c0aa73d (diff)
Fail gracefully on conflicting actions generated by an aspect. These can come from Skylark, so we shouldn't crash. As a safety measure, subclasses of ActionLookupValue are now responsible for detecting action conflicts themselves.
PiperOrigin-RevId: 187095271
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionFunction.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionFunction.java21
1 files changed, 16 insertions, 5 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionFunction.java
index e8230a6b15..0794901435 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionFunction.java
@@ -18,9 +18,13 @@ import com.google.common.base.Supplier;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.actions.ActionKeyContext;
+import com.google.devtools.build.lib.actions.Actions;
+import com.google.devtools.build.lib.actions.Actions.GeneratingActions;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.ArtifactFactory;
import com.google.devtools.build.lib.actions.ArtifactRoot;
+import com.google.devtools.build.lib.actions.MutableActionGraph.ActionConflictException;
+import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoCollection;
import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoFactory;
import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoFactory.BuildInfoContext;
import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoFactory.BuildInfoKey;
@@ -85,9 +89,7 @@ public class BuildInfoCollectionFunction implements SkyFunction {
: factory.getDerivedArtifact(rootRelativePath, root, keyAndConfig);
}
};
-
- return new BuildInfoCollectionValue(
- actionKeyContext,
+ BuildInfoCollection collection =
buildInfoFactories
.get(keyAndConfig.getInfoKey())
.create(
@@ -96,8 +98,17 @@ public class BuildInfoCollectionFunction implements SkyFunction {
.getConfiguration(),
infoArtifactValue.getStableArtifact(),
infoArtifactValue.getVolatileArtifact(),
- repositoryName),
- removeActionsAfterEvaluation.get());
+ repositoryName);
+ GeneratingActions generatingActions;
+ try {
+ generatingActions =
+ Actions.filterSharedActionsAndThrowActionConflict(
+ actionKeyContext, collection.getActions());
+ } catch (ActionConflictException e) {
+ throw new IllegalStateException("Action conflicts not expected in build info: " + skyKey, e);
+ }
+ return new BuildInfoCollectionValue(
+ collection, generatingActions, removeActionsAfterEvaluation.get());
}
@Override