aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2017-02-06 20:08:48 +0000
committerGravatar Kristina Chodorow <kchodorow@google.com>2017-02-07 18:22:12 +0000
commiteba6a442159f838311082bc18b6fa32cbabad31e (patch)
tree2cbee2e428f9bfee884923cd203ef21d246cf618 /src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java
parent73726a8a46cd5260fd0cc1cbf32c93922ca6ffb8 (diff)
Adds abstractions for include processing to CppSemantics
-- PiperOrigin-RevId: 146694092 MOS_MIGRATED_REVID=146694092
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java27
1 files changed, 20 insertions, 7 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java
index 657ea761e8..fc7db60296 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java
@@ -394,7 +394,8 @@ public class ActionExecutionFunction implements SkyFunction, CompletionReceiver
return null;
}
}
- addDiscoveredInputs(state.inputArtifactData, state.discoveredInputs, env);
+ addDiscoveredInputs(
+ state.inputArtifactData, state.expandedArtifacts, state.discoveredInputs, env);
if (env.valuesMissing()) {
return null;
}
@@ -411,7 +412,8 @@ public class ActionExecutionFunction implements SkyFunction, CompletionReceiver
state.discoveredInputsStage2 = action.discoverInputsStage2(env);
}
if (state.discoveredInputsStage2 != null) {
- addDiscoveredInputs(state.inputArtifactData, state.discoveredInputsStage2, env);
+ addDiscoveredInputs(
+ state.inputArtifactData, state.expandedArtifacts, state.discoveredInputsStage2, env);
if (env.valuesMissing()) {
return null;
}
@@ -422,8 +424,10 @@ public class ActionExecutionFunction implements SkyFunction, CompletionReceiver
}
actionExecutionContext =
- skyframeActionExecutor.getContext(perActionFileCache,
- metadataHandler, state.expandedArtifacts);
+ skyframeActionExecutor.getContext(
+ perActionFileCache,
+ metadataHandler,
+ Collections.unmodifiableMap(state.expandedArtifacts));
if (!state.hasExecutedAction()) {
state.value = skyframeActionExecutor.executeAction(action,
metadataHandler, actionStartTime, actionExecutionContext);
@@ -483,6 +487,7 @@ public class ActionExecutionFunction implements SkyFunction, CompletionReceiver
private static void addDiscoveredInputs(
Map<Artifact, FileArtifactValue> inputData,
+ Map<Artifact, Collection<Artifact>> expandedArtifacts,
Iterable<Artifact> discoveredInputs,
Environment env)
throws InterruptedException {
@@ -497,8 +502,16 @@ public class ActionExecutionFunction implements SkyFunction, CompletionReceiver
env.getValues(newlyDiscoveredInputsToSkyKeys(discoveredInputs, inputData.keySet()));
if (!env.valuesMissing()) {
for (Entry<SkyKey, SkyValue> entry : nonMandatoryDiscovered.entrySet()) {
- inputData.put(
- ArtifactSkyKey.artifact(entry.getKey()), (FileArtifactValue) entry.getValue());
+ Artifact input = ArtifactSkyKey.artifact(entry.getKey());
+ if (entry.getValue() instanceof TreeArtifactValue) {
+ TreeArtifactValue treeValue = (TreeArtifactValue) entry.getValue();
+ expandedArtifacts.put(input, ImmutableSet.<Artifact>copyOf(treeValue.getChildren()));
+ inputData.putAll(treeValue.getChildValues());
+
+ inputData.put(input, treeValue.getSelfData());
+ } else {
+ inputData.put(input, (FileArtifactValue) entry.getValue());
+ }
}
}
}
@@ -643,7 +656,7 @@ public class ActionExecutionFunction implements SkyFunction, CompletionReceiver
throw new ActionExecutionException(missingCount + " input file(s) do not exist", action,
rootCauses.build(), /*catastrophe=*/false);
}
- return Pair.of(inputArtifactData, Collections.unmodifiableMap(expandedArtifacts));
+ return Pair.of(inputArtifactData, expandedArtifacts);
}
private static Iterable<Artifact> filterKnownInputs(