Re: [PATCH] merge-recursive: fix the fix to the diff3 common ancestor label
From: Junio C Hamano <hidden>
Date: 2019-10-08 02:32:23
Elijah Newren [off-list ref] writes:
This resulted in garbage strings being printed for the virtual merge bases, which was visible in git.git by just merging commit b744c3af07 into commit 6d8cb22a4f. There are two ways to fix this: set opt->ancestor to NULL after using it to avoid re-use, or add a !opt->priv->call_depth check to the if block for using a pre-defined opt->ancestor. Apply both fixes.
Thanks for quickly fixing this. Will apply.
quoted hunk
Signed-off-by: Elijah Newren <redacted> --- merge-recursive.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)diff --git a/merge-recursive.c b/merge-recursive.c index e12d91f48a..2653ba9a50 100644 --- a/merge-recursive.c +++ b/merge-recursive.c@@ -3550,7 +3550,7 @@ static int merge_recursive_internal(struct merge_options *opt, merged_merge_bases = make_virtual_commit(opt->repo, tree, "ancestor"); ancestor_name = "empty tree"; - } else if (opt->ancestor) { + } else if (opt->ancestor && !opt->priv->call_depth) { ancestor_name = opt->ancestor; } else if (merge_bases) { ancestor_name = "merged common ancestors";@@ -3600,6 +3600,7 @@ static int merge_recursive_internal(struct merge_options *opt, merged_merge_bases), &result_tree); strbuf_release(&merge_base_abbrev); + opt->ancestor = NULL; /* avoid accidental re-use of opt->ancestor */ if (clean < 0) { flush_output(opt); return clean;