grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026§ ÕV¦Fe {ãó—dZddlZddlZddlmZddlmZgd¢ZiZdZ gd¢Z d„Z dd „Z d „Z d „ZGd „d¦«Zdd„Zee fd„Zd„Zd„Zedkr e¦«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 )ÚRCSÚCVSÚtagsz.gitz.hgz.bzrÚ_darcsÚ __pycache__có8—t ¦«dS)zClear the filecmp cache.N)Ú_cacheÚclear©óú./opt/alt/python311/lib64/python3.11/filecmp.pyrrs€å ‡L‚L�N„N€N€N€NrTcóê—ttj|¦«¦«}ttj|¦«¦«}|dtjks|dtjkrdS|r||krdS|d|dkrdSt ||||f¦«}|€Dt ||¦«}tt¦«dkrt¦«|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Ús2Úoutcomes rrrsÜ€õ. �bŒg�b‰kŒkÑ Ô €BÝ �bŒg�b‰kŒkÑ Ô €BØ ˆ!„u•” ÒР 1¤­¬Ò 5Ð 5؈uØð�2˜’8�8؈tØ ˆ!„u��1”‚~€~؈uå�jŠj˜"˜b " bÐ)Ñ*Ô*€G؀ݘ"˜b‘/”/ˆÝ �v‰;Œ;˜Ò Ð Ý ‰MŒMˆMØ!(�ˆr�2�r˜2ˆ~ÑØ €NrcóN—tj|j¦«|j|jfS©N)rÚS_IFMTÚst_modeÚst_sizeÚst_mtime)Ústs rrrFs%€Ý ŒK˜œ Ñ #Ô #Ø ŒJØ ŒKð ðrcój—t}t|d¦«5}t|d¦«5} | |¦«}| |¦«}||kr ddd¦«ddd¦«dS|s ddd¦«ddd¦«dSŒe#1swxYwYddd¦«dS#1swxYwYdS)NÚrbTF)ÚBUFSIZEÚopenÚread)rr ÚbufsizeÚfp1Úfp2Úb1Úb2s rrrKsƒ€Ý€GÝ ˆb�$‰Œð˜3¥ R¨¡¤ð°#ð Ø—’˜'Ñ"Ô"ˆBØ—’˜'Ñ"Ô"ˆBØ�RŠxˆxØð ððñôððððñôðððð ð Øðððñôððððñôðððð ððððøøøðððððððñôðððððððøøøððððððsF˜B(©3BÁ B(Á4BÁ7 B(ÂBÂB ÂB(ÂB ÂB(Â(B,Â/B,cóš—eZdZdZdd„Zd„Zd„Zd„Zd„Zd„Z d „Z d „Z d „Z d „Z ee eeeeeeeeeee¬ ¦ « Zd„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. Ncóž—||_||_|€tjtjg|_n||_|€t |_dS||_dSr&)ÚleftÚrightrÚcurdirÚpardirÚhider Úignore)ÚselfÚaÚbr=r<s rÚ__init__zdircmp.__init__|sI€ØˆŒ ؈Œ Ø ˆ<Ýœ¥B¤IÐ.ˆDŒIˆIàˆDŒIØ ˆ>Ý)ˆDŒKˆKˆKà ˆDŒKˆKˆKrcóN—ttj|j¦«|j|jz¦«|_ttj|j¦«|j|jz¦«|_|j  ¦«|j  ¦«dSr&) Ú_filterrÚlistdirr8r<r=Ú left_listr9Ú right_listÚsort©r>s rÚphase0z dircmp.phase0ˆs†€Ý ¥¤¨D¬IÑ!6Ô!6Ø!%¤¨4¬;Ñ!6ñ8ô8ˆŒå!¥"¤*¨T¬ZÑ"8Ô"8Ø"&¤)¨D¬KÑ"7ñ9ô9ˆŒà Œ×ÒÑÔÐØ Œ×ÒÑÔÐÐÐrc ór—ttttjj|j¦«|j¦«¦«}ttttjj|j¦«|j¦«¦«}tt|j t|j |¦«¦«¦«|_ tt|j t|j |¦«¦«¦«|_tt|j t|j |¦«¦«¦«|_dSr&)ÚdictÚzipÚmaprÚpathÚnormcaserErFÚlistÚ __getitem__ÚfilterÚ __contains__ÚcommonrÚ left_onlyÚ right_only)r>r?r@s rÚphase1z dircmp.phase1�sÏ€Ý ••S�œÔ)¨4¬>Ñ:Ô:¸D¼NÑKÔKÑ LÔ LˆÝ ••S�œÔ)¨4¬?Ñ;Ô;¸T¼_ÑMÔMÑ NÔ NˆÝ�3˜qœ}­f°Q´^ÀQÑ.GÔ.GÑHÔHÑIÔIˆŒ Ý�c !¤-µ¸Q¼^ÈQÑ1OÔ1OÑPÔPÑQÔQˆŒÝ�s 1¤=µ+¸a¼nÈaÑ2PÔ2PÑQÔQÑRÔRˆŒˆˆrcóV—g|_g|_g|_|jD�]Š}tj |j|¦«}tj |j|¦«}d} t j |¦«}n#t$rd}YnwxYw t j |¦«}n#t$rd}YnwxYw|rÏtj |j ¦«}tj |j ¦«}||kr|j  |¦«Œôtj|¦«r|j  |¦«�Œ$tj|¦«r|j  |¦«�ŒT|j  |¦«�Œp|j  |¦«�ŒŒdS)Nrr)Ú common_dirsÚ common_filesÚ common_funnyrTrrNÚjoinr8r9rÚOSErrorr'r(ÚappendÚS_ISDIRÚS_ISREG) r>ÚxÚa_pathÚb_pathÚokÚa_statÚb_statÚa_typeÚb_types rÚphase2z dircmp.phase2—sµ€ØˆÔØˆÔØˆÔà”ð ,ñ ,ˆAÝ”W—\’\ $¤)¨QÑ/Ô/ˆFÝ”W—\’\ $¤*¨aÑ0Ô0ˆFàˆBð Ýœ ™œ��øÝð ð ð à���ð øøøð Ýœ ™œ��øÝð ð ð à���ð øøøðð ,Ýœ V¤^Ñ4Ô4�Ýœ V¤^Ñ4Ô4�ؘVÒ#Ð#ØÔ%×,Ò,¨QÑ/Ô/Ð/Ð/Ý”\ &Ñ)Ô)ð0ØÔ$×+Ò+¨AÑ.Ô.Ð.Ñ.Ý”\ &Ñ)Ô)ð0ØÔ%×,Ò,¨QÑ/Ô/Ð/Ñ/àÔ%×,Ò,¨QÑ/Ô/Ð/Ñ/àÔ!×(Ò(¨Ñ+Ô+Ð+Ñ+ð9 ,ð ,s$Á-B BÂBÂB*Â* B9Â8B9cóp—t|j|j|j¦«}|\|_|_|_dSr&)rr8r9rZÚ same_filesÚ diff_filesÚ funny_files)r>Úxxs rÚphase3z dircmp.phase3ºs3€Ý �d”i ¤¨TÔ->Ñ ?Ô ?ˆØ=?Ñ:ˆŒ˜œ¨$Ô*:Ð*:Ð*:rcó—i|_|jD]v}tj |j|¦«}tj |j|¦«}| |||j|j ¦«|j|<ŒwdSr&) ÚsubdirsrYrrNr\r8r9Ú __class__r=r<)r>raÚa_xÚb_xs rÚphase4z dircmp.phase4¾s|€ð ˆŒ ØÔ!ð Pð PˆAÝ”'—,’,˜tœy¨!Ñ,Ô,ˆCÝ”'—,’,˜tœz¨1Ñ-Ô-ˆCØ#Ÿ~š~¨c°3¸¼ ÀTÄYÑOÔOˆDŒL˜‰OˆOð Pð PrcóŽ—| ¦«|j ¦«D]}| ¦«ŒdSr&)rurqÚvaluesÚphase4_closure©r>Úsds rrxzdircmp.phase4_closureÉsK€Ø � Š ‰ Œ ˆ Ø”,×%Ò%Ñ'Ô'ð ð ˆBØ × Ò Ñ Ô Ð Ð ð ð rcóB—td|j|j¦«|jr5|j ¦«td|jd|j¦«|jr5|j ¦«td|jd|j¦«|jr.|j ¦«td|j¦«|jr.|j ¦«td|j¦«|jr.|j ¦«td|j¦«|j r.|j  ¦«td|j ¦«|j r0|j  ¦«td|j ¦«dSdS) NÚdiffzOnly inú:zIdentical files :zDiffering files :zTrouble with common files :zCommon subdirectories :zCommon funny cases :) Úprintr8r9rUrGrVrkrlrmrYr[rHs rÚreportz dircmp.reportÎs“€å ˆf�d”i ¤Ñ,Ô,Ð,Ø Œ>ð =Ø ŒN× Ò Ñ !Ô !Ð !Ý �)˜TœY¨¨T¬^Ñ <Ô <Ð <Ø Œ?ð ?Ø ŒO× Ò Ñ "Ô "Ð "Ý �)˜TœZ¨¨d¬oÑ >Ô >Ð >Ø Œ?ð 8Ø ŒO× Ò Ñ "Ô "Ð "Ý Ð% t¤Ñ 7Ô 7Ð 7Ø Œ?ð 8Ø ŒO× Ò Ñ "Ô "Ð "Ý Ð% t¤Ñ 7Ô 7Ð 7Ø Ô ð CØ Ô × !Ò !Ñ #Ô #Ð #Ý Ð/°Ô1AÑ BÔ BÐ BØ Ô ð ?Ø Ô × !Ò !Ñ #Ô #Ð #Ý Ð+¨TÔ-=Ñ >Ô >Ð >Ø Ô ð =Ø Ô × "Ò "Ñ $Ô $Ð $Ý Ð(¨$Ô*;Ñ <Ô <Ð <Ð <Ð <ð =ð =rcóª—| ¦«|j ¦«D]$}t¦«| ¦«Œ%dSr&)rrqrwr~rys rÚreport_partial_closurezdircmp.report_partial_closureçsN€Ø � Š ‰ Œ ˆ Ø”,×%Ò%Ñ'Ô'ð ð ˆBÝ ‰GŒGˆGØ �IŠI‰KŒKˆKˆKð ð rcóª—| ¦«|j ¦«D]$}t¦«| ¦«Œ%dSr&)rrqrwr~Úreport_full_closurerys rrƒzdircmp.report_full_closureísT€Ø � Š ‰ Œ ˆ Ø”,×%Ò%Ñ'Ô'ð %ð %ˆBÝ ‰GŒGˆGØ × "Ò "Ñ $Ô $Ð $Ð $ð %ð %r) rqrkrlrmrYrZr[rTrUrVrErFcó~—||jvrt|¦«‚|j||¦«t||¦«Sr&)Ú methodmapÚAttributeErrorÚgetattr)r>Úattrs rÚ __getattr__zdircmp.__getattr__ùsD€Ø �t”~Ð %Ð %Ý  Ñ&Ô&Ð &؈Œ�tÔ˜TÑ"Ô"Ð"Ý�t˜TÑ"Ô"Ð"r)NN)Ú__name__Ú __module__Ú __qualname__Ú__doc__rArIrWrirorurxrr�rƒrKr…r‰Ú classmethodrÚ__class_getitem__rrrrrXs€€€€€ð! ð! ðF !ð !ð !ð !ððððSðSðSð!,ð!,ð!,ðF@ð@ð@ð Pð Pð Pð ð ð ð =ð=ð=ð2ððð %ð%ð%ð �˜VØ &°6ÀvØ#)¸ÈVØ"¨fÀØ%°&ð :ñ:ô:€Ið #ð#ð#ð $˜  LÑ1Ô1ÐÐÐrrcóî—gggf}|D]l}tj ||¦«}tj ||¦«}|t|||¦« |¦«Œm|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. )rrNr\Ú_cmpr^)r?r@rTr!ÚresraÚaxÚbxs rrrsu€ð ˆr�2ˆ,€CØ ð-ð-ˆÝ ŒW�\Š\˜!˜QÑ Ô ˆÝ ŒW�\Š\˜!˜QÑ Ô ˆØ �D��R˜Ñ !Ô !Ô"×)Ò)¨!Ñ,Ô,Ð,Ð,Ø €JrcóT— |||||¦«¦« S#t$rYdSwxYw)Né)r])r?r@ÚshÚabsrs rr‘r‘sH€ðØ�3�s�s˜1˜a ‘}”}Ñ%Ô%Ð%Ð%øÝ ððð؈qˆqðøøøs ‚™ '¦'cóF—tt|j|¦«¦«Sr&)rPrrS)ÚflistÚskips rrCrC&s€Ý • ˜DÔ-¨uÑ5Ô5Ñ 6Ô 6Ð6rcóH—ddl}ddl}| |jdd…d¦«\}}t|¦«dkr| dd¦«‚t |d|d¦«}d|vr| ¦«dS| ¦«dS)NrrÚrr–zneed exactly two args)z-rÚ)ÚsysÚgetoptÚargvrÚ GetoptErrorrrƒr)rŸr ÚoptionsÚargsÚdds rÚdemor¦,s¦€Ø€J€J€JØ€M€M€MØ—M’M #¤(¨1¨2¨2¤,°Ñ4Ô4�M€GˆTÝ ˆ4�y„y�A‚~€~Ø× Ò Ð!8¸$Ñ?Ô?Ð?Ý ��Q”˜˜aœÑ !Ô !€BØ�WÐÐØ ×ÒÑ Ô Ð Ð Ð à � Š ‰ Œ ˆ ˆ ˆ rÚ__main__)T)r�rrÚ itertoolsrÚtypesrÚ__all__rr.r rrrrrrr˜r‘rCr¦rŠrrrúr«sTðð ð ð € € € Ø € € € Ø!Ð!Ð!Ð!Ð!Ð!ØÐÐÐÐÐà IÐ IÐ I€à €Ø €ðJðJðJ€ðððð&ð&ð&ð&ðPððð ð ð ðg2ðg2ðg2ðg2ðg2ñg2ôg2ðg2ðTðððð6 ððððð7ð7ð7ð ð ð ð ˆzÒÐØ€D�F„F€F€F€FðÐr