
    q&fiY              
       8   U 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
mZm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 j2                  Ze j6                  Ze j:                  Ze j>                  Z e j2                  Z!e jD                  xZ#Z$e jJ                  Z&e&Z'e jJ                  Z(ejR                  Z* e&d      jV                  Z,d Z-dZ.dZ/dZ0d	Z1d
Z2 e jf                  e j2                         e jf                  e jJ                        k(  re j:                  Z4e j2                  Z5nQ e jf                  e jl                         e jf                  e jJ                        k(  re jn                  Z4e jl                  Z5 G d de jp                        Z9 G d de jp                        Z:dZ;dZ<dZ=dZ>dZ?dZ@dZAdZBdZC G d de jp                        ZD G d de jp                        ZEdZFd ZG G d de jp                        ZH G d de jp                        ZI G d  d!e jp                        ZJ ed"      jV                  ZK ed#      jV                  ZLd$ZMdZNd$ZO G d% d&e jp                        ZP G d' d(e jp                        ZQ G d) d*e jp                        ZRee jD                  egej                  _T        e(ej                  _U        e jJ                  e(e jJ                  e jJ                  e jJ                  ee jJ                  e jJ                  gej                  _T        eej                  _U        e(gej                  _T        eej                  _U        e#eee jJ                  eee&gej                  _T        e&ej                  _U        e&e jJ                  gej                  _T        eej                  _U        e&gej                  _T        eej                  _U        	 e#e#e jJ                  gej                  _T        eej                  _U        e#egej                  _T        eej                  _U        d Z^dZ_dZ`dZadZbd+Zcd,Zde#gej                  _T        e ej                  _U        e#e jJ                  ee jJ                  e jJ                  e jJ                  e jJ                  egej                  _T        eej                  _U        e#e jJ                  egej                  _T        eej                  _U        eeegej                  _T        e&ej                  _U        e&e jJ                  gej                  _T        eej                  _U        g ej                  _T        eej                  _U        e&e jJ                  egej                  _T        eej                  _U        e#e#e jJ                  e jJ                  eee jJ                  e#e jJ                  e jJ                  g
ej                  _T        eej                  _U        e gej                  _T        dej                  _U        g ej                  _T        eej                  _U         e j                  ee      Zpepegej                  _T        eej                  _U        e&egej                  _T        eej                  _U        e&e jJ                  gej                  _T        eej                  _U        egej                  _T        e&ej                  _U        e&e jJ                  gej                  _T        eej                  _U        e jJ                  e jJ                  gej                  _T        eej                  _U        e&e jJ                  gej                  _T        eej                  _U        e&e j                  gej                  _T        eej                  _U         e j                  ee'e5      Zzeze5gej                  _T        eej                  _U        e&e jJ                  ee jJ                  e jJ                  e jJ                  gej                  _T        eej                  _U        d-e}d.e
fd/Z~d-e}d.e:fd0ZdPd1e}d2ed.efd3Zd4e}d5e}d.dfd6Zd-e}d.efd7Zd8e}d9e}d.efd:Zd8e}d9e}d.efd;Zd.efd<Zd.efd=Zd>ed.efd?Zd.e}fd@ZdAe}d.ee}   fdBZdAe}d.ee}   fdCZd.e}fdDZg Ze	ep   edE<   dQdFZdQdGZd.eeef   fdHZd.efdIZdJe	e}   d.efdKZdLe}d.dfdMZdAe}dNed.dfdOZy# e\$ r Y w xY w)R    N)ListNoReturnOptionalTuple   )encodingpycompat   W   m   z      c                       e Zd ZdefdefgZy)	_FILETIMEdwLowDateTimedwHighDateTimeN)__name__
__module____qualname___DWORD_fields_     1/usr/lib/python3/dist-packages/mercurial/win32.pyr   r   C   s     &),<f+EFHr   r   c                   L    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y)_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   G   sY    	V$	9%	Y'	I&	(	&!	 	6"	6"	&!Hr   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	y)_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-   j   s    	v	v	f	F			F	F	&!	&!	F#	F			(	g	w	g%Hr   r-   c                   (    e Zd ZdefdefdefdefgZy)_PROCESS_INFORMATIONhProcesshThreaddwProcessId
dwThreadIdN)r   r   r   rD   r   r   r   r   r   rF   rF      s)    	W	G		v	Hr   rF   i   c                   D    e Zd Zdej                  fdej                  fgZy)_COORDXYNr   r   r   rB   c_shortr   r   r   r   rL   rL      s    fnn%V^^'<=Hr   rL   c                   x    e Zd Zdej                  fdej                  fdej                  fdej                  fgZy)_SMALL_RECTLeftTopRightBottomNrO   r   r   r   rR   rR      s9    	 		&..!	6>>"	Hr   rR   c                   .    e Zd ZdefdefdefdefdefgZy)_CONSOLE_SCREEN_BUFFER_INFOdwSizedwCursorPositionwAttributessrWindowdwMaximumWindowSizeN)r   r   r   rL   rA   rR   r   r   r   r   rX   rX      s1    	6	V$		[!	'Hr   rX   iii   c            
       n    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y
)CERT_CHAIN_CONTEXTcbSizedwErrorStatusdwInfoStatuscChainrgpChaincLowerQualityChainContextrgpLowerQualityChainContextfHasRevocationFreshnessTimedwRevocationFreshnessTimeN)r   r   r   r   rB   c_void_p_BOOLr   r   r   r   r_   r_      sY    	6	&!	 	6	V__%	$f-	&8	&.	$f-Hr   r_   c                   6    e Zd Zdefdefdej
                  ffZy)CERT_USAGE_MATCHdwTypecUsageIdentifierrgpszUsageIdentifierN)r   r   r   r   rB   ri   r   r   r   r   rl   rl      s%    	6	V$	1	Hr   rl   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j                  fdej                  fd	eff	Zy
)CERT_CHAIN_PARAr`   RequestedUsageRequestedIssuancePolicydwUrlRetrievalTimeoutfCheckRevocationFreshnessTimerh   pftCacheResyncpStrongSignParadwStrongSignFlagsN)	r   r   r   r   rl   rj   rB   ri   r   r   r   r   rq   rq      s[    	6	+,	"$45	 &)	(%0	$f-	6??+	FOO,	f%
Hr   rq         namereturnc                     t         j                         }|dkD  r|dz  }t        j                  |      }t	        |j
                  t        j                  |       d|j                        )Nil        )codez: )		_kernel32GetLastErrorrB   WinErrorOSErrorerrnor   strfromlocalstrerror)r{   r~   errs      r   _raiseoserrorr   n  s[     !!#Dj
//t
$C
		x44T:CLLI r   c           	      t   t         j                  | dt        t        z  t        z  d t
        t        d       }|t        k(  rt        |        	 t               }t         j                  |t        j                  |            st        |        |t         j                  |       S # t         j                  |       w xY wNr   )r   CreateFileA_FILE_SHARE_READ_FILE_SHARE_WRITE_FILE_SHARE_DELETE_OPEN_EXISTING_FILE_FLAG_BACKUP_SEMANTICS_INVALID_HANDLE_VALUEr   r   GetFileInformationByHandlerB   byrefCloseHandle)r{   fhfis      r   _getfileinfor   z  s    				,,/AA#
B 
""d"(*33BR8HI$b!	b!s   ?B   B7certbuildc                    t        j                  t              } |       }t        t        j                  t              t                     }t        j                  t        | t        |             }|t        d       d}|s|dz  }	 t        j                  d|ddt        j                  |      |dt        j                  |            st        d       |j                  }|j                  t        z  dk(  |rt        j!                  |       t        j#                  |       S # |rt        j!                  |       t        j#                  |       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`   rr   Ns   CertCreateCertificateContextr      s   CertGetCertificateChain)rB   POINTERr_   rq   sizeofrl   _crypt32CertCreateCertificateContextX509_ASN_ENCODINGlenr   CertGetCertificateChainr   contentsra   CERT_TRUST_IS_PARTIAL_CHAINCertFreeCertificateChainCertFreeCertificateContext)r   r   chainctxptr	pchainctx	chainparacertctxflagschainctxs           r   checkcertificatechainr     s    ..!34KI}}_->N>PI 334TG 56E5//LL#LL#	
 45%%%%(CCqH--i8++G4 --i8++G4s   A.D# #.Esrcdstc                     	 t         j                  || d       st        |        y y # t        $ r t        |        Y y w xY wN)r   CreateHardLinkAr   AttributeError)r   r   s     r   oslinkr     s=    ((c48# 9 cs   "& ==c                 ,    t        |       j                  S )z-return number of hardlinks for the given file)r   r%   )r{   s    r   nlinksr     s    ,,,r   path1path2c                     t        |       }t        |      }|j                  |j                  k(  xr4 |j                  |j                  k(  xr |j                  |j                  k(  S )zDReturns whether path1 and path2 refer to the same file or directory.)r   r"   r&   r'   r   r   res1res2s       r   samefiler     sa    DD!!T%>%>> 	54#6#66	5$"4"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AAr   c           	      4   t        j                  | j                               }t               }t        j                  |d dd t        j                  |      d       s3t        j                         }|t        k(  ryt        j                  |      |j                  S r   )msvcrtget_osfhandlefilenor   r   PeekNamedPiperB   r   r   _ERROR_BROKEN_PIPEr   value)pipehandleavailr   s       r   peekpiper     sx    !!$++-0FHE""av||E2D $$&$$ooc"";;r   c                     | j                   t         j                  k7  ryt        j                         } | t        k(  xs	 | t
        k(  S )NF)r   EINVALr   r   r   _ERROR_NO_DATA)r   s    r   lasterrorwaspipeerrorr     s9    
yyELL 

 
 
"C$$=~(==r   pidc                    t         j                  t        d|       }|rr	 t               }t         j	                  |t        j                  |            r(|j                  t        k(  t         j                  |       S 	 t         j                  |       t         j                         t        k7  S # t         j                  |       w xY w)zOreturn True if pid is still running or unable to
    determine, False otherwiseF)r   OpenProcess_PROCESS_QUERY_INFORMATIONr   GetExitCodeProcessrB   r   r   _STILL_ACTIVEr   r   _ERROR_INVALID_PARAMETER)r   hstatuss      r   testpidr     s     	8%EA	%XF++Av||F/CD||}4!!!$ E !!!$!!#'??? !!!$s   AB+ +Cc                     d} t        j                  | dz         }t        j                  dt        j                  |      |       }|dk(  rt        j
                         || k(  rt        j
                  t              |j                  S )zreturn full path of hg.exeiX  r   Nr   )rB   create_string_bufferr   GetModuleFileNameAr   r   _ERROR_INSUFFICIENT_BUFFERr   )sizebufr   s      r   executablepathr     sm    D

%
%dQh
/C

&
&tV\\#->
EC
axoo	oo89999r   pathc                 6   t         j                  j                  |       }t        t	        |      t
              dz   }t        j                  |      }t        j                  |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   )osr   realpathmaxr   	_MAX_PATHrB   r   r   GetVolumePathNameAr   r   r   )r   r   r   r   s       r   getvolumenamer     sq     ww%H s8}i(1,D

%
%d
+C''&,,s2CTJoo99r   c                 b   t        |       }t        j                  |      }|t        k(  ry|t        t
        t        t        fvryt        dz   }t        j                  |      }t        j                  |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   r   GetDriveTypeA_DRIVE_REMOTE_DRIVE_REMOVABLE_DRIVE_FIXED_DRIVE_CDROM_DRIVE_RAMDISKr   rB   r   GetVolumeInformationAr   r   r   )r   volumetr   r{   s        r   	getfstyper   '  s    
 4 F'AM	
	 
 q=D&&t,D**atT6<<+=t oo::r   c                     t        d      } t        j                  | j                  dz         }t        j                  t        j                  |      t        j                  |             st        j                         |j                  S )zreturn name of current useri,  r   )r   rB   r   r   	_advapi32GetUserNameAr   r   )r   r   s     r   getuserr   F  s\    #;D

%
%djj1n
5C!!&,,s"3V\\$5GHoo99r   _signalhandlerc                      d } t         ryt        |       }t         j                  |       t        j	                  |d      st        j                         y)zRegister a termination handler for console events including
    CTRL+C. python signal handlers do not work well with socket
    operations.
    c                 .    t         j                  d       y )Nr   )r   ExitProcess)events    r   handlerz!setsignalhandler.<locals>.handlerX  s    a r   NT)r   _SIGNAL_HANDLERappendr   SetConsoleCtrlHandlerrB   r   )r   r   s     r   setsignalhandlerr   R  sI    !  A!**1d3oo 4r   c                  p    d } t         j                         }t        j                  t	        |       |       y )Nc                     t               }t        j                  | t        j                  |             ||j
                  k(  rt        j                  | t               yy)NFT)r   _user32GetWindowThreadProcessIdrB   r   r   
ShowWindow_SW_HIDE)hwndr   wpids      r   callbackzhidewindow.<locals>.callbackd  sD    x((v||D/AB$**tX.r   )r   GetCurrentProcessIdr  EnumWindows_WNDENUMPROC)r  r   s     r   
hidewindowr  c  s,     
'
'
)CX.4r   c                     d} d}t         j                  t              }|	|t        k(  r| |fS t	               }t         j                  |t        j                  |            s| |fS |j                  j                  |j                  j                  z
  } |j                  j                  |j                  j                  z
  dz   }| |fS )NO      r   )r   GetStdHandle_STD_ERROR_HANDLEr   rX   GetConsoleScreenBufferInforB   r   r\   rU   rS   rV   rT   )widthheight	screenbufcsbis       r   termsizer  p  s    
 EF&&I I)>>f}&(D//	6<<;MNf}MM$--"4"44E]]!!DMM$5$559F&=r   c                  4   d} t         j                  t              }|t        k(  ryt	        d      }t         j                  |t        j                  |            sy|j                  | z  dk(  r,|xj                  | z  c_        t         j                  ||      syy)zaEnable virtual terminal mode for the associated console.  Return True if
    enabled, else False.r)   Fr   T)
r   r  _STD_OUTPUT_HANDLEr   r   GetConsoleModerB   r   r   SetConsoleMode)"ENABLE_VIRTUAL_TERMINAL_PROCESSINGr   modes      r   enablevtmoder    s     *-&##F &&!9D##FFLL,>?

77A=

88
''5r   argsc                    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        j                  d t        j                  |       d d dt        |t        j                          t        j"                  |      t        j"                  |      
      }|st        j$                         t        j'                  |j(                         t        j'                  |j*                         |j,                  S )Nr   s   %s=%s     F)r-   rB   r   r.   rF   r   environ
subprocesslist2cmdliner	   rapplyr   r   CreateProcessA
strtolocal_CREATE_NO_WINDOWgetcwdr   r   r   rG   rH   rI   )r  sipienvkress         r   spawndetachedr/    s"    
BMM,'BE		B
C 5zQ 0 0 344455LC""8??83H3H$#OPD 
"
"D!RRC oo"++&"**%>>r   fc                 D   t         j                  j                  |       r0t        t        j
                  dt        j                  |       z        t        d      D ]5  }d| t        j                  dd      fz  }	 t        j                  | |        n t        t        j                  d      	 t        j                  |       y# t        $ r Y tw xY w# t        $ rC t         j#                  |t$               	 t        j                  |       Y y# t        $ r Y Y y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   r   SetFileAttributesA_FILE_ATTRIBUTE_NORMAL)r0  triestemps      r   r<  r<    s    
ww}}Q KK6##A&'
 	
. r JQq* =>>	IIa	J ell$HII
		$  		   	$$T+AB	IIdO 	 		s<   :C.C 	CC#D7D	DDDD
notindexedc                 h    t        j                  |        |rt        j                  | t               y y r   )r   mkdirr   r=  #_FILE_ATTRIBUTE_NOT_CONTENT_INDEXED)r   rA  s     r   makedirrE     s&    HHTN$$T+NO r   )T)r|   N)rB   ctypes.wintypeswintypesr   r   r   r7  r#  typingr   r   r   r    r   r	   windllkernel32r   advapi32r   user32r  crypt32r   c_longrj   c_ushortrA   c_ulongr   c_uint_UINT_LONGrC   _LPCSTRr@   ri   rD   _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   r>  rD  r   r   r-   rF   r(  r  rL   rR   rX   r  r  r   r   PKCS_7_ASN_ENCODINGr_   rl   rq   r   argtypesrestyper   r   r   r   r   r   r   r=  _DRIVE_UNKNOWN_DRIVE_NO_ROOT_DIRr   r   r   r   r   r   r   r   r   r   r   r   r&  r   r	  WINFUNCTYPEr   r   r  r  r  r  r   r  c_intr  r  r
  r   bytesr   r   boolr   r   intr   r   r   r   r   r   r   r   r   r   r   __annotations__r   r  r  r  r/  r<  rE  r   r   r   <module>rk     sO	    "   	    MM""	MM""	
--

==   		?? "&
////	))        6===6==#AAnnGmmGV]]6$$%v)GG  GGG   G&"2"2      (   &, # $  6## .6++   >V >&"" &"2"2  C[&& 3K%%  &     )) v'' f&& " 
OO
2 % % .
 1@ % % - OO
OO
OO
OO

OO
OO	-     ) ,1     (0?/@ # # ,.3 # # + 


OO

"	    !(	   18&//0J	 $ $ -/4	 $ $ ,")	    %	   	*17FOO)LI&(-I% *1&(9	   %',	   $  $+9	    "'	    
OO

OO
OO
OO
OO
	,	   ( +0	   ')0&//6(J	   %',	   $"(%!8	    '	   )0&//(B	   %',	   $"$	   !'	   )0&//6(J	   %'-	   $ 
OO
OO	

OO
OO
OO%	   ! $)	    "'	    $	   )+	   &(.	   % %&$$UF3,;U+C	   (*/	   '%,f$5	   !#(	    %,foo$>	   !#(	    #)(	   !(	   18&//0J	 $ $ -/4	 $ $ ,#)??FOO"D	   !&	   -4foo,F     )+1     (&5   "    "v!!%8 ,g6   #    
OO

OO
OO
OO$	     #(	   	 	( 	"u "!< "*/5 /5d /5d /5d E d - -3 -
E % D Be BE Bd Bc >$ >@ @ @  (5/ *E huo >  )+_% * "
5%S/ *d 4'U ' 'T4e 4 4nP% PT Pd P}  		s   /d dd