CPAN-Mirror-Tiny
view release on metacpan or search on metacpan
lib/CPAN/Mirror/Tiny/CLI.pm view on Meta::CPAN
);
$parser->getoptions(
"h|help" => sub (@) { $self->cmd_help; exit },
"v|version" => sub (@) { $self->cmd_version; exit },
"q|quiet" => \$self->{quiet},
"b|base=s" => \$self->{base},
"a|author=s" => \$self->{author},
) or return 0;
$self->{argv} = \@ARGV;
return 1;
}
sub cmd_help ($self) {
Pod::Usage::pod2usage(verbose => 99, sections => 'SYNOPSIS|OPTIONS|EXAMPLES');
return 1;
}
sub cmd_version ($self) {
my $klass = "CPAN::Mirror::Tiny";
printf "%s %s\n", $klass, $klass->VERSION;
}
sub cmd_inject ($self, @argv) {
die "Missing urls, try `$0 --help`\n" unless @argv;
my $cpan = CPAN::Mirror::Tiny->new(base => $self->{base});
my $option = $self->{author} ? { author => $self->{author} } : +{};
for my $argv (@argv) {
print STDERR "Injecting $argv" unless $self->{quiet};
if (eval { $cpan->inject($argv, $option); 1 }) {
print STDERR " DONE\n" unless $self->{quiet};
} else {
print STDERR " FAIL\n" unless $self->{quiet};
die $@;
}
}
return 1;
}
sub cmd_gen_index ($self, @argv) {
my $cpan = CPAN::Mirror::Tiny->new(base => $self->{base});
$cpan->write_index(compress => 1, $self->{quiet} ? () : (show_progress => 1));
warn sprintf "Generated %s\n", $cpan->index_path(compress => 1) unless $self->{quiet};
return 1;
}
sub cmd_cat_index ($self, @argv) {
my $cpan = CPAN::Mirror::Tiny->new(base => $self->{base});
my $index = $cpan->index_path(compress => 1);
return unless -f $index;
my @cmd = ($cpan->{gzip}, "--decompress", "--stdout", $index);
IPC::Run3::run3 \@cmd, \undef, undef, undef;
return $? == 0;
}
sub cmd_list ($self) {
return unless -d $self->{base};
my ($index, @dist);
my $wanted = sub (@) {
my $name = $_;
return if !-f $name or $name =~ /\.json$/;
my $stat = File::stat::stat($name);
if ($name =~ /02packages.details.txt.gz$/) {
$index = {name => $name, mtime => $stat->mtime, size => $stat->size};
} else {
push @dist, {name => $name, mtime => $stat->mtime, size => $stat->size};
}
};
File::Find::find({wanted => $wanted, no_chdir => 1}, $self->{base});
my $print = sub ($item) {
printf "%s %8d %s\n",
POSIX::strftime("%FT%T", localtime($item->{mtime})),
$item->{size},
$item->{name};
};
$print->($index) if $index;
for my $dist (sort { $a->{name} cmp $b->{name} } @dist) {
$print->($dist);
}
return 1;
}
sub cmd_server ($self) {
if (!eval { require CPAN::Mirror::Tiny::Server }) {
if ($@ =~ m{Can't locate Plack}) {
die "To run server, you should install Plack first.\n";
} else {
die $@;
}
}
CPAN::Mirror::Tiny::Server->start($self->{argv}->@*, $self->{base});
return 1;
}
1;
( run in 1.620 second using v1.01-cache-2.11-cpan-5735350b133 )