Merge branch 'kf/post-receive-sample-hook'
authorJunio C Hamano <gitster@pobox.com>
Wed, 18 Aug 2010 19:16:50 +0000 (12:16 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 18 Aug 2010 19:16:50 +0000 (12:16 -0700)
* kf/post-receive-sample-hook:
post-receive-email: optional message line count limit

1  2 
contrib/hooks/post-receive-email
index 09c524105cfa5fca3a5a860bbbed35f5eff84f79,11e51ec10d18d2c3d51c6a8b804c448059da9bfb..00850864371e16d1fa572b0d0e5832b8a88d8666
  #     "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
  # -----
@@@ -84,6 -89,7 +89,7 @@@ generate_email(
        oldrev=$(git rev-parse $1)
        newrev=$(git rev-parse $2)
        refname="$3"
+       maxlines=$4
  
        # --- Interpret
        # 0000->1234 (create)
                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
  }
@@@ -203,7 -214,7 +214,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
@@@ -642,6 -653,24 +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
@@@ -679,6 -708,7 +708,7 @@@ announcerecipients=$(git config hooks.a
  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
@@@ -691,6 -721,6 +721,6 @@@ if [ -n "$1" -a -n "$2" -a -n "$3" ]; t
  else
        while read oldrev newrev refname
        do
-               generate_email $oldrev $newrev $refname | send_mail
+               generate_email $oldrev $newrev $refname $maxlines | send_mail
        done
  fi