Dear LazyWeb,
I use the standard ciabot.pl
script in a git post-receive
hook. This
works ok, except in the case where changes are made in a published branch,
and then that branch is merged into a second published branch.
In that case, ciabot.pl
reports all the changes twice, once when they're
committed to the published branch, and again when the branch is merged.
This is worst when I sync up two branches; if there were a lot of changes
made on either branch, they all flood into the irc channel again.
Am I using the ciabot.pl
script wrong, or is there a better script I should
use? Or maybe there's a CIA alternative that is smarter about git commits,
so it will filter out duplicates?
Here, FWIW, is how I currently use it in my post-receive
hook.
while read oldrev newrev refname; do
refname=${refname#refs/heads/}
[ "$refname" = "master" ] && refname=
for merged in $(git rev-list --reverse $newrev ^$oldrev); do
ciabot_git.pl $merged $refname
done
done
Update: After hints and discussion from Buxy, I arrived at the following:
while read oldrev newrev refname; do
branchname=${refname#refs/heads/}
[ "$branchname" = "master" ] && branchname=
for merged in $(git rev-parse --symbolic-full-name --not --branches | egrep -v "^\^$refname$" | git rev-list --reverse --stdin $oldrev..$newrev); do
ciabot_git.pl $merged $branchname
done
done
With this, changes available in another published branch are not sent to CIA.
There might still be some bugs with this.
For those who stumble over this, also check this variant: http://git.gnome.org/cgit/gitadmin-bin/tree/post-receive-notify-cia