(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:'git pack-object\n' span_id:15) 
                (Token id:Id.Lit_Chars val:'\n' span_id:16)
              )
            }
          spids: [13]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (command.ShAssignment
      pairs: [
        (assign_pair
          lhs: (sh_lhs_expr.Name name:TRASH)
          op: assign_op.Equal
          rhs: 
            {
              (command_sub
                left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:25)
                command_list: (command.CommandList children:[(C {(pwd)})])
              )
            }
          spids: [24]
        )
      ]
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:setup span_id:35))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'rm -f .git/index* &&\n' span_id:41) 
          (Token
            id: Id.Lit_Chars
            val: '     perl -e "print \\"a\\" x 4096;" > a &&\n'
            span_id: 42
          ) (Token id:Id.Lit_Chars val:'     perl -e "print \\"b\\" x 4096;" > b &&\n' span_id:43) 
          (Token
            id: Id.Lit_Chars
            val: '     perl -e "print \\"c\\" x 4096;" > c &&\n'
            span_id: 44
          ) (Token id:Id.Lit_Chars val:'     test-genrandom "seed a" 2097152 > a_big &&\n' span_id:45) 
          (Token
            id: Id.Lit_Chars
            val: '     test-genrandom "seed b" 2097152 > b_big &&\n'
            span_id: 46
          ) (Token id:Id.Lit_Chars val:'     git update-index --add a a_big b b_big c &&\n' span_id:47) 
          (Token
            id: Id.Lit_Chars
            val: '     cat c >d && echo foo >>d && git update-index --add d &&\n'
            span_id: 48
          ) (Token id:Id.Lit_Chars val:'     tree=$(git write-tree) &&\n' span_id:49) 
          (Token
            id: Id.Lit_Chars
            val: '     commit=$(git commit-tree $tree </dev/null) && {\n'
            span_id: 50
          ) (Token id:Id.Lit_Chars val:'\t echo $tree &&\n' span_id:51) 
          (Token id:Id.Lit_Chars val:'\t echo $commit &&\n' span_id:52) 
          (Token
            id: Id.Lit_Chars
            val: '\t git ls-tree $tree | sed -e "s/.* \\\\([0-9a-f]*\\\\)\t.*/\\\\1/"\n'
            span_id: 53
          ) (Token id:Id.Lit_Chars val:'     } >obj-list && {\n' span_id:54) 
          (Token id:Id.Lit_Chars val:'\t git diff-tree --root -p $commit &&\n' span_id:55) (Token id:Id.Lit_Chars val:'\t while read object\n' span_id:56) 
          (Token id:Id.Lit_Chars val:'\t do\n' span_id:57) (Token id:Id.Lit_Chars val:'\t    t=$(git cat-file -t $object) &&\n' span_id:58) 
          (Token
            id: Id.Lit_Chars
            val: '\t    git cat-file $t $object || return 1\n'
            span_id: 59
          ) (Token id:Id.Lit_Chars val:'\t done <obj-list\n' span_id:60) 
          (Token id:Id.Lit_Chars val:'     } >expect' span_id:61)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'pack without delta' span_id:70))} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'packname_1=$(git pack-objects --window=0 test-1 <obj-list)'
            span_id: 76
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'pack-objects with bogus arguments' span_id:85))} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'test_must_fail git pack-objects --window=0 test-1 blah blah <obj-list'
            span_id: 91
          )
        )
      }
    )
    (C {(rm)} {(-fr)} {(.git2)})
    (C {(mkdir)} {(.git2)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'unpack without delta' span_id:111))} 
      {
        (DQ ('GIT_OBJECT_DIRECTORY=.git2/objects &&\n') ('     export GIT_OBJECT_DIRECTORY &&\n') 
          ('     git init &&\n') ('     git unpack-objects -n <test-1-') (${ Id.VSub_Name packname_1) ('.pack &&\n') 
          ('     git unpack-objects <test-1-') (${ Id.VSub_Name packname_1) (.pack)
        )
      }
    )
    (C {(unset)} {(GIT_OBJECT_DIRECTORY)})
    (C {(cd)} {(DQ ($ Id.VSub_DollarName '$TRASH') (/.git2))})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'check unpack without delta' span_id:150))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'(cd ../.git && find objects -type f -print) |\n' span_id:156) 
          (Token id:Id.Lit_Chars val:'     while read path\n' span_id:157) (Token id:Id.Lit_Chars val:'     do\n' span_id:158) 
          (Token id:Id.Lit_Chars val:'         cmp $path ../.git/$path || {\n' span_id:159) (Token id:Id.Lit_Chars val:'\t     echo $path differs.\n' span_id:160) 
          (Token id:Id.Lit_Chars val:'\t     return 1\n' span_id:161) (Token id:Id.Lit_Chars val:'\t }\n' span_id:162) (Token id:Id.Lit_Chars val:'     done' span_id:163)
        )
      }
    )
    (C {(cd)} {(DQ ($ Id.VSub_DollarName '$TRASH'))})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'pack with REF_DELTA' span_id:178))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'pwd &&\n' span_id:184) 
          (Token
            id: Id.Lit_Chars
            val: '     packname_2=$(git pack-objects test-2 <obj-list)'
            span_id: 185
          )
        )
      }
    )
    (C {(rm)} {(-fr)} {(.git2)})
    (C {(mkdir)} {(.git2)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'unpack with REF_DELTA' span_id:205))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'GIT_OBJECT_DIRECTORY=.git2/objects &&\n' span_id:211) 
          (Token id:Id.Lit_Chars val:'     export GIT_OBJECT_DIRECTORY &&\n' span_id:212) (Token id:Id.Lit_Chars val:'     git init &&\n' span_id:213) 
          (Token
            id: Id.Lit_Chars
            val: '     git unpack-objects -n <test-2-${packname_2}.pack &&\n'
            span_id: 214
          ) (Token id:Id.Lit_Chars val:'     git unpack-objects <test-2-${packname_2}.pack' span_id:215)
        )
      }
    )
    (C {(unset)} {(GIT_OBJECT_DIRECTORY)})
    (C {(cd)} {(DQ ($ Id.VSub_DollarName '$TRASH') (/.git2))})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'check unpack with REF_DELTA' span_id:235))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'(cd ../.git && find objects -type f -print) |\n' span_id:241) 
          (Token id:Id.Lit_Chars val:'     while read path\n' span_id:242) (Token id:Id.Lit_Chars val:'     do\n' span_id:243) 
          (Token id:Id.Lit_Chars val:'         cmp $path ../.git/$path || {\n' span_id:244) (Token id:Id.Lit_Chars val:'\t     echo $path differs.\n' span_id:245) 
          (Token id:Id.Lit_Chars val:'\t     return 1\n' span_id:246) (Token id:Id.Lit_Chars val:'\t }\n' span_id:247) (Token id:Id.Lit_Chars val:'     done' span_id:248)
        )
      }
    )
    (C {(cd)} {(DQ ($ Id.VSub_DollarName '$TRASH'))})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'pack with OFS_DELTA' span_id:263))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'pwd &&\n' span_id:269) 
          (Token
            id: Id.Lit_Chars
            val: '     packname_3=$(git pack-objects --delta-base-offset test-3 <obj-list)'
            span_id: 270
          )
        )
      }
    )
    (C {(rm)} {(-fr)} {(.git2)})
    (C {(mkdir)} {(.git2)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'unpack with OFS_DELTA' span_id:290))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'GIT_OBJECT_DIRECTORY=.git2/objects &&\n' span_id:296) 
          (Token id:Id.Lit_Chars val:'     export GIT_OBJECT_DIRECTORY &&\n' span_id:297) (Token id:Id.Lit_Chars val:'     git init &&\n' span_id:298) 
          (Token
            id: Id.Lit_Chars
            val: '     git unpack-objects -n <test-3-${packname_3}.pack &&\n'
            span_id: 299
          ) (Token id:Id.Lit_Chars val:'     git unpack-objects <test-3-${packname_3}.pack' span_id:300)
        )
      }
    )
    (C {(unset)} {(GIT_OBJECT_DIRECTORY)})
    (C {(cd)} {(DQ ($ Id.VSub_DollarName '$TRASH') (/.git2))})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'check unpack with OFS_DELTA' span_id:320))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'(cd ../.git && find objects -type f -print) |\n' span_id:326) 
          (Token id:Id.Lit_Chars val:'     while read path\n' span_id:327) (Token id:Id.Lit_Chars val:'     do\n' span_id:328) 
          (Token id:Id.Lit_Chars val:'         cmp $path ../.git/$path || {\n' span_id:329) (Token id:Id.Lit_Chars val:'\t     echo $path differs.\n' span_id:330) 
          (Token id:Id.Lit_Chars val:'\t     return 1\n' span_id:331) (Token id:Id.Lit_Chars val:'\t }\n' span_id:332) (Token id:Id.Lit_Chars val:'     done' span_id:333)
        )
      }
    )
    (C {(cd)} {(DQ ($ Id.VSub_DollarName '$TRASH'))})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'compare delta flavors' span_id:346))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:350) 
          (Token id:Id.Lit_Chars val:'\tperl -e ' span_id:351)
        ) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:"\\'" span_id:353)) 
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:355) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tdefined($_ = -s $_) or die for @ARGV;\n'
            span_id: 356
          ) (Token id:Id.Lit_Chars val:'\t\texit 1 if $ARGV[0] <= $ARGV[1];\n' span_id:357) 
          (Token id:Id.Lit_Chars val:'\t' span_id:358)
        ) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:"\\'" span_id:360)) 
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: ' test-2-$packname_2.pack test-3-$packname_3.pack\n'
            span_id: 362
          )
        )
      }
    )
    (C {(rm)} {(-fr)} {(.git2)})
    (C {(mkdir)} {(.git2)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'use packed objects' span_id:382))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'GIT_OBJECT_DIRECTORY=.git2/objects &&\n' span_id:388) 
          (Token id:Id.Lit_Chars val:'     export GIT_OBJECT_DIRECTORY &&\n' span_id:389) (Token id:Id.Lit_Chars val:'     git init &&\n' span_id:390) 
          (Token
            id: Id.Lit_Chars
            val: 
'     cp test-1-${packname_1}.pack test-1-${packname_1}.idx .git2/objects/pack && {\n'
            span_id: 391
          ) (Token id:Id.Lit_Chars val:'\t git diff-tree --root -p $commit &&\n' span_id:392) 
          (Token id:Id.Lit_Chars val:'\t while read object\n' span_id:393) (Token id:Id.Lit_Chars val:'\t do\n' span_id:394) 
          (Token id:Id.Lit_Chars val:'\t    t=$(git cat-file -t $object) &&\n' span_id:395) (Token id:Id.Lit_Chars val:'\t    git cat-file $t $object || return 1\n' span_id:396) 
          (Token id:Id.Lit_Chars val:'\t done <obj-list\n' span_id:397) (Token id:Id.Lit_Chars val:'    } >current &&\n' span_id:398) 
          (Token id:Id.Lit_Chars val:'    cmp expect current' span_id:399)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'use packed deltified (REF_DELTA) objects' span_id:408))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'GIT_OBJECT_DIRECTORY=.git2/objects &&\n' span_id:414) 
          (Token id:Id.Lit_Chars val:'     export GIT_OBJECT_DIRECTORY &&\n' span_id:415) (Token id:Id.Lit_Chars val:'     rm -f .git2/objects/pack/test-* &&\n' span_id:416) 
          (Token
            id: Id.Lit_Chars
            val: 
'     cp test-2-${packname_2}.pack test-2-${packname_2}.idx .git2/objects/pack && {\n'
            span_id: 417
          ) (Token id:Id.Lit_Chars val:'\t git diff-tree --root -p $commit &&\n' span_id:418) 
          (Token id:Id.Lit_Chars val:'\t while read object\n' span_id:419) (Token id:Id.Lit_Chars val:'\t do\n' span_id:420) 
          (Token id:Id.Lit_Chars val:'\t    t=$(git cat-file -t $object) &&\n' span_id:421) (Token id:Id.Lit_Chars val:'\t    git cat-file $t $object || return 1\n' span_id:422) 
          (Token id:Id.Lit_Chars val:'\t done <obj-list\n' span_id:423) (Token id:Id.Lit_Chars val:'    } >current &&\n' span_id:424) 
          (Token id:Id.Lit_Chars val:'    cmp expect current' span_id:425)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'use packed deltified (OFS_DELTA) objects' span_id:434))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'GIT_OBJECT_DIRECTORY=.git2/objects &&\n' span_id:440) 
          (Token id:Id.Lit_Chars val:'     export GIT_OBJECT_DIRECTORY &&\n' span_id:441) (Token id:Id.Lit_Chars val:'     rm -f .git2/objects/pack/test-* &&\n' span_id:442) 
          (Token
            id: Id.Lit_Chars
            val: 
'     cp test-3-${packname_3}.pack test-3-${packname_3}.idx .git2/objects/pack && {\n'
            span_id: 443
          ) (Token id:Id.Lit_Chars val:'\t git diff-tree --root -p $commit &&\n' span_id:444) 
          (Token id:Id.Lit_Chars val:'\t while read object\n' span_id:445) (Token id:Id.Lit_Chars val:'\t do\n' span_id:446) 
          (Token id:Id.Lit_Chars val:'\t    t=$(git cat-file -t $object) &&\n' span_id:447) (Token id:Id.Lit_Chars val:'\t    git cat-file $t $object || return 1\n' span_id:448) 
          (Token id:Id.Lit_Chars val:'\t done <obj-list\n' span_id:449) (Token id:Id.Lit_Chars val:'    } >current &&\n' span_id:450) 
          (Token id:Id.Lit_Chars val:'    cmp expect current' span_id:451)
        )
      }
    )
    (C {(unset)} {(GIT_OBJECT_DIRECTORY)})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'survive missing objects/pack directory' span_id:463))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:467) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:468) (Token id:Id.Lit_Chars val:'\t\trm -fr missing-pack &&\n' span_id:469) 
          (Token id:Id.Lit_Chars val:'\t\tmkdir missing-pack &&\n' span_id:470) (Token id:Id.Lit_Chars val:'\t\tcd missing-pack &&\n' span_id:471) 
          (Token id:Id.Lit_Chars val:'\t\tgit init &&\n' span_id:472) (Token id:Id.Lit_Chars val:'\t\tGOP=.git/objects/pack\n' span_id:473) 
          (Token id:Id.Lit_Chars val:'\t\trm -fr $GOP &&\n' span_id:474) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit index-pack --stdin --keep=test <../test-3-${packname_3}.pack &&\n'
            span_id: 475
          ) (Token id:Id.Lit_Chars val:'\t\ttest -f $GOP/pack-${packname_3}.pack &&\n' span_id:476) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tcmp $GOP/pack-${packname_3}.pack ../test-3-${packname_3}.pack &&\n'
            span_id: 477
          ) (Token id:Id.Lit_Chars val:'\t\ttest -f $GOP/pack-${packname_3}.idx &&\n' span_id:478) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tcmp $GOP/pack-${packname_3}.idx ../test-3-${packname_3}.idx &&\n'
            span_id: 479
          ) (Token id:Id.Lit_Chars val:'\t\ttest -f $GOP/pack-${packname_3}.keep\n' span_id:480) 
          (Token id:Id.Lit_Chars val:'\t)\n' span_id:481)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'verify pack' span_id:490))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'git verify-pack\ttest-1-${packname_1}.idx \\\n' span_id:496) 
          (Token id:Id.Lit_Chars val:'\t\t\ttest-2-${packname_2}.idx \\\n' span_id:497) (Token id:Id.Lit_Chars val:'\t\t\ttest-3-${packname_3}.idx' span_id:498)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'verify pack -v' span_id:507))} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'git verify-pack -v\ttest-1-${packname_1}.idx \\\n'
            span_id: 513
          ) (Token id:Id.Lit_Chars val:'\t\t\ttest-2-${packname_2}.idx \\\n' span_id:514) 
          (Token id:Id.Lit_Chars val:'\t\t\ttest-3-${packname_3}.idx' span_id:515)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'verify-pack catches mismatched .idx and .pack files'
            span_id: 524
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'cat test-1-${packname_1}.idx >test-3.idx &&\n' span_id:530) 
          (Token
            id: Id.Lit_Chars
            val: '     cat test-2-${packname_2}.pack >test-3.pack &&\n'
            span_id: 531
          ) (Token id:Id.Lit_Chars val:'     if git verify-pack test-3.idx\n' span_id:532) 
          (Token id:Id.Lit_Chars val:'     then false\n' span_id:533) (Token id:Id.Lit_Chars val:'     else :;\n' span_id:534) 
          (Token id:Id.Lit_Chars val:'     fi' span_id:535)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'verify-pack catches a corrupted pack signature' span_id:544))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'cat test-1-${packname_1}.pack >test-3.pack &&\n' span_id:550) 
          (Token
            id: Id.Lit_Chars
            val: '     echo | dd of=test-3.pack count=1 bs=1 conv=notrunc seek=2 &&\n'
            span_id: 551
          ) (Token id:Id.Lit_Chars val:'     if git verify-pack test-3.idx\n' span_id:552) 
          (Token id:Id.Lit_Chars val:'     then false\n' span_id:553) (Token id:Id.Lit_Chars val:'     else :;\n' span_id:554) 
          (Token id:Id.Lit_Chars val:'     fi' span_id:555)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'verify-pack catches a corrupted pack version' span_id:564))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'cat test-1-${packname_1}.pack >test-3.pack &&\n' span_id:570) 
          (Token
            id: Id.Lit_Chars
            val: '     echo | dd of=test-3.pack count=1 bs=1 conv=notrunc seek=7 &&\n'
            span_id: 571
          ) (Token id:Id.Lit_Chars val:'     if git verify-pack test-3.idx\n' span_id:572) 
          (Token id:Id.Lit_Chars val:'     then false\n' span_id:573) (Token id:Id.Lit_Chars val:'     else :;\n' span_id:574) 
          (Token id:Id.Lit_Chars val:'     fi' span_id:575)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'verify-pack catches a corrupted type/size of the 1st packed object data'
            span_id: 584
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'cat test-1-${packname_1}.pack >test-3.pack &&\n' span_id:590) 
          (Token
            id: Id.Lit_Chars
            val: '     echo | dd of=test-3.pack count=1 bs=1 conv=notrunc seek=12 &&\n'
            span_id: 591
          ) (Token id:Id.Lit_Chars val:'     if git verify-pack test-3.idx\n' span_id:592) 
          (Token id:Id.Lit_Chars val:'     then false\n' span_id:593) (Token id:Id.Lit_Chars val:'     else :;\n' span_id:594) 
          (Token id:Id.Lit_Chars val:'     fi' span_id:595)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'verify-pack catches a corrupted sum of the index file itself'
            span_id: 604
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'l=$(wc -c <test-3.idx) &&\n' span_id:610) 
          (Token id:Id.Lit_Chars val:'     l=$(expr $l - 20) &&\n' span_id:611) (Token id:Id.Lit_Chars val:'     cat test-1-${packname_1}.pack >test-3.pack &&\n' span_id:612) 
          (Token
            id: Id.Lit_Chars
            val: '     printf "%20s" "" | dd of=test-3.idx count=20 bs=1 conv=notrunc seek=$l &&\n'
            span_id: 613
          ) (Token id:Id.Lit_Chars val:'     if git verify-pack test-3.pack\n' span_id:614) 
          (Token id:Id.Lit_Chars val:'     then false\n' span_id:615) (Token id:Id.Lit_Chars val:'     else :;\n' span_id:616) 
          (Token id:Id.Lit_Chars val:'     fi' span_id:617)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'build pack index for an existing pack' span_id:626))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'cat test-1-${packname_1}.pack >test-3.pack &&\n' span_id:632) 
          (Token
            id: Id.Lit_Chars
            val: '     git index-pack -o tmp.idx test-3.pack &&\n'
            span_id: 633
          ) (Token id:Id.Lit_Chars val:'     cmp tmp.idx test-1-${packname_1}.idx &&\n' span_id:634) 
          (Token id:Id.Lit_Chars val:'\n' span_id:635) (Token id:Id.Lit_Chars val:'     git index-pack test-3.pack &&\n' span_id:636) 
          (Token
            id: Id.Lit_Chars
            val: '     cmp test-3.idx test-1-${packname_1}.idx &&\n'
            span_id: 637
          ) (Token id:Id.Lit_Chars val:'\n' span_id:638) 
          (Token
            id: Id.Lit_Chars
            val: '     cat test-2-${packname_2}.pack >test-3.pack &&\n'
            span_id: 639
          ) 
          (Token
            id: Id.Lit_Chars
            val: '     git index-pack -o tmp.idx test-2-${packname_2}.pack &&\n'
            span_id: 640
          ) (Token id:Id.Lit_Chars val:'     cmp tmp.idx test-2-${packname_2}.idx &&\n' span_id:641) 
          (Token id:Id.Lit_Chars val:'\n' span_id:642) (Token id:Id.Lit_Chars val:'     git index-pack test-3.pack &&\n' span_id:643) 
          (Token
            id: Id.Lit_Chars
            val: '     cmp test-3.idx test-2-${packname_2}.idx &&\n'
            span_id: 644
          ) (Token id:Id.Lit_Chars val:'\n' span_id:645) 
          (Token
            id: Id.Lit_Chars
            val: '     cat test-3-${packname_3}.pack >test-3.pack &&\n'
            span_id: 646
          ) 
          (Token
            id: Id.Lit_Chars
            val: '     git index-pack -o tmp.idx test-3-${packname_3}.pack &&\n'
            span_id: 647
          ) (Token id:Id.Lit_Chars val:'     cmp tmp.idx test-3-${packname_3}.idx &&\n' span_id:648) 
          (Token id:Id.Lit_Chars val:'\n' span_id:649) (Token id:Id.Lit_Chars val:'     git index-pack test-3.pack &&\n' span_id:650) 
          (Token
            id: Id.Lit_Chars
            val: '     cmp test-3.idx test-3-${packname_3}.idx &&\n'
            span_id: 651
          ) (Token id:Id.Lit_Chars val:'\n' span_id:652) 
          (Token
            id: Id.Lit_Chars
            val: '     cat test-1-${packname_1}.pack >test-4.pack &&\n'
            span_id: 653
          ) (Token id:Id.Lit_Chars val:'     rm -f test-4.keep &&\n' span_id:654) 
          (Token
            id: Id.Lit_Chars
            val: '     git index-pack --keep=why test-4.pack &&\n'
            span_id: 655
          ) (Token id:Id.Lit_Chars val:'     cmp test-1-${packname_1}.idx test-4.idx &&\n' span_id:656) 
          (Token id:Id.Lit_Chars val:'     test -f test-4.keep &&\n' span_id:657) (Token id:Id.Lit_Chars val:'\n' span_id:658) (Token id:Id.Lit_Chars val:'     :' span_id:659)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'unpacking with --strict' span_id:666))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:670) (Token id:Id.Lit_Chars val:'\n' span_id:671) 
          (Token id:Id.Lit_Chars val:'\tfor j in a b c d e f g\n' span_id:672) (Token id:Id.Lit_Chars val:'\tdo\n' span_id:673) 
          (Token id:Id.Lit_Chars val:'\t\tfor i in 0 1 2 3 4 5 6 7 8 9\n' span_id:674) (Token id:Id.Lit_Chars val:'\t\tdo\n' span_id:675) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t\to=$(echo $j$i | git hash-object -w --stdin) &&\n'
            span_id: 676
          ) (Token id:Id.Lit_Chars val:'\t\t\techo "100644 $o\t0 $j$i"\n' span_id:677) 
          (Token id:Id.Lit_Chars val:'\t\tdone\n' span_id:678) (Token id:Id.Lit_Chars val:'\tdone >LIST &&\n' span_id:679) 
          (Token id:Id.Lit_Chars val:'\trm -f .git/index &&\n' span_id:680) (Token id:Id.Lit_Chars val:'\tgit update-index --index-info <LIST &&\n' span_id:681) 
          (Token id:Id.Lit_Chars val:'\tLIST=$(git write-tree) &&\n' span_id:682) (Token id:Id.Lit_Chars val:'\trm -f .git/index &&\n' span_id:683) 
          (Token
            id: Id.Lit_Chars
            val: '\thead -n 10 LIST | git update-index --index-info &&\n'
            span_id: 684
          ) (Token id:Id.Lit_Chars val:'\tLI=$(git write-tree) &&\n' span_id:685) 
          (Token id:Id.Lit_Chars val:'\trm -f .git/index &&\n' span_id:686) (Token id:Id.Lit_Chars val:'\ttail -n 10 LIST | git update-index --index-info &&\n' span_id:687) 
          (Token id:Id.Lit_Chars val:'\tST=$(git write-tree) &&\n' span_id:688) 
          (Token
            id: Id.Lit_Chars
            val: '\tPACK5=$( git rev-list --objects "$LIST" "$LI" "$ST" | \\\n'
            span_id: 689
          ) (Token id:Id.Lit_Chars val:'\t\tgit pack-objects test-5 ) &&\n' span_id:690) 
          (Token id:Id.Lit_Chars val:'\tPACK6=$( (\n' span_id:691) (Token id:Id.Lit_Chars val:'\t\t\techo "$LIST"\n' span_id:692) 
          (Token id:Id.Lit_Chars val:'\t\t\techo "$LI"\n' span_id:693) (Token id:Id.Lit_Chars val:'\t\t\techo "$ST"\n' span_id:694) 
          (Token id:Id.Lit_Chars val:'\t\t ) | git pack-objects test-6 ) &&\n' span_id:695) (Token id:Id.Lit_Chars val:'\ttest_create_repo test-5 &&\n' span_id:696) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:697) (Token id:Id.Lit_Chars val:'\t\tcd test-5 &&\n' span_id:698) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit unpack-objects --strict <../test-5-$PACK5.pack &&\n'
            span_id: 699
          ) (Token id:Id.Lit_Chars val:'\t\tgit ls-tree -r $LIST &&\n' span_id:700) 
          (Token id:Id.Lit_Chars val:'\t\tgit ls-tree -r $LI &&\n' span_id:701) (Token id:Id.Lit_Chars val:'\t\tgit ls-tree -r $ST\n' span_id:702) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:703) (Token id:Id.Lit_Chars val:'\ttest_create_repo test-6 &&\n' span_id:704) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:705) (Token id:Id.Lit_Chars val:'\t\t# tree-only into empty repo -- many unreachables\n' span_id:706) 
          (Token id:Id.Lit_Chars val:'\t\tcd test-6 &&\n' span_id:707) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_must_fail git unpack-objects --strict <../test-6-$PACK6.pack\n'
            span_id: 708
          ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:709) (Token id:Id.Lit_Chars val:'\t(\n' span_id:710) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# already populated -- no unreachables\n'
            span_id: 711
          ) (Token id:Id.Lit_Chars val:'\t\tcd test-5 &&\n' span_id:712) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit unpack-objects --strict <../test-6-$PACK6.pack\n'
            span_id: 713
          ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:714)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'index-pack with --strict' span_id:721))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:725) (Token id:Id.Lit_Chars val:'\n' span_id:726) 
          (Token id:Id.Lit_Chars val:'\tfor j in a b c d e f g\n' span_id:727) (Token id:Id.Lit_Chars val:'\tdo\n' span_id:728) 
          (Token id:Id.Lit_Chars val:'\t\tfor i in 0 1 2 3 4 5 6 7 8 9\n' span_id:729) (Token id:Id.Lit_Chars val:'\t\tdo\n' span_id:730) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t\to=$(echo $j$i | git hash-object -w --stdin) &&\n'
            span_id: 731
          ) (Token id:Id.Lit_Chars val:'\t\t\techo "100644 $o\t0 $j$i"\n' span_id:732) 
          (Token id:Id.Lit_Chars val:'\t\tdone\n' span_id:733) (Token id:Id.Lit_Chars val:'\tdone >LIST &&\n' span_id:734) 
          (Token id:Id.Lit_Chars val:'\trm -f .git/index &&\n' span_id:735) (Token id:Id.Lit_Chars val:'\tgit update-index --index-info <LIST &&\n' span_id:736) 
          (Token id:Id.Lit_Chars val:'\tLIST=$(git write-tree) &&\n' span_id:737) (Token id:Id.Lit_Chars val:'\trm -f .git/index &&\n' span_id:738) 
          (Token
            id: Id.Lit_Chars
            val: '\thead -n 10 LIST | git update-index --index-info &&\n'
            span_id: 739
          ) (Token id:Id.Lit_Chars val:'\tLI=$(git write-tree) &&\n' span_id:740) 
          (Token id:Id.Lit_Chars val:'\trm -f .git/index &&\n' span_id:741) (Token id:Id.Lit_Chars val:'\ttail -n 10 LIST | git update-index --index-info &&\n' span_id:742) 
          (Token id:Id.Lit_Chars val:'\tST=$(git write-tree) &&\n' span_id:743) 
          (Token
            id: Id.Lit_Chars
            val: '\tPACK5=$( git rev-list --objects "$LIST" "$LI" "$ST" | \\\n'
            span_id: 744
          ) (Token id:Id.Lit_Chars val:'\t\tgit pack-objects test-5 ) &&\n' span_id:745) 
          (Token id:Id.Lit_Chars val:'\tPACK6=$( (\n' span_id:746) (Token id:Id.Lit_Chars val:'\t\t\techo "$LIST"\n' span_id:747) 
          (Token id:Id.Lit_Chars val:'\t\t\techo "$LI"\n' span_id:748) (Token id:Id.Lit_Chars val:'\t\t\techo "$ST"\n' span_id:749) 
          (Token id:Id.Lit_Chars val:'\t\t ) | git pack-objects test-6 ) &&\n' span_id:750) (Token id:Id.Lit_Chars val:'\ttest_create_repo test-7 &&\n' span_id:751) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:752) (Token id:Id.Lit_Chars val:'\t\tcd test-7 &&\n' span_id:753) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit index-pack --strict --stdin <../test-5-$PACK5.pack &&\n'
            span_id: 754
          ) (Token id:Id.Lit_Chars val:'\t\tgit ls-tree -r $LIST &&\n' span_id:755) 
          (Token id:Id.Lit_Chars val:'\t\tgit ls-tree -r $LI &&\n' span_id:756) (Token id:Id.Lit_Chars val:'\t\tgit ls-tree -r $ST\n' span_id:757) 
          (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:758) (Token id:Id.Lit_Chars val:'\ttest_create_repo test-8 &&\n' span_id:759) 
          (Token id:Id.Lit_Chars val:'\t(\n' span_id:760) (Token id:Id.Lit_Chars val:'\t\t# tree-only into empty repo -- many unreachables\n' span_id:761) 
          (Token id:Id.Lit_Chars val:'\t\tcd test-8 &&\n' span_id:762) 
          (Token
            id: Id.Lit_Chars
            val: '\t\ttest_must_fail git index-pack --strict --stdin <../test-6-$PACK6.pack\n'
            span_id: 763
          ) (Token id:Id.Lit_Chars val:'\t) &&\n' span_id:764) (Token id:Id.Lit_Chars val:'\t(\n' span_id:765) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t# already populated -- no unreachables\n'
            span_id: 766
          ) (Token id:Id.Lit_Chars val:'\t\tcd test-7 &&\n' span_id:767) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit index-pack --strict --stdin <../test-6-$PACK6.pack\n'
            span_id: 768
          ) (Token id:Id.Lit_Chars val:'\t)\n' span_id:769)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'honor pack.packSizeLimit' span_id:776))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:780) 
          (Token id:Id.Lit_Chars val:'\tgit config pack.packSizeLimit 3m &&\n' span_id:781) (Token id:Id.Lit_Chars val:'\tpackname_10=$(git pack-objects test-10 <obj-list) &&\n' span_id:782) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest 2 = $(ls test-10-*.pack | wc -l)\n'
            span_id: 783
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'verify resulting packs' span_id:790))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:794) 
          (Token id:Id.Lit_Chars val:'\tgit verify-pack test-10-*.pack\n' span_id:795)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'tolerate packsizelimit smaller than biggest object'
            span_id: 802
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:806) 
          (Token id:Id.Lit_Chars val:'\tgit config pack.packSizeLimit 1 &&\n' span_id:807) (Token id:Id.Lit_Chars val:'\tpackname_11=$(git pack-objects test-11 <obj-list) &&\n' span_id:808) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest 5 = $(ls test-11-*.pack | wc -l)\n'
            span_id: 809
          )
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'verify resulting packs' span_id:816))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:820) 
          (Token id:Id.Lit_Chars val:'\tgit verify-pack test-11-*.pack\n' span_id:821)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'fake a SHA1 hash collision' span_id:849))} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'test -f\t.git/objects/c8/2de19312b6c3695c0c18f70709a6c535682a67 &&\n'
            span_id: 855
          ) 
          (Token
            id: Id.Lit_Chars
            val: '     cp -f\t.git/objects/9d/235ed07cd19811a6ceb342de82f190e49c9f68 \\\n'
            span_id: 856
          ) (Token id:Id.Lit_Chars val:'\t\t.git/objects/c8/2de19312b6c3695c0c18f70709a6c535682a67' span_id:857)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'make sure index-pack detects the SHA1 collision' span_id:866))} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'test_must_fail git index-pack -o bad.idx test-3.pack 2>msg &&\n'
            span_id: 872
          ) (Token id:Id.Lit_Chars val:'     test_i18ngrep "SHA1 COLLISION FOUND" msg' span_id:873)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'make sure index-pack detects the SHA1 collision (large blobs)'
            span_id: 882
          )
        )
      } 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 
'test_must_fail git -c core.bigfilethreshold=1 index-pack -o bad.idx test-3.pack 2>msg &&\n'
            span_id: 888
          ) (Token id:Id.Lit_Chars val:'     test_i18ngrep "SHA1 COLLISION FOUND" msg' span_id:889)
        )
      }
    )
    (C {(test_done)})
  ]
)