On Thu, Jul 21, 2022 at 8:47 AM Junio C Hamano <gitster@xxxxxxxxx> wrote: > > "Elijah Newren via GitGitGadget" <gitgitgadget@xxxxxxxxx> writes: > > > if (head && repo_index_has_changes(opt->repo, head, &sb)) { > > - fprintf(stderr, _("Your local changes to the following files would be overwritten by merge:\n %s"), > > + struct strbuf err = STRBUF_INIT; > > + strbuf_addstr(&err, "error: "); > > + strbuf_addf(&err, _("Your local changes to the following files would be overwritten by merge:\n %s"), > > sb.buf); > > + strbuf_addch(&err, '\n'); > > + fputs(err.buf, stderr); > > + strbuf_release(&err); > > Makes me wonder why this is not a mere > > error(_("Your local chagnes ... by merge:\n %s"), sb.buf); > > that reuses the exact string. The err() function in merge-recursive.c > is strangely complex (and probably buggy---if it is not buffering > output, it adds "error: " prefix to opt->obuf before calling vaddf > to add the message, and then sends that to error() to give it > another "error: " prefix), but all the above does is to send a > message to standard error stream. Ah, that would be nicer; thanks for the pointer. I would still need to prefix it with an strbuf_addch(&sb, '\n'); but two lines certainly beats six. > > > strbuf_release(&sb); > > return -1; > > }