a
    3j6r                    @   sB  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zddlZW n ey   dZY n0 zddlZW n ey   dZY n0 eefZzeef7 ZW n ey   Y n0 g d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Z1e1Z2e e!e"e#e&e'e(e$e%e)e*e+fZ3e e!e(e+fZ4e)e*e+fZ5dZ6h dZ7e8e8e8e9e9e9d Z:ej;d!krd"Z<ne= Z<d#d$ Z>d%d& Z?d'd( Z@d)e2fd*d+ZAd,d- ZBdedfd.d/ZCd0d1 ZDG d2d3 d3eEZFG d4d5 d5eFZGG d6d7 d7eFZHG d8d9 d9eFZIG d:d; d;eFZJG d<d= d=eFZKG d>d? d?eKZLG d@dA dAeKZMG dBdC dCeKZNG dDdE dEeKZOG dFdG dGeKZPG dHdI dIZQG dJdK dKZRG dLdM dMeSZTG dNdO dOeSZUG dPdQ dQejVZWG dRdS dSeSZXG dTdU dUeSZYdVdW ZZeYjZdXdY Z[e\dZkr>e[  dS )[z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gname>   r,   r+   r%   r&   )Zatimectimer(   r)   r*   r'   ntutf-8c                 C   s(   |  ||} | d | |t|  t  S N)encodelenNUL)slengthencodingerrors r8   C/www/server/python_manager/versions/3.9.10/lib/python3.9/tarfile.pystn   s    r:   c                 C   s*   |  d}|dkr| d | } | ||S )Nr   )finddecode)r4   r6   r7   pr8   r8   r9   nts   s    
r?   c                 C   s   | d dv rbd}t t| d D ]}|dK }|| |d  7 }q | d dkrdt| d  |  }n>z"t| dd} t|  p|d	d}W n ty   td
Y n0 |S )Nr   )      r#      rA      asciistrict0invalid header)ranger2   r?   intstrip
ValueErrorInvalidHeaderError)r4   nir8   r8   r9   nti   s    rO   rB   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 nV| dkrtdg}ntdg}d| |  } t|d D ]}|d| d@  | dL } qntd	|S )
Nr   rB   r#   z%0*orD   rC   r@   rA   zoverflow in number field)rI   bytesr3   r   	bytearrayrH   insertrK   )rM   digitsformatr4   rN   r8   r8   r9   itn   s     2
rU   c                 C   s0   dt td|  }dt td|  }||fS )NrC   Z
148B8x356BZ
148b8x356b)sumstructunpack_from)bufZunsigned_chksumZsigned_chksumr8   r8   r9   calc_chksums   s    	rZ   c           	      C   s   |pd}|dkrd S |d u r.t | || d S t||\}}t|D ],}| |}t||k rf|d|| qD|dkr| |}t||k r|d|| d S )Ni @  r   unexpected end of data)shutilcopyfileobjdivmodrH   readr2   write)	srcdstr5   	exceptionbufsizeblocks	remainderbrY   r8   r8   r9   r]      s$    


r]   c                 C   s8   t tjdd }|d ur(| |d|} t| dd d S )Nr6   backslashreplace )end)getattrsysstdoutr1   r=   print)r4   r6   r8   r8   r9   _safe_print  s    ro   c                   @   s   e Zd ZdS )r   N__name__
__module____qualname__r8   r8   r8   r9   r   
  s   r   c                   @   s   e Zd ZdS )r
   Nrp   r8   r8   r8   r9   r
     s   r
   c                   @   s   e Zd ZdS )r   Nrp   r8   r8   r8   r9   r     s   r   c                   @   s   e Zd ZdS )r   Nrp   r8   r8   r8   r9   r     s   r   c                   @   s   e Zd ZdS )r	   Nrp   r8   r8   r8   r9   r	     s   r	   c                   @   s   e Zd ZdS )r   Nrp   r8   r8   r8   r9   r     s   r   c                   @   s   e Zd ZdS )EmptyHeaderErrorNrp   r8   r8   r8   r9   rt     s   rt   c                   @   s   e Zd ZdS )TruncatedHeaderErrorNrp   r8   r8   r8   r9   ru     s   ru   c                   @   s   e Zd ZdS )EOFHeaderErrorNrp   r8   r8   r8   r9   rv   "  s   rv   c                   @   s   e Zd ZdS )rL   Nrp   r8   r8   r8   r9   rL   %  s   rL   c                   @   s   e Zd ZdS )SubsequentHeaderErrorNrp   r8   r8   r8   r9   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namemoder8   r8   r9   __init__5  s    

z_LowLevelFile.__init__c                 C   s   t | j d S r0   )r}   closer   r   r8   r8   r9   r   >  s    z_LowLevelFile.closec                 C   s   t | j|S r0   )r}   r_   r   r   r'   r8   r8   r9   r_   A  s    z_LowLevelFile.readc                 C   s   t | j| d S r0   )r}   r`   r   r   r4   r8   r8   r9   r`   D  s    z_LowLevelFile.writeN)rq   rr   rs   r   r   r_   r`   r8   r8   r8   r9   rx   /  s   	rx   c                   @   sn   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 Zdd Zdd ZdS )_Streamc           	      C   s  d| _ |d u rt||}d| _ |dkr6t|}| }|p<d| _|| _|| _|| _|| _d| _	d| _
d| _zF|dkrzdd l}W n ty   tdY n0 || _|d| _|d	kr|   |j| _n|   n|d
kr6zdd l}W n ty   tdY n0 |d	kr*d| _| | _t| _n
| | _nz|dkrzdd l}W n tyh   tdY n0 |d	krd| _| | _|j| _n
| | _n|dkrtd| W n&   | j s| j  d| _ Y n0 d S )NTF*     r   gzzzlib module is not availablerz   bz2bz2 module is not availablexzlzma module is not availabletarunknown compression type %r) _extfileobjrx   _StreamProxygetcomptyper   r   comptypefileobjrd   rY   posclosedzlibImportErrorr   crc32crc_init_read_gzerrorrc   _init_write_gzr   dbufBZ2DecompressorcmpOSErrorBZ2CompressorlzmaLZMADecompressor	LZMAErrorLZMACompressorr   )	r   r   r   r   r   rd   r   r   r   r8   r8   r9   r   R  sl    












