git-commit --allow-empty
[gitweb.git] / t / t3901-i18n-patch.sh
index 7fecfe98d2a9db0e0a602166ea944e5be8f4b7a4..235f372832cb32aefff0a00c4f2ac0e19de2e55d 100755 (executable)
@@ -7,8 +7,31 @@ test_description='i18n settings and format-patch | am pipe'
 
 . ./test-lib.sh
 
+check_encoding () {
+       # Make sure characters are not corrupted
+       cnt="$1" header="$2" i=1 j=0 bad=0
+       while test "$i" -le $cnt
+       do
+               git format-patch --encoding=UTF-8 --stdout HEAD~$i..HEAD~$j |
+               grep "^From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?=" &&
+               git cat-file commit HEAD~$j |
+               case "$header" in
+               8859)
+                       grep "^encoding ISO-8859-1" ;;
+               *)
+                       ! grep "^encoding ISO-8859-1" ;;
+               esac || {
+                       bad=1
+                       break
+               }
+               j=$i
+               i=$(($i+1))
+       done
+       (exit $bad)
+}
+
 test_expect_success setup '
-       git-repo-config i18n.commitencoding UTF-8 &&
+       git config i18n.commitencoding UTF-8 &&
 
        # use UTF-8 in author and committer name to match the
        # i18n.commitencoding settings
@@ -32,7 +55,7 @@ test_expect_success setup '
        git commit -s -m "Second on side" &&
 
        # the second one on the side branch is ISO-8859-1
-       git-repo-config i18n.commitencoding ISO-8859-1 &&
+       git config i18n.commitencoding ISO-8859-1 &&
        # use author and committer name in ISO-8859-1 to match it.
        . ../t3901-8859-1.txt &&
        test_tick &&
@@ -41,40 +64,40 @@ test_expect_success setup '
        git commit -s -m "Third on side" &&
 
        # Back to default
-       git-repo-config i18n.commitencoding UTF-8
+       git config i18n.commitencoding UTF-8
 '
 
 test_expect_success 'format-patch output (ISO-8859-1)' '
-       git-repo-config i18n.logoutputencoding ISO-8859-1 &&
+       git config i18n.logoutputencoding ISO-8859-1 &&
 
        git format-patch --stdout master..HEAD^ >out-l1 &&
        git format-patch --stdout HEAD^ >out-l2 &&
        grep "^Content-Type: text/plain; charset=ISO-8859-1" out-l1 &&
-       grep "^From: =?ISO-8859-1?q?=C1=E9=ED_=F3=FA?=" out-l1 &&
+       grep "^From: =?ISO-8859-1?q?=C1=E9=ED=20=F3=FA?=" out-l1 &&
        grep "^Content-Type: text/plain; charset=ISO-8859-1" out-l2 &&
-       grep "^From: =?ISO-8859-1?q?=C1=E9=ED_=F3=FA?=" out-l2
+       grep "^From: =?ISO-8859-1?q?=C1=E9=ED=20=F3=FA?=" out-l2
 '
 
 test_expect_success 'format-patch output (UTF-8)' '
-       git repo-config i18n.logoutputencoding UTF-8 &&
+       git config i18n.logoutputencoding UTF-8 &&
 
        git format-patch --stdout master..HEAD^ >out-u1 &&
        git format-patch --stdout HEAD^ >out-u2 &&
        grep "^Content-Type: text/plain; charset=UTF-8" out-u1 &&
-       grep "^From: =?UTF-8?q?=C3=81=C3=A9=C3=AD_=C3=B3=C3=BA?=" out-u1 &&
+       grep "^From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?=" out-u1 &&
        grep "^Content-Type: text/plain; charset=UTF-8" out-u2 &&
-       grep "^From: =?UTF-8?q?=C3=81=C3=A9=C3=AD_=C3=B3=C3=BA?=" out-u2
+       grep "^From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?=" out-u2
 '
 
-test_expect_success 'rebase (UTF-8)' '
+test_expect_success 'rebase (U/U)' '
        # We want the result of rebase in UTF-8
-       git-repo-config i18n.commitencoding UTF-8 &&
+       git config i18n.commitencoding UTF-8 &&
 
        # The test is about logoutputencoding not affecting the
        # final outcome -- it is used internally to generate the
        # patch and the log.
 
