
    i"                        S r SSKJr  SSKrSSKrSSKJr  SSKJr  SSK	J
r
  SSK	Jr  SSKrSSKJr  SS	KJr  SS
KJr   " S S5      rg)zk
1:N rsync implementation on top of execnet.

(c) 2006-2009, Armin Rigo, Holger Krekel, Maciej Fijalkowski
    )annotationsN)md5)Queue)Callable)Literal)Gateway)BaseGateway)Channelc                      \ rS rSrSrSSS jjrSS jrSS jrSS jrSS jr	SS	 jr
        SS
 jrSS jrSSS jjr S       SS jjrSS jr        SS jrS S jrS S jrS S jrSrg)!RSync   a<  This class allows to send a directory structure (recursively)
to one or multiple remote filesystems.

There is limited support for symlinks, which means that symlinks
pointing to the sourcetree will be send "as is" while external
symlinks will be just copied (regardless of existence of such
a path on remote side).
Nc                    [        U5      U l        X0l        Ub  [        U5      (       d   eX l        0 U l        [        5       U l        / U l        g N)	str
_sourcedir_verbosecallable	_callback	_channelsr   _receivequeue_links)self	sourcedircallbackverboses       L/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/execnet/rsync.py__init__RSync.__init__    sN    i.8H#5#555!CE G 	 KM    c                    gNT )r   paths     r   filterRSync.filter5   s    r   c                t    XR                   ;   a)  UR                  5         [        SUR                   S35      eg )Nz connection unexpectedly closed:  )r   	waitcloseOSErrorgateway)r   channels     r   _end_of_channelRSync._end_of_channel8   s7    nn$<W__<MQOPP	 %r   c                n    U R                    H  nUR                  U5        M     UR                  S5        g )N*   )r   send)r   r+   links      r   _process_linkRSync._process_link?   s*    KKDLL   	Rr   c                v    U R                   R                  U5      nU(       a  U" 5         UR                  5         g)zCall all callbacks.N)r   popr(   )r   r+   finishedcallbacks      r   _doneRSync._doneE   s,    >>--g6r   c                    U R                   (       aH  [        U R                  U    Vs/ s H  o R                  U   PM     sn5      nU R                  SX15        g g s  snf )Nlist)r   sum_to_send_paths)r   r+   iss       r   
_list_doneRSync._list_doneL   sI    >>T]]7-CD-C[[^-CDEANN61. Ds   Ac                n   [         R                  R                  " U R                  /UQ76 n [	        US5      nUR                  5       nSR                  U5      nUb  [        U5      U R                  U'   OSU R                  U'   XR                  ;  a  / U R                  U'   U R                  U   R                  U5        UbO  WR                  5         Ub   U[        U5      R                  5       :X  a  SnOU R                  UR                  U5        UR!                  U5        g! [         a    Sn Nf = f)zSend one item.rbN/r   )osr#   joinr   openreadr)   lenr=   r<   appendcloser   digest_report_send_filer*   r0   )r   r+   modified_rel_path_componentschecksummodifiedpathfdatamodified_rel_paths           r   
_send_itemRSync._send_itemR   s    ww||DOOS6RS	\4(A668D
  HH%AB-0YDKK)*-.DKK)*--'%'DMM'"g%%&78 GGI#CI4D4D4F(F&&w8IJT)  	D	s   D% %D43D4c                H    U R                   (       a  [        U SU 35        g g )Nz <= )r   print)r   r*   rS   s      r   rM   RSync._report_send_files   s#    ==WIT"3!456 r   c                r   U R                   (       d  U(       a  [        S5      eg[        R                  R	                  [        R                  R                  U R                  S5      5      U l        U R                  U R                  5        0 U l        0 U l	        U R                   (       Ga  U R                  R                  5       u  p#Uc  U R                  U5        OUS   S:X  a  U R                  U5        OUS   S:X  a  U R                  U5        OUS   S:X  a5  U R                  (       a#  U R                  SU R                  US      U5        ORUS   S	:X  a  U R!                  U5        O7US   S
:X  a  U R#                  X#S   S   US   S   5        OSUS   -  (       d   eU R                   (       a  GM  gg)zzSends a sourcedir to all added targets.

raises indicates whether to raise an error or return in case of lack of
targets.
z=no targets available, maybe you are trying call send() twice?Nxr   linksdoneack   	list_doner0   zUnknown command %s)r   r)   rE   r#   dirnamerF   r   _send_directory_structurer=   r<   r   getr,   r2   r7   r   r@   rT   )r   raisesr+   reqs       r   r0   
RSync.sendw   sa    ~~S  ''//"'',,t*LM&&t7 ')24 nnn--113LG{$$W-q6W$&&w/Vv%JJw'Vu_~~udkk#a&.A7KV{*OOG,Vv%OOGVAYAq	B/#a&888# nnnr   c                  ^ ^ U H  nUS;   a  M   e   SUU 4S jjnUR                  [        R                  5      mTR                  SSS9  TR	                  USS9  TR                  [        U5      U45        UT R                  T'   g)zOAdd a remote target specified via a gateway and a remote destination
directory.)deletec                @   > TR                   R                  TU 45        g r   )r   put)rd   r+   r   s    r   itemcallback&RSync.add_target.<locals>.itemcallback   s    ""GS>2r   F)py2str_as_py3strpy3str_as_py2strN)	endmarker)returnNone)remote_execexecnetrsync_remotereconfiguresetcallbackr0   r   r   )r   r*   destdirr6   optionsnamerj   r+   s   `      @r   
add_targetRSync.add_target   s     D;&&& 	3 	3 %%g&:&:;UUKLD9c'lG,-"2wr   c                L    U R                    H  nUR                  U5        M     g r   )r   r0   )r   msgr+   s      r   
_broadcastRSync._broadcast   s    ~~GLL &r   c                >    U R                   R                  XU45        g r   )r   rJ   )r   linktypebasename	linkpoints       r   
_send_linkRSync._send_link   s     	H	:;r   c                   / n/ n[         R                  " U5       H\  n[         R                  R                  X5      nU R	                  U5      (       d  M:  UR                  U5        UR                  U5        M^     [         R                  " U5      R                  nU R                  U/UQ5        U H  nU R                  U5        M     g r   )
rE   listdirr#   rF   r$   rJ   lstatst_moder}   ra   )r   r#   namessubpathsrx   pmodes          r   _send_directoryRSync._send_directory   s    JJt$DT(A{{1~~T""	 %
 xx~%%'A**1- r   c                   U R                   nU[        U R                   5      S-   S  n[        R                  " U5      n[        R                  R
                  S:X  aE  UR                  S5      (       a/  U R                   R                  S5      (       d  SU R                   -   n [        R                  R                  XB5      nUbl  U[        R                  [        R                  4;  aH  UR                  [        R                  [        R                  -   5      (       d  U R                  SX55        OU R                  SX45        U R                  S 5        g ! [         a    S n Nf = f)Nr^   ntpathz\\?\linkbaser1   )r   rI   rE   readlinkr#   __name__
startswithrelpath
ValueErrorcurdirpardirsepr   r}   )r   r#   r   r   r   r   s         r   _send_link_structureRSync._send_link_structure   s   OO	DOO,q023KK%	
 GG($$Y//OO..y99!DOO3I	ggooi;G 		29955&&ryy266'9::OOJ: OOFH8  	G	s   "E E#"E#c                    [         R                  " U5      n[        R
                  " UR                  5      (       a3  U R                  UR                  UR                  UR                  45        g [        R                  " UR                  5      (       a  U R                  U5        g [        R                  " UR                  5      (       a  U R                  U5        g [        SU< 35      e! [         a    U R                  S5         g f = f)N)Nr   r   zcannot sync )rE   r   r)   r}   statS_ISREGr   st_mtimest_sizeS_ISDIRr   S_ISLNKr   r   )r   r#   sts      r   ra   RSync._send_directory_structure   s    	$B <<

##OORZZbjjAB\\"**%%  &\\"**%%%%d+|D8455  	OOL)	s   C- -D
D)r   r   r   r=   r   r   r<   r   r!   )r   boolro   rp   )r#   r   ro   r   )r+   r
   ro   rp   )r+   r
   rN   z	list[str]rO   bytesro   rp   )r*   r	   rS   r   ro   rp   )T)rc   r   ro   rp   r   )r*   r   rv   zstr | os.PathLike[str]r6   zCallable[[], None] | Nonero   rp   )r|   objectro   rp   )r   zLiteral['linkbase', 'link']r   r   r   r   ro   rp   )r#   r   ro   rp   )r   
__module____qualname____firstlineno____doc__r   r$   r,   r2   r7   r@   rT   rM   r0   ry   r}   r   r   r   ra   __static_attributes__r"   r   r   r   r      s    M*Q/ '0 	
 
B7(9\ 7;	33 (3 4	3 
3*<-< < 	<
 
<.86r   r   )r   
__future__r   rE   r   hashlibr   queuer   typingr   r   execnet.rsync_remoterr   execnet.gatewayr   execnet.gateway_baser	   r
   r   r"   r   r   <module>r      s9    # 	       # , (d6 d6r   