aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/DirCacheCheckoutTest.java30
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java10
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,
}
}
}