You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@buildstream.apache.org by tv...@apache.org on 2022/08/22 06:47:13 UTC

[buildstream] 02/02: _frontend/widget.py: Only save the last failure message for any given element.

This is an automated email from the ASF dual-hosted git repository.

tvb pushed a commit to branch tristan/only-print-last-failure
in repository https://gitbox.apache.org/repos/asf/buildstream.git

commit 371dbad3a5736047742368bf5b99a32b3337c0f6
Author: Tristan van Berkom <tr...@codethink.co.uk>
AuthorDate: Mon Aug 22 15:44:27 2022 +0900

    _frontend/widget.py: Only save the last failure message for any given element.
    
    If the element ultimately failed, it's last failure message will be printed
    in the failure summary. If it previously was retried and succeeded, it will
    not be printed because it will not show up in the failed tasks from
    State.task_groups at session end time.
    
    Fixes #517.
---
 src/buildstream/_frontend/widget.py | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/src/buildstream/_frontend/widget.py b/src/buildstream/_frontend/widget.py
index 653bcd14c..e815933cd 100644
--- a/src/buildstream/_frontend/widget.py
+++ b/src/buildstream/_frontend/widget.py
@@ -17,7 +17,6 @@
 #        Tristan Van Berkom <tr...@codethink.co.uk>
 import datetime
 import os
-from collections import defaultdict
 from contextlib import ExitStack
 from mmap import mmap
 import re
@@ -298,7 +297,7 @@ class LogLine(Widget):
         super().__init__(context, content_profile, format_profile)
 
         self._columns = []
-        self._failure_messages = defaultdict(list)
+        self._failure_messages = {}
         self._success_profile = success_profile
         self._err_profile = err_profile
         self._detail_profile = detail_profile
@@ -612,12 +611,12 @@ class LogLine(Widget):
         if self._failure_messages:
             values = {}
 
-            for element_name, messages in sorted(self._failure_messages.items()):
+            for element_name, message in sorted(self._failure_messages.items()):
                 for group in self._state.task_groups.values():
                     # Exclude the failure messages if the job didn't ultimately fail
                     # (e.g. succeeded on retry)
                     if element_name in group.failed_tasks:
-                        values[element_name] = "".join(self._render(v) for v in messages)
+                        values[element_name] = self._render(message)
 
             if values:
                 text += self.content_profile.fmt("Failure Summary\n", bold=True)
@@ -678,7 +677,7 @@ class LogLine(Widget):
         # Track logfiles for later use
         element_name = message.element_name
         if message.message_type in ERROR_MESSAGES and element_name is not None:
-            self._failure_messages[element_name].append(message)
+            self._failure_messages[element_name] = message
 
         return self._render(message)