tg.sh: handle help -h
[topgit/pro.git] / t / t1300-awk-ref_match.sh
blob5f7a4302426f8b9c87130cbb4c4e41e4c0f6a1c4
1 #!/bin/sh
3 test_description='ref_match.awk functionality'
5 TEST_NO_CREATE_REPO=1
7 . ./test-lib.sh
9 ap="$(tg --awk-path)" && test -n "$ap" && test -d "$ap" || die
10 aprm="$ap/ref_match"
11 test -f "$aprm" && test -r "$aprm" && test -x "$aprm" || die
13 test_plan 21
15 test_expect_success 'ref_match runs' '
16 # some stupid awks might not even compile it
17 awk -f "$aprm" </dev/null
20 test_expect_success 'ref_match normal order' '
21 printf >input "%s" "\
22 refs/1 0001
23 refs/b 000b
24 refs/a 000A
25 refs/3 0003
26 refs/c 000C
27 refs/2 0002
28 " && printf >expect "%s" "\
29 0001 object refs/1
30 0002 object refs/2
31 0003 object refs/3
32 000a object refs/a
33 000b object refs/b
34 000c object refs/c
35 " && awk -f "$aprm" <input >actual &&
36 test_cmp expect actual
39 test_expect_success 'ref_match pckdrefs order' '
40 printf >input "%s" "\
41 0001 refs/1
42 000b refs/b
43 000A refs/a
44 0003 refs/3
45 000C refs/c
46 0002 refs/2
47 " && printf >expect "%s" "\
48 0001 object refs/1
49 0002 object refs/2
50 0003 object refs/3
51 000a object refs/a
52 000b object refs/b
53 000c object refs/c
54 " && awk -v pckdrefs=1 -f "$aprm" <input >actual &&
55 test_cmp expect actual
58 test_expect_success 'ref_match duplicate elimination' '
59 printf >input "%s" "\
60 refs/a 000A
61 refs/1 0001
62 refs/b 000b
63 refs/a 000A
64 refs/3 0003
65 refs/c 000C
66 refs/2 0002
67 refs/b 000B
68 " && printf >expect "%s" "\
69 0001 object refs/1
70 0002 object refs/2
71 0003 object refs/3
72 000a object refs/a
73 000b object refs/b
74 000c object refs/c
75 " && awk -f "$aprm" <input >actual &&
76 test_cmp expect actual
79 test_expect_success 'ref_match duplicate retention' '
80 printf >input "%s" "\
81 refs/a 000A
82 refs/1 0001
83 refs/b 000b
84 refs/a 000A
85 refs/3 0003
86 refs/c 000C
87 refs/2 0002
88 refs/b 000B
89 " && printf >expect "%s" "\
90 0001 object refs/1
91 0002 object refs/2
92 0003 object refs/3
93 000a object refs/a
94 000a object refs/a
95 000b object refs/b
96 000b object refs/b
97 000c object refs/c
98 " && awk -v dupesok=1 -f "$aprm" <input >actual &&
99 test_cmp expect actual
102 test_expect_success 'ref_match formatted output' '
103 printf >input "%s" "\
104 refs/a 000A
105 refs/1 0001
106 refs/b 000b
107 refs/a 000A
108 refs/3 0003
109 refs/c 000C
110 refs/2 0002
111 refs/b 000B
112 " && printf >expect "%s" "\
113 refs/1 <%> 0001
114 object
115 refs/2 <%> 0002
116 object
117 refs/3 <%> 0003
118 object
119 refs/a <%> 000a
120 object
121 refs/b <%> 000b
122 object
123 refs/c <%> 000c
124 object
125 " && awk -v matchfmt="%(refname) %3c%%%3E %(objectname)%0a%(objecttype)" -f "$aprm" <input >actual &&
126 test_cmp expect actual
129 test_expect_success 'ref_match formatted output with repeats' '
130 printf >input "%s" "\
131 refs/a 000A
132 refs/1 0001
133 refs/b 000b
134 refs/a 000A
135 refs/3 0003
136 refs/c 000C
137 refs/2 0002
138 refs/b 000B
139 " && printf >expect "%s" "\
140 refs/1 <%> 0001
141 objectrefs/1
142 refs/2 <%> 0002
143 objectrefs/2
144 refs/3 <%> 0003
145 objectrefs/3
146 refs/a <%> 000a
147 objectrefs/a
148 refs/b <%> 000b
149 objectrefs/b
150 refs/c <%> 000c
151 objectrefs/c
152 " && awk -v matchfmt="%(refname) %3c%%%3E %(objectname)%0a%(objecttype)%(refname)" -f "$aprm" <input >actual &&
153 test_cmp expect actual
156 test_expect_success 'ref_match sort reversed' '
157 printf >input "%s" "\
158 refs/a 000A
159 refs/1 0001
160 refs/b 000b
161 refs/a 000A
162 refs/3 0003
163 refs/c 000C
164 refs/2 0002
165 refs/b 000B
166 " && printf >expect "%s" "\
167 000c object refs/c
168 000b object refs/b
169 000a object refs/a
170 0003 object refs/3
171 0002 object refs/2
172 0001 object refs/1
173 " && awk -v sortkey="-refname" -f "$aprm" <input >actual &&
174 test_cmp expect actual
177 test_expect_success 'ref_match sort reversed with dupes' '
178 printf >input "%s" "\
179 refs/a 000A
180 refs/1 0001
181 refs/b 000b
182 refs/a 000A
183 refs/3 0003
184 refs/c 000C
185 refs/2 0002
186 refs/b 000B
187 " && printf >expect "%s" "\
188 000c object refs/c
189 000b object refs/b
190 000b object refs/b
191 000a object refs/a
192 000a object refs/a
193 0003 object refs/3
194 0002 object refs/2
195 0001 object refs/1
196 " && awk -v sortkey="-refname" -v dupesok=1 -f "$aprm" <input >actual &&
197 test_cmp expect actual
200 test_expect_success 'ref_match one exact pattern' '
201 printf >input "%s" "\
202 refs/a 000A
203 refs/1 0001
204 refs/b 000b
205 refs/a 000A
206 refs/3 0003
207 refs/c 000C
208 refs/2 0002
209 refs/b 000B
210 " && printf >expect "%s" "\
211 000a object refs/a
212 " && awk -v patterns="refs/a" -f "$aprm" <input >actual &&
213 test_cmp expect actual
216 test_expect_success 'ref_match one exact pattern one input' '
217 printf >input "%s" "\
218 refs/a 000a
219 " && printf >expect "%s" "\
220 000a object refs/a
221 " && awk -v patterns="refs/a" -f "$aprm" <input >actual &&
222 test_cmp expect actual
225 test_expect_success 'ref_match one exact pattern one input with slash' '
226 printf >input "%s" "\
227 refs/a 000a
228 " && printf >expect "%s" "\
229 000a object refs/a
230 " && awk -v patterns="refs/a/" -f "$aprm" <input >actual &&
231 test_cmp expect actual
234 test_expect_success 'ref_match one prefix pattern' '
235 printf >input "%s" "\
236 refs/l/a 000A
237 refs/n/1 0001
238 refs/l/b 000b
239 refs/l/a 000A
240 refs/n/3 0003
241 refs/l/c 000C
242 refs/n/2 0002
243 refs/l/b 000B
244 " && printf >expect "%s" "\
245 000a object refs/l/a
246 000b object refs/l/b
247 000c object refs/l/c
248 " && awk -v patterns="refs/l" -f "$aprm" <input >actual &&
249 test_cmp expect actual
251 test_expect_success 'ref_match two patterns' '
252 printf >input "%s" "\
253 refs/l/a 000A
254 refs/n/1 0001
255 refs/l/b 000b
256 refs/l/a 000A
257 refs/n/3 0003
258 refs/l/c 000C
259 refs/n/2 0002
260 refs/l/b 000B
261 " && printf >expect "%s" "\
262 000a object refs/l/a
263 000b object refs/l/b
264 000c object refs/l/c
265 0001 object refs/n/1
266 0002 object refs/n/2
267 0003 object refs/n/3
268 " && awk -v patterns="refs/n refs/l" -f "$aprm" <input >actual &&
269 test_cmp expect actual
272 test_expect_success 'ref_match output limit' '
273 printf >input "%s" "\
274 refs/l/a 000A
275 refs/n/1 0001
276 refs/l/b 000b
277 refs/l/a 000A
278 refs/n/3 0003
279 refs/l/c 000C
280 refs/n/2 0002
281 refs/l/b 000B
282 " && printf >expect "%s" "\
283 000a object refs/l/a
284 000b object refs/l/b
285 000c object refs/l/c
286 0001 object refs/n/1
287 " && awk -v patterns="refs/n refs/l" -v maxout=4 -f "$aprm" <input >actual &&
288 test_cmp expect actual
291 test_expect_success 'ref_match objectname sort' '
292 printf >input "%s" "\
293 refs/l/a 000A
294 refs/n/1 000a
295 refs/l/b 000b
296 refs/l/a 000A
297 refs/n/3 0003
298 refs/l/c 000C
299 refs/n/2 0002
300 refs/l/b 000B
301 " && printf >expect "%s" "\
302 0002 object refs/n/2
303 0003 object refs/n/3
304 000a object refs/l/a
305 000a object refs/n/1
306 000b object refs/l/b
307 000c object refs/l/c
308 " && awk -v sortkey="objectname" -f "$aprm" <input >actual &&
309 test_cmp expect actual
312 test_expect_success 'ref_match objectname sort with dupes' '
313 printf >input "%s" "\
314 refs/l/a 000A
315 refs/n/1 000a
316 refs/l/b 000b
317 refs/l/a 000A
318 refs/n/3 0003
319 refs/l/c 000C
320 refs/n/2 0002
321 refs/l/b 000B
322 " && printf >expect "%s" "\
323 0002 object refs/n/2
324 0003 object refs/n/3
325 000a object refs/l/a
326 000a object refs/l/a
327 000a object refs/n/1
328 000b object refs/l/b
329 000b object refs/l/b
330 000c object refs/l/c
331 " && awk -v sortkey="objectname" -v dupesok=1 -f "$aprm" <input >actual &&
332 test_cmp expect actual
335 test_expect_success 'ref_match objectname sort with dupes reversed' '
336 printf >input "%s" "\
337 refs/l/a 000A
338 refs/n/1 000a
339 refs/l/b 000b
340 refs/l/a 000A
341 refs/n/3 0003
342 refs/l/c 000C
343 refs/n/2 0002
344 refs/l/b 000B
345 " && printf >expect "%s" "\
346 000c object refs/l/c
347 000b object refs/l/b
348 000b object refs/l/b
349 000a object refs/l/a
350 000a object refs/l/a
351 000a object refs/n/1
352 0003 object refs/n/3
353 0002 object refs/n/2
354 " && awk -v sortkey="-objectname" -v dupesok=1 -f "$aprm" <input >actual &&
355 test_cmp expect actual
358 test_expect_success 'ref_match -refname,-objectname sort with dupes' '
359 printf >input "%s" "\
360 refs/l/a 000A
361 refs/n/1 000a
362 refs/l/b 000b
363 refs/l/a 000A
364 refs/n/3 0003
365 refs/l/c 000C
366 refs/n/2 0002
367 refs/l/b 000B
368 " && printf >expect "%s" "\
369 000c object refs/l/c
370 000b object refs/l/b
371 000b object refs/l/b
372 000a object refs/n/1
373 000a object refs/l/a
374 000a object refs/l/a
375 0003 object refs/n/3
376 0002 object refs/n/2
377 " && awk -v sortkey="-refname,-objectname" -v dupesok=1 -f "$aprm" <input >actual &&
378 test_cmp expect actual
381 test_expect_success 'ref_match -refname,-objectname sort no dupes' '
382 printf >input "%s" "\
383 refs/l/a 000A
384 refs/n/1 000a
385 refs/l/b 000b
386 refs/l/a 000A
387 refs/n/3 0003
388 refs/l/c 000C
389 refs/n/2 0002
390 refs/l/b 000B
391 " && printf >expect "%s" "\
392 000c object refs/l/c
393 000b object refs/l/b
394 000a object refs/n/1
395 000a object refs/l/a
396 0003 object refs/n/3
397 0002 object refs/n/2
398 " && awk -v sortkey="-refname,-objectname" -f "$aprm" <input >actual &&
399 test_cmp expect actual
402 test_expect_success 'ref_match -refname,objectname sort no dupes' '
403 printf >input "%s" "\
404 refs/l/a 000A
405 refs/n/1 000a
406 refs/l/b 000b
407 refs/l/a 000A
408 refs/n/3 0003
409 refs/l/c 000C
410 refs/n/2 0002
411 refs/l/b 000B
412 " && printf >expect "%s" "\
413 0002 object refs/n/2
414 0003 object refs/n/3
415 000a object refs/n/1
416 000a object refs/l/a
417 000b object refs/l/b
418 000c object refs/l/c
419 " && awk -v sortkey="-refname,objectname" -f "$aprm" <input >actual &&
420 test_cmp expect actual
423 test_done