
    q&f)                     \   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j0                  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%y)%    N   )_nullrev)open)error	formattermatchpycompatscmutilutilvfs)
stringutili   i   c                    |rt        j                  |      }nt        | t              st	        d      t
        j                  j                  |       }|j                         }t        j                  |g       D ]$  }|j                  |      s|dt        |        } n t
        j                  j                  t        j                  |            }t        j                  |      }|j                  d      s|dz  }|j                  d      r|dd }|j                  d      s#t
        j                  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*   (   s     v&$&@AA!!$'88D"% 	C~~c"3s8),	 77DNN623D]]4 F??4 $  BGGMM$$77f;Lkk!IJKKM    s   .tars   .tbz2s   .tar.bz2s   .tgzs   .tar.gzs   .zips   .txzs   .tar.xz)   tar   tbz2   tgz   zip   txzc                 n     t         j                         D ]  \  }}t         fd|D              s|c S  y )Nc              3   @   K   | ]  }j                  |        y wN)r   ).0extr$   s     r)   	<genexpr>zguesskind.<locals>.<genexpr>O   s     8ct}}S!8s   )r   itemsany)r$   r%   
extensionss   `  r)   	guesskindr:   M   s5     JJL j8Z88K r+   c                 .    | 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                    | j                         }d|j                  j                  ddt              i}t	        j
                         }t        j                  |j                  |d|      }|j                          |j                  |        |j                  t        |      j                                | j                         (d}| j                  d	      rd
}|j                  |       |j                          |j                         S )z!build content of .hg_archival.txts   templates   experimentals   archivemetatemplates   archivectx)rootr+   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 	TWW^^35I
D --/C			TWWc:t	<BLLNJJ3JGG$##%G&
wwy99T9"E
eFFH<<>r+   c                   $    e Zd ZdZddZd Zd Zy)taritzawrite archive to tar file or stream.  can write uncompressed,
    or compress with gzip or bzip2.c                       _         d  _        d fd	}t        |t              r |d|       _        y  |d|       _        y )Nc                    dk(  r| dd } |st        || dz         }t        j                  |t        j                  | dz         t
        j                  |      }|_        t        j                  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}Aay"45G MMOOD4K0++	  ) OO++hood3Y	B"<<hoodTk:G  // B++j&=&=a&@AABs   ,C D(C??D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> dE"U.DFUD1DFr+   c                 z   t        j                  |      }t        j                  |      }| j                  |_        t        |      |_        |r@t        j                  |_        d|_	        t        j                  |      |_
        d }d|_        n||_	        t        |      }| j                  j                  ||       y )N  r   )r   fsdecodera   TarInforZ   r   sizeSYMTYPEtyperf   linknamerI   rk   addfile)rj   rg   rf   islinkrL   is         r)   ru   ztarit.addfile   s      &OOD!**T__AFAF!**40AJDAFAFD>Dq$r+   c                     | j                   j                          | j                  r| j                  j                          y y r3   )rk   closer`   rj   s    r)   donez
tarit.done   s+    <<LL  r+   N)r+   __name__
__module____qualname____doc__rl   ru   r{    r+   r)   rU   rU      s    '&2P  !r+   rU   c                   $    e Zd ZdZddZd Zd Zy)zipitz]write archive to zip file or stream.  can write uncompressed,
    or compressed with deflate.c                 (   t        |t              rt        j                  |      }t	        j
                  |d|xr t        j                  xs t        j                        | _        d}||k  r|}|| _	        t        j                  |      d d | _        y )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__   sz    dE"$$T*D#x8G$8$8NG<N<N
 5=E
U+BQ/r+   c                    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
                  j#                  ||       y )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    OOH--d3T^^D&&,, DE%<B. 	
6;;

O
 	
 	4 r+   c                 8    | j                   j                          y r3   )rk   ry   rz   s    r)   r{   z
zipit.done   s    r+   N)Tr|   r   r+   r)   r   r      s    #0 !.r+   r   c                   "    e Zd ZdZd Zd Zd Zy)fileitz$write archive as files in directory.c                 h    || _         t        j                  | j                         | _        || _        y r3   )basedirvfsmodr   openerrZ   )rj   rg   rZ   s      r)   rl   zfileit.__init__   s$    jj.
r+   c                    |r| j                   j                  ||       y | j                  |dd      }|j                  |       |j                          t        j
                  j                  | j                  |      }t	        j                  ||       | j                  -t	        j                  || j                  | j                  f       y y )N   wF)
atomictemp)r   symlinkwritery   r   r   joinr   chmodrZ   utime)rj   rg   rf   rv   rL   fdestfiles          r)   ru   zfileit.addfile   s    KKd+KKduK5			77<<d3
4 ::!HHX

DJJ78 "r+   c                      y r3   r   rz   s    r)   r{   zfileit.done  s    r+   Nr|   r   r+   r)   r   r      s    .

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 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/   c	                 &    |dk(  r r+t        j                  t        d            t        ||       fd}	|t        vr!t        j                  t        d      |z         |   t	        |   ||xs j                         d         |st        j                         } j                  j                  dd      rd}
 ||
      r |	|
d	d
fd       t        j                         j                  |            }t        |      }|r|j                          t        j                   j!                         t        j"                   |      fg        j                  j%                  t        d      t        d      |      }|j'                  d       |D ]I  }j)                  |      } |	|d|v xr dxs d	d|v |   j*                         |j-                  |       K |j/                          |r`t1        j2                        D ]H  }j5                  |      }t7        j8                  ||      }|z   dz   }||j;                  ||      z  }J |dk(  rt        j                  t        d            j=                          |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                 j     |       }rj                  | |      }j                  | z   |||       y r3   )
wwritedataru   )	rg   rf   rv   getdatarL   archiverdecoder&   r<   s	        r)   r   zarchive.<locals>.write?  s5    y??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>Q  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     sP   < x++a MNOOD$/< 9kk!89D@AA
t*CtU%;chhjm<H  &ww%0";$u&@A$$U+,EJE

CGGIw11$>?@	
 77''lO!H+U ( 
 	 	'A1B!TRZ)E2UDBJALA&	' 	cll+ 	HG..)C--gu=H(4/IS[[9hGGE		H zkk!ABCCMMO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!	 B 6?! ?!D, ,^ 2 ;99:	  

Tr+   