Skip to content

Commit

Permalink
submodule: document failure to handle relative superproject origin URLs
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Jon Seymour authored and Junio C Hamano committed Jun 3, 2012
1 parent 712693e commit 49301c6
Show file tree
Hide file tree
Showing 2 changed files with 123 additions and 1 deletion.
34 changes: 34 additions & 0 deletions t/t7400-submodule-basic.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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 &&
Expand All @@ -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 &&
Expand Down
90 changes: 89 additions & 1 deletion t/t7403-submodule-sync.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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' '
Expand Down Expand Up @@ -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

0 comments on commit 49301c6

Please sign in to comment.