summaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit.test/tst
diff options
context:
space:
mode:
authorChristian Halstrick <christian.halstrick@sap.com>2013-11-28 18:00:36 +0100
committerMatthias Sohn <matthias.sohn@sap.com>2013-11-29 22:32:36 +0100
commitaf40635aba91a78ec248503906996ca89898e888 (patch)
tree9a53aa91f4d04b88ba94458a3dd7d168a8263029 /org.eclipse.jgit.test/tst
parent53c8ac0c6090a6f52fa70258cc5187cacfd065ff (diff)
downloadjgit-af40635aba91a78ec248503906996ca89898e888.tar.gz
jgit-af40635aba91a78ec248503906996ca89898e888.zip
Fix handling of file/folder conflicts during a checkout
JGit was not handling certain file/folder conflicts during a checkout correctly. This was reported by Axel Richard in http://dev.eclipse.org/mhonarc/lists/jgit-dev/msg02358.html. This commit fixes this problem. Still JGit behaves intentionally different than native git. If HEAD contains a tree, and workingtree, Index and Merge contain a file with same content ... then JGit allows a conflict free checkout of Merge. Native git always complains that it doesn't want to overwrite local changes. But there is no need to update the working tree because Index and Merge are already equal. A shell script which shows how native git behaves can be found here. https://gist.github.com/chalstrick/7694959#file-gistfile1-sh Change-Id: Ifd6a68974d61cd4fa23bc575f3a40773db66cafc Signed-off-by: Christian Halstrick <christian.halstrick@sap.com>
Diffstat (limited to 'org.eclipse.jgit.test/tst')
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/DirCacheCheckoutTest.java25
1 files changed, 25 insertions, 0 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