From e34865b88b02bb5937f8ac815fe065ebe8e9d47b Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Thu, 3 Sep 2009 12:47:01 +0200 Subject: [PATCH] Prepare RawText for diff-index and diff-files Bug: 291083 Eclipse-CQ: 3559 Change-Id: Ia02f346a96b5f1e24f8bc9676bd428b968a41222 Signed-off-by: Johannes Schindelin Signed-off-by: Shawn O. Pearce --- .../src/org/eclipse/jgit/diff/RawText.java | 28 ++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/diff/RawText.java b/org.eclipse.jgit/src/org/eclipse/jgit/diff/RawText.java index 61a3ef41c..0bbbb1991 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/diff/RawText.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/diff/RawText.java @@ -44,6 +44,8 @@ package org.eclipse.jgit.diff; +import java.io.File; +import java.io.FileInputStream; import java.io.IOException; import java.io.OutputStream; @@ -87,6 +89,18 @@ public RawText(final byte[] input) { hashes = computeHashes(); } + /** + * Create a new sequence from a file. + *

+ * The entire file contents are used. + * + * @param file + * the text file. + */ + public RawText(File file) throws IOException { + this(readFile(file)); + } + public int size() { // The line map is always 2 entries larger than the number of lines in // the file. Index 0 is padded out/unused. The last index is the total @@ -187,4 +201,16 @@ protected int hashLine(final byte[] raw, int ptr, final int end) { hash = (hash << 5) ^ (raw[ptr] & 0xff); return hash; } -} \ No newline at end of file + + private static byte[] readFile(File file) throws IOException { + byte[] result = new byte[(int)file.length()]; + FileInputStream in = new FileInputStream(file); + for (int off = 0; off < result.length; ) { + int read = in.read(result, off, result.length - off); + if (read < 0) + throw new IOException("Early EOF"); + off += read; + } + return result; + } +}