NAME Perl5::TestEachCommit - Test each commit in a pull request to Perl core SYNOPSIS use Perl5::TestEachCommit; $self = Perl5::TestEachCommit->new(); $self->prepare_repository(); $self->display_plan(); $self->get_commits(); $self->display_commits(); $self->examine_all_commits(); $self->get_results(); $self->display_results(); DESCRIPTION This library is intended for use by people working to maintain the Perl core distribution . Commits to "blead", the main development branch in the Perl repository, are most often done by pull requests. Most such p.r.s consist of a single commit, but commits of forty or eighty are not unknown. A continuous integration system (CI) ensures that each p.r. is configured, built and tested on submission and on subsequent modifications. That CI system, however, only executes that cycle on the *final* commit in each p.r. It cannot detect any failure in a *non-final* commit. This library provides a way to test each commit in the p.r. to the same extent that the CI system tests the final commit. Why is this important? Suppose that we have a pull request that consists of 5 commits. In commit 3 the developer makes an error which causes make to fail. The developer notices that and corrects the error in commit 4. Commit 5 configures, builds and tests satisfactorily, so the CI system gives the p.r. as a whole a PASS. The committer uses that PASS as the basis for approving a merge of the branch into "blead". Commit Configure Build Test ------------------------------------ 1abcd X X X 2efab X X X 3cdef X 0 - 4dcba X X X 5fedc X X X If, for any reason (*e.g.,* bisection), some other developer in the future needs to say git checkout 3cdef, they will discover that at that commit the build was actually broken.