Merge "Refuse to checkout unmerged paths from index"
This commit is contained in:
commit
1d08015cad
|
@ -47,11 +47,13 @@
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.eclipse.jgit.api.errors.JGitInternalException;
|
||||||
import org.eclipse.jgit.dircache.DirCache;
|
import org.eclipse.jgit.dircache.DirCache;
|
||||||
import org.eclipse.jgit.dircache.DirCacheEntry;
|
import org.eclipse.jgit.dircache.DirCacheEntry;
|
||||||
import org.eclipse.jgit.errors.NoWorkTreeException;
|
import org.eclipse.jgit.errors.NoWorkTreeException;
|
||||||
import org.eclipse.jgit.lib.ConfigConstants;
|
import org.eclipse.jgit.lib.ConfigConstants;
|
||||||
import org.eclipse.jgit.lib.ObjectReader;
|
import org.eclipse.jgit.lib.ObjectReader;
|
||||||
|
import org.eclipse.jgit.lib.RepositoryState;
|
||||||
import org.eclipse.jgit.lib.RepositoryTestCase;
|
import org.eclipse.jgit.lib.RepositoryTestCase;
|
||||||
import org.eclipse.jgit.lib.StoredConfig;
|
import org.eclipse.jgit.lib.StoredConfig;
|
||||||
import org.eclipse.jgit.revwalk.RevCommit;
|
import org.eclipse.jgit.revwalk.RevCommit;
|
||||||
|
@ -243,4 +245,23 @@ public void testCheckoutRepository() throws Exception {
|
||||||
assertEquals("1", read(test));
|
assertEquals("1", read(test));
|
||||||
assertEquals("a", read(test2));
|
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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,6 +64,7 @@
|
||||||
import org.eclipse.jgit.dircache.DirCacheEntry;
|
import org.eclipse.jgit.dircache.DirCacheEntry;
|
||||||
import org.eclipse.jgit.dircache.DirCacheIterator;
|
import org.eclipse.jgit.dircache.DirCacheIterator;
|
||||||
import org.eclipse.jgit.errors.AmbiguousObjectException;
|
import org.eclipse.jgit.errors.AmbiguousObjectException;
|
||||||
|
import org.eclipse.jgit.errors.UnmergedPathException;
|
||||||
import org.eclipse.jgit.internal.JGitText;
|
import org.eclipse.jgit.internal.JGitText;
|
||||||
import org.eclipse.jgit.lib.AnyObjectId;
|
import org.eclipse.jgit.lib.AnyObjectId;
|
||||||
import org.eclipse.jgit.lib.Constants;
|
import org.eclipse.jgit.lib.Constants;
|
||||||
|
@ -284,7 +285,8 @@ protected CheckoutCommand checkoutPaths() throws IOException,
|
||||||
startWalk.setRecursive(true);
|
startWalk.setRecursive(true);
|
||||||
if (!checkoutAllPaths)
|
if (!checkoutAllPaths)
|
||||||
startWalk.setFilter(PathFilterGroup.createFromStrings(paths));
|
startWalk.setFilter(PathFilterGroup.createFromStrings(paths));
|
||||||
boolean checkoutIndex = startCommit == null && startPoint == null;
|
final boolean checkoutIndex = startCommit == null
|
||||||
|
&& startPoint == null;
|
||||||
if (!checkoutIndex)
|
if (!checkoutIndex)
|
||||||
startWalk.addTree(revWalk.parseCommit(getStartPoint())
|
startWalk.addTree(revWalk.parseCommit(getStartPoint())
|
||||||
.getTree());
|
.getTree());
|
||||||
|
@ -299,6 +301,11 @@ protected CheckoutCommand checkoutPaths() throws IOException,
|
||||||
final FileMode mode = startWalk.getFileMode(0);
|
final FileMode mode = startWalk.getFileMode(0);
|
||||||
editor.add(new PathEdit(startWalk.getPathString()) {
|
editor.add(new PathEdit(startWalk.getPathString()) {
|
||||||
public void apply(DirCacheEntry ent) {
|
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.setObjectId(blobId);
|
||||||
ent.setFileMode(mode);
|
ent.setFileMode(mode);
|
||||||
File file = new File(workTree, ent.getPathString());
|
File file = new File(workTree, ent.getPathString());
|
||||||
|
|
Loading…
Reference in New Issue