Mercurial > hg
changeset 15259:1d1f6dff9364
contrib: add a script to help diagnose raw output of the cmdserver
author | Idan Kamara <idankk86@gmail.com> |
---|---|
date | Fri, 14 Oct 2011 19:10:36 +0200 |
parents | fe9677449331 |
children | be2c67a8bf88 |
files | contrib/debugcmdserver.py |
diffstat | 1 files changed, 47 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/contrib/debugcmdserver.py Fri Oct 14 19:10:36 2011 +0200 @@ -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()