#!/usr/bin/perl # $Id: commandref_join.pl 5361 2014-03-29 06:24:20Z rudolfkoenig $ use strict; use warnings; sub err($$); my $svnlook='/usr/bin/svnlook'; my $repos=$ARGV[0]; my $txn=$ARGV[1]; my $arg="-t $txn"; #my $arg="-r $txn"; # local testing my @lang = ("EN", "DE"); my $exitCode = 0; use constant TAGS => qw{ul li code b i u}; my $log = `$svnlook log $arg $repos`; if($log !~ m/^.*:.*$/s) { print STDERR << 'EOF'; A FHEM SVN comment must have the following format module: text-describing-the-change or module: text-describing-the-change (Forum #) EOF exit(1); } my $fList = `$svnlook changed $arg $repos`; foreach my $row (split("\n", $fList)) { chomp($row); my ($type, $fName) = split(" ", $row); next if($type eq "D"); next if(!$fName || $fName !~ m+FHEM/\d\d_(.*).pm$+); my $modName = $1; foreach my $lang (@lang) { my $suffix = ($lang eq "EN" ? "" : "_$lang"); my $tag; my %tagcount= (); my %llwct = (); # Last line with closed tag open(MOD, "$svnlook $arg cat $repos $fName|") || die("Cant svnlook cat $fName:$!\n"); my $skip = 1; my $line = 0; my $docCount = 0; my $hasLink = 0; while(my $l = ) { $line++; err $fName, "DOS line encoding is not supported." if($l =~ m/^=begin html$suffix.*\r/); if($l =~ m/^=begin html$suffix$/) { $l = ; # skip one line, to be able to repeat join+split err($fName, "$lang: nonempty line after =begin html.") if($l =~ m/^...*$/); $skip = 0; $line++; } elsif($l =~ m/^=end html$suffix$/) { $skip = 1; } elsif(!$skip) { $docCount++; $hasLink = ($l =~ m//gi); $tagcount{$tag} -=()= ($l =~ /<\/$tag>/gi); $llwct{$tag} = $line if(!$llwct{$tag} || ($ot && !$tagcount{$tag})); } } } close(MOD); err $fName, "$lang: No document text found" if(!$suffix && !$docCount); err $fName, "$lang: No link" if(!$suffix && $docCount && !$hasLink); foreach $tag (TAGS) { err $fName, "$lang: Unbalanced $tag ($tagcount{$tag}, last line ok: $llwct{$tag})" if($tagcount{$tag}); } } } exit($exitCode); sub err($$) { my ($fName, $txt) = @_; print STDERR "*** $fName: $txt\n"; $exitCode = 1; }