# -*- sh -*-

# Example script that uses parentlock-sh-functions:
# PARENTLOCK_FILE=.mylock
# export PARENTLOCK_FILE
#. parentlock-sh-functions
#parentlock_set_unlock_workdir_trap_on_int_term_exit
#parentlock_lock_workdir_or_exit
#...
#parentlock_unlock_workdir_safe

# Note that
# parentlock_set_unlock_workdir_trap_on_int_term_exit

PARENTLOCK_SH_FUNCTIONS_API_MAJOR_VERSION=1
PARENTLOCK_SH_FUNCTIONS_API_MINOR_VERSION=0

if [ -z "$PARENTLOCK_FILE" ]; then
    echo 'parentlock-sh-functions: usage error: define lock file in $PARENTLOCK_FILE first'
    exit 1
fi

parentlock_lock_workdir_or_exit()
{
    if ! parentlock --lock --lockfile "$PARENTLOCK_FILE" $$; then
	echo "can't get lock $PARENTLOCK_FILE, exiting ..."
	exit 1
    fi
}

parentlock_unlock_workdir_safe()
{
    parentlock --unlock --lockfile "$PARENTLOCK_FILE" $$
}

# private
__parentlock_unlock_workdir_and_exit_trap()
{
    parentlock_unlock_workdir_safe
    exit
}

parentlock_set_unlock_workdir_trap_on_int_term_exit()
{
    trap __parentlock_unlock_workdir_and_exit_trap INT TERM EXIT
}

# for API 1.1, if really needed
#parentlock_unlock_workdir_force() {
#    rm -rf $PARENTLOCK_FILE ||:
#}
#parentlock_lock_workdir_force() {
#   echo $$ > $PARENTLOCK_FILE
#}
