Anonymous says “Did you submit this fix to Dancer2 or just wrote a blog post about it?” in reaction to my analysis of a surprising test failure with Dancer2 where the test script correctly composes paths using
File::Spec->catfile only to be undermined by the fact that Module::Build::Base::rscan_dir does not canonicalize file paths given to it by File::Find.
File::Find has always used Unix-style directory separators, and it may be too late or too dangerous to fix that now. But, elsewhere,
Module::Build is really careful to use
File::Spec->catfile, so I believe this is a simple oversight.
The fact is, test failures like this for Dancer2 even without using Microsoft tools are due to
Module::Build’s behavior — and not due to a problem with Dancer2’s tests.
What Anonymous misses is when you set out to do X, and then you get side-tracked because a test which seemingly should not fail fails for the reason that the build tools are not handling paths correctly, or because the test author decided to do
qr/$0/ instead of
qr/\Q$0\E/, the time wasted tracking the underlying cause, then cloning, checking out the repo, getting your local set up to a point where you can actually run tests from your git checkout, test the patch on Windows, OSX, and Linux, and submit the pull request etc is gone.
If all Perl programmers decide to ignore perldoc perlport and hard-code paths, or interpolate variables containing paths into regex patterns without escaping them, there is not enough time in the world for a few people to keep submitting pull requests for those errors.
In the same time trying to get to the point where I could do
dzil test in the git checkout directory for App::Cmd, I could have actually learned a little bit more about Perl6 and Unicode, I might have figured out how to get panda to install in my development environment. For example, does
panda fail to install because the tests bundled with the bundled File::Find test found paths for string equality rather than path equality? Or, am I misreading that because I am unfamiliar with Perl6?
Does it make sense that these are the kinds of issues we have to deal with in this day and age?
Because time is a scarce resource.
It is easy to say “submit a pull request” or “build a CPANTesters Smoker”, but when those tasks take an unnecessarily long time because people are unwilling to take advantage of what
File::Spec offers, the time wasted cannot be replaced.