summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/spack/spack/schema/packages.py10
-rw-r--r--lib/spack/spack/test/cmd/config.py21
2 files changed, 30 insertions, 1 deletions
diff --git a/lib/spack/spack/schema/packages.py b/lib/spack/spack/schema/packages.py
index 16a8a223ef..2efe00991a 100644
--- a/lib/spack/spack/schema/packages.py
+++ b/lib/spack/spack/schema/packages.py
@@ -128,6 +128,14 @@ def update(data):
changed = False
for cfg_object in data.values():
externals = []
+
+ # If we don't have these deprecated attributes, continue
+ if not any(x in cfg_object for x in ('paths', 'modules')):
+ continue
+
+ # If we arrive here we need to make some changes i.e.
+ # we need to remove and eventually convert some attributes
+ changed = True
paths = cfg_object.pop('paths', {})
for spec, prefix in paths.items():
externals.append({
@@ -141,6 +149,6 @@ def update(data):
'modules': [str(module)]
})
if externals:
- changed = True
cfg_object['externals'] = externals
+
return changed
diff --git a/lib/spack/spack/test/cmd/config.py b/lib/spack/spack/test/cmd/config.py
index 97b76dbee1..112d88f342 100644
--- a/lib/spack/spack/test/cmd/config.py
+++ b/lib/spack/spack/test/cmd/config.py
@@ -551,6 +551,27 @@ packages:
assert '# Another comment after the outdated section' in text
+@pytest.mark.regression('18050')
+def test_config_update_works_for_empty_paths(mutable_config):
+ # Create an outdated config file with empty "paths" and "modules"
+ scope = spack.config.default_modify_scope()
+ cfg_file = spack.config.config.get_config_filename(scope, 'packages')
+ with open(cfg_file, mode='w') as f:
+ f.write("""
+packages:
+ cmake:
+ paths: {}
+ modules: {}
+ buildable: False
+""")
+
+ # Try to update it, it should not raise errors
+ output = config('update', '-y', 'packages')
+
+ # This ensures that we updated the configuration
+ assert '[backup=' in output
+
+
def check_update(data):
"""Check that the data from the packages_yaml_v015
has been updated.