#!/usr/bin/env bash # # fe-common-rules project template initializer # 이미 .claude/common 이 설치된 프로젝트에서 templates/project/ 의 # 양식을 .claude/project/ 에 복사합니다. # # 사용법: # bash .claude/common/scripts/init-project.sh # 없는 파일만 복사 (기본) # bash .claude/common/scripts/init-project.sh --force # 기존 파일을 덮어씀 # bash .claude/common/scripts/init-project.sh --diff # 차이만 보여주고 복사는 안 함 # set -euo pipefail COMMON_PATH=".claude/common" PROJECT_PATH=".claude/project" TEMPLATE_DIR="$COMMON_PATH/templates/project" MODE="safe" # safe | force | diff for arg in "$@"; do case "$arg" in --force) MODE="force" ;; --diff) MODE="diff" ;; -h|--help) grep '^#' "$0" | sed 's/^# \{0,1\}//' exit 0 ;; *) echo "❌ 알 수 없는 옵션: $arg" >&2 exit 1 ;; esac done if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then echo "❌ 현재 디렉토리는 Git 저장소가 아닙니다." >&2 exit 1 fi cd "$(git rev-parse --show-toplevel)" if [[ ! -d "$TEMPLATE_DIR" ]]; then echo "❌ $TEMPLATE_DIR 가 없습니다. 먼저 submodule 을 설치/업데이트하세요:" >&2 echo " git submodule update --init --recursive" >&2 exit 1 fi mkdir -p "$PROJECT_PATH" echo "📝 templates/project → $PROJECT_PATH (mode=$MODE)" echo "" shopt -s nullglob copied=0 skipped=0 diffed=0 for f in "$TEMPLATE_DIR"/*.md; do name="$(basename "$f")" dest="$PROJECT_PATH/$name" case "$MODE" in diff) if [[ -f "$dest" ]]; then if ! diff -q "$f" "$dest" >/dev/null 2>&1; then echo "📄 diff: $dest" diff -u "$dest" "$f" || true echo "" diffed=$((diffed + 1)) fi else echo "➕ 새 양식: $dest (복사되지 않음. --force 로 복사하세요)" diffed=$((diffed + 1)) fi ;; force) cp "$f" "$dest" echo " ✅ $dest (덮어씀)" copied=$((copied + 1)) ;; safe) if [[ -f "$dest" ]]; then echo " ⏭ $dest (이미 존재)" skipped=$((skipped + 1)) else cp "$f" "$dest" echo " ✅ $dest" copied=$((copied + 1)) fi ;; esac done echo "" case "$MODE" in diff) echo "🔍 차이가 있는 파일: $diffed 개";; *) echo "🎉 완료: 복사 $copied개 / 건너뜀 $skipped개";; esac