X-Git-Url: https://git.ao2.it/config/vcsh.git/blobdiff_plain/c6461aa97fe3711c2055721aa37d8b0d19579f49..3535ec27f70d73034e315faf7e3ded8c75c0413d:/.config/vcsh/hooks-available/populate-fully.sh diff --git a/.config/vcsh/hooks-available/populate-fully.sh b/.config/vcsh/hooks-available/populate-fully.sh index b038d1e..ceff12f 100755 --- a/.config/vcsh/hooks-available/populate-fully.sh +++ b/.config/vcsh/hooks-available/populate-fully.sh @@ -8,9 +8,24 @@ set -e # Only one vcsh instance at a time can have the working tree fully populated. LOCKDIR=/run/lock/vcsh -# Kill the parent process because vcsh does not catch the hook exit value. -# See: https://github.com/RichiH/vcsh/issues/251 -mkdir "$LOCKDIR" 2>/dev/null || { echo "An instance of vcsh already entered a repository." 1>&2; kill -- -$PPID;} +# If mkdir fails it means that the lock dir already exists and the lock is +# already active. +if ! mkdir "$LOCKDIR" 2>/dev/null; +then + echo "An instance of vcsh already entered a repository." 1>&2 + + # Exit vcsh if the process which keeps the lock is still alive. + if kill -0 $(cat "$LOCKDIR/pid") 2>/dev/null; + then + # Kill the parent process instead of just bailing out because vcsh does + # not catch the hook exit value. + # See: https://github.com/RichiH/vcsh/issues/251 + kill -- -$PPID + else + echo "The instance which entered the repository earlier does not exist anymore." 1>&2 + echo "Continuing anyway." 1>&2 + fi +fi # Lock on the parent pid because the hooks are launched as children of vcsh. echo $PPID > "$LOCKDIR/pid"