]> git.ipfire.org Git - thirdparty/git.git/blame - t/t2026-prune-linked-checkouts.sh
t1501: fix test with split index
[thirdparty/git.git] / t / t2026-prune-linked-checkouts.sh
CommitLineData
23af91d1
NTND
1#!/bin/sh
2
3test_description='prune $GIT_DIR/worktrees'
4
5. ./test-lib.sh
6
7test_expect_success 'prune --worktrees on normal repo' '
8 git prune --worktrees &&
9 test_must_fail git prune --worktrees abc
10'
11
12test_expect_success 'prune files inside $GIT_DIR/worktrees' '
13 mkdir .git/worktrees &&
14 : >.git/worktrees/abc &&
15 git prune --worktrees --verbose >actual &&
16 cat >expect <<EOF &&
17Removing worktrees/abc: not a valid directory
18EOF
19 test_i18ncmp expect actual &&
20 ! test -f .git/worktrees/abc &&
21 ! test -d .git/worktrees
22'
23
24test_expect_success 'prune directories without gitdir' '
25 mkdir -p .git/worktrees/def/abc &&
26 : >.git/worktrees/def/def &&
27 cat >expect <<EOF &&
28Removing worktrees/def: gitdir file does not exist
29EOF
30 git prune --worktrees --verbose >actual &&
31 test_i18ncmp expect actual &&
32 ! test -d .git/worktrees/def &&
33 ! test -d .git/worktrees
34'
35
ecf2ff6a 36test_expect_success SANITY 'prune directories with unreadable gitdir' '
23af91d1
NTND
37 mkdir -p .git/worktrees/def/abc &&
38 : >.git/worktrees/def/def &&
39 : >.git/worktrees/def/gitdir &&
40 chmod u-r .git/worktrees/def/gitdir &&
41 git prune --worktrees --verbose >actual &&
42 test_i18ngrep "Removing worktrees/def: unable to read gitdir file" actual &&
43 ! test -d .git/worktrees/def &&
44 ! test -d .git/worktrees
45'
46
47test_expect_success 'prune directories with invalid gitdir' '
48 mkdir -p .git/worktrees/def/abc &&
49 : >.git/worktrees/def/def &&
50 : >.git/worktrees/def/gitdir &&
51 git prune --worktrees --verbose >actual &&
52 test_i18ngrep "Removing worktrees/def: invalid gitdir file" actual &&
53 ! test -d .git/worktrees/def &&
54 ! test -d .git/worktrees
55'
56
57test_expect_success 'prune directories with gitdir pointing to nowhere' '
58 mkdir -p .git/worktrees/def/abc &&
59 : >.git/worktrees/def/def &&
60 echo "$(pwd)"/nowhere >.git/worktrees/def/gitdir &&
61 git prune --worktrees --verbose >actual &&
62 test_i18ngrep "Removing worktrees/def: gitdir file points to non-existent location" actual &&
63 ! test -d .git/worktrees/def &&
64 ! test -d .git/worktrees
65'
66
67test_expect_success 'not prune locked checkout' '
807e3cac 68 test_when_finished rm -r .git/worktrees &&
23af91d1
NTND
69 mkdir -p .git/worktrees/ghi &&
70 : >.git/worktrees/ghi/locked &&
71 git prune --worktrees &&
72 test -d .git/worktrees/ghi
73'
74
75test_expect_success 'not prune recent checkouts' '
807e3cac 76 test_when_finished rm -r .git/worktrees &&
23af91d1
NTND
77 mkdir zz &&
78 mkdir -p .git/worktrees/jlm &&
79 echo "$(pwd)"/zz >.git/worktrees/jlm/gitdir &&
80 git prune --worktrees --verbose --expire=2.days.ago &&
81 test -d .git/worktrees/jlm
82'
83
84test_done