(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)}) ] )