Mercurial > public > mercurial-scm > hg
annotate contrib/hgclient.py @ 40788:41f0529b5112 stable
commandserver: get around ETIMEDOUT raised by selectors2
selector.select() should exits with an empty event list on timed out, but
selectors2 raises OSError if timeout expires while recovering from EINTR.
Spotted while debugging new chg feature.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Mon, 03 Dec 2018 21:45:15 +0900 |
parents | 6958eb9bdcd6 |
children | 054d0fcba2c4 |
rev | line source |
---|---|
22566
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
1 # A minimal client for Mercurial's command server |
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
2 |
28355
897a4bbd578b
hgclient: use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
22993
diff
changeset
|
3 from __future__ import absolute_import, print_function |
40317
6958eb9bdcd6
py3: rewrite StringIO fallback for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
40316
diff
changeset
|
4 |
6958eb9bdcd6
py3: rewrite StringIO fallback for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
40316
diff
changeset
|
5 import io |
28355
897a4bbd578b
hgclient: use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
22993
diff
changeset
|
6 import os |
40316
09540a5f0a15
py3: reinvent print() function for contrib/hgclient.py
Yuya Nishihara <yuya@tcha.org>
parents:
40315
diff
changeset
|
7 import re |
28355
897a4bbd578b
hgclient: use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
22993
diff
changeset
|
8 import signal |
897a4bbd578b
hgclient: use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
22993
diff
changeset
|
9 import socket |
897a4bbd578b
hgclient: use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
22993
diff
changeset
|
10 import struct |
897a4bbd578b
hgclient: use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
22993
diff
changeset
|
11 import subprocess |
897a4bbd578b
hgclient: use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
22993
diff
changeset
|
12 import sys |
897a4bbd578b
hgclient: use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
22993
diff
changeset
|
13 import time |
22566
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
14 |
40315
431a831342d2
py3: work around unicode stdio streams in contrib/hgclient.py
Yuya Nishihara <yuya@tcha.org>
parents:
40314
diff
changeset
|
15 if sys.version_info[0] >= 3: |
431a831342d2
py3: work around unicode stdio streams in contrib/hgclient.py
Yuya Nishihara <yuya@tcha.org>
parents:
40314
diff
changeset
|
16 stdout = sys.stdout.buffer |
431a831342d2
py3: work around unicode stdio streams in contrib/hgclient.py
Yuya Nishihara <yuya@tcha.org>
parents:
40314
diff
changeset
|
17 stderr = sys.stderr.buffer |
40317
6958eb9bdcd6
py3: rewrite StringIO fallback for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
40316
diff
changeset
|
18 stringio = io.BytesIO |
40316
09540a5f0a15
py3: reinvent print() function for contrib/hgclient.py
Yuya Nishihara <yuya@tcha.org>
parents:
40315
diff
changeset
|
19 def bprint(*args): |
09540a5f0a15
py3: reinvent print() function for contrib/hgclient.py
Yuya Nishihara <yuya@tcha.org>
parents:
40315
diff
changeset
|
20 # remove b'' as well for ease of test migration |
09540a5f0a15
py3: reinvent print() function for contrib/hgclient.py
Yuya Nishihara <yuya@tcha.org>
parents:
40315
diff
changeset
|
21 pargs = [re.sub(br'''\bb(['"])''', br'\1', b'%s' % a) for a in args] |
09540a5f0a15
py3: reinvent print() function for contrib/hgclient.py
Yuya Nishihara <yuya@tcha.org>
parents:
40315
diff
changeset
|
22 stdout.write(b' '.join(pargs) + b'\n') |
40315
431a831342d2
py3: work around unicode stdio streams in contrib/hgclient.py
Yuya Nishihara <yuya@tcha.org>
parents:
40314
diff
changeset
|
23 else: |
40317
6958eb9bdcd6
py3: rewrite StringIO fallback for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
40316
diff
changeset
|
24 import cStringIO |
40315
431a831342d2
py3: work around unicode stdio streams in contrib/hgclient.py
Yuya Nishihara <yuya@tcha.org>
parents:
40314
diff
changeset
|
25 stdout = sys.stdout |
431a831342d2
py3: work around unicode stdio streams in contrib/hgclient.py
Yuya Nishihara <yuya@tcha.org>
parents:
40314
diff
changeset
|
26 stderr = sys.stderr |
40317
6958eb9bdcd6
py3: rewrite StringIO fallback for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
40316
diff
changeset
|
27 stringio = cStringIO.StringIO |
40316
09540a5f0a15
py3: reinvent print() function for contrib/hgclient.py
Yuya Nishihara <yuya@tcha.org>
parents:
40315
diff
changeset
|
28 bprint = print |
40315
431a831342d2
py3: work around unicode stdio streams in contrib/hgclient.py
Yuya Nishihara <yuya@tcha.org>
parents:
40314
diff
changeset
|
29 |
22992
892b2b8c1b50
test-commandserver: allow check() to make connection in different way
Yuya Nishihara <yuya@tcha.org>
parents:
22991
diff
changeset
|
30 def connectpipe(path=None): |
40314
73c2b9c9cd3c
py3: convert string literals to bytes in contrib/hgclient.py
Yuya Nishihara <yuya@tcha.org>
parents:
28836
diff
changeset
|
31 cmdline = [b'hg', b'serve', b'--cmdserver', b'pipe'] |
22566
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
32 if path: |
40314
73c2b9c9cd3c
py3: convert string literals to bytes in contrib/hgclient.py
Yuya Nishihara <yuya@tcha.org>
parents:
28836
diff
changeset
|
33 cmdline += [b'-R', path] |
22566
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
34 |
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
35 server = subprocess.Popen(cmdline, stdin=subprocess.PIPE, |
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
36 stdout=subprocess.PIPE) |
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
37 |
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
38 return server |
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
39 |
22993
24c5fd2894f8
test-commandserver: add connector for unix domain socket server
Yuya Nishihara <yuya@tcha.org>
parents:
22992
diff
changeset
|
40 class unixconnection(object): |
24c5fd2894f8
test-commandserver: add connector for unix domain socket server
Yuya Nishihara <yuya@tcha.org>
parents:
22992
diff
changeset
|
41 def __init__(self, sockpath): |
24c5fd2894f8
test-commandserver: add connector for unix domain socket server
Yuya Nishihara <yuya@tcha.org>
parents:
22992
diff
changeset
|
42 self.sock = sock = socket.socket(socket.AF_UNIX) |
24c5fd2894f8
test-commandserver: add connector for unix domain socket server
Yuya Nishihara <yuya@tcha.org>
parents:
22992
diff
changeset
|
43 sock.connect(sockpath) |
24c5fd2894f8
test-commandserver: add connector for unix domain socket server
Yuya Nishihara <yuya@tcha.org>
parents:
22992
diff
changeset
|
44 self.stdin = sock.makefile('wb') |
24c5fd2894f8
test-commandserver: add connector for unix domain socket server
Yuya Nishihara <yuya@tcha.org>
parents:
22992
diff
changeset
|
45 self.stdout = sock.makefile('rb') |
24c5fd2894f8
test-commandserver: add connector for unix domain socket server
Yuya Nishihara <yuya@tcha.org>
parents:
22992
diff
changeset
|
46 |
24c5fd2894f8
test-commandserver: add connector for unix domain socket server
Yuya Nishihara <yuya@tcha.org>
parents:
22992
diff
changeset
|
47 def wait(self): |
24c5fd2894f8
test-commandserver: add connector for unix domain socket server
Yuya Nishihara <yuya@tcha.org>
parents:
22992
diff
changeset
|
48 self.stdin.close() |
24c5fd2894f8
test-commandserver: add connector for unix domain socket server
Yuya Nishihara <yuya@tcha.org>
parents:
22992
diff
changeset
|
49 self.stdout.close() |
24c5fd2894f8
test-commandserver: add connector for unix domain socket server
Yuya Nishihara <yuya@tcha.org>
parents:
22992
diff
changeset
|
50 self.sock.close() |
24c5fd2894f8
test-commandserver: add connector for unix domain socket server
Yuya Nishihara <yuya@tcha.org>
parents:
22992
diff
changeset
|
51 |
24c5fd2894f8
test-commandserver: add connector for unix domain socket server
Yuya Nishihara <yuya@tcha.org>
parents:
22992
diff
changeset
|
52 class unixserver(object): |
24c5fd2894f8
test-commandserver: add connector for unix domain socket server
Yuya Nishihara <yuya@tcha.org>
parents:
22992
diff
changeset
|
53 def __init__(self, sockpath, logpath=None, repopath=None): |
24c5fd2894f8
test-commandserver: add connector for unix domain socket server
Yuya Nishihara <yuya@tcha.org>
parents:
22992
diff
changeset
|
54 self.sockpath = sockpath |
40314
73c2b9c9cd3c
py3: convert string literals to bytes in contrib/hgclient.py
Yuya Nishihara <yuya@tcha.org>
parents:
28836
diff
changeset
|
55 cmdline = [b'hg', b'serve', b'--cmdserver', b'unix', b'-a', sockpath] |
22993
24c5fd2894f8
test-commandserver: add connector for unix domain socket server
Yuya Nishihara <yuya@tcha.org>
parents:
22992
diff
changeset
|
56 if repopath: |
40314
73c2b9c9cd3c
py3: convert string literals to bytes in contrib/hgclient.py
Yuya Nishihara <yuya@tcha.org>
parents:
28836
diff
changeset
|
57 cmdline += [b'-R', repopath] |
22993
24c5fd2894f8
test-commandserver: add connector for unix domain socket server
Yuya Nishihara <yuya@tcha.org>
parents:
22992
diff
changeset
|
58 if logpath: |
24c5fd2894f8
test-commandserver: add connector for unix domain socket server
Yuya Nishihara <yuya@tcha.org>
parents:
22992
diff
changeset
|
59 stdout = open(logpath, 'a') |
24c5fd2894f8
test-commandserver: add connector for unix domain socket server
Yuya Nishihara <yuya@tcha.org>
parents:
22992
diff
changeset
|
60 stderr = subprocess.STDOUT |
24c5fd2894f8
test-commandserver: add connector for unix domain socket server
Yuya Nishihara <yuya@tcha.org>
parents:
22992
diff
changeset
|
61 else: |
24c5fd2894f8
test-commandserver: add connector for unix domain socket server
Yuya Nishihara <yuya@tcha.org>
parents:
22992
diff
changeset
|
62 stdout = stderr = None |
24c5fd2894f8
test-commandserver: add connector for unix domain socket server
Yuya Nishihara <yuya@tcha.org>
parents:
22992
diff
changeset
|
63 self.server = subprocess.Popen(cmdline, stdout=stdout, stderr=stderr) |
24c5fd2894f8
test-commandserver: add connector for unix domain socket server
Yuya Nishihara <yuya@tcha.org>
parents:
22992
diff
changeset
|
64 # wait for listen() |
24c5fd2894f8
test-commandserver: add connector for unix domain socket server
Yuya Nishihara <yuya@tcha.org>
parents:
22992
diff
changeset
|
65 while self.server.poll() is None: |
24c5fd2894f8
test-commandserver: add connector for unix domain socket server
Yuya Nishihara <yuya@tcha.org>
parents:
22992
diff
changeset
|
66 if os.path.exists(sockpath): |
24c5fd2894f8
test-commandserver: add connector for unix domain socket server
Yuya Nishihara <yuya@tcha.org>
parents:
22992
diff
changeset
|
67 break |
24c5fd2894f8
test-commandserver: add connector for unix domain socket server
Yuya Nishihara <yuya@tcha.org>
parents:
22992
diff
changeset
|
68 time.sleep(0.1) |
24c5fd2894f8
test-commandserver: add connector for unix domain socket server
Yuya Nishihara <yuya@tcha.org>
parents:
22992
diff
changeset
|
69 |
24c5fd2894f8
test-commandserver: add connector for unix domain socket server
Yuya Nishihara <yuya@tcha.org>
parents:
22992
diff
changeset
|
70 def connect(self): |
24c5fd2894f8
test-commandserver: add connector for unix domain socket server
Yuya Nishihara <yuya@tcha.org>
parents:
22992
diff
changeset
|
71 return unixconnection(self.sockpath) |
24c5fd2894f8
test-commandserver: add connector for unix domain socket server
Yuya Nishihara <yuya@tcha.org>
parents:
22992
diff
changeset
|
72 |
24c5fd2894f8
test-commandserver: add connector for unix domain socket server
Yuya Nishihara <yuya@tcha.org>
parents:
22992
diff
changeset
|
73 def shutdown(self): |
24c5fd2894f8
test-commandserver: add connector for unix domain socket server
Yuya Nishihara <yuya@tcha.org>
parents:
22992
diff
changeset
|
74 os.kill(self.server.pid, signal.SIGTERM) |
24c5fd2894f8
test-commandserver: add connector for unix domain socket server
Yuya Nishihara <yuya@tcha.org>
parents:
22992
diff
changeset
|
75 self.server.wait() |
24c5fd2894f8
test-commandserver: add connector for unix domain socket server
Yuya Nishihara <yuya@tcha.org>
parents:
22992
diff
changeset
|
76 |
22566
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
77 def writeblock(server, data): |
40314
73c2b9c9cd3c
py3: convert string literals to bytes in contrib/hgclient.py
Yuya Nishihara <yuya@tcha.org>
parents:
28836
diff
changeset
|
78 server.stdin.write(struct.pack(b'>I', len(data))) |
22566
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
79 server.stdin.write(data) |
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
80 server.stdin.flush() |
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
81 |
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
82 def readchannel(server): |
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
83 data = server.stdout.read(5) |
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
84 if not data: |
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
85 raise EOFError |
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
86 channel, length = struct.unpack('>cI', data) |
40314
73c2b9c9cd3c
py3: convert string literals to bytes in contrib/hgclient.py
Yuya Nishihara <yuya@tcha.org>
parents:
28836
diff
changeset
|
87 if channel in b'IL': |
22566
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
88 return channel, length |
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
89 else: |
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
90 return channel, server.stdout.read(length) |
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
91 |
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
92 def sep(text): |
40314
73c2b9c9cd3c
py3: convert string literals to bytes in contrib/hgclient.py
Yuya Nishihara <yuya@tcha.org>
parents:
28836
diff
changeset
|
93 return text.replace(b'\\', b'/') |
22566
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
94 |
40315
431a831342d2
py3: work around unicode stdio streams in contrib/hgclient.py
Yuya Nishihara <yuya@tcha.org>
parents:
40314
diff
changeset
|
95 def runcommand(server, args, output=stdout, error=stderr, input=None, |
22566
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
96 outfilter=lambda x: x): |
40316
09540a5f0a15
py3: reinvent print() function for contrib/hgclient.py
Yuya Nishihara <yuya@tcha.org>
parents:
40315
diff
changeset
|
97 bprint(b'*** runcommand', b' '.join(args)) |
40315
431a831342d2
py3: work around unicode stdio streams in contrib/hgclient.py
Yuya Nishihara <yuya@tcha.org>
parents:
40314
diff
changeset
|
98 stdout.flush() |
40314
73c2b9c9cd3c
py3: convert string literals to bytes in contrib/hgclient.py
Yuya Nishihara <yuya@tcha.org>
parents:
28836
diff
changeset
|
99 server.stdin.write(b'runcommand\n') |
73c2b9c9cd3c
py3: convert string literals to bytes in contrib/hgclient.py
Yuya Nishihara <yuya@tcha.org>
parents:
28836
diff
changeset
|
100 writeblock(server, b'\0'.join(args)) |
22566
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
101 |
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
102 if not input: |
28836
3f45488d70df
test-commandserver: handle cStringIO.StringIO/io.StringIO divergence
timeless <timeless@mozdev.org>
parents:
28355
diff
changeset
|
103 input = stringio() |
22566
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
104 |
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
105 while True: |
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
106 ch, data = readchannel(server) |
40314
73c2b9c9cd3c
py3: convert string literals to bytes in contrib/hgclient.py
Yuya Nishihara <yuya@tcha.org>
parents:
28836
diff
changeset
|
107 if ch == b'o': |
22566
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
108 output.write(outfilter(data)) |
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
109 output.flush() |
40314
73c2b9c9cd3c
py3: convert string literals to bytes in contrib/hgclient.py
Yuya Nishihara <yuya@tcha.org>
parents:
28836
diff
changeset
|
110 elif ch == b'e': |
22566
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
111 error.write(data) |
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
112 error.flush() |
40314
73c2b9c9cd3c
py3: convert string literals to bytes in contrib/hgclient.py
Yuya Nishihara <yuya@tcha.org>
parents:
28836
diff
changeset
|
113 elif ch == b'I': |
22566
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
114 writeblock(server, input.read(data)) |
40314
73c2b9c9cd3c
py3: convert string literals to bytes in contrib/hgclient.py
Yuya Nishihara <yuya@tcha.org>
parents:
28836
diff
changeset
|
115 elif ch == b'L': |
22566
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
116 writeblock(server, input.readline(data)) |
40314
73c2b9c9cd3c
py3: convert string literals to bytes in contrib/hgclient.py
Yuya Nishihara <yuya@tcha.org>
parents:
28836
diff
changeset
|
117 elif ch == b'r': |
22566
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
118 ret, = struct.unpack('>i', data) |
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
119 if ret != 0: |
40316
09540a5f0a15
py3: reinvent print() function for contrib/hgclient.py
Yuya Nishihara <yuya@tcha.org>
parents:
40315
diff
changeset
|
120 bprint(b' [%d]' % ret) |
22566
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
121 return ret |
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
122 else: |
40316
09540a5f0a15
py3: reinvent print() function for contrib/hgclient.py
Yuya Nishihara <yuya@tcha.org>
parents:
40315
diff
changeset
|
123 bprint(b"unexpected channel %c: %r" % (ch, data)) |
22566
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
124 if ch.isupper(): |
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
125 return |
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
126 |
22992
892b2b8c1b50
test-commandserver: allow check() to make connection in different way
Yuya Nishihara <yuya@tcha.org>
parents:
22991
diff
changeset
|
127 def check(func, connect=connectpipe): |
40315
431a831342d2
py3: work around unicode stdio streams in contrib/hgclient.py
Yuya Nishihara <yuya@tcha.org>
parents:
40314
diff
changeset
|
128 stdout.flush() |
22991
a94594f5d52f
test-commandserver: remove unused repopath argument from check()
Yuya Nishihara <yuya@tcha.org>
parents:
22572
diff
changeset
|
129 server = connect() |
22566
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
130 try: |
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
131 return func(server) |
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
132 finally: |
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
133 server.stdin.close() |
480b7fefbb08
test-commandserver: split helper functions to new hgclient module
Yuya Nishihara <yuya@tcha.org>
parents:
diff
changeset
|
134 server.wait() |