a
    ãze('  ã                   @   sª   d dl Z d dlZd dlmZ d dlmZ g d¢Zi ZdZg d¢Z	dd„ Z
dd
d„Zdd„ Zdd„ ZG dd„ dƒZddd„Zeefdd„Zdd„ Zdd„ Zedkr¦eƒ  dS )é    N)Úfilterfalse)ÚGenericAlias)Úclear_cacheÚcmpÚdircmpÚcmpfilesÚDEFAULT_IGNORESi    )ÚRCSÚCVSÚtagsz.gitz.hgz.bzrÚ_darcsÚ__pycache__c                   C   s   t  ¡  d S ©N)Ú_cacheÚclear© r   r   ú/usr/lib/python3.9/filecmp.pyr      s    r   Tc                 C   sª   t t | ¡ƒ}t t |¡ƒ}|d tjks8|d tjkr<dS |rL||krLdS |d |d kr`dS t | |||f¡}|d u r¦t| |ƒ}ttƒdkr–tƒ  |t| |||f< |S )Nr   FTé   éd   )	Ú_sigÚosÚstatÚS_IFREGr   ÚgetÚ_do_cmpÚlenr   )Úf1Úf2ÚshallowÚs1Ús2Úoutcomer   r   r   r      s    
r   c                 C   s   t  | j¡| j| jfS r   )r   ÚS_IFMTÚst_modeÚst_sizeÚst_mtime)Ústr   r   r   r   F   s    
þr   c              	   C   s¶   t }t| dƒ”}t|dƒj}| |¡}| |¡}||krTW d   ƒ W d   ƒ dS |sW d   ƒ W d   ƒ dS qW d   ƒ n1 sŠ0    Y  W d   ƒ n1 s¨0    Y  d S )NÚrbFT)ÚBUFSIZEÚopenÚread)r   r   ÚbufsizeÚfp1Úfp2Úb1Úb2r   r   r   r   K   s    

r   c                   @   sŽ   e Zd Zddd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZeeeeeeeeeeeeedZdd„ ZeeƒZdS )r   Nc                 C   sD   || _ || _|d u r$tjtjg| _n|| _|d u r:t| _n|| _d S r   )ÚleftÚrightr   ÚcurdirÚpardirÚhider   Úignore)ÚselfÚaÚbr5   r4   r   r   r   Ú__init__z   s    zdircmp.__init__c                 C   sP   t t | j¡| j| j ƒ| _t t | j¡| j| j ƒ| _| j 	¡  | j 	¡  d S r   )
Ú_filterr   Úlistdirr0   r4   r5   Ú	left_listr1   Ú
right_listÚsort©r6   r   r   r   Úphase0†   s    
ÿ
ÿ
zdircmp.phase0c                 C   sŠ   t tttjj| jƒ| jƒƒ}t tttjj| jƒ| jƒƒ}tt|j	t
|j|ƒƒƒ| _tt|j	t|j|ƒƒƒ| _tt|j	t|j|ƒƒƒ| _d S r   )ÚdictÚzipÚmapr   ÚpathÚnormcaser<   r=   ÚlistÚ__getitem__ÚfilterÚ__contains__Úcommonr   Ú	left_onlyÚ
right_only)r6   r7   r8   r   r   r   Úphase1Ž   s
    zdircmp.phase1c           	   	   C   s  g | _ g | _g | _| jD ]ð}tj | j|¡}tj | j|¡}d}zt 	|¡}W n t
yd   d}Y n0 zt 	|¡}W n t
yŠ   d}Y n0 |rüt	 |j¡}t	 |j¡}||kr¾| j |¡ n<t	 |¡rÖ| j  |¡ n$t	 |¡rî| j |¡ n| j |¡ q| j |¡ qd S )Nr   r   )Úcommon_dirsÚcommon_filesÚcommon_funnyrJ   r   rD   Újoinr0   r1   r   ÚOSErrorr"   r#   ÚappendÚS_ISDIRÚS_ISREG)	r6   ÚxÚa_pathÚb_pathÚokÚa_statÚb_statÚa_typeÚb_typer   r   r   Úphase2•   s4    




zdircmp.phase2c                 C   s&   t | j| j| jƒ}|\| _| _| _d S r   )r   r0   r1   rO   Ú
same_filesÚ
diff_filesÚfunny_files)r6   Úxxr   r   r   Úphase3¸   s    zdircmp.phase3c                 C   sN   i | _ | jD ]<}tj | j|¡}tj | j|¡}t||| j| j	ƒ| j |< qd S r   )
ÚsubdirsrN   r   rD   rQ   r0   r1   r   r5   r4   )r6   rV   Úa_xÚb_xr   r   r   Úphase4¼   s
    
zdircmp.phase4c                 C   s$   |   ¡  | j ¡ D ]}| ¡  qd S r   )rg   rd   ÚvaluesÚphase4_closure©r6   Úsdr   r   r   ri   Æ   s    zdircmp.phase4_closurec                 C   sä   t d| j| jƒ | jr2| j ¡  t d| jd| jƒ | jrT| j ¡  t d| jd| jƒ | jrp| j ¡  t d| jƒ | jrŒ| j ¡  t d| jƒ | jr¨| j ¡  t d| jƒ | j	rÄ| j	 ¡  t d| j	ƒ | j
rà| j
 ¡  t d| j
ƒ d S )	NÚdiffzOnly inú:zIdentical files :zDiffering files :zTrouble with common files :zCommon subdirectories :zCommon funny cases :)Úprintr0   r1   rK   r>   rL   r_   r`   ra   rN   rP   r?   r   r   r   ÚreportË   s,    






