Mercurial > hg
changeset 36526:7cc4a9b9732a
wireprotoserver: support logging SSH server I/O to a file descriptor
We will soon introduce a debug command and tests for low-level I/O
behavior of the SSH wire protocol.
To facilitate this, we need to instrument the SSH server so it
can log its I/O as events occur.
We teach the SSH server to convert its stdout and stderr file objects
into file object proxies. We configure these proxies to log to a
file descriptor whose file number is specified via a config option.
The idea is to have a future debug command start the SSH server
process with access to an extra file descriptor that can be used
by the server process to log I/O. Monitoring only the write I/O
will be more robust than monitoring both writes and reads from the
client process because read operations are not deterministic. This
will matter for tests that capture raw I/O activity.
Differential Revision: https://phab.mercurial-scm.org/D2463
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Sun, 25 Feb 2018 11:16:09 -0800 |
parents | 3158052720ae |
children | 44dc34b8d17b |
files | mercurial/wireprotoserver.py |
diffstat | 1 files changed, 8 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/wireprotoserver.py Sat Feb 24 12:24:03 2018 -0800 +++ b/mercurial/wireprotoserver.py Sun Feb 25 11:16:09 2018 -0800 @@ -588,12 +588,19 @@ state) class sshserver(object): - def __init__(self, ui, repo): + def __init__(self, ui, repo, logfh=None): self._ui = ui self._repo = repo self._fin = ui.fin self._fout = ui.fout + # Log write I/O to stdout and stderr if configured. + if logfh: + self._fout = util.makeloggingfileobject( + logfh, self._fout, 'o', logdata=True) + ui.ferr = util.makeloggingfileobject( + logfh, ui.ferr, 'e', logdata=True) + hook.redirect(True) ui.fout = repo.ui.fout = ui.ferr