B
    u9ai                @   sn  d Z dZdZddlmZ ddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZyddlZW n ek
r   dZY nX yddlZW n ek
r   dZY nX eefZyeef7 ZW n ek
r   Y nX dddd	d
ddddddddddgZdZdZed ZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$d Z%d!Z&d"Z'd#Z(d$Z)d%Z*d&Z+d'Z,d(Z-d)Z.dZ/d*Z0d+Z1e0Z2e e!e"e#e&e'e(e$e%e)e*e+fZ3e e!e(e+fZ4e)e*e+fZ5d,Z6d-d.d/d0hZ7e8e8e8e9e9e9d1Z:ej;d2krd3Z<ne= Z<d4d5 Z>d6d7 Z?d8d9 Z@d:e2fd;d<ZAd=d> ZBdedfd?d@ZCdAdB ZDdCdD ZEG dEd	 d	eFZGG dFd deGZHG dGd
 d
eGZIG dHd deGZJG dId deGZKG dJd deGZLG dKdL dLeLZMG dMdN dNeLZNG dOdP dPeLZOG dQdR dReLZPG dSdT dTeLZQG dUdV dVZRG dWdX dXZSG dYdZ dZeTZUG d[d\ d\eTZVG d]d^ d^ejWZXG d_d deTZYG d`d deTZZdad Z[eZjZdbdc Z\e]ddkrje\  dS )ez0.9.0u"   Lars Gustäbel (lars@gustaebel.de)u4   Gustavo Niemeyer, Niels Gustäbel, Richard Townsend.    )openNTarFileTarInfo
is_tarfileTarError	ReadErrorCompressionErrorStreamErrorExtractErrorHeaderErrorENCODINGUSTAR_FORMAT
GNU_FORMAT
PAX_FORMATDEFAULT_FORMATr       i      s   ustar   s   ustar 00d         0   1   2   3   4   5   6   7   L   K   S   x   g   X      )pathlinkpathsizemtimeuidgidunamegnamer%   r&   r+   r,   )ZatimeZctimer(   r)   r*   r'   ntzutf-8c             C   s(   |  ||} | d | |t|  t  S )N)encodelenNUL)slengthencodingerrors r5   /usr/lib/python3.7/tarfile.pystn   s    r7   c             C   s*   |  d}|dkr| d | } | ||S )Nr   )finddecode)r1   r3   r4   pr5   r5   r6   nts   s    
r<   c             C   s   | d dkrfd}x0t t| d D ]}|dK }|| |d  7 }q"W | d dkrdt| d  |  }n@y"t| dd} t|  pd	d}W n tk
r   td
Y nX |S )Nr   )      r#      r>      asciistrict0zinvalid header)ranger/   r<   intstrip
ValueErrorInvalidHeaderError)r1   nir5   r5   r6   nti   s    rK   r?   c             C   s   t | } d|   kr$d|d  k rDn ntd|d | f dt }n|tkrd|d   |   krrd|d  k rn nZ| dkrtdg}ntdg}d| |  } x6t|d D ]}|d| d@  | dL } qW ntd	|S )
Nr   r?   r#   z%0*orA   r@   r=   r>   zoverflow in number field)rE   bytesr0   r   	bytearrayrD   insertrG   )rI   digitsformatr1   rJ   r5   r5   r6   itn   s     2
rQ   c             C   s0   dt td|  }dt td|  }||fS )Nr@   Z
148B8x356BZ
148b8x356b)sumstructunpack_from)bufZunsigned_chksumZsigned_chksumr5   r5   r6   calc_chksums   s    	rV   c       	      C   s   |pd}|dkrd S |d kr.t | || d S t||\}}x8t|D ],}| |}t||k rh|d|| qFW |dkr| |}t||k r|d|| d S )Ni @  r   zunexpected end of data)shutilcopyfileobjdivmodrD   readr/   write)	srcdstr2   	exceptionbufsizeblocks	remainderbrU   r5   r5   r6   rX      s$    


rX   c             C   s    dd l }|dtd t| S )Nr   z$deprecated in favor of stat.filemoder$   )warningswarnDeprecationWarningstatfilemode)moderc   r5   r5   r6   rg     s    rg   c             C   s8   t tjdd }|d k	r(| |d|} t| dd d S )Nr3   backslashreplace )end)getattrsysstdoutr.   r:   print)r1   r3   r5   r5   r6   _safe_print
  s    rp   c               @   s   e Zd ZdS )r   N)__name__
__module____qualname__r5   r5   r5   r6   r     s   c               @   s   e Zd ZdS )r
   N)rq   rr   rs   r5   r5   r5   r6   r
     s   c               @   s   e Zd ZdS )r   N)rq   rr   rs   r5   r5   r5   r6   r     s   c               @   s   e Zd ZdS )r   N)rq   rr   rs   r5   r5   r5   r6   r     s   c               @   s   e Zd ZdS )r	   N)rq   rr   rs   r5   r5   r5   r6   r	     s   c               @   s   e Zd ZdS )r   N)rq   rr   rs   r5   r5   r5   r6   r      s   c               @   s   e Zd ZdS )EmptyHeaderErrorN)rq   rr   rs   r5   r5   r5   r6   rt   #  s   rt   c               @   s   e Zd ZdS )TruncatedHeaderErrorN)rq   rr   rs   r5   r5   r5   r6   ru   &  s   ru   c               @   s   e Zd ZdS )EOFHeaderErrorN)rq   rr   rs   r5   r5   r5   r6   rv   )  s   rv   c               @   s   e Zd ZdS )rH   N)rq   rr   rs   r5   r5   r5   r6   rH   ,  s   rH   c               @   s   e Zd ZdS )SubsequentHeaderErrorN)rq   rr   rs   r5   r5   r5   r6   rw   /  s   rw   c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
_LowLevelFilec             C   sF   t jt jt jB t jB d| }tt dr2|t jO }t ||d| _d S )N)rwO_BINARYi  )	osO_RDONLYO_WRONLYO_CREATO_TRUNChasattrr{   r   fd)selfnamerh   r5   r5   r6   __init__<  s    

z_LowLevelFile.__init__c             C   s   t | j d S )N)r|   closer   )r   r5   r5   r6   r   E  s    z_LowLevelFile.closec             C   s   t | j|S )N)r|   rZ   r   )r   r'   r5   r5   r6   rZ   H  s    z_LowLevelFile.readc             C   s   t | j| d S )N)r|   r[   r   )r   r1   r5   r5   r6   r[   K  s    z_LowLevelFile.writeN)rq   rr   rs   r   r   rZ   r[   r5   r5   r5   r6   rx   6  s   	rx   c               @   sp   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dddZdddZdd Zdd ZdS )_Streamc       	      C   s  d| _ |d krt||}d| _ |dkr6t|}| }|p<d| _|| _|| _|| _|| _d| _	d| _
d| _yL|dkrydd l}W n tk
r   tdY nX || _|d| _|d	kr|   |j| _n|   n|d
kr:ydd l}W n tk
r
   tdY nX |d	kr.d| _| | _t| _n
| | _n||dkrydd l}W n tk
rn   tdY nX |d	krd| _| | _|j| _n
| | _n|dkrtd| W n&   | j s| j  d| _ Y nX d S )NTF*     r   gzzzlib module is not availablery   bz2zbz2 module is not availablexzzlzma module is not availabletarzunknown compression type %r) _extfileobjrx   _StreamProxygetcomptyper   rh   comptypefileobjr_   rU   posclosedzlibImportErrorr   crc32crc_init_read_gzerrorr^   _init_write_gzr   dbufZBZ2DecompressorcmpOSErrorZBZ2CompressorlzmaZLZMADecompressor	LZMAErrorZLZMACompressorr   )	r   r   rh   r   r   r_   r   r   r   r5   r5   r6   r   Y  sl    












z_Stream.__init__c             C   s   t | dr| js|   d S )Nr   )r   r   r   )r   r5   r5   r6   __del__  s    z_Stream.__del__c             C   s   | j d| j j| j j | j jd| _tdtt		 }| 
d| d  | jdrf| jd d | _| 
| jdd	t  d S )
N	   r   z<Ls   s   z.gzz
iso-8859-1replace)r   ZcompressobjZDEFLATED	MAX_WBITSZDEF_MEM_LEVELr   rS   packrE   time_Stream__writer   endswithr.   r0   )r   Z	timestampr5   r5   r6   r     s    z_Stream._init_write_gzc             C   sR   | j dkr| j|| j| _|  jt|7  _| j dkrD| j|}| | d S )Nr   r   )	r   r   r   r   r   r/   r   compressr   )r   r1   r5   r5   r6   r[     s    

z_Stream.writec             C   sR   |  j |7  _ x>t| j | jkrL| j| j d | j  | j | jd  | _ qW d S )N)rU   r/   r_   r   r[   )r   r1   r5   r5   r6   Z__write  s    z_Stream.__writec             C   s   | j r
d S d| _ z| jdkr:| jdkr:|  j| j 7  _| jdkr| jr| j| j d| _| jdkr| jt	d| j
 | jt	d| jd@  W d | js| j  X d S )NTrz   r   r   r   z<Ll    )r   rh   r   rU   r   flushr   r[   rS   r   r   r   r   r   )r   r5   r5   r6   r     s    
z_Stream.closec             C   s   | j | j j | _d| _| ddkr0td| ddkrFtdt| d}| d |d	@ rt| dd
t| d  }| 	| |d@ rx| d}|r|t
krP qW |d@ rx| d}|r|t
krP qW |d@ r| d d S )Nr   r$   s   znot a gzip filer#      zunsupported compression method      r@   r?      )r   Zdecompressobjr   r   r   _Stream__readr   r   ordrZ   r0   )r   flagZxlenr1   r5   r5   r6   r     s.    
 


z_Stream._init_read_gzc             C   s   | j S )N)r   )r   r5   r5   r6   tell  s    z_Stream.tellr   c             C   s\   || j  dkrNt|| j  | j\}}xt|D ]}| | j q.W | | ntd| j S )Nr   z seeking backwards is not allowed)r   rY   r_   rD   rZ   r	   )r   r   r`   ra   rJ   r5   r5   r6   seek  s    z_Stream.seekNc             C   sZ   |d kr:g }x |  | j}|s P || qW d|}n
|  |}|  jt|7  _|S )Nr   )_readr_   appendjoinr   r/   )r   r'   trU   r5   r5   r6   rZ     s    
z_Stream.readc             C   s   | j dkr| |S t| j}| jg}xd||k r| | j}|sBP y| j|}W n | jk
rp   tdY nX |	| |t|7 }q(W d
|}||d  | _|d | S )Nr   zinvalid compressed datar   )r   r   r/   r   r_   r   Z
decompressr^   r   r   r   )r   r'   cr   rU   r5   r5   r6   r     s"    





