Jürg Billeter pushed to branch jennis/add_artifacts_completion at BuildStream / buildstream
Commits:
3 changed files:
Changes:
... | ... | @@ -161,7 +161,7 @@ def override_main(self, args=None, prog_name=None, complete_var=None, |
161 | 161 |
# Hook for the Bash completion. This only activates if the Bash
|
162 | 162 |
# completion is actually enabled, otherwise this is quite a fast
|
163 | 163 |
# noop.
|
164 |
- if main_bashcomplete(self, prog_name, override_completions):
|
|
164 |
+ if main_bashcomplete(self, prog_name, args, override_completions):
|
|
165 | 165 |
|
166 | 166 |
# If we're running tests we cant just go calling exit()
|
167 | 167 |
# from the main process.
|
... | ... | @@ -313,10 +313,10 @@ def get_choices(cli, prog_name, args, incomplete, override): |
313 | 313 |
yield item
|
314 | 314 |
|
315 | 315 |
|
316 |
-def do_complete(cli, prog_name, override):
|
|
316 |
+def do_complete(cli, prog_name, args, override):
|
|
317 | 317 |
cwords = split_arg_string(os.environ['COMP_WORDS'])
|
318 | 318 |
cword = int(os.environ['COMP_CWORD'])
|
319 |
- args = cwords[1:cword]
|
|
319 |
+ args = args + cwords[1:cword]
|
|
320 | 320 |
try:
|
321 | 321 |
incomplete = cwords[cword]
|
322 | 322 |
except IndexError:
|
... | ... | @@ -328,11 +328,11 @@ def do_complete(cli, prog_name, override): |
328 | 328 |
|
329 | 329 |
# Main function called from main.py at startup here
|
330 | 330 |
#
|
331 |
-def main_bashcomplete(cmd, prog_name, override):
|
|
331 |
+def main_bashcomplete(cmd, prog_name, args, override):
|
|
332 | 332 |
"""Internal handler for the bash completion support."""
|
333 | 333 |
|
334 | 334 |
if '_BST_COMPLETION' in os.environ:
|
335 |
- do_complete(cmd, prog_name, override)
|
|
335 |
+ do_complete(cmd, prog_name, args, override)
|
|
336 | 336 |
return True
|
337 | 337 |
|
338 | 338 |
return False
|
... | ... | @@ -281,3 +281,44 @@ def test_argument_element_invalid(datafiles, cli, project, cmd, word_idx, expect |
281 | 281 |
])
|
282 | 282 |
def test_help_commands(cli, cmd, word_idx, expected):
|
283 | 283 |
assert_completion(cli, cmd, word_idx, expected)
|
284 |
+ |
|
285 |
+ |
|
286 |
+@pytest.mark.datafiles(os.path.join(DATA_DIR, 'project'))
|
|
287 |
+def test_argument_artifact(cli, tmpdir, datafiles):
|
|
288 |
+ project = os.path.join(datafiles.dirname, datafiles.basename)
|
|
289 |
+ |
|
290 |
+ # Build an import element with no dependencies (as there will only be ONE cache key)
|
|
291 |
+ result = cli.run(project=project, args=['build', 'import-bin.bst']) # Has no dependencies
|
|
292 |
+ result.assert_success()
|
|
293 |
+ |
|
294 |
+ # Get the key and the artifact ref ($project/$element_name/$key)
|
|
295 |
+ key = cli.get_element_key(project, 'import-bin.bst')
|
|
296 |
+ artifact = os.path.join('test', 'import-bin', key)
|
|
297 |
+ |
|
298 |
+ # Test autocompletion of the artifact
|
|
299 |
+ cmds = [
|
|
300 |
+ 'bst artifact log ',
|
|
301 |
+ 'bst artifact log t',
|
|
302 |
+ 'bst artifact log test/'
|
|
303 |
+ ]
|
|
304 |
+ |
|
305 |
+ for i, cmd in enumerate(cmds):
|
|
306 |
+ word_idx = 3
|
|
307 |
+ result = cli.run(project=project, cwd=project, env={
|
|
308 |
+ '_BST_COMPLETION': 'complete',
|
|
309 |
+ 'COMP_WORDS': cmd,
|
|
310 |
+ 'COMP_CWORD': str(word_idx)
|
|
311 |
+ })
|
|
312 |
+ words = []
|
|
313 |
+ if result.output:
|
|
314 |
+ words = result.output.splitlines() # This leaves an extra space on each e.g. 'foo.bst ']
|
|
315 |
+ words = [word.strip() for word in words]
|
|
316 |
+ |
|
317 |
+ if i == 0:
|
|
318 |
+ expected = PROJECT_ELEMENTS + [artifact] # We should now be able to see the artifact
|
|
319 |
+ elif i == 1:
|
|
320 |
+ expected = ['target.bst', artifact]
|
|
321 |
+ elif i == 2:
|
|
322 |
+ expected = [artifact]
|
|
323 |
+ |
|
324 |
+ assert expected == words
|