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