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>maint
							parent
							
								
									ccee60862b
								
							
						
					
					
						commit
						2cd9de3e18
					
				|  | @ -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 New Issue
	
	 Jens Lehmann
						Jens Lehmann