#!/bin/sh
# Vor jedem Commit die Schnellstufe. Sie faengt ab, was sich sonst erst beim
# Anwender zeigt: falsch formatierter Quelltext, Typfehler, schwebende Zusagen,
# gebrochene Tests.
#
# WIE LANGE SIE BRAUCHT, STEHT NICHT HIER. Vor der Fassung 5.16.0 stand hier die
# Laufzeit desselben Befehls ein zweites Mal ("etwa zwanzig Sekunden"), und sie
# war um das Vierfache daneben. Zwei Stellen fuer eine Messung sind eine Stelle
# zu viel: Wer die eine nachmisst, zieht die andere nicht mit.
#
# Geprueft wird dabei der Arbeitsbaum, nicht der bereitgestellte Stand: Alle
# vier Stufen lesen die Dateien so, wie sie auf der Platte liegen, keine liest
# den Bereitstellungsbereich. Wer nur einen Teil bereitstellt (git add -p,
# git commit <pfad>), erfaehrt hier also nichts ueber den entstehenden Commit -
# der Lauf kann gruen sein, waehrend der Commit rot ist, und umgekehrt. Diesen
# Stand in einen Wegwerf-Arbeitsbaum zu schreiben und dort zu pruefen, waere
# genauer, verlangt aber je Commit ein neues Verzeichnis samt node_modules.
# Was das kostet, ist nicht gemessen; es faellt aber bei JEDEM Commit an, und
# ein Haken, der zu lange braucht, wird umgangen - dann prueft gar nichts mehr.
#
# Bewusst NICHT die Vollstufe: Sie baut zusaetzlich den Auslieferungsstand und
# startet Electron in einem echten Fenster - beides je Commit. Sie gehoert
# vor eine Veroeffentlichung (npm run gate).
#
# Eingerichtet mit:  git config core.hooksPath .githooks
#
# Dieser Befehl gehoert einmal in JEDE Arbeitskopie. Er landet in .git/config
# und damit ausserhalb des Baumes; git clone, git worktree add und ein frisches
# Auschecken fuehren ihn nicht mit. Seit Fassung 5.12.0 setzt ihn das
# prepare-Skript in package.json bei jedem npm install; von Hand faellig ist er
# nur noch dort, wo kein npm install laeuft oder wo git dabei fehlschlaegt.
# Solange er in einer Arbeitskopie fehlt, findet Git diese Datei nicht: Dort
# geht jeder Commit ungeprueft durch - ohne --no-verify und ohne Meldung.
#
# Wer hier mit --no-verify vorbeigeht, umgeht genau die Pruefung, die den
# Fehler gefunden haette. Das ist keine Abkuerzung, das ist eine Wette.
set -e
npm run gate:schnell
