test-lib: check Bash version for '-x' without using shell arrays
[git] / t / t6100-rev-list-in-order.sh
1 #!/bin/sh
2
3 test_description='rev-list testing in-commit-order'
4
5 . ./test-lib.sh
6
7 test_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
23 test_expect_success 'rev-list --in-commit-order' '
24         git rev-list --in-commit-order --objects HEAD >actual.raw &&
25         cut -c 1-40 >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
50 test_expect_success 'rev-list lists blobs and trees after commits' '
51         git rev-list --objects HEAD >actual.raw &&
52         cut -c 1-40 >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
77 test_done