HEX
Server: Apache
System: Linux pdx1-shared-a1-38 6.6.104-grsec-jammy+ #3 SMP Tue Sep 16 00:28:11 UTC 2025 x86_64
User: mmickelson (3396398)
PHP: 8.1.31
Disabled: NONE
Upload Files
File: //usr/lib/python3/dist-packages/duplicity/backends/__pycache__/rsyncbackend.cpython-310.pyc
o

��@a�@s�ddlmZddlmZddlZddlZddlZddlZddl	m
Z
ddlmZmZm
Z
Gdd�dejj�Zej�de�ejj�dg�dS)	�)�print_function)�mapN)�InvalidBackendURL)�config�tempdir�utilc@sHeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dS)�RsyncBackendz�Connect to remote store using rsync

    rsync backend contributed by Sebastian Wilhelmi <seppi@seppi.de>
    rsyncd auth, alternate port support
    Copyright 2010 by Edgar Soldin <edgar.soldin@web.de>
    c	CsXtjj�||�	|j}d}dtjvrtjd=|��r2|��\}}d||�	d�f|_
|r1d|}n-|r8|dnd}|j�d�rLd||j�	d	�f|_
nd
||j�	d	�f|_
|j
r_d|j
}|j
dd	krm|j
d	7_
|jr�|��r{|jtjd
<n	|jd|j
|_
d|_|��}|r�|tjd<|��r�|}nd|tjf}tj}d||f|_dS)zrsyncBackend initializer��	RSYNC_RSHz%s::%sz/:z
 --port=%s�:z//z%s/%s�/z%s%sz-p %s����USER�@F�RSYNC_PASSWORDz-e 'ssh %s -oBatchMode=yes %s'zrsync %s %sN)�	duplicity�backend�Backend�__init__�hostname�os�environ�over_rsyncd�get_rsync_path�lstrip�
url_string�path�
startswith�port�username�use_getpass�get_passwordr�ssh_options�
rsync_options�cmd)	�self�
parsed_url�hostrr�host_string�password�
portOption�rsyncOptions�r,�A/usr/lib/python3/dist-packages/duplicity/backends/rsyncbackend.pyr(sB	
�

zRsyncBackend.__init__cCs|jj}t�d|�rdSdS)Nz::[^:]*$TF)r&r�re�search)r%�urlr,r,r-r_szRsyncBackend.over_rsyncdcCsD|jj}t�d|�}|r|�d�|�d��d�fStd|�|���)Nz(:\d+|)?::([^:]*)$��rz"Could not determine rsync path: %s)r&rr.r/�grouprr�munge_password)r%r0�mr,r,r-rfs�zRsyncBackend.get_rsync_pathcCs:t�|�}tj�|j|�}d|j|j|f}|�|�dS�Nz%s %s %s�	r�fsdecoderr�joinrr$�uc_name�subprocess_popen)r%�source_path�remote_filename�remote_path�commandliner,r,r-�_putn�
zRsyncBackend._putcCs:t�|�}tj�|j|�}d|j||jf}|�|�dSr6r7)r%r=�
local_pathr>r?r,r,r-�_gettrAzRsyncBackend._getcCsBdd�}d|j|jf}|�|�\}}}dd�t||�d��D�S)NcSs,|��}t|�dkr|ddkr|dSdS)N��.)�split�len)�str�liner,r,r-rF{sz!RsyncBackend._list.<locals>.splitz%s %scSsg|]	}|rt�|��qSr,)r�fsencode)�.0�xr,r,r-�
<listcomp>�sz&RsyncBackend._list.<locals>.<listcomp>�
)r$rr;rrF)r%rFr?�result�stdout�stderrr,r,r-�_listzszRsyncBackend._listc	Cs"|}g}|��D]}||vr|�|�q|�|�qt��}t����\}}|g}|D]4}t�	|�}t
j�||�}	|�|	�zt
|	d�}
WntyTt||d�Yq+wt||d�|
��q+|��d|j|||jf}|�|�|D]}z	t�t
j|�Wquty�Yquwt
�|�dS)N�w)�filez0%s --recursive --delete --exclude-from=%s %s/ %s)rR�remove�append�tempfile�mkdtempr�default�mkstemp_filerr8rrr9�open�IsADirectoryError�print�closer$rr;�ignore_missing�unlink�rmdir)r%�
filename_list�delete_list�dont_delete_listrT�dir�exclude�exclude_name�	to_deleter�fr?r,r,r-�_delete_list�sB

�
�
�zRsyncBackend._delete_listN)�__name__�
__module__�__qualname__�__doc__rrrr@rCrRrjr,r,r,r-r!s7r�rsync)�
__future__r�builtinsrrr.rW�duplicity.backendr�duplicity.errorsrrrrrrr�register_backend�uses_netloc�extendr,r,r,r-�<module>s