This avoids false positives for cases such as lines containing 'error:' in test reports.
Signed-off-by: Francois Gouget fgouget@codeweavers.com --- testbot/bin/WineSendLog.pl | 8 ++- testbot/lib/WineTestBot/LogUtils.pm | 105 ++++++++++++++++++---------- testbot/web/JobDetails.pl | 12 ++-- 3 files changed, 82 insertions(+), 43 deletions(-)
diff --git a/testbot/bin/WineSendLog.pl b/testbot/bin/WineSendLog.pl index f1cb74e33..e2c823a91 100755 --- a/testbot/bin/WineSendLog.pl +++ b/testbot/bin/WineSendLog.pl @@ -300,7 +300,9 @@ EOF { $CurrentDll = $1; } - my $Category = GetLogLineCategory($Line); + my $Category = $LogName =~ /.report$/ ? + GetReportLineCategory($Line) : + GetLogLineCategory($Line); if ($Category eq "error") { if ($PrintedDll ne $CurrentDll) @@ -488,7 +490,9 @@ EOF { foreach my $Line (<$LogFile>) { - my $Category = GetLogLineCategory($Line); + my $Category = $LogName =~ /.report$/ ? + GetReportLineCategory($Line) : + GetLogLineCategory($Line); $MessagesFromLog .= $Line if ($Category eq "error"); } close($LogFile); diff --git a/testbot/lib/WineTestBot/LogUtils.pm b/testbot/lib/WineTestBot/LogUtils.pm index cabd18358..e6f9a27af 100644 --- a/testbot/lib/WineTestBot/LogUtils.pm +++ b/testbot/lib/WineTestBot/LogUtils.pm @@ -27,7 +27,8 @@ WineTestBot::LogUtils - Provides functions to parse task logs
use Exporter 'import'; -our @EXPORT = qw(GetLogFileNames GetLogLabel GetLogLineCategory +our @EXPORT = qw(GetLogFileNames GetLogLabel + GetLogLineCategory GetReportLineCategory ParseTaskLog ParseWineTestReport);
use File::Basename; @@ -80,6 +81,59 @@ sub ParseTaskLog($$) }
+=pod +=over 12 + +=item C<GetLogLineCategory()> + +Identifies the category of the given log line: an error message, a Wine +diagnostic line, a TestBot error, etc. + +The category can then be used to decide whether to hide the line or, on +the contrary, highlight it. + +=back +=cut + +sub GetLogLineCategory($) +{ + my ($Line) = @_; + + if (# Git errors + $Line =~ /^CONFLICT / or + $Line =~ /^error: patch failed:/ or + $Line =~ /^error: corrupt patch / or + # Build errors + $Line =~ /: error: / or + $Line =~ /^make: [*]{3} No rule to make target / or + $Line =~ /^Makefile:[0-9]+: recipe for target .* failed$/ or + $Line =~ /^(?:Build|Reconfig|Task): (?!ok)/ or + # Typical perl errors + $Line =~ /^Use of uninitialized value/) + { + return "error"; + } + if ($Line =~ /:winediag:/) + { + return "diag"; + } + if ($Line =~ /^BotError:/ or + $Line =~ /^X Error of failed request: / or + $Line =~ / opcode of failed request: /) + { + return "boterror"; + } + if (# Build messages + $Line =~ /^+ \S/ or + $Line =~ /^(?:Build|Reconfig|Task): ok/) + { + return "info"; + } + + return "none"; +} + + # # WineTest report parser # @@ -383,23 +437,21 @@ sub ParseWineTestReport($$$$) }
-# -# Log querying and formatting -# - =pod =over 12
-=item C<GetLogLineCategory()> +=item C<GetReportLineCategory()> + +Identifies the category of the given test report line: an error message, +a todo, just an informational message or none of these.
-Identifies the category of the given log line: an error message, a todo, just -an informational message or none of these. The category can then be used to -decide whether to hide the line or, on the contrary, highlight it. +The category can then be used to decide whether to hide the line or, on +the contrary, highlight it.
=back =cut
-sub GetLogLineCategory($) +sub GetReportLineCategory($) { my ($Line) = @_;
@@ -416,35 +468,11 @@ sub GetLogLineCategory($) $Line =~ /Fatal: test .* does not exist/ or $Line =~ / done (258)/ or $Line =~ /: unhandled exception [0-9a-fA-F]{8} at / or - $Line =~ /^Unhandled exception: / or - # Git errors - $Line =~ /^CONFLICT / or - $Line =~ /^error: patch failed:/ or - $Line =~ /^error: corrupt patch / or - # Build errors - $Line =~ /: error: / or - $Line =~ /^make: [*]{3} No rule to make target / or - $Line =~ /^Makefile:[0-9]+: recipe for target .* failed$/ or - $Line =~ /^(?:Build|Reconfig|Task): (?!ok)/ or - # Typical perl errors - $Line =~ /^Use of uninitialized value/) + $Line =~ /^Unhandled exception: /) { return "error"; } - if ($Line =~ /:winediag:/) - { - return "diag"; - } - if ($Line =~ /^BotError:/ or - $Line =~ /^X Error of failed request: / or - $Line =~ / opcode of failed request: /) - { - return "boterror"; - } - if ($Line =~ /^+ \S/ or - $Line =~ /^[_.a-z0-9-]+:[_a-z0-9]* start / or - # Build messages - $Line =~ /^(?:Build|Reconfig|Task): ok/) + if ($Line =~ /^[_.a-z0-9-]+:[_a-z0-9]* start /) { return "info"; } @@ -452,6 +480,11 @@ sub GetLogLineCategory($) return "none"; }
+ +# +# Log querying and formatting +# + =pod =over 12
diff --git a/testbot/web/JobDetails.pl b/testbot/web/JobDetails.pl index 3fcec5db6..ee4e53930 100644 --- a/testbot/web/JobDetails.pl +++ b/testbot/web/JobDetails.pl @@ -245,11 +245,13 @@ highlighted to make the log more readable. =back =cut
-sub GetHtmlLine($$$) +sub GetHtmlLine($$$$) { - my ($self, $FullLog, $Line) = @_; + my ($self, $LogName, $FullLog, $Line) = @_;
- my $Category = GetLogLineCategory($Line); + my $Category = $LogName =~ /.report$/ ? + GetReportLineCategory($Line) : + GetLogLineCategory($Line); return undef if ($Category !~ /error/ and !$FullLog);
my $Html = $self->escapeHTML($Line); @@ -403,7 +405,7 @@ sub GenerateBody($) $HasLogEntries = 1; chomp $Line; $CurrentDll = $1 if ($Line =~ m/^([_.a-z0-9-]+):[_a-z0-9]* start /); - my $Html = $self->GetHtmlLine($MoreInfo->{Full}, $Line); + my $Html = $self->GetHtmlLine($LogName, $MoreInfo->{Full}, $Line); next if (!defined $Html);
if ($PrintedDll ne $CurrentDll && !$MoreInfo->{Full}) @@ -476,7 +478,7 @@ sub GenerateBody($) print "<pre><code>"; $ErrFirst = 0; } - print $self->GetHtmlLine(1, $Line), "\n"; + print $self->GetHtmlLine($ErrName, 1, $Line), "\n"; } close($ErrFile);