Skip to content

Commit

Permalink
post-receive-email: ensure sent messages are not empty
Browse files Browse the repository at this point in the history
Changes the logic in the script to determine whether an email message
will be sent before invoking the send_mail() function; otherwise, if
the logic determines that a message will not be sent, send_mail() will
cause an empty email to be sent. In addition, ensures that if multiple
refs are updated and a message cannot be sent for one of them,
the others are still processed normally.

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 Sep 10, 2010
1 parent b03e7b7 commit 53cad69
Showing 1 changed file with 31 additions and 16 deletions.
47 changes: 31 additions & 16 deletions contrib/hooks/post-receive-email
Original file line number Diff line number Diff line change
Expand Up @@ -71,19 +71,10 @@
# ---------------------------- Functions

#
# Top level email generation function. This decides what type of update
# this is and calls the appropriate body-generation routine after outputting
# the common header
# Function to prepare for email generation. This decides what type
# of update this is and whether an email should even be generated.
#
# Note this function doesn't actually generate any email output, that is
# taken care of by the functions it calls:
# - generate_email_header
# - generate_create_XXXX_email
# - generate_update_XXXX_email
# - generate_delete_XXXX_email
# - generate_email_footer
#
generate_email()
prep_for_email()
{
# --- Arguments
oldrev=$(git rev-parse $1)
Expand Down Expand Up @@ -159,7 +150,7 @@ generate_email()
# Anything else (is there anything else?)
echo >&2 "*** Unknown type of update to $refname ($rev_type)"
echo >&2 "*** - no email generated"
exit 1
return 0
;;
esac

Expand All @@ -175,9 +166,32 @@ generate_email()
esac
echo >&2 "*** $config_name is not set so no email will be sent"
echo >&2 "*** for $refname update $oldrev->$newrev"
exit 0
return 0
fi

return 1
}

#
# Top level email generation function. This calls the appropriate
# body-generation routine after outputting the common header.
#
# Note this function doesn't actually generate any email output, that is
# taken care of by the functions it calls:
# - generate_email_header
# - generate_create_XXXX_email
# - generate_update_XXXX_email
# - generate_delete_XXXX_email
# - generate_email_footer
#
# Note also that this function cannot 'exit' from the script; when this
# function is running (in hook script mode), the send_mail() function
# is already executing in another process, connected via a pipe, and
# if this function exits without, whatever has been generated to that
# point will be sent as an email... even if nothing has been generated.
#
generate_email()
{
# Email parameters
# The email subject will contain the best description of the ref
# that we can build from the parameters
Expand Down Expand Up @@ -717,10 +731,11 @@ if [ -n "$1" -a -n "$2" -a -n "$3" ]; then
# Output to the terminal in command line mode - if someone wanted to
# resend an email; they could redirect the output to sendmail
# themselves
PAGER= generate_email $2 $3 $1
prep_for_email $2 $3 $1 && PAGER= generate_email
else
while read oldrev newrev refname
do
generate_email $oldrev $newrev $refname $maxlines | send_mail
prep_for_email $oldrev $newrev $refname || continue
generate_email $maxlines | send_mail
done
fi

0 comments on commit 53cad69

Please sign in to comment.