(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:'git cat-file textconv support' span_id:6))} spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op:(Token id:Id.Redir_Great val:'>' span_id:16) fd:-1 arg_word:{(helper)}) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:19) fd: -1 here_begin: {(SQ (Token id:Id.Lit_Chars val:EOF span_id:21))} here_end_span_id: 27 stdin_parts: [ ('#!/bin/sh\n') ('grep -q \'^bin: \' "$1" || { echo "E: $1 is not \\"binary\\" file" 1>&2; exit 1; }\n') ('sed \'s/^bin: /converted: /\' "$1"\n') ] ) ] ) (C {(chmod)} {(Id.Lit_Other '+') (x)} {(helper)}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup ' span_id:39))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:43) (Token id:Id.Lit_Chars val:'\techo "bin: test" >one.bin &&\n' span_id:44) (Token id:Id.Lit_Chars val:'\ttest_ln_s_add one.bin symlink.bin &&\n' span_id:45) (Token id:Id.Lit_Chars val:'\tgit add . &&\n' span_id:46) (Token id: Id.Lit_Chars val: '\tGIT_AUTHOR_NAME=Number1 git commit -a -m First --date="2010-01-01 18:00:00" &&\n' span_id: 47 ) (Token id:Id.Lit_Chars val:'\techo "bin: test version 2" >one.bin &&\n' span_id:48) (Token id: Id.Lit_Chars val: '\tGIT_AUTHOR_NAME=Number2 git commit -a -m Second --date="2010-01-01 20:00:00"\n' span_id: 49 ) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:55) fd: -1 arg_word: {(expected)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:58) fd: -1 here_begin: {(EOF)} here_end_span_id: 63 stdin_parts: [('bin: test version 2\n')] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'no filter specified' span_id:68))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:72) (Token id: Id.Lit_Chars val: '\tgit cat-file --textconv :one.bin >result &&\n' span_id: 73 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected result\n' span_id:74) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup textconv filters' span_id:81))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:85) (Token id: Id.Lit_Chars val: '\techo "*.bin diff=test" >.gitattributes &&\n' span_id: 86 ) (Token id:Id.Lit_Chars val:'\tgit config diff.test.textconv ./helper &&\n' span_id:87) (Token id: Id.Lit_Chars val: '\tgit config diff.test.cachetextconv false\n' span_id: 88 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cat-file without --textconv' span_id:95))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:99) (Token id: Id.Lit_Chars val: '\tgit cat-file blob :one.bin >result &&\n' span_id: 100 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected result\n' span_id:101) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:107) fd: -1 arg_word: {(expected)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:110) fd: -1 here_begin: {(EOF)} here_end_span_id: 115 stdin_parts: [('bin: test\n')] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cat-file without --textconv on previous commit' span_id:120))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:124) (Token id: Id.Lit_Chars val: '\tgit cat-file -p HEAD^:one.bin >result &&\n' span_id: 125 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected result\n' span_id:126) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:132) fd: -1 arg_word: {(expected)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:135) fd: -1 here_begin: {(EOF)} here_end_span_id: 140 stdin_parts: [('converted: test version 2\n')] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cat-file --textconv on last commit' span_id:145))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:149) (Token id: Id.Lit_Chars val: '\tgit cat-file --textconv :one.bin >result &&\n' span_id: 150 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected result\n' span_id:151) ) } ) (command.Simple words: [{(cat)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:157) fd: -1 arg_word: {(expected)} ) (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:160) fd: -1 here_begin: {(EOF)} here_end_span_id: 165 stdin_parts: [('converted: test\n')] ) ] ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cat-file --textconv on previous commit' span_id:170))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:174) (Token id: Id.Lit_Chars val: '\tgit cat-file --textconv HEAD^:one.bin >result &&\n' span_id: 175 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected result\n' span_id:176) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cat-file without --textconv (symlink)' span_id:183))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:187) (Token id:Id.Lit_Chars val:'\tprintf "%s" "one.bin" >expected &&\n' span_id:188) (Token id:Id.Lit_Chars val:'\tgit cat-file blob :symlink.bin >result &&\n' span_id:189) (Token id:Id.Lit_Chars val:'\ttest_cmp expected result\n' span_id:190) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cat-file --textconv on index (symlink)' span_id:198))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:202) (Token id: Id.Lit_Chars val: '\tgit cat-file --textconv :symlink.bin >result &&\n' span_id: 203 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected result\n' span_id:204) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'cat-file --textconv on HEAD (symlink)' span_id:211))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:215) (Token id: Id.Lit_Chars val: '\tgit cat-file --textconv HEAD:symlink.bin >result &&\n' span_id: 216 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expected result\n' span_id:217) ) } ) (C {(test_done)}) ] )