From 6b4a8b34fed686fe178a02f4cf27807c2f11bab5 Mon Sep 17 00:00:00 2001 From: Janak Ramakrishnan Date: Wed, 22 Feb 2017 19:51:28 +0000 Subject: Allow absolute symlinks in TreeArtifacts. Let the downstream action (if there is one) worry about it. -- PiperOrigin-RevId: 148249223 MOS_MIGRATED_REVID=148249223 --- .../build/lib/skyframe/TreeArtifactBuildTest.java | 31 +++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) (limited to 'src/test/java/com') diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactBuildTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactBuildTest.java index 307e4a68d9..099b307116 100644 --- a/src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactBuildTest.java +++ b/src/test/java/com/google/devtools/build/lib/skyframe/TreeArtifactBuildTest.java @@ -564,7 +564,7 @@ public class TreeArtifactBuildTest extends TimestampBuilderTestCase { } @Test - public void testAbsoluteSymlinkRejected() throws Exception { + public void testAbsoluteSymlinkBadTargetRejected() throws Exception { // Failure expected StoredEventHandler storingEventHandler = new StoredEventHandler(); reporter.removeHandler(failFastHandler); @@ -596,12 +596,37 @@ public class TreeArtifactBuildTest extends TimestampBuilderTestCase { List errors = ImmutableList.copyOf( Iterables.filter(storingEventHandler.getEvents(), IS_ERROR_EVENT)); assertThat(errors).hasSize(2); - assertThat(errors.get(0).getMessage()).contains( - "A TreeArtifact may not contain absolute symlinks"); + assertThat(errors.get(0).getMessage()).contains("Failed to resolve relative path links/link"); assertThat(errors.get(1).getMessage()).contains("not all outputs were created or valid"); } } + @Test + public void testAbsoluteSymlinkAccepted() throws Exception { + scratch.overwriteFile("/random/pointer"); + + final Artifact out = createTreeArtifact("output"); + + TreeArtifactTestAction action = + new TreeArtifactTestAction(out) { + @Override + public void execute(ActionExecutionContext actionExecutionContext) { + try { + writeFile(out.getPath().getChild("one"), "one"); + writeFile(out.getPath().getChild("two"), "two"); + FileSystemUtils.ensureSymbolicLink( + out.getPath().getChild("links").getChild("link"), "/random/pointer"); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + }; + + registerAction(action); + + buildArtifact(action.getSoleOutput()); + } + @Test public void testRelativeSymlinkTraversingOutsideOfTreeArtifactRejected() throws Exception { // Failure expected -- cgit v1.2.3