diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/ReflogWriter.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/ReflogWriter.java index d99c26614..b366eafe2 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/ReflogWriter.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/ReflogWriter.java @@ -219,6 +219,22 @@ public class ReflogWriter { return Constants.encode(r.toString()); } + private FileOutputStream getFileOutputStream(File log) throws IOException { + try { + return new FileOutputStream(log, true); + } catch (FileNotFoundException err) { + File dir = log.getParentFile(); + if (dir.exists()) { + throw err; + } + if (!dir.mkdirs() && !dir.isDirectory()) { + throw new IOException(MessageFormat + .format(JGitText.get().cannotCreateDirectory, dir)); + } + return new FileOutputStream(log, true); + } + } + private ReflogWriter log(String refName, byte[] rec) throws IOException { File log = refdb.logFor(refName); boolean write = forceWrite @@ -228,29 +244,17 @@ public class ReflogWriter { return this; WriteConfig wc = refdb.getRepository().getConfig().get(WriteConfig.KEY); - FileOutputStream out; - try { - out = new FileOutputStream(log, true); - } catch (FileNotFoundException err) { - File dir = log.getParentFile(); - if (dir.exists()) - throw err; - if (!dir.mkdirs() && !dir.isDirectory()) - throw new IOException(MessageFormat.format( - JGitText.get().cannotCreateDirectory, dir)); - out = new FileOutputStream(log, true); - } - try { + try (FileOutputStream out = getFileOutputStream(log)) { if (wc.getFSyncRefFiles()) { FileChannel fc = out.getChannel(); ByteBuffer buf = ByteBuffer.wrap(rec); - while (0 < buf.remaining()) + while (0 < buf.remaining()) { fc.write(buf); + } fc.force(true); - } else + } else { out.write(rec); - } finally { - out.close(); + } } return this; }