<!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>

]k                @   s  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 d d l Z Wn e k
 r d Z Z Yn Xe e f Z y e e f 7Z Wn e k
 rYn Xd 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  Z0 d Z1 d! Z2 d" Z3 e2 Z4 e" e# e$ e% e( e) e* e& e' e+ e, e- f Z5 e" e# e* e- f Z6 e+ e, e- f Z7 d# d$ d% d& d' d( d) d* f Z8 d# d$ d) d* h Z9 d+ e: d, e: d& e: d' e; d( e; d% e; i Z< e	 j= d- d. f k rd/ Z> n e j?   Z> d0 d1   Z@ d2 d3   ZA d4 d5   ZB d6 e4 d7 d8  ZC d9 d:   ZD d e d; d<  ZE d= d>   ZF d? d@   ZG GdA d   d eH  ZI GdB dC   dC eI  ZJ GdD dE   dE eI  ZK GdF dG   dG eI  ZL GdH dI   dI eI  ZM GdJ dK   dK eI  ZN GdL dM   dM eN  ZO GdN dO   dO eN  ZP GdP dQ   dQ eN  ZQ GdR dS   dS eN  ZR GdT dU   dU eN  ZS GdV dW   dW  ZT GdX dY   dY  ZU GdZ d[   d[ eV  ZW Gd\ d]   d] eV  ZX Gd^ d_   d_ e
 jY  ZZ Gd` d	   d	 eV  Z[ Gda d   d eV  Z\ Gdb dc   dc  Z] dd d
   Z^ e\ j Z de df   Z_ e` dg k re_   d S)hz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TarErrors    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gnameZatimectimentZcezutf-8c             C   s2   |  j  | |  }  |  d  |  | t |   t S)N)encodelenNUL)slengthencodingerrors r+   ,/opt/alt/python35/lib64/python3.5/tarfile.pystn   s    r-   c             C   s;   |  j  d  } | d k r+ |  d  |  }  |  j | |  S)Ns    r   )finddecode)r'   r)   r*   pr+   r+   r,   nts   s    r2   c             C   s   |  d d k r d } x: t  t |   d  D]" } | d K} | |  | d 7} q- W|  d d k r d t |   d | } nR y1 t |  d d  }  t |  j   p d	 d  } Wn t k
 r t d
   Yn X| S)Nr         r         asciistrict0zinvalid header)r3   r4   )ranger%   r2   intstrip
