aboutsummaryrefslogtreecommitdiffstats
path: root/perl-external/bin/add_module.pl
diff options
context:
space:
mode:
Diffstat (limited to 'perl-external/bin/add_module.pl')
-rw-r--r--perl-external/bin/add_module.pl52
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';