package Module::CPANTS::Kwalitee::Manifest;
use warnings;
use strict;
use File::Spec::Functions qw(catfile);
sub order { 100 }
##################################################################
# Analyse
##################################################################
sub analyse {
my $class=shift;
my $me=shift;
my $files=$me->d->{files_array};
my $distdir=$me->distdir;
my $manifest_file=catfile($distdir,'MANIFEST');
my $manifest_matches_dist=0;
if (-e $manifest_file) {
# read manifest
open(my $fh, '<', $manifest_file) || die "cannot read MANIFEST $manifest_file: $!";
my @manifest;
while (<$fh>) {
chomp;
s/\s.*$//;
next unless /\w/;
push(@manifest,$_);
}
close $fh;
if (@manifest == @$files) {
@manifest=sort @manifest;
my @files=sort @$files;
$manifest_matches_dist=1;
for my $i (0..$#manifest) {
if ($manifest[$i] ne $files[$i]) {
$manifest_matches_dist=0;
last;
}
}
}
}
$me->d->{manifest_matches_dist}=$manifest_matches_dist;
}
##################################################################
# Kwalitee Indicators
##################################################################
sub kwalitee_indicators {
return [
{
name=>'manifest_matches_dist',
error=>q{MANIFEST does not match the contents of this distribution.},
remedy=>q{Use a buildtool to generate the MANIFEST. Or update MANIFEST manually.},
code=>sub { shift->{manifest_matches_dist} ? 1 : 0 },
}
];
}
q{Listening to: YAPC::Europe 2007};
__END__
=pod
=head1 NAME
Module::CPANTS::Kwalitee::Manifest - Check MANIFEST
=head1 SYNOPSIS
Check if MANIFEST and dist contents match.
=head1 DESCRIPTION
=head2 Methods
=head3 order
Defines the order in which Kwalitee tests should be run.
Returns C<100>.
=head3 analyse
Check if MANIFEST and dist contents match.
=head3 kwalitee_indicators
Returns the Kwalitee Indicators datastructure.
=over
=item * manifest_matches_dist
=back
=head1 SEE ALSO
L<Module::CPANTS::Analyse>
=head1 AUTHOR
Thomas Klausner, <domm@cpan.org>, http://domm.plix.at
=head1 COPYRIGHT
You may use and distribute this module according to the same terms
that Perl is distributed under.
=cut
syntax highlighted by Code2HTML, v. 0.9.1