aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com')
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunction.java35
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunction.java4
2 files changed, 22 insertions, 17 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunction.java
index f22718242c..d2e0132f3a 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/FilesetEntryFunction.java
@@ -75,7 +75,9 @@ public final class FilesetEntryFunction implements SkyFunction {
}
for (FilesetOutputSymlink s : nested.getSymlinks()) {
- maybeStoreSymlink(s, t.getDestPath(), exclusions, outputSymlinks);
+ if (!exclusions.contains(s.name.getPathString())) {
+ maybeStoreSymlink(s, t.getDestPath(), outputSymlinks);
+ }
}
} else {
// The "nested" traversal params are absent if and only if the "direct" traversal params are
@@ -163,6 +165,15 @@ public final class FilesetEntryFunction implements SkyFunction {
// Create one output symlink for each entry in the results.
for (ResolvedFile f : results) {
+ // The linkName has to be under the traversal's root, which is also the prefix to remove.
+ PathFragment linkName = f.getNameInSymlinkTree().relativeTo(prefixToRemove);
+
+ // Check whether the symlink is excluded before attempting to resolve it.
+ // It may be dangling, but excluding it is still fine.
+ if (exclusions.contains(linkName.getPathString())) {
+ continue;
+ }
+
PathFragment targetName;
try {
targetName = f.getTargetInSymlinkTree(direct.isFollowingSymlinks());
@@ -172,11 +183,7 @@ public final class FilesetEntryFunction implements SkyFunction {
// Metadata field must be present. It can only be absent when stripped by tests.
String metadata = Integer.toHexString(f.metadata.get().hashCode());
-
- // The linkName has to be under the traversal's root, which is also the prefix to remove.
- PathFragment linkName = f.getNameInSymlinkTree().relativeTo(prefixToRemove);
- maybeStoreSymlink(linkName, targetName, metadata, t.getDestPath(), exclusions,
- outputSymlinks);
+ maybeStoreSymlink(linkName, targetName, metadata, t.getDestPath(), outputSymlinks);
}
}
@@ -185,20 +192,16 @@ public final class FilesetEntryFunction implements SkyFunction {
/** Stores an output symlink unless it's excluded or would overwrite an existing one. */
private static void maybeStoreSymlink(FilesetOutputSymlink nestedLink, PathFragment destPath,
- Set<String> exclusions, Map<PathFragment, FilesetOutputSymlink> result) {
- maybeStoreSymlink(nestedLink.name, nestedLink.target, nestedLink.metadata, destPath,
- exclusions, result);
+ Map<PathFragment, FilesetOutputSymlink> result) {
+ maybeStoreSymlink(nestedLink.name, nestedLink.target, nestedLink.metadata, destPath, result);
}
/** Stores an output symlink unless it's excluded or would overwrite an existing one. */
private static void maybeStoreSymlink(PathFragment linkName, PathFragment linkTarget,
- String metadata, PathFragment destPath, Set<String> exclusions,
- Map<PathFragment, FilesetOutputSymlink> result) {
- if (!exclusions.contains(linkName.getPathString())) {
- linkName = destPath.getRelative(linkName);
- if (!result.containsKey(linkName)) {
- result.put(linkName, new FilesetOutputSymlink(linkName, linkTarget, metadata));
- }
+ String metadata, PathFragment destPath, Map<PathFragment, FilesetOutputSymlink> result) {
+ linkName = destPath.getRelative(linkName);
+ if (!result.containsKey(linkName)) {
+ result.put(linkName, new FilesetOutputSymlink(linkName, linkTarget, metadata));
}
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunction.java
index 6181a11763..7684a5980c 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/RecursiveFilesystemTraversalFunction.java
@@ -84,7 +84,9 @@ public final class RecursiveFilesystemTraversalFunction implements SkyFunction {
public final String unresolvedLink;
public DanglingSymlinkException(String path, String unresolvedLink) {
- super("Found dangling symlink: " + path + ", unresolved path: ");
+ super(
+ String.format(
+ "Found dangling symlink: %s, unresolved path: \"%s\"", path, unresolvedLink));
Preconditions.checkArgument(path != null && !path.isEmpty());
Preconditions.checkArgument(unresolvedLink != null && !unresolvedLink.isEmpty());
this.path = path;