Browse Source

Initial work towards git-upload-archive support.

Jelmer Vernooij 9 years ago
parent
commit
6bd957f231
3 changed files with 32 additions and 9 deletions
  1. 0 1
      TODO
  2. 28 4
      dulwich/server.py
  3. 4 4
      dulwich/tests/test_server.py

+ 0 - 1
TODO

@@ -1,3 +1,2 @@
 - 'git annotate' equivalent
 - repacking
-- archive

+ 28 - 4
dulwich/server.py

@@ -207,6 +207,16 @@ class Handler(object):
         self.backend = backend
         self.proto = proto
         self.http_req = http_req
+
+    def handle(self):
+        raise NotImplementedError(self.handle)
+
+
+class PackHandler(Handler):
+    """Protocol handler for packs."""
+
+    def __init__(self, backend, proto, http_req=None):
+        super(PackHandler, self).__init__(backend, proto, http_req)
         self._client_capabilities = None
         # Flags needed for the no-done capability
         self._done_received = False
@@ -254,12 +264,14 @@ class Handler(object):
         self._done_received = True
 
 
-class UploadPackHandler(Handler):
+
+class UploadPackHandler(PackHandler):
     """Protocol handler for uploading a pack to the server."""
 
     def __init__(self, backend, args, proto, http_req=None,
                  advertise_refs=False):
-        Handler.__init__(self, backend, proto, http_req=http_req)
+        super(UploadPackHandler, self).__init__(backend, proto,
+            http_req=http_req)
         self.repo = backend.open_repository(args[0])
         self._graph_walker = None
         self.advertise_refs = advertise_refs
@@ -829,12 +841,13 @@ class MultiAckDetailedGraphWalkerImpl(object):
         return True
 
 
-class ReceivePackHandler(Handler):
+class ReceivePackHandler(PackHandler):
     """Protocol handler for downloading a pack from the client."""
 
     def __init__(self, backend, args, proto, http_req=None,
                  advertise_refs=False):
-        Handler.__init__(self, backend, proto, http_req=http_req)
+        super(ReceivePackHandler, self).__init__(backend, proto,
+            http_req=http_req)
         self.repo = backend.open_repository(args[0])
         self.advertise_refs = advertise_refs
 
@@ -958,10 +971,21 @@ class ReceivePackHandler(Handler):
             self._report_status(status)
 
 
+class UploadArchiveHandler(Handler):
+
+    def __init__(self, backend, proto, http_req=None):
+        super(UploadArchiveHandler, self).__init__(backend, proto, http_req)
+
+    def handle(self):
+        # TODO(jelmer)
+        raise NotImplementedError(self.handle)
+
+
 # Default handler classes for git services.
 DEFAULT_HANDLERS = {
   b'git-upload-pack': UploadPackHandler,
   b'git-receive-pack': ReceivePackHandler,
+#  b'git-upload-archive': UploadArchiveHandler,
   }
 
 

+ 4 - 4
dulwich/tests/test_server.py

@@ -40,9 +40,9 @@ from dulwich.server import (
     Backend,
     DictBackend,
     FileSystemBackend,
-    Handler,
     MultiAckGraphWalkerImpl,
     MultiAckDetailedGraphWalkerImpl,
+    PackHandler,
     _split_proto_line,
     serve_command,
     _find_shallow,
@@ -100,10 +100,10 @@ class TestProto(object):
         return lines.pop(0)
 
 
-class TestGenericHandler(Handler):
+class TestGenericPackHandler(PackHandler):
 
     def __init__(self):
-        Handler.__init__(self, Backend(), None)
+        PackHandler.__init__(self, Backend(), None)
 
     @classmethod
     def capabilities(cls):
@@ -118,7 +118,7 @@ class HandlerTestCase(TestCase):
 
     def setUp(self):
         super(HandlerTestCase, self).setUp()
-        self._handler = TestGenericHandler()
+        self._handler = TestGenericPackHandler()
 
     def assertSucceeds(self, func, *args, **kwargs):
         try: