Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
S
Spack
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
eic_tools
Spack
Commits
fc8d18eb
Commit
fc8d18eb
authored
9 years ago
by
Todd Gamblin
Browse files
Options
Downloads
Plain Diff
Merge branch 'bugfix/config' of
git://github.com/hegner/spack
into hegner-bugfix/config
parents
9030541e
c1e6b521
Branches
Branches containing commit
Tags
Tags containing commit
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
lib/spack/spack/config.py
+20
-14
20 additions, 14 deletions
lib/spack/spack/config.py
lib/spack/spack/test/config.py
+10
-0
10 additions, 0 deletions
lib/spack/spack/test/config.py
with
30 additions
and
14 deletions
lib/spack/spack/config.py
+
20
−
14
View file @
fc8d18eb
...
@@ -129,7 +129,6 @@
...
@@ -129,7 +129,6 @@
import
llnl.util.tty
as
tty
import
llnl.util.tty
as
tty
from
llnl.util.filesystem
import
mkdirp
from
llnl.util.filesystem
import
mkdirp
import
copy
import
spack
import
spack
from
spack.error
import
SpackError
from
spack.error
import
SpackError
...
@@ -306,13 +305,14 @@ def set_pp_defaults(validator, properties, instance, schema):
...
@@ -306,13 +305,14 @@ def set_pp_defaults(validator, properties, instance, schema):
yield
err
yield
err
return
validators
.
extend
(
validator_class
,
{
return
validators
.
extend
(
validator_class
,
{
"
properties
"
:
set_defaults
,
"
properties
"
:
set_defaults
,
"
patternProperties
"
:
set_pp_defaults
"
patternProperties
"
:
set_pp_defaults
})
})
DefaultSettingValidator
=
extend_with_default
(
Draft4Validator
)
DefaultSettingValidator
=
extend_with_default
(
Draft4Validator
)
def
validate_section
(
data
,
schema
):
def
validate_section
(
data
,
schema
):
"""
Validate data read in from a Spack YAML file.
"""
Validate data read in from a Spack YAML file.
...
@@ -347,16 +347,14 @@ def get_section_filename(self, section):
...
@@ -347,16 +347,14 @@ def get_section_filename(self, section):
validate_section_name
(
section
)
validate_section_name
(
section
)
return
os
.
path
.
join
(
self
.
path
,
"
%s.yaml
"
%
section
)
return
os
.
path
.
join
(
self
.
path
,
"
%s.yaml
"
%
section
)
def
get_section
(
self
,
section
):
def
get_section
(
self
,
section
):
if
not
section
in
self
.
sections
:
if
section
not
in
self
.
sections
:
path
=
self
.
get_section_filename
(
section
)
path
=
self
.
get_section_filename
(
section
)
schema
=
section_schemas
[
section
]
schema
=
section_schemas
[
section
]
data
=
_read_config_file
(
path
,
schema
)
data
=
_read_config_file
(
path
,
schema
)
self
.
sections
[
section
]
=
data
self
.
sections
[
section
]
=
data
return
self
.
sections
[
section
]
return
self
.
sections
[
section
]
def
write_section
(
self
,
section
):
def
write_section
(
self
,
section
):
filename
=
self
.
get_section_filename
(
section
)
filename
=
self
.
get_section_filename
(
section
)
data
=
self
.
get_section
(
section
)
data
=
self
.
get_section
(
section
)
...
@@ -370,7 +368,6 @@ def write_section(self, section):
...
@@ -370,7 +368,6 @@ def write_section(self, section):
except
(
yaml
.
YAMLError
,
IOError
)
as
e
:
except
(
yaml
.
YAMLError
,
IOError
)
as
e
:
raise
ConfigFileError
(
"
Error writing to config file:
'
%s
'"
%
str
(
e
))
raise
ConfigFileError
(
"
Error writing to config file:
'
%s
'"
%
str
(
e
))
def
clear
(
self
):
def
clear
(
self
):
"""
Empty cached config information.
"""
"""
Empty cached config information.
"""
self
.
sections
=
{}
self
.
sections
=
{}
...
@@ -476,7 +473,7 @@ def they_are(t):
...
@@ -476,7 +473,7 @@ def they_are(t):
# Source dict is merged into dest.
# Source dict is merged into dest.
elif
they_are
(
dict
):
elif
they_are
(
dict
):
for
sk
,
sv
in
source
.
iteritems
():
for
sk
,
sv
in
source
.
iteritems
():
if
not
sk
in
dest
:
if
sk
not
in
dest
:
dest
[
sk
]
=
copy
.
copy
(
sv
)
dest
[
sk
]
=
copy
.
copy
(
sv
)
else
:
else
:
dest
[
sk
]
=
_merge_yaml
(
dest
[
sk
],
source
[
sk
])
dest
[
sk
]
=
_merge_yaml
(
dest
[
sk
],
source
[
sk
])
...
@@ -545,7 +542,10 @@ def update_config(section, update_data, scope=None):
...
@@ -545,7 +542,10 @@ def update_config(section, update_data, scope=None):
# read in the config to ensure we've got current data
# read in the config to ensure we've got current data
configuration
=
get_config
(
section
)
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.
# read only the requested section's data.
scope
.
sections
[
section
]
=
{
section
:
configuration
}
scope
.
sections
[
section
]
=
{
section
:
configuration
}
...
@@ -587,16 +587,20 @@ def spec_externals(spec):
...
@@ -587,16 +587,20 @@ def spec_externals(spec):
def
is_spec_buildable
(
spec
):
def
is_spec_buildable
(
spec
):
"""
Return true if the spec pkgspec is configured as buildable
"""
"""
Return true if the spec pkgspec is configured as buildable
"""
allpkgs
=
get_config
(
'
packages
'
)
allpkgs
=
get_config
(
'
packages
'
)
name
=
spec
.
name
if
spec
.
name
not
in
allpkgs
:
if
not
spec
.
name
in
allpkgs
:
return
True
return
True
if
not
'
buildable
'
in
allpkgs
[
spec
.
name
]:
if
'
buildable
'
not
in
allpkgs
[
spec
.
name
]:
return
True
return
True
return
allpkgs
[
spec
.
name
][
'
buildable
'
]
return
allpkgs
[
spec
.
name
][
'
buildable
'
]
class
ConfigError
(
SpackError
):
pass
class
ConfigError
(
SpackError
):
class
ConfigFileError
(
ConfigError
):
pass
pass
class
ConfigFileError
(
ConfigError
):
pass
def
get_path
(
path
,
data
):
def
get_path
(
path
,
data
):
if
path
:
if
path
:
...
@@ -604,6 +608,7 @@ def get_path(path, data):
...
@@ -604,6 +608,7 @@ def get_path(path, data):
else
:
else
:
return
data
return
data
class
ConfigFormatError
(
ConfigError
):
class
ConfigFormatError
(
ConfigError
):
"""
Raised when a configuration format does not match its schema.
"""
"""
Raised when a configuration format does not match its schema.
"""
def
__init__
(
self
,
validation_error
,
data
):
def
__init__
(
self
,
validation_error
,
data
):
...
@@ -638,5 +643,6 @@ def __init__(self, validation_error, data):
...
@@ -638,5 +643,6 @@ def __init__(self, validation_error, data):
message
=
'
%s: %s
'
%
(
location
,
validation_error
.
message
)
message
=
'
%s: %s
'
%
(
location
,
validation_error
.
message
)
super
(
ConfigError
,
self
).
__init__
(
message
)
super
(
ConfigError
,
self
).
__init__
(
message
)
class
ConfigSanityError
(
ConfigFormatError
):
class
ConfigSanityError
(
ConfigFormatError
):
"""
Same as ConfigFormatError, raised when config is written by Spack.
"""
"""
Same as ConfigFormatError, raised when config is written by Spack.
"""
This diff is collapsed.
Click to expand it.
lib/spack/spack/test/config.py
+
10
−
0
View file @
fc8d18eb
...
@@ -72,6 +72,10 @@
...
@@ -72,6 +72,10 @@
}
}
}
}
# Some Sample repo data
repos_low
=
[
"
/some/path
"
]
repos_high
=
[
"
/some/other/path
"
]
class
ConfigTest
(
MockPackagesTest
):
class
ConfigTest
(
MockPackagesTest
):
def
setUp
(
self
):
def
setUp
(
self
):
...
@@ -95,6 +99,12 @@ def check_config(self, comps, arch, *compiler_names):
...
@@ -95,6 +99,12 @@ def check_config(self, comps, arch, *compiler_names):
actual
=
config
[
arch
][
key
][
c
]
actual
=
config
[
arch
][
key
][
c
]
self
.
assertEqual
(
expected
,
actual
)
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
):
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
'
)
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment