Server : LiteSpeed
System : Linux server51.dnsbootclub.com 4.18.0-553.62.1.lve.el8.x86_64 #1 SMP Mon Jul 21 17:50:35 UTC 2025 x86_64
User : nandedex ( 1060)
PHP Version : 8.1.33
Disable Function : NONE
Directory :  /opt/cppython/lib/python3.8/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]


Current File : //opt/cppython/lib/python3.8/__pycache__/tarfile.cpython-38.opt-2.pyc
U

>��g-��@sdZdZdZddlmZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZzddlZWnek
r�dZYnXzddlZWnek
r�dZYnXeefZzeef7ZWnek
r�YnXdddd	d
ddd
dddddddgZdZdZedZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%d Z&d!Z'd"Z(d#Z)d$Z*d%Z+d&Z,d'Z-d(Z.d)Z/dZ0d*Z1d+Z2e2Z3e!e"e#e$e'e(e)e%e&e*e+e,fZ4e!e"e)e,fZ5e*e+e,fZ6d,Z7d-d.d/d0hZ8e9e9e9e:e:e:d1�Z;ej<d2k�r�d3Z=ne�>�Z=d4d5�Z?d6d7�Z@d8d9�ZAd:e3fd;d<�ZBd=d>�ZCdedfd?d@�ZDdAdB�ZEGdCd	�d	eF�ZGGdDd
�d
eG�ZHGdEd
�d
eG�ZIGdFd�deG�ZJGdGd�deG�ZKGdHd�deG�ZLGdIdJ�dJeL�ZMGdKdL�dLeL�ZNGdMdN�dNeL�ZOGdOdP�dPeL�ZPGdQdR�dReL�ZQGdSdT�dT�ZRGdUdV�dV�ZSGdWdX�dXeT�ZUGdYdZ�dZeT�ZVGd[d\�d\ejW�ZXGd]d^�d^eG�ZYGd_d`�d`eY�ZZGdadb�dbeY�Z[Gdcdd�ddeY�Z\Gdedf�dfeY�Z]Gdgdh�dheY�Z^dydjdk�Z_dldm�Z`dndo�Zadpdq�Zbe`eaebdr�ZceT�ZdGdsd�deT�ZeGdtd�deT�Zfdud�ZgefjZdvdw�Zheidxk�r�eh�dS)zz0.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�gnamer%r&r+r,)Zatime�ctimer(r)r*r'�nt�utf-8cCs8|dkrtd��|�||�}|d|�|t|�tS)Nzmetadata cannot contain None)�
ValueError�encode�len�NUL)�s�length�encoding�errors�r8�&/opt/cppython/lib/python3.8/tarfile.py�stn�sr:cCs*|�d�}|dkr|d|�}|�||�S)Nr���)�find�decode)r4r6r7�pr8r8r9�nts�s
r?cCs�|ddkrbd}tt|�d�D]}|dK}|||d7}q |ddkr�dt|�d|}n@z"t|dd�}t|��p|d	d�}Wntk
r�td
��YnX|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�struct�unpack_from)�bufZunsigned_chksumZ
signed_chksumr8r8r9�calc_chksums�s	rYc	Cs�|pd}|dkrdS|dkr.t�|||�dSt||�\}}t|�D],}|�|�}t|�|krf|d��|�|�qD|dkr�|�|�}t|�|kr�|d��|�|�dS)Ni@r�unexpected end of data)�shutil�copyfileobj�divmodrH�readr2�write)	�src�dstr5�	exception�bufsize�blocks�	remainder�brXr8r8r9r\�s$


r\cCs8ttjdd�}|dk	r(|�|d��|�}t|dd�dS)Nr6�backslashreplace� )�end)�getattr�sys�stdoutr1r=�print)r4r6r8r8r9�_safe_printsrnc@seZdZdS)rN��__name__�
__module__�__qualname__r8r8r8r9rsc@seZdZdS)r
Nror8r8r8r9r
sc@seZdZdS)rNror8r8r8r9rsc@seZdZdS)rNror8r8r8r9rsc@seZdZdS)r	Nror8r8r8r9r	sc@seZdZdS)rNror8r8r8r9rsc@seZdZdS)�EmptyHeaderErrorNror8r8r8r9rs srsc@seZdZdS)�TruncatedHeaderErrorNror8r8r8r9rt#srtc@seZdZdS)�EOFHeaderErrorNror8r8r8r9ru&sruc@seZdZdS)rKNror8r8r8r9rK)srKc@seZdZdS)�SubsequentHeaderErrorNror8r8r8r9rv,srvc@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�hasattrr{r�fd)�self�name�moder8r8r9�__init__9s��

