]>
Commit | Line | Data |
---|---|---|
94c0956b DS |
1 | #!/bin/sh |
2 | ||
3 | test_description='sparse checkout builtin tests' | |
4 | ||
5 | . ./test-lib.sh | |
6 | ||
7 | test_expect_success 'setup' ' | |
8 | git init repo && | |
9 | ( | |
10 | cd repo && | |
11 | echo "initial" >a && | |
12 | mkdir folder1 folder2 deep && | |
13 | mkdir deep/deeper1 deep/deeper2 && | |
14 | mkdir deep/deeper1/deepest && | |
15 | cp a folder1 && | |
16 | cp a folder2 && | |
17 | cp a deep && | |
18 | cp a deep/deeper1 && | |
19 | cp a deep/deeper2 && | |
20 | cp a deep/deeper1/deepest && | |
21 | git add . && | |
22 | git commit -m "initial commit" | |
23 | ) | |
24 | ' | |
25 | ||
26 | test_expect_success 'git sparse-checkout list (empty)' ' | |
27 | git -C repo sparse-checkout list >list 2>err && | |
28 | test_must_be_empty list && | |
29 | test_i18ngrep "this worktree is not sparse (sparse-checkout file may not exist)" err | |
30 | ' | |
31 | ||
32 | test_expect_success 'git sparse-checkout list (populated)' ' | |
33 | test_when_finished rm -f repo/.git/info/sparse-checkout && | |
34 | cat >repo/.git/info/sparse-checkout <<-EOF && | |
35 | /folder1/* | |
36 | /deep/ | |
37 | **/a | |
38 | !*bin* | |
39 | EOF | |
40 | cp repo/.git/info/sparse-checkout expect && | |
41 | git -C repo sparse-checkout list >list && | |
42 | test_cmp expect list | |
43 | ' | |
44 | ||
bab3c359 DS |
45 | test_expect_success 'git sparse-checkout init' ' |
46 | git -C repo sparse-checkout init && | |
47 | cat >expect <<-EOF && | |
48 | /* | |
49 | !/*/ | |
50 | EOF | |
51 | test_cmp expect repo/.git/info/sparse-checkout && | |
52 | test_cmp_config -C repo true core.sparsecheckout && | |
53 | ls repo >dir && | |
54 | echo a >expect && | |
55 | test_cmp expect dir | |
56 | ' | |
57 | ||
58 | test_expect_success 'git sparse-checkout list after init' ' | |
59 | git -C repo sparse-checkout list >actual && | |
60 | cat >expect <<-EOF && | |
61 | /* | |
62 | !/*/ | |
63 | EOF | |
64 | test_cmp expect actual | |
65 | ' | |
66 | ||
67 | test_expect_success 'init with existing sparse-checkout' ' | |
68 | echo "*folder*" >> repo/.git/info/sparse-checkout && | |
69 | git -C repo sparse-checkout init && | |
70 | cat >expect <<-EOF && | |
71 | /* | |
72 | !/*/ | |
73 | *folder* | |
74 | EOF | |
75 | test_cmp expect repo/.git/info/sparse-checkout && | |
76 | ls repo >dir && | |
77 | cat >expect <<-EOF && | |
78 | a | |
79 | folder1 | |
80 | folder2 | |
81 | EOF | |
82 | test_cmp expect dir | |
83 | ' | |
84 | ||
d89f09c8 DS |
85 | test_expect_success 'clone --sparse' ' |
86 | git clone --sparse repo clone && | |
87 | git -C clone sparse-checkout list >actual && | |
88 | cat >expect <<-EOF && | |
89 | /* | |
90 | !/*/ | |
91 | EOF | |
92 | test_cmp expect actual && | |
93 | ls clone >dir && | |
94 | echo a >expect && | |
95 | test_cmp expect dir | |
96 | ' | |
97 | ||
f6039a94 DS |
98 | test_expect_success 'set enables config' ' |
99 | git init empty-config && | |
100 | ( | |
101 | cd empty-config && | |
102 | test_commit test file && | |
103 | test_path_is_missing .git/config.worktree && | |
104 | test_must_fail git sparse-checkout set nothing && | |
105 | test_path_is_file .git/config.worktree && | |
106 | test_must_fail git config core.sparseCheckout && | |
107 | git sparse-checkout set "/*" && | |
108 | test_cmp_config true core.sparseCheckout | |
109 | ) | |
110 | ' | |
111 | ||
112 | test_expect_success 'set sparse-checkout using builtin' ' | |
113 | git -C repo sparse-checkout set "/*" "!/*/" "*folder*" && | |
114 | cat >expect <<-EOF && | |
115 | /* | |
116 | !/*/ | |
117 | *folder* | |
118 | EOF | |
119 | git -C repo sparse-checkout list >actual && | |
120 | test_cmp expect actual && | |
121 | test_cmp expect repo/.git/info/sparse-checkout && | |
122 | ls repo >dir && | |
123 | cat >expect <<-EOF && | |
124 | a | |
125 | folder1 | |
126 | folder2 | |
127 | EOF | |
128 | test_cmp expect dir | |
129 | ' | |
130 | ||
7bffca95 DS |
131 | test_expect_success 'set sparse-checkout using --stdin' ' |
132 | cat >expect <<-EOF && | |
133 | /* | |
134 | !/*/ | |
135 | /folder1/ | |
136 | /folder2/ | |
137 | EOF | |
138 | git -C repo sparse-checkout set --stdin <expect && | |
139 | git -C repo sparse-checkout list >actual && | |
140 | test_cmp expect actual && | |
141 | test_cmp expect repo/.git/info/sparse-checkout && | |
142 | ls repo >dir && | |
143 | cat >expect <<-EOF && | |
144 | a | |
145 | folder1 | |
146 | folder2 | |
147 | EOF | |
148 | test_cmp expect dir | |
149 | ' | |
150 | ||
879321eb DS |
151 | test_expect_success 'cone mode: match patterns' ' |
152 | git -C repo config --worktree core.sparseCheckoutCone true && | |
153 | rm -rf repo/a repo/folder1 repo/folder2 && | |
96cc8ab5 DS |
154 | git -C repo read-tree -mu HEAD 2>err && |
155 | test_i18ngrep ! "disabling cone patterns" err && | |
879321eb DS |
156 | git -C repo reset --hard && |
157 | ls repo >dir && | |
158 | cat >expect <<-EOF && | |
159 | a | |
160 | folder1 | |
161 | folder2 | |
162 | EOF | |
163 | test_cmp expect dir | |
164 | ' | |
165 | ||
96cc8ab5 DS |
166 | test_expect_success 'cone mode: warn on bad pattern' ' |
167 | test_when_finished mv sparse-checkout repo/.git/info/ && | |
168 | cp repo/.git/info/sparse-checkout . && | |
169 | echo "!/deep/deeper/*" >>repo/.git/info/sparse-checkout && | |
170 | git -C repo read-tree -mu HEAD 2>err && | |
171 | test_i18ngrep "unrecognized negative pattern" err | |
172 | ' | |
173 | ||
72918c1a DS |
174 | test_expect_success 'sparse-checkout disable' ' |
175 | git -C repo sparse-checkout disable && | |
176 | test_path_is_missing repo/.git/info/sparse-checkout && | |
177 | git -C repo config --list >config && | |
178 | test_must_fail git config core.sparseCheckout && | |
179 | ls repo >dir && | |
180 | cat >expect <<-EOF && | |
181 | a | |
182 | deep | |
183 | folder1 | |
184 | folder2 | |
185 | EOF | |
186 | test_cmp expect dir | |
187 | ' | |
188 | ||
94c0956b | 189 | test_done |