Perl QA Hackathon 2014 report
I started off the first day by discussing with Ricardo Signes, David Golden, Leon Timmermans and Andreas König some of the current issues with the PAUSE indexer and possible ways to remedy them. One of the big issues that has come up lately is the handling of distributions where a module name is foldcased-identical to another module. (On case-insensitive filesystems, you can only have one of these installed at a given time; if they come from different distributions, all kinds of "fun" things can happen depending on the installation order and the user's expectations.) We also discussed the concept of "distribution permissions", and how distributions should be handled when there is no corresponding module in the distribution with the same name (e.g. http://metacpan.org/release/libwww-perl). This resulted in a proposal document for some modifications to the indexing rules (see David's report) and a lot of updates to PAUSE from Ricardo (http://rjbs.manxome.org/rubric/entry/2040, https://github.com/andk/pause/pulls?direction=desc&page=1&sort=created&state=closed).
Then, I turned to one of the big projects I'd brought with me: figuring out what to do with Module::Metadata. I've more-or-less volunteered myself to take on maintenance of this distribution from David Golden, and I'd already identified a few major things needing fixing (as well as several smaller bugs): the first of these that I tackled was refactoring out the version-extraction code into a more modular chunk, and then swapping out its implementation with something that would perform the code evaluation more safely. This code was very heavily based on work done by David Golden and then fixed up for win32 by Graham Knop.
That evening, a small group of us (David Golden, Ricardo Signes, Graham Knop, Peter Rabbitson, Leon Timmermans) sequestered ourselves in a restaurant to discuss various issues with version.pm and how to make its behaviour less, um, interesting. A good part of the discussion focused on the handling of underscores in versions, and the semantic differences of v-strings and versions with more than one dot. Rik filled the back of a placemat with lots of notes, which Leon started working with the next day, punctuated with several cries of anguish as he discovered little nuggets of delight in the source code.
On Friday, I wrote a script to compare all known version extraction methods to each other, with an eye to consolidating the implementations down into something we could bless as canonical, and then later fix all the various tools to use this canonical method. Using some of the information I had learned from examining this code, I continued on with my Module::Metadata work, cleaning up its tests to handle the changes in behaviour (there will be much less magic in trying to guess what the user meant with a version declaration, and focus more tightly on extracting whatever is on the single-line $VERSION assignment), and I finished up some unfinished changes I'd had from the Christmas break where I had started removing some of the legacy Module::Build framework from its test suite (Module::Metadata originally lived as part of Module::Build).
There were more continuing discussions on the unboring nature of versions, and, realizing that it was Pi Day (March 14), I took a few minutes to write and release Acme::Pi, a module that defined its $VERSION using a mathematical expression. PAUSE promptly refused to recognize its version, but Kenichi Ishigaki quickly patched this in Parse::PMFile and Andreas launched the changes to PAUSE. It's so wonderful having everyone so close at hand to get changes executed quickly!
One of the other big things I came prepared to work on was the CPAN Meta Spec and its validation and implementation. There wasn't very much code written here, but there were lots of discussions and things to chew over in the coming months -- in the afternoon of the final day, I had a great discussion with David Golden, Leon Timmermans and Graham Knop about the semantics of conflict-checking, x_breaks, validating prereqs at install time, handling of "optional features" and optional dependencies in general, and future plans for maintaining a client-side database of all distribution metadata for use by tools. I have a *huge* amount of work added to my tuit list here which should keep me occupied for several months, as well as the work I'd previously promised to Barbie and David regarding refactoring and centralizing the currently disparate implementations of meta validation. (I also spent part of the final day writing some additional test cases for meta upgrading/downgrading and Leon's meta fragment merging, which I still need to finish up and merge.)
I was pleased to get Neil Bowers and Kenichi Ishigaki together to discuss Neil's ideas for a module abstract spec and creating a of a Kwalitee metric for it; Neil was also instrumental in organizing a discussion about a periodic email to all PAUSE authors to give them updates about changes to PAUSE as well as ensure that we have a current email contact for everybody.
And there was so much more that is hard to summarize! But a few amusing moments include:
- someone (*cough*) including me on a list of "young people involved in Perl" (I'm very flattered, but I'm 39!)
- a surprise hug from Andreas (awww!)
- observations from several people that I didn't look at all like my avatar picture
Thanks so much to the organizers (Philippe Bruhat and Laurent Boivin), sponsors, and all the volunteers in the background that kept things running. I hope to see lots of you all in YAPC::NA (Orlando), and next year's hackathon in Berlin!