mirror of
https://github.com/facebook/sapling.git
synced 2024-10-06 23:07:18 +03:00
contrib: add a script to help diagnose raw output of the cmdserver
This commit is contained in:
parent
68b09c8a1d
commit
8bbad7ebee
47
contrib/debugcmdserver.py
Executable file
47
contrib/debugcmdserver.py
Executable file
@ -0,0 +1,47 @@
|
||||
#!/usr/bin/env python
|
||||
#
|
||||
# Dumps output generated by Mercurial's command server in a formatted style to a
|
||||
# given file or stderr if '-' is specified. Output is also written in its raw
|
||||
# format to stdout.
|
||||
#
|
||||
# $ ./hg serve --cmds pipe | ./contrib/debugcmdserver.py -
|
||||
# o, 52 -> 'capabilities: getencoding runcommand\nencoding: UTF-8'
|
||||
|
||||
import sys, struct
|
||||
|
||||
if len(sys.argv) != 2:
|
||||
print 'usage: debugcmdserver.py FILE'
|
||||
sys.exit(1)
|
||||
|
||||
outputfmt = '>cI'
|
||||
outputfmtsize = struct.calcsize(outputfmt)
|
||||
|
||||
if sys.argv[1] == '-':
|
||||
log = sys.stderr
|
||||
else:
|
||||
log = open(sys.argv[1], 'a')
|
||||
|
||||
def read(size):
|
||||
data = sys.stdin.read(size)
|
||||
if not data:
|
||||
raise EOFError()
|
||||
sys.stdout.write(data)
|
||||
sys.stdout.flush()
|
||||
return data
|
||||
|
||||
try:
|
||||
while True:
|
||||
header = read(outputfmtsize)
|
||||
channel, length = struct.unpack(outputfmt, header)
|
||||
log.write('%s, %-4d' % (channel, length))
|
||||
if channel in 'IL':
|
||||
log.write(' -> waiting for input\n')
|
||||
else:
|
||||
data = read(length)
|
||||
log.write(' -> %r\n' % data)
|
||||
log.flush()
|
||||
except EOFError:
|
||||
pass
|
||||
finally:
|
||||
if log != sys.stderr:
|
||||
log.close()
|
Loading…
Reference in New Issue
Block a user