On Wed, Apr 21, 2021 at 7:22 PM Josh Soref via GitGitGadget <gitgitgadget@xxxxxxxxx> wrote: > Usually, it is easier to read a message if it makes its primary > point first, before giving a parenthetical note. > > Before: > ` (nothing to squash)Already up to date. > ` > > After: > `Already up to date (nothing to squash). > ` Thanks. This makes perfect sense and fixes what clearly seems to be a case of swapped arguments to printf(). While the intent of the patch is quite desirable, I do have some concerns about the actual changes... > Signed-off-by: Josh Soref <jsoref@xxxxxxxxx> > --- > diff --git a/builtin/merge.c b/builtin/merge.c > @@ -383,7 +383,7 @@ static void restore_state(const struct object_id *head, > static void finish_up_to_date(const char *msg) > { > if (verbosity >= 0) > - printf("%s%s\n", squash ? _(" (nothing to squash)") : "", msg); > + printf(msg, squash ? _(" (nothing to squash)") : ""); > remove_merge_branch_state(the_repository); > } > @@ -1482,7 +1482,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix) > - finish_up_to_date(_("Already up to date.")); > + finish_up_to_date(_("Already up to date%s.\n")); > @@ -1566,7 +1566,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix) > - finish_up_to_date(_("Already up to date. Yeeah!")); > + finish_up_to_date(_("Already up to date%s. Yeeah!\n")); I see why you changed the calling convention, making it the responsibility of the caller to supply the "%s" so that the "(nothing to squash)" annotation gets inserted before the period at the end of "Already up to date". However, this makes things confusing for people translating the text to other languages since they won't have enough context to understand what gets interpolated in place of "%s". In fact (not a fault of your patch), this sort of "sentence Lego" was already a bit difficult on translators because they couldn't see the entire context of "Already up to date" and "(nothing to squash)" together, thus could only translate them individually which may have led to inferior translations in some languages. Ideally, for the sake of translators, we want to give them as much context as possible, such as the entire "Already up to date (nothing to squash)". So, keeping translators and context in mind, and asking if we really need to that rather odd "Yeeah!", an alternative way to resolve this problem would be like this: static void finish_up_to_date() { if (verbosity >= 0) { if (squash) puts(_("Already up to date (nothing to squash).")); else puts(_("Already up to date.")); } remove_merge_branch_state(the_repository); } And then the callers reduce simply to: finish_up_to_date();