z_Stream.__init__c                 C   s   t | dr| js|   d S )Nr   )r   r   r   r   r8   r8   r9   __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 | _tj| j| _| 
| jdd	t  d S )
N	   r   <Ls   s   .gzz
iso-8859-1replace)r   compressobjDEFLATED	MAX_WBITSDEF_MEM_LEVELr   rW   packrI   time_Stream__writer   endswithr}   r%   basenamer1   r3   )r   Z	timestampr8   r8   r9   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   r2   r   compressr   r   r8   r8   r9   r`     s    

z_Stream.writec                 C   sN   |  j |7  _ t| j | jkrJ| j| j d | j  | j | jd  | _ qd S r0   )rY   r2   rd   r   r`   r   r8   r8   r9   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 | js| j  n| js| j  0 d S )NTr{   r   r   r   r   l    )r   r   r   rY   r   flushr   r`   rW   r   r   r   r   r   r   r8   r8   r9   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@ r| d}|r|t
krqq|d@ r| d}|r|t
krqq|d@ r| d d S )Nr   r$   s   not a gzip filer#      zunsupported compression method      rC   rB      )r   decompressobjr   r   r   _Stream__readr   r   ordr_   r3   )r   flagZxlenr4   r8   r8   r9   r     s*    
 


z_Stream._init_read_gzc                 C   s   | j S r0   )r   r   r8   r8   r9   tell  s    z_Stream.tellr   c                 C   sX   || j  dkrJt|| j  | j\}}t|D ]}| | j q,| | ntd| j S )Nr   z seeking backwards is not allowed)r   r^   rd   rH   r_   r	   )r   r   re   rf   rN   r8   r8   r9   seek  s    z_Stream.seekc                 C   s    |  |}|  jt|7  _|S r0   )_readr   r2   )r   r'   rY   r8   r8   r9   r_     s    
z_Stream.readc                 C   s   | j dkr| |S t| j}| jg}||k r| jrB| j}d| _n| j| j}|sVqz| j	|}W n | j
y   tdY n0 || |t|7 }q&d|}||d  | _|d | S )Nr   r   zinvalid compressed data)r   r   r2   r   rY   r   r_   rd   r   
decompressrc   r   appendjoinr   r'   ctrY   r8   r8   r9   r     s(    




z_Stream._readc                 C   sj   t | j}| jg}||k rF| j| j}|s.qF|| |t |7 }qd|}||d  | _|d | S )Nr   )r2   rY   r   r_   rd   r   r   r   r8   r8   r9   Z__read(  s    


z_Stream.__readN)r   )rq   rr   rs   r   r   r   r`   r   r   r   r   r   r_   r   r   r8   r8   r8   r9   r   G  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 r0   )r   r_   	BLOCKSIZErY   )r   r   r8   r8   r9   r   >  s    z_StreamProxy.__init__c                 C   s   | j j| _| jS r0   )r   r_   rY   r   r8   r8   r9   r_   B  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   )rY   
startswithr   r8   r8   r9   r   F  s    $z_StreamProxy.getcomptypec                 C   s   | j   d S r0   )r   r   r   r8   r8   r9   r   P  s    z_StreamProxy.closeN)rq   rr   rs   r   r_   r   r   r8   r8   r8   r9   r   9  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 u r>d|fg}d| _g | _d}| j}|D ]L\}}||kr|| j	d||d f | j	d||| |f ||7 }|| }qX|| jk r| j	d|| jd f d S )Nr   r   FT)
r   offsetr'   positionrk   r   r   	map_indexmapr   )r   r   r   r'   Z	blockinfoZlastposZrealposr8   r8   r9   r   ]  s(    


z_FileInFile.__init__c                 C   s   d S r0   r8   r   r8   r8   r9   r   v  s    z_FileInFile.flushc                 C   s   dS NTr8   r   r8   r8   r9   readabley  s    z_FileInFile.readablec                 C   s   dS )NFr8   r   r8   r8   r9   writable|  s    z_FileInFile.writablec                 C   s
   | j  S r0   )r   seekabler   r8   r8   r9   r     s    z_FileInFile.seekablec                 C   s   | j S r0   )r   r   r8   r8   r9   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_ENDrK   )r   r   whencer8   r8   r9   r     s    