z_Stream._readc             C   sn   t | j}| jg}x6||k rH| j| j}|s0P || |t |7 }qW d|}||d  | _|d | S )Nr   )r/   rU   r   rZ   r_   r   r   )r   r'   r   r   rU   r5   r5   r6   Z__read3  s    



z_Stream.__read)r   )N)rq   rr   rs   r   r   r   r[   r   r   r   r   r   rZ   r   r   r5   r5   r5   r6   r   N  s   F
	

r   c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
r   c             C   s   || _ | j t| _d S )N)r   rZ   	BLOCKSIZErU   )r   r   r5   r5   r6   r   I  s    z_StreamProxy.__init__c             C   s   | j j| _| jS )N)r   rZ   rU   )r   r'   r5   r5   r6   rZ   M  s    
z_StreamProxy.readc             C   sP   | j drdS | j dd dkr8| j dd dkr8d	S | j d
rHdS dS d S )Ns   r   r      s   BZhr   
   s   1AY&SYr   )s   ]  s   7zXZr   r   )rU   
startswith)r   r5   r5   r6   r   Q  s    $z_StreamProxy.getcomptypec             C   s   | j   d S )N)r   r   )r   r5   r5   r6   r   [  s    z_StreamProxy.closeN)rq   rr   rs   r   rZ   r   r   r5   r5   r5   r6   r   D  s   
r   c               @   sf   e Zd ZdddZdd Zdd Zdd	 Zd
d Zdd Ze	j
fddZdddZdd Zdd ZdS )_FileInFileNc             C   s   || _ || _|| _d| _t|dd | _d| _|d kr>d|fg}d| _g | _d}| j}xT|D ]L\}}||kr~| j	d||d f | j	d||| |f ||7 }|| }qZW || jk r| j	d|| jd f d S )Nr   r   FT)
r   offsetr'   positionrl   r   r   	map_indexmapr   )r   r   r   r'   Z	blockinfoZlastposZrealposr5   r5   r6   r   h  s(    

z_FileInFile.__init__c             C   s   d S )Nr5   )r   r5   r5   r6   r     s    z_FileInFile.flushc             C   s   dS )NTr5   )r   r5   r5   r6   readable  s    z_FileInFile.readablec             C   s   dS )NFr5   )r   r5   r5   r6   writable  s    z_FileInFile.writablec             C   s
   | j  S )N)r   seekable)r   r5   r5   r6   r     s    z_FileInFile.seekablec             C   s   | j S )N)r   )r   r5   r5   r6   r     s    z_FileInFile.tellc             C   s   |t jkr tt|d| j| _nj|t jkr\|dk rFt| j| d| _qt| j| | j| _n.|t jkrtt| j| | jd| _ntd| jS )Nr   zInvalid argument)	ioSEEK_SETminmaxr'   r   SEEK_CURSEEK_ENDrG   )r   r   whencer5   r5   r6   r     s    


