]>
Commit | Line | Data |
---|---|---|
23af91d1 NTND |
1 | #!/bin/sh |
2 | ||
3 | test_description='prune $GIT_DIR/worktrees' | |
4 | ||
5 | . ./test-lib.sh | |
6 | ||
7 | test_expect_success 'prune --worktrees on normal repo' ' | |
8 | git prune --worktrees && | |
9 | test_must_fail git prune --worktrees abc | |
10 | ' | |
11 | ||
12 | test_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 && | |
17 | Removing worktrees/abc: not a valid directory | |
18 | EOF | |
19 | test_i18ncmp expect actual && | |
20 | ! test -f .git/worktrees/abc && | |
21 | ! test -d .git/worktrees | |
22 | ' | |
23 | ||
24 | test_expect_success 'prune directories without gitdir' ' | |
25 | mkdir -p .git/worktrees/def/abc && | |
26 | : >.git/worktrees/def/def && | |
27 | cat >expect <<EOF && | |
28 | Removing worktrees/def: gitdir file does not exist | |
29 | EOF | |
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 | 36 | test_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 | ||
47 | test_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 | ||
57 | test_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 | ||
67 | test_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 | ||
75 | test_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 | ||
84 | test_done |