64 lines
2.0 KiB
Bash
Executable File
64 lines
2.0 KiB
Bash
Executable File
#!/bin/bash
|
|
# pre-commit: Patch-Version in addon.xml automatisch hochzählen (nur dev-Branch)
|
|
# Unterstuetzt 3-teilig (x.x.xx) und 4-teilig (x.x.xx.x)
|
|
# 4-teilig: zaehlt den 4. Teil in 5er-Schritten hoch (z.B. 0.1.75.5 → 0.1.76.0)
|
|
|
|
branch=$(git symbolic-ref --short HEAD 2>/dev/null)
|
|
[[ "$branch" != "dev" ]] && exit 0
|
|
|
|
root=$(git rev-parse --show-toplevel)
|
|
cd "$root"
|
|
|
|
# Version aus addon.xml lesen (3- oder 4-teilig mit optionalem Suffix)
|
|
current=$(grep -oP 'version="\K[0-9]+\.[0-9]+\.[0-9]+(\.[0-9]+)?[^"]*' addon/addon.xml | head -1)
|
|
if [[ -z "$current" ]]; then
|
|
echo "[hook] Fehler: Version nicht gefunden in addon/addon.xml" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Suffix extrahieren (z.B. -dev)
|
|
suffix=$(echo "$current" | grep -oP '[-][a-zA-Z].*' || true)
|
|
version_only=$(echo "$current" | sed "s/${suffix}$//")
|
|
|
|
# Parts zaehlen
|
|
IFS='.' read -ra parts <<< "$version_only"
|
|
num_parts=${#parts[@]}
|
|
|
|
if [[ $num_parts -eq 4 ]]; then
|
|
# 4-teilig: 4. Teil um 5 erhoehen, bei >= 10 den 3. Teil erhoehen
|
|
major=${parts[0]}
|
|
minor=${parts[1]}
|
|
patch=${parts[2]}
|
|
sub=${parts[3]}
|
|
new_sub=$((sub + 5))
|
|
if [[ $new_sub -ge 10 ]]; then
|
|
new_sub=$((new_sub - 10))
|
|
patch=$((patch + 1))
|
|
fi
|
|
new_version="${major}.${minor}.${patch}.${new_sub}${suffix}"
|
|
elif [[ $num_parts -eq 3 ]]; then
|
|
# 3-teilig: Patch hochzaehlen
|
|
major=${parts[0]}
|
|
minor=${parts[1]}
|
|
patch=${parts[2]}
|
|
new_version="${major}.${minor}.$((patch + 1))${suffix}"
|
|
else
|
|
echo "[hook] Fehler: Unerwartetes Versionsformat: $current" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# addon.xml aktualisieren
|
|
sed -i "s/version=\"${current}\"/version=\"${new_version}\"/" addon/addon.xml
|
|
git add addon/addon.xml
|
|
|
|
# Changelog-Abschnitt von alter auf neue Version umbenennen (nur erstes Vorkommen)
|
|
old_clean=$(echo "$version_only")
|
|
new_clean=$(echo "$new_version" | sed 's/-[a-zA-Z].*$//')
|
|
CHANGELOG="addon/CHANGELOG-USER.md"
|
|
if [[ -f "$CHANGELOG" ]]; then
|
|
sed -i "0,/^## ${old_clean}$/s//## ${new_clean}/" "$CHANGELOG"
|
|
git add "$CHANGELOG"
|
|
fi
|
|
|
|
echo "[hook] Version: $current → $new_version"
|