-
[SVN] Être averti en temps réel des commits envoyés
par Skreo, le 23 Décembre 2009 à 15:18Quand on travaille sur un projet avec plusieurs personnes et qu'on utilise SVN, il peut être utile d'être averti en temps réel des commits qu'envoient les autres collaborateurs.
Je me suis inspiré de l'idée de Metrokid et du script de Christophe-Marie pour faire un petit script de notification par Cron.
Nous aurons besoin de la commande notify-send disponible dans le paquet libnotify-bin. Si vous ne l'avez pas, installez le :
$ sudo aptitude install libnotify-binEt voilà notre petit script, que nous nommerons .svn-monitor.sh et que nous placerons dans le dossier home de l'utilisateur courant ($HOME) :
#!/bin/bash
# Pour que cron sache sur quel moniteur afficher la notification
DISPLAY=:0.0
# Fichier dans lequel on stocke la date de dernière révision testée
LOGFILE=$HOME/.svn-monitor
# URL du dépôt SVN
SVNPATH=http://url-du-depot
# Nom d'utilisateur dont les révisions ne seront pas affichées
USERNAME=Skreo
# Icône utilisée dans la fenêtre de notification
ICON='/usr/share/icons/gnome/32x32/status/dialog-information.png'
# Durée d'affichage de la fenêtre de notification
DURATION=5000
# Révision à vérifier
if test -f $LOGFILE ; then
REV=$(( `cat $LOGFILE` +1 ))
else
REV=HEAD
fi
# Récupération du log de la dernière révision
TEXT=`svn log $SVNPATH -r $REV:HEAD | sed -r "s/^-+$/---/" | sed -r "s/^r([0-9]+) \| ([^ ]+) \| [^(]*\(([^)]+)\).*$/rév \1 par \2 le \3/"`
# Si on obtient un résultat, on l'affiche
if test "$TEXT" != "" ; then
# Détermination de la dernière révision
LASTREV=`echo -e "$TEXT" | sed -r "s/^(.*rév ([0-9]+) .*|.*)$/\2/" | awk NF | sort -nr | head -1`
# Suppression de l'affichage des révisions faîtes par $USERNAME
TEXT=`echo "$TEXT" | sed -r "s/$USERNAME/-/g"`
TEXT=`echo "$TEXT" | sed -r ':a;N;$!ba;s/---\nrév [0-9]+ par - .*\n---/---/g'`
# Suppression de la première et de la dernière ligne, et suppression des lignes vides
TEXT=`echo "$TEXT" | sed '1d' | sed '$d' | awk NF`
# Affichage de la notification
notify-send -t $DURATION -i "$ICON" "SVN" "$TEXT"
# Et on l'enregistre dans le fichier
echo $LASTREV > $LOGFILE
fiIl ne reste ensuite plus qu'à l'exécuter par cron toutes les 5 minutes par exemple.
Pour modifier les tâches cron :$ crontab -eLignes à ajouter dans le cron :
DISPLAY=:0.0
LANG=fr_FR.UTF-8
*/5 * * * * sh $HOME/.svn-monitor.sh
Partager cet article :

Tags : shell, linux, notification, svn, gnome
Suivre le flux RSS des commentaires de cet article
Revenir à la liste des articles
-
Commentaires
Le point qui me gêne le plus dans cette histoire, ça reste quand même le cron.
Après c'est sûr que c'est plus simple de contacter le serveur SVN à partir du poste client, mais bon, c'est bourrin quand même...
Faudrait faire du push, et utiliser le système de hooks de SVN, mais ça devient un peu violent pour un petit script.
Une requête "svn log" n'est coûteuse ni en ressources ni en BP, je vois pas trop où est le problème. Alors évidemment, ça sera du "temps réel" à + ou - 1 minute au maximum, mais c'est largement suffisant pour cette utilité.
Un système de push serait bien sûr idéal, mais là ça devient beaucoup plus compliqué, et il faut avoir l'accès total au serveur SVN, ce que n'ont pas toujours les collaborateurs de plus ou moins vastes projets...5Groumph14 Janvier 2010 à 19:16il vaut mieux se servir des hooks plutôt qu'un cron. SVN est déjà prévu pour des script sur différentes actions, notament en post ou même en précommit.
Quand tu crées ton repo, SVN te mets des examples de scripts dans le répertoire hooks qui peuvent servir de base de travail. Ensuite, google est ton ami, il y a plein d'exemples dispo partout.
Au bureau, j'ai réussi à setter un script qui envoie un mail à une liste de distribution restreinte avec toutes les infos sur le commit qui vient d'être fait: fichier modifiés, auteur du commit, commentaire. On s'en sert pour aligner nos répertoires de travail entre la France, Singapour, la Malaisie et l'Italie. Les updates sont faits par des administrateurs locaux qui sont en copie des mails.Yep faudrait que je teste les commit hooks. Mais là je voulais tester un truc sans toucher au serveur. Dans certain projets, notamment des projets open-source, on peut très bien être commiter sans avoir accès à la configuration du serveur. Et dans ce cas il n'y a pas tellement d'autres alternatives.
Ajouter un commentaire
Haut de page

Ta solution m'intéresse beaucoup, surtout la partie DISPLAY=:0.0 dans cron, je ne savais pas que l'on pouvait faire ça sous. Sous Mac, Quartz, l'équivalent de X11 est au courant du contexte graphique courant, donc ...
Tu as une idée pour une version dégradée qui afficherai la même chose mais dans les points de terminaux ouverts ? (à la shutdown
par exemple)