CPAN::Mini::Inject не обновляет 03modlist.data.gz
У меня есть намерение создать пустой локальный каталог CPAN, а затем ввести нужные мне модули с правильными номерами версий.
Итак, я создаю структуру CPAN с CPAN::Mini следующим образом:
my $local = '/tmp/CPAN';
my $minicpan = CPAN::Mini->new(
remote => "http://mirrors4.kernel.org/cpan/",
local => $local,
passive => 'yes',
dirmode => 0755,
repository => $local,
module_filters => [ sub { $_[0] !~ m/No::Giro/i } ], #Thus us just to fetch this module only
trace => 1
);
mkdir($local."/authors") or die("Could not create authors folder");
mkdir($local."/modules") or die("Could not create modules folder");
my @files = ('authors/01mailrc.txt.gz', 'modules/02packages.details.txt.gz', 'modules/03modlist.data.gz');
foreach my $file (@files){
print "Creating file $local/$file \n";
open(FILE, "+> $local/$file") or die("Could not create $local/$file");;
close (FILE);
}
И тогда я пытаюсь внедрить модуль с CPAN::Mini::Inject:
use strict;
use warnings;
use Getopt::Long;
use CPAN::Mini::Inject;
my $module = undef;
my $authorid = undef;
my $version = undef;
my $file = undef;
GetOptions(
"module=s" => \$module,
"authorid=s" => \$authorid,
"version=s" => \$version,
"file=s" => \$file,
);
die ("--module not provided") if(!defined($module) || $module eq '');
die ("--authorid not provided") if(!defined($authorid) || $authorid eq '');
die ("--version not provided") if(!defined($version) || $version eq '');
die ("--file not provided") if(!defined($file) || $file eq '');
die("File $file does not exists") unless ((-e $file) || (-f $file) );
my $mcpi = CPAN::Mini::Inject->new;
$mcpi->loadcfg('/tmp/minicpan.conf');
$mcpi->parsecfg();
$mcpi->readlist();
$mcpi->add(
module => $module,
authorid => $authorid,
version => $version,
file => $file );
$mcpi->inject(1);
$mcpi->writelist();
exit(0);
Но файл 03modlist.data.gz не обновляется (поэтому он пуст), поэтому, когда я пытаюсь использовать cpan с локальным репозиторием, я получаю сообщение об ошибке, связанное с этим файлом. Кто-нибудь знает, как создать действительный файл модлиста? Или как получить CPAN::Mini или CPAN::Mini:: Inject, чтобы сделать это для вас?
С наилучшими пожеланиями
1 ответ
03modlist.data.gz является мертвым файлом. Раньше что-то значило, но это уже не так, даже если некоторые инструменты пытаются его использовать. Для материала MyCPAN я просто создаю пустой файл:
File: 03modlist.data
Modcount: 0
Date: Fri, 01 Apr 2011 03:28:16 GMT
package CPAN::Modulelist;
sub data { my $result = {} }
$CPAN::Modulelist::cols = [];
$CPAN::Modulelist::data = [];
Какая команда вызывала у вас проблему, какое сообщение об ошибке и так далее?
И всякий раз, когда вы хотите узнать, как создать один из индексных файлов CPAN, просто посмотрите на тот же файл в полном CPAN для примера.:)