mirror of https://github.com/dyne/zuper.git
made zuper idempotent (you can "source zuper" several times without errors)
This commit is contained in:
parent
41e1de2b30
commit
ad957af625
53
zuper
53
zuper
|
|
@ -22,11 +22,19 @@
|
||||||
# Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
# Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
|
||||||
|
|
||||||
|
if [[ ! -z ${zuper_version} ]]; then
|
||||||
|
warning "zuper version ::1 version:: was already loaded -- doing nothing" ${zuper_version}
|
||||||
|
return;
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
##########################
|
##########################
|
||||||
typeset -aU vars
|
typeset -aU vars
|
||||||
typeset -aU arrs
|
typeset -aU arrs
|
||||||
typeset -aU maps
|
typeset -aU maps
|
||||||
|
|
||||||
|
typeset -aU funs
|
||||||
|
|
||||||
vars=(DEBUG QUIET LOG)
|
vars=(DEBUG QUIET LOG)
|
||||||
arrs=(req freq)
|
arrs=(req freq)
|
||||||
|
|
||||||
|
|
@ -229,7 +237,13 @@ TRAPSTOP() { endgame STOP; return $? }
|
||||||
# TRAPZERR() { func "function returns non-zero." }
|
# TRAPZERR() { func "function returns non-zero." }
|
||||||
|
|
||||||
|
|
||||||
endgame() {
|
funs+=(__test_fn)
|
||||||
|
|
||||||
|
__test_fn(){
|
||||||
|
echo "foo"
|
||||||
|
}
|
||||||
|
|
||||||
|
function zuper_end endgame() {
|
||||||
fn "endgame $*"
|
fn "endgame $*"
|
||||||
|
|
||||||
# execute all no matter what
|
# execute all no matter what
|
||||||
|
|
@ -240,9 +254,46 @@ endgame() {
|
||||||
fn "destructor: $d"
|
fn "destructor: $d"
|
||||||
$d
|
$d
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# unset all the variables included in "vars"
|
||||||
|
for v in $vars; do
|
||||||
|
unset $v
|
||||||
|
done
|
||||||
|
|
||||||
|
# unset all the assoc-arrays included in "arrs"
|
||||||
|
for a in $arrs; do
|
||||||
|
unset $a
|
||||||
|
done
|
||||||
|
|
||||||
|
# unset all the maps included in "maps"
|
||||||
|
for m in $maps; do
|
||||||
|
unset $m
|
||||||
|
done
|
||||||
|
|
||||||
|
## We should also undefine the core zuper functions to make it
|
||||||
|
## really idempotent. I have added an array "funs" which contains
|
||||||
|
## the names of the functions to be undefined by endgame/zuper_end
|
||||||
|
## FIXME!!!! The only "registered" function so far is __test_fn,
|
||||||
|
## but if we like this we should register all the core zuper
|
||||||
|
## functions as soon as they are declared
|
||||||
|
for f in $funs; do
|
||||||
|
unfunction $f
|
||||||
|
done
|
||||||
|
unset maps
|
||||||
|
unset arrs
|
||||||
|
unset vars
|
||||||
|
unset funs
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
## This function should reinitialise zuper and all the variables
|
||||||
|
# zuper_restart(){
|
||||||
|
# endgame
|
||||||
|
# source zuper
|
||||||
|
# }
|
||||||
|
|
||||||
|
|
||||||
# Use this to make sure endgame() is called at exit.
|
# Use this to make sure endgame() is called at exit.
|
||||||
# unlike TRAPEXIT, the zshexit() hook is not called when functions exit.
|
# unlike TRAPEXIT, the zshexit() hook is not called when functions exit.
|
||||||
function zuper.exit zshexit() { endgame EXIT; return $? }
|
function zuper.exit zshexit() { endgame EXIT; return $? }
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue