From: Antonio Ospite Date: Thu, 13 Dec 2018 23:10:02 +0000 (+0100) Subject: populate-fully.sh: force entering the repository if the lock not valid anymore X-Git-Url: https://git.ao2.it/config/vcsh.git/commitdiff_plain/3535ec27f70d73034e315faf7e3ded8c75c0413d?ds=sidebyside populate-fully.sh: force entering the repository if the lock not valid anymore If the vcsh instance which previously acquired the lock does not exist anymore, the lock is invalid and can be taken by the current instance for the repository it is entering. --- 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"