Your IP : 216.73.216.12
o
S�g�'�@s�dZddlZddlZddlmZddlmZgd�ZiZdZ gd�Z
dd �Zddd�Zd
d�Z
dd�ZGdd�d�Zddd�Zeefdd�Zdd�Zdd�ZedkrWe�dSdS)z�Utilities for comparing files and directories.
Classes:
dircmp
Functions:
cmp(f1, f2, shallow=True) -> int
cmpfiles(a, b, common) -> ([], [], [])
clear_cache()
�N)�filterfalse)�GenericAlias)�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/python310/lib64/python3.10/filecmp.pyrsrTcCs�tt�|��}tt�|��}|dtjks|dtjkrdS|r&||kr&dS|d|dkr0dSt�||||f�}|durSt||�}tt�dkrKt�|t||||f<|S)aMCompare two files.
Arguments:
f1 -- First file name
f2 -- Second file name
shallow -- treat files as identical if their stat signatures (type, size,
mtime) are identical. Otherwise, files are considered different
if their sizes or contents differ. [default: 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�s2Zoutcomerrr
rs
rcCst�|j�|j|jfS�N)r�S_IFMT�st_mode�st_size�st_mtime)�strrr
rFs
�rc Cs�t}t|d��G}t|d��1} |�|�}|�|�}||kr, Wd�Wd�dS|s= Wd�Wd�dSq1sAwYWd�dS1sQwYdS)N�rbTF)�BUFSIZE�open�read)rr�bufsize�fp1�fp2Zb1Zb2rrr
rKs
��4�rc@s�eZdZdZddd�Zdd�Zdd�Zd d
�Zdd�Zd
d�Z dd�Z
dd�Zdd�Zdd�Z
ee eeeeeeeeeeed�Zdd�Zee�ZdS)ra�A 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 instances (or MyDirCmp instances if this
object is of type MyDirCmp, a subclass of dircmp), keyed by names
in common_dirs.
NcCsF||_||_|durtjtjg|_n||_|durt|_dS||_dSr)�left�rightr�curdir�pardir�hider�ignore)�self�a�br.r-rrr
�__init__|s
zdircmp.__init__cCsPtt�|j�|j|j�|_tt�|j�|j|j�|_|j� �|j� �dSr)
�_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|���|_dSr)�dict�zip�mapr�path�normcaser5r6�list�__getitem__�filter�__contains__�commonr� left_only�
right_only)r/r0r1rrr
�phase1�s
z
dircmp.phase1c Csg|_g|_g|_|jD]x}tj�|j|�}tj�|j|�}d}zt� |�}Wnt
y2d}Ynwzt� |�}Wnt
yEd}Ynw|r~t �|j�}t �|j�}||kr_|j�
|�qt �|�rk|j�
|�qt �|�rw|j�
|�q|j�
|�q|j�
|�qdS)Nrr)�common_dirs�common_files�common_funnyrCrr=�joinr)r*r�OSErrorrr�append�S_ISDIR�S_ISREG) r/�xZa_pathZb_path�okZa_statZb_statZa_typeZb_typerrr
�phase2�s:
��
�z
dircmp.phase2cCs&t|j|j|j�}|\|_|_|_dSr)rr)r*rH�
same_files�
diff_files�funny_files)r/Zxxrrr
�phase3�sz
dircmp.phase3cCsPi|_|jD]}tj�|j|�}tj�|j|�}|�|||j|j �|j|<qdSr)
�subdirsrGrr=rJr)r*� __class__r.r-)r/rOZa_xZb_xrrr
�phase4�s
�z
dircmp.phase4cCs$|��|j��D]}|��q dSr)rXrV�values�phase4_closure�r/Zsdrrr
rZ�s
�zdircmp.phase4_closurecCs�td|j|j�|jr|j��td|jd|j�|jr*|j��td|jd|j�|jr8|j��td|j�|jrF|j��td|j�|jrT|j��td|j�|j rb|j ��td|j �|j
rr|j
��td|j
�dSdS) NZdiffzOnly in�:zIdentical files :zDiffering files :zTrouble with common files :zCommon subdirectories :zCommon funny cases :)�printr)r*rDr7rErRrSrTrGrIr8rrr
�report�s.
�z
dircmp.reportcCs*|��|j��D] }t�|��q dSr)r^rVrYr]r[rrr
�report_partial_closure��
�zdircmp.report_partial_closurecCs*|��|j��D] }t�|��q dSr)r^rVrYr]�report_full_closurer[rrr
ra�r`zdircmp.report_full_closure)rVrRrSrTrGrHrIrCrDrEr5r6cCs*||jvr t|��|j||�t||�Sr)� methodmap�AttributeError�getattr)r/�attrrrr
�__getattr__�s
zdircmp.__getattr__)NN)�__name__�
__module__�__qualname__�__doc__r2r9rFrQrUrXrZr^r_rar:rbrf�classmethodr�__class_getitem__rrrr
rXs(
##�rcCsJgggf}|D]}tj�||�}tj�||�}|t|||��|�q|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=rJ�_cmprL)r0r1rCr�resrOZaxZbxrrr
rs
rcCs*z
|||||��WStyYdSw)N�)rK)r0r1Zsh�absrrrr
rms
�rmcCstt|j|��Sr)r?rrB)Zflist�skiprrr
r3&sr3cCstddl}ddl}|�|jdd�d�\}}t|�dkr!|�dd��t|d|d�}d|vr4|��dS|��dS)Nrr�rrozneed exactly two args)z-r�)�sys�getopt�argvrZGetoptErrorrrar^)rtruZoptions�argsZddrrr
�demo,srx�__main__)T)rjrr� itertoolsr�typesr�__all__r
r#rrrrrrrrprmr3rxrgrrrr
�<module>s,
(
+
�
?>