changeset 23322:000cfc8b3913

cmdserver: use given streams as pipe channels like other commands Because commandserver itself is an hg subcommand, it shouldn't use stdio directly in principle.
author Yuya Nishihara <yuya@tcha.org>
date Sat, 15 Nov 2014 12:43:35 +0900
parents d716b1cec5cf
children bc374458688b
files mercurial/commandserver.py tests/test-commandserver.t
diffstat 2 files changed, 23 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/commandserver.py	Fri Nov 14 16:38:58 2014 -0800
+++ b/mercurial/commandserver.py	Sat Nov 15 12:43:35 2014 +0900
@@ -7,7 +7,7 @@
 
 from i18n import _
 import struct
-import sys, os, errno, traceback, SocketServer
+import os, errno, traceback, SocketServer
 import dispatch, encoding, util
 
 logfile = None
@@ -250,7 +250,7 @@
 
 class pipeservice(object):
     def __init__(self, ui, repo, opts):
-        self.server = server(ui, repo, sys.stdin, sys.stdout)
+        self.server = server(ui, repo, ui.fin, ui.fout)
 
     def init(self):
         pass
--- a/tests/test-commandserver.t	Fri Nov 14 16:38:58 2014 -0800
+++ b/tests/test-commandserver.t	Sat Nov 15 12:43:35 2014 +0900
@@ -524,6 +524,27 @@
   prompt: 5678
 
 
+run commandserver in commandserver, which is silly but should work:
+
+  >>> import cStringIO
+  >>> from hgclient import readchannel, runcommand, check
+  >>> @check
+  ... def nested(server):
+  ...     print '%c, %r' % readchannel(server)
+  ...     class nestedserver(object):
+  ...         stdin = cStringIO.StringIO('getencoding\n')
+  ...         stdout = cStringIO.StringIO()
+  ...     runcommand(server, ['serve', '--cmdserver', 'pipe'],
+  ...                output=nestedserver.stdout, input=nestedserver.stdin)
+  ...     nestedserver.stdout.seek(0)
+  ...     print '%c, %r' % readchannel(nestedserver)  # hello
+  ...     print '%c, %r' % readchannel(nestedserver)  # getencoding
+  o, 'capabilities: getencoding runcommand\nencoding: *\npid: *' (glob)
+  *** runcommand serve --cmdserver pipe
+  o, 'capabilities: getencoding runcommand\nencoding: *\npid: *' (glob)
+  r, '*' (glob)
+
+
 start without repository:
 
   $ cd ..