#!/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"