Your IP : 3.137.200.139


Current Path : /opt/alt/python39/lib64/python3.9/__pycache__/
Upload File :
Current File : //opt/alt/python39/lib64/python3.9/__pycache__/tarfile.cpython-39.opt-2.pyc

a

R�f���@s�dZdZdZddlmZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZzddlZWney�dZYn0zddlZWney�dZYn0eefZzeef7ZWney�Yn0gd�ZdZdZed	Zd
ZdZdZdZd
Z dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2e2Z3e!e"e#e$e'e(e)e%e&e*e+e,fZ4e!e"e)e,fZ5e*e+e,fZ6dZ7hd�Z8e9e9e9e:e:e:d �Z;ej<d!k�r�d"Z=ne�>�Z=d#d$�Z?d%d&�Z@d'd(�ZAd)e3fd*d+�ZBd,d-�ZCdedfd.d/�ZDd0d1�ZEGd2d3�d3eF�ZGGd4d5�d5eG�ZHGd6d7�d7eG�ZIGd8d9�d9eG�ZJGd:d;�d;eG�ZKGd<d=�d=eG�ZLGd>d?�d?eL�ZMGd@dA�dAeL�ZNGdBdC�dCeL�ZOGdDdE�dEeL�ZPGdFdG�dGeL�ZQGdHdI�dI�ZRGdJdK�dK�ZSGdLdM�dMeT�ZUGdNdO�dOeT�ZVGdPdQ�dQejW�ZXGdRdS�dSeG�ZYGdTdU�dUeY�ZZGdVdW�dWeY�Z[GdXdY�dYeY�Z\GdZd[�d[eY�Z]Gd\d]�d]eY�Z^drd_d`�Z_dadb�Z`dcdd�Zadedf�Zbe`eaebdg�ZceT�Zde�edh�ZfGdidj�djeT�ZgGdkdl�dleT�Zhdmdn�ZiehjZdodp�Zjekdqk�r�ej�dS)sz0.9.0u"Lars Gustäbel (lars@gustaebel.de)u4Gustavo 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�sustar  sustar00�d��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+)Zatime�ctimer(r)r*r'�nt�utf-8cCs8|durtd��|�||�}|d|�|t|�tS)Nzmetadata cannot contain None)�
ValueError�encode�len�NUL)�s�length�encoding�errors�r8�,/opt/alt/python39/lib64/python3.9/tarfile.py�stn�sr:cCs*|�d�}|dkr|d|�}|�||�S)Nr���)�find�decode)r4r6r7�pr8r8r9�nts�s
r?cCs�|ddvrbd}tt|�d�D]}|dK}|||d7}q |ddkr�dt|�d|}n>z"t|dd�}t|��p|d	d�}Wnty�td
��Yn0|S)Nr)��r#�rA��ascii�strict�0�invalid header)�ranger2r?�int�stripr0�InvalidHeaderError)r4�n�ir8r8r9�nti�srNrBcCs�t|�}d|kr$d|dkrDnntd|d|fd�t}n�|tkr�d|d|krrd|dkr�nnV|dkr�tdg�}ntdg�}d||}t|d�D]}|�d|d@�|dL}q�ntd	��|S)
NrrBr#z%0*orDrCr@rAzoverflow in number field)rI�bytesr3r�	bytearrayrH�insertr0)rL�digits�formatr4rMr8r8r9�itn�s 2
rTcCs0dtt�d|��}dtt�d|��}||fS)NrCZ
148B8x356BZ
148b8x356b)�sum�structZunpack_from)�bufZunsigned_chksumZ
signed_chksumr8r8r9�calc_chksums�s	rXc	Cs�|pd}|dkrdS|dur.t�|||�dSt||�\}}t|�D],}|�|�}t|�|krf|d��|�|�qD|dkr�|�|�}t|�|kr�|d��|�|�dS)Ni@r�unexpected end of data)�shutil�copyfileobj�divmodrH�readr2�write)	�srcZdstr5�	exception�bufsize�blocks�	remainder�brWr8r8r9r[�s$


r[cCs8ttjdd�}|dur(|�|d��|�}t|dd�dS)Nr6�backslashreplace� )�end)�getattr�sys�stdoutr1r=�print)r4r6r8r8r9�_safe_printsrlc@seZdZdS)rN��__name__�
__module__�__qualname__r8r8r8r9rsrc@seZdZdS)r
Nrmr8r8r8r9r
sr
c@seZdZdS)rNrmr8r8r8r9rsrc@seZdZdS)rNrmr8r8r8r9rsrc@seZdZdS)r	Nrmr8r8r8r9r	sr	c@seZdZdS)rNrmr8r8r8r9rsrc@seZdZdS)�EmptyHeaderErrorNrmr8r8r8r9rq srqc@seZdZdS)�TruncatedHeaderErrorNrmr8r8r8r9rr#srrc@seZdZdS)�EOFHeaderErrorNrmr8r8r8r9rs&srsc@seZdZdS)rKNrmr8r8r8r9rK)srKc@seZdZdS)�SubsequentHeaderErrorNrmr8r8r8r9rt,srtc@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�
_LowLevelFilecCsFtjtjtjBtjBd�|}ttd�r2|tjO}t�||d�|_dS)N��r�w�O_BINARYi�)	�os�O_RDONLY�O_WRONLY�O_CREAT�O_TRUNC�hasattrryr�fd)�self�name�moder8r8r9�__init__9s��

