(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <"handling of duplicate objects in incoming packfiles">)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(.)} {(DQ ($ VSub_Name "$TEST_DIRECTORY")) (/lib-pack.sh)})
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:LO_SHA1)
          op: Equal
          rhs: {(e68fe8129b546b101aee9510c5328e7f21ca1d18)}
          spids: [30]
        )
      ]
      spids: [30]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:HI_SHA1)
          op: Equal
          rhs: {(e69de29bb2d1d6434b8b29ae775ad8c2e48c5391)}
          spids: [33]
        )
      ]
      spids: [33]
    )
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:MISSING_SHA1)
          op: Equal
          rhs: {(SQ <e69d000000000000000000000000000000000000>)}
          spids: [49]
        )
      ]
      spids: [49]
    )
    (FuncDef
      name: create_pack
      body: 
        (BraceGroup
          children: [
            (AndOr
              children: [
                (SimpleCommand
                  words: [
                    {(pack_header)}
                    {
                      (DQ 
                        (ArithSubPart
                          anode: 
                            (ArithBinary
                              op_id: Arith_Star
                              left: (ArithWord w:{(Lit_Digits 2)})
                              right: (ArithWord w:{($ VSub_Number "$2")})
                            )
                          spids: [84 91]
                        )
                      )
                    }
                  ]
                  redirects: [
                    (Redir
                      op_id: Redir_Great
                      fd: -1
                      arg_word: {(DQ ($ VSub_Number "$1"))}
                      spids: [94]
                    )
                  ]
                )
                (AndOr
                  children: [
                    (ForEach
                      iter_name: i
                      iter_words: [
                        {
                          (CommandSubPart
                            command_list: 
                              (CommandList
                                children: [(C {(test_seq)} {(1)} {(DQ ($ VSub_Number "$2"))})]
                              )
                            left_token: <Left_CommandSub "$(">
                            spids: [108 116]
                          )
                        }
                      ]
                      do_arg_iter: False
                      body: 
                        (DoGroup
                          children: [
                            (AndOr
                              children: [
                                (C {(pack_obj)} {($ VSub_Name "$LO_SHA1")})
                                (C {(pack_obj)} {($ VSub_Name "$HI_SHA1")})
                              ]
                              op_id: Op_DAmp
                            )
                          ]
                          spids: [119 134]
                        )
                      redirects: [
                        (Redir
                          op_id: Redir_DGreat
                          fd: -1
                          arg_word: {(DQ ($ VSub_Number "$1"))}
                          spids: [136]
                        )
                      ]
                      spids: [107 117]
                    )
                    (C {(pack_trailer)} {(DQ ($ VSub_Number "$1"))})
                  ]
                  op_id: Op_DAmp
                )
              ]
              op_id: Op_DAmp
            )
          ]
          spids: [78]
        )
      spids: [73 77]
    )
    (C {(test_expect_success)} {(SQ <"pack with no duplicates">)} 
      {
        (SQ <"\n"> <"\tcreate_pack no-dups.pack 1 &&\n"> <"\tgit index-pack --stdin <no-dups.pack\n">)
      }
    )
    (C {(test_expect_success)} {(SQ <"index-pack will allow duplicate objects by default">)} 
      {
        (SQ <"\n"> <"\tclear_packs &&\n"> <"\tcreate_pack dups.pack 100 &&\n"> 
          <"\tgit index-pack --stdin <dups.pack\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"create batch-check test vectors">)} 
      {
        (SQ <"\n"> <"\tcat >input <<-EOF &&\n"> <"\t$LO_SHA1\n"> <"\t$HI_SHA1\n"> <"\t$MISSING_SHA1\n"> 
          <"\tEOF\n"> <"\tcat >expect <<-EOF\n"> <"\t$LO_SHA1 blob 2\n"> <"\t$HI_SHA1 blob 0\n"> <"\t$MISSING_SHA1 missing\n"> 
          <"\tEOF\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"lookup in duplicated pack (binary search)">)} 
      {
        (SQ <"\n"> <"\tgit cat-file --batch-check <input >actual &&\n"> <"\ttest_cmp expect actual\n">)
      }
    )
    (C {(test_expect_success)} {(SQ <"lookup in duplicated pack (GIT_USE_LOOKUP)">)} 
      {
        (SQ <"\n"> <"\t(\n"> <"\t\tGIT_USE_LOOKUP=1 &&\n"> <"\t\texport GIT_USE_LOOKUP &&\n"> 
          <"\t\tgit cat-file --batch-check <input >actual\n"> <"\t) &&\n"> <"\ttest_cmp expect actual\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"index-pack can reject packs with duplicates">)} 
      {
        (SQ <"\n"> <"\tclear_packs &&\n"> <"\tcreate_pack dups.pack 2 &&\n"> 
          <"\ttest_must_fail git index-pack --strict --stdin <dups.pack &&\n"> <"\ttest_expect_code 1 git cat-file -e $LO_SHA1\n">
        )
      }
    )
    (C {(test_done)})
  ]
)