
    	^cw(                     p   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mZ ddl	m
Z
 ddlmZ ddlmZmZmZmZmZmZmZ ddlmZ ej        ZdZd	Zd
 ZdgddgddgdgddgdZd Zd Zddd         Zd Z  G d d          Z! G d d          Z" G d d          Z#e#e!d d d  d! e"d"Z$	 	 	 	 	 d'd&Z%dS )(    N   )_nullrev)open)error	formattermatchpycompatscmutilutilvfs)
stringutili   i   c                 *   |rt          j        |          }nt          | t                    st	          d          t
          j                            |           }|                                }t          
                    |g           D ]1}|                    |          r|dt          |                    } n2t
          j                            t          j        |                    }t          j        |          }|                    d          s|dz  }|                    d          r
|dd         }|                    d          s#t
          j                            |          sd|v r!t#          j        t'          d                    |S )	zWchoose prefix to use for names in archive.  make sure prefix is
    safe for consumers.s    dest must be string if no prefixN   /s   ./   s   ../s   /../s*   archive prefix contains illegal components)r   normpath
isinstancebytes
ValueErrorospathbasenamelowerextsgetendswithlen	localpathpconvert
startswithisabsr   Abortr   )destkindprefixr   sfxlpfxs         4/usr/lib/python3/dist-packages/mercurial/archival.py
tidyprefixr*   (   sy     
v&&$&& 	B@AAA!!$''88D"%% 	 	C~~c"" 3s88), 7DN62233D]4  F??4   $     LBGMM$$7$7 L7f;L;Lk!IJJKKKM    s   .tars   .tbz2s   .tar.bz2s   .tgzs   .tar.gzs   .zips   .txzs   .tar.xz)   tar   tbz2   tgz   zip   txzc                      t                                           D ]$\  }}t           fd|D                       r|c S %d S )Nc              3   B   K   | ]}                     |          V  d S N)r   ).0extr$   s     r)   	<genexpr>zguesskind.<locals>.<genexpr>O   s/      88ct}}S!!888888r+   )r   itemsany)r$   r%   
extensionss   `  r)   	guesskindr:   M   sW     JJLL  j8888Z88888 	KKK	4r+   c                 8    | D ]}| |         c S | t                    S r3   r   )reporevs     r)   _rootctxr>   T   s+      Cy=r+   sy  
repo: {root}
node: {ifcontains(rev, revset("wdir()"), "{p1node}{dirty}", "{node}")}
branch: {branch|utf8}
{ifeq(latesttagdistance, 0, join(latesttag % "tag: {tag}", "\n"),
      separate("\n",
               join(latesttag % "latesttag: {tag}", "\n"),
               "latesttagdistance: {latesttagdistance}",
               "changessincelatesttag: {changessincelatesttag}"))}
c                 d   |                                  }d|j                            ddt                    i}t	          j                    }t          j        |j        |d|          }|                                 |                    |            |	                    t          |                                                     |                                 0d}|                     d	
          rd}|	                    |           |                                 |                                S )z!build content of .hg_archival.txts   templates   experimentals   archivemetatemplates   archivectx)rootNr+   T)missing   +)dirty)r<   uiconfig_defaultmetatemplater   stringior	   	startitemcontextdatar>   hexr=   rE   endgetvalue)rA   r<   optsoutfmrE   s         r)   buildmetadatarS   l   s    88::D 	TW^^35I
 
D -//C		TWc:t	<	<BLLNNNJJ3JGG$##%%G&&&
wwyy99T9"" 	E
eFFHHH<<>>r+   c                   &    e Zd ZdZddZd Zd ZdS )taritzawrite archive to tar file or stream.  can write uncompressed,
    or compress with gzip or bzip2.r+   c                       _         d  _        d fd	}t          |t                    r |d|           _        d S  |d|           _        d S )Nr+   c                    dk    r| dd         } |st          || dz             }t          j        |t          j        | dz             t
          j        |          }|_        t          j	        
                    |t          j        |           |          S 	 t          j         |t          j        | z             |          S # t          j        $ r+}t          j        t          j        |                    d }~ww xY w)N   gzr   r      b)mtime)r   gzipGzipFiler   sysstrzlibZ_BEST_COMPRESSIONfileobjtarfileTarFiletaropenCompressionErrorr   r#   r   forcebytestr)modenamer`   	gzfileobjer%   rZ   selfs        r)   rc   ztarit.__init__.<locals>.taropen   s   u}}AaCy 6"455G MOD4K00+  	  )O++hod33Y B"<hodTk::G   / B B B+j&=a&@&@AAABs   *C C?&C::C?s   w:)rg   s   w|)r`   )r+   N)rZ   r`   r   r   z)rj   r$   rZ   r%   rc   s   ` `` r)   __init__ztarit.__init__   s    
	B 	B 	B 	B 	B 	B 	B 	B4 dE"" 	2WU...DFFFWUD111DFFFr+   c                 r   t          j        |          }t          j        |          }| j        |_        t          |          |_        |r;t          j        |_        d|_	        t          j        |          |_
        d }d|_        n||_	        t          |          }| j                            ||           d S )N  r   )r   fsdecodera   TarInforZ   r   sizeSYMTYPEtyperf   linknamerI   rk   addfile)rj   rg   rf   islinkrL   is         r)   ru   ztarit.addfile   s     &&OD!!*T 	"_AFAF!*400AJDAFFAFD>>Dq$r+   c                 |    | j                                          | j        r| j                                         d S d S r3   )rk   closer`   rj   s    r)   donez
