diff options
| -rwxr-xr-x | .graveyard/git/git-clone-into (renamed from git/git-clone-into) | 0 | ||||
| -rwxr-xr-x | .graveyard/git/git-eternal-move (renamed from git/git-eternal-move) | 0 | ||||
| -rwxr-xr-x | git/gitolite-hooks/irc-announce | 104 | 
3 files changed, 104 insertions, 0 deletions
| diff --git a/git/git-clone-into b/.graveyard/git/git-clone-into index 67e820e6..67e820e6 100755 --- a/git/git-clone-into +++ b/.graveyard/git/git-clone-into diff --git a/git/git-eternal-move b/.graveyard/git/git-eternal-move index 50361e7b..50361e7b 100755 --- a/git/git-eternal-move +++ b/.graveyard/git/git-eternal-move diff --git a/git/gitolite-hooks/irc-announce b/git/gitolite-hooks/irc-announce new file mode 100755 index 00000000..32ae8f26 --- /dev/null +++ b/git/gitolite-hooks/irc-announce @@ -0,0 +1,104 @@ +#! /bin/sh +set -euf + +config_file="$GL_ADMIN_BASE/conf/irc-announce.conf" +if test -f "$config_file"; then +  . "$config_file" +fi + +# XXX when changing IRC_CHANNEL or IRC_SERVER/_PORT, don't forget to update +#     any relevant gitolite LOCAL_CODE! +# CAVEAT we hope that IRC_NICK is unique +IRC_NICK="${IRC_NICK-gl$GL_TID}" +IRC_CHANNEL="${IRC_CHANNEL-#retiolum}" +IRC_SERVER="${IRC_SERVER-ire.retiolum}" +IRC_PORT="${IRC_PORT-6667}" + +# for privmsg_cat below +export IRC_CHANNEL + +# collect users that are mentioned in the gitolite configuration +interested_users="$(perl -e ' +  do "gl-conf"; +  print join(" ", keys%{ $one_repo{$ENV{"GL_REPO"}} }); +')" + +# CAVEAT beware of real TABs in grep pattern! +# CAVEAT there will never be more than 42 relevant log entries! +log="$(tail -n 42 "$GL_LOGFILE" | grep "^[^	]*	$GL_TID	")" +update_log="$(echo "$log" | grep "^[^	]*	$GL_TID	update")" + +# (debug output) +env | sed 's/^/env: /' +echo "$log" | sed 's/^/log: /' + +# see http://gitolite.com/gitolite/dev-notes.html#lff +reponame=$(echo "$update_log" | cut -f 4) +username=$(echo "$update_log" | cut -f 5) +ref_name=$(echo "$update_log" | cut -f 7 | sed 's|^refs/heads/||') +old_sha=$(echo "$update_log" | cut -f 8) +new_sha=$(echo "$update_log" | cut -f 9) + +# check if new branch is created +if test $old_sha = 0000000000000000000000000000000000000000; then +  # TODO what should we really show? +  old_sha=$new_sha^ +fi + +# +git_log="$(git log $old_sha..$new_sha --pretty=oneline --abbrev-commit)" +commit_count=$(echo "$git_log" | wc -l) + +# echo2 and cat2 are used output to both, stdout and stderr +# This is used to see what we send to the irc server. (debug output) +echo2() { echo "$*"; echo "$*" >&2; } +cat2() { tee /dev/stderr; } + +# privmsg_cat transforms stdin to a privmsg +privmsg_cat() { awk '{ print "PRIVMSG "ENVIRON["IRC_CHANNEL"]" :"$0 }'; } + +# +# +# +{ +  echo2 "USER $LOGNAME 0 * :$LOGNAME@$(hostname)" +  echo2 "NICK $IRC_NICK" + +  # wait for MODE message +  # CAVEAT 1 second was enough while testing...^_^ +  sleep 1 + +  echo2 "JOIN $IRC_CHANNEL" + +  echo "$interested_users" \ +    | tr ' ' '\n' \ +    | grep -v "^$GL_USER" \ +    | sed 's/$/: poke/' \ +    | privmsg_cat \ +    | cat2 + +  printf '[13%s] %s pushed %s new commit%s to 6%s %s\n' \ +      "$reponame" \ +      "$username" \ +      "$commit_count" \ +      "$(test $commit_count == 1 || echo s)" \ +      "$(hostname)" \ +      "$ref_name" \ +    | privmsg_cat \ +    | cat2 + +  echo "$git_log" \ +    | sed 's/^/14/;s/ / /' \ +    | privmsg_cat \ +    | cat2 + +  echo2 "PART $IRC_CHANNEL" + +  # TESTME does this sleep help to send all messages? +  sleep 5 + +  echo2 'QUIT :Gone to have lunch' + +  printf  +} \ +  | nc -c "$IRC_SERVER" "$IRC_PORT" | 
