Skip to content

Commit

Permalink
post-receive-email: optional message line count limit
Browse files Browse the repository at this point in the history
We have become used to the features of svnmailer when used with Subversion,
and one of those useful features is that it can limit the maximum length
(in lines) of a commit email message. This is terribly useful since once the
goes beyond a reasonable number of lines, nobody is going to read the remainder,
and if they really want the entire contents of the commits, they can use
git itself to get them using the revision IDs present in the message already.

Change the post-receive-email script to respond to an 'emailmaxlines' config key
which, if specified, will limit the number of lines generated (including
headers); any lines beyond the limit are suppressed, and a final line is added
indicating the number that were suppressed.

Signed-off-by: Kevin P. Fleming <kpfleming@digium.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Kevin P. Fleming authored and Junio C Hamano committed Jul 16, 2010
1 parent 53b3042 commit b03e7b7
Showing 1 changed file with 32 additions and 2 deletions.
34 changes: 32 additions & 2 deletions contrib/hooks/post-receive-email
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,11 @@
# "t=%s; printf 'http://.../?id=%%s' \$t; echo;echo; git show -C \$t; echo"
# Be careful if "..." contains things that will be expanded by shell "eval"
# or printf.
# hooks.emailmaxlines
# The maximum number of lines that should be included in the generated
# email body. If not specified, there is no limit.
# Lines beyond the limit are suppressed and counted, and a final
# line is added indicating the number of suppressed lines.
#
# Notes
# -----
Expand Down Expand Up @@ -84,6 +89,7 @@ generate_email()
oldrev=$(git rev-parse $1)
newrev=$(git rev-parse $2)
refname="$3"
maxlines=$4

# --- Interpret
# 0000->1234 (create)
Expand Down Expand Up @@ -192,7 +198,12 @@ generate_email()
fn_name=atag
;;
esac
generate_${change_type}_${fn_name}_email

if [ -z "$maxlines" ]; then
generate_${change_type}_${fn_name}_email
else
generate_${change_type}_${fn_name}_email | limit_lines $maxlines
fi

generate_email_footer
}
Expand Down Expand Up @@ -642,6 +653,24 @@ show_new_revisions()
}


limit_lines()
{
lines=0
skipped=0
while IFS="" read -r line; do
lines=$((lines + 1))
if [ $lines -gt $1 ]; then
skipped=$((skipped + 1))
else
printf "%s\n" "$line"
fi
done
if [ $skipped -ne 0 ]; then
echo "... $skipped lines suppressed ..."
fi
}


send_mail()
{
if [ -n "$envelopesender" ]; then
Expand Down Expand Up @@ -679,6 +708,7 @@ announcerecipients=$(git config hooks.announcelist)
envelopesender=$(git config hooks.envelopesender)
emailprefix=$(git config hooks.emailprefix || echo '[SCM] ')
custom_showrev=$(git config hooks.showrev)
maxlines=$(git config hooks.emailmaxlines)

# --- Main loop
# Allow dual mode: run from the command line just like the update hook, or
Expand All @@ -691,6 +721,6 @@ if [ -n "$1" -a -n "$2" -a -n "$3" ]; then
else
while read oldrev newrev refname
do
generate_email $oldrev $newrev $refname | send_mail
generate_email $oldrev $newrev $refname $maxlines | send_mail
done
fi

0 comments on commit b03e7b7

Please sign in to comment.