mercurial/windows.py
changeset 43506 9f70512ae2cf
parent 43089 c59eb1560c44
child 43768 fe73ec69350e
equal deleted inserted replaced
43505:47fac1692ede 43506:9f70512ae2cf
    30 
    30 
    31     winreg.CloseKey
    31     winreg.CloseKey
    32 except ImportError:
    32 except ImportError:
    33     import winreg
    33     import winreg
    34 
    34 
    35 osutil = policy.importmod(r'osutil')
    35 osutil = policy.importmod('osutil')
    36 
    36 
    37 getfsmountpoint = win32.getvolumename
    37 getfsmountpoint = win32.getvolumename
    38 getfstype = win32.getfstype
    38 getfstype = win32.getfstype
    39 getuser = win32.getuser
    39 getuser = win32.getuser
    40 hidewindow = win32.hidewindow
    40 hidewindow = win32.hidewindow
    68     OPNONE = 0
    68     OPNONE = 0
    69     OPREAD = 1
    69     OPREAD = 1
    70     OPWRITE = 2
    70     OPWRITE = 2
    71 
    71 
    72     def __init__(self, fp):
    72     def __init__(self, fp):
    73         object.__setattr__(self, r'_fp', fp)
    73         object.__setattr__(self, '_fp', fp)
    74         object.__setattr__(self, r'_lastop', 0)
    74         object.__setattr__(self, '_lastop', 0)
    75 
    75 
    76     def __enter__(self):
    76     def __enter__(self):
    77         self._fp.__enter__()
    77         self._fp.__enter__()
    78         return self
    78         return self
    79 
    79 
    88 
    88 
    89     def _noopseek(self):
    89     def _noopseek(self):
    90         self._fp.seek(0, os.SEEK_CUR)
    90         self._fp.seek(0, os.SEEK_CUR)
    91 
    91 
    92     def seek(self, *args, **kwargs):
    92     def seek(self, *args, **kwargs):
    93         object.__setattr__(self, r'_lastop', self.OPNONE)
    93         object.__setattr__(self, '_lastop', self.OPNONE)
    94         return self._fp.seek(*args, **kwargs)
    94         return self._fp.seek(*args, **kwargs)
    95 
    95 
    96     def write(self, d):
    96     def write(self, d):
    97         if self._lastop == self.OPREAD:
    97         if self._lastop == self.OPREAD:
    98             self._noopseek()
    98             self._noopseek()
    99 
    99 
   100         object.__setattr__(self, r'_lastop', self.OPWRITE)
   100         object.__setattr__(self, '_lastop', self.OPWRITE)
   101         return self._fp.write(d)
   101         return self._fp.write(d)
   102 
   102 
   103     def writelines(self, *args, **kwargs):
   103     def writelines(self, *args, **kwargs):
   104         if self._lastop == self.OPREAD:
   104         if self._lastop == self.OPREAD:
   105             self._noopeseek()
   105             self._noopeseek()
   106 
   106 
   107         object.__setattr__(self, r'_lastop', self.OPWRITE)
   107         object.__setattr__(self, '_lastop', self.OPWRITE)
   108         return self._fp.writelines(*args, **kwargs)
   108         return self._fp.writelines(*args, **kwargs)
   109 
   109 
   110     def read(self, *args, **kwargs):
   110     def read(self, *args, **kwargs):
   111         if self._lastop == self.OPWRITE:
   111         if self._lastop == self.OPWRITE:
   112             self._noopseek()
   112             self._noopseek()
   113 
   113 
   114         object.__setattr__(self, r'_lastop', self.OPREAD)
   114         object.__setattr__(self, '_lastop', self.OPREAD)
   115         return self._fp.read(*args, **kwargs)
   115         return self._fp.read(*args, **kwargs)
   116 
   116 
   117     def readline(self, *args, **kwargs):
   117     def readline(self, *args, **kwargs):
   118         if self._lastop == self.OPWRITE:
   118         if self._lastop == self.OPWRITE:
   119             self._noopseek()
   119             self._noopseek()
   120 
   120 
   121         object.__setattr__(self, r'_lastop', self.OPREAD)
   121         object.__setattr__(self, '_lastop', self.OPREAD)
   122         return self._fp.readline(*args, **kwargs)
   122         return self._fp.readline(*args, **kwargs)
   123 
   123 
   124     def readlines(self, *args, **kwargs):
   124     def readlines(self, *args, **kwargs):
   125         if self._lastop == self.OPWRITE:
   125         if self._lastop == self.OPWRITE:
   126             self._noopseek()
   126             self._noopseek()
   127 
   127 
   128         object.__setattr__(self, r'_lastop', self.OPREAD)
   128         object.__setattr__(self, '_lastop', self.OPREAD)
   129         return self._fp.readlines(*args, **kwargs)
   129         return self._fp.readlines(*args, **kwargs)
   130 
   130 
   131 
   131 
   132 class fdproxy(object):
   132 class fdproxy(object):
   133     """Wraps osutil.posixfile() to override the name attribute to reflect the
   133     """Wraps osutil.posixfile() to override the name attribute to reflect the
   174 
   174 
   175         return fp
   175         return fp
   176     except WindowsError as err:
   176     except WindowsError as err:
   177         # convert to a friendlier exception
   177         # convert to a friendlier exception
   178         raise IOError(
   178         raise IOError(
   179             err.errno, r'%s: %s' % (encoding.strfromlocal(name), err.strerror)
   179             err.errno, '%s: %s' % (encoding.strfromlocal(name), err.strerror)
   180         )
   180         )
   181 
   181 
   182 
   182 
   183 # may be wrapped by win32mbcs extension
   183 # may be wrapped by win32mbcs extension
   184 listdir = osutil.listdir
   184 listdir = osutil.listdir
   213                 start = end
   213                 start = end
   214         except IOError as inst:
   214         except IOError as inst:
   215             if inst.errno != 0 and not win32.lasterrorwaspipeerror(inst):
   215             if inst.errno != 0 and not win32.lasterrorwaspipeerror(inst):
   216                 raise
   216                 raise
   217             self.close()
   217             self.close()
   218             raise IOError(errno.EPIPE, r'Broken pipe')
   218             raise IOError(errno.EPIPE, 'Broken pipe')
   219 
   219 
   220     def flush(self):
   220     def flush(self):
   221         try:
   221         try:
   222             return self.fp.flush()
   222             return self.fp.flush()
   223         except IOError as inst:
   223         except IOError as inst:
   224             if not win32.lasterrorwaspipeerror(inst):
   224             if not win32.lasterrorwaspipeerror(inst):
   225                 raise
   225                 raise
   226             raise IOError(errno.EPIPE, r'Broken pipe')
   226             raise IOError(errno.EPIPE, 'Broken pipe')
   227 
   227 
   228 
   228 
   229 def _is_win_9x():
   229 def _is_win_9x():
   230     '''return true if run on windows 95, 98 or me.'''
   230     '''return true if run on windows 95, 98 or me.'''
   231     try:
   231     try:
   684 
   684 
   685     return b''.join(chunks)
   685     return b''.join(chunks)
   686 
   686 
   687 
   687 
   688 def bindunixsocket(sock, path):
   688 def bindunixsocket(sock, path):
   689     raise NotImplementedError(r'unsupported platform')
   689     raise NotImplementedError('unsupported platform')