Files
ViewIT/scripts/hooks/pre-commit

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"