CPAN-Mini-FromList
view release on metacpan or search on metacpan
lib/CPAN/Mini/FromList.pm view on Meta::CPAN
package CPAN::Mini::FromList;
use warnings;
use strict;
our $VERSION = '0.05';
# ABSTRACT: create a minimal CPAN mirror from a list of modules you specify
use CPAN::Mini;
use Data::Dumper;
use File::Spec::Functions;
use base qw(CPAN::Mini);
our %dists = ();
sub update_mirror {
my $self = shift;
my @args = @_;
my %args=@args;
foreach my $d (@{$args{list}}) {
$dists{$d} = 1;
}
CPAN::Mini->update_mirror(@args, 'module_filters', [\&_fromlist_filter]);
}
sub _fromlist_filter {
my $module = shift;
return 1 if ! $dists{$module};
return 0;
}
sub delete_02packages {
my ($class,$local)=@_;
my $packages02=catfile($local,qw(modules 02packages.details.txt.gz));
if (-e $packages02) {
unlink ($packages02) || die "Cannot unlink $packages02: $!";
}
}
sub generate_fake_02packages {
my ($class,$local)=@_;
eval {
my $packages=catfile($local,qw(modules 02packages.details.txt));
my @files=File::Find::Rule->file()->name('*.gz')->relative->in(
catdir($local,qw(authors id)));
open(my $fh,'>',$packages) || die "Cannot write to $packages: $!";
my $linecnt=@files;
my $now=scalar localtime;
print $fh <<"EOHEAD";
File: 02packages.details.txt
URL: http://www.perl.com/CPAN/modules/02packages.details.txt
Description: Fake 02packges generate by CPAN::Mini::FromList
Columns: package name, version, path
Intended-For: Automated fetch routines, namespace documentation.
Written-By: CPAN::Mini::FromList
Line-Count: $linecnt
Last-Updated: $now
EOHEAD
foreach (@files) {
print $fh "Fake undef $_\n";
}
close $fh;
$class->delete_02packages($local);
system('gzip',$packages);
};
print $@ if $@;
}
q{ listening to:
CPAN discussions at the Oslo QA Hackathon
( run in 1.984 second using v1.01-cache-2.11-cpan-13bb782fe5a )