tarit.done   s?    < 	!L     	! 	!r+   N)r+   __name__
__module____qualname____doc__rl   ru   r{    r+   r)   rU   rU      sQ        ' '!2 !2 !2 !2F      ! ! ! ! !r+   rU   c                   &    e Zd ZdZddZd Zd ZdS )zipitz]write archive to zip file or stream.  can write uncompressed,
    or compressed with deflate.Tc                 "   t          |t                    rt          j        |          }t	          j        |d|rt          j        pt          j                  | _        d}||k     r|}|| _	        t          j        |          d d         | _        d S )Nwi    )r   r   r   ro   zipfileZipFileZIP_DEFLATED
ZIP_STOREDrk   rZ   timegmtime	date_time)rj   r$   rZ   compressepochs        r)   rl   zzipit.__init__   s    dE"" 	+$T**D#x8G$8NG<N
 
 5==E
U++BQB/r+   c                 r   t          j        t          j        |          | j                  }| j        j        |_        d|_        t          }|r	d}t          }||z  dz  |_        |xj        t          j        ddddt          | j                            z  c_        | j                            ||           d S )N   rn      s   <hhBliUT     r   )r   ZipInfor   ro   r   rk   compressioncompress_typecreate_system
_UNX_IFREG
_UNX_IFLNKexternal_attrextrastructpackintrZ   writestr)rj   rg   rf   rv   rL   rw   ftypes          r)   ru   zzipit.addfile   s    OH-d33T^DD&,  	DE%<B. 	
6;
OO
 
 	
 	4     r+   c                 8    | j                                          d S r3   )rk   ry   rz   s    r)   r{   z
zipit.done   s    r+   N)Tr|   r   r+   r)   r   r      sP        # #0 0 0 0 ! ! !.    r+   r   c                   $    e Zd ZdZd Zd Zd ZdS )fileitz$write archive as files in directory.c                 ^    || _         t          j        | j                   | _        || _        d S r3   )basedirvfsmodr   openerrZ   )rj   rg   rZ   s      r)   rl   zfileit.__init__   s'    j..


r+   c                    |r| j                             ||           d S |                      |dd          }|                    |           |                                 t          j                            | j        |          }t	          j        ||           | j	        #t	          j
        || j	        | j	        f           d S d S )N   wF)