z_LowLevelFile.__init__cCst�|j�dS�N)rz�closer��r�r8r8r9r�Bsz_LowLevelFile.closecCst�|j|�Sr�)rzr]r��r�r'r8r8r9r]Esz_LowLevelFile.readcCst�|j|�dSr�)rzr^r��r�r4r8r8r9r^Hsz_LowLevelFile.writeN)rnrorpr�r�r]r^r8r8r8r9ru3s	ruc@sneZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
ddd�Zdd�Zdd�Z
dd�ZdS)�_Streamc	Cs�d|_|durt||�}d|_|dkr6t|�}|��}|p<d|_||_||_||_||_d|_	d|_
d|_�zF|dkr�zddl}Wnt
y�td��Yn0||_|�d�|_|d	kr�|��|j|_n|��n�|d
k�r6zddl}Wnt
�ytd��Yn0|d	k�r*d|_|��|_t|_n
|��|_nz|dk�r�zddl}Wnt
�yhtd
��Yn0|d	k�r�d|_|��|_|j|_n
|��|_n|dk�r�td|��Wn&|j�s�|j��d|_�Yn0dS)NTF�*��r�gzzzlib module is not availablerw�bz2�bz2 module is not available�xz�lzma module is not available�tar�unknown compression type %r) �_extfileobjru�_StreamProxy�getcomptyper�r��comptype�fileobjrarW�pos�closed�zlib�ImportErrorr�crc32�crc�
_init_read_gz�errorr`�_init_write_gzr��dbufZBZ2Decompressor�cmp�OSErrorZ
BZ2Compressor�lzmaZLZMADecompressor�	LZMAErrorZLZMACompressorr�)	r�r�r�r�r�rar�r�r�r8r8r9r�Vsl












z_Stream.__init__cCst|d�r|js|��dS)Nr�)rr�r�r�r8r8r9�__del__�sz_Stream.__del__cCs�|j�d|jj|jj|jjd�|_t�dtt	�	���}|�
d|d�|j�d�rf|jdd�|_t
j�|j�|_|�
|j�dd	�t�dS)
N�	r�<Ls�s��.gz���z
iso-8859-1�replace)r�ZcompressobjZDEFLATED�	MAX_WBITSZ
DEF_MEM_LEVELr�rV�packrI�time�_Stream__writer��endswithrzr%�basenamer1r3)r�Z	timestampr8r8r9r��s�z_Stream._init_write_gzcCsR|jdkr|j�||j�|_|jt|�7_|jdkrD|j�|�}|�|�dS)Nr�r�)	r�r�r�r�r�r2r��compressr�r�r8r8r9r^�s

z
_Stream.writecCsN|j|7_t|j�|jkrJ|j�|jd|j��|j|jd�|_qdSr�)rWr2rar�r^r�r8r8r9Z__write�sz_Stream.__writecCs�|jr
dSd|_z�|jdkr:|jdkr:|j|j��7_|jdkr�|jr�|j�|j�d|_|jdkr�|j�t�	d|j
��|j�t�	d|jd@��W|js�|j�
�n|js�|j�
�0dS)NTrxr�r�r�r�l��)r�r�r�rWr��flushr�r^rVr�r�r�r�r�r�r8r8r9r��s 
�z
_Stream.closecCs�|j�|jj�|_d|_|�d�dkr0td��|�d�dkrFtd��t|�d��}|�d�|d	@r�t|�d��d
t|�d��}|�	|�|d@r�|�d�}|r�|t
kr�q�q�|d@r�|�d�}|r�|t
kr�q�q�|d@r�|�d�dS)
Nr�r$s��not a gzip filer#�zunsupported compression method��rCrB�)r�Z
decompressobjr�r�r��
_Stream__readrr�ordr]r3)r��flagZxlenr4r8r8r9r��s*
 


z_Stream._init_read_gzcCs|jSr�)r�r�r8r8r9�tell�sz_Stream.tellrcCsX||jdkrJt||j|j�\}}t|�D]}|�|j�q,|�|�ntd��|jS)Nrz seeking backwards is not allowed)r�r\rarHr]r	)r�r�rbrcrMr8r8r9�seek�sz_Stream.seekcCs |�|�}|jt|�7_|Sr�)�_readr�r2)r�r'rWr8r8r9r]
s
z_Stream.readcCs�|jdkr|�|�St|j�}|jg}||kr�|jrB|j}d|_n|j�|j�}|sVq�z|j�	|�}Wn|j
y�td��Yn0|�|�|t|�7}q&d�
|�}||d�|_|d|�S)Nr�r�zinvalid compressed data)r�r�r2r�rWr�r]rar��
decompressr`r�append�join�r�r'�c�trWr8r8r9r�s(




z
_Stream._readcCsjt|j�}|jg}||krF|j�|j�}|s.qF|�|�|t|�7}qd�|�}||d�|_|d|�S)Nr�)r2rWr�r]rar�r�r�r8r8r9Z__read,s


z_Stream.__readN)r)rnrorpr�r�r�r^r�r�r�r�r�r]r�r�r8r8r8r9r�KsF
	

r�c@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
r�cCs||_|j�t�|_dSr�)r�r]�	BLOCKSIZErW)r�r�r8r8r9r�Bsz_StreamProxy.__init__cCs|jj|_|jSr�)r�r]rWr�r8r8r9r]Fs
z_StreamProxy.readcCsP|j�d�rdS|jdd�dkr8|jdd�dkr8d	S|j�d
�rHdSdSdS)
Ns�r�r�sBZhr��
s1AY&SYr�)s]�s�7zXZr�r�)rW�
startswithr�r8r8r9r�Js$z_StreamProxy.getcomptypecCs|j��dSr�)r�r�r�r8r8r9r�Tsz_StreamProxy.closeN)rnrorpr�r]r�r�r8r8r8r9r�=s
r�c@sfeZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Ze	j
fdd�Zddd�Zdd�Z
dd�ZdS)�_FileInFileNcCs�||_||_||_d|_t|dd�|_d|_|dur>d|fg}d|_g|_d}|j}|D]L\}}||kr||j�	d||df�|j�	d||||f�||7}||}qX||jkr�|j�	d||jdf�dS)Nrr�FT)
r��offsetr'�positionrhr�r��	map_index�mapr�)r�r�r�r'Z	blockinfoZlastposZrealposr8r8r9r�as(


z_FileInFile.__init__cCsdSr�r8r�r8r8r9r�zsz_FileInFile.flushcCsdS�NTr8r�r8r8r9�readable}sz_FileInFile.readablecCsdS)NFr8r�r8r8r9�writable�sz_FileInFile.writablecCs
|j��Sr�)r��seekabler�r8r8r9r��sz_FileInFile.seekablecCs|jSr�)r�r�r8r8r9r��sz_FileInFile.tellcCs�|tjkr tt|d�|j�|_nj|tjkr\|dkrFt|j|d�|_q�t|j||j�|_n.|tjkr�tt|j||j�d�|_ntd��|jS)NrzInvalid argument)	�io�SEEK_SET�min�maxr'r��SEEK_CUR�SEEK_ENDr0)r�r��whencer8r8r9r��s


