eriwen / lcov-to-cobertura-xml

Converts lcov output to Cobertura-compatible XML for CI
https://eriwen.github.io/lcov-to-cobertura-xml/
Apache License 2.0
187 stars 73 forks source link

duplicate matches in `--excludes` will lead to errors #53

Open dothebart opened 6 months ago

dothebart commented 6 months ago

It seems if more that one --excludes wants to match on a single item one gets uncaught exceptions. Changing it to an error message instead:

diff --git a/lcov_cobertura/lcov_cobertura.py b/lcov_cobertura/lcov_cobertura.py
index 379e405..3faf7a9 100755
--- a/lcov_cobertura/lcov_cobertura.py
+++ b/lcov_cobertura/lcov_cobertura.py
@@ -217,7 +217,10 @@ class LcovCobertura():
         excluded = [x for x in coverage_data['packages'] for e in self.excludes
                     if re.match(e, x)]
         for package in excluded:
-            del coverage_data['packages'][package]
+            try:
+                del coverage_data['packages'][package]
+            except KeyError as ex:
+                print(f"skipping filter for {package} - not found; duplicate exclude pattern match?")

         # Compute line coverage rates
         for package_data in list(coverage_data['packages'].values()):
@@ -425,8 +428,8 @@ def main(argv=None):
             cobertura_xml = lcov_cobertura.convert()
         with open(options.output, mode='wt') as output_file:
             output_file.write(cobertura_xml)
-    except IOError:
-        sys.stderr.write("Unable to convert %s to Cobertura XML" % args[1])
+    except IOError as ex:
+        sys.stderr.write("Unable to convert %s to Cobertura XML %s" % (args[1], ex))

 if __name__ == '__main__':