Comment obtenir les notifications par mail (hook)

© Christian PAULUS. Document créé le 10 juillet 2012 , mis à jour le 10 juillet 2012.

Quand un vieillard meurt, c'est une bibliothèque qui brûle. Diction africain

Accueil du site > Astuces > SVN > Comment obtenir les notifications par mail (hook)

svnmailer / subversion-1.7.4_1/FreeBSD 8.1

Lors d’un commit svn, il peut être intéressant d’informer l’équipe du projet en cours de développement via la messagerie électronique.

La commande svn permet de déclencher des actions avant et après le traitement demandé. C’est le cas pour les actions :

  • commit
  • lock
  • modification d’une propriété

En tout, 9 actions permises. Pour en savoir plus sur ces actions svn, vous pouvez consulter ce billet en français sur clever-age.com

Installation de svnmailer sous FreeBSD

Classiquement :

cd /usr/ports/mail/svnmailer/
make clean
make
make install

La première chose à faire est de créer le fichier de configuration. Google ne sera pas forcément votre ami sur ce point. Les fichiers de configuration diffèrent d’une version de svnmailer à une autre.

Heureusement, le port de svnmailer est bien documenté. Tout (ou presque) se trouve dans /usr/local/share/doc/svnmailer et surtout /usr/local/share/doc/svnmailer/sample.

Fichier de configuration svnmailer

Voici un exemple de fichier de configuration pour svn-mailer :

[general]
# Use the GNU diff tool instead of the internal differ
# (note the line continuation)
diff_command = /usr/bin/diff -up -L %(label_from)s -L %(label_to)s
              %(from)s %(to)s
             
mail_command = /usr/sbin/sendmail

[defaults]
from_addr = svn@example.org
to_addr = dev-team@example.org

# Subject specifications different from the hardcoded default
commit_subject_template = %(prefix)s r%(revision)s %(part)s - %(files)s
propchange_subject_template = %(prefix)s r%(revision)s %(property)s
                             changed - %(files)s
lock_subject_template = %(prefix)s locked - %(files)s
unlock_subject_template = %(prefix)s unlocked - %(files)s

commit_subject_prefix     = [svn]
propchange_subject_prefix = [svn]
lock_subject_prefix       = [svn]
unlock_subject_prefix     = [svn]

# subjects longer than the following will be just truncated:
max_subject_length = 511

# remove =3D kind of characters in email
mail_transfer_encoding = 8bit

Un exemple minimaliste, mais qui conviendra aux petites équipes. Les seules choses à modifier ici sont les valeurs des paramètres :

  • from_addr
  • to_addr

Placez ensuite le contenu de ce fichier dans /usr/local/etc/svn-mailer.conf

Mise en oeuvre du hook svn pour l’envoi du mail au commit

Le dossier hooks est déjà en place dans votre dépôt svn (repository). Il contient les exemples des hooks disponibles, mais ces exemples ne sont pas activés.

Les 2 hooks qui sont appelés lors du commit sont :

  • pre-commit, déclenché avant l’action demandée
  • post-commit, déclenché après l’action demandée

Dans le premier, on peut mettre - par exemple - un script qui empêche la réalisation du commit si le commentaire est vide.

Pour l’envoi du mail, c’est post-commit qui doit être activé.

Voici un exemple de post-commit :

#!/bin/sh

CONFIG="/usr/local/etc/svn-mailer.conf"
MAILER="/usr/local/bin/svn-mailer"

# These are passed in by subversion
REPOS="$1"
REV="$2"

"${MAILER}" --commit --config "${CONFIG}" --repository "${REPOS}" --revision "${REV}"

exit 0

Pour l’installer :

  1. Aller dans le dépôt svn (repository)
  2. Aller dans le dossier des hooks
  3. Vérifier qu’il n’existe pas déjà un post-commit. Si c’est le cas, le sauvegarder
  4. Recopier ce bout de code dans le fichier post-commit
  5. Donner les droits d’exécution : chown 755 post-commit

Pour tester le post-commit directement, sans svn :

sudo -u svn ./post-commit <repos> <rev>

Remplacer repos et rev par le chemin du dépôt et le numéro d’une révision existante. Par exemple :

sudo -u svn ./post-commit /var/svn/repos 10

Vous n’avez plus qu’à consulter votre boîte aux lettres.

Plussoyez !

Les forums sont fermés.