z_FileInFile.seekc	Cs
|dur|j|j}nt||j|j�}d}|dk�r|j|j\}}}}||jkr`|krhq�nq�q6|jd7_|jt|j�kr6d|_q6t|||j�}|r�|j�||j|�|j�|�}t|�|kr�t	d��||7}n|t
|7}||8}|j|7_q,|S)Nr�rr#rY)r'r�r�r�r�r2r�r�r]rr3)	r�r'rW�data�start�stopr�r5rdr8r8r9r]�s,

z_FileInFile.readcCs&|�t|��}||dt|��<t|�Sr�)r]r2)r�rdrWr8r8r9�readinto�sz_FileInFile.readintocCs
d|_dSr�)r�r�r8r8r9r��sz_FileInFile.close)N)N)rnrorpr�r�r�r�r�r�r�r�r�r]r�r�r8r8r8r9r�[s

r�cseZdZ�fdd�Z�ZS)�ExFileObjectcs&t|j|j|j|j�}t��|�dSr�)r�r��offset_datar'�sparse�superr�)r��tarfile�tarinfor���	__class__r8r9r��s
�zExFileObject.__init__�rnrorpr��
__classcell__r8r8r�r9r��sr�c@seZdZdS)�FilterErrorNrmr8r8r8r9r��sr�cseZdZ�fdd�Z�ZS)�AbsolutePathErrorcs ||_t��d|j�d��dS)Nzmember z has an absolute path�r�r�r�r��r�r�r�r8r9r��szAbsolutePathError.__init__r�r8r8r�r9r��sr�cseZdZ�fdd�Z�ZS)�OutsideDestinationErrorcs.||_||_t��|j�d|�d�d�dS)Nz would be extracted to �, � which is outside the destination�r��_pathr�r�r��r�r�r%r�r8r9r��s
�z OutsideDestinationError.__init__r�r8r8r�r9r��sr�cseZdZ�fdd�Z�ZS)�SpecialFileErrorcs||_t��|j�d��dS)Nz is a special filer�r�r�r8r9r��szSpecialFileError.__init__r�r8r8r�r9r��sr�cseZdZ�fdd�Z�ZS)�AbsoluteLinkErrorcs||_t��|j�d��dS)Nz is a link to an absolute pathr�r�r�r8r9r��szAbsoluteLinkError.__init__r�r8r8r�r9r��sr�cseZdZ�fdd�Z�ZS)�LinkOutsideDestinationErrorcs.||_||_t��|j�d|�d�d�dS)Nz would link to r�r�r�r�r�r8r9r��s
�z$LinkOutsideDestinationError.__init__r�r8r8r�r9r��sr�TcCs�i}|j}tj�|�}|�dtjf�r@|j�dtj�}|d<tj�|�rTt|��tj�tj�	||��}tj�
||g�|kr�t||��|j}|dur�|d@}|r�|�
�s�|��r�|d@s�|dM}|dO}n|��s�|��r�d}nt|��||jkr�||d<|�r�|jdu�rd|d<|jdu�r*d|d	<|jdu�r>d|d
<|jdu�rRd|d<|���sf|���r�tj�|j��r~t|��|���r�tj�	|tj�|�|j�}ntj�	||j�}tj�|�}tj�
||g�|k�r�t||��|S)N�/r�i��@i�����r�r)r*r+r,)r�rzr%�realpathr��sep�lstrip�isabsr�r��
commonpathr�r��isreg�islnk�isdir�issymr�r)r*r+r,�linknamer��dirnamer�)�member�	dest_pathZfor_data�	new_attrsr�Ztarget_pathr�r8r8r9�_get_filtered_attrs�s^




��
rcCs|Sr�r8)rrr8r8r9�fully_trusted_filter/srcCs,t||d�}|r(|jfi|�ddi��S|S)NF�deep�rr��rrrr8r8r9�
tar_filter2srcCs,t||d�}|r(|jfi|�ddi��S|S)NTr	Fr
rr8r8r9�data_filter8sr
)Z
fully_trustedr�r�s([0-9]{1,20}) c@s�eZdZeddddddddd	d
ddd
dddddddd�Zdhdd�Zedd��Zejdd��Zedd��Z	e	jdd��Z	dd�Z
eeeeeeeeded �
d!d"�Zd#d$�Z
eed%fd&d'�Zd(d)�Zd*d+�Zd,d-�Zed.d/��Zd0d1�Zed2d3��Zed4d5��Zed6d7��Zed8d9��Zed:d;��Zed<d=��Zd>d?�Zd@dA�ZdBdC�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�Z0ddde�Z1dfdg�Z2dS)irzName of the archive member.zPermission bits.z6User ID of the user who originally stored this member.z7Group ID of the user who originally stored this member.zSize in bytes.zTime of last modification.zHeader checksum.z�File 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.zGroup name.zDevice major number.zDevice minor number.zThe tar header starts here.zThe file's data starts here.zMA dictionary containing key-value pairs of an associated pax extended header.zSparse member information.N)r�r�r)r*r'r(�chksum�typerr+r,�devmajor�devminorr�r��pax_headersr�r��_sparse_structs�_link_targetr�cCsj||_d|_d|_d|_d|_d|_d|_t|_d|_	d|_
d|_d|_d|_
d|_d|_d|_i|_dS)Ni�rr�)r�r�r)r*r'r(r�REGTYPErrr+r,rrr�r�r�r�r�r�r8r8r9r�qs"zTarInfo.__init__cCs|jSr��r�r�r8r8r9r%�szTarInfo.pathcCs
||_dSr�rrr8r8r9r%�scCs|jSr��rr�r8r8r9r&�szTarInfo.linkpathcCs
||_dSr�r)r�rr8r8r9r&�scCsd|jj|jt|�fS)Nz<%s %r at %#x>)r�rnr��idr�r8r8r9�__repr__�szTarInfo.__repr__T)
r�r(r�rr)r*r+r,r	�_KEEPc
Cs�|	rt�|�}n
t�|�}||
ur(||_||
ur6||_||
urD||_||
urR||_||
ur`||_||
urn||_||
ur|||_||
ur�||_	|Sr�)
�copyZdeepcopyr�r(r�rr)r*r+r,)r�r�r(r�rr)r*r+r,r	r�resultr8r8r9r��s(
zTarInfo.replacecCs�|jdurd}n
|jd@}|j||j|j|j|j|j|j|j|j	|j
|j|jd�
}|dt
kr||d�d�s||dd7<|S)N�)
r�r�r)r*r'r(rrrr+r,rrrr�r�)r�r�r)r*r'r(rrrr+r,rr�DIRTYPEr�)r�r��infor8r8r9�get_info�s(

�zTarInfo.get_info�surrogateescapecCsz|��}|��D]\}}|durtd|��q|tkrD|�|||�S|tkrZ|�|||�S|tkrn|�||�Std��dS)Nz%s may not be Nonezinvalid format)	r!�itemsr0r
�create_ustar_headerr�create_gnu_headerr�create_pax_header)r�rSr6r7r r��valuer8r8r9�tobuf�sz
TarInfo.tobufcCsnt|d<t|d�||��tkr(td��t|d�||��tkr^|�|d||�\|d<|d<|�|t||�S)N�magicrzlinkname is too longr��prefix)	�POSIX_MAGICr2r1�LENGTH_LINKr0�LENGTH_NAME�_posix_split_name�_create_headerr
)r�r r6r7r8r8r9r$�szTarInfo.create_ustar_headercCs�t|d<d}t|d�||��tkr<||�|dt||�7}t|d�||��tkrl||�|dt||�7}||�|t	||�S)Nr)r�rr�)
�	GNU_MAGICr2r1r,�_create_gnu_long_header�GNUTYPE_LONGLINKr-�GNUTYPE_LONGNAMEr/r)r�r r6r7rWr8r8r9r%�szTarInfo.create_gnu_headerc
	CsLt|d<|j��}ddtfddtfddfD]h\}}}||vr>q*z||�dd	�Wn"tyt||||<Yq*Yn0t||�|kr*||||<q*d
