Skip to content

Instantly share code, notes, and snippets.

@genehack
Created May 20, 2012 22:54
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 genehack/66f88b9fd66bc8d8d402 to your computer and use it in GitHub Desktop.
Save genehack/66f88b9fd66bc8d8d402 to your computer and use it in GitHub Desktop.
find all things that depend on moose
#! perl
use strict;
use warnings;
use feature 'say';
use DDP;
use HTTP::Tiny;
use JSON;
use LWP::UserAgent;
my( $data , $counter ) = find_all_deps( 'Moose' , 0 , 1 , {} );
my @deps = sort keys %$data;
open( my $OUT , '>' , 'all_moose_deps' );
foreach ( @deps ) {
say $_;
say $OUT $_
}
close( $OUT );
say "TOTAL: " . scalar @deps;
sub find_all_deps {
my( $dist , $counter , $depth , $data ) = @_;
my @deps = deps_for_dist( $dist );
sleep 1;
foreach my $dep ( @deps ) {
printf "[%3d] #%5d -> %s\n" , $depth , $counter++ , $dep;
next if $data->{$dep};
$data->{$dep}++;
( $data , $counter ) = find_all_deps( $dep , $counter , $depth+1 , $data );
}
return( $data , $counter );
}
sub deps_for_dist {
my $dist = shift;
my $res = `curl -s -XPOST api.metacpan.org/v0/release/_search -d '{
"query": {
"match_all": {}
},
"size": 5000,
"fields": [ "distribution" ],
"filter": {
"and": [
{ "term": { "release.dependency.module": "$dist" } },
{ "term": {"release.maturity": "released"} },
{ "term": {"release.status": "latest"} }
]
}
}'`;
my $data = from_json $res;
my @return;
foreach ( @{ $data->{hits}{hits} }) {
my $dist = $_->{fields}{distribution};
$dist =~ s/-/::/g;
push @return , $dist;
}
return @return;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment