Hooks – Trigger im Subversion-Server

Mittels der sogenannten Hooks kann man getriggerte Events ausführen. Im Repository-Ordner auf dem Server liegt ein Ordner hooks mit templates.

Mögliche Events:
pre-commit
start-commit
post-commit
pre-lock
post-lock
pre-unlock
post-unlock
pre-revprop-change
post-revprop-change

Beispielhaft nehmen wir einmal an wir möchten das nach jedem Commit (also einchecken einer neuen Datei) diese automatisch auf den Webserver kopiert wird.

Schritt 1: Anlegen eines Hook-ScriptsUnter WinXP nehmen wir einfach die Konsolenbefehle und packen diese in eine Batch-Datei. Die folgende Datei speichern wir im Repository-Hook-Ordner von WinXP unter dem namen post-commit.bat. Der Server führt diese automatisch nach jedem Commit aus.

Der Inhalt der Datei:
@echo offecho Hook-Script von Simon Schmitt
REM Schreiben der mit Commit durchgeführen Änderungen in eine Datei
svnlook changed -r %2 %1 > c:changes.log
svnlook log -r %2 %1 > c:comment.log
svnlook author -r %2 %1 > c:user.log
REM Auswerten der Logs durch externes Toolmytool.exe
echo on

Wir schreiben also zunächst alle Änderungen in die Datei c:changes.log.

Darin steht dann z.B.
U hallowelt.h
A hallowelt.c
D test.c

Das U steht für Updates, A für Added und D für Deleted. Dieses Logfile werten wir nun einfach mit unserem Tool mytool.exe (Wer das haben will kann mich anmailen) aus. Ebenso user.log (da steht der Username drin der das commit gemacht hat) und comment.log (das ist der User-Kommentar). Natürlich kann man da auch Perl-Skripte benutzen und das ganze an MySQL koppeln oder Emails versenden oder oder oder…