ValueErrorInvalidHeaderError)r'   nir+   r+   r,   nti   s    
rA   r5   c             C   s  d |  k o d | d k  n rN t  d | d t |   f d  t } n | t k r d | d |  k o d | d k  n r |  d k r t d g  } n t d g  } d | |  }  xE t | d  D]$ } | j d |  d @ |  d L}  q Wn t d	   | S)
Nr   r5   r   z%0*or7   r6   r3   r4   zoverflow in number field)bytesr;   r&   
GNU_FORMAT	bytearrayr:   insertr=   )r?   digitsformatr'   r@   r+   r+   r,   itn   s    $*9rH   c             C   sB   d t  t j d |    } d t  t j d |    } | | f S)Nr6   Z
148B8x356BZ
148b8x356b)sumstructunpack_from)bufZunsigned_chksumZsigned_chksumr+   r+   r,   calc_chksums   s    	rM   c       	      C   s   | d k r d  S| d  k r0 t  j |  |  d  Sd } t | |  \ } } xN t |  D]@ } |  j |  } t |  | k  r | d   | j |  qX W| d k r |  j |  } t |  | k  r | d   | j |  d  S)Nr      i   zunexpected end of datai @  )shutilcopyfileobjdivmodr:   readr%   write)	srcdstr(   	exceptionBUFSIZEblocks	remainderbrL   r+   r+   r,   rP      s$    rP   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)moder[   r+   r+   r,   r_      s    	
r_   c             C   sP   t  t j d d   } | d  k	 r< |  j | d  j |  }  t |  d d d  S)Nr)   backslashreplaceend )getattrsysstdoutr$   r0   print)r'   r)   r+   r+   r,   _safe_print  s    rh   c               @   s   e  Z d  Z d S)r   N)__name__
__module____qualname__r+   r+   r+   r,   r     s   c               @   s   e  Z d  Z d S)ExtractErrorN)ri   rj   rk   r+   r+   r+   r,   rl     s   rl   c               @   s   e  Z d  Z d S)	ReadErrorN)ri   rj   rk   r+   r+   r+   r,   rm     s   rm   c               @   s   e  Z d  Z d S)CompressionErrorN)ri   rj   rk   r+   r+   r+   r,   rn     s   rn   c               @   s   e  Z d  Z d S)StreamErrorN)ri   rj   rk   r+   r+   r+   r,   ro     s   ro   c               @   s   e  Z d  Z d S)HeaderErrorN)ri   rj   rk   r+   r+   r+   r,   rp     s   rp   c               @   s   e  Z d  Z d S)EmptyHeaderErrorN)ri   rj   rk   r+   r+   r+   r,   rq     s   rq   c               @   s   e  Z d  Z d S)TruncatedHeaderErrorN)ri   rj   rk   r+   r+   r+   r,   rr      s   rr   c               @   s   e  Z d  Z d S)EOFHeaderErrorN)ri   rj   rk   r+   r+   r+   r,   rs   #  s   rs   c               @   s   e  Z d  Z d S)r>   N)ri   rj   rk   r+   r+   r+   r,   r>   &  s   r>   c               @   s   e  Z d  Z d S)SubsequentHeaderErrorN)ri   rj   rk   r+   r+   r+   r,   rt   )  s   rt   c               @   s@   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 S)
_LowLevelFilec             C   sb   d t  j d t  j t  j Bt  j Bi | } t t  d  rF | t  j O} t  j | | d  |  _ d  S)NrwO_BINARYi  )	osO_RDONLYO_WRONLYO_CREATO_TRUNChasattrrx   r   fd)selfnamer`   r+   r+   r,   __init__6  s    	z_LowLevelFile.__init__c             C   s   t  j |  j  d  S)N)ry   closer   )r   r+   r+   r,   r   ?  s    z_LowLevelFile.closec             C   s   t  j |  j |  S)N)ry   rR   r   )r   r   r+   r+   r,   rR   B  s    z_LowLevelFile.readc             C   s   t  j |  j |  d  S)N)ry   rS   r   )r   r'   r+   r+   r,   rS   E  s    z_LowLevelFile.writeN)ri   rj   rk   r   r   rR   rS   r+   r+   r+   r,   ru   0  s   	ru   c               @   s   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 rQ t |  } | j   } | pZ d |  _ | |  _ | |  _ | |  _ | |  _ d |  _	 d |  _
 d |  _ y| d k r,y d d  l } Wn t k
 r t d   Yn X| |  _ | j d  |  _ | d	 k r|  j   | j |  _ qI|  j   n| d
 k ry d d  l } Wn t k
 rht d   Yn X| d	 k rd |  _ | j   |  _ t |  _ qI| j   |  _ n | d k r-y d d  l } Wn t k
 rt d   Yn X| d	 k rd |  _ | j   |  _ | j |  _ qI| j   |  _ n | d k rIt d |   Wn* |  j  sf|  j j   d |  _   Yn Xd  S)NTF*     r   gzzzlib module is not availablerv   bz2zbz2 module is not availablexzzlzma module is not availabletarzunknown compression type %r) _extfileobjru   _StreamProxygetcomptyper   r`   comptypefileobjbufsizerL   posclosedzlibImportErrorrn   crc32crc_init_read_gzerrorrV   _init_write_gzr   dbufBZ2DecompressorcmpOSErrorBZ2CompressorlzmaLZMADecompressor	LZMAErrorLZMACompressorr   )	r   r   r`   r   r   r   r   r   r   r+   r+   r,   r   S  sl    										
				z_Stream.__init__c             C   s'   t  |  d  r# |  j r# |  j   d  S)Nr   )r~   r   r   )r   r+   r+   r,   __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  r |  j d  d
  |  _ |  j
 |  j j d d	  t  d  S)N	   r   z<Ls   s   z.gz   z
iso-8859-1replace)r   compressobjDEFLATED	MAX_WBITSDEF_MEM_LEVELr   rJ   packr;   time_Stream__writer   endswithr$   r&   )r   Z	timestampr+   r+   r,   r     s    
	z_Stream._init_write_gzc             C   sq   |  j  d k r* |  j j | |  j  |  _ |  j t |  7_ |  j  d k r` |  j j |  } |  j |  d  S)Nr   r   )	r   r   r   r   r   r%   r   compressr   )r   r'   r+   r+   r,   rS     s    z_Stream.writec             C   sk   |  j  | 7_  xU t |  j   |  j k rf |  j j |  j  d  |  j   |  j  |  j d   |  _  q Wd  S)N)rL   r%   r   r   rS   )r   r'   r+   r+   r,   Z__write  s     z_Stream.__writec             C   s   |  j  r d  Sd |  _  z |  j d k rO |  j d k rO |  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 @  Wd  |  j s |  j j   Xd  S)NTrw   r   r   r   z<Ll    )r   r`   r   rL   r   flushr   rS   rJ   r   r   r   r   r   )r   r+   r+   r,   r     s    			'	z_Stream.closec             C   sO  |  j  j |  j  j  |  _ d |  _ |  j d  d k rF t d   |  j d  d k rg t d   t |  j d   } |  j d  | d	 @r t |  j d   d
 t |  j d   } |  j	 |  | d @r x' |  j d  } | s | t
 k r Pq W| d @r4x' |  j d  } | s/| t
 k rPqW| d @rK|  j d  d  S)Nr   r   s   znot a gzip filer   s   zunsupported compression method      r6   r5   rN   )r   decompressobjr   r   r   _Stream__readrm   rn   ordrR   r&   )r   flagZxlenr'   r+   r+   r,   r     s.    	
,


z_Stream._init_read_gzc             C   s   |  j  S)N)r   )r   r+   r+   r,   tell  s    z_Stream.tellr   c             C   s|   | |  j  d k ri t | |  j  |  j  \ } } x$ t |  D] } |  j |  j  q? W|  j |  n t d   |  j  S)Nr   z seeking backwards is not allowed)r   rQ   r   r:   rR   ro   )r   r   rX   rY   r@   r+   r+   r,   seek  s    z_Stream.seekNc             C   sy   | d  k rQ g  } x* |  j  |  j  } | s. P| j |  q Wd j |  } n |  j  |  } |  j t |  7_ | S)Nr   )_readr   appendjoinr   r%   )r   r   trL   r+   r+   r,   rR     s    z_Stream.readc             C   s   |  j  d k r |  j |  St |  j  } x | | k  r |  j |  j  } | sS Py |  j j |  } Wn! |  j k
 r t d   Yn X|  j | 7_ | t |  7} q. W|  j d  |  } |  j | d   |  _ | S)Nr   zinvalid compressed data)	r   r   r%   r   r   r   
decompressrV   rm   )r   r   crL   r+   r+   r,   r     s     z_Stream._readc             C   s   t  |  j  } xK | | k  r\ |  j j |  j  } | s: P|  j | 7_ | t  |  7} q W|  j d  |  } |  j | d   |  _ | S)N)r%   rL   r   rR   r   )r   r   r   rL   r+   r+   r,   Z__read,  s    z_Stream.__read)ri   rj   rk   r   r   r   rS   r   r   r   r   r   rR   r   r   r+   r+   r+   r,   r   H  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   rR   	BLOCKSIZErL   )r   r   r+   r+   r,   r   A  s    	z_StreamProxy.__init__c             C   s   |  j  j |  _ |  j S)N)r   rR   rL   )r   r   r+   r+   r,   rR   E  s    z_StreamProxy.readc             C   sj   |  j  j d  r d S|  j  d d  d k rL |  j  d d  d k rL d	 S|  j  j d  rb d Sd Sd  S)Ns   r   r   r   s   BZhr   
   s   1AY&SYr      ]     7zXZr   r   )r   r   )rL   
startswith)r   r+   r+   r,   r   I  s    2z_StreamProxy.getcomptypec             C   s   |  j  j   d  S)N)r   r   )r   r+   r+   r,   r   S  s    z_StreamProxy.closeN)ri   rj   rk   r   rR   r   r   r+   r+   r+   r,   r   <  s   
r   c               @   s   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
 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 } xp | D]h \ } } | | k r |  j j	 d | | d  f  |  j j	 d | | | | f  | | 7} | | } q W| |  j k  r|  j j	 d | |  j d  f  d  S)Nr   r   FT)
r   offsetr   positionrd   r   r   	map_indexmapr   )r   r   r   r   Z	blockinfoZlastposZrealposr+   r+   r,   r   `  s(    								 
z_FileInFile.__init__c             C   s   d  S)Nr+   )r   r+   r+   r,   r   y  s    z_FileInFile.flushc             C   s   d S)NTr+   )r   r+   r+   r,   readable|  s    z_FileInFile.readablec             C   s   d S)NFr+   )r   r+   r+   r,   writable  s    z_FileInFile.writablec             C   s   |  j  j   S)N)r   seekable)r   r+   r+   r,   r     s    z_FileInFile.seekablec             C   s   |  j  S)N)r   )r   r+   r+   r,   r     s    z_FileInFile.tellc             C   s   | t  j k r0 t t | d  |  j  |  _ n | t  j k r | d k  rg t |  j | d  |  _ q t |  j | |  j  |  _ nC | t  j k r t t |  j | |  j  d  |  _ n t d   |  j S)Nr   zInvalid argument)	ioSEEK_SETminmaxr   r   SEEK_CURSEEK_ENDr=   )r   r   whencer+   r+   r,   r     s    !(z_FileInFile.seekc       	      C   sf  | d  k r |  j  |  j } n t | |  j  |  j  } d } x!| d k raxs |  j |  j \ } } } } | |  j k o | k  n r PqP |  j d 7_ |  j t |  j  k rP d |  _ qP Wt | | |  j  } | r7|  j j | |  j |  |  j j |  } t |  | k r*t	 d   | | 7} n | t
 | 7} | | 8} |  j | 7_ qA W| S)Nr   r   r   zunexpected end of data)r   r   r   r   r   r%   r   r   rR   rm   r&   )	r   r   rL   datastartstopr   r(   rZ   r+   r+   r,   rR     s.    
z_FileInFile.readc             C   s5   |  j  t |   } | | d  t |   <t |  S)N)rR   r%   )r   rZ   rL   r+   r+   r,   readinto  s    z_FileInFile.readintoc             C   s   d |  _  d  S)NT)r   )r   r+   r+   r,   r     s    z_FileInFile.close)ri   rj   rk   r   r   r   r   r   r   r   r   r   rR   r   r   r+   r+   r+   r,   r   Z  s   r   c                   s"   e  Z d  Z   f d d   Z   S)ExFileObjectc                s5   t  | j | j | j | j  } t   j |  d  S)N)r   r   offset_datar   sparsesuperr   )r   tarfiletarinfor   )	__class__r+   r,   r     s    zExFileObject.__init__)ri   rj   rk   r   r+   r+   )r   r,   r     s   r   c               @   sJ  e  Z d  Z dh Z d d 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$ d% d&  Z d' d(   Z d) d*   Z d+ d,   Z e d- d.    Z d/ d0   Z e d1 d2    Z e d3 d4    Z e d5 d6    Z e d7 d8    Z e d9 d:    Z e d; d<    Z d= d>   Z d? d@   Z dA dB   Z  dC dD   Z! dE dF   Z" dG dH   Z# dI dJ   Z$ dK dL   Z% dM dN   Z& dO dP   Z' dQ dR   Z( dS dT   Z) dU dV   Z* dW dX   Z+ dY dZ   Z, d[ d\   Z- d] d^   Z. d_ d`   Z/ da db   Z0 dc dd   Z1 de df   Z2 dg S)ir   r   r`   r   r   r   r   chksumtypelinknamer    r!   devmajordevminorr   r   pax_headersr   r   _sparse_structs_link_targetr   c             C   s   | |  _  d |  _ d |  _ d |  _ d |  _ d |  _ d |  _ t |  _ d |  _	 d |  _
 d |  _ d |  _ d |  _ d |  _ d |  _ d  |  _ i  |  _ d  S)Ni  r   r   )r   r`   r   r   r   r   r   REGTYPEr   r   r    r!   r   r   r   r   r   r   )r   r   r+   r+   r,   r     s"    																zTarInfo.__init__c             C   s   |  j  S)N)r   )r   r+   r+   r,   _getpath  s    zTarInfo._getpathc             C   s   | |  _  d  S)N)r   )r   r   r+   r+   r,   _setpath  s    zTarInfo._setpathc             C   s   |  j  S)N)r   )r   r+   r+   r,   _getlinkpath  s    zTarInfo._getlinkpathc             C   s   | |  _  d  S)N)r   )r   r   r+   r+   r,   _setlinkpath  s    zTarInfo._setlinkpathc             C   s    d |  j  j |  j t |   f S)Nz<%s %r at %#x>)r   ri   r   id)r   r+   r+   r,   __repr__  s    zTarInfo.__repr__c             C   s   d |  j  d |  j d @d |  j d |  j d |  j d |  j d |  j d	 |  j d
 |  j d |  j	 d |  j
 d |  j d |  j i } | d	 t k r | d j d  r | d d 7<| S)Nr   r`   i  r   r   r   r   r   r   r   r    r!   r   r   /)r   r`   r   r   r   r   r   r   r   r    r!   r   r   DIRTYPEr   )r   infor+   r+   r,   get_info  s     											$zTarInfo.get_infosurrogateescapec             C   sv   |  j    } | t k r+ |  j | | |  S| t k rJ |  j | | |  S| t k rf |  j | |  St d   d  S)Nzinvalid format)r   USTAR_FORMATcreate_ustar_headerrC   create_gnu_header
PAX_FORMATcreate_pax_headerr=   )r   rG   r)   r*   r   r+   r+   r,   tobuf  s    zTarInfo.tobufc             C   s   t  | d <t | d j | |   t k r8 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_LINKr=   LENGTH_NAME_posix_split_name_create_headerr   )r   r   r)   r*   r+   r+   r,   r   *  s    
""'zTarInfo.create_ustar_headerc             C   s   t  | d <d } t | d j | |   t k rR | |  j | d t | |  7} t | d j | |   t k r | |  j | d t | |  7} | |  j | t	 | |  S)Nr   r   r   r   )
	GNU_MAGICr%   r$   r   _create_gnu_long_headerGNUTYPE_LONGLINKr   GNUTYPE_LONGNAMEr   rC   )r   r   r)   r*   rL   r+   r+   r,   r   7  s    
" " zTarInfo.create_gnu_headerc       
      C   s  t  | d <|  j j   } x d d t f d d t f d d f D] \ } } } | | k r\ q> y | | j d	 d
  Wn# t k
 r | | | | <w> Yn Xt | |  | k r> | | | | <q> Wx d D]} \ } } | | k r d | | <q | | } d | k od | d k  n s,t | t	  r t
 |  | | <d | | <q W| rh|  j | t |  }	 n d }	 |	 |  j | t d	 d  S)Nr   r   r   r   r   r        r!   r7   r8   r   r5   r   r      r   r   r   r   r   )r    r    r  )r!   r!   r  r   r5   r   r5   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   r)   r   r   Zhnamer(   rF   valrL   r+   r+   r,   r   E  s4    


4zTarInfo.create_pax_headerc             C   s   |  j  | t d  S)Nzutf-8)r  XGLTYPE)clsr   r+   r+   r,   create_pax_global_headerv  s    z TarInfo.create_pax_global_headerc             C   s   | j  d  } x t d t |   D]u } d j | d  |   } d j | | d    } t | j | |   t k r% t | j | |   t k r% Pq% Wt d   | | f S)Nr   r   zname is too long)splitr:   r%   r   r$   LENGTH_PREFIXr   r=   )r   r   r)   r*   Z
componentsr@   r   r+   r+   r,   r   |  s    zTarInfo._posix_split_namec             C   s  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   r`   r   i  r5   r   r   r   r  r   s           r   r   r   r    r  r!   r   r   r   r	   z%dsr   il  z%06o r7   ie  ii)r-   getrH   r   r   rJ   r   r   r   rM   rB   )r   rG   r)   r*   partsrL   r   r+   r+   r,   r     s&    $/zTarInfo._create_headerc             C   s=   t  t |   t  \ } } | d k r9 |  t | t 7}  |  S)Nr   )rQ   r%   r   r&   )ZpayloadrX   rY   r+   r+   r,   _create_payload  s    zTarInfo._create_payloadc             C   sm   | j  | |  t } i  } d | d <| | d <t |  | d <t | d <|  j | t | |  |  j |  S)Nz././@LongLinkr   r   r   r   )r$   r&   r%   r  r   r   r  )r  r   r   r)   r*   r   r+   r+   r,   r    s    


