Merge branch 'jk/two-way-merge-corner-case-fix' into maint

"git am --abort" sometimes complained about not being able to write
a tree with an 0{40} object in it.

* jk/two-way-merge-corner-case-fix:
  t1005: add test for "read-tree --reset -u A B"
  t1005: reindent
  unpack-trees: fix "read-tree -u --reset A B" with conflicted index
This commit is contained in:
Junio C Hamano 2013-12-17 11:32:04 -08:00
commit 4766036ecd
3 changed files with 121 additions and 97 deletions

View File

@ -43,6 +43,21 @@ test_expect_success 'reset should remove remnants from a failed merge' '
! test -f old
'
test_expect_success 'two-way reset should remove remnants too' '
read_tree_u_must_succeed --reset -u HEAD &&
git ls-files -s >expect &&
sha1=$(git rev-parse :new) &&
(
echo "100644 $sha1 1 old"
echo "100644 $sha1 3 old"
) | git update-index --index-info &&
>old &&
git ls-files -s &&
read_tree_u_must_succeed --reset -u HEAD HEAD &&
git ls-files -s >actual &&
! test -f old
'
test_expect_success 'Porcelain reset should remove remnants too' '
read_tree_u_must_succeed --reset -u HEAD &&
git ls-files -s >expect &&

View File

@ -1763,7 +1763,16 @@ int twoway_merge(const struct cache_entry * const *src,
newtree = NULL;
if (current) {
if ((!oldtree && !newtree) || /* 4 and 5 */
if (current->ce_flags & CE_CONFLICTED) {
if (same(oldtree, newtree) || o->reset) {
if (!newtree)
return deleted_entry(current, current, o);
else
return merged_entry(newtree, current, o);
}
return o->gently ? -1 : reject_merge(current, o);
}
else if ((!oldtree && !newtree) || /* 4 and 5 */
(!oldtree && newtree &&
same(current, newtree)) || /* 6 and 7 */
(oldtree && newtree &&