Bugfix: terminate if a spack.yaml include path does not exist (#18074)

This commit is contained in:
Tamara Dahlgren
2020-09-03 05:37:24 -07:00
committed by GitHub
parent 3a562c0cec
commit 84381fbc80
2 changed files with 32 additions and 1 deletions

View File

@@ -812,6 +812,7 @@ def included_config_scopes(self):
# load config scopes added via 'include:', in reverse so that
# highest-precedence scopes are last.
includes = config_dict(self.yaml).get('include', [])
missing = []
for i, config_path in enumerate(reversed(includes)):
# allow paths to contain spack config/environment variables, etc.
config_path = substitute_path_variables(config_path)
@@ -826,15 +827,23 @@ def included_config_scopes(self):
config_name = 'env:%s:%s' % (
self.name, os.path.basename(config_path))
scope = spack.config.ConfigScope(config_name, config_path)
else:
elif os.path.exists(config_path):
# files are assumed to be SingleFileScopes
base, ext = os.path.splitext(os.path.basename(config_path))
config_name = 'env:%s:%s' % (self.name, base)
scope = spack.config.SingleFileScope(
config_name, config_path, spack.schema.merged.schema)
else:
missing.append(config_path)
continue
scopes.append(scope)
if missing:
msg = 'Detected {0} missing include path(s):'.format(len(missing))
msg += '\n {0}'.format('\n '.join(missing))
tty.die('{0}\nPlease correct and try again.'.format(msg))
return scopes
def env_file_config_scope_name(self):

View File

@@ -525,6 +525,28 @@ def test_env_with_config():
for x in e._get_environment_specs())
def test_with_config_bad_include(env_deactivate, capfd):
env_name = 'test_bad_include'
test_config = """\
spack:
include:
- /no/such/directory
- no/such/file.yaml
"""
_env_create(env_name, StringIO(test_config))
e = ev.read(env_name)
with pytest.raises(SystemExit):
with e:
e.concretize()
out, err = capfd.readouterr()
assert 'missing include' in err
assert '/no/such/directory' in err
assert 'no/such/file.yaml' in err
def test_env_with_included_config_file():
test_config = """\
env: