#!/usr/bin/env python3 """ A simple script which updates paths for .coverage executed in another directory. This is particularly useful for fixing .coverage files received via ./cache/.coverage after Docker runs. Copyright (C) 2021 aurweb Development All Rights Reserved. """ import os import re import sqlite3 import sys import traceback import aurweb.config def eprint(*args, **kwargs): print(*args, **kwargs, file=sys.stderr) def main(): if len(sys.argv) == 1: print(f"usage: {sys.argv[0]} .coverage") return 1 coverage_db = sys.argv[1] if not os.path.exists(coverage_db): eprint("error: coverage file not found") return 2 aurwebdir = aurweb.config.get("options", "aurwebdir") new_coverage_db = os.path.join(aurwebdir, ".coverage") with open(coverage_db, "rb") as i: with open(new_coverage_db, "wb") as f: f.write(i.read()) print(f"Copied coverage db to {new_coverage_db}.") coverage_db = new_coverage_db sqlite3.paramstyle = "format" db = sqlite3.connect(coverage_db) cursor = db.cursor() results = cursor.execute("SELECT * FROM file") files = dict() for i, path in results: files[i] = path for _, i in enumerate(files.keys()): new_path = re.sub(r"^/aurweb", aurwebdir, files[i]) cursor.execute("UPDATE file SET path = ? WHERE id = ?", (new_path, i)) db.commit() db.close() return 0 if __name__ == "__main__": e = 1 try: e = main() except Exception: traceback.print_exc() e = 1 sys.exit(e)