##// END OF EJS Templates
typing: add annotations to the `repository.peer` mixin class...
typing: add annotations to the `repository.peer` mixin class This was done investigating 199b0e62b403. AFAICT, the `path` is always a `urlutil.path`, and pytype complained when I first assumed it was bytes. `hg.peer()` also converts possible string input to this class. But in making it `urlutil.path`, PyCharm now flags `debugwireproto` because it passes bytes to `sshpeer.sshv1peer()`, and we do have test coverage for that command. Curious.

File last commit:

r53247:d4e30c15 default
r53415:5a924cb0 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)