Angelos Evripiotis pushed to branch master at BuildStream / buildstream
Commits:
-
c24f2971
by Angelos Evripiotis at 2019-02-15T13:56:48Z
-
91eb29a6
by Angelos Evripiotis at 2019-02-15T14:55:06Z
4 changed files:
- buildstream/_context.py
- buildstream/_frontend/cli.py
- buildstream/data/userconfig.yaml
- tests/frontend/workspace.py
Changes:
... | ... | @@ -124,10 +124,6 @@ class Context(): |
124 | 124 |
# Whether or not to cache build trees on artifact creation
|
125 | 125 |
self.cache_buildtrees = None
|
126 | 126 |
|
127 |
- # Boolean, whether we double-check with the user that they meant to
|
|
128 |
- # close the workspace when they're using it to access the project.
|
|
129 |
- self.prompt_workspace_close_project_inaccessible = None
|
|
130 |
- |
|
131 | 127 |
# Whether elements must be rebuilt when their dependencies have changed
|
132 | 128 |
self._strict_build_plan = None
|
133 | 129 |
|
... | ... | @@ -248,22 +244,6 @@ class Context(): |
248 | 244 |
self.sched_pushers = _yaml.node_get(scheduler, int, 'pushers')
|
249 | 245 |
self.sched_network_retries = _yaml.node_get(scheduler, int, 'network-retries')
|
250 | 246 |
|
251 |
- # Load prompt preferences
|
|
252 |
- #
|
|
253 |
- # We convert string options to booleans here, so we can be both user
|
|
254 |
- # and coder-friendly. The string options are worded to match the
|
|
255 |
- # responses the user would give at the cli, for least surprise. The
|
|
256 |
- # booleans are converted here because it's easiest to eyeball that the
|
|
257 |
- # strings are right.
|
|
258 |
- #
|
|
259 |
- prompt = _yaml.node_get(
|
|
260 |
- defaults, Mapping, 'prompt')
|
|
261 |
- _yaml.node_validate(prompt, [
|
|
262 |
- 'really-workspace-close-project-inaccessible',
|
|
263 |
- ])
|
|
264 |
- self.prompt_workspace_close_project_inaccessible = _node_get_option_str(
|
|
265 |
- prompt, 'really-workspace-close-project-inaccessible', ['ask', 'yes']) == 'ask'
|
|
266 |
- |
|
267 | 247 |
# Load per-projects overrides
|
268 | 248 |
self._project_overrides = _yaml.node_get(defaults, Mapping, 'projects', default_value={})
|
269 | 249 |
|
... | ... | @@ -814,6 +814,8 @@ def workspace_open(app, no_checkout, force, track_, directory, elements): |
814 | 814 |
def workspace_close(app, remove_dir, all_, elements):
|
815 | 815 |
"""Close a workspace"""
|
816 | 816 |
|
817 |
+ removed_required_element = False
|
|
818 |
+ |
|
817 | 819 |
with app.initialized():
|
818 | 820 |
if not (all_ or elements):
|
819 | 821 |
# NOTE: I may need to revisit this when implementing multiple projects
|
... | ... | @@ -840,18 +842,20 @@ def workspace_close(app, remove_dir, all_, elements): |
840 | 842 |
for element_name in elements:
|
841 | 843 |
if not app.stream.workspace_exists(element_name):
|
842 | 844 |
nonexisting.append(element_name)
|
843 |
- if (app.stream.workspace_is_required(element_name) and app.interactive and
|
|
844 |
- app.context.prompt_workspace_close_project_inaccessible):
|
|
845 |
- click.echo("Removing '{}' will prevent you from running "
|
|
846 |
- "BuildStream commands from the current directory".format(element_name))
|
|
847 |
- if not click.confirm('Are you sure you want to close this workspace?'):
|
|
848 |
- click.echo('Aborting', err=True)
|
|
849 |
- sys.exit(-1)
|
|
850 | 845 |
if nonexisting:
|
851 | 846 |
raise AppError("Workspace does not exist", detail="\n".join(nonexisting))
|
852 | 847 |
|
853 | 848 |
for element_name in elements:
|
854 | 849 |
app.stream.workspace_close(element_name, remove_dir=remove_dir)
|
850 |
+ if app.stream.workspace_is_required(element_name):
|
|
851 |
+ removed_required_element = True
|
|
852 |
+ |
|
853 |
+ # This message is echo'd last, as it's most relevant to the next
|
|
854 |
+ # thing the user will type.
|
|
855 |
+ if removed_required_element:
|
|
856 |
+ click.echo(
|
|
857 |
+ "Removed '{}', therefore you can no longer run BuildStream "
|
|
858 |
+ "commands from the current directory.".format(element_name), err=True)
|
|
855 | 859 |
|
856 | 860 |
|
857 | 861 |
##################################################################
|
... | ... | @@ -111,20 +111,3 @@ logging: |
111 | 111 |
message-format: |
|
112 | 112 |
|
113 | 113 |
[%{elapsed}][%{key}][%{element}] %{action} %{message}
|
114 |
- |
|
115 |
-#
|
|
116 |
-# Prompt overrides
|
|
117 |
-#
|
|
118 |
-# Here you can suppress 'are you sure?' and other kinds of prompts by supplying
|
|
119 |
-# override values. Note that e.g. 'yes' and 'no' have the same meaning here as
|
|
120 |
-# they do in the actual cli prompt.
|
|
121 |
-#
|
|
122 |
-prompt:
|
|
123 |
- |
|
124 |
- # Whether to really proceed with 'bst workspace close' when doing so would
|
|
125 |
- # stop them from running bst commands in this workspace.
|
|
126 |
- #
|
|
127 |
- # ask - Ask the user if they are sure.
|
|
128 |
- # yes - Always close, without asking.
|
|
129 |
- #
|
|
130 |
- really-workspace-close-project-inaccessible: ask
|
... | ... | @@ -1184,6 +1184,7 @@ def test_external_close_other(cli, datafiles, tmpdir_factory): |
1184 | 1184 |
|
1185 | 1185 |
result = cli.run(project=project, args=['-C', alpha_workspace, 'workspace', 'close', beta_element])
|
1186 | 1186 |
result.assert_success()
|
1187 |
+ assert 'you can no longer run BuildStream' not in result.stderr
|
|
1187 | 1188 |
|
1188 | 1189 |
|
1189 | 1190 |
@pytest.mark.datafiles(DATA_DIR)
|
... | ... | @@ -1199,6 +1200,7 @@ def test_external_close_self(cli, datafiles, tmpdir_factory, guess_element): |
1199 | 1200 |
|
1200 | 1201 |
result = cli.run(project=project, args=['-C', alpha_workspace, 'workspace', 'close'] + arg_elm)
|
1201 | 1202 |
result.assert_success()
|
1203 |
+ assert 'you can no longer run BuildStream' in result.stderr
|
|
1202 | 1204 |
|
1203 | 1205 |
|
1204 | 1206 |
@pytest.mark.datafiles(DATA_DIR)
|