diff options
author | Struan Donald <struan@fury.ukcod.org.uk> | 2011-06-08 19:02:47 +0100 |
---|---|---|
committer | Struan Donald <struan@fury.ukcod.org.uk> | 2011-06-08 19:02:47 +0100 |
commit | 8756c80504ceb6275f637c75fdcf1a047970d6ff (patch) | |
tree | 35155cb672cd02d2686edadc8046e7e9173ce7f8 /perl-external/bin/module-manage.pl | |
parent | 5493e3ad9623036f11bb458ee8abdd5c4250a8ed (diff) | |
parent | e03badcf0559e01538aaaed215a14a87fcd02b3f (diff) |
Merge branch 'migrate_to_catalyst' of ssh://struan@git.mysociety.org/data/git/public/fixmystreet into migrate_to_catalyst
Conflicts:
perl-external/minicpan/modules/02packages.details.txt.gz
Diffstat (limited to 'perl-external/bin/module-manage.pl')
-rwxr-xr-x | perl-external/bin/module-manage.pl | 33 |
1 files changed, 30 insertions, 3 deletions
diff --git a/perl-external/bin/module-manage.pl b/perl-external/bin/module-manage.pl index 187340da8..19e380055 100755 --- a/perl-external/bin/module-manage.pl +++ b/perl-external/bin/module-manage.pl @@ -8,6 +8,7 @@ use LWP::Simple; use File::Slurp; use Path::Class; use List::MoreUtils 'uniq'; +use CPAN::ParseDistribution; # TODO - 'updates' action that lists packages that could be updated # TODO - add smarts to strip out old packages (could switch to building using files.txt after) @@ -107,14 +108,40 @@ sub index_minicpan { my @remote_packages_lines = read_packages_txt_gz($remote_packages_file); # Find remaining in live file and add to local file - my @lines_to_add = (); + my %lines_to_add = (); foreach my $missing (@missing_files) { print " Finding matches for '$missing'\n"; - push @lines_to_add, grep { m{$missing} } @remote_packages_lines; + my @matches = grep { m{$missing} } @remote_packages_lines; + next unless @matches; + $lines_to_add{$missing} = \@matches; + } + + # for packages still not found parse out the contents + foreach my $missing (@missing_files) { + next if $lines_to_add{$missing}; + + print " Parsing out matches for '$missing'\n"; + + my ( $A, $B ) = $missing =~ m{^(.)(.)}; + my $dist = + CPAN::ParseDistribution->new("$minicpan/authors/id/$A/$A$B/$missing"); + + my $modules = $dist->modules(); + my @matches = (); + + foreach my $module ( sort keys %$modules ) { + my $version = $modules->{$module} || 'undef'; + + # Zucchini 0.000017 C/CH/CHISEL/Zucchini-0.0.17.tar.gz + push @matches, "$module $version $A/$A$B/$missing\n"; + } + + $lines_to_add{$missing} = \@matches; } # combine and sort the lines found - my @new_lines = sort @local_packages_lines, @lines_to_add; + my @new_lines = sort @local_packages_lines, + map { @$_ } values %lines_to_add; unlink $local_packages_file_gz; write_file( $local_packages_file, map { "$_\n" } packages_file_headers(), @new_lines ); |