Je lorgnais depuis quelques temps déjà sur les "hooks" fournis par Subversion, qui permettent de faire toutes sortes de choses sur certains événements.

Je souhaitais notamment : - sur le hook "pre-commit", c'est-à-dire avant d'accepter le commit du développeur : vérifier la syntaxe du code envoyé et s'assurer que le développeur a laissé un commentaire - sur le hook "post-commit", c'est-à-dire une fois que le commit est passé : envoyer un email pour annoncer la nouvelle révision

J'ai créé deux petits scripts en Bash qui permettent de faire cela. Ces scripts sont prévus pour vérifier le code PHP (via "php -l") des fichiers se terminant par ".inc", ".php" et ".module" (pour le framework Drupal) mais rien ne vous empêche d'adapter cela pour vos langages (Ruby, Python ...).

Le tarball est téléchargeable ici : svn_hooks_php_drupal.tar.gz.

Pour l'utiliser, il suffit de le détarrer dans le dossier "hooks" de votre repository SVN, ce qui vous ajoutera 3 fichiers : config, pre-commit et post-commit. Pensez également à faire un "chmod +x" sur ces fichiers pour qu'ils puissent être exécutés.

Ensuite, vous n'avez qu'à modifier le fichier "config" si les développements du repository SVN sont en PHP et que vous n'envisagez pas d'ajouter des fonctionnalités supplémentaires :

# Project name
#PROJECT="My Project"
PROJECT=$(basename $1)

# Check empty comment
CHECK_EMPTY_COMMENT=1

# Email notification
EMAIL_NOTIFICATION=1
EMAIL_DEST="developer1@example.com developer2@example.com"
EMAIL_FROM="noreply@example.com"
EMAIL_SUBJECT="New revision %REV% for \"$PROJECT\""

# Binaries path
SVNLOOK=/usr/bin/svnlook
PHP=/usr/bin/php
MAIL=/usr/bin/mail

Déjà, plusieurs suggestions m'ont été adressées pour ajouter quelques fonctionnalités supplémentaires.

Par exemple :

  • ajout du diff du commit dans le mail de notification de révision,
  • notification via un flux temps réel (IRC, Jabber ...),
  • support de plusieurs langages (Python, Ruby ...) pour la vérification de syntaxe,
  • mapping liste d'extensions de fichiers <-> commande de vérification de syntaxe

Si vous avez d'autres idées, n'hésitez pas à m'en faire part ou mieux, à modifier mes scripts et à les partager !

A vos commits.