Skip to content

Commit

Permalink
sequencer: reencode old merge-commit message
Browse files Browse the repository at this point in the history
During rebasing, old merge's message (encoded in old encoding)
will be used as message for new merge commit (created by rebase).

In case of the value of i18n.commitencoding has been changed after the
old merge time. We will receive an unusable message for this new merge.

Correct it.

This change also notice a breakage with git-rebase label system.

Signed-off-by: Doan Tran Cong Danh <congdanhqx@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
sgn authored and gitster committed Nov 11, 2019
1 parent b375744 commit 5772b0c
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 1 deletion.
3 changes: 2 additions & 1 deletion sequencer.c
Original file line number Diff line number Diff line change
Expand Up @@ -3374,7 +3374,8 @@ static int do_merge(struct repository *r,
}

if (commit) {
const char *message = get_commit_buffer(commit, NULL);
const char *encoding = get_commit_output_encoding();
const char *message = logmsg_reencode(commit, NULL, encoding);
const char *body;
int len;

Expand Down
57 changes: 57 additions & 0 deletions t/t3434-rebase-i18n.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
#!/bin/sh
#
# Copyright (c) 2019 Doan Tran Cong Danh
#

test_description='rebase with changing encoding
Initial setup:
1 - 2 master
\
3 - 4 first
\
5 - 6 second
'

. ./test-lib.sh

compare_msg () {
iconv -f "$2" -t "$3" "$TEST_DIRECTORY/t3434/$1" >expect &&
git cat-file commit HEAD >raw &&
sed "1,/^$/d" raw >actual &&
test_cmp expect actual
}

test_expect_success setup '
test_commit one &&
git branch first &&
test_commit two &&
git switch first &&
test_commit three &&
git branch second &&
test_commit four &&
git switch second &&
test_commit five &&
test_commit six
'

test_expect_success 'rebase --rebase-merges update encoding eucJP to UTF-8' '
git switch -c merge-eucJP-UTF-8 first &&
git config i18n.commitencoding eucJP &&
git merge -F "$TEST_DIRECTORY/t3434/eucJP.txt" second &&
git config i18n.commitencoding UTF-8 &&
git rebase --rebase-merges master &&
compare_msg eucJP.txt eucJP UTF-8
'

test_expect_failure 'rebase --rebase-merges update encoding eucJP to ISO-2022-JP' '
git switch -c merge-eucJP-ISO-2022-JP first &&
git config i18n.commitencoding eucJP &&
git merge -F "$TEST_DIRECTORY/t3434/eucJP.txt" second &&
git config i18n.commitencoding ISO-2022-JP &&
git rebase --rebase-merges master &&
compare_msg eucJP.txt eucJP ISO-2022-JP
'

test_done
4 changes: 4 additions & 0 deletions t/t3434/eucJP.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
�Ϥ�Ҥۤ�

���Ƥ���Τ�������Τǡ�
���ͤۤ�פ�ݤ�ޤӤ�����ء�

0 comments on commit 5772b0c

Please sign in to comment.