Subject: [PATCH] submodules: print "registered for path" message only once

From: Jens Lehmann <[email-masked]>
Date: Mon, 28 May 2012 21:46:58 +0200

Since 2cd9de3e (submodule add: always initialize .git/config entry) the
message "Submodule '\$name' (\$url) registered for path '\$sm_path'" is
printed every time cmd_init() is called, e.g. each time "git submodule
update" is used with the --init option.

This was not intended and leads to bogus output which can confuse users
and build systems. Apart from that the $url variable was not set after the
first run which did the actual initialization and only "()" was printed
in subsequent runs where "($url)" was meant to inform the user about the
upstream repo.

Fix that by moving the say command in question into the if block where the
url is initialized, restoring the behavior that was in place before the
2cd9de3e commit. While at it also remove the comment which still describes
the logic used before 2cd9de3e and add a comment about how things work now.

Reported-by: Nicolas Viennot and Sid Nair <[email-masked]>
Reported-by: Heiko Voigt <[email-masked]>
Signed-off-by: Jens Lehmann <[email-masked]>
---

Am 28.05.2012 11:41, schrieb Nicolas Viennot and Sid Nair:
> When git submodule init was called, the $url variable was not initialized
> properly for submodules which have already been initialized. This led
> to two problems.
> 
> First, when all of the submodules were initialized, each showed an empty url
> instead of the actual url.
> 
> Second, when previously initialized submodules were printed after newly
> added submodules, the displayed urls were incorrect.

Thanks for pointing this one out. Me thinks the real culprit here is to
print the "registered for path" message even though that was not what
was done. This popped up last week at $dayjob and I just got around to
do this fix when your patch appeared on the list ;-)

 git-submodule.sh | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/git-submodule.sh b/git-submodule.sh
index 64a70d6..5c61ae2 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -396,8 +396,9 @@ cmd_init()
 	module_list "$@" |
 	while read mode sha1 stage sm_path
 	do
-		# Skip already registered paths
 		name=$(module_name "$sm_path") || exit
+
+		# Copy url setting when it is not set yet
 		if test -z "$(git config "submodule.$name.url")"
 		then
 			url=$(git config -f .gitmodules submodule."$name".url)
@@ -412,6 +413,8 @@ cmd_init()
 			esac
 			git config submodule."$name".url "$url" ||
 			die "$(eval_gettext "Failed to register url for submodule path '\$sm_path'")"
+
+			say "$(eval_gettext "Submodule '\$name' (\$url) registered for path '\$sm_path'")"
 		fi

 		# Copy "update" setting when it is not set yet
@@ -420,8 +423,6 @@ cmd_init()
 		test -n "$(git config submodule."$name".update)" ||
 		git config submodule."$name".update "$upd" ||
 		die "$(eval_gettext "Failed to register update mode for submodule path '\$sm_path'")"
-
-		say "$(eval_gettext "Submodule '\$name' (\$url) registered for path '\$sm_path'")"
 	done
 }

-- 
1.7.11.rc0.dirty