diff options
-rw-r--r-- | org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/DirCacheCheckoutTest.java | 30 | ||||
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java | 10 |
2 files changed, 34 insertions, 6 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/DirCacheCheckoutTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/DirCacheCheckoutTest.java index 9fb4b3e17d..8c3f6f37c3 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/DirCacheCheckoutTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/DirCacheCheckoutTest.java @@ -47,6 +47,7 @@ import java.util.Map; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.MergeResult.MergeStatus; +import org.eclipse.jgit.api.ResetCommand.ResetType; import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.api.errors.NoFilepatternException; import org.eclipse.jgit.dircache.DirCache; @@ -147,6 +148,35 @@ public class DirCacheCheckoutTest extends ReadTreeTest { "h()", "untracked", "untracked")); } + /** + * Reset hard from unclean condition. + * <p> + * WorkDir: Empty <br/> + * Index: f/g <br/> + * Merge: x + * + * @throws Exception + */ + @Test + public void testResetHardFromIndexEntryWithoutFileToTreeWithoutFile() + throws Exception { + Git git = new Git(db); + writeTrashFile("x", "x"); + git.add().addFilepattern("x").call(); + RevCommit id1 = git.commit().setMessage("c1").call(); + + writeTrashFile("f/g", "f/g"); + git.rm().addFilepattern("x").call(); + git.add().addFilepattern("f/g").call(); + git.commit().setMessage("c2").call(); + deleteTrashFile("f/g"); + deleteTrashFile("f"); + + // The actual test + git.reset().setMode(ResetType.HARD).setRef(id1.getName()).call(); + assertIndex(mkmap("x", "x")); + } + private DirCacheCheckout resetHard(RevCommit commit) throws NoWorkTreeException, CorruptObjectException, IOException { diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java b/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java index 68a53dfa87..465f01ada9 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java @@ -352,12 +352,10 @@ public class DirCacheCheckout { } } } else { - // There is no file/folder for that path in the working tree. - // The only entry we have is the index entry. If that entry is a - // conflict simply remove it. Otherwise keep that entry in the - // index - if (i.getDirCacheEntry().getStage() == 0) - keep(i.getDirCacheEntry()); + // There is no file/folder for that path in the working tree, + // nor in the merge head. + // The only entry we have is the index entry. Like the case + // where there is a file with the same name, remove it, } } } |