lib/spack : expand spack config vars in 'include' section (#16210)
* Changed the 'include' config section to use 'substitute_path_variables' to allow for Spack config variables to be used (e.g. $spack). * Fixed a bug with 'include' section path expansion and added a test case for 'include' paths with embedded config variables.
This commit is contained in:
parent
31791f269b
commit
9a18fbbc3e
@ -37,6 +37,7 @@
|
|||||||
from spack.spec_list import SpecList, InvalidSpecConstraintError
|
from spack.spec_list import SpecList, InvalidSpecConstraintError
|
||||||
from spack.variant import UnknownVariantError
|
from spack.variant import UnknownVariantError
|
||||||
import spack.util.lock as lk
|
import spack.util.lock as lk
|
||||||
|
from spack.util.path import substitute_path_variables
|
||||||
|
|
||||||
#: environment variable used to indicate the active environment
|
#: environment variable used to indicate the active environment
|
||||||
spack_env_var = 'SPACK_ENV'
|
spack_env_var = 'SPACK_ENV'
|
||||||
@ -780,8 +781,8 @@ def included_config_scopes(self):
|
|||||||
# highest-precedence scopes are last.
|
# highest-precedence scopes are last.
|
||||||
includes = config_dict(self.yaml).get('include', [])
|
includes = config_dict(self.yaml).get('include', [])
|
||||||
for i, config_path in enumerate(reversed(includes)):
|
for i, config_path in enumerate(reversed(includes)):
|
||||||
# allow paths to contain environment variables
|
# allow paths to contain spack config/environment variables, etc.
|
||||||
config_path = config_path.format(**os.environ)
|
config_path = substitute_path_variables(config_path)
|
||||||
|
|
||||||
# treat relative paths as relative to the environment
|
# treat relative paths as relative to the environment
|
||||||
if not os.path.isabs(config_path):
|
if not os.path.isabs(config_path):
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
from spack.spec_list import SpecListError
|
from spack.spec_list import SpecListError
|
||||||
from spack.util.mock_package import MockPackageMultiRepo
|
from spack.util.mock_package import MockPackageMultiRepo
|
||||||
import spack.util.spack_json as sjson
|
import spack.util.spack_json as sjson
|
||||||
|
from spack.util.path import substitute_path_variables
|
||||||
|
|
||||||
|
|
||||||
# everything here uses the mock_env_path
|
# everything here uses the mock_env_path
|
||||||
@ -539,6 +540,35 @@ def test_env_with_included_config_scope():
|
|||||||
for x in e._get_environment_specs())
|
for x in e._get_environment_specs())
|
||||||
|
|
||||||
|
|
||||||
|
def test_env_with_included_config_var_path():
|
||||||
|
config_var_path = os.path.join('$tempdir', 'included-config.yaml')
|
||||||
|
test_config = """\
|
||||||
|
env:
|
||||||
|
include:
|
||||||
|
- %s
|
||||||
|
specs:
|
||||||
|
- mpileaks
|
||||||
|
""" % config_var_path
|
||||||
|
|
||||||
|
_env_create('test', StringIO(test_config))
|
||||||
|
e = ev.read('test')
|
||||||
|
|
||||||
|
config_real_path = substitute_path_variables(config_var_path)
|
||||||
|
fs.mkdirp(os.path.dirname(config_real_path))
|
||||||
|
with open(config_real_path, 'w') as f:
|
||||||
|
f.write("""\
|
||||||
|
packages:
|
||||||
|
mpileaks:
|
||||||
|
version: [2.2]
|
||||||
|
""")
|
||||||
|
|
||||||
|
with e:
|
||||||
|
e.concretize()
|
||||||
|
|
||||||
|
assert any(x.satisfies('mpileaks@2.2')
|
||||||
|
for x in e._get_environment_specs())
|
||||||
|
|
||||||
|
|
||||||
def test_env_config_precedence():
|
def test_env_config_precedence():
|
||||||
test_config = """\
|
test_config = """\
|
||||||
env:
|
env:
|
||||||
|
Loading…
Reference in New Issue
Block a user