Acme-CPANAuthors-InMostCPANAuthors
view release on metacpan or search on metacpan
devscript/update-data view on Meta::CPAN
#!/usr/bin/env perl
use 5.010001;
use strict;
use warnings;
use Log::ger;
use IPC::System::Options 'system', -log=>1, -die=>1;
use List::Util qw(uniq);
our %SPEC;
my @skiplist = (
'You::re_using',
'EU', # alias
'CPAN::Streaks::DailyDistributions',
'CPAN::Streaks::DailyNewDistributions',
'CPAN::Streaks::DailyReleases',
devscript/update-data view on Meta::CPAN
U => {is_flag=>1, summary=>'Shortcut for --no-update-modules', code=>sub {$_[0]{update_modules} = 0}},
},
},
},
};
sub app {
my %args = @_;
UPDATE_MODULES: {
last unless $args{update_modules} // 1;
log_info "Installing/updating all Acme::CPANAuthors::* modules ...";
system "lcpan mods --namespace Acme::CPANAuthors | lcpanm -n";
} # UPDATE_MODULES
my %all_authors; # key=ac_mod, val=\@authors
LIST_AUTHORS: {
log_info "Listing all authors from all lists ...";
require Module::List;
my $res = Module::List::list_modules("Acme::CPANAuthors::", {list_modules=>1, recurse=>1});
my @modules = sort keys %$res;
require Acme::CPANAuthors;
MOD:
for my $mod (@modules) {
log_debug "Processing module $mod ...";
(my $ac_mod = $mod) =~ s/^Acme::CPANAuthors:://;
if (grep { $_ eq $ac_mod } @skiplist) {
log_info "Skipped list $ac_mod";
next MOD;
}
my @authors;
eval { (my $mod_pm = "$mod.pm") =~ s!::!/!g; require $mod_pm; my %authors = $mod->authors; @authors = sort keys %authors };
if ($@) {
log_warn "Can't extract authors from list $ac_mod: $@, skipped";
next MOD;
}
$all_authors{$ac_mod} = \@authors;
}
} # LIST_AUTHORS
my %author_lists; # key=author, val=[list1, ...]
COUNT: {
for my $ac_mod (sort keys %all_authors) {
for my $author (uniq sort @{ $all_authors{$ac_mod} }) {
devscript/update-data view on Meta::CPAN
}
} # RANK
[200, "OK", \@res, {'table.fields'=>[qw/author num_lists lists/]}];
}
use Perinci::CmdLine::Any;
Perinci::CmdLine::Any->new(
url => '/main/app',
log => 1,
)->run;
( run in 0.888 second using v1.01-cache-2.11-cpan-49f99fa48dc )