]> git.ipfire.org Git - thirdparty/git.git/blob - t/t6003-rev-list-topo-order.sh
The third batch
[thirdparty/git.git] / t / t6003-rev-list-topo-order.sh
1 #!/bin/sh
2 #
3 # Copyright (c) 2005 Jon Seymour
4 #
5
6 test_description='Tests git rev-list --topo-order functionality'
7
8 TEST_PASSES_SANITIZE_LEAK=true
9 . ./test-lib.sh
10 . "$TEST_DIRECTORY"/lib-t6000.sh # t6xxx specific functions
11
12 list_duplicates()
13 {
14 "$@" | sort | uniq -d
15 }
16
17 date >path0
18 git update-index --add path0
19 save_tag tree git write-tree
20 on_dates "00:00" "00:00" hide_error save_tag root unique_commit root tree
21 on_dates "00:01" "00:01" save_tag l0 unique_commit l0 tree -p root
22 on_dates "00:02" "00:02" save_tag l1 unique_commit l1 tree -p l0
23 on_dates "00:03" "00:03" save_tag l2 unique_commit l2 tree -p l1
24 on_dates "00:04" "00:04" save_tag a0 unique_commit a0 tree -p l2
25 on_dates "00:05" "00:05" save_tag a1 unique_commit a1 tree -p a0
26 on_dates "00:06" "00:06" save_tag b1 unique_commit b1 tree -p a0
27 on_dates "00:07" "00:07" save_tag c1 unique_commit c1 tree -p b1
28 on_dates "00:08" "00:08" as_author foobar@example.com save_tag b2 unique_commit b2 tree -p b1
29 on_dates "00:09" "00:09" save_tag b3 unique_commit b3 tree -p b2
30 on_dates "00:10" "00:10" save_tag c2 unique_commit c2 tree -p c1 -p b2
31 on_dates "00:11" "00:11" save_tag c3 unique_commit c3 tree -p c2
32 on_dates "00:12" "00:00" save_tag a2 unique_commit a2 tree -p a1
33 on_dates "00:13" "00:01" save_tag a3 unique_commit a3 tree -p a2
34 on_dates "00:14" "00:14" save_tag b4 unique_commit b4 tree -p b3 -p a3
35 on_dates "00:15" "00:15" save_tag a4 unique_commit a4 tree -p a3 -p b4 -p c3
36 on_dates "00:16" "00:16" save_tag l3 unique_commit l3 tree -p a4
37 on_dates "00:17" "00:17" save_tag l4 unique_commit l4 tree -p l3
38 on_dates "00:18" "00:18" save_tag l5 unique_commit l5 tree -p l4
39 on_dates "00:19" "00:19" save_tag m1 unique_commit m1 tree -p a4 -p c3
40 on_dates "00:20" "00:20" save_tag m2 unique_commit m2 tree -p c3 -p a4
41 on_dates "00:21" "00:21" hide_error save_tag alt_root unique_commit alt_root tree
42 on_dates "00:22" "00:22" save_tag r0 unique_commit r0 tree -p alt_root
43 on_dates "00:23" "00:23" save_tag r1 unique_commit r1 tree -p r0
44 on_dates "00:24" "00:24" save_tag l5r1 unique_commit l5r1 tree -p l5 -p r1
45 on_dates "00:25" "00:25" save_tag r1l5 unique_commit r1l5 tree -p r1 -p l5
46
47
48 hide_error save_tag e1 as_author e@example.com unique_commit e1 tree
49 save_tag e2 as_author e@example.com unique_commit e2 tree -p e1
50 save_tag f1 as_author f@example.com unique_commit f1 tree -p e1
51 save_tag e3 as_author e@example.com unique_commit e3 tree -p e2
52 save_tag f2 as_author f@example.com unique_commit f2 tree -p f1
53 save_tag e4 as_author e@example.com unique_commit e4 tree -p e3 -p f2
54 save_tag e5 as_author e@example.com unique_commit e5 tree -p e4
55 save_tag f3 as_author f@example.com unique_commit f3 tree -p f2
56 save_tag f4 as_author f@example.com unique_commit f4 tree -p f3
57 save_tag e6 as_author e@example.com unique_commit e6 tree -p e5 -p f4
58 save_tag f5 as_author f@example.com unique_commit f5 tree -p f4
59 save_tag f6 as_author f@example.com unique_commit f6 tree -p f5 -p e6
60 save_tag e7 as_author e@example.com unique_commit e7 tree -p e6
61 save_tag e8 as_author e@example.com unique_commit e8 tree -p e7
62 save_tag e9 as_author e@example.com unique_commit e9 tree -p e8
63 save_tag f7 as_author f@example.com unique_commit f7 tree -p f6
64 save_tag f8 as_author f@example.com unique_commit f8 tree -p f7
65 save_tag f9 as_author f@example.com unique_commit f9 tree -p f8
66 save_tag e10 as_author e@example.com unique_commit e1 tree -p e9 -p f8
67
68 hide_error save_tag g0 unique_commit g0 tree
69 save_tag g1 unique_commit g1 tree -p g0
70 save_tag h1 unique_commit g2 tree -p g0
71 save_tag g2 unique_commit g3 tree -p g1 -p h1
72 save_tag h2 unique_commit g4 tree -p g2
73 save_tag g3 unique_commit g5 tree -p g2
74 save_tag g4 unique_commit g6 tree -p g3 -p h2
75
76 git update-ref HEAD $(tag l5)
77
78 test_output_expect_success 'rev-list has correct number of entries' 'git rev-list HEAD | wc -l | tr -d \" \"' <<EOF
79 19
80 EOF
81
82 test_output_expect_success 'simple topo order' 'git rev-list --topo-order HEAD' <<EOF
83 l5
84 l4
85 l3
86 a4
87 c3
88 c2
89 c1
90 b4
91 a3
92 a2
93 a1
94 b3
95 b2
96 b1
97 a0
98 l2
99 l1
100 l0
101 root
102 EOF
103
104 test_output_expect_success 'simple date order' 'git rev-list --date-order HEAD' <<EOF
105 l5
106 l4
107 l3
108 a4
109 b4
110 a3
111 a2
112 c3
113 c2
114 b3
115 b2
116 c1
117 b1
118 a1
119 a0
120 l2
121 l1
122 l0
123 root
124 EOF
125
126 test_output_expect_success 'simple author-date order' 'git rev-list --author-date-order HEAD' <<EOF
127 l5
128 l4
129 l3
130 a4
131 b4
132 c3
133 c2
134 b3
135 b2
136 c1
137 b1
138 a3
139 a2
140 a1
141 a0
142 l2
143 l1
144 l0
145 root
146 EOF
147
148 test_output_expect_success 'two diamonds topo order (g6)' 'git rev-list --topo-order g4' <<EOF
149 g4
150 h2
151 g3
152 g2
153 h1
154 g1
155 g0
156 EOF
157
158 test_output_expect_success 'multiple heads' 'git rev-list --topo-order a3 b3 c3' <<EOF
159 a3
160 a2
161 a1
162 c3
163 c2
164 c1
165 b3
166 b2
167 b1
168 a0
169 l2
170 l1
171 l0
172 root
173 EOF
174
175 test_output_expect_success 'multiple heads, prune at a1' 'git rev-list --topo-order a3 b3 c3 ^a1' <<EOF
176 a3
177 a2
178 c3
179 c2
180 c1
181 b3
182 b2
183 b1
184 EOF
185
186 test_output_expect_success 'multiple heads, prune at l1' 'git rev-list --topo-order a3 b3 c3 ^l1' <<EOF
187 a3
188 a2
189 a1
190 c3
191 c2
192 c1
193 b3
194 b2
195 b1
196 a0
197 l2
198 EOF
199
200 test_output_expect_success 'cross-epoch, head at l5, prune at l1' 'git rev-list --topo-order l5 ^l1' <<EOF
201 l5
202 l4
203 l3
204 a4
205 c3
206 c2
207 c1
208 b4
209 a3
210 a2
211 a1
212 b3
213 b2
214 b1
215 a0
216 l2
217 EOF
218
219 test_output_expect_success 'duplicated head arguments' 'git rev-list --topo-order l5 l5 ^l1' <<EOF
220 l5
221 l4
222 l3
223 a4
224 c3
225 c2
226 c1
227 b4
228 a3
229 a2
230 a1
231 b3
232 b2
233 b1
234 a0
235 l2
236 EOF
237
238 test_output_expect_success 'prune near topo' 'git rev-list --topo-order a4 ^c3' <<EOF
239 a4
240 b4
241 a3
242 a2
243 a1
244 b3
245 EOF
246
247 test_output_expect_success "head has no parent" 'git rev-list --topo-order root' <<EOF
248 root
249 EOF
250
251 test_output_expect_success "two nodes - one head, one base" 'git rev-list --topo-order l0' <<EOF
252 l0
253 root
254 EOF
255
256 test_output_expect_success "three nodes one head, one internal, one base" 'git rev-list --topo-order l1' <<EOF
257 l1
258 l0
259 root
260 EOF
261
262 test_output_expect_success "linear prune l2 ^root" 'git rev-list --topo-order l2 ^root' <<EOF
263 l2
264 l1
265 l0
266 EOF
267
268 test_output_expect_success "linear prune l2 ^l0" 'git rev-list --topo-order l2 ^l0' <<EOF
269 l2
270 l1
271 EOF
272
273 test_output_expect_success "linear prune l2 ^l1" 'git rev-list --topo-order l2 ^l1' <<EOF
274 l2
275 EOF
276
277 test_output_expect_success "linear prune l5 ^a4" 'git rev-list --topo-order l5 ^a4' <<EOF
278 l5
279 l4
280 l3
281 EOF
282
283 test_output_expect_success "linear prune l5 ^l3" 'git rev-list --topo-order l5 ^l3' <<EOF
284 l5
285 l4
286 EOF
287
288 test_output_expect_success "linear prune l5 ^l4" 'git rev-list --topo-order l5 ^l4' <<EOF
289 l5
290 EOF
291
292 test_output_expect_success "max-count 10 - topo order" 'git rev-list --topo-order --max-count=10 l5' <<EOF
293 l5
294 l4
295 l3
296 a4
297 c3
298 c2
299 c1
300 b4
301 a3
302 a2
303 EOF
304
305 test_output_expect_success "max-count 10 - non topo order" 'git rev-list --max-count=10 l5' <<EOF
306 l5
307 l4
308 l3
309 a4
310 b4
311 a3
312 a2
313 c3
314 c2
315 b3
316 EOF
317
318 test_output_expect_success '--max-age=c3, no --topo-order' "git rev-list --max-age=$(commit_date c3) l5" <<EOF
319 l5
320 l4
321 l3
322 a4
323 b4
324 a3
325 a2
326 c3
327 EOF
328
329 test_output_expect_success '--max-age=c3, --topo-order' "git rev-list --topo-order --max-age=$(commit_date c3) l5" <<EOF
330 l5
331 l4
332 l3
333 a4
334 c3
335 b4
336 a3
337 a2
338 EOF
339
340 test_output_expect_success 'one specified head reachable from another a4, c3, --topo-order' "list_duplicates git rev-list --topo-order a4 c3" <<EOF
341 EOF
342
343 test_output_expect_success 'one specified head reachable from another c3, a4, --topo-order' "list_duplicates git rev-list --topo-order c3 a4" <<EOF
344 EOF
345
346 test_output_expect_success 'one specified head reachable from another a4, c3, no --topo-order' "list_duplicates git rev-list a4 c3" <<EOF
347 EOF
348
349 test_output_expect_success 'one specified head reachable from another c3, a4, no --topo-order' "list_duplicates git rev-list c3 a4" <<EOF
350 EOF
351
352 test_output_expect_success 'graph with c3 and a4 parents of head' "list_duplicates git rev-list m1" <<EOF
353 EOF
354
355 test_output_expect_success 'graph with a4 and c3 parents of head' "list_duplicates git rev-list m2" <<EOF
356 EOF
357
358 test_expect_success "head ^head --topo-order" 'git rev-list --topo-order a3 ^a3' <<EOF
359 EOF
360
361 test_expect_success "head ^head no --topo-order" 'git rev-list a3 ^a3' <<EOF
362 EOF
363
364 test_output_expect_success 'simple topo order (l5r1)' 'git rev-list --topo-order l5r1' <<EOF
365 l5r1
366 r1
367 r0
368 alt_root
369 l5
370 l4
371 l3
372 a4
373 c3
374 c2
375 c1
376 b4
377 a3
378 a2
379 a1
380 b3
381 b2
382 b1
383 a0
384 l2
385 l1
386 l0
387 root
388 EOF
389
390 test_output_expect_success 'simple topo order (r1l5)' 'git rev-list --topo-order r1l5' <<EOF
391 r1l5
392 l5
393 l4
394 l3
395 a4
396 c3
397 c2
398 c1
399 b4
400 a3
401 a2
402 a1
403 b3
404 b2
405 b1
406 a0
407 l2
408 l1
409 l0
410 root
411 r1
412 r0
413 alt_root
414 EOF
415
416 test_output_expect_success "don't print things unreachable from one branch" "git rev-list a3 ^b3 --topo-order" <<EOF
417 a3
418 a2
419 a1
420 EOF
421
422 test_output_expect_success "--topo-order a4 l3" "git rev-list --topo-order a4 l3" <<EOF
423 l3
424 a4
425 c3
426 c2
427 c1
428 b4
429 a3
430 a2
431 a1
432 b3
433 b2
434 b1
435 a0
436 l2
437 l1
438 l0
439 root
440 EOF
441
442 #
443 #
444
445 test_done