import java.io.File;
import java.io.IOException;
+import java.util.TreeSet;
import org.eclipse.jgit.api.Git;
+import org.eclipse.jgit.api.MergeResult;
+import org.eclipse.jgit.api.MergeResult.MergeStatus;
import org.eclipse.jgit.dircache.DirCache;
import org.eclipse.jgit.dircache.DirCacheEditor;
import org.eclipse.jgit.dircache.DirCacheEntry;
+import org.eclipse.jgit.merge.MergeStrategy;
+import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.treewalk.FileTreeIterator;
import org.junit.Test;
assertEquals(0, diff.getMissing().size());
}
+ @Test
+ public void testConflicting() 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 with two modifications
+ createBranch(initialCommit, "refs/heads/side");
+ checkoutBranch("refs/heads/side");
+ writeTrashFile("a", "1\na(side)\n3\n");
+ writeTrashFile("b", "1\nb\n3\n(side)");
+ git.add().addFilepattern("a").addFilepattern("b").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("[a, b]",
+ new TreeSet<String>(diff.getChanged()).toString());
+ assertEquals("[a]", diff.getAdded().toString());
+ assertEquals("[]", diff.getRemoved().toString());
+ assertEquals("[a]", diff.getMissing().toString());
+ assertEquals("[a]", diff.getModified().toString());
+ assertEquals("[a]", diff.getConflicting().toString());
+ }
+
@Test
public void testUnchangedSimple() throws IOException {
GitIndex index = new GitIndex(db);
import java.util.Set;
import org.eclipse.jgit.dircache.DirCache;
+import org.eclipse.jgit.dircache.DirCacheEntry;
import org.eclipse.jgit.dircache.DirCacheIterator;
import org.eclipse.jgit.errors.IncorrectObjectTypeException;
import org.eclipse.jgit.errors.MissingObjectException;
* <li>removed files</li>
* <li>missing files</li>
* <li>modified files</li>
+ * <li>conflicting files</li>
* <li>untracked files</li>
* <li>files with assume-unchanged flag</li>
* </ul>
private Set<String> untracked = new HashSet<String>();
+ private Set<String> conflicts = new HashSet<String>();
+
private Set<String> assumeUnchanged;
private DirCache dirCache;
modified.add(treeWalk.getPathString());
}
}
+
+ final DirCacheEntry dirCacheEntry = dirCacheIterator
+ .getDirCacheEntry();
+ if (dirCacheEntry != null && dirCacheEntry.getStage() > 0) {
+ conflicts.add(treeWalk.getPathString());
+ }
}
}
return untracked;
}
+ /**
+ * @return list of files that are in conflict
+ */
+ public Set<String> getConflicting() {
+ return conflicts;
+ }
+
/**
* @return list of files with the flag assume-unchanged
*/