]> git.ipfire.org Git - thirdparty/git.git/commitdiff
builtin/remote.c: add and use SHOW_INFO_INIT
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>
Fri, 1 Oct 2021 10:27:35 +0000 (12:27 +0200)
committerJunio C Hamano <gitster@pobox.com>
Fri, 1 Oct 2021 21:22:51 +0000 (14:22 -0700)
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>
builtin/remote.c

index 160dd954f741c013098ef869035074028848e765..deb48772ac53c82b9fb3c396734b84cce028ecd0 100644 (file)
@@ -972,26 +972,31 @@ static int get_remote_ref_states(const char *name,
 }
 
 struct show_info {
-       struct string_list *list;
-       struct ref_states *states;
+       struct string_list list;
+       struct ref_states states;
        int width, width2;
        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)
 {
        struct show_info *info = cb_data;
        int n = strlen(item->string);
        if (n > info->width)
                info->width = n;
-       string_list_insert(info->list, item->string);
+       string_list_insert(&info->list, item->string);
        return 0;
 }
 
 static int show_remote_info_item(struct string_list_item *item, void *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;
 
        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)
 {
        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 string_list_item *item;
        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)
                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;
 
        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;
        if ((n = strlen(push_info->dest)) > show_info->width2)
                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;
        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_END()
        };
-       struct ref_states states = REF_STATES_INIT;
-       struct string_list info_list = STRING_LIST_INIT_NODUP;
-       struct show_info info;
+       struct show_info info = SHOW_INFO_INIT;
 
        argc = parse_options(argc, argv, NULL, options, builtin_remote_show_usage,
                             0);
@@ -1227,25 +1230,22 @@ static int show(int argc, const char **argv)
        if (!no_query)
                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++) {
                int i;
                const char **url;
                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(_("  Fetch URL: %s"), states.remote->url_nr > 0 ?
-                      states.remote->url[0] : _("(no URL)"));
-               if (states.remote->pushurl_nr) {
-                       url = states.remote->pushurl;
-                       url_nr = states.remote->pushurl_nr;
+               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 = states.remote->url;
-                       url_nr = states.remote->url_nr;
+                       url = info.states.remote->url;
+                       url_nr = info.states.remote->url_nr;
                }
                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)"));
                if (no_query)
                        printf_ln(_("  HEAD branch: %s"), _("(not queried)"));
-               else if (!states.heads.nr)
+               else if (!info.states.heads.nr)
                        printf_ln(_("  HEAD branch: %s"), _("(unknown)"));
-               else if (states.heads.nr == 1)
-                       printf_ln(_("  HEAD branch: %s"), states.heads.items[0].string);
+               else if (info.states.heads.nr == 1)
+                       printf_ln(_("  HEAD branch: %s"), info.states.heads.items[0].string);
                else {
                        printf(_("  HEAD branch (remote HEAD is ambiguous,"
                                 " may be one of the following):\n"));
-                       for (i = 0; i < states.heads.nr; i++)
-                               printf("    %s\n", states.heads.items[i].string);
+                       for (i = 0; i < info.states.heads.nr; i++)
+                               printf("    %s\n", info.states.heads.items[i].string);
                }
 
                /* remote branch info */
                info.width = 0;
-               for_each_string_list(&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(&states.stale, add_remote_to_show_info, &info);
-               if (info.list->nr)
+               for_each_string_list(&info.states.new_refs, add_remote_to_show_info, &info);
+               for_each_string_list(&info.states.tracked, add_remote_to_show_info, &info);
+               for_each_string_list(&info.states.stale, add_remote_to_show_info, &info);
+               if (info.list.nr)
                        printf_ln(Q_("  Remote branch:%s",
                                     "  Remote branches:%s",
-                                    info.list->nr),
+                                    info.list.nr),
                                  no_query ? _(" (status not queried)") : "");
-               for_each_string_list(info.list, show_remote_info_item, &info);
-               string_list_clear(info.list, 0);
+               for_each_string_list(&info.list, show_remote_info_item, &info);
+               string_list_clear(&info.list, 0);
 
                /* git pull info */
                info.width = 0;
                info.any_rebase = 0;
                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':",
                                     "  Local branches configured for 'git pull':",
-                                    info.list->nr));
-               for_each_string_list(info.list, show_local_info_item, &info);
-               string_list_clear(info.list, 0);
+                                    info.list.nr));
+               for_each_string_list(&info.list, show_local_info_item, &info);
+               string_list_clear(&info.list, 0);
 
                /* git push info */
-               if (states.remote->mirror)
+               if (info.states.remote->mirror)
                        printf_ln(_("  Local refs will be mirrored by 'git push'"));
 
                info.width = info.width2 = 0;
-               for_each_string_list(&states.push, add_push_to_show_info, &info);
-               QSORT(info.list->items, info.list->nr, cmp_string_with_push);
-               if (info.list->nr)
+               for_each_string_list(&info.states.push, add_push_to_show_info, &info);
+               QSORT(info.list.items, info.list.nr, cmp_string_with_push);
+               if (info.list.nr)
                        printf_ln(Q_("  Local ref configured for 'git push'%s:",
                                     "  Local refs configured for 'git push'%s:",
-                                    info.list->nr),
+                                    info.list.nr),
                                  no_query ? _(" (status not queried)") : "");
-               for_each_string_list(info.list, show_push_info_item, &info);
-               string_list_clear(info.list, 0);
+               for_each_string_list(&info.list, show_push_info_item, &info);
+               string_list_clear(&info.list, 0);
 
-               free_remote_ref_states(&states);
+               free_remote_ref_states(&info.states);
        }
 
        return result;