contrib/debugcmdserver.py
author Durham Goode <durham@fb.com>
Tue, 10 Mar 2015 13:56:05 -0700
changeset 24273 ce847603040b
parent 16687 e34106fa0dc3
child 28353 cd03fbd5ab57
permissions -rwxr-xr-x
copies: added manifests to computenonoverlap Commit 30219bd46ed7 changed the computenonoverlap api's to not require the manifests. We actually need the manifests in the remotefilelog extension so we can find the file nodes for the various files that change. Let's add it back to the function signature with a note explaining why. This doesn't affect any behavior.

#!/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()