BurningTimesAi/scripts/sync_audit_repo_to_central.sh

49 lines
1.9 KiB
Bash

#!/bin/bash
# SessionStart hook — 레포 memory/org/audit_logs/ 를 중앙으로 sync (git pull 직후 최신화)
# 2026-04-20 #48 G 집행 신설. C34-17 sync 4계층 중 "레포 → 중앙" 방향
# 각 PC hostname 폴더만 자기 PC 로그이고 그 외는 다른 PC 로그 (PC 간 공유)
REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
[ -z "$REPO_ROOT" ] && exit 0
REPO_AUDIT="$REPO_ROOT/memory/org/audit_logs"
[ ! -d "$REPO_AUDIT" ] && exit 0
CENTRAL_AUDIT="$HOME/.claude/nerdnavis-audit"
[ ! -d "$CENTRAL_AUDIT" ] && exit 0
HOSTNAME_TAG=$(hostname 2>/dev/null | tr -d '[:space:]' | tr -cd '[:alnum:]-_' | head -c 32)
[ -z "$HOSTNAME_TAG" ] && HOSTNAME_TAG="unknown"
SUBDIRS=("auditor_calls" "warning_ignored" "bypass_log")
# 자기 PC hostname 폴더: 레포 → 중앙 (unflushed 중앙 변경 대피 후 레포본 복원)
SELF_DIR="$REPO_AUDIT/$HOSTNAME_TAG"
if [ -d "$SELF_DIR" ]; then
for SUB in "${SUBDIRS[@]}"; do
CENTRAL_SUB="$CENTRAL_AUDIT/$SUB"
REPO_SUB="$SELF_DIR/$SUB"
[ ! -d "$REPO_SUB" ] && continue
mkdir -p "$CENTRAL_SUB" 2>/dev/null
for f in "$REPO_SUB"/*.log; do
[ -f "$f" ] || continue
BASENAME=$(basename "$f")
CENTRAL_FILE="$CENTRAL_SUB/$BASENAME"
# unflushed 중앙 대피: 중앙이 레포보다 최신이고 레포 HEAD 커밋 미반영이면 대피
if [ -f "$CENTRAL_FILE" ] && [ "$CENTRAL_FILE" -nt "$f" ]; then
if ! git -C "$REPO_ROOT" log --oneline HEAD -- "memory/org/audit_logs/$HOSTNAME_TAG/$SUB/$BASENAME" 2>/dev/null | grep -q .; then
CONFLICT="$CENTRAL_AUDIT.conflict-$(date +%Y%m%d_%H%M%S)"
mkdir -p "$CONFLICT/$SUB" 2>/dev/null
cp "$CENTRAL_FILE" "$CONFLICT/$SUB/$BASENAME" 2>/dev/null
echo "⚠️ [Audit Sync Repo→Central] 중앙 unflushed 대피: $CONFLICT/$SUB/$BASENAME" >&2
fi
fi
cp "$f" "$CENTRAL_FILE" 2>/dev/null
done
done
fi
exit 0