]> git.ipfire.org Git - thirdparty/git.git/commitdiff
Merge branch 'kf/post-receive-sample-hook'
authorJunio C Hamano <gitster@pobox.com>
Wed, 27 Oct 2010 04:41:18 +0000 (21:41 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 27 Oct 2010 04:41:18 +0000 (21:41 -0700)
* kf/post-receive-sample-hook:
  post-receive-email: ensure sent messages are not empty

1  2 
contrib/hooks/post-receive-email

index 00850864371e16d1fa572b0d0e5832b8a88d8666,1a8880448ab19092fb020e20e7cdc96fe24454c0..85724bfc08f61d3b928460a8d2ad5ec03cf80b52
  # ---------------------------- 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
@@@ -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