
    	^cW              
       z   d dl Z d dlmZ d dlZd dlZd dlZd dlZd dlZddlm	Z	m
Z
 e j        j        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        xZZe j         Z!e!Z"e j         Z#ej$        Z% e!d          j&        Z'd Z(dZ)dZ*dZ+dZ,d	Z- e j.        e j                   e j.        e j                   k    re j        Z/e j        Z0n: e j.        e j1                   e j.        e j                   k    re j2        Z/e j1        Z0 G d
 de j3                  Z4 G d de j3                  Z5dZ6dZ7dZ8dZ9dZ:dZ;dZ<dZ=dZ> G d de j3                  Z? G d de j3                  Z@dZAd ZB G d de j3                  ZC G d de j3                  ZD G d d e j3                  ZE ed!          j&        ZF ed"          j&        ZGd#ZHdZId#ZJ G d$ d%e j3                  ZK G d& d'e j3                  ZL G d( d)e j3                  ZMee j        egejN        _O        e#ejN        _P        e j         e#e j         e j         e j         ee j         e j         gejQ        _O        eejQ        _P        e#gejR        _O        eejR        _P        eeee j         eee!gejS        _O        e!ejS        _P        e!e j         gejT        _O        eejT        _P        e!gejU        _O        eejU        _P        	 eee j         gejV        _O        eejV        _P        n# eW$ r Y nw xY weegejX        _O        eejX        _P        d ZYdZZdZ[dZ\dZ]d*Z^d+Z_egej`        _O        eej`        _P        ee j         ee j         e j         e j         e j         egeja        _O        eeja        _P        ee j         egejb        _O        eejb        _P        eeegejc        _O        e!ejc        _P        e!e j         gejd        _O        eejd        _P        g eje        _O        eeje        _P        e!e j         egejf        _O        eejf        _P        eee j         e j         eee j         ee j         e j         g
ejg        _O        eejg        _P        egejh        _O        dejh        _P        g eji        _O        eeji        _P         e jj        ee          Zkekegejl        _O        eejl        _P        e!egejm        _O        eejm        _P        e!e j         gejn        _O        eejn        _P        egejo        _O        e!ejo        _P        e!e j         gejp        _O        eejp        _P        e j         e j         gejq        _O        eejq        _P        e!e j         gejr        _O        eejr        _P        e!e js        gejt        _O        eejt        _P         e jj        ee"e0          Zueue0gejv        _O        eejv        _P        e!e j         ee j         e j         e j         gejw        _O        eejw        _P        d, Zxd- ZydBd/Zzd0 Z{d1 Z|d2 Z}d3 Z~d4 Zd5 Zd6 Zd7 Zd8 Zd9 Zd: Zg Zd; Zd< Zd= Zd> Zd? Zd@ ZdA ZdS )C    N   )encodingpycompat   W   m   z      c                       e Zd ZdefdefgZdS )	_FILETIMEdwLowDateTimedwHighDateTimeN)__name__
__module____qualname___DWORD_fields_     1/usr/lib/python3/dist-packages/mercurial/win32.pyr   r   <   s#         &),<f+EFHHHr   r   c                   N    e Zd 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dS )_BY_HANDLE_FILE_INFORMATIONdwFileAttributesftCreationTimeftLastAccessTimeftLastWriteTimedwVolumeSerialNumbernFileSizeHighnFileSizeLownNumberOfLinksnFileIndexHighnFileIndexLowN)r   r   r   r   r   r   r   r   r   r   r   @   se        	V$	9%	Y'	I&	(	&!	 	6"	6"	&!HHHr   r            i      i    i   i  c                       e Zd 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	dS )_STARTUPINFOcb
lpReserved	lpDesktoplpTitledwXdwYdwXSizedwYSizedwXCountCharsdwYCountCharsdwFillAttributedwFlagswShowWindowcbReserved2lpReserved2	hStdInput
hStdOutput	hStdErrorN)
r   r   r   r   _LPSTR_WORDctypesc_char_p_HANDLEr   r   r   r   r)   r)   c   s        	v	v	f	F			F	F	&!	&!	F#	F			(	g	w	g%HHHr   r)   c                   *    e Zd ZdefdefdefdefgZdS )_PROCESS_INFORMATIONhProcesshThreaddwProcessId
dwThreadIdN)r   r   r   r@   r   r   r   r   r   rB   rB   z   s5        	W	G		v	HHHr   rB   i   c                   2    e Zd Zdej        fdej        fgZdS )_COORDXYNr   r   r   r>   c_shortr   r   r   r   rH   rH      s&        fn%V^'<=HHHr   rH   c                   R    e Zd Zdej        fdej        fdej        fdej        fgZdS )_SMALL_RECTLeftTopRightBottomNrK   r   r   r   rN   rN      s=        	 		&.!	6>"	HHHr   rN   c                   0    e Zd ZdefdefdefdefdefgZdS )_CONSOLE_SCREEN_BUFFER_INFOdwSizedwCursorPositionwAttributessrWindowdwMaximumWindowSizeN)r   r   r   rH   r=   rN   r   r   r   r   rT   rT      s=        	6	V$		[!	'HHHr   rT   iii   c            
       \    e Zd Zdefdefdefdefdej        fdefdej        fdefd	eff	Zd
