Browse Source

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
stable-3.4
Shawn Pearce 10 years ago
parent
commit
4206ea43b8
  1. 7
      org.eclipse.jgit/src/org/eclipse/jgit/patch/FileHeader.java
  2. 12
      org.eclipse.jgit/src/org/eclipse/jgit/patch/Patch.java

7
org.eclipse.jgit/src/org/eclipse/jgit/patch/FileHeader.java

@ -267,7 +267,7 @@ public class FileHeader extends DiffEntry {
final TemporaryBuffer[] tmp = new TemporaryBuffer[getParentCount() + 1]; final TemporaryBuffer[] tmp = new TemporaryBuffer[getParentCount() + 1];
try { try {
for (int i = 0; i < tmp.length; i++) 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()) for (final HunkHeader h : getHunks())
h.extractFileLines(tmp); h.extractFileLines(tmp);
@ -281,11 +281,6 @@ public class FileHeader extends DiffEntry {
return r; return r;
} catch (IOException ioe) { } catch (IOException ioe) {
throw new RuntimeException(JGitText.get().cannotConvertScriptToText, ioe); throw new RuntimeException(JGitText.get().cannotConvertScriptToText, ioe);
} finally {
for (final TemporaryBuffer b : tmp) {
if (b != null)
b.destroy();
}
} }
} }

12
org.eclipse.jgit/src/org/eclipse/jgit/patch/Patch.java

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

Loading…
Cancel
Save