(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <"git repack works correctly">)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SQ <"objects in packs marked .keep are not repacked">)} 
      {
        (SQ <"\n"> <"\techo content1 > file1 &&\n"> <"\techo content2 > file2 &&\n"> 
          <"\tgit add . &&\n"> <"\ttest_tick &&\n"> <"\tgit commit -m initial_commit &&\n"> <"\t# Create two packs\n"> 
          <"\t# The first pack will contain all of the objects except one\n"> <"\tgit rev-list --objects --all | grep -v file2 |\n"> <"\t\tgit pack-objects pack > /dev/null &&\n"> 
          <"\t# The second pack will contain the excluded object\n"> <"\tpacksha1=$(git rev-list --objects --all | grep file2 |\n"> <"\t\tgit pack-objects pack) &&\n"> 
          <"\t>pack-$packsha1.keep &&\n"> <"\tobjsha1=$(git verify-pack -v pack-$packsha1.idx | head -n 1 |\n"> 
          <"\t\tsed -e \"s/^\\([0-9a-f]\\{40\\}\\).*/\\1/\") &&\n"> <"\tmv pack-* .git/objects/pack/ &&\n"> <"\tgit repack -A -d -l &&\n"> <"\tgit prune-packed &&\n"> 
          <"\tfor p in .git/objects/pack/*.idx; do\n"> <"\t\tidx=$(basename $p)\n"> <"\t\ttest \"pack-$packsha1.idx\" = \"$idx\" && continue\n"> 
          <"\t\tif git verify-pack -v $p | egrep \"^$objsha1\"; then\n"> <"\t\t\tfound_duplicate_object=1\n"> <"\t\t\techo \"DUPLICATE OBJECT FOUND\"\n"> <"\t\t\tbreak\n"> 
          <"\t\tfi\n"> <"\tdone &&\n"> <"\ttest -z \"$found_duplicate_object\"\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"writing bitmaps via command-line can duplicate .keep objects">)} 
      {
        (SQ <"\n"> <"\t# build on $objsha1, $packsha1, and .keep state from previous\n"> 
          <"\tgit repack -Adbl &&\n"> <"\ttest_when_finished \"found_duplicate_object=\" &&\n"> <"\tfor p in .git/objects/pack/*.idx; do\n"> 
          <"\t\tidx=$(basename $p)\n"> <"\t\ttest \"pack-$packsha1.idx\" = \"$idx\" && continue\n"> 
          <"\t\tif git verify-pack -v $p | egrep \"^$objsha1\"; then\n"> <"\t\t\tfound_duplicate_object=1\n"> <"\t\t\techo \"DUPLICATE OBJECT FOUND\"\n"> <"\t\t\tbreak\n"> 
          <"\t\tfi\n"> <"\tdone &&\n"> <"\ttest \"$found_duplicate_object\" = 1\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"writing bitmaps via config can duplicate .keep objects">)} 
      {
        (SQ <"\n"> <"\t# build on $objsha1, $packsha1, and .keep state from previous\n"> 
          <"\tgit -c repack.writebitmaps=true repack -Adl &&\n"> <"\ttest_when_finished \"found_duplicate_object=\" &&\n"> <"\tfor p in .git/objects/pack/*.idx; do\n"> 
          <"\t\tidx=$(basename $p)\n"> <"\t\ttest \"pack-$packsha1.idx\" = \"$idx\" && continue\n"> 
          <"\t\tif git verify-pack -v $p | egrep \"^$objsha1\"; then\n"> <"\t\t\tfound_duplicate_object=1\n"> <"\t\t\techo \"DUPLICATE OBJECT FOUND\"\n"> <"\t\t\tbreak\n"> 
          <"\t\tfi\n"> <"\tdone &&\n"> <"\ttest \"$found_duplicate_object\" = 1\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"loose objects in alternate ODB are not repacked">)} 
      {
        (SQ <"\n"> <"\tmkdir alt_objects &&\n"> 
          <"\techo $(pwd)/alt_objects > .git/objects/info/alternates &&\n"> <"\techo content3 > file3 &&\n"> 
          <"\tobjsha1=$(GIT_OBJECT_DIRECTORY=alt_objects git hash-object -w file3) &&\n"> <"\tgit add file3 &&\n"> <"\ttest_tick &&\n"> <"\tgit commit -m commit_file3 &&\n"> 
          <"\tgit repack -a -d -l &&\n"> <"\tgit prune-packed &&\n"> <"\tfor p in .git/objects/pack/*.idx; do\n"> 
          <"\t\tif git verify-pack -v $p | egrep \"^$objsha1\"; then\n"> <"\t\t\tfound_duplicate_object=1\n"> <"\t\t\techo \"DUPLICATE OBJECT FOUND\"\n"> <"\t\t\tbreak\n"> 
          <"\t\tfi\n"> <"\tdone &&\n"> <"\ttest -z \"$found_duplicate_object\"\n">
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ <"packed obs in alt ODB are repacked even when local repo is packless">)} 
      {
        (SQ <"\n"> <"\tmkdir alt_objects/pack &&\n"> <"\tmv .git/objects/pack/* alt_objects/pack &&\n"> 
          <"\tgit repack -a &&\n"> <"\tmyidx=$(ls -1 .git/objects/pack/*.idx) &&\n"> <"\ttest -f \"$myidx\" &&\n"> 
          <"\tfor p in alt_objects/pack/*.idx; do\n"> <"\t\tgit verify-pack -v $p | sed -n -e \"/^[0-9a-f]\\{40\\}/p\"\n"> 
          <"\tdone | while read sha1 rest; do\n"> <"\t\tif ! ( git verify-pack -v $myidx | grep \"^$sha1\" ); then\n"> 
          <"\t\t\techo \"Missing object in local pack: $sha1\"\n"> <"\t\t\treturn 1\n"> <"\t\tfi\n"> <"\tdone\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"packed obs in alt ODB are repacked when local repo has packs">)} 
      {
        (SQ <"\n"> <"\trm -f .git/objects/pack/* &&\n"> <"\techo new_content >> file1 &&\n"> 
          <"\tgit add file1 &&\n"> <"\ttest_tick &&\n"> <"\tgit commit -m more_content &&\n"> <"\tgit repack &&\n"> 
          <"\tgit repack -a -d &&\n"> <"\tmyidx=$(ls -1 .git/objects/pack/*.idx) &&\n"> <"\ttest -f \"$myidx\" &&\n"> 
          <"\tfor p in alt_objects/pack/*.idx; do\n"> <"\t\tgit verify-pack -v $p | sed -n -e \"/^[0-9a-f]\\{40\\}/p\"\n"> 
          <"\tdone | while read sha1 rest; do\n"> <"\t\tif ! ( git verify-pack -v $myidx | grep \"^$sha1\" ); then\n"> 
          <"\t\t\techo \"Missing object in local pack: $sha1\"\n"> <"\t\t\treturn 1\n"> <"\t\tfi\n"> <"\tdone\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"packed obs in alternate ODB kept pack are repacked">)} 
      {
        (SQ <"\n"> <"\t# swap the .keep so the commit object is in the pack with .keep\n"> 
          <"\tfor p in alt_objects/pack/*.pack\n"> <"\tdo\n"> <"\t\tbase_name=$(basename $p .pack) &&\n"> 
          <"\t\tif test -f alt_objects/pack/$base_name.keep\n"> <"\t\tthen\n"> <"\t\t\trm alt_objects/pack/$base_name.keep\n"> <"\t\telse\n"> 
          <"\t\t\ttouch alt_objects/pack/$base_name.keep\n"> <"\t\tfi\n"> <"\tdone &&\n"> <"\tgit repack -a -d &&\n"> 
          <"\tmyidx=$(ls -1 .git/objects/pack/*.idx) &&\n"> <"\ttest -f \"$myidx\" &&\n"> <"\tfor p in alt_objects/pack/*.idx; do\n"> 
          <"\t\tgit verify-pack -v $p | sed -n -e \"/^[0-9a-f]\\{40\\}/p\"\n"> <"\tdone | while read sha1 rest; do\n"> 
          <"\t\tif ! ( git verify-pack -v $myidx | grep \"^$sha1\" ); then\n"> <"\t\t\techo \"Missing object in local pack: $sha1\"\n"> <"\t\t\treturn 1\n"> <"\t\tfi\n"> <"\tdone\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"packed unreachable obs in alternate ODB are not loosened">)} 
      {
        (SQ <"\n"> <"\trm -f alt_objects/pack/*.keep &&\n"> 
          <"\tmv .git/objects/pack/* alt_objects/pack/ &&\n"> <"\tcsha1=$(git rev-parse HEAD^{commit}) &&\n"> <"\tgit reset --hard HEAD^ &&\n"> <"\ttest_tick &&\n"> 
          <"\tgit reflog expire --expire=$test_tick --expire-unreachable=$test_tick --all &&\n"> <"\t# The pack-objects call on the next line is equivalent to\n"> 
          <"\t# git repack -A -d without the call to prune-packed\n"> <"\tgit pack-objects --honor-pack-keep --non-empty --all --reflog \\\n"> 
          <"\t    --unpack-unreachable </dev/null pack &&\n"> <"\trm -f .git/objects/pack/* &&\n"> <"\tmv pack-* .git/objects/pack/ &&\n"> 
          <"\ttest 0 = $(git verify-pack -v -- .git/objects/pack/*.idx |\n"> <"\t\tegrep \"^$csha1 \" | sort | uniq | wc -l) &&\n"> <"\techo > .git/objects/info/alternates &&\n"> 
          <"\ttest_must_fail git show $csha1\n">
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ <"local packed unreachable obs that exist in alternate ODB are not loosened">)} 
      {
        (SQ <"\n"> <"\techo $(pwd)/alt_objects > .git/objects/info/alternates &&\n"> 
          <"\techo \"$csha1\" | git pack-objects --non-empty --all --reflog pack &&\n"> <"\trm -f .git/objects/pack/* &&\n"> <"\tmv pack-* .git/objects/pack/ &&\n"> 
          <"\t# The pack-objects call on the next line is equivalent to\n"> <"\t# git repack -A -d without the call to prune-packed\n"> 
          <"\tgit pack-objects --honor-pack-keep --non-empty --all --reflog \\\n"> <"\t    --unpack-unreachable </dev/null pack &&\n"> <"\trm -f .git/objects/pack/* &&\n"> 
          <"\tmv pack-* .git/objects/pack/ &&\n"> <"\ttest 0 = $(git verify-pack -v -- .git/objects/pack/*.idx |\n"> 
          <"\t\tegrep \"^$csha1 \" | sort | uniq | wc -l) &&\n"> <"\techo > .git/objects/info/alternates &&\n"> <"\ttest_must_fail git show $csha1\n">
        )
      }
    )
    (C {(test_expect_success)} {(SQ <"objects made unreachable by grafts only are kept">)} 
      {
        (SQ <"\n"> <"\ttest_tick &&\n"> <"\tgit commit --allow-empty -m \"commit 4\" &&\n"> 
          <"\tH0=$(git rev-parse HEAD) &&\n"> <"\tH1=$(git rev-parse HEAD^) &&\n"> <"\tH2=$(git rev-parse HEAD^^) &&\n"> 
          <"\techo \"$H0 $H2\" > .git/info/grafts &&\n"> <"\tgit reflog expire --expire=$test_tick --expire-unreachable=$test_tick --all &&\n"> 
          <"\tgit repack -a -d &&\n"> <"\tgit cat-file -t $H1\n"> <"\t">
        )
      }
    )
    (C {(test_done)})
  ]
)