Browse Source

Fix some tests.

Jelmer Vernooij 2 years ago
parent
commit
dbd3854a92
4 changed files with 20 additions and 10 deletions
  1. 6 3
      dulwich/client.py
  2. 5 1
      dulwich/object_store.py
  3. 5 4
      dulwich/server.py
  4. 4 2
      dulwich/tests/test_server.py

+ 6 - 3
dulwich/client.py

@@ -51,6 +51,7 @@ from typing import (
     Callable,
     Dict,
     List,
+    Iterable,
     Iterator,
     Optional,
     Set,
@@ -496,7 +497,7 @@ class _v1ReceivePackHeader:
         yield None
 
 
-def _read_side_band64k_data(pkt_seq, channel_callbacks):
+def _read_side_band64k_data(pkt_seq: Iterable[bytes], channel_callbacks: Dict[int, Callable[[bytes], None]]) -> None:
     """Read per-channel data.
 
     This requires the side-band-64k capability.
@@ -589,9 +590,9 @@ def _handle_upload_pack_head(
 
 def _handle_upload_pack_tail(
     proto,
-    capabilities,
+    capabilities: Set[bytes],
     graph_walker,
-    pack_data,
+    pack_data: Callable[[bytes], None],
     progress=None,
     rbufsize=_RBUFSIZE,
 ):
@@ -613,6 +614,8 @@ def _handle_upload_pack_tail(
         parts = pkt.rstrip(b"\n").split(b" ")
         if parts[0] == b"ACK":
             graph_walker.ack(parts[1])
+        if parts[0] == b"NAK":
+            graph_walker.nak()
         if len(parts) < 3 or parts[2] not in (
             b"ready",
             b"continue",

+ 5 - 1
dulwich/object_store.py

@@ -254,7 +254,8 @@ class BaseObjectStore:
         """
         # Note that the pack-specific implementation below is more efficient,
         # as it reuses deltas
-        missing_objects = MissingObjectFinder(self, have, want, shallow, progress)
+        missing_objects = MissingObjectFinder(
+            self, haves=have, wants=want, shallow=shallow, progress=progress)
         object_ids = list(missing_objects)
         return pack_objects_to_data(
             [(self[oid], path) for oid, path in object_ids], ofs_delta=ofs_delta,
@@ -1353,6 +1354,9 @@ class ObjectStoreGraphWalker:
             shallow = set()
         self.shallow = shallow
 
+    def nak(self):
+        """Nothing incommon was found."""
+        pass
     def ack(self, sha):
         """Ack that a revision and its ancestors are present in the source."""
         if len(sha) != 40:

+ 5 - 4
dulwich/server.py

@@ -665,6 +665,9 @@ class _ProtocolGraphWalker:
             value = str(value).encode("ascii")
         self.proto.unread_pkt_line(command + b" " + value)
 
+    def nak(self):
+        pass
+
     def ack(self, have_ref):
         if len(have_ref) != 40:
             raise ValueError("invalid sha %r" % have_ref)
@@ -875,7 +878,7 @@ class MultiAckDetailedGraphWalkerImpl:
         self._common.append(have_ref)
         self.walker.send_ack(have_ref, b"common")
 
-    def next(self):
+    def __next__(self):
         while True:
             command, sha = self.walker.read_proto_line(_GRAPH_WALKER_COMMANDS)
             if command is None:
@@ -890,7 +893,7 @@ class MultiAckDetailedGraphWalkerImpl:
                     # specified and that's handled in handle_done which
                     # may or may not call post_nodone_check depending on
                     # that).
-                    return None
+                    raise StopIteration
             elif command == COMMAND_DONE:
                 # Let the walker know that we got a done.
                 self.walker.notify_done()
@@ -902,8 +905,6 @@ class MultiAckDetailedGraphWalkerImpl:
         # don't nak unless no common commits were found, even if not
         # everything is satisfied
 
-    __next__ = next
-
     def handle_done(self, done_required, done_received):
         if done_required and not done_received:
             # we are not done, especially when done is required; skip

+ 4 - 2
dulwich/tests/test_server.py

@@ -198,7 +198,8 @@ class UploadPackHandlerTestCase(TestCase):
         }
         # repo needs to peel this object
         self._repo.object_store.add_object(make_commit(id=FOUR))
-        self._repo.refs._update(refs)
+        for name, sha in refs.items():
+            self._repo.refs[name] = sha
         peeled = {
             b"refs/tags/tag1": b"1234" * 10,
             b"refs/tags/tag2": b"5678" * 10,
@@ -224,7 +225,8 @@ class UploadPackHandlerTestCase(TestCase):
         tree = Tree()
         self._repo.object_store.add_object(tree)
         self._repo.object_store.add_object(make_commit(id=ONE, tree=tree))
-        self._repo.refs._update(refs)
+        for name, sha in refs.items():
+            self._repo.refs[name] = sha
         self._handler.proto.set_output(
             [
                 b"want " + ONE + b" side-band-64k thin-pack ofs-delta",