(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: 'test tree diff when trees have duplicate entries' span_id: 6 ) ) } spids: [4] ) ] ) (C {(.)} {(./test-lib.sh)}) (command.ShFunction name: make_tree_entry body: (command.BraceGroup children: [ (command.AndOr ops: [Id.Op_DAmp] children: [ (C {(printf)} {(SQ (Token id:Id.Lit_Chars val:'%s %s\\0' span_id:37))} {(DQ ($ Id.VSub_Number '$1'))} {(DQ ($ Id.VSub_Number '$2'))} ) (C {(perl)} {(-e)} { (SQ (Token id: Id.Lit_Chars val: 'print chr(hex($_)) for ($ARGV[0] =~ /../g)' span_id: 56 ) ) } {(DQ ($ Id.VSub_Number '$3'))} ) ] ) ] ) ) (command.ShFunction name: make_tree body: (command.BraceGroup children: [ (command.Pipeline children: [ (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:83) cond: [ (command.Sentence child: (C {(test)} {($ Id.VSub_Pound '$#')} {(-gt)} {(2)}) terminator: (Token id:Id.Op_Semi val:';' span_id:92) ) ] body: (command.DoGroup children: [ (C {(make_tree_entry)} {(DQ ($ Id.VSub_Number '$1'))} {(DQ ($ Id.VSub_Number '$2'))} {(DQ ($ Id.VSub_Number '$3'))} ) (command.Sentence child: (C {(shift)}) terminator: (Token id:Id.Op_Semi val:';' span_id:113) ) (command.Sentence child: (C {(shift)}) terminator: (Token id:Id.Op_Semi val:';' span_id:116) ) (C {(shift)}) ] ) ) (C {(git)} {(hash-object)} {(-w)} {(-t)} {(tree)} {(--stdin)}) ] negated: F ) ] ) ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'create trees with duplicate entries' span_id:162))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:166) (Token id: Id.Lit_Chars val: '\tblob_one=$(echo one | git hash-object -w --stdin) &&\n' span_id: 167 ) (Token id:Id.Lit_Chars val:'\tblob_two=$(echo two | git hash-object -w --stdin) &&\n' span_id:168) (Token id:Id.Lit_Chars val:'\tinner_one_a=$(make_tree \\\n' span_id:169) (Token id:Id.Lit_Chars val:'\t\t100644 inner $blob_one\n' span_id:170) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:171) (Token id:Id.Lit_Chars val:'\tinner_one_b=$(make_tree \\\n' span_id:172) (Token id:Id.Lit_Chars val:'\t\t100644 inner $blob_two \\\n' span_id:173) (Token id:Id.Lit_Chars val:'\t\t100644 inner $blob_two \\\n' span_id:174) (Token id:Id.Lit_Chars val:'\t\t100644 inner $blob_two\n' span_id:175) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:176) (Token id:Id.Lit_Chars val:'\touter_one=$(make_tree \\\n' span_id:177) (Token id:Id.Lit_Chars val:'\t\t040000 outer $inner_one_a \\\n' span_id:178) (Token id:Id.Lit_Chars val:'\t\t040000 outer $inner_one_b\n' span_id:179) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:180) (Token id:Id.Lit_Chars val:'\tinner_two=$(make_tree \\\n' span_id:181) (Token id:Id.Lit_Chars val:'\t\t100644 inner $blob_one \\\n' span_id:182) (Token id:Id.Lit_Chars val:'\t\t100644 inner $blob_two \\\n' span_id:183) (Token id:Id.Lit_Chars val:'\t\t100644 inner $blob_two \\\n' span_id:184) (Token id:Id.Lit_Chars val:'\t\t100644 inner $blob_two\n' span_id:185) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:186) (Token id:Id.Lit_Chars val:'\touter_two=$(make_tree \\\n' span_id:187) (Token id:Id.Lit_Chars val:'\t\t040000 outer $inner_two\n' span_id:188) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:189) (Token id:Id.Lit_Chars val:'\tgit tag one $outer_one &&\n' span_id:190) (Token id:Id.Lit_Chars val:'\tgit tag two $outer_two\n' span_id:191) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'diff-tree between trees' span_id:198))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:202) (Token id:Id.Lit_Chars val:'\t{\n' span_id:203) (Token id: Id.Lit_Chars val: '\t\tprintf ":000000 100644 $_z40 $blob_two A\\touter/inner\\n" &&\n' span_id: 204 ) (Token id: Id.Lit_Chars val: '\t\tprintf ":000000 100644 $_z40 $blob_two A\\touter/inner\\n" &&\n' span_id: 205 ) (Token id: Id.Lit_Chars val: '\t\tprintf ":000000 100644 $_z40 $blob_two A\\touter/inner\\n" &&\n' span_id: 206 ) (Token id: Id.Lit_Chars val: '\t\tprintf ":100644 000000 $blob_two $_z40 D\\touter/inner\\n" &&\n' span_id: 207 ) (Token id: Id.Lit_Chars val: '\t\tprintf ":100644 000000 $blob_two $_z40 D\\touter/inner\\n" &&\n' span_id: 208 ) (Token id: Id.Lit_Chars val: '\t\tprintf ":100644 000000 $blob_two $_z40 D\\touter/inner\\n"\n' span_id: 209 ) (Token id:Id.Lit_Chars val:'\t} >expect &&\n' span_id:210) (Token id: Id.Lit_Chars val: '\tgit diff-tree -r --no-abbrev one two >actual &&\n' span_id: 211 ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:212) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'diff-tree with renames' span_id:219))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:223) (Token id: Id.Lit_Chars val: '\t# same expectation as above, since we disable rename detection\n' span_id: 224 ) (Token id:Id.Lit_Chars val:'\tgit diff-tree -M -r --no-abbrev one two >actual &&\n' span_id:225) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:226) ) } ) (C {(test_done)}) ] )