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