Parcourir la source

Add filter capability advertisement for partial clone support

Jelmer Vernooij il y a 3 semaines
Parent
commit
4fde7374a1
4 fichiers modifiés avec 18 ajouts et 0 suppressions
  1. 1 0
      dulwich/protocol.py
  2. 2 0
      dulwich/server.py
  3. 10 0
      tests/test_protocol.py
  4. 5 0
      tests/test_server.py

+ 1 - 0
dulwich/protocol.py

@@ -201,6 +201,7 @@ KNOWN_UPLOAD_CAPABILITIES = set(
         CAPABILITY_ALLOW_TIP_SHA1_IN_WANT,
         CAPABILITY_ALLOW_REACHABLE_SHA1_IN_WANT,
         CAPABILITY_FETCH,
+        CAPABILITY_FILTER,
     ]
 )
 KNOWN_RECEIVE_CAPABILITIES = set(

+ 2 - 0
dulwich/server.py

@@ -104,6 +104,7 @@ from .protocol import (
     CAPABILITIES_REF,
     CAPABILITY_AGENT,
     CAPABILITY_DELETE_REFS,
+    CAPABILITY_FILTER,
     CAPABILITY_INCLUDE_TAG,
     CAPABILITY_MULTI_ACK,
     CAPABILITY_MULTI_ACK_DETAILED,
@@ -455,6 +456,7 @@ class UploadPackHandler(PackHandler):
             CAPABILITY_INCLUDE_TAG,
             CAPABILITY_SHALLOW,
             CAPABILITY_NO_DONE,
+            CAPABILITY_FILTER,
             capability_object_format(self.repo.object_format.name),
         ]
 

+ 10 - 0
tests/test_protocol.py

@@ -25,6 +25,8 @@ from io import BytesIO
 
 from dulwich.errors import HangupException
 from dulwich.protocol import (
+    CAPABILITY_FILTER,
+    KNOWN_UPLOAD_CAPABILITIES,
     MULTI_ACK,
     MULTI_ACK_DETAILED,
     SINGLE_ACK,
@@ -348,3 +350,11 @@ class PktLineParserTests(TestCase):
         parser.parse(b"0005z0006aba")
         self.assertEqual(pktlines, [b"z", b"ab"])
         self.assertEqual(b"a", parser.get_tail())
+
+
+class CapabilitiesTests(TestCase):
+    """Tests for protocol capabilities."""
+
+    def test_filter_capability_in_known_upload_capabilities(self) -> None:
+        """Test that CAPABILITY_FILTER is in KNOWN_UPLOAD_CAPABILITIES."""
+        self.assertIn(CAPABILITY_FILTER, KNOWN_UPLOAD_CAPABILITIES)

+ 5 - 0
tests/test_server.py

@@ -180,6 +180,11 @@ class UploadPackHandlerTestCase(TestCase):
         self._handler.progress(b"second message")
         self.assertRaises(IndexError, self._handler.proto.get_received_line, 2)
 
+    def test_filter_capability_advertised(self) -> None:
+        """Test that the filter capability is advertised by UploadPackHandler."""
+        caps = self._handler.capabilities()
+        self.assertIn(b"filter", caps)
+
     def test_get_tagged(self) -> None:
         refs = {
             b"refs/tags/tag1": ONE,