S )CERT_CHAIN_CONTEXTcbSizedwErrorStatusdwInfoStatuscChainrgpChaincLowerQualityChainContextrgpLowerQualityChainContextfHasRevocationFreshnessTimedwRevocationFreshnessTimeN)r   r   r   r   r>   c_void_p_BOOLr   r   r   r   r[   r[      sa        	6	&!	 	6	V_%	$f-	&8	&.	$f-HHHr   r[   c                   .    e Zd Zdefdefdej        ffZdS )CERT_USAGE_MATCHdwTypecUsageIdentifierrgpszUsageIdentifierN)r   r   r   r   r>   re   r   r   r   r   rh   rh      s/        	6	V$	1	HHHr   rh   c            
       \    e Zd Zdefdefdefdefdefdefdej        fdej        fd	eff	Zd
S )CERT_CHAIN_PARAr\   RequestedUsageRequestedIssuancePolicydwUrlRetrievalTimeoutfCheckRevocationFreshnessTimerd   pftCacheResyncpStrongSignParadwStrongSignFlagsN)	r   r   r   r   rh   rf   r>   re   r   r   r   r   rm   rm      sc        	6	+,	"$45	 &)	(%0	$f-	6?+	FO,	f%
HHHr   rm         c                     t                                           }|dk    r|dz  }t          j        |          }t	          |j        t          j        |           d|j                  )Nil        )codez: )		_kernel32GetLastErrorr>   WinErrorOSErrorerrnor   strfromlocalstrerror)namerx   errs      r   _raiseoserrorr   g  sn     !!##Dj
/t
$
$
$C
	x4T::::CLLI  r   c           	         t                               | dt          t          z  t          z  d t
          t          d           }|t          k    rt          |            	 t                      }t           
                    |t          j        |                    st          |            |t                               |           S # t                               |           w xY wNr   )ry   CreateFileA_FILE_SHARE_READ_FILE_SHARE_WRITE_FILE_SHARE_DELETE_OPEN_EXISTING_FILE_FLAG_BACKUP_SEMANTICS_INVALID_HANDLE_VALUEr   r   GetFileInformationByHandler>   byrefCloseHandle)r   fhfis      r   _getfileinfor   s  s    				,,/AA#
 
B 
"""d"(**33BR8H8HII 	 $b!!!!	b!!!!s   AC CTc                     t          j        t                    } |            }t          t          j        t                    t                                }t                              t          | t          |                     }|t          d           d}|s|dz  }	 t                              d|ddt          j        |          |dt          j        |                    st          d           |j        }|j        t          z  dk    |rt                              |           t                              |           S # |rt                              |           t                              |           w xY w)a  Tests the given certificate to see if there is a complete chain to a
    trusted root certificate.  As a side effect, missing certificates are
    downloaded and installed unless ``build=False``.  True is returned if a
    chain to a trusted root exists (even if built on the fly), otherwise
    False.  NB: A chain to a trusted root does NOT imply that the certificate
    is valid.
    )r\   rn   Ns   CertCreateCertificateContextr      s   CertGetCertificateChain)r>   POINTERr[   rm   sizeofrh   _crypt32CertCreateCertificateContextX509_ASN_ENCODINGlenr   CertGetCertificateChainr   contentsr]   CERT_TRUST_IS_PARTIAL_CHAINCertFreeCertificateChainCertFreeCertificateContext)certbuildchainctxptr	pchainctx	chainparacertctxflagschainctxs           r   checkcertificatechainr     sx    .!344KI}_-->N>P>P  I 334T G 5666E 5//L##L##	
 	
 
	6 4555%%(CCqH 	9--i888++G4444  	9--i888++G4444s   !A-E 8E=c                     	 t                               || d           st          |            d S d S # t          $ r t          |            Y d S w xY wN)ry   CreateHardLinkAr   AttributeError)srcdsts     r   oslinkr     sq    ((c488 	#	 	   cs   +1 AAc                 *    t          |           j        S )z-return number of hardlinks for the given file)r   r!   )r   s    r   nlinksr     s    ,,r   c                     t          |           }t          |          }|j        |j        k    o|j        |j        k    o|j        |j        k    S )zDReturns whether path1 and path2 refer to the same file or directory.)r   r   r"   r#   path1path2res1res2s       r   samefiler     sU    DD!T%>> 	54#66	5$"44r   c                 ^    t          |           }t          |          }|j        |j        k    S )z7Returns whether path1 and path2 are on the same device.)r   r   r   s       r   
samedevicer     s-    DD$(AAAr   c           	      N   t          j        |                                           }t                      }t                              |d dd t          j        |          d           s:t                                          }|t          k    rdS t          j
        |          |j        S r   )msvcrtget_osfhandlefilenor   ry   PeekNamedPiper>   r   rz   _ERROR_BROKEN_PIPEr{   value)pipehandleavailr   s       r   peekpiper     s    !$++--00FHHE""av|E22D  # $$&&$$$1oc""";r   c                     | j         t           j        k    rdS t                                          } | t          k    p
| t
          k    S )NF)r}   EINVALry   rz   r   _ERROR_NO_DATA)r   s    r   lasterrorwaspipeerrorr     s=    
yEL  u

 
 
"
"C$$=~(==r   c                    t                               t          d|           }|r	 t                      }t                               |t          j        |                    r*|j        t          k    t           	                    |           S 	 t           	                    |           n# t           	                    |           w xY wt           
                                t          k    S )zOreturn True if pid is still running or unable to
    determine, False otherwiseF)ry   OpenProcess_PROCESS_QUERY_INFORMATIONr   GetExitCodeProcessr>   r   r   _STILL_ACTIVEr   rz   _ERROR_INVALID_PARAMETER)pidhstatuss      r   testpidr     s     	8%EEA %	%XXF++Av|F/C/CDD 5|}4!!!$$$$5 !!!$$$$I!!!$$$$!!##'???s   A
B& &Cc                     d} t          j        | dz             }t                              dt          j        |          |           }|dk    rt          j                    || k    rt          j        t                    |j        S )zreturn full path of hg.exeiX  r   Nr   )r>   create_string_bufferry   GetModuleFileNameAr   r{   _ERROR_INSUFFICIENT_BUFFERr   )sizebufr   s      r   executablepathr     su    D

%dQh
/
/C

