Re: [PATCH 09/12] merge-tree: provide a list of which files have conflicts
- From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
- Date
- Jan 24, 2022, 10:01 UTC
- Message-ID
- <220124.868rv5ih93.gmgdl@evledraar.gmail.com>
- In-Reply-To
- <fcbb087fa8865ac05e20473d822cd9795590ee38.1642888562.git.gitgitgadget@gmail.com>
On Sat, Jan 22 2022, Elijah Newren via GitGitGadget wrote:
Show 19 quoted lines
> From: Elijah Newren <newren@gmail.com> > > 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?
Show 28 quoted lines
> 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.