Browse Source

Fix "reset -hard" bug that folders could not be deleted

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>
stable-5.5
René Scheibe 6 years ago committed by Matthias Sohn
parent
commit
8f9697b4c1
  1. 20
      org.eclipse.jgit.test/tst/org/eclipse/jgit/api/ResetCommandTest.java
  2. 8
      org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java

20
org.eclipse.jgit.test/tst/org/eclipse/jgit/api/ResetCommandTest.java

@ -205,6 +205,26 @@ public class ResetCommandTest extends RepositoryTestCase {
assertTrue(new File(db.getWorkTree(), "dir-or-file/c.txt").exists()); 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 @Test
public void testResetToNonexistingHEAD() throws JGitInternalException, public void testResetToNonexistingHEAD() throws JGitInternalException,
AmbiguousObjectException, IOException, GitAPIException { AmbiguousObjectException, IOException, GitAPIException {

8
org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java vendored

@ -1298,14 +1298,6 @@ public class DirCacheCheckout {
JGitText.get().cannotDeleteFile, c)); JGitText.get().cannotDeleteFile, c));
removeEmptyParents(conflict); 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);
}
} }
/** /**

Loading…
Cancel
Save