Moved update-moosepan up one dir, otherwise it ends up deleting itself
[gitmo/moose-presentations.git] / moose-class / exercises / update-moosepan
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
13 sub main {
14     my @deps = grep { is_real_dep($_) } finddeps('Moose');
15
16     my @distros = map { $_->distribution() } @deps;
17
18     my $filter_sub = sub { return ! any { $_[0] eq $_ } @distros };
19
20     CPAN::Mini->update_mirror(
21         remote       => 'ftp://mirrors2.kernel.org/pub/CPAN/',
22         local        => '.',
23         path_filters => $filter_sub,
24         trace        => 1,
25         skip_perl    => 1,
26     );
27 }
28
29 my %skip_deps = map { $_ => 1 } qw(
30     ExtUtils::MakeMaker
31     Archive::Tar
32     Compress::Zlib
33     Compress::Raw::Bzip2
34     Compress::Raw::Zlib
35     IO::Zlib
36     Package::Constants
37     ExtUtils::CBuilder
38     Pod::Simple
39     Pod::Escapes
40     Task::Weaken
41     Module::Build
42 );
43
44 my $min_perl = version->new('5.8.5');
45 sub is_real_dep {
46     my $dep = shift;
47
48     # Include this just to make sure the user gets a version with
49     # weaken available.
50     return 1 if $dep->name eq 'Scalar::Util';
51
52     return if $skip_deps{ $dep->name() };
53
54     my $perl = Module::CoreList->first_release( $dep->name() );
55
56     return if defined $perl && version->new($perl) le $min_perl;
57
58     return 1;
59 }
60
61 main();