Skip to content

Commit 15f2461

Browse files
authored
Fix resource priority under name collision (#1456)
* Add failing test for resource name duplication * Topological sort jars (so that the target jar comes first) fix #1456 * Sort jars by pre-topological sort to preserve leftmost-first guarantee With topological order, there's no left-to-right order guarantee https://bazel.build/rules/lib/depset As a result, `test/shell/test_misc`'s `test_multi_service_manifest` fails because the order of `exepected_service_manifest.txt` reverses.
1 parent dee33f4 commit 15f2461

File tree

6 files changed

+37
-1
lines changed

6 files changed

+37
-1
lines changed

scala/private/phases/phase_compile.bzl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ def _phase_compile(
149149
# TODO: simplify the return values and use provider
150150
return struct(
151151
files = depset(out.full_jars),
152-
rjars = depset(out.full_jars, transitive = [rjars]),
152+
rjars = depset(out.full_jars, transitive = [rjars], order = "preorder"),
153153
merged_provider = out.merged_provider,
154154
external_providers = {
155155
"JavaInfo": out.merged_provider,
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
load("//scala:scala.bzl", "scala_test")
2+
3+
# https://github.com/bazelbuild/rules_scala/issues/1455
4+
scala_test(
5+
name = "child",
6+
size = "small",
7+
srcs = ["ScalaLibResourcesDuplicatedTest.scala"],
8+
resource_strip_prefix = "test/src/main/scala/scalarules/test/duplicated_resources/child/",
9+
resources = ["resource.txt"],
10+
unused_dependency_checker_mode = "off",
11+
deps = ["//test/src/main/scala/scalarules/test/duplicated_resources/parent"],
12+
)
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package scalarules.test.duplicated
2+
3+
import org.scalatest.funsuite._
4+
5+
class ScalaLibResourcesDuplicatedTest extends AnyFunSuite {
6+
7+
test("Scala library depends on resource + deps that contains same name resources, have higher priority on this target's resource.") {
8+
assert(get("/resource.txt") === "I am a text resource from child!\n")
9+
}
10+
11+
private def get(s: String): String =
12+
scala.io.Source.fromInputStream(getClass.getResourceAsStream(s)).mkString
13+
14+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
I am a text resource from child!
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
load("//scala:scala.bzl", "scala_library")
2+
3+
scala_library(
4+
name = "parent",
5+
resource_strip_prefix = "test/src/main/scala/scalarules/test/duplicated_resources/parent/",
6+
resources = ["resource.txt"],
7+
visibility = ["//test/src/main/scala/scalarules/test/duplicated_resources/child:__pkg__"],
8+
)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
I am a text resource from parent!

0 commit comments

Comments
 (0)