Thread (7 messages) flat view 7 messages, 3 authors, 2016-06-15

Re: [PATCH 2/2] post-receive-email: defend against non UTF-8 i18n.logoutputencoding setting

From: Alexey Shumkin <hidden>
Date: 2016-06-15 22:53:18

I'd like to remind then following aspect
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.
this is citation from 
http://thread.gmane.org/gmane.comp.version-control.git/181737/focus=183076
quoted hunk ↗ jump to hunk
Johannes Sixt wrote:
quoted
Am 9/20/2011 12:42, schrieb Shumkin Alexey:
quoted
quoted
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).
[...]
quoted
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.

Based on an advice from Alexey Shumkin and Johannes Sixt, but all bugs
are mine.  Making the email charset configurable is left as an
exercise for the interested reader.

Signed-off-by: Jonathan Nieder <redacted>
---
 contrib/hooks/post-receive-email |   12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/contrib/hooks/post-receive-email
b/contrib/hooks/post-receive-email index dc184d0b..b59e03cd 100755
--- a/contrib/hooks/post-receive-email
+++ b/contrib/hooks/post-receive-email
@@ -464,7 +464,7 @@ generate_delete_branch_email()
 	echo "       was  $oldrev"
 	echo ""
 	echo $LOGBEGIN
-	git show -s --pretty=oneline $oldrev
+	git diff-tree --encoding=UTF-8 -s --pretty=oneline $oldrev
 	echo $LOGEND
 }
 
@@ -540,11 +540,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
 		;;
 	*)
@@ -564,7 +564,7 @@ generate_delete_atag_email()
 	echo "       was  $oldrev"
 	echo ""
 	echo $LOGBEGIN
-	git show -s --pretty=oneline $oldrev
+	git diff-tree --encoding=UTF-8 -s --pretty=oneline $oldrev
 	echo $LOGEND
 }
 
@@ -610,7 +610,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 @@ -629,7 +629,7 @@ generate_delete_general_email()
 	echo "       was  $oldrev"
 	echo ""
 	echo $LOGBEGIN
-	git show -s --pretty=oneline $oldrev
+	git diff-tree --encoding=UTF-8 -s --pretty=oneline $oldrev
 	echo $LOGEND
 }
 
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help