mercurial/util.py
changeset 1609 c50bddfbc812
parent 1594 a329e0fda2ae
child 1610 84e9b3484ff6
equal deleted inserted replaced
1608:722fd16f6f8c 1609:c50bddfbc812
    11 """
    11 """
    12 
    12 
    13 import os, errno
    13 import os, errno
    14 from i18n import gettext as _
    14 from i18n import gettext as _
    15 from demandload import *
    15 from demandload import *
    16 demandload(globals(), "re cStringIO shutil popen2 sys tempfile threading time")
    16 demandload(globals(), "cStringIO errno popen2 re shutil sys tempfile")
       
    17 demandload(globals(), "threading time")
    17 
    18 
    18 def pipefilter(s, cmd):
    19 def pipefilter(s, cmd):
    19     '''filter string S through command CMD, returning its output'''
    20     '''filter string S through command CMD, returning its output'''
    20     (pout, pin) = popen2.popen2(cmd, -1, 'b')
    21     (pout, pin) = popen2.popen2(cmd, -1, 'b')
    21     def writer():
    22     def writer():
   440 
   441 
   441 # Platform specific variants
   442 # Platform specific variants
   442 if os.name == 'nt':
   443 if os.name == 'nt':
   443     demandload(globals(), "msvcrt")
   444     demandload(globals(), "msvcrt")
   444     nulldev = 'NUL:'
   445     nulldev = 'NUL:'
   445     
   446 
       
   447     class winstdout:
       
   448         '''stdout on windows misbehaves if sent through a pipe'''
       
   449 
       
   450         def __init__(self, fp):
       
   451             self.fp = fp
       
   452 
       
   453         def __getattr__(self, key):
       
   454             return getattr(self.fp, key)
       
   455 
       
   456         def close(self):
       
   457             try:
       
   458                 self.fp.close()
       
   459             except: pass
       
   460 
       
   461         def write(self, s):
       
   462             try:
       
   463                 return self.fp.write(s)
       
   464             except IOError, inst:
       
   465                 if inst.errno != 0: raise
       
   466                 self.close()
       
   467                 raise IOError(errno.EPIPE, 'Broken pipe')
       
   468 
       
   469     sys.stdout = winstdout(sys.stdout)
       
   470 
   446     try:
   471     try:
   447         import win32api, win32process
   472         import win32api, win32process
   448         filename = win32process.GetModuleFileNameEx(win32api.GetCurrentProcess(), 0)
   473         filename = win32process.GetModuleFileNameEx(win32api.GetCurrentProcess(), 0)
   449         systemrc = os.path.join(os.path.dirname(filename), 'mercurial.ini')
   474         systemrc = os.path.join(os.path.dirname(filename), 'mercurial.ini')
   450         
   475 
   451     except ImportError:
   476     except ImportError:
   452         systemrc = r'c:\mercurial\mercurial.ini'
   477         systemrc = r'c:\mercurial\mercurial.ini'
   453         pass
   478         pass
   454 
   479 
   455     rcpath = (systemrc,
   480     rcpath = (systemrc,