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/S3/__pycache__/FileLists.cpython-310.pyc
o

�Qaf�@s(ddlmZddlmZddlmZddlmZddlmZddlmZmZddl	m
Z
mZmZm
Z
dd	lmZdd
lmZddlmZmZmZddlZddlZddlZddlZddlZddlZejd
kZgd�Zdd�Zdd�Zdd�Z dd�Z!dd�Z"dd�Z#d"dd�Z$ddifdd�Z%d d!�Z&dS)#�)�absolute_import�)�S3)�Config)�S3Uri)�FileDict)�dateS3toUnix�dateRFC822toUnix)�	unicodise�deunicodise�
deunicodise_s�replace_nonprintables)�ParameterError)�	HashCache)�debug�info�warningN)�r)�fetch_local_list�fetch_remote_list�compare_filelistsccs��z	t�t|��}Wn
tyYdSwgg}}|D]#}t|�}tj�ttj�||���r:t||�s9|�	|�q|�	|�q|||fV|D]}tj�||�}tj�
t|��sct|�D]}|Vq]qHdS)z_
    Reimplementation of python's os.walk to nicely support unicode in input as in output.
    N)�os�listdirr�	Exceptionr
�path�isdir�join�handle_exclude_include_walk_dir�append�islink�_os_walk_unicode)�top�names�dirs�nondirs�name�new_path�x�r(�./usr/lib/python3/dist-packages/S3/FileLists.pyr !s,��


���r cCs�t�}tj�||d�}td|�d}|jD]!}|j�d�s%|j�d�s%q|�|�r7d}td|j	|�nq|rh|j
D]*}|j�d�sL|j�d�sLq=td||jf�|�|�rgd}td	|j|�nq=|rrtd
|�|Std|�|S)a

    Should this root/dirname directory be excluded? (otherwise included by default)
    Exclude dir matches in the current directory
    This prevents us from recursing down trees we know we want to ignore
    return True for including, and False for excluding
    �z	CHECK: %rFz\/$z	\/\Z(?ms)T�EXCL-MATCH: '%s'zINCL-TEST: %s ~ %s�INCL-MATCH: '%s'zEXCLUDE: %r�PASS: %r)rrrrr�exclude�pattern�endswith�search�
debug_exclude�include�
debug_include)�root�dirname�cfg�d�excluded�rr(r(r)r:s2

�

��rc
cs��tj�t|��sJ�t|g�}t|�D]F\}}}ttj�t|���}|D]4}tj�||�}ttj�t|���}tj�	t|��rY||ksM|�
|tjj�rTtd|�q%|�
|�q%q|D]}	t|	�D]\}}}|||fVqcq]dS)z�
    Walk filesystem, following symbolic links (but without recursion), on python2.4 and later

    If a symlink directory loop is detected, emit a warning and skip.
    E.g.: dir1/dir2/sym-dir -> ../dir2
    z+Skipping recursively symlinked directory %sN)rrrr�setr r
�realpathrr�
startswith�sepr�add)
r�walkdirs�dirpath�dirnames�	filenames�real_dirpathr6�current�real_current�walkdirr(r(r)�_fswalk_follow_symlinks]s*�
�
��	��rHccs&�t|�D]\}}}|||fVqdS)z\
    Directory tree generator

    path (str) is the root of the directory tree to walk
    N)r )rrArBrCr(r(r)�_fswalk_no_symlinksus��rIcCs�td�t�}tdd�}|��D]T}td|�d}|jD]}|�|�r1d}td|j|�nq|rL|jD]}|�|�rKd}td|j|�nq7|r^td|�||||<||=qtd	|�q||fS)
NzApplying --exclude/--includeF��ignore_case�	CHECK: %sTr+r,zEXCLUDE: %sr-)	rrr�keysr.r1r2r3r4)�src_listr7�exclude_list�filer9r:r(r(r)�filter_exclude_include~s4


�

�rQc
CsNdd�}i}|jD]�}zxd}|dkrtjtj��ddd�}n.ztjt|�dd�}Wn"tyK}ztd||j	f�WYd}~W|rF|�
�q	d}~ww|D]-}t|���}t
j�t
j�||��}tt
j�t|���}tt
j�t|���}	||||	�qNW|r�|�
�q	|r�|�
�wwg}
t|�D]}||}|��|
�|g|f�q�|
S)	NcSs(||vr|g||<dS||�|�dS)N)r)r8�key�valuer(r(r)�_append�sz(_get_filelist_from_file.<locals>._append�-r:F)�mode�closefd)rVzJ--files-from input file %s could not be opened for reading (%s), skipping.)�
files_from�io�open�sys�stdin�filenor�IOErrorr�strerror�closer
�striprr�normpathrr6�basename�sorted�sortr)
r7�
local_pathrT�filelist�fname�f�e�liner6rc�resultrR�valuesr(r(r)�_get_filelist_from_file�sF
	
�����
�rnFcs8��fdd�}��fdd�}�fdd�}t��t���jr-tj�t�j��r-���j�ntd�g}t	dd	�}d}t
|�ttt
fvrF|g}|dkrM�j}|D]"}	t|	�}
|
j
d
ks`td|	��|
��rl|sltd|	��|�|
�qO|D]
}
|||
��\}}qtt|�d
kr�d}t|�\}}||�}
|�|�||||
fS)Nc	sbt|�}d}td|�d}|D]�}|d7}|ddkr$td||f�|dkr)q||d}zt�t�t|���}WntyT}z
|jtjkrOWYd}~q�d}~ww||�	|j
|j|j|j
|j|j|d��||j
7}d	�jvr���|j|j
|j|j
�}|dur�z|�|�}Wn	ty�Yqw��|j|j
|j|j
|�|�||j|j
||j
�q|S)
NrzYRunning stat() and reading/calculating MD5 values on %d files, this may take some time...ri�z[%d/%d]rU�	full_name)�size�mtime�dev�inode�uid�gid�sr�md5)�lenrr�stat_result�statr�OSError�errno�ENOENT�update�st_size�st_mtime�st_dev�st_ino�st_uid�st_gid�sync_checksrw�get_md5r^r?�record_hardlink)	�loc_list�len_loc_list�
total_size�counter�
relative_filerorvrjrw)�cacher7r(r)�_fetch_local_list_info�sR���


��z0fetch_local_list.<locals>._fetch_local_list_infocs�td�|��dkr2z
t��}t��}Wn
ty!d}d}Ynwddd||ddd�|d<|dfS|��r\|��}|��}�rMt�j	�rMt
�|�}d}n �jrUt|�}nt
|�}d}nd}|��}|g|��gfg}d}|D]r\}	}
}|	�||d	�}|D]c}
tj�|	|
�}tj�t|��s�tj�t|��r�td
|�q}tj�t|��r��js�td|�q}tj�||
�}tjjdkr�d�|�tjj��}�jd
kr�t|�}|�d�r�|dd�}d|i||<q}qo||fS)Nz Compiling list of local files...rUr���)rorprqrtrurrrsTFr*rz"Skipping over non regular file: %szSkipping over symbolic link: %s�/�normalz./�ro)rrcr�geteuid�getegidrrrrxrXrn�follow_symlinksrHrIr6�replacer�isfiler�existsrrr>�split�urlencoding_moder
r=)r��	local_urir�rtru�
local_baserfrg�single_filer5r#�files�rel_rootriror�)r7�is_srcr(r)�_get_filelist_local�sn�
�	




��z-fetch_local_list.<locals>._get_filelist_localcs��jrAt�j�dkrC|��tr|��}n|��}|D]}|�dd�}|s&q|�|d||d|d�q|�	�|�
�j�dSdSdS)Nrrsrrrqrp)�
cache_filerxrX�mark_all_for_purge�PY3rm�
itervalues�get�unmark_for_purge�purge�save)r��
local_list�local_list_val_iter�f_infors�r7r(r)�_maintain_cache0s
��z)fetch_local_list.<locals>._maintain_cachez!No cache file found, creating it.FrJrPz.Expecting filename or directory instead of: %sz)Use --recursive to upload a directory: %sr)rrr�rrr�r�loadrr�type�list�tupler;�	recursiverrrrrxrQ)�argsr�r�r�r�r��
local_urisr�r��arg�uri�list_for_urirOr�r()r�r7r�r)r�s<-?


rcs��fdd��d��fdd�	}t��g}tdd�}t|�tttfvr$|g}|dkr+�j}|D]}t|�}|jdks>td	|��|�	|�q-d
}	|rn|D]"}||dd�\}
}|	|7}	|
D]}|
|||<|�
||
�|��qZqJn�|D]�}|��}
t
jd|
d
d�}t|�dkr�|\}}d|v}|t|�|d�\}
}|	|7}	|
D]}tj�|
|d|
�r�|
|||<q�qpttj�t|�����}|s�td|����||��|��d�}|r؈||�|||<|�d�}|r�|�
||�|	|�dd
�7}	qpt|�\}}|||	fS)Ncs�t���|�}|�d�sdS|�t|dd�|dd�d�t|dd�d��z|dd}|�d|i�td	|�WdStyJYdSw)
N�headerszcontent-length�etag�"'z
last-modified)rprw�	timestampzs3cmd-attrsrwzretreived md5=%s from headers)	r�object_infor�r~�intrar	r�KeyError)r��remote_item�responserwr�r(r)�_get_remote_attribsos
��z.fetch_remote_list.<locals>._get_remote_attribsTc
s�td|�t�d�}d}tt��}|j|��|��|�d�}|��}}|}|dkrF|ddkrF|d|�d�d�}t	d	|��|f�}t
|�}	td
d�}
d
}|dD]�}|d
|kr}|d
ddkr}tt
j�t|d
���}
|��}d}td
d�}
n|d
|	d�}
|��|
}|�|
�r�td�qUt|d�t|d�|d�d�|d
||ddd�|
|
<d|
|
dvrˆt	|�|
|
�|
|
d}|
�|
|�|t|d�7}|r�|
|fSqU|
|fS)Nz*Retrieving list of remote files for %s ...z\A\s*\Zr)�prefixr��
uri_paramsr*r�r�rz
s3://%s/%sFrJr��KeyTz(Empty object name on S3 found, ignoring.�Size�LastModified�ETagr�)rpr�rw�
object_key�object_uri_str�base_urirrrsrUrw)r�re�compilerr�bucket_list�bucket�object�rfindrrxrr
rrrcrr��matchrr�rra�
record_md5)�
remote_urir��empty_fname_rer��s3r��rem_base_original�rem_base�remote_uri_original�rem_base_len�rem_list�	break_nowr�rRr�rw)r�r�r(r)�_get_filelist_remote�sZ

�




�
�z/fetch_remote_list.<locals>._get_filelist_remoteFrJr�z Expecting S3 URI instead of '%s'r)r�z\*|\?r)�maxsplitr�r�r�z3Expecting S3 URI with a filename or --recursive: %s)r�r�r�rwrp)T)rrr�r�r�r;r�rrrr�r�r�r�r�rx�glob�fnmatchr
rrrcrr�r�rQ)r��require_attribsr�r�r��remote_uris�remote_listr�r�r��
objectlist�tmp_total_sizerR�uri_str�wildcard_split_resultr��rest�need_recursionr�rwrOr()r�r7r�r)rnsjB

�����


rc

sTdd�}��fdd�}|dkr|dkrJ�td�t��tdd�}g}td||�||�f�|��D]�}td	|�|�vrԈjrOtd
|�||=�|=q3z
||�|||�}	Wnttfyvtd|�td|�||=�|=Yq3w|	r�td
|�||=�|=q3z|�	|�}
Wnty�d}
Ynw|
dur�|
�j
vr���|
�}td||f�|�|||||
f�||=�|=q3��
||
�||||<||=�|=q3z|�	|�}
Wnty�d}
Ynw��|
�}|du�rtd||f�|�|||||
f�||=q3��
||
�q3���D]}||v�s||v�r"�|=�q|�||fS)NcSs|rdpdS)N�remote�localr()�	is_remoter(r(r)�__direction_strsz*compare_filelists.<locals>.__direction_strc		sPd}||vr
|�vstd|||v|�vf�dSd�jvrId�|vrId||vrI�|d||dkrItd|||d�|df�d}d�jv}|rp|dkr\d||dvsh|dkrpd�|dvrpd}td|�|r�|r�z|�|�}��|�}Wnttfy�td	|�td
|��w||kr�d}td|||f�|S)z@Return True if src_list[file] matches dst_list[file], else FalseTzE%s: does not exist in one side or the other: src_list=%s, dst_list=%sFrpz'xfer: %s (size mismatch: src=%s dst=%s)rwrUzdisabled md5 check for %s�IGNR: %s (disappeared)�%s: file disappeared, ignoring.z&XFER: %s (md5 mismatch: src=%s dst=%s))rr�rr�r^r{r)	rN�dst_lst�
src_remote�
dst_remoterP�
attribs_match�compare_md5�src_md5�dst_md5�r7�dst_listr(r)�_compares6
"
0
�z#compare_filelists.<locals>._compareFzVerifying attributes...rJz)Comparing filelists (direction: %s -> %s)rLzIGNR: %s (used --skip-existing)r�r�zIGNR: %s (transfer not needed)zDST COPY src: %s -> %szDST COPY dst: %s -> %s)rrrrrM�
skip_existingr^r{rr��by_md5�find_md5_onerr�)
rNr�r�r�r�r��update_list�
copy_pairsr��	same_filerw�dst1rir(r�r)rs|'
��
�

��r)FN)'�
__future__rrrrr�	BaseUtilsrr	�Utilsr
rrr
�
Exceptionsrr�loggingrrrrr[r�r�r|rY�version_infor��__all__r rrHrIrQrnrrrr(r(r(r)�<module>s:
#	
&-