From edf0da9c6ee06dbf702b0b16aa75539a11b74814 Mon Sep 17 00:00:00 2001 From: Robin Rosenberg Date: Tue, 19 Mar 2013 14:19:28 +0100 Subject: [PATCH] File.renameTo behaves differently on Unix and Windows On Windows renameTo will not overwrite a file, so it must be deleted first. The fix for Bug 402834 did not account for that. Bug: 403685 Change-Id: I3453342c17e064dcb50906a540172978941a10a6 --- .../eclipse/jgit/dircache/DirCacheCheckout.java | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) 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 dd9023fc7..6fb56ed1b 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java @@ -1126,16 +1126,12 @@ public static void checkoutEntry(final Repository repo, File f, fs.setExecute(tmpFile, false); } } - if (!tmpFile.renameTo(f)) { - // tried to rename which failed. Let' delete the target file and try - // again - FileUtils.delete(f, FileUtils.EMPTY_DIRECTORIES_ONLY - | FileUtils.RECURSIVE); - if (!tmpFile.renameTo(f)) { - throw new IOException(MessageFormat.format( - JGitText.get().couldNotWriteFile, tmpFile.getPath(), - f.getPath())); - } + try { + FileUtils.rename(tmpFile, f); + } catch (IOException e) { + throw new IOException(MessageFormat.format( + JGitText.get().couldNotWriteFile, tmpFile.getPath(), + f.getPath())); } entry.setLastModified(f.lastModified()); if (opt.getAutoCRLF() != AutoCRLF.FALSE)