From 242c3b82e4455c932587395c1e9bff4fd61b0162 Mon Sep 17 00:00:00 2001 From: shahan Date: Thu, 31 May 2018 17:37:26 -0700 Subject: Converts PLACEHOLDER FileValues into RegularFileValue when queried via ActionExecutionValue.getAllFileValues. PiperOrigin-RevId: 198807229 --- .../build/lib/skyframe/ActionExecutionValue.java | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionValue.java b/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionValue.java index 7c7150bffb..a45983c1e9 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionValue.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionValue.java @@ -19,12 +19,14 @@ import com.google.common.base.Objects; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Maps; import com.google.devtools.build.lib.actions.ActionLookupData; import com.google.devtools.build.lib.actions.ActionLookupValue; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.FilesetOutputSymlink; import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; import com.google.devtools.build.lib.concurrent.ThreadSafety.ThreadSafe; +import com.google.devtools.build.lib.vfs.RootedPath; import com.google.devtools.build.skyframe.SkyKey; import com.google.devtools.build.skyframe.SkyValue; import java.util.Map; @@ -118,8 +120,8 @@ public class ActionExecutionValue implements SkyValue { * returned by {@link #getData}. Primarily needed by {@link FilesystemValueChecker}, also * called by {@link ArtifactFunction} when aggregating a {@link TreeArtifactValue}. */ - ImmutableMap getAllFileValues() { - return artifactData; + Map getAllFileValues() { + return Maps.transformEntries(artifactData, this::transformIfPlaceholder); } /** @@ -175,4 +177,20 @@ public class ActionExecutionValue implements SkyValue { public int hashCode() { return Objects.hashCode(artifactData, treeArtifactData, additionalOutputData); } + + /** Transforms PLACEHOLDER values into RegularFileValue instances. */ + private FileValue transformIfPlaceholder(Artifact artifact, FileValue value) { + if (value == FileValue.PLACEHOLDER) { + FileArtifactValue metadata = + Preconditions.checkNotNull( + additionalOutputData.get(artifact), + "Placeholder without corresponding FileArtifactValue for: %s", + artifact); + return new FileValue.RegularFileValue( + RootedPath.toRootedPath(artifact.getRoot().getRoot(), artifact.getRootRelativePath()), + new FileStateValue.RegularFileStateValue( + metadata.getSize(), metadata.getDigest(), /*contentsProxy=*/ null)); + } + return value; + } } -- cgit v1.2.3