Deprecate SafeBufferedOutputStream

Java 8 fixed the silent flush during close issue by
FilterOutputStream (base class of BufferedOutputStream)
using try-with-resources to close the stream, getting a
behavior matching what JGit's SafeBufferedOutputStream
was doing:

  try {
    flush();
  } finally {
    out.close();
  }

With Java 8 as the minimum required version to run JGit
it is no longer necessary to override close() or have
this class. Deprecate the class, and use the JRE's version
of close.

Change-Id: Ic0584c140010278dbe4062df2e71be5df9a797b3
This commit is contained in:
Shawn Pearce 2016-11-13 11:24:41 -08:00 committed by David Pursehouse
parent 3e52252622
commit 8208da2f59
15 changed files with 43 additions and 82 deletions

View File

@ -46,6 +46,7 @@
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail; import static org.junit.Assert.fail;
import java.io.BufferedOutputStream;
import java.io.File; import java.io.File;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
@ -103,7 +104,6 @@
import org.eclipse.jgit.treewalk.filter.PathFilterGroup; import org.eclipse.jgit.treewalk.filter.PathFilterGroup;
import org.eclipse.jgit.util.ChangeIdUtil; import org.eclipse.jgit.util.ChangeIdUtil;
import org.eclipse.jgit.util.FileUtils; import org.eclipse.jgit.util.FileUtils;
import org.eclipse.jgit.util.io.SafeBufferedOutputStream;
/** /**
* Wrapper to make creating test data easier. * Wrapper to make creating test data easier.
@ -885,14 +885,14 @@ public void packAndPrune() throws Exception {
pack = nameFor(odb, name, ".pack"); pack = nameFor(odb, name, ".pack");
try (OutputStream out = try (OutputStream out =
new SafeBufferedOutputStream(new FileOutputStream(pack))) { new BufferedOutputStream(new FileOutputStream(pack))) {
pw.writePack(m, m, out); pw.writePack(m, m, out);
} }
pack.setReadOnly(); pack.setReadOnly();
idx = nameFor(odb, name, ".idx"); idx = nameFor(odb, name, ".idx");
try (OutputStream out = try (OutputStream out =
new SafeBufferedOutputStream(new FileOutputStream(idx))) { new BufferedOutputStream(new FileOutputStream(idx))) {
pw.writeIndex(out); pw.writeIndex(out);
} }
idx.setReadOnly(); idx.setReadOnly();

View File

@ -45,6 +45,7 @@
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.File; import java.io.File;
@ -65,7 +66,6 @@
import org.eclipse.jgit.util.FileUtils; import org.eclipse.jgit.util.FileUtils;
import org.eclipse.jgit.util.RawParseUtils; import org.eclipse.jgit.util.RawParseUtils;
import org.eclipse.jgit.util.io.DisabledOutputStream; import org.eclipse.jgit.util.io.DisabledOutputStream;
import org.eclipse.jgit.util.io.SafeBufferedOutputStream;
import org.junit.After; import org.junit.After;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@ -381,7 +381,7 @@ public void testDiff() throws Exception {
write(new File(folder, "folder.txt"), "folder"); write(new File(folder, "folder.txt"), "folder");
try (Git git = new Git(db); try (Git git = new Git(db);
ByteArrayOutputStream os = new ByteArrayOutputStream(); ByteArrayOutputStream os = new ByteArrayOutputStream();
DiffFormatter dfmt = new DiffFormatter(new SafeBufferedOutputStream(os))) { DiffFormatter dfmt = new DiffFormatter(new BufferedOutputStream(os))) {
git.add().addFilepattern(".").call(); git.add().addFilepattern(".").call();
git.commit().setMessage("Initial commit").call(); git.commit().setMessage("Initial commit").call();
write(new File(folder, "folder.txt"), "folder change"); write(new File(folder, "folder.txt"), "folder change");
@ -414,7 +414,7 @@ public void testDiffRootNullToTree() throws Exception {
write(new File(folder, "folder.txt"), "folder"); write(new File(folder, "folder.txt"), "folder");
try (Git git = new Git(db); try (Git git = new Git(db);
ByteArrayOutputStream os = new ByteArrayOutputStream(); ByteArrayOutputStream os = new ByteArrayOutputStream();
DiffFormatter dfmt = new DiffFormatter(new SafeBufferedOutputStream(os))) { DiffFormatter dfmt = new DiffFormatter(new BufferedOutputStream(os))) {
git.add().addFilepattern(".").call(); git.add().addFilepattern(".").call();
RevCommit commit = git.commit().setMessage("Initial commit").call(); RevCommit commit = git.commit().setMessage("Initial commit").call();
write(new File(folder, "folder.txt"), "folder change"); write(new File(folder, "folder.txt"), "folder change");
@ -446,7 +446,7 @@ public void testDiffRootTreeToNull() throws Exception {
write(new File(folder, "folder.txt"), "folder"); write(new File(folder, "folder.txt"), "folder");
try (Git git = new Git(db); try (Git git = new Git(db);
ByteArrayOutputStream os = new ByteArrayOutputStream(); ByteArrayOutputStream os = new ByteArrayOutputStream();
DiffFormatter dfmt = new DiffFormatter(new SafeBufferedOutputStream(os));) { DiffFormatter dfmt = new DiffFormatter(new BufferedOutputStream(os));) {
git.add().addFilepattern(".").call(); git.add().addFilepattern(".").call();
RevCommit commit = git.commit().setMessage("Initial commit").call(); RevCommit commit = git.commit().setMessage("Initial commit").call();
write(new File(folder, "folder.txt"), "folder change"); write(new File(folder, "folder.txt"), "folder change");
@ -473,7 +473,7 @@ public void testDiffRootTreeToNull() throws Exception {
@Test @Test
public void testDiffNullToNull() throws Exception { public void testDiffNullToNull() throws Exception {
try (ByteArrayOutputStream os = new ByteArrayOutputStream(); try (ByteArrayOutputStream os = new ByteArrayOutputStream();
DiffFormatter dfmt = new DiffFormatter(new SafeBufferedOutputStream(os))) { DiffFormatter dfmt = new DiffFormatter(new BufferedOutputStream(os))) {
dfmt.setRepository(db); dfmt.setRepository(db);
dfmt.format((AnyObjectId) null, null); dfmt.format((AnyObjectId) null, null);
dfmt.flush(); dfmt.flush();

View File

@ -50,6 +50,7 @@
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail; import static org.junit.Assert.fail;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.File; import java.io.File;
import java.io.FileOutputStream; import java.io.FileOutputStream;
@ -69,7 +70,6 @@
import org.eclipse.jgit.revwalk.RevBlob; import org.eclipse.jgit.revwalk.RevBlob;
import org.eclipse.jgit.transport.PackedObjectInfo; import org.eclipse.jgit.transport.PackedObjectInfo;
import org.eclipse.jgit.util.FileUtils; import org.eclipse.jgit.util.FileUtils;
import org.eclipse.jgit.util.io.SafeBufferedOutputStream;
import org.junit.After; import org.junit.After;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@ -180,13 +180,10 @@ public void testAbbreviateIsActuallyUnique() throws Exception {
File idxFile = new File(packDir, packName + ".idx"); File idxFile = new File(packDir, packName + ".idx");
File packFile = new File(packDir, packName + ".pack"); File packFile = new File(packDir, packName + ".pack");
FileUtils.mkdir(packDir, true); FileUtils.mkdir(packDir, true);
OutputStream dst = new SafeBufferedOutputStream(new FileOutputStream( try (OutputStream dst = new BufferedOutputStream(
idxFile)); new FileOutputStream(idxFile))) {
try {
PackIndexWriter writer = new PackIndexWriterV2(dst); PackIndexWriter writer = new PackIndexWriterV2(dst);
writer.write(objects, new byte[OBJECT_ID_LENGTH]); writer.write(objects, new byte[OBJECT_ID_LENGTH]);
} finally {
dst.close();
} }
new FileOutputStream(packFile).close(); new FileOutputStream(packFile).close();

View File

@ -51,6 +51,7 @@
import static org.junit.Assert.assertNotSame; import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.fail; import static org.junit.Assert.fail;
import java.io.BufferedOutputStream;
import java.io.File; import java.io.File;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
@ -71,7 +72,6 @@
import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.revwalk.RevWalk;
import org.eclipse.jgit.storage.file.WindowCacheConfig; import org.eclipse.jgit.storage.file.WindowCacheConfig;
import org.eclipse.jgit.util.FileUtils; import org.eclipse.jgit.util.FileUtils;
import org.eclipse.jgit.util.io.SafeBufferedOutputStream;
import org.junit.After; import org.junit.After;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@ -235,20 +235,15 @@ private static void write(final File[] files, final PackWriter pw)
throws IOException { throws IOException {
final long begin = files[0].getParentFile().lastModified(); final long begin = files[0].getParentFile().lastModified();
NullProgressMonitor m = NullProgressMonitor.INSTANCE; NullProgressMonitor m = NullProgressMonitor.INSTANCE;
OutputStream out;
out = new SafeBufferedOutputStream(new FileOutputStream(files[0])); try (OutputStream out = new BufferedOutputStream(
try { new FileOutputStream(files[0]))) {
pw.writePack(m, m, out); pw.writePack(m, m, out);
} finally {
out.close();
} }
out = new SafeBufferedOutputStream(new FileOutputStream(files[1])); try (OutputStream out = new BufferedOutputStream(
try { new FileOutputStream(files[1]))) {
pw.writeIndex(out); pw.writeIndex(out);
} finally {
out.close();
} }
touch(begin, files[0].getParentFile()); touch(begin, files[0].getParentFile());

View File

@ -46,6 +46,7 @@
package org.eclipse.jgit.dircache; package org.eclipse.jgit.dircache;
import java.io.BufferedInputStream; import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.EOFException; import java.io.EOFException;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
@ -86,7 +87,6 @@
import org.eclipse.jgit.util.MutableInteger; import org.eclipse.jgit.util.MutableInteger;
import org.eclipse.jgit.util.NB; import org.eclipse.jgit.util.NB;
import org.eclipse.jgit.util.TemporaryBuffer; import org.eclipse.jgit.util.TemporaryBuffer;
import org.eclipse.jgit.util.io.SafeBufferedOutputStream;
/** /**
* Support for the Git dircache (aka index file). * Support for the Git dircache (aka index file).
@ -636,7 +636,7 @@ public void write() throws IOException {
requireLocked(tmp); requireLocked(tmp);
try { try {
writeTo(liveFile.getParentFile(), writeTo(liveFile.getParentFile(),
new SafeBufferedOutputStream(tmp.getOutputStream())); new BufferedOutputStream(tmp.getOutputStream()));
} catch (IOException err) { } catch (IOException err) {
tmp.unlock(); tmp.unlock();
throw err; throw err;

View File

@ -53,7 +53,6 @@
import org.eclipse.jgit.internal.JGitText; import org.eclipse.jgit.internal.JGitText;
import org.eclipse.jgit.internal.storage.file.PackBitmapIndexBuilder.StoredEntry; import org.eclipse.jgit.internal.storage.file.PackBitmapIndexBuilder.StoredEntry;
import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.util.io.SafeBufferedOutputStream;
import com.googlecode.javaewah.EWAHCompressedBitmap; import com.googlecode.javaewah.EWAHCompressedBitmap;
@ -74,7 +73,7 @@ public class PackBitmapIndexWriterV1 {
*/ */
public PackBitmapIndexWriterV1(final OutputStream dst) { public PackBitmapIndexWriterV1(final OutputStream dst) {
out = new DigestOutputStream(dst instanceof BufferedOutputStream ? dst out = new DigestOutputStream(dst instanceof BufferedOutputStream ? dst
: new SafeBufferedOutputStream(dst), : new BufferedOutputStream(dst),
Constants.newMessageDigest()); Constants.newMessageDigest());
dataOutput = new SimpleDataOutput(out); dataOutput = new SimpleDataOutput(out);
} }

