-#!/usr/bin/perl -ws
-
-#
-# manicheck - check files against the MANIFEST
-#
-# Without options prints out (possibly) two lines:
-#
-# extra: a b c
-# missing: d
-#
-# With option -x prints out only the missing files (and without the "extra: ")
-# With option -m prints out only the extra files (and without the "missing: ")
-#
-
-BEGIN {
- $SIG{__WARN__} = sub {
- help() if $_[0] =~ /"main::\w" used only once: possible typo at /;
- };
-}
+#!/usr/bin/perl
use strict;
-
-sub help {
- die <<EOF;
-$0: Usage: $0 [-x|-m|-l|-h]
--x show only the extra files
--m show only the missing files
--l show the files one per line instead of one line
--h show only this help
-EOF
-}
-
-use vars qw($x $m $l $h);
-
-help() if $h;
-
-open(MANIFEST, "MANIFEST") or die "MANIFEST: $!";
-
-my %mani;
-my %mand = qw(. 1);
-use File::Basename qw(dirname);
-
-while (<MANIFEST>) {
- if (/^(\S+)\t+(.+)$/) {
- $mani{$1}++;
- my $d = dirname($1);
- while($d ne '.') {
- $mand{$d}++;
- $d = dirname($d);
- }
- } else {
- warn "MANIFEST:$.:$_";
- }
-}
-
-close(MANIFEST);
-
-my %find;
+use warnings;
use File::Find;
-find(sub {
- my $n = $File::Find::name;
- $n =~ s:^\./::;
- $find{$n}++;
- }, '.' );
-
-my @xtra;
-my @miss;
-
-for (sort keys %find) {
- push @xtra, $_ unless $mani{$_} || $mand{$_};
-}
-for (sort keys %mani) {
- push @miss, $_ unless $find{$_};
+open my $fh, 'MANIFEST' or die "Can't read MANIFEST: $!\n";
+my @files = map { (split)[0] } <$fh>;
+close $fh;
+for (@files) {
+ print "$_ from MANIFEST doesn't exist\n" if ! -f;
}
-
-$" = "\n" if $l;
-
-unshift @xtra, "extra:" if @xtra && !$x;
-unshift @miss, "missing:" if @miss && !$m;
-
-print "@xtra\n", if @xtra && !$m;
-print "@miss\n" if @miss && !$x;
-
-exit 0;
+my %files = map { $_ => 1 } @files;
+find {
+ wanted => sub {
+ my $x = $File::Find::name; $x =~ s/^..//;
+ return if -d;
+ return if $_ eq '.gitignore';
+ return if $x =~ /^\.git\b/;
+ print "$File::Find::name not in MANIFEST\n" if !$files{$x};
+ },
+}, ".";