Mercurial > hg
view contrib/debugcmdserver.py @ 44202:a7f8160cc4e4
setup: don't skip the search for global hg.exe if there is no local instance
The point of trying not to blindly execute `hg` on Windows is that the local
hg.exe would be given precedence, and if py3 isn't on PATH, it errors out with a
modal dialog. But that's not a problem if there is no local executable that
could be run.
The problem that I recently ran into was I upgraded the repo format to use zstd.
But doing a `make clean` deletes all of the supporting libraries, causing the
next run to abort with a message about not understanding the
`revlog-compression-zstd` requirement. By getting rid of the local executable
in the previous commit when cleaning, we avoid leaving a broken executable
around, and avoid the py3 PATH problem too. There is still a small hole in that
`hg.exe` needs to be deleted before switching between py2/py3/PyOxidizer builds,
because the zstd module won't load. But that seems like good hygiene anyway.
Differential Revision: https://phab.mercurial-scm.org/D8038
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Tue, 28 Jan 2020 22:27:30 -0500 |
parents | 2372284d9457 |
children | c102b704edb5 |
line wrap: on
line source
#!/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' from __future__ import absolute_import, print_function import struct import sys 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()