зеркало из https://github.com/microsoft/git.git
builtin/remote.c: add and use SHOW_INFO_INIT
In the preceding commit we introduced REF_STATES_INIT, but did not change the "struct show_info" to have a corresponding initializer. Let's do that, and make it use "REF_STATES_INIT" and "STRING_LIST_INIT_DUP", doing that requires changing "list" and "states" away from being pointers. The resulting end-state is simpler since we omit the local "info_list" and "states" variables in show() as well as the memset(). Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
0bc7787ca9
Коммит
0000e81811
|
@ -972,26 +972,31 @@ static int get_remote_ref_states(const char *name,
|
||||||
}
|
}
|
||||||
|
|
||||||
struct show_info {
|
struct show_info {
|
||||||
struct string_list *list;
|
struct string_list list;
|
||||||
struct ref_states *states;
|
struct ref_states states;
|
||||||
int width, width2;
|
int width, width2;
|
||||||
int any_rebase;
|
int any_rebase;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define SHOW_INFO_INIT { \
|
||||||
|
.list = STRING_LIST_INIT_DUP, \
|
||||||
|
.states = REF_STATES_INIT, \
|
||||||
|
}
|
||||||
|
|
||||||
static int add_remote_to_show_info(struct string_list_item *item, void *cb_data)
|
static int add_remote_to_show_info(struct string_list_item *item, void *cb_data)
|
||||||
{
|
{
|
||||||
struct show_info *info = cb_data;
|
struct show_info *info = cb_data;
|
||||||
int n = strlen(item->string);
|
int n = strlen(item->string);
|
||||||
if (n > info->width)
|
if (n > info->width)
|
||||||
info->width = n;
|
info->width = n;
|
||||||
string_list_insert(info->list, item->string);
|
string_list_insert(&info->list, item->string);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int show_remote_info_item(struct string_list_item *item, void *cb_data)
|
static int show_remote_info_item(struct string_list_item *item, void *cb_data)
|
||||||
{
|
{
|
||||||
struct show_info *info = cb_data;
|
struct show_info *info = cb_data;
|
||||||
struct ref_states *states = info->states;
|
struct ref_states *states = &info->states;
|
||||||
const char *name = item->string;
|
const char *name = item->string;
|
||||||
|
|
||||||
if (states->queried) {
|
if (states->queried) {
|
||||||
|
@ -1018,7 +1023,7 @@ static int show_remote_info_item(struct string_list_item *item, void *cb_data)
|
||||||
static int add_local_to_show_info(struct string_list_item *branch_item, void *cb_data)
|
static int add_local_to_show_info(struct string_list_item *branch_item, void *cb_data)
|
||||||
{
|
{
|
||||||
struct show_info *show_info = cb_data;
|
struct show_info *show_info = cb_data;
|
||||||
struct ref_states *states = show_info->states;
|
struct ref_states *states = &show_info->states;
|
||||||
struct branch_info *branch_info = branch_item->util;
|
struct branch_info *branch_info = branch_item->util;
|
||||||
struct string_list_item *item;
|
struct string_list_item *item;
|
||||||
int n;
|
int n;
|
||||||
|
@ -1031,7 +1036,7 @@ static int add_local_to_show_info(struct string_list_item *branch_item, void *cb
|
||||||
if (branch_info->rebase >= REBASE_TRUE)
|
if (branch_info->rebase >= REBASE_TRUE)
|
||||||
show_info->any_rebase = 1;
|
show_info->any_rebase = 1;
|
||||||
|
|
||||||
item = string_list_insert(show_info->list, branch_item->string);
|
item = string_list_insert(&show_info->list, branch_item->string);
|
||||||
item->util = branch_info;
|
item->util = branch_info;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1086,7 +1091,7 @@ static int add_push_to_show_info(struct string_list_item *push_item, void *cb_da
|
||||||
show_info->width = n;
|
show_info->width = n;
|
||||||
if ((n = strlen(push_info->dest)) > show_info->width2)
|
if ((n = strlen(push_info->dest)) > show_info->width2)
|
||||||
show_info->width2 = n;
|
show_info->width2 = n;
|
||||||
item = string_list_append(show_info->list, push_item->string);
|
item = string_list_append(&show_info->list, push_item->string);
|
||||||
item->util = push_item->util;
|
item->util = push_item->util;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1214,9 +1219,7 @@ static int show(int argc, const char **argv)
|
||||||
OPT_BOOL('n', NULL, &no_query, N_("do not query remotes")),
|
OPT_BOOL('n', NULL, &no_query, N_("do not query remotes")),
|
||||||
OPT_END()
|
OPT_END()
|
||||||
};
|
};
|
||||||
struct ref_states states = REF_STATES_INIT;
|
struct show_info info = SHOW_INFO_INIT;
|
||||||
struct string_list info_list = STRING_LIST_INIT_NODUP;
|
|
||||||
struct show_info info;
|
|
||||||
|
|
||||||
argc = parse_options(argc, argv, NULL, options, builtin_remote_show_usage,
|
argc = parse_options(argc, argv, NULL, options, builtin_remote_show_usage,
|
||||||
0);
|
0);
|
||||||
|
@ -1227,25 +1230,22 @@ static int show(int argc, const char **argv)
|
||||||
if (!no_query)
|
if (!no_query)
|
||||||
query_flag = (GET_REF_STATES | GET_HEAD_NAMES | GET_PUSH_REF_STATES);
|
query_flag = (GET_REF_STATES | GET_HEAD_NAMES | GET_PUSH_REF_STATES);
|
||||||
|
|
||||||
memset(&info, 0, sizeof(info));
|
|
||||||
info.states = &states;
|
|
||||||
info.list = &info_list;
|
|
||||||
for (; argc; argc--, argv++) {
|
for (; argc; argc--, argv++) {
|
||||||
int i;
|
int i;
|
||||||
const char **url;
|
const char **url;
|
||||||
int url_nr;
|
int url_nr;
|
||||||
|
|
||||||
get_remote_ref_states(*argv, &states, query_flag);
|
get_remote_ref_states(*argv, &info.states, query_flag);
|
||||||
|
|
||||||
printf_ln(_("* remote %s"), *argv);
|
printf_ln(_("* remote %s"), *argv);
|
||||||
printf_ln(_(" Fetch URL: %s"), states.remote->url_nr > 0 ?
|
printf_ln(_(" Fetch URL: %s"), info.states.remote->url_nr > 0 ?
|
||||||
states.remote->url[0] : _("(no URL)"));
|
info.states.remote->url[0] : _("(no URL)"));
|
||||||
if (states.remote->pushurl_nr) {
|
if (info.states.remote->pushurl_nr) {
|
||||||
url = states.remote->pushurl;
|
url = info.states.remote->pushurl;
|
||||||
url_nr = states.remote->pushurl_nr;
|
url_nr = info.states.remote->pushurl_nr;
|
||||||
} else {
|
} else {
|
||||||
url = states.remote->url;
|
url = info.states.remote->url;
|
||||||
url_nr = states.remote->url_nr;
|
url_nr = info.states.remote->url_nr;
|
||||||
}
|
}
|
||||||
for (i = 0; i < url_nr; i++)
|
for (i = 0; i < url_nr; i++)
|
||||||
/*
|
/*
|
||||||
|
@ -1258,57 +1258,57 @@ static int show(int argc, const char **argv)
|
||||||
printf_ln(_(" Push URL: %s"), _("(no URL)"));
|
printf_ln(_(" Push URL: %s"), _("(no URL)"));
|
||||||
if (no_query)
|
if (no_query)
|
||||||
printf_ln(_(" HEAD branch: %s"), _("(not queried)"));
|
printf_ln(_(" HEAD branch: %s"), _("(not queried)"));
|
||||||
else if (!states.heads.nr)
|
else if (!info.states.heads.nr)
|
||||||
printf_ln(_(" HEAD branch: %s"), _("(unknown)"));
|
printf_ln(_(" HEAD branch: %s"), _("(unknown)"));
|
||||||
else if (states.heads.nr == 1)
|
else if (info.states.heads.nr == 1)
|
||||||
printf_ln(_(" HEAD branch: %s"), states.heads.items[0].string);
|
printf_ln(_(" HEAD branch: %s"), info.states.heads.items[0].string);
|
||||||
else {
|
else {
|
||||||
printf(_(" HEAD branch (remote HEAD is ambiguous,"
|
printf(_(" HEAD branch (remote HEAD is ambiguous,"
|
||||||
" may be one of the following):\n"));
|
" may be one of the following):\n"));
|
||||||
for (i = 0; i < states.heads.nr; i++)
|
for (i = 0; i < info.states.heads.nr; i++)
|
||||||
printf(" %s\n", states.heads.items[i].string);
|
printf(" %s\n", info.states.heads.items[i].string);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* remote branch info */
|
/* remote branch info */
|
||||||
info.width = 0;
|
info.width = 0;
|
||||||
for_each_string_list(&states.new_refs, add_remote_to_show_info, &info);
|
for_each_string_list(&info.states.new_refs, add_remote_to_show_info, &info);
|
||||||
for_each_string_list(&states.tracked, add_remote_to_show_info, &info);
|
for_each_string_list(&info.states.tracked, add_remote_to_show_info, &info);
|
||||||
for_each_string_list(&states.stale, add_remote_to_show_info, &info);
|
for_each_string_list(&info.states.stale, add_remote_to_show_info, &info);
|
||||||
if (info.list->nr)
|
if (info.list.nr)
|
||||||
printf_ln(Q_(" Remote branch:%s",
|
printf_ln(Q_(" Remote branch:%s",
|
||||||
" Remote branches:%s",
|
" Remote branches:%s",
|
||||||
info.list->nr),
|
info.list.nr),
|
||||||
no_query ? _(" (status not queried)") : "");
|
no_query ? _(" (status not queried)") : "");
|
||||||
for_each_string_list(info.list, show_remote_info_item, &info);
|
for_each_string_list(&info.list, show_remote_info_item, &info);
|
||||||
string_list_clear(info.list, 0);
|
string_list_clear(&info.list, 0);
|
||||||
|
|
||||||
/* git pull info */
|
/* git pull info */
|
||||||
info.width = 0;
|
info.width = 0;
|
||||||
info.any_rebase = 0;
|
info.any_rebase = 0;
|
||||||
for_each_string_list(&branch_list, add_local_to_show_info, &info);
|
for_each_string_list(&branch_list, add_local_to_show_info, &info);
|
||||||
if (info.list->nr)
|
if (info.list.nr)
|
||||||
printf_ln(Q_(" Local branch configured for 'git pull':",
|
printf_ln(Q_(" Local branch configured for 'git pull':",
|
||||||
" Local branches configured for 'git pull':",
|
" Local branches configured for 'git pull':",
|
||||||
info.list->nr));
|
info.list.nr));
|
||||||
for_each_string_list(info.list, show_local_info_item, &info);
|
for_each_string_list(&info.list, show_local_info_item, &info);
|
||||||
string_list_clear(info.list, 0);
|
string_list_clear(&info.list, 0);
|
||||||
|
|
||||||
/* git push info */
|
/* git push info */
|
||||||
if (states.remote->mirror)
|
if (info.states.remote->mirror)
|
||||||
printf_ln(_(" Local refs will be mirrored by 'git push'"));
|
printf_ln(_(" Local refs will be mirrored by 'git push'"));
|
||||||
|
|
||||||
info.width = info.width2 = 0;
|
info.width = info.width2 = 0;
|
||||||
for_each_string_list(&states.push, add_push_to_show_info, &info);
|
for_each_string_list(&info.states.push, add_push_to_show_info, &info);
|
||||||
QSORT(info.list->items, info.list->nr, cmp_string_with_push);
|
QSORT(info.list.items, info.list.nr, cmp_string_with_push);
|
||||||
if (info.list->nr)
|
if (info.list.nr)
|
||||||
printf_ln(Q_(" Local ref configured for 'git push'%s:",
|
printf_ln(Q_(" Local ref configured for 'git push'%s:",
|
||||||
" Local refs configured for 'git push'%s:",
|
" Local refs configured for 'git push'%s:",
|
||||||
info.list->nr),
|
info.list.nr),
|
||||||
no_query ? _(" (status not queried)") : "");
|
no_query ? _(" (status not queried)") : "");
|
||||||
for_each_string_list(info.list, show_push_info_item, &info);
|
for_each_string_list(&info.list, show_push_info_item, &info);
|
||||||
string_list_clear(info.list, 0);
|
string_list_clear(&info.list, 0);
|
||||||
|
|
||||||
free_remote_ref_states(&states);
|
free_remote_ref_states(&info.states);
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче