]> git.ipfire.org Git - thirdparty/git.git/blame - t/t2401-worktree-prune.sh
Merge branch 'ab/detox-gettext-tests'
[thirdparty/git.git] / t / t2401-worktree-prune.sh
CommitLineData
23af91d1
NTND
1#!/bin/sh
2
3test_description='prune $GIT_DIR/worktrees'
4
883b98ef 5GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
334afbc7
JS
6export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
7
23af91d1
NTND
8. ./test-lib.sh
9
562bc080
MK
10test_expect_success initialize '
11 git commit --allow-empty -m init
12'
13
df0b6cfb
NTND
14test_expect_success 'worktree prune on normal repo' '
15 git worktree prune &&
16 test_must_fail git worktree prune abc
23af91d1
NTND
17'
18
19test_expect_success 'prune files inside $GIT_DIR/worktrees' '
20 mkdir .git/worktrees &&
21 : >.git/worktrees/abc &&
df0b6cfb 22 git worktree prune --verbose >actual &&
23af91d1
NTND
23 cat >expect <<EOF &&
24Removing worktrees/abc: not a valid directory
25EOF
1108cea7 26 test_cmp expect actual &&
23af91d1
NTND
27 ! test -f .git/worktrees/abc &&
28 ! test -d .git/worktrees
29'
30
31test_expect_success 'prune directories without gitdir' '
32 mkdir -p .git/worktrees/def/abc &&
33 : >.git/worktrees/def/def &&
34 cat >expect <<EOF &&
35Removing worktrees/def: gitdir file does not exist
36EOF
df0b6cfb 37 git worktree prune --verbose >actual &&
1108cea7 38 test_cmp expect actual &&
23af91d1
NTND
39 ! test -d .git/worktrees/def &&
40 ! test -d .git/worktrees
41'
42
ecf2ff6a 43test_expect_success SANITY 'prune directories with unreadable gitdir' '
23af91d1
NTND
44 mkdir -p .git/worktrees/def/abc &&
45 : >.git/worktrees/def/def &&
46 : >.git/worktrees/def/gitdir &&
47 chmod u-r .git/worktrees/def/gitdir &&
df0b6cfb 48 git worktree prune --verbose >actual &&
23af91d1
NTND
49 test_i18ngrep "Removing worktrees/def: unable to read gitdir file" actual &&
50 ! test -d .git/worktrees/def &&
51 ! test -d .git/worktrees
52'
53
54test_expect_success 'prune directories with invalid gitdir' '
55 mkdir -p .git/worktrees/def/abc &&
56 : >.git/worktrees/def/def &&
57 : >.git/worktrees/def/gitdir &&
df0b6cfb 58 git worktree prune --verbose >actual &&
23af91d1
NTND
59 test_i18ngrep "Removing worktrees/def: invalid gitdir file" actual &&
60 ! test -d .git/worktrees/def &&
61 ! test -d .git/worktrees
62'
63
64test_expect_success 'prune directories with gitdir pointing to nowhere' '
65 mkdir -p .git/worktrees/def/abc &&
66 : >.git/worktrees/def/def &&
67 echo "$(pwd)"/nowhere >.git/worktrees/def/gitdir &&
df0b6cfb 68 git worktree prune --verbose >actual &&
23af91d1
NTND
69 test_i18ngrep "Removing worktrees/def: gitdir file points to non-existent location" actual &&
70 ! test -d .git/worktrees/def &&
71 ! test -d .git/worktrees
72'
73
74test_expect_success 'not prune locked checkout' '
807e3cac 75 test_when_finished rm -r .git/worktrees &&
23af91d1
NTND
76 mkdir -p .git/worktrees/ghi &&
77 : >.git/worktrees/ghi/locked &&
df0b6cfb 78 git worktree prune &&
23af91d1
NTND
79 test -d .git/worktrees/ghi
80'
81
82test_expect_success 'not prune recent checkouts' '
807e3cac 83 test_when_finished rm -r .git/worktrees &&
327864aa
NTND
84 git worktree add jlm HEAD &&
85 test -d .git/worktrees/jlm &&
86 rm -rf jlm &&
df0b6cfb 87 git worktree prune --verbose --expire=2.days.ago &&
23af91d1
NTND
88 test -d .git/worktrees/jlm
89'
90
562bc080
MK
91test_expect_success 'not prune proper checkouts' '
92 test_when_finished rm -r .git/worktrees &&
883b98ef 93 git worktree add --detach "$PWD/nop" main &&
df0b6cfb 94 git worktree prune &&
562bc080
MK
95 test -d .git/worktrees/nop
96'
97
4a3ce479
ES
98test_expect_success 'prune duplicate (linked/linked)' '
99 test_when_finished rm -fr .git/worktrees w1 w2 &&
100 git worktree add --detach w1 &&
101 git worktree add --detach w2 &&
102 sed "s/w2/w1/" .git/worktrees/w2/gitdir >.git/worktrees/w2/gitdir.new &&
103 mv .git/worktrees/w2/gitdir.new .git/worktrees/w2/gitdir &&
104 git worktree prune --verbose >actual &&
105 test_i18ngrep "duplicate entry" actual &&
106 test -d .git/worktrees/w1 &&
107 ! test -d .git/worktrees/w2
108'
109
916133ef
ES
110test_expect_success 'prune duplicate (main/linked)' '
111 test_when_finished rm -fr repo wt &&
112 test_create_repo repo &&
113 test_commit -C repo x &&
114 git -C repo worktree add --detach ../wt &&
115 rm -fr wt &&
116 mv repo wt &&
117 git -C wt worktree prune --verbose >actual &&
118 test_i18ngrep "duplicate entry" actual &&
119 ! test -d .git/worktrees/wt
120'
121
23af91d1 122test_done