a DOg('@sdZddlZddlZddlmZddlmZgdZiZdZ gdZ dd Z dd d Z d dZ ddZGdddZdddZee fddZddZddZedkredS)zUtilities for comparing files and directories. Classes: dircmp Functions: cmp(f1, f2, shallow=True) -> int cmpfiles(a, b, common) -> ([], [], []) clear_cache() N) filterfalse) GenericAlias) clear_cachecmpdircmpcmpfilesDEFAULT_IGNORESi )RCSCVStagsz.gitz.hgz.bzr_darcs __pycache__cCs tdS)zClear the filecmp cache.N)_cacheclearrr/usr/lib64/python3.9/filecmp.pyrsrTcCstt|}tt|}|dtjks8|dtjkr 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||_||_|dur$tjtjg|_n||_|dur:t|_n||_dSr!)leftrightrcurdirpardirhiderignore)selfabr5r4rrr__init__zszdircmp.__init__cCsPtt|j|j|j|_tt|j|j|j|_|j |j dSr!) _filterrlistdirr0r4r5 left_listr1 right_listsortr6rrrphase0s     z dircmp.phase0cCsttttjj|j|j}ttttjj|j|j}tt|j t |j ||_ tt|j t |j ||_tt|j t |j ||_dSr!)dictzipmaprpathnormcaser<r=list __getitem__filter __contains__commonr left_only right_only)r6r7r8rrrphase1s z dircmp.phase1c Csg|_g|_g|_|jD]}tj|j|}tj|j|}d}zt |}Wnt ydd}Yn0zt |}Wnt yd}Yn0|rt |j }t |j }||kr|j |nrLr_r`rarNrPr?rrrreports,           z dircmp.reportcCs*||jD]}t|qdSr!)rordrhrnrjrrrreport_partial_closureszdircmp.report_partial_closurecCs*||jD]}t|qdSr!)rordrhrnreport_full_closurerjrrrrqszdircmp.report_full_closure) rdr_r`rarNrOrPrJrKrLr<r=cCs*||jvrt||j||t||Sr!) methodmapAttributeErrorgetattr)r6attrrrr __getattr__s zdircmp.__getattr__)NN)__name__ __module__ __qualname____doc__r9r@rMr^rcrgrirorprqrArrrv classmethodr__class_getitem__rrrrrXs&! # rcCsJgggf}|D]6}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. )rrDrQ_cmprS)r7r8rJrresrVaxbxrrrrs rcCs.z||||| WSty(YdS0dS)N)rR)r7r8shabsrrrrr}s r}cCstt|j|Sr!)rFrrI)flistskiprrrr:#sr:cCsrddl}ddl}||jddd\}}t|dkrB|ddt|d|d}d|vrf|n|dS)Nrrrrzneed exactly two args)z-r)sysgetoptargvr GetoptErrorrrqro)rroptionsargsddrrrdemo)s   r__main__)T)T)rzrr itertoolsrtypesr__all__rr(rrrrrrrrr}r:rrwrrrrs(    ( (