a
    &ñ»jp  ã                   @  sh   d Z ddlmZ ddlmZ ddlmZ ddlmZ erDddlmZ ddd	œd
d„Z	e
dkrde	eƒ dS )z>
(c) 2006-2013, Armin Rigo, Holger Krekel, Maciej Fijalkowski
é    )Úannotations)ÚTYPE_CHECKING)ÚLiteral)Úcast)ÚChannelr   ÚNone)ÚchannelÚreturnc              	     s  dd l ‰dd l‰dd l‰	ddlm‰ tdˆ  ¡ ƒ\‰‰g ‰dddœ‡‡‡fdd„‰dd	dd
œ‡ ‡‡‡‡‡‡‡	fdd„‰ˆˆg ƒ d}ˆ  d¡ ˆD ]¼\}\}}}ttˆ  ¡ ƒ}ˆ  d|t	ˆƒd d … f¡ |d u�r|rôt	|ƒ|krôt
d|›�ƒ‚t|dƒ}| |¡ | ¡  z&|�r$ˆ ||¡ ˆ |||f¡ W n t
�yJ   Y n0 ~q’ˆ  d¡ ˆ  ¡ }|dk�rôtd|ƒ\}	}
}ˆj ˆ|
¡}zˆ|ƒ W n t
�yª   Y n0 |	dk�rÆˆj ˆ|¡}n|	dk�sØJ |	ƒ‚|}ˆ ||¡ ˆ  ¡ }�qbˆ  d¡ d S )Nr   )Úmd5ztuple[str, dict[str, object]]Ústrr   )Úpathr	   c                   s@   |   ˆ ¡sJ ‚zˆ | ¡ W n ty:   ˆ | d¡ Y n0 d S )NT)Ú
startswithÚunlinkÚOSErrorÚrmtree)r   )ÚdestdirÚosÚshutil© ú:E:\soccer\ml_env\Lib\site-packages\execnet/rsync_remote.pyÚremove   s
    zserve_rsync.<locals>.removez	list[str])r   Úrelcomponentsr	   c                   sÄ  zˆ  | ¡}W n ty$   d }Y n0 ˆ  ¡ }t|tƒrò|rVˆ |j¡sVˆ | ¡ d }|sdˆ | ¡ | 	d¡}|r‚ˆ 
| |dB ¡ i }|D ],}ˆj | |¡}ˆ|g |¢|‘ƒ d||< qŠˆ d¡rðˆ | ¡D ]"}||vrÌˆj | |¡}	ˆ|	ƒ qÌnÎ|d u�rÀt|tƒ�sJ ‚d }
|�r ˆ |j¡�r˜|\}}}||jk�r<nZ||jk�rlt| dƒ}ˆ| ¡ ƒ ¡ }
| ¡  n*|�r’||jk�r’ˆ 
| |dB ¡ d S d S nˆ| ƒ ˆ  d||
ff¡ ˆ | |f¡ d S )Nr   iÀ  TÚdeleteÚrbÚsend)Úlstatr   ÚreceiveÚ
isinstanceÚlistÚS_ISDIRÚst_moder   ÚmakedirsÚpopÚchmodr   ÚjoinÚgetÚlistdirÚtupleÚS_ISREGÚst_sizeÚst_mtimeÚopenÚreadÚdigestÚcloser   Úappend)r   r   ÚstÚmsgÚmodeZ
entrynamesÚ	entrynameZdestpathZ	othernameZ	otherpathZchecksumZmsg_modeZ	msg_mtimeZmsg_sizeÚf)r   r
   ÚmodifiedfilesÚoptionsr   Úreceive_directory_structurer   Ústatr   r   r7       sV    










z0serve_rsync.<locals>.receive_directory_structureF)Z	list_doneNZacké   zfile modified during rsync: Úwb)ÚlinksNé*   z,tuple[Literal['linkbase', 'link'], str, str]ZlinkbaseÚlink)ÚdoneN)r   r   r8   Úhashlibr
   r   r   r   ÚbytesÚlenr   r+   Úwriter.   r#   Úutimer   r$   Úsymlink)r   ZSTRICT_CHECKr   r2   ÚtimeÚsizeÚdatar4   r1   Ú_typeÚrelpathZ	linkpointÚsrcr   )
r   r   r
   r5   r6   r   r7   r   r   r8   r   Úserve_rsync   sZ    $3






ÿ

rK   Z__channelexec__N)Ú__doc__Ú
__future__r   Útypingr   r   r   Zexecnet.gateway_baser   rK   Ú__name__r   r   r   r   r   Ú<module>   s   p