diff options
Diffstat (limited to 'src/lib/conf.sh.in')
-rw-r--r-- | src/lib/conf.sh.in | 36 |
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 |