diff mercurial/utils/procutil.py @ 37124:6715e8035b4f

procutil: introduce context-manager interface for protect/restorestdio The code looks slightly cleaner since it was pretty easy to pass arguments in wrong order.
author Yuya Nishihara <yuya@tcha.org>
date Sun, 25 Mar 2018 11:58:05 +0900
parents 0216232f21ab
children ac71cbad5da3
line wrap: on
line diff
--- a/mercurial/utils/procutil.py	Sun Mar 25 11:40:30 2018 +0900
+++ b/mercurial/utils/procutil.py	Sun Mar 25 11:58:05 2018 +0900
@@ -9,6 +9,7 @@
 
 from __future__ import absolute_import
 
+import contextlib
 import imp
 import io
 import os
@@ -240,6 +241,15 @@
             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):