z_LowLevelFile.__init__cCst�|j�dS�N)r|�closer��r�r8r8r9r�Bsz_LowLevelFile.closecCst�|j|�Sr�)r|r^r��r�r'r8r8r9r^Esz_LowLevelFile.readcCst�|j|�dSr�)r|r_r��r�r4r8r8r9r_Hsz_LowLevelFile.writeN)rprqrrr�r�r^r_r8r8r8r9rw3s	rwc@sneZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
ddd�Zdd�Zdd�Z
dd�ZdS)�_Streamc	Cs�d|_|dkrt||�}d|_|dkr6t|�}|��}|p<d|_||_||_||_||_d|_	d|_
d|_�zL|dkr�zddl}Wnt
k
r�td��YnX||_|�d�|_|d	kr�|��|j|_n|��n�|d
k�r:zddl}Wnt
k
�r
td��YnX|d	k�r.d|_|��|_t|_n
|��|_n||dk�r�zddl}Wnt
k
�rntd
��YnX|d	k�r�d|_|��|_|j|_n
|��|_n|dk�r�td|��Wn&|j�s�|j��d|_�YnXdS)NTF�*��r�gzzzlib module is not availablery�bz2�bz2 module is not available�xz�lzma module is not available�tar�unknown compression type %r) �_extfileobjrw�_StreamProxy�getcomptyper�r��comptype�fileobjrcrX�pos�closed�zlib�ImportErrorr�crc32�crc�
_init_read_gz�errorrb�_init_write_gzr��dbuf�BZ2Decompressor�cmp�OSError�
BZ2Compressor�lzma�LZMADecompressor�	LZMAError�LZMACompressorr�)	r�r�r�r�r�rcr�r�r�r8r8r9r�Vsl












z_Stream.__init__cCst|d�r|js|��dS)Nr�)r�r�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��compressobj�DEFLATED�	MAX_WBITS�
DEF_MEM_LEVELr�rV�packrI�time�_Stream__writer��endswithr|r%�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�)rXr2rcr�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|j
d@��W5|js�|j��XdS)NTrzr�r�r�r�l��)r�r�r�r�r�r�rXr��flushr_rVr�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��
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]rcrHr^r	)r�r�rdrerMr8r8r9�seek�sz_Stream.seekcCs |�|�}|jt|�7_|Sr�)�_readr�r2)r�r'rXr8r8r9r^
s
z_Stream.readcCs�|jdkr|�|�St|j�}|jg}||kr�|jrB|j}d|_n|j�|j�}|sVq�z|j�	|�}Wn|j
k
r�td��YnX|�|�|t|�7}q&d�
|�}||d�|_|d|�S)Nr�r�zinvalid compressed data)r�r�r2r�rXr�r^rcr��
decompressrbr�append�join�r�r'�c�trXr8r8r9r�s(




z
_Stream._readcCsjt|j�}|jg}||krF|j�|j�}|s.qF|�|�|t|�7}qd�|�}||d�|_|d|�S)Nr�)r2rXr�r^rcr�r�r�r8r8r9Z__read,s


z_Stream.__readN)r)rprqrrr�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^�	BLOCKSIZErX)r�r�r8r8r9r�Bsz_StreamProxy.__init__cCs|jj|_|jSr�)r�r^rXr�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�)rX�
startswithr�r8r8r9r�Js$z_StreamProxy.getcomptypecCs|j��dSr�)r�r�r�r8r8r9r�Tsz_StreamProxy.closeN)rprqrrr�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|_|dkr>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'�positionrjr�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
|dkr|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#rZ)r'r�r�r�r�r2r�r�r^rr3)	r�r'rX�data�start�stopr�r5rfr8r8r9r^�s,

