Decision sheet D1-D10: hub CHANGELOG, architecture notes (01, 04, 05, 07, 08, 10), register (VERIFY states, R-912), STATUS, report; decoy suite runs in a git worktree
gates / gates (push) Successful in 4m32s
gates / gates (push) Successful in 4m32s
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
@@ -39,7 +39,15 @@ ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||
# already mutated, and B's "restore" then wrote A's decoy back for good: website/en/apps.html was left without its
|
||||
# Radicale logo, one step from a push. An exclusive lock makes a second run WAIT for the first.
|
||||
import fcntl
|
||||
_LOCK = open(os.path.join(ROOT, ".git", "decoy-suite.lock"), "w")
|
||||
# The lock lives in THIS worktree's git dir: in a linked worktree (`git worktree add`) `.git` is a FILE, and the old
|
||||
# `ROOT/.git/decoy-suite.lock` crashed with NotADirectoryError (2026-10-08). Each worktree mutates its own files, so a
|
||||
# per-worktree lock is the right scope.
|
||||
try:
|
||||
_GITDIR = subprocess.run(["git", "rev-parse", "--absolute-git-dir"], cwd=ROOT, capture_output=True, text=True,
|
||||
check=True).stdout.strip()
|
||||
except (OSError, subprocess.CalledProcessError):
|
||||
_GITDIR = os.path.join(ROOT, ".git")
|
||||
_LOCK = open(os.path.join(_GITDIR, "decoy-suite.lock"), "w")
|
||||
fcntl.flock(_LOCK, fcntl.LOCK_EX)
|
||||
|
||||
# ── WHAT THIS FILE COVERS ────────────────────────────────────────────────────────────────────────
|
||||
|
||||
Reference in New Issue
Block a user