diff options
author | Junio C Hamano <gitster@pobox.com> | 2011-01-19 08:26:41 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2011-01-19 08:26:41 -0800 |
commit | 8a59702ad888c8c399b096759c1c678ffeca5b03 (patch) | |
tree | 5674eda08174e7e2cc0c0e6dfe0b74d8db2e8fbf | |
parent | ea9590789fecdf1eb48bba6d8b8cadab3441fbda (diff) | |
parent | ea640cc691d56f7151c5ba654b09c4a987dbef93 (diff) | |
download | git-8a59702ad888c8c399b096759c1c678ffeca5b03.tar.gz |
Merge branch 'tr/submodule-relative-scp-url' into maint
* tr/submodule-relative-scp-url:
submodule: fix relative url parsing for scp-style origin
-rwxr-xr-x | git-submodule.sh | 16 | ||||
-rwxr-xr-x | t/t7400-submodule-basic.sh | 38 |
2 files changed, 52 insertions, 2 deletions
diff --git a/git-submodule.sh b/git-submodule.sh index 6af1f7e7fd..9e752904b3 100755 --- a/git-submodule.sh +++ b/git-submodule.sh @@ -37,12 +37,24 @@ resolve_relative_url () die "remote ($remote) does not have a url defined in .git/config" url="$1" remoteurl=${remoteurl%/} + sep=/ while test -n "$url" do case "$url" in ../*) url="${url#../}" - remoteurl="${remoteurl%/*}" + case "$remoteurl" in + */*) + remoteurl="${remoteurl%/*}" + ;; + *:*) + remoteurl="${remoteurl%:*}" + sep=: + ;; + *) + die "cannot strip one component off url '$remoteurl'" + ;; + esac ;; ./*) url="${url#./}" @@ -51,7 +63,7 @@ resolve_relative_url () break;; esac done - echo "$remoteurl/${url%/}" + echo "$remoteurl$sep${url%/}" } # diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh index 2c49db9f62..874279e32d 100755 --- a/t/t7400-submodule-basic.sh +++ b/t/t7400-submodule-basic.sh @@ -446,4 +446,42 @@ test_expect_success 'add should fail when path is used by an existing directory' ) ' +test_expect_success 'set up for relative path tests' ' + mkdir reltest && + ( + cd reltest && + git init && + mkdir sub && + ( + cd sub && + git init && + test_commit foo + ) && + git add sub && + git config -f .gitmodules submodule.sub.path sub && + git config -f .gitmodules submodule.sub.url ../subrepo && + cp .git/config pristine-.git-config + ) +' + +test_expect_success 'relative path works with URL' ' + ( + cd reltest && + cp pristine-.git-config .git/config && + git config remote.origin.url ssh://hostname/repo && + git submodule init && + test "$(git config submodule.sub.url)" = ssh://hostname/subrepo + ) +' + +test_expect_success 'relative path works with user@host:path' ' + ( + cd reltest && + cp pristine-.git-config .git/config && + git config remote.origin.url user@host:repo && + git submodule init && + test "$(git config submodule.sub.url)" = user@host:subrepo + ) +' + test_done |