Hooks: PHPUnit in Pre-Commit (#67) #70

Merged
greggy merged 3 commits from feature/issue-67-phpunit-precommit into main 2026-06-04 02:41:15 +02:00
Showing only changes of commit 3f1f0f5788 - Show all commits

View File

@@ -28,25 +28,26 @@ fi
# - composer.json PHP-Abhaengigkeiten # - composer.json PHP-Abhaengigkeiten
# - composer.lock Lock-File # - composer.lock Lock-File
# ───────────────────────────────────────────────────────────── # ─────────────────────────────────────────────────────────────
PHP_TOUCHED=$(git diff --cached --name-only --diff-filter=ACMR \ # PHP-relevante Files (Array-basiert, robust gegen Spaces/Newlines in Filenames)
mapfile -t PHP_TOUCHED_ARR < <(git diff --cached --name-only --diff-filter=ACMR \
| grep -E '\.(php)$|^phpunit\.xml$|^composer\.(json|lock)$' || true) | grep -E '\.(php)$|^phpunit\.xml$|^composer\.(json|lock)$' || true)
if [ -n "$PHP_TOUCHED" ]; then if [ "${#PHP_TOUCHED_ARR[@]}" -gt 0 ]; then
echo "" echo ""
echo "==> PHP-Dateien geaendert -> PHPUnit wird ausgefuehrt" echo "==> PHP-Dateien geaendert -> PHPUnit wird ausgefuehrt"
echo " Betroffene Dateien:" echo " Betroffene Dateien:"
printf ' - %s\n' $PHP_TOUCHED printf ' - %s\n' "${PHP_TOUCHED_ARR[@]}"
# Safety-Check: alle gestaged PHP-Dateien muessen auf der Disk existieren. # Safety-Check: alle gestaged PHP-Dateien muessen auf der Disk existieren.
# Sonst wuerde PHPUnit eine inkonsistente Codebasis testen (Staged != Working Tree). # Sonst wuerde PHPUnit eine inkonsistente Codebasis testen (Staged != Working Tree).
MISSING="" MISSING=()
for f in $PHP_TOUCHED; do for f in "${PHP_TOUCHED_ARR[@]}"; do
[ -f "$f" ] || MISSING="$MISSING $f" [ -f "$f" ] || MISSING+=("$f")
done done
if [ -n "$MISSING" ]; then if [ "${#MISSING[@]}" -gt 0 ]; then
echo "" echo ""
echo "FEHLER: Gestaged PHP-Dateien existieren nicht auf der Disk:" echo "FEHLER: Gestaged PHP-Dateien existieren nicht auf der Disk:"
printf ' - %s\n' $MISSING printf ' - %s\n' "${MISSING[@]}"
echo " Loesung: 'git restore --staged <datei>' oder Working-Tree synchronisieren." echo " Loesung: 'git restore --staged <datei>' oder Working-Tree synchronisieren."
exit 1 exit 1
fi fi