瀏覽代碼

Merge support for no-progress capability, some PEP8 fixes and removal of unused imports.

Jelmer Vernooij 15 年之前
父節點
當前提交
c41354db2a
共有 2 個文件被更改,包括 46 次插入12 次删除
  1. 11 8
      dulwich/server.py
  2. 35 4
      dulwich/tests/test_server.py

+ 11 - 8
dulwich/server.py

@@ -166,7 +166,7 @@ class Handler(object):
             if cap not in my_caps:
                 raise GitProtocolError('Client asked for capability %s that '
                                        'was not advertised.' % cap)
-        self._client_capabilities = caps
+        self._client_capabilities = set(caps)
 
     def has_capability(self, cap):
         if self._client_capabilities is None:
@@ -187,26 +187,29 @@ class UploadPackHandler(Handler):
 
     def capabilities(self):
         return ("multi_ack_detailed", "multi_ack", "side-band-64k", "thin-pack",
-                "ofs-delta")
+                "ofs-delta", "no-progress")
 
-    def handle(self):
+    def progress(self, message):
+        if self.has_capability("no-progress"):
+            return
+        self.proto.write_sideband(2, message)
 
-        progress = lambda x: self.proto.write_sideband(2, x)
+    def handle(self):
         write = lambda x: self.proto.write_sideband(1, x)
 
         graph_walker = ProtocolGraphWalker(self)
         objects_iter = self.backend.fetch_objects(
-          graph_walker.determine_wants, graph_walker, progress)
+          graph_walker.determine_wants, graph_walker, self.progress)
 
         # Do they want any objects?
         if len(objects_iter) == 0:
             return
 
-        progress("dul-daemon says what\n")
-        progress("counting objects: %d, done.\n" % len(objects_iter))
+        self.progress("dul-daemon says what\n")
+        self.progress("counting objects: %d, done.\n" % len(objects_iter))
         write_pack_data(ProtocolFile(None, write), objects_iter, 
                         len(objects_iter))
-        progress("how was that, then?\n")
+        self.progress("how was that, then?\n")
         # we are done
         self.proto.write("0000")
 

+ 35 - 4
dulwich/tests/test_server.py

@@ -35,10 +35,6 @@ from dulwich.server import (
     MultiAckDetailedGraphWalkerImpl,
     )
 
-from dulwich.protocol import (
-    SINGLE_ACK,
-    MULTI_ACK,
-    )
 
 ONE = '1' * 40
 TWO = '2' * 40
@@ -47,6 +43,7 @@ FOUR = '4' * 40
 FIVE = '5' * 40
 
 class TestProto(object):
+
     def __init__(self):
         self._output = []
         self._received = {0: [], 1: [], 2: [], 3: []}
@@ -77,6 +74,7 @@ class TestProto(object):
 
 
 class HandlerTestCase(TestCase):
+
     def setUp(self):
         self._handler = Handler(None, None, None)
         self._handler.capabilities = lambda: ('cap1', 'cap2', 'cap3')
@@ -108,7 +106,31 @@ class HandlerTestCase(TestCase):
         self.assertFalse(self._handler.has_capability('capxxx'))
 
 
+class UploadPackHandlerTestCase(TestCase):
+
+    def setUp(self):
+        self._handler = UploadPackHandler(None, None, None)
+        self._handler.proto = TestProto()
+
+    def test_progress(self):
+        self._handler.set_client_capabilities([])
+        self._handler.progress('first message')
+        self._handler.progress('second message')
+        self.assertEqual('first message',
+                         self._handler.proto.get_received_line(2))
+        self.assertEqual('second message',
+                         self._handler.proto.get_received_line(2))
+        self.assertEqual(None, self._handler.proto.get_received_line(2))
+
+    def test_no_progress(self):
+        self._handler.set_client_capabilities(['no-progress'])
+        self._handler.progress('first message')
+        self._handler.progress('second message')
+        self.assertEqual(None, self._handler.proto.get_received_line(2))
+
+
 class TestCommit(object):
+
     def __init__(self, sha, parents, commit_time):
         self.id = sha
         self._parents = parents
@@ -122,11 +144,13 @@ class TestCommit(object):
 
 
 class TestBackend(object):
+
     def __init__(self, objects):
         self.object_store = objects
 
 
 class TestUploadPackHandler(Handler):
+
     def __init__(self, objects, proto):
         self.backend = TestBackend(objects)
         self.proto = proto
@@ -138,6 +162,7 @@ class TestUploadPackHandler(Handler):
 
 
 class ProtocolGraphWalkerTestCase(TestCase):
+
     def setUp(self):
         # Create the following commit tree:
         #   3---5
@@ -221,6 +246,7 @@ class ProtocolGraphWalkerTestCase(TestCase):
 
 
 class TestProtocolGraphWalker(object):
+
     def __init__(self):
         self.acks = []
         self.lines = []
@@ -248,6 +274,7 @@ class TestProtocolGraphWalker(object):
 
 class AckGraphWalkerImplTestCase(TestCase):
     """Base setup and asserts for AckGraphWalker tests."""
+
     def setUp(self):
         self._walker = TestProtocolGraphWalker()
         self._walker.lines = [
@@ -277,6 +304,7 @@ class AckGraphWalkerImplTestCase(TestCase):
 
 
 class SingleAckGraphWalkerImplTestCase(AckGraphWalkerImplTestCase):
+
     impl_cls = SingleAckGraphWalkerImpl
 
     def test_single_ack(self):
@@ -343,6 +371,7 @@ class SingleAckGraphWalkerImplTestCase(AckGraphWalkerImplTestCase):
         self.assertNak()
 
 class MultiAckGraphWalkerImplTestCase(AckGraphWalkerImplTestCase):
+
     impl_cls = MultiAckGraphWalkerImpl
 
     def test_multi_ack(self):
@@ -414,7 +443,9 @@ class MultiAckGraphWalkerImplTestCase(AckGraphWalkerImplTestCase):
         self.assertNextEquals(None)
         self.assertNak()
 
+
 class MultiAckDetailedGraphWalkerImplTestCase(AckGraphWalkerImplTestCase):
+
     impl_cls = MultiAckDetailedGraphWalkerImpl
 
     def test_multi_ack(self):