Skip to content

Commit 99974ae

Browse files
committed
runfiles: preserve external repository aliases
1 parent 3f4cb74 commit 99974ae

9 files changed

Lines changed: 88 additions & 11 deletions

File tree

modules/dotnet/topt_dotnet_infer.bzl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,11 @@ def _topt_dotnet_payloads_selector_impl(ctx):
144144
)
145145
return [DefaultInfo(
146146
files = depset(payload.files),
147-
runfiles = ctx.runfiles(files = payload.files, symlinks = payload.symlinks),
147+
runfiles = ctx.runfiles(
148+
files = payload.files,
149+
root_symlinks = payload.root_symlinks,
150+
symlinks = payload.symlinks,
151+
),
148152
)]
149153

150154
topt_dotnet_payloads_selector = rule(

modules/go/topt_go_infer.bzl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,11 @@ def _topt_go_payloads_selector_impl(ctx):
196196
)
197197
return [DefaultInfo(
198198
files = depset(payload.files),
199-
runfiles = ctx.runfiles(files = payload.files, symlinks = payload.symlinks),
199+
runfiles = ctx.runfiles(
200+
files = payload.files,
201+
root_symlinks = payload.root_symlinks,
202+
symlinks = payload.symlinks,
203+
),
200204
)]
201205

202206
def _topt_go_bazel_metadata_impl(ctx):

modules/java/topt_java_infer.bzl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,11 @@ def _topt_java_payloads_selector_impl(ctx):
160160
)
161161
return [DefaultInfo(
162162
files = depset(payload.files),
163-
runfiles = ctx.runfiles(files = payload.files, symlinks = payload.symlinks),
163+
runfiles = ctx.runfiles(
164+
files = payload.files,
165+
root_symlinks = payload.root_symlinks,
166+
symlinks = payload.symlinks,
167+
),
164168
)]
165169

166170
topt_java_payloads_selector = rule(

modules/nodejs/topt_nodejs_infer.bzl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,11 @@ def _topt_nodejs_payloads_selector_impl(ctx):
144144
)
145145
return [DefaultInfo(
146146
files = depset(payload.files),
147-
runfiles = ctx.runfiles(files = payload.files, symlinks = payload.symlinks),
147+
runfiles = ctx.runfiles(
148+
files = payload.files,
149+
root_symlinks = payload.root_symlinks,
150+
symlinks = payload.symlinks,
151+
),
148152
)]
149153

