o
    "ifp                     @  sf   d Z ddlmZ ddlmZ ddlmZ ddlmZ er"ddlmZ dddZ	e
dkr1e	e dS dS )z>
(c) 2006-2013, Armin Rigo, Holger Krekel, Maciej Fijalkowski
    )annotations)TYPE_CHECKING)Literal)cast)Channelchannelr   returnNonec              	     s  dd l dd ldd l	ddlm td  \g dfdd	d 	fddg  d} d D ][\}\}}}tt  } d|t	d d  f |d ur|rrt	||krrt
d|t|d}|| |  z|r|| |||f W n	 t
y   Y nw ~qB d   }|dkrtd|\}	}
}j|
}z| W n	 t
y   Y nw |	dkrֈj|}n
|	dksJ |	|}||   }|dks d d S )Nr   )md5ztuple[str, dict[str, object]]pathstrr   r	   c                   s@   |   sJ z|  W d S  ty   | d Y d S w )NT)
startswithunlinkOSErrorrmtree)r   )destdirosshutil M/var/www/html/corbot_env/lib/python3.10/site-packages/execnet/rsync_remote.pyremove   s   zserve_rsync.<locals>.removerelcomponents	list[str]c                   s  z | }W n ty   d }Y nw   }t|tr||r+|js+|  d }|s2|  |	d}|rA
| |dB  i }|D ]}j| |}|g || d||< qEdrx| D ]}||vrwj| |}	|	 qfd S d S |d urt|tsJ d }
|rʈ|jr|\}}}||jkrn.||jkrt| d}|  }
|  n|r||jkrĈ
| |dB  d S d S |   d||
ff | |f d S 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mode
entrynames	entrynamedestpath	othername	otherpathchecksummsg_mode	msg_mtimemsg_sizef)r   r
   modifiedfilesoptionsr   receive_directory_structurer   statr   r   r@       s`   










z0serve_rsync.<locals>.receive_directory_structureF)	list_doneNack   zfile modified during rsync: wb)linksN*   z,tuple[Literal['linkbase', 'link'], str, str]linkbaselink)doneN)r   r   r   r	   )r   r   r   r   r   r	   )r   r   rA   hashlibr
   r   r   r   byteslenr   r,   writer/   r$   utimer   r%   symlink)r   STRICT_CHECKr   r3   timesizedatar=   r2   _typerelpath	linkpointsrcr   )
r   r   r
   r>   r?   r   r@   r   r   rA   r   serve_rsync   s`   
3




rY   __channelexec__N)r   r   r   r	   )__doc__
__future__r   typingr   r   r   execnet.gateway_baser   rY   __name__r   r   r   r   r   <module>   s    
p