X-Git-Url: https://git.octo.it/?a=blobdiff_plain;ds=sidebyside;f=templates%2Fhooks--update;h=d7a8f0a849523ebc280e06fe836f3bc448993d0c;hb=HEAD;hp=3f38b82a4710400e512d478ec6b552202a34369f;hpb=86b13da46cd710a45a89968880c691452d5b70b4;p=git.git diff --git a/templates/hooks--update b/templates/hooks--update index 3f38b82a..d7a8f0a8 100644 --- a/templates/hooks--update +++ b/templates/hooks--update @@ -1,6 +1,7 @@ #!/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: @@ -8,24 +9,81 @@ # (2) make this file executable by "chmod +x update". # -recipient="commit-list@mydomain.xz" +project=$(cat $GIT_DIR/description) +recipients="commit-list@somewhere.com commit-list@somewhereelse.com" -if expr "$2" : '0*$' >/dev/null +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 - echo "Created a new ref, with the following commits:" - git-rev-list --pretty "$3" + # 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") + 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 -fi -git-rev-list --pretty "$3" "^$base" -fi | -mail -s "Changes to ref $1" "$recipient" + git-rev-list --pretty "$3" "^$base" +fi) | +mail -s "$project: Changes to '${1##refs/heads/}'" $recipients exit 0