-       git repo-config i18n.logoutputencoding UTF-8 &&
+       git config i18n.logoutputencoding UTF-8 &&
 
        # The result will be committed by GIT_COMMITTER_NAME --
        # we want UTF-8 encoded name.
@@ -82,73 +105,151 @@ test_expect_success 'rebase (UTF-8)' '
        git checkout -b test &&
        git-rebase master &&
 
-       # Check the results.
-       git format-patch --stdout HEAD~2..HEAD^ >out-r1 &&
-       git format-patch --stdout HEAD^ >out-r2 &&
-       grep "^From: =?UTF-8?q?=C3=81=C3=A9=C3=AD_=C3=B3=C3=BA?=" out-r1 &&
-       grep "^From: =?UTF-8?q?=C3=81=C3=A9=C3=AD_=C3=B3=C3=BA?=" out-r2
-
-       ! git-cat-file commit HEAD | grep "^encoding ISO-8859-1" &&
-       ! git-cat-file commit HEAD^ | grep "^encoding ISO-8859-1"
+       check_encoding 2
 '
 
-test_expect_success 'rebase (ISO-8859-1)' '
-       git-repo-config i18n.commitencoding UTF-8 &&
-       git repo-config i18n.logoutputencoding ISO-8859-1 &&
+test_expect_success 'rebase (U/L)' '
+       git config i18n.commitencoding UTF-8 &&
+       git config i18n.logoutputencoding ISO-8859-1 &&
        . ../t3901-utf8.txt &&
 
        git reset --hard side &&
        git-rebase master &&
 
-       git repo-config i18n.logoutputencoding UTF-8 &&
-       git format-patch --stdout HEAD~2..HEAD^ >out-r1 &&
-       git format-patch --stdout HEAD^ >out-r2 &&
-       grep "^From: =?UTF-8?q?=C3=81=C3=A9=C3=AD_=C3=B3=C3=BA?=" out-r1 &&
-       grep "^From: =?UTF-8?q?=C3=81=C3=A9=C3=AD_=C3=B3=C3=BA?=" out-r2 &&
-
-       ! git-cat-file commit HEAD | grep "^encoding ISO-8859-1" &&
-       ! git-cat-file commit HEAD^ | grep "^encoding ISO-8859-1"
+       check_encoding 2
 '
 
-test_expect_success 'rebase (ISO-8859-1)' '
+test_expect_success 'rebase (L/L)' '
        # In this test we want ISO-8859-1 encoded commits as the result
-       git-repo-config i18n.commitencoding ISO-8859-1 &&
-       git repo-config i18n.logoutputencoding ISO-8859-1 &&
+       git config i18n.commitencoding ISO-8859-1 &&
+       git config i18n.logoutputencoding ISO-8859-1 &&
        . ../t3901-8859-1.txt &&
 
        git reset --hard side &&
        git-rebase master &&
 
-       # Make sure characters are not corrupted.
-       git repo-config i18n.logoutputencoding UTF-8 &&
-       git format-patch --stdout HEAD~2..HEAD^ >out-r1 &&
-       git format-patch --stdout HEAD^ >out-r2 &&
-       grep "^From: =?UTF-8?q?=C3=81=C3=A9=C3=AD_=C3=B3=C3=BA?=" out-r1 &&
-       grep "^From: =?UTF-8?q?=C3=81=C3=A9=C3=AD_=C3=B3=C3=BA?=" out-r2 &&
-
-       git-cat-file commit HEAD | grep "^encoding ISO-8859-1" &&
-       git-cat-file commit HEAD^ | grep "^encoding ISO-8859-1"
+       check_encoding 2 8859
 '
 
-test_expect_success 'rebase (UTF-8)' '
+test_expect_success 'rebase (L/U)' '
        # This is pathological -- use UTF-8 as intermediate form
        # to get ISO-8859-1 results.
-       git-repo-config i18n.commitencoding ISO-8859-1 &&
-       git repo-config i18n.logoutputencoding UTF-8 &&
+       git config i18n.commitencoding ISO-8859-1 &&
+       git config i18n.logoutputencoding UTF-8 &&
        . ../t3901-8859-1.txt &&
 
        git reset --hard side &&
        git-rebase master &&
 
