<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
2axl             '   @   sv  d Z dZ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+Z0dZ1d,Z2d-Z3e2Z4e"e#e$e%e(e)e*e&e'e+e,e-fZ5e"e#e*e-fZ6e+e,e-fZ7djZ8d.d/d4d5hZ9e:e:e:e;e;e;d6Z<e	j=d7krd8Z>nej? Z>d9d: Z@d;d< ZAd=d> ZBd?e4fd@dAZCdBdC ZDdedfdDdEZEdFdG ZFdHdI ZGG dJd deHZIG dKd deIZJG dLd deIZKG dMd deIZLG dNd deIZMG dOd deIZNG dPdQ dQeNZOG dRdS dSeNZPG dTdU dUeNZQG dVdW dWeNZRG dXdY dYeNZSG dZd[ d[ZTG d\d] d]ZUG d^d_ d_eVZWG d`da daeVZXG dbdc dce
jYZZG ddd	 d	eVZ[G ded deVZ\dfd
 Z]e\jZdgdh Z^e_dikrre^  dS )kz0.9.0u"   Lars Gustäbel (lars@gustaebel.de)z5$Date: 2011-02-25 17:42:01 +0200 (Fri, 25 Feb 2011) $z?$Id: tarfile.py 88586 2011-02-25 15:42:01Z marc-andre.lemburg $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)ZatimeZctimer(   r)   r*   r'   ntzutf-8c             C   s(   | j ||} | d | |t|  t  S )N)encodelenNUL)slengthencodingerrors r5   ,/opt/alt/python36/lib64/python3.6/tarfile.pystn   s    r7   c             C   s*   | j d}|dkr| d | } | j||S )Nr   r#   )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| j pd	d}W n tk
r   td
Y nX |S )Nr         r#         asciistrict0zinvalid header)r=   r>   )ranger/   r<   intstrip
ValueErrorInvalidHeaderError)r1   nir5   r5   r6   nti   s    rK   r?   c             C   s   t | } d|   ko"d|d  k n  rDtd|d | f dt }n|tkrd|d   |   kopd|d  k n  r| dkrtdg}ntdg}d| |  } x6t|d D ]}|j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jd|  }dt tj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 j| || d S t||\}}x8t|D ],}| j|}t||k rh|d|j| qFW |dkr| j|}t||k r|d|j| d S )N   i   r   zunexpected end of datai @  )shutilcopyfileobjdivmodrD   readr/   write)	srcdstr2   	exceptionbufsizeblocks	remainderbrU   r5   r5   r6   rY      s$    


rY   c             C   s    dd l }|jdtd tj| S )Nr   z$deprecated in favor of stat.filemoder$   )warningswarnDeprecationWarningstatfilemode)moderd   r5   r5   r6   rh     s    rh   c             C   s8   t tjdd }|d k	r(| j|dj|} t| dd d S )Nr3   backslashreplace )end)getattrsysstdoutr.   r:   print)r1   r3   r5   r5   r6   _safe_print  s    rq   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)rr   rs   rt   r5   r5   r5   r6   r
     s   c               @   s   e Zd ZdS )r   N)rr   rs   rt   r5   r5   r5   r6   r     s   c               @   s   e Zd ZdS )r   N)rr   rs   rt   r5   r5   r5   r6   r     s   c               @   s   e Zd ZdS )r	   N)rr   rs   rt   r5   r5   r5   r6   r	     s   c               @   s   e Zd ZdS )r   N)rr   rs   rt   r5   r5   r5   r6   r   "  s   c               @   s   e Zd ZdS )EmptyHeaderErrorN)rr   rs   rt   r5   r5   r5   r6   ru   %  s   ru   c               @   s   e Zd ZdS )TruncatedHeaderErrorN)rr   rs   rt   r5   r5   r5   r6   rv   (  s   rv   c               @   s   e Zd ZdS )EOFHeaderErrorN)rr   rs   rt   r5   r5   r5   r6   rw   +  s   rw   c               @   s   e Zd ZdS )rH   N)rr   rs   rt   r5   r5   r5   r6   rH   .  s   rH   c               @   s   e Zd ZdS )SubsequentHeaderErrorN)rr   rs   rt   r5   r5   r5   r6   rx   1  s   rx   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 j||d| _d S )N)rwO_BINARYi  )	osO_RDONLYO_WRONLYO_CREATO_TRUNChasattrr|   r   fd)selfnameri   r5   r5   r6   __init__>  s    

