From ce12bbf1bb4bc1d0ede83d1591a499d59fd4c875 Mon Sep 17 00:00:00 2001 From: Rebecca Grayson Date: Mon, 15 Jul 2019 13:23:11 +0100 Subject: Checkout to default dir if no tar or directory: When neither --tar nor --directory are provided, bst artifact checkout will no longer error out. Defaults to a suitable directory, consistent with bst workspace open. Test for new feature has been added --- src/buildstream/_frontend/cli.py | 11 ++++++----- tests/frontend/buildcheckout.py | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/buildstream/_frontend/cli.py b/src/buildstream/_frontend/cli.py index 1f5d500a8..8fd834825 100644 --- a/src/buildstream/_frontend/cli.py +++ b/src/buildstream/_frontend/cli.py @@ -991,10 +991,6 @@ def artifact_checkout(app, force, deps, integrate, hardlinks, tar, pull_, direct click.echo("ERROR: options --hardlinks and --tar conflict", err=True) sys.exit(-1) - if tar is None and directory is None: - click.echo("ERROR: One of --directory or --tar must be provided", err=True) - sys.exit(-1) - if tar is not None and directory is not None: click.echo("ERROR: options --directory and --tar conflict", err=True) sys.exit(-1) @@ -1003,7 +999,12 @@ def artifact_checkout(app, force, deps, integrate, hardlinks, tar, pull_, direct location = tar tar = True else: - location = os.getcwd() if directory is None else directory + if directory is None: + location = os.path.abspath(os.path.join(os.getcwd(), element)) + else: + location = directory + if location[-4:] == '.bst': + location = location[:-4] tar = False if deps == "build": diff --git a/tests/frontend/buildcheckout.py b/tests/frontend/buildcheckout.py index d3eec0d21..aadefc2ab 100644 --- a/tests/frontend/buildcheckout.py +++ b/tests/frontend/buildcheckout.py @@ -232,6 +232,24 @@ def test_build_checkout_tarball(datafiles, cli): assert os.path.join('.', 'usr', 'include', 'pony.h') in tar.getnames() +@pytest.mark.datafiles(DATA_DIR) +def test_build_checkout_no_tar_no_directory(datafiles, cli, tmpdir): + project = str(datafiles) + runtestdir = str(tmpdir) + + result = cli.run(project=project, args=['build', 'target.bst']) + result.assert_success() + + checkout_args = ['artifact', 'checkout', 'target.bst'] + + result = cli.run(cwd=runtestdir, project=project, args=checkout_args) + result.assert_success() + filename = os.path.join(runtestdir, 'target', 'usr', 'bin', 'hello') + assert os.path.exists(filename) + filename = os.path.join(runtestdir, 'target', 'usr', 'include', 'pony.h') + assert os.path.exists(filename) + + @pytest.mark.datafiles(DATA_DIR) def test_build_checkout_tarball_stdout(datafiles, cli): project = str(datafiles) -- cgit v1.2.1