Subject: [PATCH v6 0/9] sequencer: handle other encoding better

From: Doan Tran Cong Danh <[email-masked]>
Date: Mon, 11 Nov 2019 13:03:33 +0700

Change from v5:
- claim t3434 instead of t3433

Doan Tran Cong Danh (9):
  t0028: eliminate non-standard usage of printf
  configure.ac: define ICONV_OMITS_BOM if necessary
  t3900: demonstrate git-rebase problem with multi encoding
  sequencer: reencode to utf-8 before arrange rebase's todo list
  sequencer: reencode revert/cherry-pick's todo list
  sequencer: reencode squashing commit's message
  sequencer: reencode old merge-commit message
  sequencer: reencode commit message for am/rebase --show-current-patch
  sequencer: fallback to sane label in making rebase todo list

 configure.ac                     |  49 ++++++++++++++++++
 sequencer.c                      |  32 ++++++++----
 t/t0028-working-tree-encoding.sh |   4 +-
 t/t3434-rebase-i18n.sh           |  84 +++++++++++++++++++++++++++++++
 t/t3434/ISO8859-1.txt            | Bin 0 -> 15 bytes
 t/t3434/eucJP.txt                | Bin 0 -> 68 bytes
 t/t3900-i18n-commit.sh           |  37 ++++++++++++++
 7 files changed, 195 insertions(+), 11 deletions(-)
 create mode 100755 t/t3434-rebase-i18n.sh
 create mode 100644 t/t3434/ISO8859-1.txt
 create mode 100644 t/t3434/eucJP.txt

Range-diff against v5:
 1:  b3d6c4e720 =  1:  9f83d4533b t0028: eliminate non-standard usage of printf
 2:  fe63a6bc44 =  2:  a9adb3d061 configure.ac: define ICONV_OMITS_BOM if necessary
 3:  30f15075c4 =  3:  c41046e717 t3900: demonstrate git-rebase problem with multi encoding
 4:  17165b81e5 =  4:  0ab92e7999 sequencer: reencode to utf-8 before arrange rebase's todo list
 5:  40fa759492 =  5:  23f9de4527 sequencer: reencode revert/cherry-pick's todo list
 6:  ed6cfab5d2 =  6:  f04a9d1698 sequencer: reencode squashing commit's message
 7:  def9adf97e !  7:  4dfdd4b83e sequencer: reencode old merge-commit message
    @@ sequencer.c: static int do_merge(struct repository *r,
      		int len;

    - ## t/t3433-rebase-i18n.sh (new) ##
    + ## t/t3434-rebase-i18n.sh (new) ##
     @@
     +#!/bin/sh
     +#
    @@ t/t3433-rebase-i18n.sh (new)
     +. ./test-lib.sh
     +
     +compare_msg () {
    -+	iconv -f "$2" -t "$3" "$TEST_DIRECTORY/t3433/$1" >expect &&
    ++	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
    @@ t/t3433-rebase-i18n.sh (new)
     +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/t3433/eucJP.txt" second &&
    ++	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
    @@ t/t3433-rebase-i18n.sh (new)
     +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/t3433/eucJP.txt" second &&
    ++	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
    @@ t/t3433-rebase-i18n.sh (new)
     +
     +test_done
     
    - ## t/t3433/eucJP.txt (new) ##
    - Binary files /dev/null and t/t3433/eucJP.txt differ
    + ## t/t3434/eucJP.txt (new) ##
    + Binary files /dev/null and t/t3434/eucJP.txt differ
 8:  2e95ca57d2 !  8:  28e82d6394 sequencer: reencode commit message for am/rebase --show-current-patch
    @@ sequencer.c: static int make_patch(struct repository *r,
      		res |= write_message(subject, strlen(subject), buf.buf, 1);
      		unuse_commit_buffer(commit, commit_buffer);
     
    - ## t/t3433-rebase-i18n.sh ##
    -@@ t/t3433-rebase-i18n.sh: test_expect_failure 'rebase --rebase-merges update encoding eucJP to ISO-2022-JP
    + ## t/t3434-rebase-i18n.sh ##
    +@@ t/t3434-rebase-i18n.sh: test_expect_failure 'rebase --rebase-merges update encoding eucJP to ISO-2022-JP
      	compare_msg eucJP.txt eucJP ISO-2022-JP
      '
      
    @@ t/t3433-rebase-i18n.sh: test_expect_failure 'rebase --rebase-merges update encod
     +		echo for-conflict >two.t &&
     +		git add two.t &&
     +		git config i18n.commitencoding $old &&
    -+		git commit -F "$TEST_DIRECTORY/t3433/$msgfile" &&
    ++		git commit -F "$TEST_DIRECTORY/t3434/$msgfile" &&
     +		git config i18n.commitencoding $new &&
     +		test_must_fail git rebase -m master &&
     +		test -f .git/rebase-merge/message &&
    @@ t/t3433-rebase-i18n.sh: test_expect_failure 'rebase --rebase-merges update encod
     +
      test_done
     
    - ## t/t3433/ISO8859-1.txt (new) ##
    - Binary files /dev/null and t/t3433/ISO8859-1.txt differ
    + ## t/t3434/ISO8859-1.txt (new) ##
    + Binary files /dev/null and t/t3434/ISO8859-1.txt differ
 9:  860dee65f4 !  9:  78daf050de sequencer: fallback to sane label in making rebase todo list
    @@ sequencer.c: static int make_script_with_merges(struct pretty_print_context *pp,
      		/* label the tips of merged branches */
      		for (; to_merge; to_merge = to_merge->next) {
     
    - ## t/t3433-rebase-i18n.sh ##
    -@@ t/t3433-rebase-i18n.sh: test_expect_success 'rebase --rebase-merges update encoding eucJP to UTF-8' '
    + ## t/t3434-rebase-i18n.sh ##
    +@@ t/t3434-rebase-i18n.sh: test_expect_success 'rebase --rebase-merges update encoding eucJP to UTF-8' '
      	compare_msg eucJP.txt eucJP UTF-8
      '
      
    @@ t/t3433-rebase-i18n.sh: test_expect_success 'rebase --rebase-merges update encod
     +test_expect_success '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/t3433/eucJP.txt" second &&
    + 	git merge -F "$TEST_DIRECTORY/t3434/eucJP.txt" second &&
-- 
2.24.0.164.g78daf050de.dirty