submodule: drop the top-level requirement
Use the new rev-parse --prefix option to process all paths given to the submodule command, dropping the requirement that it be run from the top-level of the repository. Since the interpretation of a relative submodule URL depends on whether or not "remote.origin.url" is configured, explicitly block relative URLs in "git submodule add" when not at the top level of the working tree. Signed-off-by: John Keeping <john@keeping.me.uk> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
12b9d32790
commit
091a6eb0fe
@ -61,6 +61,19 @@ test_expect_success 'change submodule' '
|
||||
)
|
||||
'
|
||||
|
||||
reset_submodule_urls () {
|
||||
local root
|
||||
root=$(pwd) &&
|
||||
(
|
||||
cd super-clone/submodule &&
|
||||
git config remote.origin.url "$root/submodule"
|
||||
) &&
|
||||
(
|
||||
cd super-clone/submodule/sub-submodule &&
|
||||
git config remote.origin.url "$root/submodule"
|
||||
)
|
||||
}
|
||||
|
||||
test_expect_success 'change submodule url' '
|
||||
(
|
||||
cd super &&
|
||||
@ -132,6 +145,65 @@ test_expect_success '"git submodule sync --recursive" should update all submodul
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success 'reset submodule URLs' '
|
||||
reset_submodule_urls super-clone
|
||||
'
|
||||
|
||||
test_expect_success '"git submodule sync" should update submodule URLs - subdirectory' '
|
||||
(
|
||||
cd super-clone &&
|
||||
git pull --no-recurse-submodules &&
|
||||
mkdir -p sub &&
|
||||
cd sub &&
|
||||
git submodule sync >../../output
|
||||
) &&
|
||||
grep "\\.\\./submodule" output &&
|
||||
test -d "$(
|
||||
cd super-clone/submodule &&
|
||||
git config remote.origin.url
|
||||
)" &&
|
||||
test ! -d "$(
|
||||
cd super-clone/submodule/sub-submodule &&
|
||||
git config remote.origin.url
|
||||
)" &&
|
||||
(
|
||||
cd super-clone/submodule &&
|
||||
git checkout master &&
|
||||
git pull
|
||||
) &&
|
||||
(
|
||||
cd super-clone &&
|
||||
test -d "$(git config submodule.submodule.url)"
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success '"git submodule sync --recursive" should update all submodule URLs - subdirectory' '
|
||||
(
|
||||
cd super-clone &&
|
||||
(
|
||||
cd submodule &&
|
||||
git pull --no-recurse-submodules
|
||||
) &&
|
||||
mkdir -p sub &&
|
||||
cd sub &&
|
||||
git submodule sync --recursive >../../output
|
||||
) &&
|
||||
grep "\\.\\./submodule/sub-submodule" output &&
|
||||
test -d "$(
|
||||
cd super-clone/submodule &&
|
||||
git config remote.origin.url
|
||||
)" &&
|
||||
test -d "$(
|
||||
cd super-clone/submodule/sub-submodule &&
|
||||
git config remote.origin.url
|
||||
)" &&
|
||||
(
|
||||
cd super-clone/submodule/sub-submodule &&
|
||||
git checkout master &&
|
||||
git pull
|
||||
)
|
||||
'
|
||||
|
||||
test_expect_success '"git submodule sync" should update known submodule URLs' '
|
||||
(
|
||||
cd empty-clone &&
|
||||
|
Reference in New Issue
Block a user