zTarInfo._create_gnu_long_headerc             C   s  d } xJ | j    D]< \ } } y | j d d  Wq t k
 rN d } PYq Xq Wd } | ri | d 7} x | j    D] \ } } | j d  } | r | j | d  } n | j d  } t |  t |  d } d	 }	 }
 x- | t t |
   }	 |	 |
 k rP|	 }
 q W| t t |
  d
  d | d | d 7} qv Wi  } d | d <| | d <t |  | d <t | d <|  j | t d
 d  |  j	 |  S)NFzutf-8r8   Tr   s   21 hdrcharset=BINARY
r   r   r   r7          =s   
z././@PaxHeaderr   r   r   r   r   )
itemsr$   r  r%   r  rB   r   r   r   r  )r  r   r   r)   binarykeywordvaluerecordslr?   r1   r   r+   r+   r,   r    s<    



1


z"TarInfo._create_pax_generic_headerc             C   sN  t  |  d k r t d   t  |  t k r< t d   | j t  t k r] t d   t | d d   } | t |  k r t	 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  r't | _ | j t k r d } g  } x t d  D]u }	 y< t | | | d   }
 t | | d | d   } Wn t k
 rPYn X| j |
 | f  | d 7} qOWt | d  } t | d d   } | | | f | _  | j!   r!| j j" d  | _ | rJ| j t# k rJ| 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%   rq   r   rr   countr&   rs   rA   rM   r>   r2   r   r`   r   r   r   r   r   r   r   r    r!   r   r   AREGTYPEr   r   GNUTYPE_SPARSEr:   r=   r   boolr   isdirrstrip	GNU_TYPES)r  rL   r)   r*   r   objr   r   structsr@   r   numbytes
