From 679d89d6c8cf89b80516dc08dd631f1dbe5683f5 Mon Sep 17 00:00:00 2001 From: Petr Baudis Date: Fri, 6 Nov 2009 16:40:50 +0100 Subject: [PATCH] Support for commit notifications in mirrored repos --- TODO | 2 -- jobd/update.sh | 25 +++++++++++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/TODO b/TODO index 8b76cfb..f3c8959 100644 --- a/TODO +++ b/TODO @@ -1,5 +1,3 @@ -* Support for commit notifications in mirrored repos - * Watches support - random strangers can ask to be notified each time a certain project[#branch]:path changes; c.f. diff --git a/jobd/update.sh b/jobd/update.sh index b44499d..d54c78e 100755 --- a/jobd/update.sh +++ b/jobd/update.sh @@ -20,6 +20,8 @@ bang_action="update" url="$(config_get baseurl)" mail="$(config_get owner)" +bang git for-each-ref --format '%(refname) %(objectname)' >.refs-before + case "$url" in svn://*) GIT_DIR=. bang git svn fetch @@ -34,6 +36,29 @@ esac bang git update-server-info bang config_set lastrefresh "$(date -R)" +# Look at which refs changed and trigger ref-change for these +bang git for-each-ref --format '%(refname) %(objectname)' >.refs-after +sockpath="$cfg_chroot/etc/taskd.socket" +if [ -S "$sockpath" ] && ! cmp -s .refs-before .refs-after; then + { + join -j 1 .refs-before .refs-after | + while read ref old new; do + [ $old = $new ] && continue; + echo "ref-change -1 $proj $ref $old $new" + done + join -j 1 -v 1 .refs-before .refs-after | + while read ref old; do + echo "ref-change -1 $proj $ref $old 0000000000000000000000000000000000000000" + done + join -j 1 -v 2 .refs-before .refs-after | + while read ref new; do + echo "ref-change -1 $proj $ref 0000000000000000000000000000000000000000 $old" + done + } | nc.openbsd -w 1 -U "$sockpath" +fi + +rm -f .refs-before .refs-after + if [ -e .banged ]; then echo "$proj update succeeded - failure recovery" | mail -s "[$cfg_name] $proj update succeeded" "$mail,$cfg_admin" rm .banged -- 2.11.4.GIT