threads / patch / 31640

patchsubmodule: configure submodule.<name>.path on add and init

Subject: [PATCH] submodule: configure submodule.<name>.path on add and init

## tl;dr

5 messages between Sep 24, 2012 and Sep 25, 2012. Diffs are folded; open one to read it.

replies: 4people: 3as markdown or json

Orgad Shaneh· Sep 24, 2012, 19:30 UTC · lore
In order to read diff options for a submodule, its path must be configured
---
 git-submodule.sh |    2 ++
 1 file changed, 2 insertions(+)
Show changes to git-submodule.sh +2 −0
diff --git a/git-submodule.sh b/git-submodule.sh
index 3e2045e..f97bb62 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -359,6 +359,7 @@ Use -f if you really want to add it." >&2
 			esac
 		) || die "$(eval_gettext "Unable to checkout submodule '\$sm_path'")"
 	fi
+	git config submodule."$sm_path".path "$sm_path"
 	git config submodule."$sm_path".url "$realrepo"
 
 	git add $force "$sm_path" ||
@@ -476,6 +477,7 @@ cmd_init()
 				url=$(resolve_relative_url "$url") || exit
 				;;
 			esac
+			git config submodule."$name".path "$name" ||
 			git config submodule."$name".url "$url" ||
 			die "$(eval_gettext "Failed to register url for submodule path '\$sm_path'")"
 
-- 
1.7.10.4
Orgad Shaneh· Sep 24, 2012, 19:32 UTC · re: Orgad Shaneh · lore

Re: [PATCH] submodule: configure submodule.<name>.path on add and init

On Mon, Sep 24, 2012 at 9:30 PM, Orgad Shaneh <orgads@gmail.com> wrote:
Show 28 quoted lines
> In order to read diff options for a submodule, its path must be configured
> ---
>  git-submodule.sh |    2 ++
>  1 file changed, 2 insertions(+)
>
> diff --git a/git-submodule.sh b/git-submodule.sh
> index 3e2045e..f97bb62 100755
> --- a/git-submodule.sh
> +++ b/git-submodule.sh
> @@ -359,6 +359,7 @@ Use -f if you really want to add it." >&2
>                         esac
>                 ) || die "$(eval_gettext "Unable to checkout submodule '\$sm_path'")"
>         fi
> +       git config submodule."$sm_path".path "$sm_path"
>         git config submodule."$sm_path".url "$realrepo"
>
>         git add $force "$sm_path" ||
> @@ -476,6 +477,7 @@ cmd_init()
>                                 url=$(resolve_relative_url "$url") || exit
>                                 ;;
>                         esac
> +                       git config submodule."$name".path "$name" ||
>                         git config submodule."$name".url "$url" ||
>                         die "$(eval_gettext "Failed to register url for submodule path '\$sm_path'")"
>
> --
> 1.7.10.4
>
Oops, || should have been &&
- Orgad
Jens Lehmann· Sep 24, 2012, 19:57 UTC · re: Orgad Shaneh · lore

Re: [PATCH] submodule: configure submodule.<name>.path on add and init

Am 24.09.2012 21:30, schrieb Orgad Shaneh:
Show 24 quoted lines
> In order to read diff options for a submodule, its path must be configured
> ---
>  git-submodule.sh |    2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/git-submodule.sh b/git-submodule.sh
> index 3e2045e..f97bb62 100755
> --- a/git-submodule.sh
> +++ b/git-submodule.sh
> @@ -359,6 +359,7 @@ Use -f if you really want to add it." >&2
>  			esac
>  		) || die "$(eval_gettext "Unable to checkout submodule '\$sm_path'")"
>  	fi
> +	git config submodule."$sm_path".path "$sm_path"
>  	git config submodule."$sm_path".url "$realrepo"
>  
>  	git add $force "$sm_path" ||
> @@ -476,6 +477,7 @@ cmd_init()
>  				url=$(resolve_relative_url "$url") || exit
>  				;;
>  			esac
> +			git config submodule."$name".path "$name" ||
>  			git config submodule."$name".url "$url" ||
>  			die "$(eval_gettext "Failed to register url for submodule path '\$sm_path'")"

Nack. The path must only be configured in .gitmodules or we'll never be able to rename the submodule directory.

Junio C Hamano· Sep 24, 2012, 20:43 UTC · re: Jens Lehmann · lore

Re: [PATCH] submodule: configure submodule.<name>.path on add and init

