From 2cb552ce1f5f74cd141c84d4f163c6f7d923145a Mon Sep 17 00:00:00 2001 From: tv Date: Fri, 14 Mar 2014 03:22:39 +0100 Subject: git/gitolite-hooks/irc-announce: initial commit --- git/gitolite-hooks/irc-announce | 91 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100755 git/gitolite-hooks/irc-announce diff --git a/git/gitolite-hooks/irc-announce b/git/gitolite-hooks/irc-announce new file mode 100755 index 00000000..3230a2b0 --- /dev/null +++ b/git/gitolite-hooks/irc-announce @@ -0,0 +1,91 @@ +#! /bin/sh +set -euf + +# CAVEAT we hope that IRC_NICK is unique +IRC_NICK="gl$GL_TID" +IRC_CHANNEL='#testing' +IRC_SERVER='ire.retiolum' +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' \ + | 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 'QUIT :Gone to have lunch' + + printf  +} \ + | nc -c "$IRC_SERVER" "$IRC_PORT" -- cgit v1.2.3 From 86198e2578aa76a1d0f269ba7802eb2e46bbe0a1 Mon Sep 17 00:00:00 2001 From: tv Date: Fri, 14 Mar 2014 03:44:33 +0100 Subject: irc-announce: talk about LOCAL_CODE --- git/gitolite-hooks/irc-announce | 2 ++ 1 file changed, 2 insertions(+) diff --git a/git/gitolite-hooks/irc-announce b/git/gitolite-hooks/irc-announce index 3230a2b0..31f4444c 100755 --- a/git/gitolite-hooks/irc-announce +++ b/git/gitolite-hooks/irc-announce @@ -1,6 +1,8 @@ #! /bin/sh set -euf +# 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="gl$GL_TID" IRC_CHANNEL='#testing' -- cgit v1.2.3 From b19c958016f2fe26a49449954d64f0f337ec2302 Mon Sep 17 00:00:00 2001 From: tv Date: Fri, 14 Mar 2014 03:44:47 +0100 Subject: irc-announce: use correct channel --- git/gitolite-hooks/irc-announce | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/gitolite-hooks/irc-announce b/git/gitolite-hooks/irc-announce index 31f4444c..ca8b0059 100755 --- a/git/gitolite-hooks/irc-announce +++ b/git/gitolite-hooks/irc-announce @@ -5,7 +5,7 @@ set -euf # any relevant gitolite LOCAL_CODE! # CAVEAT we hope that IRC_NICK is unique IRC_NICK="gl$GL_TID" -IRC_CHANNEL='#testing' +IRC_CHANNEL='#retiolum' IRC_SERVER='ire.retiolum' IRC_PORT=6667 -- cgit v1.2.3 From c78d7f2e898515d429ec91eaddacc39c40336c3e Mon Sep 17 00:00:00 2001 From: tv Date: Fri, 14 Mar 2014 03:53:32 +0100 Subject: irc-announce: sleep 5 before QUIT --- git/gitolite-hooks/irc-announce | 2 ++ 1 file changed, 2 insertions(+) diff --git a/git/gitolite-hooks/irc-announce b/git/gitolite-hooks/irc-announce index 3230a2b0..5fe50ca3 100755 --- a/git/gitolite-hooks/irc-announce +++ b/git/gitolite-hooks/irc-announce @@ -84,6 +84,8 @@ privmsg_cat() { awk '{ print "PRIVMSG "ENVIRON["IRC_CHANNEL"]" :"$0 }'; } | privmsg_cat \ | cat2 + sleep 5 + echo2 'QUIT :Gone to have lunch' printf  -- cgit v1.2.3 From 64b8e353537d2f21eea4531bcae460a1bf14a52b Mon Sep 17 00:00:00 2001 From: tv Date: Fri, 14 Mar 2014 03:55:20 +0100 Subject: irc-announce: use correct channel, again... --- git/gitolite-hooks/irc-announce | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/gitolite-hooks/irc-announce b/git/gitolite-hooks/irc-announce index 5fe50ca3..1b356bee 100755 --- a/git/gitolite-hooks/irc-announce +++ b/git/gitolite-hooks/irc-announce @@ -3,7 +3,7 @@ set -euf # CAVEAT we hope that IRC_NICK is unique IRC_NICK="gl$GL_TID" -IRC_CHANNEL='#testing' +IRC_CHANNEL='#retiolum' IRC_SERVER='ire.retiolum' IRC_PORT=6667 -- cgit v1.2.3 From d79aeb890dfbf97c2dd85f48c3fb04d2f07bf066 Mon Sep 17 00:00:00 2001 From: tv Date: Fri, 14 Mar 2014 04:04:28 +0100 Subject: irc-announce: PART before QUIT --- git/gitolite-hooks/irc-announce | 3 +++ 1 file changed, 3 insertions(+) diff --git a/git/gitolite-hooks/irc-announce b/git/gitolite-hooks/irc-announce index 1b356bee..394d5261 100755 --- a/git/gitolite-hooks/irc-announce +++ b/git/gitolite-hooks/irc-announce @@ -84,6 +84,9 @@ privmsg_cat() { awk '{ print "PRIVMSG "ENVIRON["IRC_CHANNEL"]" :"$0 }'; } | privmsg_cat \ | cat2 + echo2 "PART $IRC_CHANNEL" + + # TESTME does this sleep help to send all messages? sleep 5 echo2 'QUIT :Gone to have lunch' -- cgit v1.2.3 From e6a6809bb14fcc99231358dc3e3b389e451f57d3 Mon Sep 17 00:00:00 2001 From: tv Date: Fri, 14 Mar 2014 04:17:59 +0100 Subject: irc-announce: make IRC_* configurable --- git/gitolite-hooks/irc-announce | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/git/gitolite-hooks/irc-announce b/git/gitolite-hooks/irc-announce index 394d5261..aa9f91f3 100755 --- a/git/gitolite-hooks/irc-announce +++ b/git/gitolite-hooks/irc-announce @@ -1,11 +1,18 @@ #! /bin/sh set -euf +config_file="$HOME/.local/krebs/irc-announce" +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="gl$GL_TID" -IRC_CHANNEL='#retiolum' -IRC_SERVER='ire.retiolum' -IRC_PORT=6667 +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 -- cgit v1.2.3 From d5d9073f5317290b7aa679d930c2718cd1cdec20 Mon Sep 17 00:00:00 2001 From: tv Date: Fri, 14 Mar 2014 04:33:13 +0100 Subject: irc-announce: fix conflict resolution fail --- git/gitolite-hooks/irc-announce | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/git/gitolite-hooks/irc-announce b/git/gitolite-hooks/irc-announce index ca8b0059..aa9f91f3 100755 --- a/git/gitolite-hooks/irc-announce +++ b/git/gitolite-hooks/irc-announce @@ -1,13 +1,18 @@ #! /bin/sh set -euf +config_file="$HOME/.local/krebs/irc-announce" +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="gl$GL_TID" -IRC_CHANNEL='#retiolum' -IRC_SERVER='ire.retiolum' -IRC_PORT=6667 +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 @@ -86,6 +91,11 @@ privmsg_cat() { awk '{ print "PRIVMSG "ENVIRON["IRC_CHANNEL"]" :"$0 }'; } | 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  -- cgit v1.2.3 From 080c871894d43139037ea27fc40ef342fcc1e2c9 Mon Sep 17 00:00:00 2001 From: tv Date: Fri, 14 Mar 2014 04:43:37 +0100 Subject: irc-announce: read from $GL_ADMIN_BASE/conf/ --- git/gitolite-hooks/irc-announce | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/gitolite-hooks/irc-announce b/git/gitolite-hooks/irc-announce index aa9f91f3..99ea3d9d 100755 --- a/git/gitolite-hooks/irc-announce +++ b/git/gitolite-hooks/irc-announce @@ -1,7 +1,7 @@ #! /bin/sh set -euf -config_file="$HOME/.local/krebs/irc-announce" +config_file="$GL_ADMIN_BASE/conf/irc-announce.conf" if test -f "$config_file"; then . "$config_file" fi -- cgit v1.2.3 From ecea0f9dadf6995f2cdebfa270482852d244a2c5 Mon Sep 17 00:00:00 2001 From: tv Date: Fri, 14 Mar 2014 04:48:41 +0100 Subject: irc-announce: don't poke committer --- git/gitolite-hooks/irc-announce | 1 + 1 file changed, 1 insertion(+) diff --git a/git/gitolite-hooks/irc-announce b/git/gitolite-hooks/irc-announce index 99ea3d9d..32ae8f26 100755 --- a/git/gitolite-hooks/irc-announce +++ b/git/gitolite-hooks/irc-announce @@ -72,6 +72,7 @@ privmsg_cat() { awk '{ print "PRIVMSG "ENVIRON["IRC_CHANNEL"]" :"$0 }'; } echo "$interested_users" \ | tr ' ' '\n' \ + | grep -v "^$GL_USER" \ | sed 's/$/: poke/' \ | privmsg_cat \ | cat2 -- cgit v1.2.3 From cb00aa8f64253085965bfc63aa8b1b2bb947449d Mon Sep 17 00:00:00 2001 From: tv Date: Fri, 14 Mar 2014 04:52:26 +0100 Subject: RIP git-eternal-move --- .graveyard/git/git-eternal-move | 15 +++++++++++++++ git/git-eternal-move | 15 --------------- 2 files changed, 15 insertions(+), 15 deletions(-) create mode 100755 .graveyard/git/git-eternal-move delete mode 100755 git/git-eternal-move diff --git a/.graveyard/git/git-eternal-move b/.graveyard/git/git-eternal-move new file mode 100755 index 00000000..50361e7b --- /dev/null +++ b/.graveyard/git/git-eternal-move @@ -0,0 +1,15 @@ +#! /bin/sh +# +# git-eternal-move FROM TO-DIRECTORY +# +set -euf +if test $# -ne 2; then + echo 'Error 1: You are made of stupid!' >&2 + exit 23 +fi +exec git filter-branch --tree-filter " + set -euf + if test -e '$1'; then + mkdir -p '$2' + mv '$1' '$2' + fi" diff --git a/git/git-eternal-move b/git/git-eternal-move deleted file mode 100755 index 50361e7b..00000000 --- a/git/git-eternal-move +++ /dev/null @@ -1,15 +0,0 @@ -#! /bin/sh -# -# git-eternal-move FROM TO-DIRECTORY -# -set -euf -if test $# -ne 2; then - echo 'Error 1: You are made of stupid!' >&2 - exit 23 -fi -exec git filter-branch --tree-filter " - set -euf - if test -e '$1'; then - mkdir -p '$2' - mv '$1' '$2' - fi" -- cgit v1.2.3 From f92547a54d899216a4cd849ee515726824467765 Mon Sep 17 00:00:00 2001 From: tv Date: Fri, 14 Mar 2014 04:54:15 +0100 Subject: RIP git-clone-into --- .graveyard/git/git-clone-into | 48 +++++++++++++++++++++++++++++++++++++++++++ git/git-clone-into | 48 ------------------------------------------- 2 files changed, 48 insertions(+), 48 deletions(-) create mode 100755 .graveyard/git/git-clone-into delete mode 100755 git/git-clone-into diff --git a/.graveyard/git/git-clone-into b/.graveyard/git/git-clone-into new file mode 100755 index 00000000..67e820e6 --- /dev/null +++ b/.graveyard/git/git-clone-into @@ -0,0 +1,48 @@ +#! /bin/sh +# +# usage: git-clone-into repository directory +# +set -euf + +tempdir() { + set -- `tempnam $1` + mkdir $1 + echo $1 +} + +## [prefix] -> tempnam +tempnam() { + until set -- $1 ${1-}`candnam` && ! test -e $2; do :; done + echo $2 +} + +candnam() { + uuidgen 2>/dev/null || date +%s%N +} + + + + tmp_remote=`candnam` + tmp_branch=`candnam` + + subdir=$2 + if test -e $subdir; then + echo 'You are made of stupid!' >&2 + exit 23 + fi + tmpdir=`tempdir /tmp/tempdir-` + #trap "test -d $tmpdir && rm -vfR $tmpdir" EXIT + trap "test -d $tmpdir && rm -fR $tmpdir" EXIT + repository="${1-$repository}" + git clone "$repository" $tmpdir + (cd $tmpdir + subdir="$subdir" git filter-branch --tree-filter ' + if ! test -d $subdir; then + mkdir -p $subdir + git ls-tree -z --name-only $GIT_COMMIT | xargs -I. --null mv . $subdir + fi + ' + git checkout -b $tmp_branch) + git remote add $tmp_remote $tmpdir + git fetch $tmp_remote + git merge $tmp_remote/$tmp_branch # TODO configurable branch diff --git a/git/git-clone-into b/git/git-clone-into deleted file mode 100755 index 67e820e6..00000000 --- a/git/git-clone-into +++ /dev/null @@ -1,48 +0,0 @@ -#! /bin/sh -# -# usage: git-clone-into repository directory -# -set -euf - -tempdir() { - set -- `tempnam $1` - mkdir $1 - echo $1 -} - -## [prefix] -> tempnam -tempnam() { - until set -- $1 ${1-}`candnam` && ! test -e $2; do :; done - echo $2 -} - -candnam() { - uuidgen 2>/dev/null || date +%s%N -} - - - - tmp_remote=`candnam` - tmp_branch=`candnam` - - subdir=$2 - if test -e $subdir; then - echo 'You are made of stupid!' >&2 - exit 23 - fi - tmpdir=`tempdir /tmp/tempdir-` - #trap "test -d $tmpdir && rm -vfR $tmpdir" EXIT - trap "test -d $tmpdir && rm -fR $tmpdir" EXIT - repository="${1-$repository}" - git clone "$repository" $tmpdir - (cd $tmpdir - subdir="$subdir" git filter-branch --tree-filter ' - if ! test -d $subdir; then - mkdir -p $subdir - git ls-tree -z --name-only $GIT_COMMIT | xargs -I. --null mv . $subdir - fi - ' - git checkout -b $tmp_branch) - git remote add $tmp_remote $tmpdir - git fetch $tmp_remote - git merge $tmp_remote/$tmp_branch # TODO configurable branch -- cgit v1.2.3