summaryrefslogtreecommitdiff
path: root/share
diff options
context:
space:
mode:
authorTodd Gamblin <tgamblin@llnl.gov>2021-10-28 10:46:51 -0700
committerPeter Scheibel <scheibel1@llnl.gov>2021-10-28 15:37:44 -0700
commit233dabbd4fdcb1806e73fcedb1a12f6bdd624021 (patch)
tree5c316ed974aad507273178b6d8fb72572fb497cf /share
parent374e3465c5efe6cc794141967885be2824f8e10a (diff)
downloadspack-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-xshare/spack/qa/run-unit-tests2
-rwxr-xr-xshare/spack/qa/test-env-cfg.sh73
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
+