git-subtree-dir: third_party/git git-subtree-split: cb715685942260375e1eb8153b0768a376e4ece7
		
			
				
	
	
		
			71 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable file
		
	
	
	
	
#!/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;
 |