diff options
author | Todd Gamblin <tgamblin@llnl.gov> | 2021-10-28 10:46:51 -0700 |
---|---|---|
committer | Peter Scheibel <scheibel1@llnl.gov> | 2021-10-28 15:37:44 -0700 |
commit | 233dabbd4fdcb1806e73fcedb1a12f6bdd624021 (patch) | |
tree | 5c316ed974aad507273178b6d8fb72572fb497cf /share | |
parent | 374e3465c5efe6cc794141967885be2824f8e10a (diff) | |
download | spack-233dabbd4fdcb1806e73fcedb1a12f6bdd624021.tar.gz spack-233dabbd4fdcb1806e73fcedb1a12f6bdd624021.tar.bz2 spack-233dabbd4fdcb1806e73fcedb1a12f6bdd624021.tar.xz spack-233dabbd4fdcb1806e73fcedb1a12f6bdd624021.zip |
bugfix: config edit should work with a malformed `spack.yaml`
If you don't format `spack.yaml` correctly, `spack config edit` still fails and
you have to edit your `spack.yaml` manually.
- [x] Add some code to `_main()` to defer `ConfigFormatError` when loading the
environment, until we know what command is being run.
- [x] Make `spack config edit` use `SPACK_ENV` instead of the config scope
object to find `spack.yaml`, so it can work even if the environment is bad.
Co-authored-by: scheibelp <scheibel1@llnl.gov>
Diffstat (limited to 'share')
-rwxr-xr-x | share/spack/qa/run-unit-tests | 2 | ||||
-rwxr-xr-x | share/spack/qa/test-env-cfg.sh | 73 |
2 files changed, 75 insertions, 0 deletions
diff --git a/share/spack/qa/run-unit-tests b/share/spack/qa/run-unit-tests index 935b1905d1..b71103ea31 100755 --- a/share/spack/qa/run-unit-tests +++ b/share/spack/qa/run-unit-tests @@ -49,6 +49,8 @@ fi $coverage_run $(which spack) unit-test -x --verbose +bash "$QA_DIR/test-env-cfg.sh" + # Delete the symlink going from ./lib/spack/docs/_spack_root back to # the initial directory, since it causes ELOOP errors with codecov/actions@2 if [[ "$COVERAGE" == "true" ]]; then diff --git a/share/spack/qa/test-env-cfg.sh b/share/spack/qa/test-env-cfg.sh new file mode 100755 index 0000000000..ccc0e6e3b6 --- /dev/null +++ b/share/spack/qa/test-env-cfg.sh @@ -0,0 +1,73 @@ +#!/bin/bash +# +# Copyright 2013-2021 Lawrence Livermore National Security, LLC and other +# Spack Project Developers. See the top-level COPYRIGHT file for details. +# +# SPDX-License-Identifier: (Apache-2.0 OR MIT) + +# +# This script ensures that Spack can help users edit an environment's +# manifest file even when it has invalid configuration. +# + +export QA_DIR=$(dirname "$0") +export SHARE_DIR=$(cd "$QA_DIR/.." && pwd) + +# Include convenience functions +. "$QA_DIR/test-framework.sh" +. "$QA_DIR/setup.sh" + +# Source setup-env.sh before tests +. "$SHARE_DIR/setup-env.sh" + +env_cfg="" + +function cleanup { + # Regardless of whether the test fails or succeeds, we can't remove the + # environment without restoring spack.yaml to match the schema + if [ ! -z "env_cfg" ]; then + echo "\ +spack: + specs: [] + view: False +" > "$env_cfg" + fi + + spack env deactivate + spack env rm -y broken-cfg-env +} + +trap cleanup EXIT + +spack env create broken-cfg-env +echo "Activating test environment" +spack env activate broken-cfg-env +env_cfg=`spack config --scope=env:broken-cfg-env edit --print-file` +# Save this, so we can make sure it is reported correctly when the environment +# contains broken configuration +orig_manifest_path="$env_cfg" + +echo "Environment config file: $env_cfg" +# Make sure we got a manifest file path +contains "spack.yaml" echo "$env_cfg" + +# Create an invalid packages.yaml configuration for the environment +echo "\ +spack: + specs: [] + view: False + packages: + what: +" > "$env_cfg" + +echo "Try 'spack config edit' with broken environment" +manifest_path=`spack config edit --print-file` +# Re-run command for coverage purposes +$coverage_run $(which spack) config edit --print-file + +if [ $orig_manifest_path = $manifest_path ]; then + pass +else + fail +fi + |