tools: one Gradle lock helper (gradle-lock.sh) for gradle-serial.sh and clean-builds.sh

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TQd3pEP9UeN2uifbHknQ7B
This commit is contained in:
2026-10-18 22:11:07 +02:00
parent 18c527f018
commit 2fac1ecba0
3 changed files with 32 additions and 16 deletions
+24
View File
@@ -0,0 +1,24 @@
#!/bin/sh
# The one-Gradle-build-at-a-time lock (CLAUDE.md › Build and verify). Sourced, not run, by tools/gradle-serial.sh,
# tools/clean-builds.sh, infra/dev/build.sh and infra/build-images.sh; plain POSIX sh, so sh and bash scripts share it.
# The lock is a directory holding the pid of its owner; a lock whose owner has died is taken over.
# shellcheck disable=SC2034 # KVITT_GRADLE_LOCK is used by the scripts that source this file
KVITT_GRADLE_LOCK=/tmp/kvitt-gradle.lock
# Prints the pid of the live process holding the lock and succeeds; fails when nobody holds it.
gradle_lock_holder() {
_pid=$(cat "$KVITT_GRADLE_LOCK/pid" 2>/dev/null) || return 1
[ -n "$_pid" ] && kill -0 "$_pid" 2>/dev/null || return 1
printf '%s\n' "$_pid"
}
# Waits until the lock is free, then takes it for this shell ($$). The caller removes it on exit:
# trap 'rm -rf "$KVITT_GRADLE_LOCK"' EXIT INT TERM HUP
gradle_lock_acquire() {
while ! mkdir "$KVITT_GRADLE_LOCK" 2>/dev/null; do
_pid=$(cat "$KVITT_GRADLE_LOCK/pid" 2>/dev/null)
if [ -n "$_pid" ] && ! kill -0 "$_pid" 2>/dev/null; then rm -rf "$KVITT_GRADLE_LOCK"; continue; fi
sleep 5
done
echo $$ > "$KVITT_GRADLE_LOCK/pid"
}