grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026 й¼]‚kã@sÎdZdZdZdZdZddlmZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZyddlZddlZWnek rÔdZZYnXeefZyeef7ZWnek rYnXdd d d gZd Zd ZedZdZdZdZdZ dZ!dZ"d Z#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/d Z0dZ1d!Z2d"Z3e2Z4e"e#e$e%e(e)e*e&e'e+e,e-f Z5e"e#e*e-fZ6e+e,e-fZ7d#d$d%d&d'd(d)d*fZ8d#d$d)d*hZ9d+e:d,e:d&e:d'e;d(e;d%e;iZ<e j=d-d.fkr‚d/Z>n ej?ƒZ>d0d1„Z@d2d3„ZAd4d5„ZBd6e4d7d8„ZCd9d:„ZDded;d<„ZEd=d>„ZFd?d@„ZGGdAd „d eHƒZIGdBdC„dCeIƒZJGdDdE„dEeIƒZKGdFdG„dGeIƒZLGdHdI„dIeIƒZMGdJdK„dKeIƒZNGdLdM„dMeNƒZOGdNdO„dOeNƒZPGdPdQ„dQeNƒZQGdRdS„dSeNƒZRGdTdU„dUeNƒZSGdVdW„dWƒZTGdXdY„dYƒZUGdZd[„d[eVƒZWGd\d]„d]eVƒZXGd^d_„d_e jYƒZZGd`d „d eVƒZ[Gdad„deVƒZ\Gdbdc„dcƒZ]ddd „Z^e\jZdedf„Z_e`dgkrÊe_ƒdS)hz0.9.0u"Lars Gustäbel (lars@gustaebel.de)z5$Date: 2011-02-25 17:42:01 +0200 (Fri, 25 Feb 2011) $z?$Id: tarfile.py 88586 2011-02-25 15:42:01Z marc-andre.lemburg $u4Gustavo Niemeyer, Niels Gustäbel, Richard Townsend.é)ÚopenNÚTarFileÚTarInfoÚ is_tarfileÚTarErrorsiésustar sustar00édé›ó0ó1ó2ó3ó4ó5ó6ó7óLóKóSóxógóXééÚpathÚlinkpathÚsizeÚmtimeÚuidÚgidÚunameÚgnameZatimeÚctimeÚntZcezutf-8cCs2|j||ƒ}|d|…|t|ƒtS)N)ÚencodeÚlenÚNUL)ÚsÚlengthÚencodingÚerrors©r+ú,/opt/alt/python35/lib64/python3.5/tarfile.pyÚstn™sr-cCs;|jdƒ}|dkr+|d|…}|j||ƒS)Nsréÿÿÿÿ)ÚfindÚdecode)r'r)r*Úpr+r+r,ÚntsŸs r2c CsÕ|dd krd}x:tt|ƒdƒD]"}|dK}|||d7}q-W|ddkrÑdt|ƒd| }nRy1t|ddƒ}t|jƒp¦d dƒ}Wntk rÐtd ƒ‚YnX|S) Nré€éÿrééÚasciiÚstrictÚ0zinvalid header)r3r4)Úranger%r2ÚintÚstripÚ ValueErrorÚInvalidHeaderError)r'ÚnÚir+r+r,Únti§s  rAr5cCsd|kod|dknrNtd|dt|ƒfdƒt}n¼|tkrþd|d |ko‚d|dknrþ|dkr¥tdgƒ}ntdgƒ}d||}xEt|dƒD]$}|jd|d@ƒ|dL}qÓWn td ƒ‚|S) Nrr5rz%0*or7r6r3r4zoverflow in number field)Úbytesr;r&Ú GNU_FORMATÚ bytearrayr:Úinsertr=)r?ÚdigitsÚformatr'r@r+r+r,Úitn»s $*9  rHcCsBdttjd|ƒƒ}dttjd|ƒƒ}||fS)Nr6Z 148B8x356BZ 148b8x356b)ÚsumÚstructÚ unpack_from)ÚbufZunsigned_chksumZ signed_chksumr+r+r,Ú calc_chksums×s rMc Csæ|dkrdS|dkr0tj||ƒdSd}t||ƒ\}}xNt|ƒD]@}|j|ƒ}t|ƒ|kr‹|dƒ‚|j|ƒqXW|dkrâ|j|ƒ}t|ƒ|krÕ|dƒ‚|j|ƒdS)Nréizunexpected end of datai@)ÚshutilÚ copyfileobjÚdivmodr:Úreadr%Úwrite) ÚsrcÚdstr(Ú exceptionÚBUFSIZEÚblocksÚ remainderÚbrLr+r+r,rPäs$      rPcCs,ddl}|jdtdƒtj|ƒS)Nrz$deprecated in favor of stat.filemoder)ÚwarningsÚwarnÚDeprecationWarningÚstatÚfilemode)Úmoder[r+r+r,r_ýs   r_cCsPttjddƒ}|dk r<|j|dƒj|ƒ}t|ddƒdS)Nr)ÚbackslashreplaceÚendú )ÚgetattrÚsysÚstdoutr$r0Úprint)r'r)r+r+r,Ú _safe_prints rhc@seZdZdS)rN)Ú__name__Ú __module__Ú __qualname__r+r+r+r,r s c@seZdZdS)Ú ExtractErrorN)rirjrkr+r+r+r,rls rlc@seZdZdS)Ú ReadErrorN)rirjrkr+r+r+r,rms rmc@seZdZdS)ÚCompressionErrorN)rirjrkr+r+r+r,rns rnc@seZdZdS)Ú StreamErrorN)rirjrkr+r+r+r,ros roc@seZdZdS)Ú HeaderErrorN)rirjrkr+r+r+r,rps rpc@seZdZdS)ÚEmptyHeaderErrorN)rirjrkr+r+r+r,rqs rqc@seZdZdS)ÚTruncatedHeaderErrorN)rirjrkr+r+r+r,rr s rrc@seZdZdS)ÚEOFHeaderErrorN)rirjrkr+r+r+r,rs#s rsc@seZdZdS)r>N)rirjrkr+r+r+r,r>&s r>c@seZdZdS)ÚSubsequentHeaderErrorN)rirjrkr+r+r+r,rt)s rtc@s@eZdZdd„Zdd„Zdd„Zdd„Zd S) Ú _LowLevelFilecCsbdtjdtjtjBtjBi|}ttdƒrF|tjO}tj||dƒ|_dS)NÚrÚwÚO_BINARYi¶) ÚosÚO_RDONLYÚO_WRONLYÚO_CREATÚO_TRUNCÚhasattrrxrÚfd)ÚselfÚnamer`r+r+r,Ú__init__6s   z_LowLevelFile.__init__cCstj|jƒdS)N)ryÚcloser)r€r+r+r,rƒ?sz_LowLevelFile.closecCstj|j|ƒS)N)ryrRr)r€rr+r+r,rRBsz_LowLevelFile.readcCstj|j|ƒdS)N)ryrSr)r€r'r+r+r,rSEsz_LowLevelFile.writeN)rirjrkr‚rƒrRrSr+r+r+r,ru0s   ruc@s¦eZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z ddd„Z ddd„Z dd„Z dd„ZdS)Ú_Streamc Cs{d|_|dkr-t||ƒ}d|_|dkrQt|ƒ}|jƒ}|pZd|_||_||_||_||_d|_ d|_ d|_ y«|dkr,yddl }Wnt k rÞtdƒ‚YnX||_ |jdƒ|_|d kr|jƒ|j|_qI|jƒn|d kr«yddl}Wnt k rhtd ƒ‚YnX|d kr™d|_|jƒ|_t|_qI|jƒ|_nž|d kr-yddl}Wnt k rçtd ƒ‚YnX|d krd|_|jƒ|_|j|_qI|jƒ|_n|dkrItd|ƒ‚Wn*|jsf|jjƒd|_ ‚YnXdS)NTFÚ*ÚórÚgzzzlib module is not availablervÚbz2zbz2 module is not availableÚxzzlzma module is not availableÚtarzunknown compression type %r) Ú _extfileobjruÚ _StreamProxyÚ getcomptyper�r`ÚcomptypeÚfileobjÚbufsizerLÚposÚclosedÚzlibÚ ImportErrorrnÚcrc32ÚcrcÚ _init_read_gzÚerrorrVÚ_init_write_gzr‰ÚdbufÚBZ2DecompressorÚcmpÚOSErrorÚ BZ2CompressorÚlzmaÚLZMADecompressorÚ LZMAErrorÚLZMACompressorrƒ) r€r�r`r�r�r‘r”r‰r r+r+r,r‚Ssl                                z_Stream.__init__cCs't|dƒr#|j r#|jƒdS)Nr“)r~r“rƒ)r€r+r+r,Ú__del__™sz_Stream.__del__cCs³|jjd|jj|jj |jjdƒ|_tjdtt j ƒƒƒ}|j d|dƒ|j j dƒr�|j dd …|_ |j |j j dd ƒtƒdS) Né rz„Zd?d@„ZdAdB„Z dCdD„Z!dEdF„Z"dGdH„Z#dIdJ„Z$dKdL„Z%dMdN„Z&dOdP„Z'dQdR„Z(dSdT„Z)dUdV„Z*dWdX„Z+dYdZ„Z,d[d\„Z-d]d^„Z.d_d`„Z/dadb„Z0dcdd„Z1dedf„Z2dgS)irr�r`rrrrÚchksumÚtypeÚlinknamer r!ÚdevmajorÚdevminorrÇrÚÚ pax_headersrÛrÝÚ_sparse_structsÚ _link_targetr†cCs�||_d|_d|_d|_d|_d|_d|_t|_d|_ d|_ d|_ d|_ d|_ d|_d|_d|_i|_dS)Ni¤rr†)r�r`rrrrràÚREGTYPErárâr r!rãrärÇrÚrÛrå)r€r�r+r+r,r‚Ûs"                zTarInfo.__init__cCs|jS)N)r�)r€r+r+r,Ú_getpathõszTarInfo._getpathcCs ||_dS)N)r�)r€r�r+r+r,Ú_setpath÷szTarInfo._setpathcCs|jS)N)râ)r€r+r+r,Ú _getlinkpathûszTarInfo._getlinkpathcCs ||_dS)N)râ)r€râr+r+r,Ú _setlinkpathýszTarInfo._setlinkpathcCs d|jj|jt|ƒfS)Nz<%s %r at %#x>)rßrir�Úid)r€r+r+r,Ú__repr__szTarInfo.__repr__cCsµd|jd|jd@d|jd|jd|jd|jd|jd |jd |jd |j d |j d |j d|j i }|d t kr±|djdƒ r±|dd7<|S)Nr�r`iÿrrrrràrárâr r!rãräú/)r�r`rrrrràrárâr r!rãräÚDIRTYPEr°)r€Úinfor+r+r,Úget_infos             $zTarInfo.get_infoÚsurrogateescapecCsv|jƒ}|tkr+|j|||ƒS|tkrJ|j|||ƒS|tkrf|j||ƒStdƒ‚dS)Nzinvalid format)ròÚ USTAR_FORMATÚcreate_ustar_headerrCÚcreate_gnu_headerÚ PAX_FORMATÚcreate_pax_headerr=)r€rGr)r*rñr+r+r,Útobufs    z TarInfo.tobufcCs—t|dy||jd d ƒWn#tk r™||||YnXt||ƒ|kr>||||Wx…dD]}\}}||krîd||r2r�r`rrrrràrárâr r!rãräÚAREGTYPEr°rðÚGNUTYPE_SPARSEr:r=r¼ÚboolræÚisdirÚrstripÚ GNU_TYPES)rrLr)r*ràÚobjrûr’Ústructsr@rÇÚnumbytesÚ isextendedÚorigsizer+r+r,ÚfrombufösZ      ! "  zTarInfo.frombufcCsP|jjtƒ}|j||j|jƒ}|jjƒt|_|j|ƒS)N) r�rRrÁr7r)r*r¹rÇÚ _proc_member)rrÝrLr2r+r+r,Ú fromtarfile5szTarInfo.fromtarfilecCst|jttfkr"|j|ƒS|jtkr>|j|ƒS|jtttfkrc|j |ƒS|j |ƒSdS)N) rárrÚ _proc_gnulongr-Ú _proc_sparserrÚSOLARIS_XHDTYPEÚ _proc_paxÚ _proc_builtin)r€rÝr+r+r,r8Js   zTarInfo._proc_membercCsu|jjƒ|_|j}|jƒs6|jtkrL||j|jƒ7}||_|j |j |j |j ƒ|S)N) r�r¹rÚÚisregráÚSUPPORTED_TYPESÚ_blockrrÇÚ_apply_pax_inforår)r*)r€rÝrÇr+r+r,r>Ws  zTarInfo._proc_builtinc Cs¹|jj|j|jƒƒ}y|j|ƒ}Wntk rQtdƒ‚YnX|j|_|jt kr‹t ||j |j ƒ|_ n*|jtkrµt ||j |j ƒ|_|S)Nz missing or bad subsequent header)r�rRrArr9rprtrÇrárr2r)r*r�rrâ)r€rÝrLÚnextr+r+r,r:hs  zTarInfo._proc_gnulongc Cs#|j\}}}|`xÄ|rÞ|jjtƒ}d}x�tdƒD]�}y<t|||d…ƒ}t||d|d…ƒ} Wntk r�PYnX|r½| r½|j|| fƒ|d7}qFWt|dƒ}qW||_ |jj ƒ|_ |j |j |j ƒ|_||_ |S)Nrérr*iø)rær�rRrÁr:rAr=r¼r.rÛr¹rÚrArrÇ) r€rÝr3r5r6rLr’r@rÇr4r+r+r,r;~s( "    zTarInfo._proc_sparsec Csæ|jj|j|jƒƒ}|jtkr9|j}n|jjƒ}tj d|ƒ}|dk r‚|j dƒj dƒ|d<|j dƒ}|dkr©|j }nd}tjdƒ}d}xà|j||ƒ}|sàP|jƒ\} } t| ƒ} ||jdƒd|jdƒ| d…} |j| dd|jƒ} | tkrt|j| ||j |jƒ} n|j| dd|jƒ} | || <|| 7}qÇWy|j|ƒ} Wntk rÚtd ƒ‚YnXd |krú|j| |ƒn_d |kr|j| ||ƒn=|j d ƒd krY|j dƒdkrY|j| ||ƒ|jttfkrâ| j||j |jƒ|j | _ d|krâ| j!} | j"ƒsÃ| jt#krÙ| | j| jƒ7} | |_ | S)Ns\d+ hdrcharset=([^\n]+)\nrzutf-8Ú hdrcharsetZBINARYs(\d+) ([^=]+)=rrz missing or bad subsequent headerzGNU.sparse.mapzGNU.sparse.sizezGNU.sparse.majorÚ1zGNU.sparse.minorr9r)$r�rRrArrárrår ÚreÚsearchÚgroupr0rr)ÚcompileÚmatchÚgroupsr;rbrÖÚ_decode_pax_fieldr*ÚPAX_NAME_FIELDSr9rprtÚ_proc_gnusparse_01Ú_proc_gnusparse_00Ú_proc_gnusparse_10rr<rBrÇrÚr?r@)r€rÝrLrårKrEr)Zregexr’r(rr rCrÇr+r+r,r=šs`     .        *    zTarInfo._proc_paxcCsšg}x6tjd|ƒD]"}|jt|jdƒƒƒqWg}x6tjd|ƒD]"}|jt|jdƒƒƒqXWtt||ƒƒ|_dS)Ns\d+ GNU.sparse.offset=(\d+)\nrs\d+ GNU.sparse.numbytes=(\d+)\n)rGÚfinditerr¼r;rIÚlistÚziprÛ)r€rCrårLZoffsetsrKr4r+r+r,rPs  zTarInfo._proc_gnusparse_00cCsVdd„|djdƒDƒ}tt|ddd…|ddd…ƒƒ|_dS)NcSsg|]}t|ƒ‘qSr+)r;)Ú.0Úxr+r+r,ú s z.TarInfo._proc_gnusparse_01..zGNU.sparse.mapú,rr)rrSrTrÛ)r€rCrårÛr+r+r,rO s zTarInfo._proc_gnusparse_01cCsôd}g}|jjtƒ}|jddƒ\}}t|ƒ}xgt|ƒ|dkr«d|kr}||jjtƒ7}|jddƒ\}}|jt|ƒƒqEW|jjƒ|_t t |ddd…|ddd…ƒƒ|_ dS)Ns rr) r�rRrÁrr;r%r¼r¹rÚrSrTrÛ)r€rCrårÝZfieldsrÛrLZnumberr+r+r,rQs  zTarInfo._proc_gnusparse_10c Cs xõ|jƒD]ç\}}|dkr8t|d|ƒq |dkr]t|dt|ƒƒq |dkr‚t|dt|ƒƒq |tkr |tkrÉyt||ƒ}Wntk rÈd}YnX|dkrä|jdƒ}t|||ƒq W|jƒ|_dS)NzGNU.sparse.namerzGNU.sparse.sizerzGNU.sparse.realsizerrï) rÚsetattrr;Ú PAX_FIELDSÚPAX_NUMBER_FIELDSr=r0r rå)r€rår)r*rr r+r+r,rB!s"        zTarInfo._apply_pax_infoc Cs=y|j|dƒSWn"tk r8|j||ƒSYnXdS)Nr8)r0ÚUnicodeDecodeError)r€r r)Zfallback_encodingZfallback_errorsr+r+r,rM8s zTarInfo._decode_pax_fieldcCs-t|tƒ\}}|r%|d7}|tS)Nr)rQrÁ)r€r+rXrYr+r+r,rA@s zTarInfo._blockcCs |jtkS)N)ráÚ REGULAR_TYPES)r€r+r+r,r?Isz TarInfo.isregcCs |jƒS)N)r?)r€r+r+r,ÚisfileKszTarInfo.isfilecCs |jtkS)N)rárð)r€r+r+r,r/Msz TarInfo.isdircCs |jtkS)N)ráÚSYMTYPE)r€r+r+r,ÚissymOsz TarInfo.issymcCs |jtkS)N)ráÚLNKTYPE)r€r+r+r,ÚislnkQsz TarInfo.islnkcCs |jtkS)N)ráÚCHRTYPE)r€r+r+r,ÚischrSsz TarInfo.ischrcCs |jtkS)N)ráÚBLKTYPE)r€r+r+r,ÚisblkUsz TarInfo.isblkcCs |jtkS)N)ráÚFIFOTYPE)r€r+r+r,ÚisfifoWszTarInfo.isfifocCs |jdk S)N)rÛ)r€r+r+r,ÚissparseYszTarInfo.issparsecCs|jtttfkS)N)rárcrerg)r€r+r+r,Úisdev[sz TarInfo.isdevN)r�r`rrrrràrárâr r!rãrärÇrÚrårÛrÝrærç)3rirjrkÚ __slots__r‚rérêÚpropertyrrërìrrîròÚDEFAULT_FORMATÚENCODINGrùrõrörøÚ classmethodrrÿÚ staticmethodrrrrr7r9r8r>r:r;r=rPrOrQrBrMrAr?r^r/r`rbrdrfrhrirjr+r+r+r,rÍs^         1  3?    f             c@sÎeZdZdZdZdZdZeZe Z dZ e Z eZdddddddddddddd„ Zeddded d „ƒZeddd d „ƒZeddd dd„ƒZeddd dd„ƒZeddddd„ƒZddddddddiZdd„Zdd„Zd d!„Zd"d#„Zdddd$d%„Zd&d'dd(d)„Zdd&dd*dd+d,„Zdd-d.„Z d/dd0dd1d2„Z!d3d&d0dd4d5„Z"d6d7„Z#d&dd8d9„Z$d:d;„Z%d<d=„Z&d>d?„Z'd@dA„Z(dBdC„Z)dDdE„Z*dFdG„Z+dHdI„Z,dJdK„Z-dLdM„Z.dddNdO„Z/dPdQ„Z0ddRdS„Z1dTdU„Z2dVdW„Z3dXdY„Z4dZd[„Z5d\d]„Z6dS)^rrFrNrvróc Cs›ddddddddi} || kr6td ƒ‚||_| ||_|s¤|jdkr†tjj|ƒ r†d|_d|_t||jƒ}d |_n`|dkràt|d ƒràt |j t t fƒrà|j }t|d ƒrû|j|_d |_|rtjj |ƒnd|_ ||_|dk rC||_|dk rX||_|dk rm||_|dk r‚||_|dk r—||_| |_| dk rÇ|jtkrÇ| |_n i|_| dk rå| |_| dk rú| |_d |_g|_d |_|jjƒ|_i|_y:|jdkrZd|_|j ƒ|_|jdkrxœ|jj!|jƒy&|jj"|ƒ}|jj#|ƒWqlt$k rÍ|jj!|jƒPYqlt%k r}zt&t |ƒƒ‚WYdd}~XqlXqlW|jdkrid |_|jri|jj'|jj(ƒƒ}|jj)|ƒ|jt*|ƒ7_Wn*|js†|jj+ƒd |_‚YnXdS)NrvÚrbÚazr+brwÚwbrVÚxbz!mode must be 'r', 'a', 'w' or 'x'Fr�r`T)rrrwrV),r=r`Ú_moderyrÚexistsÚ bltn_openrŒr~r r�rrBÚabspathr�rGrÞÚ dereferenceÚ ignore_zerosr)r*r÷råÚdebugÚ errorlevelr“ÚmembersÚ_loadedr¹rÇÚinodesÚ firstmemberrCrºr9r¼rsrprmrr rSr%rƒ)r€r�r`r�rGrÞryrzr)r*rår{r|ZmodesÚerLr+r+r,r‚ysˆ     "      !                        )     zTarFile.__init__c sY| r| rtdƒ‚|dkrö‡fdd†}x¬tˆjd|ƒD]•}tˆˆj|ƒ}|dk r‚|jƒ} y||d||�SWqNttfk râ} z!|dk rÍ|j| ƒwNWYdd} ~ XqNXqNWtdƒ‚nSd|kr}|jdd ƒ\} }| p#d} |p/d }|ˆjkrZtˆˆj|ƒ}ntd |ƒ‚||| ||�Sd |kr'|jd d ƒ\} }| pªd} |p¶d }| dkrÑtdƒ‚t || |||ƒ} yˆ|| | |�} Wn| j ƒ‚YnXd| _ | S|dkrIˆj ||||�Stdƒ‚dS)Nznothing to openrvúr:*csˆj|dkS)NÚtaropen)Ú OPEN_METH)r�)rr+r,Únot_compressedsz$TarFile.open..not_compressedÚkeyz%file could not be opened successfullyú:rr‹zunknown compression type %rú|rwzmode must be 'r' or 'w'FrrrVzundiscernible mode)rvr‚)rvrw)rrrwrV) r=Úsortedr„rdr¹rmrnrºrr„rƒrŒrƒ)rr�r`r�r‘Úkwargsr…r�ÚfuncZ saved_posr�r_Ústreamr¾r+)rr,ræsP%                 z TarFile.opencKs+|dkrtdƒ‚|||||�S)NrvrrrwrVz!mode must be 'r', 'a', 'w' or 'x')rvrrrwrV)r=)rr�r`r�rŠr+r+r,rƒAs  zTarFile.taropenr¥cKs)|d krtdƒ‚yddl}|jWn$ttfk rUtdƒ‚YnXy |j||d||ƒ}Wn9tk r±|dk rª|dkrªtdƒ‚‚YnXy|j||||�}WnKtk r|j ƒ|dkrtdƒ‚‚Yn|j ƒ‚YnXd |_ |S) NrvrwrVzmode must be 'r', 'w' or 'x'rzgzip module is not availablerZznot a gzip fileF)rvrwrV) r=ÚgzipZGzipFiler•ÚAttributeErrorrnržrmrƒrƒrŒ)rr�r`r�Ú compresslevelrŠr�r¾r+r+r,ÚgzopenIs2             zTarFile.gzopencKsä|d krtdƒ‚yddl}Wntk rHtdƒ‚YnX|j|pX||d|ƒ}y|j||||�}WnQttfk rÂ|jƒ|dkr»t dƒ‚‚Yn|jƒ‚YnXd |_ |S) NrvrwrVzmode must be 'r', 'w' or 'x'rzbz2 module is not availabler�znot a bzip2 fileF)rvrwrV) r=r‰r•rnÚBZ2FilerƒržÚEOFErrorrƒrmrŒ)rr�r`r�r�rŠr‰r¾r+r+r,Úbz2openks(         zTarFile.bz2opencKsç|d krtdƒ‚yddl}Wntk rHtdƒ‚YnX|j|pX||d|ƒ}y|j||||�}WnT|jtfk rÅ|jƒ|dkr¾t dƒ‚‚Yn|jƒ‚YnXd |_ |S) NrvrwrVzmode must be 'r', 'w' or 'x'rzlzma module is not availableÚpresetznot an lzma fileF)rvrwrV) r=r r•rnÚLZMAFilerƒr¢r’rƒrmrŒ)rr�r`r�r”rŠr r¾r+r+r,Úxzopenˆs&        zTarFile.xzopenr‹rƒrˆr�r‰r“rŠr–c Cs®|jr dSd|_zz|jdkr�|jjttdƒ|jtd7_t|jtƒ\}}|dkr�|jjtt|ƒWd|j s©|jj ƒXdS)NTrrrwrVrr)rrrwrV) r“r`r�rSr&rÁrÇrQÚ RECORDSIZErŒrƒ)r€rXrYr+r+r,rƒ¯s    z TarFile.closecCs/|j|ƒ}|dkr+td|ƒ‚|S)Nzfilename %r not found)Ú _getmemberÚKeyError)r€r�rÞr+r+r,Ú getmemberÄs zTarFile.getmembercCs$|jƒ|js|jƒ|jS)N)Ú_checkr~Ú_loadr})r€r+r+r,Ú getmembersÏs   zTarFile.getmemberscCsdd„|jƒDƒS)NcSsg|]}|j‘qSr+)r�)rUrÞr+r+r,rWÝs z$TarFile.getnames..)r�)r€r+r+r,ÚgetnamesÙszTarFile.getnamesc CsI|jdƒ|dk r"|j}|dkr4|}tjj|ƒ\}}|jtjdƒ}|jdƒ}|jƒ}||_ |dkrÎt tdƒr¼|j r¼tj |ƒ}qãtj |ƒ}ntj|jƒƒ}d}|j}t j|ƒr„|j|jf} |j rd|jdkrd| |jkrd||j| krdt} |j| }qt} | dr||j| zlink to )r›rhr^r_r`r rr!rrdrfrãrärr®Ú localtimerr�r/r`rârbrg)r€Úverboser}rÞr+r+r,rSCs*   #  z TarFile.listÚfilterc Csñ|jdƒ|dkr|}|dk rnddl}|jdtdƒ||ƒrn|jdd|ƒdS|jdk r°tjj|ƒ|jkr°|jdd|ƒdS|jd|ƒ|j ||ƒ}|dkrö|jdd|ƒdS|dk r2||ƒ}|dkr2|jdd|ƒdS|j ƒrjt |d ƒ�}|j ||ƒWdQRXnƒ|j ƒrà|j |ƒ|ríxatj|ƒD]@}|jtjj||ƒtjj||ƒ||d |ƒq™Wn |j |ƒdS) NrŸrzuse the filter argument insteadrztarfile: Excluded %rztarfile: Skipped %rrztarfile: Unsupported type %rrqrÁ)r›r[r\r]Ú_dbgr�ryrrxr¾r?rwÚaddfiler/ÚlistdirÚaddr½) r€r�r¼Z recursiveZexcluderÁr[rÞÚfr+r+r,rÅcsB       *       *z TarFile.addcCsî|jdƒtj|ƒ}|j|j|j|jƒ}|jj|ƒ|jt |ƒ7_|dk rÚt ||j|j ƒt |j t ƒ\}}|dkrÇ|jjtt |ƒ|d7}|j|t 7_|jj|ƒdS)NrŸrr)r›r rùrGr)r*r�rSrÇr%rPrrQrÁr&r}r¼)r€rÞr�rLrXrYr+r+r,ràs    zTarFile.addfileÚ.Ú numeric_ownercCsUg}|dkr|}xb|D]Z}|jƒrV|j|ƒtj|ƒ}d|_|j||d|jƒ d|ƒqW|jddd„ƒ|jƒx±|D]©}tjj ||j ƒ}y:|j ||d|ƒ|j ||ƒ|j ||ƒWq¤tk rL}z.|jdkr&‚n|jdd|ƒWYdd}~Xq¤Xq¤WdS) NiÀÚ set_attrsrÈr†cSs|jS)N)r�)rrr+r+r,ÚÑsz$TarFile.extractall..rz tarfile: %s)r/r¼r r`ÚextractÚsortÚreverseryrr½r�ÚchownÚutimeÚchmodrlr|rÂ)r€rr}rÈZ directoriesrÞÚdirpathr�r+r+r,Ú extractall¹s,        zTarFile.extractallr†cCsd|jdƒt|tƒr.|j|ƒ}n|}|jƒr[tjj||jƒ|_ y2|j |tjj||j ƒd|d|ƒWnÐt k r}zc|j dkr·‚nI|jdkrà|jdd|jƒn |jdd|j|jfƒWYdd}~XnNtk r_}z.|j dkr9‚n|jdd|ƒWYdd}~XnXdS)NrvrÉrÈrrz tarfile: %sztarfile: %s %r)r›r rršrbryrr½rârçÚ_extract_memberr�ržr|ÚfilenamerÂÚstrerrorrl)r€ÚmemberrrÉrÈrÞr�r+r+r,rËás(  ! 2zTarFile.extractcCs¹|jdƒt|tƒr.|j|ƒ}n|}|jƒsO|jtkr_|j||ƒS|jƒsw|j ƒr±t|j t ƒr˜t dƒ‚qµ|j |j|ƒƒSndSdS)Nrvz'cannot extract (sym)link as file object)r›r rršr?rár@Ú fileobjectrbr`r�r„roÚ extractfileÚ_find_link_target)r€rÖrÞr+r+r,rØs zTarFile.extractfilecCsØ|jdƒ}|jdtjƒ}tjj|ƒ}|r\tjj|ƒ r\tj|ƒ|jƒst|j ƒr—|j dd|j |j fƒn|j d|j ƒ|j ƒrÉ|j||ƒnÆ|jƒrè|j||ƒn§|jƒr|j||ƒnˆ|jƒs|jƒr2|j||ƒn]|jƒsJ|j ƒr]|j||ƒn2|jtkr|j||ƒn|j||ƒ|rÔ|j|||ƒ|j ƒsÔ|j||ƒ|j||ƒdS)Nrïrz%s -> %s)r0r§ryr¤rÚdirnamervÚmakedirsrbr`rÂr�râr?Úmakefiler/ÚmakedirrhÚmakefifordrfÚmakedevÚmakelinkrár@Ú makeunknownrÎrÐrÏ)r€rÞÚ targetpathrÉrÈZ upperdirsr+r+r,rÓ&s4 #    zTarFile._extract_memberc Cs-ytj|dƒWntk r(YnXdS)NiÀ)ryÚmkdirÚFileExistsError)r€rÞrâr+r+r,rÝWs zTarFile.makedirc Cs²|j}|j|jƒt|dƒ�ƒ}|jdk r‘x7|jD],\}}|j|ƒt|||tƒqDW|j|jƒ|jƒnt|||jtƒWdQRXdS)Nrs) r�rºrÚrwrÛrPrmrÚtruncate)r€rÞrâÚsourceÚtargetrÇrr+r+r,rÜas   zTarFile.makefilecCs+|j||ƒ|jdd|jƒdS)Nrz9tarfile: Unknown file type %r, extracted as regular file.)rÜrÂrá)r€rÞrâr+r+r,ráps zTarFile.makeunknowncCs/ttdƒrtj|ƒn tdƒ‚dS)NÚmkfifozfifo not supported by system)r~ryrèrl)r€rÞrâr+r+r,rÞxszTarFile.makefifocCs‡ttdƒ s ttdƒ r,tdƒ‚|j}|jƒrQ|tjO}n |tjO}tj||tj |j |j ƒƒdS)NÚmknodrßz'special devices not supported by system) r~ryrlr`rfr^ÚS_IFBLKÚS_IFCHRrérßrãrä)r€rÞrâr`r+r+r,r߀s      zTarFile.makedevcCsÁyj|jƒr%tj|j|ƒnDtjj|jƒrPtj|j|ƒn|j|j |ƒ|ƒWnPt k r¼y|j|j |ƒ|ƒWnt k r·t dƒ‚YnXYnXdS)Nz%unable to resolve link inside archive) r`ryÚsymlinkrârrvrçÚlinkrÓrÙÚsymlink_exceptionr™rl)r€rÞrâr+r+r,rà�s     zTarFile.makelinkc Cs2tr.ttdƒr.tjƒdkr.|rB|j}|j}npytj|jƒd}Wnt k ry|j}YnXytj |j ƒd}Wnt k r±|j}YnXyH|j ƒrættdƒrætj |||ƒntj|||ƒWn1tk r-}ztdƒ‚WYdd}~XnXdS)NÚgeteuidrrÚlchownzcould not change owner)r·r~ryrïrrr¹Úgetgrnamr!r™Úgetpwnamr r`rðrÎržrl)r€rÞrârÈÚgÚur�r+r+r,rΦs$'    z TarFile.chowncCs^ttdƒrZytj||jƒWn1tk rY}ztdƒ‚WYdd}~XnXdS)NrÐzcould not change mode)r~ryrÐr`ržrl)r€rÞrâr�r+r+r,rÐÀs z TarFile.chmodcCskttdƒsdSy tj||j|jfƒWn1tk rf}ztdƒ‚WYdd}~XnXdS)NrÏz"could not change modification time)r~ryrÏrržrl)r€rÞrâr�r+r+r,rÏÉs  z TarFile.utimecCsV|jdƒ|jdk r2|j}d|_|S|j|jjƒkr|jj|jdƒ|jjdƒstdƒ‚d}x¢y|jj |ƒ}Wn„t k rý}z=|j rë|j dd|j|fƒ|jt 7_wˆWYdd}~Xn(tk r}}za|j rJ|j dd|j|fƒ|jt 7_wˆn!|jdkrktt|ƒƒ‚WYdd}~Xn¨tk r©|jdkr¥tdƒ‚Yn|tk rî}z&|jdkrÜtt|ƒƒ‚WYdd}~Xn7tk r$}ztt|ƒƒ‚WYdd}~XnXPqˆW|dk rI|jj|ƒn d|_|S) NZrarzunexpected end of datarz0x%X: %srz empty fileT)r›r€rÇr�r¹rºrRrmrÞr9rsrzrÂrÁr>rrqrrrtr}r¼r~)r€ÚmrÞr�r+r+r,rCÔsL      $ $%  z TarFile.nextcCs›|jƒ}|dk r1|d|j|ƒ…}|rItjj|ƒ}xKt|ƒD]=}|rztjj|jƒ}n |j}||krV|SqVWdS)N)r�ÚindexryrÚnormpathÚreversedr�)r€r�rÞÚ normalizer}rÖÚ member_namer+r+r,r˜ s    zTarFile._getmembercCs-x|jƒ}|dkrPqWd|_dS)NT)rCr~)r€rÞr+r+r,rœ! s   z TarFile._loadcCsQ|jrtd|jjƒ‚|dk rM|j|krMtd|jƒ‚dS)Nz %s is closedzbad operation for mode %r)r“ržrßrir`)r€r`r+r+r,r›+ s zTarFile._checkcCs�|jƒrEdjtdtjj|jƒ|jfƒƒ}d}n|j}|}|j|d|ddƒ}|dkr‹t d|ƒ‚|S)NrïrÞrùTzlinkname %r not found) r`r½rÁryrrÚr�râr˜r™)r€rÞrâÚlimitrÖr+r+r,rÙ4 s 0   zTarFile._find_link_targetcCs$|jrt|jƒSt|ƒSdS)N)r~Úiterr}ÚTarIter)r€r+r+r,Ú__iter__G s  zTarFile.__iter__cCs&||jkr"t|dtjƒdS)NÚfile)r{rgreÚstderr)r€ÚlevelÚmsgr+r+r,rÂO sz TarFile._dbgcCs|jƒ|S)N)r›)r€r+r+r,Ú __enter__U s zTarFile.__enter__cCs<|dkr|jƒn|js/|jjƒd|_dS)NT)rƒrŒr�r“)r€rár Ú tracebackr+r+r,Ú__exit__Y s     zTarFile.__exit__)7rirjrkr{ryrzr|rmrGrnr)r*rrÞrÙr×r‚ror—rrƒr�r“r–r„rƒršr�ržr¾rSrÅrÃrÒrËrØrÓrÝrÜrárÞrßràrÎrÐrÏrCr˜rœr›rÙrþrÂrrr+r+r+r,r_sr   kZ!   d =(& 0       6     c@s4eZdZdd„Zdd„Zdd„ZdS)rýcCs||_d|_dS)Nr)rÝrö)r€rÝr+r+r,r‚k s zTarIter.__init__cCs|S)Nr+)r€r+r+r,rþp szTarIter.__iter__cCs³|jdkr3|jjdk r3|jjƒ}nm|jt|jjƒkrd|jj|j}n<|jjsš|jjƒ}|s d|j_t‚nt‚|jd7_|S)NrTr)rörÝr€rCr%r}r~Ú StopIteration)r€rÞr+r+r,Ú__next__t s!   zTarIter.__next__N)rirjrkr‚rþrr+r+r+r,rýd s   rýc Cs;yt|ƒ}|jƒdSWntk r6dSYnXdS)NTF)rrƒr)r�r¾r+r+r,r� s    cCsîddl}d}|jd|ƒ}|jdddddd d d ƒ|jƒ}|jd d ddd dƒ|jdddddd9d dƒ|jdddddd:d dƒ|jddddd dƒ|jƒ}|jro|j}t|ƒrSt|dƒ�*}|jƒt |jƒd t j ƒWdQRX|j rlt d!j |ƒƒqê|jd"d#j |ƒƒn{|jrÛ|j}t|ƒr¿tj|d$ƒ�}|jd%|j ƒWdQRXqê|jd"d#j |ƒƒn|jrét|jƒd"kr|jd}tj}n=t|jƒd&kr9|j\}}n|jd"|jƒƒt|ƒrÍtj|d$ƒ�}|jd'|ƒWdQRX|j ræ|d(kr®d)j |ƒ} nd*j ||ƒ} t | ƒqê|jd"d#j |ƒƒn|jrÔ|jjdƒ} tjj| ƒ\} } d+d,d-d,d.d/d0d/d1d2d3d2d4d2d5d2i} | | krld6| | nd7}|j}tj| |ƒ�%}x|D]}|j|ƒq—WWdQRX|j rêt d8j | ƒƒn|jd"|jƒƒdS);Nrz3A simple command line interface for tarfile module.Ú descriptionz-vz --verboseÚactionÚ store_trueÚdefaultFÚhelpzVerbose outputz-lz--listÚmetavarú zShow listing of a tarfilez-ez --extractÚnargsú+ú zExtract tarfile into target dirz-cz--createúúzCreate tarfile from sourcesz-tz--testzTest if a tarfile is validrvrÿz{!r} is a tar archive.rz{!r} is not a tar archive. zr:*rÀrrrÇz{!r} file is extracted.z+{!r} file is extracted into {!r} directory.z.gzrˆz.tgzz.xzrŠz.txzz.bz2r‰z.tbzz.tbz2z.tb2zw:rwz{!r} file created.)rr)rr)ÚargparseÚArgumentParserÚ add_argumentÚadd_mutually_exclusive_groupÚ parse_argsZtestrrr�rgrerrÀrGÚexitrSrrËr%ryÚcurdirÚ format_helprÒZcreateÚpoprÚsplitextrÅ)rrÚparserrIÚargsrTr‹ZtfrrZtar_nameÚ_ÚextZ compressionsZtar_modeZ tar_filesÚ file_namer+r+r,Úmain› sˆ                          r#Ú__main__)aÚversionÚ __author__Ú__date__Z __cvsid__Ú __credits__ÚbuiltinsrrwreryrÎrOr^r®rJr rGr¹r·r•rŽÚNotImplementedErrorrîržÚ NameErrorÚ__all__r&rÁr—rrürþrýrrèr,rar_rcrerðrgZCONTTYPErrr-rrr<rôrCr÷rmr@r]r1rZrNrr;r[r�rnÚgetfilesystemencodingr-r2rArHrMrPr_rhÚ Exceptionrrlrmrnrorprqrrrsr>rtrur„Úobjectr�rÆÚBufferedReaderrÙrrrýrr#rir+r+r+r,Ú sÜ                             ôh ÿÿ”ÿÿÿÿ )  Z