z_FileInFile.seekc       	      C   s  |d kr| j | j }nt|| j | j }d}x|dkrxZ| j| j \}}}}|| j  krd|k rln nP q:|  jd7  _| jt| jkr:d| _q:W t||| j }|r| j|| j|   | j|}t||krt	d||7 }n|t
| 7 }||8 }|  j|7  _q.W |S )Nr   r   r#   zunexpected end of data)r'   r   r   r   r   r/   r   r   rZ   r   r0   )	r   r'   rU   datastartstopr   r2   rb   r5   r5   r6   rZ     s.    

z_FileInFile.readc             C   s&   |  t|}||d t|< t|S )N)rZ   r/   )r   rb   rU   r5   r5   r6   readinto  s    z_FileInFile.readintoc             C   s
   d| _ d S )NT)r   )r   r5   r5   r6   r     s    z_FileInFile.close)N)N)rq   rr   rs   r   r   r   r   r   r   r   r   r   rZ   r   r   r5   r5   r5   r6   r   b  s   

r   c                   s   e Zd Z fddZ  ZS )ExFileObjectc                s&   t |j|j|j|j}t | d S )N)r   r   offset_datar'   sparsesuperr   )r   tarfiletarinfor   )	__class__r5   r6   r     s    
zExFileObject.__init__)rq   rr   rs   r   __classcell__r5   r5   )r   r6   r     s   r   c               @   s  e Zd ZdZdSddZedd Zejdd Zedd	 Zejd
d	 Zdd Z	dd Z
eedfddZdd Zdd Zdd Zedd Zdd Zedd Zedd Zed d! Zed"d# Zed$d% Zed&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Z d4d5 Z!d6d7 Z"d8d9 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-dNdO Z.dPdQ Z/dRS )Tr   )r   rh   r)   r*   r'   r(   chksumtypelinknamer+   r,   devmajordevminorr   r   pax_headersr   r   _sparse_structs_link_targetr   c             C   sj   || _ d| _d| _d| _d| _d| _d| _t| _d| _	d| _
d| _d| _d| _d| _d| _d | _i | _d S )Ni  r   r   )r   rh   r)   r*   r'   r(   r   REGTYPEr   r   r+   r,   r   r   r   r   r   r   )r   r   r5   r5   r6   r     s"    zTarInfo.__init__c             C   s   | j S )N)r   )r   r5   r5   r6   r%     s    zTarInfo.pathc             C   s
   || _ d S )N)r   )r   r   r5   r5   r6   r%     s    c             C   s   | j S )N)r   )r   r5   r5   r6   r&     s    zTarInfo.linkpathc             C   s
   || _ d S )N)r   )r   r   r5   r5   r6   r&   	  s    c             C   s   d| j j| jt| f S )Nz<%s %r at %#x>)r   rq   r   id)r   r5   r5   r6   __repr__  s    zTarInfo.__repr__c             C   sl   | j | jd@ | j| j| j| j| j| j| j| j	| j
| j| jd}|d tkrh|d dsh|d  d7  < |S )Ni  )r   rh   r)   r*   r'   r(   r   r   r   r+   r,   r   r   r   r   /)r   rh   r)   r*   r'   r(   r   r   r   r+   r,   r   r   DIRTYPEr   )r   infor5   r5   r6   get_info  s     
zTarInfo.get_infosurrogateescapec             C   sT   |   }|tkr| |||S |tkr4| |||S |tkrH| ||S tdd S )Nzinvalid format)r   r   create_ustar_headerr   create_gnu_headerr   create_pax_headerrG   )r   rP   r3   r4   r   r5   r5   r6   tobuf(  s    zTarInfo.tobufc             C   sn   t |d< t|d ||tkr(tdt|d ||tkr^| |d ||\|d< |d< | |t||S )Nmagicr   zlinkname is too longr   prefix)	POSIX_MAGICr/   r.   LENGTH_LINKrG   LENGTH_NAME_posix_split_name_create_headerr   )r   r   r3   r4   r5   r5   r6   r   6  s    zTarInfo.create_ustar_headerc             C   s   t |d< d}t|d ||tkr<|| |d t||7 }t|d ||tkrl|| |d t||7 }|| |t	|| S )Nr   r   r   r   )
	GNU_MAGICr/   r.   r   _create_gnu_long_headerGNUTYPE_LONGLINKr   GNUTYPE_LONGNAMEr   r   )r   r   r3   r4   rU   r5   r5   r6   r   C  s    zTarInfo.create_gnu_headerc       
   	   C   s0  t |d< | j }xddtfddtfddfD ]h\}}}||kr@q,y|| dd	 W n" tk
