##// END OF EJS Templates
test-commandserver: add connector for unix domain socket server...
Yuya Nishihara -
r22993:24c5fd28 default
parent child Browse files
Show More
@@ -1,6 +1,6 b''
1 1 # A minimal client for Mercurial's command server
2 2
3 import sys, struct, subprocess, cStringIO
3 import os, sys, signal, struct, socket, subprocess, time, cStringIO
4 4
5 5 def connectpipe(path=None):
6 6 cmdline = ['hg', 'serve', '--cmdserver', 'pipe']
@@ -12,6 +12,43 b' def connectpipe(path=None):'
12 12
13 13 return server
14 14
15 class unixconnection(object):
16 def __init__(self, sockpath):
17 self.sock = sock = socket.socket(socket.AF_UNIX)
18 sock.connect(sockpath)
19 self.stdin = sock.makefile('wb')
20 self.stdout = sock.makefile('rb')
21
22 def wait(self):
23 self.stdin.close()
24 self.stdout.close()
25 self.sock.close()
26
27 class unixserver(object):
28 def __init__(self, sockpath, logpath=None, repopath=None):
29 self.sockpath = sockpath
30 cmdline = ['hg', 'serve', '--cmdserver', 'unix', '-a', sockpath]
31 if repopath:
32 cmdline += ['-R', repopath]
33 if logpath:
34 stdout = open(logpath, 'a')
35 stderr = subprocess.STDOUT
36 else:
37 stdout = stderr = None
38 self.server = subprocess.Popen(cmdline, stdout=stdout, stderr=stderr)
39 # wait for listen()
40 while self.server.poll() is None:
41 if os.path.exists(sockpath):
42 break
43 time.sleep(0.1)
44
45 def connect(self):
46 return unixconnection(self.sockpath)
47
48 def shutdown(self):
49 os.kill(self.server.pid, signal.SIGTERM)
50 self.server.wait()
51
15 52 def writeblock(server, data):
16 53 server.stdin.write(struct.pack('>I', len(data)))
17 54 server.stdin.write(data)
General Comments 0
You need to be logged in to leave comments. Login now