Serverseitige Aktionsskripte

Ein Aktionsskript (Hook-Skript) ist ein Programm, das durch bestimmte Ereignisse im Projektarchiv gestartet wird, z. B., wenn eine neue Revision erzeugt oder eine Revisionseigenschaft verändert wird. Jedem Skript werden Informationen über das Ereignis selbst, die Ziele des Ereignisses und den Benutzernamen der Person, die das Ereignis ausgelöst hat, übergeben. Abhängig vom Rückgabewert des Aktionsskripts wird die Operation fortgesetzt, angehalten oder unterbrochen. Bitte lesen Sie dazu das Kapitel Erstellen von Projektarchiv-Hooks im Subversion-Buch.

Diese Aktionsskripte werden auf dem Server ausgeführt, der das Projektarchiv beherbergt. TortoiseSVN bietet Ihnen obendrein die Möglichkeit, lokale Aktionsskripte bei bestimmten Ereignissen auszuführen. Lesen Sie in „Clientseitige Aktionsskripte“ nach, wie das geht.

Beispiele für Aktionsskripte findet man im hooks-Ordner des Projektarchivs. Diese Beispiele sind für Unix/Linux-Server erstellt worden und müssen ein wenig angepasst werden, wenn Ihr Server unter Windows läuft. Das Aktionsskript kann eine einfache Batch-Datei oder ein ausführbares Programm sein. Das unten stehende Beispiel zeigt eine Batch-Datei, die als pre-revprop-change-Aktion eingesetzt werden kann.

rem Nur Änderungen an Logmeldungen zulassen.
if "%4" == "svn:log" exit 0
echo Eigenschaft '%4' kann nicht geändert werden >&2
exit 1

Beachten Sie, dass alle Ausgaben via stdout verworfen werden. Wenn Sie möchten, dass eine Fehlermeldung auch in TortoiseSVN angezeigt wird, müssen Sie diese Fehlermeldung via stderr ausgeben. In einer Batchdatei erreichen Sie dies über >&2.

Aktionen überschreiben

Falls ein Aktionsskript Ihre Übertragung verwirft, handelt es sich um eine endgültige Entscheidung. Sie können jedoch mit Hilfe der Zauberwort-Technik eine Ausnahmebehandlung in das Skript selbst einbauen. Falls das Skript eine Übertragung verwerfen will, durchsucht es zunächst die Logmeldung nach der Passphrase, einem bestimmten Wort oder auch einem Präfix eines Dateinamens. Wenn es das Zauberwort findet, akzeptiert es die Übertragung trotzdem. Andernfalls kann es die Übertragung, z. B. mit einer Meldung wie Du hast das Zauberwort nicht gesagt, blockieren. :-)