Subject: Re: [GSoC] [PATCH v2 1/9] submodule--helper: add options for compute_submodule_clone_url()

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

Atharva Raykar <[email-masked]> writes:

> -static char *compute_submodule_clone_url(const char *rel_url)
> +static char *compute_submodule_clone_url(const char *rel_url, const char *up_path, int quiet)
>  {
>  	char *remoteurl, *relurl;
>  	char *remote = get_default_remote();
> @@ -598,10 +598,14 @@ static char *compute_submodule_clone_url(const char *rel_url)
>  
>  	strbuf_addf(&remotesb, "remote.%s.url", remote);
>  	if (git_config_get_string(remotesb.buf, &remoteurl)) {
> -		warning(_("could not look up configuration '%s'. Assuming this repository is its own authoritative upstream."), remotesb.buf);
> +		if (!quiet)
> +			warning(_("could not look up configuration '%s'. "
> +				  "Assuming this repository is its own "
> +				  "authoritative upstream."),
> +				remotesb.buf);
>  		remoteurl = xgetcwd();
>  	}
> -	relurl = relative_url(remoteurl, rel_url, NULL);
> +	relurl = relative_url(remoteurl, rel_url, up_path);

OK, so we can optionally operate silently, and also tell
relative_url the path the URL should be made relative to.

Existing callers, of course, should pass NULL and 0 as these
optional features are new, as we can see below.

>  	free(remote);
>  	free(remoteurl);
> @@ -660,7 +664,7 @@ static void init_submodule(const char *path, const char *prefix,
>  		if (starts_with_dot_dot_slash(url) ||
>  		    starts_with_dot_slash(url)) {
>  			char *oldurl = url;
> -			url = compute_submodule_clone_url(oldurl);
> +			url = compute_submodule_clone_url(oldurl, NULL, 0);
>  			free(oldurl);
>  		}
>  
> @@ -2134,7 +2138,7 @@ static int prepare_to_clone_next_submodule(const struct cache_entry *ce,
>  	if (repo_config_get_string_tmp(the_repository, sb.buf, &url)) {
>  		if (starts_with_dot_slash(sub->url) ||
>  		    starts_with_dot_dot_slash(sub->url)) {
> -			url = compute_submodule_clone_url(sub->url);
> +			url = compute_submodule_clone_url(sub->url, NULL, 0);
>  			need_free_url = 1;
>  		} else
>  			url = sub->url;

All makes sense.