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.
278 lines
6.5 KiB
278 lines
6.5 KiB
#!/bin/sh |
|
|
|
test_description='pushing to a mirror repository' |
|
|
|
. ./test-lib.sh |
|
|
|
D=$(pwd) |
|
|
|
invert () { |
|
if "$@"; then |
|
return 1 |
|
else |
|
return 0 |
|
fi |
|
} |
|
|
|
mk_repo_pair () { |
|
rm -rf master mirror && |
|
mkdir mirror && |
|
( |
|
cd mirror && |
|
git init && |
|
git config receive.denyCurrentBranch warn |
|
) && |
|
mkdir master && |
|
( |
|
cd master && |
|
git init && |
|
git remote add $1 up ../mirror |
|
) |
|
} |
|
|
|
|
|
# BRANCH tests |
|
test_expect_success 'push mirror creates new branches' ' |
|
|
|
mk_repo_pair && |
|
( |
|
cd master && |
|
echo one >foo && git add foo && git commit -m one && |
|
git push --mirror up |
|
) && |
|
master_master=$(cd master && git show-ref -s --verify refs/heads/master) && |
|
mirror_master=$(cd mirror && git show-ref -s --verify refs/heads/master) && |
|
test "$master_master" = "$mirror_master" |
|
|
|
' |
|
|
|
test_expect_success 'push mirror updates existing branches' ' |
|
|
|
mk_repo_pair && |
|
( |
|
cd master && |
|
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 |
|
) && |
|
master_master=$(cd master && git show-ref -s --verify refs/heads/master) && |
|
mirror_master=$(cd mirror && git show-ref -s --verify refs/heads/master) && |
|
test "$master_master" = "$mirror_master" |
|
|
|
' |
|
|
|
test_expect_success 'push mirror force updates existing branches' ' |
|
|
|
mk_repo_pair && |
|
( |
|
cd master && |
|
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 |
|
) && |
|
master_master=$(cd master && git show-ref -s --verify refs/heads/master) && |
|
mirror_master=$(cd mirror && git show-ref -s --verify refs/heads/master) && |
|
test "$master_master" = "$mirror_master" |
|
|
|
' |
|
|
|
test_expect_success 'push mirror removes branches' ' |
|
|
|
mk_repo_pair && |
|
( |
|
cd master && |
|
echo one >foo && git add foo && git commit -m one && |
|
git branch remove master && |
|
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 master && |
|
echo one >foo && git add foo && git commit -m one && |
|
git branch remove master && |
|
git push --mirror up && |
|
git branch -D remove && |
|
git branch add master && |
|
echo two >foo && git add foo && git commit -m two && |
|
git push --mirror up |
|
) && |
|
master_master=$(cd master && git show-ref -s --verify refs/heads/master) && |
|
master_add=$(cd master && git show-ref -s --verify refs/heads/add) && |
|
mirror_master=$(cd mirror && git show-ref -s --verify refs/heads/master) && |
|
mirror_add=$(cd mirror && git show-ref -s --verify refs/heads/add) && |
|
test "$master_master" = "$mirror_master" && |
|
test "$master_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 master && |
|
echo one >foo && git add foo && git commit -m one && |
|
git tag -f tmaster master && |
|
git push --mirror up |
|
) && |
|
master_master=$(cd master && git show-ref -s --verify refs/tags/tmaster) && |
|
mirror_master=$(cd mirror && git show-ref -s --verify refs/tags/tmaster) && |
|
test "$master_master" = "$mirror_master" |
|
|
|
' |
|
|
|
test_expect_success 'push mirror updates existing tags' ' |
|
|
|
mk_repo_pair && |
|
( |
|
cd master && |
|
echo one >foo && git add foo && git commit -m one && |
|
git tag -f tmaster master && |
|
git push --mirror up && |
|
echo two >foo && git add foo && git commit -m two && |
|
git tag -f tmaster master && |
|
git push --mirror up |
|
) && |
|
master_master=$(cd master && git show-ref -s --verify refs/tags/tmaster) && |
|
mirror_master=$(cd mirror && git show-ref -s --verify refs/tags/tmaster) && |
|
test "$master_master" = "$mirror_master" |
|
|
|
' |
|
|
|
test_expect_success 'push mirror force updates existing tags' ' |
|
|
|
mk_repo_pair && |
|
( |
|
cd master && |
|
echo one >foo && git add foo && git commit -m one && |
|
git tag -f tmaster master && |
|
git push --mirror up && |
|
echo two >foo && git add foo && git commit -m two && |
|
git tag -f tmaster master && |
|
git push --mirror up && |
|
git reset --hard HEAD^ && |
|
git tag -f tmaster master && |
|
git push --mirror up |
|
) && |
|
master_master=$(cd master && git show-ref -s --verify refs/tags/tmaster) && |
|
mirror_master=$(cd mirror && git show-ref -s --verify refs/tags/tmaster) && |
|
test "$master_master" = "$mirror_master" |
|
|
|
' |
|
|
|
test_expect_success 'push mirror removes tags' ' |
|
|
|
mk_repo_pair && |
|
( |
|
cd master && |
|
echo one >foo && git add foo && git commit -m one && |
|
git tag -f tremove master && |
|
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 master && |
|
echo one >foo && git add foo && git commit -m one && |
|
git tag -f tmaster master && |
|
git tag -f tremove master && |
|
git push --mirror up && |
|
git tag -d tremove && |
|
git tag tadd master && |
|
echo two >foo && git add foo && git commit -m two && |
|
git tag -f tmaster master && |
|
git push --mirror up |
|
) && |
|
master_master=$(cd master && git show-ref -s --verify refs/tags/tmaster) && |
|
master_add=$(cd master && git show-ref -s --verify refs/tags/tadd) && |
|
mirror_master=$(cd mirror && git show-ref -s --verify refs/tags/tmaster) && |
|
mirror_add=$(cd mirror && git show-ref -s --verify refs/tags/tadd) && |
|
test "$master_master" = "$mirror_master" && |
|
test "$master_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 master && |
|
echo one >foo && git add foo && git commit -m one && |
|
git branch keep master && |
|
git branch remove master && |
|
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 master && |
|
echo one >foo && git add foo && git commit -m one && |
|
git config --add remote.up.mirror no && |
|
git branch keep master && |
|
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 master && |
|
echo one >foo && git add foo && git commit -m one && |
|
git config --add remote.up.mirror true && |
|
test_must_fail git push up master |
|
) |
|
' |
|
|
|
test_done
|
|
|