浏览代码

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>
tags/v3.5.0.201409071800-rc1
Christian Halstrick 9 年前
父节点
当前提交
ddbf67e058

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

+ 5
- 1
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()) {

正在加载...
取消
保存