(List (= scope= flags=0 words=[] bindings=[('test_description', {[SQ ]})]) (Com {[LIT_CHARS .]} {[LIT_CHARS ./test-lib.sh]}) (FunctionDef echo_without_newline [] (Com {[LIT_CHARS printf]} {[SQ ]} {[DQ [VarSub *]]}) ) (FunctionDef strlen [] (Pipeline (Com {[LIT_CHARS echo_without_newline]} {[DQ [VarSub 1]]}) (Com {[LIT_CHARS wc]} {[LIT_CHARS -c]}) (Com {[LIT_CHARS sed]} {[LIT_CHARS -e]} {[SQ ]}) ) ) (FunctionDef maybe_remove_timestamp [] (If (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub 2]]}) (Com {[LIT_CHARS echo_without_newline]} {[DQ [VarSub 1]]}) (ElseTrue) (Com {[LIT_CHARS echo_without_newline]} {[DQ [ComSub (Pipeline (Com {[LIT_CHARS printf]} {[SQ ]} {[DQ [VarSub 1]]}) (Com {[LIT_CHARS sed]} {[LIT_CHARS -e]} {[SQ ]}) )]]}) ) ) (FunctionDef run_tests [] (List (= scope= flags=0 words=[] bindings=[('type', {[VarSub 1]})]) (= scope= flags=0 words=[] bindings=[('sha1', {[VarSub 2]})]) (= scope= flags=0 words=[] bindings=[('size', {[VarSub 3]})]) (= scope= flags=0 words=[] bindings=[('content', {[VarSub 4]})]) (= scope= flags=0 words=[] bindings=[('pretty_content', {[VarSub 5]})]) (= scope= flags=0 words=[] bindings=[('no_ts', {[VarSub 6]})]) (= scope= flags=0 words=[] bindings=[('batch_output', {[DQ [VarSub sha1][LIT_CHARS " "][VarSub type][LIT_CHARS " "][VarSub size][LIT_CHARS "\n"][VarSub content]]})]) (Com {[LIT_CHARS test_expect_success]} {[DQ [VarSub type][LIT_CHARS " exists"]]} {[SQ ]}) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "Type of "][VarSub type][LIT_CHARS " is correct"]]} {[SQ expect &&\n"> actual &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "Size of "][VarSub type][LIT_CHARS " is correct"]]} {[SQ expect &&\n"> actual &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "Type of "][VarSub type][LIT_CHARS " is correct using --allow-unknown-type"]]} {[SQ expect &&\n"> actual &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "Size of "][VarSub type][LIT_CHARS " is correct using --allow-unknown-type"]]} {[SQ expect &&\n"> actual &&\n"> ]}) (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub content]]}) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "Content of "][VarSub type][LIT_CHARS " is correct"]]} {[SQ expect &&\n"> actual &&\n"> ]}) ) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "Pretty content of "][VarSub type][LIT_CHARS " is correct"]]} {[SQ expect &&\n"> actual &&\n"> ]}) (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub content]]}) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "--batch output of "][VarSub type][LIT_CHARS " is correct"]]} {[SQ expect &&\n"> actual &&\n"> ]}) ) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "--batch-check output of "][VarSub type][LIT_CHARS " is correct"]]} {[SQ expect &&\n"> actual &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "custom --batch-check format"]]} {[SQ expect &&\n"> actual &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ expect &&\n"> actual &&\n"> ]}) (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub content]]}) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "--batch without type ("][VarSub type][LIT_CHARS ")"]]} {[SQ expect &&\n"> actual.full &&\n"> actual &&\n"> ]}) ) (AndOr OP_OR_IF (Com {[LIT_CHARS test]} {[LIT_CHARS -z]} {[DQ [VarSub content]]}) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "--batch without size ("][VarSub type][LIT_CHARS ")"]]} {[SQ expect &&\n"> actual.full &&\n"> actual &&\n"> ]}) ) ) ) (= scope= flags=0 words=[] bindings=[('hello_content', {[DQ [LIT_CHARS "Hello World"]]})]) (= scope= flags=0 words=[] bindings=[('hello_size', {[ComSub (Com {[LIT_CHARS strlen]} {[DQ [VarSub hello_content]]})]})]) (= scope= flags=0 words=[] bindings=[('hello_sha1', {[ComSub (Pipeline (Com {[LIT_CHARS echo_without_newline]} {[DQ [VarSub hello_content]]}) (Com {[LIT_CHARS git]} {[LIT_CHARS hash-object]} {[LIT_CHARS --stdin]}) )]})]) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS setup]]} {[SQ hello &&\n"> ]}) (Com {[LIT_CHARS run_tests]} {[SQ ]} {[VarSub hello_sha1]} {[VarSub hello_size]} {[DQ [VarSub hello_content]]} {[DQ [VarSub hello_content]]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ expect &&\n"> actual &&\n"> ]}) (= scope= flags=0 words=[] bindings=[('tree_sha1', {[ComSub (Com {[LIT_CHARS git]} {[LIT_CHARS write-tree]})]})]) (= scope= flags=0 words=[] bindings=[('tree_size', {[LIT_CHARS 33]})]) (= scope= flags=0 words=[] bindings=[('tree_pretty_content', {[DQ [LIT_CHARS "100644 blob "][VarSub hello_sha1][LIT_CHARS "\thello"]]})]) (Com {[LIT_CHARS run_tests]} {[SQ ]} {[VarSub tree_sha1]} {[VarSub tree_size]} {[DQ ]} {[DQ [VarSub tree_pretty_content]]}) (= scope= flags=0 words=[] bindings=[('commit_message', {[DQ [LIT_CHARS "Initial commit"]]})]) (= scope= flags=0 words=[] bindings=[('commit_sha1', {[ComSub (Pipeline (Com {[LIT_CHARS echo_without_newline]} {[DQ [VarSub commit_message]]}) (Com {[LIT_CHARS git]} {[LIT_CHARS commit-tree]} {[VarSub tree_sha1]}) )]})]) (= scope= flags=0 words=[] bindings=[('commit_size', {[LIT_CHARS 177]})]) (= scope= flags=0 words=[] bindings=[('commit_content', {[DQ [LIT_CHARS "tree "][VarSub tree_sha1][LIT_CHARS "\n"][LIT_CHARS "author "][VarSub GIT_AUTHOR_NAME][LIT_CHARS " <"][VarSub GIT_AUTHOR_EMAIL][LIT_CHARS "> 0000000000 +0000\n"][LIT_CHARS "committer "][VarSub GIT_COMMITTER_NAME][LIT_CHARS " <"][VarSub GIT_COMMITTER_EMAIL][LIT_CHARS "> 0000000000 +0000\n"][LIT_CHARS "\n"][VarSub commit_message]]})]) (Com {[LIT_CHARS run_tests]} {[SQ ]} {[VarSub commit_sha1]} {[VarSub commit_size]} {[DQ [VarSub commit_content]]} {[DQ [VarSub commit_content]]} {[LIT_CHARS 1]}) (= scope= flags=0 words=[] bindings=[('tag_header_without_timestamp', {[DQ [LIT_CHARS "object "][VarSub hello_sha1][LIT_CHARS "\n"][LIT_CHARS "type blob\n"][LIT_CHARS "tag hellotag\n"][LIT_CHARS "tagger "][VarSub GIT_COMMITTER_NAME][LIT_CHARS " <"][VarSub GIT_COMMITTER_EMAIL][LIT_CHARS ">"]]})]) (= scope= flags=0 words=[] bindings=[('tag_description', {[DQ [LIT_CHARS "This is a tag"]]})]) (= scope= flags=0 words=[] bindings=[('tag_content', {[DQ [VarSub tag_header_without_timestamp][LIT_CHARS " 0000000000 +0000\n"][LIT_CHARS "\n"][VarSub tag_description]]})]) (= scope= flags=0 words=[] bindings=[('tag_sha1', {[ComSub (Pipeline (Com {[LIT_CHARS echo_without_newline]} {[DQ [VarSub tag_content]]}) (Com {[LIT_CHARS git]} {[LIT_CHARS mktag]}) )]})]) (= scope= flags=0 words=[] bindings=[('tag_size', {[ComSub (Com {[LIT_CHARS strlen]} {[DQ [VarSub tag_content]]})]})]) (Com {[LIT_CHARS run_tests]} {[SQ ]} {[VarSub tag_sha1]} {[VarSub tag_size]} {[DQ [VarSub tag_content]]} {[DQ [VarSub tag_content]]} {[LIT_CHARS 1]}) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "Reach a blob from a tag pointing to it"]]} {[DQ [LIT_CHARS "test '"][VarSub hello_content][LIT_CHARS "' = "][\ LIT_ESCAPED_CHAR "\\\""][\ LIT_ESCAPED_CHAR "\\$"][LIT_CHARS "(git cat-file blob "][VarSub tag_sha1][LIT_CHARS ")"][\ LIT_ESCAPED_CHAR "\\\""]]}) (For batch [{[LIT_CHARS batch]}, {[LIT_CHARS batch-check]}]) (List (For opt [{[LIT_CHARS t]}, {[LIT_CHARS s]}, {[LIT_CHARS e]}, {[LIT_CHARS p]}]) (List (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "Passing -"][VarSub opt][LIT_CHARS " with --"][VarSub batch][LIT_CHARS " fails"]]} {[SQ ]}) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "Passing --"][VarSub batch][LIT_CHARS " with -"][VarSub opt][LIT_CHARS " fails"]]} {[SQ ]}) ) ) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "Passing with --"][VarSub batch][LIT_CHARS " fails"]]} {[SQ ]}) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "Passing --"][VarSub batch][LIT_CHARS " with fails"]]} {[SQ ]}) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "Passing sha1 with --"][VarSub batch][LIT_CHARS " fails"]]} {[SQ ]}) ) ) (For opt [{[LIT_CHARS t]}, {[LIT_CHARS s]}, {[LIT_CHARS e]}, {[LIT_CHARS p]}]) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "Passing -"][VarSub opt][LIT_CHARS " with --follow-symlinks fails"]]} {[SQ ]}) ) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "--batch-check for a non-existent named object"]]} {[SQ ]}) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "--batch-check for a non-existent hash"]]} {[SQ ]}) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "--batch for an existent and a non-existent hash"]]} {[SQ ]}) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "--batch-check for an empty line"]]} {[SQ ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ expect &&\n"> actual &&\n"> ]}) (= scope= flags=0 words=[] bindings=[('batch_input', {[DQ [VarSub hello_sha1][LIT_CHARS "\n"][VarSub commit_sha1][LIT_CHARS "\n"][VarSub tag_sha1][LIT_CHARS "\n"][LIT_CHARS "deadbeef\n"][LIT_CHARS "\n"]]})]) (= scope= flags=0 words=[] bindings=[('batch_output', {[DQ [VarSub hello_sha1][LIT_CHARS " blob "][VarSub hello_size][LIT_CHARS "\n"][VarSub hello_content][LIT_CHARS "\n"][VarSub commit_sha1][LIT_CHARS " commit "][VarSub commit_size][LIT_CHARS "\n"][VarSub commit_content][LIT_CHARS "\n"][VarSub tag_sha1][LIT_CHARS " tag "][VarSub tag_size][LIT_CHARS "\n"][VarSub tag_content][LIT_CHARS "\n"][LIT_CHARS "deadbeef missing\n"][LIT_CHARS " missing"]]})]) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ ]}) (= scope= flags=0 words=[] bindings=[('batch_check_input', {[DQ [VarSub hello_sha1][LIT_CHARS "\n"][VarSub tree_sha1][LIT_CHARS "\n"][VarSub commit_sha1][LIT_CHARS "\n"][VarSub tag_sha1][LIT_CHARS "\n"][LIT_CHARS "deadbeef\n"][LIT_CHARS "\n"]]})]) (= scope= flags=0 words=[] bindings=[('batch_check_output', {[DQ [VarSub hello_sha1][LIT_CHARS " blob "][VarSub hello_size][LIT_CHARS "\n"][VarSub tree_sha1][LIT_CHARS " tree "][VarSub tree_size][LIT_CHARS "\n"][VarSub commit_sha1][LIT_CHARS " commit "][VarSub commit_size][LIT_CHARS "\n"][VarSub tag_sha1][LIT_CHARS " tag "][VarSub tag_size][LIT_CHARS "\n"][LIT_CHARS "deadbeef missing\n"][LIT_CHARS " missing"]]})]) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "--batch-check with multiple sha1s gives correct format"]]} {[SQ ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ foo &&\n"> foo-plus &&\n"> blobs <<-\\EOF\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ expect <<-EOF &&\n"> actual &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ actual &&\n"> ]}) (= scope= flags=0 words=[] bindings=[('bogus_type', {[DQ [LIT_CHARS bogus]]})]) (= scope= flags=0 words=[] bindings=[('bogus_content', {[DQ [LIT_CHARS bogus]]})]) (= scope= flags=0 words=[] bindings=[('bogus_size', {[ComSub (Com {[LIT_CHARS strlen]} {[DQ [VarSub bogus_content]]})]})]) (= scope= flags=0 words=[] bindings=[('bogus_sha1', {[ComSub (Pipeline (Com {[LIT_CHARS echo_without_newline]} {[DQ [VarSub bogus_content]]}) (Com {[LIT_CHARS git]} {[LIT_CHARS hash-object]} {[LIT_CHARS -t]} {[VarSub bogus_type]} {[LIT_CHARS --literally]} {[LIT_CHARS -w]} {[LIT_CHARS --stdin]}) )]})]) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "Type of broken object is correct"]]} {[SQ expect &&\n"> actual &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "Size of broken object is correct"]]} {[SQ expect &&\n"> actual &&\n"> ]}) (= scope= flags=0 words=[] bindings=[('bogus_type', {[DQ [LIT_CHARS abcdefghijklmnopqrstuvwxyz1234679]]})]) (= scope= flags=0 words=[] bindings=[('bogus_content', {[DQ [LIT_CHARS bogus]]})]) (= scope= flags=0 words=[] bindings=[('bogus_size', {[ComSub (Com {[LIT_CHARS strlen]} {[DQ [VarSub bogus_content]]})]})]) (= scope= flags=0 words=[] bindings=[('bogus_sha1', {[ComSub (Pipeline (Com {[LIT_CHARS echo_without_newline]} {[DQ [VarSub bogus_content]]}) (Com {[LIT_CHARS git]} {[LIT_CHARS hash-object]} {[LIT_CHARS -t]} {[VarSub bogus_type]} {[LIT_CHARS --literally]} {[LIT_CHARS -w]} {[LIT_CHARS --stdin]}) )]})]) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "Type of broken object is correct when type is large"]]} {[SQ expect &&\n"> actual &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[DQ [LIT_CHARS "Size of large broken object is correct when type is large"]]} {[SQ expect &&\n"> actual &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ morx &&\n"> dir/subdir/ind2 &&\n"> dir/ind1 &&\n"> found\n">]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ actual &&\n"> expect &&\n"> actual &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ actual &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ actual &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ expect &&\n"> >expect &&\n"> actual &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ actual &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ actual &&\n"> expect &&\n"> >expect &&\n"> actual &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ expect &&\n"> >expect &&\n"> actual &&\n"> actual &&\n"> expect &&\n"> >expect &&\n"> actual &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ expect &&\n"> >expect &&\n"> actual &&\n"> actual &&\n"> actual &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ expect &&\n"> >expect &&\n"> actual &&\n"> expect &&\n"> actual &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ expect &&\n"> >expect &&\n"> actual &&\n"> actual &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ subdir links">]} {[SQ expect &&\n"> >expect &&\n"> actual &&\n"> actual &&\n"> actual &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ expect &&\n"> >expect &&\n"> actual &&\n"> expect &&\n"> >expect &&\n"> actual &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ expect &&\n"> >expect &&\n"> actual &&\n"> expect &&\n"> >expect &&\n"> actual &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ expect &&\n"> >expect &&\n"> actual &&\n"> expect &&\n"> >expect &&\n"> actual &&\n"> expect &&\n"> >expect &&\n"> actual &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ expect &&\n"> actual &&\n"> actual &&\n"> actual &&\n"> expect &&\n"> >expect &&\n"> actual &&\n"> actual &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ expect &&\n"> >expect &&\n"> actual &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ expect &&\n"> actual &&\n"> ]}) (Com {[LIT_CHARS test_expect_success]} {[SQ ]} {[SQ file &&\n"> expect.unsorted &&\n"> >expect.unsorted &&\n"> expect &&\n"> actual &&\n"> ]}) (Com {[LIT_CHARS test_done]}) )