[PATCH] testbot: Modify ParseTaskLog() so it can return more information.
Francois Gouget
fgouget at codeweavers.com
Tue Sep 17 05:34:38 CDT 2019
This also makes the 'NoLog' error case a bit cleaner.
Signed-off-by: Francois Gouget <fgouget at codeweavers.com>
---
testbot/bin/WineRunBuild.pl | 10 +++++-----
testbot/bin/WineRunReconfig.pl | 8 ++++----
testbot/bin/WineRunWineTest.pl | 12 ++++++------
testbot/lib/WineTestBot/LogUtils.pm | 28 +++++++++++++++++++---------
4 files changed, 34 insertions(+), 24 deletions(-)
diff --git a/testbot/bin/WineRunBuild.pl b/testbot/bin/WineRunBuild.pl
index 1d57c4408..a8b7803e9 100755
--- a/testbot/bin/WineRunBuild.pl
+++ b/testbot/bin/WineRunBuild.pl
@@ -391,23 +391,23 @@ if (!defined $TA->Wait($Pid, $Task->Timeout, 60))
Debug(Elapsed($Start), " Retrieving 'Build.log'\n");
if ($TA->GetFile("Build.log", "$TaskDir/log"))
{
- my ($Result, $_Type) = ParseTaskLog("$TaskDir/log");
- if ($Result eq "ok")
+ my $Summary = ParseTaskLog("$TaskDir/log");
+ if ($Summary->{Task} eq "ok")
{
# We must have gotten the full log and the build did succeed.
# So forget any prior error.
$NewStatus = "completed";
$TAError = $ErrMessage = undef;
}
- elsif ($Result eq "badpatch")
+ elsif ($Summary->{Task} eq "badpatch")
{
# This too is conclusive enough to ignore other errors.
$NewStatus = "badpatch";
$TAError = $ErrMessage = undef;
}
- elsif ($Result =~ s/^nolog://)
+ elsif ($Summary->{NoLog})
{
- FatalError("$Result\n", "retry");
+ FatalError("$Summary->{NoLog}\n", "retry");
}
else
{
diff --git a/testbot/bin/WineRunReconfig.pl b/testbot/bin/WineRunReconfig.pl
index cf511f306..ec12d960a 100755
--- a/testbot/bin/WineRunReconfig.pl
+++ b/testbot/bin/WineRunReconfig.pl
@@ -392,17 +392,17 @@ if (!defined $TA->Wait($Pid, $Task->Timeout, 60))
Debug(Elapsed($Start), " Retrieving 'Reconfig.log'\n");
if ($TA->GetFile("Reconfig.log", "$TaskDir/log"))
{
- my ($Result, $_Type) = ParseTaskLog("$TaskDir/log");
- if ($Result eq "ok")
+ my $Summary = ParseTaskLog("$TaskDir/log");
+ if ($Summary->{Task} eq "ok")
{
# We must have gotten the full log and the build did succeed.
# So forget any prior error.
$NewStatus = "completed";
$TAError = $ErrMessage = undef;
}
- elsif ($Result =~ s/^nolog://)
+ elsif ($Summary->{NoLog})
{
- FatalError("$Result\n", "retry");
+ FatalError("$Summary->{NoLog}\n", "retry");
}
else
{
diff --git a/testbot/bin/WineRunWineTest.pl b/testbot/bin/WineRunWineTest.pl
index 508605b39..514c57cda 100755
--- a/testbot/bin/WineRunWineTest.pl
+++ b/testbot/bin/WineRunWineTest.pl
@@ -512,8 +512,8 @@ if (!defined $TA->Wait($Pid, $Task->Timeout, 60))
Debug(Elapsed($Start), " Retrieving 'Task.log'\n");
if ($TA->GetFile("Task.log", "$TaskDir/log"))
{
- my ($Result, $Type) = ParseTaskLog("$TaskDir/log");
- if ($Result eq "ok")
+ my $Summary = ParseTaskLog("$TaskDir/log");
+ if ($Summary->{Task} eq "ok")
{
# We must have gotten the full log and the task completed successfully
# (with or without test failures). So clear any previous errors, including
@@ -521,17 +521,17 @@ if ($TA->GetFile("Task.log", "$TaskDir/log"))
$NewStatus = "completed";
$TaskFailures = $TAError = $ErrMessage = $PossibleCrash = undef;
}
- elsif ($Result eq "badpatch")
+ elsif ($Summary->{Task} eq "badpatch")
{
# This too is conclusive enough to ignore other errors.
$NewStatus = "badpatch";
$TaskFailures = $TAError = $ErrMessage = $PossibleCrash = undef;
}
- elsif ($Result =~ s/^nolog://)
+ elsif ($Summary->{NoLog})
{
- FatalError("$Result\n", "retry");
+ FatalError("$Summary->{NoLog}\n", "retry");
}
- elsif ($Type eq "build")
+ elsif ($Summary->{Type} eq "build")
{
# The error happened before the tests started so blame the build.
$NewStatus = "badbuild";
diff --git a/testbot/lib/WineTestBot/LogUtils.pm b/testbot/lib/WineTestBot/LogUtils.pm
index 21f7dd054..d23a99c6b 100644
--- a/testbot/lib/WineTestBot/LogUtils.pm
+++ b/testbot/lib/WineTestBot/LogUtils.pm
@@ -69,7 +69,17 @@ sub _IsPerlError($)
=item C<ParseTaskLog()>
-Returns ok if the task was successful and an error code otherwise.
+Returns a hashtable containing a summary of the task log:
+=over
+
+=item Type
+'tests' if the task ran Wine tests and 'build' otherwise.
+
+=item Task
+Either 'ok' if the task was successful or a code indicating why it failed.
+
+=item NoLog
+Contains an error message if the task log could not be read.
=back
=cut
@@ -80,33 +90,33 @@ sub ParseTaskLog($)
if (open(my $LogFile, "<", $FileName))
{
- my $Result;
- my $Type = "build";
+ my $Summary = {Type => "build"};
foreach my $Line (<$LogFile>)
{
chomp $Line;
if ($Line eq "Task: tests")
{
- $Type = "tests";
+ $Summary->{Type} = "tests";
}
elsif ($Line eq "Task: ok")
{
- $Result ||= "ok";
+ $Summary->{Task} ||= "ok";
}
elsif ($Line eq "Task: Patch failed to apply")
{
- $Result = "badpatch";
+ $Summary->{Task} = "badpatch";
last; # Should be the last and most specific message
}
elsif ($Line =~ /^Task: / or _IsPerlError($Line))
{
- $Result = "failed";
+ $Summary->{Task} = "failed";
}
}
close($LogFile);
- return ($Result || "missing", $Type);
+ $Summary->{Task} ||= "missing";
+ return $Summary;
}
- return ("nolog:Unable to open the task log for reading: $!", undef);
+ return {NoLog => "Unable to open the task log for reading: $!"};
}
--
2.20.1
More information about the wine-devel
mailing list