From bf04a68a2bc402ff2b93c73de3337a2e47311a23 Mon Sep 17 00:00:00 2001 From: Fabian Meumertzheim Date: Thu, 28 Jul 2022 23:30:21 +0200 Subject: [PATCH] Simplify symlink helper --- src/test/shell/bazel/bazel_symlink_test.sh | 70 ++++++++++------------ 1 file changed, 30 insertions(+), 40 deletions(-) diff --git a/src/test/shell/bazel/bazel_symlink_test.sh b/src/test/shell/bazel/bazel_symlink_test.sh index 52bb8b744cefaf..637eedb5cbb449 100755 --- a/src/test/shell/bazel/bazel_symlink_test.sh +++ b/src/test/shell/bazel/bazel_symlink_test.sh @@ -103,6 +103,25 @@ EOF } +function add_symlink_helper() { + # We use python rather than a simple ln since the latter doesn't handle dangling symlinks on + # Windows. + mkdir -p tools + cat > tools/BUILD < tools/link.py < a/BUILD < 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 + add_symlink_helper + mkdir -p a cat > a/a.bzl <<'EOF' def _bad_symlink_impl(ctx): symlink = ctx.actions.declare_symlink(ctx.label.name) @@ -266,12 +276,6 @@ 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 > $@") @@ -282,8 +286,8 @@ genrule( name="bg", srcs=[], outs=["bgo"], - exec_tools = [":MakeSymlink"], - cmd = "$(execpath :MakeSymlink) $@ bad/symlink", + cmd = "$(location //tools:link) bad/symlink $@", + tools = ["//tools:link"], ) EOF @@ -328,26 +332,17 @@ EOF } function test_symlink_created_from_spawn() { - 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 + add_symlink_helper + mkdir -p a cat > a/a.bzl <<'EOF' def _a_impl(ctx): symlink = ctx.actions.declare_symlink(ctx.label.name + ".link") output = ctx.actions.declare_file(ctx.label.name + ".file") ctx.actions.run( outputs = [symlink], - executable = ctx.executable._make_symlink, - arguments = [symlink.path, ctx.attr.link_target], + executable = ctx.executable._link, + arguments = [ctx.attr.link_target, symlink.path], inputs = depset([]), ) ctx.actions.run_shell( @@ -361,11 +356,11 @@ a = rule( implementation = _a_impl, attrs = { "link_target": attr.string(), - "_make_symlink": attr.label( - default = ":MakeSymlink", + "_link": attr.label( + default = "//tools:link", executable = True, cfg = "exec", - ) + ), } ) EOF @@ -373,11 +368,6 @@ EOF cat > a/BUILD <<'EOF' load(":a.bzl", "a") -java_binary( - name = "MakeSymlink", - srcs = ["MakeSymlink.java"], - main_class = "MakeSymlink", -) a(name="a", link_target="somewhere/over/the/rainbow") EOF