Really move update-moosepan
[gitmo/moose-presentations.git] / moose-class / exercises / update-moosepan
CommitLineData
afaa1345 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
6use CPAN::FindDependencies qw( finddeps );
7use CPAN::Mini;
8use List::AllUtils qw( any );
9use Module::CoreList;
10use version;
11
12
13sub 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/',
79ec5c5e 22 local => './moosepan',
afaa1345 23 path_filters => $filter_sub,
24 trace => 1,
25 skip_perl => 1,
26 );
27}
28
29my %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
44my $min_perl = version->new('5.8.5');
45sub 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
61main();