Merge "Improve native Git transport when following repository"

This commit is contained in:
Chris Aniszczyk 2011-03-15 12:03:38 -04:00 committed by Code Review
commit 8aef29c114
2 changed files with 11 additions and 1 deletions

View File

@ -434,12 +434,13 @@ private void negotiate(final ProgressMonitor monitor) throws IOException,
int havesSinceLastContinue = 0;
boolean receivedContinue = false;
boolean receivedAck = false;
boolean negotiate = true;
if (statelessRPC)
state.writeTo(out, null);
negotiateBegin();
SEND_HAVES: for (;;) {
SEND_HAVES: while (negotiate) {
final RevCommit c = walk.next();
if (c == null)
break SEND_HAVES;
@ -505,6 +506,8 @@ private void negotiate(final ProgressMonitor monitor) throws IOException,
receivedAck = true;
receivedContinue = true;
havesSinceLastContinue = 0;
if (anr == AckNackResult.ACK_READY)
negotiate = false;
break;
}

View File

@ -591,9 +591,11 @@ private ObjectId processHaveLines(List<ObjectId> peerHas, ObjectId last)
// create a pack at this point, let the client know so it stops
// telling us about its history.
//
boolean didOkToGiveUp = false;
for (int i = peerHas.size() - 1; i >= 0; i--) {
ObjectId id = peerHas.get(i);
if (walk.lookupOrNull(id) == null) {
didOkToGiveUp = true;
if (okToGiveUp()) {
switch (multiAck) {
case OFF:
@ -610,6 +612,11 @@ private ObjectId processHaveLines(List<ObjectId> peerHas, ObjectId last)
}
}
if (multiAck == MultiAck.DETAILED && !didOkToGiveUp && okToGiveUp()) {
ObjectId id = peerHas.get(peerHas.size() - 1);
pckOut.writeString("ACK " + id.name() + " ready\n");
}
peerHas.clear();
return last;
}