Ë 0„'’jãó‚—ddlZddlZddlZddlmZddlmZddlmZm Z m Z m Z m Z mZmZmZmZmZmZmZddlmZd„Zd„Zd*d „Zd „Zd „Zd+d „Zd „Zd„Zd,d„Z d„Z!d„Z"d„Z#Gd„d«Z$dZ%dZ&dZ'dZ(d„Z)d„Z*Gd„d«Z+d„Z,d„Z-d„Z.d„Z/d„Z0d „Z1d!„Z2d"„Z3ejhd#„«Z5d$„Z6d%„Z7d&„Z8d'„Z9d(„Z:d)„Z;y)-éNé)Ú_)Ú repository) Ú bookmarksÚbundle2Ú cacheutilÚerrorÚ narrowspecÚphasesÚpycompatÚ requirementsÚscmutilÚstoreÚ transactionÚutil)Únodemapcód—t|«}|tjz}|j|«|S)a determine the final set of requirement for a new stream clone this method combine the "default" requirements that a new repository would use with the constaint we get from the stream clone content. We keep local configuration choice when possible. )ÚsetÚrequirementsmodÚSTREAM_FIXED_REQUIREMENTSÚupdate)Údefault_requirementsÚstreamed_requirementsr s ú9usr/lib/python3.12/site-packages/mercurial/streamclone.pyÚnew_stream_clone_requirementsr"s4€ôÐ+Ó,€LØ”O×=Ñ=Ñ=€LØ×ÑÐ-Ô.Ø Ðócó@—|jtjz}|S)z�the set of requirement the new clone will have to support This is used for advertising the stream options and to generate the actual stream content.)r rr)ÚrepoÚrequiredformatss rrr/s%€ð ×ÑœO×EÑEÑEðð Ðrcóô—|j}|j}|j}|€|jd«}|syt |«ry|j ryd}|j retj|d¬«}t|jdg««}t|jjdg««}t||z«}|r|sy|r|syt«} |jd«r#| jtj«d | fS|jd«} | s/|jj j#t%d««yt| j'd ««} | |j(z } | rx|jj j#t%d «d j+t-| ««z«|jj j#t%d ««y| } d | fS)a°Whether it is possible to perform a streaming clone as part of pull. ``bundle2`` will cause the function to consider stream clone through bundle2 and only through bundle2. Returns a tuple of (supported, requirements). ``supported`` is True if streaming clone is supported and False otherwise. ``requirements`` is a set of repo requirements from the remote, or ``None`` if stream clone isn't supported. sstream-preferred)FNFsclient)Úrolesstreams streamreqss=warning: stream clone requested but server has them disabled ó,sGwarning: stream clone requested but client is missing requirements: %s ó, sQ(see https://www.mercurial-scm.org/wiki/MissingRequirement for more information) T)rÚremoteÚstreamclonerequestedÚcapableÚlenÚheadsÚ canusebundle2Ú bundle2modÚ getrepocapsrÚgetÚremotebundle2capsÚboolÚaddrÚREVLOGV1_REQUIREMENTÚuiÚwarnrÚsplitÚ supportedÚjoinÚsorted) Úpulloprrr$ÚstreamrequestedÚbundle2supportedÚ local_capsÚlocal_supportedÚremote_supportedr Ú streamreqsÚ missingreqss rÚcanperformstreamcloner?:sÝ€ð �;‰;€DØ �]‰]€Fð×1Ñ1€OðÐà Ÿ.™.Ð)<Ó=ˆÙ Øô ˆ4„yØð‡|‚|ØàÐØ ×ÒÜ×+Ñ+¨D°yÔAˆ ܘjŸn™n¨Y¸Ó;Ó<ˆÜ˜v×7Ñ7×;Ñ;¸IÀrÓJÓKÐÜ Ð2BÑ BÓCÐñ ¡Øá Ñ)Øô“5€LØ ‡~�~�iÔ Ø×Ñœ×=Ñ=Ô>ðB �Ð Ðð?—^‘^ MÓ2ˆ áØ �K‰K�N‰N× Ñ Üð"óô ð ä˜×)Ñ)¨$Ó/Ó0ˆ à  4§>¡>Ñ1ˆ Ù Ø �K‰K�N‰N× Ñ Üð*óð—*‘*œV KÓ0Ó1ñ 2ô ð �K‰K�N‰N× Ñ Üð/óô ð Ø!ˆ à �Ð Ðrcóâ—ddlm}t|«\}}|sy|j}|j}d}|j d«r9|j «5}|jdi«j«}ddd«|jjtd««|j «5}|jdi«j«}ddd«j«} t| «} | dk(rtj"td««‚| d k(rtj"td ««‚| d k7rtj"td ««‚|j«} t%t| j'd d««\} } |j+«5t-||| | «t/|j0|«|_|j3|j|j0|j4«|j6_t;j<|«t?j@|«|r|jBjE||«|jG«ddd«y#1swY�ŒûxYw#1swY�Œ«xYw#t$r tj td«| «‚wxYw#tt(f$r tj td«| «‚wxYw#1swYyxYw)zðPossibly perform a legacy stream clone operation. Legacy stream clones are performed as part of pull but before all other operations. A legacy stream clone will not be performed if a bundle2 stream clone is supported. r©Ú localrepoNs branchmapsstreaming all changes s stream_outó'unexpected response from remote server:soperation forbidden by serverés$locking the remote repository failedrs%the server sent an unknown error codeó )$ÚrBr?rr$r&ÚcommandexecutorÚ callcommandÚresultr1ÚstatusrÚreadlineÚintÚ ValueErrorr Ú ResponseErrorÚAbortÚmapr3Ú TypeErrorÚlockÚ consumev1rr ÚresolvestorevfsoptionsÚfeaturesÚsvfsÚoptionsrÚwritereporequirementsrÚpost_stream_cleanupÚ _branchcachesÚreplaceÚ invalidate) r7rBr4r rr$Ú rbranchmapÚeÚfpÚlÚrespÚ filecountÚ bytecounts rÚmaybeperformlegacystreamclonerd˜sr€õä3°FÓ;Ñ€Iˆ|á Øà �;‰;€DØ �]‰]€Fð€JØ ‡~�~�lÔ#Ø × #Ñ #Ô %¨ØŸ™ |°RÓ8×?Ñ?ÓAˆJ÷&ð ‡G�G‡N�N”1Ð/Ó0Ô1à × Ñ Ô ! QØ �]‰]˜=¨"Ó -× 4Ñ 4Ó 6ˆ÷ "ð � ‰ ‹ €Að Ü�1‹vˆð  ˆq‚yÜ�k‰kœ!Ð<Ó=Ó>Ð>Ø �ŠÜ�k‰kœ!ÐCÓDÓEÐEØ �ŠÜ�k‰kœ!ÐDÓEÓFÐFà � ‰ ‹ €Að Ü"¤3¨¯©°°aÓ(8Ó9ш �9ð �‰�Ü�$˜˜I yÔ1Ü9Ø × Ñ Ø ó ˆÔð&×<Ñ<Ø �G‰G�T×&Ñ&¨¯ © ó ˆ� ‰ Ôô ×%Ñ% dÔ+Ü×#Ñ# DÔ)á Ø × Ñ × &Ñ & t¨ZÔ 8à �‰Ô÷ ˆ÷E&Ñ %ú÷ "Ñ !ûô ò Ü×!Ñ!Ü Ð8Ó 9¸1ó ð ð ûô œ Ð "ò Ü×!Ñ!Ü Ð8Ó 9¸1ó ð ð ú÷ ˆús=Á!I-Â0!I:Ã* JÅ/#J3Æ"CK%É-I7É:JÊ)J0Ê3/K"Ë%K.cóâ—tj|jvry|jj ddd¬«syt j |«}|r|jj dd«Sy)z5Whether streaming clones are allowed from the server.Fsservers uncompressedT)Ú untrustedsuncompressedallowsecret)rÚREPO_FEATURE_STREAM_CLONErUr1Ú configboolr Ú hassecret)rÚsecrets rÚallowservergenerationrkãsc€ä×+Ñ+°4·=±=Ñ@Øà �7‰7× Ñ ˜i¨ÀDÐ Ô IØô× Ñ ˜dÓ #€FÙ Ø�w‰w×!Ñ! )Ð-GÓHÐHà rcó>—|jj|||¬«S)N©ÚphaseÚ obsolescence)rÚwalk)rÚmatcherrnros rÚ_walkstreamfilesrrõs€Ø �:‰:�?‰?˜7¨%¸lˆ?Ó KÐKrcóh‡‡‡‡—gŠd}‰j«5‰jjd«t‰«D]a}|j «D]L}|j ‰j j«}|sŒ+‰j|j|f«||z }ŒNŒct‰«ddd«t‰«‰jjdt‰«|fz«‰jЉjjŠˆˆˆˆfd„}t‰«||«fS#1swYŒzxYw)aËEmit content for version 1 of a streaming clone. This returns a 3-tuple of (file count, byte size, data iterator). The data iterator consists of N entries for each file being transferred. Each file entry starts as a line with the file name and integer size delimited by a null byte. The raw file data follows. Following the raw file data is the next file entry, or EOF. When used on the wire protocol, an additional line indicating protocol success will be prepended to the stream. This function is not responsible for adding it. This function will obtain a repository lock to ensure a consistent view of the store is captured. It therefore may raise LockError. ró scanning Ns%d files, %d bytes to transfer c3óP•K—‰D]�\}}‰r ‰jjd||fz«dtj|«|fz–—‰|dd¬«5}|dkr|j |«–—n t j ||¬«D]}|–—Œddd«Œ’y#1swYŒ�xYw­w)Nssending %s (%d bytes) s%s%d srbF)Ú auditpathi©Úlimit)r1ÚdebugrÚ encodedirÚreadrÚ filechunkiter)ÚnameÚsizer_ÚchunkÚ debugflagÚentriesrrVs €€€€rÚemitrevlogdataz"generatev1..emitrevlogdata!s�øèø€Û!‰JˆD�$ÙØ—‘— ‘ Ð8¸DÀ$¸<ÑGÔHध¡°Ó!6¸Ð =Ñ=Ò =ñ�d˜E¨UÕ3°rؘ5’=ØŸ'™' $›-Ó'ä!%×!3Ñ!3°B¸d×!C˜Ø#› ð"D÷ 4Ð3ñ"÷4Ð3üsƒAB&Á:B B&ÂB# ÂB&)rRr1ryrrÚfilesÚ file_sizerÚvfsÚappendÚunencoded_pathÚ_test_sync_point_walk_1Ú_test_sync_point_walk_2r'rVr€) rÚ total_bytesÚentryÚfr„r‚r€r�rVs ` @@@rÚ generatev1r�ùsùû€ð&€GØ€Kà �‰�Ø �‰� ‰ �mÔ$Ü% dÖ+ˆEØ—[‘[–]�ØŸK™K¨¯ © ¯©Ó7� ÚØ—N‘N A×$4Ñ$4°iÐ#@ÔAØ 9Ñ,‘Kñ #ð,ô  Ô%÷ ô˜DÔ!à‡G�G‡M�MØ+¬s°7«|¸[Ð.IÑIôð �9‰9€DØ—‘×!Ñ!€I÷ $ô ˆw‹<˜¡nÓ&6Ð 6Ð6÷C ˆús™A$D(Á>1D(Ä(D1c#ó¶K—t|«sd–—y t|«\}}}d–—d||fz–—|D]}|–—Œy#tj$rd–—YywxYw­w)aÇEmit content for version 1 of streaming clone suitable for the wire. This is the data output from ``generatev1()`` with 2 header lines. The first line indicates overall success. The 2nd contains the file count and byte size of payload. The success line contains "0" for success, "1" for stream generation not allowed, and "2" for error locking the repository (possibly indicating a permissions error for the server process). s1 Ns2 s0 s%d %d )rkr�r Ú LockError)rrbrcÚitrs rÚgeneratev1wireprotor‘3spèø€ô ! Ô &ØŠ ØðÜ#-¨dÓ#3Ñ ˆ �9˜bð ‚LØ ˜  9Ð-Ñ -Ò-ۈ؋ ñøô �?‰?òØŠ Ùðüs%‚A”<£A¼AÁAÁAÁAc󒇇‡—‰dk7r td«‚t‰«}djt|««Šˆˆˆfd„}||«fS)a@Emit content for version 1 of a stream clone bundle. The first 4 bytes of the output ("HGS1") denote this as stream clone bundle version 1. The next 2 bytes indicate the compression type. Only "UN" is currently supported. The next 16 bytes are two 64-bit big endian unsigned integers indicating file count and byte count, respectively. The next 2 bytes is a 16-bit big endian unsigned short declaring the length of the requirements string, including a trailing . The following N bytes are the requirements string, which is ASCII containing a comma-delimited list of repo requirements that are needed to support the data. The remaining content is the output of ``generatev1()`` (which may be compressed in the future). Returns a tuple of (requirements, data generator). óUNs.we do not support the compression argument yetr"c3ó•K—d–—‰–—t‰«\}}}‰jjtd«||fz«t j d||«–—t j dt ‰«dz«–—‰dz–—‰dk(sJ‚‰jjtd«|td «¬ «}|jd «|D]!}|jt |«¬ «|–—Œ#|j«y­w) NsHGS1swriting %d bytes for %d files ó>QQó>Hrór“óbundleóbytes©ÚtotalÚunitr©Ústep) r�r1rJrÚstructÚpackr'Ú makeprogressrÚ incrementÚcomplete)rbrcr�ÚprogressrÚ compressionrÚrequiress €€€rÚgenzgeneratebundlev1..genksøøèø€ØŠ ØÒä#-¨dÓ#3Ñ ˆ �9˜bØ �‰�‰Ü Ð0Ó 1°YÀ Ð4JÑ Jô ô�k‰k˜& )¨YÓ7Ò7Ü�k‰k˜%¤ X£°Ñ!2Ó3Ò3ؘÑÒð˜eÒ#Ð#Ð#à—7‘7×'Ñ'Ü ˆi‹L  ´°(³ ð(ó ˆð �‰˜ÔãˆEØ × Ñ ¤C¨£JÐ Ô /Ø‹Kðð ×ÑÕùsƒDD)rMrr5r6)rr¥r r§r¦s`` @rÚgeneratebundlev1r¨OsJú€ð,�eÒÜÐJÓKÐKä(¨Ó.€LØ�y‰yœ  Ó-Ó.€Höð6 ™›Ð Ðrc ó¨—|j«5|jjtd«|t j |«fz«|jj td«|td«¬«}|jd«t j«}|jd«5|jj|j|¬«5t|«D�]X}t j|d«r|j«}nIg}|r|dd k(s,|j|j!d ««|sŒ#|dd k(sŒ,d j#|«} |j%d d «\} } t'| «} |jj0r3|jj3d| t j | «fz«t5j6| «} |j| dd¬«5} t j8|| ¬«D].} |j;t=| «¬«| j?| «Œ0 ddd«�Œ[ ddd«|jAd¬«ddd«t j«|z }|dkrd}|jC«|jjtd«t j |«|t j ||z «fz«ddd«y#t(t*f$r t-j.td «|«‚wxYw#1swY�ŒExYw#1swYŒìxYw#1swYŒÞxYw#1swYyxYw)a Apply the contents from version 1 of a streaming clone file handle. This takes the output from "stream_out" and applies it to the specified repository. Like "stream_out," the status line added by the wire protocol is not handled by this function. ó!%d files to transfer, %s of data ócloner™ršr)Ú expectedcountrKéÿÿÿÿó rrr—rCsadding %s (%s) ówT)Úbackgroundcloserwr�N©Úclearfilecacheçü©ñÒMbP?ó(transferred %s in %.1f seconds (%s/sec) )"rRr1rJrrrcr¡rÚtimerrrVÚbackgroundclosingÚrangeÚ safehasattrrKr†r{r5r3rLrMrQr rNr€ryrÚ decodedirr|r¢r'Úwriter\r£)rr_rbrcr¤ÚstartÚir`Úl_bufr}r~ÚpathÚofprÚelapseds rrSrS‰sÄ€ð �‰�Ø �‰�‰Ü Ð3Ó 4Øœ$Ÿ.™.¨Ó3Ð4ñ 5ô ð—7‘7×'Ñ'Ü ˆh‹K˜y¬q°«{ð(ó ˆð �‰˜ÔÜ— ‘ “ ˆð × Ñ ˜hÕ 'Ø—‘×,Ñ,¨T¯W©WÀIÐ,ÕNܘy×)�Aä×'Ñ'¨¨JÔ7ØŸK™K›M™ð !#˜Ù#(¨U°2©Y¸%Ò-?Ø!ŸL™L¨¯©°«Ô4ò$)¨U°2©Y¸%Ó-?àŸH™H U›O˜ðØ%&§W¡W¨U°AÓ%6™ ˜˜dÜ" 4›y˜ð —w‘w×(Ò(ØŸ™Ÿ ™ Ø/°4¼¿¹ÈÓ9MÐ2NÑNôô!Ÿ?™?¨4Ó0�DØŸ™ 4¨¸t˜ÔDÈÜ%)×%7Ñ%7¸À$×%G˜EØ$×.Ñ.´C¸³JÐ.Ô?ØŸI™I eÕ,ñ&H÷EÑDñ3*÷OðB �O‰O¨4ˆOÔ 0÷E(ôH—*‘*“, Ñ&ˆØ �aŠ<؈GØ×ÑÔØ �‰�‰Ü Ð:Ó ;ä—‘˜yÓ)ØÜ—‘˜y¨7Ñ2Ó3ðñ ô ÷C ˆøôT'¬ Ð2òÜ#×1Ñ1ÜÐHÓIÈ1óððú÷EÑDú÷5OÐNú÷(Ð 'ú÷3 ˆús|‘B#MÂ4(L<ÃA%L0ÅL0Å L0Å K1Å=A2L0Ç/A L# È9 L0ÉL<ÉB MË1/L Ì L0Ì#L-Ì(L0Ì0L9 Ì5L<Ì<M ÍMÍMcóì—|jd«}|dk7r!tjtd«|z«‚t j d|jd««\}}t j d|jd««d}|j|«}|j d«stjtd ««‚t|jd«jd ««}|||fS) NrDr“s<only uncompressed stream clone bundles are supported; got %sr•ér–rr—s@malformed stream clone bundle: requirements not properly encodedr") r{r rOrrŸÚunpackÚendswithrÚrstripr3)r_r¥rbrcÚ requireslenr¦r s rÚreadbundle1headerrÇÝsâ€Ø—'‘'˜!“*€KØ�eÒÜ�k‰kÜ ð%ó ðñ  ó ð ô"Ÿ=™=¨°·±¸³Ó=Ñ€IˆyÜ—-‘-  r§w¡w¨q£zÓ2°1Ñ5€KØ�w‰w�{Ó#€Hà × Ñ ˜UÔ #Ü�k‰kÜ ð5ó ó ð ô�x—‘ uÓ-×3Ñ3°DÓ9Ó:€Là �i Ð -Ð-rcóN—t|«rtjtd««‚t |«\}}}||j z }|r9tjtd«dj t|««z«‚t||||«tj|«y)zºApply the content from a stream clone bundle version 1. We assume the 4 byte header has been read and validated and the file handle is at the 2 byte compression identifier. s2cannot apply stream clone bundle on non-empty repoó4unable to apply stream clone: unsupported format: %sr#N) r'r rOrrÇr4r5r6rSrrY)rr_rbrcr r>s rÚ applybundlev1rÊùs—€ô  ˆ4„yÜ�k‰kÜ ÐCÓ Dó ð ô*;¸2Ó)>Ñ&€Iˆy˜,Ø §¡Ñ/€KÙÜ�k‰kÜ ÐEÓ FØ�j‰jœ  Ó,Ó-ñ .ó ð ô ˆd�B˜  9Ô-Ü ×Ñ Õ%rcó—eZdZdZd„Zd„Zy)Ústreamcloneapplierz¿Class to manage applying streaming clone bundles. We need to wrap ``applybundlev1()`` in a dedicated type to enable bundle readers to perform bundle type-specific functionality. có—||_y©N)Ú_fh)ÚselfÚfhs rÚ__init__zstreamcloneapplier.__init__s €Øˆ�rcó.—t||j«SrÎ)rÊrÏ)rÐrs rÚapplyzstreamcloneapplier.applys€Ü˜T 4§8¡8Ó,Ð,rN)Ú__name__Ú __module__Ú __qualname__Ú__doc__rÒrÔ©rrrÌrÌs„ñò ó-rrÌósóccóL—g}|j«s|jd«|S)z!list snapshot file from the stores phaseroots)Ú publishingr†)rÚfnamess rÚ_walkstreamfullstorefilesrß's"€à €FØ �?‰?Ô Ø� ‰ �mÔ$Ø €Mrcób—|\}}}}|tk7r|S||||||j|««fS)z actually copy the snapshot files)Ú _filefullr5)r‹ÚcopyÚvfsmapÚsrcr}ÚftypeÚdatas rÚ _filterfullrç/s@€à"Ñ€Cˆˆu�dØ ” ÒØˆ Ø ��u™d 6¨#¡;×#3Ñ#3°DÓ#9Ó:Ð ;Ð;rcó.—eZdZdZd„Zd„Zd„Zd„Zd„Zy)ÚTempCopyManagera·Manage temporary backup of volatile file during stream clone This should be used as a Python context, the copies will be discarded when exiting the context. A copy can be done by calling the object on the real path (encoded full path) The backup path can be retrieved using the __getitem__ protocol, obj[path]. On file without backup, it will return the unmodified path. (equivalent to `dict.get(x, x)`) có —d|_d|_yrÎ)Ú_copiesÚ_dst_dir)rÐs rrÒzTempCopyManager.__init__Es€ØˆŒ ؈� rcó�—|j�d}tj|«‚i|_tjd¬«|_|S)NzCopies context already opens hg-clone-)Úprefix)rër ÚProgrammingErrorr Úmkdtemprì)rÐÚmsgs rÚ __enter__zTempCopyManager.__enter__Is@€Ø �<‰<Ð #Ø/ˆCÜ×(Ñ(¨Ó-Ð -؈Œ Ü ×(Ñ(° Ô=ˆŒ ؈ rcó—tjj|«}tj||j ¬«\}}tj |«||j|<tj||d¬«|S)z"create a backup of the file at src)rîÚdirT)Úhardlink) Úosr¾Úbasenamer ÚmkstemprìÚcloserërÚ copyfiles)rÐrärîÚfdÚdsts rÚ__call__zTempCopyManager.__call__Qs^€ä—‘×!Ñ! #Ó&ˆÜ×"Ñ"¨&°d·m±mÔD‰ˆˆCÜ �‰�Œ ؈� ‰ �SÑÜ �‰�s˜C¨$Õ/؈ rcó:—|jj||«S)z„return the path to a valid version of `src` If the file has no backup, the path of the file is returned unmodified.)rër,)rÐräs rÚ __getitem__zTempCopyManager.__getitem__Zs€ð �|‰|×Ñ  SÓ)Ð)rcóÆ—|jj«D]}tj|«Œtj|j «d|_d|_y)zdiscard all backupsN)rëÚvaluesrÚ tryunlinkÚtryrmdirrì)rÐÚargsÚkwarsÚtmps rÚ__exit__zTempCopyManager.__exit__asC€à—<‘<×&Ñ&Ö(ˆCÜ �N‰N˜3Õ ð)ä � ‰ �d—m‘mÔ$؈Œ ؈� rN) rÕrÖr×rØrÒròrýrÿrrÙrrréré7s „ñ òòòò*órrécó†—t|jt|ji}|j|j «vsJ‚|S)z$make a (src -> vfs) map for the repo)Ú _srcstorerVÚ _srccacheÚcachevfsr…r)rrãs rÚ_makemapr js<€ô �4—9‘9Ü�4—=‘=ð€Fð �8‰8˜6Ÿ=™=›?Ñ *Ð*Ð *à €Mrc #ó�K—t|«}|j|j«vrtjd«‚|D��cgc] \}}||||f‘Œ}}}t |«}dx}}|D]4\}} }|j «D]} |dz }|| j| «z }ŒŒ6|jjtd«|td«¬«} | jd«t«5} | 5|D]I\}} }|j «D]0} | jsŒ| | j| j««Œ2ŒK||f–—d} |D]Ë\}} }|j!|| | |d¬«}|D]ª\}}}|–—t#j$t |««–—t#j$|«–—|–—d}|D]3}|t |«z }| t |«z } | j| «|–—Œ5||k7sŒ†td «}tj&||||fz«‚ŒÍ d d d «d d d «y cc}}w#1swYŒxYw#1swYy xYw­w) zactually emit the stream bundleó9repo.vfs must not be added to vfsmap for security reasonsrrr˜r™ršT)rr…ÚcopiesÚ max_changesetÚpreserve_file_counts=clone could only read %d bytes from %s, but expected %d bytesN)r r…rr rïr'rƒr„r1r¡rrréÚ is_volatiler5r‡Ú get_streamsrÚ uvarintencoderO)rr�rãÚvfs_keyr^Ú max_linkrevÚ file_countÚ totalfilesizeÚkr…rŒr¤râÚtotalbytecounträÚ entry_streamsr}Ústreamr~rcrrñs rÚ_emit2rwsIèø€ä �d‹^€Fð  ‡x�x�6—=‘=“?Ñ"Ü×$Ñ$Ø Hó ð ñ BIÔIÁ±°'¸1�˜ ™¨!Ò,À€GÑIä�d“)€KØ!"Ð"€J�㉠ˆˆ3�Ø—‘–ˆAØ ˜!‰OˆJØ ˜QŸ[™[¨Ó-Ñ -‰Mñðð �w‰w×#Ñ#Ü ˆ)‹ ˜M´°(³ ð$ó€Hð ‡O�O�AÔÜ Ô ˜d¢Hã ‰IˆAˆs�AØ—W‘W–Y�Ø—=“=Ù˜Ÿ™ !×"2Ñ"2Ó3Õ4ñð!ð ˜-Ð'Ò'؈ã"‰KˆC��aØŸM™MØØØØ)Ø$(ð *óˆMó'4Ñ"��f˜dØ’ Ü×(Ñ(¬¨T«Ó3Ò3Ü×(Ñ(¨Ó.Ò.Ø’ Ø� Û#�Eؤ U£Ñ+�IØ"¤c¨%£jÑ0�NØ—O‘O NÔ3Ø“Kð $ð  Ó$ôð-ó�Cô Ÿ+™+ c¨Y¸¸dÐ,CÑ&CÓDÐDñ%'4ñ#÷%-× Ð ùóJ÷%- Hú× Ð üsP‚AIÁH(ÁBIÃ,H:Ã/)H.ÄCH.Ç-)H.ÈH:ÈIÈ.H7 È3H:È:IÈ?Ic #ó K—t|«}|j|j«vrtjd«‚|D��cgc] \}}||||f‘Œ}}}t |«}t |«}|j jtd«|td«¬«}|jd«t«5}|5|D]Z\} } }|j«D]A} | j| «| jsŒ!|| j| j««ŒCŒ\d–—t!j"|«–—|D]Ÿ\} } }|j%|| ||¬«} t!j"t | ««–—| D]O\}}}| –—t!j"t |««–—t!j"|«–—|–—|Ed{–—†ŒQ|j'«Œ¡ ddd«ddd«ycc}}w7Œ0#1swYŒxYw#1swYyxYw­w)z$actually emit the stream bundle (v3)rr˜sentryršrN)rr…rr)r r…rr rïr'r1r¡rrrérƒr„rr5r‡rrrr¢)rr�rãrr^Útotal_entry_countrr¤rârr…rŒrärr}rr~s rÚ_emit3r ºsÝèø€ä �d‹^€Fð  ‡x�x�6—=‘=“?Ñ"Ü×$Ñ$Ø Hó ð ñ BIÔIÁ±°'¸1�˜ ™¨!Ò,À€GÑIܘG› Ðä�d“)€KØ�w‰w×#Ñ#Ü ˆ)‹ ØÜ ˆx‹[ð$ó€Hð  ‡O�O�AÔÜ Ô ˜d¢Hã ‰IˆAˆs�AØ—W‘W–Y�Ø— ‘ ˜CÔ Ø—=“=Ù˜Ÿ™ !×"2Ñ"2Ó3Õ4ñð!ð Š ä× Ñ Ð!2Ó3Ò3ã"‰KˆC��aØŸM™MØØØØ)ð *óˆMô ×$Ñ$¤S¨Ó%7Ó8Ò 8Û&3Ñ"��f˜dØ’ Ü×(Ñ(¬¨T«Ó3Ò3Ü×(Ñ(¨Ó.Ò.Ø’ Ø!×!Ñ!ð '4ð × Ñ Õ ñ#÷%-× Ð ùóJðF"ø÷3%- Hú× Ð üs\‚AHÁG.ÁA$HÂ:HÂ=:G6Ã8C G6ÇG4 ÇG6ÇHÇ%HÇ4G6Ç6G? Ç;HÈH ÈHcó—y©z+a function for synchronisation during testsNrÙ©rs rrˆrˆïó�rcó—yr"rÙr#s rr‰r‰ór$rc#ó¤K—|j|j«€J‚d}|s|r!tj|j||«}|j « }t ||||¬«}|D] }t|f–—Œtj|«D]?}|jj|«sŒtj|d¬«}t|f–—ŒAy­w)z£emit a seris of files information useful to clone a repo return (vfs-key, entry) iterator Where `entry` is StoreEntry. (used even for cache entries) NrmT)Ú entry_pathr)Ú _currentlockÚ_lockrefr ÚmatchÚrootrÝrrr rÚ cachetocopyr ÚexistsrÚSimpleStoreEntryr ) rÚincludesÚexcludesÚincludeobsmarkersrqrnr�r‹r}s rÚ _entries_walkr2÷sÍèø€ð × Ñ ˜TŸ]™]Ó +Ð 7Ð7Ð 7à€GÙ‘8Ü×"Ñ" 4§9¡9¨h¸ÓAˆà—‘Ó!Ð !€EÜØ ØØØ&ô €Gó ˆÜ˜%Ð Ó ðô×%Ñ% dÖ+ˆØ �=‰=× Ñ  Õ %ä×*Ñ*ØØ ôˆEô˜eÐ$Ó $ñ,ùs ‚B)CÂ,$Ccó—|j«5|jjd«t||||¬«}t ||«}t |«}|\}}t |«ddd«t|«fS#1swYŒxYw)aÍEmit content for version 2 of a streaming clone. the data stream consists the following entries: 1) A char representing the file destination (eg: store or cache) 2) A varint containing the length of the filename 3) A varint containing the length of file data 4) N bytes containing the filename (the internal, store-agnostic form) 5) N bytes containing the file data Returns a 3-tuple of (file count, file size, data iterator). rt©r/r0r1N)rRr1ryr2rÚnextrˆr‰) rr/r0r1r�ÚchunksÚfirstrÚtotal_file_sizes rÚ generatev2r9s€€ð �‰�à �‰� ‰ �mÔ$äØ ØØØ/ô  ˆô˜˜gÓ&ˆÜ�V“ ˆØ&+Ñ#ˆ �OÜ Ô%÷ ô˜DÔ!à �¨Ð .Ð.÷# ˆús ‘AA;Á;Bcó—|j«5|jjd«t||||¬«}t |t |««}t |«}|�J‚t|«ddd«t|«S#1swYŒxYw)aÕEmit content for version 3 of a streaming clone. the data stream consists the following: 1) A varint E containing the number of entries (can be 0), then E entries follow 2) For each entry: 2.1) The number of files in this entry (can be 0, but typically 1 or 2) 2.2) For each file: 2.2.1) A char representing the file destination (eg: store or cache) 2.2.2) A varint N containing the length of the filename 2.2.3) A varint M containing the length of file data 2.2.4) N bytes containing the filename (the internal, store-agnostic form) 2.2.5) M bytes containing the file data Returns the data iterator. XXX This format is experimental and subject to change. Here is a XXX non-exhaustive list of things this format could do or change: - making it easier to write files in parallel - holding the lock for a shorter time - improving progress information - ways to adjust the number of expected entries/files ? rtr4N) rRr1ryr2r Úlistr5rˆr‰)rr/r0r1r�r6r7s rÚ generatev3r<9s|€ð2 �‰�à �‰� ‰ �mÔ$äØ ØØØ/ô  ˆô ˜œd 7›mÓ,ˆÜ�V“ ˆØˆ}Ј}Ü Ô%÷ ô˜DÔ!à €M÷! ˆús ‘ABÂB c'óžK—|d}|dd}|5|rt|Ž5d–—ddd«nd–—ddd«y#1swYŒxYw#1swYyxYw­w)Nrr)Únested)ÚctxsÚthisÚrests rr>r>esJèø€à �‰7€DØ ��ˆ8€DÚ Ù Ü˜’Û÷�ó ÷ ˆç�ú÷ ˆüs-‚ A � Aš5Ÿ A¬ A µ> ºAÁA ÁA c ó0‡—‰j«5‰jjtd«|t j |«fz«t j «}‰jjtd«|td«¬«}|jd«t‰«}‰j|j«vrtjd«‚‰jd«5ˆfd„|j«D«}t|Ž5t!|«D�]}t j"|d«} || } t j$|«} t j$|«} t j"|| «} ‰jj&r4‰jj)d | | t j | «fz«| | d «5}t j*|| ¬ «D].}|j-t/|«¬ «|j1|«Œ0 d d d «�Œ d d d «‰j3d¬«d d d «t j «|z }|dkrd}‰jjtd«t j |j4«|t j |j4|z «fz«|j7«d d d «y #1swY�ŒÒxYw#1swYŒÎxYw#1swYŒÀxYw#1swYy xYw)z’Apply the contents from a version 2 streaming clone. Data is read from an object that only needs to provide a ``read(size)`` method. rªr«r™ršrrc3óT•K—|]}|j‰j«–—Œ!y­wrΩr¶r1©Ú.0r…rs €rÚ zconsumev2..�ó!øèø€ÐN¹o°s�C×)Ñ)¨$¯'©'×2¹oùóƒ%(róadding [%s] %s (%s) r¯rwr�NTr±r³r´)rRr1rJrrrcrµr¡rr r…rr rïrr>r·Ú readexactlyÚuvarintdecodestreamr€ryr|r¢r'rºr\Úposr£)rr_rbÚfilesizer»r¤rãr?r¼rär…ÚnamelenÚdatalenr}r¿rrÀs` rÚ consumev2rQqswø€ð �‰�Ø �‰�‰Ü Ð3Ó 4Øœ$Ÿ.™.¨Ó2Ð3ñ 4ô ô — ‘ “ ˆØ—7‘7×'Ñ'Ü ˆh‹K˜x¬a°«kð(ó ˆð �‰˜Ôä˜$“ˆð �8‰8�v—}‘}“Ñ &Ü×(Ñ(ØLóð ð× Ñ ˜hÕ 'ÛN¸f¿m¹m¼oÓNˆDܘ’ܘy×)�AÜ×*Ñ*¨2¨qÓ1�CØ  ™+�CÜ"×6Ñ6°rÓ:�GÜ"×6Ñ6°rÓ:�Gä×+Ñ+¨B°Ó8�Dà—w‘w×(Ò(ØŸ™Ÿ ™ Ø4Ø" D¬$¯.©.¸Ó*AÐBñCôñ ˜T 4œ¨CÜ%)×%7Ñ%7¸À'×%J˜EØ$×.Ñ.´C¸³JÐ.Ô?ØŸI™I eÕ,ñ&K÷)™ñ*÷ð, �O‰O¨4ˆOÔ 0÷1(ô4—*‘*“, Ñ&ˆØ �aŠ<؈GØ �‰�‰Ü Ð:Ó ;ä—‘˜xŸ|™|Ó,ØÜ—‘˜xŸ|™|¨gÑ5Ó6ðñ ô ð ×ÑÔ÷y ˆ÷P)™ú÷�ú÷(Ð 'ú÷/ ˆúsW’CL Ã1"LÄB>K4ÇA K' È K4È'LÉBL Ë'K1Ë,K4Ë4K= Ë9LÌL ÌL Ì Lc 󨇗‰j«5tj«}tj|«}‰jj t d«|z«‰jjt d«|t d«¬«}|jd«d}t‰«}‰j|j«vrtjd«‚‰jd«5ˆfd„|j«D«}t|Ž5t!|«D�]a}tj|«} | dk(r4‰jj"r‰jj%d|z«t!| «D]ð}tj&|d «} || } tj|«} tj|«} tj&|| «}‰jj"r8d }|| |tj(| «fz}‰jj%|«|| z }| |d «5}tj*|| ¬ «D]}|j-|«Œ d d d «Œò|j/d ¬«�Œd d d d «‰j1d¬«d d d «tj«|z }|dkrd}t d«}tj(|«}tj(||z «}||||fz}‰jj |«|j3«d d d «y #1swY�ŒÇxYw#1swYŒÂxYw#1swYŒ´xYw#1swYy xYw)z’Apply the contents from a version 3 streaming clone. Data is read from an object that only needs to provide a ``read(size)`` method. s%d entries to transfer r«sentriesršrrc3óT•K—|]}|j‰j«–—Œ!y­wrÎrDrEs €rrGzconsumev3..ÖrHrIsentry with no files [%d] rrJr¯rwNr�Tr±r³r´)rRrrµrLr1rJrr¡rr r…rr rïrr>r·r€ryrKrcr|rºr¢r\r£)rr_r»Ú entrycountr¤Úbytes_transferredrãr?r¼rbrär…rOrPr}rñr¿rrÀÚ byte_countÚ bytes_secs` rÚ consumev3rX¶sÏø€ð �‰�Ü— ‘ “ ˆä×-Ñ-¨bÓ1ˆ Ø �‰�‰”qÐ4Ó5¸ÑDÔEà—7‘7×'Ñ'Ü ˆh‹KØÜ�:“ð(ó ˆð �‰˜ÔØÐä˜$“ˆð �8‰8�v—}‘}“Ñ &Ü×(Ñ(ØLóð ð× Ñ ˜hÕ 'ÛN¸f¿m¹m¼oÓNˆDܘ’ä˜z×*�AÜ $× 8Ñ 8¸Ó <�IØ  A’~ØŸ7™7×,Ò,Ø ŸG™GŸM™MÐ*GÈ1Ñ*MÔNÜ" 9Ö-˜Ü"×.Ñ.¨r°1Ó5˜Ø$ S™k˜Ü"&×":Ñ":¸2Ó">˜Ü"&×":Ñ":¸2Ó">˜ä#×/Ñ/°°GÓ<˜àŸ7™7×,Ò,Ø":˜CØ C¨¬t¯~©~¸gÓ/FÐ#GÑG˜CØ ŸG™GŸM™M¨#Ô.Ø)¨WÑ4Ð)á   tœ_°Ü)-×);Ñ);¸BÀg×)N Ø #§ ¡ ¨%Õ 0ñ*O÷-˜_ð.ð"×&Ñ&¨AÐ&Ö.ñ-+÷ð8 �O‰O¨4ˆOÔ 0÷=(ô@—*‘*“, Ñ&ˆØ �aŠ<؈GÜÐ<Ó=ˆÜ—^‘^Ð$5Ó6ˆ Ü—N‘NÐ#4°wÑ#>Ó?ˆ Ø � ˜G YÐ/Ñ/ˆØ �‰�‰�sÔØ×ÑÔ÷C ˆ÷`-™_ú÷+�ú÷(Ð 'ú÷3 ˆúsV’C!M Ã3"MÄD#MÈ8.L; É'MÊMÊ!BM Ì;MÍMÍM Í MÍM ÍM Í M)cóò—ddlm}|D�cgc]}||jvsŒ|‘Œ}}|r9tjt d«dj t|««z«‚t||||«t|j|«|_ |j|j|j|j«|j_t!j"|«t%j&|«ycc}w©NrrArÉr#)rFrBr4r rOrr5r6rQrr rTr1rUrVrWrrXrrY)rr_rbrNr rBÚrr>s rÚ applybundlev2r\sÒ€Ýá*ÓF™l˜¨a°t·~±~Ò.E’1˜l€KÐFÙÜ�k‰kÜ ÐEÓ FØ�j‰jœ  Ó,Ó-ñ .ó ð ô ˆd�B˜  8Ô,ä5Ø ×ÑØó€DÔð"×8Ñ8Ø �‰�×"Ñ" D§M¡Mó€D‡I�IÔô ×!Ñ! $Ô'Ü ×Ñ Õ%ùò#Gs ‹C4ŸC4cóö—ddlm}|D�cgc]}||jvsŒ|‘Œ}}|r=td«}|dj t |««z}t j|«‚t||«t|j|«|_ |j|j|j|j«|j_t!j"|«t%j&|«ycc}wrZ)rFrBr4rr5r6r rOrXrr rTr1rUrVrWrrXrrY)rr_r rBr[r>rñs rÚ applybundlev3r^s΀Ýá*ÓF™l˜¨a°t·~±~Ò.E’1˜l€KÐFÙÜÐGÓHˆØ ˆu�z‰zœ& Ó-Ó.Ñ.ˆÜ�k‰k˜#ÓÐä ˆd�BÔä5Ø ×ÑØó€DÔð"×8Ñ8Ø �‰�×"Ñ" D§M¡Mó€D‡I�IÔô ×!Ñ! $Ô'Ü ×Ñ Õ%ùò!Gs ‹C6ŸC6c󰇇 —dgŠ ˆ ˆfd„}|D]Â\}}||}||}|j|«} |j|«} tjj| «} tjj | «st j | «|j|«t j| | ‰ d|d¬«‰j«ŒÄ‰ dS)NTcó0•—d‰d<td«‰_y)NFrscopying)rÚtopic)rõr¤s€€rÚ copy_usedz_copy_files..copy_used0sø€Øˆ�‰ ܘ:›ˆ�rrF)rõÚno_hardlink_cbÚcheck_fs_hardlink) r5rör¾Údirnamer-rÚmakedirsÚ register_fileÚcopyfiler¢) Ú src_vfs_mapÚ dst_vfs_mapr�r¤rbrr¾Úsrc_vfsÚdst_vfsÚsrc_pathÚdst_pathrerõs ` @rÚ _copy_filesro-sÄù€Øˆv€Hõ'󉈈4ؘa‘.ˆØ˜a‘.ˆØ—<‘< Ó%ˆØ—<‘< Ó%ˆô—'‘'—/‘/ (Ó+ˆÜ�w‰w�~‰~˜gÔ&Ü �M‰M˜'Ô "Ø×јdÔ#ä � ‰ Ø Ø Ø˜a‘[Ø$Ø#õ  ð ×ÑÕð'ð( �A‰;Ðrc óJ—|jD�chc]}|tjvr|’Œ}}|jD�chc]}|tjvr|’Œ}}||k(sJ‚|j«5|j«5t j |«}|j d«}d}tjj|«rd}t|ddd¬«}t|«}t|«} t|«} td„|D««|z} |jjt!d«| t!d «¬ «} |D� ��cgc](\} }|j#«D]}| |j$f‘ŒŒ*}}} }t'| | || «}|r.ps èø€ÐA¹°Aœc ! A¡$§*¡*£,×/¹ùs‚&(slinkingsfiles)rar›rœslinked %d files scopied %d files s localclone)r rÚWORKING_DIR_REQUIREMENTSrRrÚ bookmarksvfsr5rör¾r-r2r;r Úsumr1r¡rrƒr‡rorrhr£ryrrrºÚcleanup_undo_filesr2Úvfs_map)Úsrc_repoÚ dest_repor[Úsrc_store_requirementsÚdest_store_requirementsÚ src_book_vfsÚ srcbookmarksÚbm_countr�riÚ dest_vfs_mapÚ total_filesr¤rr^rŒrƒrõÚ dst_book_vfsÚ dstbookmarksrñÚtrs rÚ local_copyrƒKsƒ€ð ×&Ò&óá&ˆAØ ”O×<Ñ<Ñ <ò Ø&ððð×'Ò'óá'ˆAØ ”O×<Ñ<Ñ <ò Ø'ððð "Ð%<Ò <Ð<Ð <à �‰Õ Ø �]‰]�_ô %×1Ñ1°(Ó;ˆLØ'×,Ñ,¨\Ó:ˆL؈HÜ�w‰w�~‰~˜lÔ+Ø�ä#ØØØØ"&ô ˆGô ˜7“mˆGÜ" 8Ó,ˆKÜ# IÓ.ˆLÜÑA¹ÓAÓAÀHÑLˆKØ—{‘{×/Ñ/ܘ “mØ!Ü�x“[ð0óˆHñ#*õá")‘J�G˜QØŸ™ž�Að˜!×*Ñ*Ò+à"ð,Ø")ð òô # ;° ¸eÀXÓNˆHñÜ(×5Ñ5°iÓ@� Ø+×0Ñ0°Ó>� Ü— ‘ ˜l¨LÔ9÷YðZ ×ÑÔÙ Ø&‰Cà&ˆCØ� ‰ ×ј#  Ñ+Ô,à × "Ñ " =Ô 1°RØ �O‰O× !Ñ ! "Ô %÷2ô ×&Ñ& y§|¡|×'8Ñ'8¸)×:KÑ:KÔL÷s Ð ùòùò ùôR÷Cˆ_ú÷h2Ð 1ú÷k Ð ús[�I0ºI5Á.JÁ?CJÅ-I: Å1AJÇAJÈJ È+rQrXr\r^rorƒrÙrrÚrŠsðóÛ Û åÝ"÷ ÷ ÷ ó õò òó[ò|HòVó$Lò77òtó87òtQ òh.ò8&÷. -ñ -ð€ Ø € ð € Ø € òò<÷0ñ0òf ò@EòF2!òj6ò6ò%òB/òB)ðX ×ÑñóðòBòJGòT&ò.&ò,ó