-       # Make sure characters are not corrupted.
-       git repo-config i18n.logoutputencoding UTF-8 &&
-       git format-patch --stdout HEAD~2..HEAD^ >out-r1 &&
-       git format-patch --stdout HEAD^ >out-r2 &&
-       grep "^From: =?UTF-8?q?=C3=81=C3=A9=C3=AD_=C3=B3=C3=BA?=" out-r1 &&
-       grep "^From: =?UTF-8?q?=C3=81=C3=A9=C3=AD_=C3=B3=C3=BA?=" out-r2 &&
+       check_encoding 2 8859
+'
+
+test_expect_success 'cherry-pick(U/U)' '
+       # Both the commitencoding and logoutputencoding is set to UTF-8.
+
+       git config i18n.commitencoding UTF-8 &&
+       git config i18n.logoutputencoding UTF-8 &&
+       . ../t3901-utf8.txt &&
+
+       git reset --hard master &&
+       git cherry-pick side^ &&
+       git cherry-pick side &&
+       git revert HEAD &&
+
+       check_encoding 3
+'
+
+test_expect_success 'cherry-pick(L/L)' '
+       # Both the commitencoding and logoutputencoding is set to ISO-8859-1
+
+       git config i18n.commitencoding ISO-8859-1 &&
+       git config i18n.logoutputencoding ISO-8859-1 &&
+       . ../t3901-8859-1.txt &&
+
+       git reset --hard master &&
+       git cherry-pick side^ &&
+       git cherry-pick side &&
+       git revert HEAD &&
+
+       check_encoding 3 8859
+'
+
+test_expect_success 'cherry-pick(U/L)' '
+       # Commitencoding is set to UTF-8 but logoutputencoding is ISO-8859-1
+
+       git config i18n.commitencoding UTF-8 &&
+       git config i18n.logoutputencoding ISO-8859-1 &&
+       . ../t3901-utf8.txt &&
+
+       git reset --hard master &&
+       git cherry-pick side^ &&
+       git cherry-pick side &&
+       git revert HEAD &&
+
+       check_encoding 3
+'
+
+test_expect_success 'cherry-pick(L/U)' '
+       # Again, the commitencoding is set to ISO-8859-1 but
+       # logoutputencoding is set to UTF-8.
+
+       git config i18n.commitencoding ISO-8859-1 &&
+       git config i18n.logoutputencoding UTF-8 &&
+       . ../t3901-8859-1.txt &&
+
+       git reset --hard master &&
+       git cherry-pick side^ &&
+       git cherry-pick side &&
+       git revert HEAD &&
+
+       check_encoding 3 8859
+'
+
+test_expect_success 'rebase --merge (U/U)' '
+       git config i18n.commitencoding UTF-8 &&
+       git config i18n.logoutputencoding UTF-8 &&
+       . ../t3901-utf8.txt &&
+
+       git reset --hard side &&
+       git-rebase --merge master &&
+
+       check_encoding 2
+'
+
+test_expect_success 'rebase --merge (U/L)' '
+       git config i18n.commitencoding UTF-8 &&
+       git config i18n.logoutputencoding ISO-8859-1 &&
+       . ../t3901-utf8.txt &&
+
+       git reset --hard side &&
+       git-rebase --merge master &&
+
+       check_encoding 2
+'
+
+test_expect_success 'rebase --merge (L/L)' '
+       # In this test we want ISO-8859-1 encoded commits as the result
+       git config i18n.commitencoding ISO-8859-1 &&
+       git config i18n.logoutputencoding ISO-8859-1 &&
+       . ../t3901-8859-1.txt &&
+
+       git reset --hard side &&
+       git-rebase --merge master &&
+
+       check_encoding 2 8859
+'
+
+test_expect_success 'rebase --merge (L/U)' '
+       # This is pathological -- use UTF-8 as intermediate form
+       # to get ISO-8859-1 results.
+       git config i18n.commitencoding ISO-8859-1 &&
+       git config i18n.logoutputencoding UTF-8 &&
+       . ../t3901-8859-1.txt &&
+
+       git reset --hard side &&
+       git-rebase --merge master &&
 
-       git-cat-file commit HEAD | grep "^encoding ISO-8859-1" &&
-       git-cat-file commit HEAD^ | grep "^encoding ISO-8859-1"
+       check_encoding 2 8859
 '
 
 test_done