Files
nuitka-mirror/misc/make-coverage-rendering.py
2026-05-15 13:37:28 +02:00

105 lines
2.8 KiB
Python
Executable File

#!/usr/bin/python
# Copyright 2026, Kay Hayen, mailto:kay.hayen@gmail.com find license text at end of file
"""Coverage rendering tool."""
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 = {}
with open(filename, encoding="utf-8") as f:
# pylint: disable=exec-used
exec(f.read(), values)
if "__builtins__" in values:
del values["__builtins__"]
paths.append(values["NUITKA_SOURCE_DIR"])
# spell-checker: ignore coveragerc
coverage_path = os.path.abspath(".coveragerc")
with open(coverage_path, "w", encoding="utf-8") as coverage_rc_file:
coverage_rc_file.write("[paths]\n")
coverage_rc_file.write("source = \n")
for path in paths:
coverage_rc_file.write(" " + path + "\n")
subprocess.call(
# spell-checker: ignore rcfile
[
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 GNU Affero General Public License, Version 3 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.gnu.org/licenses/agpl-3.0.txt
#
# See also: "Nuitka Runtime Library Exception, Version 1.0" in file
# "LICENSE-RUNTIME.txt" for additional permissions granted under Section 7.
#
# 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.