summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/DirCacheCheckoutTest.java25
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java8
2 files changed, 32 insertions, 1 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 cb2ae64db2..98ec706bec 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
@@ -467,7 +467,9 @@ public class DirCacheCheckoutTest extends RepositoryTestCase {
*3 D F D Y N N Keep
*4 D F D N N N Conflict
*5 D F F Y N N Y Keep
+ *5b D F F Y N N N Conflict
*6 D F F N N N Y Keep
+ *6b D F F N N N N Conflict
*7 F D F Y Y N N Update
*8 F D F N Y N N Conflict
*9 F D F Y N N N Update
@@ -540,7 +542,17 @@ public class DirCacheCheckoutTest extends RepositoryTestCase {
// 5
doit(mk("DF/DF"), mk("DF"), mk("DF"));
assertRemoved("DF/DF");
+ assertEquals(0, dco.getConflicts().size());
+ assertEquals(0, dco.getUpdated().size());
+ }
+ @Test
+ public void testDirectoryFileConflicts_5b() throws Exception {
+ // 5
+ doit(mk("DF/DF"), mkmap("DF", "different"), mk("DF"));
+ assertRemoved("DF/DF");
+ assertConflict("DF");
+ assertEquals(0, dco.getUpdated().size());
}
@Test
@@ -550,6 +562,19 @@ public class DirCacheCheckoutTest extends RepositoryTestCase {
writeTrashFile("DF", "different");
go();
assertRemoved("DF/DF");
+ assertEquals(0, dco.getConflicts().size());
+ assertEquals(0, dco.getUpdated().size());
+ }
+
+ @Test
+ public void testDirectoryFileConflicts_6b() throws Exception {
+ // 6
+ setupCase(mk("DF/DF"), mk("DF"), mkmap("DF", "different"));
+ writeTrashFile("DF", "again different");
+ go();
+ assertRemoved("DF/DF");
+ assertConflict("DF");
+ assertEquals(0, dco.getUpdated().size());
}
@Test
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 bd896864d7..103d6183b0 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java
@@ -555,7 +555,9 @@ public class DirCacheCheckout {
* 3 D F D Y N N Keep
* 4 D F D N N N Conflict
* 5 D F F Y N N Y Keep
+ * 5b D F F Y N N N Conflict
* 6 D F F N N N Y Keep
+ * 6b D F F N N N N Conflict
* 7 F D F Y Y N N Update
* 8 F D F N Y N N Conflict
* 9 F D F Y N N N Update
@@ -620,7 +622,11 @@ public class DirCacheCheckout {
case 0xF0D: // 18
remove(name);
break;
- case 0xDFF: // 5 6
+ case 0xDFF: // 5 5b 6 6b
+ if (equalIdAndMode(iId, iMode, mId, mMode))
+ keep(dce); // 5 6
+ else
+ conflict(name, dce, h, m); // 5b 6b
case 0xFDD: // 10 11
// TODO: make use of tree extension as soon as available in jgit
// we would like to do something like