Skip to content

Commit

Permalink
spack install: improve error message with no args (spack#17454)
Browse files Browse the repository at this point in the history
The error message was not updated when the behavior of Spack environments
was changed to not automatically activate the local environment in spack#17258.
The previous error message no longer makes sense.
  • Loading branch information
becker33 authored and scheibelp committed Jul 10, 2020
1 parent afbb4a5 commit c2393fe
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 2 deletions.
15 changes: 13 additions & 2 deletions lib/spack/spack/cmd/install.py
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,7 @@ def install(parser, args, **kwargs):
return

if not args.spec and not args.specfiles:
# if there are no args but an active environment or spack.yaml file
# if there are no args but an active environment
# then install the packages from it.
env = ev.get_env(args, 'install')
if env:
Expand All @@ -289,7 +289,18 @@ def install(parser, args, **kwargs):
env.regenerate_views()
return
else:
tty.die("install requires a package argument or a spack.yaml file")
msg = "install requires a package argument or active environment"
if 'spack.yaml' in os.listdir(os.getcwd()):
# There's a spack.yaml file in the working dir, the user may
# have intended to use that
msg += "\n\n"
msg += "Did you mean to install using the `spack.yaml`"
msg += " in this directory? Try: \n"
msg += " spack env activate .\n"
msg += " spack install\n"
msg += " OR\n"
msg += " spack --env . install"
tty.die(msg)

if args.no_checksum:
spack.config.set('config:checksum', False, scope='command_line')
Expand Down
24 changes: 24 additions & 0 deletions lib/spack/spack/test/cmd/install.py
Original file line number Diff line number Diff line change
Expand Up @@ -746,3 +746,27 @@ def test_compiler_bootstrap_already_installed(
# Test succeeds if it does not raise an error
install('gcc@2.0')
install('a%gcc@2.0')


def test_install_fails_no_args(tmpdir):
# ensure no spack.yaml in directory
with tmpdir.as_cwd():
output = install(fail_on_error=False)

# check we got the short version of the error message with no spack.yaml
assert 'requires a package argument or active environment' in output
assert 'spack env activate .' not in output
assert 'using the `spack.yaml` in this directory' not in output


def test_install_fails_no_args_suggests_env_activation(tmpdir):
# ensure spack.yaml in directory
tmpdir.ensure('spack.yaml')

with tmpdir.as_cwd():
output = install(fail_on_error=False)

# check we got the long version of the error message with spack.yaml
assert 'requires a package argument or active environment' in output
assert 'spack env activate .' in output
assert 'using the `spack.yaml` in this directory' in output

0 comments on commit c2393fe

Please sign in to comment.