84 lines
2.4 KiB
Bash
84 lines
2.4 KiB
Bash
#!/usr/bin/env bash
|
||
set -euo pipefail
|
||
|
||
# rename_nyash_to_hako.sh — 拡張子/参照の一括変換(安全志向)
|
||
#
|
||
# 目的:
|
||
# 1) 拡張子 .nyash → .hako にファイルをリネーム(git mv)
|
||
# 2) テキスト中の ".nyash" リテラルを ".hako" に書換
|
||
#
|
||
# 既定は DRY-RUN(変更無し)。
|
||
# 実行例:
|
||
# DRY_RUN=0 RENAME_EXT=1 REWRITE_TEXT=1 ./tools/dev/rename_nyash_to_hako.sh
|
||
#
|
||
# 環境変数:
|
||
# - DRY_RUN=1: 乾行(既定1)
|
||
# - RENAME_EXT=1: .nyash → .hako のファイルリネームを有効化
|
||
# - REWRITE_TEXT=1: テキスト置換(.nyash→.hako)を有効化
|
||
# - SKIP_GLOBS: 追加スキップ(コロン区切り、例: "dist:build:some_dir")
|
||
|
||
DRY_RUN="${DRY_RUN:-1}"
|
||
RENAME_EXT="${RENAME_EXT:-0}"
|
||
REWRITE_TEXT="${REWRITE_TEXT:-0}"
|
||
|
||
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
|
||
cd "$ROOT"
|
||
|
||
log() { echo "[rename] $*" >&2; }
|
||
|
||
should_skip() {
|
||
case "$1" in
|
||
./target/*|.git/*|./.git/*|./.github/*|./node_modules/*|./target) return 0 ;;
|
||
esac
|
||
if [ -n "${SKIP_GLOBS:-}" ]; then
|
||
IFS=':' read -r -a gl <<<"$SKIP_GLOBS"
|
||
local f="$1"
|
||
for g in "${gl[@]}"; do
|
||
case "$f" in
|
||
./$g/*|./$g) return 0 ;;
|
||
esac
|
||
done
|
||
fi
|
||
return 1
|
||
}
|
||
|
||
# 1) ファイル拡張子のリネーム(git mv)
|
||
if [ "$RENAME_EXT" = "1" ]; then
|
||
log "Scanning files to rename (.nyash → .hako)"
|
||
mapfile -t files < <(git ls-files | grep -E '\.nyash$' || true)
|
||
for f in "${files[@]}"; do
|
||
[ -z "$f" ] && continue
|
||
if should_skip "./$f"; then continue; fi
|
||
dest="${f%.nyash}.hako"
|
||
if [ "$DRY_RUN" = "1" ]; then
|
||
log "DRY-RUN git mv '$f' '$dest'"
|
||
else
|
||
log "git mv '$f' '$dest'"
|
||
git mv "$f" "$dest" || { log "WARN: git mv failed: $f"; }
|
||
fi
|
||
done
|
||
fi
|
||
|
||
# 2) テキスト置換(.nyash → .hako)
|
||
if [ "$REWRITE_TEXT" = "1" ]; then
|
||
log "Rewriting text occurrences (.nyash → .hako)"
|
||
# 候補ファイル(テキストファイル): git 管理対象のみ、バイナリ除外
|
||
mapfile -t tfs < <(git ls-files | xargs file | rg ':\s+text' -n | cut -d: -f1)
|
||
for f in "${tfs[@]}"; do
|
||
[ -z "$f" ] && continue
|
||
if should_skip "./$f"; then continue; fi
|
||
if rg -q '\.nyash\b' "$f"; then
|
||
if [ "$DRY_RUN" = "1" ]; then
|
||
log "DRY-RUN sed -i '.nyash'→'.hako' in $f"
|
||
else
|
||
tmp="$(mktemp)"
|
||
sed 's/\.nyash\b/.hako/g' "$f" > "$tmp" && mv "$tmp" "$f"
|
||
fi
|
||
fi
|
||
done
|
||
fi
|
||
|
||
log "Done (DRY_RUN=$DRY_RUN RENAME_EXT=$RENAME_EXT REWRITE_TEXT=$REWRITE_TEXT)"
|
||
exit 0
|
||
|