z_FileInFile.seekc           	      C   s
  |d u r| j | j }nt|| j | j }d}|dkr| j| j \}}}}|| j  kr`|k rhq nqq6|  jd7  _| jt| jkr6d| _q6t||| j }|r| j|| j|   | j|}t||krt	d||7 }n|t
| 7 }||8 }|  j|7  _q,|S )Nr   r   r#   r[   )r'   r   r   r   r   r2   r   r   r_   r   r3   )	r   r'   rY   datastartstopr   r5   rg   r8   r8   r9   r_     s,    

z_FileInFile.readc                 C   s&   |  t|}||d t|< t|S r0   )r_   r2   )r   rg   rY   r8   r8   r9   readinto  s    z_FileInFile.readintoc                 C   s
   d| _ d S r   )r   r   r8   r8   r9   r     s    z_FileInFile.close)N)N)rq   rr   rs   r   r   r   r   r   r   r   r   r   r_   r   r   r8   r8   r8   r9   r   W  s   

r   c                       s   e Zd Z fddZ  ZS )ExFileObjectc                    s&   t |j|j|j|j}t | d S r0   )r   r   offset_datar'   sparsesuperr   )r   tarfiletarinfor   	__class__r8   r9   r     s    
zExFileObject.__init__)rq   rr   rs   r   __classcell__r8   r8   r   r9   r     s   r   c                   @   s  e Zd Zeddddddddd	d
dddddddddddZddd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d0d1 Zed2d3 Zed4d5 Zed6d7 Ze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'dRdS Z(dTdU Z)dVdW Z*dXdY Z+dZd[ Z,d\d] Z-d^d_ Z.d`da Z/dbdc Z0dS )er   zName of the archive member.zPermission bits.z6User ID of the user who originally stored this member.z7Group ID of the user who originally stored this member.zSize in bytes.zTime of last modification.zHeader 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.zDevice major number.zDevice minor number.zThe tar header starts here.zThe file's data starts here.zMA dictionary containing key-value pairs of an associated pax extended header.zSparse member information.N)r   r   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   r   r)   r*   r'   r(   r   REGTYPEr   r   r+   r,   r   r   r   r   r   r   r   r   r8   r8   r9   r     s"    zTarInfo.__init__c                 C   s   | j S r0   r   r   r8   r8   r9   r%     s    zTarInfo.pathc                 C   s
   || _ d S r0   r   r   r8   r8   r9   r%   
  s    c                 C   s   | j S r0   r   r   r8   r8   r9   r&     s    zTarInfo.linkpathc                 C   s
   || _ d S r0   r   )r   r   r8   r8   r9   r&     s    c                 C   s   d| j j| jt| f S )Nz<%s %r at %#x>)r   rq   r   idr   r8   r8   r9   __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 )N  )r   r   r)   r*   r'   r(   r   r   r   r+   r,   r   r   r   r   /)r   r   r)   r*   r'   r(   r   r   r   r+   r,   r   r   DIRTYPEr   )r   infor8   r8   r9   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_headerrK   )r   rT   r6   r7   r  r8   r8   r9   tobuf2  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_MAGICr2   r1   LENGTH_LINKrK   LENGTH_NAME_posix_split_name_create_headerr   )r   r  r6   r7   r8   r8   r9   r  @  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_MAGICr2   r1   r  _create_gnu_long_headerGNUTYPE_LONGLINKr  GNUTYPE_LONGNAMEr  r   )r   r  r6   r7   rY   r8   r8   r9   r  M  s    zTarInfo.create_gnu_headerc           
   	   C   s(  t |d< | j }ddtfddtfddfD ]h\}}}||v r>q*z|| dd	 W n" tyt   || ||< Y q*Y n0 t|| |kr*|| ||< q*d
