commit 07a98ca766aedbddf2984e54e8b06ae94b81d5fe
parent 81e681c48ac8bb8f15fef0f5ff693a23de3a956c
Author: Jan Pobrislo <ccx@webprojekty.cz>
Date: Thu, 26 Jun 2014 21:27:11 +0200
conditional variable passing, error out gracefully on undefined variables
Diffstat:
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/bin/confz b/bin/confz
@@ -96,6 +96,10 @@ require() {
# <variables> are variable assignments in the form of:
# foo=bar -- sets ${vars[foo]} in calee to value "bar"
# :foo -- passes ${vars[foo]} from caller to calee
+ # ?foo=bar -- sets ${vars[foo]} in calee to value of ${vars[bar]}
+ # iff it is defined in the caller
+ # ?foo -- passes ${vars[foo]} from caller to calee iff it is defined
+ # in the caller
# %foo -- passes ${vars[foo]} from callee to caller
# %foo=bar -- passes ${vars[foo]} from callee
# to variable ${vars[bar]} of caller
@@ -119,7 +123,12 @@ require() {
# parse variable assignments
while (( $# )); do
case $1 in
- (:*) setvar ${1#:} ${vars_prev[${1#:}]};;
+ (:*) ((${+vars_prev[${1#:}]})) || \
+ die "variable ${(qqq)1#:} not set, passed as :argument"
+ setvar ${1#:} ${vars_prev[${1#:}]};;
+ (\?*=*) (($+vars_prev[${${1#\?}#*=})) && \
+ setvar ${${1#\?}%%=*} $vars_prev[${${1#\?}#*=};;
+ (\?*) setvar ${1#\?} ${vars_prev[${1#\?}]};;
(%*=*) lift[${${1#%}%%=*}]=${${1#%}#*=};;
(%*) lift[${1#%}]=${1#%};;
(*=*) setvar ${1%%=*} ${1#*=};;
@@ -185,6 +194,8 @@ require() {
# lift %variables from calee to caller
for outer inner in ${(kv)lift}; do
+ ((${+vars_prev[$inner]})) || \
+ die "variable ${(qqq)inner} not set, was requested by caller as ${(qqq)outer}"
setvar $outer ${vars_prev[$inner]}
done
}