&
&tV\#->->
E
EC
axxo	o89999r   c                 B   t           j                            |           }t          t	          |          t
                    dz   }t          j        |          }t          	                    |t          j
        |          |          st          j                    |j        S )zGet the mount point of the filesystem from a directory or file
    (best-effort)

    Returns None if we are unsure. Raises OSError on ENOENT, EPERM, etc.
    r   )ospathrealpathmaxr   	_MAX_PATHr>   r   ry   GetVolumePathNameAr   r{   r   )r   r   r   r   s       r   getvolumenamer     s     w%%H s8}}i((1,D

%d
+
+C''&,s2C2CTJJ  o9r   c                    t          |           }t                              |          }|t          k    rdS |t          t
          t          t          fvrdS t          dz   }t          j
        |          }t                              |dddddt          j        |          |          st          j                    |j        S )zGet the filesystem type name from a directory or file (best-effort)

    Returns None if we are unsure. Raises OSError on ENOENT, EPERM, etc.
    s   cifsNr   r   )r   ry   GetDriveTypeA_DRIVE_REMOTE_DRIVE_REMOVABLE_DRIVE_FIXED_DRIVE_CDROM_DRIVE_RAMDISKr   r>   r   GetVolumeInformationAr   r{   r   )r   volumetr   r   s        r   	getfstyper      s    
 4  F''AMw	
	 
 
 tq=D&t,,D**atT6<+=+=t    o:r   c                  
   t          d          } t          j        | j        dz             }t                              t          j        |          t          j        |                     st          j                    |j        S )zreturn name of current useri,  r   )r   r>   r   r   	_advapi32GetUserNameAr   r{   )r   r   s     r   getuserr   ?  se    #;;D

%dj1n
5
5C!!&,s"3"3V\$5G5GHH  o9r   c                      d } t           rdS t          |           }t                               |           t                              |d          st          j                    dS )zRegister a termination handler for console events including
    CTRL+C. python signal handlers do not work well with socket
    operations.
    c                 :    t                               d           d S )Nr   )ry   ExitProcess)events    r   handlerz!setsignalhandler.<locals>.handlerQ  s    a     r   NT)_signalhandler_SIGNAL_HANDLERappendry   SetConsoleCtrlHandlerr>   r{   )r   r   s     r   setsignalhandlerr   K  sq    ! ! !    A!**1d33  o   r   c                      d } t                                           }t                              t	          |           |           d S )Nc                     t                      }t                              | t          j        |                     ||j        k    r"t                              | t                     dS dS )NFT)r   _user32GetWindowThreadProcessIdr>   r   r   
ShowWindow_SW_HIDE)hwndr   wpids      r   callbackzhidewindow.<locals>.callback]  sX    xx((v|D/A/ABBB$*tX...5tr   )ry   GetCurrentProcessIdr   EnumWindows_WNDENUMPROC)r  r   s     r   
hidewindowr  \  sH       
'
'
)
)CX..44444r   c                  Z   d} d}t                               t                    }||t          k    r| |fS t	                      }t                               |t          j        |                    s| |fS |j        j	        |j        j
        z
  } |j        j        |j        j        z
  dz   }| |fS )NO      r   )ry   GetStdHandle_STD_ERROR_HANDLEr   rT   GetConsoleScreenBufferInfor>   r   rX   rQ   rO   rR   rP   )widthheight	screenbufcsbis       r   termsizer  i  s    
 EF&& I I)>>>f}&((D//	6<;M;MNN f}M$-"44E]!DM$559F&=r   c                  T   d} t                               t                    }|t          k    rdS t	          d          }t                               |t          j        |                    sdS |j        | z  dk    r-|xj        | z  c_        t           	                    ||          sdS dS )zaEnable virtual terminal mode for the associated console.  Return True if
    enabled, else False.r%   Fr   T)
ry   r  _STD_OUTPUT_HANDLEr   r   GetConsoleModer>   r   r   SetConsoleMode)"ENABLE_VIRTUAL_TERMINAL_PROCESSINGr   modes      r   enablevtmoder  ~  s     *-&## F &&&u!99D##FFL,>,>?? u
77A==

88

''55 	54r   c                    t                      }t          j        t                     |_        t	                      }d}t
          j        D ]}|d|t
          j        |         fz  z  }|sd}|dz  }t          j        t          j
        t
          j        |                     } t                              d t          j        |           d d dt          |t          j                    t          j        |          t          j        |          
  
        }|st          j                    t                              |j                   t                              |j                   |j        S )Nr   s   %s=%s     F)r)   r>   r   r*   rB   r   environ
