]> source.dussan.org Git - jgit.git/commit
Fix DirCacheCheckout to return CheckoutConflictException 43/75443/6
authorChristian Halstrick <christian.halstrick@sap.com>
Fri, 17 Jun 2016 14:41:14 +0000 (16:41 +0200)
committerChristian Halstrick <christian.halstrick@sap.com>
Thu, 23 Jun 2016 07:34:22 +0000 (09:34 +0200)
commit5fe44ed3ee025404dc34966ec996641f47f8490b
tree38cded9b222b7a4c832484d0a7ab3a123a811164
parent2ec3accb3bcc0bd45dfb1333511c72489ab835cb
Fix DirCacheCheckout to return CheckoutConflictException

Problem occurs when the checkout wants to create a file 'd/f' but
the workingtree contains a dirty file 'd'. In order to create d/f the
file 'd' would have to be deleted and since the file is dirty that
content would be lost. This should lead to a CheckoutConflictException
for d/f when failOnConflict was set to true.

This fix also changes jgit checkout semantics to be more like native
gits checkout semantics. If during a checkout jgit wants to delete a
folder but finds that the working tree contains a dirty file at this
path then JGit will now throw an exception instead of silently keeping
the dirty file. Like in this example:

git init
touch b
git add b
git commit -m addB
mkdir a
touch a/c
git add a/c
git commit -m addAC
rm -fr a
touch a
git checkout HEAD~

Change-Id: I9089123179e09dd565285d50b0caa308d290cccd
Signed-off-by: RĂ¼diger Herrmann <ruediger.herrmann@gmx.de>
Also-by: RĂ¼diger Herrmann <ruediger.herrmann@gmx.de>
org.eclipse.jgit.pgm.test/tst/org/eclipse/jgit/pgm/CheckoutTest.java
org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/DirCacheCheckoutTest.java
org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java