From dc9327ec424933717b2c2f7702cf6cb9926c81b5 Mon Sep 17 00:00:00 2001 From: Patrick Liu <46382106+patliu85@users.noreply.github.com> Date: Fri, 27 Mar 2020 13:25:01 -0700 Subject: [PATCH] Implement Cobertura output option for #9275 (#9325) ### Problem Implement Cobertura output option for #9275 ### Solution Add new option (`--scoverage-report-output-as-cobertura`) for triggering `CoberturaXmlWriter(...)` method call in `scoverage-report-generator_2.12-0.0.3.jar` to generate Cobertura output ### Result Generate Cobertura output (`.pants.d/test/junit/_runs/*/*/all/scoverage/reports/xml/cobertura.xml`) when `--scoverage-enable-scoverage --scoverage-report-output-as-cobertura` options are provided in pants command. --- .../backend/jvm/tasks/coverage/scoverage.py | 18 +++++++++++++++++- src/python/pants/java/jar/jar_dependency.py | 3 +++ 2 files changed, 20 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..a4518f6adcd 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,14 @@ 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 +95,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 +104,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 +115,7 @@ def __init__( settings, targets, execute_java_for_targets, + output_as_cobertura, coverage_output_dir=None, ): """ @@ -125,6 +136,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 +191,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 +212,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)