]> git.ipfire.org Git - thirdparty/git.git/blob - t/t6003-rev-list-topo-order.sh
git-config: fix misworded --type=path explanation
[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 #
330 # this test fails on --topo-order - a fix is required
331 #
332 #test_output_expect_success '--max-age=c3, --topo-order' "git rev-list --topo-order --max-age=$(commit_date c3) l5" <<EOF
333 #l5
334 #l4
335 #l3
336 #a4
337 #c3
338 #b4
339 #a3
340 #a2
341 #EOF
342
343 test_output_expect_success 'one specified head reachable from another a4, c3, --topo-order' "list_duplicates git rev-list --topo-order a4 c3" <<EOF
344 EOF
345
346 test_output_expect_success 'one specified head reachable from another c3, a4, --topo-order' "list_duplicates git rev-list --topo-order c3 a4" <<EOF
347 EOF
348
349 test_output_expect_success 'one specified head reachable from another a4, c3, no --topo-order' "list_duplicates git rev-list a4 c3" <<EOF
350 EOF
351
352 test_output_expect_success 'one specified head reachable from another c3, a4, no --topo-order' "list_duplicates git rev-list c3 a4" <<EOF
353 EOF
354
355 test_output_expect_success 'graph with c3 and a4 parents of head' "list_duplicates git rev-list m1" <<EOF
356 EOF
357
358 test_output_expect_success 'graph with a4 and c3 parents of head' "list_duplicates git rev-list m2" <<EOF
359 EOF
360
361 test_expect_success "head ^head --topo-order" 'git rev-list --topo-order a3 ^a3' <<EOF
362 EOF
363
364 test_expect_success "head ^head no --topo-order" 'git rev-list a3 ^a3' <<EOF
365 EOF
366
367 test_output_expect_success 'simple topo order (l5r1)' 'git rev-list --topo-order l5r1' <<EOF
368 l5r1
369 r1
370 r0
371 alt_root
372 l5
373 l4
374 l3
375 a4
376 c3
377 c2
378 c1
379 b4
380 a3
381 a2
382 a1
383 b3
384 b2
385 b1
386 a0
387 l2
388 l1
389 l0
390 root
391 EOF
392
393 test_output_expect_success 'simple topo order (r1l5)' 'git rev-list --topo-order r1l5' <<EOF
394 r1l5
395 l5
396 l4
397 l3
398 a4
399 c3
400 c2
401 c1
402 b4
403 a3
404 a2
405 a1
406 b3
407 b2
408 b1
409 a0
410 l2
411 l1
412 l0
413 root
414 r1
415 r0
416 alt_root
417 EOF
418
419 test_output_expect_success "don't print things unreachable from one branch" "git rev-list a3 ^b3 --topo-order" <<EOF
420 a3
421 a2
422 a1
423 EOF
424
425 test_output_expect_success "--topo-order a4 l3" "git rev-list --topo-order a4 l3" <<EOF
426 l3
427 a4
428 c3
429 c2
430 c1
431 b4
432 a3
433 a2
434 a1
435 b3
436 b2
437 b1
438 a0
439 l2
440 l1
441 l0
442 root
443 EOF
444
445 #
446 #
447
448 test_done