summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTodd Gamblin <tgamblin@llnl.gov>2016-05-11 02:31:20 -0700
committerTodd Gamblin <tgamblin@llnl.gov>2016-05-11 02:31:20 -0700
commitfc8d18ebdc2bf7f2978518d731b8f8b74e9b4563 (patch)
treebca24438799c952f4d7d851876e437b68ab4e8c1
parent9030541e4bc3a77f90d16969b6fff0afa387847c (diff)
parentc1e6b5218438988d7dc2da5ca577fe5a8752d6e1 (diff)
downloadspack-fc8d18ebdc2bf7f2978518d731b8f8b74e9b4563.tar.gz
spack-fc8d18ebdc2bf7f2978518d731b8f8b74e9b4563.tar.bz2
spack-fc8d18ebdc2bf7f2978518d731b8f8b74e9b4563.tar.xz
spack-fc8d18ebdc2bf7f2978518d731b8f8b74e9b4563.zip
Merge branch 'bugfix/config' of git://github.com/hegner/spack into hegner-bugfix/config
-rw-r--r--lib/spack/spack/config.py34
-rw-r--r--lib/spack/spack/test/config.py10
2 files changed, 30 insertions, 14 deletions
diff --git a/lib/spack/spack/config.py b/lib/spack/spack/config.py
index 336d47cbb7..9da5d7aaf0 100644
--- a/lib/spack/spack/config.py
+++ b/lib/spack/spack/config.py
@@ -129,7 +129,6 @@ from ordereddict_backport import OrderedDict
import llnl.util.tty as tty
from llnl.util.filesystem import mkdirp
-import copy
import spack
from spack.error import SpackError
@@ -306,13 +305,14 @@ def extend_with_default(validator_class):
yield err
return validators.extend(validator_class, {
- "properties" : set_defaults,
- "patternProperties" : set_pp_defaults
+ "properties": set_defaults,
+ "patternProperties": set_pp_defaults
})
DefaultSettingValidator = extend_with_default(Draft4Validator)
+
def validate_section(data, schema):
"""Validate data read in from a Spack YAML file.
@@ -347,16 +347,14 @@ class ConfigScope(object):
validate_section_name(section)
return os.path.join(self.path, "%s.yaml" % section)
-
def get_section(self, section):
- if not section in self.sections:
+ if section not in self.sections:
path = self.get_section_filename(section)
schema = section_schemas[section]
data = _read_config_file(path, schema)
self.sections[section] = data
return self.sections[section]
-
def write_section(self, section):
filename = self.get_section_filename(section)
data = self.get_section(section)
@@ -370,7 +368,6 @@ class ConfigScope(object):
except (yaml.YAMLError, IOError) as e:
raise ConfigFileError("Error writing to config file: '%s'" % str(e))
-
def clear(self):
"""Empty cached config information."""
self.sections = {}
@@ -476,7 +473,7 @@ def _merge_yaml(dest, source):
# Source dict is merged into dest.
elif they_are(dict):
for sk, sv in source.iteritems():
- if not sk in dest:
+ if sk not in dest:
dest[sk] = copy.copy(sv)
else:
dest[sk] = _merge_yaml(dest[sk], source[sk])
@@ -545,7 +542,10 @@ def update_config(section, update_data, scope=None):
# read in the config to ensure we've got current data
configuration = get_config(section)
- configuration.update(update_data)
+ if isinstance(update_data, list):
+ configuration = update_data
+ else:
+ configuration.update(update_data)
# read only the requested section's data.
scope.sections[section] = {section: configuration}
@@ -587,16 +587,20 @@ def spec_externals(spec):
def is_spec_buildable(spec):
"""Return true if the spec pkgspec is configured as buildable"""
allpkgs = get_config('packages')
- name = spec.name
- if not spec.name in allpkgs:
+ if spec.name not in allpkgs:
return True
- if not 'buildable' in allpkgs[spec.name]:
+ if 'buildable' not in allpkgs[spec.name]:
return True
return allpkgs[spec.name]['buildable']
-class ConfigError(SpackError): pass
-class ConfigFileError(ConfigError): pass
+class ConfigError(SpackError):
+ pass
+
+
+class ConfigFileError(ConfigError):
+ pass
+
def get_path(path, data):
if path:
@@ -604,6 +608,7 @@ def get_path(path, data):
else:
return data
+
class ConfigFormatError(ConfigError):
"""Raised when a configuration format does not match its schema."""
def __init__(self, validation_error, data):
@@ -638,5 +643,6 @@ class ConfigFormatError(ConfigError):
message = '%s: %s' % (location, validation_error.message)
super(ConfigError, self).__init__(message)
+
class ConfigSanityError(ConfigFormatError):
"""Same as ConfigFormatError, raised when config is written by Spack."""
diff --git a/lib/spack/spack/test/config.py b/lib/spack/spack/test/config.py
index 3977f0e7d4..ed0797a541 100644
--- a/lib/spack/spack/test/config.py
+++ b/lib/spack/spack/test/config.py
@@ -72,6 +72,10 @@ b_comps = {
}
}
+# Some Sample repo data
+repos_low = [ "/some/path" ]
+repos_high = [ "/some/other/path" ]
+
class ConfigTest(MockPackagesTest):
def setUp(self):
@@ -95,6 +99,12 @@ class ConfigTest(MockPackagesTest):
actual = config[arch][key][c]
self.assertEqual(expected, actual)
+ def test_write_list_in_memory(self):
+ spack.config.update_config('repos', repos_low, 'test_low_priority')
+ spack.config.update_config('repos', repos_high, 'test_high_priority')
+ config = spack.config.get_config('repos')
+ self.assertEqual(config, repos_high+repos_low)
+
def test_write_key_in_memory(self):
# Write b_comps "on top of" a_comps.
spack.config.update_config('compilers', a_comps, 'test_low_priority')