# HG changeset patch # User Idan Kamara # Date 1318612236 -7200 # Node ID 1d1f6dff93649268416162d983e6c34effd25fea # Parent fe967744933108e272f17d49085f9ceadc2ab5f7 contrib: add a script to help diagnose raw output of the cmdserver diff -r fe9677449331 -r 1d1f6dff9364 contrib/debugcmdserver.py --- /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()