From 26e0292b76dbec34f6f8749612b8db10dab883fb Mon Sep 17 00:00:00 2001 From: Tom Pollard Date: Wed, 2 Oct 2019 14:09:44 +0100 Subject: Failed shell to load via name if no plugintable state --- src/buildstream/_frontend/app.py | 8 +++++++- src/buildstream/_stream.py | 11 +++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/buildstream/_frontend/app.py b/src/buildstream/_frontend/app.py index 09610851f..471901f31 100644 --- a/src/buildstream/_frontend/app.py +++ b/src/buildstream/_frontend/app.py @@ -684,7 +684,13 @@ class App: unique_id, element_key = element prompt = self.shell_prompt(full_name, element_key) self.stream.shell( - None, Scope.BUILD, prompt, isolate=True, usebuildtree="always", unique_id=unique_id + None, + Scope.BUILD, + prompt, + isolate=True, + usebuildtree="always", + unique_id=unique_id, + full_name=full_name, ) except BstError as e: click.echo("Error while attempting to create interactive shell: {}".format(e), err=True) diff --git a/src/buildstream/_stream.py b/src/buildstream/_stream.py index fe49becfb..b0cebc043 100644 --- a/src/buildstream/_stream.py +++ b/src/buildstream/_stream.py @@ -252,6 +252,7 @@ class Stream: # usebuildtree (str): Whether to use a buildtree as the source, given cli option # pull_dependencies ([Element]|None): Elements to attempt to pull # unique_id: (str): Whether to use a unique_id to load an Element instance + # full_name: (str): The elements full name, used if unique_id lookup fails # # Returns: # (int): The exit code of the launched shell @@ -268,12 +269,18 @@ class Stream: command=None, usebuildtree=None, pull_dependencies=None, - unique_id=None + unique_id=None, + full_name=None ): # Load the Element via the unique_id if given if unique_id and element is None: - element = Plugin._lookup(unique_id) + try: + element = Plugin._lookup(unique_id) + except AssertionError: + # Could not be loaded from plugintable, load forcefully + element_list = self.load_selection([full_name], selection=PipelineSelection.NONE) + element = element_list[0] # Assert we have everything we need built, unless the directory is specified # in which case we just blindly trust the directory, using the element -- cgit v1.2.1