z_LowLevelFile.__init__c             C   s   t j| j d S )N)r}   closer   )r   r5   r5   r6   r   G  s    z_LowLevelFile.closec             C   s   t j| j|S )N)r}   r[   r   )r   r'   r5   r5   r6   r[   J  s    z_LowLevelFile.readc             C   s   t j| j| d S )N)r}   r\   r   )r   r1   r5   r5   r6   r\   M  s    z_LowLevelFile.writeN)rr   rs   rt   r   r   r[   r\   r5   r5   r5   r6   ry   8  s   	ry   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|}|j }|p<d| _|| _|| _|| _|| _d| _	d| _
d| _yL|dkrydd l}W n tk
r   tdY nX || _|jd| _|d	kr| j  |j| _n| j  n|d
kr:ydd l}W n tk
r
   tdY nX |d	kr.d| _|j | _t| _n
|j | _n||dkrydd l}W n tk
rn   tdY nX |d	krd| _|j | _|j| _n
|j | _n|dkrtd| W n&   | j s| jj  d| _ Y nX d S )NTF*     r   gzzzlib module is not availablerz   bz2zbz2 module is not availablexzzlzma module is not availabletarzunknown compression type %r) _extfileobjry   _StreamProxygetcomptyper   ri   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   ri   r   r   r`   r   r   r   r5   r5   r6   r   [  sl    












z_Stream.__init__c             C   s   t | dr| j r| j  d S )Nr   )r   r   r   )r   r5   r5   r6   __del__  s    z_Stream.__del__c             C   s   | j jd| j j| j j | j jd| _tjdtt	j	 }| j
d| d  | jjdrf| jd d
 | _| j
| jjdd	t  d S )N	   r   z<Ls   s   z.gz   z
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| _|  jt|7  _| j dkrD| jj|}| 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| 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j 7  _| jdkr| jr| jj| j d| _| jdkr| jjtj	d| j
 | jjtj	d| jd@  W d | js| jj  X d S )NTr{   r   r   r   z<Ll    )r   ri   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 j | _d| _| jddkr0td| jddkrFtdt| jd}| jd |d	@ rt| jdd
t| jd  }| j	| |d@ rx| jd}| s|t
krP qW |d@ rx| jd}| s|t
krP qW |d@ r| jd d S )Nr   r$   s   znot a gzip filer#      zunsupported compression method      r@   r?   rW   )r   Zdecompressobjr   r   r   _Stream__readr   r   ordr[   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| j q.W | j| ntd| j S )Nr   z seeking backwards is not allowed)r   rZ   r`   rD   r[   r	   )r   r   ra   rb   rJ   r5   r5   r6   seek   s    z_Stream.seekNc             C   sZ   |d kr:g }x | j | j}|s P |j| qW dj|}n
| j |}|  jt|7  _|S )Nr   )_readr`   appendjoinr   r/   )r   r'   trU   r5   r5   r6   r[     s    
z_Stream.readc             C   s   | j dkr| j|S t| j}| jg}xd||k r| j| j}|sBP y| jj|}W n | jk
rp   tdY nX |j	| |t|7 }q(W dj
|}||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| j}|s0P |j| |t |7 }qW dj|}||d  | _|d | S )Nr   )r/   rU   r   r[   r`   r   r   )r   r'   r   r   rU   r5   r5   r6   Z__read5  s    



z_Stream.__read)r   )N)rr   rs   rt   r   r   r   r\   r   r   r   r   r   r[   r   r   r5   r5   r5   r6   r   P  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 jt| _d S )N)r   r[   	BLOCKSIZErU   )r   r   r5   r5   r6   r   K  s    z_StreamProxy.__init__c             C   s   | j j| _| jS )N)r   r[   rU   )r   r'   r5   r5   r6   r[   O  s    
z_StreamProxy.readc             C   sP   | j jdrdS | j dd dkr8| j dd dkr8d	S | j jdrHdS dS d S )Ns   r   r   r   s   BZhr   
   s   1AY&SYr      ]     7zXZr   r   )r   r   )rU   
startswith)r   r5   r5   r6   r   S  s    $z_StreamProxy.getcomptypec             C   s   | j j  d S )N)r   r   )r   r5   r5   r6   r   ]  s    z_StreamProxy.closeN)rr   rs   rt   r   r[   r   r   r5   r5   r5   r6   r   F  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j	d||d f | jj	d||| |f ||7 }|| }qZW || jk r| jj	d|| jd f d S )Nr   r   FT)
r   offsetr'   positionrm   r   r   	map_indexmapr   )r   r   r   r'   Z	blockinfoZlastposZrealposr5   r5   r6   r   j  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 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ob|k n  rlP q:|  jd7  _| jt| jkr:d| _q:W t||| j }|r| jj|| 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   r[   r   r0   )	r   r'   rU   datastartstopr   r2   rc   r5   r5   r6   r[     s.    

z_FileInFile.readc             C   s&   | j t|}||d t|< t|S )N)r[   r/   )r   rc   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)rr   rs   rt   r   r   r   r   r   r   r   r   r   r[   r   r   r5   r5   r5   r6   r   d  s   

r   c                   s   e Zd Z fddZ  ZS )ExFileObjectc                s&   t |j|j|j|j}t j| d S )N)r   r   offset_datar'   sparsesuperr   )r   tarfiletarinfor   )	__class__r5   r6   r     s    
zExFileObject.__init__)rr   rs   rt   r   __classcell__r5   r5   )r   r6   r     s   r   c               @   s  e Zd ZdhZdiddZdd Zdd ZeeeZdd Z	dd Z
ee	e
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/d0 Zed1d2 Zed3d4 Zed5d6 Zed7d8 Zed9d: Zed;d< Zd=d> Zd?d@ ZdAdB Z dCdD Z!dEdF Z"dGdH Z#dIdJ Z$dKdL Z%dMdN Z&dOdP Z'dQdR Z(dSdT Z)dUdV Z*dWdX Z+dYdZ Z,d[d\ Z-d]d^ Z.d_d` Z/dadb Z0dcdd Z1dedf Z2dgS )jr   r   ri   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   ri   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   _getpath  s    zTarInfo._getpathc             C   s
   || _ d S )N)r   )r   r   r5   r5   r6   _setpath  s    zTarInfo._setpathc             C   s   | j S )N)r   )r   r5   r5   r6   _getlinkpath  s    zTarInfo._getlinkpathc             C   s
   || _ d S )N)r   )r   r   r5   r5   r6   _setlinkpath  s    zTarInfo._setlinkpathc             C   s   d| j j| jt| f S )Nz<%s %r at %#x>)r   rr   r   id)r   r5   r5   r6   __repr__  s    zTarInfo.__repr__c             C   sn   | j | jd@ | j| j| j| j| j| j| j| j	| j
| j| jd}|d tkrj|d jd rj|d  d7  < |S )Ni  )r   ri   r)   r*   r'   r(   r   r   r   r+   r,   r   r   r   r   /)r   ri   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   | j  }|tkr| j|||S |tkr4| j|||S |tkrH| j||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 j||tkr(tdt|d j||tkr^| j|d ||\|d< |d< | j|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   4  s    zTarInfo.create_ustar_headerc             C   s   t |d< d}t|d j||tkr<|| j|d t||7 }t|d j||tkrl|| j|d t||7 }|| j|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   A  s    zTarInfo.create_gnu_headerc       
      C   s4  t |d< | jj }xddtfddtfddfD ]h\}}}||kr@q,y|| jd	d
 W n" tk
rv   || ||< w,Y nX t|| |kr,|| ||< q,W xldD ]d\}}||krd||< q|| }d|  kod|d  k n    st|t	rt
|||< d||< qW |r| j|t|}	nd}	|	| j|td	d S )Nr   r   r%   r   r&   r+       r,   rA   rB   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   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   O  s4    
.zTarInfo.create_pax_headerc             C   s   | j |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   |j d}xltdt|D ]R}dj|d | }dj||d  }t|j||tkrt|j||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 | jddd||t| jddd@ d|t| jddd|t| jd	dd|t| jd
dd|t| jddd|d| jdtt | jddd||| jdtt | jddd||t | jddd||t| jddd|t| jddd|t | jddd||g}tjdt dj|}t	|t d  d }|d d t
d| d |dd   }|S ) Nr   r   r   ri   r   i  r?   r)   r*   r'   r   r(   s           r   r   r   r+   r   r,   r   r   r   r   z%dsr   il  z%06o rA   ie  ii)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   )rZ   r/   r   r0   )Zpayloadra   rb   r5   r5   r6   _create_payload  s    zTarInfo._create_payloadc             C   sR   |j ||t }i }d|d< ||d< t||d< t|d< | j|t||| j| 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@|j  D ]4\}}y|jdd W q tk
r@   d}P Y qX qW d}|rV|d7 }x|j  D ]\}}|jd}|r|j|d}n
|j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< | j|td
d| j	| 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|j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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 |j|
|f |d7 }qW t|d }t|dd }|||f|_ |j! rN|j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/   ru   r   rv   countr0   rw   rK   rV   rH   r<   r   ri   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 jt}| j||j|j}|j j t |_|j|S )N)	r   r[   r   r0  r3   r4   r   r   _proc_member)r  r   rU   r+  r5   r5   r6   fromtarfile?  s    zTarInfo.fromtarfilec             C   sT   | j ttfkr| j|S | j tkr,| j|S | j tttfkrF| j	|S | j
|S d S )N)r   r   r   _proc_gnulongr&  _proc_sparser  r  SOLARIS_XHDTYPE	_proc_pax_proc_builtin)r   r   r5   r5   r6   r1  T  s    