150154
topt_nodejs_payloads_selector = rule(

modules/python/tests/BUILD.bazel

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ load(
7676
"selector_explicit_namespaced_test",
7777
"selector_explicit_precedence_target",
7878
"selector_explicit_precedence_test",
79+
"selector_external_module_runfiles_target",
80+
"selector_external_module_runfiles_test",
7981
"selector_fallback_target",
8082
"selector_fallback_test",
8183
"selector_imports_precedence_target",
@@ -193,6 +195,16 @@ selector_omits_flaky_tests_test(
193195
target_under_test = ":selector_omits_flaky_tests_target",
194196
)
195197

198+
selector_external_module_runfiles_target(
199+
name = "selector_external_module_runfiles_target",
200+
tags = ["manual"],
201+
)
202+
203+
selector_external_module_runfiles_test(
204+
name = "selector_external_module_runfiles_test",
205+
target_under_test = ":selector_external_module_runfiles_target",
206+
)
207+
196208
selector_explicit_precedence_target(
197209
name = "selector_explicit_precedence_target",
198210
tags = ["manual"],
@@ -702,6 +714,7 @@ test_suite(
702714
":selector_explicit_miss_failure_test",
703715
":selector_explicit_namespaced_test",
704716
":selector_explicit_precedence_test",
717+
":selector_external_module_runfiles_test",
705718
":selector_fallback_test",
706719
":selector_imports_precedence_test",
707720
":selector_include_disabled_test",

modules/python/tests/test_payloads_selector.bzl

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,21 @@ def selector_omits_flaky_tests_target(name, tags = None):
286286
tags = tags,
287287
)
288288

289+
def selector_external_module_runfiles_target(name, tags = None):
290+
topt_py_payloads_selector(
291+
name = name,
292+
explicit_identifier = "example/python/pkg",
293+
imports = [],
294+
deps = [],
295+
attribute_candidates = [],
296+
fallback_identifier = "example/python/pkg",
297+
full_files = "@test_optimization_data_python//:test_optimization_files",
298+
module_group_names = ["module_example_python_pkg"],
299+
module_groups = ["@test_optimization_data_python//:module_example_python_pkg"],
300+
include_per_module = True,
301+
tags = tags,
302+
)
303+
289304
def _has_fragment(items, fragment):
290305
for item in items:
291306
if fragment in item:
@@ -403,6 +418,20 @@ def _selector_omits_flaky_tests_test_impl(ctx):
403418
asserts.false(env, _has_suffix(symlink_paths, "/flaky_tests.json"), "unexpected flaky_tests.json symlink: %s" % symlink_paths)
404419
return analysistest.end(env)
405420

421+
def _selector_external_module_runfiles_test_impl(ctx):
422+
env = analysistest.begin(ctx)
423+
target = analysistest.target_under_test(env)
424+
symlink_paths = [s.path for s in target[DefaultInfo].default_runfiles.symlinks.to_list()]
425+
root_symlink_paths = [s.path for s in target[DefaultInfo].default_runfiles.root_symlinks.to_list()]
426+
_assert_core_cache_symlinks(env, root_symlink_paths)
427+
asserts.equals(env, [], symlink_paths)
428+
asserts.false(
429+
env,
430+
_has_suffix(root_symlink_paths, "/flaky_tests.json"),
431+
"unexpected flaky_tests.json root symlink: %s" % root_symlink_paths,
432+
)
433+
return analysistest.end(env)
434+
406435
selector_explicit_precedence_test = analysistest.make(
407436
_selector_explicit_precedence_test_impl,
408437
)
@@ -444,3 +473,6 @@ selector_override_miss_failure_test = analysistest.make(
444473
selector_omits_flaky_tests_test = analysistest.make(
445474
_selector_omits_flaky_tests_test_impl,
446475
)
476+
selector_external_module_runfiles_test = analysistest.make(
477+
_selector_external_module_runfiles_test_impl,
478+
)

modules/python/topt_py_infer.bzl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,11 @@ def _topt_py_payloads_selector_impl(ctx):
161161
)
162162
return [DefaultInfo(
163163
files = depset(payload.files),
164-
runfiles = ctx.runfiles(files = payload.files, symlinks = payload.symlinks),
164+
runfiles = ctx.runfiles(
165+
files = payload.files,
166+
root_symlinks = payload.root_symlinks,
167+
symlinks = payload.symlinks,
168+
),
165169
)]
166170

167171
topt_py_payloads_selector = rule(

modules/ruby/topt_ruby_infer.bzl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,11 @@ def _topt_ruby_payloads_selector_impl(ctx):
144144
)
145145
return [DefaultInfo(
146146
files = depset(payload.files),
147-
runfiles = ctx.runfiles(files = payload.files, symlinks = payload.symlinks),
147+
runfiles = ctx.runfiles(
148+
files = payload.files,
149+
root_symlinks = payload.root_symlinks,
150+
symlinks = payload.symlinks,
151+
),
148152
)]
149153

150154
topt_ruby_payloads_selector = rule(

tools/core/topt_selection_utils.bzl

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ def select_module_group_name(
7171
return ""
7272

7373
def selected_payload_runfiles(files, include_flaky_tests = False):
74-
"""Return selected payload files and canonical cache/http symlinks."""
74+
"""Return selected payload files and canonical cache/http runfiles aliases."""
7575
selected_files = []
7676
settings_file = None
7777
known_tests_file = None
@@ -93,23 +93,31 @@ def selected_payload_runfiles(files, include_flaky_tests = False):
9393
flaky_tests_file = file
9494

9595
if settings_file == None:
96-
return struct(files = selected_files, symlinks = {})
96+
return struct(files = selected_files, root_symlinks = {}, symlinks = {})
9797

9898
cache_http_dir = "/".join(settings_file.short_path.split("/")[:-1])
9999
if not cache_http_dir:
100-
return struct(files = selected_files, symlinks = {})
100+
return struct(files = selected_files, root_symlinks = {}, symlinks = {})
101101

102+
root_symlinks = {}
102103
symlinks = {}
103104

104105
def maybe_add(filename, file):
105106
if file == None:
106107
return
107108
canonical_path = cache_http_dir + "/" + filename
108109
if file.short_path != canonical_path:
109-
symlinks[canonical_path] = file
110+
if canonical_path.startswith("../"):
111+
root_symlinks[canonical_path[3:]] = file
112+
else:
113+
symlinks[canonical_path] = file
110114

111115
maybe_add("known_tests.json", known_tests_file)
112116
maybe_add("test_management.json", test_management_file)
113117
if include_flaky_tests:
114118
maybe_add("flaky_tests.json", flaky_tests_file)
115-
return struct(files = selected_files, symlinks = symlinks)
119+
return struct(
120+
files = selected_files,
121+
root_symlinks = root_symlinks,
122+
symlinks = symlinks,
123+
)

0 commit comments

Comments
 (0)