D]�\}}d}||}	t|	t	�}
|
r�t
|	�n|	}d|kr�d
|dks�nd||<d}n|
�r|||<d}|r�||vr�t|	�||<q�|�r4|�|t
|�}nd}||�|tdd�S)Nr)r�r%rr&)r+r+� )r,r,r4rDrE))r)rB)r*rB)r'�)r(r5FrrBr#Tr�r�)r+rrr-r,r1�UnicodeEncodeErrorr2�
isinstance�float�round�str�_create_pax_generic_header�XHDTYPEr/r
)
r�r r6rr�Zhnamer5rRZ	needs_pax�valZval_is_floatZval_intrWr8r8r9r&s>
�

zTarInfo.create_pax_headercCs|�|td�S)Nr/)r;�XGLTYPE)�clsrr8r8r9�create_pax_global_header<sz TarInfo.create_pax_global_headercCs~|�d�}tdt|��D]T}d�|d|��}d�||d��}t|�||��tkrt|�||��tkrqvqtd��||fS)Nr�r#zname is too long)�splitrHr2r�r1�
LENGTH_PREFIXr-r0)r�r�r6r7Z
componentsrMr*r8r8r9r.Bs
�zTarInfo._posix_split_namecCs�|�d�ttfv}|r@t|�dd�d|�}t|�dd�d|�}ntdd||�}tdd||�}|�dt�}|durxtd��t|�dd�d	||�t|�d
d�d@d|�t|�dd�d|�t|�d
d�d|�t|�dd�d|�t|�dd�d|�d|t|�dd�d	||�|�dt�t|�dd�d||�t|�dd�d||�||t|�dd�d||�g}t�	dt
d�|��}	t|	t
d��d}
|	dd�t
d|
d�|	dd�}	|	S)NrrrrBrr�zTarInfo.type must not be Noner�rr�rr)r*r'r5r(s        rr)r+r4r,r*rz%dsr�i����z%06orDi����)�get�CHRTYPE�BLKTYPErTr:rr0r+rVr�r�r�rXrO)r rSr6r7Zhas_device_fieldsrrZfiletype�partsrWrr8r8r9r/Rs:
�&zTarInfo._create_headercCs.tt|�t�\}}|dkr*|t|t7}|S)Nr)r\r2r�r3)Zpayloadrbrcr8r8r9�_create_payload|szTarInfo._create_payloadcCsR|�||�t}i}d|d<||d<t|�|d<t|d<|�|t||�|�|�S)Nz
././@LongLinkr�rr'r))r1r3r2r0r/r
rG)r?r�rr6r7r r8r8r9r1�s�zTarInfo._create_gnu_long_headerc	Cs0d}|��D]6\}}z|�dd�Wqty@d}YqDYq0qd}|rT|d7}|��D]�\}}|�d�}|r�|�|d�}n
|�d�}t|�t|�d}d	}	}
|tt|
��}	|	|
kr�q�|	}
q�|tt|
�d
�d|d|d
7}q\i}d|d<||d<t|�|d<t|d<|�|td
d�|�	|�S)NFr/rETr�s21 hdrcharset=BINARY
r"r�rrD� �=�
z././@PaxHeaderr�rr'r)r�)
r#r1r6r2r:rOr+r/r
rG)r?rrr6Zbinary�keywordr'Zrecords�lrLr>r r8r8r9r;�s<

(�z"TarInfo._create_pax_generic_headerc	Cstt|�dkrtd��t|�tkr(td��|�t�tkr>td��t|dd��}|t|�vrbt	d��|�}t
|dd�||�|_t|dd	��|_t|d	d
��|_
t|d
d��|_t|dd��|_t|dd��|_||_|dd
�|_t
|d
d�||�|_t
|dd�||�|_t
|dd�||�|_t|dd��|_t|dd��|_t
|dd�||�}|jtk�r�|j�d��r�t|_|jtk�r6d}g}td�D]j}	z0t|||d��}
t||d|d��}Wnt�y�Y�qYn0|�|
|f�|d7}�q�t|d�}t|dd��}
|||
f|_ |�!��rN|j�"d�|_|�rp|jt#v�rp|d|j|_|S)Nrzempty headerztruncated headerzend of file header��zbad checksumr�l�t�|��ii	i)iIiQiYi�r�i�r�r5�i�i�i�)$r2rqr�rr�countr3rsrNrXrKr?r�r�r)r*r'r(rrrr+r,rr�AREGTYPEr�r�GNUTYPE_SPARSErHr0r��boolrr�rstrip�	GNU_TYPES)r?rWr6r7r�objr*r��structsrMr��numbytes�
isextended�origsizer8r8r9�frombuf�sZ
zTarInfo.frombufcCs8|j�t�}|�||j|j�}|j��t|_|�|�Sr�)	r�r]r�r`r6r7r�r��_proc_member)r?r�rWr[r8r8r9�fromtarfile	szTarInfo.fromtarfilecCsT|jttfvr|�|�S|jtkr,|�|�S|jtttfvrF|�	|�S|�
|�SdSr�)rr3r2�
_proc_gnulongrW�_proc_sparser<r>�SOLARIS_XHDTYPE�	_proc_pax�
_proc_builtin)r�r�r8r8r9ras



zTarInfo._proc_membercCsR|j��|_|j}|��s$|jtvr4||�|j�7}||_|�	|j
|j|j�|Sr�)
r�r�r�r�r�SUPPORTED_TYPES�_blockr'r��_apply_pax_inforr6r7)r�r�r�r8r8r9rg+szTarInfo._proc_builtincCs�|j�|�|j��}z|�|�}Wnty<td��Yn0|j|_|jt	krdt
||j|j�|_
n|jtkr�t
||j|j�|_|S)N� missing or bad subsequent header)r�r]rir'rbrrtr�rr3r?r6r7r�r2r)r�r�rW�nextr8r8r9rc<s

zTarInfo._proc_gnulongc
	Cs�|j\}}}|`|r�|j�t�}d}td�D]l}z0t|||d��}t||d|d��}	WntyxYq�Yn0|r�|	r�|�||	f�|d7}q,t|d�}q||_	|j�
�|_|j|�|j
�|_||_
|S)Nr�r5rTi�)rr�r]r�rHrNr0r�rXr�r�r�rir'r�)
r�r�r\r^r_rWr�rMr�r]r8r8r9rdRs(
zTarInfo._proc_sparsecCs�|j�|�|j��}|jtkr&|j}n
|j��}d}d}g}t|�|k�rh||dk�rht	�
||�}sptd��zt|�
d��}Wnty�td��Yn0|dkr�td��||t|�kr�td��|�d�|d}	||�d�d|	�}
|
�d�\}}}
|�r|dk�s||	dk�r$td��|�|||
f�|dk�r^|du�r^|
dk�rZ|j}nd	}||7}q<|du�rvd	}|D]X\}}}
|�|d	d	|j�}|tv�r�|�|
||j|j�}n|�|
d	d	|j�}|||<�qzz|�|�}Wnt�y�td
��Yn0d|v�r|�||�nFd|v�r0|�||�n.|�d
�dk�r^|�d�dk�r^|�|||�|jttfv�r�|� ||j|j�|j!|_!d|v�r�|j"}|�#��s�|jt$v�r�||�|j�7}||_!|S)NrrGr#�rIr�s
hdrcharsetsBINARYr/rk�GNU.sparse.map�GNU.sparse.sizezGNU.sparse.major�1zGNU.sparse.minorrFr')%r�r]rir'rr>rrr2�_header_length_prefix_re�matchrKrI�groupr0r�rg�	partitionr�r6�_decode_pax_fieldr7�PAX_NAME_FIELDSrbrrt�_proc_gnusparse_01�_proc_gnusparse_00rC�_proc_gnusparse_10r<rerjr�r�r�rh)r�r�rWrr�r6�raw_headersrsr5Zheader_value_end_offsetZkeyword_and_valueZraw_keywordZequalsZ	raw_valuerKr'rlr�r8r8r9rfns|





�
�
�

 
zTarInfo._proc_paxc	Cs�g}g}|D]�\}}}|dkrRz|�t|����Wq�tyNtd��Yq�0q|dkrz|�t|����Wqty�td��Yq0qtt||��|_dS)NsGNU.sparse.offsetrGsGNU.sparse.numbytes)r�rIr=r0rK�list�zipr�)r�rlr{Zoffsetsr]�_rKr'r8r8r9ry�szTarInfo._proc_gnusparse_00cCs@dd�|d�d�D�}tt|ddd�|ddd���|_dS)NcSsg|]}t|��qSr8)rI)�.0�xr8r8r9�
<listcomp>�r�z.TarInfo._proc_gnusparse_01.<locals>.<listcomp>ro�,r$r#)rAr|r}r�)r�rlrr�r8r8r9rx�szTarInfo._proc_gnusparse_01cCs�d}g}|j�t�}|�dd�\}}t|�}t|�|dkrtd|vrT||j�t�7}|�dd�\}}|�t|��q,|j��|_t	t
|ddd�|ddd���|_dS)NrJr#r$)r�r]r�rArIr2r�r�r�r|r}r�)r�rlrr��fieldsr�rWZnumberr8r8r9rzszTarInfo._proc_gnusparse_10c	Cs�|��D]�\}}|dkr&t|d|�q|dkr@t|dt|��q|dkrZt|dt|��q|tvr|tvr�zt||�}Wnty�d}Yn0|dkr�|�d�}t|||�q|��|_dS)NzGNU.sparse.namer%rpr'zGNU.sparse.realsizerr�)	r#�setattrrI�
PAX_FIELDS�PAX_NUMBER_FIELDSr0rYrr)r�rr6r7rKr'r8r8r9rjs"

zTarInfo._apply_pax_infocCs2z|�|d�WSty,|�||�YS0dS)NrE)r=�UnicodeDecodeError)r�r'r6Zfallback_encodingZfallback_errorsr8r8r9rv(szTarInfo._decode_pax_fieldcCs"t|t�\}}|r|d7}|tS)Nr#)r\r�)r�rUrbrcr8r8r9ri0szTarInfo._blockcCs
|jtvSr�)r�
REGULAR_TYPESr�r8r8r9r�9sz
TarInfo.isregcCs|��Sr�)r�r�r8r8r9�isfile=szTarInfo.isfilecCs
|jtkSr�)rrr�r8r8r9rAsz
TarInfo.isdircCs
|jtkSr�)r�SYMTYPEr�r8r8r9rEsz
TarInfo.issymcCs
|jtkSr�)r�LNKTYPEr�r8r8r9r�Isz
TarInfo.islnkcCs
|jtkSr�)rrDr�r8r8r9�ischrMsz
TarInfo.ischrcCs
|jtkSr�)rrEr�r8r8r9�isblkQsz
TarInfo.isblkcCs
|jtkSr�)r�FIFOTYPEr�r8r8r9�isfifoUszTarInfo.isfifocCs
|jduSr�)r�r�r8r8r9�issparseYszTarInfo.issparsecCs|jtttfvSr�)rrDrEr�r�r8r8r9�isdev\sz
TarInfo.isdev)r�)3rnrorp�dict�	__slots__r��propertyr%�setterr&rrr�r!rrr(r$r%r&�classmethodr@r.�staticmethodr/rGr1r;r`rbrargrcrdrfryrxrzrjrvrir�r�rrr�r�r�r�r�r�r8r8r8r9rNs��




�
:

)
	

2
>

y	rc
@s�eZdZdZdZdZdZeZe	Z
dZeZ
eZdZdedd�Zedddefd	d
��Zedfdd��Zedgdd��Zedhdd��Zedidd��Zddddd�Zdd�Zdd�Zdd�Zdd �Zdjd!d"�Zdkdd$�d%d&�Zdldd'�d(d)�Z dmd*d+�Z!d,d-�Z"dnddd/�d0d1�Z#doddd/�d3d4�Z$d5d6�Z%d7d8�Z&d9d:�Z'd;d<�Z(d=d>�Z)dpd?d@�Z*dAdB�Z+dCdD�Z,dEdF�Z-dGdH�Z.dIdJ�Z/dKdL�Z0dMdN�Z1dOdP�Z2dQdR�Z3dSdT�Z4dqdUdV�Z5dWdX�Z6drdYdZ�Z7d[d\�Z8d]d^�Z9d_d`�Z:dadb�Z;dcdd�Z<dS)srrFr#Nrwr"c
Cs�ddddd�}||vrtd��||_|||_|sh|jdkrTtj�|�sTd|_d|_t||j�}d	|_n@|dur�t|d
�r�t	|j
ttf�r�|j
}t|d�r�|j|_d|_|r�tj�
|�nd|_
||_|dur�||_|dur�||_|dur�||_|dur�||_|du�r||_|	|_|
du�r0|jtk�r0|
|_ni|_|du�rF||_|du�rV||_|
|_d	|_g|_d	|_|j��|_i|_z�|jd
k�r�d|_ |�!�|_ |jdk�r2|j�"|j�z|j�#|�}|j�$|�WnXt%�y�|j�"|j�Y�q2Yn2t&�y,}zt't|���WYd}~n
d}~00�q�|jdv�r|d|_|j�r||j�(|j�)��}|j�*|�|jt+|�7_Wn&|j�s�|j�,�d|_�Yn0dS)N�rbzr+b�wbZxb�rw�arxr��!mode must be 'r', 'a', 'w' or 'x'r�rxFr�r�Trw�r�rxr�)-r0r��_moderzr%�exists�	bltn_openr�rr7r�r:rO�abspathr�rSr��dereference�ignore_zerosr6r7rr�debug�
errorlevel�copybufsizer��members�_loadedr�r��inodes�firstmemberrlr�rbr�rsrrr@rr^r2r�)r�r�r�r�rSr�r�r�r6r7rr�r�r�Zmodes�erWr8r8r9r�}s�
�





