Browse Source

protocol: Add pkt_seq utility function

Jelmer Vernooij 4 months ago
parent
commit
d96e0e32fe
2 changed files with 22 additions and 0 deletions
  1. 9 0
      dulwich/protocol.py
  2. 13 0
      tests/test_protocol.py

+ 9 - 0
dulwich/protocol.py

@@ -185,6 +185,15 @@ def pkt_line(data):
     return ("%04x" % (len(data) + 4)).encode("ascii") + data
 
 
+def pkt_seq(*seq):
+    """Wrap a sequence of data in pkt-lines.
+
+    Args:
+      seq: An iterable of strings to wrap.
+    """
+    return b"".join([pkt_line(s) for s in seq]) + pkt_line(None)
+
+
 class Protocol:
     """Class for interacting with a remote git process over the wire.
 

+ 13 - 0
tests/test_protocol.py

@@ -35,11 +35,24 @@ from dulwich.protocol import (
     ack_type,
     extract_capabilities,
     extract_want_line_capabilities,
+    pkt_line,
+    pkt_seq,
 )
 
 from . import TestCase
 
 
+class PktLinetests:
+
+    def test_pkt_line(self):
+        self.assertEqual(b"0007bla", pkt_line(b"bla"))
+        self.assertEqual(b"0000", pkt_line(None))
+
+    def test_pkt_seq(self):
+        self.assertEqual(b"0007bla0003foo0000", pkt_seq([b"bla", b"foo"]))
+        self.assertEqual(b"0000", pkt_seq([]))
+
+
 class BaseProtocolTests:
     def test_write_pkt_line_none(self):
         self.proto.write_pkt_line(None)