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.
--- 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 ..