&
zTarFile.__init__c

s�|s|std��|dvr��fdd�}t�j|d�D]l}t��j|�}|durV|��}	z||d|fi|��WSttfy�|dur�|�|	�Yq2Yq20q2td���nd|v�r|�dd	�\}
}|
p�d}
|p�d
}|�jvr�t��j|�}ntd|��|||
|fi|��Sd|v�r�|�dd	�\}
}|
�p4d}
|�p>d
}|
d
v�rRtd��t	||
|||�}z�||
|fi|��}Wn|�
��Yn0d|_|S|dv�r��j|||fi|��Std��dS)Nznothing to open)rw�r:*cs�j|dkS)N�taropen)�	OPEN_METH)r��r?r8r9�not_compressedsz$TarFile.open.<locals>.not_compressed)�keyrwz%file could not be opened successfully�:r#r�r��|rvzmode must be 'r' or 'w'Fr�zundiscernible mode)
r0�sortedr�rhr�rrr�rAr�r�r�r�)
r?r�r�r�ra�kwargsr�r��funcZ	saved_pos�filemode�streamr�r8r�r9r�sP%







zTarFile.opencKs$|dvrtd��||||fi|��S)Nr�r�)r0)r?r�r�r�r�r8r8r9r�GszTarFile.taropenr�cKs�|dvrtd��zddlm}Wnty:td��Yn0z|||d||�}Wn,ty~|durx|dkrxtd���Yn0z|j|||fi|��}Wn@ty�|��|dkr�td���Yn|���Yn0d	|_	|S)
N�rwrxr��mode must be 'r', 'w' or 'x'r)�GzipFilezgzip module is not availablerdrwr�F)
r0Zgzipr�r�rr�rr�r�r�)r?r�r�r��
compresslevelr�r�r�r8r8r9�gzopenOs0zTarFile.gzopenc	Ks�|dvrtd��zddlm}Wnty:td��Yn0||pD|||d�}z|j|||fi|��}WnDttfy�|��|dkr�t	d���Yn|���Yn0d	|_
|S)
Nr�r�r)�BZ2Filer�)r�rwznot a bzip2 fileF)r0r�r�r�rr�r��EOFErrorr�rr�)r?r�r�r�r�r�r�r�r8r8r9�bz2openps&zTarFile.bz2openc		Ks�|dvrtd��zddlm}m}Wnty>td��Yn0||pH|||d�}z|j|||fi|��}WnD|tfy�|��|dkr�t	d���Yn|���Yn0d	|_
|S)
Nr�r�r)�LZMAFiler�r�)�presetrwznot an lzma fileF)r0r�r�r�r�rr�r�r�rr�)	r?r�r�r�r�r�r�r�r�r8r8r9�xzopen�s&zTarFile.xzopenr�r�r�r�)r�r�r�r�cCs�|jr
dSd|_zp|jdvrn|j�ttd�|jtd7_t|jt�\}}|dkrn|j�tt|�W|j	s�|j�
�n|j	s�|j�
�0dS)NTr�r$r)r�r�r�r^r3r�r�r\�
RECORDSIZEr�r�)r�rbrcr8r8r9r��s
�z
TarFile.closecCs(|�|�d��}|dur$td|��|S)Nr�zfilename %r not found)�
_getmemberrY�KeyError)r�r�r�r8r8r9�	getmember�szTarFile.getmembercCs|��|js|��|jSr�)�_checkr��_loadr�r�r8r8r9�
getmembers�szTarFile.getmemberscCsdd�|��D�S)NcSsg|]
}|j�qSr8r)rr�r8r8r9r��r�z$TarFile.getnames.<locals>.<listcomp>)r�r�r8r8r9�getnames�szTarFile.getnamescCsZ|�d�|dur|j}|dur$|}tj�|�\}}|�tjd�}|�d�}|��}||_	|dur�|j
stt�|�}q�t�|�}nt�
|���}d}|j}t�|�r�|j|jf}	|j
s�|jdkr�|	|jvr�||j|	kr�t}
|j|	}nt}
|	dr�||j|	<nht�|��rt}
nVt�|��r"t}
nDt�|��r>t}
t�|�}n(t�|��rPt}
nt� |��rbt!}
ndS||_||_"|j#|_$|j%|_&|
tk�r�|j'|_(nd|_(|j)|_*|
|_+||_,t-�r�zt-�.|j$�d|_/Wnt0�y�Yn0t1�rzt1�2|j&�d|_3Wnt0�yYn0|
tt!fv�rVt4td��rVt4td��rVt�5|j6�|_7t�8|j6�|_9|S)N�awxr�r�r#r�major�minor):r�r�rzr%�
splitdriver�r�r�r�r�r��lstat�stat�fstat�fileno�st_mode�S_ISREG�st_ino�st_dev�st_nlinkr�r�r�S_ISDIRr�S_ISFIFOr��S_ISLNKr��readlink�S_ISCHRrD�S_ISBLKrEr��st_uidr)�st_gidr*�st_sizer'�st_mtimer(rr�pwd�getpwuidr+r��grpZgetgrgidr,rr��st_rdevrr�r)r�r��arcnamer�Zdrvr�ZstatresrZstmd�inoderr8r8r9�
gettarinfo�s�	


��

zTarFile.gettarinfoT)r�cCs*|��|dur|}|D�]
}|r�|jdur6td�ntt�|j��td|jpT|j|jp^|jf�|�	�sv|�
�r�tdd|j|jf�ntd|j
�|jdur�td�ntdt�|j�dd��t|j|��r�d	nd
�|�r|���rtd|j�|���rtd|j�t�qdS)
Nz
??????????z%s/%sz%10sz%d,%dz%10dz????-??-?? ??:??:??z%d-%02d-%02d %02d:%02d:%02dr�r�r�z-> zlink to )r�r�rlr�r�r+r)r,r*r�r�rrr'r(r��	localtimer�rrrr�rk)r��verboser�r�r8r8r9r|Fs8



��

�

zTarFile.list��filtercCsL|�d�|dur|}|jdurFtj�|�|jkrF|�dd|�dS|�d|�|�||�}|durz|�dd|�dS|dur�||�}|dur�|�dd|�dS|��r�t|d��}|�	||�Wd�n1s�0Ynb|�
��r>|�	|�|�rHtt�|��D],}|j
tj�||�tj�||�||d��qn
|�	|�dS)	Nr�r$ztarfile: Skipped %rr#ztarfile: Unsupported type %r�tarfile: Excluded %rr�r�)r�r�rzr%r��_dbgr�r�r��addfilerr��listdir�addr�)r�r�r��	recursiver�r��fr8r8r9r�ls6

,

�zTarFile.addcCs�|�d�t�|�}|�|j|j|j�}|j�|�|jt	|�7_|j
}|dur�t||j|j|d�t
|jt�\}}|dkr�|j�tt|�|d7}|j|t7_|j�|�dS)Nr�)rarr#)r�rr(rSr6r7r�r^r�r2r�r[r'r\r�r3r�r�)r�r�r�rWrarbrcr8r8r9r��s

zTarFile.addfilecCsp|dur0|j}|durtSt|t�r,td��|St|�r<|Sz
t|WStyjtd|�d��d�Yn0dS)NzrString names are not supported for TarFile.extraction_filter. Use a function such as tarfile.data_filter directly.zfilter z
 not found)	�extraction_filterrr7r:�	TypeError�callable�_NAMED_FILTERSr�r0)r�r�r8r8r9�_get_filter_function�s
�
zTarFile._get_filter_function�.)�
numeric_ownerr�cCs�g}|�|�}|dur|}|D]F}|�|||�}|dur:q|��rL|�|�|j|||��|d�q|jdd�dd�|D]p}tj�||j	�}	z,|j
||	|d�|�||	�|�||	�Wq|t
y�}
z|�|
�WYd}
~
q|d}
~
00q|dS)N��	set_attrsr�cSs|jSr�r)r�r8r8r9�<lambda>�r�z$TarFile.extractall.<locals>.<lambda>T)r��reverse)r�)r��_get_extract_tarinforr��_extract_one�sortrzr%r�r��chown�utime�chmodr
�_handle_nonfatal_error)r�r%r�r�r�Zdirectories�filter_functionrr��dirpathr�r8r8r9�
extractall�s,

�zTarFile.extractallr�cCs4|�|�}|�|||�}|dur0|�||||�dSr�)r�rr)r�rr%r�r�r�rr�r8r8r9�extract�s
zTarFile.extractc
Cs�t|t�r|�|�}n|}|}z|||�}Wn^ttfy^}z|�|�WYd}~n6d}~0ty�}z|�|�WYd}~n
d}~00|dur�|�dd|j	�dS|�
�r�t�|�}tj
�||j�|_|S)Nr$r�)r7r:r�r�r��_handle_fatal_errorr
rr�r�r�rrzr%r�rr)r�rrr%r�Z
unfilteredr�r8r8r9r
	s"
 
zTarFile._get_extract_tarinfoc
Cs�|�d�z"|j|tj�||j�||d�WnZtyZ}z|�|�WYd}~n6d}~0ty�}z|�	|�WYd}~n
d}~00dS)Nrwr�)
r��_extract_memberrzr%r�r�r�rr
r)r�r�r%r�r�r�r8r8r9r!	s
�
zTarFile._extract_onecCs"|jdkr�n|�dd|�dS)Nr#�tarfile: %s)r�r��r�r�r8r8r9r.	s
zTarFile._handle_nonfatal_errorcCsn|jdkr�n\t|t�rP|jdur6|�dd|j�qj|�dd|j|jf�n|�ddt|�j|f�dS)Nrr#r
ztarfile: %s %rztarfile: %s %s)r�r7r��filenamer��strerrorrrnrr8r8r9r5	s


zTarFile._handle_fatal_errorcCs�|�d�t|t�r |�|�}n|}|��s6|jtvrB|�||�S|��sR|�	�rzt|j
t�rhtd��q~|�
|�|��SndSdS)Nrwz'cannot extract (sym)link as file object)r�r7r:r�r�rrh�
fileobjectr�rr�r�r	�extractfile�_find_link_target)r�rr�r8r8r9rA	s


zTarFile.extractfilecCsT|�d�}|�dtj�}tj�|�}|r>tj�|�s>t�|�|��sN|�	�rh|�
dd|j|jf�n|�
d|j�|�
�r�|�||�n�|��r�|�||�nx|��r�|�||�nb|��s�|��r�|�||�nD|��s�|�	�r�|�||�n&|jtv�r|�||�n|�||�|�rP|�|||�|�	��sP|�||�|�||�dS)Nr�r#z%s -> %s)rYr�rzr�r%rr��makedirsr�rr�r�rr��makefiler�makedirr��makefifor�r��makedev�makelinkrrh�makeunknownrrr)r�r��
targetpathr�r�Z	upperdirsr8r8r9ra	s4


zTarFile._extract_membercCs>z&|jdurt�|�nt�|d�Wnty8Yn0dS)Ni�)r�rz�mkdir�FileExistsError�r�r�rr8r8r9r�	s
zTarFile.makedircCs�|j}|�|j�|j}t|d��l}|jdurn|jD]"\}}|�|�t|||t|�q4|�|j�|�	�nt|||jt|�Wd�n1s�0YdS)Nr�)
r�r�r�r�r�r�r[rr'�truncate)r�r�r�sourcera�targetr�r'r8r8r9r�	s


zTarFile.makefilecCs"|�||�|�dd|j�dS)Nr#z9tarfile: Unknown file type %r, extracted as regular file.)rr�rrr8r8r9r�	s�zTarFile.makeunknowncCs"ttd�rt�|�ntd��dS)N�mkfifozfifo not supported by system)rrzr"r
rr8r8r9r�	s
zTarFile.makefifocCsjttd�rttd�std��|j}|dur.d}|��rB|tjO}n
|tjO}t�||t�	|j
|j��dS)N�mknodrz'special devices not supported by systemr�)rrzr
r�r�r��S_IFBLK�S_IFCHRr#rrr)r�r�rr�r8r8r9r�	s
�zTarFile.makedevcCs�zb|��r0tj�|�r t�|�t�|j|�n0tj�|j�rNt�	|j|�n|�
|�|�|�WnDty�z|�
|�|�|�Wnt
y�td��Yn0Yn0dS)Nz%unable to resolve link inside archive)rrzr%�lexists�unlink�symlinkrr�r�linkrr�symlink_exceptionr�r
rr8r8r9r�	s"
��zTarFile.makelinkcCs�ttd�r�t��dkr�|j}|j}|s�ztrB|jrBt�|j�d}WntyVYn0zt	rt|j
rtt	�|j
�d}Wnty�Yn0|dur�d}|dur�d}z4|��r�ttd�r�t�
|||�nt�|||�Wnty�td��Yn0dS)N�geteuidrr$r;�lchownzcould not change owner)rrzr+r*r)r�r,Zgetgrnamr�r�r+�getpwnamrr,rr�r
)r�r�rr��g�ur8r8r9r�	s0

