push notifications to IRC #exim-builds
[buildfarm-server.git] / cgi-bin / show_status.pl
index d52394fec86ff93a8682fd94ddef18dc3da942d8..1ac959ebb5cc600fa90d17d80cd7d6829af69b61 100755 (executable)
@@ -65,43 +65,57 @@ EOS
 my $statrows=[];
 my $sth=$db->prepare($statement);
 $sth->execute;
+
+# walk the set of result rows from the SQL query above
 while (my $row = $sth->fetchrow_hashref)
 {
     next if (@members && ! grep {$_ eq $row->{sysname} } @members);
+
     $row->{build_flags}  =~ s/^\{(.*)\}$/$1/;
     $row->{build_flags}  =~ s/,/ /g;
     $row->{build_flags}  =~ s/_PC\b//g;
     $row->{build_flags} = lc($row->{build_flags});
+
     if (defined($row->{log_text}))
       {                # convert to a hash, find ranges, output list of ranges
       my $h = { split /\s+/, $row->{log_text} };
-      my $i;
-      my $start;
+      my ($i, $start, $last);
       my @ranges;
 
       foreach my $k (sort {$a<=>$b} keys %$h)
        {
        if (defined $start)
          {
-         if ($h->{$k} ne $h->{$start})
+         if ($h->{$k} ne $h->{$start} || $k != $last + 1)
            {
+           # The result (skiped, Passed, Failed) for this testcase number
+           # is different to the start one of the range,
+           # or the range became non-contiguous.
+           # Add text for the range to list of ranges
+           # (these three elements get used by "status.tt" BLOCK colourbar)
+           # Reset the start and the count, for a new range.
+
            push @ranges, sprintf("%s %s %s", $h->{$start},  $start,  $i);
            $start = $k;
            $i = 1;
            }
          else
            {
+           # bump the size of this range
            $i++;
            }
          }
        else
          {
+         # First ever range for this row
          $start = $k;
          $i = 1;
          }
+       $last = $k;
        }
       if (defined $start)
        {
+       # close out the final range
         push @ranges, sprintf("%s %s %s", $h->{$start},  $start,  $i);
        }