rv   || ||< w,Y nX t|| |kr,|| ||< q,W xhd
D ]`\}}||krd||< q|| }d|  krd|d  k rn n
t|t	rt
|||< d||< qW |r| |t|}	nd}	|	| |tdd S )Nr   r   r%   r   r&   )r+   r+       )r,   r,   r   rA   rB   ))r)   r?   )r*   r?   )r'      )r(   r   r   r?   r#   r   r   )r   r   copyr   r   r.   UnicodeEncodeErrorr/   
isinstancefloatstr_create_pax_generic_headerXHDTYPEr   r   )
r   r   r3   r   r   Zhnamer2   rO   valrU   r5   r5   r6   r   Q  s4    
*zTarInfo.create_pax_headerc             C   s   |  |tdS )Nzutf-8)r   XGLTYPE)clsr   r5   r5   r6   create_pax_global_header  s    z TarInfo.create_pax_global_headerc             C   s   | d}xltdt|D ]R}d|d | }d||d  }t|||tkrt|||tkrP qW td||fS )Nr   r#   zname is too long)splitrD   r/   r   r.   LENGTH_PREFIXr   rG   )r   r   r3   r4   Z
componentsrJ   r   r5   r5   r6   r     s    
zTarInfo._posix_split_namec             C   sV  t | ddd||t| ddd@ d|t| ddd|t| d	dd|t| d
dd|t| ddd|d| dtt | ddd||| dtt | ddd||t | ddd||t| ddd|t| ddd|t | ddd||g}tdt d|}t	|t d  d }|d d t
d| d |dd   }|S )Nr   r   r   rh   r   i  r?   r)   r*   r'   r   r(   s           r   r   r   r+   r   r,   r   r   r   r   z%dsr   iz%06o rA   i)r7   getrQ   r   r   rS   r   r   r   rV   rL   )r   rP   r3   r4   partsrU   r   r5   r5   r6   r     s&    

&zTarInfo._create_headerc             C   s.   t t| t\}}|dkr*| t| t 7 } | S )Nr   )rY   r/   r   r0   )Zpayloadr`   ra   r5   r5   r6   _create_payload  s    zTarInfo._create_payloadc             C   sR   | ||t }i }d|d< ||d< t||d< t|d< | |t||| | S )Nz././@LongLinkr   r   r'   r   )r.   r0   r/   r   r   r   r
  )r  r   r   r3   r4   r   r5   r5   r6   r     s    zTarInfo._create_gnu_long_headerc          	   C   s:  d}x@|  D ]4\}}y|dd W q tk
r@   d}P Y qX qW d}|rV|d7 }x|  D ]\}}|d}|r||d}n
|d}t|t| d }d	 }	}
x"|tt|
 }	|	|
krP |	}
qW |tt|
d
d | d | d 7 }q`W i }d|d< ||d< t||d< t|d< | |td
d| 	| S )NFzutf-8rB   Tr   s   21 hdrcharset=BINARY
r   r   r   rA          =   
z././@PaxHeaderr   r   r'   r   r   )
itemsr.   r   r/   r   rL   r   r   r   r
  )r  r   r   r3   ZbinarykeywordvalueZrecordslrI   r;   r   r5   r5   r6   r     s<    

*z"TarInfo._create_pax_generic_headerc          	   C   st  t |dkrtdt |tkr(td|ttkr>tdt|dd }|t|krbt	d|  }t
|dd |||_t|dd	 |_t|d	d
 |_t|d
d |_t|dd |_t|dd |_||_|dd |_t
|dd |||_t
|dd |||_t
|dd |||_t|dd |_t|dd |_t
|dd ||}|jtkr|jdrt|_|jtkr6d}g }xrtdD ]f}	y0t|||d  }
t||d |d  }W n tk
r   P Y nX ||
|f |d7 }qW t|d }t|dd }|||f|_ |! rN|j"d|_|rp|jt#krp|d |j |_|S )Nr   zempty headerztruncated headerzend of file header      zbad checksumr   l   t   |         i  i	  i)  iI  iQ  iY  i  r   i  r   r      i  i  i  )$r/   rt   r   ru   countr0   rv   rK   rV   rH   r<   r   rh   r)   r*   r'   r(   r   r   r   r+   r,   r   r   AREGTYPEr   r   GNUTYPE_SPARSErD   rG   r   boolr   isdirrstrip	GNU_TYPES)r  rU   r3   r4   r   objr   r   structsrJ   r   numbytes
isextendedorigsizer5   r5   r6   frombuf  sZ    
zTarInfo.frombufc             C   s8   |j t}| ||j|j}|j  t |_||S )N)	r   rZ   r   r&  r3   r4   r   r   _proc_member)r  r   rU   r!  r5   r5   r6   fromtarfileA  s    zTarInfo.fromtarfilec             C   sT   | j ttfkr| |S | j tkr,| |S | j tttfkrF| 	|S | 
|S d S )N)r   r   r   _proc_gnulongr  _proc_sparser  r  SOLARIS_XHDTYPE	_proc_pax_proc_builtin)r   r   r5   r5   r6   r'  V  s    



zTarInfo._proc_memberc             C   sR   |j  | _| j}|  s$| jtkr4|| | j7 }||_| 	|j
|j|j | S )N)r   r   r   isregr   SUPPORTED_TYPES_blockr'   r   _apply_pax_infor   r3   r4   )r   r   r   r5   r5   r6   r-  c  s    zTarInfo._proc_builtinc             C   s   |j | | j}y| |}W n tk
r>   tdY nX | j|_| jt	krft
||j|j|_n| jtkrt
||j|j|_|S )Nz missing or bad subsequent header)r   rZ   r0  r'   r(  r   rw   r   r   r   r<   r3   r4   r   r   r   )r   r   rU   nextr5   r5   r6   r)  t  s    

zTarInfo._proc_gnulongc       
   	   C   s   | j \}}}| ` x|r|jt}d}xvtdD ]j}y0t|||d  }t||d |d  }	W n tk
rz   P Y nX |r|	r|||	f |d7 }q0W t|d }qW || _	|j
 | _| j| | j |_|| _| S )Nr      r   r  i  )r   r   rZ   r   rD   rK   rG   r   r  r   r   r   r0  r'   r   )
