This reverts commit 88fe2836ed
.
Auto CRLF isn't special enough to be screwing around with the buffers
used for raw byte processing of the ObjectInserter API. If it needs a
buffer to process a file that is bigger than the buffer allocated by
an ObjectInserter, it needs to do its own buffer management.
Change-Id: Ida4aaa80d0f9f78035f3d2a9ebdde904c980f89a
tags/v2.0.0.201206130900-r
} | } | ||||
@Test | @Test | ||||
public void testAddExistingSingleSmallFileWithNewLine() throws IOException, | |||||
public void testAddExistingSingleFileWithNewLine() throws IOException, | |||||
NoFilepatternException { | NoFilepatternException { | ||||
File file = new File(db.getWorkTree(), "a.txt"); | File file = new File(db.getWorkTree(), "a.txt"); | ||||
FileUtils.createNewFile(file); | FileUtils.createNewFile(file); | ||||
indexState(CONTENT)); | indexState(CONTENT)); | ||||
} | } | ||||
@Test | |||||
public void testAddExistingSingleMediumSizeFileWithNewLine() | |||||
throws IOException, NoFilepatternException { | |||||
File file = new File(db.getWorkTree(), "a.txt"); | |||||
FileUtils.createNewFile(file); | |||||
StringBuilder data = new StringBuilder(); | |||||
for (int i = 0; i < 1000; ++i) { | |||||
data.append("row1\r\nrow2"); | |||||
} | |||||
String crData = data.toString(); | |||||
PrintWriter writer = new PrintWriter(file); | |||||
writer.print(crData); | |||||
writer.close(); | |||||
String lfData = data.toString().replaceAll("\r", ""); | |||||
Git git = new Git(db); | |||||
db.getConfig().setString("core", null, "autocrlf", "false"); | |||||
git.add().addFilepattern("a.txt").call(); | |||||
assertEquals("[a.txt, mode:100644, content:" + data + "]", | |||||
indexState(CONTENT)); | |||||
db.getConfig().setString("core", null, "autocrlf", "true"); | |||||
git.add().addFilepattern("a.txt").call(); | |||||
assertEquals("[a.txt, mode:100644, content:" + lfData + "]", | |||||
indexState(CONTENT)); | |||||
db.getConfig().setString("core", null, "autocrlf", "input"); | |||||
git.add().addFilepattern("a.txt").call(); | |||||
assertEquals("[a.txt, mode:100644, content:" + lfData + "]", | |||||
indexState(CONTENT)); | |||||
} | |||||
@Test | @Test | ||||
public void testAddExistingSingleBinaryFile() throws IOException, | public void testAddExistingSingleBinaryFile() throws IOException, | ||||
NoFilepatternException { | NoFilepatternException { |
return tempBuffer; | return tempBuffer; | ||||
} | } | ||||
static private final int tempBufSize; | |||||
static { | |||||
String s = System.getProperty("jgit.tempbufmaxsize"); | |||||
if (s != null) | |||||
tempBufSize = Integer.parseInt(s); | |||||
else | |||||
tempBufSize = 1000000; | |||||
} | |||||
/** | |||||
* @param hintSize | |||||
* @return a temporary byte array for use by the caller | |||||
*/ | |||||
protected byte[] buffer(long hintSize) { | |||||
if (hintSize >= tempBufSize) | |||||
tempBuffer = new byte[0]; | |||||
else if (tempBuffer == null) | |||||
tempBuffer = new byte[(int) hintSize]; | |||||
else if (tempBuffer.length < hintSize) | |||||
tempBuffer = new byte[(int) hintSize]; | |||||
return tempBuffer; | |||||
} | |||||
/** @return digest to help compute an ObjectId */ | /** @return digest to help compute an ObjectId */ | ||||
protected MessageDigest digest() { | protected MessageDigest digest() { | ||||
digest.reset(); | digest.reset(); | ||||
md.update((byte) ' '); | md.update((byte) ' '); | ||||
md.update(Constants.encodeASCII(length)); | md.update(Constants.encodeASCII(length)); | ||||
md.update((byte) 0); | md.update((byte) 0); | ||||
byte[] buf = buffer(length); | |||||
byte[] buf = buffer(); | |||||
while (length > 0) { | while (length > 0) { | ||||
int n = in.read(buf, 0, (int) Math.min(length, buf.length)); | int n = in.read(buf, 0, (int) Math.min(length, buf.length)); | ||||
if (n < 0) | if (n < 0) |
@Override | @Override | ||||
public ObjectId insert(int type, long len, InputStream in) | public ObjectId insert(int type, long len, InputStream in) | ||||
throws IOException { | throws IOException { | ||||
byte[] buf = buffer(len); | |||||
byte[] buf = buffer(); | |||||
if (len <= buf.length) { | if (len <= buf.length) { | ||||
IO.readFully(in, buf, 0, (int) len); | IO.readFully(in, buf, 0, (int) len); | ||||
return insert(type, buf, 0, (int) len); | return insert(type, buf, 0, (int) len); |
@Override | @Override | ||||
public ObjectId insert(final int type, long len, final InputStream is) | public ObjectId insert(final int type, long len, final InputStream is) | ||||
throws IOException { | throws IOException { | ||||
byte[] buf = buffer(len); | |||||
if (len <= buf.length) { | |||||
if (len <= buffer().length) { | |||||
byte[] buf = buffer(); | |||||
int actLen = IO.readFully(is, buf, 0); | int actLen = IO.readFully(is, buf, 0); | ||||
return insert(type, buf, 0, actLen); | return insert(type, buf, 0, actLen); | ||||