Browse Source

IndexDiffFilter should never filter entries with stage!=0

If the IndexDiffFilter is asked whether it should include or filter out
a certain path and for that path there is a dircache entry with a stage
different from 0, then the filter should never filter out this entry.
IndexDiffFilter is an optimized version of AnyDiffFilter and there is no
case where the index contains non-0 stages but we still don't see any
diff for that path.

Change-Id: I25915880f304090fe90584c79bddf021231227a2
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
stable-3.5
Christian Halstrick 10 years ago committed by Matthias Sohn
parent
commit
ddbf67e058
  1. 25
      org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/filter/IndexDiffFilterTest.java
  2. 6
      org.eclipse.jgit/src/org/eclipse/jgit/treewalk/filter/IndexDiffFilter.java

25
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();

6
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()) {

Loading…
Cancel
Save