fix: Changelog aus der Zielfassung, blockierende Dateien beiseite

Zwei Fehler beim ersten Probelauf des Update-Skripts.

Der Changelog blieb leer. Das Skript las CHANGELOG.md aus der Arbeitskopie
- also aus dem LAUFENDEN Stand, der die neuen Abschnitte naturgemaess noch
nicht kennt. Jetzt kommt er ueber git show aus der Zielfassung.

Das Umschalten scheiterte an einer unversionierten Datei. Genau das
passiert beim Sprung auf die Fassung, die dieses Skript eingefuehrt hat:
Man holt es sich von Hand, und in der Zielfassung gehoert es dann dazu -
git weigert sich, eine unversionierte Datei zu ueberschreiben. Solche
Dateien werden jetzt nicht weggeworfen, sondern nach .vor-update-<zeit>
beiseite geschoben, danach laeuft das Umschalten durch.

Etappe: 8
Phase: Haertung
This commit is contained in:
Florian Wilde
2026-08-22 15:10:40 +02:00
parent 42eb242767
commit 535549f297
+36 -7
View File
@@ -137,21 +137,25 @@ fi
schritt "Was sich aendert" schritt "Was sich aendert"
if [ -f CHANGELOG.md ]; then # Der Changelog muss aus der ZIELfassung kommen: Der laufende Stand kennt
# die neuen Abschnitte ja noch gar nicht.
CHANGELOG="$(git show "$ZIEL:CHANGELOG.md" 2>/dev/null || true)"
if [ -n "$CHANGELOG" ]; then
# Alle Abschnitte zwischen dem laufenden und dem gewuenschten Stand. # Alle Abschnitte zwischen dem laufenden und dem gewuenschten Stand.
ZIEL_NR="${ZIEL#v}"
JETZT_NR="${JETZT#v}" JETZT_NR="${JETZT#v}"
awk -v ziel="$ZIEL_NR" -v jetzt="$JETZT_NR" ' printf '%s
' "$CHANGELOG" | awk -v jetzt="$JETZT_NR" '
/^## \[/ { /^## \[/ {
nummer = $0 nummer = $0
sub(/^## \[/, "", nummer); sub(/\].*/, "", nummer) sub(/^## \[/, "", nummer); sub(/\].*/, "", nummer)
drucken = (nummer != "Unveröffentlicht" && nummer != jetzt)
if (nummer == jetzt) exit if (nummer == jetzt) exit
drucken = (nummer != "Unveröffentlicht")
} }
drucken { print " " $0 } drucken { print " " $0 }
' CHANGELOG.md | head -60 ' | head -60
else else
warnung "Kein CHANGELOG.md gefunden." warnung "Kein CHANGELOG.md in $ZIEL gefunden."
fi fi
printf '\n' printf '\n'
@@ -256,7 +260,32 @@ else
fi fi
schritt "Umschalten auf $ZIEL" schritt "Umschalten auf $ZIEL"
git checkout --quiet "$ZIEL"
# Eine unversionierte Datei kann im Weg stehen, wenn die Zielfassung sie
# fuehrt. Das passiert beim Update auf die Fassung, die dieses Skript
# eingefuehrt hat: Man hat es sich von Hand geholt, jetzt gehoert es dazu.
# Solche Dateien werden nicht weggeworfen, sondern beiseite geschoben.
if ! git checkout --quiet "$ZIEL" 2>/dev/null; then
IM_WEG="$(git checkout "$ZIEL" 2>&1 | sed -n '/would be overwritten/,/^Aborting/p' | grep -E '^\s' | tr -d ' ' | grep -v '^$' || true)"
if [ -n "$IM_WEG" ]; then
ZEIT="$(date +%Y%m%d-%H%M%S)"
printf ' Diese unversionierten Dateien stehen im Weg:
'
for datei in $IM_WEG; do
[ -e "$datei" ] || continue
mv "$datei" "${datei}.vor-update-${ZEIT}"
printf ' %s -> %s.vor-update-%s
' "$datei" "$datei" "$ZEIT"
done
git checkout --quiet "$ZIEL" || abbruch "Das Umschalten auf $ZIEL ist fehlgeschlagen.
Deine Aenderungen liegen im Stash: git stash list"
else
abbruch "Das Umschalten auf $ZIEL ist fehlgeschlagen.
$([ -n "$SCHMUTZIG" ] && printf ' Deine Aenderungen liegen im Stash: git stash list')"
fi
fi
gut "$(git describe --tags --always)" gut "$(git describe --tags --always)"
schritt "Bauen und starten" schritt "Bauen und starten"