aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skyframe/FileSymlinkInfiniteExpansionUniquenessFunction.java
diff options
context:
space:
mode:
authorGravatar Michajlo Matijkiw <michajlo@google.com>2015-10-12 16:24:01 +0000
committerGravatar John Field <jfield@google.com>2015-10-13 01:01:28 +0000
commit945a42de9c73a15f27d603ebef8b8a90a4c0ced8 (patch)
tree94ac2871d82275368a382f9fdb504d02a25bfb66 /src/main/java/com/google/devtools/build/lib/skyframe/FileSymlinkInfiniteExpansionUniquenessFunction.java
parent0a12c0b1630d50bd76ad2a11e192abf94d5855f2 (diff)
Refactor cycle related skyvalues to use shared empty value
Previously the cycle values (were supposed to) share a common abstract base class, however usage was inconsistent. Instead refactor to eliminate the specialized value classes, remove the abstract class, and share a common empty placeholder value, which should be useful for future/other current empty values. -- MOS_MIGRATED_REVID=105217399
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