in src/buildstream/_frontend/cli.py [0:0]
def workspace_close(app, remove_dir, all_, elements):
"""Close a workspace"""
with app.initialized():
if not (all_ or elements):
# NOTE: I may need to revisit this when implementing multiple projects
# opening one workspace.
element = app.project.get_default_target()
if element:
elements = (element,)
else:
raise AppError("No elements specified")
# Early exit if we specified `all` and there are no workspaces
if all_ and not app.stream.workspace_exists():
click.echo("No open workspaces to close", err=True)
sys.exit(0)
if all_:
elements = [element_name for element_name, _ in app.context.get_workspaces().list()]
elements = app.stream.redirect_element_names(elements)
# Check that the workspaces in question exist, and that it's safe to
# remove them.
nonexisting = []
for element_name in elements:
if not app.stream.workspace_exists(element_name):
nonexisting.append(element_name)
if nonexisting:
raise AppError("Workspace does not exist", detail="\n".join(nonexisting))
for element_name in elements:
app.stream.workspace_close(element_name, remove_dir=remove_dir)