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

[PATCH 3/7] git-submodule: Extract absolute_url & move absolute url logic to module_clone

From
Ping Yin <pkufranky@gmail.com>
Date
Mar 13, 2008, 17:56 UTC
Message-ID
<1205431001-18590-4-git-send-email-pkufranky@gmail.com>
In-Reply-To
<1205431001-18590-3-git-send-email-pkufranky@gmail.com>

Extract function absolute_url to remove code redundant and inconsistence in cmd_init and cmd_add when resolving relative url/path to absolute one.

Also move resolving absolute url logic from cmd_add to module_clone which results in a litte behaviour change: cmd_update originally doesn't resolve absolute url but now it will.

This behaviour change breaks t7400 which uses relative url './.subrepo'. However, this test originally doesn't mean to test relative url, so fix the url as '.subrepo'.

Signed-off-by: Ping Yin <pkufranky@gmail.com>
---
 git-submodule.sh           |   41 ++++++++++++++++++-----------------------
 t/t7400-submodule-basic.sh |    2 +-
 2 files changed, 19 insertions(+), 24 deletions(-)
diff --git a/git-submodule.sh b/git-submodule.sh
index 7545d1a..0e14078 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -65,6 +65,21 @@ resolve_relative_url ()
 	echo "$remoteurl/$url"
 }
 
+# Resolve relative url/path to absolute one
+absolute_url () {
+	case "$1" in
+	./*|../*)
+		# dereference source url relative to parent's url
+		url="$(resolve_relative_url $1)" ;;
+	*)
+		# Turn the source into an absolute path if it is local
+		url=$(get_repo_base "$1") ||
+		url=$1
+		;;
+	esac
+	echo "$url"
+}
+
 #
 # Map submodule path to submodule name
 #
@@ -112,7 +127,7 @@ module_info() {
 module_clone()
 {
 	path=$1
-	url=$2
+	url=$(absolute_url "$2")
 
 	# If there already is a directory at the submodule path,
 	# expect it to be empty (since that is the default checkout
@@ -195,21 +210,7 @@ cmd_add()
 			die "'$path' already exists and is not a valid git repo"
 		fi
 	else
-		case "$repo" in
-		./*|../*)
-			# dereference source url relative to parent's url
-			realrepo="$(resolve_relative_url $repo)" ;;
-		*)
-			# Turn the source into an absolute path if
-			# it is local
-			if base=$(get_repo_base "$repo"); then
-				repo="$base"
-			fi
-			realrepo=$repo
-			;;
-		esac
-
-		module_clone "$path" "$realrepo" || exit
+		module_clone "$path" "$repo" || exit
 		(unset GIT_DIR; cd "$path" && git checkout -q ${branch:+-b "$branch" "origin/$branch"}) ||
 		die "Unable to checkout submodule '$path'"
 	fi
@@ -262,13 +263,7 @@ cmd_init()
 		test -z "$url" &&
 		die "No url found for submodule path '$path' in .gitmodules"
 
-		# Possibly a url relative to parent
-		case "$url" in
-		./*|../*)
-			url="$(resolve_relative_url "$url")"
-			;;
-		esac
-
+		url=$(absolute_url "$url")
 		git config submodule."$name".url "$url" ||
 		die "Failed to register url for submodule path '$path'"
 
diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh
index 2ef85a8..e5d59b8 100755
--- a/t/t7400-submodule-basic.sh
+++ b/t/t7400-submodule-basic.sh
@@ -75,7 +75,7 @@ test_expect_success 'init should register submodule url in .git/config' '
 	then
 		echo "[OOPS] init succeeded but submodule url is wrong"
 		false
-	elif ! git config submodule.example.url ./.subrepo
+	elif ! git config submodule.example.url .subrepo
 	then
 		echo "[OOPS] init succeeded but update of url failed"
 		false
-- 
1.5.4.4.653.g7cf1e
Previous: Ping YinNext: Ping Yin
Message 4 of 10 in “git-submodule enhancements”
  1. 0/7 git-submodule enhancementsPing Yin, Mar 13, 2008
  2. 1/7 git-submodule: Avoid 'fatal: cannot describe' messagePing Yin, Mar 13, 2008
  3. 2/7 git-submodule: Extract functions module_info and module_urlPing Yin, Mar 13, 2008
  4. 3/7 git-submodule: Extract absolute_url & move absolute url logic to module_clonePing Yin, Mar 13, 2008
  5. 4/7 git-submodule: Fall back on .gitmodules if info not found in $GIT_DIR/configPing Yin, Mar 13, 2008
  6. 5/7 git-submodule: Extract module_add from cmd_addPing Yin, Mar 13, 2008
  7. 6/7 git-submodule: multi-level module definitionPing Yin, Mar 13, 2008
  8. 7/7 git-submodule: Don't die when command fails for one submodulePing Yin, Mar 13, 2008
  9. Ping YinMar 14, 2008
  10. Ping YinMar 13, 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.