Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
parser = create_argument_parser()
cli_options = parser.parse_args(args=args)
# load the config
cfg_name = find_config_name(cli_options)
cfg_options = {}
if cfg_name is not None:
with io.open(cfg_name, encoding='UTF-8') as cfg_file:
cfg_options = parse_config_into_dict(
parse_config_file(cfg_file, filename=cfg_name))
options_dict = merge_options_and_set_defaults(
[cfg_options, cli_options.__dict__])
options = Options(**options_dict)
logger = Logger(options.verbose)
if cli_options.version:
logger.msg(
"gcovr {version}\n"
"\n"
"{copyright}",
version=__version__, copyright=COPYRIGHT)
sys.exit(0)
if options.html_medium_threshold > options.html_high_threshold:
logger.error(
"value of --html-medium-threshold={} should be\n"
"lower than or equal to the value of --html-high-threshold={}.",
options.html_medium_threshold, options.html_high_threshold)
sys.exit(1)
def process_gcov_data(data_fname, covdata, source_fname, options, currdir=None):
logger = Logger(options.verbose)
INPUT = io.open(data_fname, "r", encoding=options.source_encoding,
errors='replace')
# Find the source file
firstline = INPUT.readline()
fname = guess_source_file_name(
firstline, data_fname, source_fname,
root_dir=options.root_dir, starting_dir=options.starting_dir,
logger=logger, currdir=currdir)
logger.verbose_msg("Parsing coverage data for file {}", fname)
# Return if the filename does not match the filter
# Return if the filename matches the exclude pattern
filtered, excluded = apply_filter_include_exclude(
fname, options.filter, options.exclude)
def process_existing_gcov_file(filename, covdata, options, toerase, workdir):
logger = Logger(options.verbose)
filtered, excluded = apply_filter_include_exclude(
filename, options.gcov_filter, options.gcov_exclude)
if filtered:
logger.verbose_msg(
"This gcov file does not match the filter: {}", filename)
return
if excluded:
logger.verbose_msg("Excluding gcov file: {}", filename)
return
process_gcov_data(filename, covdata, None, options)
if not options.keep:
def gcovr_json_files_to_coverage(filenames, covdata, options):
r"""merge a coverage from multiple reports in the format
partially compatible with gcov JSON output"""
logger = Logger(options.verbose)
for filename in filenames:
gcovr_json_data = {}
logger.verbose_msg("Processing JSON file: {}", filename)
with open(filename, 'r') as json_file:
gcovr_json_data = json.load(json_file)
assert gcovr_json_data['gcovr/format_version'] == JSON_FORMAT_VERSION
coverage = {}
for gcovr_file in gcovr_json_data['files']:
file_path = os.path.join(os.path.abspath(options.root), gcovr_file['file'])
file_coverage = FileCoverage(file_path)
_lines_from_json(file_coverage, gcovr_file['lines'])
coverage[file_path] = file_coverage
If it exists, we try that path as a workdir,
If the path is relative,
it is resolved relative to the gcovr cwd and the object file location.
We next try the ``--root`` directory.
TODO: should probably also be the gcovr start directory.
If none of those work, we assume that
the object files are in a subdirectory of the gcc working directory,
i.e. we can walk the directory tree upwards.
All of this works fine unless gcc was invoked like ``gcc -o ../path``,
i.e. the object files are in a sibling directory.
TODO: So far there is no good way to address this case.
"""
logger = Logger(options.verbose)
logger.verbose_msg("Processing file: {}", filename)
abs_filename = os.path.abspath(filename)
errors = []
potential_wd = []
if options.objdir:
potential_wd = find_potential_working_directories_via_objdir(
abs_filename, options.objdir, error=errors.append)
# no objdir was specified or objdir didn't exist
consider_parent_directories = not potential_wd