]>
Commit | Line | Data |
---|---|---|
caf3827e JH |
1 | #!/bin/sh |
2 | ||
3 | test_description='git rev-list using object filtering' | |
4 | ||
5 | . ./test-lib.sh | |
6 | ||
7 | # Test the blob:none filter. | |
8 | ||
9 | test_expect_success 'setup r1' ' | |
10 | echo "{print \$1}" >print_1.awk && | |
11 | echo "{print \$2}" >print_2.awk && | |
12 | ||
13 | git init r1 && | |
14 | for n in 1 2 3 4 5 | |
15 | do | |
16 | echo "This is file: $n" > r1/file.$n | |
17 | git -C r1 add file.$n | |
18 | git -C r1 commit -m "$n" | |
19 | done | |
20 | ' | |
21 | ||
22 | test_expect_success 'verify blob:none omits all 5 blobs' ' | |
bdbc17e8 MD |
23 | git -C r1 ls-files -s file.1 file.2 file.3 file.4 file.5 | |
24 | awk -f print_2.awk | | |
25 | sort >expected && | |
26 | ||
27 | git -C r1 rev-list HEAD --quiet --objects --filter-print-omitted --filter=blob:none | | |
28 | awk -f print_1.awk | | |
29 | sed "s/~//" | | |
30 | sort >observed && | |
31 | ||
dcbaa0b3 | 32 | test_cmp expected observed |
caf3827e JH |
33 | ' |
34 | ||
35 | test_expect_success 'verify emitted+omitted == all' ' | |
bdbc17e8 MD |
36 | git -C r1 rev-list HEAD --objects | |
37 | awk -f print_1.awk | | |
38 | sort >expected && | |
39 | ||
40 | git -C r1 rev-list HEAD --objects --filter-print-omitted --filter=blob:none | | |
41 | awk -f print_1.awk | | |
42 | sed "s/~//" | | |
43 | sort >observed && | |
44 | ||
dcbaa0b3 | 45 | test_cmp expected observed |
caf3827e JH |
46 | ' |
47 | ||
48 | ||
49 | # Test blob:limit=<n>[kmg] filter. | |
50 | # We boundary test around the size parameter. The filter is strictly less than | |
51 | # the value, so size 500 and 1000 should have the same results, but 1001 should | |
52 | # filter more. | |
53 | ||
54 | test_expect_success 'setup r2' ' | |
55 | git init r2 && | |
56 | for n in 1000 10000 | |
57 | do | |
58 | printf "%"$n"s" X > r2/large.$n | |
59 | git -C r2 add large.$n | |
60 | git -C r2 commit -m "$n" | |
61 | done | |
62 | ' | |
63 | ||
64 | test_expect_success 'verify blob:limit=500 omits all blobs' ' | |
bdbc17e8 MD |
65 | git -C r2 ls-files -s large.1000 large.10000 | |
66 | awk -f print_2.awk | | |
67 | sort >expected && | |
68 | ||
69 | git -C r2 rev-list HEAD --quiet --objects --filter-print-omitted --filter=blob:limit=500 | | |
70 | awk -f print_1.awk | | |
71 | sed "s/~//" | | |
72 | sort >observed && | |
73 | ||
dcbaa0b3 | 74 | test_cmp expected observed |
caf3827e JH |
75 | ' |
76 | ||
77 | test_expect_success 'verify emitted+omitted == all' ' | |
bdbc17e8 MD |
78 | git -C r2 rev-list HEAD --objects | |
79 | awk -f print_1.awk | | |
80 | sort >expected && | |
81 | ||
82 | git -C r2 rev-list HEAD --objects --filter-print-omitted --filter=blob:limit=500 | | |
83 | awk -f print_1.awk | | |
84 | sed "s/~//" | | |
85 | sort >observed && | |
86 | ||
dcbaa0b3 | 87 | test_cmp expected observed |
caf3827e JH |
88 | ' |
89 | ||
90 | test_expect_success 'verify blob:limit=1000' ' | |
bdbc17e8 MD |
91 | git -C r2 ls-files -s large.1000 large.10000 | |
92 | awk -f print_2.awk | | |
93 | sort >expected && | |
94 | ||
95 | git -C r2 rev-list HEAD --quiet --objects --filter-print-omitted --filter=blob:limit=1000 | | |
96 | awk -f print_1.awk | | |
97 | sed "s/~//" | | |
98 | sort >observed && | |
99 | ||
dcbaa0b3 | 100 | test_cmp expected observed |
caf3827e JH |
101 | ' |
102 | ||
103 | test_expect_success 'verify blob:limit=1001' ' | |
bdbc17e8 MD |
104 | git -C r2 ls-files -s large.10000 | |
105 | awk -f print_2.awk | | |
106 | sort >expected && | |
107 | ||
108 | git -C r2 rev-list HEAD --quiet --objects --filter-print-omitted --filter=blob:limit=1001 | | |
109 | awk -f print_1.awk | | |
110 | sed "s/~//" | | |
111 | sort >observed && | |
112 | ||
dcbaa0b3 | 113 | test_cmp expected observed |
caf3827e JH |
114 | ' |
115 | ||
116 | test_expect_success 'verify blob:limit=1k' ' | |
bdbc17e8 MD |
117 | git -C r2 ls-files -s large.10000 | |
118 | awk -f print_2.awk | | |
119 | sort >expected && | |
120 | ||
121 | git -C r2 rev-list HEAD --quiet --objects --filter-print-omitted --filter=blob:limit=1k | | |
122 | awk -f print_1.awk | | |
123 | sed "s/~//" | | |
124 | sort >observed && | |
125 | ||
dcbaa0b3 | 126 | test_cmp expected observed |
caf3827e JH |
127 | ' |
128 | ||
129 | test_expect_success 'verify blob:limit=1m' ' | |
bdbc17e8 MD |
130 | git -C r2 rev-list HEAD --quiet --objects --filter-print-omitted --filter=blob:limit=1m | |
131 | awk -f print_1.awk | | |
132 | sed "s/~//" | | |
133 | sort >observed && | |
134 | ||
1c5e94f4 | 135 | test_must_be_empty observed |
caf3827e JH |
136 | ' |
137 | ||
138 | # Test sparse:path=<path> filter. | |
139 | # Use a local file containing a sparse-checkout specification to filter | |
140 | # out blobs not required for the corresponding sparse-checkout. We do not | |
141 | # require sparse-checkout to actually be enabled. | |
142 | ||
143 | test_expect_success 'setup r3' ' | |
144 | git init r3 && | |
145 | mkdir r3/dir1 && | |
146 | for n in sparse1 sparse2 | |
147 | do | |
148 | echo "This is file: $n" > r3/$n | |
149 | git -C r3 add $n | |
150 | echo "This is file: dir1/$n" > r3/dir1/$n | |
151 | git -C r3 add dir1/$n | |
152 | done && | |
153 | git -C r3 commit -m "sparse" && | |
154 | echo dir1/ >pattern1 && | |
155 | echo sparse1 >pattern2 | |
156 | ' | |
157 | ||
158 | test_expect_success 'verify sparse:path=pattern1 omits top-level files' ' | |
bdbc17e8 MD |
159 | git -C r3 ls-files -s sparse1 sparse2 | |
160 | awk -f print_2.awk | | |
161 | sort >expected && | |
162 | ||
163 | git -C r3 rev-list HEAD --quiet --objects --filter-print-omitted --filter=sparse:path=../pattern1 | | |
164 | awk -f print_1.awk | | |
165 | sed "s/~//" | | |
166 | sort >observed && | |
167 | ||
dcbaa0b3 | 168 | test_cmp expected observed |
caf3827e JH |
169 | ' |
170 | ||
171 | test_expect_success 'verify sparse:path=pattern2 omits both sparse2 files' ' | |
bdbc17e8 MD |
172 | git -C r3 ls-files -s sparse2 dir1/sparse2 | |
173 | awk -f print_2.awk | | |
174 | sort >expected && | |
175 | ||
176 | git -C r3 rev-list HEAD --quiet --objects --filter-print-omitted --filter=sparse:path=../pattern2 | | |
177 | awk -f print_1.awk | | |
178 | sed "s/~//" | | |
179 | sort >observed && | |
180 | ||
dcbaa0b3 | 181 | test_cmp expected observed |
caf3827e JH |
182 | ' |
183 | ||
184 | # Test sparse:oid=<oid-ish> filter. | |
185 | # Like sparse:path, but we get the sparse-checkout specification from | |
186 | # a blob rather than a file on disk. | |
187 | ||
188 | test_expect_success 'setup r3 part 2' ' | |
189 | echo dir1/ >r3/pattern && | |
190 | git -C r3 add pattern && | |
191 | git -C r3 commit -m "pattern" | |
192 | ' | |
193 | ||
194 | test_expect_success 'verify sparse:oid=OID omits top-level files' ' | |
bdbc17e8 MD |
195 | git -C r3 ls-files -s pattern sparse1 sparse2 | |
196 | awk -f print_2.awk | | |
197 | sort >expected && | |
198 | ||
caf3827e | 199 | oid=$(git -C r3 ls-files -s pattern | awk -f print_2.awk) && |
bdbc17e8 MD |
200 | |
201 | git -C r3 rev-list HEAD --quiet --objects --filter-print-omitted --filter=sparse:oid=$oid | | |
202 | awk -f print_1.awk | | |
203 | sed "s/~//" | | |
204 | sort >observed && | |
205 | ||
dcbaa0b3 | 206 | test_cmp expected observed |
caf3827e JH |
207 | ' |
208 | ||
209 | test_expect_success 'verify sparse:oid=oid-ish omits top-level files' ' | |
bdbc17e8 MD |
210 | git -C r3 ls-files -s pattern sparse1 sparse2 | |
211 | awk -f print_2.awk | | |
212 | sort >expected && | |
213 | ||
214 | git -C r3 rev-list HEAD --quiet --objects --filter-print-omitted --filter=sparse:oid=master:pattern | | |
215 | awk -f print_1.awk | | |
216 | sed "s/~//" | | |
217 | sort >observed && | |
218 | ||
dcbaa0b3 | 219 | test_cmp expected observed |
caf3827e JH |
220 | ' |
221 | ||
222 | # Delete some loose objects and use rev-list, but WITHOUT any filtering. | |
223 | # This models previously omitted objects that we did not receive. | |
224 | ||
225 | test_expect_success 'rev-list W/ --missing=print' ' | |
bdbc17e8 MD |
226 | git -C r1 ls-files -s file.1 file.2 file.3 file.4 file.5 | |
227 | awk -f print_2.awk | | |
228 | sort >expected && | |
229 | ||
caf3827e JH |
230 | for id in `cat expected | sed "s|..|&/|"` |
231 | do | |
232 | rm r1/.git/objects/$id | |
233 | done && | |
bdbc17e8 MD |
234 | |
235 | git -C r1 rev-list --quiet HEAD --missing=print --objects | | |
236 | awk -f print_1.awk | | |
237 | sed "s/?//" | | |
238 | sort >observed && | |
239 | ||
dcbaa0b3 | 240 | test_cmp expected observed |
caf3827e JH |
241 | ' |
242 | ||
243 | test_expect_success 'rev-list W/O --missing fails' ' | |
244 | test_must_fail git -C r1 rev-list --quiet --objects HEAD | |
245 | ' | |
246 | ||
247 | test_expect_success 'rev-list W/ missing=allow-any' ' | |
248 | git -C r1 rev-list --quiet --missing=allow-any --objects HEAD | |
249 | ' | |
250 | ||
251 | test_done |