Francois Gouget : testbot/build: Simplify the log handling.
Alexandre Julliard
julliard at winehq.org
Wed Mar 13 14:04:26 CDT 2013
Module: tools
Branch: master
Commit: 04b85f724825512ef257d1abe5fd148e286f2a46
URL: http://source.winehq.org/git/tools.git/?a=commit;h=04b85f724825512ef257d1abe5fd148e286f2a46
Author: Francois Gouget <fgouget at codeweavers.com>
Date: Wed Mar 13 16:52:55 2013 +0100
testbot/build: Simplify the log handling.
We no longer remove the Build / Reconfig status lines. This means we no longer need separate raw and processed logs.
Also better report log processing errors.
Specify a prototype for ProcessLog().
---
testbot/bin/WineRunBuild.pl | 88 ++++++++++++++++++++------------------
testbot/bin/WineRunReconfig.pl | 93 ++++++++++++++++++++-------------------
2 files changed, 94 insertions(+), 87 deletions(-)
diff --git a/testbot/bin/WineRunBuild.pl b/testbot/bin/WineRunBuild.pl
index 3f5b592..e7dfafd 100755
--- a/testbot/bin/WineRunBuild.pl
+++ b/testbot/bin/WineRunBuild.pl
@@ -71,55 +71,61 @@ sub FatalError($$$$)
exit 1;
}
-sub ProcessRawlog
+sub ProcessLog($$)
{
- my ($FullRawlogFileName, $FullLogFileName, $FullErrFileName) = @_;
+ my ($FullLogFileName, $FullErrFileName) = @_;
- my $FoundOk = !1;
- if (open RAWLOG, "<$FullRawlogFileName")
+ my ($Status, $Errors);
+ if (open(my $LogFile, "<", $FullLogFileName))
{
- if (open LOG, ">$FullLogFileName")
+ # Collect and analyze the 'Build:' status line(s)
+ $Errors = "";
+ foreach my $Line (<$LogFile>)
{
- if (open ERR, ">$FullErrFileName")
+ chomp($Line);
+ next if ($Line !~ /^Build: (.*)$/);
+ if ($1 ne "ok")
{
- my $Line;
- while (defined($Line = <RAWLOG>))
- {
- chomp($Line);
- if ($Line =~ m/^Build: (.*)$/)
- {
- if ($1 eq "ok")
- {
- $FoundOk = 1;
- }
- else
- {
- print ERR "$1\n";
- }
- }
- else
- {
- print LOG "$Line\n";
- }
- }
-
- close ERR;
- if (-z $FullErrFileName)
- {
- unlink($FullErrFileName);
- }
+ $Errors .= "$1\n";
+ $Status = "failed";
}
+ elsif (!defined $Status)
+ {
+ $Status = "completed";
+ }
+ }
+ close($LogFile);
- close LOG;
+ if (!defined $Status)
+ {
+ $Status = "failed";
+ $Errors = "Missing build status line\n";
}
+ }
+ else
+ {
+ $Status = "failed";
+ $Errors = "Unable to open the log file\n";
+ LogMsg "Unable to open '$FullLogFileName' for reading: $!\n";
+ }
- close RAWLOG;
- unlink($FullRawlogFileName);
+ if ($Errors)
+ {
+ if (open(my $ErrFile, ">", $FullErrFileName))
+ {
+ print $ErrFile $Errors;
+ close($ErrFile);
+ }
+ else
+ {
+ LogMsg "Unable to open '$FullErrFileName' for writing: $!\n";
+ }
}
- return $FoundOk;
+ return $Status;
}
+
$ENV{PATH} = "/usr/bin:/bin";
delete $ENV{ENV};
@@ -189,7 +195,6 @@ LogMsg "Task $JobId/$StepNo/$TaskNo started\n";
my $StepDir = "$DataDir/jobs/$JobId/$StepNo";
my $TaskDir = "$StepDir/$TaskNo";
-my $FullRawlogFileName = "$TaskDir/rawlog";
my $FullLogFileName = "$TaskDir/log";
my $FullErrFileName = "$TaskDir/err";
@@ -262,20 +267,19 @@ if (!$Pid or !defined $TA->Wait($Pid, $Task->Timeout))
if (defined($ErrMessage))
{
- $TA->GetFile("Build.log", $FullRawlogFileName);
- ProcessRawlog($FullRawlogFileName, $FullLogFileName, $FullErrFileName);
+ $TA->GetFile("Build.log", $FullLogFileName);
+ ProcessLog($FullLogFileName, $FullErrFileName);
FatalError "Failure running script in VM: $ErrMessage\n",
$FullErrFileName, $Job, $Task;
}
-if (!$TA->GetFile("Build.log", $FullRawlogFileName))
+if (!$TA->GetFile("Build.log", $FullLogFileName))
{
$ErrMessage = $TA->GetLastError();
FatalError "Can't copy log from VM: $ErrMessage\n",
$FullErrFileName, $Job, $Task;
}
-my $NewStatus = ProcessRawlog($FullRawlogFileName, $FullLogFileName,
- $FullErrFileName) ? "completed" : "failed";
+my $NewStatus = ProcessLog($FullLogFileName, $FullErrFileName);
foreach my $OtherStep (@{$Job->Steps->GetItems()})
{
diff --git a/testbot/bin/WineRunReconfig.pl b/testbot/bin/WineRunReconfig.pl
index 0333705..7460361 100755
--- a/testbot/bin/WineRunReconfig.pl
+++ b/testbot/bin/WineRunReconfig.pl
@@ -71,55 +71,61 @@ sub FatalError($$$$)
exit 1;
}
-sub ProcessRawlog
+sub ProcessLog($$)
{
- my ($FullRawlogFileName, $FullLogFileName, $FullErrFileName) = @_;
+ my ($FullLogFileName, $FullErrFileName) = @_;
- my $FoundOk = !1;
- if (open RAWLOG, "<$FullRawlogFileName")
+ my ($Status, $Errors);
+ if (open(my $LogFile, "<", $FullLogFileName))
{
- if (open LOG, ">$FullLogFileName")
+ # Collect and analyze the 'Reconfig:' status line(s)
+ $Errors = "";
+ foreach my $Line (<$LogFile>)
{
- if (open ERR, ">$FullErrFileName")
+ chomp($Line);
+ next if ($Line !~ /^Reconfig: (.*)$/);
+ if ($1 ne "ok")
{
- my $Line;
- while (defined($Line = <RAWLOG>))
- {
- chomp($Line);
- if ($Line =~ m/^Reconfig: (.*)$/)
- {
- if ($1 eq "ok")
- {
- $FoundOk = 1;
- }
- else
- {
- print ERR "$1\n";
- }
- }
- else
- {
- print LOG "$Line\n";
- }
- }
-
- close ERR;
- if (-z $FullErrFileName)
- {
- unlink($FullErrFileName);
- }
+ $Errors .= "$1\n";
+ $Status = "failed";
}
+ elsif (!defined $Status)
+ {
+ $Status = "completed";
+ }
+ }
+ close($LogFile);
- close LOG;
+ if (!defined $Status)
+ {
+ $Status = "failed";
+ $Errors = "Missing reconfig status line\n";
}
+ }
+ else
+ {
+ $Status = "failed";
+ $Errors = "Unable to open the log file\n";
+ LogMsg "Unable to open '$FullLogFileName' for reading: $!\n";
+ }
- close RAWLOG;
- unlink($FullRawlogFileName);
+ if ($Errors)
+ {
+ if (open(my $ErrFile, ">", $FullErrFileName))
+ {
+ print $ErrFile $Errors;
+ close($ErrFile);
+ }
+ else
+ {
+ LogMsg "Unable to open '$FullErrFileName' for writing: $!\n";
+ }
}
- return $FoundOk;
+ return $Status;
}
+
$ENV{PATH} = "/usr/bin:/bin";
delete $ENV{ENV};
@@ -189,7 +195,6 @@ LogMsg "Task $JobId/$StepNo/$TaskNo started\n";
my $StepDir = "$DataDir/jobs/$JobId/$StepNo";
my $TaskDir = "$StepDir/$TaskNo";
-my $FullRawlogFileName = "$TaskDir/rawlog";
my $FullLogFileName = "$TaskDir/log";
my $FullErrFileName = "$TaskDir/err";
@@ -225,13 +230,13 @@ if (!$Pid or !defined $TA->Wait($Pid, $Task->Timeout))
if (defined($ErrMessage))
{
- $TA->GetFile("Reconfig.log", $FullRawlogFileName);
- ProcessRawlog($FullRawlogFileName, $FullLogFileName, $FullErrFileName);
+ $TA->GetFile("Reconfig.log", $FullLogFileName);
+ ProcessLog($FullLogFileName, $FullErrFileName);
FatalError "Failure running script in VM: $ErrMessage\n",
$FullErrFileName, $Job, $Task;
}
-if (!$TA->GetFile("Reconfig.log", $FullRawlogFileName))
+if (!$TA->GetFile("Reconfig.log", $FullLogFileName))
{
$ErrMessage = $TA->GetLastError();
FatalError "Can't copy log from VM: $ErrMessage\n",
@@ -239,9 +244,8 @@ if (!$TA->GetFile("Reconfig.log", $FullRawlogFileName))
}
$TA->Disconnect();
-my $Success = ProcessRawlog($FullRawlogFileName, $FullLogFileName,
- $FullErrFileName);
-if ($Success)
+my $NewStatus = ProcessLog($FullLogFileName, $FullErrFileName);
+if ($NewStatus eq "completed")
{
$ErrMessage = $VM->RemoveSnapshot($VM->IdleSnapshot);
if (defined($ErrMessage))
@@ -258,14 +262,13 @@ if ($Success)
}
$VM->Status("idle");
- $Task->Status("completed");
}
else
{
- $Task->Status("failed");
$VM->Status("dirty");
}
+$Task->Status($NewStatus);
$Task->ChildPid(undef);
$Task->Ended(time);
$Task->Save();
More information about the wine-cvs
mailing list