[f&@sdZddlZddlZddlmZdddddgZiZd#Zd d d dddddgZddZ dddZ ddZ ddZ GdddZ dddZee ddZddZd d!Zed"krendS)$zUtilities for comparing files and directories. Classes: dircmp Functions: cmp(f1, f2, shallow=True) -> int cmpfiles(a, b, common) -> ([], [], []) clear_cache() N) filterfalse clear_cachecmpdircmpcmpfilesDEFAULT_IGNORESiZRCSZCVSZtagsz.gitz.hgz.bzrZ_darcs __pycache__cCstjdS)zClear the filecmp cache.N)_cacheclearr r /usr/lib/python3.4/filecmp.pyrsTcCsttj|}ttj|}|dtjksP|dtjkrTdS|rj||krjdS|d|dkrdStj||||f}|dkrt||}ttdkrtn|t||||f 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||_||_|dkr6tjtjg|_n ||_|dkrWt|_n ||_dS)N)leftrightrcurdirpardirhiderignore)selfabr-r,r r r __init__xs      zdircmp.__init__cCsnttj|j|j|j|_ttj|j|j|j|_|jj |jj dS)N) _filterrlistdirr(r,r- left_listr) right_listsort)r.r r r phase0s  z dircmp.phase0cCsttttjj|j|j}ttttjj|j|j}tt|j t |j ||_ tt|j t |j ||_tt|j t |j ||_dS)N)dictzipmaprpathnormcaser4r5list __getitem__filter __contains__commonr left_only right_only)r.r/r0r r r phase1s **''z dircmp.phase1c Csg|_g|_g|_xy|jD]n}tjj|j|}tjj|j|}d}ytj |}Wn+t k r}z d}WYdd}~XnXytj |}Wn+t k r}z d}WYdd}~XnX|rt j |j }t j |j } || kr,|jj |qt j|rN|jj |qt j|rp|jj |q|jj |q%|jj |q%WdS)Nrr) common_dirs common_files common_funnyrArr;joinr(r)rOSErrorrrappendS_ISDIRS_ISREG) r.xZa_pathZb_pathokZa_statZwhyZb_statZa_typeZb_typer r r phase2s4    z dircmp.phase2cCs7t|j|j|j}|\|_|_|_dS)N)rr(r)rF same_files diff_files funny_files)r.Zxxr r r phase3sz dircmp.phase3cCssi|_xc|jD]X}tjj|j|}tjj|j|}t|||j|j |j| s$   '