(CommandList
  children: [
    (Assignment
      keyword: Assign_None
      pairs: [
        (assign_pair
          lhs: (LhsName name:test_description)
          op: Equal
          rhs: {(SQ <'prune $GIT_DIR/worktrees'>)}
          spids: [4]
        )
      ]
      spids: [4]
    )
    (C {(.)} {(./test-lib.sh)})
    (C {(test_expect_success)} {(initialize)} {(SQ <'\n'> <'\tgit commit --allow-empty -m init\n'>)})
    (C {(test_expect_success)} {(SQ <'worktree prune on normal repo'>)} 
      {(SQ <'\n'> <'\tgit worktree prune &&\n'> <'\ttest_must_fail git worktree prune abc\n'>)}
    )
    (C {(test_expect_success)} {(SQ <'prune files inside $GIT_DIR/worktrees'>)} 
      {
        (SQ <'\n'> <'\tmkdir .git/worktrees &&\n'> <'\t: >.git/worktrees/abc &&\n'> 
          <'\tgit worktree prune --verbose >actual &&\n'> <'\tcat >expect <<EOF &&\n'> <'Removing worktrees/abc: not a valid directory\n'> <'EOF\n'> 
          <'\ttest_i18ncmp expect actual &&\n'> <'\t! test -f .git/worktrees/abc &&\n'> <'\t! test -d .git/worktrees\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'prune directories without gitdir'>)} 
      {
        (SQ <'\n'> <'\tmkdir -p .git/worktrees/def/abc &&\n'> <'\t: >.git/worktrees/def/def &&\n'> 
          <'\tcat >expect <<EOF &&\n'> <'Removing worktrees/def: gitdir file does not exist\n'> <'EOF\n'> 
          <'\tgit worktree prune --verbose >actual &&\n'> <'\ttest_i18ncmp expect actual &&\n'> <'\t! test -d .git/worktrees/def &&\n'> 
          <'\t! test -d .git/worktrees\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SANITY)} {(SQ <'prune directories with unreadable gitdir'>)} 
      {
        (SQ <'\n'> <'\tmkdir -p .git/worktrees/def/abc &&\n'> <'\t: >.git/worktrees/def/def &&\n'> 
          <'\t: >.git/worktrees/def/gitdir &&\n'> <'\tchmod u-r .git/worktrees/def/gitdir &&\n'> <'\tgit worktree prune --verbose >actual &&\n'> 
          <'\ttest_i18ngrep "Removing worktrees/def: unable to read gitdir file" actual &&\n'> <'\t! test -d .git/worktrees/def &&\n'> <'\t! test -d .git/worktrees\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'prune directories with invalid gitdir'>)} 
      {
        (SQ <'\n'> <'\tmkdir -p .git/worktrees/def/abc &&\n'> <'\t: >.git/worktrees/def/def &&\n'> 
          <'\t: >.git/worktrees/def/gitdir &&\n'> <'\tgit worktree prune --verbose >actual &&\n'> 
          <'\ttest_i18ngrep "Removing worktrees/def: invalid gitdir file" actual &&\n'> <'\t! test -d .git/worktrees/def &&\n'> <'\t! test -d .git/worktrees\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'prune directories with gitdir pointing to nowhere'>)} 
      {
        (SQ <'\n'> <'\tmkdir -p .git/worktrees/def/abc &&\n'> <'\t: >.git/worktrees/def/def &&\n'> 
          <'\techo "$(pwd)"/nowhere >.git/worktrees/def/gitdir &&\n'> <'\tgit worktree prune --verbose >actual &&\n'> 
          <
'\ttest_i18ngrep "Removing worktrees/def: gitdir file points to non-existent location" actual &&\n'
          > <'\t! test -d .git/worktrees/def &&\n'> <'\t! test -d .git/worktrees\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'not prune locked checkout'>)} 
      {
        (SQ <'\n'> <'\ttest_when_finished rm -r .git/worktrees &&\n'> 
          <'\tmkdir -p .git/worktrees/ghi &&\n'> <'\t: >.git/worktrees/ghi/locked &&\n'> <'\tgit worktree prune &&\n'> 
          <'\ttest -d .git/worktrees/ghi\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'not prune recent checkouts'>)} 
      {
        (SQ <'\n'> <'\ttest_when_finished rm -r .git/worktrees &&\n'> <'\tmkdir zz &&\n'> 
          <'\tmkdir -p .git/worktrees/jlm &&\n'> <'\techo "$(pwd)"/zz >.git/worktrees/jlm/gitdir &&\n'> <'\trmdir zz &&\n'> 
          <'\tgit worktree prune --verbose --expire=2.days.ago &&\n'> <'\ttest -d .git/worktrees/jlm\n'>
        )
      }
    )
    (C {(test_expect_success)} {(SQ <'not prune proper checkouts'>)} 
      {
        (SQ <'\n'> <'\ttest_when_finished rm -r .git/worktrees &&\n'> 
          <'\tgit worktree add --detach "$PWD/nop" master &&\n'> <'\tgit worktree prune &&\n'> <'\ttest -d .git/worktrees/nop\n'>
        )
      }
    )
    (C {(test_done)})
  ]
)