|
@@ -203,6 +203,10 @@ class Handler(object):
|
|
self.proto = proto
|
|
self.proto = proto
|
|
self.http_req = http_req
|
|
self.http_req = http_req
|
|
self._client_capabilities = None
|
|
self._client_capabilities = None
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ self._done_required = True
|
|
|
|
+ self._done_received = False
|
|
|
|
|
|
@classmethod
|
|
@classmethod
|
|
def capability_line(cls):
|
|
def capability_line(cls):
|
|
@@ -329,6 +333,11 @@ class UploadPackHandler(Handler):
|
|
|
|
|
|
self._processing_have_lines = False
|
|
self._processing_have_lines = False
|
|
|
|
|
|
|
|
+ if self._done_required and not self._done_received:
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ return
|
|
|
|
+
|
|
self.progress(b"dul-daemon says what\n")
|
|
self.progress(b"dul-daemon says what\n")
|
|
self.progress(("counting objects: %d, done.\n" % len(objects_iter)).encode('ascii'))
|
|
self.progress(("counting objects: %d, done.\n" % len(objects_iter)).encode('ascii'))
|
|
write_pack_objects(ProtocolFile(None, write), objects_iter)
|
|
write_pack_objects(ProtocolFile(None, write), objects_iter)
|
|
@@ -707,17 +716,12 @@ class MultiAckDetailedGraphWalkerImpl(object):
|
|
|
|
|
|
def __init__(self, walker):
|
|
def __init__(self, walker):
|
|
self.walker = walker
|
|
self.walker = walker
|
|
- self._found_base = False
|
|
|
|
self._common = []
|
|
self._common = []
|
|
|
|
|
|
def ack(self, have_ref):
|
|
def ack(self, have_ref):
|
|
|
|
+
|
|
self._common.append(have_ref)
|
|
self._common.append(have_ref)
|
|
- if not self._found_base:
|
|
+ self.walker.send_ack(have_ref, b'common')
|
|
- self.walker.send_ack(have_ref, b'common')
|
|
|
|
- if self.walker.all_wants_satisfied(self._common):
|
|
|
|
- self._found_base = True
|
|
|
|
- self.walker.send_ack(have_ref, b'ready')
|
|
|
|
-
|
|
|
|
|
|
|
|
def next(self):
|
|
def next(self):
|
|
while True:
|
|
while True:
|
|
@@ -731,21 +735,45 @@ class MultiAckDetailedGraphWalkerImpl(object):
|
|
|
|
|
|
|
|
|
|
return None
|
|
return None
|
|
- continue
|
|
|
|
elif command == COMMAND_DONE:
|
|
elif command == COMMAND_DONE:
|
|
-
|
|
+
|
|
-
|
|
+
|
|
- if self._common:
|
|
+
|
|
- self.walker.send_ack(self._common[-1])
|
|
+
|
|
- else:
|
|
+
|
|
- self.walker.send_nak()
|
|
+
|
|
- return None
|
|
+
|
|
|
|
+ try:
|
|
|
|
+ self.walker.handler._done_received = True
|
|
|
|
+ except:
|
|
|
|
+ pass
|
|
|
|
+ break
|
|
elif command == COMMAND_HAVE:
|
|
elif command == COMMAND_HAVE:
|
|
- if self._found_base:
|
|
+
|
|
-
|
|
+
|
|
-
|
|
|
|
- self.walker.send_ack(sha, b'ready')
|
|
|
|
return sha
|
|
return sha
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ if self.walker.all_wants_satisfied(self._common):
|
|
|
|
+ self.walker.send_ack(self._common[-1], b'ready')
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ try:
|
|
|
|
+
|
|
|
|
+ if (self.walker.handler._done_required and
|
|
|
|
+ not self.walker.handler._done_received):
|
|
|
|
+
|
|
|
|
+ return None
|
|
|
|
+ except:
|
|
|
|
+ pass
|
|
|
|
+
|
|
|
|
+ if self._common:
|
|
|
|
+ self.walker.send_ack(self._common[-1])
|
|
|
|
+ else:
|
|
|
|
+ self.walker.send_nak()
|
|
|
|
+ return None
|
|
|
|
|
|
__next__ = next
|
|
__next__ = next
|
|
|
|
|