DfsInserter: Refactor writePackIndex to use try-with-resource

Refactor to allow the temporary buffer to be opened in try-with-resource.

Change-Id: Id913e6c3ed3913fd5d79d66238b779e0c225b47d
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
This commit is contained in:
David Pursehouse 2018-03-13 17:51:10 +09:00
parent 6eb4cd276c
commit bac3efbe67
1 changed files with 18 additions and 15 deletions

View File

@ -68,6 +68,7 @@
import java.util.zip.Inflater;
import java.util.zip.InflaterInputStream;
import org.eclipse.jgit.annotations.Nullable;
import org.eclipse.jgit.errors.CorruptObjectException;
import org.eclipse.jgit.errors.IncorrectObjectTypeException;
import org.eclipse.jgit.errors.LargeObjectException;
@ -309,6 +310,15 @@ private void sortObjectsById() {
Collections.sort(objectList);
}
@Nullable
private TemporaryBuffer.Heap maybeGetTemporaryBuffer(
List<PackedObjectInfo> list) {
if (list.size() <= 58000) {
return new TemporaryBuffer.Heap(2 << 20);
}
return null;
}
PackIndex writePackIndex(DfsPackDescription pack, byte[] packHash,
List<PackedObjectInfo> list) throws IOException {
pack.setIndexVersion(INDEX_VERSION);
@ -317,27 +327,20 @@ PackIndex writePackIndex(DfsPackDescription pack, byte[] packHash,
// If there are less than 58,000 objects, the entire index fits in under
// 2 MiB. Callers will probably need the index immediately, so buffer
// the index in process and load from the buffer.
TemporaryBuffer.Heap buf = null;
PackIndex packIndex = null;
if (list.size() <= 58000) {
buf = new TemporaryBuffer.Heap(2 << 20);
index(buf, packHash, list);
packIndex = PackIndex.read(buf.openInputStream());
}
try (DfsOutputStream os = db.writeFile(pack, INDEX)) {
CountingOutputStream cnt = new CountingOutputStream(os);
if (buf != null)
try (TemporaryBuffer.Heap buf = maybeGetTemporaryBuffer(list);
DfsOutputStream os = db.writeFile(pack, INDEX);
CountingOutputStream cnt = new CountingOutputStream(os)) {
if (buf != null) {
index(buf, packHash, list);
packIndex = PackIndex.read(buf.openInputStream());
buf.writeTo(cnt, null);
else
} else {
index(cnt, packHash, list);
}
pack.addFileExt(INDEX);
pack.setBlockSize(INDEX, os.blockSize());
pack.setFileSize(INDEX, cnt.getCount());
} finally {
if (buf != null) {
buf.close();
}
}
return packIndex;
}