Generate coverage reports for git patches

Clone this repo:
  1. 543d594 build: Upgrade mediawiki/mediawiki-codesniffer to v43.0.0 by Umherirrender · 6 weeks ago master
  2. 5ed0ff9 build: Updating mediawiki/mediawiki-phan-config to 0.14.0 by libraryupgrader · 3 months ago
  3. f325f60 build: Upgrade phpunit to 9.6.16 by James D. Forrester · 3 months ago
  4. 93479ba build: Switch phan to special library mode by James D. Forrester · 1 year ago
  5. b235c54 build: Updating mediawiki/mediawiki-codesniffer to 41.0.0 by libraryupgrader · 1 year, 2 months ago

phpunit-patch-coverage

A tool to generate coverage reports for a Git patch without actually running the entire coverage report.

Purpose

Running PHPUnit coverage reports with Xdebug can be extremely slow. For example, the MediaWiki core coverage report takes around 2 hours to run. This makes it hard for developers to get quick feedback on their patches to see how they affected the overall coverage.

The goal of this is to be able to generate coverage reports for Git patches without running the full coverage tests.

Implementation

We look at the files that were changed in the last commit. We identify classes that were changed, as well as tests that were changed. We then find all the tests that cover those classes, and run the tests with coverage for those files.

Next we'll checkout the previous commit, and re-calculate to see which tests should be run (@covers and modified files). We'll re-run the coverage, and then diff the result!

There are probably plenty of edge cases where this won't work, but I think it will do reasonably well.

Usage

Add the composer dependency to your project:

composer require --dev mediawiki/phpunit-patch-coverage

The current working directory must be your git repository. With full options:

./vendor/bin/phpunit-patch-coverage check \
 --command "php vendor/bin/phpunit" \
 --sha1 HEAD

The options shown in the example above are the defaults, and do not need to be specified again. You may find it useful to have xdebug disabled by default, and then specify it at runtime with: php -d zend_extension=xdebug.so .... Or if you have a PHPUnit wrapper (like MediaWiki), you can call that.

License

phpunit-patch-coverage is (C) 2018 Kunal Mehta, under the terms of the GPL v3 or any later version. See COPYING for more details.