isextendedorigsizer+   r+   r,   frombuf  sZ    		!	"zTarInfo.frombufc             C   sP   | j  j t  } |  j | | j | j  } | j  j   t | _ | j |  S)N)	r   rR   r   r7  r)   r*   r   r   _proc_member)r  r   rL   r2  r+   r+   r,   fromtarfile5  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 rc |  j	 |  S|  j
 |  Sd  S)N)r   r  r  _proc_gnulongr-  _proc_sparser  r  SOLARIS_XHDTYPE	_proc_pax_proc_builtin)r   r   r+   r+   r,   r8  J  s    zTarInfo._proc_memberc             C   su   | j  j   |  _ |  j } |  j   s6 |  j t k rL | |  j |  j  7} | | _ |  j	 | j
 | j | j  |  S)N)r   r   r   isregr   SUPPORTED_TYPES_blockr   r   _apply_pax_infor   r)   r*   )r   r   r   r+   r+   r,   r>  W  s    		zTarInfo._proc_builtinc             C   s   | j  j |  j |  j   } y |  j |  } Wn t k
 rQ t d   Yn X|  j | _ |  j t	 k r t
 | | j | j  | _ n* |  j t k r t
 | | j | j  | _ | S)Nz missing or bad subsequent header)r   rR   rA  r   r9  rp   rt   r   r   r  r2   r)   r*   r   r  r   )r   r   rL   nextr+   r+   r,   r:  h  s    zTarInfo._proc_gnulongc       
      C   s#  |  j  \ } } } |  `  x | r | j j t  } d } x t d  D] } y< t | | | d   } t | | d | d   }	 Wn t k
 r PYn X| r |	 r | j | |	 f  | d 7} qF Wt | d  } q W| |  _	 | j j
   |  _ |  j |  j |  j  | _ | |  _ |  S)Nr      r  r*  i  )r   r   rR   r   r:   rA   r=   r   r.  r   r   r   rA  r   r   )
r   r   r3  r5  r6  rL   r   r@   r   r4  r+   r+   r,   r;  ~  s(    	"		zTarInfo._proc_sparsec             C   s  | j  j |  j |  j   } |  j t k r9 | j } n | j j   } t j	 d |  } | d  k	 r | j
 d  j d  | d <| j d  } | d k r | j } n d } t j d  } d } x | j | |  } | s P| j   \ }	 }
 t |	  }	 | | j d  d | j d  |	 d  } |  j |
 d d | j  }
 |
 t k rt|  j | | | j | j  } n |  j | d d | j  } | | |
 <| |	 7} q Wy |  j |  } Wn t k
 rt d	   Yn Xd
 | k r|  j | |  n_ d | k r|  j | | |  n= | j d  d k rY| j d  d k rY|  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   r   z missing or bad subsequent headerzGNU.sparse.mapzGNU.sparse.sizezGNU.sparse.major1zGNU.sparse.minorr9   r   )$r   rR   rA  r   r   r  r   r  researchgroupr0   r  r)   compilematchgroupsr;   rb   r   _decode_pax_fieldr*   PAX_NAME_FIELDSr9  rp   rt   _proc_gnusparse_01_proc_gnusparse_00_proc_gnusparse_10r  r<  rB  r   r   r?  r@  )r   r   rL   r   rK  rE  r)   Zregexr   r(   r  r   rC  r   r+   r+   r,   r=    s`    .	
*		zTarInfo._proc_paxc             C   s   g  } x6 t  j d |  D]" } | j t | j d    q Wg  } x6 t  j d |  D]" } | j t | j d    qX Wt t | |   | _ d  S)Ns   \d+ GNU.sparse.offset=(\d+)\nr   s   \d+ GNU.sparse.numbytes=(\d+)\n)rG  finditerr   r;   rI  listzipr   )r   rC  r   rL   ZoffsetsrK  r4  r+   r+   r,   rP     s      zTarInfo._proc_gnusparse_00c             C   sV   d d   | d j  d  D } t t | d  d  d  | d d  d    | _ d  S)Nc             S   s   g  |  ] } t  |   q Sr+   )r;   ).0xr+   r+   r,   
<listcomp>  s   	 z.TarInfo._proc_gnusparse_01.<locals>.<listcomp>zGNU.sparse.map,r   r   )r  rS  rT  r   )r   rC  r   r   r+   r+   r,   rO    s     zTarInfo._proc_gnusparse_01c             C   s   d  } g  } | j  j t  } | j d d  \ } } t |  } xg t |  | d k  r d | k r} | | j  j t  7} | j d d  \ } } | j t |   qE W| j  j   | _ t	 t
 | d  d  d  | d d  d    | _ d  S)Ns   
r   r   )r   rR   r   r  r;   r%   r   r   r   rS  rT  r   )r   rC  r   r   Zfieldsr   rL   Znumberr+   r+   r,   rQ    s    zTarInfo._proc_gnusparse_10c             C   s  x | j    D] \ } } | d k r8 t |  d |  q | d k r] t |  d t |   q | d k r t |  d t |   q | t k r | t k r y t | |  } Wn t k
 r d } Yn 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  setattrr;   
PAX_FIELDSPAX_NUMBER_FIELDSr=   r0  r  r   )r   r   r)   r*   r  r   r+   r+   r,   rB  !  s"    zTarInfo._apply_pax_infoc             C   s=   y | j  | d  SWn" t k
 r8 | j  | |  SYn Xd  S)Nr8   )r0   UnicodeDecodeError)r   r   r)   Zfallback_encodingZfallback_errorsr+   r+   r,   rM  8  s    zTarInfo._decode_pax_fieldc             C   s-   t  | t  \ } } | r% | d 7} | t S)Nr   )rQ   r   )r   r+  rX   rY   r+   r+   r,   rA  @  s    
zTarInfo._blockc             C   s   |  j  t k S)N)r   REGULAR_TYPES)r   r+   r+   r,   r?  I  s    zTarInfo.isregc             C   s
   |  j    S)N)r?  )r   r+   r+   r,   isfileK  s    zTarInfo.isfilec             C   s   |  j  t k S)N)r   r   )r   r+   r+   r,   r/  M  s    zTarInfo.isdirc             C   s   |  j  t k S)N)r   SYMTYPE)r   r+   r+   r,   issymO  s    zTarInfo.issymc             C   s   |  j  t k S)N)r   LNKTYPE)r   r+   r+   r,   islnkQ  s    zTarInfo.islnkc             C   s   |  j  t k S)N)r   CHRTYPE)r   r+   r+   r,   ischrS  s    zTarInfo.ischrc             C   s   |  j  t k S)N)r   BLKTYPE)r   r+   r+   r,   isblkU  s    zTarInfo.isblkc             C   s   |  j  t k S)N)r   FIFOTYPE)r   r+   r+   r,   isfifoW  s    zTarInfo.isfifoc             C   s   |  j  d  k	 S)N)r   )r   r+   r+   r,   issparseY  s    zTarInfo.issparsec             C   s   |  j  t t t f k S)N)r   rc  re  rg  )r   r+   r+   r,   isdev[  s    zTarInfo.isdevN)r   r`   r   r   r   r   r   r   r   r    r!   r   r   r   r   r   r   r   r   r   )3ri   rj   rk   	__slots__r   r   r   propertyr   r   r   r   r   r   DEFAULT_FORMATENCODINGr   r   r   r   classmethodr  r   staticmethodr   r  r  r  r7  r9  r8  r>  r:  r;  r=  rP  rO  rQ  rB  rM  rA  r?  r^  r/  r`  rb  rd  rf  rh  ri  rj  r+   r+   r+   r,   r     s^       1
3?f	c               @   s  e  Z d  Z d Z d Z d Z d Z e Z e	 Z
 d Z e Z e Z d d d d d d d d d d d d d d  Z e d d d e d	 d
   Z e d d d d   Z e d d d d d   Z e d d d d d   Z e d d d d d   Z d d d d d d d d i Z d d   Z d d   Z d  d!   Z d" d#   Z d d d d$ d%  Z d& d' d d( d) Z d d& d d* d d+ d, Z d d- d.  Z  d/ d d0 d d1 d2 Z! d3 d& d0 d d4 d5 Z" d6 d7   Z# d& d d8 d9  Z$ d: d;   Z% d< d=   Z& d> d?   Z' d@ dA   Z( dB dC   Z) dD dE   Z* dF dG   Z+ dH dI   Z, dJ dK   Z- dL dM   Z. d d dN dO  Z/ dP dQ   Z0 d dR dS  Z1 dT dU   Z2 dV dW   Z3 dX dY   Z4 dZ d[   Z5 d\ d]   Z6 d S)^r   r   Fr   Nrv   r   c             C   s  d d d d d d d d i } | | k r6 t  d	   | |  _ | | |  _ | s |  j d k r t j j |  r d |  _ d |  _ t | |  j  } d
 |  _ n` | d  k r t | d  r t	 | j
 t t f  r | j
 } t | d  r | j |  _ d |  _ | rt j j |  n d  |  _
 | |  _ | d  k	 rC| |  _ | d  k	 rX| |  _ | d  k	 rm| |  _ | d  k	 r| |  _ | d  k	 r| |  _ |	 |  _ |
 d  k	 r|  j t k r|
 |  _ n	 i  |  _ | d  k	 r| |  _ | d  k	 r| |  _ d
 |  _ g  |  _ d
 |  _ |  j j   |  _ i  |  _ y:|  j d k rZd  |  _ |  j    |  _ |  j d k rx |  j j! |  j  y& |  j j" |   } |  j j# |  Wqlt$ k
 r|  j j! |  j  PYqlt% k
 r} z t& t |    WYd  d  } ~ XqlXqlW|  j d k rid |  _ |  j ri|  j j' |  j j(    } |  j j) |  |  j t* |  7_ Wn* |  j s|  j j+   d |  _   Yn Xd  S)Nrv   rbazr+brw   wbrV  xbz!mode must be 'r', 'a', 'w' or 'x'Fr   r`   T)rr  rw   rV  ),r=   r`   _modery   r   exists	bltn_openr   r~   r  r   r  rB   abspathr   rG   r   dereferenceignore_zerosr)   r*   r   r   debug
