87 lines
2.4 KiB
Bash
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 에 누적 토큰이 전송됩니다."
|