Browse Source
The functions `mk_repo_pair` as well as `test_refs` are borrowed from t5543-atomic-push, with additional hooks installed. Signed-off-by: Stefan Beller <sbeller@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
Stefan Beller
9 years ago
committed by
Junio C Hamano
1 changed files with 103 additions and 0 deletions
@ -0,0 +1,103 @@
@@ -0,0 +1,103 @@
|
||||
#!/bin/sh |
||||
|
||||
test_description='pushing to a repository using push options' |
||||
|
||||
. ./test-lib.sh |
||||
|
||||
mk_repo_pair () { |
||||
rm -rf workbench upstream && |
||||
test_create_repo upstream && |
||||
test_create_repo workbench && |
||||
( |
||||
cd upstream && |
||||
git config receive.denyCurrentBranch warn && |
||||
mkdir -p .git/hooks && |
||||
cat >.git/hooks/pre-receive <<-'EOF' && |
||||
#!/bin/sh |
||||
if test -n "$GIT_PUSH_OPTION_COUNT"; then |
||||
i=0 |
||||
>hooks/pre-receive.push_options |
||||
while test "$i" -lt "$GIT_PUSH_OPTION_COUNT"; do |
||||
eval "value=\$GIT_PUSH_OPTION_$i" |
||||
echo $value >>hooks/pre-receive.push_options |
||||
i=$((i + 1)) |
||||
done |
||||
fi |
||||
EOF |
||||
chmod u+x .git/hooks/pre-receive |
||||
|
||||
cat >.git/hooks/post-receive <<-'EOF' && |
||||
#!/bin/sh |
||||
if test -n "$GIT_PUSH_OPTION_COUNT"; then |
||||
i=0 |
||||
>hooks/post-receive.push_options |
||||
while test "$i" -lt "$GIT_PUSH_OPTION_COUNT"; do |
||||
eval "value=\$GIT_PUSH_OPTION_$i" |
||||
echo $value >>hooks/post-receive.push_options |
||||
i=$((i + 1)) |
||||
done |
||||
fi |
||||
EOF |
||||
chmod u+x .git/hooks/post-receive |
||||
) && |
||||
( |
||||
cd workbench && |
||||
git remote add up ../upstream |
||||
) |
||||
} |
||||
|
||||
# Compare the ref ($1) in upstream with a ref value from workbench ($2) |
||||
# i.e. test_refs second HEAD@{2} |
||||
test_refs () { |
||||
test $# = 2 && |
||||
git -C upstream rev-parse --verify "$1" >expect && |
||||
git -C workbench rev-parse --verify "$2" >actual && |
||||
test_cmp expect actual |
||||
} |
||||
|
||||
test_expect_success 'one push option works for a single branch' ' |
||||
mk_repo_pair && |
||||
git -C upstream config receive.advertisePushOptions true && |
||||
( |
||||
cd workbench && |
||||
test_commit one && |
||||
git push --mirror up && |
||||
test_commit two && |
||||
git push --push-option=asdf up master |
||||
) && |
||||
test_refs master master && |
||||
echo "asdf" >expect && |
||||
test_cmp expect upstream/.git/hooks/pre-receive.push_options && |
||||
test_cmp expect upstream/.git/hooks/post-receive.push_options |
||||
' |
||||
|
||||
test_expect_success 'push option denied by remote' ' |
||||
mk_repo_pair && |
||||
git -C upstream config receive.advertisePushOptions false && |
||||
( |
||||
cd workbench && |
||||
test_commit one && |
||||
git push --mirror up && |
||||
test_commit two && |
||||
test_must_fail git push --push-option=asdf up master |
||||
) && |
||||
test_refs master HEAD@{1} |
||||
' |
||||
|
||||
test_expect_success 'two push options work' ' |
||||
mk_repo_pair && |
||||
git -C upstream config receive.advertisePushOptions true && |
||||
( |
||||
cd workbench && |
||||
test_commit one && |
||||
git push --mirror up && |
||||
test_commit two && |
||||
git push --push-option=asdf --push-option="more structured text" up master |
||||
) && |
||||
test_refs master master && |
||||
printf "asdf\nmore structured text\n" >expect && |
||||
test_cmp expect upstream/.git/hooks/pre-receive.push_options && |
||||
test_cmp expect upstream/.git/hooks/post-receive.push_options |
||||
' |
||||
|
||||
test_done |
Loading…
Reference in new issue