Envoyer un mail après un commit sur un repository SVN

Voici la manip à faire, sauce Debian, où tout est prévu, tout est packagé 🙂

Contexte

Je suppose que vous avez un SVN qui tourne. Vous voulez qu’à chaque « commit », un mail soit envoyé à une personne (ou une liste de personnes), contenant tout ce qu’on peut en attendre : message, fichiers impactés etc.
Sur Internet, tout le monde y va de son script en perl, ruby, bash etc. Debian propose un truc tout fait. J’aime bien 🙂

Le principe est le suivant : l’outil SVN a déjà tout prévu. Il y a des « hooks » (grappin = bout de code appelable à un instant donné d’une commande SVN) qu’il suffit d’activer. Un tout petit peu de paramétrage et ça roule.

Installez le script-qui-va-bien

Le paquet subversion-tools vous apporte tout un tas de scripts pré-machés (voir /usr/share/subversion/hook-scripts), notamment un pour envoyer un mail bien propre.

Activez le « hook »

Il y a un modèle dans /votre/repo/svn/hooks/, nommé post-commit.tmpl. Copiez-le en post-commit, avec les bonnes permissions (idéalement via cp post-commit.tmpl post-commit).
Editez-le, lisez le baratin et enfin adaptez la dernière ligne indiquant quelle adresse mail est destinatrice (je considère que le serveur hébergeant SVN est capable d’envoyer des mails).
Exemple :

svnsrv:/svn/monrepo/hooks# tail post-commit
# the Subversion repository at
# http://svn.collab.net/repos/svn/trunk/tools/hook-scripts/ and
# http://svn.collab.net/repos/svn/trunk/contrib/hook-scripts/

REPOS="$1"
REV="$2"

/usr/share/subversion/hook-scripts/commit-email.pl \
  "$REPOS" "$REV" mon.adresse@mail.com

Si votre serveur est capable d’envoyer des mails, vous n’avez rien à faire de plus, sinon, il faudra jouer avec la définition des variables $sendmail et $smtp_server (l’une ou l’autre, lisez les commentaires) dans le script /usr/share/subversion/hook-scripts/commit-email.pl.

Enfin, si vous voulez, la ligne de commande accepte plusieurs destinataires (au moins 2, je n’ai pas testé plus ni lu le code pour savoir).

Testez

Normalement, c’est tout. Faire un commit quelconque et voyez le résultat.
J’utilise TortoiseSVN comme client, sous Windows ; ça marche nickel. Si vous vous plantez dans la configuration, Tortoise vous remonte l’erreur indiquant par exemple que le script /usr/share/subversion/hook-scripts/commit-email.pl est KO.

One comment

  1. Petit ajout :
    pour éviter d’avoir le « diff » des fichiers (ce qui peut être long), j’ai opté pour une méthode cracra mais rapide.
    Ligne 539 du script perl, modifier :
    my $diff_wanted = ($project->{show_diff} and $mode eq ‘commit’);
    par
    my $diff_wanted = 0;

    Hop, plus de « diff » dans le corps du message. C’est pas terrible car le programme continue de calculer ce diff, mais bon…

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.