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