errorlevelr   members_loadedr   r   inodesfirstmemberrC  r   r9  r   rs   rp   rm   r  r  rS   r%   r   )r   r   r`   r   rG   r   ry  rz  r)   r*   r   r{  r|  ZmodeserL   r+   r+   r,   r   y  s    	"				!															)				zTarFile.__init__c                sY  | r | r t  d   | d k r   f d d   } x t   j d | D] } t     j |  } | d  k	 r | j   }	 y | | d | |  SWqN t t f k
 r }
 z! | d  k	 r | j |	  wN WYd  d  }
 ~
 XqN XqN Wt d   nSd | k r}| j d d	  \ } } | p#d } | p/d
 } |   j k rZt     j |  } n t d |   | | | | |  Sd | k r'| j d d	  \ } } | pd } | pd
 } | d k rt  d   t	 | | | | |  } y   | | | |  } Wn | j
     Yn Xd | _ | S| d k rI  j | | | |  St  d   d  S)Nznothing to openrv   r:*c                s     j  |  d k S)Ntaropen)	OPEN_METH)r   )r  r+   r,   not_compressed  s    z$TarFile.open.<locals>.not_compressedkeyz%file could not be opened successfully:r   r   zunknown compression type %r|rw   zmode must be 'r' or 'w'Frr  rV  zundiscernible mode)rv   r  )rv   rw   )rr  rw   rV  )r=   sortedr  rd   r   rm   rn   r   r  r   r   r   r  )r  r   r`   r   r   kwargsr  r   funcZ	saved_posr  r_   streamr   r+   )r  r,   r     sP    %
	zTarFile.openc             K   s+   | d k r t  d   |  | | | |  S)Nrv   rr  rw   rV  z!mode must be 'r', 'a', 'w' or 'x')rv   rr  rw   rV  )r=   )r  r   r`   r   r  r+   r+   r,   r  A  s    zTarFile.taropenr   c             K   s)  | d
 k r t  d   y d d  l } | j Wn$ t t f k
 rU t d   Yn Xy  | j | | d | |  } Wn9 t k
 r | d  k	 r | d k r t d     Yn Xy |  j | | | |  } WnK t k
 r| j	   | d k r t d     Yn | j	     Yn Xd	 | _
 | S)Nrv   rw   rV  zmode must be 'r', 'w' or 'x'r   zgzip module is not availablerZ   znot a gzip fileF)rv   rw   rV  )r=   gzipZGzipFiler   AttributeErrorrn   r   rm   r  r   r   )r  r   r`   r   compresslevelr  r  r   r+   r+   r,   gzopenI  s2     

	zTarFile.gzopenc             K   s   | d
 k r t  d   y d d  l } Wn t k
 rH t d   Yn X| j | pX | | d | } y |  j | | | |  } WnQ t t f k
 r | j   | d k r t	 d     Yn | j     Yn Xd	 | _
 | S)Nrv   rw   rV  zmode must be 'r', 'w' or 'x'r   zbz2 module is not availabler  znot a bzip2 fileF)rv   rw   rV  )r=   r   r   rn   BZ2Filer  r   EOFErrorr   rm   r   )r  r   r`   r   r  r  r   r   r+   r+   r,   bz2openk  s(    	

	zTarFile.bz2openc             K   s   | d
 k r t  d   y d d  l } Wn t k
 rH t d   Yn X| j | pX | | d | } y |  j | | | |  } WnT | j t f k
 r | j   | d k r t	 d     Yn | j     Yn Xd	 | _
 | S)Nrv   rw   rV  zmode must be 'r', 'w' or 'x'r   zlzma module is not availablepresetznot an lzma fileF)rv   rw   rV  )r=   r   r   rn   LZMAFiler  r   r  r   rm   r   )r  r   r`   r   r  r  r   r   r+   r+   r,   xzopen  s&    

	zTarFile.xzopenr   r  r   r  r   r  r   r  c          
   C   s   |  j  r d  Sd |  _  zz |  j d k r |  j j t t d  |  j t d 7_ t |  j t  \ } } | d k r |  j j t t |  Wd  |  j	 s |  j j
   Xd  S)NTrr  rw   rV  r   r   )rr  rw   rV  )r   r`   r   rS   r&   r   r   rQ   
RECORDSIZEr   r   )r   rX   rY   r+   r+   r,   r     s    			zTarFile.closec             C   s/   |  j  |  } | d  k r+ t d |   | S)Nzfilename %r not found)
_getmemberKeyError)r   r   r   r+   r+   r,   	getmember  s    zTarFile.getmemberc             C   s$   |  j    |  j s |  j   |  j S)N)_checkr~  _loadr}  )r   r+   r+   r,   
getmembers  s    
	
zTarFile.getmembersc             C   s   d d   |  j    D S)Nc             S   s   g  |  ] } | j   q Sr+   )r   )rU  r   r+   r+   r,   rW    s   	 z$TarFile.getnames.<locals>.<listcomp>)r  )r   r+   r+   r,   getnames  s    zTarFile.getnamesc             C   sI  |  j  d  | d  k	 r" | j } | d  k r4 | } t j j |  \ } } | j t j d  } | j d  } |  j   } |  | _	 | d  k r t
 t d  r |  j r t j |  } q t j |  } n t j | j    } d } | j } t j |  r| j | j f }	 |  j rd| j d k rd|	 |  j k rd| |  j |	 k rdt }
 |  j |	 } qt }
 |	 d r| |  j |	 <n t j |  rt }
 ns t j |  rt }
 n[ t j |  rt }
 t j |  } n4 t j |  rt  }
 n t j! |  rt" }
 n d  S| | _ | | _# | j$ | _% | j& | _' |
 t k rT| j( | _) n	 d | _) | j* | _+ |
 | _, | | _- t. ry t. j/ | j%  d | _0 Wn t1 k
 rYn Xt2 ry t2 j3 | j'  d | _4 Wn t1 k
 rYn X|
 t  t" f k rEt
 t d  rEt
 t d  rEt j5 | j6  | _7 t j8 | j6  | _9 | S)	Nawxr   lstatr   r   r   majorminor):r  r   ry   r   
splitdriver   seplstripr   r   r~   ry  r  r^   fstatfilenost_modeS_ISREGst_inost_devst_nlinkr  ra  r   S_ISDIRr   S_ISFIFOrg  S_ISLNKr_  readlinkS_ISCHRrc  S_ISBLKre  r`   st_uidr   st_gidr   st_sizer   st_mtimer   r   r   pwdgetpwuidr    r  grpgetgrgidr!   r  st_rdevr   r  r   )r   r   arcnamer   Zdrvr   Zstatresr   Zstmdinoder   r+   r+   r,   
gettarinfo  s~    				"
									zTarFile.gettarinfoTr}  c            C   sQ  |  j    | d  k r |  } x.| D]&} | r t t j | j   t d | j pZ | j | j pi | j f  | j	   s | j
   r t d d | j | j f  n t d | j  t d t j | j  d  d   t | j | j   r d n d  | rB| j   r%t d	 | j  | j   rBt d
 | j  t   q# Wd  S)Nz%s/%sz%10sz%d,%dz%10dz%d-%02d-%02d %02d:%02d:%02dr   r   r   z-> zlink to )r  rh   r^   r_   r`   r    r   r!   r   rd  rf  r   r   r   r   	localtimer   r   r/  r`  r   rb  rg   )r   verboser}  r   r+   r+   r,   rS  C  s*    
