diff options
Diffstat (limited to 'perl-external/bin/add_module.pl')
-rw-r--r-- | perl-external/bin/add_module.pl | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/perl-external/bin/add_module.pl b/perl-external/bin/add_module.pl new file mode 100644 index 000000000..6c9be8df2 --- /dev/null +++ b/perl-external/bin/add_module.pl @@ -0,0 +1,52 @@ +#!/usr/bin/env perl + +use strict; +use warnings; + +use IPC::Run3; +use LWP::Simple; +use File::Slurp; +use Path::Class; + +my $root_dir = file(__FILE__)->dir->parent->absolute->stringify; +my $module_list = "$root_dir/modules.txt"; +my $url_list = "$root_dir/urls.txt"; +my $minicpan = "$root_dir/minicpan"; +my $local_lib = "$root_dir/../local-lib5"; +my $cpanm_cmd = "perl $root_dir/bin/cpanm -l $local_lib --reinstall"; + +my $module = $ARGV[0] || die "Usage: $0 Dist::To::Add"; + +# try to install the distribution using cpanm +my $out = ''; +my $cmd = "$cpanm_cmd $module"; +print " running '$cmd'\n"; +run3( $cmd, undef, \$out, \$out ) + || die "Error running '$cmd'"; + +my @fetched_urls = + map { s{.*(http://\S+).*}{$1}; $_ } + grep { m{^Fetching http://search.cpan.org} } + split /\n/, $out; + +write_file( $module_list, { append => 1 }, "$module\n" ); +write_file( $url_list, { append => 1 }, map { "$_\n" } @fetched_urls ); + +foreach my $url ( read_file($url_list) ) { + + my ($filename) = $url =~ m{/(authors/.+)$}; + + my $destination = file("$minicpan/$filename"); + $destination->dir->mkpath; + + next if -e $destination; + + print " $url\n -> $destination\n"; + + is_success( getstore( $url, "$destination" ) ) + || die "Error saving $url to $destination"; +} + +# go to the minicpan dir and run dpan there +chdir $minicpan; +exec 'dpan -f ../dpan_config'; |