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 unpack_trees_options *o)
|
||||||
{
|
{
|
||||||
struct cache_entry *current = src[0];
|
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)
|
if (o->merge_size != 2)
|
||||||
return error("Cannot do a twoway merge of %d trees",
|
return error("Cannot do a twoway merge of %d trees",
|
||||||
o->merge_size);
|
o->merge_size);
|
||||||
|
|
||||||
|
if (oldtree == o->df_conflict_entry)
|
||||||
|
oldtree = NULL;
|
||||||
|
if (newtree == o->df_conflict_entry)
|
||||||
|
newtree = NULL;
|
||||||
|
|
||||||
if (current) {
|
if (current) {
|
||||||
if ((!oldtree && !newtree) || /* 4 and 5 */
|
if ((!oldtree && !newtree) || /* 4 and 5 */
|
||||||
(!oldtree && newtree &&
|
(!oldtree && newtree &&
|
||||||
@ -724,7 +730,7 @@ int twoway_merge(struct cache_entry **src,
|
|||||||
(oldtree && newtree &&
|
(oldtree && newtree &&
|
||||||
same(oldtree, newtree)) || /* 14 and 15 */
|
same(oldtree, newtree)) || /* 14 and 15 */
|
||||||
(oldtree && newtree &&
|
(oldtree && newtree &&
|
||||||
!same(oldtree, newtree) && /* 18 and 19*/
|
!same(oldtree, newtree) && /* 18 and 19 */
|
||||||
same(current, newtree))) {
|
same(current, newtree))) {
|
||||||
return keep_entry(current, o);
|
return keep_entry(current, o);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user