[7.0.1] Fix singlejar resource mapping for external repositories (#20904)
Fixes https://github.com/bazelbuild/bazel/issues/20882
Commit
https://github.com/bazelbuild/bazel/commit/6ae53e5b5b0b1f4aa08b4f7f6790fe1c51f6735c
PiperOrigin-RevId: 598608807
Change-Id: If9230cd1c143eef09beabaf33cb1cb56e4540ae1
---------
Co-authored-by: Googler <hvd@google.com>
Co-authored-by: hvd <hvadehra@gmail.com>
diff --git a/src/main/starlark/builtins_bzl/common/java/java_helper.bzl b/src/main/starlark/builtins_bzl/common/java/java_helper.bzl
index 0123a1f..b0fa946 100644
--- a/src/main/starlark/builtins_bzl/common/java/java_helper.bzl
+++ b/src/main/starlark/builtins_bzl/common/java/java_helper.bzl
@@ -293,9 +293,13 @@
return []
def _resource_mapper(file):
+ root_relative_path = paths.relativize(
+ path = file.path,
+ start = paths.join(file.root.path, file.owner.workspace_root),
+ )
return "%s:%s" % (
file.path,
- semantics.get_default_resource_path(file.short_path, segment_extractor = _java_segments),
+ semantics.get_default_resource_path(root_relative_path, segment_extractor = _java_segments),
)
def _create_single_jar(
diff --git a/src/test/java/com/google/devtools/build/lib/rules/java/JavaStarlarkApiTest.java b/src/test/java/com/google/devtools/build/lib/rules/java/JavaStarlarkApiTest.java
index 4f16c0e..912085e 100644
--- a/src/test/java/com/google/devtools/build/lib/rules/java/JavaStarlarkApiTest.java
+++ b/src/test/java/com/google/devtools/build/lib/rules/java/JavaStarlarkApiTest.java
@@ -3486,6 +3486,57 @@
}
@Test
+ public void testPackSourcesWithExternalResourceArtifact() throws Exception {
+ JavaToolchainTestUtil.writeBuildFileForJavaToolchain(scratch);
+ scratch.file(
+ "foo/custom_rule.bzl",
+ "def _impl(ctx):",
+ " out = ctx.actions.declare_file('output.jar')",
+ " java_toolchain = ctx.attr._java_toolchain[java_common.JavaToolchainInfo]",
+ " java_common.pack_sources(",
+ " ctx.actions,",
+ " java_toolchain = java_toolchain,",
+ " output_source_jar = out,",
+ " sources = ctx.files.srcs,",
+ " )",
+ " return [DefaultInfo(files = depset([out]))]",
+ "java_custom_library = rule(",
+ " implementation = _impl,",
+ " attrs = {",
+ " 'srcs': attr.label_list(allow_files = True),",
+ " '_java_toolchain': attr.label(default = Label('//java/com/google/test:toolchain')),",
+ " },",
+ " toolchains = ['" + TestConstants.JAVA_TOOLCHAIN_TYPE + "'],",
+ " fragments = ['java']",
+ ")");
+ scratch.file("my_other_repo/WORKSPACE");
+ scratch.file("my_other_repo/external-file.txt");
+ scratch.file("my_other_repo/BUILD", "exports_files(['external-file.txt'])");
+ rewriteWorkspace("local_repository(name = 'other_repo', path = './my_other_repo')");
+ scratch.file(
+ "foo/BUILD",
+ "load(':custom_rule.bzl', 'java_custom_library')",
+ "java_custom_library(",
+ " name = 'custom',",
+ " srcs = [",
+ " 'internal-file.txt',",
+ " '@other_repo//:external-file.txt',",
+ " ]",
+ ")");
+
+ List<String> arguments =
+ ((SpawnAction) getGeneratingAction(getConfiguredTarget("//foo:custom"), "foo/output.jar"))
+ .getArguments();
+
+ assertThat(arguments)
+ .containsAtLeast(
+ "--resources",
+ "foo/internal-file.txt:foo/internal-file.txt",
+ "external/other_repo/external-file.txt:external-file.txt")
+ .inOrder();
+ }
+
+ @Test
public void mergeAddExports() throws Exception {
scratch.file(
"foo/custom_library.bzl",