Hello follow monks,

Are you aware of any technique to reduce the size of a CPAN::Mini repository?

I was checking my local mirror here and it is around 4.9Gb on a OpenBSD 6 box with FFS.

Taking a look at my ID under authors directory, I see that there are tarballs over there that are not even listed on my PAUSE account anymore (might be some issue regarding mirror synchronization). Anyway, I guess that for my purposes I could use only the latest available distribution for everybody.

A quick check on CPAN::Mini and minicpan documentation doesn't show anything that would help with that.

Is there any trick to take care of it?

Thanks!

UPDATED

I tried this:

use warnings; use strict; use DBI; use Set::Tiny; use CPAN; CPAN::HandleConfig->load; CPAN::Shell::setup_output; CPAN::Index->force_reload; my $dbfile = '/home/vagrant/.cpan/cpandb.sql'; my $dbh = DBI->connect("dbi:SQLite:dbname=$dbfile","",""); my $query_distros = $dbh->prepare(q{select A.dist_file from dists A jo +in auths B on A.auth_id = B.auth_id where B.cpanid = ?}); my $query_authors = $dbh->prepare(q{select cpanid from auths}); $query_authors->execute(); my $removed = 0; while (my $row = $query_authors->fetchrow_arrayref()) { my $distros = get_distro_files($dbh, $query_distros, $row->[0]); my $path = '/minicpan/authors/id/' . substr($row->[0],0,1) . '/' . + substr($row->[0],0,2) . '/' . $row->[0]; next unless ( -d $path ); opendir(DIR,$path) or die "Cannot read $path: $!"; my @files = readdir(DIR); close(DIR); shift(@files); shift(@files); foreach my $distro_file(@files) { next if $distro_file eq 'CHECKSUMS'; my $to_remove = $path . '/' . $distro_file; next unless (-f $to_remove); unless ($distros->has($distro_file)) { my $to_remove = $path . '/' . $distro_file; print "$to_remove can be removed\n"; unlink( $to_remove ) or warn "could not remove $to_remove: + $!"; $removed++; } } } $dbh->disconnect(); print "Total removed: $removed\n"; sub get_distro_files { my ($dbh, $sth, $author) = @_; $sth->bind_param(1, $author); $sth->execute(); my @distros; while ( my $row = $sth->fetchrow_arrayref() ) { push(@distros, $row->[0]); } return Set::Tiny->new(@distros); }

Still pending to validate if it didn't break anything...

Anyway, I was able to reduce it to 3.0Gb from the initial 4.9Gb...

Alceu Rodrigues de Freitas Junior
---------------------------------
"You have enemies? Good. That means you've stood up for something, sometime in your life." - Sir Winston Churchill

In reply to CPAN::Mini on a diet by glasswalk3r

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.