ui: move protectedstdio() context manager from procutil
authorYuya Nishihara <yuya@tcha.org>
Wed, 26 Sep 2018 21:29:13 +0900
changeset 41284 b0e3f2d7c143
parent 41283 4948b327d3b9
child 41285 cf8677cd7286
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.
mercurial/commandserver.py
mercurial/ui.py
mercurial/utils/procutil.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()
--- 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
 
--- 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):