From ee17b7d1ff4cb9ea2d534f4916d8d2d75dbfb2ac Mon Sep 17 00:00:00 2001 From: John Krukoff Date: Thu, 21 Apr 2016 16:20:04 -0600 Subject: [PATCH] Add --directory override to specify top level git directory. Currently, the coverage reporter invokes git to determine the base directory of the git repository. If CI is being run inside a docker container, best practices include not copying the VCS information into the container to reduce the size. However, if that advice is followed, the coverage reporter is then unable to invoke git successfully for this use case. To support running without git, this adds a command line flag to manually specify the base directory without invoking git. This has the side benefit of allowing the coverage reporter to be useful for other VCS systems as well. --- src/codacy/reporter.py | 12 +++++++----- tests/tests.py | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/codacy/reporter.py b/src/codacy/reporter.py index 98175ed..d7bf64d 100755 --- a/src/codacy/reporter.py +++ b/src/codacy/reporter.py @@ -59,14 +59,15 @@ def file_exists(rootdir, filename): return False -def generate_filename(sources, filename): +def generate_filename(sources, filename, git_directory): def strip_prefix(line, prefix): if line.startswith(prefix): return line[len(prefix):] else: return line - git_directory = get_git_directory() + if not git_directory: + git_directory = get_git_directory() for source in sources: if file_exists(source, filename): @@ -75,7 +76,7 @@ def strip_prefix(line, prefix): return filename -def parse_report_file(report_file): +def parse_report_file(report_file, git_directory): """Parse XML file and POST it to the Codacy API :param report_file: """ @@ -97,7 +98,7 @@ def percent(s): classes = report_xml.getElementsByTagName('class') for cls in classes: file_report = { - 'filename': generate_filename(sources, cls.attributes['filename'].value), + 'filename': generate_filename(sources, cls.attributes['filename'].value, git_directory), 'total': percent(cls.attributes['line-rate'].value), 'coverage': {}, } @@ -141,6 +142,7 @@ def run(): parser = argparse.ArgumentParser(description='Codacy coverage reporter for Python.') parser.add_argument("-r", "--report", type=str, help="coverage report file", default=DEFAULT_REPORT_FILE) parser.add_argument("-c", "--commit", type=str, help="git commit hash") + parser.add_argument("-d", "--directory", type=str, help="git top level directory") parser.add_argument("-v", "--verbose", help="show debug information", action="store_true") args = parser.parse_args() @@ -160,7 +162,7 @@ def run(): exit(1) logging.info("Parsing report file...") - report = parse_report_file(args.report) + report = parse_report_file(args.report, args.directory) logging.info("Uploading report...") upload_report(report, CODACY_PROJECT_TOKEN, args.commit) diff --git a/tests/tests.py b/tests/tests.py index a82d28d..86eca4a 100644 --- a/tests/tests.py +++ b/tests/tests.py @@ -20,7 +20,7 @@ def file_get_contents(filename): with open(filename) as f: return f.read() - generated = codacy.reporter.parse_report_file(generated_filename) + generated = codacy.reporter.parse_report_file(generated_filename, '') json_content = file_get_contents(expected_filename) expected = json.loads(json_content)