zTarInfo._proc_memberc             C   sR   |j j | _| j}| j s$| jtkr4|| j| j7 }||_| j	|j
|j|j | S )N)r   r   r   isregr   SUPPORTED_TYPES_blockr'   r   _apply_pax_infor   r3   r4   )r   r   r   r5   r5   r6   r7  a  s    zTarInfo._proc_builtinc             C   s   |j j| j| j}y| j|}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   r[   r:  r'   r2  r   rx   r   r   r   r<   r3   r4   r   r   r   )r   r   rU   nextr5   r5   r6   r3  r  s    

zTarInfo._proc_gnulongc       
      C   s   | j \}}}| ` x|r|jjt}d}xvtdD ]j}y0t|||d  }t||d |d  }	W n tk
rz   P Y nX |r|	r|j||	f |d7 }q0W t|d }qW || _	|jj
 | _| j| j| j |_|| _| S )Nr      r   r#  i  )r   r   r[   r   rD   rK   rG   r   r'  r   r   r   r:  r'   r   )
r   r   r,  r.  r/  rU   r   rJ   r   r-  r5   r5   r6   r4    s(    zTarInfo._proc_sparsec             C   s0  |j j| j| j}| jtkr&|j}n
|jj }tj	d|}|d k	rX|j
djd|d< |jd}|dkrr|j}nd}tjd}d}x|j||}|sP |j \}	}
t|	}	|	dkrtd||jd	d |jd|	 d  }| j|
dd|j}
|
tkr| j|||j|j}n| j|dd|j}|||
< ||	7 }qW y| j|}W n tk
rd   td
Y nX d|kr~| j|| nHd|kr| j||| n.|jddkr|jddkr| j||| | jttfkr,|j ||j|j | j!|_!d|kr,|j"}|j# s|jt$kr&||j|j7 }||_!|S )Ns   \d+ hdrcharset=([^\n]+)\nr#   zutf-8
hdrcharsetZBINARYs   (\d+) ([^=]+)=r   zinvalid headerr$   z missing or bad subsequent headerzGNU.sparse.mapzGNU.sparse.sizezGNU.sparse.major1zGNU.sparse.minorrC   r'   )%r   r[   r:  r'   r   r  r   r  researchgroupr:   r  r3   compilematchgroupsrE   rH   rl   r   _decode_pax_fieldr4   PAX_NAME_FIELDSr2  r   rx   _proc_gnusparse_01_proc_gnusparse_00_proc_gnusparse_10r  r5  r;  r   r   r8  r9  )r   r   rU   r   rD  r>  r3   Zregexr   r2   r  r  r<  r   r5   r5   r6   r6    sd    



$	





 
zTarInfo._proc_paxc             C   sp   g }x(t jd|D ]}|jt|jd qW g }x(t jd|D ]}|jt|jd q@W tt|||_d S )Ns   \d+ GNU.sparse.offset=(\d+)\nr#   s   \d+ GNU.sparse.numbytes=(\d+)\n)r@  finditerr   rE   rB  listzipr   )r   r<  r   rU   ZoffsetsrD  r-  r5   r5   r6   rI    s    zTarInfo._proc_gnusparse_00c             C   s@   dd |d j 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  rL  rM  r   )r   r<  r   r   r5   r5   r6   rH    s    zTarInfo._proc_gnusparse_01c             C   s   d }g }|j jt}|jdd\}}t|}xJt||d k rvd|krV||j jt7 }|jdd\}}|jt| q.W |j j |_t	t
|d d d |dd d |_d S )Nr  r#   r$   )r   r[   r   r  rE   r/   r   r   r   rL  rM  r   )r   r<  r   r   Zfieldsr   rU   Znumberr5   r5   r6   rJ    s    zTarInfo._proc_gnusparse_10c             C   s   x|j  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|jd}t| || q
W |j | _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   r;  -  s"    

zTarInfo._apply_pax_infoc             C   s.   y|j |dS  tk
r(   |j ||S X d S )NrB   )r:   UnicodeDecodeError)r   r  r3   Zfallback_encodingZfallback_errorsr5   r5   r6   rF  D  s    zTarInfo._decode_pax_fieldc             C   s"   t |t\}}|r|d7 }|t S )Nr#   )rZ   r   )r   r$  ra   rb   r5   r5   r6   r:  L  s    zTarInfo._blockc             C   s
   | j tkS )N)r   REGULAR_TYPES)r   r5   r5   r6   r8  U  s    zTarInfo.isregc             C   s   | j  S )N)r8  )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   r\  r^  r`  )r   r5   r5   r6   isdevg  s    zTarInfo.isdevN)r   ri   r)   r*   r'   r(   r   r   r   r+   r,   r   r   r   r   r   r   r   r   r   )r   )3rr   rs   rt   	__slots__r   r   r   propertyr%   r   r   r&   r   r   r   r   r   r   r   r   classmethodr  r   staticmethodr   r  r   r
  r0  r2  r1  r7  r3  r4  r6  rI  rH  rJ  r;  rF  r:  r8  rW  r(  rY  r[  r]  r_  ra  rb  rc  r5   r5   r5   r6   r     s^       


1
3?h	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}||krt d|| _|| | _|sj| jdkrVtjj| rVd| _d| _t|| j}d	| _n@|d krt|d
rt	|j
ttfr|j
}t|dr|j| _d| _|rtjj|nd | _
|| _|d k	r|| _|d k	r|| _|d k	r|| _|d k	r || _|d k	r|| _|	| _|
d k	r4| jtkr4|
| _ni | _|d k	rJ|| _|d k	rZ|| _|| _d	| _g | _d	| _| jj | _i | _ y| jdkrd | _ | j! | _ | jdkr8x| jj"| j y| jj#| }| jj$| W nT t%k
r   | jj"| j P Y n0 t&k
r0 } zt't|W Y d d }~X nX qW | jdkrd| _| jr| jj(| jj) }| jj*| |  jt+|7  _W n&   | js| jj,  d| _ Y nX d S )Nrbzr+bwbZxb)rz   ar{   rO  z!mode must be 'r', 'a', 'w' or 'x'rj  r{   Fr   ri   Trz   rO  )rj  r{   rO  )-rG   ri   _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firstmemberr<  r   r2  r   rw   r   r   r  r  r\   r/   r   )r   r   ri   r   rP   r   ro  rp  r3   r4   r   rq  rr  rs  ZmodeserU   r5   r5   r6   r     s    






