Ë ?\ b™ãóä—ddlZddlZddlZddlZddlmZddlmZmZddl m Z ddl m Z m Z mZmZmZmZmZmZmZmZmZmZmZddlmZmZej8Zd„Zd ad „Z d „Z!d „Z"d „Z#d„Z$d„Z%d„Z&y)éN)Ú_)ÚbinÚhex)Úopen) Ú changegroupÚ changelogÚcontextÚerrorÚ extensionsÚmatchÚscmutilÚstoreÚ streamcloneÚutilÚwireprotoserverÚwireprototypesÚwireprotov1serveré)Ú constantsÚ shallowutilcóp‡—t|«ˆfd„}tjtjd|«y)zGSets up a normal Mercurial repo so it can serve files to shallow repos.có•—|jxsg}tj|vrÔd} d} |jxsgD]`} | jd«r| t d«dj d«} Œ2| jd«sŒD| t d«dj d«} Œbt j«} | s| r#t j ‰jdd| | «} t|D� cgc] } | | «rŒ | ‘Œc} «}||||||g|¢­i|¤ŽScc} w)Nsincludepattern=ósexcludepattern=ó) Ú _bundlecapsrÚBUNDLE2_CAPABLITYÚ startswithÚlenÚsplitr ÚalwaysÚrootÚlist)ÚorigÚselfÚ changedfilesÚ linknodesÚ commonrevsÚsourceÚargsÚkwargsÚcapsÚincludepatternÚexcludepatternÚcapÚmÚfÚrepos €úKusr/lib/python3.12/site-packages/hgext/remotefilelog/remotefilelogserver.pyÚ generatefilesz"setupserver..generatefiles,sø€ð×ÑÒ% 2ˆÜ × &Ñ &¨$Ñ .à!ˆNØ!ˆNØ×'Ñ'Ò-¨2Ò-�Ø—>‘>Ð"4Ô5Ø%(¬Ð-?Ó)@Ð)BÐ%C×%IÑ%IÈ%Ó%P‘NØ—^‘^Ð$6Õ7Ø%(¬Ð-?Ó)@Ð)BÐ%C×%IÑ%IÈ%Ó%P‘Nð .ô — ‘ “ˆAÙ¡Ü—K‘KØ—I‘I˜s D¨.¸.ó�ô ©LÓ E©L qÁÀ!Å¢¨LÑ EÓFˆLÙØ �,  ¨:°vð Ø@Dò ØHNñ ð ùò!Fs à DÃ-Ds generatefilesN)Ú onetimesetupr Ú wrapfunctionrÚcgpacker)Úuir1r3s ` r2Ú setupserverr8's.ø€ä�Ôô ô2×ÑÜ×ÑÐ.° õrFcóL‡‡—trydatjddd¬«t«tjddd¬«t«tjd d d¬«t «Gd „d «}|«Šˆfd „}|dftj d< dˆfd„ }tjtd|«ˆfd„}tjtd|«d„}tjtjd|«d„}tjtd|«y)z9Configures the wireprotocol for both clients and servers.NTóx_rfl_getflogheadsspathspull)Ú permissionóx_rfl_getfilesró x_rfl_getfiles file nodecó—eZdZdZdZdZy)ú!onetimesetup..streamstateNF)Ú__name__Ú __module__Ú __qualname__r Ú shallowremoteÚnoflatmf©rr2Ú streamstater?_s„؈؈ ؉rrFcóÖ•‡ ‡ ‡ —d}d}|jd«}|r|jd«}|jd«}|r|jd«}‰ j}‰ j}‰ j} d‰ _tj «‰ _|jd«dk(‰ _|s|r(tj|j dd||«‰ _tj||«Š t‰ j«Š t‰ j«Š ˆ ˆ ˆ fd„} tj| ««|‰ _|‰ _|‰ _S#|‰ _|‰ _|‰ _wxYw) NsincludepatternrsexcludepatternTsnoflatmanifestsTruerc3óH•K—‰–—‰–—‰jD]}|–—Œy­w©N)Úgen)ÚvalueÚfirstÚsecondÚ streamress €€€r2rJz5onetimesetup..stream_out_shallow..gen‚s$øèø€Ø’ Ø’ Ø&Ÿ]œ]�EØ“Kñ+ùsƒ") ÚgetrrCr rDr r!rÚstreamÚnextrJrrN)r1ÚprotoÚotherr,r-ÚrawÚ oldshallowÚoldmatchÚ oldnoflatmfrJrLrMrNÚstates @@@€r2Ústream_out_shallowz(onetimesetup..stream_out_shallowfs7û€ØˆØˆØ�i‰iÐ)Ó*ˆÙ Ø ŸY™Y uÓ-ˆNØ�i‰iÐ)Ó*ˆÙ Ø ŸY™Y uÓ-ˆNà×(Ñ(ˆ Ø—;‘;ˆØ—n‘nˆ ð )Ø"&ˆEÔ ÜŸ,™,›.ˆEŒKØ"ŸY™YÐ'8Ó9¸WÑDˆEŒNÙ¡Ü#Ÿk™kØ—I‘I˜s D¨.¸.ó�” ô*×0Ñ0°°uÓ=ˆIô˜Ÿ™Ó'ˆEܘ)Ÿ-™-Ó(ˆFö ô "×+Ñ+©C«EÓ2à",ˆEÔ Ø"ˆEŒKØ(ˆE�Nøð#-ˆEÔ Ø"ˆEŒKØ(ˆE�Nús Á6CEÅE(ó*sstream_out_shallowc3óz•K—‰j�ratj|«�rRt|jj «dz}|jj j}tj j|jj d«g}|rÙ|j«}||d¬«D]¹\} } } |dz| z} | tjk(rs| jd«sb| jd«sQtj| |d«} t j | «}t j"|d| j$¬ «–—| tj&k(sŒ©|j)| «Œ»|rŒÙt+j,|«r=|jj/«D] }|j0sŒ|j2sŒ|–—Œ"‰j4}|r]|j6«sL|jj/«D]/}|j0sŒ‰j5|j8«rŒ,|–—Œ1|jj;«D]}‰j<r |ddd d k(rŒ|–—Œ ytj|«rt?j@tCd ««‚|||||¬ «D]}|–—Œy­w)NrsdataT)Ústató/s.is.dF)Ú entry_pathÚ is_volatileÚ file_sizeé s 00manifest.s0Cannot clone from a shallow repo to a full repo.)ÚphaseÚ obsolescence)"rCrÚ isenabledrrÚpathÚrawvfsÚreaddirÚosÚjoinÚpopr\ÚS_IFREGÚendswithrÚpconvertÚ decodedirÚSimpleStoreEntryÚst_sizeÚS_IFDIRÚappendr ÚistreemanifestÚ data_entriesÚ is_revlogÚis_manifestlogr r Ú target_idÚ top_entriesrDr ÚAbortr)r#r1ÚmatcherrbrcÚstriplenrgÚvisitÚpr0ÚkindÚstÚfpÚnÚdÚentryr ÚxrXs €r2Ú_walkstreamfilesz&onetimesetup.._walkstreamfiles”s9øèø€ð × Ó ä×$Ñ$ TÕ*ܘtŸz™zŸ™Ó/°!Ñ3�ØŸ*™*×+Ñ+×3Ñ3�ÜŸ™Ÿ™ d§j¡j§o¡o°wÓ?Ð@�ÙØŸ ™ › �AÙ'.¨q°t×'<™ ˜˜4 Ø ™X¨™\˜Ø¤4§<¡<Ò/Ø#%§;¡;¨uÔ#5¸b¿k¹kØ %ô?ô%)§M¡M°"°X°Y°-Ó$@ Ü$)§O¡O°AÓ$6 Ü&+×&<Ñ&<Ø/0Ø05Ø.0¯j©jô'"ò!"ð  ¤4§<¡<Ó/Ø!ŸL™L¨Õ,ð(=òô&×%Ñ% dÔ+Ø!ŸZ™Z×4Ñ4Ö6�EØ Ÿ?š?Ø Ø×+Ó+Ø#› ð 7ð—K‘KˆEÙ˜\˜UŸ\™\œ^Ø!ŸZ™Z×4Ñ4Ö6�EØ Ÿ?š?Ø Ø Ÿ;™; u§¡Õ7Ø#› ð 7ð —Z‘Z×+Ñ+Ö-�Ø—>’> a¨¡d¨3¨B i°>Ò&AØØ“ñ.ô × "Ñ " 4Ô (ô—+‘+ÜÐEÓFóð ñØ�g U¸÷�ð“ñùs!ƒEJ;Å#J;Å9A J;ÇA*J;È0B J;s_walkstreamfilescó •—|||«}tj|«s‰jdd«rQt|t«r|j t j«|j d«|j d«|S)Nó remotefilelogóserverr:r=)rrdÚ configboolÚ isinstanceÚ _sshv1serverrrrÚNETWORK_CAP_LEGACY_SSH_GETFILES)r#r1rRr+r7s €r2Ú _capabilitiesz#onetimesetup.._capabilitiesÕsjø€Ù�D˜%Ó ˆÜ × Ñ  Ô &¨"¯-©-Ø ˜iô+ ô˜%¤Ô.à— ‘ œI×EÑEÔFØ �K‰KÐ-Ô .Ø �K‰KÐ(Ô )؈ rs _capabilitiescóò—|j}tj|d«rJ|jr>|jj |jj |j««S||g|¢­i|¤ŽS)Ns forcelinkrev)Ú_reporÚ safehasattrÚ forcelinkrevÚ_filelogÚlinkrevÚrevÚ _filenode)r#r$r)r*r1s r2Ú_adjustlinkrevz$onetimesetup.._adjustlinkrevãsb€ð�z‰zˆÜ × Ñ ˜D /Ô 2°t×7HÒ7HØ—=‘=×(Ñ(¨¯©×):Ñ):¸4¿>¹>Ó)JÓKÐ KÙ�DÐ*˜4Ò* 6Ñ*Ð*rs_adjustlinkrevcó—|dk(ry||«S)Nr<FrE)r#Úcmds r2Ú_iscmdzonetimesetup.._iscmdïs€Ø Ð#Ò #ØÙ�C‹yÐrsiscmd)NFF) ÚonetimerÚwireprotocommandÚ getflogheadsÚgetfilesÚgetfileÚcommandsr r5rr Ú basefilectxr)r7rFrYr…r�r–r™rXs` @r2r4r4Ms$ù€õØØ€GðÔ×&Ñ&ؘw°7ôäôðÔ×&Ñ&ؘ3¨7ôäôðÔ×&Ñ&ؘ,°7ôä ô÷ññ ‹M€Eô&)ðR Ø ð9Ô×ÑÐ4Ñ5ð=Bõ<ô|×ÑœKÐ)<Ð>NÔOô ô×ÑÔ-Ð/?ÀÔOò+ô×ÑÜ×ÑÐ.°ôòô ×ÑœO¨X°vÕ>rcóx—tjj||t|««}tjj |«r#tjj |«dk(�rE|j ||¬«}|j«|jk(r7tj|j«|_ |j ||¬«}t|«}tj|«}tjd«} tjj|«}tjj |«s tj |«d} t%j&|d«} | j)|«| r| j/« tj|«|St1|d«5} | j3«}ddd«|S#t"$rYŒ†wxYw#t*t,f$rYŒqwxYw#| r| j/«wwxYw#tj|«wxYw#1swYSxYw)Nr)Úfileidéswbsrb)rhrerirÚexistsÚgetsizeÚfilectxÚnodeÚnullidrÚsvfsÚcreatefileblobÚzlibÚcompressÚumaskÚdirnameÚmakedirsÚFileExistsErrorrÚatomictempfileÚwriteÚIOErrorÚOSErrorÚcloserÚread) r1Ú cachepathrer§Ú filecachepathr¦ÚtextÚoldumaskr®r0s r2Ú _loadfileblobr»÷s²€Ü—G‘G—L‘L ¨D´#°d³)Ó<€MÜ �7‰7�>‰>˜-Ô (¬B¯G©G¯O©O¸MÓ,JÈaÓ,OØ—,‘,˜t¨D�,Ó1ˆØ �<‰<‹>˜TŸ[™[Ò (Ü&×0Ñ0°·±Ó;ˆDŒNØ—l‘l 4°�lÓ5ˆGä˜gÓ&ˆä�}‰}˜TÓ"ˆô—8‘8˜E“?ˆð Ü—g‘g—o‘o mÓ4ˆGÜ—7‘7—>‘> 'Ô*ðÜ—K‘K Ô(ðˆAð Ü×'Ñ'¨ °uÓ=�Ø—‘˜” ñ Ø—G‘G•Iä �H‰H�XÔ ð €Kô�- Ô '¨1Ø—6‘6“8ˆD÷(à €Køô''òÙðûôœWÐ%ò ñð ûñ Ø—G‘G•Iðûô �H‰H�XÕ úç 'à €KúslÄ >HÅ GÅHÅ!'G(ÆHÆ>H/Ç G%Ç"HÇ$G%Ç%HÇ(G:Ç7G=Ç9G:Ç:G=Ç=HÈHÈH,È/H9cóz‡—‰j|«}|j«}djˆfd„|D««S)z-A server api for requesting a filelog's headsó c3óT•K—|]}|‰jk7sŒt|«–—Œ!y­wrI)r¨r)Ú.0Úheadr1s €r2Ú zgetflogheads..$s!øèø€ÐJ©U T°d¸d¿k¹kÓ6I”s˜4—y©Uùsƒ(˜()ÚfileÚheadsri)r1rRreÚflogrÃs` r2rœrœ s0ø€à �9‰9�T‹?€DØ �J‰J‹L€EØ �:‰:ÓJ©UÓJÓ KÐKrcóL—tj|«rdtd«zS|jj dd«}|s*t j j|j d«}t|j««}||jk(rydt||||«zS)afA server api for requesting a particular version of a file. Can be used in batches to request many files at once. The return protocol is: where is 0 for success or non-zero for an error. data is a compressed blob with revlog flag and ancestors information. See createfileblob for its content. s1ó+cannot fetch remote files from shallow repor‡óservercachepathóremotefilelogcaches0) rrdrr7ÚconfigrhrerirÚstripr¨r»)r1rRrÂr§r·s r2ržrž'sŠ€ô×јTÔ"ØœÐHÓIÑIÐIØ—‘—‘Ð/Ð1CÓD€IÙ Ü—G‘G—L‘L §¡Ð,AÓBˆ Ü ˆt�z‰z‹|Ó €DØ ˆt�{‰{ÒØØ ”M $¨ °4¸Ó>Ñ >Ð>rc󇇗tj‰«rtjt d««‚t ‰t «stjt d««‚ˆˆfd„}tj|««S)zDA server api for requesting particular versions of particular files.rÆs/cannot fetch remote files over non-ssh protocolc3ó¦•K—‰j}‰jjdd«}|s*tjj ‰jd«} |j «dd}|syt|dd«}|‰jk(rd–—Œ9|dd}t‰|||«}dt|«|fz–—‰jj«Œx­w)Nr‡rÇrÈéÿÿÿÿé(s0 s%d %s) Ú_finr7rÉrhreriÚreadlinerr¨r»rÚ_foutÚflush)Úfinr·Úrequestr§rer¹rRr1s €€r2Ústreamerzgetfiles..streamerBsÇøèø€Ø�j‰jˆà—G‘G—N‘NÐ#3Ð5GÓHˆ ÙÜŸ™Ÿ ™  T§Y¡YÐ0EÓFˆIàØ—l‘l“n S bÐ)ˆGÙØä�w˜s �|Ó$ˆDØ�t—{‘{Ò"Ø’ Øà˜2˜3�<ˆDä   y°$¸Ó=ˆDàœs 4›y¨$Ð/Ñ/Ò /ð �K‰K× Ñ Ô ð%ùsƒCC) rrdr ryrrŠr‹rrN)r1rRrÕs`` r2r�r�;s_ù€ä×јTÔ"Ü�k‰kœ!ÐJÓKÓLÐLÜ �eœ\Ô *Ü�k‰kœ!ÐNÓOÓPÐPõ ô6 × #Ñ #¡H£JÓ /Ð/rcó<—|j«}|j«}|jj|«}|dk(r|j «}n|j |«}|j }|g} d|_|j|j«D�cgc]}|‘Œc}«d}|D]°} | j«} |j} |j} t| «dkDr| dj«} t| «dkDr| dj«} d} | j«}|r|d} | j«}|d| j«| | || fzz }Œ² d|_t!j"t|«|«}d|||fzScc}w#d|_wxYw)aÕ format: v0: str(len(rawtext)) + '' + rawtext + ancestortext v1: 'v1' + ' ' + metalist + '' + rawtext + ancestortext metalist := metalist + ' ' + meta | meta meta := sizemeta | flagmeta sizemeta := METAKEYSIZE + str(len(rawtext)) flagmeta := METAKEYFLAG + str(flag) note: sizemeta must exist. METAKEYFLAG and METAKEYSIZE must have a length of 1. rTrrs %s%s%s%s%sFs%s%s%s)ÚfilelogÚfilerevÚ_revlogÚflagsÚdataÚrawdatar�r‘ÚextendÚ ancestorsÚparentsr¨rÚfilenodeÚrenamedr§rÚbuildfileblobheader)r¦rÄÚfrevÚ revlogflagsr¹r1rÞr0Ú ancestortextÚ ancestorctxrßÚp1Úp2ÚcopynameÚrenameÚlinknodeÚheaders r2rªrª`s¡€ð �?‰?Ó €DØ �?‰?Ó €DØ—,‘,×$Ñ$ TÓ*€KØ�aÒà�|‰|‹~‰ð�|‰|˜DÓ!ˆà �=‰=€Dà� €Ið"Ø ˆÔØ×Ñ W×%6Ñ%6Ô%8Ó9Ñ%8 š!Ð%8Ñ9Ô:àˆ Û$ˆKØ!×)Ñ)Ó+ˆGØ—‘ˆBØ—‘ˆBÜ�7‹|˜aÒØ˜Q‘Z×(Ñ(Ó*�Ü�7‹|˜aÒØ˜Q‘Z×(Ñ(Ó*�àˆHØ ×(Ñ(Ó*ˆFÙØ! !™9�Ø"×'Ñ'Ó)ˆHØ ˜OØ×$Ñ$Ó&ØØØØð /ññ ‰Lñ%ð,"ˆÔä × ,Ñ ,¬S°«Y¸ Ó D€Fà ˜& $¨ Ð5Ñ 5Ð5ùò;:øð2"ˆÕúsÁ3$F F  B>FÆ FÆ Fc óž—|jjdd«syt«}|jd«}|jj d«}|D]h}||j «}|j«D]@\}}tjj ||t|««} |j| «ŒBŒj|jjdd«} tj«| dzdzdzz } |jtd«d ¬ «} | j!d «tj"|«D]|\} }}|D]q}tjj | |«}| j%«||vrŒ8tj&|«}|j(| ksŒ]tj*|«ŒsŒ~| j-«y) Nr‡rˆsheads(tip~25000:) - nullrÈsserverexpirationéé<sremoving old server cachesfiles)Úunitr)r7r‰ÚsetÚrevsÚvfsriÚmanifestÚitemsrhrerÚaddÚ configintÚtimeÚ makeprogressrÚupdateÚwalkÚ incrementr\Úst_mtimeÚremoveÚcomplete)r7r1Ú neededfilesrÃr·rÀÚmfÚfilenameràr¸ÚdaysÚ expirationÚprogressr!ÚdirsÚfilesrÂÚfilepathr\s r2Úgcserverr Ÿsx€Ø �7‰7× Ñ Ð.° Ô :Øä“%€KØ �I‰IÐ1Ó 2€Eà—‘— ‘ Ð3Ó4€IÛˆØ �$‰Z× Ñ Ó "ˆØ"$§(¡(¦*Ñ ˆH�hÜŸG™GŸL™L¨°H¼cÀ(»mÓLˆMØ �O‰O˜MÕ *ñ#-ðð �7‰7× Ñ Ð-Ð/BÓ C€DÜ—‘“  r¡ ¨B¡°Ñ 3Ñ4€Jà�‰œqÐ!=Ó>ÀXˆÓN€HØ ‡O�O�AÔÜŸW™W YÖ/шˆd�EÛˆDÜ—w‘w—|‘| D¨$Ó/ˆHØ × Ñ Ô Ø˜;Ñ&Øä—7‘7˜8Ó$ˆDØ�}‰}˜zÓ)Ü— ‘ ˜(Õ#ñð0ð ×ÑÕr)'rhr\rør«Úmercurial.i18nrÚmercurial.noderrÚmercurial.pycompatrÚ mercurialrrr r r r r rrrrrrÚrrÚsshv1protocolhandlerr‹r8ršr4r»rœržr�rªr rErr2Úrsxðó Û Û Û åß#Ý#÷÷÷õ÷ð ×3Ñ3€ ò ðF €òg?òT&òRLò?ò("0òJ<6ó~r