Junio C Hamano | ab81411 | 2016-05-04 14:34:23 -0700 | [diff] [blame] | 1 | #!/usr/bin/perl |
| 2 | |
Ævar Arnfjörð Bjarmason | 3951eeb | 2021-04-09 17:02:46 +0200 | [diff] [blame] | 3 | use strict; |
| 4 | use warnings; |
Junio C Hamano | ab81411 | 2016-05-04 14:34:23 -0700 | [diff] [blame] | 5 | |
Ævar Arnfjörð Bjarmason | d2c9908 | 2021-04-09 17:02:47 +0200 | [diff] [blame] | 6 | # Parse arguments, a simple state machine for input like: |
| 7 | # |
Ævar Arnfjörð Bjarmason | 8650c62 | 2021-10-15 14:39:14 +0200 | [diff] [blame] | 8 | # <file-to-check.txt> <valid-files-to-link-to> --section=1 git.txt git-add.txt [...] --to-lint git-add.txt a-file.txt [...] |
Ævar Arnfjörð Bjarmason | d2c9908 | 2021-04-09 17:02:47 +0200 | [diff] [blame] | 9 | my %TXT; |
| 10 | my %SECTION; |
| 11 | my $section; |
| 12 | my $lint_these = 0; |
Ævar Arnfjörð Bjarmason | 8650c62 | 2021-10-15 14:39:14 +0200 | [diff] [blame] | 13 | my $to_check = shift @ARGV; |
Ævar Arnfjörð Bjarmason | d2c9908 | 2021-04-09 17:02:47 +0200 | [diff] [blame] | 14 | for my $arg (@ARGV) { |
| 15 | if (my ($sec) = $arg =~ /^--section=(\d+)$/s) { |
| 16 | $section = $sec; |
| 17 | next; |
| 18 | } |
Junio C Hamano | ab81411 | 2016-05-04 14:34:23 -0700 | [diff] [blame] | 19 | |
Ævar Arnfjörð Bjarmason | d2c9908 | 2021-04-09 17:02:47 +0200 | [diff] [blame] | 20 | my ($name) = $arg =~ /^(.*?)\.txt$/s; |
| 21 | unless (defined $section) { |
| 22 | $TXT{$name} = $arg; |
| 23 | next; |
| 24 | } |
Junio C Hamano | ab81411 | 2016-05-04 14:34:23 -0700 | [diff] [blame] | 25 | |
Ævar Arnfjörð Bjarmason | d2c9908 | 2021-04-09 17:02:47 +0200 | [diff] [blame] | 26 | $SECTION{$name} = $section; |
| 27 | } |
| 28 | |
| 29 | my $exit_code = 0; |
Junio C Hamano | ab81411 | 2016-05-04 14:34:23 -0700 | [diff] [blame] | 30 | sub report { |
Ævar Arnfjörð Bjarmason | d2c9908 | 2021-04-09 17:02:47 +0200 | [diff] [blame] | 31 | my ($pos, $line, $target, $msg) = @_; |
| 32 | substr($line, $pos) = "' <-- HERE"; |
| 33 | $line =~ s/^\s+//; |
Ævar Arnfjörð Bjarmason | f005593 | 2021-10-15 14:39:12 +0200 | [diff] [blame] | 34 | print STDERR "$ARGV:$.: error: $target: $msg, shown with 'HERE' below:\n"; |
| 35 | print STDERR "$ARGV:$.:\t'$line\n"; |
Ævar Arnfjörð Bjarmason | d2c9908 | 2021-04-09 17:02:47 +0200 | [diff] [blame] | 36 | $exit_code = 1; |
Junio C Hamano | ab81411 | 2016-05-04 14:34:23 -0700 | [diff] [blame] | 37 | } |
| 38 | |
Ævar Arnfjörð Bjarmason | d2c9908 | 2021-04-09 17:02:47 +0200 | [diff] [blame] | 39 | @ARGV = sort values %TXT; |
Ævar Arnfjörð Bjarmason | 8650c62 | 2021-10-15 14:39:14 +0200 | [diff] [blame] | 40 | die "BUG: No list of valid linkgit:* files given" unless @ARGV; |
| 41 | @ARGV = $to_check; |
Ævar Arnfjörð Bjarmason | d2c9908 | 2021-04-09 17:02:47 +0200 | [diff] [blame] | 42 | while (<>) { |
| 43 | my $line = $_; |
| 44 | while ($line =~ m/linkgit:((.*?)\[(\d)\])/g) { |
| 45 | my $pos = pos $line; |
| 46 | my ($target, $page, $section) = ($1, $2, $3); |
Junio C Hamano | ab81411 | 2016-05-04 14:34:23 -0700 | [diff] [blame] | 47 | |
Ævar Arnfjörð Bjarmason | d2c9908 | 2021-04-09 17:02:47 +0200 | [diff] [blame] | 48 | # De-AsciiDoc |
| 49 | $page =~ s/{litdd}/--/g; |
Junio C Hamano | ab81411 | 2016-05-04 14:34:23 -0700 | [diff] [blame] | 50 | |
Ævar Arnfjörð Bjarmason | d2c9908 | 2021-04-09 17:02:47 +0200 | [diff] [blame] | 51 | if (!exists $TXT{$page}) { |
| 52 | report($pos, $line, $target, "link outside of our own docs"); |
| 53 | next; |
| 54 | } |
| 55 | if (!exists $SECTION{$page}) { |
| 56 | report($pos, $line, $target, "link outside of our sectioned docs"); |
| 57 | next; |
| 58 | } |
| 59 | my $real_section = $SECTION{$page}; |
| 60 | if ($section != $SECTION{$page}) { |
| 61 | report($pos, $line, $target, "wrong section (should be $real_section)"); |
| 62 | next; |
Junio C Hamano | ab81411 | 2016-05-04 14:34:23 -0700 | [diff] [blame] | 63 | } |
| 64 | } |
Ævar Arnfjörð Bjarmason | d2c9908 | 2021-04-09 17:02:47 +0200 | [diff] [blame] | 65 | # this resets our $. for each file |
| 66 | close ARGV if eof; |
Junio C Hamano | ab81411 | 2016-05-04 14:34:23 -0700 | [diff] [blame] | 67 | } |
| 68 | |
Ævar Arnfjörð Bjarmason | d2c9908 | 2021-04-09 17:02:47 +0200 | [diff] [blame] | 69 | exit $exit_code; |