#!/usr/bin/env bash set -Eeuo pipefail # Das Skript außerhalb des Checkouts weiterführen, damit ein Pull seine laufende # Version nicht verändern kann. if [[ "${KULTOUR_UPDATE_REEXEC:-0}" != "1" ]]; then stable_script="$(mktemp "${TMPDIR:-/tmp}/kultour-update.XXXXXX")" cp -- "$0" "$stable_script" chmod 700 "$stable_script" export KULTOUR_UPDATE_REEXEC=1 export KULTOUR_UPDATE_TEMP_SCRIPT="$stable_script" exec bash "$stable_script" "$@" fi repository_input="${1:-.}" cd "$repository_input" repository_root="$(git rev-parse --show-toplevel)" cd "$repository_root" repository_parent="$(dirname "$repository_root")" update_backup="$(mktemp -d "${repository_parent}/kultour-update-backup.XXXXXX")" restore_required=0 cleanup_temp_script() { if [[ -n "${KULTOUR_UPDATE_TEMP_SCRIPT:-}" && -f "$KULTOUR_UPDATE_TEMP_SCRIPT" ]]; then rm -f -- "$KULTOUR_UPDATE_TEMP_SCRIPT" fi } restore_persistence() { mkdir -p "$repository_root/data" "$repository_root/uploads" cp -a -- "$update_backup/data/." "$repository_root/data/" cp -a -- "$update_backup/uploads/." "$repository_root/uploads/" cp -a -- "$update_backup/config.php" "$repository_root/config.php" } handle_failure() { status=$? trap - ERR INT TERM if [[ "$restore_required" == "1" ]]; then echo "Update fehlgeschlagen – stelle Persistenz aus dem Backup wieder her ..." >&2 restore_persistence || true fi echo "Backup bleibt erhalten: $update_backup" >&2 cleanup_temp_script exit "$status" } trap handle_failure ERR INT TERM for required_path in data uploads config.php; do if [[ ! -e "$repository_root/$required_path" ]]; then echo "Erforderlicher Pfad fehlt: $repository_root/$required_path" >&2 exit 1 fi done cp -a -- "$repository_root/data" "$update_backup/data" cp -a -- "$repository_root/uploads" "$update_backup/uploads" cp -a -- "$repository_root/config.php" "$update_backup/config.php" restore_required=1 echo "Persistenz gesichert: $update_backup" echo "Aktueller Arbeitsstand:" git status --short # In älteren Versionen waren Datenbank und Bilder noch getrackt. Nur diese # Pfade sowie die lokale Konfiguration werden für den Pull auf HEAD gesetzt. git restore --source=HEAD --staged --worktree -- data uploads config.php git fetch origin main git merge --ff-only origin/main restore_persistence restore_required=0 trap - ERR INT TERM cleanup_temp_script echo "Update abgeschlossen. Datenbank, Uploads und config.php wurden wiederhergestellt." echo "Sicherheits-Backup bleibt erhalten: $update_backup" git status --short --branch