##// END OF EJS Templates
wirepeer: subclass new `repository.ipeer{,legacy}commands` Proctocol classes...
wirepeer: subclass new `repository.ipeer{,legacy}commands` Proctocol classes This is the same transformation as 3a90a6fd710d did for dirstate, but the CamelCase naming was already cleaned up here. See 4ef6dbc27a99 for the benefits of explicit subclassing. PyCharm is flagging the `wirepeer.getbundle` function with: Type of 'getbundle' is incompatible with 'ipeercommands' I've no idea why- maybe it's because it can infer a `unbundle20 | cg1unpacker` return there, or maybe it's the kwargs. Something to keep an eye on, but pytype doesn't complain. Since we're direct subclassing here and there are only a few methods on these interfaces, also make them abstract like was done in ef119f914fc1.

File last commit:

r53247:d4e30c15 default
r53394:61f70a6a default
Show More
ps_util.py
53 lines | 1.3 KiB | text/x-python | PythonLexer
# This python code can be imported into tests in order to terminate a process
# with signal.SIGKILL on posix, or a roughly equivalent procedure on Windows.
from __future__ import annotations
import os
import signal
import subprocess
import sys
import tempfile
from .. import (
encoding,
pycompat,
)
from ..utils import procutil
def kill_nt(pid: int, exit_code: int):
fd, pidfile = tempfile.mkstemp(
prefix=b"sigkill-", dir=encoding.environ[b"HGTMP"], text=False
)
try:
os.write(fd, b'%d\n' % pid)
finally:
os.close(fd)
env = dict(encoding.environ)
env[b"DAEMON_EXITCODE"] = b"%d" % exit_code
# Simulate the message written to stderr for this process on non-Windows
# platforms, for test consistency.
print("Killed!", file=sys.stderr)
subprocess.run(
[
encoding.environ[b"PYTHON"],
b"%s/killdaemons.py"
% encoding.environ[b'RUNTESTDIR_FORWARD_SLASH'],
pidfile,
],
env=procutil.tonativeenv(env),
)
def kill(pid: int):
"""Kill the process with the given PID with SIGKILL or equivalent."""
if pycompat.iswindows:
exit_code = 128 + 9
kill_nt(pid, exit_code)
else:
os.kill(pid, signal.SIGKILL)