diff options
author | Edmund von der Burg <evdb@mysociety.org> | 2011-03-06 18:50:11 +0000 |
---|---|---|
committer | Edmund von der Burg <evdb@mysociety.org> | 2011-03-06 18:50:47 +0000 |
commit | 1cd646d598eb226609d08d2ee7f51f21760f2eb1 (patch) | |
tree | 7e89a03405ed23e6c712ccbe1fd1a4511425199d /perl-extras/bin/add_module.pl | |
parent | c6702df7e42be5ec342c46cd9c9f6b8432f1a8c4 (diff) |
Changes to deal with packages dpan can't handle
Diffstat (limited to 'perl-extras/bin/add_module.pl')
-rw-r--r-- | perl-extras/bin/add_module.pl | 124 |
1 files changed, 22 insertions, 102 deletions
diff --git a/perl-extras/bin/add_module.pl b/perl-extras/bin/add_module.pl index a39e9fd0c..6c9be8df2 100644 --- a/perl-extras/bin/add_module.pl +++ b/perl-extras/bin/add_module.pl @@ -5,21 +5,15 @@ use warnings; use IPC::Run3; use LWP::Simple; -use YAML; use File::Slurp; use Path::Class; -my $cpan_meta_db_base = "http://cpanmetadb.appspot.com/v1.0/package"; -my $cpan_mirror_base = "http://search.cpan.org/CPAN/authors/id"; -my $root_dir = file(__FILE__)->dir->parent->absolute->stringify; -my $dist_list = "$root_dir/install_order.txt"; -my $url_list = "$root_dir/urls.txt"; -my $dist_dir = "$root_dir/distributions"; -my $fake_mirror = "$root_dir/fake_mirror"; -my $cpanm_cmd = "perl $root_dir/bin/cpanm"; - -# my $cpanm_cmd = -# "perl $dist_dir/cpanm --mirror $fake_mirror --mirror-only -L $local_lib_dir"; +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"; @@ -30,103 +24,29 @@ print " running '$cmd'\n"; run3( $cmd, undef, \$out, \$out ) || die "Error running '$cmd'"; -my %fetched_urls = - map { $_ => 1 } +my @fetched_urls = map { s{.*(http://\S+).*}{$1}; $_ } grep { m{^Fetching http://search.cpan.org} } split /\n/, $out; -my @installed = - grep { $_ } - map { m{^Successfully (?:re)?installed (\S+).*} ? $1 : undef } - split /\n/, $out; +write_file( $module_list, { append => 1 }, "$module\n" ); +write_file( $url_list, { append => 1 }, map { "$_\n" } @fetched_urls ); -foreach my $dist (@installed) { - my ($url) = grep { m{/$dist\.} } keys %fetched_urls; - die "Can't find url for $dist" unless $url; - delete $fetched_urls{$url}; +foreach my $url ( read_file($url_list) ) { - my ($filename) = $url =~ m{([^/]+)$}; + my ($filename) = $url =~ m{/(authors/.+)$}; - print " fetching $filename from $url\n"; + my $destination = file("$minicpan/$filename"); + $destination->dir->mkpath; - is_success( getstore( $url, "$dist_dir/$filename" ) ) - || die "Error saving $url to $dist_dir/$filename"; - write_file( $dist_list, { append => 1 }, "$filename\n" ); - write_file( $url_list, { append => 1 }, "$url\n" ); -} + next if -e $destination; -# Check that there are no urls left over -my @leftover = keys %fetched_urls; -die "URLs leftover: " . join( ', ', @leftover ) if @leftover; + print " $url\n -> $destination\n"; + + is_success( getstore( $url, "$destination" ) ) + || die "Error saving $url to $destination"; +} -# # -# # load list of modules at start and write it back at the end -# my %installed = (); -# my %looked_at = (); -# -# sub add_filename_to_list { -# my $module = shift; -# print "Adding '$module' to '$dist_list'\n"; -# append( $dist_list, "$module\n" ); -# getc; -# } -# -# # add_module('App::cpanminus'); -# add_module($module_to_add); -# -# sub add_module { -# my $module = shift; -# print "--- $module ---\n"; -# return 1 if $installed{$module} || $looked_at{$module}++; -# -# # get the distribution this module is in -# my $yaml = get("$cpan_meta_db_base/$module") -# || die "Can't get details from $cpan_meta_db_base/$module"; -# my $dist_info = Load($yaml); -# my $distfile = $dist_info->{distfile} -# || die("Can't get distfile from returned YAML for $module"); -# -# # fetch the distribution from cpan -# my ($filename) = $distfile =~ m{/([^/]*)$}; -# unless ( -e "$dist_dir/$filename" ) { -# my $dist_url = "$cpan_mirror_base/$distfile"; -# print " fetching '$dist_url' to '$dist_dir/$filename'\n"; -# is_success( getstore( $dist_url, "$dist_dir/$filename" ) ) -# || die "Could not fetch $dist_url"; -# } -# -# # try to install the distribution using cpanm -# my $out = ''; -# my $cmd = "$cpanm_cmd $dist_dir/$filename"; -# print " running '$cmd'\n"; -# run3( $cmd, undef, \$out, \$out ) || die "Error running '$cmd'"; -# -# warn "vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n"; -# warn $out; -# warn "^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n"; -# -# my @missing_modules = -# map { s{^.*\s(\S+)$}{$1}; $_ } -# grep { m/Couldn\'t find module or a distribution/ } -# split /\n/, $out; -# -# if ( scalar @missing_modules ) { -# print " missing: ", join( ', ', @missing_modules ), "\n"; -# add_module($_) for @missing_modules; -# add_module($module); -# } -# elsif ( $out =~ m{Successfully installed } ) { -# -# # add ourselves to the done lists -# print " Success with '$filename'\n"; -# $installed{$module}++; -# add_filename_to_list($filename); -# } -# else { -# die "No success and no missing modules for $module"; -# } -# -# } -# -# # +# go to the minicpan dir and run dpan there +chdir $minicpan; +exec 'dpan -f ../dpan_config'; |