-
- Downloads
Preserve comments for Spack YAML objects (#11602)
This updates the configuration loading/dumping logic (now called load_config/dump_config) in spack_yaml to preserve comments (by using ruamel.yaml's RoundTripLoader). This has two effects: * environment spack.yaml files expect to retain comments, which load_config now supports. By using load_config, users can now use the ':' override syntax that was previously unavailable for environment configs (but was available for other config files). * config files now retain user comments by default (although in cases where Spack updates/overwrites config, the comments can still be removed). Details: * Subclasses `RoundTripLoader`/`RoundTripDumper` to parse yaml into ruamel's `CommentedMap` and analogous data structures * Applies filename info directly to ruamel objects in cases where the updated loader returns those * Copies management of sections in `SingleFileScope` from #10651 to allow overrides to occur * Updates the loader/dumper to handle the processing of overrides by specifically checking for the `:` character * Possibly the most controversial aspect, but without that, the parsed objects have to be reconstructed (i.e. as was done in `mark_overrides`). It is possible that `mark_overrides` could remain and a deep copy will not cause problems, but IMO that's generally worth avoiding. * This is also possibly controversial because Spack YAML strings can include `:`. My reckoning is that this only occurs for version specifications, so it is safe to check for `endswith(':') and not ('@' in string)` * As a consequence, this PR ends up reserving spack yaml functions load_config/dump_config exclusively for the purpose of storing spack config
Showing
- lib/spack/spack/binary_distribution.py 3 additions, 3 deletionslib/spack/spack/binary_distribution.py
- lib/spack/spack/cmd/release_jobs.py 1 addition, 1 deletionlib/spack/spack/cmd/release_jobs.py
- lib/spack/spack/config.py 32 additions, 47 deletionslib/spack/spack/config.py
- lib/spack/spack/environment.py 3 additions, 4 deletionslib/spack/spack/environment.py
- lib/spack/spack/filesystem_view.py 1 addition, 1 deletionlib/spack/spack/filesystem_view.py
- lib/spack/spack/hooks/yaml_version_check.py 1 addition, 1 deletionlib/spack/spack/hooks/yaml_version_check.py
- lib/spack/spack/modules/common.py 1 addition, 1 deletionlib/spack/spack/modules/common.py
- lib/spack/spack/spec.py 4 additions, 7 deletionslib/spack/spack/spec.py
- lib/spack/spack/test/cmd/release_jobs.py 3 additions, 2 deletionslib/spack/spack/test/cmd/release_jobs.py
- lib/spack/spack/test/concretize_preferences.py 5 additions, 5 deletionslib/spack/spack/test/concretize_preferences.py
- lib/spack/spack/test/config.py 36 additions, 3 deletionslib/spack/spack/test/config.py
- lib/spack/spack/test/spack_yaml.py 1 addition, 1 deletionlib/spack/spack/test/spack_yaml.py
- lib/spack/spack/util/spack_yaml.py 80 additions, 102 deletionslib/spack/spack/util/spack_yaml.py
Loading
Please register or sign in to comment