summaryrefslogtreecommitdiffstats
path: root/git
diff options
context:
space:
mode:
authormakefu <root@pigstarter.de>2014-03-14 12:17:47 +0100
committermakefu <root@pigstarter.de>2014-03-14 12:17:47 +0100
commita5c8fb018527b8642e6be01a9e2fc1af7cb80cb7 (patch)
tree70f89440f7f6e505adacc2a2775e3bc5e3447db2 /git
parentb25891641316dcaf5c469a22b96393e6e55fc5fe (diff)
parentf92547a54d899216a4cd849ee515726824467765 (diff)
Merge branch 'master' of https://github.com/krebscode/painload
Diffstat (limited to 'git')
-rwxr-xr-xgit/git-clone-into48
-rwxr-xr-xgit/git-eternal-move15
-rwxr-xr-xgit/gitolite-hooks/irc-announce104
3 files changed, 104 insertions, 63 deletions
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
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"
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"