summaryrefslogtreecommitdiff
path: root/t/t5503-tagfollow.sh
blob: e75ccbcaebbe8cf2ac0fdf5dfe474a9b9a3043ab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#!/bin/sh

test_description='test automatic tag following'

. ./test-lib.sh

case $(uname -s) in
*MINGW*)
	say "GIT_DEBUG_SEND_PACK not supported - skipping tests"
	test_done
	exit
esac

# End state of the repository:
#
#         T - tag1          S - tag2
#        /                 /
#   L - A ------ O ------ B
#    \   \                 \
#     \   C - origin/cat    \
#      origin/master         master

test_expect_success setup '
	test_tick &&
	echo ichi >file &&
	git add file &&
	git commit -m L &&
	L=$(git rev-parse --verify HEAD) &&

	(
		mkdir cloned &&
		cd cloned &&
		git init-db &&
		git remote add -f origin ..
	) &&

	test_tick &&
	echo A >file &&
	git add file &&
	git commit -m A &&
	A=$(git rev-parse --verify HEAD)
'

U=UPLOAD_LOG

cat - <<EOF >expect
#S
want $A
#E
EOF
test_expect_success 'fetch A (new commit : 1 connection)' '
	rm -f $U
	(
		cd cloned &&
		GIT_DEBUG_SEND_PACK=3 git fetch 3>../$U &&
		test $A = $(git rev-parse --verify origin/master)
	) &&
	test -s $U &&
	cut -d" " -f1,2 $U >actual &&
	test_cmp expect actual
'

test_expect_success "create tag T on A, create C on branch cat" '
	git tag -a -m tag1 tag1 $A &&
	T=$(git rev-parse --verify tag1) &&

	git checkout -b cat &&
	echo C >file &&
	git add file &&
	git commit -m C &&
	C=$(git rev-parse --verify HEAD) &&
	git checkout master
'

cat - <<EOF >expect
#S
want $C
want $T
#E
EOF
test_expect_success 'fetch C, T (new branch, tag : 1 connection)' '
	rm -f $U
	(
		cd cloned &&
		GIT_DEBUG_SEND_PACK=3 git fetch 3>../$U &&
		test $C = $(git rev-parse --verify origin/cat) &&
		test $T = $(git rev-parse --verify tag1) &&
		test $A = $(git rev-parse --verify tag1^0)
	) &&
	test -s $U &&
	cut -d" " -f1,2 $U >actual &&
	test_cmp expect actual
'

test_expect_success "create commits O, B, tag S on B" '
	test_tick &&
	echo O >file &&
	git add file &&
	git commit -m O &&

	test_tick &&
	echo B >file &&
	git add file &&
	git commit -m B &&
	B=$(git rev-parse --verify HEAD) &&

	git tag -a -m tag2 tag2 $B &&
	S=$(git rev-parse --verify tag2)
'

cat - <<EOF >expect
#S
want $B
want $S
#E
EOF
test_expect_success 'fetch B, S (commit and tag : 1 connection)' '
	rm -f $U
	(
		cd cloned &&
		GIT_DEBUG_SEND_PACK=3 git fetch 3>../$U &&
		test $B = $(git rev-parse --verify origin/master) &&
		test $B = $(git rev-parse --verify tag2^0) &&
		test $S = $(git rev-parse --verify tag2)
	) &&
	test -s $U &&
	cut -d" " -f1,2 $U >actual &&
	test_cmp expect actual
'

cat - <<EOF >expect
#S
want $B
want $S
#E
EOF
test_expect_success 'new clone fetch master and tags' '
	git branch -D cat
	rm -f $U
	(
		mkdir clone2 &&
		cd clone2 &&
		git init &&
		git remote add origin .. &&
		GIT_DEBUG_SEND_PACK=3 git fetch 3>../$U &&
		test $B = $(git rev-parse --verify origin/master) &&
		test $S = $(git rev-parse --verify tag2) &&
		test $B = $(git rev-parse --verify tag2^0) &&
		test $T = $(git rev-parse --verify tag1) &&
		test $A = $(git rev-parse --verify tag1^0)
	) &&
	test -s $U &&
	cut -d" " -f1,2 $U >actual &&
	test_cmp expect actual
'

test_done