Only set `py_runtime.coverage_tool` for Bazel 6 and higher. (#1061)
Only set `py_runtime.coverage_tool` for Bazel 6 and higher.
Avoid setting it in earlier version by checking `native.bazel_version`
in the repository rule and disabling it if less than Bazel 6 is
detected. A warning is also printed if coverage was requested, but
the Bazel version check is ignoring it.
Fixes #1056
diff --git a/python/repositories.bzl b/python/repositories.bzl
index e61b057..df72497 100644
--- a/python/repositories.bzl
+++ b/python/repositories.bzl
@@ -243,6 +243,21 @@
"share/**",
]
+ if rctx.attr.coverage_tool:
+ if "windows" in rctx.os.name:
+ coverage_tool = None
+ else:
+ coverage_tool = '"{}"'.format(rctx.attr.coverage_tool)
+
+ coverage_attr_text = """\
+ coverage_tool = select({{
+ ":coverage_enabled": {coverage_tool},
+ "//conditions:default": None
+ }}),
+""".format(coverage_tool = coverage_tool)
+ else:
+ coverage_attr_text = " # coverage_tool attribute not supported by this Bazel version"
+
build_content = """\
# Generated by python/repositories.bzl
@@ -308,10 +323,7 @@
py_runtime(
name = "py3_runtime",
files = [":files"],
- coverage_tool = select({{
- ":coverage_enabled": {coverage_tool},
- "//conditions:default": None,
- }}),
+{coverage_attr}
interpreter = "{python_path}",
python_version = "PY3",
)
@@ -327,7 +339,7 @@
python_path = python_bin,
python_version = python_short_version,
python_version_nodot = python_short_version.replace(".", ""),
- coverage_tool = rctx.attr.coverage_tool if rctx.attr.coverage_tool == None or "windows" in rctx.os.name else "\"{}\"".format(rctx.attr.coverage_tool),
+ coverage_attr = coverage_attr_text,
)
rctx.delete("python")
rctx.symlink(python_bin, "python")
@@ -459,6 +471,8 @@
distutils_content: see the distutils_content attribute in the python_repository repository rule.
register_toolchains: Whether or not to register the downloaded toolchains.
register_coverage_tool: Whether or not to register the downloaded coverage tool to the toolchains.
+ NOTE: Coverage support using the toolchain is only supported in Bazel 6 and higher.
+
set_python_version_constraint: When set to true, target_compatible_with for the toolchains will include a version constraint.
tool_versions: a dict containing a mapping of version with SHASUM and platform info. If not supplied, the defaults
in python/versions.bzl will be used.
@@ -472,6 +486,19 @@
toolchain_repo_name = "{name}_toolchains".format(name = name)
+ bazel_major = int(native.bazel_version.split(".")[0])
+ if bazel_major < 6:
+ if register_coverage_tool:
+ # buildifier: disable=print
+ print((
+ "WARNING: ignoring register_coverage_tool=True when " +
+ "registering @{name}: Bazel 6+ required, got {version}"
+ ).format(
+ name = name,
+ version = native.bazel_version,
+ ))
+ register_coverage_tool = False
+
for platform in PLATFORMS.keys():
sha256 = tool_versions[python_version]["sha256"].get(platform, None)
if not sha256: