mercurial/utils/procutil.py
changeset 37124 6715e8035b4f
parent 37123 0216232f21ab
child 37219 ac71cbad5da3
equal deleted inserted replaced
37123:0216232f21ab 37124:6715e8035b4f
     7 # This software may be used and distributed according to the terms of the
     7 # This software may be used and distributed according to the terms of the
     8 # GNU General Public License version 2 or any later version.
     8 # GNU General Public License version 2 or any later version.
     9 
     9 
    10 from __future__ import absolute_import
    10 from __future__ import absolute_import
    11 
    11 
       
    12 import contextlib
    12 import imp
    13 import imp
    13 import io
    14 import io
    14 import os
    15 import os
    15 import signal
    16 import signal
    16 import subprocess
    17 import subprocess
   238     for f, uif in [(fin, uin), (fout, uout)]:
   239     for f, uif in [(fin, uin), (fout, uout)]:
   239         if f is not uif:
   240         if f is not uif:
   240             os.dup2(f.fileno(), uif.fileno())
   241             os.dup2(f.fileno(), uif.fileno())
   241             f.close()
   242             f.close()
   242 
   243 
       
   244 @contextlib.contextmanager
       
   245 def protectedstdio(uin, uout):
       
   246     """Run code block with protected standard streams"""
       
   247     fin, fout = protectstdio(uin, uout)
       
   248     try:
       
   249         yield fin, fout
       
   250     finally:
       
   251         restorestdio(uin, uout, fin, fout)
       
   252 
   243 def shellenviron(environ=None):
   253 def shellenviron(environ=None):
   244     """return environ with optional override, useful for shelling out"""
   254     """return environ with optional override, useful for shelling out"""
   245     def py2shell(val):
   255     def py2shell(val):
   246         'convert python object into string that is useful to shell'
   256         'convert python object into string that is useful to shell'
   247         if val is None or val is False:
   257         if val is None or val is False: