summaryrefslogtreecommitdiff
path: root/maint/postprocess_coverage_cobertura
blob: ffcfc546439b3a4a7c511fc1d6dc85806bb6db13 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/usr/bin/python
#
# Use BeautifulSoup to deduplicate functions in a grov XML (cobertura)
# output file.

import sys

try:
    from bs4 import BeautifulSoup
    import lxml
except ImportError:
    print("Sorry, BeautifulSoup 4 or lxml is not installed.", file=sys.stderr)
    sys.exit(1)

if len(sys.argv) != 2:
    print(f"Usage: {sys.argv[0]} <cobertura_file>")
    print("    Post-process a grcov cobertura.xml file")
    sys.exit(1)

# Parse the coverage file
with open(sys.argv[1]) as f:
    document = BeautifulSoup(f, "lxml")

# Iterate over source files
for file in document.coverage.packages.findAll("package"):
    already_seen = set()
    # Iterate over function
    for func in file.classes.findChild("class").methods.findAll("method"):
        name = func["name"]
        if name in already_seen:
            # Remove duplicate function
            func.extract()
        else:
            already_seen.add(name)

with open(sys.argv[1], 'w') as out:
    out.write(document.prettify())