U ,an@sfdZdZdZddlmZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZz ddlZWnek rdZYnXz ddlZWnek rdZYnXeefZzeef7ZWnek rYnXdddd d d d d dddddddgZdZdZedZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$d Z%d!Z&d"Z'd#Z(d$Z)d%Z*d&Z+d'Z,d(Z-d)Z.dZ/d*Z0d+Z1e1Z2e e!e"e#e&e'e(e$e%e)e*e+f Z3e e!e(e+fZ4e)e*e+fZ5d,Z6d-d.d/d0hZ7e8e8e8e9e9e9d1Z:ej;d2krd3Zd6d7Z?d8d9Z@d:e2fd;d<ZAd=d>ZBdedfd?d@ZCdAdBZDGdCd d eEZFGdDd d eFZGGdEd d eFZHGdFd d eFZIGdGd d eFZJGdHddeFZKGdIdJdJeKZLGdKdLdLeKZMGdMdNdNeKZNGdOdPdPeKZOGdQdRdReKZPGdSdTdTZQGdUdVdVZRGdWdXdXeSZTGdYdZdZeSZUGd[d\d\ejVZWGd]ddeSZXGd^ddeSZYd_dZZeYjZd`daZ[e\dbkrbe[dS)cz0.9.0u"Lars Gustäbel (lars@gustaebel.de)u4Gustavo Niemeyer, Niels Gustäbel, Richard Townsend.)openNTarFileTarInfo is_tarfileTarError ReadErrorCompressionError StreamError ExtractError HeaderErrorENCODING USTAR_FORMAT GNU_FORMAT PAX_FORMATDEFAULT_FORMATrisustar sustar00d01234567LKSxgX)pathlinkpathsizemtimeuidgidunamegnamer%r&r+r,)Zatimectimer(r)r*r'ntutf-8cCs(|||}|d||t|tSN)encodelenNUL)slengthencodingerrorsr8,/opt/alt/python38/lib64/python3.8/tarfile.pystns r:cCs*|d}|dkr|d|}|||S)Nr)finddecode)r4r6r7pr8r8r9ntss  r?cCs|ddkrbd}tt|dD]}|dK}|||d7}q |ddkrdt|d| }n@z"t|dd}t|p|d d}Wntk rtd YnX|S) Nr)r#rAasciistrict0invalid header)ranger2r?intstrip ValueErrorInvalidHeaderError)r4nir8r8r9ntis   rOrBcCst|}d|kr$d|dkrDnntd|d|fdt}n|tkrd|d |krrd|dkrnnV|dkrtdg}ntdg}d||}t|dD]}|d|d@|dL}qntd |S) NrrBr#z%0*orDrCr@rAzoverflow in number field)rIbytesr3r bytearrayrHinsertrK)rMdigitsformatr4rNr8r8r9itns  2    rUcCs0dttd|}dttd|}||fS)NrCZ 148B8x356BZ 148b8x356b)sumstructZ unpack_from)bufZunsigned_chksumZ signed_chksumr8r8r9 calc_chksumss rYc Cs|pd}|dkrdS|dkr.t|||dSt||\}}t|D],}||}t||krf|d||qD|dkr||}t||kr|d||dS)Ni@runexpected end of data)shutil copyfileobjdivmodrHreadr2write) srcZdstr5 exceptionbufsizeblocks remainderbrXr8r8r9r\s$       r\cCs8ttjdd}|dk r(||d|}t|dddS)Nr6backslashreplace )end)getattrsysstdoutr1r=print)r4r6r8r8r9 _safe_printsrmc@s eZdZdS)rN__name__ __module__ __qualname__r8r8r8r9r sc@s eZdZdS)r Nrnr8r8r8r9r sc@s eZdZdS)rNrnr8r8r8r9rsc@s eZdZdS)rNrnr8r8r8r9rsc@s eZdZdS)r Nrnr8r8r8r9r sc@s eZdZdS)r Nrnr8r8r8r9r sc@s eZdZdS)EmptyHeaderErrorNrnr8r8r8r9rrsrrc@s eZdZdS)TruncatedHeaderErrorNrnr8r8r8r9rssrsc@s eZdZdS)EOFHeaderErrorNrnr8r8r8r9rt"srtc@s eZdZdS)rLNrnr8r8r8r9rL%srLc@s eZdZdS)SubsequentHeaderErrorNrnr8r8r8r9ru(sruc@s,eZdZddZddZddZddZd S) _LowLevelFilecCsFtjtjtjBtjBd|}ttdr2|tjO}t||d|_dS)NrwO_BINARYi) osO_RDONLYO_WRONLYO_CREATO_TRUNChasattrrzrfd)selfnamemoder8r8r9__init__5s  z_LowLevelFile.__init__cCst|jdSr0)r{closerrr8r8r9r>sz_LowLevelFile.closecCst|j|Sr0)r{r^rrr'r8r8r9r^Asz_LowLevelFile.readcCst|j|dSr0)r{r_rrr4r8r8r9r_Dsz_LowLevelFile.writeN)rorprqrrr^r_r8r8r8r9rv/s rvc@sneZdZddZddZddZddZd d Zd d Zd dZ ddZ dddZ ddZ ddZ ddZdS)_Streamc Csd|_|dkrt||}d|_|dkr6t|}|}|psz_StreamProxy.__init__cCs|jj|_|jSr0)rr^rXrr8r8r9r^Bs z_StreamProxy.readcCsP|jdrdS|jdddkr8|jdddkr8d S|jd rHd Sd SdS) NsrrsBZhr s1AY&SYr)s]s7zXZrr)rX startswithrr8r8r9rFs $ z_StreamProxy.getcomptypecCs|jdSr0)rrrr8r8r9rPsz_StreamProxy.closeN)rorprqrr^rrr8r8r8r9r9s rc@sfeZdZdddZddZddZdd Zd d Zd d Ze j fddZ dddZ ddZ ddZdS) _FileInFileNcCs||_||_||_d|_t|dd|_d|_|dkr>d|fg}d|_g|_d}|j}|D]L\}}||kr||j d||df|j d||||f||7}||}qX||jkr|j d||jdfdS)NrrFT) roffsetr'positionrirr map_indexmapr)rrrr'Z blockinfoZlastposZrealposr8r8r9r]s(    z_FileInFile.__init__cCsdSr0r8rr8r8r9rvsz_FileInFile.flushcCsdSNTr8rr8r8r9readableysz_FileInFile.readablecCsdS)NFr8rr8r8r9writable|sz_FileInFile.writablecCs |jSr0)rseekablerr8r8r9rsz_FileInFile.seekablecCs|jSr0)rrr8r8r9rsz_FileInFile.tellcCs|tjkr tt|d|j|_nj|tjkr\|dkrFt|j|d|_qt|j||j|_n.|tjkrtt|j||jd|_ntd|jS)NrzInvalid argument) ioSEEK_SETminmaxr'rSEEK_CURSEEK_ENDrK)rrwhencer8r8r9rs   z_FileInFile.seekc Cs |dkr|j|j}nt||j|j}d}|dkr|j|j\}}}}||jkr`|krhqnqq6|jd7_|jt|jkr6d|_q6t|||j}|r|j||j||j|}t||krt d||7}n |t |7}||8}|j|7_q,|S)Nrrr#rZ) r'rrrrr2rrr^rr3) rr'rXdatastartstoprr5rer8r8r9r^s,     z_FileInFile.readcCs&|t|}||dt|<t|Sr0)r^r2)rrerXr8r8r9readintosz_FileInFile.readintocCs d|_dSr)rrr8r8r9rsz_FileInFile.close)N)N)rorprqrrrrrrrrrr^rrr8r8r8r9rWs  rcseZdZfddZZS) ExFileObjectcs&t|j|j|j|j}t|dSr0)rr offset_datar'sparsesuperr)rtarfiletarinfor __class__r8r9rs  zExFileObject.__init__)rorprqr __classcell__r8r8rr9rsrc@seZdZeddddddddd d d d d ddddddddZddddZeddZejddZeddZ e jddZ ddZ dd Z e e d!fd"d#Zd$d%Zd&d'Zd(d)Zed*d+Zd,d-Zed.d/Zed0d1Zed2d3Zed4d5Zed6d7Zed8d9Zd:d;Zdd?Zd@dAZdBdCZ dDdEZ!dFdGZ"dHdIZ#dJdKZ$dLdMZ%dNdOZ&dPdQZ'dRdSZ(dTdUZ)dVdWZ*dXdYZ+dZd[Z,d\d]Z-d^d_Z.d`daZ/dbdcZ0dS)erzName of the archive member.zPermission bits.z6User ID of the user who originally stored this member.z7Group ID of the user who originally stored this member.zSize in bytes.zTime of last modification.zHeader checksum.zFile type. type is usually one of these constants: REGTYPE, AREGTYPE, LNKTYPE, SYMTYPE, DIRTYPE, FIFOTYPE, CONTTYPE, CHRTYPE, BLKTYPE, GNUTYPE_SPARSE.zcName of the target file name, which is only present in TarInfo objects of type LNKTYPE and SYMTYPE.z User name.z Group name.zDevice major number.zDevice minor number.zThe tar header starts here.zThe file's data starts here.zMA dictionary containing key-value pairs of an associated pax extended header.zSparse member information.N)rrr)r*r'r(chksumtypelinknamer+r,devmajordevminorrr pax_headersrr_sparse_structs _link_targetrcCsj||_d|_d|_d|_d|_d|_d|_t|_d|_ d|_ d|_ d|_ d|_ d|_d|_d|_i|_dS)Nirr)rrr)r*r'r(rREGTYPErrr+r,rrrrrrrrr8r8r9rs"zTarInfo.__init__cCs|jSr0rrr8r8r9r%sz TarInfo.pathcCs ||_dSr0rrr8r8r9r% scCs|jSr0rrr8r8r9r&szTarInfo.linkpathcCs ||_dSr0r)rrr8r8r9r&scCsd|jj|jt|fS)Nz<%s %r at %#x>)rroridrr8r8r9__repr__szTarInfo.__repr__cCsl|j|jd@|j|j|j|j|j|j|j|j |j |j |j d }|dt krh|ddsh|dd7<|S)N) rrr)r*r'r(rrrr+r,rrrr/)rrr)r*r'r(rrrr+r,rrDIRTYPEr)rinfor8r8r9get_infos"zTarInfo.get_infosurrogateescapecCsT|}|tkr||||S|tkr4||||S|tkrH|||StddS)Nzinvalid format)rr create_ustar_headerrcreate_gnu_headerrcreate_pax_headerrK)rrTr6r7rr8r8r9tobuf2s z TarInfo.tobufcCsnt|d<t|d||tkr(tdt|d||tkr^||d||\|d<|d<||t||S)Nmagicrzlinkname is too longrprefix) POSIX_MAGICr2r1 LENGTH_LINKrK LENGTH_NAME_posix_split_name_create_headerr )rrr6r7r8r8r9r@s zTarInfo.create_ustar_headercCst|d<d}t|d||tkr<|||dt||7}t|d||tkrl|||dt||7}|||t ||S)Nrrrr) GNU_MAGICr2r1r_create_gnu_long_headerGNUTYPE_LONGLINKrGNUTYPE_LONGNAMErr)rrr6r7rXr8r8r9rMszTarInfo.create_gnu_headerc Cs*t|d<|j}ddtfddtfddfD]j\}}}||kr>q*z||dd Wn$tk rv||||<Yq*YnXt|||kr*||||<q*d D]`\}}||krd ||<q||}d |krd |d krnn t|t rt |||<d ||<q|r| |t |} nd} | | |tddS)Nrrr%rr&)r+r+ )r,r,r rDrE))r)rB)r*rB)r' )r(r rrBr#rr)rrcopyrrr1UnicodeEncodeErrorr2 isinstancefloatstr_create_pax_generic_headerXHDTYPErr ) rrr6rrZhnamer5rSvalrXr8r8r9r[s8    *  zTarInfo.create_pax_headercCs||tdS)Nr/)rXGLTYPE)clsrr8r8r9create_pax_global_headersz TarInfo.create_pax_global_headercCs~|d}tdt|D]T}d|d|}d||d}t|||tkrt|||tkrqvqtd||fS)Nrr#zname is too long)splitrHr2rr1 LENGTH_PREFIXrrK)rrr6r7Z componentsrNrr8r8r9rs zTarInfo._posix_split_namecCsVt|ddd||t|ddd@d|t|ddd|t|d dd|t|d dd |t|d dd |d |dtt|ddd|||dtt|ddd||t|ddd||t|ddd|t|ddd|t|ddd||g}tdtd|}t |t dd}|ddt d|d|dd}|S)NrrrrrrrBr)r*r'r r(s rrrr+r r,rrrrz%dsriz%06orDi) r:getrUrrrWrrrrYrP)rrTr6r7partsrXrr8r8r9rs(  &zTarInfo._create_headercCs.tt|t\}}|dkr*|t|t7}|S)Nr)r]r2rr3)Zpayloadrcrdr8r8r9_create_payloadszTarInfo._create_payloadcCsR|||t}i}d|d<||d<t||d<t|d<||t||||S)Nz ././@LongLinkrrr'r)r1r3r2rrr r)rrrr6r7rr8r8r9rs zTarInfo._create_gnu_long_headerc Cs2d}|D]8\}}z|ddWq tk rBd}YqFYq Xq d}|rV|d7}|D]\}}|d}|r||d}n |d}t|t|d}d } } |tt| } | | krq| } q|tt| d d |d |d 7}q^i} d| d<|| d<t|| d<t| d<|| td d| |S)NFr/rETrs21 hdrcharset=BINARY rrrrD = z././@PaxHeaderrrr'rr) itemsr1rr2rrPrrr r) rrrr6ZbinarykeywordvalueZrecordslrMr>rr8r8r9rs<  ( z"TarInfo._create_pax_generic_headerc Csvt|dkrtdt|tkr(td|ttkr>tdt|dd}|t|krbt d|}t |dd|||_ t|dd |_ t|d d |_ t|d d |_t|d d |_t|d d|_||_|dd |_t |d d|||_t |dd|||_t |dd|||_t|dd|_t|dd|_t |dd||}|jtkr|j drt|_|jtkr8d}g}tdD]l} z0t|||d} t||d|d} Wntk rYqYnX|| | f|d7}qt|d} t|dd} || | f|_ |!rP|j "d|_ |rr|jt#krr|d|j |_ |S)Nrz empty headerztruncated headerzend of file headerz bad checksumrlt|ii i)iIiQiYirirr iii)$r2rrrrscountr3rtrOrYrLr?rrr)r*r'r(rrrr+r,rrAREGTYPErrGNUTYPE_SPARSErHrKrboolrisdirrstrip GNU_TYPES)rrXr6r7robjrrstructsrNrnumbytes isextendedorigsizer8r8r9frombuf sZ         zTarInfo.frombufcCs8|jt}|||j|j}|jt|_||Sr0) rr^rr8r6r7rr _proc_member)rrrXr3r8r8r9 fromtarfileKs zTarInfo.fromtarfilecCsT|jttfkr||S|jtkr,||S|jtttfkrF| |S| |SdSr0) rr r  _proc_gnulongr. _proc_sparserrSOLARIS_XHDTYPE _proc_pax _proc_builtin)rrr8r8r9r9`s    zTarInfo._proc_membercCsR|j|_|j}|s$|jtkr4|||j7}||_| |j |j |j |Sr0) rrrisregrSUPPORTED_TYPES_blockr'r_apply_pax_inforr6r7)rrrr8r8r9r?ms zTarInfo._proc_builtincCs|j||j}z||}Wntk r>tdYnX|j|_|jt krft ||j |j |_ n|jtkrt ||j |j |_|S)N missing or bad subsequent header)rr^rBr'r:r rurrr r?r6r7rr r)rrrXnextr8r8r9r;~s  zTarInfo._proc_gnulongc Cs|j\}}}|`|r|jt}d}tdD]n}z0t|||d}t||d|d} Wntk rzYqYnX|r| r||| f|d7}q,t|d}q||_ |j |_ |j | |j |_||_ |S)Nrr r+i)rrr^rrHrOrKrr/rrrrBr'r) rrr4r6r7rXrrNrr5r8r8r9r<s(      zTarInfo._proc_sparsecCs.|j||j}|jtkr&|j}n |j}t d|}|dk rX| d d|d<| d}|dkrr|j }nd}td}d}|||}|sq6|\} } t| } | dkrtd||d d|d| d} || dd|j} | tkr|| ||j |j} n|| dd|j} | || <|| 7}qz||} Wntk rbtd YnXd |kr||| |nHd |kr|| ||n.| d dkr| ddkr|| |||jttfkr*| ||j |j|j!| _!d|kr*| j"} | #s| jt$kr$| | | j7} | |_!| S)Ns\d+ hdrcharset=([^\n]+)\nr#r/ hdrcharsetZBINARYs(\d+) ([^=]+)=rrGr$rDGNU.sparse.mapGNU.sparse.sizezGNU.sparse.major1zGNU.sparse.minorrFr')%rr^rBr'rrrr researchgroupr=rr6compilematchgroupsrIrLrhr_decode_pax_fieldr7PAX_NAME_FIELDSr:r ru_proc_gnusparse_01_proc_gnusparse_00_proc_gnusparse_10rr=rCrrr@rA)rrrXrrOrGr6Zregexrr5r!r"rErr8r8r9r>sh       $         zTarInfo._proc_paxcCshg}td|D]}|t|dqg}td|D]}|t|dq:tt|||_dS)Ns\d+ GNU.sparse.offset=(\d+)\nr#s\d+ GNU.sparse.numbytes=(\d+)\n)rKfinditerrrIrMlistzipr)rrErrXZoffsetsrOr5r8r8r9rTszTarInfo._proc_gnusparse_00cCs@dd|ddD}tt|ddd|ddd|_dS)NcSsg|] }t|qSr8)rI).0xr8r8r9 &sz.TarInfo._proc_gnusparse_01..rH,r$r#)rrWrXr)rrErrr8r8r9rS#szTarInfo._proc_gnusparse_01cCsd}g}|jt}|dd\}}t|}t||dkrtd|krT||jt7}|dd\}}|t|q,|j|_t t |ddd|ddd|_ dS)Nrr#r$) rr^rrrIr2rrrrWrXr)rrErrZfieldsrrXZnumberr8r8r9rU)s  zTarInfo._proc_gnusparse_10c Cs|D]\}}|dkr&t|d|q|dkr@t|dt|q|dkrZt|dt|q|tkr|tkrzt||}Wntk rd}YnX|dkr|d}t|||q||_dS)NzGNU.sparse.namer%rIr'zGNU.sparse.realsizerr) r setattrrI PAX_FIELDSPAX_NUMBER_FIELDSrKr1r r)rrr6r7r!r"r8r8r9rC9s"  zTarInfo._apply_pax_infocCs4z||dWStk r.|||YSXdS)NrE)r=UnicodeDecodeError)rr"r6Zfallback_encodingZfallback_errorsr8r8r9rQPszTarInfo._decode_pax_fieldcCs"t|t\}}|r|d7}|tS)Nr#)r]r)rr,rcrdr8r8r9rBXszTarInfo._blockcCs |jtkSr0)r REGULAR_TYPESrr8r8r9r@asz TarInfo.isregcCs|Sr0)r@rr8r8r9isfileeszTarInfo.isfilecCs |jtkSr0)rrrr8r8r9r0isz TarInfo.isdircCs |jtkSr0)rSYMTYPErr8r8r9issymmsz TarInfo.issymcCs |jtkSr0)rLNKTYPErr8r8r9islnkqsz TarInfo.islnkcCs |jtkSr0)rCHRTYPErr8r8r9ischrusz TarInfo.ischrcCs |jtkSr0)rBLKTYPErr8r8r9isblkysz TarInfo.isblkcCs |jtkSr0)rFIFOTYPErr8r8r9isfifo}szTarInfo.isfifocCs |jdk Sr0)rrr8r8r9issparseszTarInfo.issparsecCs|jtttfkSr0)rrgrirkrr8r8r9isdevsz TarInfo.isdev)r)1rorprqdict __slots__rpropertyr%setterr&rrrr rrrr classmethodrr staticmethodrrrrr8r:r9r?r;r<r>rTrSrUrCrQrBr@rbr0rdrfrhrjrlrmrnr8r8r8r9rs      1     2 >  h  c @seZdZdZdZdZdZeZe Z dZ e Z eZd[ddZedddefd d Zed\d d Zed]ddZed^ddZed_ddZdddddZddZddZddZdd Zd`d!d"Zdadd$d%d&Zdbdd'd(d)Zdcd*d+Z dddd-d.d/Z!dedd-d1d2Z"d3d4Z#dfd5d6Z$d7d8Z%d9d:Z&d;d<Z'd=d>Z(d?d@Z)dAdBZ*dCdDZ+dEdFZ,dGdHZ-dIdJZ.dgdKdLZ/dMdNZ0dhdOdPZ1dQdRZ2dSdTZ3dUdVZ4dWdXZ5dYdZZ6dS)irrFr#Nrxrc Csddddd}||krtd||_|||_|sh|jdkrTtj|sTd|_d|_t||j}d |_n@|dkrt|d rt |j t t fr|j }t|d r|j|_d |_|rtj |nd|_ ||_|dk r||_|dk r||_|dk r||_|dk r||_|dk r ||_| |_| dk r0|jtkr0| |_ni|_| dk rF| |_| dk rV| |_| |_d |_g|_d |_|j|_i|_z|jd krd|_ |!|_ |jdkr2|j"|jz|j#|}|j$|WnXt%k r|j"|jYq2Yn0t&k r,}zt't |W5d}~XYnXq|jdkr|d |_|jr||j(|j)}|j*||jt+|7_Wn&|js|j,d |_YnXdS)Nrbzr+bwbZxbrxaryrZ!mode must be 'r', 'a', 'w' or 'x'rxryFrrTrxrxryrZ)-rKr_moder{r%exists bltn_openrrrrrrPabspathrrTr dereference ignore_zerosr6r7rrdebug errorlevel copybufsizermembers_loadedrrinodes firstmemberrErr:rrtr rrr r_r2r)rrrrrTrrrr6r7rrrrZmodeserXr8r8r9rs             "   zTarFile.__init__c s|s|std|dkrfdd}tj|dD]j}tj|}|dk rV|} z||d|f|WSttfk r|dk r|| Yq2Yq2Xq2tdnd|kr |dd \} }| pd} |pd }|jkrtj|}n td |||| |f|Sd |kr|d d \} }| p.d} |p8d }| d krLtdt || |||} z|| | f|} Wn| YnXd| _ | S|dkrj |||f|StddS)Nznothing to open)rxr:*csj|dkS)Ntaropen) OPEN_METH)rrr8r9not_compressed<sz$TarFile.open..not_compressedkeyrxz%file could not be opened successfully:r#rr|rwzmode must be 'r' or 'w'Frzzundiscernible mode) rKsortedrrirrrrrrrrr) rrrrrbkwargsrrfuncZ saved_posfilemodestreamrr8rr9rsP%            z TarFile.opencKs |dkrtd||||f|S)Nrwry)rK)rrrrrr8r8r9rmszTarFile.taropenrcKs|dkrtdzddlm}Wntk r<tdYnXz|||d||}Wn.tk r|dk r||dkr|tdYnXz|j|||f|}WnBtk r||dkrtdYn|YnXd |_ |S) NrxryrZmode must be 'r', 'w' or 'x'r)GzipFilezgzip module is not availablererxrF) rKZgziprrrrrrrr)rrrr compresslevelrrrr8r8r9gzopenus0zTarFile.gzopenc Ks|dkrtdzddlm}Wntk r<tdYnX||pF|||d}z|j|||f|}WnFttfk r||dkrt dYn|YnXd |_ |S) Nrrr)BZ2Filer)rrxznot a bzip2 fileF) rKrrrrrrEOFErrorrrr)rrrrrrrrr8r8r9bz2opens&zTarFile.bz2openc Ks|dkrtdzddlm}m}Wntk r@tdYnX||pJ|||d}z|j|||f|}WnF|tfk r||dkrt dYn|YnXd |_ |S) Nrrr)LZMAFilerr)presetrxznot an lzma fileF) rKrrrrrrrrrr) rrrrrrrrrr8r8r9xzopens&zTarFile.xzopenrrrr)rrrrcCs|jr dSd|_z`|jdkrn|jttd|jtd7_t |jt \}}|dkrn|jtt |W5|js|jXdS)NTrzr$r) rrrrrr_r3rrr] RECORDSIZE)rrcrdr8r8r9rs z TarFile.closecCs"||}|dkrtd||S)Nzfilename %r not found) _getmemberKeyError)rrrr8r8r9 getmembers  zTarFile.getmembercCs||js||jSr0)_checkr_loadrrr8r8r9 getmembersszTarFile.getmemberscCsdd|DS)NcSsg|] }|jqSr8r)rYrr8r8r9r[sz$TarFile.getnames..)rrr8r8r9getnamesszTarFile.getnamesc Cs^|d|dk r|j}|dkr$|}tj|\}}|tjd}|d}|}||_ |dkr|j stt |}qt |}nt |}d}|j}t |r|j|jf} |j s|jdkr| |jkr||j| krt} |j| }nt} | dr||j| <nht |rt} nVt |r"t} nDt |r>t} t|}n(t |rPt} nt |rbt!} ndS||_||_"|j#|_$|j%|_&| tkr|j'|_(nd|_(|j)|_*| |_+||_,t-rzt-.|j$d|_/Wnt0k rYnXt1rzt12|j&d|_3Wnt0k rYnX| tt!fkrZt4tdrZt4tdrZt5|j6|_7t8|j6|_9|S)Nawxrrr#rmajorminor):rrr{r% splitdriverseplstriprrrlstatstatfstatfilenost_modeS_ISREGst_inost_devst_nlinkrrerS_ISDIRrS_ISFIFOrkS_ISLNKrcreadlinkS_ISCHRrgS_ISBLKrirst_uidr)st_gidr*st_sizer'st_mtimer(rrpwdgetpwuidr+rgrpZgetgrgidr,rrst_rdevrrr) rrarcnamerZdrvrZstatresrZstmdinoderr8r8r9 gettarinfo s                 zTarFile.gettarinfoT)rcCs||dkr|}|D]}|rtt|jtd|jp>|j|jpH|jf| s`| rztdd|j |j fntd|j tdt|jddt|j|rdnd|r|rtd |j|rtd |jtqdS) Nz%s/%sz%10sz%d,%dz%10dz%d-%02d-%02d %02d:%02d:%02drrrz-> zlink to )rrmrrrr+r)r,r*rhrjrrr'r localtimer(rr0rdrrfrl)rverboserrr8r8r9rWls0 z TarFile.listfilterc Cs6|d|dkr|}|jdk rFtj||jkrF|dd|dS|d||||}|dkrz|dd|dS|dk r||}|dkr|dd|dS|rt|d}| ||W5QRXn`| r(| ||r2t t |D]*}|j tj||tj||||dqn | |dS) Nrr$ztarfile: Skipped %rr#ztarfile: Unsupported type %rztarfile: Excluded %rrur)rrr{r%r~_dbgrr@r}addfiler0rlistdiraddr)rrr recursiverrfr8r8r9rs8       z TarFile.addcCs|dt|}||j|j|j}|j||jt |7_|j }|dk rt ||j|j |dt |j t\}}|dkr|jtt||d7}|j|t7_|j|dS)Nr)rbrr#)rr rrTr6r7rr_rr2rr\r'r]rr3rr)rrrrXrbrcrdr8r8r9rs   zTarFile.addfile. numeric_ownerc Csg}|dkr|}|D]>}|r:||t|}d|_|j||| |dq|jddd||D]}tj ||j }z,|j |||d| ||| ||Wqptk r}z"|jdkrЂn|dd|W5d}~XYqpXqpdS) N set_attrsrcSs|jSr0r)rxr8r8r9rz$TarFile.extractall..rrr# tarfile: %s)r0rr rextractsortreverser{r%rrchownutimechmodr rr)rr%rrZ directoriesrdirpathrr8r8r9 extractalls.    zTarFile.extractallrc Cs |dt|tr ||}n|}|r>tj||j|_ z"|j |tj||j ||dWnt k r}zH|j dkrn6|jdkr|dd|jn|dd|j|jfW5d}~XYnBtk r}z"|j dkrn|dd|W5d}~XYnXdS)Nrxrrr#rztarfile: %s %r)rrrrrfr{r%rrr_extract_memberrrrfilenamerstrerrorr )rmemberr%rrrrr8r8r9rs*      ( zTarFile.extractcCs|dt|tr ||}n|}|s6|jtkrB|||S|sR| rzt|j t rht dq~| ||SndSdS)Nrxz'cannot extract (sym)link as file object)rrrrr@rrA fileobjectrfrdrrr extractfile_find_link_target)rrrr8r8r9r&s      zTarFile.extractfilecCsT|d}|dtj}tj|}|r>tj|s>t||sN| rh| dd|j |j fn| d|j | r|||n|r|||nx|r|||nb|s|r|||nD|s| r|||n&|jtkr|||n ||||rP||||| sP||||||dS)Nrr#z%s -> %s)r1rr{rr%dirnamer|makedirsrfrdrrrr@makefiler0makedirrlmakefiforhrjmakedevmakelinkrrA makeunknownrrr)rr targetpathrrZ upperdirsr8r8r9rEs4       zTarFile._extract_membercCs*zt|dWntk r$YnXdS)Nr)r{mkdirFileExistsErrorrrrr8r8r9rvszTarFile.makedirc Cs|j}||j|j}t|db}|jdk rn|jD]"\}}||t|||t|q4||j| nt|||jt|W5QRXdS)Nrv) rrrrr}rr\rr'truncate)rrrsourcerbtargetrr'r8r8r9rs      zTarFile.makefilecCs"||||dd|jdS)Nr#z9tarfile: Unknown file type %r, extracted as regular file.)rrrrr8r8r9rs zTarFile.makeunknowncCs"ttdrt|ntddS)Nmkfifozfifo not supported by system)rr{rr rr8r8r9rs  zTarFile.makefifocCs^ttdrttdstd|j}|r6|tjO}n |tjO}t||t |j |j dS)Nmknodrz'special devices not supported by system) rr{r rrjrS_IFBLKS_IFCHRrrrr)rrrrr8r8r9rs  zTarFile.makedevc Cszb|r0tj|r t|t|j|n0tj|jrNt |j|n| | ||WnHt k rz| | ||Wnt k rtdYnXYnXdS)Nz%unable to resolve link inside archive)rdr{r%lexistsunlinksymlinkrr|rlinkrrsymlink_exceptionrr rr8r8r9rs"    zTarFile.makelinkcCsttdrtdkr|j}|j}|sztrzShow listing of a tarfile)metavarrz-ez --extract+)rz zExtract tarfile into target dir)nargsrrz-cz--create)zzzCreate tarfile from sourcesz-tz--testzTest if a tarfile is validrxrz{!r} is a tar archive.r#z{!r} is not a tar archive. r)rr$)r%rz{!r} file is extracted.z+{!r} file is extracted into {!r} directory.rrr)rz.tgzz.xzz.txzz.bz2z.tbzz.tbz2z.tb2zw:ryz{!r} file created.)argparseArgumentParser add_argumentZadd_mutually_exclusive_group parse_argsZtestrrrrlrjrrrTexitrWrrr2r{curdirZ format_helprZcreatepopr%splitextr)r!rparserrMargsr`rZtfr&rZtar_name_ZextZ compressionsZtar_modeZ tar_files file_namer8r8r9main s                     r-__main__)]version __author__ __credits__builtinsrr}rjr{rr[rrrWr rKrrrAttributeErrorNotImplementedErrorrr NameError__all__r3rrrrrrrrr-rercrgrirrkZCONTTYPEr r r.rrr=r rrrrArar2r^rRrrIr_rr getfilesystemencodingr:r?rOrUrYr\rm Exceptionrr rrr r rrrsrtrLrurvrobjectrrBufferedReaderrrrrr-ror8r8r8r9 s         sh D! W