indygreg created this revision. Herald added a subscriber: mercurial-devel. Herald added a reviewer: hg-reviewers.
REVISION SUMMARY 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. REPOSITORY rHG Mercurial REVISION DETAIL https://phab.mercurial-scm.org/D2463 AFFECTED FILES mercurial/wireprotoserver.py CHANGE DETAILS diff --git a/mercurial/wireprotoserver.py b/mercurial/wireprotoserver.py --- a/mercurial/wireprotoserver.py +++ b/mercurial/wireprotoserver.py @@ -7,6 +7,7 @@ from __future__ import absolute_import import contextlib +import os import struct import sys import threading @@ -588,12 +589,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 To: indygreg, #hg-reviewers Cc: mercurial-devel _______________________________________________ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel