Junio C Hamano <gitster@xxxxxxxxx> writes: > Thanks. I did a bit of sanity checking and it made my earlier > suspicion stronger. We MUST have at least an automated checker to > check the doc against the fsck.h header, if not an automated > generator of the doc from the fsck.h header. FYI, here are a pair of quick-and-dirty Perl scripts that I used for the sanity checking. The first one "parses" the fsck-msgs.txt and formats lines like badTagName INFO i.e. camelCased error message name, a TAB, and the severity. The second one reads the FOREACH_FSCK_MSG_ID() definition in fsck.h that look like "FUNC(BAD_TAG_NAME, INFO)", camelcases the name and shows what can be compared with the output of the first one. There are two sanity checks that must pass when a developer updates the documentation. - The output from m.perl on the documentation must already be sorted. - The output from n.perl on fsck.h, when sorted, must match the output from m.perl on the documentation. $ cat >m.perl <<\EOF #!/usr/bin/perl my ($previous, $current); while (<>) { if (!defined $current) { if (/^\`([a-zA-Z0-9]*)\`::/) { $current = $1; if ((defined $previous) && ($current le $previous)) { print STDERR "$previous >= $current???\n"; } } } elsif (/^\s+\(([A-Z]+)\) /) { print "$current $1\n"; $previous = $current; undef $current; } } EOF $ cat >n.perl <<\EOF #!/usr/bin/perl while (<>) { if (/^\s+FUNC\(([0-9A-Z_]+), ([A-Z]+)\)/) { my ($name, $severity) = ($1, $2); my ($first) = 1; $name = join('', map { y/A-Z/a-z/; if (!$first) { s/^(.)/uc($1)/e; } else { $first = 0; } $_; } split(/_/, $name)); print "$name $severity\n"; } } EOF $ perl m.perl Documentation/fsck-msgids.txt >/var/tmp/1 $ sort /var/tmp/1 >/var/tmp/2 $ diff -u /var/tmp/1 /var/tmp/2 #### no output should appear in the above comparison $ perl n.perl fsck.h | sort >/var/tmp/2 $ diff -u /var/tmp/1 /var/tmp/2 #### no output should appear in the above comparison