Friday 29 August 2008

Subversion post-commit RSS hook

Subversion wordt voor verschillende doeleinden gebruikt bijvoorbeeld voor documentatie en broncode. Kenmerkend is dat er over het algemeen meerdere mensen op een enkele repository werken. De wijzigingen aan de repository zijn doorgaans lastig te volgen. Er is een mogelijkheid tot het e-mailen van commits via de post-commit-hook. Voor een homogeen team is dat een prima oplossing, maar als je een team samensteld met verschillende disciplines en verschillende belangen, waarbij een deel projectdocumentatie verzorgt en een ander deel de technische realisatie doet, dan kunnen alle mailtjes erg vermoeiend worden. Een projectleider die een e-mail ontvangt van een commit die een bug fixt, zit hier niet echt op te wachten. Helemaal omdat er toch een heel aantal commits per dag zullen plaatsvinden. Prompt stroomt de mailbox over en leest en volgt niemand meer de, zo nu en dan wel belangrijke, wijzigingen. 

Ik heb daarom besloten om een RSS-feed te genereren van de commits. Op die manier kunnen personen in projectgroepen veel sneller en makkelijker de voor hun niet relevante informatie filteren en dus in zo weinig mogelijke tijd op de hoogte blijven. Mijn installatie gaat uit van een Red Hat Enterprise 5 omgeving met Subversion 1.4.6 en Python 2.4.3.

Eerst moet je ervoor zorgen dat je svn2feed.py bekomt. Die is te vinden in de repository van Subversion zelf op 
http://subversion.tigris.org. Dit zogenaamde hook script plaats je in de hooks map van de repos waarvoor je de RSS wilt genereren. Download en maak het uitvoerbaar met "chmod +x svn2feed.py".

Installeer PyRSS2gen (http://www.dalkescientific.com/Python/PyRSS2Gen.html). PyRSSGen is normaliter niet meegeleverd met Python. Na downloaden zorgt "python setup.py install" ervoor dat het wordt gebuild, gecompileerd en gekopieerd. Als je geen vreemde smaak distributie hebt dan komt het allemaal goed, anders moet je ook het installatiepad opgeven.

Nu moet de svn2feed worden gekoppeld aan het post-commit script. Indien post-commit niet bestaat en post-commit.tmpl wel, kopieer deze naar post-commit. Ik heb ervoor gekozen om meerdere repositories met hetzelfde svn2feed script aan te roepen. Daarom heb ik het op een plaats naast mijn repositories gezet en kan ik vanuit elke repository met onderstaande code in post-commit de feed genereren, let erop dat je de code invoert nadat de REPOS variabele is gezet.

# fetch reposname
PWD=$REPOS
IFS=/
SPLITS=$PWD

for i in $SPLITS; do
  NAME="$i"
done

IFS=" "

/var/svn/hooks/svn2feed.py -F rss --feed-file=/var/www/html/subversion/$NAME/feed.rss -u http://mijn.domein.nl/svn/$NAME/ -U http://mijn.domein.nl/svn/$NAME $REPOS