diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/FileUtils.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/FileUtils.java index 56d20d4ff..0d97510c5 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/util/FileUtils.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/FileUtils.java @@ -77,6 +77,11 @@ public class FileUtils { */ public static final int SKIP_MISSING = 4; + /** + * Option not to throw exceptions when a deletion finally doesn't succeed. + */ + public static final int IGNORE_ERRORS = 8; + /** * Delete file or empty folder * @@ -106,7 +111,8 @@ public static void delete(final File f) throws IOException { * if deletion of {@code f} fails. This may occur if {@code f} * didn't exist when the method was called. This can therefore * cause IOExceptions during race conditions when multiple - * concurrent threads all try to delete the same file. + * concurrent threads all try to delete the same file. This + * exception is not thrown when IGNORE_ERRORS is set. */ public static void delete(final File f, int options) throws IOException { if ((options & SKIP_MISSING) != 0 && !f.exists()) @@ -131,8 +137,9 @@ public static void delete(final File f, int options) throws IOException { return; } } - throw new IOException(MessageFormat.format( - JGitText.get().deleteFileFailed, f.getAbsolutePath())); + if ((options & IGNORE_ERRORS) == 0) + throw new IOException(MessageFormat.format( + JGitText.get().deleteFileFailed, f.getAbsolutePath())); } }