Skip to content

Instantly share code, notes, and snippets.

@preaction
Last active August 9, 2019 01:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save preaction/732bfcad2365f371fe28c7701199a7cb to your computer and use it in GitHub Desktop.
Save preaction/732bfcad2365f371fe28c7701199a7cb to your computer and use it in GitHub Desktop.
use v5.28;
use warnings;
use experimental qw( signatures postderef );
use version;
use Data::Printer;
use MetaCPAN::Client;
my $mcpan = MetaCPAN::Client->new;
my ( $dist, $version ) = @ARGV;
my $search_spec = {
all => [
{ distribution => $dist },
( { version => $version } )x!!$version,
],
};
p( $search_spec );
my $rs = $mcpan->release( $search_spec );
while ( my $release = $rs->next ) {
my @dependencies = $release->dependency->@*;
for my $dependency ( @dependencies ) {
say sprintf "%s (%s) depends on %s (%s)",
$release->distribution,
$release->version,
$dependency->{module},
$dependency->{version} || '<any>',
;
my $dep_ver = version->parse( $dependency->{version} )->numify;
my $dep_rs = $mcpan->all( 'module', {
es_filter => {
and => [
{ term => { name => $dependency->{module} } },
{ range => { version_numified => { gte => $dep_ver } } },
],
},
});
while ( my $dep_module = $dep_rs->next ) {
say sprintf "Dependency %s (%s) will satisfy %s (%s)",
$dep_module->distribution,
$dep_module->version,
$dependency->{module},
$dependency->{version} || '<any>',
;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment