瀏覽代碼

Factor out negotiating capabilities.

Jelmer Vernooij 7 年之前
父節點
當前提交
4f7556f2bf
共有 1 個文件被更改,包括 27 次插入24 次删除
  1. 27 24
      dulwich/client.py

+ 27 - 24
dulwich/client.py

@@ -426,6 +426,15 @@ class GitClient(object):
         proto.write_pkt_line(None)
         return (have, want)
 
+    def _negotiate_receive_pack_capabilities(self, server_capabilities):
+        negotiated_capabilities = (
+            self._send_capabilities & server_capabilities)
+        unknown_capabilities = (  # noqa: F841
+            extract_capability_names(server_capabilities) -
+            KNOWN_RECEIVE_CAPABILITIES)
+        # TODO(jelmer): warn about unknown capabilities
+        return negotiated_capabilities
+
     def _handle_receive_pack_tail(self, proto, capabilities, progress=None):
         """Handle the tail of a 'git-receive-pack' request.
 
@@ -433,7 +442,7 @@ class GitClient(object):
         :param capabilities: List of negotiated capabilities
         :param progress: Optional progress reporting function
         """
-        if b"side-band-64k" in capabilities:
+        if CAPABILITY_SIDE_BAND_64K in capabilities:
             if progress is None:
                 def progress(x):
                     pass
@@ -449,6 +458,15 @@ class GitClient(object):
         if self._report_status_parser is not None:
             self._report_status_parser.check()
 
+    def _negotiate_upload_pack_capabilities(self, server_capabilities):
+        unknown_capabilities = (  # noqa: F841
+            extract_capability_names(server_capabilities) -
+            KNOWN_UPLOAD_CAPABILITIES)
+        # TODO(jelmer): warn about unknown capabilities
+        negotiated_capabilities = (
+            self._fetch_capabilities & server_capabilities)
+        return negotiated_capabilities
+
     def _handle_upload_pack_head(self, proto, capabilities, graph_walker,
                                  wants, can_read):
         """Handle the head of a 'git-upload-pack' request.
@@ -569,12 +587,8 @@ class TraditionalGitClient(GitClient):
         proto, unused_can_read = self._connect(b'receive-pack', path)
         with proto:
             old_refs, server_capabilities = read_pkt_refs(proto)
-            negotiated_capabilities = (
-                self._send_capabilities & server_capabilities)
-            unknown_capabilities = (  # noqa: F841
-                extract_capability_names(server_capabilities) -
-                KNOWN_RECEIVE_CAPABILITIES)
-            # TODO(jelmer): warn about unknown capabilities
+            negotiated_capabilities = \
+                self._negotiate_receive_pack_capabilities(server_capabilities)
             if CAPABILITY_REPORT_STATUS in negotiated_capabilities:
                 self._report_status_parser = ReportStatusParser()
             report_status_parser = self._report_status_parser
@@ -642,12 +656,8 @@ class TraditionalGitClient(GitClient):
         proto, can_read = self._connect(b'upload-pack', path)
         with proto:
             refs, server_capabilities = read_pkt_refs(proto)
-            unknown_capabilities = (  # noqa: F841
-                extract_capability_names(server_capabilities) -
-                KNOWN_UPLOAD_CAPABILITIES)
-            # TODO(jelmer): warn about unknown capabilities
-            negotiated_capabilities = (
-                self._fetch_capabilities & server_capabilities)
+            negotiated_capabilities = self._negotiate_upload_pack_capabilities(
+                    server_capabilities)
 
             if refs is None:
                 proto.write_pkt_line(None)
@@ -1229,11 +1239,8 @@ class HttpGitClient(GitClient):
         url = self._get_url(path)
         old_refs, server_capabilities = self._discover_references(
             b"git-receive-pack", url)
-        unknown_capabilities = (  # noqa: F841
-            extract_capability_names(server_capabilities) -
-            KNOWN_RECEIVE_CAPABILITIES)
-        # TODO(jelmer): warn about unknown capabilities
-        negotiated_capabilities = self._send_capabilities & server_capabilities
+        negotiated_capabilities = self._negotiate_receive_pack_capabilities(
+                server_capabilities)
 
         if CAPABILITY_REPORT_STATUS in negotiated_capabilities:
             self._report_status_parser = ReportStatusParser()
@@ -1276,12 +1283,8 @@ class HttpGitClient(GitClient):
         url = self._get_url(path)
         refs, server_capabilities = self._discover_references(
             b"git-upload-pack", url)
-        unknown_capabilities = (  # noqa: F841
-            extract_capability_names(server_capabilities) -
-            KNOWN_UPLOAD_CAPABILITIES)
-        # TODO(jelmer): warn about unknown capabilities
-        negotiated_capabilities = (
-            self._fetch_capabilities & server_capabilities)
+        negotiated_capabilities = self._negotiate_upload_pack_capabilities(
+            server_capabilities)
         wants = determine_wants(refs)
         if wants is not None:
             wants = [cid for cid in wants if cid != ZERO_SHA]