(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 repack works correctly' span_id:6))}
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'objects in packs marked .keep are not repacked' span_id:18))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:22) 
          (Token id:Id.Lit_Chars val:'\techo content1 > file1 &&\n' span_id:23) (Token id:Id.Lit_Chars val:'\techo content2 > file2 &&\n' span_id:24) 
          (Token id:Id.Lit_Chars val:'\tgit add . &&\n' span_id:25) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:26) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m initial_commit &&\n' span_id:27) (Token id:Id.Lit_Chars val:'\t# Create two packs\n' span_id:28) 
          (Token
            id: Id.Lit_Chars
            val: '\t# The first pack will contain all of the objects except one\n'
            span_id: 29
          ) (Token id:Id.Lit_Chars val:'\tgit rev-list --objects --all | grep -v file2 |\n' span_id:30) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit pack-objects pack > /dev/null &&\n'
            span_id: 31
          ) (Token id:Id.Lit_Chars val:'\t# The second pack will contain the excluded object\n' span_id:32) 
          (Token
            id: Id.Lit_Chars
            val: '\tpacksha1=$(git rev-list --objects --all | grep file2 |\n'
            span_id: 33
          ) (Token id:Id.Lit_Chars val:'\t\tgit pack-objects pack) &&\n' span_id:34) 
          (Token id:Id.Lit_Chars val:'\t>pack-$packsha1.keep &&\n' span_id:35) 
          (Token
            id: Id.Lit_Chars
            val: '\tobjsha1=$(git verify-pack -v pack-$packsha1.idx | head -n 1 |\n'
            span_id: 36
          ) (Token id:Id.Lit_Chars val:'\t\tsed -e "s/^\\([0-9a-f]\\{40\\}\\).*/\\1/") &&\n' span_id:37) 
          (Token id:Id.Lit_Chars val:'\tmv pack-* .git/objects/pack/ &&\n' span_id:38) (Token id:Id.Lit_Chars val:'\tgit repack -A -d -l &&\n' span_id:39) 
          (Token id:Id.Lit_Chars val:'\tgit prune-packed &&\n' span_id:40) (Token id:Id.Lit_Chars val:'\tfor p in .git/objects/pack/*.idx; do\n' span_id:41) 
          (Token id:Id.Lit_Chars val:'\t\tidx=$(basename $p)\n' span_id:42) (Token id:Id.Lit_Chars val:'\t\ttest "pack-$packsha1.idx" = "$idx" && continue\n' span_id:43) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tif git verify-pack -v $p | egrep "^$objsha1"; then\n'
            span_id: 44
          ) (Token id:Id.Lit_Chars val:'\t\t\tfound_duplicate_object=1\n' span_id:45) 
          (Token id:Id.Lit_Chars val:'\t\t\techo "DUPLICATE OBJECT FOUND"\n' span_id:46) (Token id:Id.Lit_Chars val:'\t\t\tbreak\n' span_id:47) 
          (Token id:Id.Lit_Chars val:'\t\tfi\n' span_id:48) (Token id:Id.Lit_Chars val:'\tdone &&\n' span_id:49) 
          (Token id:Id.Lit_Chars val:'\ttest -z "$found_duplicate_object"\n' span_id:50)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'writing bitmaps via command-line can duplicate .keep objects'
            span_id: 57
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:61) 
          (Token
            id: Id.Lit_Chars
            val: '\t# build on $objsha1, $packsha1, and .keep state from previous\n'
            span_id: 62
          ) (Token id:Id.Lit_Chars val:'\tgit repack -Adbl &&\n' span_id:63) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "found_duplicate_object=" &&\n'
            span_id: 64
          ) (Token id:Id.Lit_Chars val:'\tfor p in .git/objects/pack/*.idx; do\n' span_id:65) 
          (Token id:Id.Lit_Chars val:'\t\tidx=$(basename $p)\n' span_id:66) (Token id:Id.Lit_Chars val:'\t\ttest "pack-$packsha1.idx" = "$idx" && continue\n' span_id:67) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tif git verify-pack -v $p | egrep "^$objsha1"; then\n'
            span_id: 68
          ) (Token id:Id.Lit_Chars val:'\t\t\tfound_duplicate_object=1\n' span_id:69) 
          (Token id:Id.Lit_Chars val:'\t\t\techo "DUPLICATE OBJECT FOUND"\n' span_id:70) (Token id:Id.Lit_Chars val:'\t\t\tbreak\n' span_id:71) 
          (Token id:Id.Lit_Chars val:'\t\tfi\n' span_id:72) (Token id:Id.Lit_Chars val:'\tdone &&\n' span_id:73) 
          (Token id:Id.Lit_Chars val:'\ttest "$found_duplicate_object" = 1\n' span_id:74)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'writing bitmaps via config can duplicate .keep objects'
            span_id: 81
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:85) 
          (Token
            id: Id.Lit_Chars
            val: '\t# build on $objsha1, $packsha1, and .keep state from previous\n'
            span_id: 86
          ) (Token id:Id.Lit_Chars val:'\tgit -c repack.writebitmaps=true repack -Adl &&\n' span_id:87) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "found_duplicate_object=" &&\n'
            span_id: 88
          ) (Token id:Id.Lit_Chars val:'\tfor p in .git/objects/pack/*.idx; do\n' span_id:89) 
          (Token id:Id.Lit_Chars val:'\t\tidx=$(basename $p)\n' span_id:90) (Token id:Id.Lit_Chars val:'\t\ttest "pack-$packsha1.idx" = "$idx" && continue\n' span_id:91) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tif git verify-pack -v $p | egrep "^$objsha1"; then\n'
            span_id: 92
          ) (Token id:Id.Lit_Chars val:'\t\t\tfound_duplicate_object=1\n' span_id:93) 
          (Token id:Id.Lit_Chars val:'\t\t\techo "DUPLICATE OBJECT FOUND"\n' span_id:94) (Token id:Id.Lit_Chars val:'\t\t\tbreak\n' span_id:95) 
          (Token id:Id.Lit_Chars val:'\t\tfi\n' span_id:96) (Token id:Id.Lit_Chars val:'\tdone &&\n' span_id:97) 
          (Token id:Id.Lit_Chars val:'\ttest "$found_duplicate_object" = 1\n' span_id:98)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'loose objects in alternate ODB are not repacked' span_id:105))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:109) 
          (Token id:Id.Lit_Chars val:'\tmkdir alt_objects &&\n' span_id:110) 
          (Token
            id: Id.Lit_Chars
            val: '\techo $(pwd)/alt_objects > .git/objects/info/alternates &&\n'
            span_id: 111
          ) (Token id:Id.Lit_Chars val:'\techo content3 > file3 &&\n' span_id:112) 
          (Token
            id: Id.Lit_Chars
            val: '\tobjsha1=$(GIT_OBJECT_DIRECTORY=alt_objects git hash-object -w file3) &&\n'
            span_id: 113
          ) (Token id:Id.Lit_Chars val:'\tgit add file3 &&\n' span_id:114) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:115) (Token id:Id.Lit_Chars val:'\tgit commit -m commit_file3 &&\n' span_id:116) 
          (Token id:Id.Lit_Chars val:'\tgit repack -a -d -l &&\n' span_id:117) (Token id:Id.Lit_Chars val:'\tgit prune-packed &&\n' span_id:118) 
          (Token
            id: Id.Lit_Chars
            val: '\tfor p in .git/objects/pack/*.idx; do\n'
            span_id: 119
          ) (Token id:Id.Lit_Chars val:'\t\tif git verify-pack -v $p | egrep "^$objsha1"; then\n' span_id:120) 
          (Token id:Id.Lit_Chars val:'\t\t\tfound_duplicate_object=1\n' span_id:121) (Token id:Id.Lit_Chars val:'\t\t\techo "DUPLICATE OBJECT FOUND"\n' span_id:122) 
          (Token id:Id.Lit_Chars val:'\t\t\tbreak\n' span_id:123) (Token id:Id.Lit_Chars val:'\t\tfi\n' span_id:124) 
          (Token id:Id.Lit_Chars val:'\tdone &&\n' span_id:125) (Token id:Id.Lit_Chars val:'\ttest -z "$found_duplicate_object"\n' span_id:126)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'packed obs in alt ODB are repacked even when local repo is packless'
            span_id: 133
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:137) 
          (Token id:Id.Lit_Chars val:'\tmkdir alt_objects/pack &&\n' span_id:138) (Token id:Id.Lit_Chars val:'\tmv .git/objects/pack/* alt_objects/pack &&\n' span_id:139) 
          (Token id:Id.Lit_Chars val:'\tgit repack -a &&\n' span_id:140) (Token id:Id.Lit_Chars val:'\tmyidx=$(ls -1 .git/objects/pack/*.idx) &&\n' span_id:141) 
          (Token id:Id.Lit_Chars val:'\ttest -f "$myidx" &&\n' span_id:142) (Token id:Id.Lit_Chars val:'\tfor p in alt_objects/pack/*.idx; do\n' span_id:143) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit verify-pack -v $p | sed -n -e "/^[0-9a-f]\\{40\\}/p"\n'
            span_id: 144
          ) (Token id:Id.Lit_Chars val:'\tdone | while read sha1 rest; do\n' span_id:145) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tif ! ( git verify-pack -v $myidx | grep "^$sha1" ); then\n'
            span_id: 146
          ) (Token id:Id.Lit_Chars val:'\t\t\techo "Missing object in local pack: $sha1"\n' span_id:147) 
          (Token id:Id.Lit_Chars val:'\t\t\treturn 1\n' span_id:148) (Token id:Id.Lit_Chars val:'\t\tfi\n' span_id:149) (Token id:Id.Lit_Chars val:'\tdone\n' span_id:150)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'packed obs in alt ODB are repacked when local repo has packs'
            span_id: 157
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:161) 
          (Token id:Id.Lit_Chars val:'\trm -f .git/objects/pack/* &&\n' span_id:162) (Token id:Id.Lit_Chars val:'\techo new_content >> file1 &&\n' span_id:163) 
          (Token id:Id.Lit_Chars val:'\tgit add file1 &&\n' span_id:164) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:165) 
          (Token id:Id.Lit_Chars val:'\tgit commit -m more_content &&\n' span_id:166) (Token id:Id.Lit_Chars val:'\tgit repack &&\n' span_id:167) 
          (Token id:Id.Lit_Chars val:'\tgit repack -a -d &&\n' span_id:168) (Token id:Id.Lit_Chars val:'\tmyidx=$(ls -1 .git/objects/pack/*.idx) &&\n' span_id:169) 
          (Token id:Id.Lit_Chars val:'\ttest -f "$myidx" &&\n' span_id:170) (Token id:Id.Lit_Chars val:'\tfor p in alt_objects/pack/*.idx; do\n' span_id:171) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit verify-pack -v $p | sed -n -e "/^[0-9a-f]\\{40\\}/p"\n'
            span_id: 172
          ) (Token id:Id.Lit_Chars val:'\tdone | while read sha1 rest; do\n' span_id:173) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tif ! ( git verify-pack -v $myidx | grep "^$sha1" ); then\n'
            span_id: 174
          ) (Token id:Id.Lit_Chars val:'\t\t\techo "Missing object in local pack: $sha1"\n' span_id:175) 
          (Token id:Id.Lit_Chars val:'\t\t\treturn 1\n' span_id:176) (Token id:Id.Lit_Chars val:'\t\tfi\n' span_id:177) (Token id:Id.Lit_Chars val:'\tdone\n' span_id:178)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'packed obs in alternate ODB kept pack are repacked'
            span_id: 185
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:189) 
          (Token
            id: Id.Lit_Chars
            val: '\t# swap the .keep so the commit object is in the pack with .keep\n'
            span_id: 190
          ) (Token id:Id.Lit_Chars val:'\tfor p in alt_objects/pack/*.pack\n' span_id:191) 
          (Token id:Id.Lit_Chars val:'\tdo\n' span_id:192) (Token id:Id.Lit_Chars val:'\t\tbase_name=$(basename $p .pack) &&\n' span_id:193) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tif test -f alt_objects/pack/$base_name.keep\n'
            span_id: 194
          ) (Token id:Id.Lit_Chars val:'\t\tthen\n' span_id:195) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t\trm alt_objects/pack/$base_name.keep\n'
            span_id: 196
          ) (Token id:Id.Lit_Chars val:'\t\telse\n' span_id:197) 
          (Token
            id: Id.Lit_Chars
            val: '\t\t\ttouch alt_objects/pack/$base_name.keep\n'
            span_id: 198
          ) (Token id:Id.Lit_Chars val:'\t\tfi\n' span_id:199) 
          (Token id:Id.Lit_Chars val:'\tdone &&\n' span_id:200) (Token id:Id.Lit_Chars val:'\tgit repack -a -d &&\n' span_id:201) 
          (Token
            id: Id.Lit_Chars
            val: '\tmyidx=$(ls -1 .git/objects/pack/*.idx) &&\n'
            span_id: 202
          ) (Token id:Id.Lit_Chars val:'\ttest -f "$myidx" &&\n' span_id:203) 
          (Token id:Id.Lit_Chars val:'\tfor p in alt_objects/pack/*.idx; do\n' span_id:204) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tgit verify-pack -v $p | sed -n -e "/^[0-9a-f]\\{40\\}/p"\n'
            span_id: 205
          ) (Token id:Id.Lit_Chars val:'\tdone | while read sha1 rest; do\n' span_id:206) 
          (Token
            id: Id.Lit_Chars
            val: '\t\tif ! ( git verify-pack -v $myidx | grep "^$sha1" ); then\n'
            span_id: 207
          ) (Token id:Id.Lit_Chars val:'\t\t\techo "Missing object in local pack: $sha1"\n' span_id:208) 
          (Token id:Id.Lit_Chars val:'\t\t\treturn 1\n' span_id:209) (Token id:Id.Lit_Chars val:'\t\tfi\n' span_id:210) (Token id:Id.Lit_Chars val:'\tdone\n' span_id:211)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'packed unreachable obs in alternate ODB are not loosened'
            span_id: 218
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:222) 
          (Token id:Id.Lit_Chars val:'\trm -f alt_objects/pack/*.keep &&\n' span_id:223) (Token id:Id.Lit_Chars val:'\tmv .git/objects/pack/* alt_objects/pack/ &&\n' span_id:224) 
          (Token
            id: Id.Lit_Chars
            val: '\tcsha1=$(git rev-parse HEAD^{commit}) &&\n'
            span_id: 225
          ) (Token id:Id.Lit_Chars val:'\tgit reset --hard HEAD^ &&\n' span_id:226) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:227) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tgit reflog expire --expire=$test_tick --expire-unreachable=$test_tick --all &&\n'
            span_id: 228
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\t# The pack-objects call on the next line is equivalent to\n'
            span_id: 229
          ) (Token id:Id.Lit_Chars val:'\t# git repack -A -d without the call to prune-packed\n' span_id:230) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit pack-objects --honor-pack-keep --non-empty --all --reflog \\\n'
            span_id: 231
          ) (Token id:Id.Lit_Chars val:'\t    --unpack-unreachable </dev/null pack &&\n' span_id:232) 
          (Token id:Id.Lit_Chars val:'\trm -f .git/objects/pack/* &&\n' span_id:233) (Token id:Id.Lit_Chars val:'\tmv pack-* .git/objects/pack/ &&\n' span_id:234) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest 0 = $(git verify-pack -v -- .git/objects/pack/*.idx |\n'
            span_id: 235
          ) (Token id:Id.Lit_Chars val:'\t\tegrep "^$csha1 " | sort | uniq | wc -l) &&\n' span_id:236) 
          (Token
            id: Id.Lit_Chars
            val: '\techo > .git/objects/info/alternates &&\n'
            span_id: 237
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git show $csha1\n' span_id:238)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'local packed unreachable obs that exist in alternate ODB are not loosened'
            span_id: 245
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:249) 
          (Token
            id: Id.Lit_Chars
            val: '\techo $(pwd)/alt_objects > .git/objects/info/alternates &&\n'
            span_id: 250
          ) 
          (Token
            id: Id.Lit_Chars
            val: '\techo "$csha1" | git pack-objects --non-empty --all --reflog pack &&\n'
            span_id: 251
          ) (Token id:Id.Lit_Chars val:'\trm -f .git/objects/pack/* &&\n' span_id:252) 
          (Token id:Id.Lit_Chars val:'\tmv pack-* .git/objects/pack/ &&\n' span_id:253) 
          (Token
            id: Id.Lit_Chars
            val: '\t# The pack-objects call on the next line is equivalent to\n'
            span_id: 254
          ) (Token id:Id.Lit_Chars val:'\t# git repack -A -d without the call to prune-packed\n' span_id:255) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit pack-objects --honor-pack-keep --non-empty --all --reflog \\\n'
            span_id: 256
          ) (Token id:Id.Lit_Chars val:'\t    --unpack-unreachable </dev/null pack &&\n' span_id:257) 
          (Token id:Id.Lit_Chars val:'\trm -f .git/objects/pack/* &&\n' span_id:258) (Token id:Id.Lit_Chars val:'\tmv pack-* .git/objects/pack/ &&\n' span_id:259) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest 0 = $(git verify-pack -v -- .git/objects/pack/*.idx |\n'
            span_id: 260
          ) (Token id:Id.Lit_Chars val:'\t\tegrep "^$csha1 " | sort | uniq | wc -l) &&\n' span_id:261) 
          (Token
            id: Id.Lit_Chars
            val: '\techo > .git/objects/info/alternates &&\n'
            span_id: 262
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git show $csha1\n' span_id:263)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'objects made unreachable by grafts only are kept'
            span_id: 270
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:274) 
          (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:275) (Token id:Id.Lit_Chars val:'\tgit commit --allow-empty -m "commit 4" &&\n' span_id:276) 
          (Token id:Id.Lit_Chars val:'\tH0=$(git rev-parse HEAD) &&\n' span_id:277) (Token id:Id.Lit_Chars val:'\tH1=$(git rev-parse HEAD^) &&\n' span_id:278) 
          (Token id:Id.Lit_Chars val:'\tH2=$(git rev-parse HEAD^^) &&\n' span_id:279) (Token id:Id.Lit_Chars val:'\techo "$H0 $H2" > .git/info/grafts &&\n' span_id:280) 
          (Token
            id: Id.Lit_Chars
            val: 
'\tgit reflog expire --expire=$test_tick --expire-unreachable=$test_tick --all &&\n'
            span_id: 281
          ) (Token id:Id.Lit_Chars val:'\tgit repack -a -d &&\n' span_id:282) 
          (Token id:Id.Lit_Chars val:'\tgit cat-file -t $H1\n' span_id:283) (Token id:Id.Lit_Chars val:'\t' span_id:284)
        )
      }
    )
    (C {(test_done)})
  ]
)