r   r   r"  r$  r%  rU   r   rJ   r   r#  r5   r5   r6   r*    s(    zTarInfo._proc_sparsec             C   s   |j | | j}| jtkr&|j}n
|j }t	d|}|d k	rX|
dd|d< |d}|dkrr|j}nd}td}d}x|||}|sP | \}	}
t|	}	||dd |d|	 d  }| |
dd|j}
|
tkr| |||j|j}n| |dd|j}|||
< ||	7 }qW y| |}W n tk
rT   td	Y nX d
|krn| || nHd|kr| ||| n.|ddkr|ddkr| ||| | jttfkr|||j|j | j |_ d|kr|j!}|" s|jt#kr|||j7 }||_ |S )Ns   \d+ hdrcharset=([^\n]+)\nr#   zutf-8
hdrcharsetZBINARYs   (\d+) ([^=]+)=r   r$   z missing or bad subsequent headerzGNU.sparse.mapzGNU.sparse.sizezGNU.sparse.major1zGNU.sparse.minorrC   r'   )$r   rZ   r0  r'   r   r  r   r   researchgroupr:   r  r3   compilematchgroupsrE   rk   r   _decode_pax_fieldr4   PAX_NAME_FIELDSr(  r   rw   _proc_gnusparse_01_proc_gnusparse_00_proc_gnusparse_10r  r+  r1  r   r   r.  r/  )r   r   rU   r   r:  r4  r3   Zregexr   r2   r  r  r2  r   r5   r5   r6   r,    s`    



$	





 
zTarInfo._proc_paxc             C   sp   g }x(t d|D ]}|t|d qW g }x(t d|D ]}|t|d q@W tt|||_d S )Ns   \d+ GNU.sparse.offset=(\d+)\nr#   s   \d+ GNU.sparse.numbytes=(\d+)\n)r6  finditerr   rE   r8  listzipr   )r   r2  r   rU   Zoffsetsr:  r#  r5   r5   r6   r?    s    zTarInfo._proc_gnusparse_00c             C   s@   dd |d  dD }tt|d d d |dd d |_d S )Nc             S   s   g | ]}t |qS r5   )rE   ).0xr5   r5   r6   
<listcomp>  s    z.TarInfo._proc_gnusparse_01.<locals>.<listcomp>zGNU.sparse.map,r$   r#   )r  rB  rC  r   )r   r2  r   r   r5   r5   r6   r>    s    zTarInfo._proc_gnusparse_01c             C   s   d }g }|j t}|dd\}}t|}xJt||d k rvd|krV||j t7 }|dd\}}|t| q.W |j  |_t	t
|d d d |dd d |_d S )Nr  r#   r$   )r   rZ   r   r  rE   r/   r   r   r   rB  rC  r   )r   r2  r   r   Zfieldsr   rU   Znumberr5   r5   r6   r@    s    zTarInfo._proc_gnusparse_10c          	   C   s   x|  D ]\}}|dkr(t| d| q
|dkrBt| dt| q
|dkr\t| dt| q
|tkr
|tkryt| |}W n tk
r   d}Y nX |dkr|d}t| || q
W | | _d S )NzGNU.sparse.namer%   zGNU.sparse.sizer'   zGNU.sparse.realsizer   r   )	r  setattrrE   
PAX_FIELDSPAX_NUMBER_FIELDSrG   r  r   r   )r   r   r3   r4   r  r  r5   r5   r6   r1  -  s"    

zTarInfo._apply_pax_infoc             C   s.   y| |dS  tk
r(   | ||S X d S )NrB   )r:   UnicodeDecodeError)r   r  r3   Zfallback_encodingZfallback_errorsr5   r5   r6   r<  D  s    zTarInfo._decode_pax_fieldc             C   s"   t |t\}}|r|d7 }|t S )Nr#   )rY   r   )r   r  r`   ra   r5   r5   r6   r0  L  s    zTarInfo._blockc             C   s
   | j tkS )N)r   REGULAR_TYPES)r   r5   r5   r6   r.  U  s    zTarInfo.isregc             C   s   |   S )N)r.  )r   r5   r5   r6   isfileW  s    zTarInfo.isfilec             C   s
   | j tkS )N)r   r   )r   r5   r5   r6   r  Y  s    zTarInfo.isdirc             C   s
   | j tkS )N)r   SYMTYPE)r   r5   r5   r6   issym[  s    zTarInfo.issymc             C   s
   | j tkS )N)r   LNKTYPE)r   r5   r5   r6   islnk]  s    zTarInfo.islnkc             C   s
   | j tkS )N)r   CHRTYPE)r   r5   r5   r6   ischr_  s    zTarInfo.ischrc             C   s
   | j tkS )N)r   BLKTYPE)r   r5   r5   r6   isblka  s    zTarInfo.isblkc             C   s
   | j tkS )N)r   FIFOTYPE)r   r5   r5   r6   isfifoc  s    zTarInfo.isfifoc             C   s
   | j d k	S )N)r   )r   r5   r5   r6   issparsee  s    zTarInfo.issparsec             C   s   | j tttfkS )N)r   rR  rT  rV  )r   r5   r5   r6   isdevg  s    zTarInfo.isdevN)r   )0rq   rr   rs   	__slots__r   propertyr%   setterr&   r   r   r   r   r   r   r   r   classmethodr  r   staticmethodr   r
  r   r   r&  r(  r'  r-  r)  r*  r,  r?  r>  r@  r1  r<  r0  r.  rM  r  rO  rQ  rS  rU  rW  rX  rY  r5   r5   r5   r6   r     sR   
1
3?f	c               @   s  e Zd ZdZdZdZdZeZe	Z
dZeZeZd[ddZedddefd	d
Zed\ddZed]ddZed^ddZed_ddZdddddZdd Zdd Zdd Zdd  Zd`d!d"Zdadd$d%d&Zdbdd'd(d)Zdcd*d+Z dddd-d.d/Z!dedd-d1d2Z"d3d4 Z#dfd5d6Z$d7d8 Z%d9d: Z&d;d< Z'd=d> Z(d?d@ Z)dAdB Z*dCdD Z+dEdF Z,dGdH Z-dIdJ Z.dgdKdLZ/dMdN Z0dhdOdPZ1dQdR Z2dSdT Z3dUdV Z4dWdX Z5dYdZ Z6dS )ir   r   Fr#   Nry   r   c          
   C   s  ddddd}||krt d|| _|| | _|sh| jdkrTtj|sTd| _d| _t|| j}d	| _n@|d krt|d
rt	|j
ttfr|j
}t|dr|j| _d| _|rtj|nd | _
|| _|d k	r|| _|d k	r|| _|d k	r|| _|d k	r|| _|d k	r|| _|	| _|
d k	r0| jtkr0|
| _ni | _|d k	rF|| _|d k	rV|| _|| _d	| _g | _d	| _| j | _i | _y| jdkrd | _ | ! | _ | jdkr2x| j"| j y| j#| }| j$| W nT t%k
r   | j"| j P Y n0 t&k
r* } zt't|W d d }~X Y nX qW | jdkr|d| _| jr|| j(| j) }| j*| |  jt+|7  _W n&   | js| j,  d| _ Y nX d S )Nrbzr+bwbZxb)ry   arz   rE  z!mode must be 'r', 'a', 'w' or 'x'ra  rz   Fr   rh   Try   )ra  rz   rE  )-rG   rh   _moder|   r%   exists	bltn_openr   r   r   r   r   rL   abspathr   rP   r   dereferenceignore_zerosr3   r4   r   r   debug
errorlevelcopybufsizer   members_loadedr   r   inodesfirstmemberr2  r   r(  r   rv   r   r   r  r   r[   r/   r   )r   r   rh   r   rP   r   rf  rg  r3   r4   r   rh  ri  rj  ZmodeserU   r5   r5   r6   r     s    





$
zTarFile.__init__c          
      s  |s|st d|dkr fdd}xtt j|dD ]b}t  j| }|d k	rX| }	y||d|f|S  ttfk
r   |d k	r||	 w4Y q4X q4W tdnd|kr|dd	\}
}|
pd}
|pd
}| jkrt  j| }ntd| |||
|f|S d|kr|dd	\}
}|
p*d}
|p4d
}|
dkrHt dt	||
|||}y ||
|f|}W n   |
   Y nX d|_|S |dkr j|||f|S t dd S )Nznothing to open)ry   zr:*c                s    j |  dkS )Ntaropen)	OPEN_METH)r   )r  r5   r6   not_compressed  s    z$TarFile.open.<locals>.not_compressed)keyry   z%file could not be opened successfully:r#   r   zunknown compression type %r|)ry   rz   zmode must be 'r' or 'w'F)ra  rz   rE  zundiscernible mode)rG   sortedrq  rl   r   r   r   r   r  r   r   r   rp  )r  r   rh   r   r_   kwargsrr  r   funcZ	saved_posrg   streamr   r5   )r  r6   r     sP    %







zTarFile.openc             K   s    |dkrt d| |||f|S )N)ry   ra  rz   rE  z!mode must be 'r', 'a', 'w' or 'x')rG   )r  r   rh   r   rw  r5   r5   r6   rp  O  s    zTarFile.taropenr   c          	   K   s   |dkrt dydd l}|j W n  ttfk
rB   tdY nX y|||d ||}W n. tk
r   |d k	r|dkrtd Y nX y| j|||f|}W nB tk
r   |	  |dkrtd Y n   |	   Y nX d|_
|S )	N)ry   rz   rE  zmode must be 'r', 'w' or 'x'r   zgzip module is not availablerb   ry   znot a gzip fileF)rG   gzipZGzipFiler   AttributeErrorr   r   r   rp  r   r   )r  r   rh   r   compresslevelrw  rz  r   r5   r5   r6   gzopenW  s2    
zTarFile.gzopenc          	   K   s   |dkrt dydd l}W n tk
r8   tdY nX |j|pD|||d}y| j|||f|}W nF ttfk
r   |  |dkrt	d Y n   |   Y nX d|_
|S )	N)ry   rz   rE  zmode must be 'r', 'w' or 'x'r   zbz2 module is not available)r|  ry   znot a bzip2 fileF)rG   r   r   r   ZBZ2Filerp  r   EOFErrorr   r   r   )r  r   rh   r   r|  rw  r   r   r5   r5   r6   bz2openy  s(    zTarFile.bz2openc          	   K   s   |dkrt dydd l}W n tk
r8   tdY nX |j|pD|||d}y| j|||f|}W nH |jtfk
r   |  |dkrt	d Y n   |   Y nX d|_
|S )	N)ry   rz   rE  zmode must be 'r', 'w' or 'x'r   zlzma module is not available)presetry   znot an lzma fileF)rG   r   r   r   ZLZMAFilerp  r   r~  r   r   r   )r  r   rh   r   r  rw  r   r   r5   r5   r6   xzopen  s&    zTarFile.xzopenrp  r}  r  r  )r   r   r   r   c             C   s   | j r
d S d| _ z`| jdkrn| jttd   |  jtd 7  _t| jt\}}|dkrn| jtt|   W d | j	s| j
  X d S )NT)ra  rz   rE  r$   r   )r   rh   r   r[   r0   r   r   rY   
RECORDSIZEr   r   )r   r`   ra   r5   r5   r6   r     s    
zTarFile.closec             C   s"   |  |}|d krtd| |S )Nzfilename %r not found)
_getmemberKeyError)r   r   r   r5   r5   r6   	getmember  s    
zTarFile.getmemberc             C   s   |    | js|   | jS )N)_checkrl  _loadrk  )r   r5   r5   r6   
getmembers  s    zTarFile.getmembersc             C   s   dd |   D S )Nc             S   s   g | ]
}|j qS r5   )r   )rD  r   r5   r5   r6   rF    s    z$TarFile.getnames.<locals>.<listcomp>)r  )r   r5   r5   r6   getnames  s    zTarFile.getnamesc             C   sl  |  d |d k	r|j}|d kr$|}tj|\}}|tjd}|d}|  }| |_	|d krt
tdr~| js~t|}qt|}nt| }d}|j}t|r|j|jf}	| js|jdkr|	| jkr|| j|	 krt}
| j|	 }nt}
|	d rt|| j|	< nht|rt}
nVt|r0t}
nDt|rLt}
t|}n(t|r^t }
nt!|rpt"}
nd S ||_||_#|j$|_%|j&|_'|
tkr|j(|_)nd|_)|j*|_+|
|_,||_-t.ryt./|j%d |_0W n t1k
r   Y nX t2r&yt23|j'd |_4W n t1k
r$   Y nX |
t t"fkrht
tdrht
tdrht5|j6|_7t8|j6|_9|S )	Nawxr   lstatr   r#   r   majorminor):r  r   r|   r%   
splitdriver   seplstripr   r   r   rf  r  rf   fstatfilenost_modeS_ISREGst_inost_devst_nlinkrm  rP  r   S_ISDIRr   S_ISFIFOrV  S_ISLNKrN  readlinkS_ISCHRrR  S_ISBLKrT  rh   st_uidr)   st_gidr*   st_sizer'   st_mtimer(   r   r   pwdgetpwuidr+   r  grpZgetgrgidr,   r  st_rdevr   r  r   )r   r   arcnamer   Zdrvr   Zstatresr   Zstmdinoder   r5   r5   r6   
gettarinfo  s~    	




zTarFile.gettarinfoT)rk  c            C   s   |    |d kr| }x|D ]}|rtt|j td|jp@|j|jpJ|jf  |	 sb|
 r|tdd|j|jf   ntd|j  tdt|jd d   t|j| rdnd  |r| rtd	|j  | rtd
|j  t  qW d S )Nz%s/%sz%10sz%d,%dz%10dz%d-%02d-%02d %02d:%02d:%02dr   r   r   z-> zlink to )r  rp   rf   rg   rh   r+   r)   r,   r*   rS  rU  r   r   r'   r   Z	localtimer(   r   r  rO  r   rQ  ro   )r   verboserk  r   r5   r5   r6   rB  Q  s*    
zTarFile.list)filterc         	   C   s:  |  d |d kr|}| jd k	rFtj|| jkrF| dd|  d S | d| | ||}|d krz| dd|  d S |d k	r||}|d kr| dd|  d S | rt|d}| 	|| W d Q R X nd|
 r,| 	| |r6xHtt|D ]*}| jtj||tj||||d qW n
| 	| d S )	Nr  r$   ztarfile: Skipped %rr#   ztarfile: Unsupported type %rztarfile: Excluded %rr_  )r  )r  r   r|   r%   re  _dbgr  r.  rd  addfiler  rv  listdiraddr   )r   r   r  	recursiver  r   fr5   r5   r6   r  q  s4    



zTarFile.addc             C   s   |  d t|}|| j| j| j}| j| |  jt	|7  _| j
}|d k	rt|| j|j|d t|jt\}}|dkr| jtt|   |d7 }|  j|t 7  _| j| d S )Nr  )r_   r   r#   )r  r   r   rP   r3   r4   r   r[   r   r/   rj  rX   r'   rY   r   r0   rk  r   )r   r   r   rU   r_   r`   ra   r5   r5   r6   r    s    

