PNG  IHDR;IDATxܻn0K )(pA 7LeG{ §㻢|ذaÆ 6lذaÆ 6lذaÆ 6lom$^yذag5bÆ 6lذaÆ 6lذa{ 6lذaÆ `}HFkm,mӪôô! x|'ܢ˟;E:9&ᶒ}{v]n&6 h_tڠ͵-ҫZ;Z$.Pkž)!o>}leQfJTu іچ\X=8Rن4`Vwl>nG^is"ms$ui?wbs[m6K4O.4%/bC%t Mז -lG6mrz2s%9s@-k9=)kB5\+͂Zsٲ Rn~GRC wIcIn7jJhۛNCS|j08yiHKֶۛkɈ+;SzL/F*\Ԕ#"5m2[S=gnaPeғL lذaÆ 6l^ḵaÆ 6lذaÆ 6lذa; _ذaÆ 6lذaÆ 6lذaÆ RIENDB`  lYk@sdZdZdZdZdZddlmZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZyddlZddlZWnek rdZZYnXeefZyeef7ZWnek 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.fkrd/Z>n ej?Z>d0d1Z@d2d3ZAd4d5ZBd6e4d7d8ZCd9d:ZDded;d<ZEd=d>ZFd?d@ZGGdAd d eHZIGdBdCdCeIZJGdDdEdEeIZKGdFdGdGeIZLGdHdIdIeIZMGdJdKdKeIZNGdLdMdMeNZOGdNdOdOeNZPGdPdQdQeNZQGdRdSdSeNZRGdTdUdUeNZSGdVdWdWZTGdXdYdYZUGdZd[d[eVZWGd\d]d]eVZXGd^d_d_e jYZZGd`d d eVZ[GdaddeVZ\GdbdcdcZ]ddd Z^e\jZdedfZ_e`dgkre_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.)openNTarFileTarInfo is_tarfileTarErrorsisustar sustar00d01234567LKSxgXpathlinkpathsizemtimeuidgidunamegnameZatimectimentZcezutf-8cCs2|j||}|d||t|tS)N)encodelenNUL)slengthencodingerrorsr+&/opt/python35/lib/python3.5/tarfile.pystnsr-cCs;|jd}|dkr+|d|}|j||S)Nsr)finddecode)r'r)r*pr+r+r,ntss r2c Cs|dd krd}x:tt|dD]"}|dK}|||d7}q-W|ddkrdt|d| }nRy1t|dd}t|jpd d}Wntk rtd YnX|S) Nrrasciistrict0zinvalid header)r3r4)ranger%r2intstrip ValueErrorInvalidHeaderError)r'nir+r+r,ntis  rAr5cCsd|kod|dknrNtd|dt|fdt}n|tkrd|d |kod|dknr|dkrtdg}ntdg}d||}xEt|dD]$}|jd|d@|dL}qWn td |S) Nrr5rz%0*or7r6r3r4zoverflow in number field)bytesr;r& GNU_FORMAT bytearrayr:insertr=)r?digitsformatr'r@r+r+r,itns $*9  rHcCsBdttjd|}dttjd|}||fS)Nr6Z 148B8x356BZ 148b8x356b)sumstruct unpack_from)bufZunsigned_chksumZ signed_chksumr+r+r, calc_chksumss rMc Cs|dkrdS|dkr0tj||dSd}t||\}}xNt|D]@}|j|}t||kr|d|j|qXW|dkr|j|}t||kr|d|j|dS)Nrizunexpected end of datai@)shutil copyfileobjdivmodr:readr%write) srcdstr( exceptionBUFSIZEblocks remainderbrLr+r+r,rPs$      rPcCs,ddl}|jdtdtj|S)Nrz$deprecated in favor of stat.filemoder)warningswarnDeprecationWarningstatfilemode)moder[r+r+r,r_s   r_cCsPttjdd}|dk r<|j|dj|}t|dddS)Nr)backslashreplaceend )getattrsysstdoutr$r0print)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@eZdZddZddZddZddZd S) _LowLevelFilecCsbdtjdtjtjBtjBi|}ttdrF|tjO}tj||d|_dS)NrwO_BINARYi) osO_RDONLYO_WRONLYO_CREATO_TRUNChasattrrxrfd)selfnamer`r+r+r,__init__6s   z_LowLevelFile.__init__cCstj|jdS)N)rycloser)rr+r+r,r?sz_LowLevelFile.closecCstj|j|S)N)ryrRr)rrr+r+r,rRBsz_LowLevelFile.readcCstj|j|dS)N)ryrSr)rr'r+r+r,rSEsz_LowLevelFile.writeN)rirjrkrrrRrSr+r+r+r,ru0s   ruc@seZdZddZddZddZddZd d Zd d Zd dZ ddZ dddZ dddZ ddZ ddZdS)_Streamc Cs{d|_|dkr-t||}d|_|dkrQt|}|j}|pZd|_||_||_||_||_d|_ d|_ d|_ y|dkr,yddl }Wnt k rtdYnX||_ |jd|_|d kr|j|j|_qI|jn|d kryddl}Wnt k rhtd YnX|d krd|_|j|_t|_qI|j|_n|d kr-yddl}Wnt k rtd YnX|d krd|_|j|_|j|_qI|j|_n|dkrItd|Wn*|jsf|jjd|_ YnXdS)NTF*rgzzzlib module is not availablervbz2zbz2 module is not availablexzzlzma module is not availabletarzunknown compression type %r) _extfileobjru _StreamProxy getcomptyperr`comptypefileobjbufsizerLposclosedzlib ImportErrorrncrc32crc _init_read_gzerrorrV_init_write_gzrdbufBZ2DecompressorcmpOSError BZ2CompressorlzmaZLZMADecompressor LZMAErrorZLZMACompressorr) rrr`rrrrrrr+r+r,rSsl                                z_Stream.__init__cCs't|dr#|j r#|jdS)Nr)r~rr)rr+r+r,__del__sz_Stream.__del__cCs|jjd|jj|jj |jjd|_tjdtt j }|j d|d|j j dr|j dd |_ |j |j j dd tdS) N rzZd?d@ZdAdBZ dCdDZ!dEdFZ"dGdHZ#dIdJZ$dKdLZ%dMdNZ&dOdPZ'dQdRZ(dSdTZ)dUdVZ*dWdXZ+dYdZZ,d[d\Z-d]d^Z.d_d`Z/dadbZ0dcddZ1dedfZ2dgS)irrr`rrrrchksumtypelinknamer r!devmajordevminorrr pax_headersrr_sparse_structs _link_targetrcCs||_d|_d|_d|_d|_d|_d|_t|_d|_ d|_ d|_ d|_ d|_ d|_d|_d|_i|_dS)Nirr)rr`rrrrrREGTYPErrr r!rrrrrr)rrr+r+r,rs"                zTarInfo.__init__cCs|jS)N)r)rr+r+r,_getpathszTarInfo._getpathcCs ||_dS)N)r)rrr+r+r,_setpathszTarInfo._setpathcCs|jS)N)r)rr+r+r, _getlinkpathszTarInfo._getlinkpathcCs ||_dS)N)r)rrr+r+r, _setlinkpathszTarInfo._setlinkpathcCs d|jj|jt|fS)Nz<%s %r at %#x>)rririd)rr+r+r,__repr__szTarInfo.__repr__cCsd|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)Nrr`irrrrrrrr r!rr/)rr`rrrrrrrr r!rrDIRTYPEr)rinfor+r+r,get_infos             $zTarInfo.get_infosurrogateescapecCsv|j}|tkr+|j|||S|tkrJ|j|||S|tkrf|j||StddS)Nzinvalid format)r USTAR_FORMATcreate_ustar_headerrCcreate_gnu_header PAX_FORMATcreate_pax_headerr=)rrGr)r*rr+r+r,tobufs    z TarInfo.tobufcCst|dy||jd d Wn#tk r||||YnXt|||kr>||||WxdD]}\}}||krd||r2rr`rrrrrrrr r!rrAREGTYPErrGNUTYPE_SPARSEr:r=rboolrisdirrstrip GNU_TYPES)rrLr)r*robjrrstructsr@rnumbytes isextendedorigsizer+r+r,frombufsZ      ! "  zTarInfo.frombufcCsP|jjt}|j||j|j}|jjt|_|j|S)N) rrRrr5r)r*rr _proc_member)rrrLr0r+r+r, fromtarfile5szTarInfo.fromtarfilecCst|jttfkr"|j|S|jtkr>|j|S|jtttfkrc|j |S|j |SdS)N) rrr _proc_gnulongr+ _proc_sparserrSOLARIS_XHDTYPE _proc_pax _proc_builtin)rrr+r+r,r6Js   zTarInfo._proc_membercCsu|jj|_|j}|js6|jtkrL||j|j7}||_|j |j |j |j |S)N) rrrisregrSUPPORTED_TYPES_blockrr_apply_pax_inforr)r*)rrrr+r+r,r<Ws  zTarInfo._proc_builtinc Cs|jj|j|j}y|j|}Wntk rQtdYnX|j|_|jt krt ||j |j |_ n*|jtkrt ||j |j |_|S)Nz missing or bad subsequent header)rrRr?rr7rprtrrrr2r)r*rrr)rrrLnextr+r+r,r8hs  zTarInfo._proc_gnulongc Cs#|j\}}}|`x|r|jjt}d}xtdD]}y<t|||d}t||d|d} Wntk rPYnX|r| r|j|| f|d7}qFWt|d}qW||_ |jj |_ |j |j |j |_||_ |S)Nrrr(i)rrrRrr:rAr=rr,rrrr?rr) rrr1r3r4rLrr@rr2r+r+r,r9~s( "    zTarInfo._proc_sparsec Cs|jj|j|j}|jtkr9|j}n|jj}tj d|}|dk r|j dj d|d<|j d}|dkr|j }nd}tjd}d}x|j||}|sP|j\} } t| } ||jdd|jd| d} |j| dd|j} | tkrt|j| ||j |j} n|j| dd|j} | || <|| 7}qWy|j|} Wntk rtd YnXd |kr|j| |n_d |kr|j| ||n=|j d d krY|j ddkrY|j| |||jttfkr| j||j |j|j | _ d|kr| j!} | j"s| jt#kr| | j| j7} | |_ | S)Ns\d+ hdrcharset=([^\n]+)\nrzutf-8 hdrcharsetZBINARYs(\d+) ([^=]+)=rrz missing or bad subsequent headerzGNU.sparse.mapzGNU.sparse.sizezGNU.sparse.major1zGNU.sparse.minorr9r)$rrRr?rrrrr researchgroupr0rr)compilematchgroupsr;rbr_decode_pax_fieldr*PAX_NAME_FIELDSr7rprt_proc_gnusparse_01_proc_gnusparse_00_proc_gnusparse_10rr:r@rrr=r>)rrrLrrIrCr)Zregexrr(rrrArr+r+r,r;s`     .        *    zTarInfo._proc_paxcCsg}x6tjd|D]"}|jt|jdqWg}x6tjd|D]"}|jt|jdqXWtt|||_dS)Ns\d+ GNU.sparse.offset=(\d+)\nrs\d+ GNU.sparse.numbytes=(\d+)\n)rEfinditerrr;rGlistzipr)rrArrLZoffsetsrIr2r+r+r,rNs  zTarInfo._proc_gnusparse_00cCsVdd|djdD}tt|ddd|ddd|_dS)NcSsg|]}t|qSr+)r;).0xr+r+r, s z.TarInfo._proc_gnusparse_01..zGNU.sparse.map,rr)rrQrRr)rrArrr+r+r,rM s zTarInfo._proc_gnusparse_01cCsd}g}|jjt}|jdd\}}t|}xgt||dkrd|kr}||jjt7}|jdd\}}|jt|qEW|jj|_t t |ddd|ddd|_ dS)Ns rr) rrRrrr;r%rrrrQrRr)rrArrZfieldsrrLZnumberr+r+r,rOs  zTarInfo._proc_gnusparse_10c Cs x|jD]\}}|dkr8t|d|q |dkr]t|dt|q |dkrt|dt|q |tkr |tkryt||}Wntk rd}YnX|dkr|jd}t|||q W|j|_dS)NzGNU.sparse.namerzGNU.sparse.sizerzGNU.sparse.realsizerr) rsetattrr; PAX_FIELDSPAX_NUMBER_FIELDSr=r.r r)rrr)r*rrr+r+r,r@!s"        zTarInfo._apply_pax_infoc Cs=y|j|dSWn"tk r8|j||SYnXdS)Nr8)r0UnicodeDecodeError)rrr)Zfallback_encodingZfallback_errorsr+r+r,rK8s zTarInfo._decode_pax_fieldcCs-t|t\}}|r%|d7}|tS)Nr)rQr)rr)rXrYr+r+r,r?@s zTarInfo._blockcCs |jtkS)N)r REGULAR_TYPES)rr+r+r,r=Isz TarInfo.isregcCs |jS)N)r=)rr+r+r,isfileKszTarInfo.isfilecCs |jtkS)N)rr)rr+r+r,r-Msz TarInfo.isdircCs |jtkS)N)rSYMTYPE)rr+r+r,issymOsz TarInfo.issymcCs |jtkS)N)rLNKTYPE)rr+r+r,islnkQsz TarInfo.islnkcCs |jtkS)N)rCHRTYPE)rr+r+r,ischrSsz TarInfo.ischrcCs |jtkS)N)rBLKTYPE)rr+r+r,isblkUsz TarInfo.isblkcCs |jtkS)N)rFIFOTYPE)rr+r+r,isfifoWszTarInfo.isfifocCs |jdk S)N)r)rr+r+r,issparseYszTarInfo.issparsecCs|jtttfkS)N)rrarcre)rr+r+r,isdev[sz TarInfo.isdevN)rr`rrrrrrrr r!rrrrrrrrr)3rirjrk __slots__rrrpropertyrrrrrrDEFAULT_FORMATENCODINGrrrr classmethodrr staticmethodrrrrr5r7r6r<r8r9r;rNrMrOr@rKr?r=r\r-r^r`rbrdrfrgrhr+r+r+r,rs^         1  3?    f             c@seZdZdZdZdZdZeZe Z dZ e Z eZdddddddddddddd Zeddded d Zeddd d Zeddd ddZeddd ddZedddddZddddddddiZddZddZd d!Zd"d#Zdddd$d%Zd&d'dd(d)Zdd&dd*dd+d,Zdd-d.Z d/dd0dd1d2Z!d3d&d0dd4d5Z"d6d7Z#d&dd8d9Z$d:d;Z%d<d=Z&d>d?Z'd@dAZ(dBdCZ)dDdEZ*dFdGZ+dHdIZ,dJdKZ-dLdMZ.dddNdOZ/dPdQZ0ddRdSZ1dTdUZ2dVdWZ3dXdYZ4dZd[Z5d\d]Z6dS)^rrFrNrvrc Csddddddddi} || kr6td ||_| ||_|s|jdkrtjj| rd|_d|_t||j}d |_n`|dkrt|d rt |j t t fr|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!|jy&|jj"|}|jj#|Wqlt$k r|jj!|jPYqlt%k r}zt&t |WYdd}~XqlXqlW|jdkrid |_|jri|jj'|jj(}|jj)||jt*|7_Wn*|js|jj+d |_YnXdS)Nrvrbazr+brwwbrTxbz!mode must be 'r', 'a', 'w' or 'x'Frr`T)rprwrT),r=r`_moderyrexists bltn_openrr~r rr rBabspathrrGr dereference ignore_zerosr)r*rrdebug errorlevelrmembers_loadedrrinodes firstmemberrArr7rrsrprmrr rSr%r)rrr`rrGrrwrxr)r*rryrzZmodeserLr+r+r,rys     "      !                        )     zTarFile.__init__c sY| r| rtd|dkrfdd}xtjd|D]}tj|}|dk r|j} y||d||SWqNttfk r} z!|dk r|j| wNWYdd} ~ XqNXqNWtdnSd|kr}|jdd \} }| p#d} |p/d }|jkrZtj|}ntd |||| ||Sd |kr'|jd d \} }| pd} |pd }| dkrtdt || |||} y|| | |} Wn| j YnXd| _ | S|dkrIj ||||StddS)Nznothing to openrvr:*csj|dkS)Ntaropen) OPEN_METH)r)rr+r,not_compressedsz$TarFile.open..not_compressedkeyz%file could not be opened successfully:rrzunknown compression type %r|rwzmode must be 'r' or 'w'FrprTzundiscernible mode)rvr)rvrw)rprwrT) r=sortedrrdrrmrnrrrrrr)rrr`rrkwargsrrfuncZ saved_posrr_streamrr+)rr,rsP%                 z TarFile.opencKs+|dkrtd|||||S)NrvrprwrTz!mode must be 'r', 'a', 'w' or 'x')rvrprwrT)r=)rrr`rrr+r+r,rAs  zTarFile.taropenrcKs)|d krtdyddl}|jWn$ttfk rUtdYnXy |j||d||}Wn9tk r|dk r|dkrtdYnXy|j||||}WnKtk r|j |dkrtdYn|j YnXd |_ |S) NrvrwrTzmode must be 'r', 'w' or 'x'rzgzip module is not availablerZznot a gzip fileF)rvrwrT) r=gzipZGzipFilerAttributeErrorrnrrmrrr)rrr`r compresslevelrrrr+r+r,gzopenIs2             zTarFile.gzopencKs|d krtdyddl}Wntk rHtdYnX|j|pX||d|}y|j||||}WnQttfk r|j|dkrt dYn|jYnXd |_ |S) NrvrwrTzmode must be 'r', 'w' or 'x'rzbz2 module is not availablerznot a bzip2 fileF)rvrwrT) r=rrrnBZ2FilerrEOFErrorrrmr)rrr`rrrrrr+r+r,bz2openks(         zTarFile.bz2opencKs|d krtdyddl}Wntk rHtdYnX|j|pX||d|}y|j||||}WnT|jtfk r|j|dkrt dYn|jYnXd |_ |S) NrvrwrTzmode must be 'r', 'w' or 'x'rzlzma module is not availablepresetznot an lzma fileF)rvrwrT) r=rrrnZLZMAFilerrrrrmr)rrr`rrrrrr+r+r,xzopens&        zTarFile.xzopenrrrrrrrrc Cs|jr dSd|_zz|jdkr|jjttd|jtd7_t|jt\}}|dkr|jjtt|Wd|j s|jj XdS)NTrprwrTrr)rprwrT) rr`rrSr&rrrQ RECORDSIZErr)rrXrYr+r+r,rs    z TarFile.closecCs/|j|}|dkr+td||S)Nzfilename %r not found) _getmemberKeyError)rrrr+r+r, getmembers zTarFile.getmembercCs$|j|js|j|jS)N)_checkr|_loadr{)rr+r+r, getmemberss   zTarFile.getmemberscCsdd|jDS)NcSsg|]}|jqSr+)r)rSrr+r+r,rUs z$TarFile.getnames..)r)rr+r+r,getnamesszTarFile.getnamesc CsI|jd|dk r"|j}|dkr4|}tjj|\}}|jtjd}|jd}|j}||_ |dkrt tdr|j rtj |}qtj |}ntj|j}d}|j}t j|r|j|jf} |j rd|jdkrd| |jkrd||j| krdt} |j| }qt} | dr||j| zlink to )rrhr^r_r`r rr!rrbrdrrrr localtimerrr-r^rr`rg)rverboser{rr+r+r,rQCs*   #  z TarFile.listfilterc Cs|jd|dkr|}|dk rnddl}|jdtd||rn|jdd|dS|jdk rtjj||jkr|jdd|dS|jd||j ||}|dkr|jdd|dS|dk r2||}|dkr2|jdd|dS|j rjt |d }|j ||WdQRXn|j r|j ||rxatj|D]@}|jtjj||tjj||||d |qWn |j |dS) Nrrzuse the filter argument insteadrztarfile: Excluded %rztarfile: Skipped %rrztarfile: Unsupported type %rror)rr[r\r]_dbgrryrrvrr=ruaddfiler-listdiraddr) rrrZ recursiveZexcluderr[rfr+r+r,rcsB       *       *z TarFile.addcCs|jdtj|}|j|j|j|j}|jj||jt |7_|dk rt ||j|j t |j t \}}|dkr|jjtt ||d7}|j|t 7_|jj|dS)Nrrr)rr rrGr)r*rrSrr%rPrrQrr&r{r)rrrrLrXrYr+r+r,rs    zTarFile.addfile. numeric_ownercCsUg}|dkr|}xb|D]Z}|jrV|j|tj|}d|_|j||d|j d|qW|jddd|jx|D]}tjj ||j }y:|j ||d||j |||j ||Wqtk rL}z.|jdkr&n|jdd|WYdd}~XqXqWdS) Ni set_attrsrrcSs|jS)N)r)rpr+r+r,sz$TarFile.extractall..rz tarfile: %s)r-rr r`extractsortreverseryrrrchownutimechmodrlrzr)rrr{rZ directoriesrdirpathrr+r+r, extractalls,        zTarFile.extractallrcCsd|jdt|tr.|j|}n|}|jr[tjj||j|_ y2|j |tjj||j d|d|Wnt k r}zc|j dkrnI|jdkr|jdd|jn |jdd|j|jfWYdd}~XnNtk r_}z.|j dkr9n|jdd|WYdd}~XnXdS)Nrvrrrrz tarfile: %sztarfile: %s %r)rr r rr`ryrrrr_extract_memberrrrzfilenamerstrerrorrl)rmemberrrrrrr+r+r,rs(  ! 2zTarFile.extractcCs|jdt|tr.|j|}n|}|jsO|jtkr_|j||S|jsw|j rt|j t rt dq|j |j|SndSdS)Nrvz'cannot extract (sym)link as file object)rr r rr=rr> fileobjectr`r^rrro extractfile_find_link_target)rrrr+r+r,rs zTarFile.extractfilecCs|jd}|jdtj}tjj|}|r\tjj| r\tj||jst|j r|j dd|j |j fn|j d|j |j r|j||n|jr|j||n|jr|j||n|js|jr2|j||n]|jsJ|j r]|j||n2|jtkr|j||n|j|||r|j||||j s|j|||j||dS)Nrrz%s -> %s)r.rryrrdirnamertmakedirsr`r^rrrr=makefiler-makedirrfmakefiforbrdmakedevmakelinkrr> makeunknownrrr)rr targetpathrrZ upperdirsr+r+r,r&s4 #    zTarFile._extract_memberc Cs-ytj|dWntk r(YnXdS)Ni)rymkdirFileExistsError)rrrr+r+r,rWs zTarFile.makedirc Cs|j}|j|jt|d}|jdk rx7|jD],\}}|j|t|||tqDW|j|j|jnt|||jtWdQRXdS)Nrq) rrrrurrPrmrtruncate)rrrsourcetargetrrr+r+r,ras   zTarFile.makefilecCs+|j|||jdd|jdS)Nrz9tarfile: Unknown file type %r, extracted as regular file.)rrr)rrrr+r+r,rps zTarFile.makeunknowncCs/ttdrtj|n tddS)Nmkfifozfifo not supported by system)r~ryrrl)rrrr+r+r,rxszTarFile.makefifocCsttd s ttd r,td|j}|jrQ|tjO}n |tjO}tj||tj |j |j dS)Nmknodrz'special devices not supported by system) r~ryrlr`rdr^S_IFBLKS_IFCHRrrrr)rrrr`r+r+r,rs      zTarFile.makedevcCsyj|jr%tj|j|nDtjj|jrPtj|j|n|j|j ||WnPt k ry|j|j ||Wnt k rt dYnXYnXdS)Nz%unable to resolve link inside archive) r^rysymlinkrrrtrlinkrrsymlink_exceptionrrl)rrrr+r+r,rs     zTarFile.makelinkc Cs2tr.ttdr.tjdkr.|rB|j}|j}npytj|jd}Wnt k ry|j}YnXytj |j d}Wnt k r|j}YnXyH|j rttdrtj |||ntj|||Wn1tk r-}ztdWYdd}~XnXdS)Ngeteuidrrlchownzcould not change owner)rr~ryrrrrgetgrnamr!rgetpwnamr r^rrrrl)rrrrgurr+r+r,rs$'    z TarFile.chowncCs^ttdrZytj||jWn1tk rY}ztdWYdd}~XnXdS)Nrzcould not change mode)r~ryrr`rrl)rrrrr+r+r,rs z TarFile.chmodcCskttdsdSy tj||j|jfWn1tk rf}ztdWYdd}~XnXdS)Nrz"could not change modification time)r~ryrrrrl)rrrrr+r+r,rs  z TarFile.utimecCsV|jd|jdk r2|j}d|_|S|j|jjkr|jj|jd|jjdstdd}xy|jj |}Wnt k r}z=|j r|j dd|j|f|jt 7_wWYdd}~Xn(tk r}}za|j rJ|j dd|j|f|jt 7_wn!|jdkrktt|WYdd}~Xntk r|jdkrtdYn|tk r}z&|jdkrtt|WYdd}~Xn7tk r$}ztt|WYdd}~XnXPqW|dk rI|jj|n d|_|S) NZrarzunexpected end of datarz0x%X: %srz empty fileT)rr~rrrrrRrmrr7rsrxrrr>r rqrrrtr{rr|)rmrrr+r+r,rAsL      $ $%  z TarFile.nextcCs|j}|dk r1|d|j|}|rItjj|}xKt|D]=}|rztjj|j}n |j}||krV|SqVWdS)N)rindexryrnormpathreversedr)rrr normalizer{r member_namer+r+r,r s    zTarFile._getmembercCs-x|j}|dkrPqWd|_dS)NT)rAr|)rrr+r+r,r! s   z TarFile._loadcCsQ|jrtd|jj|dk rM|j|krMtd|jdS)Nz %s is closedzbad operation for mode %r)rrrrir`)rr`r+r+r,r+ s zTarFile._checkcCs|jrEdjtdtjj|j|jf}d}n|j}|}|j|d|dd}|dkrt d||S)NrrrTzlinkname %r not found) r^rrryrrrrrr)rrrlimitrr+r+r,r4 s 0   zTarFile._find_link_targetcCs$|jrt|jSt|SdS)N)r|iterr{TarIter)rr+r+r,__iter__G s  zTarFile.__iter__cCs&||jkr"t|dtjdS)Nfile)ryrgrestderr)rlevelmsgr+r+r,rO sz TarFile._dbgcCs|j|S)N)r)rr+r+r, __enter__U s zTarFile.__enter__cCs<|dkr|jn|js/|jjd|_dS)NT)rrrr)rrr tracebackr+r+r,__exit__Y s     zTarFile.__exit__)7rirjrkryrwrxrzrkrGrlr)r*rrrrrrmrrrrrrrrrrrrrQrrrrrrrrrrrrrrrrArrrrrrrrr+r+r+r,r_sr   kZ!   d =(& 0       6     c@s4eZdZddZddZddZdS)rcCs||_d|_dS)Nr)rr)rrr+r+r,rk s zTarIter.__init__cCs|S)Nr+)rr+r+r,rp szTarIter.__iter__cCs|jdkr3|jjdk r3|jj}nm|jt|jjkrd|jj|j}n<|jjs|jj}|sd|j_tnt|jd7_|S)NrTr)rrr~rAr%r{r| StopIteration)rrr+r+r,__next__t s!   zTarIter.__next__N)rirjrkrrrr+r+r+r,rd s   rc Cs;yt|}|jdSWntk r6dSYnXdS)NTF)rrr)rrr+r+r,r s    cCsddl}d}|jd|}|jdddddd d d |j}|jd d ddd d|jdddddd9d d|jdddddd:d d|jddddd d|j}|jro|j}t|rSt|d*}|jt |jd t j WdQRX|j rlt d!j |q|jd"d#j |n{|jr|j}t|rtj|d$}|jd%|j WdQRXq|jd"d#j |n|jrt|jd"kr|jd}tj}n=t|jd&kr9|j\}}n|jd"|jt|rtj|d$}|jd'|WdQRX|j r|d(krd)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|qWWdQRX|j rt d8j | n|jd"|jdS);Nrz3A simple command line interface for tarfile module. descriptionz-vz --verboseaction store_truedefaultFhelpzVerbose outputz-lz--listmetavar zShow listing of a tarfilez-ez --extractnargs+ zExtract tarfile into target dirz-cz--createzCreate tarfile from sourcesz-tz--testzTest if a tarfile is validrvrz{!r} is a tar archive.rz{!r} is not a tar archive. zr:*rrrrz{!r} file is extracted.z+{!r} file is extracted into {!r} directory.z.gzrz.tgzz.xzrz.txzz.bz2rz.tbzz.tbz2z.tb2zw:rwz{!r} file created.)r r)rr)argparseArgumentParser add_argumentadd_mutually_exclusive_group parse_argsZtestrrrrgrerrrGexitrQrrr%rycurdir format_helprZcreatepoprsplitextr)rrparserrGargsrTrZtfrrZtar_name_extZ compressionsZtar_modeZ tar_files file_namer+r+r,main s                          r __main__)aversion __author____date__Z __cvsid__ __credits__builtinsrrureryrrOr^rrJr rErrrrNotImplementedErrorrr NameError__all__r&rrrrrrrrr*r_r]rarcrreZCONTTYPErrr+rrr:rrCrrkr>r[r/rXrLr r;rYrrlgetfilesystemencodingr-r2rArHrMrPr_rh Exceptionrrlrmrnrorprqrrrsr>rtrurobjectrrBufferedReaderrrrrrr rir+r+r+r, s                             h  )  Z