From 05128d533225b75f35f79a1f55b04556b7e9736b Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Wed, 24 May 2017 15:17:59 -0400 Subject: Merge conf.sh:load_files and conf.sh:check_vars into load_conf --- src/lib/conf.sh.in | 50 +++++++++++++++++++++----------------------------- 1 file changed, 21 insertions(+), 29 deletions(-) (limited to 'src/lib/conf.sh.in') diff --git a/src/lib/conf.sh.in b/src/lib/conf.sh.in index 18760e1..7d1646b 100644 --- a/src/lib/conf.sh.in +++ b/src/lib/conf.sh.in @@ -104,22 +104,26 @@ list_envvars() { # High-level generic functions ################################################# -# Usage: load_files $slug -# Loads the configuration files for $slug in the proper order. -load_files() { - local slug=$1 - local var - local file +# Usage: load_conf $slug.conf [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 + local slug=${1%.conf} + shift + + local var file # Save the existing versions at _VARNAME while read -r var; do - [[ -n ${!var:-} ]] && eval "_$var=\${$var}" + [[ -n ${!var:-} ]] && eval "local _$var=\${$var}" done < <(list_envvars "$slug") # Load the files while read -r file; do if [[ -r $file ]]; then - . "$file" || return 1 + . "$file" || return 6 fi done < <(list_files "$slug") @@ -127,33 +131,21 @@ load_files() { while read -r var; do eval "$var=\${_$var:-\${$var:-}}" done < <(list_envvars "$slug") -} - -# Usage: check_vars $slug VAR1 VAR2... -# Check whether the variables listed are properly set. -# If not, it prints a message saying to set them in the configuration file(s) -# for $slug. -check_vars() { - local slug=$1; shift - local ret=0 - - local VAR - for VAR in "$@"; do - if [[ -z ${!VAR:-} ]]; then + # Verify that the variables we need were set + declare -i ret=0 + for var in "$@"; do + if [[ -z ${!var:-} ]]; then if [[ $(list_files "$slug"|wc -l) -gt 1 ]]; then - libremessages _l print "Configure '%s' in one of:" "$VAR" + libremessages _l print "Configure '%s' in one of:" "$var" list_files "$slug" | sed 's/./ -> &/' else - libremessages _l print "Configure '%s' in '%s'" "$VAR" "$(list_files "$slug")" + libremessages _l print "Configure '%s' in '%s'" "$var" "$(list_files "$slug")" fi - ret=1 + ret=6 fi done >&2 - - if [[ $ret != 0 ]]; then - return 1 - fi + return $ret } # Usage: get_var @@ -163,7 +155,7 @@ get_var() ( local slug=$1 local setting=$2 local default=$3 - load_files "$slug" + load_conf "$slug.conf" printf '%s' "${!setting:-${default}}" ) -- cgit v1.2.3-54-g00ecf