D ]`\}}||v rd||< q|| }d|  krd|d  k rn n
t|t	rt
|||< d||< q|r| |t|}	nd}	|	| |tdd S )Nr
  r   r%   r   r&   )r+   r+       )r,   r,   r  rD   rE   ))r)   rB   )r*   rB   )r'      )r(   r  r   rB   r#   r   r   )r  r   copyr  r  r1   UnicodeEncodeErrorr2   
isinstancefloatstr_create_pax_generic_headerXHDTYPEr  r   )
r   r  r6   r   r   Zhnamer5   rS   valrY   r8   r8   r9   r  [  s4    

*
zTarInfo.create_pax_headerc                 C   s   |  |tdS )Nr/   )r  XGLTYPE)clsr   r8   r8   r9   create_pax_global_header  s    z TarInfo.create_pax_global_headerc                 C   s~   | d}tdt|D ]T}d|d | }d||d  }t|||tkrt|||tkr qvqtd||fS )Nr  r#   zname is too long)splitrH   r2   r   r1   LENGTH_PREFIXr  rK   )r   r   r6   r7   
componentsrN   r  r8   r8   r9   r    s    
zTarInfo._posix_split_namec           
      C   s  |  dttfv }|r@t|  ddd|}t|  ddd|}ntdd||}tdd||}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||g}tdt	 d
|}t|t	 d  d }	|d d td|	 d |dd   }|S )Nr   r   r   rB   r   r   r   r   r   r   r)   r*   r'   r  r(   s           r   r
  r+   r  r,   r  r   z%dsr   iz%06o rD   i)getCHRTYPEBLKTYPErU   r:   r   r  rW   r   r   r   rZ   rP   )
r  rT   r6   r7   Zhas_device_fieldsr   r   partsrY   r   r8   r8   r9   r    s4    

&zTarInfo._create_headerc                 C   s.   t t| t\}}|dkr*| t| t 7 } | S )Nr   )r^   r2   r   r3   )payloadre   rf   r8   r8   r9   _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
  )r1   r3   r2   r  r  r   r*  )r   r   r   r6   r7   r  r8   r8   r9   r    s    zTarInfo._create_gnu_long_headerc              	   C   s0  d}|  D ]6\}}z|dd W q ty@   d}Y  qDY q0 qd}|rT|d7 }|  D ]\}}|d}|r||d}n
|d}t|t| d }d	 }	}
|tt|
 }	|	|
krq|	}
q|tt|
d
d | d | d 7 }q\i }d|d< ||d< t||d< t|d< | |td
d| 	| S )NFr/   rE   Tr   s   21 hdrcharset=BINARY
r  r   r   rD          =   
z././@PaxHeaderr   r   r'   r
  r   )
itemsr1   r  r2   r  rP   r  r  r   r*  )r   r   r   r6   binarykeywordvaluerecordslrM   r>   r  r8   r8   r9   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|v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 }tdD ]j}	z0t|||d  }
t||d |d  }W n ty   Y  qY n0 ||
|f |d7 }qt|d }t|dd }|||f|_ |! rN|j"d|_|rp|jt#v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  )$r2   rt   r   ru   countr3   rv   rO   rZ   rL   r?   r   r   r)   r*   r'   r(   r   r   r   r+   r,   r   r   AREGTYPEr   r  GNUTYPE_SPARSErH   rK   r   boolr   isdirrstrip	GNU_TYPES)r   rY   r6   r7   r   objr  r   structsrN   r   numbytes
isextendedorigsizer8   r8   r9   frombuf  sZ    
zTarInfo.frombufc                 C   s8   |j t}| ||j|j}|j  t |_||S r0   )	r   r_   r   rH  r6   r7   r   r   _proc_member)r   r   rY   rC  r8   r8   r9   fromtarfileS  s    zTarInfo.fromtarfilec                 C   sT   | j ttfv r| |S | j tkr,| |S | j tttfv rF| 	|S | 
|S d S r0   )r   r  r  _proc_gnulongr>  _proc_sparser  r  SOLARIS_XHDTYPE	_proc_pax_proc_builtin)r   r   r8   r8   r9   rI  h  s    



zTarInfo._proc_memberc                 C   sR   |j  | _| j}|  s$| jtvr4|| | j7 }||_| 	|j
|j|j | S r0   )r   r   r   isregr   SUPPORTED_TYPES_blockr'   r   _apply_pax_infor   r6   r7   )r   r   r   r8   r8   r9   rO  u  s    zTarInfo._proc_builtinc                 C   s   |j | | j}z| |}W n ty<   tdY n0 | j|_| jt	krdt
||j|j|_n| jtkrt
||j|j|_|S )N missing or bad subsequent header)r   r_   rR  r'   rJ  r   rw   r   r   r  r?   r6   r7   r   r  r   )r   r   rY   nextr8   r8   r9   rK    s    

zTarInfo._proc_gnulongc           
   	   C   s   | j \}}}| ` |r|jt}d}tdD ]l}z0t|||d  }t||d |d  }	W n tyx   Y  qY n0 |r|	r|||	f |d7 }q,t|d }q|| _	|j
 | _| j| | j |_|| _| S )Nr      r  r;  i  )r   r   r_   r   rH   rO   rK   r   r?  r   r   r   rR  r'   r   )
r   r   rD  rF  rG  rY   r   rN   r   rE  r8   r8   r9   rL    s(    
zTarInfo._proc_sparsec                 C   s,  |j | | j}| jtkr&|j}n
|j }t	d|}|d urX|
dd|d< |d}|dkrr|j}nd}td}d}|||}|sq6| \}	}
t|	}	|	dkrtd||d	d |d|	 d  }| |
dd|j}
|
tv r| |||j|j}n| |dd|j}|||
< ||	7 }qz| |}W n ty`   td
Y n0 d|v rz| || nHd|v r| ||| n.|ddkr|ddkr| ||| | jttfv r(| ||j|j | j!|_!d|v r(|j"}|# s|jt$vr"|||j7 }||_!|S )Ns   \d+ hdrcharset=([^\n]+)\nr#   r/   
hdrcharsetZBINARYs   (\d+) ([^=]+)=r   rG   r$   rT  GNU.sparse.mapGNU.sparse.sizezGNU.sparse.major1zGNU.sparse.minorrF   r'   )%r   r_   rR  r'   r   r  r   r  researchgroupr=   r%  r6   compilematchgroupsrI   rL   rj   r   _decode_pax_fieldr7   PAX_NAME_FIELDSrJ  r   rw   _proc_gnusparse_01_proc_gnusparse_00_proc_gnusparse_10r  rM  rS  r   r   rP  rQ  )r   r   rY   r   r_  rW  r6   Zregexr   r5   r0  r1  rU  r   r8   r8   r9   rN    sh    



$	





 
zTarInfo._proc_paxc                 C   sh   g }t d|D ]}|t|d qg }t d|D ]}|t|d q:tt|||_d S )Ns   \d+ GNU.sparse.offset=(\d+)\nr#   s   \d+ GNU.sparse.numbytes=(\d+)\n)r[  finditerr   rI   r]  listzipr   )r   rU  r   rY   Zoffsetsr_  rE  r8   r8   r9   rd     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 r8   )rI   ).0xr8   r8   r9   
<listcomp>.  r   z.TarInfo._proc_gnusparse_01.<locals>.<listcomp>rX  ,r$   r#   )r"  rg  rh  r   )r   rU  r   r   r8   r8   r9   rc  +  s    zTarInfo._proc_gnusparse_01c                 C   s   d }g }|j t}|dd\}}t|}t||d k rtd|vrT||j t7 }|dd\}}|t| q,|j  |_t	t
|d d d |dd d |_d S )Nr-  r#   r$   )r   r_   r   r"  rI   r2   r   r   r   rg  rh  r   )r   rU  r   r   fieldsr   rY   Znumberr8   r8   r9   re  1  s    zTarInfo._proc_gnusparse_10c              	   C   s   |  D ]\}}|dkr&t| d| q|dkr@t| dt| q|dkrZt| dt| q|tv r|tv rzt| |}W n ty   d}Y n0 |dkr|d}t| || q| | _d S )NzGNU.sparse.namer%   rY  r'   zGNU.sparse.realsizer   r  )	r.  setattrrI   
PAX_FIELDSPAX_NUMBER_FIELDSrK   rA  r  r   )r   r   r6   r7   r0  r1  r8   r8   r9   rS  A  s"    

zTarInfo._apply_pax_infoc                 C   s2   z| |dW S  ty,   | || Y S 0 d S )NrE   )r=   UnicodeDecodeError)r   r1  r6   Zfallback_encodingZfallback_errorsr8   r8   r9   ra  X  s    zTarInfo._decode_pax_fieldc                 C   s"   t |t\}}|r|d7 }|t S )Nr#   )r^   r   )r   r<  re   rf   r8   r8   r9   rR  `  s    zTarInfo._blockc                 C   s
   | j tv S r0   )r   REGULAR_TYPESr   r8   r8   r9   rP  i  s    zTarInfo.isregc                 C   s   |   S r0   )rP  r   r8   r8   r9   isfilem  s    zTarInfo.isfilec                 C   s
   | j tkS r0   )r   r  r   r8   r8   r9   r@  q  s    zTarInfo.isdirc                 C   s
   | j tkS r0   )r   SYMTYPEr   r8   r8   r9   issymu  s    zTarInfo.issymc                 C   s
   | j tkS r0   )r   LNKTYPEr   r8   r8   r9   islnky  s    zTarInfo.islnkc                 C   s
   | j tkS r0   )r   r&  r   r8   r8   r9   ischr}  s    zTarInfo.ischrc                 C   s
   | j tkS r0   )r   r'  r   r8   r8   r9   isblk  s    zTarInfo.isblkc                 C   s
   | j tkS r0   )r   FIFOTYPEr   r8   r8   r9   isfifo  s    zTarInfo.isfifoc                 C   s
   | j d uS r0   )r   r   r8   r8   r9   issparse  s    zTarInfo.issparsec                 C   s   | j tttfv S r0   )r   r&  r'  rz  r   r8   r8   r9   isdev  s    zTarInfo.isdev)r   )1rq   rr   rs   dict	__slots__r   propertyr%   setterr&   r   r  r   r   r	  r  r  r  classmethodr!  r  staticmethodr  r*  r  r  rH  rJ  rI  rO  rK  rL  rN  rd  rc  re  rS  ra  rR  rP  rs  r@  ru  rw  rx  ry  r{  r|  r}  r8   r8   r8   r9   r     s   




1

#
	

2
>
h	r   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#   Nrz   r  c              
   C   s  ddddd}||vrt d|| _|| | _|sh| jdkrTtj|sTd| _d| _t|| j}d	| _n@|d u rt|d
rt	|j
ttfr|j
}t|dr|j| _d| _|rtj|nd | _
|| _|d ur|| _|d ur|| _|d ur|| _|d ur|| _|d ur|| _|	| _|
d ur0| jtkr0|
| _ni | _|d urF|| _|d urV|| _|| _d	| _g | _d	| _| j | _i | _z| jdkrd | _ | ! | _ | jdkr2| j"| j z| j#| }| j$| W nX t%y   | j"| j Y q2Y n2 t&y, } zt't|W Y d }~n
d }~0 0 q| jdv r|d| _| jr|| j(| j) }| j*| |  jt+|7  _W n&   | js| j,  d| _ Y n0 d S )Nrbzr+bwbxbrz   ar{   rj  !mode must be 'r', 'a', 'w' or 'x'r  r{   Fr   r   Trz   r  r{   rj  )-rK   r   _moder}   r%   exists	bltn_openr   r   r  r   r  rP   abspathr   rT   r   dereferenceignore_zerosr6   r7   r   r   debug
errorlevelcopybufsizer   members_loadedr   r   inodesfirstmemberrU  r   rJ  r   rv   r   r   r!  r  r`   r2   r   )r   r   r   r   rT   r   r  r  r6   r7   r   r  r  r  ZmodeserY   r8   r8   r9   r     s    






&
zTarFile.__init__c              
      s  |s|st d|dv r fdd}t j|dD ]l}t  j| }|d urV| }	z||d|fi |W   S  ttfy   |d ur||	 Y q2Y q20 q2tdnd|v r|dd	\}
}|
pd}
|pd
}| jv rt  j| }ntd| |||
|fi |S d|v r|dd	\}
}|
p4d}
|p>d
}|
dvrRt dt	||
|||}z ||
|fi |}W n   |
   Y n0 d|_|S |dv r j|||fi |S t dd S )Nznothing to open)rz   r:*c                    s    j |  dkS )Ntaropen)	OPEN_METH)r   r   r8   r9   not_compressedD  s    z$TarFile.open.<locals>.not_compressedkeyrz   z%file could not be opened successfully:r#   r   r   |ry   zmode must be 'r' or 'w'Fr  zundiscernible mode)rK   sortedr  rk   r   r   r   r   r"  r   r   r   r  )r   r   r   r   rd   kwargsr  r   funcZ	saved_posfilemodestreamr   r8   r  r9   r     sP    %







zTarFile.openc                 K   s$   |dvrt d| |||fi |S )Nr  r  )rK   )r   r   r   r   r  r8   r8   r9   r  u  s    zTarFile.taropenr   c                 K   s   |dvrt dzddlm} W n ty:   tdY n0 z|||d ||}W n, ty~   |d urx|dkrxtd Y n0 z| j|||fi |}W n@ ty   |  |dkrtd Y n   |   Y n0 d	|_	|S )
Nrz   r{   rj  mode must be 'r', 'w' or 'x'r   )GzipFilezgzip module is not availablerg   rz   r   F)
rK   gzipr  r   r   r   r   r  r   r   )r   r   r   r   compresslevelr  r  r   r8   r8   r9   gzopen}  s0    zTarFile.gzopenc              	   K   s   |dvrt dzddlm} W n ty:   tdY n0 ||pD|||d}z| j|||fi |}W nD ttfy   |  |dkrt	d Y n   |   Y n0 d	|_
|S )
Nr  r  r   )BZ2Filer   )r  rz   znot a bzip2 fileF)rK   r   r  r   r   r  r   EOFErrorr   r   r   )r   r   r   r   r  r  r  r   r8   r8   r9   bz2open  s&    zTarFile.bz2openc           	   	   K   s   |dvrt dzddlm}m} W n ty>   tdY n0 ||pH|||d}z| j|||fi |}W nD |tfy   |  |dkrt	d Y n   |   Y n0 d	|_
|S )
Nr  r  r   )LZMAFiler   r   )presetrz   znot an lzma fileF)rK   r   r  r   r   r   r  r  r   r   r   )	r   r   r   r   r  r  r  r   r   r8   r8   r9   xzopen  s&    zTarFile.xzopenr  r  r  r  )r   r   r   r   c                 C   s   | j r
d S d| _ zp| jdv rn| jttd   |  jtd 7  _t| jt\}}|dkrn| jtt|   W | j	s| j
  n| j	s| j
  0 d S )NTr  r$   r   )r   r   r   r`   r3   r   r   r^   
RECORDSIZEr   r   )r   re   rf   r8   r8   r9   r     s    
zTarFile.closec                 C   s"   |  |}|d u rtd| |S )Nzfilename %r not found)
_getmemberKeyError)r   r   r   r8   r8   r9   	getmember  s    
zTarFile.getmemberc                 C   s   |    | js|   | jS r0   )_checkr  _loadr  r   r8   r8   r9   
getmembers  s    zTarFile.getmembersc                 C   s   dd |   D S )Nc                 S   s   g | ]
}|j qS r8   r   )ri  r   r8   r8   r9   rk    r   z$TarFile.getnames.<locals>.<listcomp>)r  r   r8   r8   r9   getnames  s    zTarFile.getnamesc                 C   sZ  |  d |d ur|j}|d u r$|}tj|\}}|tjd}|d}|  }| |_	|d u r| j
stt|}qt|}nt| }d}|j}t|r|j|jf}	| j
s|jdkr|	| jv r|| j|	 krt}
| j|	 }nt}
|	d r|| j|	< nht|rt}
nVt|r"t}
nDt|r>t}
t|}n(t|rPt}
nt |rbt!}
nd S ||_||_"|j#|_$|j%|_&|
tkr|j'|_(nd|_(|j)|_*|
|_+||_,t-rzt-.|j$d |_/W n t0y   Y n0 t1rzt12|j&d |_3W n t0y   Y n0 |
tt!fv rVt4tdrVt4tdrVt5|j6|_7t8|j6|_9|S )Nawxr  r   r#   r   majorminor):r  r   r}   r%   
splitdriver   seplstripr   r   r  lstatstatfstatfilenost_modeS_ISREGst_inost_devst_nlinkr  rv  r   S_ISDIRr  S_ISFIFOrz  S_ISLNKrt  readlinkS_ISCHRr&  S_ISBLKr'  r   st_uidr)   st_gidr*   st_sizer'   st_mtimer(   r   r   pwdgetpwuidr+   r  grpgetgrgidr,   r   r  st_rdevr   r  r   )r   r   arcnamer   drvr   Zstatresr   Zstmdinoder   r8   r8   r9   
gettarinfo  s    	




zTarFile.gettarinfoT)r  c                C   s   |    |d u r| }|D ]}|rtt|j td|jp>|j|jpH|jf  |	 s`|
 rzt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d S )Nz%s/%sz%10sz%d,%dz%10dz%d-%02d-%02d %02d:%02d:%02dr   r  r   z-> zlink to )r  ro   r  r  r   r+   r)   r,   r*   rx  ry  r   r   r'   r   	localtimer(   r   r@  ru  r   rw  rn   )r   verboser  r   r8   r8   r9   rg  t  s0    
zTarFile.listfilterc                C   sL  |  d |d u r|}| jd urFtj|| jkrF| dd|  d S | d| | ||}|d u rz| dd|  d S |d ur||}|d u r| dd|  d S | rt|d}| 	|| W d    n1 s0    Y  nb|
 r>| 	| |rHtt|D ],}| jtj||tj||||d qn
| 	| d S )	Nr  r$   ztarfile: Skipped %rr#   ztarfile: Unsupported type %rztarfile: Excluded %rr  r  )r  r   r}   r%   r  _dbgr  rP  r  addfiler@  r  listdiraddr   )r   r   r  	recursiver  r   fr8   r8   r9   r    s6    

,

zTarFile.addc                 C   s   |  d t|}|| j| j| j}| j| |  jt	|7  _| j
}|d urt|| j|j|d t|jt\}}|dkr| jtt|   |d7 }|  j|t 7  _| j| d S )Nr  )rd   r   r#   )r  r  r	  rT   r6   r7   r   r`   r   r2   r  r]   r'   r^   r   r3   r  r   )r   r   r   rY   rd   re   rf   r8   r8   r9   r    s    

