Subject: Re: [GSoC] [PATCH v4 3/8] submodule--helper: remove repeated code in sync_submodule()

From: Atharva Raykar <[email-masked]>
Date: Mon, 09 Aug 2021 13:06:47 +0530

Kaartic Sivaraam <[email-masked]> writes:

> On 07/08/21 12:46 pm, Atharva Raykar wrote:
>> This part of `sync_submodule()` is doing the same thing that
>> `compute_submodule_clone_url()` is doing. Let's reuse that helper here.
>>
>
> Nice to see more code redundancy being removed. Now that we're using
> 'compute_submodule_clone_url' in multiple places, I'm starting to
> wonder if the name still suits the helper. Yeah, I just started yet
> another naming discussion ;-) I guess this one wouldn't be tough though.
> It feels to me like 'resolve_relative_url' is a good enough name that
> doesn't mislead readers by having 'clone_url' in its name. In case anyone
> else has better name suggestions, they are indeed very welcome to suggest
> those :-)
>
> Once there's agreement on a particular name, I think the helper function
> could be renamed. Possibly in a new patch next to this one.

I don't mind the rename back to resolve_relative_url(), although it
definitely has to come in a separate patch. I didn't want to create a
situation where readers will be confused about what actually happened
with that function. I felt a thing might happen if I repurpose it from
subcommand to internal helper in the same patch.

>> Note that this change adds a small overhead where we allocate and free
>> the 'remote' twice, but that is a small price to pay for the higher
>> level of abstraction we get.
>> Signed-off-by: Atharva Raykar <[email-masked]>
>> Mentored-by: Christian Couder <[email-masked]>
>> Mentored-by: Shourya Shukla <[email-masked]>
>> ---
>>   builtin/submodule--helper.c | 16 +++-------------
>>   1 file changed, 3 insertions(+), 13 deletions(-)
>> diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c
>> index f4b496bac6..9b676c12f8 100644
>> --- a/builtin/submodule--helper.c
>> +++ b/builtin/submodule--helper.c
>> @@ -1373,20 +1373,10 @@ static void sync_submodule(const char *path, const char *prefix,
>>   	if (sub && sub->url) {
>>   		if (starts_with_dot_dot_slash(sub->url) ||
>>   		    starts_with_dot_slash(sub->url)) {
>> -			char *remote_url, *up_path;
>> -			char *remote = get_default_remote();
>> -			strbuf_addf(&sb, "remote.%s.url", remote);
>> -
>> -			if (git_config_get_string(sb.buf, &remote_url))
>> -				remote_url = xgetcwd();
>> -
>> -			up_path = get_up_path(path);
>> -			sub_origin_url = relative_url(remote_url, sub->url, up_path);
>> -			super_config_url = relative_url(remote_url, sub->url, NULL);
>> -
>> -			free(remote);
>> +			char *up_path = get_up_path(path);
>> +			sub_origin_url = compute_submodule_clone_url(sub->url, up_path, 1);
>> +			super_config_url = compute_submodule_clone_url(sub->url, NULL, 1);
>>   			free(up_path);
>> -			free(remote_url);
>>   		} else {
>>   			sub_origin_url = xstrdup(sub->url);
>>   			super_config_url = xstrdup(sub->url);
>>