]> source.dussan.org Git - jgit.git/commitdiff
Fix "reset -hard" bug that folders could not be deleted 69/127969/9
authorRené Scheibe <rene.scheibe@gmail.com>
Sat, 4 Aug 2018 11:19:17 +0000 (13:19 +0200)
committerMatthias Sohn <matthias.sohn@sap.com>
Wed, 19 Jun 2019 09:52:02 +0000 (11:52 +0200)
The deleted code is not required as removed files are deleted correctly in
doCheckout() anyway.

The deleted code failed in case a non-empty directory had to be deleted.
file.delete() returned false, triggering an exception.

Bug: 479266
Change-Id: I011bb3882ff0c35b238aa3eccad7889041210277
Signed-off-by: René Scheibe <rene.scheibe@gmail.com>
org.eclipse.jgit.test/tst/org/eclipse/jgit/api/ResetCommandTest.java
org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java

index 1a52e971abb1cac264741bd68db94a61151c0277..333ebd3384335ecabdb1e4e89dbfb7b11cb7dc9e 100644 (file)
@@ -205,6 +205,26 @@ public class ResetCommandTest extends RepositoryTestCase {
                assertTrue(new File(db.getWorkTree(), "dir-or-file/c.txt").exists());
        }
 
+       @Test
+       public void testHardResetWithConflicts_DeleteFolder_UnstagedChanges() throws Exception {
+               setupRepository();
+               ObjectId prevHead = db.resolve(Constants.HEAD);
+
+               writeTrashFile("dir-or-file/c.txt", "content");
+               git.add().addFilepattern("dir-or-file/c.txt").call();
+               git.commit().setMessage("adding dir-or-file/c.txt").call();
+
+               writeTrashFile("dir-or-file-2/d.txt", "content");
+               git.add().addFilepattern("dir-or-file-2/d.txt").call();
+               FileUtils.delete(new File(db.getWorkTree(), "dir-or-file-2"), FileUtils.RECURSIVE);
+               writeTrashFile("dir-or-file-2", "content");
+
+               // bug 479266: cannot delete folder "dir-or-file"
+               git.reset().setMode(ResetType.HARD).setRef(prevHead.getName()).call();
+               assertFalse(new File(db.getWorkTree(), "dir-or-file").exists());
+               assertFalse(new File(db.getWorkTree(), "dir-or-file-2").exists());
+       }
+
        @Test
        public void testResetToNonexistingHEAD() throws JGitInternalException,
                        AmbiguousObjectException, IOException, GitAPIException {
index 47c9150529c3d4a228aea10ec59ccdcba2e2827b..3b2e74e9e43c2108a5ffacda0d65ec58c5847b6b 100644 (file)
@@ -1298,14 +1298,6 @@ public class DirCacheCheckout {
                                                JGitText.get().cannotDeleteFile, c));
                        removeEmptyParents(conflict);
                }
-               for (String r : removed) {
-                       File file = new File(repo.getWorkTree(), r);
-                       if (!file.delete())
-                               throw new CheckoutConflictException(
-                                               MessageFormat.format(JGitText.get().cannotDeleteFile,
-                                                               file.getAbsolutePath()));
-                       removeEmptyParents(file);
-               }
        }
 
        /**