#!/usr/bin/env bash # .git/hooks/post-commit 을 설치해서 모든 커밋(IDE / 터미널 / git GUI 포함)에서 # aptabase-commit.sh 가 호출되도록 한다. # # 사용법: # bash .claude/hooks/install-git-hook.sh # 설치 # bash .claude/hooks/install-git-hook.sh --force # 기존 훅 덮어쓰기 # bash .claude/hooks/install-git-hook.sh --uninstall set -euo pipefail MARKER="# aptabase-commit-auto-hook" FORCE=false UNINSTALL=false for arg in "$@"; do case "$arg" in --force) FORCE=true ;; --uninstall) UNINSTALL=true ;; -h|--help) sed -n '2,11p' "$0" exit 0 ;; *) echo "Unknown option: $arg" >&2 exit 1 ;; esac done GIT_ROOT=$(git rev-parse --show-toplevel 2>/dev/null) || { echo "Error: not inside a git repository" >&2 exit 1 } HOOK_PATH="$GIT_ROOT/.git/hooks/post-commit" if [[ "$UNINSTALL" == "true" ]]; then if [[ -f "$HOOK_PATH" ]] && grep -q "$MARKER" "$HOOK_PATH" 2>/dev/null; then rm -f "$HOOK_PATH" echo "Removed: $HOOK_PATH" else echo "Nothing to uninstall (no aptabase hook found at $HOOK_PATH)" fi exit 0 fi # 기존 훅 체크 if [[ -f "$HOOK_PATH" ]]; then if grep -q "$MARKER" "$HOOK_PATH" 2>/dev/null; then echo "Already installed: $HOOK_PATH" exit 0 fi if [[ "$FORCE" != "true" ]]; then echo "Error: existing post-commit hook found at $HOOK_PATH" >&2 echo "" >&2 echo "Options:" >&2 echo " 1. Re-run with --force to overwrite (backup will be saved as .bak)" >&2 echo " 2. Manually append the following line to the existing hook:" >&2 echo "" >&2 echo " bash .claude/hooks/aptabase-commit.sh < /dev/null 2>/dev/null || true" >&2 echo "" >&2 exit 1 fi cp "$HOOK_PATH" "$HOOK_PATH.bak" echo "Backed up existing hook to: $HOOK_PATH.bak" fi mkdir -p "$(dirname "$HOOK_PATH")" cat > "$HOOK_PATH" <<'EOF' #!/usr/bin/env bash # aptabase-commit-auto-hook # Auto-installed by .claude/hooks/install-git-hook.sh # 모든 커밋 후 aptabase-commit.sh 를 호출해 누적 토큰을 flush 한다. set -uo pipefail PROJECT_HOOK="$(git rev-parse --show-toplevel 2>/dev/null)/.claude/hooks/aptabase-commit.sh" if [[ -f "$PROJECT_HOOK" ]]; then bash "$PROJECT_HOOK" < /dev/null >/dev/null 2>&1 || true fi exit 0 EOF chmod +x "$HOOK_PATH" echo "Installed: $HOOK_PATH" echo "" echo "이제 IDE, 터미널, git GUI 에서 커밋해도 aptabase 에 누적 토큰이 전송됩니다."