X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=Porting%2Fmanicheck;h=9fff8613b39074e92a7332085b6392ca001ec355;hb=e7deb4af6a1bddab29db10b779d229aec81737e3;hp=e2a33ec678aecc718d40e059d0572ae8949c4137;hpb=6501254efd518ae7cec2505f294d8200779717b9;p=p5sagit%2Fp5-mst-13.2.git diff --git a/Porting/manicheck b/Porting/manicheck index e2a33ec..9fff861 100644 --- a/Porting/manicheck +++ b/Porting/manicheck @@ -1,80 +1,27 @@ -#!/usr/bin/perl -ws +#!/usr/bin/perl -# -# 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 /; - }; -} +# output a list of: +# a) files listed in MANIFEST which don't exist +# b) files which exist but which aren't in MANIFEST use strict; - -sub help { - die <) { - 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{$_}; +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; } - -for (sort keys %mani) { - push @miss, $_ unless $find{$_}; -} - -printf("%s@xtra\n", $x || $m ? "" : "extra: ") if @xtra && !$m; -printf("%s@miss\n", $x || $m ? "" : "missing: ") 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}; + }, +}, ".";