#!/usr/bin/env bash # build.sh -- regenerer per-rolle-manifester fra files/ (REPOET er kilden installeren serverer). # Vanlig flyt etter kodeendring: ./build.sh && git commit -am "sync" && git push # # Valgfri synk mot singleplayer-verdenen (dev-miljoeet): # ./build.sh --from-world [computer-dir] # verden -> files/ (kun kode; state/legacy filtreres) # ./build.sh --to-world [computer-dir] # files/ -> verden (kun kode; roerer aldri state) set -euo pipefail REPO="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" WORLD_DEFAULT="/home/stian/.local/share/ModrinthApp/profiles/Modda wii/saves/New World/computercraft/computer" # rolle -> computer-id i verdenen declare -A ROLE_SRC=( [autopilot]=0 # maskinrom: startup -> ap boot -> wizard/standby [cockpit]=4 # pilot-hus: startup -> cockpit ) # per-skip tilstand + utdaterte verktoey: shippes ALDRI (installeren rydder dem ogsaa) EXCLUDES=(calib.txt sides.txt target.txt settings.txt engaged.txt scan.txt pid_gains.txt stabilize.lua diag.lua probe.lua scan.lua manifest) # rolle-spesifikt: cockpit-koden hoerer ikke hjemme paa autopilot-PCen declare -A ROLE_EXCLUDES=( [autopilot]="cockpit.lua pilot_startup.lua" [cockpit]="" ) is_excluded() { # $1=rolle $2=relativ sti local base x; base="$(basename "$2")" case "$base" in *.log|*.old|.installed_*) return 0;; esac for x in "${EXCLUDES[@]}"; do [ "$base" = "$x" ] && return 0; done for x in ${ROLE_EXCLUDES[$1]}; do [ "$base" = "$x" ] && return 0; done return 1 } mode="${1:-manifests}" world="${2:-$WORLD_DEFAULT}" case "$mode" in manifests) ;; --from-world|--to-world) if [ ! -d "$world" ]; then echo "error: world computer dir not found: $world" >&2 echo "pass the path as arg 2 if the world moved." >&2 exit 1 fi for role in "${!ROLE_SRC[@]}"; do id="${ROLE_SRC[$role]}" src="$world/$id"; dst="$REPO/files/$role" if [ "$mode" = "--from-world" ]; then from="$src"; to="$dst"; else from="$dst"; to="$src"; fi if [ ! -d "$from" ]; then echo "warn: source dir missing for role '$role' ($from), skipping" >&2 continue fi while IFS= read -r rel; do if ! is_excluded "$role" "$rel"; then mkdir -p "$to/$(dirname "$rel")" cp "$from/$rel" "$to/$rel" fi done < <(cd "$from" && find . -type f | sed 's|^\./||') echo "synced role '$role' ($mode)" done ;; *) echo "usage: ./build.sh [--from-world|--to-world] [computer-dir]" >&2 exit 1 ;; esac # manifester: nylinje-separerte relative stier. LC_ALL=C sort er VIKTIG: locale-avhengig # (case-insensitiv) sortering kan stokke om case-varianter og gi udefinert install-rekkefoelge. for role in "${!ROLE_SRC[@]}"; do dst="$REPO/files/$role" [ -d "$dst" ] || continue while IFS= read -r rel; do is_excluded "$role" "$rel" || printf '%s\n' "$rel" done < <(cd "$dst" && find . -type f ! -name manifest | sed 's|^\./||' | LC_ALL=C sort) > "$dst/manifest" echo "role '$role': $(wc -l < "$dst/manifest") files" done echo "done. manifests regenerated."