zTarFile.addfile.)numeric_ownerc            C   s   g }|d kr| }xF|D ]>}|  r<|| t|}d|_| j|||   |d qW |jdd d |  x|D ]}tj	||j
}y,| j|||d | || | || W qv tk
r } z"| jdkrւ n| dd|  W d d }~X Y qvX qvW d S )	Ni  )	set_attrsr  c             S   s   | j S )N)r   )ra  r5   r5   r6   <lambda>  r   z$TarFile.extractall.<locals>.<lambda>)rs  )r  r#   ztarfile: %s)r  r   r   rh   extractsortreverser|   r%   r   r   chownutimechmodr
   ri  r  )r   r%   rk  r  Zdirectoriesr   dirpathro  r5   r5   r6   
extractall  s,    




zTarFile.extractallr   c         
   C   s  |  d t|tr | |}n|}| r>tj||j|_	y"| j
|tj||j||d W n tk
r } zH| jdkr n6|jd kr| dd|j  n| dd|j|jf  W d d }~X Y nB tk
r } z"| jdkr n| dd|  W d d }~X Y nX d S )Nry   )r  r  r   r#   ztarfile: %sztarfile: %s %r)r  r   r   r  rQ  r|   r%   r   r   r   _extract_memberr   r   ri  filenamer  strerrorr
   )r   memberr%   r  r  r   ro  r5   r5   r6   r    s(    	



(
zTarFile.extractc             C   s   |  d t|tr | |}n|}| s6|jtkrB| | |S | sR|	 rzt| j
trhtdq~| | |S nd S d S )Nry   z'cannot extract (sym)link as file object)r  r   r   r  r.  r   r/  
fileobjectrQ  rO  r   r   r	   extractfile_find_link_target)r   r  r   r5   r5   r6   r    s    


