update-moosepan
[gitmo/moose-presentations.git] / moose-class / exercises / update-moosepan
CommitLineData
32c45916 1#!/usr/bin/env perl
afaa1345 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
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 28sub 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
56my %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
71my $min_perl = version->new('5.8.5');
72sub 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
88main();