mirror of
https://github.com/git/git
synced 2024-08-27 19:49:21 +00:00
![Alexander Gavrilov](/assets/img/avatar_default.png)
Currently git-blame outputs text from the commit messages (e.g. the author name and the summary string) as-is, without even providing any information about the encoding used for the data. It makes interpreting the data in multilingual environment very difficult. This commit changes the blame implementation to recode the messages using the rules used by other commands like git-log. Namely, the target encoding can be specified through the i18n.commitEncoding or i18n.logOutputEncoding options, or directly on the command line using the --encoding parameter. Converting the encoding before output seems to be more friendly to the porcelain tools than simply providing the value of the encoding header, and does not require changing the output format. If anybody needs the old behavior, it is possible to achieve it by specifying --encoding=none. Signed-off-by: Alexander Gavrilov <angavrilov@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
93 lines
1.9 KiB
Bash
Executable file
93 lines
1.9 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
test_description='git blame encoding conversion'
|
|
. ./test-lib.sh
|
|
|
|
. "$TEST_DIRECTORY"/t8005/utf8.txt
|
|
. "$TEST_DIRECTORY"/t8005/cp1251.txt
|
|
. "$TEST_DIRECTORY"/t8005/sjis.txt
|
|
|
|
test_expect_success 'setup the repository' '
|
|
# Create the file
|
|
echo "UTF-8 LINE" > file &&
|
|
git add file &&
|
|
git commit --author "$UTF8_NAME <utf8@localhost>" -m "$UTF8_MSG" &&
|
|
|
|
echo "CP1251 LINE" >> file &&
|
|
git add file &&
|
|
git config i18n.commitencoding cp1251 &&
|
|
git commit --author "$CP1251_NAME <cp1251@localhost>" -m "$CP1251_MSG" &&
|
|
|
|
echo "SJIS LINE" >> file &&
|
|
git add file &&
|
|
git config i18n.commitencoding shift-jis &&
|
|
git commit --author "$SJIS_NAME <sjis@localhost>" -m "$SJIS_MSG"
|
|
'
|
|
|
|
cat >expected <<EOF
|
|
author $SJIS_NAME
|
|
summary $SJIS_MSG
|
|
author $SJIS_NAME
|
|
summary $SJIS_MSG
|
|
author $SJIS_NAME
|
|
summary $SJIS_MSG
|
|
EOF
|
|
|
|
test_expect_success \
|
|
'blame respects i18n.commitencoding' '
|
|
git blame --incremental file | \
|
|
grep "^\(author\|summary\) " > actual &&
|
|
test_cmp actual expected
|
|
'
|
|
|
|
cat >expected <<EOF
|
|
author $CP1251_NAME
|
|
summary $CP1251_MSG
|
|
author $CP1251_NAME
|
|
summary $CP1251_MSG
|
|
author $CP1251_NAME
|
|
summary $CP1251_MSG
|
|
EOF
|
|
|
|
test_expect_success \
|
|
'blame respects i18n.logoutputencoding' '
|
|
git config i18n.logoutputencoding cp1251 &&
|
|
git blame --incremental file | \
|
|
grep "^\(author\|summary\) " > actual &&
|
|
test_cmp actual expected
|
|
'
|
|
|
|
cat >expected <<EOF
|
|
author $UTF8_NAME
|
|
summary $UTF8_MSG
|
|
author $UTF8_NAME
|
|
summary $UTF8_MSG
|
|
author $UTF8_NAME
|
|
summary $UTF8_MSG
|
|
EOF
|
|
|
|
test_expect_success \
|
|
'blame respects --encoding=utf-8' '
|
|
git blame --incremental --encoding=utf-8 file | \
|
|
grep "^\(author\|summary\) " > actual &&
|
|
test_cmp actual expected
|
|
'
|
|
|
|
cat >expected <<EOF
|
|
author $SJIS_NAME
|
|
summary $SJIS_MSG
|
|
author $CP1251_NAME
|
|
summary $CP1251_MSG
|
|
author $UTF8_NAME
|
|
summary $UTF8_MSG
|
|
EOF
|
|
|
|
test_expect_success \
|
|
'blame respects --encoding=none' '
|
|
git blame --incremental --encoding=none file | \
|
|
grep "^\(author\|summary\) " > actual &&
|
|
test_cmp actual expected
|
|
'
|
|
|
|
test_done
|