git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Jens Lehmann <Jens.Lehmann@web.de>
Cc: "Maarten Billemont" <lhunath@gmail.com>,
	"Git Mailing List" <git@vger.kernel.org>,
	"Andreas Köhler" <andi5.py@gmx.net>
Subject: Re: ''git submodule sync'' should not add uninitialized submodules to .git/config
Date: Thu, 23 Jun 2011 15:28:30 -0700	[thread overview]
Message-ID: <7vboxo2ne9.fsf@alter.siamese.dyndns.org> (raw)
In-Reply-To: <4E0390A7.8040505@web.de> (Jens Lehmann's message of "Thu, 23 Jun 2011 21:14:47 +0200")

Jens Lehmann <Jens.Lehmann@web.de> writes:

> I agree that 33f072f introduced a regression. One could argue if it was
> a good idea to let "git submodule init" not do the clone itself but defer
> it to "git submodule update" by setting the url in .git/config, but that's
> the way things are done now (and maybe there was a very good reason to do
> it that way I'm not aware of, because I didn't follow the list that closely
> back then).

Actually, shouldn't the fix be more like this patch, which is directly on
top of 33f072f?  I think this is more in line with what the end user wants
to tell the system with "submodule init", namely "I am interested in this
submodule".

-- >8 --
Subject: submodule sync: do not auto-vivify uninteresting submodule

Earlier 33f072f (submodule sync: Update "submodule.<name>.url" for empty
directories, 2010-10-08) attempted to fix a bug where "git submodule sync"
command does not update the URL if the current superproject does not have
a checkout of the submodule.

However, it did so by unconditionally registering submodule.$name.url to
every submodule in the project, even the ones that the user has never
showed interest in at all by running 'git submodule init' command. This
caused subsequent 'git submodule update' to start cloning/updating submodules
that are not interesting to the user at all.

Update the code so that the URL is updated from the .gitmodules file only
for submodules that already have submodule.$name.url entries, i.e. the
ones the user has showed interested in having a checkout.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
---

 git-submodule.sh          |   23 +++++++++++++----------
 t/t7403-submodule-sync.sh |   13 +++++++++++--
 2 files changed, 24 insertions(+), 12 deletions(-)

diff --git a/git-submodule.sh b/git-submodule.sh
index c291eed..ce65971 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -836,17 +836,20 @@ cmd_sync()
 			;;
 		esac
 
-		say "Synchronizing submodule url for '$name'"
-		git config submodule."$name".url "$url"
-
-		if test -e "$path"/.git
+		if git config "submodule.$name.url" >/dev/null 2>/dev/null
 		then
-		(
-			clear_local_git_env
-			cd "$path"
-			remote=$(get_default_remote)
-			git config remote."$remote".url "$url"
-		)
+			say "Synchronizing submodule url for '$name'"
+			git config submodule."$name".url "$url"
+
+			if test -e "$path"/.git
+			then
+			(
+				clear_local_git_env
+				cd "$path"
+				remote=$(get_default_remote)
+				git config remote."$remote".url "$url"
+			)
+			fi
 		fi
 	done
 }
diff --git a/t/t7403-submodule-sync.sh b/t/t7403-submodule-sync.sh
index e5b1953..597a06f 100755
--- a/t/t7403-submodule-sync.sh
+++ b/t/t7403-submodule-sync.sh
@@ -25,7 +25,8 @@ test_expect_success setup '
 	git clone super super-clone &&
 	(cd super-clone && git submodule update --init) &&
 	git clone super empty-clone &&
-	(cd empty-clone && git submodule init)
+	(cd empty-clone && git submodule init) &&
+	git clone super top-only-clone
 '
 
 test_expect_success 'change submodule' '
@@ -66,7 +67,7 @@ test_expect_success '"git submodule sync" should update submodule URLs' '
 	)
 '
 
-test_expect_success '"git submodule sync" should update submodule URLs if not yet cloned' '
+test_expect_success '"git submodule sync" should update known submodule URLs' '
 	(cd empty-clone &&
 	 git pull &&
 	 git submodule sync &&
@@ -74,4 +75,12 @@ test_expect_success '"git submodule sync" should update submodule URLs if not ye
 	)
 '
 
+test_expect_success '"git submodule sync" should not vivify uninteresting submodule' '
+	(cd top-only-clone &&
+	 git pull &&
+	 git submodule sync &&
+	 test -z "$(git config submodule.submodule.url)"
+	)
+'
+
 test_done

  reply	other threads:[~2011-06-23 22:28 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-06-23 11:13 ''git submodule sync'' should not add uninitialized submodules to .git/config Maarten Billemont
2011-06-23 13:39 ` Phil Hord
2011-06-23 14:35 ` Junio C Hamano
2011-06-23 19:14   ` Jens Lehmann
2011-06-23 22:28     ` Junio C Hamano [this message]
2011-06-23 23:10       ` Andreas Köhler
2011-06-24  6:17         ` Jens Lehmann
2011-06-24  4:13       ` Re* " Junio C Hamano
2011-06-24  6:20         ` Jens Lehmann
2011-06-25 23:26         ` [PATCH] submodule add: always initialize .git/config entry Jens Lehmann
2011-06-30  0:47           ` Junio C Hamano
2011-06-25 20:41       ` [PATCH v2] submodule sync: do not auto-vivify uninteresting submodule Jens Lehmann
2011-06-23 20:01   ` ''git submodule sync'' should not add uninitialized submodules to .git/config Phil Hord
2011-06-23 21:47     ` Junio C Hamano
2011-06-23 23:06       ` Phil Hord

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=7vboxo2ne9.fsf@alter.siamese.dyndns.org \
    --to=gitster@pobox.com \
    --cc=Jens.Lehmann@web.de \
    --cc=andi5.py@gmx.net \
    --cc=git@vger.kernel.org \
    --cc=lhunath@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).