Day 1: Thursday

I stated the day off by merging a few PRs for HTTP::Tinyish from Shoichi Kaji (SKAJI). HTTP::Tinyish is a wrapper module to use curl, wget, LWP and HTTP::Tiny transparently with the same API. You might wonder why you would need the wrapper when you can fatpack and fall back to HTTP::Tiny anyway. This is to support TLS HTTPS requests with a stock perl which doesn’t ship with its HTTP clients that has TLS capabilities. This will be more important in the coming years as more websites will enforce TLS, although I believe PAUSE/CPAN websites will allow non-TLS requests for a while.

The similar code has been there in cpanm for a long time, and this is the first extract of this kind of utility modules.

Now, I moved onto work on outstanding pull requests and bug fixes to cpanm. At this time I was maintaining two different code base: cpanminus-1.7 (devel) branch, and Menlo 2.0 (menlo) branch.

They have very similar codes because one is a copy of another, and provides the same functionalities. Because they’re in different branches under the same repository, we need to apply the same changes to two different branches, or to merge from one to another, with a lot of conflicts to resolve for every merge.

This is obviously painful, and I decided to split the repository into two repos: miyagawa/cpanminus and miyagawa/Menlo . At the same time, I removed App::cpanminus package, and started to use Menlo::CLI::Compat from cpanm so that I don’t need to maintain two different packages for future bug fixes. (Spoiler alert: I thought this was a good idea, but turned out not to be true, more on that later)

I also updated cpanm’s fatpacking tool to use Carton to get the dependencies we want. Previously it was using App::FatPacker’s trace functionality, which works most of the time but is painful to make it work when your perl has unclean site_perl directory because of the side effects of loading modules from there.

This is so much fun of bootstrapping, that we’re building the next release of cpanm using Carton, which relies on the current release of cpanm, when you think about it.