Merge branch 'jk/remote-wo-url'
Memory ownership rules for the in-core representation of remote.*.url configuration values have been straightened out, which resulted in a few leak fixes and code clarification. * jk/remote-wo-url: remote: drop checks for zero-url case remote: always require at least one url in a remote t5801: test remote.*.vcs config t5801: make remote-testgit GIT_DIR setup more robust remote: allow resetting url list config: document remote.*.url/pushurl interaction remote: simplify url/pushurl selection remote: use strvecs to store remote url/pushurl remote: transfer ownership of memory in add_url(), etc remote: refactor alias_url() memory ownership archive: fix check for missing url
This commit is contained in:
@ -619,8 +619,8 @@ static int migrate_file(struct remote *remote)
|
||||
int i;
|
||||
|
||||
strbuf_addf(&buf, "remote.%s.url", remote->name);
|
||||
for (i = 0; i < remote->url_nr; i++)
|
||||
git_config_set_multivar(buf.buf, remote->url[i], "^$", 0);
|
||||
for (i = 0; i < remote->url.nr; i++)
|
||||
git_config_set_multivar(buf.buf, remote->url.v[i], "^$", 0);
|
||||
strbuf_reset(&buf);
|
||||
strbuf_addf(&buf, "remote.%s.push", remote->name);
|
||||
for (i = 0; i < remote->push.raw_nr; i++)
|
||||
@ -1002,8 +1002,7 @@ static int get_remote_ref_states(const char *name,
|
||||
struct transport *transport;
|
||||
const struct ref *remote_refs;
|
||||
|
||||
transport = transport_get(states->remote, states->remote->url_nr > 0 ?
|
||||
states->remote->url[0] : NULL);
|
||||
transport = transport_get(states->remote, states->remote->url.v[0]);
|
||||
remote_refs = transport_get_remote_refs(transport, NULL);
|
||||
|
||||
states->queried = 1;
|
||||
@ -1213,15 +1212,15 @@ static int get_one_entry(struct remote *remote, void *priv)
|
||||
{
|
||||
struct string_list *list = priv;
|
||||
struct strbuf remote_info_buf = STRBUF_INIT;
|
||||
const char **url;
|
||||
int i, url_nr;
|
||||
struct strvec *url;
|
||||
int i;
|
||||
|
||||
if (remote->url_nr > 0) {
|
||||
if (remote->url.nr > 0) {
|
||||
struct strbuf promisor_config = STRBUF_INIT;
|
||||
const char *partial_clone_filter = NULL;
|
||||
|
||||
strbuf_addf(&promisor_config, "remote.%s.partialclonefilter", remote->name);
|
||||
strbuf_addf(&remote_info_buf, "%s (fetch)", remote->url[0]);
|
||||
strbuf_addf(&remote_info_buf, "%s (fetch)", remote->url.v[0]);
|
||||
if (!git_config_get_string_tmp(promisor_config.buf, &partial_clone_filter))
|
||||
strbuf_addf(&remote_info_buf, " [%s]", partial_clone_filter);
|
||||
|
||||
@ -1230,16 +1229,10 @@ static int get_one_entry(struct remote *remote, void *priv)
|
||||
strbuf_detach(&remote_info_buf, NULL);
|
||||
} else
|
||||
string_list_append(list, remote->name)->util = NULL;
|
||||
if (remote->pushurl_nr) {
|
||||
url = remote->pushurl;
|
||||
url_nr = remote->pushurl_nr;
|
||||
} else {
|
||||
url = remote->url;
|
||||
url_nr = remote->url_nr;
|
||||
}
|
||||
for (i = 0; i < url_nr; i++)
|
||||
url = push_url_of_remote(remote);
|
||||
for (i = 0; i < url->nr; i++)
|
||||
{
|
||||
strbuf_addf(&remote_info_buf, "%s (push)", url[i]);
|
||||
strbuf_addf(&remote_info_buf, "%s (push)", url->v[i]);
|
||||
string_list_append(list, remote->name)->util =
|
||||
strbuf_detach(&remote_info_buf, NULL);
|
||||
}
|
||||
@ -1295,28 +1288,20 @@ static int show(int argc, const char **argv, const char *prefix)
|
||||
|
||||
for (; argc; argc--, argv++) {
|
||||
int i;
|
||||
const char **url;
|
||||
int url_nr;
|
||||
struct strvec *url;
|
||||
|
||||
get_remote_ref_states(*argv, &info.states, query_flag);
|
||||
|
||||
printf_ln(_("* remote %s"), *argv);
|
||||
printf_ln(_(" Fetch URL: %s"), info.states.remote->url_nr > 0 ?
|
||||
info.states.remote->url[0] : _("(no URL)"));
|
||||
if (info.states.remote->pushurl_nr) {
|
||||
url = info.states.remote->pushurl;
|
||||
url_nr = info.states.remote->pushurl_nr;
|
||||
} else {
|
||||
url = info.states.remote->url;
|
||||
url_nr = info.states.remote->url_nr;
|
||||
}
|
||||
for (i = 0; i < url_nr; i++)
|
||||
printf_ln(_(" Fetch URL: %s"), info.states.remote->url.v[0]);
|
||||
url = push_url_of_remote(info.states.remote);
|
||||
for (i = 0; i < url->nr; i++)
|
||||
/*
|
||||
* TRANSLATORS: the colon ':' should align
|
||||
* with the one in " Fetch URL: %s"
|
||||
* translation.
|
||||
*/
|
||||
printf_ln(_(" Push URL: %s"), url[i]);
|
||||
printf_ln(_(" Push URL: %s"), url->v[i]);
|
||||
if (!i)
|
||||
printf_ln(_(" Push URL: %s"), _("(no URL)"));
|
||||
if (no_query)
|
||||
@ -1453,10 +1438,7 @@ static int prune_remote(const char *remote, int dry_run)
|
||||
}
|
||||
|
||||
printf_ln(_("Pruning %s"), remote);
|
||||
printf_ln(_("URL: %s"),
|
||||
states.remote->url_nr
|
||||
? states.remote->url[0]
|
||||
: _("(no URL)"));
|
||||
printf_ln(_("URL: %s"), states.remote->url.v[0]);
|
||||
|
||||
for_each_string_list_item(item, &states.stale)
|
||||
string_list_append(&refs_to_prune, item->util);
|
||||
@ -1622,8 +1604,7 @@ static int get_url(int argc, const char **argv, const char *prefix)
|
||||
int i, push_mode = 0, all_mode = 0;
|
||||
const char *remotename = NULL;
|
||||
struct remote *remote;
|
||||
const char **url;
|
||||
int url_nr;
|
||||
struct strvec *url;
|
||||
struct option options[] = {
|
||||
OPT_BOOL('\0', "push", &push_mode,
|
||||
N_("query push URLs rather than fetch URLs")),
|
||||
@ -1645,27 +1626,13 @@ static int get_url(int argc, const char **argv, const char *prefix)
|
||||
exit(2);
|
||||
}
|
||||
|
||||
url_nr = 0;
|
||||
if (push_mode) {
|
||||
url = remote->pushurl;
|
||||
url_nr = remote->pushurl_nr;
|
||||
}
|
||||
/* else fetch mode */
|
||||
|
||||
/* Use the fetch URL when no push URLs were found or requested. */
|
||||
if (!url_nr) {
|
||||
url = remote->url;
|
||||
url_nr = remote->url_nr;
|
||||
}
|
||||
|
||||
if (!url_nr)
|
||||
die(_("no URLs configured for remote '%s'"), remotename);
|
||||
url = push_mode ? push_url_of_remote(remote) : &remote->url;
|
||||
|
||||
if (all_mode) {
|
||||
for (i = 0; i < url_nr; i++)
|
||||
printf_ln("%s", url[i]);
|
||||
for (i = 0; i < url->nr; i++)
|
||||
printf_ln("%s", url->v[i]);
|
||||
} else {
|
||||
printf_ln("%s", *url);
|
||||
printf_ln("%s", url->v[0]);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -1680,8 +1647,7 @@ static int set_url(int argc, const char **argv, const char *prefix)
|
||||
const char *oldurl = NULL;
|
||||
struct remote *remote;
|
||||
regex_t old_regex;
|
||||
const char **urlset;
|
||||
int urlset_nr;
|
||||
struct strvec *urlset;
|
||||
struct strbuf name_buf = STRBUF_INIT;
|
||||
struct option options[] = {
|
||||
OPT_BOOL('\0', "push", &push_mode,
|
||||
@ -1718,12 +1684,10 @@ static int set_url(int argc, const char **argv, const char *prefix)
|
||||
|
||||
if (push_mode) {
|
||||
strbuf_addf(&name_buf, "remote.%s.pushurl", remotename);
|
||||
urlset = remote->pushurl;
|
||||
urlset_nr = remote->pushurl_nr;
|
||||
urlset = &remote->pushurl;
|
||||
} else {
|
||||
strbuf_addf(&name_buf, "remote.%s.url", remotename);
|
||||
urlset = remote->url;
|
||||
urlset_nr = remote->url_nr;
|
||||
urlset = &remote->url;
|
||||
}
|
||||
|
||||
/* Special cases that add new entry. */
|
||||
@ -1740,8 +1704,8 @@ static int set_url(int argc, const char **argv, const char *prefix)
|
||||
if (regcomp(&old_regex, oldurl, REG_EXTENDED))
|
||||
die(_("Invalid old URL pattern: %s"), oldurl);
|
||||
|
||||
for (i = 0; i < urlset_nr; i++)
|
||||
if (!regexec(&old_regex, urlset[i], 0, NULL, 0))
|
||||
for (i = 0; i < urlset->nr; i++)
|
||||
if (!regexec(&old_regex, urlset->v[i], 0, NULL, 0))
|
||||
matches++;
|
||||
else
|
||||
negative_matches++;
|
||||
|
||||
Reference in New Issue
Block a user