View File

@ -56,7 +56,6 @@
import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.transport.PackedObjectInfo; import org.eclipse.jgit.transport.PackedObjectInfo;
import org.eclipse.jgit.util.NB; import org.eclipse.jgit.util.NB;
import org.eclipse.jgit.util.io.SafeBufferedOutputStream;
/** /**
* Creates a table of contents to support random access by {@link PackFile}. * Creates a table of contents to support random access by {@link PackFile}.
@ -183,7 +182,7 @@ public static PackIndexWriter createVersion(final OutputStream dst,
*/ */
protected PackIndexWriter(final OutputStream dst) { protected PackIndexWriter(final OutputStream dst) {
out = new DigestOutputStream(dst instanceof BufferedOutputStream ? dst out = new DigestOutputStream(dst instanceof BufferedOutputStream ? dst
: new SafeBufferedOutputStream(dst), : new BufferedOutputStream(dst),
Constants.newMessageDigest()); Constants.newMessageDigest());
tmp = new byte[4 + Constants.OBJECT_ID_LENGTH]; tmp = new byte[4 + Constants.OBJECT_ID_LENGTH];
} }

View File

@ -43,6 +43,7 @@
package org.eclipse.jgit.lib; package org.eclipse.jgit.lib;
import java.io.BufferedOutputStream;
import java.io.File; import java.io.File;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
@ -53,7 +54,6 @@
import org.eclipse.jgit.lib.RebaseTodoLine.Action; import org.eclipse.jgit.lib.RebaseTodoLine.Action;
import org.eclipse.jgit.util.IO; import org.eclipse.jgit.util.IO;
import org.eclipse.jgit.util.RawParseUtils; import org.eclipse.jgit.util.RawParseUtils;
import org.eclipse.jgit.util.io.SafeBufferedOutputStream;
/** /**
* Offers methods to read and write files formatted like the git-rebase-todo * Offers methods to read and write files formatted like the git-rebase-todo
@ -216,9 +216,8 @@ private static RebaseTodoLine parseLine(byte[] buf, int tokenBegin,
*/ */
public void writeRebaseTodoFile(String path, List<RebaseTodoLine> steps, public void writeRebaseTodoFile(String path, List<RebaseTodoLine> steps,
boolean append) throws IOException { boolean append) throws IOException {
OutputStream fw = new SafeBufferedOutputStream(new FileOutputStream( try (OutputStream fw = new BufferedOutputStream(new FileOutputStream(
new File(repo.getDirectory(), path), append)); new File(repo.getDirectory(), path), append))) {
try {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
for (RebaseTodoLine step : steps) { for (RebaseTodoLine step : steps) {
sb.setLength(0); sb.setLength(0);
@ -234,8 +233,6 @@ public void writeRebaseTodoFile(String path, List<RebaseTodoLine> steps,
sb.append('\n'); sb.append('\n');
fw.write(Constants.encode(sb.toString())); fw.write(Constants.encode(sb.toString()));
} }
} finally {
fw.close();
} }
} }
} }

