# ---------------------------- 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)
# 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
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
# Generate header
cat <<-EOF
To: $recipients
- Subject: ${emailprefix}$projectdesc $refname_type, $short_refname, ${change_type}d. $describe
+ Subject: ${emailprefix}$projectdesc $refname_type $short_refname ${change_type}d. $describe
X-Git-Refname: $refname
X-Git-Reftype: $refname_type
X-Git-Oldrev: $oldrev
# 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