diff options
Diffstat (limited to 'Documentation/lint-gitlink.perl')
| -rwxr-xr-x | Documentation/lint-gitlink.perl | 71 | 
1 files changed, 71 insertions, 0 deletions
| diff --git a/Documentation/lint-gitlink.perl b/Documentation/lint-gitlink.perl new file mode 100755 index 0000000000..476cc30b83 --- /dev/null +++ b/Documentation/lint-gitlink.perl @@ -0,0 +1,71 @@ +#!/usr/bin/perl + +use File::Find; +use Getopt::Long; + +my $basedir = "."; +GetOptions("basedir=s" => \$basedir) +	or die("Cannot parse command line arguments\n"); + +my $found_errors = 0; + +sub report { +	my ($where, $what, $error) = @_; +	print "$where: $error: $what\n"; +	$found_errors = 1; +} + +sub grab_section { +	my ($page) = @_; +	open my $fh, "<", "$basedir/$page.txt"; +	my $firstline = <$fh>; +	chomp $firstline; +	close $fh; +	my ($section) = ($firstline =~ /.*\((\d)\)$/); +	return $section; +} + +sub lint { +	my ($file) = @_; +	open my $fh, "<", $file +		or return; +	while (<$fh>) { +		my $where = "$file:$."; +		while (s/linkgit:((.*?)\[(\d)\])//) { +			my ($target, $page, $section) = ($1, $2, $3); + +			# De-AsciiDoc +			$page =~ s/{litdd}/--/g; + +			if ($page !~ /^git/) { +				report($where, $target, "nongit link"); +				next; +			} +			if (! -f "$basedir/$page.txt") { +				report($where, $target, "no such source"); +				next; +			} +			$real_section = grab_section($page); +			if ($real_section != $section) { +				report($where, $target, +					"wrong section (should be $real_section)"); +				next; +			} +		} +	} +	close $fh; +} + +sub lint_it { +	lint($File::Find::name) if -f && /\.txt$/; +} + +if (!@ARGV) { +	find({ wanted => \&lint_it, no_chdir => 1 }, $basedir); +} else { +	for (@ARGV) { +		lint($_); +	} +} + +exit $found_errors; | 
