Switch FileHeader.extractFileLines to TemporaryBuffer.Heap

File contents are processed into a single byte[] for character
conversion. The data must fit entirely in memory, so avoid any
file IO.

Change-Id: I3fe8be2e5f37d5ae953596dda1ed3fe6d4f6aebc
This commit is contained in:
Shawn Pearce 2014-11-25 09:58:45 -08:00
parent 67b8bcc1c4
commit 4206ea43b8
2 changed files with 5 additions and 14 deletions

View File

@ -267,7 +267,7 @@ private String[] extractFileLines(final Charset[] csGuess) {
final TemporaryBuffer[] tmp = new TemporaryBuffer[getParentCount() + 1];
try {
for (int i = 0; i < tmp.length; i++)
tmp[i] = new TemporaryBuffer.LocalFile();
tmp[i] = new TemporaryBuffer.Heap(Integer.MAX_VALUE);
for (final HunkHeader h : getHunks())
h.extractFileLines(tmp);
@ -281,11 +281,6 @@ private String[] extractFileLines(final Charset[] csGuess) {
return r;
} catch (IOException ioe) {
throw new RuntimeException(JGitText.get().cannotConvertScriptToText, ioe);
} finally {
for (final TemporaryBuffer b : tmp) {
if (b != null)
b.destroy();
}
}
}

View File

@ -139,14 +139,10 @@ public void parse(final InputStream is) throws IOException {
}
private static byte[] readFully(final InputStream is) throws IOException {
final TemporaryBuffer b = new TemporaryBuffer.LocalFile();
try {
b.copy(is);
b.close();
return b.toByteArray();
} finally {
b.destroy();
}
TemporaryBuffer b = new TemporaryBuffer.Heap(Integer.MAX_VALUE);
b.copy(is);
b.close();
return b.toByteArray();
}
/**