summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAngelos Evripiotis <jevripiotis@bloomberg.net>2019-02-05 15:26:58 +0000
committerAngelos Evripiotis <angelos.evripiotis@gmail.com>2019-02-15 13:56:48 +0000
commitc24f2971db15c8ef23fb569f9ee204ade643ec14 (patch)
tree8f166ae80ebb2ad6280dd54b47ddcb5d6f75f656
parent0921ccf40f167ed524a1a2ff7023949f2542e14f (diff)
downloadbuildstream-are_you_sure2.tar.gz
userconfig: rm really-workspace-close-project-inaccessibleare_you_sure2
Remove the need for the 'really-workspace-close-project-inaccessible' config option, as well as the option itself. As agreed on the mailing list [1], all the 'are you sure?' prompts on workspace reset and close were removed. While that discussion was going on, this new prompt and option was added. At the 2019 BuildStream Gathering, it was verbally agreed between myself and Tristan VB that we would also remove this instance. It was also agreed that we should have a notice to let the user know what they'd done, this was already in place if interactive. Moved it to be unconditional so that there's no difference in non-interactive behaviour. Made it output to stderr, as it's diagnostic meant for the user. Made it the last thing echo'd so it's next to the prompt - it's very relevant to what they type next. Added a test to make sure the text makes it to stderr in the appropriate case, and not in an inappropriate one. This is the last instance of any prompt configuration, so BuildStream can also forget all of that machinery. [1] https://mail.gnome.org/archives/buildstream-list/2018-December/msg00111.html
-rw-r--r--buildstream/_context.py20
-rw-r--r--buildstream/_frontend/cli.py18
-rw-r--r--buildstream/data/userconfig.yaml17
-rw-r--r--tests/frontend/workspace.py2
4 files changed, 13 insertions, 44 deletions
diff --git a/buildstream/_context.py b/buildstream/_context.py
index 6fe7c3f52..2fbf415fb 100644
--- a/buildstream/_context.py
+++ b/buildstream/_context.py
@@ -124,10 +124,6 @@ class Context():
# Whether or not to cache build trees on artifact creation
self.cache_buildtrees = None
- # Boolean, whether we double-check with the user that they meant to
- # close the workspace when they're using it to access the project.
- self.prompt_workspace_close_project_inaccessible = None
-
# Whether elements must be rebuilt when their dependencies have changed
self._strict_build_plan = None
@@ -248,22 +244,6 @@ class Context():
self.sched_pushers = _yaml.node_get(scheduler, int, 'pushers')
self.sched_network_retries = _yaml.node_get(scheduler, int, 'network-retries')
- # Load prompt preferences
- #
- # We convert string options to booleans here, so we can be both user
- # and coder-friendly. The string options are worded to match the
- # responses the user would give at the cli, for least surprise. The
- # booleans are converted here because it's easiest to eyeball that the
- # strings are right.
- #
- prompt = _yaml.node_get(
- defaults, Mapping, 'prompt')
- _yaml.node_validate(prompt, [
- 'really-workspace-close-project-inaccessible',
- ])
- self.prompt_workspace_close_project_inaccessible = _node_get_option_str(
- prompt, 'really-workspace-close-project-inaccessible', ['ask', 'yes']) == 'ask'
-
# Load per-projects overrides
self._project_overrides = _yaml.node_get(defaults, Mapping, 'projects', default_value={})
diff --git a/buildstream/_frontend/cli.py b/buildstream/_frontend/cli.py
index 401eda9b6..02ca52e85 100644
--- a/buildstream/_frontend/cli.py
+++ b/buildstream/_frontend/cli.py
@@ -814,6 +814,8 @@ def workspace_open(app, no_checkout, force, track_, directory, elements):
def workspace_close(app, remove_dir, all_, elements):
"""Close a workspace"""
+ removed_required_element = False
+
with app.initialized():
if not (all_ or elements):
# NOTE: I may need to revisit this when implementing multiple projects
@@ -840,18 +842,20 @@ def workspace_close(app, remove_dir, all_, elements):
for element_name in elements:
if not app.stream.workspace_exists(element_name):
nonexisting.append(element_name)
- if (app.stream.workspace_is_required(element_name) and app.interactive and
- app.context.prompt_workspace_close_project_inaccessible):
- click.echo("Removing '{}' will prevent you from running "
- "BuildStream commands from the current directory".format(element_name))
- if not click.confirm('Are you sure you want to close this workspace?'):
- click.echo('Aborting', err=True)
- sys.exit(-1)
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)
+ if app.stream.workspace_is_required(element_name):
+ removed_required_element = True
+
+ # This message is echo'd last, as it's most relevant to the next
+ # thing the user will type.
+ if removed_required_element:
+ click.echo(
+ "Removed '{}', therefore you can no longer run BuildStream "
+ "commands from the current directory.".format(element_name), err=True)
##################################################################
diff --git a/buildstream/data/userconfig.yaml b/buildstream/data/userconfig.yaml
index 0b4535cea..f17dac88c 100644
--- a/buildstream/data/userconfig.yaml
+++ b/buildstream/data/userconfig.yaml
@@ -111,20 +111,3 @@ logging:
message-format: |
[%{elapsed}][%{key}][%{element}] %{action} %{message}
-
-#
-# Prompt overrides
-#
-# Here you can suppress 'are you sure?' and other kinds of prompts by supplying
-# override values. Note that e.g. 'yes' and 'no' have the same meaning here as
-# they do in the actual cli prompt.
-#
-prompt:
-
- # Whether to really proceed with 'bst workspace close' when doing so would
- # stop them from running bst commands in this workspace.
- #
- # ask - Ask the user if they are sure.
- # yes - Always close, without asking.
- #
- really-workspace-close-project-inaccessible: ask
diff --git a/tests/frontend/workspace.py b/tests/frontend/workspace.py
index f6d12e8bf..91004b9f4 100644
--- a/tests/frontend/workspace.py
+++ b/tests/frontend/workspace.py
@@ -1184,6 +1184,7 @@ def test_external_close_other(cli, datafiles, tmpdir_factory):
result = cli.run(project=project, args=['-C', alpha_workspace, 'workspace', 'close', beta_element])
result.assert_success()
+ assert 'you can no longer run BuildStream' not in result.stderr
@pytest.mark.datafiles(DATA_DIR)
@@ -1199,6 +1200,7 @@ def test_external_close_self(cli, datafiles, tmpdir_factory, guess_element):
result = cli.run(project=project, args=['-C', alpha_workspace, 'workspace', 'close'] + arg_elm)
result.assert_success()
+ assert 'you can no longer run BuildStream' in result.stderr
@pytest.mark.datafiles(DATA_DIR)