# HG changeset patch # User Yuya Nishihara <y...@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): _______________________________________________ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel