forked from ungleich-public/cdist
		
	
		
			
				
	
	
		
			108 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
#!/usr/bin/env bash
 | 
						|
# Distributed under the terms of the GNU General Public License v2
 | 
						|
# Copyright (c) 2006 Fernando J. Pereda <ferdy@gentoo.org>
 | 
						|
#
 | 
						|
# Git CIA bot in bash. (no, not the POSIX shell, bash).
 | 
						|
# It is *heavily* based on Git ciabot.pl by Petr Baudis.
 | 
						|
#
 | 
						|
# It is meant to be run either on a post-commit hook or in an update
 | 
						|
# hook:
 | 
						|
#
 | 
						|
# post-commit: It parses latest commit and current HEAD to get the
 | 
						|
# information it needs.
 | 
						|
#
 | 
						|
# update: You have to call it once per merged commit:
 | 
						|
#
 | 
						|
#       refname=$1
 | 
						|
#       oldhead=$2
 | 
						|
#       newhead=$3
 | 
						|
#       for merged in $(git rev-list ${oldhead}..${newhead} | tac) ; do
 | 
						|
#               /path/to/ciabot.bash ${refname} ${merged}
 | 
						|
#       done
 | 
						|
#
 | 
						|
 | 
						|
# The project as known to CIA
 | 
						|
project="cdist"
 | 
						|
 | 
						|
# Set to true if you want the full log to be sent
 | 
						|
noisy=false
 | 
						|
 | 
						|
# Addresses for the e-mail
 | 
						|
from="nico-cia.vc@schottelius.org"
 | 
						|
to="cia@cia.vc"
 | 
						|
 | 
						|
# SMTP client to use
 | 
						|
sendmail="/usr/sbin/sendmail -f ${from} ${to}"
 | 
						|
 | 
						|
# Changeset URL
 | 
						|
url="http://git.schottelius.org/?p=${project};a=commit;h=@@sha1@@"
 | 
						|
 | 
						|
# You shouldn't be touching anything else.
 | 
						|
if [[ $# = 0 ]] ; then
 | 
						|
	refname=$(git symbolic-ref HEAD 2>/dev/null)
 | 
						|
	merged=$(git rev-parse HEAD)
 | 
						|
else
 | 
						|
	refname=$1
 | 
						|
	merged=$2
 | 
						|
fi
 | 
						|
 | 
						|
refname=${refname##refs/heads/}
 | 
						|
 | 
						|
gitver=$(git --version)
 | 
						|
gitver=${gitver##* }
 | 
						|
 | 
						|
rev=$(git describe ${merged} 2>/dev/null)
 | 
						|
[[ -z ${rev} ]] && rev=${merged:0:12}
 | 
						|
 | 
						|
rawcommit=$(git cat-file commit ${merged})
 | 
						|
 | 
						|
author=$(sed -n -e '/^author .*<\([^@]*\).*$/s--\1-p' \
 | 
						|
	<<< "${rawcommit}")
 | 
						|
 | 
						|
logmessage=$(sed -e '1,/^$/d' <<< "${rawcommit}")
 | 
						|
${noisy} || logmessage=$(head -n 1 <<< "${logmessage}")
 | 
						|
logmessage=${logmessage//&/&}
 | 
						|
logmessage=${logmessage//</<}
 | 
						|
logmessage=${logmessage//>/>}
 | 
						|
 | 
						|
ts=$(sed -n -e '/^author .*> \([0-9]\+\).*$/s--\1-p' \
 | 
						|
	<<< "${rawcommit}")
 | 
						|
 | 
						|
out="
 | 
						|
<message>
 | 
						|
  <generator>
 | 
						|
    <name>CIA Bash client for Git</name>
 | 
						|
    <version>${gitver}</version>
 | 
						|
    <url>http://dev.gentoo.org/~ferdy/stuff/ciabot.bash</url>
 | 
						|
  </generator>
 | 
						|
  <source>
 | 
						|
    <project>${project}</project>
 | 
						|
    <branch>${refname}</branch>
 | 
						|
  </source>
 | 
						|
  <timestamp>${ts}</timestamp>
 | 
						|
  <body>
 | 
						|
    <commit>
 | 
						|
      <author>${author}</author>
 | 
						|
      <revision>${rev}</revision>
 | 
						|
      <files>
 | 
						|
        $(git diff-tree -r --name-only ${merged} |
 | 
						|
          sed -e '1d' -e 's-.*-<file>&</file>-')
 | 
						|
      </files>
 | 
						|
      <log>
 | 
						|
${logmessage}
 | 
						|
      </log>
 | 
						|
      <url>${url//@@sha1@@/${merged}}</url>
 | 
						|
    </commit>
 | 
						|
  </body>
 | 
						|
</message>"
 | 
						|
 | 
						|
${sendmail} << EOM
 | 
						|
Message-ID: <${merged:0:12}.${author}@${project}>
 | 
						|
From: ${from}
 | 
						|
To: ${to}
 | 
						|
Content-type: text/xml
 | 
						|
Subject: DeliverXML
 | 
						|
${out}
 | 
						|
EOM
 | 
						|
 | 
						|
# vim: set tw=70 :
 |