Browse Source

Added support to IndexDiff to return information on conflicts

Change-Id: I43c13eb72a44f80135c93525fce0c0280b0e64a2
Signed-off-by: Chris Aniszczyk <caniszczyk@gmail.com>
tags/v1.0.0.201106011211-rc3
Bernard Leach 13 years ago
parent
commit
1a867d10b9

+ 46
- 0
org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/IndexDiffTest.java View File



import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.TreeSet;


import org.eclipse.jgit.api.Git; 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.DirCache;
import org.eclipse.jgit.dircache.DirCacheEditor; import org.eclipse.jgit.dircache.DirCacheEditor;
import org.eclipse.jgit.dircache.DirCacheEntry; 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.eclipse.jgit.treewalk.FileTreeIterator;
import org.junit.Test; import org.junit.Test;


assertEquals(0, diff.getMissing().size()); 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 @Test
public void testUnchangedSimple() throws IOException { public void testUnchangedSimple() throws IOException {
GitIndex index = new GitIndex(db); GitIndex index = new GitIndex(db);

+ 17
- 0
org.eclipse.jgit/src/org/eclipse/jgit/lib/IndexDiff.java View File

import java.util.Set; import java.util.Set;


import org.eclipse.jgit.dircache.DirCache; import org.eclipse.jgit.dircache.DirCache;
import org.eclipse.jgit.dircache.DirCacheEntry;
import org.eclipse.jgit.dircache.DirCacheIterator; import org.eclipse.jgit.dircache.DirCacheIterator;
import org.eclipse.jgit.errors.IncorrectObjectTypeException; import org.eclipse.jgit.errors.IncorrectObjectTypeException;
import org.eclipse.jgit.errors.MissingObjectException; import org.eclipse.jgit.errors.MissingObjectException;
* <li>removed files</li> * <li>removed files</li>
* <li>missing files</li> * <li>missing files</li>
* <li>modified files</li> * <li>modified files</li>
* <li>conflicting files</li>
* <li>untracked files</li> * <li>untracked files</li>
* <li>files with assume-unchanged flag</li> * <li>files with assume-unchanged flag</li>
* </ul> * </ul>


private Set<String> untracked = new HashSet<String>(); private Set<String> untracked = new HashSet<String>();


private Set<String> conflicts = new HashSet<String>();

private Set<String> assumeUnchanged; private Set<String> assumeUnchanged;


private DirCache dirCache; private DirCache dirCache;
modified.add(treeWalk.getPathString()); modified.add(treeWalk.getPathString());
} }
} }

final DirCacheEntry dirCacheEntry = dirCacheIterator
.getDirCacheEntry();
if (dirCacheEntry != null && dirCacheEntry.getStage() > 0) {
conflicts.add(treeWalk.getPathString());
}
} }
} }


return untracked; 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 * @return list of files with the flag assume-unchanged
*/ */

Loading…
Cancel
Save