Re: [RFC] How to pass Git config command line instructions to Submodule commands?
- From
Lars Schneider <larsxschneider@gmail.com>
- Date
- Apr 28, 2016, 12:05 UTC
- Message-ID
- <FF931AB2-2381-4DF9-AE28-CE30EEC5C352@gmail.com>
- In-Reply-To
- <20160428112511.GA11522@sigill.intra.peff.net>
Show 40 quoted lines
> On 28 Apr 2016, at 13:25, Jeff King <peff@peff.net> wrote:
>
> On Thu, Apr 28, 2016 at 01:06:45PM +0200, Lars Schneider wrote:
>
>> I got my Git-LFS use case working with the patch below.
>> For me it was necessary to export GIT_CONFIG_PARAMETERS
>> to make it available to the Git process if the process is
>> invoked as follows [2]:
>>
>> (sanitize_submodule_env; cd "$sm_path" && git <something>")
>
> Hrm. I'm not sure why you need to export. Or perhaps, I am not sure why
> it ever works in the first place in git-submodule.sh. In this code:
>
>> diff --git a/git-submodule.sh b/git-submodule.sh
>> index 2a84d7e..b02f5b9 100755
>> --- a/git-submodule.sh
>> +++ b/git-submodule.sh
>> @@ -199,7 +199,7 @@ sanitize_submodule_env()
>> {
>> sanitized_config=$(git submodule--helper sanitize-config)
>> clear_local_git_env
>> - GIT_CONFIG_PARAMETERS=$sanitized_config
>> + export GIT_CONFIG_PARAMETERS=$sanitized_config
>> }
>
> If you already have $GIT_CONFIG_PARAMETERS exported when we enter the
> function, then we should not need to re-export it when changing the
> value in the final line (the export bit is retained by the shell). But
> if you don't have it set already, then $sanitized_config must by
> definition be empty.
>
> So it should do the right thing without the export.
>
> At the same time, clear_local_git_env() will call "unset" on
> GIT_CONFIG_PARAMETERS. Which would clear the export bit, meaning the
> final line doesn't ever have any impact on sub-programs, and the whole
> thing is totally broken. But then, why does the test in t5550 pass?
>
> Confused...I am no expert in the Submodule code but I think the cloning of the submodules is not yet guarded with sanitize_submodule_env [3]. That means the submodule is cloned with the GIT_CONFIG_PARAMETERS of the super project. That might explain why t5550 passes as the credential config is only used in that area.
The submodule checkout is guarded with sanitize_submodule_env and therefore my Git-LFS filter use case is affect.
Does this sound reasonable?
Thanks, Lars
[3] https://github.com/git/git/blob/3ad15fd5e17bbb73fb1161ff4e9c3ed254d5b243/git-submodule.sh#L704-L711 [4] https://github.com/git/git/blob/3ad15fd5e17bbb73fb1161ff4e9c3ed254d5b243/git-submodule.sh#L811