diff --git a/unpack-trees.c b/unpack-trees.c
index ef21c62195d61980d4727e3f6d9c285422fcfe91..e5749ef638b4a9a490894d9d4fc5876d904ab9ac 100644 (file)
--- a/unpack-trees.c
+++ b/unpack-trees.c
o->merge_size = len;
if (!dfc)
- dfc = xcalloc(1, sizeof(struct cache_entry) + 1);
+ dfc = xcalloc(1, cache_entry_size(0));
o->df_conflict_entry = dfc;
if (len) {
return -1;
}
}
- else if (newtree)
+ else if (newtree) {
+ if (oldtree && !o->initial_checkout) {
+ /*
+ * deletion of the path was staged;
+ */
+ if (same(oldtree, newtree))
+ return 1;
+ return reject_merge(oldtree, o);
+ }
return merged_entry(newtree, current, o);
+ }
return deleted_entry(oldtree, current, o);
}