Subject: | "directory ... is not below ..." on win32 by case difference |
Date: | Tue, 10 Sep 2013 11:20:02 +0400 |
To: | bug-cpan [...] rt.cpan.org |
From: | Kluev Alex <damnedkluev [...] yandex.ru> |
Sorry for my english.
Windows 7 x64
Strawberry Perl 5.18.0
CPAN shell
I use strawberry perl; install/upgrade/smoke many modules and othen get messages like this
"Directory 'E:\perl\cpan\build\Acme-require-case-0.010-FHp7tI' not below e:\perl\cpan\build, will not store persistent state".
In the perl directory i see many times both "e:" and "E:" as drive letter.
Searching by words "not below" resulted in files CPAN/Distribution.pm and CPAN/CacheMgr.pm, but only Distribution.pm have words about persistent state.
Once i patch Distribution.pm changing
===
unless ( Cwd::realpath(File::Spec->catdir($dir, File::Spec->updir()) )
eq Cwd::realpath($CPAN::Config->{build_dir} ) ) {
$CPAN::Frontend->mywarnonce("Directory '$dir' not below $CPAN::Config->{build_dir}, ".
"will not store persistent state\n");
return;
}
===
to
===
unless ( lc(Cwd::realpath(File::Spec->catdir($dir, File::Spec->updir()) ))
eq lc(Cwd::realpath($CPAN::Config->{build_dir} ) ) ) {
$CPAN::Frontend->mywarnonce("Directory '$dir' not below $CPAN::Config->{build_dir}, ".
"will not store persistent state\n");
return;
}
===
It helps but disappeared when i updated CPAN to 2.02.
The file CacheMgr.pm have the code
===
unless (File::Spec->canonpath(File::Basename::dirname($dir))
eq File::Spec->canonpath($CPAN::Config->{build_dir})) {
$CPAN::Frontend->mywarn("Directory '$dir' not below $CPAN::Config->{build_dir}, ".
"will not remove\n");
$CPAN::Frontend->mysleep(5);
return;
}
===
and i never seen messages about this in logs.
Sorry for my english.