From: Junio C Hamano Date: Mon, 2 Apr 2007 23:29:56 +0000 (-0700) Subject: Fix twoway_merge that passed d/f conflict marker to merged_entry(). X-Git-Tag: v1.5.2-rc0~73^2~1 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=b8ba1535bda7bd553f46ea57bdbcee1c90e500a0;p=git.git Fix twoway_merge that passed d/f conflict marker to merged_entry(). When switching from one tree to another, we should not send a marker that says "this file does not exist in the new tree -- I am a placeholder to tell you that, and not a real blob" down to merged_entry() as the result of the merge. --- diff --git a/unpack-trees.c b/unpack-trees.c index 4cf83bd90..d0367846d 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -711,12 +711,18 @@ int twoway_merge(struct cache_entry **src, struct unpack_trees_options *o) { struct cache_entry *current = src[0]; - struct cache_entry *oldtree = src[1], *newtree = src[2]; + struct cache_entry *oldtree = src[1]; + struct cache_entry *newtree = src[2]; if (o->merge_size != 2) return error("Cannot do a twoway merge of %d trees", o->merge_size); + if (oldtree == o->df_conflict_entry) + oldtree = NULL; + if (newtree == o->df_conflict_entry) + newtree = NULL; + if (current) { if ((!oldtree && !newtree) || /* 4 and 5 */ (!oldtree && newtree && @@ -724,7 +730,7 @@ int twoway_merge(struct cache_entry **src, (oldtree && newtree && same(oldtree, newtree)) || /* 14 and 15 */ (oldtree && newtree && - !same(oldtree, newtree) && /* 18 and 19*/ + !same(oldtree, newtree) && /* 18 and 19 */ same(current, newtree))) { return keep_entry(current, o); }