submodule--helper: refactor resolve_relative_url() helper

Refactor the helper function to resolve a relative url, by reusing the
existing `compute_submodule_clone_url()` function.

`compute_submodule_clone_url()` performs the same work that
`resolve_relative_url()` is doing, so we eliminate this code repetition
by moving the former function's definition up, and calling it inside
`resolve_relative_url()`.

Signed-off-by: Atharva Raykar <raykar.ath@gmail.com>
Mentored-by: Christian Couder <christian.couder@gmail.com>
Mentored-by: Shourya Shukla <periperidip@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Atharva Raykar 2021-08-10 17:16:34 +05:30 committed by Junio C Hamano
parent 6baf4e4da4
commit ab6f23b751
1 changed files with 25 additions and 36 deletions

View File

@ -199,33 +199,46 @@ static char *relative_url(const char *remote_url,
return strbuf_detach(&sb, NULL); return strbuf_detach(&sb, NULL);
} }


static char *compute_submodule_clone_url(const char *rel_url, const char *up_path, int quiet)
{
char *remoteurl, *resolved_url;
char *remote = get_default_remote();
struct strbuf remotesb = STRBUF_INIT;

strbuf_addf(&remotesb, "remote.%s.url", remote);
if (git_config_get_string(remotesb.buf, &remoteurl)) {
if (!quiet)
warning(_("could not look up configuration '%s'. "
"Assuming this repository is its own "
"authoritative upstream."),
remotesb.buf);
remoteurl = xgetcwd();
}
resolved_url = relative_url(remoteurl, rel_url, up_path);

free(remote);
free(remoteurl);
strbuf_release(&remotesb);

return resolved_url;
}

static int resolve_relative_url(int argc, const char **argv, const char *prefix) static int resolve_relative_url(int argc, const char **argv, const char *prefix)
{ {
char *remoteurl = NULL;
char *remote = get_default_remote();
const char *up_path = NULL; const char *up_path = NULL;
char *res; char *res;
const char *url; const char *url;
struct strbuf sb = STRBUF_INIT;


if (argc != 2 && argc != 3) if (argc != 2 && argc != 3)
die("resolve-relative-url only accepts one or two arguments"); die("resolve-relative-url only accepts one or two arguments");


url = argv[1]; url = argv[1];
strbuf_addf(&sb, "remote.%s.url", remote);
free(remote);

if (git_config_get_string(sb.buf, &remoteurl))
/* the repository is its own authoritative upstream */
remoteurl = xgetcwd();

if (argc == 3) if (argc == 3)
up_path = argv[2]; up_path = argv[2];


res = relative_url(remoteurl, url, up_path); res = compute_submodule_clone_url(url, up_path, 1);
puts(res); puts(res);
free(res); free(res);
free(remoteurl);
return 0; return 0;
} }


@ -590,30 +603,6 @@ static int module_foreach(int argc, const char **argv, const char *prefix)
return 0; return 0;
} }


static char *compute_submodule_clone_url(const char *rel_url, const char *up_path, int quiet)
{
char *remoteurl, *resolved_url;
char *remote = get_default_remote();
struct strbuf remotesb = STRBUF_INIT;

strbuf_addf(&remotesb, "remote.%s.url", remote);
if (git_config_get_string(remotesb.buf, &remoteurl)) {
if (!quiet)
warning(_("could not look up configuration '%s'. "
"Assuming this repository is its own "
"authoritative upstream."),
remotesb.buf);
remoteurl = xgetcwd();
}
resolved_url = relative_url(remoteurl, rel_url, up_path);

free(remote);
free(remoteurl);
strbuf_release(&remotesb);

return resolved_url;
}

struct init_cb { struct init_cb {
const char *prefix; const char *prefix;
unsigned int flags; unsigned int flags;