1#!/bin/sh 2# 3# Copyright (c) 2006 Junio C Hamano 4# 5 6test_description='i18n settings and format-patch | am pipe' 7 8GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main 9export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME 10 11. ./test-lib.sh 12 13check_encoding () { 14 # Make sure characters are not corrupted 15 cnt="$1" header="$2" i=1 j=0 16 while test "$i" -le $cnt 17 do 18 git format-patch --encoding=UTF-8 --stdout HEAD~$i..HEAD~$j | 19 grep "^From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?=" && 20 git cat-file commit HEAD~$j | 21 case "$header" in 22 8859) 23 grep "^encoding ISO8859-1" ;; 24 *) 25 grep "^encoding ISO8859-1"; test "$?" != 0 ;; 26 esac || return 1 27 j=$i 28 i=$(($i+1)) 29 done 30} 31 32test_expect_success setup ' 33 git config i18n.commitencoding UTF-8 && 34 35 # use UTF-8 in author and committer name to match the 36 # i18n.commitencoding settings 37 . "$TEST_DIRECTORY"/t3901/utf8.txt && 38 39 test_tick && 40 echo "$GIT_AUTHOR_NAME" >mine && 41 git add mine && 42 git commit -s -m "Initial commit" && 43 44 test_tick && 45 echo Hello world >mine && 46 git add mine && 47 git commit -s -m "Second on main" && 48 49 # the first commit on the side branch is UTF-8 50 test_tick && 51 git checkout -b side main^ && 52 echo Another file >yours && 53 git add yours && 54 git commit -s -m "Second on side" && 55 56 if test_have_prereq !MINGW 57 then 58 # the second one on the side branch is ISO-8859-1 59 git config i18n.commitencoding ISO8859-1 && 60 # use author and committer name in ISO-8859-1 to match it. 61 . "$TEST_DIRECTORY"/t3901/8859-1.txt 62 fi && 63 test_tick && 64 echo Yet another >theirs && 65 git add theirs && 66 git commit -s -m "Third on side" && 67 68 # Back to default 69 git config i18n.commitencoding UTF-8 70' 71 72test_expect_success 'format-patch output (ISO-8859-1)' ' 73 git config i18n.logoutputencoding ISO8859-1 && 74 75 git format-patch --stdout main..HEAD^ >out-l1 && 76 git format-patch --stdout HEAD^ >out-l2 && 77 grep "^Content-Type: text/plain; charset=ISO8859-1" out-l1 && 78 grep "^From: =?ISO8859-1?q?=C1=E9=ED=20=F3=FA?=" out-l1 && 79 grep "^Content-Type: text/plain; charset=ISO8859-1" out-l2 && 80 grep "^From: =?ISO8859-1?q?=C1=E9=ED=20=F3=FA?=" out-l2 81' 82 83test_expect_success 'format-patch output (UTF-8)' ' 84 git config i18n.logoutputencoding UTF-8 && 85 86 git format-patch --stdout main..HEAD^ >out-u1 && 87 git format-patch --stdout HEAD^ >out-u2 && 88 grep "^Content-Type: text/plain; charset=UTF-8" out-u1 && 89 grep "^From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?=" out-u1 && 90 grep "^Content-Type: text/plain; charset=UTF-8" out-u2 && 91 grep "^From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?=" out-u2 92' 93 94test_expect_success 'rebase (U/U)' ' 95 # We want the result of rebase in UTF-8 96 git config i18n.commitencoding UTF-8 && 97 98 # The test is about logoutputencoding not affecting the 99 # final outcome -- it is used internally to generate the 100 # patch and the log. 101 102 git config i18n.logoutputencoding UTF-8 && 103 104 # The result will be committed by GIT_COMMITTER_NAME -- 105 # we want UTF-8 encoded name. 106 . "$TEST_DIRECTORY"/t3901/utf8.txt && 107 git checkout -b test && 108 git rebase main && 109 110 check_encoding 2 111' 112 113test_expect_success 'rebase (U/L)' ' 114 git config i18n.commitencoding UTF-8 && 115 git config i18n.logoutputencoding ISO8859-1 && 116 . "$TEST_DIRECTORY"/t3901/utf8.txt && 117 118 git reset --hard side && 119 git rebase main && 120 121 check_encoding 2 122' 123 124test_expect_success !MINGW 'rebase (L/L)' ' 125 # In this test we want ISO-8859-1 encoded commits as the result 126 git config i18n.commitencoding ISO8859-1 && 127 git config i18n.logoutputencoding ISO8859-1 && 128 . "$TEST_DIRECTORY"/t3901/8859-1.txt && 129 130 git reset --hard side && 131 git rebase main && 132 133 check_encoding 2 8859 134' 135 136test_expect_success !MINGW 'rebase (L/U)' ' 137 # This is pathological -- use UTF-8 as intermediate form 138 # to get ISO-8859-1 results. 139 git config i18n.commitencoding ISO8859-1 && 140 git config i18n.logoutputencoding UTF-8 && 141 . "$TEST_DIRECTORY"/t3901/8859-1.txt && 142 143 git reset --hard side && 144 git rebase main && 145 146 check_encoding 2 8859 147' 148 149test_expect_success 'cherry-pick(U/U)' ' 150 # Both the commitencoding and logoutputencoding is set to UTF-8. 151 152 git config i18n.commitencoding UTF-8 && 153 git config i18n.logoutputencoding UTF-8 && 154 . "$TEST_DIRECTORY"/t3901/utf8.txt && 155 156 git reset --hard main && 157 git cherry-pick side^ && 158 git cherry-pick side && 159 git revert HEAD && 160 161 check_encoding 3 162' 163 164test_expect_success !MINGW 'cherry-pick(L/L)' ' 165 # Both the commitencoding and logoutputencoding is set to ISO-8859-1 166 167 git config i18n.commitencoding ISO8859-1 && 168 git config i18n.logoutputencoding ISO8859-1 && 169 . "$TEST_DIRECTORY"/t3901/8859-1.txt && 170 171 git reset --hard main && 172 git cherry-pick side^ && 173 git cherry-pick side && 174 git revert HEAD && 175 176 check_encoding 3 8859 177' 178 179test_expect_success 'cherry-pick(U/L)' ' 180 # Commitencoding is set to UTF-8 but logoutputencoding is ISO-8859-1 181 182 git config i18n.commitencoding UTF-8 && 183 git config i18n.logoutputencoding ISO8859-1 && 184 . "$TEST_DIRECTORY"/t3901/utf8.txt && 185 186 git reset --hard main && 187 git cherry-pick side^ && 188 git cherry-pick side && 189 git revert HEAD && 190 191 check_encoding 3 192' 193 194test_expect_success !MINGW 'cherry-pick(L/U)' ' 195 # Again, the commitencoding is set to ISO-8859-1 but 196 # logoutputencoding is set to UTF-8. 197 198 git config i18n.commitencoding ISO8859-1 && 199 git config i18n.logoutputencoding UTF-8 && 200 . "$TEST_DIRECTORY"/t3901/8859-1.txt && 201 202 git reset --hard main && 203 git cherry-pick side^ && 204 git cherry-pick side && 205 git revert HEAD && 206 207 check_encoding 3 8859 208' 209 210test_expect_success 'rebase --merge (U/U)' ' 211 git config i18n.commitencoding UTF-8 && 212 git config i18n.logoutputencoding UTF-8 && 213 . "$TEST_DIRECTORY"/t3901/utf8.txt && 214 215 git reset --hard side && 216 git rebase --merge main && 217 218 check_encoding 2 219' 220 221test_expect_success 'rebase --merge (U/L)' ' 222 git config i18n.commitencoding UTF-8 && 223 git config i18n.logoutputencoding ISO8859-1 && 224 . "$TEST_DIRECTORY"/t3901/utf8.txt && 225 226 git reset --hard side && 227 git rebase --merge main && 228 229 check_encoding 2 230' 231 232test_expect_success 'rebase --merge (L/L)' ' 233 # In this test we want ISO-8859-1 encoded commits as the result 234 git config i18n.commitencoding ISO8859-1 && 235 git config i18n.logoutputencoding ISO8859-1 && 236 . "$TEST_DIRECTORY"/t3901/8859-1.txt && 237 238 git reset --hard side && 239 git rebase --merge main && 240 241 check_encoding 2 8859 242' 243 244test_expect_success 'rebase --merge (L/U)' ' 245 # This is pathological -- use UTF-8 as intermediate form 246 # to get ISO-8859-1 results. 247 git config i18n.commitencoding ISO8859-1 && 248 git config i18n.logoutputencoding UTF-8 && 249 . "$TEST_DIRECTORY"/t3901/8859-1.txt && 250 251 git reset --hard side && 252 git rebase --merge main && 253 254 check_encoding 2 8859 255' 256 257test_expect_success 'am (U/U)' ' 258 # Apply UTF-8 patches with UTF-8 commitencoding 259 git config i18n.commitencoding UTF-8 && 260 . "$TEST_DIRECTORY"/t3901/utf8.txt && 261 262 git reset --hard main && 263 git am out-u1 out-u2 && 264 265 check_encoding 2 266' 267 268test_expect_success !MINGW 'am (L/L)' ' 269 # Apply ISO-8859-1 patches with ISO-8859-1 commitencoding 270 git config i18n.commitencoding ISO8859-1 && 271 . "$TEST_DIRECTORY"/t3901/8859-1.txt && 272 273 git reset --hard main && 274 git am out-l1 out-l2 && 275 276 check_encoding 2 8859 277' 278 279test_expect_success 'am (U/L)' ' 280 # Apply ISO-8859-1 patches with UTF-8 commitencoding 281 git config i18n.commitencoding UTF-8 && 282 . "$TEST_DIRECTORY"/t3901/utf8.txt && 283 git reset --hard main && 284 285 # am specifies --utf8 by default. 286 git am out-l1 out-l2 && 287 288 check_encoding 2 289' 290 291test_expect_success 'am --no-utf8 (U/L)' ' 292 # Apply ISO-8859-1 patches with UTF-8 commitencoding 293 git config i18n.commitencoding UTF-8 && 294 . "$TEST_DIRECTORY"/t3901/utf8.txt && 295 296 git reset --hard main && 297 git am --no-utf8 out-l1 out-l2 2>err && 298 299 # commit-tree will warn that the commit message does not contain valid UTF-8 300 # as mailinfo did not convert it 301 test_i18ngrep "did not conform" err && 302 303 check_encoding 2 304' 305 306test_expect_success !MINGW 'am (L/U)' ' 307 # Apply UTF-8 patches with ISO-8859-1 commitencoding 308 git config i18n.commitencoding ISO8859-1 && 309 . "$TEST_DIRECTORY"/t3901/8859-1.txt && 310 311 git reset --hard main && 312 # mailinfo will re-code the commit message to the charset specified by 313 # i18n.commitencoding 314 git am out-u1 out-u2 && 315 316 check_encoding 2 8859 317' 318 319test_done 320