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.
169 lines
3.9 KiB
169 lines
3.9 KiB
#!/bin/sh |
|
# |
|
# Copyright (c) 2010 Sverre Rabbelier |
|
# |
|
|
|
test_description='Test python remote-helper framework' |
|
|
|
. ./test-lib.sh |
|
|
|
if ! test_have_prereq PYTHON ; then |
|
skip_all='skipping python remote-helper tests, python not available' |
|
test_done |
|
fi |
|
|
|
"$PYTHON_PATH" -c ' |
|
import sys |
|
if sys.hexversion < 0x02040000: |
|
sys.exit(1) |
|
' || { |
|
skip_all='skipping python remote-helper tests, python version < 2.4' |
|
test_done |
|
} |
|
|
|
compare_refs() { |
|
git --git-dir="$1/.git" rev-parse --verify $2 >expect && |
|
git --git-dir="$3/.git" rev-parse --verify $4 >actual && |
|
test_cmp expect actual |
|
} |
|
|
|
test_expect_success 'setup repository' ' |
|
git init --bare server/.git && |
|
git clone server public && |
|
(cd public && |
|
echo content >file && |
|
git add file && |
|
git commit -m one && |
|
git push origin master) |
|
' |
|
|
|
test_expect_success 'cloning from local repo' ' |
|
git clone "testpy::${PWD}/server" localclone && |
|
test_cmp public/file localclone/file |
|
' |
|
|
|
test_expect_success 'cloning from remote repo' ' |
|
git clone "testpy::file://${PWD}/server" clone && |
|
test_cmp public/file clone/file |
|
' |
|
|
|
test_expect_success 'create new commit on remote' ' |
|
(cd public && |
|
echo content >>file && |
|
git commit -a -m two && |
|
git push) |
|
' |
|
|
|
test_expect_success 'pulling from local repo' ' |
|
(cd localclone && git pull) && |
|
test_cmp public/file localclone/file |
|
' |
|
|
|
test_expect_success 'pulling from remote remote' ' |
|
(cd clone && git pull) && |
|
test_cmp public/file clone/file |
|
' |
|
|
|
test_expect_success 'pushing to local repo' ' |
|
(cd localclone && |
|
echo content >>file && |
|
git commit -a -m three && |
|
git push) && |
|
compare_refs localclone HEAD server HEAD |
|
' |
|
|
|
# Generally, skip this test. It demonstrates a now-fixed race in |
|
# git-remote-testpy, but is too slow to leave in for general use. |
|
: test_expect_success 'racily pushing to local repo' ' |
|
test_when_finished "rm -rf server2 localclone2" && |
|
cp -R server server2 && |
|
git clone "testpy::${PWD}/server2" localclone2 && |
|
(cd localclone2 && |
|
echo content >>file && |
|
git commit -a -m three && |
|
GIT_REMOTE_TESTGIT_SLEEPY=2 git push) && |
|
compare_refs localclone2 HEAD server2 HEAD |
|
' |
|
|
|
test_expect_success 'synch with changes from localclone' ' |
|
(cd clone && |
|
git pull) |
|
' |
|
|
|
test_expect_success 'pushing remote local repo' ' |
|
(cd clone && |
|
echo content >>file && |
|
git commit -a -m four && |
|
git push) && |
|
compare_refs clone HEAD server HEAD |
|
' |
|
|
|
test_expect_success 'fetch new branch' ' |
|
(cd public && |
|
git checkout -b new && |
|
echo content >>file && |
|
git commit -a -m five && |
|
git push origin new |
|
) && |
|
(cd localclone && |
|
git fetch origin new |
|
) && |
|
compare_refs public HEAD localclone FETCH_HEAD |
|
' |
|
|
|
test_expect_success 'fetch multiple branches' ' |
|
(cd localclone && |
|
git fetch |
|
) && |
|
compare_refs server master localclone refs/remotes/origin/master && |
|
compare_refs server new localclone refs/remotes/origin/new |
|
' |
|
|
|
test_expect_success 'push when remote has extra refs' ' |
|
(cd clone && |
|
echo content >>file && |
|
git commit -a -m six && |
|
git push |
|
) && |
|
compare_refs clone master server master |
|
' |
|
|
|
test_expect_success 'push new branch by name' ' |
|
(cd clone && |
|
git checkout -b new-name && |
|
echo content >>file && |
|
git commit -a -m seven && |
|
git push origin new-name |
|
) && |
|
compare_refs clone HEAD server refs/heads/new-name |
|
' |
|
|
|
test_expect_failure 'push new branch with old:new refspec' ' |
|
(cd clone && |
|
git push origin new-name:new-refspec |
|
) && |
|
compare_refs clone HEAD server refs/heads/new-refspec |
|
' |
|
|
|
test_expect_success 'proper failure checks for fetching' ' |
|
(GIT_REMOTE_TESTGIT_FAILURE=1 && |
|
export GIT_REMOTE_TESTGIT_FAILURE && |
|
cd localclone && |
|
test_must_fail git fetch 2>&1 | \ |
|
grep "Error while running fast-import" |
|
) |
|
' |
|
|
|
# We sleep to give fast-export a chance to catch the SIGPIPE |
|
test_expect_failure 'proper failure checks for pushing' ' |
|
(GIT_REMOTE_TESTGIT_FAILURE=1 && |
|
export GIT_REMOTE_TESTGIT_FAILURE && |
|
GIT_REMOTE_TESTGIT_SLEEPY=1 && |
|
export GIT_REMOTE_TESTGIT_SLEEPY && |
|
cd localclone && |
|
test_must_fail git push --all 2>&1 | \ |
|
grep "Error while running fast-export" |
|
) |
|
' |
|
|
|
test_done
|
|
|