JFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrJFIFxxC      C  " }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3RbrB YI~di@sndZdZdZddlmZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZy ddlZWnek rdZYnXy ddlZWnek rdZYnXeefZyeef7ZWnek 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+Z1e0Z2e 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@ZCdAdBZDdCdDZEGdEd d eFZGGdFd d eGZHGdGd d eGZIGdHd d eGZJGdId d eGZKGdJddeGZLGdKdLdLeLZMGdMdNdNeLZNGdOdPdPeLZOGdQdRdReLZPGdSdTdTeLZQGdUdVdVZRGdWdXdXZSGdYdZdZeTZUGd[d\d\eTZVGd]d^d^ejWZXGd_ddeTZYGd`ddeTZZdadZ[eZjZdbdcZ\e]ddkrje\dS)ez0.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,)ZatimeZctimer(r)r*r'ntzutf-8cCs(|||}|d||t|tS)N)encodelenNUL)slengthencodingerrorsr5,/opt/alt/python37/lib64/python3.7/tarfile.pystns r7cCs*|d}|dkr|d|}|||S)Nr)finddecode)r1r3r4pr5r5r6ntss  r<cCs|ddkrfd}x0tt|dD]}|dK}|||d7}q"W|ddkrdt|d| }n@y"t|dd}t|pd d}Wntk rtd YnX|S) Nr)r#r>asciistrict0zinvalid header)ranger/r<intstrip ValueErrorInvalidHeaderError)r1nir5r5r6ntis   rKr?cCst|}d|kr$d|dkrDnntd|d|fdt}n|tkrd|d |krrd|dkrnnZ|dkrtdg}ntdg}d||}x6t|dD]}|d|d@|dL}qWntd |S) Nrr?r#z%0*orAr@r=r>zoverflow in number field)rEbytesr0r bytearrayrDinsertrG)rIdigitsformatr1rJr5r5r6itns  2   rQcCs0dttd|}dttd|}||fS)Nr@Z 148B8x356BZ 148b8x356b)sumstruct unpack_from)bufZunsigned_chksumZ signed_chksumr5r5r6 calc_chksumss rVc Cs|pd}|dkrdS|dkr.t|||dSt||\}}x8t|D],}||}t||krh|d||qFW|dkr||}t||kr|d||dS)Ni@rzunexpected end of data)shutil copyfileobjdivmodrDreadr/write) srcdstr2 exceptionbufsizeblocks remainderbrUr5r5r6rXs$     rXcCs ddl}|dtdt|S)Nrz$deprecated in favor of stat.filemoder$)warningswarnDeprecationWarningstatfilemode)modercr5r5r6rgsrgcCs8ttjdd}|dk r(||d|}t|dddS)Nr3backslashreplace )end)getattrsysstdoutr.r:print)r1r3r5r5r6 _safe_print srpc@s eZdZdS)rN)__name__ __module__ __qualname__r5r5r5r6rsc@s eZdZdS)r N)rqrrrsr5r5r5r6r sc@s eZdZdS)rN)rqrrrsr5r5r5r6rsc@s eZdZdS)rN)rqrrrsr5r5r5r6rsc@s eZdZdS)r N)rqrrrsr5r5r5r6r sc@s eZdZdS)r N)rqrrrsr5r5r5r6r sc@s eZdZdS)EmptyHeaderErrorN)rqrrrsr5r5r5r6rt#srtc@s eZdZdS)TruncatedHeaderErrorN)rqrrrsr5r5r5r6ru&sruc@s eZdZdS)EOFHeaderErrorN)rqrrrsr5r5r5r6rv)srvc@s eZdZdS)rHN)rqrrrsr5r5r5r6rH,srHc@s eZdZdS)SubsequentHeaderErrorN)rqrrrsr5r5r5r6rw/srwc@s,eZdZddZddZddZddZd S) _LowLevelFilecCsFtjtjtjBtjBd|}ttdr2|tjO}t||d|_dS)N)rwO_BINARYi) osO_RDONLYO_WRONLYO_CREATO_TRUNChasattrr{rfd)selfnamerhr5r5r6__init__<s   z_LowLevelFile.__init__cCst|jdS)N)r|closer)rr5r5r6rEsz_LowLevelFile.closecCst|j|S)N)r|rZr)rr'r5r5r6rZHsz_LowLevelFile.readcCst|j|dS)N)r|r[r)rr1r5r5r6r[Ksz_LowLevelFile.writeN)rqrrrsrrrZr[r5r5r5r6rx6s rxc@speZdZddZddZddZddZd d Zd d Zd dZ ddZ dddZ dddZ ddZ ddZdS)_Streamc Csd|_|dkrt||}d|_|dkr6t|}|}|pt|j|jkrL|j|jd|j|j|jd|_qWdS)N)rUr/r_rr[)rr1r5r5r6Z__writesz_Stream.__writecCs|jr dSd|_z|jdkr:|jdkr:|j|j7_|jdkr|jr|j|jd|_|jdkr|jt d|j |jt d|j d@Wd|j s|j XdS)NTrzrrrzd|fg}d|_g|_d}|j}xT|D]L\}}||kr~|j d||df|j d||||f||7}||}qZW||jkr|j d||jdfdS)NrrFT) roffsetr'positionrlrr map_indexmapr)rrrr'Z blockinfoZlastposZrealposr5r5r6rhs(   z_FileInFile.__init__cCsdS)Nr5)rr5r5r6rsz_FileInFile.flushcCsdS)NTr5)rr5r5r6readablesz_FileInFile.readablecCsdS)NFr5)rr5r5r6writablesz_FileInFile.writablecCs |jS)N)rseekable)rr5r5r6rsz_FileInFile.seekablecCs|jS)N)r)rr5r5r6rsz_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_ENDrG)rrwhencer5r5r6rs   z_FileInFile.seekc Cs|dkr|j|j}nt||j|j}d}x|dkr xZ|j|j\}}}}||jkrd|krlnnPq:|jd7_|jt|jkr:d|_q:Wt|||j}|r|j||j||j|}t||krt d||7}n |t |7}||8}|j|7_q.W|S)Nrrr#zunexpected end of data) r'rrrrr/rrrZrr0) rr'rUdatastartstoprr2rbr5r5r6rZs.      z_FileInFile.readcCs&|t|}||dt|<t|S)N)rZr/)rrbrUr5r5r6readintosz_FileInFile.readintocCs d|_dS)NT)r)rr5r5r6rsz_FileInFile.close)N)N)rqrrrsrrrrrrrrrrZrrr5r5r5r6rbs  rcseZdZfddZZS) ExFileObjectcs&t|j|j|j|j}t|dS)N)rr offset_datar'sparsesuperr)rtarfiletarinfor) __class__r5r6rs  zExFileObject.__init__)rqrrrsr __classcell__r5r5)rr6rsrc@seZdZdZdSddZeddZejddZedd Zejd d Zd d Z d dZ e e dfddZ ddZddZddZeddZddZeddZeddZed d!Zed"d#Zed$d%Zed&d'Zd(d)Zd*d+Zd,d-Zd.d/Zd0d1Zd2d3Z d4d5Z!d6d7Z"d8d9Z#d:d;Z$dd?Z&d@dAZ'dBdCZ(dDdEZ)dFdGZ*dHdIZ+dJdKZ,dLdMZ-dNdOZ.dPdQZ/dRS)Tr)rrhr)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)rrhr)r*r'r(rREGTYPErrr+r,rrrrrr)rrr5r5r6rs"zTarInfo.__init__cCs|jS)N)r)rr5r5r6r%sz TarInfo.pathcCs ||_dS)N)r)rrr5r5r6r%scCs|jS)N)r)rr5r5r6r&szTarInfo.linkpathcCs ||_dS)N)r)rrr5r5r6r& scCsd|jj|jt|fS)Nz<%s %r at %#x>)rrqrid)rr5r5r6__repr__ szTarInfo.__repr__cCsl|j|jd@|j|j|j|j|j|j|j|j |j |j |j d }|dt krh|ddsh|dd7<|S)Ni) rrhr)r*r'r(rrrr+r,rrrr/)rrhr)r*r'r(rrrr+r,rrDIRTYPEr)rinfor5r5r6get_infos  zTarInfo.get_infosurrogateescapecCsT|}|tkr||||S|tkr4||||S|tkrH|||StddS)Nzinvalid format)rr create_ustar_headerrcreate_gnu_headerrcreate_pax_headerrG)rrPr3r4rr5r5r6tobuf(s z TarInfo.tobufcCsnt|d<t|d||tkr(tdt|d||tkr^||d||\|d<|d<||t||S)Nmagicrzlinkname is too longrprefix) POSIX_MAGICr/r. LENGTH_LINKrG LENGTH_NAME_posix_split_name_create_headerr )rrr3r4r5r5r6r6s zTarInfo.create_ustar_headercCst|d<d}t|d||tkr<|||dt||7}t|d||tkrl|||dt||7}|||t ||S)Nrrrr) GNU_MAGICr/r.r_create_gnu_long_headerGNUTYPE_LONGLINKrGNUTYPE_LONGNAMErr)rrr3r4rUr5r5r6rCszTarInfo.create_gnu_headerc Cs0t|d<|j}xddtfddtfddfD]h\}}}||kr@q,y||dd Wn"tk rv||||<w,YnXt|||kr,||||<q,Wxhd D]`\}}||krd ||<q||}d |krd |d krnn t|t rt |||<d ||<qW|r| |t |} nd} | | |tddS)Nrrr%rr&)r+r+ )r,r,rrArB))r)r?)r*r?)r' )r(rrr?r#rr)rrcopyrrr.UnicodeEncodeErrorr/ isinstancefloatstr_create_pax_generic_headerXHDTYPErr ) rrr3rrZhnamer2rOvalrUr5r5r6rQs4  *  zTarInfo.create_pax_headercCs||tdS)Nzutf-8)rXGLTYPE)clsrr5r5r6create_pax_global_headersz TarInfo.create_pax_global_headercCs|d}xltdt|D]R}d|d|}d||d}t|||tkrt|||tkrPqWtd||fS)Nrr#zname is too long)splitrDr/rr. LENGTH_PREFIXrrG)rrr3r4Z componentsrJrr5r5r6rs 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)Nrrrrhrir?r)r*r'rr(s rrrr+rr,rrrrz%dsriz%06orAi) r7getrQrrrSrrrrVrL)rrPr3r4partsrUrr5r5r6rs&  &zTarInfo._create_headercCs.tt|t\}}|dkr*|t|t7}|S)Nr)rYr/rr0)Zpayloadr`rar5r5r6_create_payloadszTarInfo._create_payloadcCsR|||t}i}d|d<||d<t||d<t|d<||t||||S)Nz ././@LongLinkrrr'r)r.r0r/rrr r )rrrr3r4rr5r5r6rs zTarInfo._create_gnu_long_headerc Cs:d}x@|D]4\}}y|ddWqtk r@d}PYqXqWd}|rV|d7}x|D]\}}|d}|r||d}n |d}t|t|d}d } } x"|tt| } | | krP| } qW|tt| d d |d |d 7}q`Wi} d| d<|| d<t|| d<t| d<|| td d| |S)NFzutf-8rBTrs21 hdrcharset=BINARY rrrrA = z././@PaxHeaderrrr'rr) itemsr.rr/rrLrrr r ) rrrr3ZbinarykeywordvalueZrecordslrIr;rr5r5r6rs<   * z"TarInfo._create_pax_generic_headerc Cstt|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|_|jtkr6d}g}xrtdD]f} y0t|||d} t||d|d} Wntk rPYnX|| | f|d7}qWt|d} t|dd} || | f|_ |!rN|j "d|_ |rp|jt#krp|d|j |_ |S)Nrz empty headerztruncated headerzend of file headerz bad checksumrlt|ii i)iIiQiYirirriii)$r/rtrrucountr0rvrKrVrHr<rrhr)r*r'r(rrrr+r,rrAREGTYPErrGNUTYPE_SPARSErDrGrboolrisdirrstrip GNU_TYPES)rrUr3r4robjrrstructsrJrnumbytes isextendedorigsizer5r5r6frombufsZ       zTarInfo.frombufcCs8|jt}|||j|j}|jt|_||S)N) rrZrr&r3r4rr _proc_member)rrrUr!r5r5r6 fromtarfileAs zTarInfo.fromtarfilecCsT|jttfkr||S|jtkr,||S|jtttfkrF| |S| |SdS)N) rrr _proc_gnulongr _proc_sparserrSOLARIS_XHDTYPE _proc_pax _proc_builtin)rrr5r5r6r'Vs    zTarInfo._proc_membercCsR|j|_|j}|s$|jtkr4|||j7}||_| |j |j |j |S)N) rrrisregrSUPPORTED_TYPES_blockr'r_apply_pax_inforr3r4)rrrr5r5r6r-cs zTarInfo._proc_builtincCs|j||j}y||}Wntk r>tdYnX|j|_|jt krft ||j |j |_ n|jtkrt ||j |j |_|S)Nz missing or bad subsequent header)rrZr0r'r(r rwrrrr<r3r4rrr)rrrUnextr5r5r6r)ts  zTarInfo._proc_gnulongc Cs|j\}}}|`x|r|jt}d}xvtdD]j}y0t|||d}t||d|d} Wntk rzPYnX|r| r||| f|d7}q0Wt|d}qW||_ |j |_ |j | |j |_||_ |S)Nrrri)rrrZrrDrKrGrrrrrr0r'r) rrr"r$r%rUrrJrr#r5r5r6r*s(    zTarInfo._proc_sparsecCs0|j||j}|jtkr&|j}n |j}t d|}|dk rX| d d|d<| d}|dkrr|j }nd}td}d}x|||}|sP|\} } t| } | dkrtd||d d|d| d} || dd|j} | tkr|| ||j |j} n|| dd|j} | || <|| 7}qWy||} Wntk rdtd 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#zutf-8 hdrcharsetZBINARYs(\d+) ([^=]+)=rzinvalid headerr$z missing or bad subsequent headerzGNU.sparse.mapzGNU.sparse.sizezGNU.sparse.major1zGNU.sparse.minorrCr')%rrZr0r'rrrrresearchgroupr:rr3compilematchgroupsrErHrkr_decode_pax_fieldr4PAX_NAME_FIELDSr(r rw_proc_gnusparse_01_proc_gnusparse_00_proc_gnusparse_10rr+r1rrr.r/)rrrUrr:r4r3Zregexrr2rrr2rr5r5r6r,sd       $          zTarInfo._proc_paxcCspg}x(td|D]}|t|dqWg}x(td|D]}|t|dq@Wtt|||_dS)Ns\d+ GNU.sparse.offset=(\d+)\nr#s\d+ GNU.sparse.numbytes=(\d+)\n)r6finditerrrEr8listzipr)rr2rrUZoffsetsr:r#r5r5r6r?szTarInfo._proc_gnusparse_00cCs@dd|ddD}tt|ddd|ddd|_dS)NcSsg|] }t|qSr5)rE).0xr5r5r6 sz.TarInfo._proc_gnusparse_01..zGNU.sparse.map,r$r#)rrBrCr)rr2rrr5r5r6r>szTarInfo._proc_gnusparse_01cCsd}g}|jt}|dd\}}t|}xJt||dkrvd|krV||jt7}|dd\}}|t|q.W|j|_t t |ddd|ddd|_ dS)Nr r#r$) rrZrrrEr/rrrrBrCr)rr2rrZfieldsrrUZnumberr5r5r6r@s  zTarInfo._proc_gnusparse_10c Csx|D]\}}|dkr(t|d|q |dkrBt|dt|q |dkr\t|dt|q |tkr |tkryt||}Wntk rd}YnX|dkr|d}t|||q W||_dS)NzGNU.sparse.namer%zGNU.sparse.sizer'zGNU.sparse.realsizerr) rsetattrrE PAX_FIELDSPAX_NUMBER_FIELDSrGrrr)rrr3r4rrr5r5r6r1/s"  zTarInfo._apply_pax_infocCs.y ||dStk r(|||SXdS)NrB)r:UnicodeDecodeError)rrr3Zfallback_encodingZfallback_errorsr5r5r6r<Fs zTarInfo._decode_pax_fieldcCs"t|t\}}|r|d7}|tS)Nr#)rYr)rrr`rar5r5r6r0NszTarInfo._blockcCs |jtkS)N)r REGULAR_TYPES)rr5r5r6r.Wsz TarInfo.isregcCs|S)N)r.)rr5r5r6isfileYszTarInfo.isfilecCs |jtkS)N)rr)rr5r5r6r[sz TarInfo.isdircCs |jtkS)N)rSYMTYPE)rr5r5r6issym]sz TarInfo.issymcCs |jtkS)N)rLNKTYPE)rr5r5r6islnk_sz TarInfo.islnkcCs |jtkS)N)rCHRTYPE)rr5r5r6ischrasz TarInfo.ischrcCs |jtkS)N)rBLKTYPE)rr5r5r6isblkcsz TarInfo.isblkcCs |jtkS)N)rFIFOTYPE)rr5r5r6isfifoeszTarInfo.isfifocCs |jdk S)N)r)rr5r5r6issparsegszTarInfo.issparsecCs|jtttfkS)N)rrRrTrV)rr5r5r6isdevisz TarInfo.isdevN)r)0rqrrrs __slots__rpropertyr%setterr&rrrr rrrr classmethodrr staticmethodrr rrr&r(r'r-r)r*r,r?r>r@r1r<r0r.rMrrOrQrSrUrWrXrYr5r5r5r6rsR    1    3 ?  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#Nryrc 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|_y|jd krd|_ |!|_ |jdkr2x|j"|jy|j#|}|j$|WnTt%k r|j"|jPYn0t&k r*}zt't |Wdd}~XYnXqW|jdkr|d |_|jr||j(|j)}|j*||jt+|7_Wn&|js|j,d |_YnXdS)Nrbzr+bwbZxb)ryarzrEz!mode must be 'r', 'a', 'w' or 'x'rarzFrrhTry)rarzrE)-rGrh_moder|r%exists bltn_openrrrrrrLabspathrrPr dereference ignore_zerosr3r4rrdebug errorlevel copybufsizermembers_loadedrrinodes firstmemberr2rr(rrvr rrrr[r/r)rrrhrrPrrfrgr3r4rrhrirjZmodeserUr5r5r6rs            $   zTarFile.__init__c s|s|std|dkrfdd}xttj|dD]b}tj|}|dk rX|} y||d|f|Sttfk r|dk r|| w4Yq4Xq4Wtdnd|kr|dd \} }| pd} |pd }|jkrtj|}n td |||| |f|Sd |kr|d d \} }| p*d} |p4d }| d krHtdt || |||} y|| | f|} Wn| YnXd| _ | S|dkrj |||f|StddS)Nznothing to open)ryzr:*csj|dkS)Ntaropen) OPEN_METH)r)rr5r6not_compressed sz$TarFile.open..not_compressed)keyryz%file could not be opened successfully:r#rzunknown compression type %r|)ryrzzmode must be 'r' or 'w'F)rarzrEzundiscernible mode) rGsortedrqrlrrrrrrrrrp) rrrhrr_kwargsrrrfuncZ saved_posrgstreamrr5)rr6rsP%            z TarFile.opencKs |dkrtd||||f|S)N)ryrarzrEz!mode must be 'r', 'a', 'w' or 'x')rG)rrrhrrwr5r5r6rpQszTarFile.taropenrcKs|dkrtdyddlm}Wntk r<tdYnXy|||d||}Wn.tk r|dk r||dkr|tdYnXy|j|||f|}WnBtk r||dkrtdYn|YnXd |_ |S) N)ryrzrEzmode must be 'r', 'w' or 'x'r)GzipFilezgzip module is not availablerbryznot a gzip fileF) rGZgziprzrrrrrprr)rrrhr compresslevelrwrzrr5r5r6gzopenYs0zTarFile.gzopenc Ks|dkrtdyddlm}Wntk r<tdYnX||pF|||d}y|j|||f|}WnFttfk r||dkrt dYn|YnXd |_ |S) N)ryrzrEzmode must be 'r', 'w' or 'x'r)BZ2Filezbz2 module is not available)r{ryznot a bzip2 fileF) rGrr}rrrprEOFErrorrrr)rrrhrr{rwr}rr5r5r6bz2openzs&zTarFile.bz2openc Ks|dkrtdyddlm}m}Wntk r@tdYnX||pJ|||d}y|j|||f|}WnF|tfk r||dkrt dYn|YnXd |_ |S) N)ryrzrEzmode must be 'r', 'w' or 'x'r)LZMAFilerzlzma module is not available)presetryznot an lzma fileF) rGrrrrrrpr~rrr) rrrhrrrwrrrr5r5r6xzopens&zTarFile.xzopenrpr|rr)rrrrcCs|jr dSd|_z`|jdkrn|jttd|jtd7_t|jt\}}|dkrn|jtt|Wd|j s|j XdS)NT)rarzrEr$r) rrhrr[r0rrrY RECORDSIZErr)rr`rar5r5r6rs z TarFile.closecCs"||}|dkrtd||S)Nzfilename %r not found) _getmemberKeyError)rrrr5r5r6 getmembers  zTarFile.getmembercCs||js||jS)N)_checkrl_loadrk)rr5r5r6 getmembersszTarFile.getmemberscCsdd|DS)NcSsg|] }|jqSr5)r)rDrr5r5r6rFsz$TarFile.getnames..)r)rr5r5r6getnamesszTarFile.getnamesc Csl|d|dk r|j}|dkr$|}tj|\}}|tjd}|d}|}||_ |dkrt tdr~|j s~t |}qt |}nt|}d}|j}t |r |j|jf} |j s|jdkr| |jkr||j| krt} |j| }nt} | drt||j| <nht |rt} nVt |r0t} nDt |rLt} t|}n(t |r^t } nt !|rpt"} ndS||_||_#|j$|_%|j&|_'| tkr|j(|_)nd|_)|j*|_+| |_,||_-t.ryt./|j%d|_0Wnt1k rYnXt2r&yt23|j'd|_4Wnt1k r$YnX| t t"fkrht tdrht tdrht5|j6|_7t8|j6|_9|S) Nawxrlstatrr#rmajorminor):rrr|r% splitdriverseplstriprrrrfrrffstatfilenost_modeS_ISREGst_inost_devst_nlinkrmrPrS_ISDIRrS_ISFIFOrVS_ISLNKrNreadlinkS_ISCHRrRS_ISBLKrTrhst_uidr)st_gidr*st_sizer'st_mtimer(rrpwdgetpwuidr+rgrpZgetgrgidr,rst_rdevrrr) rrarcnamerZdrvrZstatresrZstmdinoderr5r5r6 gettarinfos~                 zTarFile.gettarinfoT)rkcCs||dkr|}x|D]}|rtt|jtd|jp@|j|jpJ|jf| sb| r|tdd|j |j fntd|j tdt|jddt|j|rdnd|r|rtd |j|rtd |jtqWdS) Nz%s/%sz%10sz%d,%dz%10dz%d-%02d-%02d %02d:%02d:%02drrrz-> zlink to )rrprfrgrhr+r)r,r*rSrUrrr'rZ localtimer(rrrOrrQro)rverboserkrr5r5r6rBQs* z TarFile.list)filterc Cs:|d|dkr|}|jdk rFtj||jkrF|dd|dS|d||||}|dkrz|dd|dS|dk r||}|dkr|dd|dS|rt|d}| ||WdQRXnd| r,| ||r6xHt t |D]*}|j tj||tj||||dqWn | |dS) Nrr$ztarfile: Skipped %rr#ztarfile: Unsupported type %rztarfile: Excluded %rr_)r)rrr|r%re_dbgrr.rdaddfilerrvlistdiraddr)rrr recursiverrfr5r5r6rqs4      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)r_rr#)rrrrPr3r4rr[rr/rjrXr'rYrr0rkr)rrrrUr_r`rar5r5r6rs   zTarFile.addfile.) numeric_ownerc Csg}|dkr|}xF|D]>}|r<||t|}d|_|j||| |dqW|jddd|x|D]}tj ||j }y,|j |||d| ||| ||Wqvtk r}z"|jdkrւn|dd|Wdd}~XYqvXqvWdS) Ni) set_attrsrcSs|jS)N)r)rar5r5r6rz$TarFile.extractall..)rs)rr#z tarfile: %s)rrrrhextractsortreverser|r%rrchownutimechmodr rir)rr%rkrZ directoriesrdirpathror5r5r6 extractalls,       zTarFile.extractallrc Cs |dt|tr ||}n|}|r>tj||j|_ y"|j |tj||j ||dWnt k r}zH|j dkrn6|jdkr|dd|jn|dd|j|jfWdd}~XYnBtk r}z"|j dkrn|dd|Wdd}~XYnXdS)Nry)rrrr#z tarfile: %sztarfile: %s %r)rrrrrQr|r%rrr_extract_memberrrrifilenamerstrerrorr )rmemberr%rrrror5r5r6rs(      ( zTarFile.extractcCs|dt|tr ||}n|}|s6|jtkrB|||S|sR| rzt|j t rht dq~| ||SndSdS)Nryz'cannot extract (sym)link as file object)rrrrr.rr/ fileobjectrQrOrrr extractfile_find_link_target)rrrr5r5r6r 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)rrr|rr%dirnamercmakedirsrQrOrrrr.makefilermakedirrWmakefiforSrUmakedevmakelinkrr/ makeunknownrrr)rr targetpathrrZ upperdirsr5r5r6r*s4       zTarFile._extract_membercCs*yt|dWntk r$YnXdS)Ni)r|mkdirFileExistsError)rrrr5r5r6r[szTarFile.makedirc Cs|j}||j|j}t|df}|jdk rrx,|jD]"\}}||t|||t|q6W||j| nt|||jt|WdQRXdS)Nr`) rrrrjrdrrXrr'truncate)rrrsourcer_targetrr'r5r5r6res      zTarFile.makefilecCs"||||dd|jdS)Nr#z9tarfile: Unknown file type %r, extracted as regular file.)rrr)rrrr5r5r6rus zTarFile.makeunknowncCs"ttdrt|ntddS)Nmkfifozfifo not supported by system)rr|rr )rrrr5r5r6r}s  zTarFile.makefifocCs^ttdrttdstd|j}|r6|tjO}n |tjO}t||t |j |j dS)Nmknodrz'special devices not supported by system) rr|r rhrUrfS_IFBLKS_IFCHRrrrr)rrrrhr5r5r6rs  zTarFile.makedevc CsyL|rt|j|n0tj|jr8t|j|n|| ||WnHt k ry|| ||Wnt k rt dYnXYnXdS)Nz%unable to resolve link inside archive) rOr|symlinkrr%rcrlinkrrsymlink_exceptionrr )rrrr5r5r6rs    zTarFile.makelinkcCsttdrtdkr|j}|j}|sytrttdr:yt||jWntk r8tdYnXdS)Nrzcould not change mode)rr|rrhrr )rrrr5r5r6rs  z TarFile.chmodcCsHttdsdSyt||j|jfWntk rBtdYnXdS)Nrz"could not change modification time)rr|rr(rr )rrrr5r5r6rs  z TarFile.utimec Cs|d|jdk r$|j}d|_|S|j|jkrZ|j|jd|jdsZtdd}xby|j |}WnHt k r}z0|j r| dd|j|f|jt 7_wbWdd}~XYntk r,}zL|j r| dd|j|f|jt 7_wbn|jdkrtt|Wdd}~XYntk rT|jdkrPtdYnjtk r}z|jdkr~tt|Wdd}~XYn0tk r}ztt|Wdd}~XYnXPqbW|dk r|j|nd|_|S) NZrar#zunexpected end of datar$z0x%X: %srz empty fileT)rrnrrrrrZrrr(rvrgrrrHrrtrurwrkrrl)rmrror5r5r6r2sL        z TarFile.nextcCsn|}|dk r"|d||}|r2tj|}x6t|D]*}|rTtj|j}n|j}||kr<|SqzShow listing of a tarfile)metavarrz-ez --extract+)z z zExtract tarfile into target dir)nargsrrz-cz--create)zzzCreate tarfile from sourcesz-tz--testzTest if a tarfile is validry)rz{!r} is a tar archive.r#z{!r} is not a tar archive. zr:*)rr$)r%rz{!r} file is extracted.z+{!r} file is extracted into {!r} directory.rrr)z.gzz.tgzz.xzz.txzz.bz2z.tbzz.tbz2z.tb2zw:rzz{!r} file created.)argparseArgumentParser add_argumentadd_mutually_exclusive_group parse_argsZtestrrrrormrrrPexitrBrrr/r|curdir format_helprZcreatepopr%splitextr)rrparserr8argsr\rZtfrrZtar_name_ZextZ compressionsZtar_modeZ tar_files file_namer5r5r6main s                     r__main__)^version __author__ __credits__builtinsrrdrmr|rrWrfrrSrr6rrrAttributeErrorNotImplementedErrorrr NameError__all__r0rrrrrrrrrrPrNrRrTrrVZCONTTYPErrrrrr+r rrrr/rLr rIr=rrErJrr getfilesystemencodingr7r<rKrQrVrXrgrp Exceptionrr rrr r rtrurvrHrwrxrobjectrrBufferedReaderrrrrrrqr5r5r5r6 s         wh   W