about summary refs log tree commit diff
path: root/third_party/git/t/t5503-tagfollow.sh
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/git/t/t5503-tagfollow.sh')
-rwxr-xr-xthird_party/git/t/t5503-tagfollow.sh160
1 files changed, 160 insertions, 0 deletions
diff --git a/third_party/git/t/t5503-tagfollow.sh b/third_party/git/t/t5503-tagfollow.sh
new file mode 100755
index 0000000000..6041a4dd32
--- /dev/null
+++ b/third_party/git/t/t5503-tagfollow.sh
@@ -0,0 +1,160 @@
+#!/bin/sh
+
+test_description='test automatic tag following'
+
+. ./test-lib.sh
+
+# 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
+UPATH="$(pwd)/$U"
+
+test_expect_success 'setup expect' '
+cat - <<EOF >expect
+want $A
+EOF
+'
+
+get_needs () {
+	test -s "$1" &&
+	perl -alne '
+		next unless $F[1] eq "upload-pack<";
+		next unless $F[2] eq "want";
+		print $F[2], " ", $F[3];
+	' "$1"
+}
+
+test_expect_success 'fetch A (new commit : 1 connection)' '
+	rm -f $U &&
+	(
+		cd cloned &&
+		GIT_TRACE_PACKET=$UPATH git fetch &&
+		test $A = $(git rev-parse --verify origin/master)
+	) &&
+	get_needs $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
+'
+
+test_expect_success 'setup expect' '
+cat - <<EOF >expect
+want $C
+want $T
+EOF
+'
+
+test_expect_success 'fetch C, T (new branch, tag : 1 connection)' '
+	rm -f $U &&
+	(
+		cd cloned &&
+		GIT_TRACE_PACKET=$UPATH git fetch &&
+		test $C = $(git rev-parse --verify origin/cat) &&
+		test $T = $(git rev-parse --verify tag1) &&
+		test $A = $(git rev-parse --verify tag1^0)
+	) &&
+	get_needs $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)
+'
+
+test_expect_success 'setup expect' '
+cat - <<EOF >expect
+want $B
+want $S
+EOF
+'
+
+test_expect_success 'fetch B, S (commit and tag : 1 connection)' '
+	rm -f $U &&
+	(
+		cd cloned &&
+		GIT_TRACE_PACKET=$UPATH git fetch &&
+		test $B = $(git rev-parse --verify origin/master) &&
+		test $B = $(git rev-parse --verify tag2^0) &&
+		test $S = $(git rev-parse --verify tag2)
+	) &&
+	get_needs $U >actual &&
+	test_cmp expect actual
+'
+
+test_expect_success 'setup expect' '
+cat - <<EOF >expect
+want $B
+want $S
+EOF
+'
+
+test_expect_success 'new clone fetch master and tags' '
+	test_might_fail git branch -D cat &&
+	rm -f $U &&
+	(
+		mkdir clone2 &&
+		cd clone2 &&
+		git init &&
+		git remote add origin .. &&
+		GIT_TRACE_PACKET=$UPATH git fetch &&
+		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)
+	) &&
+	get_needs $U >actual &&
+	test_cmp expect actual
+'
+
+test_done