z_FileInFile.readcCs&|�t|��}||dt|��<t|�Sr�)r^r2)r�rfrXr8r8r9�readinto�sz_FileInFile.readintocCs
d|_dSr�)r�r�r8r8r9r��sz_FileInFile.close)N)N)rprqrrr�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__�rprqrrr��
__classcell__r8r8r�r9r��sr�c@seZdZdS)�FilterErrorNror8r8r8r9r��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}|dk	r�|d@}|r�|�
�s�|��r�|d@s�|dM}|dO}n|��s�|��r�d}nt|��||jkr�||d<|�r�|jdk	�rd|d<|jdk	�r*d|d	<|jdk	�r>d|d
<|jdk	�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�r|r%�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$|jf|ddi��S|S)NF�deep�rr��rrrr8r8r9�
tar_filter2srcCs(t||d�}|r$|jf|ddi��S|S)NTrFrrr8r8r9�data_filter8sr)Z
fully_trustedr�r�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�typerr+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�REGTYPErrr+r,rrr�r�r�r�r�r�r8r8r9r�ns"zTarInfo.__init__cCs|jSr��r�r�r8r8r9r%�szTarInfo.pathcCs
||_dSr�r!r r8r8r9r%�scCs|jSr��rr�r8r8r9r&�szTarInfo.linkpathcCs
||_dSr�r")r�rr8r8r9r&�scCsd|jj|jt|�fS)Nz<%s %r at %#x>)r�rpr��idr�r8r8r9�__repr__�szTarInfo.__repr__T)
r�r(r�rr)r*r+r,r�_KEEPc
Cs�|	rt�|�}n
t�|�}||
k	r(||_||
k	r6||_||
k	rD||_||
k	rR||_||
k	r`||_||
k	rn||_||
k	r|||_||
k	r�||_	|Sr�)
�copy�deepcopyr�r(r�rr)r*r+r,)r�r�r(r�rr)r*r+r,rr%�resultr8r8r9r��s(
zTarInfo.replacecCs�|jdkrd}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(rrrr+r,rrrr�r)r�r�r)r*r'r(rrrr+r,rr�DIRTYPEr�)r�r��infor8r8r9�get_info�s(

�zTarInfo.get_info�surrogateescapecCsz|��}|��D]\}}|dkrtd|��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�magicrzlinkname 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)Nr4r�rr�)
�	GNU_MAGICr2r1r7�_create_gnu_long_header�GNUTYPE_LONGLINKr8�GNUTYPE_LONGNAMEr:r)r�r+r6r7rXr8r8r9r0�szTarInfo.create_gnu_headerc
	Cs*t|d<|j��}ddtfddtfddfD]j\}}}||kr>q*z||�dd	�Wn$tk
rv||||<Yq*YnXt||�|kr*||||<q*d
D]`\}}||kr�d||<q�||}d|kr�d|d
kr�nn
t|t	�r�t
|�||<d||<q�|�r|�|t|�}	nd}	|	|�
|tdd�S)Nr4r�r%rr&)r+r+� )r,r,r?rDrE))r)rB)r*rB)r'�)r(r@rrBr#r�r�)r6rr&r8r7r1�UnicodeEncodeErrorr2�
isinstance�float�str�_create_pax_generic_header�XHDTYPEr:r
)
r�r+r6rr�Zhnamer5rR�valrXr8r8r9r1�s8
�
*
zTarInfo.create_pax_headercCs|�|td�S)Nr/)rE�XGLTYPE)�clsrr8r8r9�create_pax_global_header0sz TarInfo.create_pax_global_headercCs~|�d�}tdt|��D]T}d�|d|��}d�||d��}t|�||��tkrt|�||��tkrqvqtd��||fS)Nrr#zname is too long)�splitrHr2r�r1�
LENGTH_PREFIXr8r0)r�r�r6r7Z
componentsrMr5r8r8r9r96s
�zTarInfo._posix_split_namecCs�|�d�ttfk}|r@t|�dd�d|�}t|�dd�d|�}ntdd||�}tdd||�}|�dt�}|dkrxtd��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|�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�r)r)r*r'r@r(s        rr4r+r?r,r5rz%dsr�i����z%06orDi����)�get�CHRTYPE�BLKTYPErTr:rr0r6rVr�r�r�rYrO)r+rSr6r7Zhas_device_fieldsrrZfiletype�partsrXrr8r8r9r:Fs:
�&zTarInfo._create_headercCs.tt|�t�\}}|dkr*|t|t7}|S)Nr)r]r2r�r3)�payloadrdrer8r8r9�_create_payloadpszTarInfo._create_payloadcCsR|�||�t}i}d|d<||d<t|�|d<t|d<|�|t||�|�|�S)Nz
././@LongLinkr�rr'r4)r1r3r2r;r:r
rR)rIr�rr6r7r+r8r8r9r<zs�zTarInfo._create_gnu_long_headerc	Cs2d}|��D]8\}}z|�dd�Wqtk
rBd}YqFYqXqd}|rV|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'r4r�)
r.r1rAr2rDrOr6r:r
rR)rIrrr6�binary�keywordr2�records�lrLr>r+r8r8r9rE�s<

(�z"TarInfo._create_pax_generic_headerc	Csvt|�dkrtd��t|�tkr(td��|�t�tkr>td��t|dd��}|t|�krbt	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�r8d}g}td�D]l}	z0t|||d��}
t||d|d��}Wntk
�r�Y�qYnX|�|
|f�|d7}�q�t|d�}t|dd��}
|||
f|_ |�!��rP|j�"d�|_|�rr|jt#k�rr|d|j|_|S)Nrzempty headerztruncated headerzend of file header��zbad checksumr�l�t�|��ii	i)iIiQiYi�ri�r�r@�i�i�i�)$r2rsr�rt�countr3rurNrYrKr?r�r�r)r*r'r(rrrr+r,rr�AREGTYPEr�r*�GNUTYPE_SPARSErHr0r��boolrr
�rstrip�	GNU_TYPES)rIrXr6r7r�objr5r��structsrMr��numbytes�
isextended�origsizer8r8r9�frombuf�sZ
zTarInfo.frombufcCs8|j�t�}|�||j|j�}|j��t|_|�|�Sr�)	r�r^r�rmr6r7r�r��_proc_member)rIr�rXrhr8r8r9�fromtarfile�szTarInfo.fromtarfilecCsT|jttfkr|�|�S|jtkr,|�|�S|jtttfkrF|�	|�S|�
|�SdSr�)rr>r=�
_proc_gnulongrd�_proc_sparserFrH�SOLARIS_XHDTYPE�	_proc_pax�
_proc_builtin)r�r�r8r8r9rns



zTarInfo._proc_membercCsR|j��|_|j}|��s$|jtkr4||�|j�7}||_|�	|j
|j|j�|Sr�)
r�r�r�rr�SUPPORTED_TYPES�_blockr'r��_apply_pax_inforr6r7)r�r�r�r8r8r9rtszTarInfo._proc_builtincCs�|j�|�|j��}z|�|�}Wntk
r>td��YnX|j|_|jt	krft
||j|j�|_
n|jtkr�t
||j|j�|_|S)N� missing or bad subsequent header)r�r^rvr'rorrvr�rr>r?r6r7r�r=r)r�r�rX�nextr8r8r9rp0s

