????
Your IP : 3.17.177.21
B
� ff&�@s�dZddlZddlZddlmZdddddgZiZd Zd
ddd
ddddgZdd�Z d"dd�Z
dd�Zdd�ZGdd�d�Z
d#dd�Zee
fdd�Zdd�Zdd �Zed!kr�e�dS)$z�Utilities for comparing files and directories.
Classes:
dircmp
Functions:
cmp(f1, f2, shallow=True) -> int
cmpfiles(a, b, common) -> ([], [], [])
clear_cache()
�N)�filterfalse�clear_cache�cmp�dircmp�cmpfiles�DEFAULT_IGNORESi ZRCSZCVSZtagsz.gitz.hgz.bzrZ_darcs�__pycache__cCst��dS)zClear the filecmp cache.N)�_cache�clear�rr�,/opt/alt/python37/lib64/python3.7/filecmp.pyrsTcCs�tt�|��}tt�|��}|dtjks8|dtjkr<dS|rL||krLdS|d|dkr`dSt�||||f�}|dkr�t||�}tt�dkr�t�|t||||f<|S)a�Compare two files.
Arguments:
f1 -- First file name
f2 -- Second file name
shallow -- Just check stat signature (do not read the files).
defaults to True.
Return value:
True if the files are the same, False otherwise.
This function uses a cache for past comparisons and the results,
with cache entries invalidated if their stat information
changes. The cache may be cleared by calling clear_cache().
rFT�N�d) �_sig�os�stat�S_IFREGr �get�_do_cmp�lenr)�f1�f2�shallow�s1�s2Zoutcomerrrrs
cCst�|j�|j|jfS)N)r�S_IFMT�st_mode�st_size�st_mtime)�strrrrDs
rc
Csbt}t|d��J}t|d��4}x,|�|�}|�|�}||kr>dS|sdSqWWdQRXWdQRXdS)N�rbFT)�BUFSIZE�open�read)rr�bufsize�fp1�fp2Zb1Zb2rrrrIs
rc@s�eZdZdZddd�Zdd�Zdd�Zd d
�Zdd�Zd
d�Z dd�Z
dd�Zdd�Zdd�Z
ee eeeeeeeeeeed�Zdd�ZdS)raMA class that manages the comparison of 2 directories.
dircmp(a, b, ignore=None, hide=None)
A and B are directories.
IGNORE is a list of names to ignore,
defaults to DEFAULT_IGNORES.
HIDE is a list of names to hide,
defaults to [os.curdir, os.pardir].
High level usage:
x = dircmp(dir1, dir2)
x.report() -> prints a report on the differences between dir1 and dir2
or
x.report_partial_closure() -> prints report on differences between dir1
and dir2, and reports on common immediate subdirectories.
x.report_full_closure() -> like report_partial_closure,
but fully recursive.
Attributes:
left_list, right_list: The files in dir1 and dir2,
filtered by hide and ignore.
common: a list of names in both dir1 and dir2.
left_only, right_only: names only in dir1, dir2.
common_dirs: subdirectories in both dir1 and dir2.
common_files: files in both dir1 and dir2.
common_funny: names in both dir1 and dir2 where the type differs between
dir1 and dir2, or the name is not stat-able.
same_files: list of identical files.
diff_files: list of filenames which differ.
funny_files: list of files which could not be compared.
subdirs: a dictionary of dircmp objects, keyed by names in common_dirs.
NcCsD||_||_|dkr$tjtjg|_n||_|dkr:t|_n||_dS)N)�left�rightr�curdir�pardir�hider�ignore)�self�a�br,r+rrr�__init__xszdircmp.__init__cCsPtt�|j�|j|j�|_tt�|j�|j|j�|_|j� �|j� �dS)N)
�_filterr�listdirr'r+r,� left_listr(�
right_list�sort)r-rrr�phase0�s
z
dircmp.phase0cCs�ttttjj|j�|j��}ttttjj|j�|j��}tt|j t
|j|���|_tt|j t
|j|���|_tt|j t
|j|���|_dS)N)�dict�zip�mapr�path�normcaser3r4�list�__getitem__�filter�__contains__�commonr� left_only�
right_only)r-r.r/rrr�phase1�s
z
dircmp.phase1c
Cs:g|_g|_g|_�x |jD�]}tj�|j|�}tj�|j|�}d}yt� |�}Wn&t
k
rz}zd}Wdd}~XYnXyt� |�}Wn&t
k
r�}zd}Wdd}~XYnX|�r&t �|j�}t �|j�} || kr�|j�
|�n>t �|�r�|j�
|�n&t �|��r|j�
|�n|j�
|�q|j�
|�qWdS)Nr
r)�common_dirs�common_files�common_funnyr@rr:�joinr'r(r�OSErrorrr�append�S_ISDIR�S_ISREG)
r-�xZa_pathZb_path�okZa_statZwhyZb_statZa_typeZb_typerrr�phase2�s4
z
dircmp.phase2cCs&t|j|j|j�}|\|_|_|_dS)N)rr'r(rE�
same_files�
diff_files�funny_files)r-Zxxrrr�phase3�sz
dircmp.phase3cCsRi|_xF|jD]<}tj�|j|�}tj�|j|�}t|||j|j �|j|<qWdS)N)
�subdirsrDrr:rGr'r(rr,r+)r-rLZa_xZb_xrrr�phase4�s
z
dircmp.phase4cCs(|��x|j��D]}|��qWdS)N)rTrS�values�phase4_closure)r-�sdrrrrV�szdircmp.phase4_closurecCs�td|j|j�|jr2|j��td|jd|j�|jrT|j��td|jd|j�|jrp|j��td|j�|jr�|j��td|j�|jr�|j��td|j�|j r�|j ��td|j �|j
r�|j
��td|j
�dS) NZdiffzOnly in�:zIdentical files :zDiffering files :zTrouble with common files :zCommon subdirectories :zCommon funny cases :)�printr'r(rAr5rBrOrPrQrDrF)r-rrr�report�s,
z
dircmp.reportcCs.|��x |j��D]}t�|��qWdS)N)rZrSrUrY)r-rWrrr�report_partial_closure�szdircmp.report_partial_closurecCs.|��x |j��D]}t�|��qWdS)N)rZrSrUrY�report_full_closure)r-rWrrrr\�szdircmp.report_full_closure)rSrOrPrQrDrErFr@rArBr3r4cCs*||jkrt|��|j||�t||�S)N)� methodmap�AttributeError�getattr)r-�attrrrr�__getattr__�s
zdircmp.__getattr__)NN)�__name__�
__module__�__qualname__�__doc__r0r6rCrNrRrTrVrZr[r\r7r]rarrrrrVs"
#
cCsNgggf}x>|D]6}tj�||�}tj�||�}|t|||��|�qW|S)a]Compare common files in two directories.
a, b -- directory names
common -- list of file names found in both directories
shallow -- if true, do comparison based solely on stat() information
Returns a tuple of three lists:
files that compare equal
files that are different
filenames that aren't regular files.
)rr:rG�_cmprI)r.r/r@rZresrLZaxZbxrrrr�s
cCs,y|||||��Stk
r&dSXdS)N�)rH)r.r/Zsh�absrrrrrfsrfcCstt|j|��S)N)r<rr?)Zflist�skiprrrr1sr1cCsrddl}ddl}|�|jdd�d�\}}t|�dkrB|�dd��t|d|d�}d|krf|��n|��dS)Nrr
�rrgzneed exactly two args)z-r�)�sys�getopt�argvrZGetoptErrorrr\rZ)rlrmZoptions�argsZddrrr�demo$s
rp�__main__)T)T)rerr� itertoolsr�__all__r r!rrrrrrrrhrfr1rprbrrrr�<module>s&
'
%