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.
This commit is contained in:
parent
2960a1d9ee
commit
b8ba1535bd
@ -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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user