You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

158 lines
3.0 KiB

#!/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