$
zTarFile.__init__c                s  | r| rt d|dkr fdd}xtt j|dD ]b}t  j| }|d k	r\|j }	y||d|f|S  ttfk
r   |d k	r|j|	 w8Y q8X q8W tdnd|kr|jdd	\}
}|
pd}
|pd
}| jkrt  j| }ntd| |||
|f|S d|kr|jdd	\}
}|
p.d}
|p8d
}|
dkrLt dt	||
|||}y ||
|f|}W n   |j
   Y nX d|_|S |dkr j|||f|S t dd S )Nznothing to openrz   r:*c                s    j |  dkS )Ntaropen)	OPEN_METH)r   )r  r5   r6   not_compressed  s    z$TarFile.open.<locals>.not_compressed)keyz%file could not be opened successfully:r#   r   zunknown compression type %r|r{   zmode must be 'r' or 'w'Frj  rO  zundiscernible mode)rz   ry  )rz   r{   )rj  r{   rO  )rG   sortedr{  rm   r   r   r   r   r  r   r   r   rz  )r  r   ri   r   r`   kwargsr|  r   funcZ	saved_posrh   streamr   r5   )r  r6   r     sP    %







zTarFile.openc             K   s    |dkrt d| |||f|S )Nrz   rj  r{   rO  z!mode must be 'r', 'a', 'w' or 'x')rz   rj  r{   rO  )rG   )r  r   ri   r   r  r5   r5   r6   rz  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|j||d ||}W n. tk
r   |d k	r|dkrtd Y nX y| j|||f|}W nB tk
r   |j	  |dkrtd Y n   |j	   Y nX d	|_
|S )Nrz   r{   rO  zmode must be 'r', 'w' or 'x'r   zgzip module is not availablerc   znot a gzip fileF)rz   r{   rO  )rG   gzipZGzipFiler   AttributeErrorr   r   r   rz  r   r   )r  r   ri   r   compresslevelr  r  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   |j  |dkrt	d Y n   |j   Y nX d	|_
|S )Nrz   r{   rO  zmode must be 'r', 'w' or 'x'r   zbz2 module is not available)r  znot a bzip2 fileF)rz   r{   rO  )rG   r   r   r   ZBZ2Filerz  r   EOFErrorr   r   r   )r  r   ri   r   r  r  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   |j  |dkrt	d Y n   |j   Y nX d	|_
|S )Nrz   r{   rO  zmode must be 'r', 'w' or 'x'r   zlzma module is not available)presetznot an lzma fileF)rz   r{   rO  )rG   r   r   r   ZLZMAFilerz  r   r  r   r   r   )r  r   ri   r   r  r  r   r   r5   r5   r6   xzopen  s&    zTarFile.xzopenrz  r  r  r  )r   r   r   r   c          
   C   s   | j r
