diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackFetchConnection.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackFetchConnection.java index 84e55b61e..dc9c7948b 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackFetchConnection.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackFetchConnection.java @@ -46,6 +46,7 @@ package org.eclipse.jgit.transport; import java.io.IOException; +import java.io.InputStream; import java.util.Collection; import java.util.Collections; import java.util.Date; @@ -609,7 +610,11 @@ abstract class BasePackFetchConnection extends BasePackConnection implements private void receivePack(final ProgressMonitor monitor) throws IOException { final IndexPack ip; - ip = IndexPack.create(local, sideband ? pckIn.sideband(monitor) : in); + InputStream input = in; + if (sideband) + input = new SideBandInputStream(input, monitor); + + ip = IndexPack.create(local, input); ip.setFixThin(thinPack); ip.setObjectChecking(transport.isCheckFetchedObjects()); ip.index(monitor); diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/PacketLineIn.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/PacketLineIn.java index db6abef1a..1022eb2ee 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/PacketLineIn.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/PacketLineIn.java @@ -51,7 +51,6 @@ import java.io.InputStream; import org.eclipse.jgit.errors.PackProtocolException; import org.eclipse.jgit.lib.Constants; import org.eclipse.jgit.lib.MutableObjectId; -import org.eclipse.jgit.lib.ProgressMonitor; import org.eclipse.jgit.util.IO; import org.eclipse.jgit.util.RawParseUtils; @@ -80,10 +79,6 @@ class PacketLineIn { lenbuffer = new byte[4]; } - InputStream sideband(final ProgressMonitor pm) { - return new SideBandInputStream(this, in, pm); - } - AckNackResult readACK(final MutableObjectId returnedId) throws IOException { final String line = readString(); if (line.length() == 0) diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/SideBandInputStream.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/SideBandInputStream.java index 40a6808d2..7b5422644 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/SideBandInputStream.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/SideBandInputStream.java @@ -44,6 +44,8 @@ package org.eclipse.jgit.transport; +import static org.eclipse.jgit.transport.SideBandOutputStream.HDR_SIZE; + import java.io.IOException; import java.io.InputStream; import java.util.regex.Matcher; @@ -69,7 +71,7 @@ import org.eclipse.jgit.util.RawParseUtils; * Channel 3 results in an exception being thrown, as the remote side has issued * an unrecoverable error. * - * @see PacketLineIn#sideband(ProgressMonitor) + * @see SideBandOutputStream */ class SideBandInputStream extends InputStream { static final int CH_DATA = 1; @@ -84,9 +86,9 @@ class SideBandInputStream extends InputStream { private static Pattern P_BOUNDED = Pattern.compile( "^([\\w ]+):.*\\((\\d+)/(\\d+)\\).*", Pattern.DOTALL); - private final PacketLineIn pckIn; + private final InputStream rawIn; - private final InputStream in; + private final PacketLineIn pckIn; private final ProgressMonitor monitor; @@ -102,11 +104,10 @@ class SideBandInputStream extends InputStream { private int available; - SideBandInputStream(final PacketLineIn aPckIn, final InputStream aIn, - final ProgressMonitor aProgress) { - pckIn = aPckIn; - in = aIn; - monitor = aProgress; + SideBandInputStream(final InputStream in, final ProgressMonitor progress) { + rawIn = in; + pckIn = new PacketLineIn(rawIn); + monitor = progress; currentTask = ""; } @@ -116,7 +117,7 @@ class SideBandInputStream extends InputStream { if (eof) return -1; available--; - return in.read(); + return rawIn.read(); } @Override @@ -126,7 +127,7 @@ class SideBandInputStream extends InputStream { needDataPacket(); if (eof) break; - final int n = in.read(b, off, Math.min(len, available)); + final int n = rawIn.read(b, off, Math.min(len, available)); if (n < 0) break; r += n; @@ -147,8 +148,8 @@ class SideBandInputStream extends InputStream { return; } - channel = in.read(); - available -= 5; // length header plus channel indicator + channel = rawIn.read(); + available -= HDR_SIZE; // length header plus channel indicator if (available == 0) continue; @@ -157,7 +158,6 @@ class SideBandInputStream extends InputStream { return; case CH_PROGRESS: progress(readString(available)); - continue; case CH_ERROR: eof = true; @@ -229,7 +229,7 @@ class SideBandInputStream extends InputStream { private String readString(final int len) throws IOException { final byte[] raw = new byte[len]; - IO.readFully(in, raw, 0, len); + IO.readFully(rawIn, raw, 0, len); return RawParseUtils.decode(Constants.CHARSET, raw, 0, len); } }