diff options
Diffstat (limited to 'org.eclipse.jgit')
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/patch/PatchApplier.java | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/patch/PatchApplier.java b/org.eclipse.jgit/src/org/eclipse/jgit/patch/PatchApplier.java index 1edd85421a..a327095c81 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/patch/PatchApplier.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/patch/PatchApplier.java @@ -88,6 +88,7 @@ import org.eclipse.jgit.util.TemporaryBuffer; import org.eclipse.jgit.util.TemporaryBuffer.LocalFile; import org.eclipse.jgit.util.io.BinaryDeltaInputStream; import org.eclipse.jgit.util.io.BinaryHunkInputStream; +import org.eclipse.jgit.util.io.CountingOutputStream; import org.eclipse.jgit.util.io.EolStreamTypeUtil; import org.eclipse.jgit.util.sha1.SHA1; @@ -1013,7 +1014,10 @@ public class PatchApplier { // We could check if old == new, but the short-circuiting complicates // logic for inCore patching, so just write the new thing regardless. TemporaryBuffer buffer = new TemporaryBuffer.LocalFile(null); - try (OutputStream out = buffer) { + // TemporaryBuffer::length reports incorrect length until the buffer + // is closed. To use it as input for ContentStreamLoader below, we + // need a wrapper with a reliable in-progress length. + try (CountingOutputStream out = new CountingOutputStream(buffer)) { for (Iterator<ByteBuffer> l = newLines.iterator(); l.hasNext();) { ByteBuffer line = l.next(); if (line == null) { @@ -1026,7 +1030,7 @@ public class PatchApplier { } } return new ContentStreamLoader(buffer::openInputStream, - buffer.length()); + out.getCount()); } } |