zTarFile.extractfilec             C   sT  | d}|dtj}tj|}|r>tj|s>t| | sN|	 rh| 
dd|j|jf  n| 
d|j | r| || n| r| || nx| r| || nb| s| r| || nD| s|	 r| || n&|jtkr| || n| || |rP| ||| |	 sP| || | || d S )Nr   r#   z%s -> %s)r  r   r|   r  r%   dirnamerc  makedirsrQ  rO  r  r   r   r.  makefiler  makedirrW  makefiforS  rU  makedevmakelinkr   r/  makeunknownr  r  r  )r   r   
targetpathr  r  Z	upperdirsr5   r5   r6   r  *  s4    


zTarFile._extract_memberc             C   s*   yt |d W n tk
r$   Y nX d S )Ni  )r|   mkdirFileExistsError)r   r   r  r5   r5   r6   r  [  s    zTarFile.makedirc          	   C   s   | j }||j | j}t|df}|jd k	rrx,|jD ]"\}}|| t|||t| q6W ||j |	  nt|||jt| W d Q R X d S )Nr`  )
r   r   r   rj  rd  r   rX   r   r'   truncate)r   r   r  sourcer_   targetr   r'   r5   r5   r6   r  e  s    


zTarFile.makefilec             C   s"   |  || | dd|j  d S )Nr#   z9tarfile: Unknown file type %r, extracted as regular file.)r  r  r   )r   r   r  r5   r5   r6   r  u  s    zTarFile.makeunknownc             C   s"   t tdrt| ntdd S )Nmkfifozfifo not supported by system)r   r|   r  r
   )r   r   r  r5   r5   r6   r  }  s    
zTarFile.makefifoc             C   s^   t tdrt tdstd|j}| r6|tjO }n
|tjO }t||t	|j
|j d S )Nmknodr  z'special devices not supported by system)r   r|   r
   rh   rU  rf   S_IFBLKS_IFCHRr  r  r   r   )r   r   r  rh   r5   r5   r6   r    s    
zTarFile.makedevc             C   s   yL|  rt|j| n0tj|jr8t|j| n| | 	|| W nH t
k
r   y| | 	|| W n tk
r   tdY nX Y nX d S )Nz%unable to resolve link inside archive)rO  r|   symlinkr   r%   rc  r   linkr  r  symlink_exceptionr  r
   )r   r   r  r5   r5   r6   r    s    

zTarFile.makelinkc             C   s   t tdrt dkr|j}|j}|sytr<t|jd }W n tk
rR   Y nX yt	rjt	
|jd }W n tk
r   Y nX y4| rt tdrt||| nt||| W n tk
r   tdY nX d S )Ngeteuidr   r$   lchownzcould not change owner)r   r|   r  r*   r)   r  Zgetgrnamr,   r  r  getpwnamr+   rO  r  r  r   r
   )r   r   r  r  gur5   r5   r6   r    s(    zTarFile.chownc             C   s>   t tdr:yt||j W n tk
r8   tdY nX d S )Nr  zcould not change mode)r   r|   r  rh   r   r
   )r   r   r  r5   r5   r6   r    s
    
