46 lines
1.6 KiB
Bash
Executable File
46 lines
1.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# 代码面 worktree 的 Godot user 目录隔离:给每个 worktree 生成 game/override.cfg,
|
||
# 让该区的 user:// 落到独立目录(夹具、日志、截图产物不再与其他区共用)。
|
||
# 主工作区不生成——真实存档与试玩进度保持原位。
|
||
#
|
||
# 用法:tools/setup_worktree_userdir.sh [仓库根](缺省=本脚本所在仓库)
|
||
# 幂等:内容一致即不重写;退出码 0=已隔离或主区免隔离,1=生成失败(闸壳据此拒跑)
|
||
set -u
|
||
ROOT="$(cd "${1:-$(dirname "$0")/..}" && pwd)"
|
||
|
||
MAIN_WT="$(git -C "$ROOT" worktree list --porcelain 2>/dev/null | sed -n 's/^worktree //p' | head -1)"
|
||
if [ -z "$MAIN_WT" ]; then
|
||
echo "[userdir] 取不到主工作区路径(git worktree list 为空)" >&2
|
||
exit 1
|
||
fi
|
||
if [ "$(cd "$ROOT" && pwd -P)" = "$(cd "$MAIN_WT" && pwd -P)" ]; then
|
||
echo "[userdir] 主工作区:不隔离(真实档保持原位)"
|
||
exit 0
|
||
fi
|
||
|
||
BASE="$(basename "$ROOT" | tr -d '\n' | tr -c 'A-Za-z0-9_-' '_')"
|
||
ABS="$(cd "$ROOT" && pwd -P)"
|
||
if command -v sha1sum >/dev/null 2>&1; then
|
||
FP="$(printf '%s' "$ABS" | sha1sum | cut -c1-8)"
|
||
else
|
||
FP="$(printf '%s' "$ABS" | cksum | tr -d ' ' | cut -c1-8)"
|
||
fi
|
||
NAME="DungeonSweeper_${BASE}_${FP}"
|
||
CFG="$ROOT/game/override.cfg"
|
||
|
||
CONTENT="[application]
|
||
|
||
config/use_custom_user_dir=true
|
||
config/custom_user_dir_name=\"$NAME\"
|
||
"
|
||
if [ -f "$CFG" ] && printf '%s' "$CONTENT" | cmp -s - "$CFG"; then
|
||
echo "[userdir] 已隔离:$NAME"
|
||
exit 0
|
||
fi
|
||
mkdir -p "$ROOT/game" 2>/dev/null
|
||
if ! printf '%s' "$CONTENT" >"$CFG"; then
|
||
echo "[userdir] 写 $CFG 失败" >&2
|
||
exit 1
|
||
fi
|
||
echo "[userdir] 已隔离:$NAME"
|