Block > Git Hook(s)

 2 min (306 Wörter, 1734 Zeichen)

Hinweis

Dieser Eintrag ist älter als 3 Jahre und entspricht vermutlich nicht mehr dem neuesten Stand der Technik/Realität.

Wer kennt das nicht: jemand pusht etwas in ein Repository und schon trudelt bei dir eine Mail ein mit der letzten Commit-Nachricht.
Das ist aber langweilig und nicht mehr zeitgemaess™, deswegen will ich nun beim Pushen (bzw. pullen auf dem Server) eine Nachricht in einen IRC-Channel schreiben 😉

Noetiges Material:

Nachdem ii und git installiert sind, muss nur noch ein Hook angelegt werden (entweder lokal oder auf einem Server). Lokal sollte der Hook z.B. post-push heissen, extern z.B. post-merge.

Folgender Code kommt also - je nach Situation - in eine der beiden Dateien (ueblicherweise in /path/to/repository/.git/hooks/).
Der Code ist als Gist auf Github verfuegbar .

  git-hook

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#!/bin/bash

# Requirements
command -v git >/dev/null 2>&1 || { echo >&2 "I require \"git\" but it's not installed. Aborting."; exit 1; }
command -v ii >/dev/null 2>&1 || { echo >&2 "I require \"ii\" but it's not installed. Aborting."; exit 1; }

# variables - change these
url="http://example.org"
server="irc.freenode.net"
port="8000"
channel="#test_channel"
nickname="test_bot_42"
root="$HOME/irc"

# create $root
if [[ ! -d "$root" ]] ; then
    mkdir -p "$root"
fi

# connect to $server (install ii first)
ii -i "$root" -s "$server" -p "$port" -n "$nickname" &
# sleep 3 seconds so ii can connect
sleep 3
# print all *.htm-files of the latest commit to the $channel
git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD \
            | grep ".htm" | while read line ; do
    echo "/PRIVMSG $channel :$url/$line" > "$root/$server/in"
done
# wait 1 second
sleep 1
# quit
echo "/QUIT :EOL" > "$root/$server/in"

exit 0

Das wars!

Hach, Hooks sind schon toll.


 Maus

Beitraginfos

 2014-03-15, 15:15:29
 2023-09-30, 18:22:59
  git, linux
 Permalink

Ähnliche Beiträge