Jens Lehmann <Jens.Lehmann@web.de> writes:
Show 28 quoted lines
> Am 24.09.2012 21:30, schrieb Orgad Shaneh:
>> In order to read diff options for a submodule, its path must be configured
>> ---
>>  git-submodule.sh |    2 ++
>>  1 file changed, 2 insertions(+)
>> 
>> diff --git a/git-submodule.sh b/git-submodule.sh
>> index 3e2045e..f97bb62 100755
>> --- a/git-submodule.sh
>> +++ b/git-submodule.sh
>> @@ -359,6 +359,7 @@ Use -f if you really want to add it." >&2
>>  			esac
>>  		) || die "$(eval_gettext "Unable to checkout submodule '\$sm_path'")"
>>  	fi
>> +	git config submodule."$sm_path".path "$sm_path"
>>  	git config submodule."$sm_path".url "$realrepo"
>>  
>>  	git add $force "$sm_path" ||
>> @@ -476,6 +477,7 @@ cmd_init()
>>  				url=$(resolve_relative_url "$url") || exit
>>  				;;
>>  			esac
>> +			git config submodule."$name".path "$name" ||
>>  			git config submodule."$name".url "$url" ||
>>  			die "$(eval_gettext "Failed to register url for submodule path '\$sm_path'")"
>
> Nack. The path must only be configured in .gitmodules or we'll
> never be able to rename the submodule directory.

That sounds sensible on the surface, and the rejection of this is probably the right thing to do, but then how would the name/path mapping work without .gitmodules? Historically, you did not have to have a .gitmodules in-tree at all in order to use submodules locally, but if discovery of submodule.$name.ignore depends on having the in-tree .gitmodules file, that sounds like a minor regression to me.

Jens Lehmann· Sep 25, 2012, 20:58 UTC · re: Junio C Hamano · lore

Re: [PATCH] submodule: configure submodule.<name>.path on add and init

Am 24.09.2012 22:43, schrieb Junio C Hamano:
Show 38 quoted lines
> Jens Lehmann <Jens.Lehmann@web.de> writes:
> 
>> Am 24.09.2012 21:30, schrieb Orgad Shaneh:
>>> In order to read diff options for a submodule, its path must be configured
>>> ---
>>>  git-submodule.sh |    2 ++
>>>  1 file changed, 2 insertions(+)
>>>
>>> diff --git a/git-submodule.sh b/git-submodule.sh
>>> index 3e2045e..f97bb62 100755
>>> --- a/git-submodule.sh
>>> +++ b/git-submodule.sh
>>> @@ -359,6 +359,7 @@ Use -f if you really want to add it." >&2
>>>  			esac
>>>  		) || die "$(eval_gettext "Unable to checkout submodule '\$sm_path'")"
>>>  	fi
>>> +	git config submodule."$sm_path".path "$sm_path"
>>>  	git config submodule."$sm_path".url "$realrepo"
>>>  
>>>  	git add $force "$sm_path" ||
>>> @@ -476,6 +477,7 @@ cmd_init()
>>>  				url=$(resolve_relative_url "$url") || exit
>>>  				;;
>>>  			esac
>>> +			git config submodule."$name".path "$name" ||
>>>  			git config submodule."$name".url "$url" ||
>>>  			die "$(eval_gettext "Failed to register url for submodule path '\$sm_path'")"
>>
>> Nack. The path must only be configured in .gitmodules or we'll
>> never be able to rename the submodule directory.
> 
> That sounds sensible on the surface, and the rejection of this is
> probably the right thing to do, but then how would the name/path
> mapping work without .gitmodules?  Historically, you did not have to
> have a .gitmodules in-tree at all in order to use submodules
> locally, but if discovery of submodule.$name.ignore depends on
> having the in-tree .gitmodules file, that sounds like a minor
> regression to me.

AFAIK the name/path mapping was added to enable moving submodules around in the work tree without having to adapt its $GITDIR/config entries every time you checkout a commit where the submodule's work tree is moved someplace else inside the superproject's work tree. Nowadays we also use that to consistently store the submodule's .git directory under "modules/<name>" inside the superproject's .git directory no matter what its current path is.

You still don't need a .gitmodules file to use submodules locally, but then moving around these submodules is not - and has never been - that easy. To use the ignore setting without a .gitmodules file you'll just have to set both submodule.$name.ignore and submodule.$name.path (to provide the mapping, in most cases path and name will simply be the same) in your $GITDIR/config and everything will work just fine.

← back to recent threads