Share capabilities extractor, port number.
authorJelmer Vernooij <jelmer@samba.org>
Wed, 24 Dec 2008 22:58:16 +0000 (22:58 +0000)
committerJelmer Vernooij <jelmer@samba.org>
Wed, 24 Dec 2008 22:58:16 +0000 (22:58 +0000)
dulwich/client.py
dulwich/pack.py
dulwich/protocol.py
dulwich/server.py

index 0750eb889b3d1a71e51f7d2c7bd6696f4a14582b..606db0535c19fc7110d576b3eea75deae3855b27 100644 (file)
 
 import select
 import socket
-from dulwich.protocol import Protocol, TCP_GIT_PORT
-
-def extract_capabilities(text):
-    if not "\0" in text:
-        return text
-    capabilities = text.split("\0")
-    return (capabilities[0], capabilities[1:])
-
+from dulwich.protocol import Protocol, TCP_GIT_PORT, extract_capabilities
 
 class SimpleFetchGraphWalker(object):
 
index 1cef1e1274bb013295b532313ef1d0fbe3af266f..95b71f77e01b13ff219c06260ae115b68380ec6a 100644 (file)
@@ -420,7 +420,7 @@ class PackData(object):
       assert isinstance(type, int)
       assert isinstance(obj, tuple) or isinstance(obj, str)
       try:
-        type, obj = resolve_object(offset, type, obj, get_ref_delta,
+        type, obj = resolve_object(offset, type, obj, get_ref_text,
             at.__getitem__)
       except Postpone, (sha, ):
         postponed[sha].append((offset, type, obj))
index c8f0e8016cb0a5095cbf8a29aad6b321e6de0651..715e66a55c7629e901505e69c8d19e54800af8da 100644 (file)
@@ -1,5 +1,6 @@
 # protocol.py -- Shared parts of the git protocols
 # Copryight (C) 2008 John Carr <john.carr@unrouted.co.uk>
+# Copyright (C) 2008 Jelmer Vernooij <jelmer@samba.org>
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -70,3 +71,9 @@ class Protocol(object):
             blob = blob[65530:]
 
 
+def extract_capabilities(text):
+    if not "\0" in text:
+        return text
+    capabilities = text.split("\0")
+    return (capabilities[0], capabilities[1:])
+
index 8886216b7328e64fd2de5481ced03a1d5e1005ff..4e3e8e880f1ee4aa7a9562e13c096a794a54c4c4 100644 (file)
@@ -18,6 +18,9 @@
 
 import SocketServer
 from dulwich.protocol import Protocol, TCP_GIT_PORT
+from dulwich.repo import Repo
+from dulwich.pack import PackData, Pack, write_pack_data, extract_capabilities
+import os, sha, tempfile
 
 class Backend(object):
 
@@ -56,10 +59,6 @@ class Backend(object):
         """
         raise NotImplementedError
 
-from dulwich.repo import Repo
-from dulwich.pack import PackData, Pack
-import sha, tempfile, os
-from dulwich.pack import write_pack_data
 
 class GitBackend(Backend):
 
@@ -155,21 +154,6 @@ class Handler(object):
     def capabilities(self):
         return " ".join(self.default_capabilities())
 
-    def handshake(self, blob):
-        """
-        Compare remote capabilites with our own and alter protocol accordingly
-
-        :param blob: space seperated list of capabilities (i.e. wire format)
-        """
-        if not "\x00" in blob:
-            return blob
-        blob, caps = blob.split("\x00")
-
-        # FIXME: Do something with this..
-        caps = caps.split()
-
-        return blob
-
 
 class UploadPackHandler(Handler):
 
@@ -194,7 +178,7 @@ class UploadPackHandler(Handler):
         if want == None:
             return
 
-        want = self.handshake(want)
+        want, client_capabilities = extract_capabilities(want)
 
         # Keep reading the list of demands until we hit another "0000" 
         want_revs = []
@@ -211,7 +195,7 @@ class UploadPackHandler(Handler):
         have_revs = []
         have = self.proto.read_pkt_line()
         while have and have[:4] == 'have':
-            have_ref = have[6:46]
+            have_ref = have[5:45]
             if self.backend.has_revision(have_ref):
                 self.proto.write_pkt_line("ACK %s continue\n" % have_ref)
                 last_sha = have_ref
@@ -259,7 +243,7 @@ class ReceivePackHandler(Handler):
         if ref is None:
             return
 
-        ref = self.handshake(ref)
+        ref, client_capabilities = extract_capabilities(ref)
 
         # client will now send us a list of (oldsha, newsha, ref)
         while ref: