Commit | Line | Data |
---|---|---|
398f002c NC |
1 | #!./perl -w |
2 | ||
deed50f2 JK |
3 | # What does this test? |
4 | # This tests the well-formed-ness of the MANIFEST file. | |
5 | # | |
6 | # Why do we test this? | |
7 | # TK | |
8 | # | |
9 | # It's broken - how do I fix it? | |
10 | # If MANIFEST is not sorted properly, you will get this error output: | |
11 | # got ''MANIFEST' is NOT sorted properly | |
12 | # # ' | |
13 | # # expected /(?^:is sorted properly)/ | |
14 | # | |
15 | # To correct this, run either: | |
16 | # | |
17 | # ./perl -Ilib Porting/manisort -o MANIFEST MANIFEST | |
18 | # | |
19 | # which will output "'MANIFEST' is NOT sorted properly" but which will | |
20 | # correct the problem; or: | |
21 | # | |
22 | # make manifest | |
23 | # | |
24 | # which will output "WARNING: re-sorting MANIFEST" but which will also | |
25 | # correct the problem. | |
398f002c | 26 | |
3a73a075 | 27 | use Config; |
398f002c | 28 | BEGIN { |
18388fdb | 29 | @INC = '..' if -f '../TestInit.pm'; |
398f002c | 30 | } |
ac976f88 | 31 | use TestInit qw(T); # T is chdir to the top level |
398f002c | 32 | |
18388fdb | 33 | require 't/test.pl'; |
398f002c | 34 | |
3a73a075 BF |
35 | skip_all("Cross-compiling, the entire source might not be available") |
36 | if $Config{usecrosscompile}; | |
37 | ||
38 | ||
398f002c NC |
39 | plan('no_plan'); |
40 | ||
18388fdb | 41 | my $manifest = 'MANIFEST'; |
398f002c NC |
42 | |
43 | open my $m, '<', $manifest or die "Can't open '$manifest': $!"; | |
dcab73c9 | 44 | my @files; |
b8ca42e1 | 45 | # Test that MANIFEST uses tabs - not spaces - after the name of the file. |
398f002c NC |
46 | while (<$m>) { |
47 | chomp; | |
dcab73c9 YO |
48 | unless( /\s/ ) { |
49 | push @files, $_; | |
50 | # no need for further tests on lines without whitespace (i.e., filename only) | |
51 | next; | |
52 | } | |
4e86fc4b | 53 | my ($file, $separator) = /^(\S+)(\s+)/; |
dcab73c9 YO |
54 | push @files, $file; |
55 | ||
398f002c | 56 | isnt($file, undef, "Line $. doesn't start with a blank") or next; |
18388fdb | 57 | ok(-f $file, "File $file exists"); |
4e86fc4b | 58 | if ($separator !~ tr/\t//c) { |
398f002c NC |
59 | # It's all tabs |
60 | next; | |
61 | } elsif ($separator !~ tr/ //c) { | |
62 | # It's all spaces | |
63 | fail("Spaces in entry for $file"); | |
398f002c NC |
64 | } elsif ($separator =~ tr/\t//) { |
65 | fail("Mixed tabs and spaces in entry for $file"); | |
66 | } else { | |
67 | fail("Odd whitespace in entry for $file"); | |
68 | } | |
69 | } | |
70 | ||
71 | close $m or die $!; | |
72 | ||
4e86fc4b JH |
73 | # Test that MANIFEST is properly sorted |
74 | SKIP: { | |
18388fdb | 75 | skip("'Porting/manisort' not found", 1) if (! -f 'Porting/manisort'); |
4e86fc4b | 76 | |
18388fdb NC |
77 | my $result = runperl('progfile' => 'Porting/manisort', |
78 | 'args' => [ '-c', $manifest ], | |
7f1eeb94 TC |
79 | 'stderr' => 1, |
80 | 'nolib' => 1 ); | |
4e86fc4b JH |
81 | |
82 | like($result, qr/is sorted properly/, 'MANIFEST sorted properly'); | |
83 | } | |
b8ca42e1 | 84 | |
dcab73c9 | 85 | SKIP: { |
7cadc1d0 | 86 | find_git_or_skip(6); |
dcab73c9 YO |
87 | chomp(my @repo= grep { !/\.gitignore$/ } `git ls-files`); |
88 | skip("git ls-files didnt work",3) | |
89 | if !@repo; | |
917bb0fa | 90 | is( 0+@repo, 0+@files, "git ls-files gives the same number of files as MANIFEST lists"); |
dcab73c9 YO |
91 | my %repo= map { $_ => 1 } @repo; |
92 | my %mani= map { $_ => 1 } @files; | |
93 | is( 0+keys %mani, 0+@files, "no duplicate files in MANIFEST"); | |
94 | delete $mani{$_} for @repo; | |
95 | delete $repo{$_} for @files; | |
96 | my @not_in_mani= keys %repo; | |
97 | my @still_in_mani= keys %mani; | |
98 | ||
99 | is( 0+@not_in_mani, 0, "Nothing added to the repo that isn't in MANIFEST"); | |
100 | is( "not in MANIFEST: @not_in_mani", "not in MANIFEST: ", | |
101 | "Nothing added to the repo that isn't in MANIFEST"); | |
102 | is( 0+@still_in_mani, 0, "Nothing in the MANIFEST that isn't tracked by git"); | |
103 | is( "should not be in MANIFEST: @still_in_mani", "should not be in MANIFEST: ", | |
104 | "Nothing in the MANIFEST that isn't tracked by git"); | |
105 | ||
106 | } | |
107 | ||
b8ca42e1 | 108 | # EOF |