In accordance with the terms of my grant from TPF this is the monthly report for my work on improving Devel::Cover covering September 2012.
This month I released Devel::Cover versions 0.94, 0.95 and 0.96. The first thing I did this month, as I was installing perl-5.16.1 and perl-5.17.3, was catch up on some of the Devel::Cover related mail I had received. I had already installed 5.16.1 as my default perl via perlbrew, but I have a suite of perl versions that I use to test every Devel::Cover release candidate, and those perl versions aren't installed via perlbrew. I have tried, but I couldn't get perlbrew to automatically apply appropriate patches to old perls so they could be built today, although perlbrew's install-patchperl seems to suggest that that should be possible. If anyone knows how to do that, I'd love a hint. Or better yet, a pull request against build() in https://github.com/pjcj/Devel--Cover/blob/master/utils/all_versions And if anyone is interested in my current regression testing solution, it's basically that file above plus https://github.com/pjcj/buildperls to build the perl versions. It's not overly pretty, but it does mean that I can build new perls simply by dropping a tarball into a src directory and running a command. And not having to think about stuff like that is always a win. I've heard from others who have similar solutions. Having built those perl versions I ran them on Devel::Cover and, as expected, saw that Devel::Cover fails its tests on 5.17.3. This is something I knew about from discussions with Father Chrysostomos on p5p and also from failing cpantesters reports. (Thanks again cpantesters!) The failure was purely cosmetic and brought about by Father Chrysostomos fixing up loopexes. The details are in https://rt.perl.org/rt3//Public/Bug/Display.html?id=113684 and the explanation of why the cosmetic change exists are in https://rt.perl.org/rt3//Public/Bug/Display.html?id=106892#txn-1043534 That seemed sufficient for a new release, so I let 0.94 roam the CPAN mirrors. Whilst all that was going on, I also set cpancover running against an official 5.16.1 release (The previous run was against an RC). The results are available at http://cpancover.com, as usual. I investigated github ticket 15: issue with Moo attribute which is Moo object. This turned out to be another of those longstanding bugs that I knew a bit about but had never been able to find the time to put in sufficient effort to crack. Thanks to the grant I was able to crack it. The problem was with condition coverage, and in particular when the first operand of a LOGOP called (directly or indirectly) a subroutine in a file for which coverage was not being collected. This meant that at the time Devel::Cover decided whether or not to collect coverage data for the LOGOP the last COP seen was indicating that coverage shouldn't be collected. The solution was to check PL_curcop at appropriate times. In conjunction with this I was able to add numerous test cases from RT and github and close out various tickets. Then I spent some time tracking down a strange bug. Christian Walde reported in https://github.com/pjcj/Devel--Cover/issues/29 that Devel::Cover was going into an infinite loop running the Moo test suite, and in particular on one of the xt/ tests. (It was xt/super-jenga.t.) I was unable to repeat the problem, so Christian allowed me to login to his machine. There I could repeat the problem, but copying Devel/Cover.pm locally and running with -I . to use the local file caused the problem not to occur. It turned out that during global destruction a file-scoped lexical variable had already been destroyed when a subroutine using it was called. This strange situation caused the infinite loop in that subroutine. I wanted to fix the problem by checking ${^GLOBAL_PHASE} but, unfortunately, that variable doesn't exist before 5.14, so I ended up just checking that the lexical variable wasn't false. (The variable holds a regex.) As usual, I made other various fixes and updates. The work I have completed in the time covered by this report is: Closed RT tickets: 63090 conditionals where one element is data from a Moose attrib are not evaluated 63698 Math::BigInt ':constant' confuses branch coverage 72027 Devel::Cover does not detect branch coverage with DBM::Deep 38258 inclusion/exclusion options to cover not reflected in summary row 34327 Condition coverage for constants Closed Github tickets: 15 issue with Moo attribute which is Moo object 27 Newer versions assume $^X is always pointing to Perl executable 29 cover -test on windows loops endlessly Merged pull requests: 20 failing test for branching coverage of Moo attributes 28 You are sat next to me so I guess this is ok (I was sat next to him, and forgot that I would use the title here.) Fixed cpantesters reports: http://www.cpantesters.org/cpan/report/ceee4f36-de73-11e1-a876-575485400d13 http://www.cpantesters.org/cpan/report/f296fa46-de73-11e1-bc68-855885400d13 http://www.cpantesters.org/cpan/report/abe8c2d2-de73-11e1-bad3-055385400d13 You can see the commits at https://github.com/pjcj/Devel--Cover/commits/master Hours worked: 26.05 Total hours worked on grant: 159:50 (I made a mistake in reporting the total hours worked on the grant in the report for 06.2012. I reported there that I had worked two hours fewer than I actually had. That error propagated forwards, but I have rectified it here.) -- Paul Johnson - p...@pjcj.net http://www.pjcj.net