d S d| _ z`| jdkrn| jjttd   |  jtd 7  _t| jt\}}|dkrn| jjtt|   W d | j	s| jj
  X d S )NTrj  r{   rO  r$   r   )rj  r{   rO  )r   ri   r   r\   r0   r   r   rZ   
RECORDSIZEr   r   )r   ra   rb   r5   r5   r6   r     s    
zTarFile.closec             C   s"   | j |}|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   | js| j  | jS )N)_checkru  _loadrt  )r   r5   r5   r6   
getmembers  s    zTarFile.getmembersc             C   s   dd | j  D S )Nc             S   s   g | ]
}|j qS r5   )r   )rN  r   r5   r5   r6   rP    s    z$TarFile.getnames.<locals>.<listcomp>)r  )r   r5   r5   r6   getnames  s    zTarFile.getnamesc             C   sp  | j d |d k	r|j}|d kr$|}tjj|\}}|jtjd}|jd}| j }| |_	|d krt
tdr| j rtj|}qtj|}ntj|j }d}|j}tj|r|j|jf}	| j r|jdkr|	| jkr|| j|	 krt}
| j|	 }nt}
|	d rx|| j|	< nhtj|r"t}
nVtj|r4t}
nDtj|rPt}
tj|}n(tj|rbt }
ntj!|rtt"}
nd S ||_||_#|j$|_%|j&|_'|
tkr|j(|_)nd|_)|j*|_+|
|_,||_-t.ryt.j/|j%d |_0W n t1k
r   Y nX t2r*yt2j3|j'd |_4W n t1k
r(   Y nX |
t t"fkrlt
tdrlt
tdrltj5|j6|_7tj8|j6|_9|S )	Nawxr   lstatr   r#   r   majorminor):r  r   r}   r%   
splitdriver   seplstripr   r   r   ro  r  rg   fstatfilenost_modeS_ISREGst_inost_devst_nlinkrv  rZ  r   S_ISDIRr   S_ISFIFOr`  S_ISLNKrX  readlinkS_ISCHRr\  S_ISBLKr^  ri   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)rt  c            C   s   | j   |d kr| }x|D ]}|rttj|j td|jp@|j|jpJ|jf  |j	 sb|j
 r|tdd|j|jf   ntd|j  tdtj|jd d   t|j|j rdnd  |r|j rtd	|j  |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  rq   rg   rh   ri   r+   r)   r,   r*   r]  r_  r   r   r'   r   Z	localtimer(   r   r(  rY  r   r[  rp   )r   verbosert  r   r5   r5   r6   rL  Q  s*    
zTarFile.list)filterc      	   
   C   sv  | j d |d kr|}|d k	rPdd l}|jdtd ||rP| jdd|  d S | jd k	rtjj|| jkr| jdd|  d S | jd| | j	||}|d kr| jdd|  d S |d k	r||}|d kr| jdd|  d S |j
 rt|d	}| j|| W d Q R X nd|j rh| j| |rrxHtj|D ].}| jtjj||tjj|||||d
 q4W n
| j| d S )Nr  r   zuse the filter argument insteadr$   ztarfile: Excluded %rztarfile: Skipped %rr#   ztarfile: Unsupported type %rrh  )r  )r  rd   re   rf   _dbgr   r}   r%   rn  r  r8  rm  addfiler(  listdiraddr   )	r   r   r  	recursiveZexcluder  rd   r   fr5   r5   r6   r  q  sB    



zTarFile.addc             C   s   | j d tj|}|j| j| j| j}| jj| |  jt	|7  _| j
}|d k	rt|| j|j|d t|jt\}}|dkr| jjtt|   |d7 }|  j|t 7  _| jj| d S )Nr  )r`   r   r#   )r  r  r   rP   r3   r4   r   r\   r   r/   rs  rY   r'   rZ   r   r0   rt  r   )r   r   r   rU   r`   ra   rb   r5   r5   r6   r    s    

zTarFile.addfile.)numeric_ownerc            C   s   g }|d kr| }xF|D ]>}|j  r<|j| tj|}d|_| j|||j   |d qW |jdd d |j  x|D ]}tjj	||j
}y,| j|||d | j|| | j|| W qv tk
r } z$| jdkrւ n| jdd|  W Y d d }~X qvX qvW d S )	Ni  )	set_attrsr  c             S   s   | j S )N)r   )rj  r5   r5   r6   <lambda>  s    z$TarFile.extractall.<locals>.<lambda>)r}  )r  r#   ztarfile: %s)r(  r   r  ri   extractsortreverser}   r%   r   r   chownutimechmodr
   rr  r  )r   r%   rt  r  Zdirectoriesr   dirpathrx  r5   r5   r6   
