Files
nuitka-mirror/misc/make-coverage-rendering.py
2025-04-28 11:04:36 +02:00

81 lines
2.3 KiB
Python
Executable File

#!/usr/bin/python
# Copyright 2025, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
import os
import shutil
import subprocess
import sys
def main():
# Set the stage.
os.chdir(os.path.dirname(__file__))
shutil.rmtree("coverage", ignore_errors=True)
print("Fetching coverage files:")
subprocess.call(
["rsync", "-az", "--delete", "%s/" % os.environ["COVERAGE_DIR"], "coverage/"]
)
print("Combining coverage files:")
os.chdir("coverage")
print("Detect coverage file roots:")
# Now detect where the files were collected from:
paths = [os.path.abspath(os.path.join(os.curdir, "..", ".."))]
for filename in os.listdir("."):
if not filename.startswith("meta.coverage"):
continue
values = {}
exec(open(filename).read(), values)
if "__builtins__" in values:
del values["__builtins__"]
paths.append(values["NUITKA_SOURCE_DIR"])
coverage_path = os.path.abspath(".coveragerc")
with open(coverage_path, "w") as coverage_rcfile:
coverage_rcfile.write("[paths]\n")
coverage_rcfile.write("source = \n")
for path in paths:
coverage_rcfile.write(" " + path + "\n")
subprocess.call(
[sys.executable, "-m", "coverage", "combine", "--rcfile", coverage_path]
)
assert os.path.exists(coverage_path)
subprocess.call(
[sys.executable, "-m", "coverage", "html", "--rcfile", coverage_path]
)
# Clean up after ourselves again.
# shutil.rmtree("coverage", ignore_errors = True)
if __name__ == "__main__":
main()
# Part of "Nuitka", an optimizing Python compiler that is compatible and
# integrates with CPython, but also works on its own.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.