Helping to clean CPAN: October 2015
… where I get out my virtual broom and sweep up cruft I can find in my assigned distribution for this month’s edition of the CPAN Pull Request Challenge.
This month’s module: Kavorka
Kavorka provides function signatures with the lure of the animal.
First impressions
In this section I try to get a feeling for the state of the module, how up to date it is, how often people are contributing to it, how many other distributions are depending on it, how many bugs/issues it currently has, what the CPANTS kwalitee is, etc.
- last commit in October 2014 (https://github.com/tobyink/p5-kavorka)
- latest release: 1st of Nov, 2014 (https://metacpan.org/releaseKavorka)
- 1 pull request outstanding, 5 closed, no PRs in 2015
- 5 open issues in GitHub, 9 in RT
- 16 reverse dependencies via metacpan
Initial inspection of the source code
After forking the repo and cloning a local copy, I have a look at the project to see what build system it uses, if the test suite works and the tests pass, if it could do with a Travis-CI config file (or if present, if it can be updated). The initial inspection often gives inspiration for the first batch of pull requests.
- looks like a
Dist::Zillaproject - ran
dzil authordeps --missing | cpanm dzil testsays: “you can’t test without any TestRunner plugins”dist.inionly contains comments … confusing. How to build the dist?.travis.ymlgives hints as to how to build distribution- asked author for help concerning installation, no reply as yet
- asked on the
#pr-challengeIRC channel for help.leontmentioned thatDist::Inktis used for this project and that it’s the Kavorka author’s own build tool - installed
Dist::Inkt(cpanm Dist::Inkt) - also needed to install
Dist::Inkt::Profile::TOBYINK(viacpanm) - it seems one then needs to run
distinkt-distin order to build the project and run the test suite Parse::Keywordis required as a dependency in order that the tests run- also needs
namespace::sweep,Data::AliasandReturn::Type - it seems that
Moopsis also needed:
ERROR: FAILED--Further testing stopped: Test requires module 'Moops' but it's not found… which has Kavorka as a dependency. Huh? Moops is required for testing Kavorka, but Kavorka is required for Moops.
- tests now pass (there’s a warning about needing a version bump since a git tag for version 0.036 is missing)
ERROR: try bumping the version before release at ...Dist/Inkt/Role/Test/BumpedVersion.pm line 35.- tried removing installed Kavorka to see if things still work
- the tests still pass
- … but the dist still doesn’t build. Seems to be due to the version bump which hasn’t been done
- find all versions still at 0.035:
vim $(git grep VERSION | grep 0.035 | cut -d':' -f1 | sort | uniq)
27 files to edit- some instances turn up in sub-packages of
.pmfiles - looks like
meta/changes.pretalso needs to be updated to the relevant version; used info from metacpan to try to simulate correct content - using a version equal to that of current version is also not the right thing to do:
ERROR: try bumping the version before release at .../Dist/Inkt/Role/Test/BumpedVersion.pm line 35.- interestingly enough,
prove -lr tworks - to solve the version problem I needed to bump
$VERSIONin all files to 0.037; then I needed to add a new entry tometa/changes.pretfor this version; then the pre-build check for version numbers passed - unfortunately
Text::sprintfnis needed in order to check that “Checking DOAP changeset metadata is current” - now
distinkt-distgets most of the way. It builds the dist, but has to bail out since there’s no gpg secret key available.
gpg: no default secret key: secret key not available
gpg: [stdin]: clearsign failed: secret key not available
Cannot find SIGNATURE.tmp, signing aborted.
ERROR: signature failed!!!
Bailing out at .../Dist/Inkt/Role/SignDistribution.pm line 45.- if PRs are accepted, will need to update the copyright year
What this analysis tells us is that there is a need for developer documentation so that one can get the project set up quickly. Once the project is set up and one can run things like the test suite, one can then focus on solving more involved problems. To try and help with this, a README with build instructions was added in PR#17.
POD checks
The utility podchecker searches through Perl source code for POD which
might not conform to the POD standard, and thus not necessarily be parseable
by all POD parsers. Fixing any issues found by podchecker has the
positive effect of also removing any warnings noted in the project’s
documentation displayed on MetaCPAN.
Running podchecker gives the following errors and warnings:
find ./lib -name '*.pm' | xargs podchecker |& grep ERROR # 0 errors
find ./lib -name '*.pm' | xargs podchecker |& grep WARN # 0 warnings… ok, so the POD looks good.
Nit-picking
Check for trailing whitespace
Some projects consider this a must, and will disallow commits to be submitted which contain trailing whitespace (the Linux kernel is an example project where trailing whitespace isn’t permitted). Other projects see whitespace cleanup as simply nit-picking. Either way one sees it personally, this could be a useful pull request to a project, so it’s worthwhile fixing and submitting; the worst that can happen is that the pull request is closed unmerged.
To look for files with trailing whitespace, run git grep ' $'. It can be
helpful to load the files found directly into vim:
$ vim $(git grep ' $' | cut -d':' -f1 | sort | uniq)
12 files to editFixed in PR#16.
Overview of the pull requests made
Conclusion
Since the last commit was a year ago, and issues and pull requests are of a similar age, it seems that the author unfortunately doesn’t have much time to spend on the project (very understandable considering that this is a complex piece of software provided as open source). Thus it might be a while before the pull requests submitted here get replied to or applied.
Support
If you liked this post and want to see more, please buy me a coffee!