extractall  s,    




zTarFile.extractallr   c            C   s  | j d t|tr | j|}n|}|j r>tjj||j|_	y"| j
|tjj||j||d W n tk
r } zJ| jdkr n6|jd kr| jdd|j  n| jdd|j|jf  W Y d d }~X nB tk
r } z$| jdkr n| jdd|  W Y d d }~X nX d S )Nrz   )r  r  r   r#   ztarfile: %sztarfile: %s %r)r  r  r	  r  r[  r}   r%   r   r   r   _extract_memberr   r   rr  filenamer  strerrorr
   )r   memberr%   r  r  r   rx  r5   r5   r6   r    s(    	



(
zTarFile.extractc             C   s   | j d t|tr | j|}n|}|j s6|jtkrB| j| |S |j sR|j	 rzt| j
trhtdq~| j| j|S nd S d S )Nrz   z'cannot extract (sym)link as file object)r  r  r	  r  r8  r   r9  
fileobjectr[  rY  r   r   r	   extractfile_find_link_target)r   r  r   r5   r5   r6   r    s    


zTarFile.extractfilec             C   sV  |j d}|jdtj}tjj|}|r@tjj| r@tj| |j sP|j	 rj| j
dd|j|jf  n| j
d|j |j r| j|| n|j r| j|| nx|j r| j|| nb|j s|j r| j|| nD|j s|j	 r| j|| n&|jtkr| j|| n| j|| |rR| j||| |j	 sR| j|| | j|| d S )Nr   r#   z%s -> %s)r)  r   r}   r  r%   dirnamerl  makedirsr[  rY  r  r   r   r8  makefiler(  makedirra  makefifor]  r_  makedevmakelinkr   r9  makeunknownr  r  r  )r   r   
targetpathr  r  Z	upperdirsr5   r5   r6   r  4  s4    


zTarFile._extract_memberc             C   s*   yt j|d W n tk
r$   Y nX d S )Ni  )r}   mkdirFileExistsError)r   r   r  r5   r5   r6   r  e  s    zTarFile.makedirc             C   s   | j }|j|j | j}t|df}|jd k	rrx,|jD ]"\}}|j| t|||t| q6W |j|j |j	  nt|||jt| W d Q R X d S )Nri  )
r   r   r   rs  rm  r   rY   r   r'   truncate)r   r   r  sourcer`   targetr   r'   r5   r5   r6   r  o  s    


zTarFile.makefilec             C   s"   | j || | j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    s    zTarFile.makeunknownc             C   s"   t tdrtj| 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   sb   t td st td r td|j}|j r:|tjO }n
|tjO }tj||tj	|j
|j d S )Nmknodr  z'special devices not supported by system)r   r}   r
   ri   r_  rg   S_IFBLKS_IFCHRr  r  r   r   )r   r   r  ri   r5   r5   r6   r    s    
zTarFile.makedevc             C   s   yL|j  rtj|j| n0tjj|jr8tj|j| n| j| j	|| W nH t
k
r   y| j| j	|| W n tk
r   tdY nX Y nX d S )Nz%unable to resolve link inside archive)rY  r}   symlinkr   r%   rl  r   linkr  r  symlink_exceptionr  r
   )r   r   r  r5   r5   r6   r    s    

zTarFile.makelinkc             C   s   t tdrtj dkr|j}|j}|sytr<tj|jd }W n tk
rR   Y nX yt	rjt	j
|jd }W n tk
r   Y nX y4|j rt tdrtj||| ntj||| 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+   rY  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||j W n tk
r8   tdY nX d S )Nr  zcould not change mode)r   r}   r  ri   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|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  | j d | jd k	r$| j}d | _|S | j| jj krZ| jj| jd  | jjdsZtdd }xby| jj	| }W nH t
k
r } z2| jr| jdd| j|f  |  jt7  _wbW Y d d }~X n tk
r, } zN| jr| jdd| j|f  |  jt7  _wbn| jdkrtt|W Y d d }~X n tk
rT   | jdkrPtdY nj tk
r } z| jdkr~tt|W Y d d }~X n0 tk
r } ztt|W Y d d }~X nX P qbW |d k	r| jj| nd| _|S )	NZrar#   zunexpected end of datar$   z0x%X: %sr   z
empty fileT)r  rw  r   r   r   r   r[   r   r   r2  rw   rp  r  r   rH   r	  ru   rv   rx   rt  r   ru  )r   mr   rx  r5   r5   r6   r<    sL    