atomictemp)r   symlinkwritery   r   r   joinr   chmodrZ   utime)rj   rg   rf   rv   rL   fdestfiles          r)   ru   zfileit.addfile   s     	Kd+++FKKduK55					7<<d33
4   :!HX
DJ788888 "!r+   c                     d S r3   r   rz   s    r)   r{   zfileit.done  s    r+   Nr|   r   r+   r)   r   r      sG        ..  

9 
9 
9    r+   r   c                 $    t          | |d          S )Ns   bz2rU   rg   rZ   s     r)   <lambda>r     s    tUF!;!; r+   c                 $    t          | |d          S )NrX   r   r   s     r)   r   r         dE5 9 9 r+   c                 $    t          | |d          S )Ns   xzr   r   s     r)   r   r     r   r+   c                 $    t          | |d          S )NF)r   r   s     r)   r   r     s    tUE!:!: r+   )   filesr,   r-   r.   r0   s   uzipr/   Tr+   Fc	                     |dk    r$r!t          j        t          d                    nt          ||           fd}	|t          vr$t          j        t          d          |z             |         t	          |         ||p                                d                   |st          j                   } j        	                    dd          rd}
 ||
          r |	|
d	d
fd           t                                                              |                    }t          |          }|r|                                 t          j                                         t          j         |          fg            j                            t          d          t          d          |          }|                    d           |D ]N}                    |          } |	|d|v rdpd	d|v |         j                   |                    |           O|                                 |rdt1          j                  D ]O}                    |          }t7          j        ||          }|z   dz   }||                    ||          z  }P|dk    r!t          j        t          d                                                     |S )a  create archive of repo as it was at node.

    dest can be name of directory, name of archive file, or file
    object to write archive to.

    kind is type of archive to create.

    decode tells whether to put files through decode filters from
    hgrc.

    match is a matcher to filter names of files to write to archive.

    prefix is name of path to put before every archive member.

    mtime is the modified time, in seconds, or None to use the changeset time.

    subrepos tells whether to include subrepos.
    r   s*   cannot give prefix when archiving to filesc                      |            }r                     | |          }                    | z   |||           d S r3   )
wwritedataru   )	rg   rf   rv   getdatarL   archiverdecoder&   r<   s	        r)   r   zarchive.<locals>.write:  sM    wyy 	/??4..D$fd;;;;;r+   s   unknown archive type '%s'r   s   uis   archivemetas   .hg_archival.txti  Fc                  "    t                     S r3   )rS   r@   s   r)   r   zarchive.<locals>.<lambda>L  s    mC.@.@ r+   s	   archiving)unittotal   xi     l)itemr   s"   no files match the archive pattern)r   r#   r   r*   	archiversdater   matchallrF   
configboollistmanifestwalkr   sortprefetchfilesr=   
matchfilesmakeprogressupdateflagsrL   	incrementcompletesortedsubstate
workingsubmatchmodsubdirmatcherarchiver{   )r<   r$   noder%   r   r
   r&   rZ   subreposr   rg   filesr   progressr   ffsubpathsubsubmatch	subprefixr   rA   s   `   ` `             @@r)   r   r     s   < x 	P+a MNNOOO	P D$//< < < < < < < < 9k!899D@AAA
t*CtU%;chhjjm<<H ' &&w%00 B"5;; 	BE$u&@&@&@&@AAA$$U++,,EJJE 

CGGIIw1$>>?@	
 	
 	
 7''lOO!H++U ( 
 
 	 	' 	'A1BE!TRZ)E2UDBJALLLA&&&& Hcl++ 	H 	HG..))C-gu==H(4/IS[[9hGGGEEzzk!ABBCCCMMOOOLr+   )TNr+   NF)&r[   r   r   ra   r   r   r^   i18nr   r   r   r   r    r   r	   r
   r   r   r   r   r   utilsr   rI   r   r   r*   r   r:   r>   rH   rS   rU   r   r   r   r   r   r+   r)   <module>r      s]    				                                              = 

  : I$j!Ij!     	 BB   6:! :! :! :! :! :! :! :!z, , , , , , , ,^       2 ;;9999:: 	  

T T T T T Tr+   