60
60
load (
61
61
":toolchain_types.bzl" ,
62
62
"EXEC_TOOLS_TOOLCHAIN_TYPE" ,
63
+ "PY_TEST_TOOLCHAIN_TYPE" ,
63
64
TOOLCHAIN_TYPE = "TARGET_TOOLCHAIN_TYPE" ,
64
65
)
65
66
@@ -254,6 +255,7 @@ def py_executable_base_impl(ctx, *, semantics, is_test, inherited_environment =
254
255
inherited_environment = inherited_environment ,
255
256
semantics = semantics ,
256
257
output_groups = exec_result .output_groups ,
258
+ is_test = is_test ,
257
259
)
258
260
259
261
def _get_build_info (ctx , cc_toolchain ):
@@ -819,7 +821,8 @@ def _create_providers(
819
821
inherited_environment ,
820
822
runtime_details ,
821
823
output_groups ,
822
- semantics ):
824
+ semantics ,
825
+ is_test ):
823
826
"""Creates the providers an executable should return.
824
827
825
828
Args:
@@ -851,21 +854,32 @@ def _create_providers(
851
854
Returns:
852
855
A list of modern providers.
853
856
"""
857
+
858
+ default_runfiles = runfiles_details .default_runfiles
859
+ extra_test_env = {}
860
+
861
+ if is_test :
862
+ py_test_toolchain = ctx .exec_groups ["test" ].toolchains [PY_TEST_TOOLCHAIN_TYPE ]
863
+ if py_test_toolchain :
864
+ coverage_rc = py_test_toolchain .py_test_info .coverage_rc
865
+ extra_test_env = {"COVERAGE_RC" : coverage_rc .files .to_list ()[0 ].path }
866
+ default_runfiles = default_runfiles .merge (ctx .runfiles (files = coverage_rc .files .to_list ()))
867
+
854
868
providers = [
855
869
DefaultInfo (
856
870
executable = executable ,
857
871
files = default_outputs ,
858
872
default_runfiles = _py_builtins .make_runfiles_respect_legacy_external_runfiles (
859
873
ctx ,
860
- runfiles_details . default_runfiles ,
874
+ default_runfiles ,
861
875
),
862
876
data_runfiles = _py_builtins .make_runfiles_respect_legacy_external_runfiles (
863
877
ctx ,
864
878
runfiles_details .data_runfiles ,
865
879
),
866
880
),
867
881
create_instrumented_files_info (ctx ),
868
- _create_run_environment_info (ctx , inherited_environment ),
882
+ _create_run_environment_info (ctx , inherited_environment , extra_test_env ),
869
883
PyExecutableInfo (
870
884
main = main_py ,
871
885
runfiles_without_exe = runfiles_details .runfiles_without_exe ,
@@ -937,7 +951,7 @@ def _create_providers(
937
951
providers .extend (extra_providers )
938
952
return providers
939
953
940
- def _create_run_environment_info (ctx , inherited_environment ):
954
+ def _create_run_environment_info (ctx , inherited_environment , extra_test_env ):
941
955
expanded_env = {}
942
956
for key , value in ctx .attr .env .items ():
943
957
expanded_env [key ] = _py_builtins .expand_location_and_make_variables (
@@ -946,6 +960,7 @@ def _create_run_environment_info(ctx, inherited_environment):
946
960
expression = value ,
947
961
targets = ctx .attr .data ,
948
962
)
963
+ expanded_env .update (extra_test_env )
949
964
return RunEnvironmentInfo (
950
965
environment = expanded_env ,
951
966
inherited_environment = inherited_environment ,
0 commit comments