
8Qc        
   @   s  d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l Z e  j j Z e  j j Z	 e  j j
 Z e  j Z e  j Z e  j Z e  j Z e  j Z e  j Z Z e  j Z e Z e d   j Z d Z d Z d Z e  j  e  j  e  j  e  j  k re  j Z! e  j Z" n9 e  j  e  j#  e  j  e  j  k r<e  j$ Z! e  j# Z" n  d e  j% f d     YZ& d e  j% f d     YZ' d	 Z( d
 Z) d Z* d Z+ d Z, d Z- d Z. d Z/ d Z0 d e  j% f d     YZ1 d e  j% f d     YZ2 d Z3 d Z4 d e  j% f d     YZ5 d e  j% f d     YZ6 d e  j% f d     YZ7 e d  j Z8 e e e e  j e e e g e j9 _: e e j9 _; e e  j g e j< _: e e j< _; e g e j= _: e e j= _; y( e e e  j g e j> _: e e j> _; Wn e? k
 rn Xe e g e j@ _: e e j@ _; e e e g e jA _: e e jA _; e e  j g e jB _: e e jB _; g  e jC _: e e jC _; e e  j e g e jD _: e e jD _; e e e  j e  j e e e  j e e  j e  j g
 e jE _: e e jE _; e g e jF _: d e jF _; g  e jH _: e e jH _; e  jI e e  ZJ eJ e g e jK _: e e jK _; e g e jL _: e e jL _; e e  j g e jM _: e e jM _; e  j e  j g e	 jN _: e e	 jN _; e e  j g e jO _: e e jO _; e e  jP g e jQ _: e e jQ _; e  jI e e e"  ZR eR e" g e jS _: e e jS _; d   ZT d   ZU d    ZV d!   ZW d"   ZX d#   ZY d$   ZZ d%   Z[ d&   Z\ g  Z] d'   Z^ d(   Z_ d)   Z` d*   Za d+   Zb d,   Zc d S(-   iNi    iW   iz   t	   _FILETIMEc           B   s    e  Z d  e f d e f g Z RS(   t   dwLowDateTimet   dwHighDateTime(   t   __name__t
   __module__t   _DWORDt   _fields_(    (    (    s3   /sys/lib/python2.7/site-packages/mercurial/win32.pyR    '   s   	t   _BY_HANDLE_FILE_INFORMATIONc           B   sh   e  Z d  e f d e f d e f d e f d e f d e f d e f d e f d e f d	 e f g
 Z RS(
   t   dwFileAttributest   ftCreationTimet   ftLastAccessTimet   ftLastWriteTimet   dwVolumeSerialNumbert   nFileSizeHight   nFileSizeLowt   nNumberOfLinkst   nFileIndexHight   nFileIndexLow(   R   R   R   R    R   (    (    (    s3   /sys/lib/python2.7/site-packages/mercurial/win32.pyR   +   s   									i   i   i   i   i   i   i    i   i  t   _STARTUPINFOc           B   s   e  Z d  e f d e f d e f d e f d e f d e f d e f d e f d e f d	 e f d
 e f d e f d e f d e f d e j f d e f d e f d e f g Z RS(   t   cbt
   lpReservedt	   lpDesktopt   lpTitlet   dwXt   dwYt   dwXSizet   dwYSizet   dwXCountCharst   dwYCountCharst   dwFillAttributet   dwFlagst   wShowWindowt   cbReserved2t   lpReserved2t	   hStdInputt
   hStdOutputt	   hStdError(	   R   R   R   t   _LPSTRt   _WORDt   ctypest   c_char_pt   _HANDLER   (    (    (    s3   /sys/lib/python2.7/site-packages/mercurial/win32.pyR   J   s$   																t   _PROCESS_INFORMATIONc           B   s2   e  Z d  e f d e f d e f d e f g Z RS(   t   hProcesst   hThreadt   dwProcessIdt
   dwThreadId(   R   R   R)   R   R   (    (    (    s3   /sys/lib/python2.7/site-packages/mercurial/win32.pyR*   ^   s   			i   t   _COORDc           B   s&   e  Z d  e j f d e j f g Z RS(   t   Xt   Y(   R   R   R'   t   c_shortR   (    (    (    s3   /sys/lib/python2.7/site-packages/mercurial/win32.pyR/   g   s   t   _SMALL_RECTc           B   s>   e  Z d  e j f d e j f d e j f d e j f g Z RS(   t   Leftt   Topt   Rightt   Bottom(   R   R   R'   R2   R   (    (    (    s3   /sys/lib/python2.7/site-packages/mercurial/win32.pyR3   k   s   t   _CONSOLE_SCREEN_BUFFER_INFOc           B   s;   e  Z d  e f d e f d e f d e f d e f g Z RS(   t   dwSizet   dwCursorPositiont   wAttributest   srWindowt   dwMaximumWindowSize(   R   R   R/   R&   R3   R   (    (    (    s3   /sys/lib/python2.7/site-packages/mercurial/win32.pyR8   q   s
   				ic         C   s/   t  j   } t | j d |  | j f   d  S(   Ns   %s: %s(   R'   t   WinErrort   OSErrort   errnot   strerror(   t   namet   err(    (    s3   /sys/lib/python2.7/site-packages/mercurial/win32.pyt   _raiseoserror   s    c         C   s   t  j |  d t t Bt Bd  t t d   } | t k rB t	 |   n  z9 t
   } t  j | t j |   sv t	 |   n  | SWd  t  j |  Xd  S(   Ni    (   t	   _kernel32t   CreateFileAt   _FILE_SHARE_READt   _FILE_SHARE_WRITEt   _FILE_SHARE_DELETEt   Nonet   _OPEN_EXISTINGt   _FILE_FLAG_BACKUP_SEMANTICSt   _INVALID_HANDLE_VALUERD   R   t   GetFileInformationByHandleR'   t   byreft   CloseHandle(   RB   t   fht   fi(    (    s3   /sys/lib/python2.7/site-packages/mercurial/win32.pyt   _getfileinfo   s    	c         C   sH   y& t  j | |  d   s% t |   n  Wn t k
 rC t |   n Xd  S(   N(   RE   t   CreateHardLinkARJ   RD   t   AttributeError(   t   srct   dst(    (    s3   /sys/lib/python2.7/site-packages/mercurial/win32.pyt   oslink   s
    c         C   s   t  |   j S(   s-   return number of hardlinks for the given file(   RS   R   (   RB   (    (    s3   /sys/lib/python2.7/site-packages/mercurial/win32.pyt   nlinks   s    c         C   sL   t  |   } t  |  } | j | j k oK | j | j k oK | j | j k S(   sD   Returns whether path1 and path2 refer to the same file or directory.(   RS   R   R   R   (   t   path1t   path2t   res1t   res2(    (    s3   /sys/lib/python2.7/site-packages/mercurial/win32.pyt   samefile   s
    c         C   s(   t  |   } t  |  } | j | j k S(   s7   Returns whether path1 and path2 are on the same device.(   RS   R   (   RZ   R[   R\   R]   (    (    s3   /sys/lib/python2.7/site-packages/mercurial/win32.pyt
   samedevice   s    c         C   st   t  j t t |   } | rd z5 t   } t  j | t j |   rO | j t	 k SWd t  j
 |  Xn  t  j   t k S(   sO   return True if pid is still running or unable to
    determine, False otherwiseN(   RE   t   OpenProcesst   _PROCESS_QUERY_INFORMATIONt   FalseR   t   GetExitCodeProcessR'   RO   t   valuet   _STILL_ACTIVERP   t   GetLastErrort   _ERROR_INVALID_PARAMETER(   t   pidt   ht   status(    (    s3   /sys/lib/python2.7/site-packages/mercurial/win32.pyt   testpid   s    	c          C   st   d }  t  j |  d  } t j d t  j |  |   } | d k rO t  j  n | |  k rm t  j t   n  | j S(   s   return full path of hg.exeiX  i   i    N(	   R'   t   create_string_bufferRE   t   GetModuleFileNameARJ   RO   R>   t   _ERROR_INSUFFICIENT_BUFFERRd   (   t   sizet   buft   len(    (    s3   /sys/lib/python2.7/site-packages/mercurial/win32.pyt   executablepath   s    c          C   sY   t  d  }  t j |  j d  } t j t j |  t j |    sR t j  n  | j S(   s   return name of current useri,  i   (   R   R'   Rl   Rd   t	   _advapi32t   GetUserNameARO   R>   (   Ro   Rp   (    (    s3   /sys/lib/python2.7/site-packages/mercurial/win32.pyt   getuser   s
    $c          C   sN   d   }  t  r d St |   } t  j |  t j | t  sJ t j  n  d S(   s   Register a termination handler for console events including
    CTRL+C. python signal handlers do not work well with socket
    operations.
    c         S   s   t  j d  d  S(   Ni   (   RE   t   ExitProcess(   t   event(    (    s3   /sys/lib/python2.7/site-packages/mercurial/win32.pyt   handler  s    N(   t   _signalhandlert   _SIGNAL_HANDLERt   appendRE   t   SetConsoleCtrlHandlert   TrueR'   R>   (   Rx   Ri   (    (    s3   /sys/lib/python2.7/site-packages/mercurial/win32.pyt   setsignalhandler
  s    	c          C   s/   d   }  t  j   } t j t |   |  d  S(   Nc         S   sI   t    } t j |  t j |   | | j k rE t j |  t  t St	 S(   N(
   R   t   _user32t   GetWindowThreadProcessIdR'   RO   Rd   t
   ShowWindowt   _SW_HIDERb   R}   (   t   hwndRh   t   wpid(    (    s3   /sys/lib/python2.7/site-packages/mercurial/win32.pyt   callback  s    	(   RE   t   GetCurrentProcessIdR   t   EnumWindowst   _WNDENUMPROC(   R   Rh   (    (    s3   /sys/lib/python2.7/site-packages/mercurial/win32.pyt
   hidewindow  s    	c          C   ss   d }  t  j t  } | d  k s- | t k r1 |  St   } t  j | t j |   sY |  S| j	 j
 | j	 j }  |  S(   NiO   (   RE   t   GetStdHandlet   _STD_ERROR_HANDLERJ   RM   R8   t   GetConsoleScreenBufferInfoR'   RO   R<   R6   R4   (   t   widtht	   screenbuft   csbi(    (    s3   /sys/lib/python2.7/site-packages/mercurial/win32.pyt	   termwidth&  s    		c         C   s   t    } t j t   | _ t   } d } x, t j D]! } | d | t j | f 7} q4 W| sh d } n  | d 7} t j |   }  t j j	 d d  } | d |  }  t
 j d  |  d  d  t t | t j   t j |  t j |  
 } | s t j  n  | j S(   Nt    s   %s=%s t    t   COMSPECs   cmd.exes    /c (   R   R'   t   sizeofR   R*   t   ost   environt
   subprocesst   list2cmdlinet   getRE   t   CreateProcessARJ   Rb   t   _CREATE_NO_WINDOWt   getcwdRO   R>   R-   (   t   argst   sit   pit   envt   kt   comspect   res(    (    s3   /sys/lib/python2.7/site-packages/mercurial/win32.pyt   spawndetached8  s$    			
*c         C   s  t  j j |   r+ t t j d |    n  x t d  D]e } d |  t j d d  f } y t  j	 |  |  PWq8 t
 k
 r } | j t j k r   q q8 Xq8 Wt t j d   y t  j |  WnF t
 k
 rt j | t  y t  j |  Wqt
 k
 rqXn Xd S(   s3   try to implement POSIX' unlink semantics on Windowss'   Unlinking directory not permitted: '%s'i
   s   %s-%08xi    l    s"   No usable temporary filename foundN(   R   t   patht   isdirt   IOErrorR@   t   EPERMt   xranget   randomt   randintt   renameR?   t   EEXISTt   unlinkRE   t   SetFileAttributesAt   _FILE_ATTRIBUTE_NORMAL(   t   ft   triest   tempt   e(    (    s3   /sys/lib/python2.7/site-packages/mercurial/win32.pyR   X  s(    	c         C   s*   t  j |   | r& t j |  t  n  d  S(   N(   R   t   mkdirRE   R   t#   _FILE_ATTRIBUTE_NOT_CONTENT_INDEXED(   R   t
   notindexed(    (    s3   /sys/lib/python2.7/site-packages/mercurial/win32.pyt   makedir  s    (d   R'   R@   R   R   R   t   windllt   kernel32RE   t   advapi32Rs   t   user32R   t   c_longt   _BOOLt   c_ushortR&   t   c_ulongR   t   c_uintt   _UINTt   _LONGR(   t   _LPCSTRR%   t   c_void_pR)   t   _HWNDRd   RM   t   _ERROR_SUCCESSRg   Rn   R   t   _WPARAMt   _LPARAMt
   c_longlongt   c_ulonglongt	   StructureR    R   RG   RH   RI   RK   RL   R   R   Ra   Re   R   R*   R   R   R/   R3   R8   R   RF   t   argtypest   restypeRN   RP   RT   RU   R   R`   Rc   Rf   Rm   R   Rv   RJ   R   t   WINFUNCTYPERz   R|   R   R   Rt   R   t   c_intR   R   R   RD   RS   RX   RY   R^   R_   Rk   Rr   Ru   Ry   R~   R   R   R   R   R   (    (    (    s3   /sys/lib/python2.7/site-packages/mercurial/win32.pyt   <module>   s   <						$	$														 	4