-
Notifications
You must be signed in to change notification settings - Fork 205
Open
Labels
P2An issue that should be worked on when time is availableAn issue that should be worked on when time is availablebug
Description
Looks like more fallout from #640 .
Suppose a pkg_zip with two inputs, a TreeArtifact and a file where their destinations overlap and are expected to be merged in the resulting .zip file. The directories implicitly created by #640 may duplicate those already provided by the TreeArtifact, resulting in warnings to stderr and undefined downstream behavior.
# MODULE.bazel
bazel_dep(name = "bazel_skylib", version = "1.7.1")
bazel_dep(name = "rules_pkg", version = "1.0.1")# defs.bzl
def _directory_impl(ctx):
out = ctx.actions.declare_directory(ctx.attr.out)
args = ctx.actions.args()
args.add(out.path)
args.add_all(ctx.attr.contents)
ctx.actions.run_shell(
outputs = [out],
command = """
outdir=$1; shift
mkdir -p $outdir
for f in $@; do
mkdir -p ${outdir}/$(dirname $f)
touch ${outdir}/$f
done
""",
arguments = [args],
)
return DefaultInfo(files = depset([out]))
directory = rule(
_directory_impl,
attrs = {
"contents": attr.string_list(),
"out": attr.string(),
},
)# BUILD
load("@bazel_skylib//rules:write_file.bzl", "write_file")
load("@rules_pkg//pkg:mappings.bzl", "pkg_files")
load("@rules_pkg//pkg:zip.bzl", "pkg_zip")
load(":defs.bzl", "directory")
directory(
name = "metainf",
out = "META-INF",
contents = [
"MANIFEST.MF",
"com/example/foo/pom.xml",
],
)
write_file(
name = "pom_properties",
out = "pom.properties",
content = [],
)
pkg_files(
name = "metainf_pkg",
srcs = ["metainf"],
)
pkg_files(
name = "pom_pkg",
srcs = [":pom_properties"],
prefix = "META-INF/com/example/foo",
)
pkg_zip(
name = "foo",
out = "foo.jar",
srcs = [
":metainf_pkg",
":pom_pkg",
],
)$ bazelisk build :foo
INFO: Invocation ID: 1dcc898b-e2fe-4543-95b0-4b45f2f59cb8
INFO: Analyzed target //:foo (77 packages loaded, 2836 targets configured).
INFO: From PackageZip foo.jar:
.../execroot/_main/external/rules_python++python+python_3_11_x86_64-unknown-linux-gnu/lib/python3.11/zipfile.py:1567: UserWarning: Duplicate name: 'META-INF/com/'
return self._open_to_write(zinfo, force_zip64=force_zip64)
.../execroot/_main/external/rules_python++python+python_3_11_x86_64-unknown-linux-gnu/lib/python3.11/zipfile.py:1567: UserWarning: Duplicate name: 'META-INF/com/example/'
return self._open_to_write(zinfo, force_zip64=force_zip64)
.../execroot/_main/external/rules_python++python+python_3_11_x86_64-unknown-linux-gnu/lib/python3.11/zipfile.py:1567: UserWarning: Duplicate name: 'META-INF/com/example/foo/'
return self._open_to_write(zinfo, force_zip64=force_zip64)
INFO: Found 1 target...
Target //:foo up-to-date:
bazel-bin/foo.jar
INFO: Elapsed time: 0.912s, Critical Path: 0.30s
INFO: 3 processes: 7 action cache hit, 2 internal, 1 linux-sandbox.
INFO: Build completed successfully, 3 total actions$ zipinfo -1 bazel-bin/foo.jar
META-INF/
META-INF/MANIFEST.MF
META-INF/com/
META-INF/com/example/
META-INF/com/example/foo/
META-INF/com/example/foo/pom.xml
META-INF/com/
META-INF/com/example/
META-INF/com/example/foo/
META-INF/com/example/foo/pom.propertiesException in thread "main" java.lang.RuntimeException: java.util.zip.ZipException: duplicate entry: META-INF/com/
at org.eclipse.virgo.bundlor.support.manifestwriter.JarFileManifestWriter.write(JarFileManifestWriter.java:83)
at org.eclipse.virgo.bundlor.commandline.internal.CommandLineBundlorExecutor.execute(CommandLineBundlorExecutor.java:64)
at org.eclipse.virgo.bundlor.commandline.Bundlor.run(Bundlor.java:51)
at org.eclipse.virgo.bundlor.commandline.Bundlor.main(Bundlor.java:37)
Metadata
Metadata
Assignees
Labels
P2An issue that should be worked on when time is availableAn issue that should be worked on when time is availablebug