#zTarFile.listfilterc      	   
   C   s  |  j  d  | d  k r | } | d  k	 rn d d  l } | j d t d  | |  rn |  j d d |  d  S|  j d  k	 r t j j |  |  j k r |  j d d |  d  S|  j d |  |  j	 | |  } | d  k r |  j d d |  d  S| d  k	 r2| |  } | d  k r2|  j d d |  d  S| j
   rjt | d	   } |  j | |  Wd  QRXn | j   r|  j |  | rxa t j |  D]@ } |  j t j j | |  t j j | |  | | d
 | qWn |  j |  d  S)Nr  r   zuse the filter argument insteadr   ztarfile: Excluded %rztarfile: Skipped %rr   ztarfile: Unsupported type %rrq  r  )r  r[   r\   r]   _dbgr   ry   r   rx  r  r?  rw  addfiler/  listdiraddr   )	r   r   r  Z	recursiveZexcluder  r[   r   fr+   r+   r,   r  c  sB    	
**zTarFile.addc             C   s   |  j  d  t j |  } | j |  j |  j |  j  } |  j j |  |  j t	 |  7_ | d  k	 r t
 | |  j | j  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   rG   r)   r*   r   rS   r   r%   rP   r   rQ   r   r&   r}  r   )r   r   r   rL   rX   rY   r+   r+   r,   r    s    
zTarFile.addfile.numeric_ownerc            C   sU  g  } | d  k r |  } xb | D]Z } | j    rV | j |  t j |  } d | _ |  j | | d | j    d | q W| j d d d    | j   x | D] } t j j	 | | j
  } y: |  j | | d | |  j | |  |  j | |  Wq t k
 rL} z. |  j d k r&  n |  j d d |  WYd  d  } ~ Xq Xq Wd  S)	Ni  	set_attrsr  r  c             S   s   |  j  S)N)r   )rr  r+   r+   r,   <lambda>  s    z$TarFile.extractall.<locals>.<lambda>r   ztarfile: %s)r/  r   r  r`   extractsortreversery   r   r   r   chownutimechmodrl   r|  r  )r   r   r}  r  Zdirectoriesr   dirpathr  r+   r+   r,   
extractall  s,    	
zTarFile.extractallr   c            C   sd  |  j  d  t | t  r. |  j |  } n | } | j   r[ t j j | | j  | _	 y2 |  j
 | t j j | | j  d | d | Wn t k
 r} zc |  j d k r   nI | j d  k r |  j d d | j  n  |  j d d | j | j f  WYd  d  } ~ XnN t k
 r_} z. |  j d k r9  n |  j d d |  WYd  d  } ~ Xn Xd  S)Nrv   r  r  r   r   ztarfile: %sztarfile: %s %r)r  r  r  r  rb  ry   r   r   r   r   _extract_memberr   r   r|  filenamer  strerrorrl   )r   memberr   r  r  r   r  r+   r+   r,   r    s(    	!2zTarFile.extractc             C   s   |  j  d  t | t  r. |  j |  } n | } | j   sO | j t k r_ |  j |  |  S| j   sw | j	   r t |  j
 t  r t d   q |  j |  j |   Sn d  Sd  S)Nrv   z'cannot extract (sym)link as file object)r  r  r  r  r?  r   r@  
fileobjectrb  r`  r   r   ro   extractfile_find_link_target)r   r  r   r+   r+   r,   r    s    zTarFile.extractfilec             C   s  | j  d  } | j d t j  } t j j |  } | r\ t j j |  r\ t j |  | j   st | j	   r |  j
 d d | j | j f  n |  j
 d | j  | j   r |  j | |  n | j   r |  j | |  n | j   r|  j | |  n | j   s| j   r2|  j | |  n] | j   sJ| j	   r]|  j | |  n2 | j t k r|  j | |  n |  j | |  | r|  j | | |  | j	   s|  j | |  |  j | |  d  S)Nr   r   z%s -> %s)r0  r   ry   r  r   dirnamerv  makedirsrb  r`  r  r   r   r?  makefiler/  makedirrh  makefiford  rf  makedevmakelinkr   r@  makeunknownr  r  r  )r   r   
targetpathr  r  Z	upperdirsr+   r+   r,   r  &  s4    #zTarFile._extract_memberc             C   s-   y t  j | d  Wn t k
 r( Yn Xd  S)Ni  )ry   mkdirFileExistsError)r   r   r  r+   r+   r,   r  W  s    zTarFile.makedirc             C   s   |  j  } | j | j  t | d   } | j d  k	 r x7 | j D], \ } } | j |  t | | | t  qD W| j | j  | j   n t | | | j t  Wd  QRXd  S)Nrs  )	r   r   r   rw  r   rP   rm   r   truncate)r   r   r  sourcetargetr   r   r+   r+   r,   r  a  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  r+   r+   r,   r  p  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~   ry   r  rl   )r   r   r  r+   r+   r,   r  x  s    zTarFile.makefifoc             C   s   t  t d  s  t  t d  r, t d   | j } | j   rQ | 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~   ry   rl   r`   rf  r^   S_IFBLKS_IFCHRr  r  r   r   )r   r   r  r`   r+   r+   r,   r    s     	zTarFile.makedevc             C   s   yj | j    r% t j | j |  nD t j j | j  rP t j | j |  n |  j |  j	 |  |  WnP t
 k
 r y |  j |  j	 |  |  Wn t k
 r t d   Yn XYn Xd  S)Nz%unable to resolve link inside archive)r`  ry   symlinkr   r   rv  r   linkr  r  symlink_exceptionr  rl   )r   r   r  r+   r+   r,   r    s    zTarFile.makelinkc              C   s2  t  r.t t d  r.t j   d k r.| rB | j } | j } np y t j | j  d } Wn t	 k
 ry | j } Yn Xy t  j
 | j  d } Wn t	 k
 r | j } Yn XyH | j   r t t d  r t j | | |  n t j | | |  Wn1 t k
 r-} z t d   WYd  d  } ~ Xn Xd  S)Ngeteuidr   r   lchownzcould not change owner)r  r~   ry   r  r   r   r  getgrnamr!   r  getpwnamr    r`  r  r  r   rl   )r   r   r  r  gur  r+   r+   r,   r    s$    '	zTarFile.chownc             C   s^   t  t d  rZ y t j | | j  Wn1 t k
 rY } z t d   WYd  d  } ~ Xn Xd  S)Nr  zcould not change mode)r~   ry   r  r`   r   rl   )r   r   r  r  r+   r+   r,   r    s
    zTarFile.chmodc             C   sk   t  t d  s d  Sy  t j | | j | j f  Wn1 t k
 rf } z t d   WYd  d  } ~ Xn Xd  S)Nr  z"could not change modification time)r~   ry   r  r   r   rl   )r   r   r  r  r+   r+   r,   r    s     zTarFile.utimec             C   sV  |  j  d  |  j d  k	 r2 |  j } d  |  _ | S|  j |  j j   k r |  j j |  j d  |  j j d  s t d   d  } xy |  j j	 |   } Wnt
 k
 r } z= |  j r |  j d d |  j | f  |  j t 7_ w WYd  d  } ~ Xn(t k
 r}} za |  j rJ|  j d d |  j | f  |  j t 7_ w n! |  j d k rkt t |    WYd  d  } ~ Xn t k
 r|  j d k rt d   Yn| t k
 r} z& |  j d k rt t |    WYd  d  } ~ Xn7 t k
 r$} z t t |    WYd  d  } ~ Xn XPq W| d  k	 rI|  j j |  n	 d |  _ | S)	NZrar   zunexpected end of datar   z0x%X: %sr   z
