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>

Ævar Arnfjörð Bjarmason committed Oct 1, 2021 at 12:27 UTC 0000e81811bcbdc44339d03ae772650b98c26ed9
1 file changed +45 -45
builtin/remote.c
+45 -45
@@ -972,26 +972,31 @@ static int get_remote_ref_states(const char *name,
972 }
973
974 struct show_info {
975 - struct string_list *list;
976 - struct ref_states *states;
975 + struct string_list list;
976 + struct ref_states states;
977 int width, width2;
978 int any_rebase;
979 };
980
981 +#define SHOW_INFO_INIT { \
982 + .list = STRING_LIST_INIT_DUP, \
983 + .states = REF_STATES_INIT, \
984 +}
985 +
986 static int add_remote_to_show_info(struct string_list_item *item, void *cb_data)
987 {
988 struct show_info *info = cb_data;
989 int n = strlen(item->string);
990 if (n > info->width)
991 info->width = n;
987 - string_list_insert(info->list, item->string);
992 + string_list_insert(&info->list, item->string);
993 return 0;
994 }
995
996 static int show_remote_info_item(struct string_list_item *item, void *cb_data)
997 {
998 struct show_info *info = cb_data;
994 - struct ref_states *states = info->states;
999 + struct ref_states *states = &info->states;
1000 const char *name = item->string;
1001
1002 if (states->queried) {
@@ -1018,7 +1023,7 @@ static int show_remote_info_item(struct string_list_item *item, void *cb_data)
1023 static int add_local_to_show_info(struct string_list_item *branch_item, void *cb_data)
1024 {
1025 struct show_info *show_info = cb_data;
1021 - struct ref_states *states = show_info->states;
1026 + struct ref_states *states = &show_info->states;
1027 struct branch_info *branch_info = branch_item->util;
1028 struct string_list_item *item;
1029 int n;
@@ -1031,7 +1036,7 @@ static int add_local_to_show_info(struct string_list_item *branch_item, void *cb
1036 if (branch_info->rebase >= REBASE_TRUE)
1037 show_info->any_rebase = 1;
1038
1034 - item = string_list_insert(show_info->list, branch_item->string);
1039 + item = string_list_insert(&show_info->list, branch_item->string);
1040 item->util = branch_info;
1041
1042 return 0;
@@ -1086,7 +1091,7 @@ static int add_push_to_show_info(struct string_list_item *push_item, void *cb_da
1091 show_info->width = n;
1092 if ((n = strlen(push_info->dest)) > show_info->width2)
1093 show_info->width2 = n;
1089 - item = string_list_append(show_info->list, push_item->string);
1094 + item = string_list_append(&show_info->list, push_item->string);
1095 item->util = push_item->util;
1096 return 0;
1097 }
@@ -1214,9 +1219,7 @@ static int show(int argc, const char **argv)
1219 OPT_BOOL('n', NULL, &no_query, N_("do not query remotes")),
1220 OPT_END()
1221 };
1217 - struct ref_states states = REF_STATES_INIT;
1218 - struct string_list info_list = STRING_LIST_INIT_NODUP;
1219 - struct show_info info;
1222 + struct show_info info = SHOW_INFO_INIT;
1223
1224 argc = parse_options(argc, argv, NULL, options, builtin_remote_show_usage,
1225 0);
@@ -1227,25 +1230,22 @@ static int show(int argc, const char **argv)
1230 if (!no_query)
1231 query_flag = (GET_REF_STATES | GET_HEAD_NAMES | GET_PUSH_REF_STATES);
1232
1230 - memset(&info, 0, sizeof(info));
1231 - info.states = &states;
1232 - info.list = &info_list;
1233 for (; argc; argc--, argv++) {
1234 int i;
1235 const char **url;
1236 int url_nr;
1237
1238 - get_remote_ref_states(*argv, &states, query_flag);
1238 + get_remote_ref_states(*argv, &info.states, query_flag);
1239
1240 printf_ln(_("* remote %s"), *argv);
1241 - printf_ln(_(" Fetch URL: %s"), states.remote->url_nr > 0 ?
1242 - states.remote->url[0] : _("(no URL)"));
1243 - if (states.remote->pushurl_nr) {
1244 - url = states.remote->pushurl;
1245 - url_nr = states.remote->pushurl_nr;
1241 + printf_ln(_(" Fetch URL: %s"), info.states.remote->url_nr > 0 ?
1242 + info.states.remote->url[0] : _("(no URL)"));
1243 + if (info.states.remote->pushurl_nr) {
1244 + url = info.states.remote->pushurl;
1245 + url_nr = info.states.remote->pushurl_nr;
1246 } else {
1247 - url = states.remote->url;
1248 - url_nr = states.remote->url_nr;
1247 + url = info.states.remote->url;
1248 + url_nr = info.states.remote->url_nr;
1249 }
1250 for (i = 0; i < url_nr; i++)
1251 /*
@@ -1258,57 +1258,57 @@ static int show(int argc, const char **argv)
1258 printf_ln(_(" Push URL: %s"), _("(no URL)"));
1259 if (no_query)
1260 printf_ln(_(" HEAD branch: %s"), _("(not queried)"));
1261 - else if (!states.heads.nr)
1261 + else if (!info.states.heads.nr)
1262 printf_ln(_(" HEAD branch: %s"), _("(unknown)"));
1263 - else if (states.heads.nr == 1)
1264 - printf_ln(_(" HEAD branch: %s"), states.heads.items[0].string);
1263 + else if (info.states.heads.nr == 1)
1264 + printf_ln(_(" HEAD branch: %s"), info.states.heads.items[0].string);
1265 else {
1266 printf(_(" HEAD branch (remote HEAD is ambiguous,"
1267 " may be one of the following):\n"));
1268 - for (i = 0; i < states.heads.nr; i++)
1269 - printf(" %s\n", states.heads.items[i].string);
1268 + for (i = 0; i < info.states.heads.nr; i++)
1269 + printf(" %s\n", info.states.heads.items[i].string);
1270 }
1271
1272 /* remote branch info */
1273 info.width = 0;
1274 - for_each_string_list(&states.new_refs, add_remote_to_show_info, &info);
1275 - for_each_string_list(&states.tracked, add_remote_to_show_info, &info);
1276 - for_each_string_list(&states.stale, add_remote_to_show_info, &info);
1277 - if (info.list->nr)
1274 + for_each_string_list(&info.states.new_refs, add_remote_to_show_info, &info);
1275 + for_each_string_list(&info.states.tracked, add_remote_to_show_info, &info);
1276 + for_each_string_list(&info.states.stale, add_remote_to_show_info, &info);
1277 + if (info.list.nr)
1278 printf_ln(Q_(" Remote branch:%s",
1279 " Remote branches:%s",
1280 - info.list->nr),
1280 + info.list.nr),
1281 no_query ? _(" (status not queried)") : "");
1282 - for_each_string_list(info.list, show_remote_info_item, &info);
1283 - string_list_clear(info.list, 0);
1282 + for_each_string_list(&info.list, show_remote_info_item, &info);
1283 + string_list_clear(&info.list, 0);
1284
1285 /* git pull info */
1286 info.width = 0;
1287 info.any_rebase = 0;
1288 for_each_string_list(&branch_list, add_local_to_show_info, &info);
1289 - if (info.list->nr)
1289 + if (info.list.nr)
1290 printf_ln(Q_(" Local branch configured for 'git pull':",
1291 " Local branches configured for 'git pull':",
1292 - info.list->nr));
1293 - for_each_string_list(info.list, show_local_info_item, &info);
1294 - string_list_clear(info.list, 0);
1292 + info.list.nr));
1293 + for_each_string_list(&info.list, show_local_info_item, &info);
1294 + string_list_clear(&info.list, 0);
1295
1296 /* git push info */
1297 - if (states.remote->mirror)
1297 + if (info.states.remote->mirror)
1298 printf_ln(_(" Local refs will be mirrored by 'git push'"));
1299
1300 info.width = info.width2 = 0;
1301 - for_each_string_list(&states.push, add_push_to_show_info, &info);
1302 - QSORT(info.list->items, info.list->nr, cmp_string_with_push);
1303 - if (info.list->nr)
1301 + for_each_string_list(&info.states.push, add_push_to_show_info, &info);
1302 + QSORT(info.list.items, info.list.nr, cmp_string_with_push);
1303 + if (info.list.nr)
1304 printf_ln(Q_(" Local ref configured for 'git push'%s:",
1305 " Local refs configured for 'git push'%s:",
1306 - info.list->nr),
1306 + info.list.nr),
1307 no_query ? _(" (status not queried)") : "");
1308 - for_each_string_list(info.list, show_push_info_item, &info);
1309 - string_list_clear(info.list, 0);
1308 + for_each_string_list(&info.list, show_push_info_item, &info);
1309 + string_list_clear(&info.list, 0);
1310
1311 - free_remote_ref_states(&states);
1311 + free_remote_ref_states(&info.states);
1312 }
1313
1314 return result;