z
TarFile.chowncCs@|jdurdSzt�||j�Wnty:td��Yn0dS)Nzcould not change mode)r�rzrr�r
rr8r8r9r
s
z
TarFile.chmodcCsT|j}|durdSttd�s dSzt�|||f�WntyNtd��Yn0dS)Nrz"could not change modification time)r(rrzrr�r
)r�r�rr(r8r8r9r
s
z
TarFile.utimecCsl|�d�|jdur$|j}d|_|S|j|j��krZ|j�|jd�|j�d�sZtd��d}z|j�	|�}W�qJt
y�}zD|jr�|�dd|j|f�|jt
7_WYd}~q^WYd}~�qJd}~0t�yD}z`|j�r|�dd|j|f�|jt
7_WYd}~q^n|jdk�r.tt|���WYd}~�qJd}~0t�yj|jdk�rftd��Yn�t�y�}z$|jdk�r�tt|���WYd}~n�d}~0t�y�}ztt|���WYd}~nvd}~0t�yB}zTz.ddl}t||j��rtd|����n|�Wnt�y,|�Yn0WYd}~n
d}~00�qJq^|du�rb|j�|�nd	|_|S)
NZrar#rYr$z0x%X: %srz
empty filezzlib error: T)r�r�r�r�r�r�r]rr�rbrsr�r�r�rKr:rqrrrt�	Exceptionr�r7r�r�r�r�r�)r��mr�r�r�r8r8r9rl$
sZ

""   
zTarFile.nextc	Cs�|��}d}|durFz|�|�}Wnty8d}Yn0|d|�}|rVtj�|�}t|�D]D}|rx|j|jkr^d}q^|r�tj�|j�}n|j}||kr^|Sq^|r�t|��dS)NFT)	r��indexr0rzr%�normpath�reversedr�r�)	r�r�r��	normalizer�Zskippingr2r�member_namer8r8r9r�c
s,

zTarFile._getmembercCs|��}|durqqd|_dSr�)rlr�r�r8r8r9r��
sz
TarFile._loadcCs:|jrtd|jj��|dur6|j|vr6td|j��dS)Nz%s is closedzbad operation for mode %r)r�r�r�rnr�)r�r�r8r8r9r��
szTarFile._checkcCs`|��r.d�tdtj�|j�|jf��}d}n
|j}|}|j||dd�}|dur\t	d|��|S)Nr�T)r�r5zlinkname %r not found)
rr�r�rzr%rr�rr�r�)r�r�r�limitrr8r8r9r�
s zTarFile._find_link_targetccs�|jr|jEdHdSd}|jdur:|��}|d7}|V|t|j�krT|j|}n"|jsr|��}|svd|_dSndS|d7}|Vq:dS)Nrr#T)r�r�r�rlr2)r�r2r�r8r8r9�__iter__�
s$
zTarFile.__iter__cCs||jkrt|tjd�dS)N��file)r�rkri�stderr)r��level�msgr8r8r9r��
s
zTarFile._dbgcCs|��|Sr�)r�r�r8r8r9�	__enter__�
szTarFile.__enter__cCs,|dur|��n|js"|j��d|_dSr�)r�r�r�r�)r�rr'�	tracebackr8r8r9�__exit__�
s


zTarFile.__exit__)
NrwNNNNNNr"NNNN)rwN)rwNr�)rwNr�)rwNN)NNN)T)NT)N)r�N)r�T)TF)NF)N)=rnrorpr�r�r�r�rrSrr6r7rr�r�rr�r�r�r�rr�r�r�r�r�r�r�r�r�r�r|r�r�r�r	r
rrrrrrrrrrrrrrrrlr�r�r�rr8r�r>r@r8r8r8r9ras��
oZ �


c&3
�-�
 �
1!
?
(

	rcCsFz,t|d�rt|d�}nt|�}|��WdSty@YdS0dS)Nr])r�TF)rrr�r)r�r�r8r8r9r�
s
rc	Cs`ddl}d}|j|d�}|jdddddd	�|jd
dtdd
�|jdd�}|jddddd�|jdddddd�|jdddddd�|jdd dd!d�|��}|jr�|jdur�|�d"d#�|j	du�rJ|j	}t
|��r4t|d$��*}|��t
|��tjd%�Wd�n1�s0Y|j�rFt
d&�|��n|�d"d'�|���n|jdu�r�|j}t
|��r�t�|d(��}|j|jd)�Wd�n1�s�0Yn|�d"d'�|���n�|jdu�r�t|j�d"k�r�|jd}tj}n,t|j�d*k�r|j\}}n|�d"|���t
|��r�t�|d(�� }|j||jd+�Wd�n1�sR0Y|j�r�|d,k�rzd-�|�}	nd.�||�}	t
|	�n|�d"d'�|��n�|jdu�r\|j�d�}
tj�|
�\}}d/d/d0d0d1d1d1d1d2�}
||
v�r�d3|
|nd4}|j}t�|
|��&}|D]}|�|��qWd�n1�s<0Y|j�r\t
d5�|
��dS)6Nrz3A simple command-line interface for tarfile module.)�descriptionz-vz	--verbose�
store_trueFzVerbose output)�action�default�helpz--filterz<filtername>zFilter for extraction)�metavar�choicesrET)Zrequiredz-lz--list�	<tarfile>zShow listing of a tarfile)rFrEz-ez	--extract�+)rHz<output_dir>zExtract tarfile into target dir)�nargsrFrEz-cz--create)z<name>z<file>zCreate tarfile from sourcesz-tz--testzTest if a tarfile is validr#z&--filter is only valid for extraction
rwr9z{!r} is a tar archive.z{!r} is not a tar archive.
r�)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.tb2zw:rxz{!r} file created.)�argparse�ArgumentParser�add_argumentr�Zadd_mutually_exclusive_group�
parse_argsr�r
�exit�testrrr�rkrir;r�rSr|rr2rz�curdirZformat_helpr	Zcreate�popr%�splitextr�)rKrA�parserrt�argsr_r�ZtfrQr=Ztar_namer~ZextZcompressionsZtar_modeZ	tar_files�	file_namer8r8r9�main�
s���
�
�
�
�
2
0

0
�
�
.rW�__main__)T)l�version�
__author__�__credits__�builtinsrr�rirzr�rZr�r�rVr�re�warningsr�r�r��AttributeError�NotImplementedErrorr*r��	NameError�__all__r3r�r�r0r+r-r,rBrrVr�r�rDrErr�ZCONTTYPEr3r2rWr<r>rer
rrrrhr�rZr�rwr8rIr�r�r�getfilesystemencodingr:r?rNrTrXr[rlr0rr
rrr	rrqrrrsrKrtrur��objectr�r��BufferedReaderr�r�r�r�r�r�r�rrrr
r�r�compilerrrrrrWrnr8r8r8r9�<module> s

	����
sh

?�
_


?>