From: Alexey Shumkin <alex.crezoff@gmail.com>
To: git@vger.kernel.org
Cc: Alexey Shumkin <Alex.Crezoff@gmail.com>,
Junio C Hamano <gitster@pobox.com>
Subject: [PATCH v3] post-receive-email: explicitly set Content-Type header
Date: Wed, 9 Nov 2011 15:00:58 +0400 [thread overview]
Message-ID: <1320836458-24088-1-git-send-email-Alex.Crezoff@gmail.com> (raw)
In-Reply-To: <20111007201932.GC29712@elie.hsd1.il.comcast.net>
Some email clients (e.g. claws-mail) incorrectly display
message body when there is no Content-Type header and charset
explicitly defined.
So, set explicitly Content-Type header. Its charset
can be defined with hooks.emailcharset config variable.
NB: This above-mentioned charset may differ from i18n.logOutputEncoding,
because e.g. gitweb expects (for now) i18n.logOutputEncoding set to UTF-8
to display logs correctly.
Also, introduce hooks.gitopts config variable
with the default '-c core.quotepath=false'.
This takes into account that we want to see pretty email-message
with well-looking messages and list of changed filenames.
And usually non-ASCII filenames are in the same
encoding that commit messages are.
Signed-off-by: Alexey Shumkin <Alex.Crezoff@gmail.com>
---
contrib/hooks/post-receive-email | 43 ++++++++++++++++++++++++++-----------
1 files changed, 30 insertions(+), 13 deletions(-)
diff --git a/contrib/hooks/post-receive-email b/contrib/hooks/post-receive-email
index ba077c1..913be89 100755
--- a/contrib/hooks/post-receive-email
+++ b/contrib/hooks/post-receive-email
@@ -65,6 +65,14 @@
# Default is "--stat --summary --find-copies-harder". Add -p to those
# options to include a unified diff of changes in addition to the usual
# summary output.
+# hooks.gitopts
+# git options for the git diff-tree invocation that shows changes.
+# Default is '-c core.quotepath=false' to be able to see non-ASCII filenames
+# used in a project.
+# hooks.emailcharset
+# The charset used in Content-Type header. UTF-8, if not specified.
+# It can differ from i18n.logOutputEncoding (not to mess-up with gitweb
+# which expects i18n.logOutputEncoding to be set to UTF-8)
#
# Notes
# -----
@@ -234,6 +242,9 @@ generate_email_header()
cat <<-EOF
To: $recipients
Subject: ${emailprefix}$projectdesc $refname_type $short_refname ${change_type}d. $describe
+ MIME-Version: 1.0
+ Content-Type: text/plain; charset=$emailcharset
+ Content-Transfer-Encoding: 8bit
X-Git-Refname: $refname
X-Git-Reftype: $refname_type
X-Git-Oldrev: $oldrev
@@ -241,7 +252,7 @@ generate_email_header()
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
- the project "$projectdesc".
+ the project "$projectdesc_e".
The $refname_type, $short_refname has been ${change_type}d
EOF
@@ -255,7 +266,7 @@ generate_email_footer()
hooks/post-receive
--${SPACE}
- $projectdesc
+ $projectdesc_e
EOF
}
@@ -451,7 +462,7 @@ generate_update_branch_email()
# non-fast-forward updates.
echo ""
echo "Summary of changes:"
- git diff-tree $diffopts $oldrev..$newrev
+ git $gitopts diff-tree $diffopts $oldrev..$newrev
}
#
@@ -656,14 +667,15 @@ show_new_revisions()
revspec=$oldrev..$newrev
fi
+ revlistopts="-c i18n.logOutputEncoding=$emailcharset"
other_branches=$(git for-each-ref --format='%(refname)' refs/heads/ |
grep -F -v $refname)
git rev-parse --not $other_branches |
if [ -z "$custom_showrev" ]
then
- git rev-list --pretty --stdin $revspec
+ git $revlistopts rev-list --pretty --stdin $revspec
else
- git rev-list --stdin $revspec |
+ git $revlistopts $rev-list --stdin $revspec |
while read onerev
do
eval $(printf "$custom_showrev" $onerev)
@@ -714,14 +726,6 @@ if [ -z "$GIT_DIR" ]; then
exit 1
fi
-projectdesc=$(sed -ne '1p' "$GIT_DIR/description" 2>/dev/null)
-# Check if the description is unchanged from it's default, and shorten it to
-# a more manageable length if it is
-if expr "$projectdesc" : "Unnamed repository.*$" >/dev/null
-then
- projectdesc="UNNAMED PROJECT"
-fi
-
recipients=$(git config hooks.mailinglist)
announcerecipients=$(git config hooks.announcelist)
envelopesender=$(git config hooks.envelopesender)
@@ -730,6 +734,19 @@ custom_showrev=$(git config hooks.showrev)
maxlines=$(git config hooks.emailmaxlines)
diffopts=$(git config hooks.diffopts)
: ${diffopts:="--stat --summary --find-copies-harder"}
+gitopts=$(git config hooks.gitopts || echo '-c core.quotepath=false')
+emailcharset=$(git config hooks.emailcharset || echo 'UTF-8')
+
+projectdesc=$(sed -ne '1p' "$GIT_DIR/description" 2>/dev/null)
+# Check if the description is unchanged from it's default, and shorten it to
+# a more manageable length if it is
+if expr "$projectdesc" : "Unnamed repository.*$" >/dev/null
+then
+ projectdesc="UNNAMED PROJECT"
+fi
+# Leave description in UTF-8 to be used in the Subject header
+# But convert it to an hooks.emailcharset encoding to be used in a message body
+projectdesc_e=$(echo $projectdesc | iconv -f UTF-8 -t $emailcharset 2>/dev/null)
# --- Main loop
# Allow dual mode: run from the command line just like the update hook, or
--
1.7.7.3.5.g55178
next prev parent reply other threads:[~2011-11-09 11:01 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-09-20 7:52 [PATCH] post-receive-email: explicitly set Content-Type header Alexey Shumkin
2011-09-20 8:07 ` [PATCH v2] " Alexey Shumkin
2011-09-20 9:32 ` Johannes Sixt
2011-09-20 10:42 ` Shumkin Alexey
2011-09-20 11:10 ` Johannes Sixt
2011-10-07 9:06 ` Jonathan Nieder
2011-10-07 12:52 ` Alexey Shumkin
2011-10-07 20:19 ` Jonathan Nieder
2011-11-09 11:00 ` Alexey Shumkin [this message]
2011-11-09 14:11 ` [PATCH v3] " Junio C Hamano
2011-11-09 15:01 ` Alexey Shumkin
2011-09-20 12:23 ` [PATCH v2] " Jakub Narebski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1320836458-24088-1-git-send-email-Alex.Crezoff@gmail.com \
--to=alex.crezoff@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).