[PATCH 3 of 3] sshserver: redirect stdin/stdout early and use duplicated streams
Yuya Nishihara
yuya at tcha.org
Mon May 7 09:11:24 EDT 2018
# HG changeset patch
# User Yuya Nishihara <yuya at tcha.org>
# Date 1521964053 -32400
# Sun Mar 25 16:47:33 2018 +0900
# Node ID a7e53b70e5026bac9772f9869e754a2a6f530587
# Parent ea801aa5d559e37f68fb9bdda47dec6e58abcb88
sshserver: redirect stdin/stdout early and use duplicated streams
This is what we achieved with hook.redirect(True) plus ui.fout = ui.ferr.
The hook.redirect() function can't be completely removed yet since hgweb
still depends on it. I'm not sure if it is necessary for WSGI servers. CGI
needs it, but does WSGI communicate over stdin/stdout channels?
diff --git a/mercurial/wireprotoserver.py b/mercurial/wireprotoserver.py
--- a/mercurial/wireprotoserver.py
+++ b/mercurial/wireprotoserver.py
@@ -18,7 +18,6 @@ from .thirdparty import (
from . import (
encoding,
error,
- hook,
pycompat,
util,
wireprototypes,
@@ -785,8 +784,7 @@ class sshserver(object):
def __init__(self, ui, repo, logfh=None):
self._ui = ui
self._repo = repo
- self._fin = ui.fin
- self._fout = ui.fout
+ self._fin, self._fout = procutil.protectstdio(ui.fin, ui.fout)
# Log write I/O to stdout and stderr if configured.
if logfh:
@@ -795,11 +793,10 @@ class sshserver(object):
ui.ferr = util.makeloggingfileobject(
logfh, ui.ferr, 'e', logdata=True)
- hook.redirect(True)
- ui.fout = repo.ui.fout = ui.ferr
-
def serve_forever(self):
self.serveuntil(threading.Event())
+ procutil.restorestdio(self._ui.fin, self._ui.fout,
+ self._fin, self._fout)
sys.exit(0)
def serveuntil(self, ev):
More information about the Mercurial-devel
mailing list