(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_description) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'commit and log output encodings' span_id:15))} spids: [13] ) ] ) (C {(.)} {(./test-lib.sh)}) (command.ShFunction name: compare_with body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (command.Pipeline children: [ (C {(git)} {(show)} {(-s)} {($ Id.VSub_Number '$1')}) (command.Simple words: [ {(sed)} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'1,/^$/d' span_id:47))} {(-e)} {(SQ (Token id:Id.Lit_Chars val:'s/^ //' span_id:53))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:56) fd: -1 arg_word: {(current)} ) ] ) ] negated: F ) (command.Case to_match: {(DQ ($ Id.VSub_Number '$3'))} arms: [ (case_arm pat_list: [{(SQ )}] action: [(C {(test_cmp)} {(DQ ($ Id.VSub_Number '$2'))} {(current)})] spids: [71 73 84 -1] ) (case_arm pat_list: [{(Id.Lit_QMark '?') (Id.Lit_Star '*')}] action: [ (command.AndOr ops: [Id.Op_DAmp Id.Op_DAmp] children: [ (command.Simple words: [{(iconv)} {(-f)} {(DQ ($ Id.VSub_Number '$3'))} {(-t)} {(UTF-8)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:104) fd: -1 arg_word: {(current.utf8)} ) (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:107) fd: -1 arg_word: {(current)} ) ] ) (command.Simple words: [{(iconv)} {(-f)} {(DQ ($ Id.VSub_Number '$3'))} {(-t)} {(UTF-8)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:125) fd: -1 arg_word: {(expect.utf8)} ) (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:128) fd: -1 arg_word: {(DQ ($ Id.VSub_Number '$2'))} ) ] ) (C {(test_cmp)} {(expect.utf8)} {(current.utf8)}) ] ) ] spids: [87 89 143 -1] ) ] ) ] ) ] ) ) (C {(test_expect_success)} {(setup)} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:156) (Token id:Id.Lit_Chars val:'\t: >F &&\n' span_id:157) (Token id:Id.Lit_Chars val:'\tgit add F &&\n' span_id:158) (Token id:Id.Lit_Chars val:'\tT=$(git write-tree) &&\n' span_id:159) (Token id: Id.Lit_Chars val: '\tC=$(git commit-tree $T <"$TEST_DIRECTORY"/t3900/1-UTF-8.txt) &&\n' span_id: 160 ) (Token id:Id.Lit_Chars val:'\tgit update-ref HEAD $C &&\n' span_id:161) (Token id:Id.Lit_Chars val:'\tgit tag C0\n' span_id:162) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'no encoding header for base case' span_id:169))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:173) (Token id: Id.Lit_Chars val: '\tE=$(git cat-file commit C0 | sed -ne "s/^encoding //p") &&\n' span_id: 174 ) (Token id:Id.Lit_Chars val:'\ttest z = "z$E"\n' span_id:175) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'UTF-16 refused because of NULs' span_id:182))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:186) (Token id:Id.Lit_Chars val:'\techo UTF-16 >F &&\n' span_id:187) (Token id: Id.Lit_Chars val: '\ttest_must_fail git commit -a -F "$TEST_DIRECTORY"/t3900/UTF-16.txt\n' span_id: 188 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'UTF-8 invalid characters refused' span_id:195))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:199) (Token id: Id.Lit_Chars val: '\ttest_when_finished "rm -f $HOME/stderr $HOME/invalid" &&\n' span_id: 200 ) (Token id:Id.Lit_Chars val:'\techo "UTF-8 characters" >F &&\n' span_id:201) (Token id: Id.Lit_Chars val: '\tprintf "Commit message\\n\\nInvalid surrogate:\\355\\240\\200\\n" \\\n' span_id: 202 ) (Token id:Id.Lit_Chars val:'\t\t>"$HOME/invalid" &&\n' span_id:203) (Token id: Id.Lit_Chars val: '\tgit commit -a -F "$HOME/invalid" 2>"$HOME"/stderr &&\n' span_id: 204 ) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "did not conform" "$HOME"/stderr\n' span_id:205) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'UTF-8 overlong sequences rejected' span_id:212))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:216) (Token id: Id.Lit_Chars val: '\ttest_when_finished "rm -f $HOME/stderr $HOME/invalid" &&\n' span_id: 217 ) (Token id:Id.Lit_Chars val:'\trm -f "$HOME/stderr" "$HOME/invalid" &&\n' span_id:218) (Token id:Id.Lit_Chars val:'\techo "UTF-8 overlong" >F &&\n' span_id:219) (Token id: Id.Lit_Chars val: '\tprintf "\\340\\202\\251ommit message\\n\\nThis is not a space:\\300\\240\\n" \\\n' span_id: 220 ) (Token id:Id.Lit_Chars val:'\t\t>"$HOME/invalid" &&\n' span_id:221) (Token id: Id.Lit_Chars val: '\tgit commit -a -F "$HOME/invalid" 2>"$HOME"/stderr &&\n' span_id: 222 ) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "did not conform" "$HOME"/stderr\n' span_id:223) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'UTF-8 non-characters refused' span_id:230))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:234) (Token id: Id.Lit_Chars val: '\ttest_when_finished "rm -f $HOME/stderr $HOME/invalid" &&\n' span_id: 235 ) (Token id:Id.Lit_Chars val:'\techo "UTF-8 non-character 1" >F &&\n' span_id:236) (Token id: Id.Lit_Chars val: '\tprintf "Commit message\\n\\nNon-character:\\364\\217\\277\\276\\n" \\\n' span_id: 237 ) (Token id:Id.Lit_Chars val:'\t\t>"$HOME/invalid" &&\n' span_id:238) (Token id: Id.Lit_Chars val: '\tgit commit -a -F "$HOME/invalid" 2>"$HOME"/stderr &&\n' span_id: 239 ) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "did not conform" "$HOME"/stderr\n' span_id:240) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'UTF-8 non-characters refused' span_id:247))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:251) (Token id: Id.Lit_Chars val: '\ttest_when_finished "rm -f $HOME/stderr $HOME/invalid" &&\n' span_id: 252 ) (Token id:Id.Lit_Chars val:'\techo "UTF-8 non-character 2." >F &&\n' span_id:253) (Token id: Id.Lit_Chars val: '\tprintf "Commit message\\n\\nNon-character:\\357\\267\\220\\n" \\\n' span_id: 254 ) (Token id:Id.Lit_Chars val:'\t\t>"$HOME/invalid" &&\n' span_id:255) (Token id: Id.Lit_Chars val: '\tgit commit -a -F "$HOME/invalid" 2>"$HOME"/stderr &&\n' span_id: 256 ) (Token id:Id.Lit_Chars val:'\ttest_i18ngrep "did not conform" "$HOME"/stderr\n' span_id:257) ) } ) (command.ForEach iter_name: H iter_words: [{(ISO8859-1)} {(eucJP)} {(ISO-2022-JP)}] do_arg_iter: F body: (command.DoGroup children: [ (C {(test_expect_success)} {(DQ ($ Id.VSub_DollarName '$H') (' setup'))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:284) (Token id: Id.Lit_Chars val: '\t\tgit config i18n.commitencoding $H &&\n' span_id: 285 ) (Token id:Id.Lit_Chars val:'\t\tgit checkout -b $H C0 &&\n' span_id:286) (Token id:Id.Lit_Chars val:'\t\techo $H >F &&\n' span_id:287) (Token id:Id.Lit_Chars val:'\t\tgit commit -a -F "$TEST_DIRECTORY"/t3900/$H.txt\n' span_id:288) (Token id:Id.Lit_Chars val:'\t' span_id:289) ) } ) ] ) ) (command.ForEach iter_name: H iter_words: [{(ISO8859-1)} {(eucJP)} {(ISO-2022-JP)}] do_arg_iter: F body: (command.DoGroup children: [ (C {(test_expect_success)} {(DQ ('check encoding header for ') ($ Id.VSub_DollarName '$H'))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:318) (Token id: Id.Lit_Chars val: '\t\tE=$(git cat-file commit ' span_id: 319 ) ) ($ Id.VSub_DollarName '$H') (SQ (Token id:Id.Lit_Chars val:' | sed -ne "s/^encoding //p") &&\n' span_id:323) (Token id:Id.Lit_Chars val:'\t\ttest "z$E" = "z' span_id:324) ) ($ Id.VSub_DollarName '$H') (SQ (Token id:Id.Lit_Chars val:'"\n' span_id:328) (Token id:Id.Lit_Chars val:'\t' span_id:329) ) } ) ] ) ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'config to remove customization' span_id:338))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:342) (Token id: Id.Lit_Chars val: '\tgit config --unset-all i18n.commitencoding &&\n' span_id: 343 ) (Token id:Id.Lit_Chars val:'\tif Z=$(git config --get-all i18n.commitencoding)\n' span_id:344) (Token id:Id.Lit_Chars val:'\tthen\n' span_id:345) (Token id:Id.Lit_Chars val:'\t\techo Oops, should have failed.\n' span_id:346) (Token id:Id.Lit_Chars val:'\t\tfalse\n' span_id:347) (Token id:Id.Lit_Chars val:'\telse\n' span_id:348) (Token id:Id.Lit_Chars val:'\t\ttest z = "z$Z"\n' span_id:349) (Token id:Id.Lit_Chars val:'\tfi &&\n' span_id:350) (Token id: Id.Lit_Chars val: '\tgit config i18n.commitencoding UTF-8\n' span_id: 351 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'ISO8859-1 should be shown in UTF-8 now' span_id:358))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:362) (Token id: Id.Lit_Chars val: '\tcompare_with ISO8859-1 "$TEST_DIRECTORY"/t3900/1-UTF-8.txt\n' span_id: 363 ) ) } ) (command.ForEach iter_name: H iter_words: [{(eucJP)} {(ISO-2022-JP)}] do_arg_iter: F body: (command.DoGroup children: [ (C {(test_expect_success)} {(DQ ($ Id.VSub_DollarName '$H') (' should be shown in UTF-8 now'))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:388) (Token id:Id.Lit_Chars val:'\t\tcompare_with ' span_id:389) ) ($ Id.VSub_DollarName '$H') (SQ (Token id:Id.Lit_Chars val:' "$TEST_DIRECTORY"/t3900/2-UTF-8.txt\n' span_id:393) (Token id:Id.Lit_Chars val:'\t' span_id:394) ) } ) ] ) ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'config to add customization' span_id:403))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:407) (Token id: Id.Lit_Chars val: '\tgit config --unset-all i18n.commitencoding &&\n' span_id: 408 ) (Token id:Id.Lit_Chars val:'\tif Z=$(git config --get-all i18n.commitencoding)\n' span_id:409) (Token id:Id.Lit_Chars val:'\tthen\n' span_id:410) (Token id:Id.Lit_Chars val:'\t\techo Oops, should have failed.\n' span_id:411) (Token id:Id.Lit_Chars val:'\t\tfalse\n' span_id:412) (Token id:Id.Lit_Chars val:'\telse\n' span_id:413) (Token id:Id.Lit_Chars val:'\t\ttest z = "z$Z"\n' span_id:414) (Token id:Id.Lit_Chars val:'\tfi\n' span_id:415) ) } ) (command.ForEach iter_name: H iter_words: [{(ISO8859-1)} {(eucJP)} {(ISO-2022-JP)}] do_arg_iter: F body: (command.DoGroup children: [ (C {(test_expect_success)} {(DQ ($ Id.VSub_DollarName '$H') (' should be shown in itself now'))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:442) (Token id: Id.Lit_Chars val: '\t\tgit config i18n.commitencoding ' span_id: 443 ) ) ($ Id.VSub_DollarName '$H') (SQ (Token id:Id.Lit_Chars val:' &&\n' span_id:447) (Token id:Id.Lit_Chars val:'\t\tcompare_with ' span_id:448) ) ($ Id.VSub_DollarName '$H') (SQ (Token id:Id.Lit_Chars val:' "$TEST_DIRECTORY"/t3900/' span_id:452)) ($ Id.VSub_DollarName '$H') (SQ (Token id:Id.Lit_Chars val:'.txt\n' span_id:456) (Token id:Id.Lit_Chars val:'\t' span_id:457)) } ) ] ) ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'config to tweak customization' span_id:466))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:470) (Token id: Id.Lit_Chars val: '\tgit config i18n.logoutputencoding UTF-8\n' span_id: 471 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'ISO8859-1 should be shown in UTF-8 now' span_id:478))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:482) (Token id: Id.Lit_Chars val: '\tcompare_with ISO8859-1 "$TEST_DIRECTORY"/t3900/1-UTF-8.txt\n' span_id: 483 ) ) } ) (command.ForEach iter_name: H iter_words: [{(eucJP)} {(ISO-2022-JP)}] do_arg_iter: F body: (command.DoGroup children: [ (C {(test_expect_success)} {(DQ ($ Id.VSub_DollarName '$H') (' should be shown in UTF-8 now'))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:508) (Token id:Id.Lit_Chars val:'\t\tcompare_with ' span_id:509) ) ($ Id.VSub_DollarName '$H') (SQ (Token id:Id.Lit_Chars val:' "$TEST_DIRECTORY"/t3900/2-UTF-8.txt\n' span_id:513) (Token id:Id.Lit_Chars val:'\t' span_id:514) ) } ) ] ) ) (command.ForEach iter_name: J iter_words: [{(eucJP)} {(ISO-2022-JP)}] do_arg_iter: F body: (command.DoGroup children: [ (command.If arms: [ (if_arm cond: [ (C {(test)} {(DQ ($ Id.VSub_DollarName '$J'))} {(Id.Lit_Equals '=')} {(ISO-2022-JP)}) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ICONV) op: assign_op.Equal rhs: {($ Id.VSub_DollarName '$J')} spids: [549] ) ] ) ] spids: [533 546] ) ] else_action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ICONV) op: assign_op.Equal rhs: (word.Empty) spids: [556] ) ] ) ] ) (C {(git)} {(config)} {(i18n.logoutputencoding)} {($ Id.VSub_DollarName '$J')}) (command.ForEach iter_name: H iter_words: [{(eucJP)} {(ISO-2022-JP)}] do_arg_iter: F body: (command.DoGroup children: [ (C {(test_expect_success)} { (DQ ($ Id.VSub_DollarName '$H') (' should be shown in ') ($ Id.VSub_DollarName '$J') (' now') ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:595) (Token id: Id.Lit_Chars val: '\t\t\tcompare_with ' span_id: 596 ) ) ($ Id.VSub_DollarName '$H') (SQ (Token id:Id.Lit_Chars val:' "$TEST_DIRECTORY"/t3900/' span_id:600)) ($ Id.VSub_DollarName '$J') (SQ (Token id:Id.Lit_Chars val:'.txt $ICONV\n' span_id:604) (Token id:Id.Lit_Chars val:'\t\t' span_id:605) ) } ) ] ) ) ] ) ) (command.ForEach iter_name: H iter_words: [{(ISO8859-1)} {(eucJP)} {(ISO-2022-JP)}] do_arg_iter: F body: (command.DoGroup children: [ (C {(test_expect_success)} {(DQ ('No conversion with ') ($ Id.VSub_DollarName '$H'))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:637) (Token id: Id.Lit_Chars val: '\t\tcompare_with "--encoding=none ' span_id: 638 ) ) ($ Id.VSub_DollarName '$H') (SQ (Token id:Id.Lit_Chars val:'" "$TEST_DIRECTORY"/t3900/' span_id:642)) ($ Id.VSub_DollarName '$H') (SQ (Token id:Id.Lit_Chars val:'.txt\n' span_id:646) (Token id:Id.Lit_Chars val:'\t' span_id:647)) } ) ] ) ) (command.ShFunction name: test_commit_autosquash_flags body: (command.BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:H) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [661] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:flag) op: assign_op.Equal rhs: {($ Id.VSub_Number '$2')} spids: [665] ) ] ) (C {(test_expect_success)} { (DQ ('commit --') ($ Id.VSub_DollarName '$flag') (' with ') ($ Id.VSub_DollarName '$H') (' encoding') ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:680) (Token id: Id.Lit_Chars val: '\t\tgit config i18n.commitencoding $H &&\n' span_id: 681 ) (Token id:Id.Lit_Chars val:'\t\tgit checkout -b $H-$flag C0 &&\n' span_id:682) (Token id:Id.Lit_Chars val:'\t\techo $H >>F &&\n' span_id:683) (Token id:Id.Lit_Chars val:'\t\tgit commit -a -F "$TEST_DIRECTORY"/t3900/$H.txt &&\n' span_id:684) (Token id:Id.Lit_Chars val:'\t\ttest_tick &&\n' span_id:685) (Token id:Id.Lit_Chars val:'\t\techo intermediate stuff >>G &&\n' span_id:686) (Token id:Id.Lit_Chars val:'\t\tgit add G &&\n' span_id:687) (Token id:Id.Lit_Chars val:'\t\tgit commit -a -m "intermediate commit" &&\n' span_id:688) (Token id:Id.Lit_Chars val:'\t\ttest_tick &&\n' span_id:689) (Token id:Id.Lit_Chars val:'\t\techo $H $flag >>F &&\n' span_id:690) (Token id: Id.Lit_Chars val: '\t\tgit commit -a --$flag HEAD~1 &&\n' span_id: 691 ) (Token id:Id.Lit_Chars val:'\t\tE=$(git cat-file commit ' span_id:692) ) ($ Id.VSub_DollarName '$H') (-) ($ Id.VSub_DollarName '$flag') (SQ (Token id:Id.Lit_Chars val:' |\n' span_id:698) (Token id: Id.Lit_Chars val: '\t\t\tsed -ne "s/^encoding //p") &&\n' span_id: 699 ) (Token id:Id.Lit_Chars val:'\t\ttest "z$E" = "z$H" &&\n' span_id:700) (Token id: Id.Lit_Chars val: '\t\tgit config --unset-all i18n.commitencoding &&\n' span_id: 701 ) (Token id:Id.Lit_Chars val:'\t\tgit rebase --autosquash -i HEAD^^^ &&\n' span_id:702) (Token id: Id.Lit_Chars val: '\t\tgit log --oneline >actual &&\n' span_id: 703 ) (Token id:Id.Lit_Chars val:'\t\ttest_line_count = 3 actual\n' span_id:704) (Token id:Id.Lit_Chars val:'\t' span_id:705) ) } ) ] ) ) (C {(test_commit_autosquash_flags)} {(eucJP)} {(fixup)}) (C {(test_commit_autosquash_flags)} {(ISO-2022-JP)} {(squash)}) (C {(test_done)}) ] )