aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skyframe/FileSymlinkInfiniteExpansionUniquenessFunction.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/FileSymlinkInfiniteExpansionUniquenessFunction.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/FileSymlinkInfiniteExpansionUniquenessFunction.java17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/FileSymlinkInfiniteExpansionUniquenessFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/FileSymlinkInfiniteExpansionUniquenessFunction.java
index 90d976393f..bb0680d6a1 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/FileSymlinkInfiniteExpansionUniquenessFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/FileSymlinkInfiniteExpansionUniquenessFunction.java
@@ -13,16 +13,23 @@
// limitations under the License.
package com.google.devtools.build.lib.skyframe;
+import com.google.common.collect.ImmutableList;
import com.google.devtools.build.lib.vfs.RootedPath;
import com.google.devtools.build.skyframe.SkyFunction;
-import com.google.devtools.build.skyframe.SkyValue;
+import com.google.devtools.build.skyframe.SkyKey;
-/** A {@link SkyFunction} that has the side effect of reporting a file symlink expansion error. */
+/**
+ * A {@link SkyFunction} that has the side effect of reporting a file symlink expansion error
+ * exactly once. This is achieved by forcing the same value key for two logically equivalent
+ * expansion errors (e.g. ['a' -> 'b' -> 'c' -> 'a/nope'] and ['b' -> 'c' -> 'a' -> 'a/nope']),
+ * and letting Skyframe do its magic.
+ */
public class FileSymlinkInfiniteExpansionUniquenessFunction
extends AbstractChainUniquenessFunction<RootedPath> {
- @Override
- protected SkyValue getDummyValue() {
- return FileSymlinkInfiniteExpansionUniquenessValue.INSTANCE;
+
+ static SkyKey key(ImmutableList<RootedPath> cycle) {
+ return ChainUniquenessUtils.key(
+ SkyFunctions.FILE_SYMLINK_INFINITE_EXPANSION_UNIQUENESS, cycle);
}
@Override