BurningTimesAi/scripts/git_fetch_throttle.sh

71 lines
2.5 KiB
Bash

#!/bin/bash
# UserPromptSubmit hook용 5분 throttle된 git fetch + 변경 알림
# C20-7·C18 운용: 부서 세션이 매 입력 시 5분 이내 main 변경 자동 감지
# 적용 시점: 2026-04-15 PD님 B안 승인 (Phase 2)
THROTTLE_DIR="$HOME/.claude/.nerdnavis_throttle"
mkdir -p "$THROTTLE_DIR" 2>/dev/null
GIT_DIR=$(git rev-parse --git-dir 2>/dev/null)
[ -z "$GIT_DIR" ] && exit 0 # git 레포 아님 — 조용히 종료
REPO_HASH=$(echo "$GIT_DIR" | sha1sum 2>/dev/null | cut -d' ' -f1)
THROTTLE_FILE="$THROTTLE_DIR/last_fetch_$REPO_HASH"
THROTTLE_SECONDS=300 # 5분
if [ -f "$THROTTLE_FILE" ]; then
LAST=$(cat "$THROTTLE_FILE" 2>/dev/null || echo 0)
NOW=$(date +%s)
if [ $((NOW - LAST)) -lt $THROTTLE_SECONDS ]; then
exit 0 # throttle 적용
fi
fi
git fetch origin 2>/dev/null
date +%s > "$THROTTLE_FILE"
CHANGES=$(git log --oneline HEAD..origin/main 2>/dev/null | head -5)
if [ -n "$CHANGES" ]; then
echo "📌 [auto-sync] origin/main 변경 검출:"
echo "$CHANGES"
git merge origin/main --no-edit --ff-only 2>/dev/null
if [ $? -eq 0 ]; then
echo "✅ 자동 동기화 완료 (ff-only)"
else
echo "⚠️ 자동 merge 불가 — 세션 갱신으로 수동 해결 필요"
fi
fi
# 소통 허브 inbox 스캔 — 자기 부서 수신 채널에 신규 파일 감지
REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
if [ -n "$REPO_ROOT" ]; then
INBOX_HASH_FILE="$THROTTLE_DIR/inbox_hash_$REPO_HASH"
# 현재 부서 판별 (PWD 기준)
CURRENT_DIR=$(pwd)
INBOX_DIRS=""
case "$CURRENT_DIR" in
*개발팀*) INBOX_DIRS="$REPO_ROOT/공유/소통/PM→개발팀 $REPO_ROOT/공유/소통/기획팀→개발팀" ;;
*기획팀*) INBOX_DIRS="$REPO_ROOT/공유/소통/PM→기획팀 $REPO_ROOT/공유/소통/개발팀→기획팀" ;;
*) INBOX_DIRS="$REPO_ROOT/공유/소통/개발팀→PM $REPO_ROOT/공유/소통/기획팀→PM" ;;
esac
INBOX_FILES=""
for DIR in $INBOX_DIRS; do
if [ -d "$DIR" ]; then
FILES=$(find "$DIR" -maxdepth 1 -name '*.md' -not -name 'README.md' 2>/dev/null | sort)
INBOX_FILES="$INBOX_FILES$FILES"
fi
done
if [ -n "$INBOX_FILES" ]; then
CURRENT_INBOX_HASH=$(echo "$INBOX_FILES" | sha1sum 2>/dev/null | cut -d' ' -f1)
PREV_INBOX_HASH=$(cat "$INBOX_HASH_FILE" 2>/dev/null)
if [ "$CURRENT_INBOX_HASH" != "$PREV_INBOX_HASH" ]; then
COUNT=$(echo "$INBOX_FILES" | grep -c '.md$')
echo "📬 [inbox] 소통 허브 수신함에 파일 ${COUNT}건 — 확인 필요"
echo "$CURRENT_INBOX_HASH" > "$INBOX_HASH_FILE"
fi
fi
fi
exit 0