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;
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);
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;
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)
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;
* 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;
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;
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 = "";
}
if (eof)
return -1;
available--;
- return in.read();
+ return rawIn.read();
}
@Override
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;
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;
return;
case CH_PROGRESS:
progress(readString(available));
-
continue;
case CH_ERROR:
eof = true;
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);
}
}