From bf0e72ec49f932dc0081b387f8b94bc393bde6ab Mon Sep 17 00:00:00 2001 From: Fabian Meumertzheim Date: Tue, 28 Jun 2022 21:49:52 +0200 Subject: [PATCH] Use MakeSymlink in one other place --- .../lib/skyframe/SkyframeActionExecutor.java | 2 +- src/test/shell/bazel/bazel_symlink_test.sh | 27 +++++++++++++++++-- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeActionExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeActionExecutor.java index 1fdedaee49b2c2..a081646916fb0e 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeActionExecutor.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeActionExecutor.java @@ -1538,7 +1538,7 @@ private boolean checkOutputs( if (e instanceof NotASymlinkException) { reporter.handle(Event.error( action.getOwner().getLocation(), - String.format("output '%s' is not a symlink", output.prettyPrint()))); + String.format("declared output '%s' is not a symlink", output.prettyPrint()))); } else { // Are all exceptions caught due to missing files? reportMissingOutputFile(action, output, reporter, output.getPath().isSymbolicLink(), diff --git a/src/test/shell/bazel/bazel_symlink_test.sh b/src/test/shell/bazel/bazel_symlink_test.sh index 945398dba2cd6c..27daef622142d3 100755 --- a/src/test/shell/bazel/bazel_symlink_test.sh +++ b/src/test/shell/bazel/bazel_symlink_test.sh @@ -231,6 +231,17 @@ EOF function test_file_instead_of_symlink() { mkdir -p a + cat > a/MakeSymlink.java <<'EOF' +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +public class MakeSymlink { + public static void main(String[] args) throws IOException { + Files.createSymbolicLink(Paths.get(args[0]), Paths.get(args[1])); + } +} +EOF + cat > a/a.bzl <<'EOF' def _bad_symlink_impl(ctx): symlink = ctx.actions.declare_symlink(ctx.label.name) @@ -258,17 +269,29 @@ EOF cat > a/BUILD <<'EOF' load(":a.bzl", "bad_symlink", "bad_write") +java_binary( + name = "MakeSymlink", + srcs = ["MakeSymlink.java"], + main_class = "MakeSymlink", +) + bad_symlink(name="bs", link_target="bad/symlink") genrule(name="bsg", srcs=[":bs"], outs=["bsgo"], cmd="echo BSGO > $@") bad_write(name="bw", contents="badcontents") genrule(name="bwg", srcs=[":bw"], outs=["bwgo"], cmd="echo BWGO > $@") -genrule(name="bg", srcs=[], outs=["bgo"], cmd = "ln -s bad/symlink $@") +genrule( + name="bg", + srcs=[], + outs=["bgo"], + exec_tools = [":MakeSymlink"], + cmd = "$(execpath :MakeSymlink) $@ bad/symlink", +) EOF bazel --windows_enable_symlinks build --experimental_allow_unresolved_symlinks //a:bsg >& $TEST_log && fail "build succeeded" - expect_log "output 'a/bs' is not a symlink" + expect_log "declared output 'a/bs' is not a symlink" bazel --windows_enable_symlinks build --experimental_allow_unresolved_symlinks //a:bwg >& $TEST_log && fail "build succeeded" expect_log "symlink() with \"target_path\" param requires that \"output\" be declared as a symlink, not a regular file"