fetch: centralize handling of per-reference format

The function `format_display()` is used to print a single reference update to a buffer which will then ultimately be printed by the caller. This architecture causes us to duplicate some logic across the different callsites of this function. This makes it hard to follow the code as some parts of the logic are located in one place, while other parts of the logic are located in a different place. Furthermore, by having the logic scattered around it becomes quite hard to implement a new output format for the reference updates. We can make the logic a whole lot easier to understand by making the `format_display()` function self-contained so that it handles formatting and printing of the references. This will eventually allow us to easily implement a completely different output format, but also opens the door to conditionally print to either stdout or stderr depending on the output format. As a first step towards that goal we move the formatting directive used by both callers to print a single reference update into this function. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Patrick Steinhardt committed Mar 20, 2023 at 13:35 UTC 331b7d29f05b62fc73f1218e0e6db6969481a3cd
1 file changed +4 -3
builtin/fetch.c
+4 -3
@@ -885,13 +885,14 @@ static void format_display(struct display_state *display_state,
885
886 width = (summary_width + strlen(summary) - gettext_width(summary));
887
888 - strbuf_addf(display_buffer, "%c %-*s ", code, width, summary);
888 + strbuf_addf(display_buffer, " %c %-*s ", code, width, summary);
889 if (!display_state->compact_format)
890 print_remote_to_local(display_state, display_buffer, remote, prettify_refname(local));
891 else
892 print_compact(display_state, display_buffer, remote, prettify_refname(local));
893 if (error)
894 strbuf_addf(display_buffer, " (%s)", error);
895 + strbuf_addch(display_buffer, '\n');
896 }
897
898 static int update_local_ref(struct ref *ref,
@@ -1271,7 +1272,7 @@ static int store_updated_refs(struct display_state *display_state,
1272 url_len, url);
1273 shown_url = 1;
1274 }
1274 - fprintf(stderr, " %s\n", note.buf);
1275 + fputs(note.buf, stderr);
1276 }
1277 }
1278 }
@@ -1432,7 +1433,7 @@ static int prune_refs(struct display_state *display_state,
1433 format_display(display_state, &sb, '-', _("[deleted]"), NULL,
1434 _("(none)"), ref->name,
1435 summary_width);
1435 - fprintf(stderr, " %s\n",sb.buf);
1436 + fputs(sb.buf, stderr);
1437 strbuf_release(&sb);
1438 warn_dangling_symref(stderr, dangling_msg, ref->name);
1439 }