import java.io.File;
import java.io.IOException;
+import org.eclipse.jgit.api.errors.JGitInternalException;
import org.eclipse.jgit.dircache.DirCache;
import org.eclipse.jgit.dircache.DirCacheEntry;
import org.eclipse.jgit.errors.NoWorkTreeException;
import org.eclipse.jgit.lib.ConfigConstants;
import org.eclipse.jgit.lib.ObjectReader;
+import org.eclipse.jgit.lib.RepositoryState;
import org.eclipse.jgit.lib.RepositoryTestCase;
import org.eclipse.jgit.lib.StoredConfig;
import org.eclipse.jgit.revwalk.RevCommit;
assertEquals("1", read(test));
assertEquals("a", read(test2));
}
+
+ @Test(expected = JGitInternalException.class)
+ public void testCheckoutOfConflictingFileShouldThrow()
+ throws Exception {
+ // Setup
+ git.checkout().setCreateBranch(true).setName("conflict")
+ .setStartPoint(initialCommit).call();
+ writeTrashFile(FILE1, "Conflicting");
+ RevCommit conflict = git.commit().setAll(true)
+ .setMessage("Conflicting change").call();
+
+ git.checkout().setName("master").call();
+
+ git.merge().include(conflict).call();
+ assertEquals(RepositoryState.MERGING, db.getRepositoryState());
+
+ // Now check out the conflicting path
+ git.checkout().addPath(FILE1).call();
+ }
}
import org.eclipse.jgit.dircache.DirCacheEntry;
import org.eclipse.jgit.dircache.DirCacheIterator;
import org.eclipse.jgit.errors.AmbiguousObjectException;
+import org.eclipse.jgit.errors.UnmergedPathException;
import org.eclipse.jgit.internal.JGitText;
import org.eclipse.jgit.lib.AnyObjectId;
import org.eclipse.jgit.lib.Constants;
startWalk.setRecursive(true);
if (!checkoutAllPaths)
startWalk.setFilter(PathFilterGroup.createFromStrings(paths));
- boolean checkoutIndex = startCommit == null && startPoint == null;
+ final boolean checkoutIndex = startCommit == null
+ && startPoint == null;
if (!checkoutIndex)
startWalk.addTree(revWalk.parseCommit(getStartPoint())
.getTree());
final FileMode mode = startWalk.getFileMode(0);
editor.add(new PathEdit(startWalk.getPathString()) {
public void apply(DirCacheEntry ent) {
+ if (checkoutIndex
+ && ent.getStage() > DirCacheEntry.STAGE_0) {
+ UnmergedPathException e = new UnmergedPathException(ent);
+ throw new JGitInternalException(e.getMessage(), e);
+ }
ent.setObjectId(blobId);
ent.setFileMode(mode);
File file = new File(workTree, ent.getPathString());