Merge branch 'en/abort-df-conflict-fixes'
authorJunio C Hamano <gitster@pobox.com>
Fri, 17 Aug 2018 20:09:57 +0000 (13:09 -0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 17 Aug 2018 20:09:57 +0000 (13:09 -0700)
"git merge --abort" etc. did not clean things up properly when
there were conflicted entries in the index in certain order that
are involved in D/F conflicts. This has been corrected.

* en/abort-df-conflict-fixes:
read-cache: fix directory/file conflict handling in read_index_unmerged()
t1015: demonstrate directory/file conflict recovery failures

1  2 
read-cache.c
t/t6042-merge-rename-corner-cases.sh
diff --cc read-cache.c
Simple merge
index 07dd09d985fad600c6f21d335ccfb30e3626db13,de77bfaf4fa99715977b5f4b8bec7d374791dfa8..b97aca7fa263f79520013b14d90fa0b49031484b
@@@ -320,43 -258,33 +320,42 @@@ test_expect_success 'rename/directory c
  '
  
  test_expect_success 'rename/directory conflict + content merge conflict' '
 -      git reset --hard &&
 -      git clean -fdqx &&
 -
 -      git checkout left-conflict^0 &&
 -
 -      test_must_fail git merge -s recursive right^0 &&
 -
 -      test 4 -eq $(git ls-files -s | wc -l) &&
 -      test 3 -eq $(git ls-files -u | wc -l) &&
 -      test 1 -eq $(git ls-files -o | wc -l) &&
 -
 -      git cat-file -p left-conflict:newfile >left &&
 -      git cat-file -p base:file    >base &&
 -      git cat-file -p right:file   >right &&
 -      test_must_fail git merge-file \
 -              -L "HEAD:newfile" \
 -              -L "" \
 -              -L "right^0:file" \
 -              left base right &&
 -      test_cmp left newfile~HEAD &&
 -
 -      test $(git rev-parse :1:newfile) = $(git rev-parse base:file) &&
 -      test $(git rev-parse :2:newfile) = $(git rev-parse left-conflict:newfile) &&
 -      test $(git rev-parse :3:newfile) = $(git rev-parse right:file) &&
 -
 -      test -f newfile/realfile &&
 -      test -f newfile~HEAD
 +      (
 +              cd rename-directory-1 &&
 +
-               git reset --hard &&
 +              git reset --hard &&
 +              git clean -fdqx &&
 +
 +              git checkout left-conflict^0 &&
 +
 +              test_must_fail git merge -s recursive right^0 &&
 +
 +              git ls-files -s >out &&
 +              test_line_count = 4 out &&
 +              git ls-files -u >out &&
 +              test_line_count = 3 out &&
 +              git ls-files -o >out &&
 +              test_line_count = 2 out &&
 +
 +              git cat-file -p left-conflict:newfile >left &&
 +              git cat-file -p base:file    >base &&
 +              git cat-file -p right:file   >right &&
 +              test_must_fail git merge-file \
 +                      -L "HEAD:newfile" \
 +                      -L "" \
 +                      -L "right^0:file" \
 +                      left base right &&
 +              test_cmp left newfile~HEAD &&
 +
 +              git rev-parse >expect                                 \
 +                      base:file   left-conflict:newfile  right:file &&
 +              git rev-parse >actual                                 \
 +                      :1:newfile  :2:newfile             :3:newfile &&
 +              test_cmp expect actual &&
 +
 +              test_path_is_file newfile/realfile &&
 +              test_path_is_file newfile~HEAD
 +      )
  '
  
  test_expect_success 'setup content merge + rename/directory conflict w/ disappearing dir' '