empty fileT)r  r  r   r   r   r   rR   rm   r   r9  rs   rz  r  r   r>   r  rq   rr   rt   r}  r   r~  )r   mr   r  r+   r+   r,   rC    sL    				$$%	zTarFile.nextc             C   s   |  j    } | d  k	 r1 | d  | j |   } | rI t j j |  } xK t |  D]= } | rz t j j | j  } n	 | j } | | k rV | SqV Wd  S)N)r  indexry   r   normpathreversedr   )r   r   r   	normalizer}  r  member_namer+   r+   r,   r  
	  s    	zTarFile._getmemberc             C   s-   x |  j    } | d  k r Pq Wd |  _ d  S)NT)rC  r~  )r   r   r+   r+   r,   r  !	  s
    zTarFile._loadc             C   sQ   |  j  r t d |  j j   | d  k	 rM |  j | k rM t d |  j   d  S)Nz%s is closedzbad operation for mode %r)r   r   r   ri   r`   )r   r`   r+   r+   r,   r  +	  s    	zTarFile._checkc             C   s   | j    rE d j t d  t j j | j  | j f   } d  } n | j } | } |  j | d | d d } | d  k r t	 d |   | S)Nr   r   r  Tzlinkname %r not found)
r`  r   r  ry   r   r  r   r   r  r  )r   r   r   limitr  r+   r+   r,   r  4	  s    0		zTarFile._find_link_targetc             C   s$   |  j  r t |  j  St |   Sd  S)N)r~  iterr}  TarIter)r   r+   r+   r,   __iter__G	  s    	zTarFile.__iter__c             C   s&   | |  j  k r" t | d t j d  S)Nfile)r{  rg   re   stderr)r   levelmsgr+   r+   r,   r  O	  s    zTarFile._dbgc             C   s   |  j    |  S)N)r  )r   r+   r+   r,   	__enter__U	  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   	tracebackr+   r+   r,   __exit__Y	  s
    	zTarFile.__exit__)7ri   rj   rk   r{  ry  rz  r|  rm  rG   rn  r)   r*   r   r   r   r  r   ro  r  r   r  r  r  r  r  r   r  r  r  r  rS  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rC  r  r  r  r  r  r  r  r  r+   r+   r+   r,   r   _  sr   kZ!
d =(&0
	6
	c               @   s4   e  Z d  Z d d   Z d d   Z d d   Z d S)r  c             C   s   | |  _  d |  _ d  S)Nr   )r   r  )r   r   r+   r+   r,   r   k	  s    	zTarIter.__init__c             C   s   |  S)Nr+   )r   r+   r+   r,   r  p	  s    zTarIter.__iter__c             C   s   |  j  d k r3 |  j j d  k	 r3 |  j j   } nm |  j  t |  j j  k  rd |  j j |  j  } n< |  j j s |  j j   } | s d |  j _ t  n t  |  j  d 7_  | S)Nr   Tr   )r  r   r  rC  r%   r}  r~  StopIteration)r   r   r+   r+   r,   __next__t	  s    !	zTarIter.__next__N)ri   rj   rk   r   r  r  r+   r+   r+   r,   r  d	  s   r  c             C   s;   y t  |   } | j   d SWn t k
 r6 d SYn Xd  S)NTF)r   r   r   )r   r   r+   r+   r,   r   	  s    
c              C   s  d d  l  }  d } |  j d |  } | j d d d d d d	 d
 d | j   } | j d d d d d
 d | j d d d d d d9 d
 d | j d d d d d d: d
 d | j d d d d d
 d | j   } | j ro| j } t |  rSt | d  * } | j   t	 | j   d  t
 j Wd  QRX| j rlt	 d! j |   q| j d" d# j |   n{| j r| j } t |  rt j | d$   } | j d% | j  Wd  QRXq| j d" d# j |   n| j rt | j  d" k r| j d } t j } n= t | j  d& k r9| j \ } } n | j d" | j    t |  rt j | d$   } | j d' |  Wd  QRX| j r| d( k rd) j |  }	 n d* j | |  }	 t	 |	  q| j d" d# j |   n| j r| j j d  }
 t j j |
  \ } } d+ d, d- d, d. d/ d0 d/ d1 d2 d3 d2 d4 d2 d5 d2 i } | | k rld6 | | n d7 } | j } t j |
 |  % } x | D] } | j |  qWWd  QRX| j rt	 d8 j |
   n | j d" | j    d  S);Nr   z3A simple command line interface for tarfile module.descriptionz-vz	--verboseaction
store_truedefaultFhelpzVerbose outputz-lz--listmetavar	<tarfile>zShow listing of a tarfilez-ez	--extractnargs+<output_dir>zExtract tarfile into target dirz-cz--create<name><file>zCreate tarfile from sourcesz-tz--testzTest if a tarfile is validrv   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.z.gzr   z.tgzz.xzr   z.txzz.bz2r   z.tbzz.tbz2z.tb2zw:rw   z{!r} file created.)r  r  )r  r  )argparseArgumentParseradd_argumentadd_mutually_exclusive_group
parse_argsZtestr   r   r  rg   re   r   r  rG   exitrS  r   r  r%   ry   curdirformat_helpr  Zcreatepopr   splitextr  )r  r  parserrI  argsrT   r   Ztfr  r  Ztar_name_extZcompressionsZtar_modeZ	tar_files	file_namer+   r+   r,   main	  s    		
 						 		r#  __main__)aversion
__author____date__Z	__cvsid____credits__builtinsr   rw  re   ry   r   rO   r^   r   rJ   r  rG  r  r  r   r  NotImplementedErrorr  r   	NameError__all__r&   r   r  r  r   r   r   r  r   r,  ra  r_  rc  re  r   rg  ZCONTTYPEr  r  r-  r  r  r<  r   rC   r   rm  r@  r]  r1  rZ  rN  r  r;   r[  r   rn  getfilesystemencodingr-   r2   rA   rH   rM   rP   r_   rh   	Exceptionr   rl   rm   rn   ro   rp   rq   rr   rs   r>   rt   ru   r   objectr   r   BufferedReaderr   r   r   r  r   r#  ri   r+   r+   r+   r,   <module>    s   
						h      	)	Z