[findbugs] Do not ignore exceptional return value of mkdir

java.io.File.mkdir() and mkdirs() report failure as an exceptional
return value false. Fix the code which silently ignored this
exceptional return value.

Change-Id: I41244f4b9d66176e68e2c07e2329cf08492f8619
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
diff --git a/org.eclipse.jgit.iplog/src/org/eclipse/jgit/iplog/IpLogMeta.java b/org.eclipse.jgit.iplog/src/org/eclipse/jgit/iplog/IpLogMeta.java
index 372469d..ba10f6f 100644
--- a/org.eclipse.jgit.iplog/src/org/eclipse/jgit/iplog/IpLogMeta.java
+++ b/org.eclipse.jgit.iplog/src/org/eclipse/jgit/iplog/IpLogMeta.java
@@ -62,6 +62,7 @@
 import org.eclipse.jgit.storage.file.FileBasedConfig;
 import org.eclipse.jgit.storage.file.LockFile;
 import org.eclipse.jgit.util.FS;
+import org.eclipse.jgit.util.FileUtils;
 
 /**
  * Manages the {@code .eclipse_iplog} file in a project.
@@ -187,8 +188,7 @@ private List<Project> parseProjects(final Config cfg,
 	 */
 	public void syncCQs(File file, FS fs, URL base, String username,
 			String password) throws IOException, ConfigInvalidException {
-		if (!file.getParentFile().exists())
-			file.getParentFile().mkdirs();
+		FileUtils.mkdirs(file.getParentFile(), true);
 
 		LockFile lf = new LockFile(file, fs);
 		if (!lf.lock())
diff --git a/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/LocalDiskRepositoryTestCase.java b/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/LocalDiskRepositoryTestCase.java
index 3917c48..45c6c41 100644
--- a/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/LocalDiskRepositoryTestCase.java
+++ b/org.eclipse.jgit.junit/src/org/eclipse/jgit/junit/LocalDiskRepositoryTestCase.java
@@ -69,6 +69,7 @@
 import org.eclipse.jgit.storage.file.WindowCache;
 import org.eclipse.jgit.storage.file.WindowCacheConfig;
 import org.eclipse.jgit.util.FS;
+import org.eclipse.jgit.util.FileUtils;
 import org.eclipse.jgit.util.IO;
 import org.eclipse.jgit.util.SystemReader;
 import org.junit.After;
@@ -389,7 +390,7 @@ protected File write(final String body) throws IOException {
 	 *             the file could not be written.
 	 */
 	protected void write(final File f, final String body) throws IOException {
-		f.getParentFile().mkdirs();
+		FileUtils.mkdirs(f.getParentFile(), true);
 		Writer w = new OutputStreamWriter(new FileOutputStream(f), "UTF-8");
 		try {
 			w.write(body);
diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/eclipse/Iplog.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/eclipse/Iplog.java
index 84859a8..86b93a0 100644
--- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/eclipse/Iplog.java
+++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/eclipse/Iplog.java
@@ -59,6 +59,7 @@
 import org.eclipse.jgit.revwalk.RevTag;
 import org.eclipse.jgit.revwalk.RevWalk;
 import org.eclipse.jgit.storage.file.LockFile;
+import org.eclipse.jgit.util.FileUtils;
 import org.kohsuke.args4j.Argument;
 import org.kohsuke.args4j.Option;
 
@@ -96,8 +97,7 @@ else if (version == null)
 		log.scan(db, rw.parseCommit(start), version);
 
 		if (output != null) {
-			if (!output.getParentFile().exists())
-				output.getParentFile().mkdirs();
+			FileUtils.mkdirs(output.getParentFile(), true);
 			LockFile lf = new LockFile(output, db.getFS());
 			if (!lf.lock())
 				throw die(MessageFormat.format(CLIText.get().cannotLock, output));
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/AddCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/AddCommandTest.java
index 33f305d..61b099d 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/AddCommandTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/AddCommandTest.java
@@ -90,7 +90,7 @@ public void testAddNonExistingSingleFile() throws NoFilepatternException {
 	@Test
 	public void testAddExistingSingleFile() throws IOException, NoFilepatternException {
 		File file = new File(db.getWorkTree(), "a.txt");
-		file.createNewFile();
+		FileUtils.createNewFile(file);
 		PrintWriter writer = new PrintWriter(file);
 		writer.print("content");
 		writer.close();
@@ -106,9 +106,9 @@ public void testAddExistingSingleFile() throws IOException, NoFilepatternExcepti
 
 	@Test
 	public void testAddExistingSingleFileInSubDir() throws IOException, NoFilepatternException {
-		new File(db.getWorkTree(), "sub").mkdir();
+		FileUtils.mkdir(new File(db.getWorkTree(), "sub"));
 		File file = new File(db.getWorkTree(), "sub/a.txt");
-		file.createNewFile();
+		FileUtils.createNewFile(file);
 		PrintWriter writer = new PrintWriter(file);
 		writer.print("content");
 		writer.close();
@@ -125,7 +125,7 @@ public void testAddExistingSingleFileInSubDir() throws IOException, NoFilepatter
 	@Test
 	public void testAddExistingSingleFileTwice() throws IOException, NoFilepatternException {
 		File file = new File(db.getWorkTree(), "a.txt");
-		file.createNewFile();
+		FileUtils.createNewFile(file);
 		PrintWriter writer = new PrintWriter(file);
 		writer.print("content");
 		writer.close();
@@ -149,7 +149,7 @@ public void testAddExistingSingleFileTwice() throws IOException, NoFilepatternEx
 	@Test
 	public void testAddExistingSingleFileTwiceWithCommit() throws Exception {
 		File file = new File(db.getWorkTree(), "a.txt");
-		file.createNewFile();
+		FileUtils.createNewFile(file);
 		PrintWriter writer = new PrintWriter(file);
 		writer.print("content");
 		writer.close();
@@ -175,7 +175,7 @@ public void testAddExistingSingleFileTwiceWithCommit() throws Exception {
 	@Test
 	public void testAddRemovedFile() throws Exception {
 		File file = new File(db.getWorkTree(), "a.txt");
-		file.createNewFile();
+		FileUtils.createNewFile(file);
 		PrintWriter writer = new PrintWriter(file);
 		writer.print("content");
 		writer.close();
@@ -197,7 +197,7 @@ public void testAddRemovedFile() throws Exception {
 	@Test
 	public void testAddRemovedCommittedFile() throws Exception {
 		File file = new File(db.getWorkTree(), "a.txt");
-		file.createNewFile();
+		FileUtils.createNewFile(file);
 		PrintWriter writer = new PrintWriter(file);
 		writer.print("content");
 		writer.close();
@@ -223,13 +223,13 @@ public void testAddWithConflicts() throws Exception {
 		// prepare conflict
 
 		File file = new File(db.getWorkTree(), "a.txt");
-		file.createNewFile();
+		FileUtils.createNewFile(file);
 		PrintWriter writer = new PrintWriter(file);
 		writer.print("content");
 		writer.close();
 
 		File file2 = new File(db.getWorkTree(), "b.txt");
-		file2.createNewFile();
+		FileUtils.createNewFile(file2);
 		writer = new PrintWriter(file2);
 		writer.print("content b");
 		writer.close();
@@ -275,13 +275,13 @@ public void testAddWithConflicts() throws Exception {
 	@Test
 	public void testAddTwoFiles() throws Exception  {
 		File file = new File(db.getWorkTree(), "a.txt");
-		file.createNewFile();
+		FileUtils.createNewFile(file);
 		PrintWriter writer = new PrintWriter(file);
 		writer.print("content");
 		writer.close();
 
 		File file2 = new File(db.getWorkTree(), "b.txt");
-		file2.createNewFile();
+		FileUtils.createNewFile(file2);
 		writer = new PrintWriter(file2);
 		writer.print("content b");
 		writer.close();
@@ -296,15 +296,15 @@ public void testAddTwoFiles() throws Exception  {
 
 	@Test
 	public void testAddFolder() throws Exception  {
-		new File(db.getWorkTree(), "sub").mkdir();
+		FileUtils.mkdir(new File(db.getWorkTree(), "sub"));
 		File file = new File(db.getWorkTree(), "sub/a.txt");
-		file.createNewFile();
+		FileUtils.createNewFile(file);
 		PrintWriter writer = new PrintWriter(file);
 		writer.print("content");
 		writer.close();
 
 		File file2 = new File(db.getWorkTree(), "sub/b.txt");
-		file2.createNewFile();
+		FileUtils.createNewFile(file2);
 		writer = new PrintWriter(file2);
 		writer.print("content b");
 		writer.close();
@@ -319,21 +319,21 @@ public void testAddFolder() throws Exception  {
 
 	@Test
 	public void testAddIgnoredFile() throws Exception  {
-		new File(db.getWorkTree(), "sub").mkdir();
+		FileUtils.mkdir(new File(db.getWorkTree(), "sub"));
 		File file = new File(db.getWorkTree(), "sub/a.txt");
-		file.createNewFile();
+		FileUtils.createNewFile(file);
 		PrintWriter writer = new PrintWriter(file);
 		writer.print("content");
 		writer.close();
 
 		File ignoreFile = new File(db.getWorkTree(), ".gitignore");
-		ignoreFile.createNewFile();
+		FileUtils.createNewFile(ignoreFile);
 		writer = new PrintWriter(ignoreFile);
 		writer.print("sub/b.txt");
 		writer.close();
 
 		File file2 = new File(db.getWorkTree(), "sub/b.txt");
-		file2.createNewFile();
+		FileUtils.createNewFile(file2);
 		writer = new PrintWriter(file2);
 		writer.print("content b");
 		writer.close();
@@ -348,15 +348,15 @@ public void testAddIgnoredFile() throws Exception  {
 
 	@Test
 	public void testAddWholeRepo() throws Exception  {
-		new File(db.getWorkTree(), "sub").mkdir();
+		FileUtils.mkdir(new File(db.getWorkTree(), "sub"));
 		File file = new File(db.getWorkTree(), "sub/a.txt");
-		file.createNewFile();
+		FileUtils.createNewFile(file);
 		PrintWriter writer = new PrintWriter(file);
 		writer.print("content");
 		writer.close();
 
 		File file2 = new File(db.getWorkTree(), "sub/b.txt");
-		file2.createNewFile();
+		FileUtils.createNewFile(file2);
 		writer = new PrintWriter(file2);
 		writer.print("content b");
 		writer.close();
@@ -375,15 +375,15 @@ public void testAddWholeRepo() throws Exception  {
 	// file c exists in workdir but not in index -> added
 	@Test
 	public void testAddWithoutParameterUpdate() throws Exception {
-		new File(db.getWorkTree(), "sub").mkdir();
+		FileUtils.mkdir(new File(db.getWorkTree(), "sub"));
 		File file = new File(db.getWorkTree(), "sub/a.txt");
-		file.createNewFile();
+		FileUtils.createNewFile(file);
 		PrintWriter writer = new PrintWriter(file);
 		writer.print("content");
 		writer.close();
 
 		File file2 = new File(db.getWorkTree(), "sub/b.txt");
-		file2.createNewFile();
+		FileUtils.createNewFile(file2);
 		writer = new PrintWriter(file2);
 		writer.print("content b");
 		writer.close();
@@ -400,7 +400,7 @@ public void testAddWithoutParameterUpdate() throws Exception {
 
 		// new unstaged file sub/c.txt
 		File file3 = new File(db.getWorkTree(), "sub/c.txt");
-		file3.createNewFile();
+		FileUtils.createNewFile(file3);
 		writer = new PrintWriter(file3);
 		writer.print("content c");
 		writer.close();
@@ -429,15 +429,15 @@ public void testAddWithoutParameterUpdate() throws Exception {
 	// file c exists in workdir but not in index -> unchanged
 	@Test
 	public void testAddWithParameterUpdate() throws Exception {
-		new File(db.getWorkTree(), "sub").mkdir();
+		FileUtils.mkdir(new File(db.getWorkTree(), "sub"));
 		File file = new File(db.getWorkTree(), "sub/a.txt");
-		file.createNewFile();
+		FileUtils.createNewFile(file);
 		PrintWriter writer = new PrintWriter(file);
 		writer.print("content");
 		writer.close();
 
 		File file2 = new File(db.getWorkTree(), "sub/b.txt");
-		file2.createNewFile();
+		FileUtils.createNewFile(file2);
 		writer = new PrintWriter(file2);
 		writer.print("content b");
 		writer.close();
@@ -454,7 +454,7 @@ public void testAddWithParameterUpdate() throws Exception {
 
 		// new unstaged file sub/c.txt
 		File file3 = new File(db.getWorkTree(), "sub/c.txt");
-		file3.createNewFile();
+		FileUtils.createNewFile(file3);
 		writer = new PrintWriter(file3);
 		writer.print("content c");
 		writer.close();
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitAndLogCommandTests.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitAndLogCommandTests.java
index 67a9a1b..bc313e87 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitAndLogCommandTests.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CommitAndLogCommandTests.java
@@ -66,6 +66,7 @@
 import org.eclipse.jgit.lib.RepositoryTestCase;
 import org.eclipse.jgit.revwalk.RevCommit;
 import org.eclipse.jgit.treewalk.TreeWalk;
+import org.eclipse.jgit.util.FileUtils;
 
 public class CommitAndLogCommandTests extends RepositoryTestCase {
 	public void testSomeCommits() throws NoHeadException, NoMessageException,
@@ -169,7 +170,7 @@ public void testAddUnstagedChanges() throws IOException, NoHeadException,
 			JGitInternalException, WrongRepositoryStateException,
 			NoFilepatternException {
 		File file = new File(db.getWorkTree(), "a.txt");
-		file.createNewFile();
+		FileUtils.createNewFile(file);
 		PrintWriter writer = new PrintWriter(file);
 		writer.print("content");
 		writer.close();
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/InitCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/InitCommandTest.java
index 755370c..15aafc9 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/InitCommandTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/InitCommandTest.java
@@ -51,6 +51,7 @@
 
 import org.eclipse.jgit.lib.Repository;
 import org.eclipse.jgit.lib.RepositoryTestCase;
+import org.eclipse.jgit.util.FileUtils;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -93,16 +94,8 @@ public void testInitBareRepository() {
 	public static File createTempDirectory(String name) throws IOException {
 		final File temp;
 		temp = File.createTempFile(name, Long.toString(System.nanoTime()));
-
-		if (!(temp.delete())) {
-			throw new IOException("Could not delete temp file: "
-					+ temp.getAbsolutePath());
-		}
-
-		if (!(temp.mkdir())) {
-			throw new IOException("Could not create temp directory: "
-					+ temp.getAbsolutePath());
-		}
+		FileUtils.delete(temp);
+		FileUtils.mkdir(temp);
 		return temp;
 	}
 
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/RacyGitTests.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/RacyGitTests.java
index 80b853e..c25ee4c 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/RacyGitTests.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/lib/RacyGitTests.java
@@ -53,6 +53,7 @@
 import org.eclipse.jgit.treewalk.FileTreeIterator;
 import org.eclipse.jgit.treewalk.FileTreeIteratorWithTimeControl;
 import org.eclipse.jgit.treewalk.NameConflictTreeWalk;
+import org.eclipse.jgit.util.FileUtils;
 
 public class RacyGitTests extends RepositoryTestCase {
 	public void testIterator() throws IllegalStateException, IOException,
@@ -61,19 +62,19 @@ public void testIterator() throws IllegalStateException, IOException,
 		File lastFile = null;
 		for (int i = 0; i < 10; i++) {
 			lastFile = new File(db.getWorkTree(), "0." + i);
-			lastFile.createNewFile();
+			FileUtils.createNewFile(lastFile);
 			if (i == 5)
 				fsTick(lastFile);
 		}
 		modTimes.add(fsTick(lastFile));
 		for (int i = 0; i < 10; i++) {
 			lastFile = new File(db.getWorkTree(), "1." + i);
-			lastFile.createNewFile();
+			FileUtils.createNewFile(lastFile);
 		}
 		modTimes.add(fsTick(lastFile));
 		for (int i = 0; i < 10; i++) {
 			lastFile = new File(db.getWorkTree(), "2." + i);
-			lastFile.createNewFile();
+			FileUtils.createNewFile(lastFile);
 			if (i % 4 == 0)
 				fsTick(lastFile);
 		}
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/storage/file/AbbreviationTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/storage/file/AbbreviationTest.java
index 2f989e3..cfb526d 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/storage/file/AbbreviationTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/storage/file/AbbreviationTest.java
@@ -68,6 +68,7 @@
 import org.eclipse.jgit.lib.ObjectReader;
 import org.eclipse.jgit.revwalk.RevBlob;
 import org.eclipse.jgit.transport.PackedObjectInfo;
+import org.eclipse.jgit.util.FileUtils;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -176,7 +177,7 @@ public void testAbbreviateIsActuallyUnique() throws Exception {
 		File packDir = new File(db.getObjectDatabase().getDirectory(), "pack");
 		File idxFile = new File(packDir, packName + ".idx");
 		File packFile = new File(packDir, packName + ".pack");
-		packDir.mkdir();
+		FileUtils.mkdir(packDir, true);
 		OutputStream dst = new BufferedOutputStream(new FileOutputStream(
 				idxFile));
 		try {
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/storage/file/FileRepositoryBuilderTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/storage/file/FileRepositoryBuilderTest.java
index 385c853..80e0f1a 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/storage/file/FileRepositoryBuilderTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/storage/file/FileRepositoryBuilderTest.java
@@ -48,6 +48,7 @@
 import java.io.File;
 
 import org.eclipse.jgit.junit.LocalDiskRepositoryTestCase;
+import org.eclipse.jgit.util.FileUtils;
 import org.junit.Test;
 
 public class FileRepositoryBuilderTest extends LocalDiskRepositoryTestCase {
@@ -55,7 +56,7 @@ public class FileRepositoryBuilderTest extends LocalDiskRepositoryTestCase {
 	public void testShouldAutomagicallyDetectGitDirectory() throws Exception {
 		FileRepository r = createWorkRepository();
 		File d = new File(r.getDirectory(), "sub-dir");
-		d.mkdir();
+		FileUtils.mkdir(d);
 
 		assertEquals(r.getDirectory(), new FileRepositoryBuilder()
 				.findGitDir(d).getGitDir());
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/storage/file/RepositorySetupWorkDirTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/storage/file/RepositorySetupWorkDirTest.java
index 99d99a5..1781c3d 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/storage/file/RepositorySetupWorkDirTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/storage/file/RepositorySetupWorkDirTest.java
@@ -59,6 +59,7 @@
 import org.eclipse.jgit.lib.Constants;
 import org.eclipse.jgit.lib.Repository;
 import org.eclipse.jgit.util.FS;
+import org.eclipse.jgit.util.FileUtils;
 import org.junit.Test;
 
 /**
@@ -182,12 +183,12 @@ public void testExceptionThrown_BareRepoGetIndexFile() throws Exception {
 		}
 	}
 
-	private File getFile(String... pathComponents) {
+	private File getFile(String... pathComponents) throws IOException {
 		String rootPath = new File(new File("target"), "trash").getPath();
 		for (String pathComponent : pathComponents)
 			rootPath = rootPath + File.separatorChar + pathComponent;
 		File result = new File(rootPath);
-		result.mkdir();
+		FileUtils.mkdirs(result, true);
 		return result;
 	}
 
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/storage/file/T0003_BasicTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/storage/file/T0003_BasicTest.java
index 7f0436b..ec5c884 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/storage/file/T0003_BasicTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/storage/file/T0003_BasicTest.java
@@ -81,6 +81,7 @@
 import org.eclipse.jgit.revwalk.RevCommit;
 import org.eclipse.jgit.revwalk.RevTag;
 import org.eclipse.jgit.revwalk.RevWalk;
+import org.eclipse.jgit.util.FileUtils;
 import org.junit.Test;
 
 public class T0003_BasicTest extends SampleDataRepositoryTestCase {
@@ -202,7 +203,7 @@ public void test000_openrepo_default_absolute_workdirconfig()
 			throws IOException {
 		File repo1Parent = new File(trash.getParentFile(), "r1");
 		File workdir = new File(trash.getParentFile(), "rw");
-		workdir.mkdir();
+		FileUtils.mkdir(workdir);
 		FileRepository repo1initial = new FileRepository(new File(repo1Parent,
 				Constants.DOT_GIT));
 		repo1initial.create();
@@ -231,7 +232,7 @@ public void test000_openrepo_default_relative_workdirconfig()
 			throws IOException {
 		File repo1Parent = new File(trash.getParentFile(), "r1");
 		File workdir = new File(trash.getParentFile(), "rw");
-		workdir.mkdir();
+		FileUtils.mkdir(workdir);
 		FileRepository repo1initial = new FileRepository(new File(repo1Parent,
 				Constants.DOT_GIT));
 		repo1initial.create();
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/storage/file/UnpackedObjectTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/storage/file/UnpackedObjectTest.java
index c6199c3..0e6881e 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/storage/file/UnpackedObjectTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/storage/file/UnpackedObjectTest.java
@@ -71,6 +71,7 @@
 import org.eclipse.jgit.lib.ObjectInserter;
 import org.eclipse.jgit.lib.ObjectLoader;
 import org.eclipse.jgit.lib.ObjectStream;
+import org.eclipse.jgit.util.FileUtils;
 import org.eclipse.jgit.util.IO;
 import org.junit.After;
 import org.junit.Before;
@@ -567,7 +568,7 @@ private File path(ObjectId id) {
 
 	private void write(ObjectId id, byte[] data) throws IOException {
 		File path = path(id);
-		path.getParentFile().mkdirs();
+		FileUtils.mkdirs(path.getParentFile());
 		FileOutputStream out = new FileOutputStream(path);
 		try {
 			out.write(data);
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/OpenSshConfigTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/OpenSshConfigTest.java
index 966cd98..67123a4 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/OpenSshConfigTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/OpenSshConfigTest.java
@@ -54,6 +54,7 @@
 
 import org.eclipse.jgit.lib.RepositoryTestCase;
 import org.eclipse.jgit.transport.OpenSshConfig.Host;
+import org.eclipse.jgit.util.FileUtils;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -69,10 +70,10 @@ public void setUp() throws Exception {
 		super.setUp();
 
 		home = new File(trash, "home");
-		home.mkdir();
+		FileUtils.mkdir(home);
 
 		configFile = new File(new File(home, ".ssh"), "config");
-		configFile.getParentFile().mkdir();
+		FileUtils.mkdir(configFile.getParentFile());
 
 		System.setProperty("user.name", "jex_junit");
 		osc = new OpenSshConfig(home, configFile);
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/FileTreeIteratorTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/FileTreeIteratorTest.java
index ad8917a..0b12058 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/FileTreeIteratorTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/treewalk/FileTreeIteratorTest.java
@@ -110,8 +110,7 @@ public void testEmptyIfRootDoesNotExist() throws Exception {
 	public void testEmptyIfRootIsEmpty() throws Exception {
 		final File r = new File(trash, "not-existing-file");
 		assertFalse(r.exists());
-		r.mkdir();
-		assertTrue(r.isDirectory());
+		FileUtils.mkdir(r);
 
 		final FileTreeIterator fti = new FileTreeIterator(r, db.getFS(),
 				db.getConfig().get(WorkingTreeOptions.KEY));
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/FileUtilTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/FileUtilTest.java
index d81e686..08e7557 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/FileUtilTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/util/FileUtilTest.java
@@ -71,7 +71,7 @@ public void tearDown() throws Exception {
 	@Test
 	public void testDeleteFile() throws IOException {
 		File f = new File(trash, "test");
-		assertTrue(f.createNewFile());
+		FileUtils.createNewFile(f);
 		FileUtils.delete(f);
 		assertFalse(f.exists());
 
@@ -92,10 +92,10 @@ public void testDeleteFile() throws IOException {
 	@Test
 	public void testDeleteRecursive() throws IOException {
 		File f1 = new File(trash, "test/test/a");
-		f1.mkdirs();
-		f1.createNewFile();
+		FileUtils.mkdirs(f1.getParentFile());
+		FileUtils.createNewFile(f1);
 		File f2 = new File(trash, "test/test/b");
-		f2.createNewFile();
+		FileUtils.createNewFile(f2);
 		File d = new File(trash, "test");
 		FileUtils.delete(d, FileUtils.RECURSIVE);
 		assertFalse(d.exists());
@@ -132,7 +132,7 @@ public void testMkdir() throws IOException {
 
 		assertTrue(d.delete());
 		File f = new File(trash, "test");
-		assertTrue(f.createNewFile());
+		FileUtils.createNewFile(f);
 		try {
 			FileUtils.mkdir(d);
 			fail("creation of directory having same path as existing file must"
@@ -164,7 +164,7 @@ public void testMkdirs() throws IOException {
 
 		FileUtils.delete(root, FileUtils.RECURSIVE);
 		File f = new File(trash, "test");
-		assertTrue(f.createNewFile());
+		FileUtils.createNewFile(f);
 		try {
 			FileUtils.mkdirs(d);
 			fail("creation of directory having path conflicting with existing"
diff --git a/org.eclipse.jgit/findBugs/FindBugsExcludeFilter.xml b/org.eclipse.jgit/findBugs/FindBugsExcludeFilter.xml
index 948308e..073f3da 100644
--- a/org.eclipse.jgit/findBugs/FindBugsExcludeFilter.xml
+++ b/org.eclipse.jgit/findBugs/FindBugsExcludeFilter.xml
@@ -9,6 +9,13 @@
        <Bug pattern="DM_GC" />
      </Match>
 
+     <!-- Silence ignoring return value of mkdirs -->
+     <Match>
+       <Class name="org.eclipse.jgit.dircache.DirCacheCheckout" />
+       <Method name="checkout" />
+       <Bug pattern="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE" />
+     </Match>
+
 	   <!-- Silence the construction of our magic String instance.
 	     -->
      <Match>
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/RebaseCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/RebaseCommand.java
index 36c0670..e5e6045 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/api/RebaseCommand.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/RebaseCommand.java
@@ -509,7 +509,7 @@ private RebaseResult initFilesAndRewind() throws RefNotFoundException,
 
 		Collections.reverse(cherryPickList);
 		// create the folder for the meta information
-		rebaseDir.mkdir();
+		FileUtils.mkdir(rebaseDir);
 
 		createFile(repo.getDirectory(), Constants.ORIG_HEAD, headId.name());
 		createFile(rebaseDir, REBASE_HEAD, headId.name());
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 25acf16..dbd0511 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/dircache/DirCacheCheckout.java
@@ -419,7 +419,9 @@ public boolean checkout() throws IOException {
 		for (String path : updated.keySet()) {
 			// ... create/overwrite this file ...
 			file = new File(repo.getWorkTree(), path);
-			file.getParentFile().mkdirs();
+			if (!file.getParentFile().mkdirs()) {
+				// ignore
+			}
 			file.createNewFile();
 			DirCacheEntry entry = dc.getEntry(path);
 			checkoutEntry(repo, file, entry);
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/GitIndex.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/GitIndex.java
index 5e6e616..0088a15 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/GitIndex.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/GitIndex.java
@@ -72,6 +72,7 @@
 import org.eclipse.jgit.errors.CorruptObjectException;
 import org.eclipse.jgit.errors.NotSupportedException;
 import org.eclipse.jgit.events.IndexChangedEvent;
+import org.eclipse.jgit.util.FileUtils;
 import org.eclipse.jgit.util.RawParseUtils;
 
 /**
@@ -937,7 +938,7 @@ public void checkoutEntry(File wd, Entry e) throws IOException {
 		ObjectLoader ol = db.open(e.sha1, Constants.OBJ_BLOB);
 		File file = new File(wd, e.getName());
 		file.delete();
-		file.getParentFile().mkdirs();
+		FileUtils.mkdirs(file.getParentFile(), true);
 		FileOutputStream dst = new FileOutputStream(file);
 		try {
 			ol.copyTo(dst);
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/FileRepository.java b/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/FileRepository.java
index 28b83b0..cedb594 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/FileRepository.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/FileRepository.java
@@ -239,11 +239,11 @@ public void create(boolean bare) throws IOException {
 			throw new IllegalStateException(MessageFormat.format(
 					JGitText.get().repositoryAlreadyExists, getDirectory()));
 		}
-		getDirectory().mkdirs();
+		FileUtils.mkdirs(getDirectory(), true);
 		refs.create();
 		objectDatabase.create();
 
-		new File(getDirectory(), "branches").mkdir();
+		FileUtils.mkdir(new File(getDirectory(), "branches"));
 
 		RefUpdate head = updateRef(Constants.HEAD);
 		head.disableRefLog();
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/LockFile.java b/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/LockFile.java
index 52aa7ee..9e637ab 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/LockFile.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/LockFile.java
@@ -60,6 +60,7 @@
 import org.eclipse.jgit.lib.Constants;
 import org.eclipse.jgit.lib.ObjectId;
 import org.eclipse.jgit.util.FS;
+import org.eclipse.jgit.util.FileUtils;
 
 /**
  * Git style file locking and replacement.
@@ -122,7 +123,7 @@ public LockFile(final File f, FS fs) {
 	 *             does not hold the lock.
 	 */
 	public boolean lock() throws IOException {
-		lck.getParentFile().mkdirs();
+		FileUtils.mkdirs(lck.getParentFile(), true);
 		if (lck.createNewFile()) {
 			haveLck = true;
 			try {
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/ObjectDirectory.java b/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/ObjectDirectory.java
index 021a91b..745c18f 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/ObjectDirectory.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/ObjectDirectory.java
@@ -171,9 +171,9 @@ public boolean exists() {
 
 	@Override
 	public void create() throws IOException {
-		objects.mkdirs();
-		infoDirectory.mkdir();
-		packDirectory.mkdir();
+		FileUtils.mkdirs(objects);
+		FileUtils.mkdir(infoDirectory);
+		FileUtils.mkdir(packDirectory);
 	}
 
 	@Override
@@ -491,7 +491,7 @@ InsertLooseObjectResult insertUnpackedObject(File tmp, ObjectId id,
 		// directories are always lazily created. Note that we
 		// try the rename first as the directory likely does exist.
 		//
-		dst.getParentFile().mkdir();
+		FileUtils.mkdir(dst.getParentFile());
 		if (tmp.renameTo(dst)) {
 			dst.setReadOnly();
 			unpackedObjectCache.add(id);
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/RefDirectory.java b/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/RefDirectory.java
index 2af7ca3..c8c7d0d 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/RefDirectory.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/RefDirectory.java
@@ -97,6 +97,7 @@
 import org.eclipse.jgit.revwalk.RevTag;
 import org.eclipse.jgit.revwalk.RevWalk;
 import org.eclipse.jgit.util.FS;
+import org.eclipse.jgit.util.FileUtils;
 import org.eclipse.jgit.util.IO;
 import org.eclipse.jgit.util.RawParseUtils;
 import org.eclipse.jgit.util.RefList;
@@ -190,13 +191,14 @@ Repository getRepository() {
 	}
 
 	public void create() throws IOException {
-		refsDir.mkdir();
-		logsDir.mkdir();
-		logsRefsDir.mkdir();
+		FileUtils.mkdir(refsDir);
+		FileUtils.mkdir(logsDir);
+		FileUtils.mkdir(logsRefsDir);
 
-		new File(refsDir, R_HEADS.substring(R_REFS.length())).mkdir();
-		new File(refsDir, R_TAGS.substring(R_REFS.length())).mkdir();
-		new File(logsRefsDir, R_HEADS.substring(R_REFS.length())).mkdir();
+		FileUtils.mkdir(new File(refsDir, R_HEADS.substring(R_REFS.length())));
+		FileUtils.mkdir(new File(refsDir, R_TAGS.substring(R_REFS.length())));
+		FileUtils.mkdir(new File(logsRefsDir,
+				R_HEADS.substring(R_REFS.length())));
 	}
 
 	@Override