1#!/bin/sh
2
3test_description='test automatic tag following'
4
5. ./test-lib.sh
6
7case $(uname -s) in
8*MINGW*)
9 say "GIT_DEBUG_SEND_PACK not supported - skipping tests"
10 ;;
11*)
12 test_set_prereq NOT_MINGW
13 ;;
14esac
15
16# End state of the repository:
17#
18# T - tag1 S - tag2
19# / /
20# L - A ------ O ------ B
21# \ \ \
22# \ C - origin/cat \
23# origin/master master
24
25test_expect_success NOT_MINGW setup '
26 test_tick &&
27 echo ichi >file &&
28 git add file &&
29 git commit -m L &&
30 L=$(git rev-parse --verify HEAD) &&
31
32 (
33 mkdir cloned &&
34 cd cloned &&
35 git init-db &&
36 git remote add -f origin ..
37 ) &&
38
39 test_tick &&
40 echo A >file &&
41 git add file &&
42 git commit -m A &&
43 A=$(git rev-parse --verify HEAD)
44'
45
46U=UPLOAD_LOG
47
48test_expect_success NOT_MINGW 'setup expect' '
49cat - <<EOF >expect
50#S
51want $A
52#E
53EOF
54'
55
56test_expect_success NOT_MINGW 'fetch A (new commit : 1 connection)' '
57 rm -f $U
58 (
59 cd cloned &&
60 GIT_DEBUG_SEND_PACK=3 git fetch 3>../$U &&
61 test $A = $(git rev-parse --verify origin/master)
62 ) &&
63 test -s $U &&
64 cut -d" " -f1,2 $U >actual &&
65 test_cmp expect actual
66'
67
68test_expect_success NOT_MINGW "create tag T on A, create C on branch cat" '
69 git tag -a -m tag1 tag1 $A &&
70 T=$(git rev-parse --verify tag1) &&
71
72 git checkout -b cat &&
73 echo C >file &&
74 git add file &&
75 git commit -m C &&
76 C=$(git rev-parse --verify HEAD) &&
77 git checkout master
78'
79
80test_expect_success NOT_MINGW 'setup expect' '
81cat - <<EOF >expect
82#S
83want $C
84want $T
85#E
86EOF
87'
88
89test_expect_success NOT_MINGW 'fetch C, T (new branch, tag : 1 connection)' '
90 rm -f $U
91 (
92 cd cloned &&
93 GIT_DEBUG_SEND_PACK=3 git fetch 3>../$U &&
94 test $C = $(git rev-parse --verify origin/cat) &&
95 test $T = $(git rev-parse --verify tag1) &&
96 test $A = $(git rev-parse --verify tag1^0)
97 ) &&
98 test -s $U &&
99 cut -d" " -f1,2 $U >actual &&
100 test_cmp expect actual
101'
102
103test_expect_success NOT_MINGW "create commits O, B, tag S on B" '
104 test_tick &&
105 echo O >file &&
106 git add file &&
107 git commit -m O &&
108
109 test_tick &&
110 echo B >file &&
111 git add file &&
112 git commit -m B &&
113 B=$(git rev-parse --verify HEAD) &&
114
115 git tag -a -m tag2 tag2 $B &&
116 S=$(git rev-parse --verify tag2)
117'
118
119test_expect_success NOT_MINGW 'setup expect' '
120cat - <<EOF >expect
121#S
122want $B
123want $S
124#E
125EOF
126'
127
128test_expect_success NOT_MINGW 'fetch B, S (commit and tag : 1 connection)' '
129 rm -f $U
130 (
131 cd cloned &&
132 GIT_DEBUG_SEND_PACK=3 git fetch 3>../$U &&
133 test $B = $(git rev-parse --verify origin/master) &&
134 test $B = $(git rev-parse --verify tag2^0) &&
135 test $S = $(git rev-parse --verify tag2)
136 ) &&
137 test -s $U &&
138 cut -d" " -f1,2 $U >actual &&
139 test_cmp expect actual
140'
141
142test_expect_success NOT_MINGW 'setup expect' '
143cat - <<EOF >expect
144#S
145want $B
146want $S
147#E
148EOF
149'
150
151test_expect_success NOT_MINGW 'new clone fetch master and tags' '
152 git branch -D cat
153 rm -f $U
154 (
155 mkdir clone2 &&
156 cd clone2 &&
157 git init &&
158 git remote add origin .. &&
159 GIT_DEBUG_SEND_PACK=3 git fetch 3>../$U &&
160 test $B = $(git rev-parse --verify origin/master) &&
161 test $S = $(git rev-parse --verify tag2) &&
162 test $B = $(git rev-parse --verify tag2^0) &&
163 test $T = $(git rev-parse --verify tag1) &&
164 test $A = $(git rev-parse --verify tag1^0)
165 ) &&
166 test -s $U &&
167 cut -d" " -f1,2 $U >actual &&
168 test_cmp expect actual
169'
170
171test_done