# HG changeset patch # User Yuya Nishihara # Date 1537964953 -32400 # Node ID b0e3f2d7c143950cec4db974488db457a732acbc # Parent 4948b327d3b9c5dcd779ef2bff441c57dd4c9e49 ui: move protectedstdio() context manager from procutil This is a follow-up series for 23a00bc90a3c, "chgserver: do not send system() back to client if stdio redirected." The function is renamed using ui terms. diff -r 4948b327d3b9 -r b0e3f2d7c143 mercurial/commandserver.py --- a/mercurial/commandserver.py Thu Jan 10 21:29:24 2019 +0900 +++ b/mercurial/commandserver.py Wed Sep 26 21:29:13 2018 +0900 @@ -399,7 +399,7 @@ ui = self.ui # redirect stdio to null device so that broken extensions or in-process # hooks will never cause corruption of channel protocol. - with procutil.protectedstdio(ui.fin, ui.fout) as (fin, fout): + with ui.protectedfinout() as (fin, fout): sv = server(ui, self.repo, fin, fout) try: return sv.serve() diff -r 4948b327d3b9 -r b0e3f2d7c143 mercurial/ui.py --- a/mercurial/ui.py Thu Jan 10 21:29:24 2019 +0900 +++ b/mercurial/ui.py Wed Sep 26 21:29:13 2018 +0900 @@ -1080,6 +1080,15 @@ return False return procutil.isatty(fh) + @contextlib.contextmanager + def protectedfinout(self): + """Run code block with protected standard streams""" + fin, fout = procutil.protectstdio(self._fin, self._fout) + try: + yield fin, fout + finally: + procutil.restorestdio(self._fin, self._fout, fin, fout) + def disablepager(self): self._disablepager = True diff -r 4948b327d3b9 -r b0e3f2d7c143 mercurial/utils/procutil.py --- a/mercurial/utils/procutil.py Thu Jan 10 21:29:24 2019 +0900 +++ b/mercurial/utils/procutil.py Wed Sep 26 21:29:13 2018 +0900 @@ -299,15 +299,6 @@ os.dup2(f.fileno(), uif.fileno()) f.close() -@contextlib.contextmanager -def protectedstdio(uin, uout): - """Run code block with protected standard streams""" - fin, fout = protectstdio(uin, uout) - try: - yield fin, fout - finally: - restorestdio(uin, uout, fin, fout) - def shellenviron(environ=None): """return environ with optional override, useful for shelling out""" def py2shell(val):