]> source.dussan.org Git - jgit.git/commitdiff
IndexDiff: conflicting files aren't properly shown 95/3295/3
authorBernard Leach <leachbj@bouncycastle.org>
Fri, 29 Apr 2011 09:42:10 +0000 (19:42 +1000)
committerChris Aniszczyk <caniszczyk@gmail.com>
Thu, 5 May 2011 18:48:57 +0000 (13:48 -0500)
Before this change any files in the conflicting set would
also be listed in the the other IndexDiff Sets which is
confusing.  With this change a conflicting file will not
be included in any of the other sets.

Change-Id: Ife9f2652685220bcfddc1f9820423acdcd5acfdc
Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/IndexDiffTest.java
org.eclipse.jgit/src/org/eclipse/jgit/lib/IndexDiff.java

index 80c779ddfd94eb679ad0cbabb994a928147b59b1..77f12385471b0fb053d6013f35323ba41c34c2a2 100644 (file)
@@ -176,15 +176,90 @@ public class IndexDiffTest extends RepositoryTestCase {
                IndexDiff diff = new IndexDiff(db, Constants.HEAD, iterator);
                diff.diff();
 
-               assertEquals("[a, b]",
+               assertEquals("[b]",
                                new TreeSet<String>(diff.getChanged()).toString());
-               assertEquals("[a]", diff.getAdded().toString());
+               assertEquals("[]", diff.getAdded().toString());
                assertEquals("[]", diff.getRemoved().toString());
-               assertEquals("[a]", diff.getMissing().toString());
-               assertEquals("[a]", diff.getModified().toString());
+               assertEquals("[]", diff.getMissing().toString());
+               assertEquals("[]", diff.getModified().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
        public void testUnchangedSimple() throws IOException {
                GitIndex index = new GitIndex(db);
index b2c05ae5f7cea107c581a8d1ab53cc6e8ce9a9a5..0b23b23bdd52860d9fbd3065e3b19aaaaa8b0081 100644 (file)
@@ -286,6 +286,15 @@ public class IndexDiff {
                        WorkingTreeIterator workingTreeIterator = treeWalk.getTree(WORKDIR,
                                        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 (dirCacheIterator != null) {
                                        if (!treeIterator.idEqual(dirCacheIterator)
@@ -324,12 +333,6 @@ public class IndexDiff {
                                                modified.add(treeWalk.getPathString());
                                        }
                                }
-
-                               final DirCacheEntry dirCacheEntry = dirCacheIterator
-                                               .getDirCacheEntry();
-                               if (dirCacheEntry != null && dirCacheEntry.getStage() > 0) {
-                                       conflicts.add(treeWalk.getPathString());
-                               }
                        }
                }