42 lines
1.4 KiB
Bash
42 lines
1.4 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
# post-commit hook — 중앙 audit 로그를 레포 memory/org/audit_logs/{hostname}/ 로 sync
|
||
|
|
# 2026-04-20 #48 G 집행 신설. C34-17 sync 4계층 중 "중앙 → 레포" 방향
|
||
|
|
# 레포 mtime 보호 (D안 패턴 준용, C34-16 조항 6)
|
||
|
|
|
||
|
|
REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
|
||
|
|
[ -z "$REPO_ROOT" ] && 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"
|
||
|
|
|
||
|
|
REPO_AUDIT="$REPO_ROOT/memory/org/audit_logs/$HOSTNAME_TAG"
|
||
|
|
mkdir -p "$REPO_AUDIT" 2>/dev/null
|
||
|
|
|
||
|
|
SUBDIRS=("auditor_calls" "warning_ignored" "bypass_log")
|
||
|
|
|
||
|
|
for SUB in "${SUBDIRS[@]}"; do
|
||
|
|
CENTRAL_SUB="$CENTRAL_AUDIT/$SUB"
|
||
|
|
[ ! -d "$CENTRAL_SUB" ] && continue
|
||
|
|
REPO_SUB="$REPO_AUDIT/$SUB"
|
||
|
|
mkdir -p "$REPO_SUB" 2>/dev/null
|
||
|
|
|
||
|
|
for f in "$CENTRAL_SUB"/*.log; do
|
||
|
|
[ -f "$f" ] || continue
|
||
|
|
BASENAME=$(basename "$f")
|
||
|
|
[ "$BASENAME" = ".junction-marker" ] && continue
|
||
|
|
REPO_FILE="$REPO_SUB/$BASENAME"
|
||
|
|
|
||
|
|
# 레포 mtime 보호: 레포가 중앙보다 최신이면 스킵
|
||
|
|
if [ -f "$REPO_FILE" ] && [ "$REPO_FILE" -nt "$f" ]; then
|
||
|
|
echo "⚠️ [Audit Sync→Repo] 레포 최신 — 덮어쓰기 스킵: $SUB/$BASENAME" >&2
|
||
|
|
continue
|
||
|
|
fi
|
||
|
|
cp "$f" "$REPO_FILE" 2>/dev/null
|
||
|
|
done
|
||
|
|
done
|
||
|
|
|
||
|
|
exit 0
|