CPAN :: Mini :: Inject не обновляет 03modlist.data.gz - PullRequest
2 голосов
/ 06 апреля 2011

У меня есть намерение создать пустой локальный каталог 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 Ответ

3 голосов
/ 07 апреля 2011

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 для примера. :)

...