View File

@ -52,6 +52,7 @@
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStream;
import java.net.URISyntaxException; import java.net.URISyntaxException;
import java.text.MessageFormat; import java.text.MessageFormat;
import java.util.Collection; import java.util.Collection;
@ -94,7 +95,6 @@
import org.eclipse.jgit.util.IO; import org.eclipse.jgit.util.IO;
import org.eclipse.jgit.util.RawParseUtils; import org.eclipse.jgit.util.RawParseUtils;
import org.eclipse.jgit.util.SystemReader; import org.eclipse.jgit.util.SystemReader;
import org.eclipse.jgit.util.io.SafeBufferedOutputStream;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -1799,15 +1799,12 @@ private void writeHeadsFile(List<? extends ObjectId> heads, String filename)
throws FileNotFoundException, IOException { throws FileNotFoundException, IOException {
File headsFile = new File(getDirectory(), filename); File headsFile = new File(getDirectory(), filename);
if (heads != null) { if (heads != null) {
BufferedOutputStream bos = new SafeBufferedOutputStream( try (OutputStream bos = new BufferedOutputStream(
new FileOutputStream(headsFile)); new FileOutputStream(headsFile))) {
try {
for (ObjectId id : heads) { for (ObjectId id : heads) {
id.copyTo(bos); id.copyTo(bos);
bos.write('\n'); bos.write('\n');
} }
} finally {
bos.close();
} }
} else { } else {
FileUtils.delete(headsFile, FileUtils.SKIP_MISSING); FileUtils.delete(headsFile, FileUtils.SKIP_MISSING);

View File

@ -44,6 +44,7 @@
package org.eclipse.jgit.transport; package org.eclipse.jgit.transport;
import java.io.BufferedInputStream; import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
@ -52,7 +53,6 @@
import org.eclipse.jgit.transport.resolver.ServiceNotAuthorizedException; import org.eclipse.jgit.transport.resolver.ServiceNotAuthorizedException;
import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException; import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException;
import org.eclipse.jgit.util.io.SafeBufferedOutputStream;
/** Active network client of {@link Daemon}. */ /** Active network client of {@link Daemon}. */
public class DaemonClient { public class DaemonClient {
@ -95,7 +95,7 @@ public OutputStream getOutputStream() {
void execute(final Socket sock) throws IOException, void execute(final Socket sock) throws IOException,
ServiceNotEnabledException, ServiceNotAuthorizedException { ServiceNotEnabledException, ServiceNotAuthorizedException {
rawIn = new BufferedInputStream(sock.getInputStream()); rawIn = new BufferedInputStream(sock.getInputStream());
rawOut = new SafeBufferedOutputStream(sock.getOutputStream()); rawOut = new BufferedOutputStream(sock.getOutputStream());
if (0 < daemon.getTimeout()) if (0 < daemon.getTimeout())
sock.setSoTimeout(daemon.getTimeout() * 1000); sock.setSoTimeout(daemon.getTimeout() * 1000);

View File

@ -46,6 +46,7 @@
package org.eclipse.jgit.transport; package org.eclipse.jgit.transport;
import java.io.BufferedInputStream; import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
@ -62,7 +63,6 @@
import org.eclipse.jgit.errors.TransportException; import org.eclipse.jgit.errors.TransportException;
import org.eclipse.jgit.internal.JGitText; import org.eclipse.jgit.internal.JGitText;
import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.util.io.SafeBufferedOutputStream;
/** /**
* Transport through a git-daemon waiting for anonymous TCP connections. * Transport through a git-daemon waiting for anonymous TCP connections.
@ -182,7 +182,7 @@ class TcpFetchConnection extends BasePackFetchConnection {
OutputStream sOut = sock.getOutputStream(); OutputStream sOut = sock.getOutputStream();
sIn = new BufferedInputStream(sIn); sIn = new BufferedInputStream(sIn);
sOut = new SafeBufferedOutputStream(sOut); sOut = new BufferedOutputStream(sOut);
init(sIn, sOut); init(sIn, sOut);
service("git-upload-pack", pckOut); //$NON-NLS-1$ service("git-upload-pack", pckOut); //$NON-NLS-1$
@ -221,7 +221,7 @@ class TcpPushConnection extends BasePackPushConnection {
OutputStream sOut = sock.getOutputStream(); OutputStream sOut = sock.getOutputStream();
sIn = new BufferedInputStream(sIn); sIn = new BufferedInputStream(sIn);
sOut = new SafeBufferedOutputStream(sOut); sOut = new BufferedOutputStream(sOut);
init(sIn, sOut); init(sIn, sOut);
service("git-receive-pack", pckOut); //$NON-NLS-1$ service("git-receive-pack", pckOut); //$NON-NLS-1$

View File

@ -48,6 +48,7 @@
package org.eclipse.jgit.transport; package org.eclipse.jgit.transport;
import java.io.BufferedInputStream; import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
@ -67,7 +68,6 @@
import org.eclipse.jgit.transport.resolver.UploadPackFactory; import org.eclipse.jgit.transport.resolver.UploadPackFactory;
import org.eclipse.jgit.util.FS; import org.eclipse.jgit.util.FS;
import org.eclipse.jgit.util.io.MessageWriter; import org.eclipse.jgit.util.io.MessageWriter;
import org.eclipse.jgit.util.io.SafeBufferedOutputStream;
import org.eclipse.jgit.util.io.StreamCopyThread; import org.eclipse.jgit.util.io.StreamCopyThread;
/** /**
@ -258,7 +258,7 @@ class ForkLocalFetchConnection extends BasePackFetchConnection {
OutputStream upOut = uploadPack.getOutputStream(); OutputStream upOut = uploadPack.getOutputStream();
upIn = new BufferedInputStream(upIn); upIn = new BufferedInputStream(upIn);
upOut = new SafeBufferedOutputStream(upOut); upOut = new BufferedOutputStream(upOut);
init(upIn, upOut); init(upIn, upOut);
readAdvertisedRefs(); readAdvertisedRefs();
@ -311,7 +311,7 @@ class ForkLocalPushConnection extends BasePackPushConnection {
OutputStream rpOut = receivePack.getOutputStream(); OutputStream rpOut = receivePack.getOutputStream();
rpIn = new BufferedInputStream(rpIn); rpIn = new BufferedInputStream(rpIn);
rpOut = new SafeBufferedOutputStream(rpOut); rpOut = new BufferedOutputStream(rpOut);
init(rpIn, rpOut); init(rpIn, rpOut);
readAdvertisedRefs(); readAdvertisedRefs();

View File

@ -45,6 +45,7 @@
import static org.eclipse.jgit.transport.WalkRemoteObjectDatabase.ROOT_DIR; import static org.eclipse.jgit.transport.WalkRemoteObjectDatabase.ROOT_DIR;
import java.io.BufferedOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStream; import java.io.OutputStream;
import java.util.ArrayList; import java.util.ArrayList;
@ -69,7 +70,6 @@
import org.eclipse.jgit.lib.RefWriter; import org.eclipse.jgit.lib.RefWriter;
import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.transport.RemoteRefUpdate.Status; import org.eclipse.jgit.transport.RemoteRefUpdate.Status;
import org.eclipse.jgit.util.io.SafeBufferedOutputStream;
/** /**
* Generic push support for dumb transport protocols. * Generic push support for dumb transport protocols.
@ -262,21 +262,15 @@ private void sendpack(final List<RemoteRefUpdate> updates,
// Write the pack file, then the index, as readers look the // Write the pack file, then the index, as readers look the
// other direction (index, then pack file). // other direction (index, then pack file).
// //
final String wt = "Put " + base.substring(0, 12); //$NON-NLS-1$ String wt = "Put " + base.substring(0, 12); //$NON-NLS-1$
OutputStream os = dest.writeFile(pathPack, monitor, wt + "..pack"); //$NON-NLS-1$ try (OutputStream os = new BufferedOutputStream(
try { dest.writeFile(pathPack, monitor, wt + "..pack"))) { //$NON-NLS-1$
os = new SafeBufferedOutputStream(os);
writer.writePack(monitor, monitor, os); writer.writePack(monitor, monitor, os);
} finally {
os.close();
} }
os = dest.writeFile(pathIdx, monitor, wt + "..idx"); //$NON-NLS-1$ try (OutputStream os = new BufferedOutputStream(
try { dest.writeFile(pathIdx, monitor, wt + "..idx"))) { //$NON-NLS-1$
os = new SafeBufferedOutputStream(os);
writer.writeIndex(os); writer.writeIndex(os);
} finally {
os.close();
} }
// Record the pack at the start of the pack info list. This // Record the pack at the start of the pack info list. This

View File

@ -56,7 +56,6 @@
import org.eclipse.jgit.internal.JGitText; import org.eclipse.jgit.internal.JGitText;
import org.eclipse.jgit.lib.NullProgressMonitor; import org.eclipse.jgit.lib.NullProgressMonitor;
import org.eclipse.jgit.lib.ProgressMonitor; import org.eclipse.jgit.lib.ProgressMonitor;
import org.eclipse.jgit.util.io.SafeBufferedOutputStream;
/** /**
* A fully buffered output stream. * A fully buffered output stream.
@ -360,7 +359,7 @@ private void switchToOverflow() throws IOException {
overflow.write(b.buffer, 0, b.count); overflow.write(b.buffer, 0, b.count);
blocks = null; blocks = null;
overflow = new SafeBufferedOutputStream(overflow, Block.SZ); overflow = new BufferedOutputStream(overflow, Block.SZ);
overflow.write(last.buffer, 0, last.count); overflow.write(last.buffer, 0, last.count);
} }

View File

@ -43,20 +43,13 @@
package org.eclipse.jgit.util.io; package org.eclipse.jgit.util.io;
import java.io.BufferedOutputStream; import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.OutputStream; import java.io.OutputStream;
/** /**
* A BufferedOutputStream that throws an error if the final flush fails on * @deprecated use BufferedOutputStream in Java 8 and later.
* close.
* <p>
* Java's BufferedOutputStream swallows errors that occur when the output stream
* tries to write the final bytes to the output during close. This may result in
* corrupted files without notice.
* </p>
*/ */
@Deprecated
public class SafeBufferedOutputStream extends BufferedOutputStream { public class SafeBufferedOutputStream extends BufferedOutputStream {
/** /**
* @see BufferedOutputStream#BufferedOutputStream(OutputStream) * @see BufferedOutputStream#BufferedOutputStream(OutputStream)
* @param out * @param out
@ -76,13 +69,4 @@ public SafeBufferedOutputStream(OutputStream out) {
public SafeBufferedOutputStream(OutputStream out, int size) { public SafeBufferedOutputStream(OutputStream out, int size) {
super(out, size); super(out, size);
} }
@Override
public void close() throws IOException {
try {
flush();
} finally {
super.close();
}
}
} }