diff options
author | janakr <janakr@google.com> | 2018-02-26 15:54:57 -0800 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-02-26 15:57:11 -0800 |
commit | 0175ce3630f15262172731e00e8413c534ed6a62 (patch) | |
tree | 3adaa426206428f314dba5a0a4721f032ec1abc4 /src/main/java/com/google/devtools/build/lib/skyframe/BuildInfoCollectionFunction.java | |
parent | 8cfc6cd2f1165e52b28a858b849463998c0aa73d (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.java | 21 |
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 |