[PATCH] read-tree --emu23.
[git/dscho.git] / t / t6001-rev-list-merge-order.sh
blob35f167622472354b34b7cc4ed39a805a63e9ace6
1 #!/bin/sh
3 # Copyright (c) 2005 Jon Seymour
6 test_description='Test rev-list --merge-order
8 . ./test-lib.sh
10 function do_commit
12 git-commit-tree "$@" </dev/null
15 function check_adjacency
17 read previous
18 echo "= $previous"
19 while read next
21 if ! (git-cat-file commit $previous | grep "^parent $next" >/dev/null)
22 then
23 echo "^ $next"
24 else
25 echo "| $next"
27 previous=$next
28 done
31 function sed_script
33 for c in root a0 a1 a2 a3 a4 b1 b2 b3 b4 c1 c2 c3 l0 l1 l2 l3 l4 l5
35 echo -n "s/${!c}/$c/;"
36 done
39 date >path0
40 git-update-cache --add path0
41 tree=$(git-write-tree)
42 root=$(do_commit $tree 2>/dev/null)
43 export GIT_COMMITTER_NAME=foobar # to guarantee that the commit is different
44 l0=$(do_commit $tree -p $root)
45 l1=$(do_commit $tree -p $l0)
46 l2=$(do_commit $tree -p $l1)
47 a0=$(do_commit $tree -p $l2)
48 a1=$(do_commit $tree -p $a0)
49 export GIT_COMMITTER_NAME=foobar2 # to guarantee that the commit is different
50 b1=$(do_commit $tree -p $a0)
51 c1=$(do_commit $tree -p $b1)
52 export GIT_COMMITTER_NAME=foobar3 # to guarantee that the commit is different
53 b2=$(do_commit $tree -p $b1)
54 b3=$(do_commit $tree -p $b2)
55 c2=$(do_commit $tree -p $c1 -p $b2)
56 c3=$(do_commit $tree -p $c2)
57 a2=$(do_commit $tree -p $a1)
58 a3=$(do_commit $tree -p $a2)
59 b4=$(do_commit $tree -p $b3 -p $a3)
60 a4=$(do_commit $tree -p $a3 -p $b4 -p $c3)
61 l3=$(do_commit $tree -p $a4)
62 l4=$(do_commit $tree -p $l3)
63 l5=$(do_commit $tree -p $l4)
64 echo $l5 > .git/HEAD
66 git-rev-list --merge-order --show-breaks HEAD | sed "$(sed_script)" > actual-merge-order
67 cat > expected-merge-order <<EOF
68 = l5
69 | l4
70 | l3
71 = a4
72 | c3
73 | c2
74 | c1
75 ^ b4
76 | b3
77 | b2
78 | b1
79 ^ a3
80 | a2
81 | a1
82 = a0
83 | l2
84 | l1
85 | l0
86 = root
87 EOF
89 git-rev-list HEAD | check_adjacency | sed "$(sed_script)" > actual-default-order
90 normal_adjacency_count=$(git-rev-list HEAD | check_adjacency | grep -c "\^" | tr -d ' ')
91 merge_order_adjacency_count=$(git-rev-list --merge-order HEAD | check_adjacency | grep -c "\^" | tr -d ' ')
93 test_expect_success 'Testing that the rev-list has correct number of entries' '[ $(git-rev-list HEAD | wc -l) -eq 19 ]'
94 test_expect_success 'Testing that --merge-order produces the correct result' 'diff expected-merge-order actual-merge-order'
95 test_expect_success 'Testing that --merge-order produces as many or fewer discontinuities' '[ $merge_order_adjacency_count -le $normal_adjacency_count ]'
97 cat > expected-merge-order-1 <<EOF
111 root
114 git-rev-list --merge-order $a3 $b3 $c3 | sed "$(sed_script)" > actual-merge-order-1
115 test_expect_success 'Testing multiple heads' 'diff expected-merge-order-1 actual-merge-order-1'
117 cat > expected-merge-order-2 <<EOF
128 git-rev-list --merge-order $a3 $b3 $c3 ^$a1 | sed "$(sed_script)" > actual-merge-order-2
129 test_expect_success 'Testing stop' 'diff expected-merge-order-2 actual-merge-order-2'
131 cat > expected-merge-order-3 <<EOF
145 git-rev-list --merge-order $a3 $b3 $c3 ^$l1 | sed "$(sed_script)" > actual-merge-order-3
146 test_expect_success 'Testing stop in linear epoch' 'diff expected-merge-order-3 actual-merge-order-3'
148 cat > expected-merge-order-4 <<EOF
167 git-rev-list --merge-order $l5 ^$l1 | sed "$(sed_script)" > actual-merge-order-4
168 test_expect_success 'Testing start in linear epoch, stop after non-linear epoch' 'diff expected-merge-order-4 actual-merge-order-4'
170 git-rev-list --merge-order $l5 $l5 ^$l1 2>/dev/null | sed "$(sed_script)" > actual-merge-order-5
171 test_expect_success 'Testing duplicated start arguments' 'diff expected-merge-order-4 actual-merge-order-5'
173 test_expect_success 'Testing exclusion near merge' 'git-rev-list --merge-order $a4 ^$c3 2>/dev/null'
175 test_done