зеркало из https://github.com/microsoft/git.git
merge_trees(): add ancestor label parameter for diff3-style output
Commands using the merge_trees() machinery will present conflict hunks in output something like what ‘diff3 -m’ produces if the merge.conflictstyle configuration option is set to diff3. The output lacks the name of the merge base on the ||||||| line of the output, and tools can misparse the conflict hunks without it. Add a new o->ancestor parameter to merge_trees() for use as a label for the ancestor in conflict hunks. If o->ancestor is NULL, the output format is as before. All callers pass NULL for now. If o->ancestor is non-NULL and both branches renamed the base file to the same name, that name is included in the conflict hunk labels. Even if o->ancestor is NULL I think this would be a good change, but this patch only does it in the non-NULL case to ensure the output format does not change where it might matter. Requested-by: Stefan Monnier <monnier@iro.umontreal.ca> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
e44b3851c9
Коммит
4c5868f43d
|
@ -608,7 +608,7 @@ static int merge_3way(struct merge_options *o,
|
|||
const char *branch2)
|
||||
{
|
||||
mmfile_t orig, src1, src2;
|
||||
char *name1, *name2;
|
||||
char *base_name, *name1, *name2;
|
||||
int merge_status;
|
||||
int favor;
|
||||
|
||||
|
@ -628,10 +628,15 @@ static int merge_3way(struct merge_options *o,
|
|||
}
|
||||
}
|
||||
|
||||
if (strcmp(a->path, b->path)) {
|
||||
if (strcmp(a->path, b->path) ||
|
||||
(o->ancestor != NULL && strcmp(a->path, one->path) != 0)) {
|
||||
base_name = o->ancestor == NULL ? NULL :
|
||||
xstrdup(mkpath("%s:%s", o->ancestor, one->path));
|
||||
name1 = xstrdup(mkpath("%s:%s", branch1, a->path));
|
||||
name2 = xstrdup(mkpath("%s:%s", branch2, b->path));
|
||||
} else {
|
||||
base_name = o->ancestor == NULL ? NULL :
|
||||
xstrdup(mkpath("%s", o->ancestor));
|
||||
name1 = xstrdup(mkpath("%s", branch1));
|
||||
name2 = xstrdup(mkpath("%s", branch2));
|
||||
}
|
||||
|
@ -640,7 +645,7 @@ static int merge_3way(struct merge_options *o,
|
|||
read_mmblob(&src1, a->sha1);
|
||||
read_mmblob(&src2, b->sha1);
|
||||
|
||||
merge_status = ll_merge(result_buf, a->path, &orig, NULL,
|
||||
merge_status = ll_merge(result_buf, a->path, &orig, base_name,
|
||||
&src1, name1, &src2, name2,
|
||||
(!!o->call_depth) | (favor << 1));
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
#include "string-list.h"
|
||||
|
||||
struct merge_options {
|
||||
const char *ancestor;
|
||||
const char *branch1;
|
||||
const char *branch2;
|
||||
enum {
|
||||
|
|
Загрузка…
Ссылка в новой задаче