(CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description) op: Equal rhs: {(SQ <'i18n settings and format-patch | am pipe'>)} spids: [13] ) ] spids: [13] ) (C {(.)} {(./test-lib.sh)}) (FuncDef name: check_encoding body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:cnt) op: Equal rhs: {(DQ ($ VSub_Number '$1'))} spids: [36] ) (assign_pair lhs: (LhsName name:header) op: Equal rhs: {(DQ ($ VSub_Number '$2'))} spids: [41] ) (assign_pair lhs:(LhsName name:i) op:Equal rhs:{(1)} spids:[46]) (assign_pair lhs:(LhsName name:j) op:Equal rhs:{(0)} spids:[49]) ] spids: [36] ) (While cond: [(C {(test)} {(DQ ($ VSub_Name '$i'))} {(-le)} {($ VSub_Name '$cnt')})] body: (DoGroup children: [ (AndOr ops: [Op_DAmp Op_DPipe] children: [ (Pipeline children: [ (C {(git)} {(format-patch)} {(--encoding) (Lit_Other '=') (UTF-8)} {(--stdout)} {(HEAD) (Lit_Tilde '~') ($ VSub_Name '$i') (..HEAD) (Lit_Tilde '~') ($ VSub_Name '$j')} ) (C {(grep)} {(DQ ('^From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?='))}) ] negated: F ) (Pipeline children: [ (C {(git)} {(cat-file)} {(commit)} {(HEAD) (Lit_Tilde '~') ($ VSub_Name '$j')} ) (Case to_match: {(DQ ($ VSub_Name '$header'))} arms: [ (case_arm pat_list: [{(8859)}] action: [(C {(grep)} {(DQ ('^encoding ISO8859-1'))})] spids: [120 121 130 16777215] ) (case_arm pat_list: [{(Lit_Other '*')}] action: [ (Sentence child: (C {(grep)} {(DQ ('^encoding ISO8859-1'))}) terminator: <Op_Semi ';'> ) (C {(test)} {(DQ ($ VSub_QMark '$?'))} {(KW_Bang '!') (Lit_Other '=')} {(0)} ) ] spids: [133 134 155 16777215] ) ] spids: [111 117 158] ) ] negated: F ) (ControlFlow token: <ControlFlow_Return return> arg_word: {(1)} ) ] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:j) op: Equal rhs: {($ VSub_Name '$i')} spids: [167] ) ] spids: [167] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:i) op: Equal rhs: { (ArithSubPart anode: (ArithBinary op_id: Arith_Plus left: (ArithWord w:{($ VSub_Name '$i')}) right: (ArithWord w:{(Lit_Digits 1)}) ) spids: [172 177] ) } spids: [171] ) ] spids: [171] ) ] spids: [66 180] ) ) ] spids: [29] ) spids: [24 28] ) (C {(test_expect_success)} {(setup)} { (SQ <'\n'> <'\tgit config i18n.commitencoding UTF-8 &&\n'> <'\n'> <'\t# use UTF-8 in author and committer name to match the\n'> <'\t# i18n.commitencoding settings\n'> <'\t. "$TEST_DIRECTORY"/t3901-utf8.txt &&\n'> <'\n'> <'\ttest_tick &&\n'> <'\techo "$GIT_AUTHOR_NAME" >mine &&\n'> <'\tgit add mine &&\n'> <'\tgit commit -s -m "Initial commit" &&\n'> <'\n'> <'\ttest_tick &&\n'> <'\techo Hello world >mine &&\n'> <'\tgit add mine &&\n'> <'\tgit commit -s -m "Second on main" &&\n'> <'\n'> <'\t# the first commit on the side branch is UTF-8\n'> <'\ttest_tick &&\n'> <'\tgit checkout -b side master^ &&\n'> <'\techo Another file >yours &&\n'> <'\tgit add yours &&\n'> <'\tgit commit -s -m "Second on side" &&\n'> <'\n'> <'\tif test_have_prereq !MINGW\n'> <'\tthen\n'> <'\t\t# the second one on the side branch is ISO-8859-1\n'> <'\t\tgit config i18n.commitencoding ISO8859-1 &&\n'> <'\t\t# use author and committer name in ISO-8859-1 to match it.\n'> <'\t\t. "$TEST_DIRECTORY"/t3901-8859-1.txt\n'> <'\tfi &&\n'> <'\ttest_tick &&\n'> <'\techo Yet another >theirs &&\n'> <'\tgit add theirs &&\n'> <'\tgit commit -s -m "Third on side" &&\n'> <'\n'> <'\t# Back to default\n'> <'\tgit config i18n.commitencoding UTF-8\n'> ) } ) (C {(test_expect_success)} {(SQ <'format-patch output (ISO-8859-1)'>)} { (SQ <'\n'> <'\tgit config i18n.logoutputencoding ISO8859-1 &&\n'> <'\n'> <'\tgit format-patch --stdout master..HEAD^ >out-l1 &&\n'> <'\tgit format-patch --stdout HEAD^ >out-l2 &&\n'> <'\tgrep "^Content-Type: text/plain; charset=ISO8859-1" out-l1 &&\n'> <'\tgrep "^From: =?ISO8859-1?q?=C1=E9=ED=20=F3=FA?=" out-l1 &&\n'> <'\tgrep "^Content-Type: text/plain; charset=ISO8859-1" out-l2 &&\n'> <'\tgrep "^From: =?ISO8859-1?q?=C1=E9=ED=20=F3=FA?=" out-l2\n'> ) } ) (C {(test_expect_success)} {(SQ <'format-patch output (UTF-8)'>)} { (SQ <'\n'> <'\tgit config i18n.logoutputencoding UTF-8 &&\n'> <'\n'> <'\tgit format-patch --stdout master..HEAD^ >out-u1 &&\n'> <'\tgit format-patch --stdout HEAD^ >out-u2 &&\n'> <'\tgrep "^Content-Type: text/plain; charset=UTF-8" out-u1 &&\n'> <'\tgrep "^From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?=" out-u1 &&\n'> <'\tgrep "^Content-Type: text/plain; charset=UTF-8" out-u2 &&\n'> <'\tgrep "^From: =?UTF-8?q?=C3=81=C3=A9=C3=AD=20=C3=B3=C3=BA?=" out-u2\n'> ) } ) (C {(test_expect_success)} {(SQ <'rebase (U/U)'>)} { (SQ <'\n'> <'\t# We want the result of rebase in UTF-8\n'> <'\tgit config i18n.commitencoding UTF-8 &&\n'> <'\n'> <'\t# The test is about logoutputencoding not affecting the\n'> <'\t# final outcome -- it is used internally to generate the\n'> <'\t# patch and the log.\n'> <'\n'> <'\tgit config i18n.logoutputencoding UTF-8 &&\n'> <'\n'> <'\t# The result will be committed by GIT_COMMITTER_NAME --\n'> <'\t# we want UTF-8 encoded name.\n'> <'\t. "$TEST_DIRECTORY"/t3901-utf8.txt &&\n'> <'\tgit checkout -b test &&\n'> <'\tgit rebase master &&\n'> <'\n'> <'\tcheck_encoding 2\n'> ) } ) (C {(test_expect_success)} {(SQ <'rebase (U/L)'>)} { (SQ <'\n'> <'\tgit config i18n.commitencoding UTF-8 &&\n'> <'\tgit config i18n.logoutputencoding ISO8859-1 &&\n'> <'\t. "$TEST_DIRECTORY"/t3901-utf8.txt &&\n'> <'\n'> <'\tgit reset --hard side &&\n'> <'\tgit rebase master &&\n'> <'\n'> <'\tcheck_encoding 2\n'> ) } ) (C {(test_expect_success)} {(KW_Bang '!') (MINGW)} {(SQ <'rebase (L/L)'>)} { (SQ <'\n'> <'\t# In this test we want ISO-8859-1 encoded commits as the result\n'> <'\tgit config i18n.commitencoding ISO8859-1 &&\n'> <'\tgit config i18n.logoutputencoding ISO8859-1 &&\n'> <'\t. "$TEST_DIRECTORY"/t3901-8859-1.txt &&\n'> <'\n'> <'\tgit reset --hard side &&\n'> <'\tgit rebase master &&\n'> <'\n'> <'\tcheck_encoding 2 8859\n'> ) } ) (C {(test_expect_success)} {(KW_Bang '!') (MINGW)} {(SQ <'rebase (L/U)'>)} { (SQ <'\n'> <'\t# This is pathological -- use UTF-8 as intermediate form\n'> <'\t# to get ISO-8859-1 results.\n'> <'\tgit config i18n.commitencoding ISO8859-1 &&\n'> <'\tgit config i18n.logoutputencoding UTF-8 &&\n'> <'\t. "$TEST_DIRECTORY"/t3901-8859-1.txt &&\n'> <'\n'> <'\tgit reset --hard side &&\n'> <'\tgit rebase master &&\n'> <'\n'> <'\tcheck_encoding 2 8859\n'> ) } ) (C {(test_expect_success)} {(SQ <'cherry-pick(U/U)'>)} { (SQ <'\n'> <'\t# Both the commitencoding and logoutputencoding is set to UTF-8.\n'> <'\n'> <'\tgit config i18n.commitencoding UTF-8 &&\n'> <'\tgit config i18n.logoutputencoding UTF-8 &&\n'> <'\t. "$TEST_DIRECTORY"/t3901-utf8.txt &&\n'> <'\n'> <'\tgit reset --hard master &&\n'> <'\tgit cherry-pick side^ &&\n'> <'\tgit cherry-pick side &&\n'> <'\tgit revert HEAD &&\n'> <'\n'> <'\tcheck_encoding 3\n'> ) } ) (C {(test_expect_success)} {(KW_Bang '!') (MINGW)} {(SQ <'cherry-pick(L/L)'>)} { (SQ <'\n'> <'\t# Both the commitencoding and logoutputencoding is set to ISO-8859-1\n'> <'\n'> <'\tgit config i18n.commitencoding ISO8859-1 &&\n'> <'\tgit config i18n.logoutputencoding ISO8859-1 &&\n'> <'\t. "$TEST_DIRECTORY"/t3901-8859-1.txt &&\n'> <'\n'> <'\tgit reset --hard master &&\n'> <'\tgit cherry-pick side^ &&\n'> <'\tgit cherry-pick side &&\n'> <'\tgit revert HEAD &&\n'> <'\n'> <'\tcheck_encoding 3 8859\n'> ) } ) (C {(test_expect_success)} {(SQ <'cherry-pick(U/L)'>)} { (SQ <'\n'> <'\t# Commitencoding is set to UTF-8 but logoutputencoding is ISO-8859-1\n'> <'\n'> <'\tgit config i18n.commitencoding UTF-8 &&\n'> <'\tgit config i18n.logoutputencoding ISO8859-1 &&\n'> <'\t. "$TEST_DIRECTORY"/t3901-utf8.txt &&\n'> <'\n'> <'\tgit reset --hard master &&\n'> <'\tgit cherry-pick side^ &&\n'> <'\tgit cherry-pick side &&\n'> <'\tgit revert HEAD &&\n'> <'\n'> <'\tcheck_encoding 3\n'> ) } ) (C {(test_expect_success)} {(KW_Bang '!') (MINGW)} {(SQ <'cherry-pick(L/U)'>)} { (SQ <'\n'> <'\t# Again, the commitencoding is set to ISO-8859-1 but\n'> <'\t# logoutputencoding is set to UTF-8.\n'> <'\n'> <'\tgit config i18n.commitencoding ISO8859-1 &&\n'> <'\tgit config i18n.logoutputencoding UTF-8 &&\n'> <'\t. "$TEST_DIRECTORY"/t3901-8859-1.txt &&\n'> <'\n'> <'\tgit reset --hard master &&\n'> <'\tgit cherry-pick side^ &&\n'> <'\tgit cherry-pick side &&\n'> <'\tgit revert HEAD &&\n'> <'\n'> <'\tcheck_encoding 3 8859\n'> ) } ) (C {(test_expect_success)} {(SQ <'rebase --merge (U/U)'>)} { (SQ <'\n'> <'\tgit config i18n.commitencoding UTF-8 &&\n'> <'\tgit config i18n.logoutputencoding UTF-8 &&\n'> <'\t. "$TEST_DIRECTORY"/t3901-utf8.txt &&\n'> <'\n'> <'\tgit reset --hard side &&\n'> <'\tgit rebase --merge master &&\n'> <'\n'> <'\tcheck_encoding 2\n'> ) } ) (C {(test_expect_success)} {(SQ <'rebase --merge (U/L)'>)} { (SQ <'\n'> <'\tgit config i18n.commitencoding UTF-8 &&\n'> <'\tgit config i18n.logoutputencoding ISO8859-1 &&\n'> <'\t. "$TEST_DIRECTORY"/t3901-utf8.txt &&\n'> <'\n'> <'\tgit reset --hard side &&\n'> <'\tgit rebase --merge master &&\n'> <'\n'> <'\tcheck_encoding 2\n'> ) } ) (C {(test_expect_success)} {(SQ <'rebase --merge (L/L)'>)} { (SQ <'\n'> <'\t# In this test we want ISO-8859-1 encoded commits as the result\n'> <'\tgit config i18n.commitencoding ISO8859-1 &&\n'> <'\tgit config i18n.logoutputencoding ISO8859-1 &&\n'> <'\t. "$TEST_DIRECTORY"/t3901-8859-1.txt &&\n'> <'\n'> <'\tgit reset --hard side &&\n'> <'\tgit rebase --merge master &&\n'> <'\n'> <'\tcheck_encoding 2 8859\n'> ) } ) (C {(test_expect_success)} {(SQ <'rebase --merge (L/U)'>)} { (SQ <'\n'> <'\t# This is pathological -- use UTF-8 as intermediate form\n'> <'\t# to get ISO-8859-1 results.\n'> <'\tgit config i18n.commitencoding ISO8859-1 &&\n'> <'\tgit config i18n.logoutputencoding UTF-8 &&\n'> <'\t. "$TEST_DIRECTORY"/t3901-8859-1.txt &&\n'> <'\n'> <'\tgit reset --hard side &&\n'> <'\tgit rebase --merge master &&\n'> <'\n'> <'\tcheck_encoding 2 8859\n'> ) } ) (C {(test_expect_success)} {(SQ <'am (U/U)'>)} { (SQ <'\n'> <'\t# Apply UTF-8 patches with UTF-8 commitencoding\n'> <'\tgit config i18n.commitencoding UTF-8 &&\n'> <'\t. "$TEST_DIRECTORY"/t3901-utf8.txt &&\n'> <'\n'> <'\tgit reset --hard master &&\n'> <'\tgit am out-u1 out-u2 &&\n'> <'\n'> <'\tcheck_encoding 2\n'> ) } ) (C {(test_expect_success)} {(KW_Bang '!') (MINGW)} {(SQ <'am (L/L)'>)} { (SQ <'\n'> <'\t# Apply ISO-8859-1 patches with ISO-8859-1 commitencoding\n'> <'\tgit config i18n.commitencoding ISO8859-1 &&\n'> <'\t. "$TEST_DIRECTORY"/t3901-8859-1.txt &&\n'> <'\n'> <'\tgit reset --hard master &&\n'> <'\tgit am out-l1 out-l2 &&\n'> <'\n'> <'\tcheck_encoding 2 8859\n'> ) } ) (C {(test_expect_success)} {(SQ <'am (U/L)'>)} { (SQ <'\n'> <'\t# Apply ISO-8859-1 patches with UTF-8 commitencoding\n'> <'\tgit config i18n.commitencoding UTF-8 &&\n'> <'\t. "$TEST_DIRECTORY"/t3901-utf8.txt &&\n'> <'\tgit reset --hard master &&\n'> <'\n'> <'\t# am specifies --utf8 by default.\n'> <'\tgit am out-l1 out-l2 &&\n'> <'\n'> <'\tcheck_encoding 2\n'> ) } ) (C {(test_expect_success)} {(SQ <'am --no-utf8 (U/L)'>)} { (SQ <'\n'> <'\t# Apply ISO-8859-1 patches with UTF-8 commitencoding\n'> <'\tgit config i18n.commitencoding UTF-8 &&\n'> <'\t. "$TEST_DIRECTORY"/t3901-utf8.txt &&\n'> <'\n'> <'\tgit reset --hard master &&\n'> <'\tgit am --no-utf8 out-l1 out-l2 2>err &&\n'> <'\n'> <'\t# commit-tree will warn that the commit message does not contain valid UTF-8\n'> <'\t# as mailinfo did not convert it\n'> <'\ttest_i18ngrep "did not conform" err &&\n'> <'\n'> <'\tcheck_encoding 2\n'> ) } ) (C {(test_expect_success)} {(KW_Bang '!') (MINGW)} {(SQ <'am (L/U)'>)} { (SQ <'\n'> <'\t# Apply UTF-8 patches with ISO-8859-1 commitencoding\n'> <'\tgit config i18n.commitencoding ISO8859-1 &&\n'> <'\t. "$TEST_DIRECTORY"/t3901-8859-1.txt &&\n'> <'\n'> <'\tgit reset --hard master &&\n'> <'\t# mailinfo will re-code the commit message to the charset specified by\n'> <'\t# i18n.commitencoding\n'> <'\tgit am out-u1 out-u2 &&\n'> <'\n'> <'\tcheck_encoding 2 8859\n'> ) } ) (C {(test_done)}) ] )