From ea640cc691d56f7151c5ba654b09c4a987dbef93 Mon Sep 17 00:00:00 2001 From: Thomas Rast Date: Mon, 10 Jan 2011 11:37:26 +0100 Subject: submodule: fix relative url parsing for scp-style origin The function resolve_relative_url was not prepared to deal with an scp-style origin 'user@host:path' in the case where 'path' is only a single component. Fix this by extending the logic that strips one path component from the $remoteurl. Also add tests for both styles of URLs. Noticed-by: Jeffrey Phillips Freeman Signed-off-by: Thomas Rast Signed-off-by: Junio C Hamano --- git-submodule.sh | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'git-submodule.sh') diff --git a/git-submodule.sh b/git-submodule.sh index d3c583d011..ac371e6253 100755 --- a/git-submodule.sh +++ b/git-submodule.sh @@ -36,12 +36,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#./}" @@ -50,7 +62,7 @@ resolve_relative_url () break;; esac done - echo "$remoteurl/${url%/}" + echo "$remoteurl$sep${url%/}" } # -- cgit v1.2.3