1#!/bin/sh
2
3test_description='rev-list testing in-commit-order'
4
5. ./test-lib.sh
6
7test_expect_success 'setup a commit history with trees, blobs' '
8	for x in one two three four
9	do
10		echo $x >$x &&
11		git add $x &&
12		git commit -m "add file $x" ||
13		return 1
14	done &&
15	for x in four three
16	do
17		git rm $x &&
18		git commit -m "remove $x" ||
19		return 1
20	done
21'
22
23test_expect_success 'rev-list --in-commit-order' '
24	git rev-list --in-commit-order --objects HEAD >actual.raw &&
25	cut -d" " -f1 >actual <actual.raw &&
26
27	git cat-file --batch-check="%(objectname)" >expect.raw <<-\EOF &&
28		HEAD^{commit}
29		HEAD^{tree}
30		HEAD^{tree}:one
31		HEAD^{tree}:two
32		HEAD~1^{commit}
33		HEAD~1^{tree}
34		HEAD~1^{tree}:three
35		HEAD~2^{commit}
36		HEAD~2^{tree}
37		HEAD~2^{tree}:four
38		HEAD~3^{commit}
39		# HEAD~3^{tree} skipped, same as HEAD~1^{tree}
40		HEAD~4^{commit}
41		# HEAD~4^{tree} skipped, same as HEAD^{tree}
42		HEAD~5^{commit}
43		HEAD~5^{tree}
44	EOF
45	grep -v "#" >expect <expect.raw &&
46
47	test_cmp expect actual
48'
49
50test_expect_success 'rev-list lists blobs and trees after commits' '
51	git rev-list --objects HEAD >actual.raw &&
52	cut -d" " -f1 >actual <actual.raw &&
53
54	git cat-file --batch-check="%(objectname)" >expect.raw <<-\EOF &&
55		HEAD^{commit}
56		HEAD~1^{commit}
57		HEAD~2^{commit}
58		HEAD~3^{commit}
59		HEAD~4^{commit}
60		HEAD~5^{commit}
61		HEAD^{tree}
62		HEAD^{tree}:one
63		HEAD^{tree}:two
64		HEAD~1^{tree}
65		HEAD~1^{tree}:three
66		HEAD~2^{tree}
67		HEAD~2^{tree}:four
68		# HEAD~3^{tree} skipped, same as HEAD~1^{tree}
69		# HEAD~4^{tree} skipped, same as HEAD^{tree}
70		HEAD~5^{tree}
71	EOF
72	grep -v "#" >expect <expect.raw &&
73
74	test_cmp expect actual
75'
76
77test_done
78