mirror of
https://github.com/git/git
synced 2024-10-30 04:01:21 +00:00
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>
This commit is contained in:
parent
ccee60862b
commit
2cd9de3e18
1 changed files with 17 additions and 16 deletions
|
@ -231,7 +231,6 @@ cmd_add()
|
||||||
url="$repo"
|
url="$repo"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
git config submodule."$path".url "$url"
|
|
||||||
else
|
else
|
||||||
|
|
||||||
module_clone "$path" "$realrepo" "$reference" || exit
|
module_clone "$path" "$realrepo" "$reference" || exit
|
||||||
|
@ -245,6 +244,7 @@ cmd_add()
|
||||||
esac
|
esac
|
||||||
) || die "Unable to checkout submodule '$path'"
|
) || die "Unable to checkout submodule '$path'"
|
||||||
fi
|
fi
|
||||||
|
git config submodule."$path".url "$url"
|
||||||
|
|
||||||
git add $force "$path" ||
|
git add $force "$path" ||
|
||||||
die "Failed to add submodule '$path'"
|
die "Failed to add submodule '$path'"
|
||||||
|
@ -340,25 +340,26 @@ cmd_init()
|
||||||
do
|
do
|
||||||
# Skip already registered paths
|
# Skip already registered paths
|
||||||
name=$(module_name "$path") || exit
|
name=$(module_name "$path") || exit
|
||||||
url=$(git config submodule."$name".url)
|
if test -z "$(git config "submodule.$name.url")"
|
||||||
test -z "$url" || continue
|
then
|
||||||
|
url=$(git config -f .gitmodules submodule."$name".url)
|
||||||
|
test -z "$url" &&
|
||||||
|
die "No url found for submodule path '$path' in .gitmodules"
|
||||||
|
|
||||||
url=$(git config -f .gitmodules submodule."$name".url)
|
# Possibly a url relative to parent
|
||||||
test -z "$url" &&
|
case "$url" in
|
||||||
die "No url found for submodule path '$path' in .gitmodules"
|
./*|../*)
|
||||||
|
url=$(resolve_relative_url "$url") || exit
|
||||||
# Possibly a url relative to parent
|
;;
|
||||||
case "$url" in
|
esac
|
||||||
./*|../*)
|
git config submodule."$name".url "$url" ||
|
||||||
url=$(resolve_relative_url "$url") || exit
|
die "Failed to register url for submodule path '$path'"
|
||||||
;;
|
fi
|
||||||
esac
|
|
||||||
|
|
||||||
git config submodule."$name".url "$url" ||
|
|
||||||
die "Failed to register url for submodule path '$path'"
|
|
||||||
|
|
||||||
|
# Copy "update" setting when it is not set yet
|
||||||
upd="$(git config -f .gitmodules submodule."$name".update)"
|
upd="$(git config -f .gitmodules submodule."$name".update)"
|
||||||
test -z "$upd" ||
|
test -z "$upd" ||
|
||||||
|
test -n "$(git config submodule."$name".update)" ||
|
||||||
git config submodule."$name".update "$upd" ||
|
git config submodule."$name".update "$upd" ||
|
||||||
die "Failed to register update mode for submodule path '$path'"
|
die "Failed to register update mode for submodule path '$path'"
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue