o ]Lb'X @sddlmZddlZddlmZddlZddlZddlZddlZddl Z ddl m Z m Z ej jZej jZej jZej jZejZejZejZejZejZejZ Z!ej"Z#e#Z$ej"Z%ej&Z'e#dj(Z)dZ*dZ+dZ,dZ-d Z.d Z/e0eje0ej"krejZ1ejZ2ne0ej3e0ej"krej4Z1ej3Z2Gd d d ej5Z6Gd ddej5Z7dZ8dZ9dZ:dZ;dZdZ?dZ@Gdddej5ZAGdddej5ZBdZCdZDGdddej5ZEGdddej5ZFGd d!d!ej5ZGed"j(ZHed#j(ZId$ZJdZKd$ZLGd%d&d&ej5ZMGd'd(d(ej5ZNGd)d*d*ej5ZOeejegejP_Qe%ejP_Rej"e%ej"ej"ej"eej"ej"gejS_QeejS_Re%gejT_QeejT_Re eeej"eee#gejU_Qe#ejU_Re#ej"gejV_QeejV_Re#gejW_QeejW_Rze e ej"gejX_QeejX_RWn eYyxYnwe egejZ_QeejZ_RdZ[dZ\dZ]dZ^dZ_d+Z`d,Zae gejb_Qeejb_Re ej"eej"ej"ej"ej"egejc_Qeejc_Re ej"egejd_Qeejd_Reeegeje_Qe#eje_Re#ej"gejf_Qeejf_Rgejg_Qeejg_Re#ej"egejh_Qeejh_Re e ej"ej"eeej"e ej"ej"g eji_Qeeji_Regejj_Qdejj_Rgejk_Qeejk_ReleeZmemegejn_Qeejn_Re#egejo_Qeejo_Re#ej"gejp_Qeejp_Regejq_Qe#ejq_Re#ej"gejr_Qeejr_Rej"ej"gejs_Qeejs_Re#ej"gejt_Qeejt_Re#ejugejv_Qeejv_Relee$e2Zwewe2gejx_Qeejx_Re#ej"eej"ej"ej"gejy_Qeejy_Rd-d.Zzd/d0Z{dXd2d3Z|d4d5Z}d6d7Z~d8d9Zd:d;Zdd?Zd@dAZdBdCZdDdEZdFdGZdHdIZgZdJdKZdLdMZdNdOZdPdQZdRdSZdTdUZdVdWZdS)Y)absolute_importN)encodingpycompatWmzc@seZdZdefdefgZdS) _FILETIME dwLowDateTimedwHighDateTimeN)__name__ __module__ __qualname___DWORD_fields_rr1/usr/lib/python3/dist-packages/mercurial/win32.pyr =sr c @sLeZdZdefdefdefdefdefdefdefdefd efd efg Zd S) _BY_HANDLE_FILE_INFORMATIONdwFileAttributesftCreationTimeftLastAccessTimeftLastWriteTimedwVolumeSerialNumber nFileSizeHigh nFileSizeLownNumberOfLinksnFileIndexHigh nFileIndexLowN)rrrrr rrrrrrAsrii iic@s~eZdZdefdefdefdefdefdefdefdefd efd efd efd efd efdefdejfdefdefdefgZ dS) _STARTUPINFOcb lpReserved lpDesktoplpTitledwXdwYdwXSizedwYSize dwXCountChars dwYCountCharsdwFillAttributedwFlags wShowWindow cbReserved2 lpReserved2 hStdInput hStdOutput hStdErrorN) rrrr_LPSTR_WORDctypesc_char_p_HANDLErrrrrr%ds(r%c@s(eZdZdefdefdefdefgZdS)_PROCESS_INFORMATIONhProcesshThread dwProcessId dwThreadIdN)rrrr<rrrrrrr={s r=ic@s eZdZdejfdejfgZdS)_COORDXYNrrrr:c_shortrrrrrrBsrBc@s0eZdZdejfdejfdejfdejfgZdS) _SMALL_RECTLeftTopRightBottomNrErrrrrGs rGc@s.eZdZdefdefdefdefdefgZdS)_CONSOLE_SCREEN_BUFFER_INFOdwSizedwCursorPosition wAttributessrWindowdwMaximumWindowSizeN)rrrrBr9rGrrrrrrLsrLiiic @sJeZdZdefdefdefdefdejfdefdejfdefd eff Zd S) CERT_CHAIN_CONTEXTcbSize dwErrorStatus dwInfoStatuscChainrgpChaincLowerQualityChainContextrgpLowerQualityChainContextfHasRevocationFreshnessTimedwRevocationFreshnessTimeN)rrrrr:c_void_p_BOOLrrrrrrRsrRc@s$eZdZdefdefdejffZdS)CERT_USAGE_MATCHdwTypecUsageIdentifierrgpszUsageIdentifierN)rrrrr:r\rrrrrr^s r^c @sJeZdZdefdefdefdefdefdefdejfdejfd eff Zd S) CERT_CHAIN_PARArSRequestedUsageRequestedIssuancePolicydwUrlRetrievalTimeoutfCheckRevocationFreshnessTimer[pftCacheResyncpStrongSignParadwStrongSignFlagsN) rrrrr^r]r:r\rrrrrrbsrbcCs@t}|dkr |d8}tj|d}t|jdt||jf)Nil)codez%s: %s) _kernel32 GetLastErrorr:WinErrorOSErrorerrnor strfromlocalstrerror)namerlerrrrr _raiseoserrorhs rvc Cslt|dttBtBdttd}|tkrt|zt }t |t |s(t||Wt |St |wNr)rm CreateFileA_FILE_SHARE_READ_FILE_SHARE_WRITE_FILE_SHARE_DELETE_OPEN_EXISTING_FILE_FLAG_BACKUP_SEMANTICS_INVALID_HANDLE_VALUErvrGetFileInformationByHandler:byref CloseHandle)rtfhfirrr _getfileinfots"  rTc Cstt}|}ttttd}tt|t |}|dur#t dd}|s+|dO}z-t d|ddt ||dt |sBt d|j }|jt@dkW|rSt|t|S|r`t|t|w)aTests 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. )rSrcNsCertCreateCertificateContextrsCertGetCertificateChain)r:POINTERrRrbsizeofr^_crypt32CertCreateCertificateContextX509_ASN_ENCODINGlenrvCertGetCertificateChainrcontentsrTCERT_TRUST_IS_PARTIAL_CHAINCertFreeCertificateChainCertFreeCertificateContext)certbuild chainctxptr pchainctx chainparacertctxflagschainctxrrrcheckcertificatechainsB        rcCs@zt||dst|WdSWdStyt|YdSwN)rmCreateHardLinkArvAttributeError)srcdstrrroslinks rcCs t|jS)z-return number of hardlinks for the given file)rr)rtrrrnlinkss rcCs4t|}t|}|j|jko|j|jko|j|jkS)zDReturns whether path1 and path2 refer to the same file or directory.)rrrr path1path2res1res2rrrsamefiles   rcCst|}t|}|j|jkS)z7Returns whether path1 and path2 are on the same device.)rrrrrr samedevices rc CsRt|}t}t|dddt|ds&t}|t kr!dSt ||j Srw) msvcrt get_osfhandlefilenorrm PeekNamedPiper:rrn_ERROR_BROKEN_PIPErovalue)pipehandleavailrurrrpeekpipes rcCs(|jtjkrdSt}|tkp|tkS)NF)rqEINVALrmrnr_ERROR_NO_DATA)rurrrlasterrorwaspipeerrors rc Cshttd|}|r.zt}t|t|r!|jtkWt |SWt |nt |wt t kS)zOreturn True if pid is still running or unable to determine, False otherwiseF) rm OpenProcess_PROCESS_QUERY_INFORMATIONrGetExitCodeProcessr:rr _STILL_ACTIVErrn_ERROR_INVALID_PARAMETER)pidhstatusrrrtestpids   rcCsNd}t|d}tdt||}|dkrt||kr$tt|jS)zreturn full path of hg.exeiXrNr)r:create_string_bufferrmGetModuleFileNameArro_ERROR_INSUFFICIENT_BUFFERr)sizebufrrrrexecutablepaths rcCsJtj|}tt|td}t|}t |t ||s"t |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) ospathrealpathmaxr _MAX_PATHr:rrmGetVolumePathNameArror)rrrrrrr getvolumename s  rc Cspt|}t|}|tkrdS|ttttfvrdStd}t |}t |dddddt ||s5t |jS)zGet the filesystem type name from a directory or file (best-effort) Returns None if we are unsure. Raises OSError on ENOENT, EPERM, etc. scifsNrr)rrm GetDriveTypeA _DRIVE_REMOTE_DRIVE_REMOVABLE _DRIVE_FIXED _DRIVE_CDROM_DRIVE_RAMDISKrr:rGetVolumeInformationArror)rvolumetrrtrrr getfstype!s$  rcCs>td}t|jd}tt|t|st|jS)zreturn name of current useri,r)rr:rr _advapi32 GetUserNameArro)rrrrrgetuser@s rcCs:dd}trdSt|}t|t|dstdS)zRegister a termination handler for console events including CTRL+C. python signal handlers do not work well with socket operations. cSstddS)Nr)rm ExitProcess)eventrrrhandlerRsz!setsignalhandler..handlerNT)_signalhandler_SIGNAL_HANDLERappendrmSetConsoleCtrlHandlerr:ro)rrrrrsetsignalhandlerLs  rcCs$dd}t}tt||dS)NcSs6t}t|t|||jkrt|tdSdS)NFT)r_user32GetWindowThreadProcessIdr:rr ShowWindow_SW_HIDE)hwndrwpidrrrcallback^s   zhidewindow..callback)rmGetCurrentProcessIdr EnumWindows _WNDENUMPROC)rrrrr hidewindow]srcCsvd}d}tt}|dus|tkr||fSt}t|t|s%||fS|jj |jj }|jj |jj d}||fS)NOr) rm GetStdHandle_STD_ERROR_HANDLEr~rLGetConsoleScreenBufferInfor:rrPrJrHrKrI)widthheight screenbufcsbirrrtermsizejsrcCshd}tt}|tkr dStd}t|t|sdS|j|@dkr2|j|O_t ||s2dSdS)zaEnable virtual terminal mode for the associated console. Return True if enabled, else False.r"FrT) rmr_STD_OUTPUT_HANDLEr~rGetConsoleModer:rrSetConsoleMode)"ENABLE_VIRTUAL_TERMINAL_PROCESSINGrmoderrr enablevtmodes rcCst}tt|_t}d}tjD] }|d|tj|f7}q|s#d}|d7}tt tj |}t dt|dddt|tt|t| }|sPtt |jt |j|jS)Ns%s=%sF)r%r:rr&r=renviron subprocess list2cmdlinerrapplyrrrmCreateProcessA strtolocal_CREATE_NO_WINDOWgetcwdrrorr>r?r@)argssipienvkresrrr spawndetacheds6     r c Cstj|rttjdt|t dD].}d|t ddf}z t ||Wnt yD}z |jtjkr:WYd}~qd}~wwttjdzt|WdSt yut|tz t|WYdSt ytYYdSww)z3try to implement POSIX' unlink semantics on Windowsz'Unlinking directory not permitted: '%s' s%s-%08xrlNz"No usable temporary filename found)rrisdirIOErrorrqEPERMrrrrxrangerandomrandintrenamerpEEXISTunlinkrmSetFileAttributesA_FILE_ATTRIBUTE_NORMAL)ftriestemperrrrs:        rcCs"t||rt|tdSdSr)rmkdirrmr#_FILE_ATTRIBUTE_NOT_CONTENT_INDEXED)r notindexedrrrmakedirs r)T) __future__rr:ctypes.wintypeswintypesrqrrrrrrwindllkernel32rmadvapi32ruser32rcrypt32rc_longr]c_ushortr9c_ulongrc_uint_UINT_LONGr;_LPCSTRr8r\r<_HWND_PCCERT_CONTEXTMAX_PATHrrr~_ERROR_SUCCESS_ERROR_NO_MORE_FILESrrrrr_WPARAM_LPARAM c_longlong c_ulonglong Structurer rryrzr{r|r}rrrrr%r=rrrBrGrLrrrrPKCS_7_ASN_ENCODINGrRr^rbrargtypesrestyperrrxrrrrr_DRIVE_UNKNOWN_DRIVE_NO_ROOT_DIRrrrrrrrrrrrnrrrr WINFUNCTYPErrrrrrrrc_intrrrrrvrrrrrrrrrrrrrrrrrrr rrrrrrs                     2   * 8