zdircmp.reportc                 C   s*   |   ¡  | j ¡ D ]}tƒ  |  ¡  qd S r   )ro   rd   rh   rn   rj   r   r   r   Úreport_partial_closureä   s    zdircmp.report_partial_closurec                 C   s*   |   ¡  | j ¡ D ]}tƒ  | ¡  qd S r   )ro   rd   rh   rn   Úreport_full_closurerj   r   r   r   rq   ê   s    zdircmp.report_full_closure)rd   r_   r`   ra   rN   rO   rP   rJ   rK   rL   r<   r=   c                 C   s*   || j vrt|ƒ‚| j | | ƒ t| |ƒS r   )Ú	methodmapÚAttributeErrorÚgetattr)r6   Úattrr   r   r   Ú__getattr__ö   s    
zdircmp.__getattr__)NN)Ú__name__Ú
__module__Ú__qualname__r9   r@   rM   r^   rc   rg   ri   ro   rp   rq   rA   rr   rv   Úclassmethodr   Ú__class_getitem__r   r   r   r   r   X   s$   "
#
ür   c                 C   sJ   g g g f}|D ]6}t j | |¡}t j ||¡}|t|||ƒ  |¡ q|S r   )r   rD   rQ   Ú_cmprS   )r7   r8   rJ   r   ÚresrV   ÚaxÚbxr   r   r   r   ÿ   s    
r   c                 C   s.   z||| ||ƒƒ W S  t y(   Y dS 0 d S )Né   )rR   )r7   r8   ÚshÚabsr   r   r   r   r|     s    r|   c                 C   s   t t|j| ƒƒS r   )rF   r   rI   )ÚflistÚskipr   r   r   r:   #  s    r:   c                  C   sr   dd l } dd l}| | jdd … d¡\}}t|ƒdkrB| dd ¡‚t|d |d ƒ}d|v rf| ¡  n| ¡  d S )Nr   r   Úrr€   zneed exactly two args)z-rÚ )ÚsysÚgetoptÚargvr   ÚGetoptErrorr   rq   ro   )r‡   rˆ   ÚoptionsÚargsÚddr   r   r   Údemo)  s    
rŽ   Ú__main__)T)T)r   r   Ú	itertoolsr   Útypesr   Ú__all__r   r(   r   r   r   r   r   r   r   r‚   r|   r:   rŽ   rw   r   r   r   r   Ú<module>   s&   
( (
	