mirror of
https://github.com/git/git.git
synced 2024-11-28 20:44:04 +08:00
acd2a45b83
This makes git-push refuse pushing into a non-bare repository to update the current branch by default. To help people who are used to be able to do this (and later "reset --hard" it in some other way), an error message is issued when this refusal is triggered, instructing how to resurrect the old behaviour. Hosting sites that do not give the users direct access to customize their repositories (e.g. repo.or.cz, gitorious, github etc.) may further want to explicitly set the configuration variable to "refuse" for their customers' repositories. Signed-off-by: Junio C Hamano <gitster@pobox.com>
269 lines
6.3 KiB
Bash
Executable File
269 lines
6.3 KiB
Bash
Executable File
#!/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_done
|