Mercurial > public > mercurial-scm > hg-stable
diff tests/test-commandserver.t @ 40636:054d0fcba2c4
commandserver: add experimental option to use separate message channel
This is loosely based on the idea of the TortoiseHg's pipeui extension,
which attaches ui.label to message text so the command-server client can
capture prompt text, for example.
https://bitbucket.org/tortoisehg/thg/src/4.7.2/tortoisehg/util/pipeui.py
I was thinking that this functionality could be generalized to templating,
but changed mind as doing template stuff would be unnecessarily complex.
It's merely a status message, a simple serialization option should suffice.
Since this slightly changes the command-server protocol, it's gated by a
config knob. If the config is enabled, and if it's supported by the server,
"message-encoding: <name>" is advertised so the client can stop parsing
'o'/'e' channel data and read encoded messages from the 'm' channel. As we
might add new message encodings in future releases, client can specify a list
of encoding names in preferred order.
This patch includes 'cbor' encoding as example. Perhaps, 'json' should be
supported as well.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sun, 18 Jan 2015 18:49:59 +0900 |
parents | d6b6f1b441cf |
children | 83dd8c63a0c6 |
line wrap: on
line diff
--- a/tests/test-commandserver.t Wed Nov 07 22:37:51 2018 +0900 +++ b/tests/test-commandserver.t Sun Jan 18 18:49:59 2015 +0900 @@ -724,6 +724,43 @@ $ cd .. +structured message channel: + + $ cat <<'EOF' >> repo2/.hg/hgrc + > [ui] + > # server --config should precede repository option + > message-output = stdio + > EOF + + >>> from hgclient import bprint, checkwith, readchannel, runcommand + >>> @checkwith(extraargs=[b'--config', b'ui.message-output=channel', + ... b'--config', b'cmdserver.message-encodings=foo cbor']) + ... def verify(server): + ... _ch, data = readchannel(server) + ... bprint(data) + ... runcommand(server, [b'-R', b'repo2', b'verify']) + capabilities: getencoding runcommand + encoding: ascii + message-encoding: cbor + pid: * (glob) + pgid: * (glob) + *** runcommand -R repo2 verify + message: '\xa2DdataTchecking changesets\nElabelJ ui.status' + message: '\xa2DdataSchecking manifests\nElabelJ ui.status' + message: '\xa2DdataX0crosschecking files in changesets and manifests\nElabelJ ui.status' + message: '\xa2DdataOchecking files\nElabelJ ui.status' + message: '\xa2DdataX/checked 0 changesets with 0 changes to 0 files\nElabelJ ui.status' + +bad message encoding: + + $ hg serve --cmdserver pipe --config ui.message-output=channel + abort: no supported message encodings: + [255] + $ hg serve --cmdserver pipe --config ui.message-output=channel \ + > --config cmdserver.message-encodings='foo bar' + abort: no supported message encodings: foo bar + [255] + unix domain socket: $ cd repo