2009-08-13 19:41:14 +00:00
|
|
|
#!/bin/sh
|
|
|
|
|
|
|
|
test_description='unpack-objects'
|
|
|
|
|
|
|
|
. ./test-lib.sh
|
|
|
|
|
|
|
|
test_expect_success setup '
|
|
|
|
mkdir pub.git &&
|
2010-10-31 01:46:54 +00:00
|
|
|
GIT_DIR=pub.git git init --bare &&
|
2009-08-13 19:41:14 +00:00
|
|
|
GIT_DIR=pub.git git config receive.fsckobjects true &&
|
|
|
|
mkdir work &&
|
|
|
|
(
|
|
|
|
cd work &&
|
|
|
|
git init &&
|
|
|
|
mkdir -p gar/bage &&
|
|
|
|
(
|
|
|
|
cd gar/bage &&
|
|
|
|
git init &&
|
2013-01-05 00:17:10 +00:00
|
|
|
git config push.default matching &&
|
2009-08-13 19:41:14 +00:00
|
|
|
>junk &&
|
|
|
|
git add junk &&
|
|
|
|
git commit -m "Initial junk"
|
|
|
|
) &&
|
|
|
|
git add gar/bage &&
|
|
|
|
git commit -m "Initial superproject"
|
|
|
|
)
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success push '
|
|
|
|
(
|
|
|
|
cd work &&
|
|
|
|
git push ../pub.git master
|
|
|
|
)
|
|
|
|
'
|
|
|
|
|
2011-08-19 22:08:47 +00:00
|
|
|
test_expect_success 'push if submodule has no remote' '
|
|
|
|
(
|
|
|
|
cd work/gar/bage &&
|
|
|
|
>junk2 &&
|
|
|
|
git add junk2 &&
|
|
|
|
git commit -m "Second junk"
|
|
|
|
) &&
|
|
|
|
(
|
|
|
|
cd work &&
|
|
|
|
git add gar/bage &&
|
|
|
|
git commit -m "Second commit for gar/bage" &&
|
|
|
|
git push --recurse-submodules=check ../pub.git master
|
|
|
|
)
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'push fails if submodule commit not on remote' '
|
|
|
|
(
|
|
|
|
cd work/gar &&
|
|
|
|
git clone --bare bage ../../submodule.git &&
|
|
|
|
cd bage &&
|
|
|
|
git remote add origin ../../../submodule.git &&
|
|
|
|
git fetch &&
|
|
|
|
>junk3 &&
|
|
|
|
git add junk3 &&
|
|
|
|
git commit -m "Third junk"
|
|
|
|
) &&
|
|
|
|
(
|
|
|
|
cd work &&
|
|
|
|
git add gar/bage &&
|
|
|
|
git commit -m "Third commit for gar/bage" &&
|
|
|
|
test_must_fail git push --recurse-submodules=check ../pub.git master
|
|
|
|
)
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'push succeeds after commit was pushed to remote' '
|
|
|
|
(
|
|
|
|
cd work/gar/bage &&
|
|
|
|
git push origin master
|
|
|
|
) &&
|
|
|
|
(
|
|
|
|
cd work &&
|
|
|
|
git push --recurse-submodules=check ../pub.git master
|
|
|
|
)
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'push fails when commit on multiple branches if one branch has no remote' '
|
|
|
|
(
|
|
|
|
cd work/gar/bage &&
|
|
|
|
>junk4 &&
|
|
|
|
git add junk4 &&
|
|
|
|
git commit -m "Fourth junk"
|
|
|
|
) &&
|
|
|
|
(
|
|
|
|
cd work &&
|
|
|
|
git branch branch2 &&
|
|
|
|
git add gar/bage &&
|
|
|
|
git commit -m "Fourth commit for gar/bage" &&
|
|
|
|
git checkout branch2 &&
|
|
|
|
(
|
|
|
|
cd gar/bage &&
|
|
|
|
git checkout HEAD~1
|
|
|
|
) &&
|
|
|
|
>junk1 &&
|
|
|
|
git add junk1 &&
|
|
|
|
git commit -m "First junk" &&
|
|
|
|
test_must_fail git push --recurse-submodules=check ../pub.git
|
|
|
|
)
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'push succeeds if submodule has no remote and is on the first superproject commit' '
|
|
|
|
git init --bare a
|
|
|
|
git clone a a1 &&
|
|
|
|
(
|
|
|
|
cd a1 &&
|
|
|
|
git init b
|
|
|
|
(
|
|
|
|
cd b &&
|
|
|
|
>junk &&
|
|
|
|
git add junk &&
|
|
|
|
git commit -m "initial"
|
|
|
|
) &&
|
|
|
|
git add b &&
|
|
|
|
git commit -m "added submodule" &&
|
|
|
|
git push --recurse-submodule=check origin master
|
|
|
|
)
|
|
|
|
'
|
|
|
|
|
2012-03-29 07:21:24 +00:00
|
|
|
test_expect_success 'push unpushed submodules when not needed' '
|
|
|
|
(
|
|
|
|
cd work &&
|
|
|
|
(
|
|
|
|
cd gar/bage &&
|
|
|
|
git checkout master &&
|
|
|
|
>junk5 &&
|
|
|
|
git add junk5 &&
|
|
|
|
git commit -m "Fifth junk" &&
|
|
|
|
git push &&
|
|
|
|
git rev-parse origin/master >../../../expected
|
|
|
|
) &&
|
|
|
|
git checkout master &&
|
|
|
|
git add gar/bage &&
|
|
|
|
git commit -m "Fifth commit for gar/bage" &&
|
|
|
|
git push --recurse-submodules=on-demand ../pub.git master
|
|
|
|
) &&
|
|
|
|
(
|
|
|
|
cd submodule.git &&
|
|
|
|
git rev-parse master >../actual
|
|
|
|
) &&
|
|
|
|
test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'push unpushed submodules when not needed 2' '
|
|
|
|
(
|
|
|
|
cd submodule.git &&
|
|
|
|
git rev-parse master >../expected
|
|
|
|
) &&
|
|
|
|
(
|
|
|
|
cd work &&
|
|
|
|
(
|
|
|
|
cd gar/bage &&
|
|
|
|
>junk6 &&
|
|
|
|
git add junk6 &&
|
|
|
|
git commit -m "Sixth junk"
|
|
|
|
) &&
|
|
|
|
>junk2 &&
|
|
|
|
git add junk2 &&
|
|
|
|
git commit -m "Second junk for work" &&
|
|
|
|
git push --recurse-submodules=on-demand ../pub.git master
|
|
|
|
) &&
|
|
|
|
(
|
|
|
|
cd submodule.git &&
|
|
|
|
git rev-parse master >../actual
|
|
|
|
) &&
|
|
|
|
test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'push unpushed submodules recursively' '
|
|
|
|
(
|
|
|
|
cd work &&
|
|
|
|
(
|
|
|
|
cd gar/bage &&
|
|
|
|
git checkout master &&
|
|
|
|
> junk7 &&
|
|
|
|
git add junk7 &&
|
|
|
|
git commit -m "Seventh junk" &&
|
|
|
|
git rev-parse master >../../../expected
|
|
|
|
) &&
|
|
|
|
git checkout master &&
|
|
|
|
git add gar/bage &&
|
|
|
|
git commit -m "Seventh commit for gar/bage" &&
|
|
|
|
git push --recurse-submodules=on-demand ../pub.git master
|
|
|
|
) &&
|
|
|
|
(
|
|
|
|
cd submodule.git &&
|
|
|
|
git rev-parse master >../actual
|
|
|
|
) &&
|
|
|
|
test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
|
|
|
test_expect_success 'push unpushable submodule recursively fails' '
|
|
|
|
(
|
|
|
|
cd work &&
|
|
|
|
(
|
|
|
|
cd gar/bage &&
|
|
|
|
git rev-parse origin/master >../../../expected &&
|
|
|
|
git checkout master~0 &&
|
|
|
|
> junk8 &&
|
|
|
|
git add junk8 &&
|
|
|
|
git commit -m "Eighth junk"
|
|
|
|
) &&
|
|
|
|
git add gar/bage &&
|
|
|
|
git commit -m "Eighth commit for gar/bage" &&
|
|
|
|
test_must_fail git push --recurse-submodules=on-demand ../pub.git master
|
|
|
|
) &&
|
|
|
|
(
|
|
|
|
cd submodule.git &&
|
|
|
|
git rev-parse master >../actual
|
|
|
|
) &&
|
|
|
|
test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
2009-08-13 19:41:14 +00:00
|
|
|
test_done
|