86 lines
2.9 KiB
Bash
86 lines
2.9 KiB
Bash
#!/usr/bin/env bash
|
|
# Rewrite cross-repo git host URLs in tracked text files.
|
|
# Usage: rewrite-git-host-urls.sh github|kalinamall|home|papatramp [root]
|
|
set -euo pipefail
|
|
|
|
TARGET="${1:-}"
|
|
ROOT="${2:-$(pwd)}"
|
|
if [[ -z "$TARGET" ]]; then
|
|
echo "Usage: $0 github|kalinamall|home|papatramp [root]" >&2
|
|
exit 2
|
|
fi
|
|
if [[ "$TARGET" == "home" ]]; then TARGET=papatramp; fi
|
|
ROOT="$(cd "$ROOT" && pwd)"
|
|
cd "$ROOT"
|
|
|
|
case "$TARGET" in
|
|
github)
|
|
BASE='https://github.com/PTah'
|
|
BLOB='/blob/main'
|
|
SSHTO='https://git.papatramp.ru/PapaTramp/'
|
|
;;
|
|
kalinamall)
|
|
BASE='https://git.kalinamall.ru/PapaTramp'
|
|
BLOB='/src/branch/main'
|
|
SSHTO='ssh://git@git.papatramp.ru:2222/PapaTramp/'
|
|
;;
|
|
papatramp)
|
|
BASE='https://git.papatramp.ru/PapaTramp'
|
|
BLOB='/src/branch/main'
|
|
SSHTO='ssh://git@git.papatramp.ru:2222/PapaTramp/'
|
|
;;
|
|
*)
|
|
echo "Unknown target: $TARGET" >&2
|
|
exit 2
|
|
;;
|
|
esac
|
|
|
|
BASE_HOST="${BASE#https://}"
|
|
N=0
|
|
|
|
export BASE BLOB SSHTO BASE_HOST
|
|
|
|
rewrite_file() {
|
|
local f="$1"
|
|
local tmp
|
|
tmp="$(mktemp)"
|
|
perl -pe '
|
|
s#https://github\.com/PTah/([^)/\x27\"\s]+)/blob/main/#$ENV{BASE}/$1$ENV{BLOB}/#g;
|
|
s#https://github\.com/PTah/([^)/\x27\"\s]+)/src/branch/main/#$ENV{BASE}/$1$ENV{BLOB}/#g;
|
|
s#https://git\.kalinamall\.ru/PapaTramp/([^)/\x27\"\s]+)/blob/main/#$ENV{BASE}/$1$ENV{BLOB}/#g;
|
|
s#https://git\.kalinamall\.ru/PapaTramp/([^)/\x27\"\s]+)/src/branch/main/#$ENV{BASE}/$1$ENV{BLOB}/#g;
|
|
s#https://git\.papatramp\.ru/PapaTramp/([^)/\x27\"\s]+)/src/branch/main/#$ENV{BASE}/$1$ENV{BLOB}/#g;
|
|
s#https://git\.papatramp\.ru/PTah/([^)/\x27\"\s]+)/src/branch/main/#$ENV{BASE}/$1$ENV{BLOB}/#g;
|
|
s#https://github\.com/PTah/#$ENV{BASE}/#g;
|
|
s#https://git\.kalinamall\.ru/PapaTramp/#$ENV{BASE}/#g;
|
|
s#https://git\.papatramp\.ru/PapaTramp/#$ENV{BASE}/#g;
|
|
s#https://git\.papatramp\.ru/PTah/#$ENV{BASE}/#g;
|
|
s#ssh://git\@git\.kalinamall\.ru:2222/PapaTramp/#$ENV{SSHTO}#g;
|
|
s#ssh://git\@git\.papatramp\.ru:2222/PapaTramp/#$ENV{SSHTO}#g;
|
|
s#github\.com/PTah/#$ENV{BASE_HOST}/#g;
|
|
s#git\.kalinamall\.ru/PapaTramp/#$ENV{BASE_HOST}/#g;
|
|
s#git\.papatramp\.ru/PapaTramp/#$ENV{BASE_HOST}/#g;
|
|
s#git\.papatramp\.ru/PTah/#$ENV{BASE_HOST}/#g;
|
|
' "$f" > "$tmp"
|
|
if ! cmp -s "$f" "$tmp"; then
|
|
mv "$tmp" "$f"
|
|
echo "updated: $f"
|
|
N=$((N + 1))
|
|
else
|
|
rm -f "$tmp"
|
|
fi
|
|
}
|
|
|
|
mapfile -t FILES < <(git -C "$ROOT" ls-files '*.md' '*.json' '*.service' '*.example' '*.sh' '*.ps1' '*.yml' '*.yaml' '*.txt' '*.kt' '*.kts' '*.xml' '*.html' '*.css' '*.ts' '*.vue' '*.py' 2>/dev/null || true)
|
|
if [[ ${#FILES[@]} -eq 0 ]]; then
|
|
mapfile -t FILES < <(find "$ROOT" -type f \( -name '*.md' -o -name '*.ps1' -o -name '*.sh' -o -name '*.yml' -o -name '*.yaml' -o -name '*.json' -o -name '*.txt' \) ! -path '*/.git/*' ! -path '*/node_modules/*' || true)
|
|
fi
|
|
|
|
for f in "${FILES[@]}"; do
|
|
[[ -f "$f" ]] || f="$ROOT/$f"
|
|
[[ -f "$f" ]] || continue
|
|
rewrite_file "$f"
|
|
done
|
|
|
|
echo "Rewrite-GitHostUrls: target=$TARGET base=$BASE files_changed=$N"
|