zTarInfo._proc_gnulongc
	Cs�|j\}}}|`|r�|j�t�}d}td�D]n}z0t|||d��}t||d|d��}	Wntk
rzYq�YnX|r�|	r�|�||	f�|d7}q,t|d�}q||_	|j�
�|_|j|�|j
�|_||_
|S)Nr�r@rai�)rr�r^r�rHrNr0r�rer�r�r�rvr'r�)
r�r�rirkrlrXr�rMr�rjr8r8r9rqFs(
zTarInfo._proc_sparsecCs.|j�|�|j��}|jtkr&|j}n
|j��}t�	d|�}|dk	rX|�
d��d�|d<|�d�}|dkrr|j
}nd}t�d�}d}|�||�}|s��q6|��\}	}
t|	�}	|	dkr�td��||�d	�d|�d�|	d�}|�|
dd|j�}
|
tk�r|�|||j
|j�}n|�|dd|j�}|||
<||	7}q�z|�|�}Wntk
�rbtd
��YnXd|k�r||�||�nHd|k�r�|�|||�n.|�d
�dk�r�|�d�dk�r�|�|||�|jttfk�r*|� ||j
|j�|j!|_!d|k�r*|j"}
|�#��s|jt$k�r$|
|�|j�7}
|
|_!|S)Ns\d+ hdrcharset=([^\n]+)\nr#r/�
hdrcharsetZBINARYs(\d+) ([^=]+)=rrGr$rx�GNU.sparse.map�GNU.sparse.sizezGNU.sparse.major�1zGNU.sparse.minorrFr')%r�r^rvr'rrHrr&�re�search�groupr=rMr6�compile�match�groupsrIrKrir��_decode_pax_fieldr7�PAX_NAME_FIELDSrorrv�_proc_gnusparse_01�_proc_gnusparse_00�_proc_gnusparse_10rFrrrwr�r�rru)r�r�rXrr�r{r6Zregexr�r5rWr2ryr�r8r8r9rsbsh



$	
�
�
�


 
zTarInfo._proc_paxcCshg}t�d|�D]}|�t|�d���qg}t�d|�D]}|�t|�d���q:tt||��|_dS)Ns\d+ GNU.sparse.offset=(\d+)\nr#s\d+ GNU.sparse.numbytes=(\d+)\n)r�finditerr�rIr��list�zipr�)r�ryrrXZoffsetsr�rjr8r8r9r��szTarInfo._proc_gnusparse_00cCs@dd�|d�d�D�}tt|ddd�|ddd���|_dS)NcSsg|]}t|��qSr8)rI)�.0�xr8r8r9�
<listcomp>�sz.TarInfo._proc_gnusparse_01.<locals>.<listcomp>r|�,r$r#)rKr�r�r�)r�ryrr�r8r8r9r��szTarInfo._proc_gnusparse_01cCs�d}g}|j�t�}|�dd�\}}t|�}t|�|dkrtd|krT||j�t�7}|�dd�\}}|�t|��q,|j��|_t	t
|ddd�|ddd���|_dS)NrUr#r$)r�r^r�rKrIr2r�r�r�r�r�r�)r�ryrr��fieldsr�rXZnumberr8r8r9r��szTarInfo._proc_gnusparse_10c	Cs�|��D]�\}}|dkr&t|d|�q|dkr@t|dt|��q|dkrZt|dt|��q|tkr|tkr�zt||�}Wntk
r�d}YnX|dkr�|�d�}t|||�q|��|_dS)NzGNU.sparse.namer%r}r'zGNU.sparse.realsizerr)	r.�setattrrI�
PAX_FIELDS�PAX_NUMBER_FIELDSr0rfr&r)r�rr6r7rWr2r8r8r9rw�s"

zTarInfo._apply_pax_infocCs4z|�|d�WStk
r.|�||�YSXdS)NrE)r=�UnicodeDecodeError)r�r2r6Zfallback_encodingZfallback_errorsr8r8r9r�szTarInfo._decode_pax_fieldcCs"t|t�\}}|r|d7}|tS)Nr#)r]r�)r�rbrdrer8r8r9rv
szTarInfo._blockcCs
|jtkSr�)r�
REGULAR_TYPESr�r8r8r9rsz
TarInfo.isregcCs|��Sr�)rr�r8r8r9�isfileszTarInfo.isfilecCs
|jtkSr�)rr*r�r8r8r9r
sz
TarInfo.isdircCs
|jtkSr�)r�SYMTYPEr�r8r8r9rsz
TarInfo.issymcCs
|jtkSr�)r�LNKTYPEr�r8r8r9r	#sz
TarInfo.islnkcCs
|jtkSr�)rrNr�r8r8r9�ischr'sz
TarInfo.ischrcCs
|jtkSr�)rrOr�r8r8r9�isblk+sz
TarInfo.isblkcCs
|jtkSr�)r�FIFOTYPEr�r8r8r9�isfifo/szTarInfo.isfifocCs
|jdk	Sr�)r�r�r8r8r9�issparse3szTarInfo.issparsecCs|jtttfkSr�)rrNrOr�r�r8r8r9�isdev6sz
TarInfo.isdev)r�)3rprqrr�dict�	__slots__r��propertyr%�setterr&r$r%r�r,rrr3r/r0r1�classmethodrJr9�staticmethodr:rRr<rErmrornrtrprqrsr�r�r�rwr�rvrr�r
rr	r�r�r�r�r�r8r8r8r9rKs��




�
1

)
	

2
>

h	c
@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#Nryr-c
Cs�ddddd�}||krtd��||_|||_|sh|jdkrTtj�|�sTd|_d|_t||j�}d	|_n@|dkr�t|d
�r�t	|j
ttf�r�|j
}t|d�r�|j|_d|_|r�tj�
|�nd|_
||_|dk	r�||_|dk	r�||_|dk	r�||_|dk	r�||_|dk	�r||_|	|_|
dk	�r0|jtk�r0|
|_ni|_|dk	�rF||_|dk	�rV||_|
|_d	|_g|_d	|_|j��|_i|_z�|jd
k�r�d|_ |�!�|_ |jdk�r2|j�"|j�z|j�#|�}|j�$|�WnXt%k
�r�|j�"|j�Y�q2Yn0t&k
�r,}zt't|���W5d}~XYnX�q�|jdk�r|d|_|j�r||j�(|j�)��}|j�*|�|jt+|�7_Wn&|j�s�|j�,�d|_�YnXdS)N�rbzr+b�wb�xb�ry�arzr��!mode must be 'r', 'a', 'w' or 'x'r�rzFr�r�Try�r�rzr�)-r0r��_moder|r%�exists�	bltn_openr�r�rBr�rDrO�abspathr�rSr��dereference�ignore_zerosr6r7rr�debug�
errorlevel�copybufsizer��members�_loadedr�r��inodes�firstmemberryr�ror�rurrrJr&r_r2r�)r�r�r�r�rSr�r�r�r6r7rr�r�r�Zmodes�erXr8r8r9r�Ws�
�





"
zTarFile.__init__c

s�|s|std��|dkr��fdd�}t�j|d�D]j}t��j|�}|dk	rV|��}	z||d|f|�WSttfk
r�|dk	r�|�|	�Yq2Yq2Xq2td���nd|k�r|�dd	�\}
}|
p�d}
|p�d
}|�jkr�t��j|�}ntd|��|||
|f|�Sd|k�r�|�dd	�\}
}|
�p.d}
|�p8d
}|
d
k�rLtd��t	||
|||�}z�||
|f|�}Wn|�
��YnXd|_|S|dk�r��j|||f|�Std��dS)Nznothing to open)ry�r:*cs�j|dkS)N�taropen)�	OPEN_METH)r��rIr8r9�not_compressed�sz$TarFile.open.<locals>.not_compressed)�keyryz%file could not be opened successfully�:r#r�r��|rxzmode must be 'r' or 'w'Fr�zundiscernible mode)
r0�sortedr�rjr�rrr�rKr�r�r�r�)
rIr�r�r�rc�kwargsr�r��funcZ	saved_pos�filemode�streamr�r8r�r9r�sP%







zTarFile.opencKs |dkrtd��||||f|�S)Nr�r�)r0)rIr�r�r�r�r8r8r9r�!szTarFile.taropenr�cKs�|dkrtd��zddlm}Wntk
r<td��YnXz|||d||�}Wn.tk
r�|dk	r||dkr|td���YnXz|j|||f|�}WnBtk
r�|��|dkr�td���Yn|���YnXd	|_	|S)
N�ryrzr��mode must be 'r', 'w' or 'x'r)�GzipFilezgzip module is not availablerfryr�F)
r0�gzipr�r�rr�rr�r�r�)rIr�r�r��
compresslevelr�r�r�r8r8r9�gzopen)s0zTarFile.gzopenc	Ks�|dkrtd��zddlm}Wntk
r<td��YnX||pF|||d�}z|j|||f|�}WnFttfk
r�|��|dkr�t	d���Yn|���YnXd	|_
|S)
Nr�r�r)�BZ2Filer�)r�ryznot a bzip2 fileF)r0r�r�r�rr�r��EOFErrorr�rr�)rIr�r�r�r�r�r�r�r8r8r9�bz2openJs&zTarFile.bz2openc		Ks�|dkrtd��zddlm}m}Wntk
r@td��YnX||pJ|||d�}z|j|||f|�}WnF|tfk
r�|��|dkr�t	d���Yn|���YnXd	|_
|S)
Nr�r�r)�LZMAFiler�r�)�presetryznot an lzma fileF)r0r�r�r�r�rr�r�r�rr�)	rIr�r�r�r�r�r�r�r�r8r8r9�xzopenfs&zTarFile.xzopenr�r�r�r�)r�r�r�r�cCs�|jr
dSd|_z`|jdkrn|j�ttd�|jtd7_t	|jt
�\}}|dkrn|j�tt
|�W5|js�|j��XdS)NTr�r$r)r�r�r�r�r�r_r3r�r�r]�
RECORDSIZE)r�rdrer8r8r9r��s
z
TarFile.closecCs"|�|�}|dkrtd|��|S)Nzfilename %r not found)�
_getmember�KeyError)r�r�r�r8r8r9�	getmember�s
zTarFile.getmembercCs|��|js|��|jSr�)�_checkr��_loadr�r�r8r8r9�
getmembers�szTarFile.getmemberscCsdd�|��D�S)NcSsg|]
}|j�qSr8r!)r�r�r8r8r9r��sz$TarFile.getnames.<locals>.<listcomp>)r�r�r8r8r9�getnames�szTarFile.getnamescCs^|�d�|dk	r|j}|dkr$|}tj�|�\}}|�tjd�}|�d�}|��}||_	|dkr�|j
stt�|�}q�t�|�}nt�
|���}d}|j}t�|�r�|j|jf}	|j
s�|jdkr�|	|jkr�||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|_/Wnt0k
�r�YnXt1�rzt1�2|j&�d|_3Wnt0k
�rYnX|
tt!fk�rZt4td��rZt4td��rZt�5|j6�|_7t�8|j6�|_9|S)N�awxrr�r#r�major�minor):r�r�r|r%�
splitdriver�rrr�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_ISCHRrN�S_ISBLKrOr��st_uidr)�st_gidr*�st_sizer'�st_mtimer(rr�pwd�getpwuidr+r��grp�getgrgidr,r�r��st_rdevrr�r)r�r��arcnamer�Zdrvr�ZstatresrZstmd�inoderr8r8r9�
gettarinfo�s�	


��

zTarFile.gettarinfoT)r�cCs*|��|dkr|}|D�]
}|r�|jdkr6td�ntt�|j��td|jpT|j|jp^|jf�|�	�sv|�
�r�tdd|j|jf�ntd|j
�|jdkr�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�rr�z-> zlink to )r�r�rnr�r�r+r)r,r*r�r�rrr'r(r��	localtimer�r
rrr	rm)r��verboser�r�r8r8r9r� s8



��

�

zTarFile.list��filterc	Cs6|�d�|dkr|}|jdk	rFtj�|�|jkrF|�dd|�dS|�d|�|�||�}|dkrz|�dd|�dS|dk	r�||�}|dkr�|�dd|�dS|��r�t|d��}|�	||�W5QRXn`|�
��r(|�	|�|�r2tt�|��D]*}|j
tj�||�tj�||�||d�q�n
|�	|�dS)	Nr�r$ztarfile: Skipped %rr#ztarfile: Unsupported type %r�tarfile: Excluded %rr�r�)r�r�r|r%r��_dbgr�rr��addfiler
r��listdir�addr�)r�r�r��	recursiver�r��fr8r8r9rFs8



�
zTarFile.addcCs�|�d�t�|�}|�|j|j|j�}|j�|�|jt	|�7_|j
}|dk	r�t||j|j|d�t
|jt�\}}|dkr�|j�tt|�|d7}|j|t7_|j�|�dS)Nr�)rcrr#)r�r&r3rSr6r7r�r_r�r2r�r\r'r]r�r3r�r�)r�r�r�rXrcrdrer8r8r9rys

zTarFile.addfilecCsr|dkr0|j}|dkrtSt|t�r,td��|St|�r<|Sz
t|WStk
rltd|�d��d�YnXdS)NzrString names are not supported for TarFile.extraction_filter. Use a function such as tarfile.data_filter directly.zfilter z
 not found)	�extraction_filterrrBrD�	TypeError�callable�_NAMED_FILTERSr�r0)r�r�r8r8r9�_get_filter_function�s
�
zTarFile._get_filter_function�.)�
numeric_ownerr�cCs�g}|�|�}|dkr|}|D]F}|�|||�}|dkr:q|��rL|�|�|j|||��|d�q|jdd�dd�|D]n}tj�||j	�}	z,|j
||	|d�|�||	�|�||	�Wq|t
k
r�}
z|�|
�W5d}
~
XYq|Xq|dS)N��	set_attrsrcSs|jSr�r!)r�r8r8r9�<lambda>�r�z$TarFile.extractall.<locals>.<lambda>T)r��reverse)r)r
�_get_extract_tarinfor
r��_extract_one�sortr|r%r�r��chown�utime�chmodr
�_handle_nonfatal_error)r�r%r�rr�Zdirectories�filter_functionrr��dirpathr�r8r8r9�
extractall�s,

�zTarFile.extractallr�cCs4|�|�}|�|||�}|dk	r0|�||||�dSr�)r
rr)r�rr%rrr�rr�r8r8r9�extract�s
zTarFile.extractc
Cs�t|t�r|�|�}n|}|}z|||�}WnZttfk
r\}z|�|�W5d}~XYn,tk
r�}z|�|�W5d}~XYnX|dkr�|�dd|j	�dS|�
�r�t�|�}tj
�||j�|_|S)Nr$r�)rBrDr�r�r��_handle_fatal_errorr
rrr�r	r&r|r%r�rr)r�rrr%r�Z
unfilteredr�r8r8r9r�s"

zTarFile._get_extract_tarinfoc
Cs�|�d�z"|j|tj�||j�||d�WnVtk
rX}z|�|�W5d}~XYn,tk
r�}z|�	|�W5d}~XYnXdS)Nryr
)
r��_extract_memberr|r%r�r�r�rr
r)r�r�r%rr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|jdkr6|�dd|j�qj|�dd|j|jf�n|�ddt|�j|f�dS)Nrr#rztarfile: %s %rztarfile: %s %s)r�rBr��filenamer�strerrorrrprr8r8r9r	s


zTarFile._handle_fatal_errorcCs�|�d�t|t�r |�|�}n|}|��s6|jtkrB|�||�S|��sR|�	�rzt|j
t�rhtd��q~|�
|�|��SndSdS)Nryz'cannot extract (sym)link as file object)r�rBrDr�rrru�
fileobjectr	rr�r�r	�extractfile�_find_link_target)r�rr�r8r8r9r#	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&|jtk�r|�||�n|�||�|�rP|�|||�|�	��sP|�||�|�||�dS)Nrr#z%s -> %s)rfr�r|rr%r
r��makedirsr	rrr�rr�makefiler
�makedirr��makefifor�r��makedev�makelinkrru�makeunknownrrr)r�r��
targetpathrrZ	upperdirsr8r8r9r:	s4


zTarFile._extract_membercCs@z&|jdkrt�|�nt�|d�Wntk
r:YnXdS)Ni�)r�r|�mkdir�FileExistsError�r�r�r,r8r8r9r'k	s
zTarFile.makedirc	Cs�|j}|�|j�|j}t|d��b}|jdk	rn|jD]"\}}|�|�t|||t|�q4|�|j�|�	�nt|||jt|�W5QRXdS)Nr�)
r�r�r�r�r�r�r\rr'�truncate)r�r�r,�sourcerc�targetr�r'r8r8r9r&y	s


zTarFile.makefilecCs"|�||�|�dd|j�dS)Nr#z9tarfile: Unknown file type %r, extracted as regular file.)r&rrr/r8r8r9r+�	s�zTarFile.makeunknowncCs"ttd�rt�|�ntd��dS)N�mkfifozfifo not supported by system)r�r|r3r
r/r8r8r9r(�	s
zTarFile.makefifocCsjttd�rttd�std��|j}|dkr.d}|��rB|tjO}n
|tjO}t�||t�	|j
|j��dS)N�mknodr)z'special devices not supported by systemr)r�r|r
r�r�r��S_IFBLK�S_IFCHRr4r)rr)r�r�r,r�r8r8r9r)�	s
�zTarFile.makedevcCs�zb|��r0tj�|�r t�|�t�|j|�n0tj�|j�rNt�	|j|�n|�
|�|�|�WnHtk
r�z|�
|�|�|�Wnt
k
r�td��YnXYnXdS)Nz%unable to resolve link inside archive)rr|r%�lexists�unlink�symlinkrr�r�linkrr$�symlink_exceptionr�r
r/r8r8r9r*�	s"
��zTarFile.makelinkcCs�ttd�r�t��dkr�|j}|j}|s�ztrB|jrBt�|j�d}Wntk
rXYnXzt	rv|j
rvt	�|j
�d}Wntk
r�YnX|dkr�d}|dkr�d}z4|��r�ttd�r�t�
|||�nt�|||�Wntk
r�td��YnXdS)N�geteuidrr$r;�lchownzcould not change owner)r�r|r<r*r)r�r,�getgrnamr�r�r+�getpwnamrr=rr�r
)r�r�r,r�g�ur8r8r9r�	s0

z
TarFile.chowncCsB|jdkrdSzt�||j�Wntk
r<td��YnXdS)Nzcould not change mode)r�r|rr�r
r/r8r8r9r�	s
z
TarFile.chmodcCsV|j}|dkrdSttd�s dSzt�|||f�Wntk
rPtd��YnXdS)Nrz"could not change modification time)r(r�r|rr�r
)r�r�r,r(r8r8r9r�	s
z
TarFile.utimec
Cs�|�d�|jdk	r$|j}d|_|S|j|j��krZ|j�|jd�|j�d�sZtd��d}z|j�	|�}W�q�t
k
r�}z6|jr�|�dd|j|f�|jt
7_WY�q^W5d}~XY�q�tk
�r6}zR|j�r|�dd|j|f�|jt
7_WY� q^n|jdk�r&tt|���W5d}~XYn�tk
�r^|jdk�rZtd��Ynjtk
�r�}z|jdk�r�tt|���W5d}~XYn0tk
�r�}ztt|���W5d}~XYnX�q�q^|dk	�r�|j�|�nd|_|S)	NZrar#rZr$z0x%X: %srz
empty fileT)r�r�r�r�r�r�r^rr�rorur�rr�rKrDrsrtrvr�r�r�)r��mr�r�r8r8r9ry�	sJ



zTarFile.nextc	Cs�|��}d}|dk	rHz|�|�}Wntk
r:d}YnX|d|�}|rXtj�|�}t|�D]D}|rz|j|jkr`d}q`|r�tj�|j�}n|j}||kr`|Sq`|r�t|��dS)NFT)	r��indexr0r|r%�normpath�reversedr�r�)	r�r�r��	normalizer�ZskippingrCr�member_namer8r8r9r�3
s,

zTarFile._getmembercCs|��}|dkrqqd|_dSr�)ryr�r�r8r8r9r�[
sz
TarFile._loadcCs:|jrtd|jj��|dk	r6|j|kr6td|j��dS)Nz%s is closedzbad operation for mode %r)r�r�r�rpr�)r�r�r8r8r9r�e
szTarFile._checkcCs`|��r.d�tdtj�|j�|jf��}d}n
|j}|}|j||dd�}|dkr\t	d|��|S)NrT)r�rFzlinkname %r not found)
rr�r�r|r%r
r�rr�r�)r�r�r�limitrr8r8r9r$n
s zTarFile._find_link_targetccs�|jr|jEdHdSd}|jdk	r:|��}|d7}|V|t|j�krT|j|}n"|jsr|��}|svd|_dSndS|d7}|Vq:dS)Nrr#T)r�r�r�ryr2)r�rCr�r8r8r9�__iter__�
s$
zTarFile.__iter__cCs||jkrt|tjd�dS)N��file)r�rmrk�stderr)r��level�msgr8r8r9r�
s
zTarFile._dbgcCs|��|Sr�)r�r�r8r8r9�	__enter__�
szTarFile.__enter__cCs,|dkr|��n|js"|j��d|_dSr�)r�r�r�r�)r�rr2�	tracebackr8r8r9�__exit__�
s


