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>
This commit is contained in:

committed by
Peter Scheibel

parent
374e3465c5
commit
233dabbd4f
@@ -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
|
||||
|
73
share/spack/qa/test-env-cfg.sh
Executable file
73
share/spack/qa/test-env-cfg.sh
Executable file
@@ -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
|
||||
|
Reference in New Issue
Block a user