aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgnas Anikevicius <240938+aignas@users.noreply.github.com>2023-12-19 05:17:04 +0900
committerGitHub <noreply@github.com>2023-12-18 20:17:04 +0000
commitf9d6189b6320c1852078a16434846e69268d187e (patch)
tree139426433d191f32a6f951c4d03c8456137602ac
parentf6a8f7bdcd5c886e2558418a6a0d3d5d5c98dd30 (diff)
downloadbazelbuild-rules_python-f9d6189b6320c1852078a16434846e69268d187e.tar.gz
internal: support setting visibility when rendering aliases (#1626)
Whilst prototyping for #1625, I realized that this feature would be useful in general when rendering external repositories. This does not include a CHANGELOG because it is not visible to the users. --------- Co-authored-by: Richard Levasseur <richardlev@gmail.com>
-rw-r--r--python/private/text_util.bzl13
-rw-r--r--tests/private/text_util/BUILD.bazel17
-rw-r--r--tests/private/text_util/render_tests.bzl63
3 files changed, 90 insertions, 3 deletions
diff --git a/python/private/text_util.bzl b/python/private/text_util.bzl
index a1bec5e..78f62be 100644
--- a/python/private/text_util.bzl
+++ b/python/private/text_util.bzl
@@ -20,11 +20,18 @@ def _indent(text, indent = " " * 4):
return "\n".join([indent + line for line in text.splitlines()])
-def _render_alias(name, actual):
+def _render_alias(name, actual, *, visibility = None):
+ args = [
+ "name = \"{}\",".format(name),
+ "actual = {},".format(actual),
+ ]
+
+ if visibility:
+ args.append("visibility = {},".format(render.list(visibility)))
+
return "\n".join([
"alias(",
- _indent("name = \"{}\",".format(name)),
- _indent("actual = {},".format(actual)),
+ ] + [_indent(arg) for arg in args] + [
")",
])
diff --git a/tests/private/text_util/BUILD.bazel b/tests/private/text_util/BUILD.bazel
new file mode 100644
index 0000000..c9c2106
--- /dev/null
+++ b/tests/private/text_util/BUILD.bazel
@@ -0,0 +1,17 @@
+# Copyright 2023 The Bazel Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+load(":render_tests.bzl", "render_test_suite")
+
+render_test_suite(name = "render_tests")
diff --git a/tests/private/text_util/render_tests.bzl b/tests/private/text_util/render_tests.bzl
new file mode 100644
index 0000000..7c3dddf
--- /dev/null
+++ b/tests/private/text_util/render_tests.bzl
@@ -0,0 +1,63 @@
+# Copyright 2023 The Bazel Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+""
+
+load("@rules_testing//lib:test_suite.bzl", "test_suite")
+load("//python/private:text_util.bzl", "render") # buildifier: disable=bzl-visibility
+
+_tests = []
+
+def _test_render_alias(env):
+ tests = [
+ struct(
+ args = dict(
+ name = "foo",
+ actual = repr("bar"),
+ ),
+ want = [
+ "alias(",
+ ' name = "foo",',
+ ' actual = "bar",',
+ ")",
+ ],
+ ),
+ struct(
+ args = dict(
+ name = "foo",
+ actual = repr("bar"),
+ visibility = ["//:__pkg__"],
+ ),
+ want = [
+ "alias(",
+ ' name = "foo",',
+ ' actual = "bar",',
+ ' visibility = ["//:__pkg__"],',
+ ")",
+ ],
+ ),
+ ]
+ for test in tests:
+ got = render.alias(**test.args)
+ env.expect.that_str(got).equals("\n".join(test.want).strip())
+
+_tests.append(_test_render_alias)
+
+def render_test_suite(name):
+ """Create the test suite.
+
+ Args:
+ name: the name of the test suite
+ """
+ test_suite(name = name, basic_tests = _tests)