diff options
author | 2018-02-26 15:54:57 -0800 | |
---|---|---|
committer | 2018-02-26 15:57:11 -0800 | |
commit | 0175ce3630f15262172731e00e8413c534ed6a62 (patch) | |
tree | 3adaa426206428f314dba5a0a4721f032ec1abc4 /src/main/java/com/google/devtools/build/lib/skyframe/CoverageReportFunction.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/CoverageReportFunction.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skyframe/CoverageReportFunction.java | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/CoverageReportFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/CoverageReportFunction.java index 3fbf2d9e2d..b1e11dc0f1 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/CoverageReportFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/CoverageReportFunction.java @@ -20,7 +20,10 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.devtools.build.lib.actions.ActionAnalysisMetadata; 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.MutableActionGraph.ActionConflictException; import com.google.devtools.build.skyframe.SkyFunction; import com.google.devtools.build.skyframe.SkyKey; import com.google.devtools.build.skyframe.SkyValue; @@ -57,7 +60,14 @@ public class CoverageReportFunction implements SkyFunction { outputs.addAll(action.getOutputs()); } - return new CoverageReportValue(actionKeyContext, actions, removeActionsAfterEvaluation.get()); + GeneratingActions generatingActions; + try { + generatingActions = + Actions.filterSharedActionsAndThrowActionConflict(actionKeyContext, actions); + } catch (ActionConflictException e) { + throw new IllegalStateException("Action conflicts not expected in coverage: " + skyKey, e); + } + return new CoverageReportValue(generatingActions, removeActionsAfterEvaluation.get()); } @Override |