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.
281 lines
6.4 KiB
281 lines
6.4 KiB
#!/bin/sh |
|
|
|
test_description='pushing to a mirror repository' |
|
|
|
GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main |
|
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME |
|
|
|
. ./test-lib.sh |
|
|
|
D=$(pwd) |
|
|
|
invert () { |
|
if "$@"; then |
|
return 1 |
|
else |
|
return 0 |
|
fi |
|
} |
|
|
|
mk_repo_pair () { |
|
rm -rf main mirror && |
|
mkdir mirror && |
|
( |
|
cd mirror && |
|
git init && |
|
git config receive.denyCurrentBranch warn |
|
) && |
|
mkdir main && |
|
( |
|
cd main && |
|
git init && |
|
git remote add $1 up ../mirror |
|
) |
|
} |
|
|
|
|
|
# BRANCH tests |
|
test_expect_success 'push mirror creates new branches' ' |
|
|
|
mk_repo_pair && |
|
( |
|
cd main && |
|
echo one >foo && git add foo && git commit -m one && |
|
git push --mirror up |
|
) && |
|
main_main=$(cd main && git show-ref -s --verify refs/heads/main) && |
|
mirror_main=$(cd mirror && git show-ref -s --verify refs/heads/main) && |
|
test "$main_main" = "$mirror_main" |
|
|
|
' |
|
|
|
test_expect_success 'push mirror updates existing branches' ' |
|
|
|
mk_repo_pair && |
|
( |
|
cd main && |
|
echo one >foo && git add foo && git commit -m one && |
|
git push --mirror up && |
|
echo two >foo && git add foo && git commit -m two && |
|
git push --mirror up |
|
) && |
|
main_main=$(cd main && git show-ref -s --verify refs/heads/main) && |
|
mirror_main=$(cd mirror && git show-ref -s --verify refs/heads/main) && |
|
test "$main_main" = "$mirror_main" |
|
|
|
' |
|
|
|
test_expect_success 'push mirror force updates existing branches' ' |
|
|
|
mk_repo_pair && |
|
( |
|
cd main && |
|
echo one >foo && git add foo && git commit -m one && |
|
git push --mirror up && |
|
echo two >foo && git add foo && git commit -m two && |
|
git push --mirror up && |
|
git reset --hard HEAD^ && |
|
git push --mirror up |
|
) && |
|
main_main=$(cd main && git show-ref -s --verify refs/heads/main) && |
|
mirror_main=$(cd mirror && git show-ref -s --verify refs/heads/main) && |
|
test "$main_main" = "$mirror_main" |
|
|
|
' |
|
|
|
test_expect_success 'push mirror removes branches' ' |
|
|
|
mk_repo_pair && |
|
( |
|
cd main && |
|
echo one >foo && git add foo && git commit -m one && |
|
git branch remove main && |
|
git push --mirror up && |
|
git branch -D remove && |
|
git push --mirror up |
|
) && |
|
( |
|
cd mirror && |
|
invert git show-ref -s --verify refs/heads/remove |
|
) |
|
|
|
' |
|
|
|
test_expect_success 'push mirror adds, updates and removes branches together' ' |
|
|
|
mk_repo_pair && |
|
( |
|
cd main && |
|
echo one >foo && git add foo && git commit -m one && |
|
git branch remove main && |
|
git push --mirror up && |
|
git branch -D remove && |
|
git branch add main && |
|
echo two >foo && git add foo && git commit -m two && |
|
git push --mirror up |
|
) && |
|
main_main=$(cd main && git show-ref -s --verify refs/heads/main) && |
|
main_add=$(cd main && git show-ref -s --verify refs/heads/add) && |
|
mirror_main=$(cd mirror && git show-ref -s --verify refs/heads/main) && |
|
mirror_add=$(cd mirror && git show-ref -s --verify refs/heads/add) && |
|
test "$main_main" = "$mirror_main" && |
|
test "$main_add" = "$mirror_add" && |
|
( |
|
cd mirror && |
|
invert git show-ref -s --verify refs/heads/remove |
|
) |
|
|
|
' |
|
|
|
|
|
# TAG tests |
|
test_expect_success 'push mirror creates new tags' ' |
|
|
|
mk_repo_pair && |
|
( |
|
cd main && |
|
echo one >foo && git add foo && git commit -m one && |
|
git tag -f tmain main && |
|
git push --mirror up |
|
) && |
|
main_main=$(cd main && git show-ref -s --verify refs/tags/tmain) && |
|
mirror_main=$(cd mirror && git show-ref -s --verify refs/tags/tmain) && |
|
test "$main_main" = "$mirror_main" |
|
|
|
' |
|
|
|
test_expect_success 'push mirror updates existing tags' ' |
|
|
|
mk_repo_pair && |
|
( |
|
cd main && |
|
echo one >foo && git add foo && git commit -m one && |
|
git tag -f tmain main && |
|
git push --mirror up && |
|
echo two >foo && git add foo && git commit -m two && |
|
git tag -f tmain main && |
|
git push --mirror up |
|
) && |
|
main_main=$(cd main && git show-ref -s --verify refs/tags/tmain) && |
|
mirror_main=$(cd mirror && git show-ref -s --verify refs/tags/tmain) && |
|
test "$main_main" = "$mirror_main" |
|
|
|
' |
|
|
|
test_expect_success 'push mirror force updates existing tags' ' |
|
|
|
mk_repo_pair && |
|
( |
|
cd main && |
|
echo one >foo && git add foo && git commit -m one && |
|
git tag -f tmain main && |
|
git push --mirror up && |
|
echo two >foo && git add foo && git commit -m two && |
|
git tag -f tmain main && |
|
git push --mirror up && |
|
git reset --hard HEAD^ && |
|
git tag -f tmain main && |
|
git push --mirror up |
|
) && |
|
main_main=$(cd main && git show-ref -s --verify refs/tags/tmain) && |
|
mirror_main=$(cd mirror && git show-ref -s --verify refs/tags/tmain) && |
|
test "$main_main" = "$mirror_main" |
|
|
|
' |
|
|
|
test_expect_success 'push mirror removes tags' ' |
|
|
|
mk_repo_pair && |
|
( |
|
cd main && |
|
echo one >foo && git add foo && git commit -m one && |
|
git tag -f tremove main && |
|
git push --mirror up && |
|
git tag -d tremove && |
|
git push --mirror up |
|
) && |
|
( |
|
cd mirror && |
|
invert git show-ref -s --verify refs/tags/tremove |
|
) |
|
|
|
' |
|
|
|
test_expect_success 'push mirror adds, updates and removes tags together' ' |
|
|
|
mk_repo_pair && |
|
( |
|
cd main && |
|
echo one >foo && git add foo && git commit -m one && |
|
git tag -f tmain main && |
|
git tag -f tremove main && |
|
git push --mirror up && |
|
git tag -d tremove && |
|
git tag tadd main && |
|
echo two >foo && git add foo && git commit -m two && |
|
git tag -f tmain main && |
|
git push --mirror up |
|
) && |
|
main_main=$(cd main && git show-ref -s --verify refs/tags/tmain) && |
|
main_add=$(cd main && git show-ref -s --verify refs/tags/tadd) && |
|
mirror_main=$(cd mirror && git show-ref -s --verify refs/tags/tmain) && |
|
mirror_add=$(cd mirror && git show-ref -s --verify refs/tags/tadd) && |
|
test "$main_main" = "$mirror_main" && |
|
test "$main_add" = "$mirror_add" && |
|
( |
|
cd mirror && |
|
invert git show-ref -s --verify refs/tags/tremove |
|
) |
|
|
|
' |
|
|
|
test_expect_success 'remote.foo.mirror adds and removes branches' ' |
|
|
|
mk_repo_pair --mirror && |
|
( |
|
cd main && |
|
echo one >foo && git add foo && git commit -m one && |
|
git branch keep main && |
|
git branch remove main && |
|
git push up && |
|
git branch -D remove && |
|
git push up |
|
) && |
|
( |
|
cd mirror && |
|
git show-ref -s --verify refs/heads/keep && |
|
invert git show-ref -s --verify refs/heads/remove |
|
) |
|
|
|
' |
|
|
|
test_expect_success 'remote.foo.mirror=no has no effect' ' |
|
|
|
mk_repo_pair && |
|
( |
|
cd main && |
|
echo one >foo && git add foo && git commit -m one && |
|
git config --add remote.up.mirror no && |
|
git branch keep main && |
|
git push --mirror up && |
|
git branch -D keep && |
|
git push up : |
|
) && |
|
( |
|
cd mirror && |
|
git show-ref -s --verify refs/heads/keep |
|
) |
|
|
|
' |
|
|
|
test_expect_success 'push to mirrored repository with refspec fails' ' |
|
mk_repo_pair && |
|
( |
|
cd main && |
|
echo one >foo && git add foo && git commit -m one && |
|
git config --add remote.up.mirror true && |
|
test_must_fail git push up main |
|
) |
|
' |
|
|
|
test_done
|
|
|