git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] git-submodule.sh - Remove trailing / from URL if found

From
Mark Levedahl <mlevedahl@gmail.com>
Date
Aug 21, 2008, 23:54 UTC
Message-ID
<1219362841-4048-1-git-send-email-mlevedahl@gmail.com>
In-Reply-To
<7vej4ii6y8.fsf@gitster.siamese.dyndns.org>

git clone does not complain if a trailing '/' is included in the origin URL, but doing so causes resolution of a submodule's URL relative to the superproject to fail. Trailing /'s are likely when cloning locally using tab-completion, so the slash may appear in either superproject or submodule URL. So, ignore the trailing slash if it already exists in the superproject's URL, and don't record one for the submodule (which could itself have submodules...).

The problem I'm trying to fix is that a number of folks have superprojects checked out where the recorded origin URL has a trailing /, and a submodule has its origin in a directory sitting right next to the superproject on the server. Thus, we have:

	superproject url = server:/public/super
	submodoule url = server:/public/sub1
However, in the checked out superproject's .git/config
[remote "origin"]
	url = server:/public/super/

and for similar reasons, the submodule has its URL recorded in .gitmodules as [submodule "sub"]

	path = submodule1
	url = ../sub1/

resolve_relative_url gets the submodule's recorded url as $1, which the caller retrieved from .gitmodules, and retrieves the superprojects origin from .git/config. So in this case resolve_relative_url has that:

	url = ../sub1/
	remoteurl = server:/public/super/
So, without any patch, resolve_relative_url computes the submodule's URL as:
	server:/public/super/sub1/
rather than
	server:/public/sub1

In summary, it is essential that resolve_relative_url strip the trailing / from the superproject's url before starting, and beneficial if it assures that the result does not contain a trailing / as the submodule may itself also be a superproject.

Signed-off-by: Mark Levedahl <mlevedahl@gmail.com>
---
 git-submodule.sh |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)
diff --git a/git-submodule.sh b/git-submodule.sh
index 2d57d60..0bc1085 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -36,6 +36,7 @@ resolve_relative_url ()
 	remoteurl=$(git config "remote.$remote.url") ||
 		die "remote ($remote) does not have a url defined in .git/config"
 	url="$1"
+	remoteurl=${remoteurl%/}
 	while test -n "$url"
 	do
 		case "$url" in
@@ -50,7 +51,7 @@ resolve_relative_url ()
 			break;;
 		esac
 	done
-	echo "$remoteurl/$url"
+	echo "$remoteurl"/"${url%/}"
 }
 
 #
-- 
1.6.0.29.g747a
Previous: Junio C Hamano
Message 7 of 7 in “git-submodule.sh - Remove trailing / from URL if found”
  1. git-submodule.sh - Remove trailing / from URL if foundMark Levedahl, Aug 20, 2008
  2. Junio C HamanoAug 20, 2008
  3. git-submodule.sh - Remove trailing / from URL if foundMark Levedahl, Aug 21, 2008
  4. Junio C HamanoAug 21, 2008
  5. Mark LevedahlAug 21, 2008
  6. Junio C HamanoAug 21, 2008
  7. git-submodule.sh - Remove trailing / from URL if foundMark Levedahl, Aug 21, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.