Per semplificare la gestione del repository e automatizzare alcune procedure, Subversion ci consente di creare degli script che vengano automaticamente invocati in corrispondenza di determinati eventi. In altre parole, ogni volta che viene effettuata una certa operazione sul repository, Subversion controlla se nella cartella hooks
del repository sia presente un file eseguibile con un certo nome, e lo esegue.
Tipicamente uno script esegue operazioni di validazione o notifica. Quindi si può fare in modo, ad esempio, che ogni commit
sia segnalato via e-mail a un indirizzo specifico; oppure fare in modo che una modifica venga esaminata prima del caricamento, e rifiutata se non soddisfa certi criteri. Un altro esempio è quello di bloccare i commit
sulle revisioni tag.
I nomi degli script che vengono cercati corrispondono abbastanza chiaramente agli eventi a cui sono associati.
Elenco degli eventi
pre-commit pre-lock pre-revprop-change pre-unlock post-commit post-lock post-unlock post-revprop-change start-commit
Una rapida spiegazione degli eventi elencati. Conosciamo già il commit
; lock
e unlock
si riferiscono all'applicazione e rimozione di un lock su un file, che è possibile tramite l'omonimo comando; revprop-change
si riferisce alla richiesta di modifica di una proprietà del repository.
Per tutte le operazioni, esiste lo script "pre-", che viene eseguito prima e può interrompere l'esecuzione se ritorna un codice diverso da zero, e lo script "post-" che viene eseguito dopo e ovviamente non può interrompere niente, visto che l'operazione è già stata eseguita
Unica eccezione è lo start-commit
, che viene eseguito nel momento in cui il client rivolge al server la richiesta di creazione di una transazione, quindi prima ancora che tale transazione sia pronta per essere applicata al repository - e quindi prima ancora del pre-commit
.
Nella cartella hooks
di qualunque repository appena installato sono presenti degli script shell di esempio nominati come sopra, ma con estensione .tmpl
. Questi script di esempio contengono – in forma di commento – le spiegazioni necessarie per l'utilizzo e i parametri che gli vengono passati, nonchè esempi delle operazioni più frequenti. È chiaro quindi che il modo più immediato per cominciare a usare gli hook è quello di modificare uno di questi script e rinominarlo rimuovendo l'estensione .tmpl
.
Tali script non devono essere scritti in un particolare linguaggio. Possono essere script di shell, Perl, o altri linguaggi di scripting; possono anche essere eseguibili compilati. L'unico requisito è che devono chiamarsi esattamente come indicato (e avere i permessi di esecuzione) perchè vengano avviati.
Nota: su Windows, gli script devono chiamarsi come indicato e allo stesso tempo devono avere un'estensione associata a un file eseguibile, ad esempio .bat
o .exe
.
Nota: per garantire una maggior sicurezza, in fase di esecuzione gli script non ricevono le variabili di ambiente del sistema operativo. Se utilizziamo le variabili di ambiente nello script, potremmo verificare che funziona tutto perfettamente se lanciati a mano, ma non quando eseguito da Subversion. È bene tener presente questa particolarità per non perdere ore a capire cosa abbiamo sbagliato nel nostro script.