zTarFile.chmodc             C   sH   t tdsd S yt||j|jf W n tk
rB   tdY nX d S )Nr  z"could not change modification time)r   r|   r  r(   r   r
   )r   r   r  r5   r5   r6   r    s    
zTarFile.utimec          
   C   s  |  d | jd k	r$| j}d | _|S | j| j krZ| j| jd  | jdsZtdd }xby| j	| }W nH t
k
r } z0| jr| dd| j|f  |  jt7  _wbW d d }~X Y n tk
r, } zL| jr| dd| j|f  |  jt7  _wbn| jdkrtt|W d d }~X Y n tk
rT   | jdkrPtdY nj tk
r } z| jdkr~tt|W d d }~X Y n0 tk
r } ztt|W d d }~X Y nX P qbW |d k	r| j| nd| _|S )	NZrar#   zunexpected end of datar$   z0x%X: %sr   z
empty fileT)r  rn  r   r   r   r   rZ   r   r   r(  rv   rg  r  r   rH   r   rt   ru   rw   rk  r   rl  )r   mr   ro  r5   r5   r6   r2    sL    


zTarFile.nextc             C   sn   |   }|d k	r"|d || }|r2tj|}x6t|D ]*}|rTtj|j}n|j}||kr<|S q<W d S )N)r  indexr|   r%   normpathreversedr   )r   r   r   	normalizerk  r  member_namer5   r5   r6   r  	  s    zTarFile._getmemberc             C   s"   x|   }|d krP qW d| _d S )NT)r2  rl  )r   r   r5   r5   r6   r  )	  s
    zTarFile._loadc             C   s:   | j rtd| jj |d k	r6| j|kr6td| j d S )Nz%s is closedzbad operation for mode %r)r   r   r   rq   rh   )r   rh   r5   r5   r6   r  3	  s    zTarFile._checkc             C   s`   |  r.dtd tj|j|jf}d }n
|j}|}| j||dd}|d kr\t	d| |S )Nr   T)r   r  zlinkname %r not found)
rO  r   r  r|   r%   r  r   r   r  r  )r   r   r   limitr  r5   r5   r6   r  <	  s     zTarFile._find_link_targetc             c   s   | j r| jE d H  d S d}| jd k	r:|  }|d7 }|V  xN|t| jk rV| j| }n"| j st|  }|sxd| _ d S nd S |d7 }|V  q<W d S )Nr   r#   T)rl  rk  rn  r2  r/   )r   r  r   r5   r5   r6   __iter__O	  s&    
zTarFile.__iter__c             C   s   || j krt|tjd d S )N)file)rh  ro   rm   stderr)r   levelmsgr5   r5   r6   r  n	  s    
zTarFile._dbgc             C   s   |    | S )N)r  )r   r5   r5   r6   	__enter__t	  s    zTarFile.__enter__c             C   s,   |d kr|    n| js"| j   d| _d S )NT)r   r   r   r   )r   r   r  	tracebackr5   r5   r6   __exit__x	  s
    

zTarFile.__exit__)Nry   NNNNNNr   NNNN)ry   N)ry   Nr   )ry   Nr   )ry   NN)NNN)T)NT)N)r  N)r   T)TF)NF)N)7rq   rr   rs   rh  rf  rg  ri  r   rP   r   r3   r4   r   r   r   r  r   r]  r  r   rp  r}  r  r  rq  r   r  r  r  r  rB  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r2  r  r  r  r  r  r  r  r  r5   r5   r5   r6   r   k  st      
lZ!

d 3
(& 
0
	6


	c             C   s.   yt | }|  dS  tk
r(   dS X d S )NTF)r   r   r   )r   r   r5   r5   r6   r   	  s    c           	   C   s  dd l } d}| j|d}|jdddddd	 |jd
d}|jddddd |jdddddd |jdddddd |jddddd | }|jd k	r|j}t|rt|d }|  t	| t
jd W d Q R X |jrt	d | n|d!d"| n|jd k	r\|j}t|rFt|d#}|j|jd$ W d Q R X n|d!d"| nv|jd k	r,t|jd!kr|jd }tj}n,t|jd%kr|j\}}n|d!|  t|rt|d#}|j|d& W d Q R X |jr*|d'krd(|}	nd)||}	t	|	 n|d!d"| n|jd k	r|jd}
tj|
\}}d*d*d+d+d,d,d,d,d-}||krd.||  nd/}|j}t|
| }x|D ]}|| qW W d Q R X |jrt	d0|
 d S )1Nr   z3A simple command-line interface for tarfile module.)descriptionz-vz	--verbose
store_trueFzVerbose output)actiondefaulthelpT)requiredz-lz--listz	<tarfile>zShow listing of a tarfile)metavarr  z-ez	--extract+)z	<tarfile>z<output_dir>zExtract tarfile into target dir)nargsr  r  z-cz--create)z<name>z<file>zCreate tarfile from sourcesz-tz--testzTest if a tarfile is validry   )r  z{!r} is a tar archive.r#   z{!r} is not a tar archive.
zr:*)r  r$   )r%   r  z{!r} file is extracted.z+{!r} file is extracted into {!r} directory.r   r   r   )z.gzz.tgzz.xzz.txzz.bz2z.tbzz.tbz2z.tb2zw:rz   z{!r} file created.)argparseArgumentParseradd_argumentadd_mutually_exclusive_group
parse_argsZtestr   r   r  ro   rm   r  r  rP   exitrB  r   r  r/   r|   curdirformat_helpr  Zcreatepopr%   splitextr  )r  r  parserr8  argsr\   r   Ztfr  r  Ztar_name_ZextZcompressionsZtar_modeZ	tar_files	file_namer5   r5   r6   main	  s    









r  __main__)^version
__author____credits__builtinsr   rd  rm   r|   r   rW   rf   r   rS   r   r6  r  r   r  r{  NotImplementedErrorr  r   	NameError__all__r0   r   r  r   r   r   r   r  r   r  rP  rN  rR  rT  r   rV  ZCONTTYPEr   r   r  r  r  r+  r   r   r   r   r/  rL  r   rI  r=  r   rE   rJ  r   r   getfilesystemencodingr7   r<   rK   rQ   rV   rX   rg   rp   	Exceptionr   r
   r   r   r	   r   rt   ru   rv   rH   rw   rx   r   objectr   r   BufferedReaderr   r   r   r   r  rq   r5   r5   r5   r6   <module>    s   


 wh             "W
