(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)}) ] )