Files
gplan-2/tools/setup_worktree_userdir.sh
T

46 lines
1.6 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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"