For the first 20 or so years, PAUSE treated indexing permissions case sensitively. So Foobar was considered a different module from foobar. This caused problems on operating systems with case insensitive filesystems like MacOS and Windows. So at previous QA Hackathons and Toolchain Summits, it was decided that PAUSE should treat indexing permissions case insensitively. In 2016, at the Rugby QA Hackathon, I started a project to resolve the historical clashes in indexing permissions.

I started off by writing a script to process the CPAN Index and permissions dump (06perms.txt). It looked for pairs of packages that differed only in case. There were about 350 cases. Sadly I didn't save the first file generated.

Over the last 3 years I have steadily worked through the list. The most common situations were:

Two different people wrote entirely separate modules, in different distributions. Both authors ended up with a first-come permission, and now they're treated case insensitively, we had to end up with a single first-come.

A distribution is released with one casing of a package name, and at some later date the module name was changed to a different casing. This was complicated further in some cases, where the author subsequently transferred one of the indexing permissions to someone else.

The same person wrote two different modules, and gave them names differing only in case. That worked fine on their OS, and they often weren't aware that the distribution wouldn't work on Windows or MacOS.

Dealing with each case often meant writing an email to two different authors, explaining about the change in PAUSE, and outlining different ways to resolve the situation. Some were quickly resolved, but others required iteration. Where I could, I submitted pull requests.

Some people were hard to track down, but everyone was very friendly in responding to my emails, and in a lot of cases promptly did a release with a renamed module, or did whatever else was suggested. Thank you to them all.

Coming into this year's PTS, I had 7 cases left. I didn't want to fix the final ones until issue #250 was fixed: changing the case of your module would result in clashing indexing permissions. Rik Signes fixed that this year, so I could finally resolve the last 7.

% pause-permissions-case-conflicts 0 packages with conflicts

Hooray!

PAUSE won't let this happen again.

Please enable JavaScript to view the comments powered by Disqus.

Disqus