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
+
39
+cat - <<EOF >expect
40
+#S
41
+want $A
42
+#E
43
+EOF
44
+test_expect_success 'fetch A (new commit : 1 connection)' '
45
+ rm -f $U
46
+ (
47
+ cd cloned &&
48
+ GIT_DEBUG_SEND_PACK=3 git fetch 3>../$U &&
49
+ test $A = $(git rev-parse --verify origin/master)
50
+ ) &&
51
+ test -s $U &&
52
+ cut -d" " -f1,2 $U >actual &&
53
+ git diff expect actual
54
+'
55
+
56
+test_expect_success "create tag T on A, create C on branch cat" '
57
+ git tag -a -m tag1 tag1 $A &&
58
+ T=$(git rev-parse --verify tag1) &&
59
+
60
+ git checkout -b cat &&
61
+ echo C >file &&
62
+ git add file &&
63
+ git commit -m C &&
64
+ C=$(git rev-parse --verify HEAD) &&
65
+ git checkout master
66
+'
67
+
68
+cat - <<EOF >expect
69
+#S
70
+want $C
71
+want $T
72
+#E
73
+EOF
74
+test_expect_success 'fetch C, T (new branch, tag : 1 connection)' '
75
+ rm -f $U
76
+ (
77
+ cd cloned &&
78
+ GIT_DEBUG_SEND_PACK=3 git fetch 3>../$U &&
79
+ test $C = $(git rev-parse --verify origin/cat) &&
80
+ test $T = $(git rev-parse --verify tag1) &&
81
+ test $A = $(git rev-parse --verify tag1^0)
82
+ ) &&
83
+ test -s $U &&
84
+ cut -d" " -f1,2 $U >actual &&
85
+ git diff expect actual
86
+'
87
+
88
+test_expect_success "create commits O, B, tag S on B" '
89
+ test_tick &&
90
+ echo O >file &&
91
+ git add file &&
92
+ git commit -m O &&
93
+
94
+ test_tick &&
95
+ echo B >file &&
96
+ git add file &&
97
+ git commit -m B &&
98
+ B=$(git rev-parse --verify HEAD) &&
99
+
100
+ git tag -a -m tag2 tag2 $B &&
101
+ S=$(git rev-parse --verify tag2)
102
+'
103
+
104
+cat - <<EOF >expect
105
+#S
106
+want $B
107
+want $S
108
+#E
109
+EOF
110
+test_expect_success 'fetch B, S (commit and tag : 1 connection)' '
111
+ rm -f $U
112
+ (
113
+ cd cloned &&
114
+ GIT_DEBUG_SEND_PACK=3 git fetch 3>../$U &&
115
+ test $B = $(git rev-parse --verify origin/master) &&
116
+ test $B = $(git rev-parse --verify tag2^0) &&
117
+ test $S = $(git rev-parse --verify tag2)
118
+ ) &&
119
+ test -s $U &&
120
+ cut -d" " -f1,2 $U >actual &&
121
+ git diff expect actual
122
+'
123
+
124
+test_done