diff options
Diffstat (limited to 'src/buildstream/_frontend/app.py')
-rw-r--r-- | src/buildstream/_frontend/app.py | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/src/buildstream/_frontend/app.py b/src/buildstream/_frontend/app.py index a5588e672..826e797e1 100644 --- a/src/buildstream/_frontend/app.py +++ b/src/buildstream/_frontend/app.py @@ -31,7 +31,6 @@ from .. import Scope # Import various buildstream internals from .._context import Context -from ..plugin import Plugin from .._project import Project from .._exceptions import BstError, StreamError, LoadError, LoadErrorReason, AppError from .._message import Message, MessageType, unconditional_messages @@ -474,7 +473,7 @@ class App(): def _message(self, message_type, message, **kwargs): args = dict(kwargs) self.context.messenger.message( - Message(None, message_type, message, **args)) + Message(message_type, message, **args)) # Exception handler # @@ -559,25 +558,22 @@ class App(): # Args: # action_name (str): The name of the action being performed, # same as the task group, if it exists - # full_name (str): The name of this specific task, e.g. the element name - # unique_id (int): If an element job failed, the unique ID of the element. + # full_name (str): The name of this specific task, e.g. the element full name + # element (Element): If an element job failed the Element instance # - def _job_failed(self, action_name, full_name, unique_id=None): + def _job_failed(self, action_name, full_name, element=None): # Dont attempt to handle a failure if the user has already opted to # terminate if not self.stream.terminated: - if unique_id: + if element: # look-up queue for q in self.stream.queues: if q.action_name == action_name: queue = q assert queue, "Job action {} does not have a corresponding queue".format(action_name) - # look-up element - element = Plugin._lookup(unique_id) - # Get the last failure message for additional context - failure = self._fail_messages.get(element._unique_id) + failure = self._fail_messages.get(full_name) # XXX This is dangerous, sometimes we get the job completed *before* # the failure message reaches us ?? @@ -585,11 +581,12 @@ class App(): self._status.clear() click.echo("\n\n\nBUG: Message handling out of sync, " + "unable to retrieve failure message for element {}\n\n\n\n\n" - .format(element), err=True) + .format(full_name), err=True) else: self._handle_failure(element, queue, failure) else: + # Not an element_job, we don't handle the failure click.echo("\nTerminating all jobs\n", err=True) self.stream.terminate() @@ -739,8 +736,8 @@ class App(): return # Hold on to the failure messages - if message.message_type in [MessageType.FAIL, MessageType.BUG] and message.unique_id is not None: - self._fail_messages[message.unique_id] = message + if message.message_type in [MessageType.FAIL, MessageType.BUG] and message.element_name is not None: + self._fail_messages[message.element_name] = message # Send to frontend if appropriate if is_silenced and (message.message_type not in unconditional_messages): |