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
|
|||
|
|
|