All patches and comments are welcome. Please squash your changes to logical
commits before using git-format-patch and git-send-email to
patches@git.madduck.net.
If you'd read over the Git project's submission guidelines and adhered to them,
I'd be especially grateful.
3 # fbi-announce — announce Git commits to the FBI mail-to-IRC gateway
5 # Copyright (c) 2006 Fernando J. Pereda <ferdy@gentoo.org>
6 # Copyright (c) 2008 Joerg Jaspert <joerg@debian.org>
7 # Copyright © 2009–2010 martin f. krafft <madduck@debian.org>
9 # Distributed under the terms of the GNU General Public License v2
11 # This script is based on Git ciabot.pl by Petr Baudis.
15 # The script is meant to be configured using git-config with the following keys:
16 # hooks.fbi-project the project name known to FBI
17 # hooks.fbi-component an optional component name
18 # hooks.fbi-url-template the template to the gitweb URL (containing @@sha1@@)
19 # hooks.fbi-emailsender the sender address to use in the email
20 # hooks.fbi-emailcc carbon-copy recipients (comma-separated) if the message
21 # hooks.fbi-refwidth the width of references to show (default 7)
22 # hooks.fbi-noisy include the entire log message in the announcement
23 # hooks.fbi-msg-template the template for the message to be sent (default:
24 # [@@component@@/]@@project@@: @@author@@: \
25 # @@logmessage@@ [@@ref@@] @@url@@)
27 # The hook is meant ot be run from the Git post-receive hook.
31 # we need to ensure we know $GIT_DIR for the git-config calls
32 GIT_DIR=$(git rev-parse --git-dir 2>/dev/null)
33 if [ -z "$GIT_DIR" ]; then
34 echo >&2 "E: post-receive: GIT_DIR not set"
39 project=$(git config hooks.fbi-project 2>/dev/null) || {
40 echo >&2 "E: FBI project not set (hooks.fbi-project)"
43 component=$(git config hooks.fbi-component 2>/dev/null ||:)
44 url=$(git config hooks.fbi-url-template 2>/dev/null ||:)
45 noisy=$(git config hooks.fbi-noisy 2>/dev/null || echo false)
46 from=$(git config hooks.fbi-emailsender 2>/dev/null ||:)
47 to="commit@commit.ganneff.de" #TODO: possibly factor out to config
48 cc=$(git config hooks.fbi-emailcc 2>/dev/null ||:)
50 # mail submission client to use
51 if [ -n "${FBI_ANNOUNCE_TO_STDOUT:-}" ]; then
53 echo >&2 'I: outputting to stdout since $FBI_ANNOUNCE_TO_STDOUT is set.'
55 sendmail="/usr/sbin/sendmail -t"
58 if [ $# -eq 0 ] ; then
59 # figure out refs from HEAD since they aren't passed
60 refname=$(git symbolic-ref HEAD 2>/dev/null)
61 merged=$(git rev-parse HEAD)
64 merged=$(git rev-parse $2)
66 refname=${refname##refs/heads/}
67 refwidth=$(git config hooks.fbi-refwidth 2>/dev/null || echo 7)
68 ref=$(git describe ${merged} 2>/dev/null || echo ${merged} | cut -c1-${refwidth})
70 url=$(echo "$url" | sed -e "s,@@sha1@@,${merged},")
72 rawcommit=$(git cat-file commit ${merged})
73 author=$(echo "${rawcommit}" | sed -rne 's,^author (.+) <.*,\1,p')
74 logmessage=$(echo "${rawcommit}" | sed -e '1,/^$/d;s,&,\&,g;s,<,\<,g;s,>,\>,g')
75 ${noisy} || logmessage=$(echo "${logmessage}" | head -n2)
77 ts=$(echo "${rawcommit}" | sed -n -e '/^author .*> \([0-9]\+\).*$/s--\1-p')
78 ts=$(date -d "@${ts}")
80 msg=$(git config hooks.fbi-msg-template 2>/dev/null ||:)
81 if [ -z "${msg}" ]; then
82 msg="${component:+$component/}${refname}: ${author}: ${logmessage} [${ref}] ${url}"
84 msg=$(echo "$msg" | sed -re 's,@@([^@]+)@@,${\1},g')
92 }Subject: Announce ${project}
93 Message-Id: <fbi-announce.${project}.${ref}@$(hostname --fqdn)>