Files
recordingtest/.claude/hooks/install-git-hook.sh
2026-04-07 20:35:45 +09:00

87 lines
2.4 KiB
Bash

#!/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 에 누적 토큰이 전송됩니다."