From 8caa976ca4c5dd4b399d02ebc198d3a9db1e7bdb Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Mon, 3 Jan 2022 10:48:58 +0000 Subject: lock concurrent git commands. also log bash pid. --- lib/git.source.sh | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'lib/git.source.sh') diff --git a/lib/git.source.sh b/lib/git.source.sh index c502b00..c51707b 100644 --- a/lib/git.source.sh +++ b/lib/git.source.sh @@ -1,3 +1,28 @@ +# Git can not run concurrently +git::_lock () { + local -r lock="${CONTENT_BASE_DIR}/git.lock" + + while test -d $lock; do + sleep 0.1 + done + while ! mkdir $lock 2>/dev/null; do + sleep 0.1 + done +} + +git::_unlock () { + local -r lock="${CONTENT_BASE_DIR}/git.lock" + rmdir $lock + # log DEBUG "Removed $lock" +} + +git::cleanup () { + local -r lock="${CONTENT_BASE_DIR}/git.lock" + if [ -d "$lock" ]; then + git::_unlock + fi +} + # Add a static content file to git git::add () { if [[ "$USE_GIT" != yes ]]; then @@ -8,9 +33,11 @@ git::add () { local file="$1"; shift file=${file/$content_dir/.\/} + git::_lock cd "$content_dir" &>/dev/null git add "$file" cd - &>/dev/null + git::_unlock } # Remove a static content file from git @@ -23,9 +50,11 @@ git::rm () { local file="$1"; shift file=${file/$content_dir/.\/} + git::_lock cd "$content_dir" &>/dev/null git rm "$file" cd - &>/dev/null + git::_unlock } # Commit all changes @@ -37,6 +66,7 @@ git::commit () { local -r content_dir="$CONTENT_BASE_DIR/$1"; shift local -r message="$1"; shift + git::_lock cd "$content_dir" &>/dev/null set +e git commit -a -m "$message" @@ -47,4 +77,5 @@ git::commit () { fi set -e cd - &>/dev/null + git::_unlock } -- cgit v1.2.3