Build ErsatzTV Image / Delimiter ban (release path) (push) Successful in 25s
Build ErsatzTV Image / Build & test (.NET) (push) Successful in 9m14s
Build ErsatzTV Image / EF migration integrity (SQLite + MySql) (push) Successful in 6m37s
Build ErsatzTV Image / Functional E2E (curl + UI contracts) (push) Successful in 6m16s
Build ErsatzTV Image / API docs in sync (OpenAPI + endpoint index) (push) Skipped
Build ErsatzTV Image / Formatting (changed .cs conform to .editorconfig) (push) Skipped
Build ErsatzTV Image / Build & push image (amd64) (push) Successful in 4m19s
Co-authored-by: Timothy <timothy@noreply.gitea.tblindustries.be>
45 lines
2.1 KiB
Bash
Executable File
45 lines
2.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# PostToolUse / Bash — after a successful `git worktree add`, stamp the new worktree with
|
|
# this session's id (.claude-worktree-owner) so pretooluse-worktree-guard.sh (H7) can tell
|
|
# a sibling worktree another session created apart from this session's own.
|
|
# Fail-safe: any parse trouble → do nothing (the guard stays fail-open without a marker).
|
|
set -euo pipefail
|
|
|
|
# ersatztv#776 — report that this hook fired. MUST precede any stdin read.
|
|
# Claude hook: decides by printed JSON, so stdout is captured.
|
|
ETV_HOOK_FIRE_LIB="${CLAUDE_PROJECT_DIR:-$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/../.." 2>/dev/null && pwd)}/scripts/hook-fire-log.sh" || true
|
|
[ -r "$ETV_HOOK_FIRE_LIB" ] && . "$ETV_HOOK_FIRE_LIB" || true
|
|
type etv_hook_fire_begin >/dev/null 2>&1 || etv_hook_fire_begin() { :; }
|
|
etv_hook_fire_begin posttooluse-worktree-marker "" capture || true
|
|
input=$(cat)
|
|
cmd=$(printf '%s' "$input" | jq -r '.tool_input.command // ""' 2>/dev/null || true)
|
|
cwd=$(printf '%s' "$input" | jq -r '.cwd // ""' 2>/dev/null || true)
|
|
me=$(printf '%s' "$input" | jq -r '.session_id // ""' 2>/dev/null || true)
|
|
|
|
printf '%s' "$cmd" | grep -qE 'git[[:space:]]+worktree[[:space:]]+add\b' || exit 0
|
|
[ -z "$me" ] && exit 0
|
|
[ -z "$cwd" ] && cwd="$PWD"
|
|
|
|
# Extract the <path> arg of `git worktree add [flags] <path> [<commit-ish>]`.
|
|
# Skip flags; skip the values of the value-taking flags (-b/-B/--reason). Worktree paths
|
|
# in this repo have no spaces, so whitespace tokenization is safe.
|
|
add_args=$(printf '%s' "$cmd" | sed -E 's/.*git[[:space:]]+worktree[[:space:]]+add[[:space:]]+//')
|
|
path=""
|
|
skip=0
|
|
for tok in $add_args; do
|
|
if [ "$skip" = 1 ]; then skip=0; continue; fi
|
|
case "$tok" in
|
|
-b|-B|--reason) skip=1; continue ;;
|
|
--) continue ;;
|
|
-*) continue ;;
|
|
*) path=$(printf '%s' "$tok" | tr -d '"'"'"''); break ;;
|
|
esac
|
|
done
|
|
[ -z "$path" ] && exit 0
|
|
case "$path" in /*) abs="$path" ;; *) abs="$cwd/$path" ;; esac
|
|
[ -d "$abs" ] || exit 0
|
|
# Don't clobber a marker a different session already planted.
|
|
[ -f "$abs/.claude-worktree-owner" ] && exit 0
|
|
printf '%s\n' "$me" > "$abs/.claude-worktree-owner" 2>/dev/null || true
|
|
exit 0
|