From e75eb6bd95ce8215ec901fc4e28d8de7d768be48 Mon Sep 17 00:00:00 2001 From: pliu Date: Tue, 17 Mar 2020 15:32:48 -0700 Subject: [PATCH 1/3] Implement Covertura output option --- .../backend/jvm/tasks/coverage/scoverage.py | 19 ++++++++++++++++++- src/python/pants/java/jar/jar_dependency.py | 3 +++ .../jvm/tasks/test_junit_run_integration.py | 5 +++++ 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/python/pants/backend/jvm/tasks/coverage/scoverage.py b/src/python/pants/backend/jvm/tasks/coverage/scoverage.py index d9ea818d837..4514a90361c 100644 --- a/src/python/pants/backend/jvm/tasks/coverage/scoverage.py +++ b/src/python/pants/backend/jvm/tasks/coverage/scoverage.py @@ -38,7 +38,7 @@ def scoverage_report_jar(**kwargs): return JarDependency( org="org.pantsbuild", name="scoverage-report-generator_2.12", - rev="0.0.2", + rev="0.0.3", **kwargs, ) @@ -69,6 +69,15 @@ def scoverage_report_jar(**kwargs): "filter.", ) + register( + "--output-as-cobertura", + type=bool, + default=False, + fingerprint=False, + help="Export cobertura formats which would allow users to merge with cobertura coverage for java targets.", + ) + + def create(self, settings, targets, execute_java_for_targets): """ :param settings: Generic code coverage settings. @@ -87,6 +96,7 @@ def create(self, settings, targets, execute_java_for_targets): opts = Scoverage.Factory.global_instance().get_options() target_filters = opts.target_filters + output_as_cobertura = opts.output_as_cobertura coverage_output_dir = settings.context.options.for_global_scope().pants_distdir return Scoverage( @@ -95,6 +105,7 @@ def create(self, settings, targets, execute_java_for_targets): settings, targets, execute_java_for_targets, + output_as_cobertura, coverage_output_dir=coverage_output_dir, ) @@ -105,6 +116,7 @@ def __init__( settings, targets, execute_java_for_targets, + output_as_cobertura, coverage_output_dir=None, ): """ @@ -125,6 +137,7 @@ def __init__( self._execute_java = functools.partial(execute_java_for_targets, targets) self._coverage_force = settings.options.coverage_force self._report_path = report_path + self._output_as_cobertura = output_as_cobertura self._coverage_output_dir = coverage_output_dir # @@ -179,6 +192,7 @@ def report(self, output_dir, execution_failed_exception=None): main = "org.pantsbuild.scoverage.report.ScoverageReport" scoverage_cp = self._report_path + output_as_cobertura = self._output_as_cobertura html_report_path = os.path.join(output_dir, "scoverage", "reports", "html") xml_report_path = os.path.join(output_dir, "scoverage", "reports", "xml") safe_mkdir(html_report_path, clean=True) @@ -199,6 +213,9 @@ def report(self, output_dir, execution_failed_exception=None): f"{','.join(final_target_dirs)}", ] + if output_as_cobertura: + args.append("--outputAsCobertura") + result = self._execute_java( classpath=scoverage_cp, main=main, diff --git a/src/python/pants/java/jar/jar_dependency.py b/src/python/pants/java/jar/jar_dependency.py index db4c11983b0..43bf51c2e52 100644 --- a/src/python/pants/java/jar/jar_dependency.py +++ b/src/python/pants/java/jar/jar_dependency.py @@ -121,6 +121,7 @@ class JarDependency: intransitive: bool excludes: Tuple[Exclude, ...] base_path: str + output_as_cobertura: bool def __init__( self, @@ -136,6 +137,7 @@ def __init__( intransitive: bool = False, excludes: Optional[Sequence[Exclude]] = None, base_path: Optional[str] = None, + output_as_cobertura: bool = False, ) -> None: self.org = org self.base_name = name @@ -152,6 +154,7 @@ def __init__( if os.path.isabs(base_path): base_path = os.path.relpath(base_path, get_buildroot()) self.base_path = base_path + self.output_as_cobertura = output_as_cobertura def __str__(self): return "JarDependency({})".format(self.coordinate) diff --git a/tests/python/pants_test/backend/jvm/tasks/test_junit_run_integration.py b/tests/python/pants_test/backend/jvm/tasks/test_junit_run_integration.py index 286d71e6a5e..6a5adf29b28 100644 --- a/tests/python/pants_test/backend/jvm/tasks/test_junit_run_integration.py +++ b/tests/python/pants_test/backend/jvm/tasks/test_junit_run_integration.py @@ -113,6 +113,11 @@ def do_test_junit_run_with_coverage_succeeds_scoverage(self, tests=(), args=()): def test_junit_run_with_coverage_succeeds_scoverage(self): self.do_test_junit_run_with_coverage_succeeds_scoverage(args=["--no-chroot", "--fast"]) + def test_junit_run_with_coverage_succeeds_cobertura_merged(self): + self.do_test_junit_run_with_coverage_succeeds_cobertura( + args=["--test-junit-coverage", "--scoverage-enable-scoverage", "--scoverage-report-output-as-cobertura"], + ) + def do_test_junit_run_with_coverage_succeeds_cobertura(self, tests=(), args=()): html_path = ( "test/junit/coverage/reports/html/" From 452da48d6317a0ac834410dfea4605b6f030e8a3 Mon Sep 17 00:00:00 2001 From: pliu Date: Tue, 17 Mar 2020 20:22:08 -0700 Subject: [PATCH 2/3] Revert tests/python/pants_test/backend/jvm/tasks/test_junit_run_integration.py --- .../backend/jvm/tasks/test_junit_run_integration.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/tests/python/pants_test/backend/jvm/tasks/test_junit_run_integration.py b/tests/python/pants_test/backend/jvm/tasks/test_junit_run_integration.py index 6a5adf29b28..286d71e6a5e 100644 --- a/tests/python/pants_test/backend/jvm/tasks/test_junit_run_integration.py +++ b/tests/python/pants_test/backend/jvm/tasks/test_junit_run_integration.py @@ -113,11 +113,6 @@ def do_test_junit_run_with_coverage_succeeds_scoverage(self, tests=(), args=()): def test_junit_run_with_coverage_succeeds_scoverage(self): self.do_test_junit_run_with_coverage_succeeds_scoverage(args=["--no-chroot", "--fast"]) - def test_junit_run_with_coverage_succeeds_cobertura_merged(self): - self.do_test_junit_run_with_coverage_succeeds_cobertura( - args=["--test-junit-coverage", "--scoverage-enable-scoverage", "--scoverage-report-output-as-cobertura"], - ) - def do_test_junit_run_with_coverage_succeeds_cobertura(self, tests=(), args=()): html_path = ( "test/junit/coverage/reports/html/" From c922750f297a6b19f2f207136e825fa2efc57211 Mon Sep 17 00:00:00 2001 From: pliu Date: Mon, 23 Mar 2020 17:32:55 -0700 Subject: [PATCH 3/3] Fix fmt --- src/python/pants/backend/jvm/tasks/coverage/scoverage.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/python/pants/backend/jvm/tasks/coverage/scoverage.py b/src/python/pants/backend/jvm/tasks/coverage/scoverage.py index 4514a90361c..a4518f6adcd 100644 --- a/src/python/pants/backend/jvm/tasks/coverage/scoverage.py +++ b/src/python/pants/backend/jvm/tasks/coverage/scoverage.py @@ -77,7 +77,6 @@ def scoverage_report_jar(**kwargs): help="Export cobertura formats which would allow users to merge with cobertura coverage for java targets.", ) - def create(self, settings, targets, execute_java_for_targets): """ :param settings: Generic code coverage settings.