merge-recursive: enforce opt->ancestor != NULL when calling merge_trees()
We always want our conflict hunks to be labelled so that users can know where each came from. The previous commit fixed the one caller in the codebase which was not setting opt->ancestor (and thus not providing a label for the "merge base" conflict hunk in diff3-style conflict markers); add an assertion to prevent future codepaths from also overlooking this requirement. Enforcing this requirement also allows us to simplify the code for labelling the conflict hunks by no longer checking if the ancestor label is NULL. Signed-off-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Elijah Newren committed
Aug 15, 2019 at 14:40 UTC
139ef37a2f4daf2071debeca8b2115b4e4b0a33f
1 file changed
+9
-10
merge-recursive.c
+9
-10
@@ -1019,7 +1019,7 @@ static int merge_3way(struct merge_options *opt,
1019
{
1020
mmfile_t orig, src1, src2;
1021
struct ll_merge_options ll_opts = {0};
1022
- char *base_name, *name1, *name2;
1022
+ char *base, *name1, *name2;
1023
int merge_status;
1024
1025
ll_opts.renormalize = opt->renormalize;
@@ -1043,16 +1043,13 @@ static int merge_3way(struct merge_options *opt,
1043
}
1044
}
1045
1046
- assert(a->path && b->path && o->path);
1047
- if (strcmp(a->path, b->path) ||
1048
- (opt->ancestor != NULL && strcmp(a->path, o->path) != 0)) {
1049
- base_name = opt->ancestor == NULL ? NULL :
1050
- mkpathdup("%s:%s", opt->ancestor, o->path);
1046
+ assert(a->path && b->path && o->path && opt->ancestor);
1047
+ if (strcmp(a->path, b->path) || strcmp(a->path, o->path) != 0) {
1048
+ base = mkpathdup("%s:%s", opt->ancestor, o->path);
1049
name1 = mkpathdup("%s:%s", branch1, a->path);
1050
name2 = mkpathdup("%s:%s", branch2, b->path);
1051
} else {
1054
- base_name = opt->ancestor == NULL ? NULL :
1055
- mkpathdup("%s", opt->ancestor);
1052
+ base = mkpathdup("%s", opt->ancestor);
1053
name1 = mkpathdup("%s", branch1);
1054
name2 = mkpathdup("%s", branch2);
1055
}
@@ -1061,11 +1058,11 @@ static int merge_3way(struct merge_options *opt,
1058
read_mmblob(&src1, &a->oid);
1059
read_mmblob(&src2, &b->oid);
1060
1064
- merge_status = ll_merge(result_buf, a->path, &orig, base_name,
1061
+ merge_status = ll_merge(result_buf, a->path, &orig, base,
1062
&src1, name1, &src2, name2,
1063
opt->repo->index, &ll_opts);
1064
1068
- free(base_name);
1065
+ free(base);
1066
free(name1);
1067
free(name2);
1068
free(orig.ptr);
@@ -3390,6 +3387,8 @@ int merge_trees(struct merge_options *opt,
3387
int code, clean;
3388
struct strbuf sb = STRBUF_INIT;
3389
3390
+ assert(opt->ancestor != NULL);
3391
+
3392
if (!opt->call_depth && repo_index_has_changes(opt->repo, head, &sb)) {
3393
err(opt, _("Your local changes to the following files would be overwritten by merge:\n %s"),
3394
sb.buf);