Zeigt bei älteren Upload-Bildern automatisch einen geschützten Migrationsbutton im Adminbereich an und aktualisiert die JSON-Verweise transaktionssicher. Ergänzt außerdem einen Server-Updater, der Datenbank, Uploads und Konfiguration beim Wechsel von älteren Versionen sichert und wiederherstellt.
81 lines
2.6 KiB
Bash
Executable File
81 lines
2.6 KiB
Bash
Executable File
#!/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
|