zTarFile.addfile.numeric_ownerc                C   s   g }|d u r| }|D ]>}|  r:|| t|}d|_| j|||   |d q|jdd d |  |D ]}tj	||j
}z,| j|||d | || | || W qp ty } z*| jdkr΂ n| dd|  W Y d }~qpd }~0 0 qpd S )	N  	set_attrsr  c                 S   s   | j S r0   r   )r  r8   r8   r9   <lambda>  r   z$TarFile.extractall.<locals>.<lambda>r  r  r#   tarfile: %s)r@  r   r  r   extractsortreverser}   r%   r   r   chownutimechmodr
   r  r  )r   r%   r  r  Zdirectoriesr   dirpathr  r8   r8   r9   
extractall  s.    


zTarFile.extractallr   c             
   C   s  |  d t|tr | |}n|}| r>tj||j|_	z"| j
|tj||j||d W n ty } zP| jdkr~ n6|jd u r| dd|j  n| dd|j|jf  W Y d }~nLd }~0  ty
 } z*| jdkr n| dd|  W Y d }~n
d }~0 0 d S )Nrz   r  r   r#   r  ztarfile: %s %r)r  r  r  r  rw  r}   r%   r   r   r   _extract_memberr   r   r  filenamer  strerrorr
   )r   memberr%   r  r  r   r  r8   r8   r9   r    s*    	




,
zTarFile.extractc                 C   s   |  d t|tr | |}n|}| s6|jtvrB| | |S | sR|	 rzt| j
trhtdq~| | |S nd S d S )Nrz   z'cannot extract (sym)link as file object)r  r  r  r  rP  r   rQ  
fileobjectrw  ru  r   r   r	   extractfile_find_link_target)r   r  r   r8   r8   r9   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vr| || n| || |rP| ||| |	 sP| || | || d S )Nr  r#   z%s -> %s)rA  r   r}   r  r%   dirnamer  makedirsrw  ru  r  r   r   rP  makefiler@  makedirr{  makefiforx  ry  makedevmakelinkr   rQ  makeunknownr  r  r  )r   r   
targetpathr  r  Z	upperdirsr8   r8   r9   r  N  s4    


zTarFile._extract_memberc                 C   s(   zt |d W n ty"   Y n0 d S )Nr  )r}   mkdirFileExistsErrorr   r   r  r8   r8   r9   r    s    zTarFile.makedirc                 C   s   | j }||j | j}t|dl}|jd urn|jD ]"\}}|| t|||t| q4||j |	  nt|||jt| W d    n1 s0    Y  d S )Nr  )
r   r   r   r  r  r   r]   r   r'   truncate)r   r   r  sourcerd   targetr   r'   r8   r8   r9   r     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	  r8   r8   r9   r    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	  r8   r8   r9   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
   r   ry  r  S_IFBLKS_IFCHRr  r  r   r   )r   r   r  r   r8   r8   r9   r    s    
zTarFile.makedevc                 C   s   zb|  r0tj|r t| t|j| n0tj|jrNt	|j| n| 
| || W nD ty   z| 
| || W n ty   tdY n0 Y n0 d S )Nz%unable to resolve link inside archive)ru  r}   r%   lexistsunlinksymlinkr   r  r   linkr  r  symlink_exceptionr  r
   r	  r8   r8   r9   r    s"    
zTarFile.makelinkc                 C   s   t tdrt dkr|j}|j}|s~ztr<t|jd }W n tyP   Y n0 zt	rht	
|jd }W n ty|   Y n0 z4| rt tdrt||| nt||| W n ty   tdY n0 d S )Ngeteuidr   r$   lchownzcould not change owner)r   r}   r  r*   r)   r  getgrnamr,   r  r  getpwnamr+   ru  r  r  r   r
   )r   r   r  r  gur8   r8   r9   r    s(    zTarFile.chownc                 C   s2   zt ||j W n ty,   tdY n0 d S )Nzcould not change mode)r}   r  r   r   r
   r	  r8   r8   r9   r    s    zTarFile.chmodc                 C   sF   t tdsd S zt||j|jf W n ty@   tdY n0 d S )Nr  z"could not change modification time)r   r}   r  r(   r   r
   r	  r8   r8   r9   r    s    
zTarFile.utimec                 C   sl  |  d | jd ur$| j}d | _|S | j| j krZ| j| jd  | jdsZtdd }z| j	| }W qJ t
y } zD| jr| dd| j|f  |  jt7  _W Y d }~q^W Y d }~qJd }~0  tyD } z`| jr| dd| j|f  |  jt7  _W Y d }~q^n| jdkr.tt|W Y d }~qJd }~0  tyj   | jdkrftdY n ty } z$| jdkrtt|W Y d }~nd }~0  ty } ztt|W Y d }~nvd }~0  tyB } zTz.dd l}t||jrtd| n|W n ty,   |Y n0 W Y d }~n
d }~0 0 qJq^|d urb| j| nd	| _|S )
NZrar#   r[   r$   z0x%X: %sr   z
empty filezzlib error: T)r  r  r   r   r   r   r_   r   r   rJ  rv   r  r  r   rL   r  rt   ru   rw   	Exceptionr   r  r   r   r  r   r  )r   mr   r  r   r8   r8   r9   rU  	  sZ    

""   
zTarFile.nextc                 C   sn   |   }|d ur"|d || }|r2tj|}t|D ].}|rRtj|j}n|j}||kr:|  S q:d S r0   )r  indexr}   r%   normpathreversedr   )r   r   r   	normalizer  r  member_namer8   r8   r9   r  A	  s    zTarFile._getmemberc                 C   s   |   }|d u r qq d| _d S r   )rU  r  )r   r   r8   r8   r9   r  X	  s    zTarFile._loadc                 C   s:   | j rtd| jj |d ur6| j|vr6td| j d S )Nz%s is closedzbad operation for mode %r)r   r   r   rq   r   )r   r   r8   r8   r9   r  b	  s    zTarFile._checkc                 C   s`   |  r.dtd tj|j|jf}d }n
|j}|}| j||dd}|d u r\t	d| |S )Nr  T)r   r!  zlinkname %r not found)
ru  r   r  r}   r%   r  r   r   r  r  )r   r   r   limitr  r8   r8   r9   r  k	  s     zTarFile._find_link_targetc                 c   s   | j r| jE d H  d S d}| jd ur:|  }|d7 }|V  |t| jk rT| j| }n"| j sr|  }|svd| _ d S nd S |d7 }|V  q:d S )Nr   r#   T)r  r  r  rU  r2   )r   r  r   r8   r8   r9   __iter__~	  s$    
zTarFile.__iter__c                 C   s   || j krt|tjd d S )Nfile)r  rn   rl   stderr)r   levelmsgr8   r8   r9   r  	  s    
zTarFile._dbgc                 C   s   |    | S r0   )r  r   r8   r8   r9   	__enter__	  s    zTarFile.__enter__c                 C   s,   |d u r|    n| js"| j   d| _d S r   )r   r   r   r   )r   r   r1  	tracebackr8   r8   r9   __exit__	  s
    

zTarFile.__exit__)Nrz   NNNNNNr  NNNN)rz   N)rz   Nr   )rz   Nr   )rz   NN)NNN)T)NT)N)r  N)r   T)TF)NF)N)7rq   rr   rs   r  r  r  r  r   rT   r   r6   r7   r   r   r   r  r   r  r  r   r  r  r  r  r  r   r  r  r  r  rg  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  rU  r  r  r  r  r$  r  r*  r,  r8   r8   r8   r9   r     sz       
oZ 


c 3
(&   
1
?


	r   c                 C   sF   z,t | drt| d}nt| }|  W dS  ty@   Y dS 0 d S )Nr_   )r   TF)r   r   r   r   )r   r   r8   r8   r9   r   	  s    
r   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 ur|j}t|rt|d*}|  t	| t
jd W d    n1 s0    Y  |jrt	d | n|d!d"| n|jd ur|j}t|rtt|d#}|j|jd$ W d    n1 sh0    Y  n|d!d"| n|jd urpt|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    n1 s0    Y  |jrn|d'krFd(|}	nd)||}	t	|	 n|d!d"| n|jd ur(|jd}
tj|
\}}d*d*d+d+d,d,d,d,d-}||v rd.||  nd/}|j}t|
|&}|D ]}|| qW d    n1 s0    Y  |jr(t	d0|
 d S )1Nr   z3A simple command-line interface for tarfile module.)descriptionz-vz	--verbose
store_trueFzVerbose output)actiondefaulthelpT)requiredz-lz--list	<tarfile>zShow listing of a tarfile)metavarr1  z-ez	--extract+)r3  z<output_dir>zExtract tarfile into target dir)nargsr4  r1  z-cz--create)z<name>z<file>zCreate tarfile from sourcesz-tz--testzTest if a tarfile is validrz   r%  z{!r} is a tar archive.r#   z{!r} is not a tar archive.
r  )r  r$   )r%   r  z{!r} file is extracted.z+{!r} file is extracted into {!r} directory.r   r   r   )r   z.tgzz.xzz.txzz.bz2z.tbzz.tbz2z.tb2zw:r{   z{!r} file created.)argparseArgumentParseradd_argumentadd_mutually_exclusive_group
parse_argstestr   r   r  rn   rl   r'  r  rT   exitrg  r   r  r2   r}   curdirformat_helpr  Zcreatepopr%   splitextr  )r7  r-  parserr]  argsra   r   Ztfr>  r)  Ztar_name_extZcompressionsZtar_modeZ	tar_files	file_namer8   r8   r9   main	  s    




0
0

,

.rG  __main__)]version
__author____credits__builtinsr   r  rl   r}   r   r\   r  r   rW   r  r[  r  r   r  AttributeErrorNotImplementedErrorr  r   	NameError__all__r3   r   r  r  r  r  r  r#  r   r=  rv  rt  r&  r'  r  rz  ZCONTTYPEr  r  r>  r  r  rM  r   r   r   r   rQ  rr  rB  ro  rb  r  rI   rp  r   r   getfilesystemencodingr:   r?   rO   rU   rZ   r]   ro   r  r   r
   r   r   r	   r   rt   ru   rv   rL   rw   rx   r   objectr   r   BufferedReaderr   r   r   r   rG  rq   r8   r8   r8   r9   <module>    s   

 sh     L        +W
