mirror of
https://github.com/git/git.git
synced 2024-11-24 02:17:02 +08:00
41e79c9559
Instead of showing all the history since the beginning of time leading to the the branch head, show only the changes this new branch brings to the world. This originally came from Linus and tested by Andreas Ericsson. Signed-off-by: Junio C Hamano <junkio@cox.net>
90 lines
2.5 KiB
Bash
90 lines
2.5 KiB
Bash
#!/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."
|
|
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 $prev..$3 | diffstat -p1
|
|
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 "$3" "^$base" | diffstat -p1
|
|
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
|