App-EPAN
view release on metacpan or search on metacpan
lib/App/EPAN.pm view on Meta::CPAN
*{action_idx} = \&action_index;
}
sub _save {
my ($self, $name, $contents, $config_key, $output) = @_;
if (defined(my $confout = $self->config($config_key))) {
$output =
!length($confout) ? undef
: $confout eq '-' ? \*STDOUT
: file($confout);
} ## end if (defined(my $confout...))
if (defined $output) {
INFO "saving output to $output";
$self->_save2($output,
scalar(ref($contents) ? $contents->() : $contents));
}
else {
INFO "empty filename for $name file, skipping";
}
} ## end sub _save
sub _do_index {
my ($self, $basedir) = @_;
$basedir //= $self->target_dir;
LOGDIE "path '$basedir' does not exist (wrong -t option?)"
unless -d $basedir;
$self->_save(
'01mailrc', # name
'', # contents
'mailrc', # configuration key to look output file
$basedir->file(qw< authors 01mailrc.txt.gz >) # default
);
$self->_save(
'02packages.details', # name
sub { # where to get data from. Call is avoided if
# no file on output
INFO "getting contributions for regenerated index...";
$self->_index_for($basedir);
},
'output', # configuration key to look output file
$basedir->file(qw< modules 02packages.details.txt.gz >) # default
);
$self->_save(
'03modlist.data', # name
<<'END_OF_03_MODLIST_DATA',
File: 03modlist.data
Description: These are the data that are published in the module
list, but they may be more recent than the latest posted
modulelist. Over time we'll make sure that these data
can be used to print the whole part two of the
modulelist. Currently this is not the case.
Modcount: 0
Written-By: PAUSE version 1.005
Date: Sun, 28 Jul 2013 07:41:15 GMT
package CPAN::Modulelist;
# Usage: print Data::Dumper->new([CPAN::Modulelist->data])->Dump or similar
# cannot 'use strict', because we normally run under Safe
# use strict;
sub data {
my $result = {};
my $primary = "modid";
for (@$CPAN::Modulelist::data){
my %hash;
@hash{@$CPAN::Modulelist::cols} = @$_;
$result->{$hash{$primary}} = \%hash;
}
return $result;
}
$CPAN::Modulelist::cols = [ ];
$CPAN::Modulelist::data = [ ];
END_OF_03_MODLIST_DATA
'modlist', # configuration key to look output file
$basedir->file(qw< modules 03modlist.data.gz >) # default
);
} ## end sub _do_index
sub _save2 {
my ($self, $path, $contents) = @_;
my ($fh, $is_gz);
if (ref($path) eq 'GLOB') {
$fh = $path;
$is_gz = 0;
}
else {
$path->dir()->mkpath() unless -d $path->dir()->stringify();
$fh = $path->open('>');
$is_gz = $path->stringify() =~ m{\.gz$}mxs;
}
if ($is_gz) {
my $gz = Compress::Zlib::gzopen($fh, 'wb');
$gz->gzwrite($contents);
$gz->gzclose();
}
else {
binmode $fh;
print {$fh} $contents;
}
return;
} ## end sub _save2
sub _index_for {
my ($self, $path) = @_;
$path //= $self->target_dir;
my @index = $self->_index_body_for($path);
our $VERSION ||= 'whateva';
my $header = <<"END_OF_HEADER";
File: 02packages.details.txt
URL: http://cpan.perl.org/modules/02packages.details.txt.gz
Description: Package names found in directory \$CPAN/authors/id/
Columns: package name, version, path
Intended-For: Automated fetch routines, namespace documentation.
Written-By: epan $VERSION
Line-Count: ${ \ scalar @index }
Last-Updated: ${ \ scalar localtime() }
END_OF_HEADER
( run in 1.615 second using v1.01-cache-2.11-cpan-d8267643d1d )