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