diff options
author | Jens Lehmann <Jens.Lehmann@web.de> | 2011-06-26 01:26:02 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2011-06-26 13:15:21 -0700 |
commit | 2cd9de3e18183422cd7ec3cd81cebc656068ea42 (patch) | |
tree | fce94bdd614ab5495fb5ec7c7be70b9cbbb754f8 | |
parent | ccee60862bbba6aa65fafbdb1ce357d2b31a795b (diff) | |
download | git-2cd9de3e18183422cd7ec3cd81cebc656068ea42.tar.gz |
submodule add: always initialize .git/config entry
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>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rwxr-xr-x | git-submodule.sh | 35 |
1 files changed, 18 insertions, 17 deletions
diff --git a/git-submodule.sh b/git-submodule.sh index ce659714fe..ec6178ee99 100755 --- a/git-submodule.sh +++ b/git-submodule.sh @@ -231,7 +231,6 @@ cmd_add() url="$repo" ;; esac - git config submodule."$path".url "$url" else module_clone "$path" "$realrepo" "$reference" || exit @@ -245,6 +244,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'" @@ -340,25 +340,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'" |