73 lines
2.4 KiB
Bash
Executable file
73 lines
2.4 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
#
|
|
# Post-Commit Hook for Stream Worktrees
|
|
#
|
|
# Purpose: Track commit count and trigger dashboard sync every 3-5 commits
|
|
# Location: Installed to each worktree's .git/hooks/post-commit by start_stream
|
|
#
|
|
# This hook automatically:
|
|
# 1. Increments commit counter
|
|
# 2. Triggers dashboard sync when threshold reached (default: 3 commits)
|
|
# 3. Resets counter after sync
|
|
#
|
|
# The dashboard sync runs in the background (non-blocking) and updates
|
|
# STATUS_DASHBOARD.md in the main project with current progress.
|
|
#
|
|
|
|
set -e
|
|
|
|
# ============================================================================
|
|
# Configuration
|
|
# ============================================================================
|
|
|
|
WORKTREE_DIR="$(git rev-parse --show-toplevel)"
|
|
COUNT_FILE="${WORKTREE_DIR}/.git/info/commit-count"
|
|
HOOK_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
|
|
# Get sync threshold from git config (default: 3)
|
|
SYNC_THRESHOLD="$(git config --get stream-workflow.sync-threshold || echo "3")"
|
|
|
|
# ============================================================================
|
|
# Commit Counter
|
|
# ============================================================================
|
|
|
|
# Read current count
|
|
if [ -f "$COUNT_FILE" ]; then
|
|
COUNT=$(cat "$COUNT_FILE")
|
|
else
|
|
COUNT=0
|
|
fi
|
|
|
|
# Increment
|
|
COUNT=$((COUNT + 1))
|
|
echo "$COUNT" > "$COUNT_FILE"
|
|
|
|
echo "[post-commit] Commit #${COUNT} since last dashboard sync"
|
|
|
|
# ============================================================================
|
|
# Dashboard Sync Trigger
|
|
# ============================================================================
|
|
|
|
if [ "$COUNT" -ge "$SYNC_THRESHOLD" ]; then
|
|
echo "[post-commit] Threshold reached (${COUNT}/${SYNC_THRESHOLD}) - syncing dashboard..."
|
|
|
|
# Reset counter immediately (before sync to avoid race conditions)
|
|
echo "0" > "$COUNT_FILE"
|
|
|
|
# Trigger dashboard sync in background (non-blocking)
|
|
# This allows the commit to complete immediately
|
|
if [ -x "${HOOK_DIR}/sync-dashboard.sh" ]; then
|
|
"${HOOK_DIR}/sync-dashboard.sh" &
|
|
SYNC_PID=$!
|
|
echo "[post-commit] Dashboard sync started (PID: ${SYNC_PID})"
|
|
else
|
|
echo "[post-commit] Warning: sync-dashboard.sh not found or not executable"
|
|
echo "[post-commit] Expected: ${HOOK_DIR}/sync-dashboard.sh"
|
|
fi
|
|
else
|
|
REMAINING=$((SYNC_THRESHOLD - COUNT))
|
|
echo "[post-commit] ${REMAINING} more commit(s) until next dashboard sync"
|
|
fi
|
|
|
|
# Exit successfully (don't block commit)
|
|
exit 0
|