netzstaub

beatz & funkz

Thursday, February 24, 2005

CVS Commitmails verschicken

So, als zweites Posting in der Reihe “Sachen die eigentlich nur Frust bringen”, heute mit CVS, Perlskript, und als All-Time-Favourite in Sachen Frust, Shell-Escapes. Ein sehr praktisches Feature bei CVS ist das Versenden von Commitmails. Da kann man sehen, was andere so im Repository treiben. Noch viel wichtiger, man kriegt seine eigenen Commits vor die Nase gehalten, und wird quasi beim durchforsten der INBOX gezwungen, noch mal kurz drüber zu schauen. Oft findet man da auch schon den ersten Bug :)

Heute wollte ich also das automatische Versenden von Commitmails mit Diff-Output (ohne Diff-Output sieht man nur die veränderten Files und das Commitkommentar, das meistens ohne Diff genau nichtsagend ist. Von sich aus kann CVS sowas natürlich nicht, man muss also ein Skript dazu basteln. Als erstes, so kann man “normale” Commitmails verschicken mit CVS:

Zuerst CVSROOT auschecken:

$ cvs co CVSROOT

Dann loginfo editieren:

$ cd CVSROOT/ && vi loginfo

Dort dann zum Beispiel so eine Zeile eintragen:

DEFAULT mail -s “[CVS] %{}” broesel@foobar.com

Als Alternative kann man auch anstatt DEFAULT Namen von Modulen im CVS eintragen, um z.B. Mails an die einzelnen Entwickler der Module zu verschicken. Wenn ein Modul explizit angegeben wird greift übrigens DEFAULT nicht mehr, da kann man wenn man will allerdings ALL verwenden. Nun gut, jetzt zum eigentlichen Thema der Mail. Es gibt da so ein Skript namens log_accum.pl, das irgendwo bei mir rumfuhr. log_accum.pl scheint (ich hab das Skript jetzt nicht wirklich genau durchgelesen, scheint ziemlich organisch gewachsen zu sein) die Diffs irgendwie zusammen zu sammeln, und mailt sie dann. Ich habe das Skript noch kurz umgeändert, damit es an alle Mailadressen auf der Kommandozeile mailt.

Einrichten tut man das Skript wie folgt:

$ cp log_accum.pl CVSROOT/

$ cd CVSROOT

$ cvs add log_accum.pl

Dann muss man CVS sagen, er soll beim Repository konfigurieren doch bitte auch noch log_accum.pl auschecken, dazu trägt man log_accum.pl in die Datei checkoutlist ein

$ echo log_accum.pl >> checkoutlist

Und als letztes kann man dann solche Zeilen in die loginfo eintragen:

DEFAULT $CVSROOT/CVSROOT/log_accum.pl “%{}” foobar@bratz.com broesel@hupf.de

Ganz wichtig ist hier das “%{}”, wenn man “%s” escaped er das irgendwie nicht richtig, und das Skript sendet mails an Makefile@localhost usw… Das übliche Shellskriptproblem also…

Ganz zum Schluss dann committen, und beim nächsten commit kommt auch die bunte Mail mit Diff:

$ cvs ci -m “bunte mails”

posted by manuel at 9:37 pm  

No Comments »

No comments yet.

RSS feed for comments on this post.

Leave a comment

Powered by WordPress