submodule: document failure to handle relative superproject origin URLs
authorJon Seymour <jon.seymour@gmail.com>
Sun, 3 Jun 2012 09:46:48 +0000 (19:46 +1000)
committerJunio C Hamano <gitster@pobox.com>
Sun, 3 Jun 2012 21:35:09 +0000 (14:35 -0700)
This test case documents several cases where handling of relative
superproject origin URLs doesn't produce an expected result.

submodule.{sub}.url in the superproject is incorrect in these cases:
  foo
  ./foo
  ./foo/bar

The remote.origin.url of the submodule is incorrect in the above cases
and also when the superproject origin URL is like:
  foo/bar
  ../foo
  ../foo/bar

Signed-off-by: Jon Seymour <jon.seymour@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t7400-submodule-basic.sh
t/t7403-submodule-sync.sh

index 9428c7a744cbcfd973b3da7cdd7b6d1d3d374c8a..09e2b9bf16e6bd2d9031aa221e8b259228602d54 100755 (executable)
@@ -564,6 +564,18 @@ test_expect_success '../subrepo works with scp-style URL - user@host:path/to/rep
        )
 '
 
+test_expect_failure '../subrepo works with relative local path - foo' '
+       (
+               cd reltest &&
+               cp pristine-.git-config .git/config &&
+               cp pristine-.gitmodules .gitmodules &&
+               git config remote.origin.url foo &&
+               # actual: fails with an error
+               git submodule init &&
+               test "$(git config submodule.sub.url)" = subrepo
+       )
+'
+
 test_expect_success '../subrepo works with relative local path - foo/bar' '
        (
                cd reltest &&
@@ -575,6 +587,28 @@ test_expect_success '../subrepo works with relative local path - foo/bar' '
        )
 '
 
+test_expect_failure '../subrepo works with relative local path - ./foo' '
+       (
+               cd reltest &&
+               cp pristine-.git-config .git/config &&
+               cp pristine-.gitmodules .gitmodules &&
+               git config remote.origin.url ./foo &&
+               git submodule init &&
+               test "$(git config submodule.sub.url)" = subrepo
+       )
+'
+
+test_expect_failure '../subrepo works with relative local path - ./foo/bar' '
+       (
+               cd reltest &&
+               cp pristine-.git-config .git/config &&
+               cp pristine-.gitmodules .gitmodules &&
+               git config remote.origin.url ./foo/bar &&
+               git submodule init &&
+               test "$(git config submodule.sub.url)" = foo/subrepo
+       )
+'
+
 test_expect_success '../subrepo works with relative local path - ../foo' '
        (
                cd reltest &&
index 3620215c1f84b8e184b470c92b9a01c15fd75dc2..56b933da45a761988a278c1edc53bb6c724e0c77 100755 (executable)
@@ -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,90 @@ test_expect_success '"git submodule sync" should not vivify uninteresting submod
        )
 '
 
+test_expect_failure '"git submodule sync" handles origin URL of the form foo' '
+       (cd relative-clone &&
+        git remote set-url origin foo &&
+        git submodule sync &&
+       (cd submodule &&
+        #actual fails with: "cannot strip off url foo
+        test "$(git config remote.origin.url)" = "../submodule"
+       )
+       )
+'
+
+test_expect_failure '"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 &&
+        #actual foo/submodule
+        test "$(git config remote.origin.url)" = "../foo/submodule"
+       )
+       )
+'
+
+test_expect_failure '"git submodule sync" handles origin URL of the form ./foo' '
+       (cd relative-clone &&
+        git remote set-url origin ./foo &&
+        git submodule sync &&
+       (cd submodule &&
+        #actual ./submodule
+        test "$(git config remote.origin.url)" = "../submodule"
+       )
+       )
+'
+
+test_expect_failure '"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 &&
+        #actual ./foo/submodule
+        test "$(git config remote.origin.url)" = "../foo/submodule"
+       )
+       )
+'
+
+test_expect_failure '"git submodule sync" handles origin URL of the form ../foo' '
+       (cd relative-clone &&
+        git remote set-url origin ../foo &&
+        git submodule sync &&
+       (cd submodule &&
+        #actual ../submodule
+        test "$(git config remote.origin.url)" = "../../submodule"
+       )
+       )
+'
+
+test_expect_failure '"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 &&
+        #actual ../foo/submodule
+        test "$(git config remote.origin.url)" = "../../foo/submodule"
+       )
+       )
+'
+
+test_expect_failure '"git submodule sync" handles origin URL of the form ../foo/bar with deeply nested submodule' '
+       (cd relative-clone &&
+        git remote set-url origin ../foo/bar &&
+        mkdir -p a/b/c &&
+        ( cd a/b/c &&
+          git init &&
+          :> .gitignore &&
+          git add .gitignore &&
+          test_tick &&
+          git commit -m "initial commit" ) &&
+        git submodule add ../bar/a/b/c ./a/b/c &&
+        git submodule sync &&
+       (cd a/b/c &&
+        #actual ../foo/bar/a/b/c
+        test "$(git config remote.origin.url)" = "../../../../foo/bar/a/b/c"
+       )
+       )
+'
+
+
 test_done