These tests document how submodule sync and init handle various kinds of relative super project origin URLs. The submodule URL path is ../subrepo. 6 cases are documented: foo foo/bar ./foo ./foo/bar ../foo ../foo/bar Signed-off-by: Jon Seymour <jon.seymour@xxxxxxxxx> --- t/t7400-submodule-basic.sh | 62 +++++++++++++++++++++++++++++++++++++++++++++ t/t7403-submodule-sync.sh | 63 +++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 124 insertions(+), 1 deletion(-) diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh index 81827e6..97e7a73 100755 --- a/t/t7400-submodule-basic.sh +++ b/t/t7400-submodule-basic.sh @@ -507,6 +507,68 @@ test_expect_success 'relative path works with user@host:path' ' ) ' +test_expect_success 'relative path works with foo' " + ( + cd reltest && + cp pristine-.git-config .git/config && + git config remote.origin.url foo && + echo \"cannot strip one component off url 'foo'\" >expect && + test_must_fail git submodule init 2>actual && + cat actual && + test_cmp expect actual + ) +" + +test_expect_success 'relative path works with foo/bar' ' + ( + cd reltest && + cp pristine-.git-config .git/config && + git config remote.origin.url foo/bar && + git submodule init && + test "$(git config submodule.sub.url)" = foo/subrepo + ) +' + +test_expect_success 'relative path works with ./foo' ' + ( + cd reltest && + cp pristine-.git-config .git/config && + git config remote.origin.url ./foo && + git submodule init && + test "$(git config submodule.sub.url)" = ./subrepo + ) +' + +test_expect_success 'relative path works with ./foo/bar' ' + ( + cd reltest && + cp pristine-.git-config .git/config && + git config remote.origin.url ./foo/bar && + git submodule init && + test "$(git config submodule.sub.url)" = ./foo/subrepo + ) +' + +test_expect_success 'relative path works with ../foo' ' + ( + cd reltest && + cp pristine-.git-config .git/config && + git config remote.origin.url ../foo && + git submodule init && + test "$(git config submodule.sub.url)" = ../subrepo + ) +' + +test_expect_success 'relative path works with ../foo/bar' ' + ( + cd reltest && + cp pristine-.git-config .git/config && + git config remote.origin.url ../foo/bar && + git submodule init && + test "$(git config submodule.sub.url)" = ../foo/subrepo + ) +' + test_expect_success 'moving the superproject does not break submodules' ' ( cd addtest && diff --git a/t/t7403-submodule-sync.sh b/t/t7403-submodule-sync.sh index 3620215..3784c9b 100755 --- a/t/t7403-submodule-sync.sh +++ b/t/t7403-submodule-sync.sh @@ -26,7 +26,9 @@ test_expect_success setup ' (cd super-clone && git submodule update --init) && git clone super empty-clone && (cd empty-clone && git submodule init) && - git clone super top-only-clone + git clone super top-only-clone && + git clone super relative-clone && + (cd relative-clone && git submodule update --init) ' test_expect_success 'change submodule' ' @@ -86,4 +88,63 @@ test_expect_success '"git submodule sync" should not vivify uninteresting submod ) ' +test_expect_success '"git submodule sync" handles origin URL of the form foo' " + (cd relative-clone && + git remote set-url origin foo + echo \"cannot strip one component off url 'foo'\" > expect && + test_must_fail git submodule sync 2> actual && + test_cmp expect actual + ) +" + +test_expect_success '"git submodule sync" handles origin URL of the form foo/bar' ' + (cd relative-clone && + git remote set-url origin foo/bar + git submodule sync && + (cd submodule && + test "$(git config remote.origin.url)" == "foo/submodule" + ) + ) +' + +test_expect_success '"git submodule sync" handles origin URL of the form ./foo' ' + (cd relative-clone && + git remote set-url origin ./foo + git submodule sync && + (cd submodule && + test "$(git config remote.origin.url)" == "./submodule" + ) + ) +' + +test_expect_success '"git submodule sync" handles origin URL of the form ./foo/bar' ' + (cd relative-clone && + git remote set-url origin ./foo/bar + git submodule sync && + (cd submodule && + test "$(git config remote.origin.url)" == "./foo/submodule" + ) + ) +' + +test_expect_success '"git submodule sync" handles origin URL of the form ../foo' ' + (cd relative-clone && + git remote set-url origin ../foo + git submodule sync && + (cd submodule && + test "$(git config remote.origin.url)" == "../submodule" + ) + ) +' + +test_expect_success '"git submodule sync" handles origin URL of the form ../foo/bar' ' + (cd relative-clone && + git remote set-url origin ../foo/bar + git submodule sync && + (cd submodule && + test "$(git config remote.origin.url)" == "../foo/submodule" + ) + ) +' + test_done -- 1.7.10.2.594.g24e850d -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html