diff options
author | Dave Reisner <dreisner@archlinux.org> | 2012-05-08 06:12:46 +0200 |
---|---|---|
committer | Dave Reisner <dreisner@archlinux.org> | 2012-05-16 23:55:54 +0200 |
commit | 018ab6e95cd194fe7aef6a66928759075e9259bd (patch) | |
tree | d8a8a830758d332779fa42478f5fb7ebf3d1a772 /mkinitcpio | |
parent | 0778982e386d15e381b8f7dddd2a2bd68e78236c (diff) | |
download | mkinitcpio-018ab6e95cd194fe7aef6a66928759075e9259bd.tar.gz mkinitcpio-018ab6e95cd194fe7aef6a66928759075e9259bd.tar.xz |
refactor error tracking in build hooks
Rather than catching errors solely from parse_hook via an ERR trap,
implement a RETURN trap which catches all errors from the core add_*
functions.
In the future, this may mean that support for MODULES/FILES/BINARIES
within hooks goes away, and those variables remain only in the config.
Signed-off-by: Dave Reisner <dreisner@archlinux.org>
Diffstat (limited to 'mkinitcpio')
-rwxr-xr-x | mkinitcpio | 13 |
1 files changed, 7 insertions, 6 deletions
@@ -351,10 +351,10 @@ else msg "Starting build: %s" "$KERNELVERSION" fi -# set errtrace and a trap to catch errors in parse_hook +# set functrace and trap to catch errors in add_* functions declare -i builderrors=0 -set -E -trap '[[ $FUNCNAME = parse_hook ]] && (( ++builderrors ))' ERR +set -o functrace +trap '(( $? )) && [[ $FUNCNAME = add_* ]] && (( ++builderrors ))' RETURN # save vars from $CONFIG; they will be parsed last for var in MODULES BINARIES FILES; do @@ -402,7 +402,8 @@ for var in cfg_{MODULES,BINARIES,FILES}; do done parse_hook -# reset the trap to catch all errors +# switch out the error handler to catch all errors +trap -- RETURN trap '(( ++builderrors ))' ERR if (( ${#ADDED_MODULES[*]} )); then @@ -425,8 +426,8 @@ else fi # unset errtrace and trap -set +E -trap ERR +set +o functrace +trap -- ERR declare -i status=0 declare -a pipesave |