[pygobject] coverage: include Python coverage in lcov report



commit 3bb23925f80f77d8a3d94f48e83f532e3846870e
Author: Christoph Reiter <reiter christoph gmail com>
Date:   Sun Mar 27 16:37:54 2022 +0200

    coverage: include Python coverage in lcov report
    
    newer pycoverage supports lcov as output format, so convert
    to lcov and only generate one report at the end for everything.
    
    The lcov report isn't that nice, but at least everything is in one place.

 .gitlab-ci.yml                  |  1 +
 .gitlab-ci/coverage-docker.sh   | 21 +--------------------
 .gitlab-ci/fixup-lcov-paths.py  | 33 +++++++++++++++++++++++++--------
 .gitlab-ci/test-docker-old.sh   |  1 +
 .gitlab-ci/test-docker.sh       |  1 +
 .gitlab-ci/test-flatpak-gtk4.sh |  1 +
 .gitlab-ci/test-msys2.sh        |  1 +
 7 files changed, 31 insertions(+), 28 deletions(-)
---
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index a1a1a9b5..024654bd 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -38,6 +38,7 @@ coverage:
     PYENV_VERSION: "3.7.13-debug"
   script:
     - bash -x ./.gitlab-ci/coverage-docker.sh
+  coverage: '/^\s+lines\.+:\s+([\d.]+\%)\s+/'
 
 pages:
   stage: deploy
diff --git a/.gitlab-ci/coverage-docker.sh b/.gitlab-ci/coverage-docker.sh
index 3072c2fe..a1b271ee 100755
--- a/.gitlab-ci/coverage-docker.sh
+++ b/.gitlab-ci/coverage-docker.sh
@@ -2,11 +2,8 @@
 
 set -e
 
-python -m pip install coverage
-
 # Make the Windows paths match our current layout
 python ./.gitlab-ci/fixup-lcov-paths.py coverage/*.lcov
-python ./.gitlab-ci/fixup-covpy-paths.py coverage/.coverage*
 
 # Remove external headers (except gi tests)
 for path in coverage/*.lcov; do
@@ -17,25 +14,9 @@ for path in coverage/*.lcov; do
     lcov --config-file .gitlab-ci/lcovrc -r "${path}" '*tmp-introspect*' -o "${path}"
 done
 
-python -m coverage combine coverage
-python -m coverage html --show-contexts --ignore-errors -d coverage/report-python
 genhtml --ignore-errors=source --config-file .gitlab-ci/lcovrc \
-    coverage/*.lcov -o coverage/report-c
+    coverage/*.lcov -o coverage/
 
 cd coverage
 rm -f .coverage*
 rm -f *.lcov
-
-ln -s report-python/index.html index-python.html
-ln -s report-c/index.html index-c.html
-
-cat >index.html <<EOL
-<html>
-<body>
-<ul>
-<li><a href="report-c/index.html">C Coverage</a></li>
-<li><a href="report-python/index.html">Python Coverage</a></li>
-</ul>
-</body>
-</html>
-EOL
diff --git a/.gitlab-ci/fixup-lcov-paths.py b/.gitlab-ci/fixup-lcov-paths.py
index ecd77425..e8555c75 100644
--- a/.gitlab-ci/fixup-lcov-paths.py
+++ b/.gitlab-ci/fixup-lcov-paths.py
@@ -1,6 +1,5 @@
 import sys
 import os
-import io
 import re
 
 
@@ -11,15 +10,33 @@ def main(argv):
 
     for path in paths:
         print("cov-fixup:", path)
-        text = io.open(path, "r", encoding="utf-8").read()
-        text = text.replace("\\\\", "/")
+        with open(path, "r", encoding="utf-8") as h:
+            text = h.read()
+
+        text = text.replace("\\\\", "/").replace("\\", "/")
         new_root = os.getcwd()
+
+        def make_abs(m):
+            p = m.group(1)
+            if p.startswith("C:/"):
+                p = p.replace("C:/", "/c/")
+            if not p.startswith("/"):
+                p = os.path.join(new_root, p)
+            return "SF:" + p
+
+        text = re.sub("SF:(.*?)$", make_abs, text, 0, re.MULTILINE)
+
+        canidate = None
         for old_root in set(re.findall(":(.*?)/gi/.*?$", text, re.MULTILINE)):
-            if old_root != new_root:
-                print("replacing %r with %r" % (old_root, new_root))
-            text = text.replace(old_root, new_root)
-            with io.open(path, "w", encoding="utf-8") as h:
-                h.write(text)
+            if canidate is None or len(old_root) < len(canidate):
+                canidate = old_root
+
+        if canidate:
+            print("replacing %r with %r" % (canidate, new_root))
+            text = text.replace(canidate, new_root)
+
+        with open(path, "w", encoding="utf-8") as h:
+            h.write(text)
 
 
 if __name__ == "__main__":
diff --git a/.gitlab-ci/test-docker-old.sh b/.gitlab-ci/test-docker-old.sh
index c06f7ee2..8d88bd35 100755
--- a/.gitlab-ci/test-docker-old.sh
+++ b/.gitlab-ci/test-docker-old.sh
@@ -20,3 +20,4 @@ python -m pip install --upgrade pip
 python -m pip install pycairo pytest pytest-faulthandler coverage
 python setup.py build_tests
 xvfb-run -a python -m coverage run --context "${COV_KEY}" tests/runtests.py
+python -m coverage lcov -o "${COV_DIR}/${COV_KEY}.py.lcov"
diff --git a/.gitlab-ci/test-docker.sh b/.gitlab-ci/test-docker.sh
index bb865a01..d44641dd 100755
--- a/.gitlab-ci/test-docker.sh
+++ b/.gitlab-ci/test-docker.sh
@@ -52,6 +52,7 @@ lcov --config-file .gitlab-ci/lcovrc --directory . --capture --initial --output-
     "${COV_DIR}/${CI_JOB_NAME}-baseline.lcov"
 
 xvfb-run -a python -m coverage run --context "${COV_KEY}" tests/runtests.py
+python -m coverage lcov -o "${COV_DIR}/${COV_KEY}.py.lcov"
 
 # COLLECT GCOV COVERAGE
 lcov --config-file .gitlab-ci/lcovrc --directory . --capture --output-file \
diff --git a/.gitlab-ci/test-flatpak-gtk4.sh b/.gitlab-ci/test-flatpak-gtk4.sh
index 320a107f..a299b641 100755
--- a/.gitlab-ci/test-flatpak-gtk4.sh
+++ b/.gitlab-ci/test-flatpak-gtk4.sh
@@ -11,4 +11,5 @@ export TEST_GTK_VERSION=4.0
 python3 -m pip install --user pytest pytest-faulthandler coverage
 python3 setup.py build_tests
 python3 -m coverage run --context "${COV_KEY}" tests/runtests.py
+python3 -m coverage lcov -o "${COV_DIR}/${COV_KEY}.py.lcov"
 chmod -R 777 "${COV_DIR}"
\ No newline at end of file
diff --git a/.gitlab-ci/test-msys2.sh b/.gitlab-ci/test-msys2.sh
index 8cd39afd..045fef17 100755
--- a/.gitlab-ci/test-msys2.sh
+++ b/.gitlab-ci/test-msys2.sh
@@ -47,6 +47,7 @@ lcov \
     "${COV_DIR}/${COV_KEY}-baseline.lcov"
 
 MSYSTEM= python -m coverage run --context "${COV_KEY}" tests/runtests.py
+MSYSTEM= python -m coverage lcov -o "${COV_DIR}/${COV_KEY}.py.lcov"
 
 lcov \
     --config-file .gitlab-ci/lcovrc \


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]