diff options
author | Nathan Harmata <nharmata@google.com> | 2015-07-29 01:33:49 +0000 |
---|---|---|
committer | Lukacs Berki <lberki@google.com> | 2015-07-29 16:01:46 +0000 |
commit | ad81050b9419d1b298a3b4e444b7e4d539174bef (patch) | |
tree | 34710060d4d936fd95a5511277a6a9ad5bed87c9 /src/main/java/com/google/devtools/build/lib/skyframe/FileSymlinkCycleUniquenessFunction.java | |
parent | 205a3d67fe5986890270ad99c87ded997a1d5cca (diff) |
Elegantly handle unbounded file symlink resolutions, e.g. 'a' -> 'b' -> 'a/nope'.
--
MOS_MIGRATED_REVID=99337668
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/skyframe/FileSymlinkCycleUniquenessFunction.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/skyframe/FileSymlinkCycleUniquenessFunction.java | 36 |
1 files changed, 16 insertions, 20 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/FileSymlinkCycleUniquenessFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/FileSymlinkCycleUniquenessFunction.java index a0604b5b42..3ce5532b17 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/FileSymlinkCycleUniquenessFunction.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/FileSymlinkCycleUniquenessFunction.java @@ -13,33 +13,29 @@ // limitations under the License. package com.google.devtools.build.lib.skyframe; -import com.google.common.collect.ImmutableList; -import com.google.devtools.build.lib.events.Event; -import com.google.devtools.build.lib.vfs.RootedPath; import com.google.devtools.build.skyframe.SkyFunction; -import com.google.devtools.build.skyframe.SkyKey; import com.google.devtools.build.skyframe.SkyValue; -/** A value builder that has the side effect of reporting a file symlink cycle. */ -public class FileSymlinkCycleUniquenessFunction implements SkyFunction { - - @SuppressWarnings("unchecked") // Cast from Object to ImmutableList<RootedPath>. +/** A {@link SkyFunction} that has the side effect of reporting a file symlink cycle. */ +public class FileSymlinkCycleUniquenessFunction + extends AbstractFileSymlinkExceptionUniquenessFunction { @Override - public SkyValue compute(SkyKey skyKey, Environment env) { - StringBuilder cycleMessage = new StringBuilder("circular symlinks detected\n"); - cycleMessage.append("[start of symlink cycle]\n"); - for (RootedPath rootedPath : (ImmutableList<RootedPath>) skyKey.argument()) { - cycleMessage.append(rootedPath.asPath() + "\n"); - } - cycleMessage.append("[end of symlink cycle]"); - // The purpose of this value builder is the side effect of emitting an error message exactly - // once per build per unique cycle. - env.getListener().handle(Event.error(cycleMessage.toString())); + protected SkyValue getDummyValue() { return FileSymlinkCycleUniquenessValue.INSTANCE; } @Override - public String extractTag(SkyKey skyKey) { - return null; + protected String getConciseDescription() { + return "circular symlinks"; + } + + @Override + protected String getHeaderMessage() { + return "[start of symlink cycle]"; + } + + @Override + protected String getFooterMessage() { + return "[end of symlink cycle]"; } } |