zTarFile.nextc             C   sn   | j  }|d k	r"|d |j| }|r2tjj|}x6t|D ]*}|rTtjj|j}n|j}||kr<|S q<W d S )N)r  indexr}   r%   normpathreversedr   )r   r   r   	normalizert  r  member_namer5   r5   r6   r  	  s    zTarFile._getmemberc             C   s"   x| j  }|d krP qW d| _d S )NT)r<  ru  )r   r   r5   r5   r6   r  3	  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   rr   ri   )r   ri   r5   r5   r6   r  =	  s    zTarFile._checkc             C   s`   |j  r.djtd tj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)
rY  r   r  r}   r%   r  r   r   r  r  )r   r   r   limitr  r5   r5   r6   r  F	  s     zTarFile._find_link_targetc             c   s   | j r| jE d H  d S d}| jd k	r:| j }|d7 }|V  xN|t| jk rV| j| }n"| j st| j }|sxd| _ d S nd S |d7 }|V  q<W d S )Nr   r#   T)ru  rt  rw  r<  r/   )r   r  r   r5   r5   r6   __iter__Y	  s&    
zTarFile.__iter__c             C   s   || j krt|tjd d S )N)file)rq  rp   rn   stderr)r   levelmsgr5   r5   r6   r  x	  s    
zTarFile._dbgc             C   s   | j   | S )N)r  )r   r5   r5   r6   	__enter__~	  s    zTarFile.__enter__c             C   s,   |d kr| j   n| js"| jj   d| _d S )NT)r   r   r   r   )r   r   r  	tracebackr5   r5   r6   __exit__	  s
    

zTarFile.__exit__)Nrz   NNNNNNr   NNNN)rz   N)rz   Nr   )rz   Nr   )rz   NN)NNN)T)NTN)N)r  N)r   T)TF)NF)N)7rr   rs   rt   rq  ro  rp  rr  r   rP   r   r3   r4   r   r   r   r  r   rf  r  r   rz  r  r  r  r{  r   r  r  r  r  rL  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r<  r  r  r  r  r  r  r  r  r5   r5   r5   r6   r   k  st      
lZ!

d =
(& 
0
	6


	c             C   s.   yt | }|j  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 }|jd
dddd |jdddd0dd |jdddd1dd |jddddd |j }|j r|j}t|rt|d }|j  t	|j t
jd W d Q R X |jrt	dj| n|jd d!j| n|jrP|j}t|r:tj|d"}|j|jd# W d Q R X n|jd d!j| n|jrt|jd krz|jd }tj}n,t|jd$kr|j\}}n|jd |j  t|rtj|d"}|j|d% W d Q R X |jr|d&krd'j|}	nd(j||}	t	|	 n|jd d!j| n|jr|jjd}
tjj|
\}}d)d)d*d*d+d+d+d+d,}||krld-||  nd.}|j}tj|
| }x|D ]}|j| qW W d Q R X |jrt	d/j|
 n|jd |j  d S )2Nr   z3A simple command line interface for tarfile module.)descriptionz-vz	--verbose
store_trueFzVerbose output)actiondefaulthelpz-lz--list	<tarfile>zShow listing of a tarfile)metavarr  z-ez	--extract+<output_dir>zExtract tarfile into target dir)nargsr  r  z-cz--create<name><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.
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:r{   z{!r} file created.)r  r  )r  r  )argparseArgumentParseradd_argumentadd_mutually_exclusive_group
parse_argsZtestr   r   r  rp   rn   r  r  rP   exitrL  r   r  r/   r}   curdirformat_helpr  Zcreatepopr%   splitextr  )r  r  parserrB  argsr]   r   Ztfr	  r  Ztar_name_ZextZcompressionsZtar_modeZ	tar_files	file_namer5   r5   r6   main	  s    









r  __main__)r%   r&   r'   r(   r)   r*   r+   r,   )`version
__author__Z__date__Z	__cvsid____credits__builtinsr   rm  rn   r}   r   rX   rg   r   rS   r  r@  r  r   r  r  NotImplementedErrorr  r   	NameError__all__r0   r   r  r   r   r   r   r  r   r%  rZ  rX  r\  r^  r   r`  ZCONTTYPEr   r   r&  r  r  r5  r   r   r   r   r9  rV  r*  rS  rG  r  rE   rT  r   r   getfilesystemencodingr7   r<   rK   rQ   rV   rY   rh   rq   	Exceptionr   r
   r   r   r	   r   ru   rv   rw   rH   rx   ry   r   objectr   r   BufferedReaderr   r   r   r   r  rr   r5   r5   r5   r6   <module>    s   


  wh             ,Z
