tarballに含まれるファイルのファイルパーミッションを次のように設定しようとしています。
print "Checking $tgz_file... ";
my $edited = 0;
my $tarball = Archive::Tar->new($tgz_file);
my @items = $tarball->get_files();
foreach (@items) {
if ($_->is_dir && $_->mode != 0755) {
$_->mode(0755);
$edited = 1;
} elsif ($_->is_file && $_->mode != 0644) {
$_->mode(0644);
$edited = 1;
}
}
if ($edited) {
$tarball->write($tgz_file, COMPRESS_GZIP);
print "edited!\n";
} else {
print "no changes.\n";
}
ただし、write()
メソッドが呼び出されると、スクリプトは次のエラーで終了します。
268439552バイトの「ラージ」リクエスト中にメモリが不足した場合、sbrk()の合計は/usr/lib/perl5/5.10/i686-cygwin/IO/Compress/Adapter/Deflate.pmの43行目で313298944バイトになります。
このエラーをトリガーするtarballは22MB(59MB非圧縮)であるため、上記の数値は少し憂慮すべきものです。のバグに対処していIO::Compress
ますか?この場合、何らかの回避策はありますか?私はi686-cygwin-thread-multi-64intにperl5.10.1を使用しています。