contrib/debugcmdserver.py
author Manuel Jacob <me@manueljacob.de>
Tue, 31 May 2022 04:11:34 +0200
changeset 49302 ee4537e365c8
parent 48875 6000f5b25c9b
permissions -rwxr-xr-x
py3: remove retry on EINTR errno Since the implementation of PEP 475 (Python 3.5), Python retries system calls failing with EINTR. Therefore we don’t need the logic that retries it in Python code.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
45830
c102b704edb5 global: use python3 in shebangs
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43076
diff changeset
     1
#!/usr/bin/env python3
15259
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
     2
#
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
     3
# Dumps output generated by Mercurial's command server in a formatted style to a
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
     4
# given file or stderr if '-' is specified. Output is also written in its raw
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
     5
# format to stdout.
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
     6
#
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
     7
# $ ./hg serve --cmds pipe | ./contrib/debugcmdserver.py -
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
     8
# o, 52   -> 'capabilities: getencoding runcommand\nencoding: UTF-8'
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
     9
28353
cd03fbd5ab57 debugcmdserver: use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 16687
diff changeset
    10
import struct
cd03fbd5ab57 debugcmdserver: use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 16687
diff changeset
    11
import sys
15259
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
    12
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
    13
if len(sys.argv) != 2:
28353
cd03fbd5ab57 debugcmdserver: use absolute_import and print_function
Pulkit Goyal <7895pulkit@gmail.com>
parents: 16687
diff changeset
    14
    print('usage: debugcmdserver.py FILE')
15259
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
    15
    sys.exit(1)
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
    16
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
    17
outputfmt = '>cI'
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
    18
outputfmtsize = struct.calcsize(outputfmt)
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
    19
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
    20
if sys.argv[1] == '-':
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
    21
    log = sys.stderr
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
    22
else:
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
    23
    log = open(sys.argv[1], 'a')
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
    24
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 28353
diff changeset
    25
15259
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
    26
def read(size):
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
    27
    data = sys.stdin.read(size)
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
    28
    if not data:
16687
e34106fa0dc3 cleanup: "raise SomeException()" -> "raise SomeException"
Brodie Rao <brodie@sf.io>
parents: 15259
diff changeset
    29
        raise EOFError
15259
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
    30
    sys.stdout.write(data)
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
    31
    sys.stdout.flush()
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
    32
    return data
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
    33
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 28353
diff changeset
    34
15259
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
    35
try:
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
    36
    while True:
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
    37
        header = read(outputfmtsize)
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
    38
        channel, length = struct.unpack(outputfmt, header)
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
    39
        log.write('%s, %-4d' % (channel, length))
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
    40
        if channel in 'IL':
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
    41
            log.write(' -> waiting for input\n')
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
    42
        else:
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
    43
            data = read(length)
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
    44
            log.write(' -> %r\n' % data)
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
    45
        log.flush()
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
    46
except EOFError:
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
    47
    pass
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
    48
finally:
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
    49
    if log != sys.stderr:
1d1f6dff9364 contrib: add a script to help diagnose raw output of the cmdserver
Idan Kamara <idankk86@gmail.com>
parents:
diff changeset
    50
        log.close()