(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:'quoted output' span_id:15))} spids: [13] ) ] ) (C {(.)} {(./test-lib.sh)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FN) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'\xe6\xbf\xb1\xe9\x87\x8e' span_id:26))} spids: [24] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:GN) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'\xe7\xb4\x94' span_id:31))} spids: [29] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:HT) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'\t' span_id:36))} spids: [34] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:DQ) op: assign_op.Equal rhs: {(SQ (Token id:Id.Lit_Chars val:'"' span_id:41))} spids: [39] ) ] ) (command.AndOr ops: [Id.Op_DPipe] children: [ (C {(test_have_prereq)} {(MINGW)}) (command.Simple words: [{(echo)} {(foo)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'2>' span_id:55) fd: 2 arg_word: {(/dev/null)} ) (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:58) fd: -1 arg_word: {(DQ ('Name and an') (${ Id.VSub_Name HT) (HT))} ) ] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Pipeline children: [(C {(test)} {(-f)} {(DQ ('Name and an') (${ Id.VSub_Name HT) (HT))})] negated: T ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:skip_all) op: assign_op.Equal rhs: { (SQ (Token id: Id.Lit_Chars val: 'Your filesystem does not allow tabs in filenames' span_id: 93 ) ) } spids: [91] ) ] ) (C {(test_done)}) ] spids: [68 84] ) ] ) (command.ShFunction name: for_each_name body: (command.BraceGroup children: [ (command.ForEach iter_name: name iter_words: [ {(Name)} {(DQ ('Name and a') (${ Id.VSub_Name LF) (LF))} {(DQ ('Name and an') (${ Id.VSub_Name HT) (HT))} {(DQ (Name) (${ Id.VSub_Name DQ))} { (DQ ($ Id.VSub_DollarName '$FN') ($ Id.VSub_DollarName '$HT') ($ Id.VSub_DollarName '$GN') ) } { (DQ ($ Id.VSub_DollarName '$FN') ($ Id.VSub_DollarName '$LF') ($ Id.VSub_DollarName '$GN') ) } {(DQ ($ Id.VSub_DollarName '$FN') (' ') ($ Id.VSub_DollarName '$GN'))} {(DQ ($ Id.VSub_DollarName '$FN') ($ Id.VSub_DollarName '$GN'))} { (DQ ($ Id.VSub_DollarName '$FN') ($ Id.VSub_DollarName '$DQ') ($ Id.VSub_DollarName '$GN') ) } {(DQ ('With SP in it'))} {(DQ ($ Id.VSub_DollarName '$FN') (/file))} ] do_arg_iter: F body: (command.DoGroup children:[(C {(eval)} {(DQ ($ Id.VSub_Number '$1'))})]) ) ] ) ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:204))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:208) (Token id:Id.Lit_Chars val:'\n' span_id:209) (Token id:Id.Lit_Chars val:'\tmkdir "$FN" &&\n' span_id:210) (Token id:Id.Lit_Chars val:'\tfor_each_name "echo initial >\\"\\$name\\"" &&\n' span_id:211) (Token id:Id.Lit_Chars val:'\tgit add . &&\n' span_id:212) (Token id:Id.Lit_Chars val:'\tgit commit -q -m Initial &&\n' span_id:213) (Token id:Id.Lit_Chars val:'\n' span_id:214) (Token id:Id.Lit_Chars val:'\tfor_each_name "echo second >\\"\\$name\\"" &&\n' span_id:215) (Token id:Id.Lit_Chars val:'\tgit commit -a -m Second &&\n' span_id:216) (Token id:Id.Lit_Chars val:'\n' span_id:217) (Token id: Id.Lit_Chars val: '\tfor_each_name "echo modified >\\"\\$name\\""\n' span_id: 218 ) (Token id:Id.Lit_Chars val:'\n' span_id:219) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup expected files' span_id:226))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:230) (Token id:Id.Lit_Chars val:'cat >expect.quoted <<\\EOF &&\n' span_id:231) (Token id:Id.Lit_Chars val:'Name\n' span_id:232) (Token id:Id.Lit_Chars val:'"Name and a\\nLF"\n' span_id:233) (Token id:Id.Lit_Chars val:'"Name and an\\tHT"\n' span_id:234) (Token id:Id.Lit_Chars val:'"Name\\""\n' span_id:235) (Token id:Id.Lit_Chars val:'With SP in it\n' span_id:236) (Token id: Id.Lit_Chars val: '"\\346\\277\\261\\351\\207\\216\\t\\347\\264\\224"\n' span_id: 237 ) (Token id:Id.Lit_Chars val:'"\\346\\277\\261\\351\\207\\216\\n\\347\\264\\224"\n' span_id:238) (Token id: Id.Lit_Chars val: '"\\346\\277\\261\\351\\207\\216 \\347\\264\\224"\n' span_id: 239 ) (Token id:Id.Lit_Chars val:'"\\346\\277\\261\\351\\207\\216\\"\\347\\264\\224"\n' span_id:240) (Token id:Id.Lit_Chars val:'"\\346\\277\\261\\351\\207\\216/file"\n' span_id:241) (Token id:Id.Lit_Chars val:'"\\346\\277\\261\\351\\207\\216\\347\\264\\224"\n' span_id:242) (Token id:Id.Lit_Chars val:'EOF\n' span_id:243) (Token id:Id.Lit_Chars val:'\n' span_id:244) (Token id:Id.Lit_Chars val:'cat >expect.raw <<\\EOF\n' span_id:245) (Token id:Id.Lit_Chars val:'Name\n' span_id:246) (Token id:Id.Lit_Chars val:'"Name and a\\nLF"\n' span_id:247) (Token id:Id.Lit_Chars val:'"Name and an\\tHT"\n' span_id:248) (Token id:Id.Lit_Chars val:'"Name\\""\n' span_id:249) (Token id:Id.Lit_Chars val:'With SP in it\n' span_id:250) (Token id: Id.Lit_Chars val: '"\xe6\xbf\xb1\xe9\x87\x8e\\t\xe7\xb4\x94"\n' span_id: 251 ) (Token id:Id.Lit_Chars val:'"\xe6\xbf\xb1\xe9\x87\x8e\\n\xe7\xb4\x94"\n' span_id:252) (Token id:Id.Lit_Chars val:'\xe6\xbf\xb1\xe9\x87\x8e \xe7\xb4\x94\n' span_id:253) (Token id:Id.Lit_Chars val:'"\xe6\xbf\xb1\xe9\x87\x8e\\"\xe7\xb4\x94"\n' span_id:254) (Token id:Id.Lit_Chars val:'\xe6\xbf\xb1\xe9\x87\x8e/file\n' span_id:255) (Token id:Id.Lit_Chars val:'\xe6\xbf\xb1\xe9\x87\x8e\xe7\xb4\x94\n' span_id:256) (Token id:Id.Lit_Chars val:'EOF\n' span_id:257) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'check fully quoted output from ls-files' span_id:264))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:268) (Token id:Id.Lit_Chars val:'\n' span_id:269) (Token id: Id.Lit_Chars val: '\tgit ls-files >current && test_cmp expect.quoted current\n' span_id: 270 ) (Token id:Id.Lit_Chars val:'\n' span_id:271) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'check fully quoted output from diff-files' span_id:278))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:282) (Token id:Id.Lit_Chars val:'\n' span_id:283) (Token id:Id.Lit_Chars val:'\tgit diff --name-only >current &&\n' span_id:284) (Token id:Id.Lit_Chars val:'\ttest_cmp expect.quoted current\n' span_id:285) (Token id:Id.Lit_Chars val:'\n' span_id:286) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'check fully quoted output from diff-index' span_id:293))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:297) (Token id:Id.Lit_Chars val:'\n' span_id:298) (Token id: Id.Lit_Chars val: '\tgit diff --name-only HEAD >current &&\n' span_id: 299 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect.quoted current\n' span_id:300) (Token id:Id.Lit_Chars val:'\n' span_id:301) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'check fully quoted output from diff-tree' span_id:308))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:312) (Token id:Id.Lit_Chars val:'\n' span_id:313) (Token id: Id.Lit_Chars val: '\tgit diff --name-only HEAD^ HEAD >current &&\n' span_id: 314 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect.quoted current\n' span_id:315) (Token id:Id.Lit_Chars val:'\n' span_id:316) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'check fully quoted output from ls-tree' span_id:323))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:327) (Token id:Id.Lit_Chars val:'\n' span_id:328) (Token id: Id.Lit_Chars val: '\tgit ls-tree --name-only -r HEAD >current &&\n' span_id: 329 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect.quoted current\n' span_id:330) (Token id:Id.Lit_Chars val:'\n' span_id:331) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setting core.quotepath' span_id:338))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:342) (Token id:Id.Lit_Chars val:'\n' span_id:343) (Token id: Id.Lit_Chars val: '\tgit config --bool core.quotepath false\n' span_id: 344 ) (Token id:Id.Lit_Chars val:'\n' span_id:345) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'check fully quoted output from ls-files' span_id:352))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:356) (Token id:Id.Lit_Chars val:'\n' span_id:357) (Token id: Id.Lit_Chars val: '\tgit ls-files >current && test_cmp expect.raw current\n' span_id: 358 ) (Token id:Id.Lit_Chars val:'\n' span_id:359) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'check fully quoted output from diff-files' span_id:366))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:370) (Token id:Id.Lit_Chars val:'\n' span_id:371) (Token id:Id.Lit_Chars val:'\tgit diff --name-only >current &&\n' span_id:372) (Token id:Id.Lit_Chars val:'\ttest_cmp expect.raw current\n' span_id:373) (Token id:Id.Lit_Chars val:'\n' span_id:374) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'check fully quoted output from diff-index' span_id:381))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:385) (Token id:Id.Lit_Chars val:'\n' span_id:386) (Token id: Id.Lit_Chars val: '\tgit diff --name-only HEAD >current &&\n' span_id: 387 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect.raw current\n' span_id:388) (Token id:Id.Lit_Chars val:'\n' span_id:389) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'check fully quoted output from diff-tree' span_id:396))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:400) (Token id:Id.Lit_Chars val:'\n' span_id:401) (Token id: Id.Lit_Chars val: '\tgit diff --name-only HEAD^ HEAD >current &&\n' span_id: 402 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect.raw current\n' span_id:403) (Token id:Id.Lit_Chars val:'\n' span_id:404) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'check fully quoted output from ls-tree' span_id:411))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:415) (Token id:Id.Lit_Chars val:'\n' span_id:416) (Token id: Id.Lit_Chars val: '\tgit ls-tree --name-only -r HEAD >current &&\n' span_id: 417 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect.raw current\n' span_id:418) (Token id:Id.Lit_Chars val:'\n' span_id:419) ) } ) (C {(test_done)}) ] )