Un hook est un programme appelé lors d’évènements spécifiques lors du processus de commit.
Vérifiez tout d’abord que le paquet subversion-tools
soit installé :
- apt-get install subversion-tools
Notifier par mail chaque commit
L’utilisation la plus commune est certainement celle du hook de post-commit qui comme son nom l’indique intervient après chaque commit sur le dépot. Son utilisation principale est d’envoyer un email à une personne ou une liste de personnes contenant le diff des fichiers modifiés.
Pour le mettre en place il suffit :
- #se rendre dans le répertoire des hooks
- cd /var/svn/mon_depot/hooks/
- #Activer le hook en question
- sudo cp post-commit.tmpl post-commit
- #Le rendre executable
- sudo chmod +x post-commit
Le contenu du fichier post-commit sera dorénavant exécuté à chaque futur commit. Maintenant voici un exemple du contenu de ce fichier :
- #!/bin/sh
- # utiliser utf-8 pour gérer les accents dans les logs mais en us pour ne pas avoir de pb avec la date des mails (à adapter selon les locales disponibles sur votre machine)
- export LANG="en_US.UTF-8"
- # On récupère le nom du dépot qui est la première valeur du contexte
- REPOS="$1"
- #On récupère le numéro de révision qui est la seconde valeur du contexte
- REV="$2"
- #On récupère le nom de l'utilisateur qui a commité en utilisant la commande svn svnlook et se basant sur les informations récupérées du contexte
- AUTHOR=$(svnlook author --revision $REV $REPOS)
- # On envoie le mail
- /usr/share/subversion/hook-scripts/commit-email.pl "$REPOS" "$REV" --from "user_autorise@domaine.tld" -s "$AUTHOR |" maliste@domaine.tld
Ici on envoie donc un email à une liste de diffusion "maliste@domaine.tld" (qui pourrait être un utilisateur simple) en utilisant l’email "user_autorise@domaine.tld" (email de l’expéditeur) en ajoutant au début du sujet par défaut le nom de l’auteur du commit suivi d’un pipe (-s "$AUTHOR |"
).
NB :
Il est nécessaire d’avoir installé le paquet subversion-tools
pour avoir le script commit-email.pl
Vous pouvez tester votre hook comme ceci :
- #se rendre dans le répertoire des hooks
- cd /var/svn/mon_depot/hooks/
- # tester le hook sur la revision xx
- ./post-commit /var/svn//mon_depot/ xx