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”