summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Pollard <tom.pollard@codethink.co.uk>2019-10-02 14:09:44 +0100
committerTom Pollard <tom.pollard@codethink.co.uk>2019-11-28 16:56:50 +0000
commit26e0292b76dbec34f6f8749612b8db10dab883fb (patch)
tree955c3a59d822b49960b22e858eaafecfe6c7536c
parent6f54dfac3436336eb7853862b16e965634cd65f7 (diff)
downloadbuildstream-26e0292b76dbec34f6f8749612b8db10dab883fb.tar.gz
Failed shell to load via name if no plugintable state
-rw-r--r--src/buildstream/_frontend/app.py8
-rw-r--r--src/buildstream/_stream.py11
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