From: Junio C Hamano Date: Wed, 24 Nov 2010 20:45:39 +0000 (-0800) Subject: Merge branch 'kf/post-receive-sample-hook' into maint X-Git-Tag: v1.7.3.3~24 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/6cf9bf6cbcfd57606da30710656b248651d3113f?ds=inline;hp=-c Merge branch 'kf/post-receive-sample-hook' into maint * kf/post-receive-sample-hook: post-receive-email: ensure sent messages are not empty --- 6cf9bf6cbcfd57606da30710656b248651d3113f diff --combined contrib/hooks/post-receive-email index 0085086437,1a8880448a..85724bfc08 --- a/contrib/hooks/post-receive-email +++ b/contrib/hooks/post-receive-email @@@ -71,19 -71,10 +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) @@@ -159,7 -150,7 +150,7 @@@ # 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 @@@ -175,9 -166,32 +166,32 @@@ 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 @@@ -214,7 -228,7 +228,7 @@@ generate_email_header( # 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 @@@ -717,10 -731,11 +731,11 @@@ if [ -n "$1" -a -n "$2" -a -n "$3" ]; t # 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