(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:'\n' span_id:6) 
                (Token
                  id: Id.Lit_Chars
                  val: 'Test pruning of repositories with minor corruptions. The goal\n'
                  span_id: 7
                ) 
                (Token
                  id: Id.Lit_Chars
                  val: 'here is that we should always be erring on the side of safety. So\n'
                  span_id: 8
                ) 
                (Token
                  id: Id.Lit_Chars
                  val: 'if we see, for example, a ref with a bogus name, it is OK either to\n'
                  span_id: 9
                ) 
                (Token
                  id: Id.Lit_Chars
                  val: 'bail out or to proceed using it as a reachable tip, but it is _not_\n'
                  span_id: 10
                ) 
                (Token
                  id: Id.Lit_Chars
                  val: 'OK to proceed as if it did not exist. Otherwise we might silently\n'
                  span_id: 11
                ) (Token id:Id.Lit_Chars val:'delete objects that cannot be recovered.\n' span_id:12)
              )
            }
          spids: [4]
        )
      ]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'disable reflogs' span_id:23))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:27) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit config core.logallrefupdates false &&\n'
            span_id: 28
          ) (Token id:Id.Lit_Chars val:'\tgit reflog expire --expire=all --all\n' span_id:29)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'create history reachable only from a bogus-named ref'
            span_id: 36
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:40) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_tick && git commit --allow-empty -m master &&\n'
            span_id: 41
          ) (Token id:Id.Lit_Chars val:'\tbase=$(git rev-parse HEAD) &&\n' span_id:42) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_tick && git commit --allow-empty -m bogus &&\n'
            span_id: 43
          ) (Token id:Id.Lit_Chars val:'\tbogus=$(git rev-parse HEAD) &&\n' span_id:44) 
          (Token id:Id.Lit_Chars val:'\tgit cat-file commit $bogus >saved &&\n' span_id:45) (Token id:Id.Lit_Chars val:'\techo $bogus >.git/refs/heads/bogus..name &&\n' span_id:46) 
          (Token id:Id.Lit_Chars val:'\tgit reset --hard HEAD^\n' span_id:47)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'pruning does not drop bogus object' span_id:54))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:58) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git hash-object -w -t commit saved" &&\n'
            span_id: 59
          ) (Token id:Id.Lit_Chars val:'\ttest_might_fail git prune --expire=now &&\n' span_id:60) 
          (Token id:Id.Lit_Chars val:'\tverbose git cat-file -e $bogus\n' span_id:61)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'put bogus object into pack' span_id:68))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:72) 
          (Token id:Id.Lit_Chars val:'\tgit tag reachable $bogus &&\n' span_id:73) (Token id:Id.Lit_Chars val:'\tgit repack -ad &&\n' span_id:74) 
          (Token id:Id.Lit_Chars val:'\tgit tag -d reachable &&\n' span_id:75) (Token id:Id.Lit_Chars val:'\tverbose git cat-file -e $bogus\n' span_id:76)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'destructive repack keeps packed object' span_id:83))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:87) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_might_fail git repack -Ad --unpack-unreachable=now &&\n'
            span_id: 88
          ) (Token id:Id.Lit_Chars val:'\tverbose git cat-file -e $bogus &&\n' span_id:89) 
          (Token id:Id.Lit_Chars val:'\ttest_might_fail git repack -ad &&\n' span_id:90) (Token id:Id.Lit_Chars val:'\tverbose git cat-file -e $bogus\n' span_id:91)
        )
      }
    )
    (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'clean up bogus ref' span_id:101))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:105) 
          (Token id:Id.Lit_Chars val:'\trm .git/refs/heads/bogus..name\n' span_id:106)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'create history with missing tip commit' span_id:146))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:150) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_tick && git commit --allow-empty -m one &&\n'
            span_id: 151
          ) (Token id:Id.Lit_Chars val:'\trecoverable=$(git rev-parse HEAD) &&\n' span_id:152) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit cat-file commit $recoverable >saved &&\n'
            span_id: 153
          ) (Token id:Id.Lit_Chars val:'\ttest_tick && git commit --allow-empty -m two &&\n' span_id:154) 
          (Token id:Id.Lit_Chars val:'\tmissing=$(git rev-parse HEAD) &&\n' span_id:155) (Token id:Id.Lit_Chars val:'\tgit checkout --detach $base &&\n' span_id:156) 
          (Token
            id: Id.Lit_Chars
            val: '\trm .git/objects/$(echo $missing | sed "s,..,&/,") &&\n'
            span_id: 157
          ) (Token id:Id.Lit_Chars val:'\ttest_must_fail git cat-file -e $missing\n' span_id:158)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'pruning with a corrupted tip does not drop history'
            span_id: 165
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:169) 
          (Token
            id: Id.Lit_Chars
            val: '\ttest_when_finished "git hash-object -w -t commit saved" &&\n'
            span_id: 170
          ) (Token id:Id.Lit_Chars val:'\ttest_might_fail git prune --expire=now &&\n' span_id:171) 
          (Token
            id: Id.Lit_Chars
            val: '\tverbose git cat-file -e $recoverable\n'
            span_id: 172
          )
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'pack-refs does not silently delete broken loose ref'
            span_id: 179
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:183) 
          (Token id:Id.Lit_Chars val:'\tgit pack-refs --all --prune &&\n' span_id:184) (Token id:Id.Lit_Chars val:'\techo $missing >expect &&\n' span_id:185) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-parse refs/heads/master >actual &&\n'
            span_id: 186
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:187)
        )
      }
    )
    (C {(test_expect_success)} 
      {(SQ (Token id:Id.Lit_Chars val:'create packed-refs file with broken ref' span_id:203))} 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:207) 
          (Token id:Id.Lit_Chars val:'\trm -f .git/refs/heads/master &&\n' span_id:208) (Token id:Id.Lit_Chars val:'\tcat >.git/packed-refs <<-EOF &&\n' span_id:209) 
          (Token id:Id.Lit_Chars val:'\t$missing refs/heads/master\n' span_id:210) (Token id:Id.Lit_Chars val:'\t$recoverable refs/heads/other\n' span_id:211) 
          (Token id:Id.Lit_Chars val:'\tEOF\n' span_id:212) (Token id:Id.Lit_Chars val:'\techo $missing >expect &&\n' span_id:213) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit rev-parse refs/heads/master >actual &&\n'
            span_id: 214
          ) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:215)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'pack-refs does not silently delete broken packed ref'
            span_id: 222
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:226) 
          (Token id:Id.Lit_Chars val:'\tgit pack-refs --all --prune &&\n' span_id:227) (Token id:Id.Lit_Chars val:'\tgit rev-parse refs/heads/master >actual &&\n' span_id:228) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:229)
        )
      }
    )
    (C {(test_expect_success)} 
      {
        (SQ 
          (Token
            id: Id.Lit_Chars
            val: 'pack-refs does not drop broken refs during deletion'
            span_id: 236
          )
        )
      } 
      {
        (SQ (Token id:Id.Lit_Chars val:'\n' span_id:240) 
          (Token
            id: Id.Lit_Chars
            val: '\tgit update-ref -d refs/heads/other &&\n'
            span_id: 241
          ) (Token id:Id.Lit_Chars val:'\tgit rev-parse refs/heads/master >actual &&\n' span_id:242) 
          (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:243)
        )
      }
    )
    (C {(test_done)})
  ]
)