subprocesslist2cmdliner   rapplyr~   ry   CreateProcessA
strtolocal_CREATE_NO_WINDOWgetcwdr   r{   r   rC   rD   rE   )argssipienvkress         r   spawndetachedr*    s;    
BM,''BE			B
C 5 5zQ 0 3444 5LC"8?83H$#O#OPPD 
"
"D!!RR C   o"+&&&"*%%%>r   c                 V   t           j                            |           r/t          t          j        dt          j        |           z            t          d          D ]C}d| t          j
        dd          fz  }	 t          j        | |            n*# t          $ r Y @w xY wt          t          j        d          	 t          j        |           dS # t          $ rK t                               |t$                     	 t          j        |           Y dS # t          $ r Y Y dS w xY ww xY w)z3try to implement POSIX' unlink semantics on Windowsz'Unlinking directory not permitted: '%s'
   s   %s-%08xr   l    z"No usable temporary filename foundN)r   r   isdirIOErrorr}   EPERMr   r~   rangerandomrandintrenameFileExistsErrorEEXISTunlinkr|   ry   SetFileAttributesA_FILE_ATTRIBUTE_NORMAL)ftriestemps      r   r6  r6    sV    
w}}Q 
 K6#A&&'
 
 	
. r J JQq* = =>>	IaE 	 	 	D	 el$HIII
	$    	$$T+ABBB	IdOOOOOO 	 	 	 DDD		s<   ;B
BB=C *D(>D
D$D(#D$$D(c                 v    t          j        |            |r"t                              | t                     d S d S r   )r   mkdirry   r7  #_FILE_ATTRIBUTE_NOT_CONTENT_INDEXED)r   
notindexeds     r   makedirr@    sA    HTNNN P$$T+NOOOOOP Pr   )T)r>   ctypes.wintypeswintypesr}   r   r   r1  r   r   r   windllkernel32ry   advapi32r   user32r   crypt32r   c_longrf   c_ushortr=   c_ulongr   c_uint_UINT_LONGr?   _LPCSTRr<   re   r@   _HWND_PCCERT_CONTEXTMAX_PATHr   r   r   _ERROR_SUCCESS_ERROR_NO_MORE_FILESr   r   r   r   r   _WPARAM_LPARAM
c_longlongc_ulonglong	Structurer   r   r   r   r   r   r   r8  r>  r   r   r)   rB   r"  r   rH   rN   rT   r  r  r   r   PKCS_7_ASN_ENCODINGr[   rh   rm   r   argtypesrestyper   r   r   r   r   r   r   r7  _DRIVE_UNKNOWN_DRIVE_NO_ROOT_DIRr   r   r   r   r   r   r   r   r   r   rz   r   r   r   r  WINFUNCTYPEr   r   r  r  r  r  r   r   c_intr   r  r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r*  r6  r@  r   r   r   <module>ra     sj	    " " " " " "   				             M"	M"	
-
=  		? "&
//	)        6==6=#A#AAAnGmGGV]6$%%v)G)GGG GGG G G G G  G G G    &"2        (   &, # $      6#   .    6+     > > > > >V > > >    &"       &"2    VC[[& F3KK%  &         )       v'       f&   " 
O
2 % .
 1@ % - O
O
O
O

O
O	-   ) ,1   (0?/@ # ,.3 # + 


O

"	   !(	  18&/0J	 $ -/4	 $ ,")	   %	  	*17FO)LI&(-I%% 	 	 	D	 *1&(9	  %',	  $  $+9	   "'	   
O

O
O
O
O
	,	  ( +0	  ')0&/6(J	  %',	  $"(%!8	   '	  )0&/(B	  %',	  $"$	  !'	  )0&/6(J	  %'-	  $ 
O
O	

O
O
O%	  ! $)	   "'	   $	  )+	  &(.	  % %&$UF33,;U+C	  (*/	  '%,f$5	  !#(	   %,fo$>	  !#(	   #)(	  !(	  18&/0J	 $ -/4	 $ ,#)?FO"D	  !&	  -4fo,F   )+1   (&5  "   "v!%88 ,g6  #   
O

O
O
O$	    #(	  	 	 	" " "*/5 /5 /5 /5d  - - -
  B B B  > > >@ @ @    *  >        "
5 
5 
5  *  4' ' 'T4 4 4nP P P P Ps   9 L L"!L"