mercoledì 20 febbraio 2008

SVN: notifica via e-mail dei commit

Come già anticipato in un precedente articolo SVN consente di personalizzare le fasi pre e post commit mediante opportuni hooks. E' quindi possibile creare uno script che, nella fase successiva al commit (post-commit) effettui l'invio per e-mail delle informazioni di commit stesse.

Esistono diversi modi (e utility) per inviare per e-mail informazioni su un commit, ma uno semplice ed efficace è svnnotify (pacchetto ubuntu libsvn-notify-perl), uno script perl che consulta il repository SVN per reperire le informazioni da mandare via e-mail.

E' sufficiente creare uno script denominato post-commit nella directory hooks del repository SVN contenente i seguenti comandi:

EPOS="$1"
REV="$2"

# commands
SVNLOOK=`which svnlook`
SVNNOTIFY=`which svnnotify`
GREP=`which grep`

# from and to e-mail address, substitue with something appropriate
MAIL_TO="commit@myDomain.com"
MAIL_FROM=$MAIL_TO

# check projects to send e-mail from
MYREPO=javaRepo # the name of the repo, substitute with something appropriate
$SVNLOOK dirs-changed "$REPOS" | $GREP $MYREPO > /dev/null

# is this a project I'd like to send an-email for?
if [ $? -eq 0 ]
then
$SVNNOTIFY --repos-path "$REPOS" --revision "$REV" --svnlook "$SVNLOOK" --to "$MAIL_TO" --from "$MAIL_FROM" --attach-diff --subject-cx -i 50 -P "[commit]"
fi

Si noti che viene definito l'indirizzo di posta elettronica al quale inviare il resoconto, questo potrebbe essere una mailing list (tipicamente -commit) o un alias di posta per gli sviluppatori. Si noti inoltre che viene fatta una selezione sul repository per il quale inviare delle e-mail, tale controllo può essere omesso se si vuole ricevere notifica per ogni repository, o può essere esteso per includere altri repository.

Il comando svnnotify viene utilizzato cone le informazioni precedentemente definite, ed in particolare:
  • attach-diff che manda per allegato il diff relativo al nuovo commit;
  • subject-cx imposta il subject dell'e-mail in base al contesto (ad esempio viene visualizzato il percorso dei file modificati). Si noti l'utilizzo del flag -i per limitare la lunghezza della linea di soggetto;
  • -P per impostare un prefisso della linea di soggetto, così da facilitare il riconoscimento a colpo d'occhio (e mediante filtri automatici) del contenuto dell'e-mail stessa.

Nessun commento: