97 lines
2.4 KiB
Bash
Executable File
97 lines
2.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
#
|
||
# gameservice-fe-agent 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
|