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

5 messages from 2012-09-24 to 2012-09-25. Participants: Orgad Shaneh, Jens Lehmann, Junio C Hamano.
Thread: https://gitlist.dev/t/31640

## Orgad Shaneh, 2012-09-24 19:30

Subject: [PATCH] submodule: configure submodule.<name>.path on add and init
Message-ID: <1348515040-19986-1-git-send-email-orgads@gmail.com>
URL: https://gitlist.dev/e/1348515040-19986-1-git-send-email-orgads%40gmail.com

```
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

```

## Orgad Shaneh, 2012-09-24 19:32

Subject: Re: [PATCH] submodule: configure submodule.<name>.path on add and init
Message-ID: <CAGHpTB+6AggmTWchcSEFDW1kmv=-Ej4u3RFuiik5KspR=D0ASQ@mail.gmail.com>
URL: https://gitlist.dev/e/CAGHpTB%2B6AggmTWchcSEFDW1kmv%3D-Ej4u3RFuiik5KspR%3DD0ASQ%40mail.gmail.com
In-Reply-To: <1348515040-19986-1-git-send-email-orgads@gmail.com>

```
On Mon, Sep 24, 2012 at 9:30 PM, Orgad Shaneh <orgads@gmail.com> wrote:
> 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, 2012-09-24 19:57

Subject: Re: [PATCH] submodule: configure submodule.<name>.path on add and init
Message-ID: <5060BB3D.9010609@web.de>
URL: https://gitlist.dev/e/5060BB3D.9010609%40web.de
In-Reply-To: <1348515040-19986-1-git-send-email-orgads@gmail.com>

```
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.

```

## Junio C Hamano, 2012-09-24 20:43

Subject: Re: [PATCH] submodule: configure submodule.<name>.path on add and init
Message-ID: <7vmx0fxicf.fsf@alter.siamese.dyndns.org>
URL: https://gitlist.dev/e/7vmx0fxicf.fsf%40alter.siamese.dyndns.org
In-Reply-To: <5060BB3D.9010609@web.de>

```
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.

```

## Jens Lehmann, 2012-09-25 20:58

Subject: Re: [PATCH] submodule: configure submodule.<name>.path on add and init
Message-ID: <50621B03.6010805@web.de>
URL: https://gitlist.dev/e/50621B03.6010805%40web.de
In-Reply-To: <7vmx0fxicf.fsf@alter.siamese.dyndns.org>

```
Am 24.09.2012 22:43, schrieb Junio C Hamano:
> 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.

```
