diff mercurial/wireprotoserver.py @ 36074:2f7290555c96

wireproto: introduce type for raw byte responses (API) Right now we simply return a str/bytes instance for simple responses. I want all wire protocol response types to be strongly typed. So let's invent and use a type for raw bytes responses. .. api:: Wire protocol command handlers now return a wireprototypes.bytesresponse instead of a raw bytes instance. Protocol handlers will continue handling bytes instances. However, any extensions wrapping wire protocol commands will need to handle the new type. Differential Revision: https://phab.mercurial-scm.org/D2089
author Gregory Szorc <gregory.szorc@gmail.com>
date Wed, 07 Feb 2018 20:27:36 -0800
parents cd6ab329c5c7
children ac33dc94e1d5
line wrap: on
line diff
--- a/mercurial/wireprotoserver.py	Wed Feb 07 16:29:05 2018 -0800
+++ b/mercurial/wireprotoserver.py	Wed Feb 07 20:27:36 2018 -0800
@@ -274,6 +274,9 @@
     if isinstance(rsp, bytes):
         req.respond(HTTP_OK, HGTYPE, body=rsp)
         return []
+    elif isinstance(rsp, wireprototypes.bytesresponse):
+        req.respond(HTTP_OK, HGTYPE, body=rsp.data)
+        return []
     elif isinstance(rsp, wireprototypes.streamreslegacy):
         gen = rsp.gen
         req.respond(HTTP_OK, HGTYPE)
@@ -435,6 +438,8 @@
 
             if isinstance(rsp, bytes):
                 _sshv1respondbytes(self._fout, rsp)
+            elif isinstance(rsp, wireprototypes.bytesresponse):
+                _sshv1respondbytes(self._fout, rsp.data)
             elif isinstance(rsp, wireprototypes.streamres):
                 _sshv1respondstream(self._fout, rsp)
             elif isinstance(rsp, wireprototypes.streamreslegacy):