[13/25] testbot/LogUtils: Keep track of the first line of each error group.

Francois Gouget fgouget at codeweavers.com
Tue Jan 14 09:42:20 CST 2020


This will make it possible to jump to the first line of a test unit that
contains failures.
---
 testbot/lib/WineTestBot/LogUtils.pm | 21 +++++++++++++++------
 1 file changed, 15 insertions(+), 6 deletions(-)

diff --git a/testbot/lib/WineTestBot/LogUtils.pm b/testbot/lib/WineTestBot/LogUtils.pm
index 9dbe6cf0b..3fcb9ac41 100644
--- a/testbot/lib/WineTestBot/LogUtils.pm
+++ b/testbot/lib/WineTestBot/LogUtils.pm
@@ -700,16 +700,20 @@ sub _DumpErrors($$)
   }
 }
 
-sub _AddLogGroup($$)
+sub _AddLogGroup($$;$)
 {
-  my ($LogInfo, $GroupName) = @_;
+  my ($LogInfo, $GroupName, $LineNo) = @_;
 
   # In theory the error group names are all unique. But, just in case, make
   # sure we don't overwrite $LogInfo->{ErrGroups}->{$GroupName}.
   if (!$LogInfo->{ErrGroups}->{$GroupName})
   {
     push @{$LogInfo->{ErrGroupNames}}, $GroupName;
-    $LogInfo->{ErrGroups}->{$GroupName} = { LineNos => [], Errors => [] };
+    $LogInfo->{ErrGroups}->{$GroupName} = {
+      LineNo => $LineNo || 0,
+      LineNos => [],
+      Errors => []
+    };
   }
   return $LogInfo->{ErrGroups}->{$GroupName};
 }
@@ -746,6 +750,10 @@ A hashtable indexed by the error group name. Each entry contains:
 
 =over
 
+=item LineNo
+The line number of the start of this error group. Note that this is normally
+different from the line of the first error in that group.
+
 =item Errors
 An array containing the error messages.
 
@@ -781,7 +789,7 @@ sub GetLogErrors($)
   if (open(my $LogFile, "<", $LogFileName))
   {
     $LogInfo->{ErrCount} ||= 0;
-    my $CurrentModule = "";
+    my ($CurrentModule, $ModuleLineNo) = ("", 0);
     my $CurrentGroup;
     my $LineNo = 0;
     foreach my $Line (<$LogFile>)
@@ -790,6 +798,7 @@ sub GetLogErrors($)
       $Line =~ s/\s*$//;
       if ($IsReport and $Line =~ /^([_.a-z0-9-]+):[_a-z0-9]* start /)
       {
+        $ModuleLineNo = $LineNo;
         $CurrentModule = $1;
         $CurrentGroup = undef;
         next;
@@ -804,7 +813,7 @@ sub GetLogErrors($)
       }
       if (!$CurrentGroup)
       {
-        $CurrentGroup = _AddLogGroup($LogInfo, $CurrentModule);
+        $CurrentGroup = _AddLogGroup($LogInfo, $CurrentModule, $ModuleLineNo);
       }
       _AddLogError($LogInfo, $CurrentGroup, $Line, $LineNo);
     }
@@ -831,7 +840,7 @@ sub GetLogErrors($)
         # Note: $GroupName must not depend on the previous content as this
         #       would break diffs.
         my $GroupName = $IsReport ? "Report errors" : "Task errors";
-        $CurrentGroup = _AddLogGroup($LogInfo, $GroupName);
+        $CurrentGroup = _AddLogGroup($LogInfo, $GroupName, $LineNo);
       }
       _AddLogError($LogInfo, $CurrentGroup, $Line, $LineNo);
     }
-- 
2.20.1




More information about the wine-devel mailing list