(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: 'handling of duplicate objects in incoming packfiles'
                  span_id: 6
                )
              )
            }
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(.)} {(DQ ($ Id.VSub_DollarName '$TEST_DIRECTORY')) (/lib-pack.sh)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:LO_SHA1)
          op: assign_op.Equal
          rhs: {(e68fe8129b546b101aee9510c5328e7f21ca1d18)}
          spids: [30]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:HI_SHA1)
          op: assign_op.Equal
          rhs: {(e69de29bb2d1d6434b8b29ae775ad8c2e48c5391)}
          spids: [33]
        )
      ]
    )
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:MISSING_SHA1)
          op: assign_op.Equal
          rhs: {(SQ (Token id:Id.Lit_Chars val:e69d000000000000000000000000000000000000 span_id:51))}
          spids: [49]
        )
      ]
    )
    (command.ShFunction
      name: create_pack
      body: 
        (command.BraceGroup
          children: [
            (command.AndOr
              ops: [Id.Op_DAmp Id.Op_DAmp]
              children: [
                (command.Simple
                  words: [
                    {(pack_header)}
                    {
                      (DQ 
                        (word_part.ArithSub
                          anode: 
                            (arith_expr.Binary
                              op_id: Id.Arith_Star
                              left: (arith_expr.ArithWord w:{(Id.Lit_Digits 2)})
                              right: (arith_expr.ArithWord w:{($ Id.VSub_Number '$2')})
                            )
                        )
                      )
                    }
                  ]
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_Great val:'>' span_id:94)
                      fd: -1
                      arg_word: {(DQ ($ Id.VSub_Number '$1'))}
                    )
                  ]
                )
                (command.ForEach
                  iter_name: i
                  iter_words: [
                    {
                      (command_sub
                        left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:108)
                        command_list: 
                          (command.CommandList
                            children: [(C {(test_seq)} {(1)} {(DQ ($ Id.VSub_Number '$2'))})]
                          )
                      )
                    }
                  ]
                  do_arg_iter: F
                  body: 
                    (command.DoGroup
                      children: [
                        (command.AndOr
                          ops: [Id.Op_DAmp]
                          children: [
                            (C {(pack_obj)} {($ Id.VSub_DollarName '$LO_SHA1')})
                            (C {(pack_obj)} {($ Id.VSub_DollarName '$HI_SHA1')})
                          ]
                        )
                      ]
                    )
                  redirects: [
                    (redir.Redir
                      op: (Token id:Id.Redir_DGreat val:'>>' span_id:136)
                      fd: -1
                      arg_word: {(DQ ($ Id.VSub_Number '$1'))}
                    )
                  ]
                )
                (C {(pack_trailer)} {(DQ ($ Id.VSub_Number '$1'))})
              ]
            )
          ]
        )
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'pack with no duplicates' span_id:159))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:163) 
          (Token id:Id.Lit_Chars val:'\tcreate_pack no-dups.pack 1 &&\n' span_id:164) (Token id:Id.Lit_Chars val:'\tgit index-pack --stdin <no-dups.pack\n' span_id:165)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'index-pack will allow duplicate objects by default'
            span_id: 172
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:176) 
          (Token id:Id.Lit_Chars val:'\tclear_packs &&\n' span_id:177) (Token id:Id.Lit_Chars val:'\tcreate_pack dups.pack 100 &&\n' span_id:178) 
          (Token id:Id.Lit_Chars val:'\tgit index-pack --stdin <dups.pack\n' span_id:179)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'create batch-check test vectors' span_id:186))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:190) 
          (Token id:Id.Lit_Chars val:'\tcat >input <<-EOF &&\n' span_id:191) (Token id:Id.Lit_Chars val:'\t$LO_SHA1\n' span_id:192) 
          (Token id:Id.Lit_Chars val:'\t$HI_SHA1\n' span_id:193) (Token id:Id.Lit_Chars val:'\t$MISSING_SHA1\n' span_id:194) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:195) (Token id:Id.Lit_Chars val:'\tcat >expect <<-EOF\n' span_id:196) 
          (Token id:Id.Lit_Chars val:'\t$LO_SHA1 blob 2\n' span_id:197) (Token id:Id.Lit_Chars val:'\t$HI_SHA1 blob 0\n' span_id:198) 
          (Token id:Id.Lit_Chars val:'\t$MISSING_SHA1 missing\n' span_id:199) (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:200)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'lookup in duplicated pack (binary search)' span_id:207))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:211) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cat-file --batch-check <input >actual &&\n'
            span_id: 212
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:213)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'lookup in duplicated pack (GIT_USE_LOOKUP)' span_id:220))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:224) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:225) (Token id:Id.Lit_Chars val:'\t\tGIT_USE_LOOKUP=1 &&\n' span_id:226) 
          (Token id:Id.Lit_Chars val:'\t\texport GIT_USE_LOOKUP &&\n' span_id:227) (Token id:Id.Lit_Chars val:'\t\tgit cat-file --batch-check <input >actual\n' span_id:228) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:229) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:230)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'index-pack can reject packs with duplicates' span_id:237))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:241) 
          (Token id:Id.Lit_Chars val:'\tclear_packs &&\n' span_id:242) (Token id:Id.Lit_Chars val:'\tcreate_pack dups.pack 2 &&\n' span_id:243) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_must_fail git index-pack --strict --stdin <dups.pack &&\n'
            span_id: 244
          ) (Token id:Id.Lit_Chars val:'\ttest_expect_code 1 git cat-file -e $LO_SHA1\n' span_id:245)
        )
      }
    )
    (C {(test_done)})
  ]
)