App-sync_cpantesters

 view release on metacpan or  search on metacpan

lib/App/sync_cpantesters.pm  view on Meta::CPAN

            open my $fh, '>', $filename
              or die "can't open $filename for writing: $!\n";
            print $fh $formatter->format(
                HTML::TreeBuilder->new_from_content($content));
            close $fh or die "can't close $filename: $!\n";
            $report{file}{$filename}++;
        }
    }
    $self->log('Deleting files other than the current failure reports...');
    find(
        sub {
            if (-d) {
                return if /^\.+$/;
                return if $report{dir}{$File::Find::name};
                $self->log('Deleting directory %s', $File::Find::name);
                rmtree($File::Find::name);
                $File::Find::prune = 1;
            } elsif (-f) {
                return if $report{file}{$File::Find::name};
                $self->log('Deleting file %s', $File::Find::name);
                unlink $File::Find::name;
            }
        },
        $base_dir
    );
}
1;


__END__
=pod

=for stopwords uri dir

=for test_synopsis 1;
__END__

=head1 NAME

App::sync_cpantesters - Sync CPAN testers failure reports to local directories

=head1 VERSION

version 1.111470

=head1 SYNOPSIS

    $ sync_cpantesters -a MARCEL -d ~/dev/cpan-testers

=head1 DESCRIPTION

CPAN testers provide a valuable service. The reports are available
on the Web - for example, for CPAN ID C<MARCEL>, the reports are at
L<http://cpantesters.perl.org/author/MARCEL.html>. I don't like to
read them in the browser and click on each individual failure report.
I also don't look at the success reports. I'd rather download the
failure reports and read them in my favorite editor, vim. I want to
be able to run this program repeatedly and only download new failure
reports, as well as delete old ones that no longer appear in the
master list - probably because a new version of the distribution in
question was uploaded.

If you are in the same position, then this program might be for you.

You need to pass a base directory using the C<--dir> options. For
each distribution for which there are failure reports, a directory
is created. Each failure report is stored in a file within that
subdirectory. The HTML is converted to plain text. For example, at one
point in time, I ran the program using:

    sync_cpantesters -a MARCEL -d reports

and the directory structure created looked like this:

    reports/Aspect-0.12/449224
    reports/Attribute-Memoize-0.01/39824
    reports/Attribute-Memoize-0.01/71010
    reports/Attribute-Overload-0.04/700557
    reports/Attribute-TieClasses-0.03/700575
    reports/Attribute-Util-1.02/455076
    reports/Attribute-Util-1.02/475237
    reports/Attribute-Util-1.02/477578
    reports/Attribute-Util-1.02/485231
    reports/Attribute-Util-1.02/489218
    ...

=head1 METHODS

=head2 author

The CPAN ID for which you want to download CPAN testers results. In my
case, this id is C<MARCEL>.

You have to use exactly one of C<author()> or C<uri()>.

=head2 uri

The URI from which to download the CPAN testers
results. It needs to be in the same format as, say,
L<http://cpantesters.perl.org/author/MARCEL.html>. You might want to
use this option if you've already downloaded the relevant file; in
this case, use a C<file://> URI.

You have to use exactly one of C<author()> or C<uri()>.

=head2 dir

The directory you want to download the reports to. Mandatory argument;
does tilde expansion during C<run()>.

=head2 ignore

If this argument is given, then, during C<run()>, every distribution
whose name matches this regular expression is ignored. You might use
this when you have deprecated distributions that you don't care about
anymore, but the reports are still there.

=head2 verbose

Be more verbose.



( run in 0.631 second using v1.01-cache-2.11-cpan-b16cb0d3907 )