2011-04-06 26 views
2

我打算創建一個空的本地CPAN目錄,然後用正確的版本號注入我需要的模塊。CPAN :: Mini :: Inject doesnt update 03modlist.data.gz

所以,我創建了一個CPAN結構CPAN ::迷你這樣的:

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 ::小::注入模塊:

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與本地存儲庫我得到和與此文件相關的錯誤。有誰知道如何生成一個有效的modlist文件?或者如何獲得CPAN :: Mini或CPAN :: Mini ::注入爲你做?

致以問候

回答

3

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上的相同文件即可。 :)

+0

嗨布萊恩,謝謝你的答案。它解決了我的一個問題,儘管我曾嘗試從CPAN服務器複製modlist文件。而且,因爲現在我在安裝模塊時遇到了錯誤,所以我的確認爲可能是modlist文件導致了這個問題。但顯然不是。 對於我的CPAN鏡像中的所有模塊,當我嘗試安裝時,出現此錯誤:「(測試-f」/root/.cpan/build/IBMTORDB2-1tPJN9/Makefile.PL「返回false。)」 即使makefile存在。你以前碰巧遇到過這種情況?再次感謝之前的回覆。 – Joakim 2011-04-07 08:22:40