diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/filter/IndexDiffFilterTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/filter/IndexDiffFilterTest.java index c95274f68..bb4b066bf 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/filter/IndexDiffFilterTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/filter/IndexDiffFilterTest.java @@ -134,6 +134,31 @@ public class IndexDiffFilterTest extends RepositoryTestCase { assertFalse(treeWalk.next()); } + @Test + public void testConflicts() throws Exception { + RevCommit initial = git.commit().setMessage("initial").call(); + writeTrashFile(FILE, "master"); + git.add().addFilepattern(FILE).call(); + RevCommit master = git.commit().setMessage("master").call(); + git.checkout().setName("refs/heads/side") + .setCreateBranch(true).setStartPoint(initial).call(); + writeTrashFile(FILE, "side"); + git.add().addFilepattern(FILE).call(); + RevCommit side = git.commit().setMessage("side").call(); + assertFalse(git.merge().include("master", master).call() + .getMergeStatus() + .isSuccessful()); + assertEquals(read(FILE), + "<<<<<<< HEAD\nside\n=======\nmaster\n>>>>>>> master\n"); + writeTrashFile(FILE, "master"); + + TreeWalk treeWalk = createTreeWalk(side); + int count = 0; + while (treeWalk.next()) + count++; + assertEquals(2, count); + } + @Test public void testFileInFolderCommitted() throws Exception { RevCommit commit = writeFileInFolderAndCommit(); diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/treewalk/filter/IndexDiffFilter.java b/org.eclipse.jgit/src/org/eclipse/jgit/treewalk/filter/IndexDiffFilter.java index 79cd2193f..5aab24caf 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/treewalk/filter/IndexDiffFilter.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/treewalk/filter/IndexDiffFilter.java @@ -139,9 +139,13 @@ public class IndexDiffFilter extends TreeFilter { DirCacheIterator di = tw.getTree(dirCache, DirCacheIterator.class); if (di != null) { DirCacheEntry dce = di.getDirCacheEntry(); - if (dce != null) + if (dce != null) { if (dce.isAssumeValid()) return false; + // Never filter index entries with a stage different from 0 + if (dce.getStage() != 0) + return true; + } } if (!tw.isPostOrderTraversal()) {