D2088: wireprototypes: move wire protocol response types to new module
indygreg (Gregory Szorc)
phabricator at mercurial-scm.org
Thu Feb 8 04:32:48 UTC 2018
indygreg updated this revision to Diff 5340.
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D2088?vs=5324&id=5340
REVISION DETAIL
https://phab.mercurial-scm.org/D2088
AFFECTED FILES
mercurial/wireproto.py
mercurial/wireprotoserver.py
mercurial/wireprototypes.py
CHANGE DETAILS
diff --git a/mercurial/wireprototypes.py b/mercurial/wireprototypes.py
new file mode 100644
--- /dev/null
+++ b/mercurial/wireprototypes.py
@@ -0,0 +1,61 @@
+# Copyright 2018 Gregory Szorc <gregory.szorc at gmail.com>
+#
+# This software may be used and distributed according to the terms of the
+# GNU General Public License version 2 or any later version.
+
+from __future__ import absolute_import
+
+class ooberror(object):
+ """wireproto reply: failure of a batch of operation
+
+ Something failed during a batch call. The error message is stored in
+ `self.message`.
+ """
+ def __init__(self, message):
+ self.message = message
+
+class pushres(object):
+ """wireproto reply: success with simple integer return
+
+ The call was successful and returned an integer contained in `self.res`.
+ """
+ def __init__(self, res, output):
+ self.res = res
+ self.output = output
+
+class pusherr(object):
+ """wireproto reply: failure
+
+ The call failed. The `self.res` attribute contains the error message.
+ """
+ def __init__(self, res, output):
+ self.res = res
+ self.output = output
+
+class streamres(object):
+ """wireproto reply: binary stream
+
+ The call was successful and the result is a stream.
+
+ Accepts a generator containing chunks of data to be sent to the client.
+
+ ``prefer_uncompressed`` indicates that the data is expected to be
+ uncompressable and that the stream should therefore use the ``none``
+ engine.
+ """
+ def __init__(self, gen=None, prefer_uncompressed=False):
+ self.gen = gen
+ self.prefer_uncompressed = prefer_uncompressed
+
+class streamreslegacy(object):
+ """wireproto reply: uncompressed binary stream
+
+ The call was successful and the result is a stream.
+
+ Accepts a generator containing chunks of data to be sent to the client.
+
+ Like ``streamres``, but sends an uncompressed data for "version 1" clients
+ using the application/mercurial-0.1 media type.
+ """
+ def __init__(self, gen=None):
+ self.gen = gen
diff --git a/mercurial/wireprotoserver.py b/mercurial/wireprotoserver.py
--- a/mercurial/wireprotoserver.py
+++ b/mercurial/wireprotoserver.py
@@ -20,6 +20,7 @@
pycompat,
util,
wireproto,
+ wireprototypes,
)
stringio = util.stringio
@@ -273,11 +274,11 @@
if isinstance(rsp, bytes):
req.respond(HTTP_OK, HGTYPE, body=rsp)
return []
- elif isinstance(rsp, wireproto.streamres_legacy):
+ elif isinstance(rsp, wireprototypes.streamreslegacy):
gen = rsp.gen
req.respond(HTTP_OK, HGTYPE)
return gen
- elif isinstance(rsp, wireproto.streamres):
+ elif isinstance(rsp, wireprototypes.streamres):
gen = rsp.gen
# This code for compression should not be streamres specific. It
@@ -291,18 +292,18 @@
req.respond(HTTP_OK, mediatype)
return gen
- elif isinstance(rsp, wireproto.pushres):
+ elif isinstance(rsp, wireprototypes.pushres):
rsp = '%d\n%s' % (rsp.res, rsp.output)
req.respond(HTTP_OK, HGTYPE, body=rsp)
return []
- elif isinstance(rsp, wireproto.pusherr):
+ elif isinstance(rsp, wireprototypes.pusherr):
# This is the httplib workaround documented in _handlehttperror().
req.drain()
rsp = '0\n%s\n' % rsp.res
req.respond(HTTP_OK, HGTYPE, body=rsp)
return []
- elif isinstance(rsp, wireproto.ooberror):
+ elif isinstance(rsp, wireprototypes.ooberror):
rsp = rsp.message
req.respond(HTTP_OK, HGERRTYPE, body=rsp)
return []
@@ -434,16 +435,16 @@
if isinstance(rsp, bytes):
_sshv1respondbytes(self._fout, rsp)
- elif isinstance(rsp, wireproto.streamres):
+ elif isinstance(rsp, wireprototypes.streamres):
_sshv1respondstream(self._fout, rsp)
- elif isinstance(rsp, wireproto.streamres_legacy):
+ elif isinstance(rsp, wireprototypes.streamreslegacy):
_sshv1respondstream(self._fout, rsp)
- elif isinstance(rsp, wireproto.pushres):
+ elif isinstance(rsp, wireprototypes.pushres):
_sshv1respondbytes(self._fout, b'')
_sshv1respondbytes(self._fout, bytes(rsp.res))
- elif isinstance(rsp, wireproto.pusherr):
+ elif isinstance(rsp, wireprototypes.pusherr):
_sshv1respondbytes(self._fout, rsp.res)
- elif isinstance(rsp, wireproto.ooberror):
+ elif isinstance(rsp, wireprototypes.ooberror):
_sshv1sendooberror(self._fout, self._ui.ferr, rsp)
else:
raise error.ProgrammingError('unhandled response type from '
diff --git a/mercurial/wireproto.py b/mercurial/wireproto.py
--- a/mercurial/wireproto.py
+++ b/mercurial/wireproto.py
@@ -31,11 +31,18 @@
repository,
streamclone,
util,
+ wireprototypes,
)
urlerr = util.urlerr
urlreq = util.urlreq
+ooberror = wireprototypes.ooberror
+pushres = wireprototypes.pushres
+pusherr = wireprototypes.pusherr
+streamres = wireprototypes.streamres
+streamres_legacy = wireprototypes.streamreslegacy
+
bundle2requiredmain = _('incompatible Mercurial client; bundle2 required')
bundle2requiredhint = _('see https://www.mercurial-scm.org/wiki/'
'IncompatibleClient')
@@ -477,60 +484,6 @@
# server side
# wire protocol command can either return a string or one of these classes.
-class streamres(object):
- """wireproto reply: binary stream
-
- The call was successful and the result is a stream.
-
- Accepts a generator containing chunks of data to be sent to the client.
-
- ``prefer_uncompressed`` indicates that the data is expected to be
- uncompressable and that the stream should therefore use the ``none``
- engine.
- """
- def __init__(self, gen=None, prefer_uncompressed=False):
- self.gen = gen
- self.prefer_uncompressed = prefer_uncompressed
-
-class streamres_legacy(object):
- """wireproto reply: uncompressed binary stream
-
- The call was successful and the result is a stream.
-
- Accepts a generator containing chunks of data to be sent to the client.
-
- Like ``streamres``, but sends an uncompressed data for "version 1" clients
- using the application/mercurial-0.1 media type.
- """
- def __init__(self, gen=None):
- self.gen = gen
-
-class pushres(object):
- """wireproto reply: success with simple integer return
-
- The call was successful and returned an integer contained in `self.res`.
- """
- def __init__(self, res, output):
- self.res = res
- self.output = output
-
-class pusherr(object):
- """wireproto reply: failure
-
- The call failed. The `self.res` attribute contains the error message.
- """
- def __init__(self, res, output):
- self.res = res
- self.output = output
-
-class ooberror(object):
- """wireproto reply: failure of a batch of operation
-
- Something failed during a batch call. The error message is stored in
- `self.message`.
- """
- def __init__(self, message):
- self.message = message
def getdispatchrepo(repo, proto, command):
"""Obtain the repo used for processing wire protocol commands.
To: indygreg, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list