aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/exec
diff options
context:
space:
mode:
authorGravatar felly <felly@google.com>2018-07-23 10:24:35 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-07-23 10:25:44 -0700
commit186b887e5862c1502010f097e75bfd8d605620b0 (patch)
tree4d8a9564f1ade397281b9acb2031b93041f6c87c /src/main/java/com/google/devtools/build/lib/exec
parent6c8166e2ff915f8a903365c9ec223068ae453751 (diff)
Fileset manifests now propagate Artifact metadata.
PiperOrigin-RevId: 205682761
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/exec')
-rw-r--r--src/main/java/com/google/devtools/build/lib/exec/FilesetManifest.java25
1 files changed, 20 insertions, 5 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/exec/FilesetManifest.java b/src/main/java/com/google/devtools/build/lib/exec/FilesetManifest.java
index 1b35631108..90f20b44c8 100644
--- a/src/main/java/com/google/devtools/build/lib/exec/FilesetManifest.java
+++ b/src/main/java/com/google/devtools/build/lib/exec/FilesetManifest.java
@@ -15,7 +15,9 @@ package com.google.devtools.build.lib.exec;
import static java.nio.charset.StandardCharsets.UTF_8;
+import com.google.common.collect.ImmutableMap;
import com.google.common.io.LineProcessor;
+import com.google.devtools.build.lib.actions.FileArtifactValue;
import com.google.devtools.build.lib.actions.FilesetOutputSymlink;
import com.google.devtools.build.lib.analysis.AnalysisUtils;
import com.google.devtools.build.lib.vfs.FileSystemUtils;
@@ -77,13 +79,17 @@ public final class FilesetManifest {
throws IOException {
LinkedHashMap<PathFragment, String> entries = new LinkedHashMap<>();
Map<PathFragment, String> relativeLinks = new HashMap<>();
+ Map<PathFragment, FileArtifactValue> artifactValues = new HashMap<>();
for (FilesetOutputSymlink outputSymlink : outputSymlinks) {
PathFragment fullLocation = targetPrefix.getRelative(outputSymlink.getName());
String artifact = outputSymlink.getTargetPath().getPathString();
artifact = artifact.isEmpty() ? null : artifact;
addSymlinkEntry(artifact, fullLocation, relSymlinkbehavior, entries, relativeLinks);
+ if (outputSymlink.getMetadata() instanceof FileArtifactValue) {
+ artifactValues.put(fullLocation, (FileArtifactValue) outputSymlink.getMetadata());
+ }
}
- return constructFilesetManifest(entries, relativeLinks);
+ return constructFilesetManifest(entries, relativeLinks, artifactValues);
}
private static final class ManifestLineProcessor implements LineProcessor<FilesetManifest> {
@@ -147,7 +153,7 @@ public final class FilesetManifest {
@Override
public FilesetManifest getResult() {
- return constructFilesetManifest(entries, relativeLinks);
+ return constructFilesetManifest(entries, relativeLinks, ImmutableMap.of());
}
}
@@ -173,7 +179,8 @@ public final class FilesetManifest {
}
private static FilesetManifest constructFilesetManifest(
- Map<PathFragment, String> entries, Map<PathFragment, String> relativeLinks) {
+ Map<PathFragment, String> entries, Map<PathFragment, String> relativeLinks,
+ Map<PathFragment, FileArtifactValue> artifactValues) {
// Resolve relative symlinks if possible. Note that relativeLinks only contains entries in
// RESOLVE mode.
for (Map.Entry<PathFragment, String> e : relativeLinks.entrySet()) {
@@ -196,16 +203,24 @@ public final class FilesetManifest {
}
entries.put(location, actual);
}
- return new FilesetManifest(entries);
+ return new FilesetManifest(entries, artifactValues);
}
private final Map<PathFragment, String> entries;
+ private final Map<PathFragment, FileArtifactValue> artifactValues;
- private FilesetManifest(Map<PathFragment, String> entries) {
+ private FilesetManifest(Map<PathFragment, String> entries,
+ Map<PathFragment, FileArtifactValue> artifactValues) {
this.entries = Collections.unmodifiableMap(entries);
+ this.artifactValues = artifactValues;
}
public Map<PathFragment, String> getEntries() {
return entries;
}
+
+ public Map<PathFragment, FileArtifactValue> getArtifactValues() {
+ return artifactValues;
+ }
+
}