Merge pull request #775 from epfl-scitas/fixes/config_update
fix: proper update of config file
This commit is contained in:
commit
8ce45d2161
@ -152,7 +152,7 @@ def main():
|
|||||||
command = spack.cmd.get_command(args.command)
|
command = spack.cmd.get_command(args.command)
|
||||||
try:
|
try:
|
||||||
return_val = command(parser, args)
|
return_val = command(parser, args)
|
||||||
except SpackError, e:
|
except SpackError as e:
|
||||||
e.die()
|
e.die()
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
sys.stderr.write('\n')
|
sys.stderr.write('\n')
|
||||||
|
@ -22,19 +22,18 @@
|
|||||||
# along with this program; if not, write to the Free Software Foundation,
|
# along with this program; if not, write to the Free Software Foundation,
|
||||||
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
##############################################################################
|
##############################################################################
|
||||||
import sys
|
|
||||||
import argparse
|
import argparse
|
||||||
|
import sys
|
||||||
|
|
||||||
import llnl.util.tty as tty
|
import llnl.util.tty as tty
|
||||||
from llnl.util.tty.color import colorize
|
|
||||||
from llnl.util.tty.colify import colify
|
|
||||||
from llnl.util.lang import index_by
|
|
||||||
|
|
||||||
import spack.compilers
|
import spack.compilers
|
||||||
import spack.spec
|
|
||||||
import spack.config
|
import spack.config
|
||||||
from spack.util.environment import get_path
|
import spack.spec
|
||||||
|
from llnl.util.lang import index_by
|
||||||
|
from llnl.util.tty.colify import colify
|
||||||
|
from llnl.util.tty.color import colorize
|
||||||
from spack.spec import CompilerSpec
|
from spack.spec import CompilerSpec
|
||||||
|
from spack.util.environment import get_path
|
||||||
|
|
||||||
description = "Manage compilers"
|
description = "Manage compilers"
|
||||||
|
|
||||||
|
@ -539,14 +539,16 @@ def update_config(section, update_data, scope=None):
|
|||||||
other yaml-ish structure.
|
other yaml-ish structure.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
# read in the config to ensure we've got current data
|
validate_section_name(section) # validate section name
|
||||||
get_config(section)
|
scope = validate_scope(scope) # get ConfigScope object from string.
|
||||||
|
|
||||||
validate_section_name(section) # validate section name
|
# read in the config to ensure we've got current data
|
||||||
scope = validate_scope(scope) # get ConfigScope object from string.
|
configuration = get_config(section)
|
||||||
|
|
||||||
|
configuration.update(update_data)
|
||||||
|
|
||||||
# read only the requested section's data.
|
# read only the requested section's data.
|
||||||
scope.sections[section] = { section : update_data }
|
scope.sections[section] = {section: configuration}
|
||||||
scope.write_section(section)
|
scope.write_section(section)
|
||||||
|
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@
|
|||||||
|
|
||||||
# Some sample compiler config data
|
# Some sample compiler config data
|
||||||
a_comps = {
|
a_comps = {
|
||||||
"all": {
|
"x86_64_E5v2_IntelIB": {
|
||||||
"gcc@4.7.3" : {
|
"gcc@4.7.3" : {
|
||||||
"cc" : "/gcc473",
|
"cc" : "/gcc473",
|
||||||
"cxx": "/g++473",
|
"cxx": "/g++473",
|
||||||
@ -53,7 +53,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
b_comps = {
|
b_comps = {
|
||||||
"all": {
|
"x86_64_E5v3": {
|
||||||
"icc@10.0" : {
|
"icc@10.0" : {
|
||||||
"cc" : "/icc100",
|
"cc" : "/icc100",
|
||||||
"cxx": "/icc100",
|
"cxx": "/icc100",
|
||||||
@ -85,27 +85,24 @@ def tearDown(self):
|
|||||||
super(ConfigTest, self).tearDown()
|
super(ConfigTest, self).tearDown()
|
||||||
shutil.rmtree(self.tmp_dir, True)
|
shutil.rmtree(self.tmp_dir, True)
|
||||||
|
|
||||||
|
def check_config(self, comps, arch, *compiler_names):
|
||||||
def check_config(self, comps, *compiler_names):
|
|
||||||
"""Check that named compilers in comps match Spack's config."""
|
"""Check that named compilers in comps match Spack's config."""
|
||||||
config = spack.config.get_config('compilers')
|
config = spack.config.get_config('compilers')
|
||||||
compiler_list = ['cc', 'cxx', 'f77', 'fc']
|
compiler_list = ['cc', 'cxx', 'f77', 'fc']
|
||||||
for key in compiler_names:
|
for key in compiler_names:
|
||||||
for c in compiler_list:
|
for c in compiler_list:
|
||||||
expected = comps['all'][key][c]
|
expected = comps[arch][key][c]
|
||||||
actual = config['all'][key][c]
|
actual = config[arch][key][c]
|
||||||
self.assertEqual(expected, actual)
|
self.assertEqual(expected, actual)
|
||||||
|
|
||||||
|
|
||||||
def test_write_key_in_memory(self):
|
def test_write_key_in_memory(self):
|
||||||
# Write b_comps "on top of" a_comps.
|
# Write b_comps "on top of" a_comps.
|
||||||
spack.config.update_config('compilers', a_comps, 'test_low_priority')
|
spack.config.update_config('compilers', a_comps, 'test_low_priority')
|
||||||
spack.config.update_config('compilers', b_comps, 'test_high_priority')
|
spack.config.update_config('compilers', b_comps, 'test_high_priority')
|
||||||
|
|
||||||
# Make sure the config looks how we expect.
|
# Make sure the config looks how we expect.
|
||||||
self.check_config(a_comps, 'gcc@4.7.3', 'gcc@4.5.0')
|
self.check_config(a_comps, 'x86_64_E5v2_IntelIB', 'gcc@4.7.3', 'gcc@4.5.0')
|
||||||
self.check_config(b_comps, 'icc@10.0', 'icc@11.1', 'clang@3.3')
|
self.check_config(b_comps, 'x86_64_E5v3', 'icc@10.0', 'icc@11.1', 'clang@3.3')
|
||||||
|
|
||||||
|
|
||||||
def test_write_key_to_disk(self):
|
def test_write_key_to_disk(self):
|
||||||
# Write b_comps "on top of" a_comps.
|
# Write b_comps "on top of" a_comps.
|
||||||
@ -116,5 +113,17 @@ def test_write_key_to_disk(self):
|
|||||||
spack.config.clear_config_caches()
|
spack.config.clear_config_caches()
|
||||||
|
|
||||||
# Same check again, to ensure consistency.
|
# Same check again, to ensure consistency.
|
||||||
self.check_config(a_comps, 'gcc@4.7.3', 'gcc@4.5.0')
|
self.check_config(a_comps, 'x86_64_E5v2_IntelIB', 'gcc@4.7.3', 'gcc@4.5.0')
|
||||||
self.check_config(b_comps, 'icc@10.0', 'icc@11.1', 'clang@3.3')
|
self.check_config(b_comps, 'x86_64_E5v3', 'icc@10.0', 'icc@11.1', 'clang@3.3')
|
||||||
|
|
||||||
|
def test_write_to_same_priority_file(self):
|
||||||
|
# Write b_comps in the same file as a_comps.
|
||||||
|
spack.config.update_config('compilers', a_comps, 'test_low_priority')
|
||||||
|
spack.config.update_config('compilers', b_comps, 'test_low_priority')
|
||||||
|
|
||||||
|
# Clear caches so we're forced to read from disk.
|
||||||
|
spack.config.clear_config_caches()
|
||||||
|
|
||||||
|
# Same check again, to ensure consistency.
|
||||||
|
self.check_config(a_comps, 'x86_64_E5v2_IntelIB', 'gcc@4.7.3', 'gcc@4.5.0')
|
||||||
|
self.check_config(b_comps, 'x86_64_E5v3', 'icc@10.0', 'icc@11.1', 'clang@3.3')
|
||||||
|
Loading…
Reference in New Issue
Block a user