Created
March 30, 2021 00:46
-
-
Save opikalo/1415210c0b97b18856193ab8944d7a70 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import argparse | |
import json | |
import logging | |
import re | |
import sys | |
import tqdm | |
logger = logging.getLogger(__name__) | |
DEFAULT_TEST_FILEPATH_REGEX = r'\S+/test/' | |
def drop_coverage(input_report, output_report, file_pattern): | |
""" Remove branch coverage from tests: this way only line coverage | |
will be reported within sonarqube for tests, avoiding low scores on | |
half the coverage for arrert(true) type of statements """ | |
re_file_pattern = re.compile(file_pattern) | |
logger.debug("opening %s", input_report) | |
with open(input_report) as file_handle: | |
coverage_data = json.load(file_handle) | |
reconstructed_files = [] | |
for covered_file in tqdm.tqdm(coverage_data['files'], | |
disable=not sys.stdout.isatty()): | |
# if file matches test pattern, drop it's branch coverage | |
file_name = covered_file["file"] | |
match = re.match(re_file_pattern, file_name) | |
if match: | |
logger.debug("dropping branch info for %s", file_name) | |
for line in covered_file['lines']: | |
line['branches'] = [] | |
reconstructed_files.append(covered_file) | |
coverage_data['files'] = reconstructed_files | |
with open(output_report, 'w') as filehandle: | |
json.dump(coverage_data, filehandle) | |
logger.debug("finished writing %s", output_report) | |
def process_args(): # pragma: no cover | |
""" Process command line arguments, input/output, test pattern and log | |
level """ | |
parser = argparse.ArgumentParser( | |
"Drop branch coverage for files matching pattern") | |
parser.add_argument('--json-input-report', | |
help='Name of the input gcovr json report file') | |
parser.add_argument('--json-output-report', | |
help='Name of the output gcovr json report file') | |
parser.add_argument('--test-file-pattern', | |
help='regex pattern for test files', | |
default=DEFAULT_TEST_FILEPATH_REGEX) | |
parser.add_argument("-l", "--log", dest="logLevel", | |
choices=['DEBUG', 'INFO', 'WARNING', 'ERROR', | |
'CRITICAL'], | |
default='INFO', | |
help="Set the logging level") | |
args = parser.parse_args() | |
return args | |
def main(): # pragma: no cover | |
args = process_args() | |
if args.logLevel: | |
logging.basicConfig(level=getattr(logging, args.logLevel)) | |
drop_coverage(args.json_input_report, args.json_output_report, | |
args.test_file_pattern) | |
if __name__ == '__main__': # pragma: no cover | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment