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

From: Junio C Hamano <[email-masked]>
Date: Thu, 05 Aug 2021 13:20:24 -0700

Atharva Raykar <[email-masked]> writes:

> This part of `sync_submodule()` is doing the same thing that
> `compute_submodule_clone_url()` is doing. Let's reuse that helper here.
>
> 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(-)

The original used the result of get_default_remote() twice before
freeing it, but now all that code to allocate and free remote is
contained in compute_submodule_clone_url(), which mean swe allocate,
use, and free twice.  In exchange, our logic here works at a higher
level of abstraction, which is a big plus.

Nice.

> 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);