Commit | Line | Data |
afaa1345 |
1 | #!/usr/bin/perl |
2 | |
3 | use strict; |
4 | use warnings; |
5 | |
6 | use CPAN::FindDependencies qw( finddeps ); |
7 | use CPAN::Mini; |
8 | use List::AllUtils qw( any ); |
9 | use Module::CoreList; |
10 | use version; |
11 | |
12 | |
4125a6fe |
13 | { |
14 | package CPAN::FindDependencies; |
15 | |
16 | no warnings 'redefine'; |
17 | # The real function assumes that if you provide an argument it's a |
18 | # local file, not a URI. |
19 | sub _get02packages { |
20 | my $file = shift; |
21 | |
22 | get($file) || |
23 | die(__PACKAGE__.": Couldn't fetch 02packages index file\n"); |
24 | } |
25 | } |
26 | |
27 | |
afaa1345 |
28 | sub main { |
4125a6fe |
29 | # If this isn't fetched fresh each time, then CPAN::Mini gets |
30 | # confused (maybe it's a timestamp issue because of git?) |
31 | unlink './moosepan/modules/02packages.details.txt.gz' |
32 | or die $!; |
33 | |
34 | my @deps |
35 | = grep { is_real_dep($_) } |
36 | finddeps( 'Moose', |
37 | '02packages' => |
38 | 'http://mirrors.kernel.org/cpan/modules/02packages.details.txt.gz' |
39 | ); |
afaa1345 |
40 | |
41 | my @distros = map { $_->distribution() } @deps; |
42 | |
4125a6fe |
43 | my $filter_sub = sub { |
44 | return !any { $_[0] eq $_ } @distros; |
45 | }; |
afaa1345 |
46 | |
47 | CPAN::Mini->update_mirror( |
4125a6fe |
48 | remote => 'http://mirrors.kernel.org/cpan/', |
79ec5c5e |
49 | local => './moosepan', |
afaa1345 |
50 | path_filters => $filter_sub, |
51 | trace => 1, |
52 | skip_perl => 1, |
53 | ); |
54 | } |
55 | |
56 | my %skip_deps = map { $_ => 1 } qw( |
57 | ExtUtils::MakeMaker |
58 | Archive::Tar |
59 | Compress::Zlib |
60 | Compress::Raw::Bzip2 |
61 | Compress::Raw::Zlib |
62 | IO::Zlib |
63 | Package::Constants |
64 | ExtUtils::CBuilder |
65 | Pod::Simple |
66 | Pod::Escapes |
67 | Task::Weaken |
68 | Module::Build |
69 | ); |
70 | |
71 | my $min_perl = version->new('5.8.5'); |
72 | sub is_real_dep { |
73 | my $dep = shift; |
74 | |
75 | # Include this just to make sure the user gets a version with |
76 | # weaken available. |
77 | return 1 if $dep->name eq 'Scalar::Util'; |
78 | |
79 | return if $skip_deps{ $dep->name() }; |
80 | |
81 | my $perl = Module::CoreList->first_release( $dep->name() ); |
82 | |
83 | return if defined $perl && version->new($perl) le $min_perl; |
84 | |
85 | return 1; |
86 | } |
87 | |
88 | main(); |