On Mon, Jan 24, 2022 at 2:02 AM Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx> wrote: > > On Sat, Jan 22 2022, Elijah Newren via GitGitGadget wrote: > > > From: Elijah Newren <newren@xxxxxxxxx> > > > > Callers of `git merge-tree --write-tree` will often want to know which > > files had conflicts. While they could potentially attempt to parse the > > CONFLICT notices printed, those messages are not meant to be machine > > readable. Provide a simpler mechanism of just printing the files (in > > the same format as `git ls-files` with quoting, but restricted to > > [...] > > diff --git a/builtin/merge-tree.c b/builtin/merge-tree.c > > index 560640ad911..d8eeeb3f306 100644 > > --- a/builtin/merge-tree.c > > +++ b/builtin/merge-tree.c > > @@ -11,6 +11,9 @@ > > #include "blob.h" > > #include "exec-cmd.h" > > #include "merge-blobs.h" > > +#include "quote.h" > > + > > +static int line_termination = '\n'; > > But unlike ls-files we don't do anything with line_termination as a != > '\n', maybe in a later commit? > > > struct merge_list { > > struct merge_list *next; > > @@ -395,7 +398,8 @@ struct merge_tree_options { > > }; > > > > static int real_merge(struct merge_tree_options *o, > > - const char *branch1, const char *branch2) > > + const char *branch1, const char *branch2, > > + const char *prefix) > > { > > struct commit *parent1, *parent2; > > struct commit_list *common; > > @@ -449,6 +453,22 @@ static int real_merge(struct merge_tree_options *o, > > o->show_messages = !result.clean; > > > > printf("%s\n", oid_to_hex(&result.tree->object.oid)); > > + if (!result.clean) { > > + struct string_list conflicted_files = STRING_LIST_INIT_NODUP; > > + const char *last = NULL; > > + int i; > > + > > + merge_get_conflicted_files(&result, &conflicted_files); > > + for (i = 0; i < conflicted_files.nr; i++) { > > + const char *name = conflicted_files.items[i].string; > > + if (last && !strcmp(last, name)) > > + continue; > > + write_name_quoted_relative( > > + name, prefix, stdout, line_termination); > > But here it's never \0 or whatever. Correct, I didn't add any option for changing it. But why hardcode it to "\n"? Leaving it this way makes it easier to change later if folks say they want NUL-terminated output. Since the series is RFC and the output already has changed drastically and appears to be the primary discussion and disagreement point, I wanted to provide what seemed like a reasonable suggestion and maintain flexiibility to address feedback (though who knows -- I might need to just completely redo the output again in ways much bigger than adding a -z option).