Sat Oct 13 15:58:12 CEST 2012
Reanimating #gentoo-commits
Today I got annoyed with the silence in #gentoo-commits and spent a few hours fixing that. We have a bot reporting ... well, I hope all commits, but I haven't tested it enough.
So let me explain how it works so you can be very amused ...
First stage: Get notifications
Difficulty: I can't install postcommit hooks on cvs.gentoo.org
Workaround: gentoo-commits@lists.gentoo.org emails
Code (procmailrc):
Second stage: Extracting the data
Difficulty: Email is not a structured format
Workaround: bashing things with bash until happy
Code (irker-wrapper.sh):
Third stage: Sending the notifications
Difficulty: How to communicate with irkerd?
Workaround: nc, a hammer, a few thumbs
Code:
Bonus trick: using command="" in ~/.ssh/authorized_keys
... and now I really need a beer :)
So let me explain how it works so you can be very amused ...
First stage: Get notifications
Difficulty: I can't install postcommit hooks on cvs.gentoo.org
Workaround: gentoo-commits@lists.gentoo.org emails
Code (procmailrc):
:0: * ^TO_gentoo-commits@lists.gentoo.org { :0 c .maildir/.INBOX.gentoo-commits/ :0 | bash ~/irker-wrapper.sh }So this runs all mails that come from the ML through a script, and puts a copy into a subfolder.
Second stage: Extracting the data
Difficulty: Email is not a structured format
Workaround: bashing things with bash until happy
Code (irker-wrapper.sh):
#!/bin/bash # irker wrapper helper thingy while read line; do # echo $line # debug echo $line | grep -q "X-VCS-Repository:" && REPO=${line/X-VCS-Repository: /} echo $line | grep -q "X-VCS-Committer:" && AUTHOR=${line/X-VCS-Committer:/} echo $line | grep -q "X-VCS-Directories:" && DIRECTORIES=${line/X-VCS-Directories:/} echo $line | grep -q "Subject:" && SUBJECT=${line/Subject:/} EVERYTHING+=$line EVERYTHING+="\n" done COMMIT_MSG=`echo -e $EVERYTHING | grep "Log:" -A1 | grep -v "Log:"` ssh commitbot@lolcode.gentooexperimental.org "{\"to\": [\"irc://chat.freenode.net/#gentoo-commits\"], \"privmsg\": \"$REPO: ${AUTHOR} ${DIRECTORIES}: $COMMIT_MSG \"}"Why the ssh stuff? Well, the server where the mails arrive is a bit restricted, hard to run a daemon there 'n stuff, so let's just pipe it somewhere more liberal
Third stage: Sending the notifications
Difficulty: How to communicate with irkerd?
Workaround: nc, a hammer, a few thumbs
Code:
#!/bin/bash echo $@ | nc --send-only 127.0.0.1 6659And that's how the magic works.
Bonus trick: using command="" in ~/.ssh/authorized_keys
... and now I really need a beer :)