diff options
Diffstat (limited to 't/t5503-tagfollow.sh')
-rwxr-xr-x | t/t5503-tagfollow.sh | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/t/t5503-tagfollow.sh b/t/t5503-tagfollow.sh new file mode 100755 index 000000000000..6041a4dd3278 --- /dev/null +++ b/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 |