zTarFile.__exit__)
NryNNNNNNr-NNNN)ryN)ryNr�)ryNr�)ryNN)NNN)T)NT)N)rN)r�T)TF)NF)N)=rprqrrr�r�r�r�rrSrr6r7rr�r�r"rr�r�r�rr�r�r�r�r�r�r�r�r�r�r�rrr
rrrrrrr#rr'r&r+r(r)r*rrrryr�r�r�r$rIrrOrQr8r8r8r9r;s��
oZ �


c&3
�-�
�
1!
6
(

	cCs2zt|�}|��WdStk
r,YdSXdS)NTF)rr�r)r�r�r8r8r9r�
sc	Csddl}d}|j|d�}|jdddddd	�|jd
dtdd
�|jdd�}|jddddd�|jdddddd�|jdddddd�|jdd dd!d�|��}|jr�|jdkr�|�d"d#�|j	dk	�r4|j	}t
|��rt|d$�� }|��t
|��tjd%�W5QRX|j�r0t
d&�|��n|�d"d'�|���n�|jdk	�r�|j}t
|��rxt�|d(��}|j|jd)�W5QRXn|�d"d'�|���nv|jdk	�rbt|j�d"k�r�|jd}tj}n,t|j�d*k�r�|j\}}n|�d"|���t
|��rNt�|d(��}|j||jd+�W5QRX|j�r`|d,k�r8d-�|�}	nd.�||�}	t
|	�n|�d"d'�|��n�|jdk	�r|j�d�}
tj�|
�\}}d/d/d0d0d1d1d1d1d2�}
||
k�r�d3|
|nd4}|j}t�|
|��}|D]}|�|��q�W5QRX|j�rt
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�choicesrVT)�requiredz-lz--list�	<tarfile>zShow listing of a tarfile)rWrVz-ez	--extract�+)rZz<output_dir>zExtract tarfile into target dir)�nargsrWrVz-cz--create)z<name>z<file>zCreate tarfile from sourcesz-tz--testzTest if a tarfile is validr#z&--filter is only valid for extraction
ryrJz{!r} is a tar archive.z{!r} is not a tar archive.
r�)r�r$)r%r�rz{!r} file is extracted.z+{!r} file is extracted into {!r} directory.r�r�r�)r�z.tgzz.xzz.txzz.bz2z.tbzz.tbz2z.tb2zw:rzz{!r} file created.)�argparse�ArgumentParser�add_argumentr	�add_mutually_exclusive_group�
parse_argsr�r�exit�testrrr�rmrkrLr�rSr�rr2r|�curdir�format_helprZcreate�popr%�splitextr)r]rR�parserr��argsr`r�ZtfrdrNZtar_name�_�extZcompressionsZtar_modeZ	tar_files�	file_namer8r8r9�main�
s���
�
�
�
�




�
�
rm�__main__)T)j�version�
__author__�__credits__�builtinsrr�rkr|r�r[r�r�rVr&r�warningsr�r�r��AttributeError�NotImplementedErrorr;r��	NameError�__all__r3r�r�r;r6r8r7rLrrcr�r�rNrOr*r�ZCONTTYPEr>r=rdrFrHrrr
rrrrur�rgr�r�rCrIr�r�r�getfilesystemencodingr:r?rNrTrYr\rn�	Exceptionrr
rrr	rrsrtrurKrvrwr��objectr�r��BufferedReaderr�r�r�r�r�r�r�rrrrr	r%rrrrmrpr8r8r8r9�<module> s6


�	����
sh

?�u_


F1le Man4ger