#!/bin/sh
#
# An example hook script to mail out commit update information.
# It also blocks tags that aren't annotated.
# Called by git-receive-pack with arguments: refname sha1-old sha1-new
#
# To enable this hook:
# (1) change the recipient e-mail address
# (2) make this file executable by "chmod +x update".
#

project=$(cat $GIT_DIR/description)
recipients="commit-list@somewhere.com commit-list@somewhereelse.com"

ref_type=$(git cat-file -t "$3")

# Only allow annotated tags in a shared repo
# Remove this code to treat dumb tags the same as everything else
case "$1","$ref_type" in
refs/tags/*,commit)
	echo "*** Un-annotated tags are not allowed in this repo" >&2
	echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
	exit 1;;
refs/tags/*,tag)
	echo "### Pushing version '${1##refs/tags/}' to the masses" >&2
	# recipients="release-announce@somwehere.com announce@somewhereelse.com"
	;;
esac

# set this  to 'cat' to get a very detailed listing.
# short only kicks in when an annotated tag is added
short='git shortlog'

# see 'date --help' for info on how to write this
# The default is a human-readable iso8601-like format with minute
# precision ('2006-01-25 15:58 +0100' for example)
date_format="%F %R %z"

(if expr "$2" : '0*$' >/dev/null
then
	# new ref
	case "$1" in
	refs/tags/*)
		# a pushed and annotated tag (usually) means a new version
		tag="${1##refs/tags/}"
		if [ "$ref_type" = tag ]; then
			eval $(git cat-file tag $3 | \
				sed -n '4s/tagger \([^>]*>\)[^0-9]*\([0-9]*\).*/tagger="\1" ts="\2"/p')
			date=$(date --date="1970-01-01 00:00:00 $ts seconds" +"$date_format")
			echo "Tag '$tag' created by $tagger at $date"
			git cat-file tag $3 | sed -n '5,$p'
			echo
		fi
		prev=$(git describe "$3^" | sed 's/-g.*//')
		# the first tag in a repo will yield no $prev
		if [ -z "$prev" ]; then
			echo "Changes since the dawn of time:"
			git rev-list --pretty $3 | $short
		else
			echo "Changes since $prev:"
			git rev-list --pretty $prev..$3 | $short
			echo ---
			git diff --stat $prev..$3
			echo ---
		fi
		;;

	refs/heads/*)
		branch="${1##refs/heads/}"
		echo "New branch '$branch' available with the following commits:"
		git-rev-list --pretty "$3" $(git-rev-parse --not --all)
		;;
	esac
else
	base=$(git-merge-base "$2" "$3")
	case "$base" in
	"$2")
		git diff --stat "$3" "^$base"
		echo
		echo "New commits:"
		;;
	*)
		echo "Rebased ref, commits from common ancestor:"
		;;
	esac
	git-rev-list --pretty "$3" "^$base"
fi) |
mail -s "$project: Changes to '${1##refs/heads/}'" $recipients
exit 0
