Comment puis-je faire en sorte que Subversion (SVN) envoie des e-mails lors des enregistrements ?

StackOverflow https://stackoverflow.com/questions/7913

Question

J'ai toujours trouvé que les e-mails d'enregistrement (de validation) étaient très utiles pour suivre le travail que d'autres personnes effectuaient dans la base de code/le référentiel.Comment configurer SVN pour envoyer par e-mail une liste de distribution à chaque commit ?

J'utilise des clients sous Windows et le serveur Apache Subversion sous Linux.Les réponses ci-dessous pour diverses plates-formes seront probablement utiles à d'autres personnes.

Était-ce utile?

La solution

Vous utilisez le hooks post-commit.Voici un guide.

Voici un exemple de script Ruby qui envoie un e-mail après chaque validation : commit-email.rb

Autres conseils

Jetez un oeil au autonome Notifier Subversion outil (Windows seulement!)Il peut envoyer des e-mails lors du commit et bien plus encore !

Vous aurez envie de vous familiariser avec crochets de référentiel, en particulier le hook post-commit.

1) Installez svnnotify sur un serveur svn en utilisant sudo apt-get

2) Utilisez le hook post-commit de votre dépôt (lire les hooks post-commit sur le site Web de svn)

3) Ouvrez le fichier hook post-commit et collez le code suivant pour envoyer un e-mail à l'aide du serveur SMTP.L'utilisation de SMTP est simple puisque vous n'avez pas besoin de configurer sendmail.

4) Assurez-vous qu'après \ (saut de ligne), vous n'avez pas d'espace supplémentaire.

#!/bin/sh

REPOS="$1"
REV="$2"
TO="xyz@yah.com" # who will receive the notifications
FROM="hello@goog.com" # what will be in "FROM" fields


 /usr/bin/svnnotify \

--repos-path "$REPOS" \
--revision "$REV" \
--to $TO \
--from $FROM \
--reply-to $FROM \
--smtp "YOUR.SMTP.MAIL.COM" \
--subject-prefix "[svn commit]" \
--attach-diff -a \
--header 'Message generated on Subversion Check-in.' \
--footer 'OpenSource Team. ' \
--svnlook "/usr/local/bin/svnlook" \
--handler HTML::ColorDiff # make diff pretty

Il y a une question connexe ici sur les hooks post-commit.Personnellement, je préfère envoyer un message à quelque chose à partir duquel je peux obtenir un flux RSS, car un e-mail par validation surchargerait assez rapidement ma boîte de réception.

Détachement @Matt Miller sur les flux RSS.

Il existe un outil utile appelé WebSVN qui propose des flux RSS de chaque référentiel et des branches/balises/dossiers individuels avec des messages de validation complets.C'est également une excellente interface Web pour consulter rapidement l'historique des fichiers et les validations/diffs sans avoir à exécuter une mise à jour et à ouvrir l'éditeur de votre choix.

Comme quelqu'un d'autre l'a dit, « quelle plateforme ».Sous Windows, j'ai utilisé "blat", qui est un logiciel de messagerie SMTP en ligne de commande gratuit pour ce faire, ainsi qu'un post-commit et un autre fichier batch.

Le post-commit ressemble à ceci :(Appelle simplement un autre fichier batch)

 call d:\subversion\repos\rts\hooks\mail %1 %2

Et mail.bat ressemblait à ceci :

copy d:\subversion\repos\RTS\hooks\Commitmsg.txt %temp%\commit.txt
copy d:\subversion\repos\RTS\hooks\subjbase.txt %temp%\subject.txt
svnlook info -r %2 %1 >> %temp%\commit.txt
echo Revision %2 >> %temp%\commit.txt
svnlook changed -r %2 %1 >> %temp%\commit.txt
svnlook author -r %2 %1 >> %temp%\subject.txt
c:\utils\blat %temp%\commit.txt -t <me@my.email.com> -sf %temp%\subject.txt -server ServerName -f "SVN Admin <svn@my.email.com>" -noh2

Le plus gros problème dans l'écriture de hooks SVN est que vous n'avez fondamentalement AUCUNE configuration d'environnement - pas de chemin exe, pas de chemin temporaire, etc.Bien que cela ait peut-être été amélioré dans les versions SVN plus récentes.

Vous pourriez utiliser robot de construction.C'est un outil qui peut prendre des mesures arbitraires à chaque fois qu'un enregistrement a lieu.Il s'agit d'un système d'intégration continue complet, mais si vous souhaitez uniquement recevoir des e-mails, il peut certainement le gérer.Il dispose de plug-ins pour une variété de SCM, y compris SVN.

Dans le répertoire "hooks" de votre branche Subversion spécifique, il y a 9 fichiers modèles pour vous aider à démarrer.

Point clé:subversion n'exécutera aucun des fichiers tant qu'ils ne seront pas renommés.Pour que post-commit.tmpl s'exécute sous Unix, renommez-le "post-commit".Sous Windows, renommez-le en « post-commit.bat » ou « post-commit.exe ».Subversion va pas exécutez le fichier s'il est nommé "post-commit.tmpl" ou "post-commit.sh" ou similaire.

Assurez-vous également que le fichier est exécutable par le même utilisateur qui exécute Subversion.

J'utilise un script post-commit similaire à celui-ci un.

Cela envoie un joli e-mail HTML.Je l'ai mis à jour où il met en évidence le code qui a été supprimé en rouge et met en évidence le code qui a été ajouté en bleu.

VisualSVN Server dispose d'un hook de notification par e-mail de validation utile VisualSVNServerHooks.exe.Il prend en charge les différences colorées et peut envoyer des notifications de validation uniquement lorsque la validation affecte un certain chemin du référentiel.

Voir "Configuration des notifications par e-mail dans VisualSVN Server".

Je l'ai fait sur un serveur Linux en 3 étapes :

  1. Créer une liste de diffusion (svn-notify@xy.com) et ajoutez des personnes à la liste.

  2. Modifier /path_to_your_svn/svn/hooks/svn-notify/mailer.conf

    • to_addr = svn-notify@xy.com
    • from_addr = %(auteur)s@xy.com
    • commit_subject_prefix =[XY-SVN]
  3. Ajoutez cette ligne à votre /path_to_your_svn/svn/hooks/post-commit déposer:
    /path_to_your_svn/svn/hooks/svn-notify/mailer.py commit "$REPOS" "$REV" /path_to_your_svn/svn/hooks/svn-notify/mailer.conf

Quelle plateforme ?

Sur Mac OS X, j'ai installé msmtp et créé un script post-commit sous les hooks dans le référentiel.Un fichier .msmtprc doit être configuré pour le svn (ou www) utilisateur.

REPOS="`echo $1 | sed 's/\/{root of repository}//g'` "
REV="$2"
MSG=`/usr/local/bin/svn log -v -r HEAD https://localhost$REPOS`

/usr/local/bin/msmtp {list of recipients} <<EOF
Subject: SVN-Commit $REPOS#$REV
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8Bit

$MSG
EOF

Faire {root of repository} et {list of recipients} spécifique à vos besoins.Remarque J'ai utilisé UTF-8 car nous avons des caractères spéciaux ici en Suède (åäö).

Il existe un (grand) exemple écrit en Perl inclus dans les sources de Subversion (il peut être vu ici).

Aussi SVNMailer, qui fonctionne sous Linux.

Vérifier la svn-mod-email colis décrit ici.Le svn-mod-email est un outil puissant pour la gestion des notifications par courrier électronique SVN, fourni sous forme d'archive Debian.Il est facile à installer, à configurer et à utiliser.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top