summaryrefslogtreecommitdiff
path: root/src/lib/conf.sh.in
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/conf.sh.in')
-rw-r--r--src/lib/conf.sh.in36
1 files changed, 22 insertions, 14 deletions
diff --git a/src/lib/conf.sh.in b/src/lib/conf.sh.in
index 15666a6..0ff88f9 100644
--- a/src/lib/conf.sh.in
+++ b/src/lib/conf.sh.in
@@ -107,43 +107,51 @@ list_envvars() {
# High-level generic functions #################################################
-# Usage: load_conf $slug.conf [VAR1 VAR2...]
+# Usage: load_conf {$slug.conf|$abspath} [VAR1 VAR2...]
#
# Loads the configuration files for $slug in the proper order, and
# optionally verify that certain variables are set.
load_conf() {
- [[ "$1" = *.conf ]] || libremessages panic || exit 1 # $EXIT_FAILURE
- local slug=${1%.conf}
- shift
-
+ [[ $1 = /* || $1 = *.conf ]] || libremessages panic || exit 1 # $EXIT_FAILURE
+ local files envvars
+ if [[ $1 = /* ]]; then
+ files=("$1")
+ envvars=()
+ shift
+ else
+ local slug=${1%.conf}
+ shift
+ readarray -t files < <(list_files "$slug")
+ readarray -t envvars < <(list_envvars "$slug")
+ fi
local var file
# Save the existing versions at _VARNAME
- while read -r var; do
+ for var in "${envvars[@]}"; do
[[ -n ${!var:-} ]] && eval "local _$var=\${$var}"
- done < <(list_envvars "$slug")
+ done
# Load the files
- while read -r file; do
+ for file in "${files[@]}"; do
if [[ -r $file ]]; then
. "$file" || return 6 # $EXIT_NOTCONFIGURED
fi
- done < <(list_files "$slug")
+ done
# Restore the _SAVED versions
- while read -r var; do
+ for var in "${envvars[@]}"; do
eval "$var=\${_$var:-\${$var:-}}"
- done < <(list_envvars "$slug")
+ done
# Verify that the variables we need were set
declare -i ret=0 # $EXIT_SUCCESS
for var in "$@"; do
if [[ -z ${!var:-} ]]; then
- if [[ $(list_files "$slug"|wc -l) -gt 1 ]]; then
+ if [[ ${#files[@]} -gt 1 ]]; then
libremessages _l print "Configure '%s' in one of:" "$var"
- list_files "$slug" | sed 's/./ -> &/'
+ printf ' -> %s\n' "${files[@]}"
else
- libremessages _l print "Configure '%s' in '%s'" "$var" "$(list_files "$slug")"
+ libremessages _l print "Configure '%s' in '%s'" "$var" "${files[0]}"
fi
ret=6 # $EXIT_NOTCONFIGURED
fi