On Monday 13 July 2009, Johan Herland wrote: > On Monday 13 July 2009, Peter Voss wrote: > > On 13.07.2009, at 12:59, Johan Herland wrote: > > > You might be able to pull this off using relative submodule URLs. > > > > That's a good hint. Unfortunately I can't use this to go up 2 > > directories. I.e. I can't get from > > git@xxxxxxxxxx:xxx/mymodule.git > > to > > git@xxxxxxxxxx:yyy/foo.git > > > > Using the relative URL ../../yyy/foo.git leads to the result: > > Clone of 'git@xxxxxxxxxx:xxx/yyy/foo.git' into submodule path 'foo' > > failed > > > > So I basically cannot replace the xxx part. > > This is due to a small bug in git-submodule.sh. In the > resolve_relative_url() function, when repeatedly unwrapping '../'s > from $url in the while loop, the line remoteurl="${remoteurl%/*}" > removes everything _after_ the last slash, which does not work for > the git@xxxxxxxxxx:xxx part of your URL. > > This should be relatively easy to fix, although maybe not as > straightforwardly trivial as it might seem at first sight. > > I don't have the time to look into this now, so feel free to take a > stab at it. Here's a first stab at it (TOTALLY UNTESTED). Obviously it needs a testcase (typically in t7400-submodule-basic.sh) as well. Have fun! :) ...Johan diff --git a/git-submodule.sh b/git-submodule.sh index ebed711..7d8f7a7 100755 --- a/git-submodule.sh +++ b/git-submodule.sh @@ -27,12 +27,19 @@ 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%/*}" + newremoteurl="${remoteurl%/*}" + if test "$newremoteurl" = "$remoteurl" -a "$sep" = "/" + then + newremoteurl="${remoteurl%:*}" + sep=":" + fi + remoteurl="$newremoteurl" ;; ./*) url="${url#./}" @@ -41,7 +48,7 @@ resolve_relative_url () break;; esac done - echo "$remoteurl/${url%/}" + echo "$remoteurl$sep${url%/}" } # -- Johan Herland, <johan@xxxxxxxxxxx> www.herland.net -- 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