Re: [PATCH v2] post-receive-email: explicitly set Content-Type header
- From
Alexey Shumkin <alex.crezoff@gmail.com>
- Date
- Oct 7, 2011, 12:52 UTC
- Message-ID
- <20111007165209.595834f2@ashu.dyn.rarus.ru>
- In-Reply-To
- <20111007090601.GA22541@elie.hsd1.il.comcast.net>
Show 105 quoted lines
> Johannes Sixt wrote:
> > Am 9/20/2011 12:42, schrieb Shumkin Alexey:
>
> >> 1. post-send-mail uses description file of a repo
> >> 2. gitweb also uses this file and AFAIK it assumes one to be in
> >> UTF-8 (I do not know whether it can be changed there but I tested
> >> gitweb once long time ago)
> >> 3. So if i18n.logoutputencoding is not UTF-8 we get a message
> >> composed with mixed encodings. This fact oblidge us to encode
> >> headers (as quoted printable at least) and synchronize body
> >> message that contain repo description (in UTF-8) and diffstat (in
> >> i18n.logoutputencoding).
> [...]
> > In this case, it may make sense to have a separate setting, but you
> > should call git like this:
> >
> > git -c "i18n.logoutputencoding=$emailcharset" show ...
> > git -c "i18n.logoutputencoding=$emailcharset" rev-list
> > --pretty ...
>
> Something like this, I suppose?
>
> This teaches post-receive-email to use plumbing where possible and to
> explicitly declare what encoding it expects output to use. Completely
> untested --- basic sanity checking, testing, and tweaks to allow
> overriding the choice of encoding left as an exercise to the reader.
>
> Based on patches by Gerrit Pape and Jeff King and advice from Johannes
> Sixt.
>
> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
> ---
> More background:
> http://thread.gmane.org/gmane.comp.version-control.git/124350/focus=124355
>
> contrib/hooks/post-receive-email | 15 +++++++++------
> 1 files changed, 9 insertions(+), 6 deletions(-)
>
> diff --git a/contrib/hooks/post-receive-email
> b/contrib/hooks/post-receive-email index ba077c13..bc603b02 100755
> --- a/contrib/hooks/post-receive-email
> +++ b/contrib/hooks/post-receive-email
> @@ -234,6 +234,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=utf-8
> + Content-Transfer-Encoding: 8bit
> X-Git-Refname: $refname
> X-Git-Reftype: $refname_type
> X-Git-Oldrev: $oldrev
> @@ -462,7 +465,7 @@ generate_delete_branch_email()
> echo " was $oldrev"
> echo ""
> echo $LOGEND
> - git show -s --pretty=oneline $oldrev
> + git diff-tree --encoding=UTF-8 -s --pretty=oneline $oldrev
> echo $LOGEND
> }
>
> @@ -538,11 +541,11 @@ generate_atag_email()
> # performed on them
> if [ -n "$prevtag" ]; then
> # Show changes since the previous release
> - git rev-list --pretty=short
> "$prevtag..$newrev" | git shortlog
> + git shortlog --encoding=UTF-8
> "$prevtag..$newrev" else
> # No previous tag, show all the changes
> since time # began
> - git rev-list --pretty=short $newrev | git
> shortlog
> + git shortlog --encoding=UTF-8 "$newrev"
> fi
> ;;
> *)
> @@ -562,7 +565,7 @@ generate_delete_atag_email()
> echo " was $oldrev"
> echo ""
> echo $LOGEND
> - git show -s --pretty=oneline $oldrev
> + git diff-tree --encoding=UTF-8 -s --pretty=oneline $oldrev
> echo $LOGEND
> }
>
> @@ -608,7 +611,7 @@ generate_general_email()
> echo ""
> if [ "$newrev_type" = "commit" ]; then
> echo $LOGBEGIN
> - git show --no-color --root -s --pretty=medium $newrev
> + git diff-tree --encoding=UTF-8 --root -s
> --pretty=oneline $newrev echo $LOGEND
> else
> # What can we do here? The tag marks an object that
> is not @@ -627,7 +630,7 @@ generate_delete_general_email()
> echo " was $oldrev"
> echo ""
> echo $LOGEND
> - git show -s --pretty=oneline $oldrev
> + git diff-tree --encoding=UTF-8 -s --pretty=oneline $oldrev
> echo $LOGEND
> }
> As I understand, this patches make email message with explicitly set Content-Type header (it's ok) and UTF-8 encoding (that is a subject to discuss). My proposition was in to send email message in explicitly defined custom encoding. Why? In development process under Windows non-UTF-8 encoding is used (cp1251 in my case). So, filenames have this encoding, and as we know Git stores their names as is - in cp1251 - without a conversion. And filenames are also used in diff-stat (with core.quotepath= false, BTW, I did not take into account this config) without any conversion. So if we'll make all text in UTF-8 but filenames are still non-UTF-8, email would look corrupted.