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/ActionTemplateExpansionFunction.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/ActionTemplateExpansionFunction.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skyframe/ActionTemplateExpansionFunction.java | 14 |
1 files changed, 7 insertions, 7 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 e3081aaf81..d49d533350 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 @@ -73,14 +73,14 @@ public class ActionTemplateExpansionFunction implements SkyFunction { return null; } Iterable<TreeFileArtifact> inputTreeFileArtifacts = treeArtifactValue.getChildren(); - Iterable<Action> expandedActions; + GeneratingActions generatingActions; try { // 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); + generatingActions = + checkActionAndArtifactConflicts( + actionTemplate.generateActionForInputArtifacts(inputTreeFileArtifacts, key)); } catch (ActionConflictException e) { e.reportTo(env.getListener()); throw new ActionTemplateExpansionFunctionException(e); @@ -92,8 +92,7 @@ public class ActionTemplateExpansionFunction implements SkyFunction { throw new ActionTemplateExpansionFunctionException(e); } - return new ActionTemplateExpansionValue( - actionKeyContext, expandedActions, removeActionsAfterEvaluation.get()); + return new ActionTemplateExpansionValue(generatingActions, removeActionsAfterEvaluation.get()); } /** Exception thrown by {@link ActionTemplateExpansionFunction}. */ @@ -111,7 +110,7 @@ public class ActionTemplateExpansionFunction implements SkyFunction { } } - private void checkActionAndArtifactConflicts(Iterable<Action> actions) + private GeneratingActions checkActionAndArtifactConflicts(Iterable<? extends Action> actions) throws ActionConflictException, ArtifactPrefixConflictException { GeneratingActions generatingActions = Actions.findAndThrowActionConflict(actionKeyContext, ImmutableList.copyOf(actions)); @@ -123,6 +122,7 @@ public class ActionTemplateExpansionFunction implements SkyFunction { if (!artifactPrefixConflictMap.isEmpty()) { throw artifactPrefixConflictMap.values().iterator().next(); } + return generatingActions; } @Nullable |