^cw(pddlZddlZddlZddlZddlZddlZddlZddlmZddl m Z ddl m Z ddl mZmZmZm Z mZmZmZddlmZejZdZd Zd Zd gd d gddgdgddgdZdZdZdddZdZ GddZ!GddZ"GddZ#e#e!ddd d!e"d"Z$ d'd&Z%dS)(N)_nullrev)open)error formattermatchpycompatscmutilutilvfs) stringutiliic*|rtj|}nt|tst dt j|}|}t |gD]1}| |r|dt| }n2t jtj |}tj|}| ds|dz }|dr |dd}|ds#t j|sd|vr!t#jt'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 isinstancebytes ValueErrorospathbasenamelowerextsgetendswithlen localpathpconvert startswithisabsrAbortr)destkindprefixrsfxlpfxs 4/usr/lib/python3/dist-packages/mercurial/archival.py tidyprefixr*(sy v&&$&& B@AA A!!$'' 88D"%%  C~~c""  3s88) ,  7  DN622 3 3D ]4 F ??4 $   LBGMM$$7$7L7f;L;Lk!IJJKKK Ms.tars.tbz2s.tar.bz2s.tgzs.tar.gzs.zips.txzs.tar.xz)tartbz2tgzziptxzctD]$\}}tfd|Dr|cS%dS)Nc3BK|]}|VdSN)r).0extr$s r) zguesskind..Os/88ct}}S!!888888r+)ritemsany)r$r% extensionss` r) guesskindr:MsW JJLLj 8888Z888 8 8 KKK  4r+c8|D] }||cS|tSr3r)reporevs r)_rootctxr>Ts+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}"))} cd|}d|jddti}t j}t j|j|d|}|||| t| | 0d}| d rd }| | ||S) z!build content of .hg_archival.txtstemplates experimentalsarchivemetatemplatesarchivectx)rootNr+T)missing+)dirty)r<uiconfig_defaultmetatemplater stringior startitemcontextdatar>hexr=rEendgetvalue)rAr<optsoutfmrEs r) buildmetadatarSls 88::D TW^^ 35I   D -//C  TWc:t < >r+c&eZdZdZddZdZdZdS)taritzawrite archive to tar file or stream. can write uncompressed, or compress with gzip or bzip2.r+c_d_dfd }t|tr|d|_dS|d|_dS)Nr+cdkr|dd}|st||dz}tj|tj|dzt j|}|_tj |tj||S tj|tj|z|S#tj $r+}tj tj|d}~wwxYw)Ngzrrb)mtime)rgzipGzipFiler sysstrzlibZ_BEST_COMPRESSIONfileobjtarfileTarFiletaropenCompressionErrorrr#r forcebytestr)modenamer` gzfileobjer%rZselfs r)rcztarit.__init__..taropensu}}AaCy6"455G MOD4K00+   ) O++hod33Y B"<hodTk::G/BBB+j&=a&@&@AAABs*CC?&C::C?sw:)rgsw|)r`)r+N)rZr`rrz)rjr$rZr%rcs` `` r)__init__ztarit.__init__s   B B B B B B B B4 dE " " 2WU...DFFFWUD111DFFFr+crtj|}tj|}|j|_t ||_|r;tj|_d|_ tj||_ d}d|_n||_ t|}|j ||dS)Nr)r fsdecoderaTarInforZrsizeSYMTYPEtyperflinknamerIrkaddfile)rjrgrfislinkrLis r)ruz tarit.addfiles && OD ! !*T  "_AFAF!*400AJDAFFAFD>>D q$r+c||j|jr|jdSdSr3)rkcloser`rjs r)donez tarit.dones?   < ! L    ! !r+N)r+__name__ __module__ __qualname____doc__rlrur{r+r)rUrUsQ''!2!2!2!2F   !!!!!r+rUc&eZdZdZddZdZdZdS)zipitz]write archive to zip file or stream. can write uncompressed, or compressed with deflate.Tc"t|trtj|}t j|d|r tjp tj|_d}||kr|}||_ tj |dd|_ dS)Nwi) rrr rozipfileZipFile ZIP_DEFLATED ZIP_STOREDrkrZtimegmtime date_time)rjr$rZcompressepochs r)rlzzipit.__init__s dE " " +$T**D #x8G$8NGrstUF!;!;r+c$t||dS)NrXrrs r)rrdE5 9 9r+c$t||dS)Nsxzrrs r)rrrr+c$t||dS)NF)rrs r)rrstUE!:!:r+)filesr,r-r.r0suzipr/Tr+Fc |dkr$r!tjtdnt||fd} |tvr$tjtd|z|t |||pd|st j}j ddrd} || r| | d d fd t |} t| } | r| t jt j| fgjtd td| } | d| D]N}|}| |d|vrdpd d|v|j| |O| |rdt1jD]O}|}t7j||}|zdz}| |||z } P| dkr!tjtd| 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. rs*cannot give prefix when archiving to filesc|}r||}|z|||dSr3) wwritedataru) rgrfrvgetdatarLarchiverdecoder&r<s r)rzarchive..write:sMwyy  /??4..D$fd;;;;;r+sunknown archive type '%s'rsuis archivemetas.hg_archival.txtiFc"tSr3)rSr@sr)rzarchive..LsmC.@.@r+s archiving)unittotalxil)itemrs"no files match the archive pattern)rr#rr* archiversdater matchallrF configboollistmanifestwalkrsort prefetchfilesr= matchfiles makeprogressupdateflagsrL incrementcompletesortedsubstate workingsubmatchmod subdirmatcherarchiver{)r<r$noder%rr r&rZsubreposrrgfilesrprogressrffsubpathsubsubmatch subprefixrrAs` ` ` @@r)rrs< x  P+a MNNOO O PD$//<<<<<<<<  9k!899D@AAA t*CtU%;chhjjm<>?@   7'' lOO!H++U(    ' 'A1B E!TRZ)E2UDBJA L L L   A  & & & &Hcl++ H HG..))C-gu==H(4/I S[[9hGG GEE zzk!ABBCCC MMOOO Lr+)TNr+NF)&r[rrrarrr^i18nrrrr rrr r rr r rrutilsrrIrrr*rr:r>rHrSrUrrrrrr+r)rs]    =  :I $ j ! I j !  BB 6:!:!:!:!:!:!:!:!z,,,,,,,,^        2  ; ; 9 9 9 9 : :        TTTTTTr+