Empty Dir Support
PiperOrigin-RevId: 469818319
diff --git a/kotlin/common.bzl b/kotlin/common.bzl
index 6627b09..8a06b56 100644
--- a/kotlin/common.bzl
+++ b/kotlin/common.bzl
@@ -661,18 +661,32 @@
args = ctx.actions.args()
- args.add("cf", output_jar)
for in_dir in input_dirs:
if not in_dir.is_directory:
fail("Expected a directory input, but got {}.".format(in_dir))
- args.add("-C", in_dir.path)
- args.add(".")
+ args.add(in_dir.path)
- ctx.actions.run(
- executable = jar_tool,
+ ctx.actions.run_shell(
+ command = """
+ JAR_TOOL={}
+ OUT_JAR={}
+ OUT_DIR="$(dirname $OUT_JAR)"
+ RES_DIR=$OUT_DIR/META-INF
+ mkdir $RES_DIR
+ $JAR_TOOL cf $OUT_JAR $RES_DIR
+ rmdir $RES_DIR
+ for INPUT_DIR in $@
+ do
+ if [ -d $INPUT_DIR ]
+ then
+ $JAR_TOOL uf $OUT_JAR -C $INPUT_DIR .
+ fi
+ done
+ """.format(jar_tool.executable.path, output_jar.path),
+ arguments = [args],
inputs = input_dirs,
outputs = [output_jar],
- arguments = [args],
+ tools = [jar_tool],
mnemonic = "KtJarActionFromTreeArtifacts",
progress_message = "Create Jar %{output}",
)
diff --git a/tests/analysis/util.bzl b/tests/analysis/util.bzl
index a18a140..cec0cc3 100644
--- a/tests/analysis/util.bzl
+++ b/tests/analysis/util.bzl
@@ -34,18 +34,24 @@
return name
def _create_dir_impl(ctx):
- if not ctx.files.srcs:
- fail("Creating empty directories not implemented")
-
dir = ctx.actions.declare_directory(ctx.attr.name)
- ctx.actions.run_shell(
- command = "mkdir -p {0} && cp {1} {0}".format(
- dir.path + "/" + ctx.attr.subdir,
- " ".join([s.path for s in ctx.files.srcs]),
- ),
- inputs = ctx.files.srcs,
- outputs = [dir],
- )
+ if ctx.files.srcs:
+ ctx.actions.run_shell(
+ command = "mkdir -p {0} && cp {1} {0}".format(
+ dir.path + "/" + ctx.attr.subdir,
+ " ".join([s.path for s in ctx.files.srcs]),
+ ),
+ inputs = ctx.files.srcs,
+ outputs = [dir],
+ )
+ else:
+ ctx.actions.run_shell(
+ command = "mkdir -p {0}".format(
+ dir.path + "/" + ctx.attr.subdir,
+ ),
+ inputs = ctx.files.srcs,
+ outputs = [dir],
+ )
return [DefaultInfo(files = depset([dir]))]
_create_dir = rule(
diff --git a/tests/jvm/java/srcartifacts/BUILD b/tests/jvm/java/srcartifacts/BUILD
index af06470..d530213 100644
--- a/tests/jvm/java/srcartifacts/BUILD
+++ b/tests/jvm/java/srcartifacts/BUILD
@@ -30,7 +30,8 @@
":dir/kotlin",
],
resources = [
- ":dir/resources",
+ "dir/empty",
+ "dir/resources",
],
test_class = "srcartifacts.SrcArtifactsTest",
deps = [
@@ -56,6 +57,12 @@
)
create_dir(
+ name = "dir/empty",
+ srcs = [],
+ subdir = "srcartifacts/empty",
+)
+
+create_dir(
name = "dir/resources",
srcs = [
create_file(