diff options
author | Karel Kočí <karel.koci@nic.cz> | 2018-08-28 11:03:12 +0200 |
---|---|---|
committer | Karel Kočí <karel.koci@nic.cz> | 2018-08-28 11:03:12 +0200 |
commit | e0d47569fa05a84feb6401b52c91d61e814003dd (patch) | |
tree | 3c0401aa019b4e71f2b9d43c86f537c50e1f9e56 /scripts | |
parent | 4fb1e1ccb7825c4ae42d98c882978281868974d2 (diff) | |
download | laminar-cnf-e0d47569fa05a84feb6401b52c91d61e814003dd.tar.gz laminar-cnf-e0d47569fa05a84feb6401b52c91d61e814003dd.tar.bz2 laminar-cnf-e0d47569fa05a84feb6401b52c91d61e814003dd.zip |
Implement some lock cleaning
I hope that this will work.
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/utils | 36 |
1 files changed, 29 insertions, 7 deletions
diff --git a/scripts/utils b/scripts/utils index c096f29..0034d9b 100644 --- a/scripts/utils +++ b/scripts/utils @@ -1,15 +1,35 @@ # vim: ft=sh -# Simple echo wrapper for stage marking +## Simple echo wrappers ######################################################### echo_stage() { - echo -e "\033[1;34m========== $@ ==========\033[0m" + echo -e "\033[1;34m========== $@ ==========\033[0m" >&2 } - -# Simple echo wrapper for stage marking echo_info() { - echo -e "\033[1;32m---------- $@ ----------\033[0m" + echo -e "\033[1;32m---------- $@ ----------\033[0m" >&2 +} +echo_fail() { + echo -e "\033[1;31m---------- $@ ----------\033[0m" >&2 + return 1 +} + +## Cleanup handler ############################################################## +_LAMINAR_LOCKS="" +_handle_exit() { + # Free all locks + for LOCK in $_LAMINAR_LOCKS; do + laminarc unlock "$(basename "$0")-$LOCK" + done +} +trap _handle_exit EXIT + +# Verify that we are running in process that was configured with trap (not in +# subprocess) +_check_trap() { + [ -n "$(trap -p EXIT)" ] || \ + echo_fail "Unable to use this function as trap handling is not available in subprocess" } +################################################################################# # Fetch bare git repository to WORKSPACE # First argument has to be a source URL # Second argument is name of directory to which will be repository cloned to. @@ -36,13 +56,15 @@ git_fetch() { # Lock special lock for this job # Extension appended to lock name has to be provided as first argument laminar_self_lock() { - # TODO trap release + _check_trap + _LAMINAR_LOCKS="$_LAMINAR_LOCKS $1" laminarc lock "$(basename "$0")-$1" } # Unlock special lock for this job # Extension appended to lock name has to be provided as first argument laminar_self_unlock() { - # TODO remove trap release + _check_trap laminarc unlock "$(basename "$0")-$1" + _LAMINAR_LOCKS="$(echo "$_LAMINAR_LOCKS" | sed "s/ $1//")" } |