#!/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"