App-ListRevDeps
view release on metacpan or search on metacpan
lib/App/ListRevDeps.pm view on Meta::CPAN
my %mdist; # mentioned dist, for checking circularity
my %mmod; # mentioned mod
my %excluded; # to avoid showing skipped message multiple times
my $do_list;
$do_list = sub {
my ($dist, $level) = @_;
$level //= 0;
log_debug("Listing reverse dependencies for dist %s (level=%d) ...", $mod, $level);
my @res;
if ($mdist{$dist}++) {
push @errs, "Circular dependency (dist=$dist)";
return ();
}
# list dists which depends on $dist. XXX we should switch to using the
# API function instead, see CPAN::ReverseDependencies.
my $depdists = $chi->compute(
"metacpan-dist_rev_deps-$dist", $ce, sub {
log_info("Querying MetaCPAN for dist %s ...", $dist);
my $res = $mcpan->rev_deps($dist);
if ($ENV{LOG_API_RESPONSE}) { log_trace("API result: %s", $res) }
$res;
});
#use DD; dd $depdists;
for my $d (@{ $depdists->{items} }) {
my $d_name = $d->{_source}{distribution};
if ($exclude_re && $d_name =~ $exclude_re) {
log_info("Excluded dist %s", $d_name)
unless $excluded{$d_name}++;
next;
}
my $res = {
dist => $d_name,
};
if ($level < $maxlevel-1 || $maxlevel == -1) {
$res->{rev_deps} = [$do_list->($d_name, $level+1)];
}
if ($raw) {
push @res, $res;
} else {
push @res, join(
"",
" " x $level,
$res->{dist},
"\n",
join("", @{ $res->{rev_deps} // [] }),
);
}
}
@res;
};
my @res;
for (ref($mod) eq 'ARRAY' ? @$mod : $mod) {
my $dist;
# if it already looks like a dist, skip an API call
if (/-/) {
$dist = $_;
} else {
my $modinfo = $chi->compute(
"metacpan-mod-$_", $ce, sub {
log_info("Querying MetaCPAN for module %s ...", $_);
my $res = $mcpan->module($_);
if ($ENV{LOG_API_RESPONSE}) { log_trace("API result: %s", $res) }
$res;
});
$dist = $modinfo->distribution;
}
push @res, $do_list->($dist);
}
my $res = $raw ? \@res : join("", @res);
[200, @errs ? "Unsatisfiable dependencies" : "OK", $res,
{"cmdline.exit_code" => @errs ? 200:0}];
}
1;
# ABSTRACT: List reverse dependencies of a Perl module
__END__
=pod
=encoding UTF-8
=head1 NAME
App::ListRevDeps - List reverse dependencies of a Perl module
=head1 VERSION
This document describes version 0.16 of App::ListRevDeps (from Perl distribution App-ListRevDeps), released on 2017-07-10.
=head1 SYNOPSIS
# Use via list-rev-deps CLI script
=head1 DESCRIPTION
Currently uses MetaCPAN API and also scrapes the MetaCPAN website and by default
caches results for 24 hours.
=head1 FUNCTIONS
=head2 list_rev_deps
Usage:
list_rev_deps(%args) -> [status, msg, result, meta]
List reverse dependencies of a Perl module.
This function is not exported.
Arguments ('*' denotes required arguments):
( run in 1.113 second using v1.01-cache-2.11-cpan-98e64b0badf )