#!/usr/bin/perl use strict; my $Basedir=$ARGV[0]; my $EditURL=$ARGV[1]; if($EditURL eq '') { $EditURL='File '; } unless($Basedir) { die "Usage: checktitles.pl directory [editurl]\n\n Where 'directory' is the directory holding the TWiki web to check.\n"; } unless(-d $Basedir) { die "Error: $Basedir is supposed to be a directory.\n"; } my (@Files, %ValidTopics); { opendir DIR, $Basedir; my @Temp=readdir DIR; closedir DIR; foreach my $File (sort @Temp) { next if(-d $File); next if($File=~m/^\./); next if($File=~m/,v$/); next if($File=~m/\.lease$/); unless($File=~m/\.txt$/) { print "*** ERROR: Unaccounted-for file $File in $Basedir!\n"; next; } $File=~s/\.txt//; next if($File eq 'WebStatistics'); push @Files, $File; $ValidTopics{$File}=1; } } foreach my $File (sort @Files) { my $Pagetitle=0; my $Parent=0; my $ValidParent=0; my $Topic; if($File eq 'WebHome') { $Parent=1; $ValidParent=1; } open FILE, '<'.$Basedir.'/'.$File.'.txt'; while() { $Pagetitle=1 if($_=~m/^ \* Set PAGETITLE = /); if($_=~m/^%META:TOPICPARENT\{name="(.+)"\}%$/) { $Parent=1; $Topic=$1; $ValidParent=1 if($ValidTopics{$Topic}); } } close FILE; my $Mesg; $Mesg.='PAGETITLE, ' if($Pagetitle eq 0); $Mesg.='TOPICPARENT, ' if($Parent eq 0); $Mesg.='VALIDTOPICPARENT, ' if($ValidParent eq 0); $Mesg=~s/, $//; if($Mesg) { $File=$EditURL.$File; print "$File is missing $Mesg!\n"; } }