diff --git a/utils/NightlyTest.pl b/utils/NightlyTest.pl index 2e0204c9221..1c2edd6fd1d 100755 --- a/utils/NightlyTest.pl +++ b/utils/NightlyTest.pl @@ -11,6 +11,60 @@ # use POSIX qw(strftime); +my $HOME = $ENV{HOME}; +my $CVSRootDir = "/home/vadve/vadve/Research/DynOpt/CVSRepository"; +my $BuildDir = "$HOME/buildtest"; +my $WebDir = "$HOME/cvs/testresults-X86"; + +# Calculate the date prefix... +@TIME = localtime; +my $DATE = sprintf "%4d-%02d-%02d", $TIME[5]+1900, $TIME[4]+1, $TIME[3]; +my $DateString = strftime "%B %d, %Y", localtime; + +sub WriteFile { # (filename, contents) + open (FILE, ">$_[0]") or die "Could not open file '$_[0]' for writing!"; + print FILE $_[1]; + close FILE; +} + +sub GetRegex { # (Regex with ()'s, value) + $_[1] =~ /$_[0]/; + return $1; +} + +sub AddPreTag { # Add pre tags around nonempty list, or convert to "none" + $_ = shift; + if (length) { return "
  $_
"; } else { "none
"; } +} + +sub GetDir { + my $Suffix = shift; + opendir DH, $WebDir; + my @Result = reverse sort grep !/$DATE/, grep /[-0-9]+$Suffix/, readdir DH; + closedir DH; + return @Result; +} + +# DiffFiles - Diff the current version of the file against the last version of +# the file, reporting things added and removed. This is used to report, for +# example, added and removed warnings. This returns a pair (added, removed) +# +sub DiffFiles { + my $Suffix = shift; + my @Others = GetDir $Suffix; + if (@Others == 0) { # No other files? We added all entries... + return (`cat $WebDir/$DATE$Suffix`, ""); + } + # Diff the files now... + my @Diffs = split "\n", `diff $WebDir/$DATE$Suffix $WebDir/$Others[0]`; + my $Added = join "\n", grep /^/, @Diffs; + $Added =~ s/^< / /gm; + $Removed =~ s/^> / /gm; + return ($Added, $Removed); +} + + # Command line argument settings... my $NOCHECKOUT = 0; my $NOREMOVE = 0; @@ -29,12 +83,7 @@ while (scalar(@ARGV) and ($_ = $ARGV[0], /^[-+]/)) { print "Unknown option: $_ : ignoring!\n"; } -die "Must specify 0 or 4 options!" if (@ARGV != 0 and @ARGV != 4); - -my $HOME = $ENV{HOME}; -my $CVSRootDir = "/home/vadve/vadve/Research/DynOpt/CVSRepository"; -my $BuildDir = "$HOME/buildtest"; -my $WebDir = "$HOME/cvs/testresults-X86"; +die "Must specify 0 or 3 options!" if (@ARGV != 0 and @ARGV != 3); # FIXME: This should just be utils/... my $Template = "$HOME/llvm/utils/NightlyTestTemplate.html"; @@ -45,11 +94,6 @@ if (@ARGV == 3) { $WebDir = $ARGV[2]; } -# Calculate the date prefix... -@TIME = localtime; -my $DATE = sprintf "%4d-%02d-%02d", $TIME[5]+1900, $TIME[4]+1, $TIME[3]; -my $DateString = strftime "%B %d, %Y", localtime; - my $Prefix = "$WebDir/$DATE"; if (0) { @@ -77,11 +121,6 @@ open (TEMPLATEFILE, $Template) or die "Could not open file 'llvm/$Template'!"; my $TemplateContents = ; close(TEMPLATEFILE); -sub GetRegex { - $_[1] =~ /$_[0]/; - return $1; -} - # Get some static statistics about the current state of CVS my $CVSCheckoutTime = GetRegex "([0-9.]+)", `grep '^real' $Prefix-CVS-Log.txt`; my $NumFilesInCVS = `grep ^U $Prefix-CVS-Log.txt | wc -l` + 0; @@ -111,11 +150,6 @@ my $NumObjects = `grep '^Compiling' $Prefix-Build-Log.txt | wc -l` + 0; my $BuildTime = GetRegex "([0-9.]+)", `grep '^real' $Prefix-Build-Log.txt`; -sub AddPreTag { # Add pre tags around nonempty list, or convert to "none" - $_ = shift; - if (length) { return "
  $_
"; } else { "none
"; } -} - # Get warnings from the build my @Warn = split "\n", `grep -E 'warning:|Entering dir' $Prefix-Build-Log.txt`; my @Warnings; @@ -132,7 +166,13 @@ foreach $Warning (@Warn) { } } my $WarningsList = AddPreTag join "\n ", @Warnings; +my $WarningsFile = join "\n", @Warnings; $WarningsFile =~ s/:[0-9]+:/::/g; +# Emit the warnings file, so we can diff... +WriteFile "$WebDir/$DATE-Warnings.txt", $WarningsFile . "\n"; +my ($WarningsAdded, $WarningsRemoved) = DiffFiles "-Warnings.txt"; +$WarningsAdded = AddPreTag $WarningsAdded; +$WarningsRemoved = AddPreTag $WarningsRemoved; # Get some statistics about CVS commits over the current day... @CVSHistory = split "\n", `cvs history -D '1 day ago' -a -xAMROCGUW`; @@ -174,11 +214,7 @@ my $ModifiedFilesList = AddPreTag join "\n ", keys %ModifiedFiles; my $RemovedFilesList = AddPreTag join "\n ", keys %RemovedFiles; # Get a list of the previous days that we can link to... -system "rm -f $WebDir/$DATE.html"; # Don't relist self if regenerating... -opendir DH, $WebDir; -my @PrevDays = - map {s/.html//; $_} reverse sort grep /[-0-9]+.html/, readdir DH; -closedir DH; +my @PrevDays = map {s/.html//; $_} GetDir ".html"; splice @PrevDays, 20; # Trim down list to something reasonable... @@ -210,13 +246,15 @@ if (0) { print "Previous Days =\n $PrevDaysList\n"; } -# Output the file... +# +# Output the files... +# + +# Main HTML file... chdir $WebDir or die "Could not change into web directory!"; my $Output; eval "\$Output = <$DATE.html") or die "Cannot open output file!"; -print OUTFILE $Output; -close(OUTFILE); +WriteFile "$DATE.html", $Output; # Change the index.html symlink... system "ln -sf $DATE.html index.html"; @@ -229,9 +267,7 @@ sub AddRecord { close FILE; } push @Records, "$DATE: $Val"; - open FILE, ">$Filename" or die "Couldn't open data file $Filename"; - print FILE (join "\n", @Records), "\n"; - close FILE; + WriteFile $Filename, (join "\n", @Records) . "\n"; return @Records; } diff --git a/utils/NightlyTestTemplate.html b/utils/NightlyTestTemplate.html index 95850a21dc8..ed00481a910 100644 --- a/utils/NightlyTestTemplate.html +++ b/utils/NightlyTestTemplate.html @@ -1,3 +1,4 @@ + LLVM Test Results for $DateString @@ -75,6 +76,12 @@ $WarningsList

  • Removed Files: $RemovedFilesList

    +

    Changes to Warnings:

    +
      +
    • Warnings Added: $WarningsAdded +
    • Warnings Removed: $WarningsRemoved +

    +

    Changes in the test suite:

    • New Tests: ...