From: Jens Lehmann <Jens.Lehmann@web.de>
To: Junio C Hamano <gitster@pobox.com>
Cc: "Phil Hord" <hordp@cisco.com>,
"Maarten Billemont" <lhunath@gmail.com>,
"Git Mailing List" <git@vger.kernel.org>,
"Andreas Köhler" <andi5.py@gmx.net>
Subject: [PATCH] submodule add: always initialize .git/config entry
Date: Sun, 26 Jun 2011 01:26:02 +0200 [thread overview]
Message-ID: <4E066E8A.7060209@web.de> (raw)
In-Reply-To: <7vy60r27et.fsf_-_@alter.siamese.dyndns.org>
When "git submodule add $path" is run to add a subdirectory $path to the
superproject, and $path is already the top of the working tree of the
submodule repository, the command created submodule.$path.url entry in the
configuration file in the superproject. However, when adding a repository
$URL that is outside the respository of the superproject to $path that
does not exist (yet) with "git submodule add $URL $path", the command
forgot to set it up.
The user is expressing the interest in the submodule and wants to keep a
checkout, the "submodule add" command should consistently set up the
submodule.$path.url entry in either case.
As a result "git submodule init" can't simply skip the initialization of
those submodules for which it finds an url entry in the git./config
anymore. That lead to problems when adding a submodule (which now sets the
url), add the "update" setting to .gitmodules and expect init to copy that
into .git/config like it is done in t7406. So change init to only then
copy the "url" and "update" entries when they don't exist yet in the
.git/config and do nothing otherwise.
Signed-off-by: Jens Lehmann <Jens.Lehmann@web.de>
---
Am 24.06.2011 06:13, schrieb Junio C Hamano:
> Shouldn't "submodule add" add an entry for .git/config even when it cloned
> from elsewhere?
Yes, we should be consistent here.
> I suspect this fix will cascade to breakage elsewhere, but I've run out of
> energy and inclination to look at the submodule code tonight, so I'll let
> the list to take it further from here.
Ok, t7406 expected "git submodule init" to copy the new update setting
into .git/config for a newly added submodule, which it didn't do anymore
because it already found the url set. I solved that by teaching init to
only then copy the url and update settings if they aren't present yet.
Now all tests are running fine and your change to the test I added in
jl/submodule-add-relurl-wo-upstream isn't necessary anymore.
When I cherry pick that onto cbd0a3c6bc in your current pu branch and
resolve the conflicts all tests run fine (if you want me to resend this
patch based on that commit to avoid the conflicts with i18n and the
"submodule add: clean up duplicated code" patch please just say so).
git-submodule.sh | 33 +++++++++++++++++----------------
1 files changed, 17 insertions(+), 16 deletions(-)
diff --git a/git-submodule.sh b/git-submodule.sh
index 543f1d0..7e39c97 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -246,7 +246,6 @@ cmd_add()
url="$repo"
;;
esac
- git config submodule."$path".url "$url"
else
module_clone "$path" "$realrepo" "$reference" || exit
@@ -260,6 +259,7 @@ cmd_add()
esac
) || die "Unable to checkout submodule '$path'"
fi
+ git config submodule."$path".url "$url"
git add $force "$path" ||
die "Failed to add submodule '$path'"
@@ -355,25 +355,26 @@ cmd_init()
do
# Skip already registered paths
name=$(module_name "$path") || exit
- url=$(git config submodule."$name".url)
- test -z "$url" || continue
-
- url=$(git config -f .gitmodules submodule."$name".url)
- 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") || exit
- ;;
- esac
-
- git config submodule."$name".url "$url" ||
- die "Failed to register url for submodule path '$path'"
+ if test -z "$(git config "submodule.$name.url")"
+ then
+ url=$(git config -f .gitmodules submodule."$name".url)
+ 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") || exit
+ ;;
+ esac
+ git config submodule."$name".url "$url" ||
+ die "Failed to register url for submodule path '$path'"
+ fi
+ # Copy "update" setting when it is not set yet
upd="$(git config -f .gitmodules submodule."$name".update)"
test -z "$upd" ||
+ test -n "$(git config submodule."$name".update)" ||
git config submodule."$name".update "$upd" ||
die "Failed to register update mode for submodule path '$path'"
--
1.7.6.rc3.2.gcfa18
next prev parent reply other threads:[~2011-06-25 23:27 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
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 ` Jens Lehmann [this message]
2011-06-30 0:47 ` [PATCH] submodule add: always initialize .git/config entry 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=4E066E8A.7060209@web.de \
--to=jens.lehmann@web.de \
--cc=andi5.py@gmx.net \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=hordp@cisco.com \
--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).