Browse Source

Merge "IndexDiff: conflicting files aren't properly shown"

stable-1.0
Chris Aniszczyk 14 years ago committed by Code Review
parent
commit
b8fdda11cc
  1. 83
      org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/IndexDiffTest.java
  2. 15
      org.eclipse.jgit/src/org/eclipse/jgit/lib/IndexDiff.java

83
org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/IndexDiffTest.java

@ -176,15 +176,90 @@ public class IndexDiffTest extends RepositoryTestCase {
IndexDiff diff = new IndexDiff(db, Constants.HEAD, iterator); IndexDiff diff = new IndexDiff(db, Constants.HEAD, iterator);
diff.diff(); diff.diff();
assertEquals("[a, b]", assertEquals("[b]",
new TreeSet<String>(diff.getChanged()).toString()); new TreeSet<String>(diff.getChanged()).toString());
assertEquals("[a]", diff.getAdded().toString()); assertEquals("[]", diff.getAdded().toString());
assertEquals("[]", diff.getRemoved().toString()); assertEquals("[]", diff.getRemoved().toString());
assertEquals("[a]", diff.getMissing().toString()); assertEquals("[]", diff.getMissing().toString());
assertEquals("[a]", diff.getModified().toString()); assertEquals("[]", diff.getModified().toString());
assertEquals("[a]", diff.getConflicting().toString()); assertEquals("[a]", diff.getConflicting().toString());
} }
@Test
public void testConflictingDeletedAndModified() throws Exception {
Git git = new Git(db);
writeTrashFile("a", "1\na\n3\n");
writeTrashFile("b", "1\nb\n3\n");
git.add().addFilepattern("a").addFilepattern("b").call();
RevCommit initialCommit = git.commit().setMessage("initial").call();
// create side branch and delete "a"
createBranch(initialCommit, "refs/heads/side");
checkoutBranch("refs/heads/side");
git.rm().addFilepattern("a").call();
RevCommit secondCommit = git.commit().setMessage("side").call();
// update a on master to generate conflict
checkoutBranch("refs/heads/master");
writeTrashFile("a", "1\na(main)\n3\n");
git.add().addFilepattern("a").call();
git.commit().setMessage("main").call();
// merge side with master
MergeResult result = git.merge().include(secondCommit.getId())
.setStrategy(MergeStrategy.RESOLVE).call();
assertEquals(MergeStatus.CONFLICTING, result.getMergeStatus());
FileTreeIterator iterator = new FileTreeIterator(db);
IndexDiff diff = new IndexDiff(db, Constants.HEAD, iterator);
diff.diff();
assertEquals("[]", new TreeSet<String>(diff.getChanged()).toString());
assertEquals("[]", diff.getAdded().toString());
assertEquals("[]", diff.getRemoved().toString());
assertEquals("[]", diff.getMissing().toString());
assertEquals("[]", diff.getModified().toString());
assertEquals("[a]", diff.getConflicting().toString());
}
@Test
public void testConflictingFromMultipleCreations() throws Exception {
Git git = new Git(db);
writeTrashFile("a", "1\na\n3\n");
git.add().addFilepattern("a").call();
RevCommit initialCommit = git.commit().setMessage("initial").call();
createBranch(initialCommit, "refs/heads/side");
checkoutBranch("refs/heads/side");
writeTrashFile("b", "1\nb(side)\n3\n");
git.add().addFilepattern("b").call();
RevCommit secondCommit = git.commit().setMessage("side").call();
checkoutBranch("refs/heads/master");
writeTrashFile("b", "1\nb(main)\n3\n");
git.add().addFilepattern("b").call();
git.commit().setMessage("main").call();
MergeResult result = git.merge().include(secondCommit.getId())
.setStrategy(MergeStrategy.RESOLVE).call();
assertEquals(MergeStatus.CONFLICTING, result.getMergeStatus());
FileTreeIterator iterator = new FileTreeIterator(db);
IndexDiff diff = new IndexDiff(db, Constants.HEAD, iterator);
diff.diff();
assertEquals("[]", new TreeSet<String>(diff.getChanged()).toString());
assertEquals("[]", diff.getAdded().toString());
assertEquals("[]", diff.getRemoved().toString());
assertEquals("[]", diff.getMissing().toString());
assertEquals("[]", diff.getModified().toString());
assertEquals("[b]", diff.getConflicting().toString());
}
@Test @Test
public void testUnchangedSimple() throws IOException { public void testUnchangedSimple() throws IOException {
GitIndex index = new GitIndex(db); GitIndex index = new GitIndex(db);

15
org.eclipse.jgit/src/org/eclipse/jgit/lib/IndexDiff.java

@ -286,6 +286,15 @@ public class IndexDiff {
WorkingTreeIterator workingTreeIterator = treeWalk.getTree(WORKDIR, WorkingTreeIterator workingTreeIterator = treeWalk.getTree(WORKDIR,
WorkingTreeIterator.class); WorkingTreeIterator.class);
if (dirCacheIterator != null) {
final DirCacheEntry dirCacheEntry = dirCacheIterator
.getDirCacheEntry();
if (dirCacheEntry != null && dirCacheEntry.getStage() > 0) {
conflicts.add(treeWalk.getPathString());
continue;
}
}
if (treeIterator != null) { if (treeIterator != null) {
if (dirCacheIterator != null) { if (dirCacheIterator != null) {
if (!treeIterator.idEqual(dirCacheIterator) if (!treeIterator.idEqual(dirCacheIterator)
@ -324,12 +333,6 @@ public class IndexDiff {
modified.add(treeWalk.getPathString()); modified.add(treeWalk.getPathString());
} }
} }
final DirCacheEntry dirCacheEntry = dirCacheIterator
.getDirCacheEntry();
if (dirCacheEntry != null && dirCacheEntry.getStage() > 0) {
conflicts.add(treeWalk.getPathString());
}
} }
} }

Loading…
Cancel
Save