diff options
author | John Keeping <john@keeping.me.uk> | 2013-06-16 15:18:18 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2013-06-17 13:30:01 -0700 |
commit | 091a6eb0feed820a43663ca63dc2bc0bb247bbae (patch) | |
tree | b4a6a61b74de57b56288d17b3613193a616c06db /t/t7403-submodule-sync.sh | |
parent | 12b9d32790b40bf3ea49134095619700191abf1f (diff) | |
download | git-091a6eb0feed820a43663ca63dc2bc0bb247bbae.tar.gz |
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>
Diffstat (limited to 't/t7403-submodule-sync.sh')
-rwxr-xr-x | t/t7403-submodule-sync.sh | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/t/t7403-submodule-sync.sh b/t/t7403-submodule-sync.sh index bf90098a1a..79bc135bf6 100755 --- a/t/t7403-submodule-sync.sh +++ b/t/t7403-submodule-sync.sh @@ -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 && |