More complete cpanfile support in cpanm

There has been an outstanding ticket about cpanfile “root” requirements being ignored when installing sub-dependencies, both in cpanm and Carton.

They’re the same issues, and I just fixed it by keeping the requirements object during the installation session, if there’s cpanfile. This will fix both cpanm — installdeps . and carton install when you have a specific version requirement in cpanfile but isn’t honored in the first run (so you had to run it twice or more).

This is now shipped as cpanm TRIAL, and will become stable later on Day 4.

This patch by the way has an interesting side effect, where if these sub-dependencies have conflicting requirements, it will give errors.

Carmel

I started the day by working on performance optimizations on Carmel, which I blogged details about on a separate post.

Marcus Ramberg tried Carmel with Convos and got a great success:

except that he has reported that if a directory has a Carton snapshot file it doesn’t work correctly. That has been fixed and the latest dev has a great support for cpanfile.snapshot which means you can upgrade from Carton without doing anything! (although right now Carmel doesn’t have a capability to create a snapshot)

I made a lot of changes to Carmel’s internals so that internally built CPAN requirements can be automatically turned into a cpanfile data structure that can be passed to cpanm.

CPAN::Meta::Requirements

On Day 2 I talked with clintong about the CPAN Meta spec Version Range and I didn’t like the way my current code handles them as a string parser. I asked rjbs about providing a better API to figure out what is the parsed result of the version range, and he said he would take a look later, but turned out it was already implemented.

Discussion

There was a discussion about technical aspects of CPAN toolchain, META and PAUSE. Topics relevant to me were mostly about how to interpret META specification in terms of CPAN clients (cpanm), about recommends/suggests and a new x_breaks (will come later).

Hackathon is a great place to talk to people over face to face, but talking to people is also an intensive task especially when there are 10+ people and for more than an hour. David Golden has done an amazing job of managing the discussion in a reasonable length and depth.

Funny quote from the beginning of the meeting:

Wendy: “What is today’s discussion about?”

David: “Consensus — or the lack of consensus — about technical details of toolchain”

Wendy: walks to the room “Attention! A discussion about the lack of consensus is starting now!”