Ë ëÓÌ¢ߟãóâ—ddlZddlZddlmZmZddlmZddlmZddl m Z m Z m Z dZ dZd Zd Zd ZGd „d e j$«ZGd„de j«ZGd„de j*«Zy)éN)ÚhexÚsha1nodeconstants)Ú_)Úutilé)ÚbasepackÚ constantsÚ shallowutilééÿÿÿÿéþÿÿÿs.dataidxs .datapackcóJ‡—eZdZeZeZˆfd„Zd„Zd„Zd„Zd„Z d„Z d„Z ˆxZ S)Ú datapackstorecó.•—tt|� ||«y©N)ÚsuperrÚ__init__)ÚselfÚuiÚpathÚ __class__s €ú@usr/lib/python3.12/site-packages/hgext/remotefilelog/datapack.pyrzdatapackstore.__init__ sø€Ü Œm˜TÑ+¨B°Õ5ócó—t|«Sr)Údatapack)rrs rÚgetpackzdatapackstore.getpack#s €Ü˜‹~Ðrcó—td«‚)Ns)must use getdeltachain with datapackstore©Ú RuntimeError©rÚnameÚnodes rÚgetzdatapackstore.get&s€ÜÐGÓHÐHrcó—|jD]} |j||«cS|j«D]} |j||«cSt|t |«f«‚#t$rYŒcwxYw#t$rYŒIwxYwr)ÚpacksÚgetmetaÚKeyErrorÚrefreshr©rr!r"Úpacks rr&zdatapackstore.getmeta)s‹€Ø—J”JˆDð Ø—|‘| D¨$Ó/Ò/ðð —L‘L–NˆDð Ø—|‘| D¨$Ó/Ò/ð#ô ˜œc $›iÐ(Ó)Ð)øôò Ùð ûô ò Ùð úó"‘A%ºA4Á% A1Á0A1Á4 BÁ?Bcó—|jD]} |j||«cS|j«D]} |j||«cSt|t |«f«‚#t$rYŒcwxYw#t$rYŒIwxYwr)r%Úgetdeltar'r(rr)s rr-zdatapackstore.getdelta8s‹€Ø—J”JˆDð Ø—}‘} T¨4Ó0Ò0ðð —L‘L–NˆDð Ø—}‘} T¨4Ó0Ò0ð#ô ˜œc $›iÐ(Ó)Ð)øôò Ùð ûô ò Ùð úr+có—|jD]} |j||«cS|j«D]} |j||«cSt|t |«f«‚#t$rYŒcwxYw#t$rYŒIwxYwr)r%Ú getdeltachainr'r(rr)s rr/zdatapackstore.getdeltachainGs�€Ø—J”JˆDð Ø×)Ñ)¨$°Ó5Ò5ðð —L‘L–NˆDð Ø×)Ñ)¨$°Ó5Ò5ð#ô ˜œc $›iÐ(Ó)Ð)øôò Ùð ûô ò Ùð úr+có—td«‚)Nscannot add to datapackstorer©rr!r"Údatas rÚaddzdatapackstore.addVs€ÜÐ9Ó:Ð:r) Ú__name__Ú __module__Ú __qualname__Ú INDEXSUFFIXÚ PACKSUFFIXrrr#r&r-r/r3Ú __classcell__)rs@rrrs1ø„Ø€KØ€Jô6òòIò *ò *ò *ö;rrcót—eZdZeZeZdZdZdgZd„Zd„Z d„Z d„Z d„Z dd „Z d „Zd „Zd „Zdd„Zd„Zd„Zd„Zy )rs!20siQQé(écól—g}|D],\}}|j|«}|rŒ|j||f«Œ.|Sr)Ú_findÚappend)rÚkeysÚmissingr!r"Úvalues rÚ getmissingzdatapack.getmissinges=€ØˆÛ‰JˆD�$Ø—J‘J˜tÓ$ˆEÚØ—‘  d˜|Õ,ðð ˆrcó4—td|t|«fz«‚)Ns,must use getdeltachain with datapack (%s:%s))rrr s rr#z datapack.getns €ÜØ ;¸tÄSÈÃYÐ>OÑ Oó ð rcóŒ—|j|«}|€t|t|«f«‚|\}}}}|j|||z}d}|t j d||«ddzz }|dz }|t j d||«ddzz }t j d||«d}|dz }t j||||z«} | S) Nró!Hr<r;ó!Qéó!Ié)r>r'rÚ_dataÚstructÚ unpack_fromr Ú parsepackmeta) rr!r"rBÚdeltabaseoffsetÚoffsetÚsizeÚrawentryÚmetalenÚmetas rr&zdatapack.getmetass䀨— ‘ ˜4Ó ˆØ ˆ=ܘD¤# d£)Ð,Ó-Ð -à.3Ñ+ˆˆo˜v tØ—:‘:˜f v°¡}Ð5ˆðˆØ”&×$Ñ$ U¨H°fÓ=¸aÑ@À1ÑDÑDˆØ�"‰ ˆØ”&×$Ñ$ U¨H°fÓ=¸aÑ@À1ÑDÑDˆä×$Ñ$ U¨H°fÓ=¸aÑ@ˆØ�!‰ ˆä×(Ñ(¨°&¸6ÀGÑ;KÐ)LÓMˆàˆ rcóÆ—|j|«}|€t|t|«f«‚|\}}}}|j||d¬«}|\}}} } } |j «| || | fS)NT)r&)r>r'rÚ _readentryÚ freememory) rr!r"rBrOrPrQÚentryÚfilenameÚ deltabasenodeÚdeltarTs rr-zdatapack.getdeltaˆsv€Ø— ‘ ˜4Ó ˆØ ˆ=ܘD¤# d£)Ð,Ó-Ð -à.3Ñ+ˆˆo˜v tØ—‘ ¨°d�Ó;ˆØ5:Ñ2ˆ�$˜  u¨dð �‰Ôà�h  ¨tÐ3Ð3rcó"—|j|«}|€t|t|«f«‚|j}|g}|d}|j}|t k7rq|t k7rh|j|z}tj|j|j|||z«}|d}|j|«|t k7r |t k7rŒhg} |D]4\}}} } |j| | «\} }} }| j| || | |f«Œ6|j«| S)Nr)r>r'rÚparamsÚINDEXENTRYLENGTHÚFULLTEXTINDEXMARKÚNOBASEINDEXMARKÚ indexstartrLÚunpackÚ INDEXFORMATÚ_indexr?rVrW)rr!r"rBr]ÚchainrOÚentrylenÚlocÚ deltachainrPrQrYrZr[s rr/zdatapack.getdeltachain–s €Ø— ‘ ˜4Ó ˆØ ˆ=ܘD¤# d£)Ð,Ó-Ð -à—‘ˆð�ˆØ ™(ˆØ×(Ñ(ˆà Ô0Ò 0ؤ?Ò2à×#Ñ# oÑ5ˆCÜ—M‘MØ× Ñ  $§+¡+¨c°C¸(±NÐ"CóˆEð$ A™hˆOØ �L‰L˜Ô ð Ô0Ò 0ؤ?Ó2ðˆ Û38Ñ /ˆD�/ 6¨4Ø37·?±?À6È4Ó3PÑ 0ˆH�d˜M¨5Ø × Ñ ˜x¨¨x¸ÈÐNÕ Oð49ð �‰ÔàÐrcó&—|j|||z}|xjt|«z c_d}tjd|dd«d}||||z}||z}|t z} ||| } || | t z} | t z} || | dz} tjd| «d}|| dz| dz|z}|j |«}|rL| dz|z}tjd||«d}||dz|dz|z}tj|«}|| | ||fS|| | |fS)Nr<rFrrHrGrIrJ) rKÚ_pagedinÚlenrLrbÚ NODELENGTHÚ _decompressrMr rN)rrPrQr&rRÚ lengthsizeÚ filenamelenrYÚ nodestartÚdeltabasestartr"rZÚ deltastartÚ rawdeltalenÚdeltalenr[Ú metastartrSÚrawmetarTs rrVzdatapack._readentry·s[€Ø—:‘:˜f v°¡}Ð5ˆØ � Š œ˜X›Ñ&� ðˆ Ü—m‘m E¨8°B°Q¨<Ó8¸Ñ;ˆ ؘJ¨°kÑ)AÐBˆð Ñ,ˆ Ø"¤ZÑ/ˆØ˜  .Ð1ˆØ  °.Ä:Ñ2MÐNˆ ð$¤jÑ0ˆ ؘz¨J¸©NÐ;ˆ Ü—=‘= ¨ Ó4°QÑ7ˆà˜ a™¨*°q©.¸8Ñ*CÐDˆØ× Ñ  Ó'ˆá Ø" Q™¨Ñ1ˆIÜ×(Ñ(¨°¸)ÓDÀQÑGˆGà˜y¨1™}¨y¸1©}¸wÑ/FÐGˆGÜ×,Ñ,¨WÓ5ˆDؘT =°%¸Ð=Ð =à˜T =°%Ð7Ð 7rcó,—tj|«Sr)ÚzlibÚ decompress©rr2s rrmzdatapack._decompressØs€Ü�‰˜tÓ$Ð$rcó"—td||fz«‚)Nscannot add to datapack (%s:%s)rr1s rr3z datapack.addÛs€ÜÐ<ÀÀd¸|ÑKÓLÐLrcóΗ|j}tj|j|d|j«d}|j }|||j z}|j}t|dz|j«D]}|||j z}||k7sŒn|}|j} | ||tz} | ||tz} |j} | |k(r | ||| z} ni| |k(r | ||| z} n[||| z krR|||z dzz}|||j z | zz }| ||tz}||k(r | ||| z} n||kDr|}n||kr|}||| z krŒRytj|j| «S)Nrrr<)r]rLrbÚ fanoutstructÚ fanoutprefixÚ _fanouttableraÚ _indexendÚrangeÚ fanoutcountrdrlr^rc)rr"r]Ú fanoutkeyÚfanoutÚstartÚindexendÚiÚendÚindexÚ startnodeÚendnoderfrXÚmidÚmidnodes rr>zdatapack._findÞsµ€Ø—‘ˆÜ—M‘MØ × Ñ  Ð&;¨×(;Ñ(;Ð!<ó à ñ ˆ ð×"Ñ"ˆà�yÑ! F×$5Ñ$5Ñ5ˆØ—>‘>ˆô�y 1‘} f×&8Ñ&8Ö9ˆAؘ‘)˜f×/Ñ/Ñ/ˆCØ�e‹|Ùð:ð ˆCð— ‘ ˆØ˜% %¬*Ñ"4Ð5ˆ ؘ˜c¤JÑ.Ð/ˆØ×(Ñ(ˆØ ˜Ò ؘ% %¨(Ñ"2Ð3‰EØ ˜Š_ؘ#  h¡Ð/‰Eà˜# ™.Ò(ؘs U™{¨qÑ0Ñ0�ؘc F×$5Ñ$5Ñ5¸ÑAÑB�Ø  c¬JÑ&6Ð7�ؘd’?Ø! #¨¨h©Ð7�EØØ˜'’>Ø‘EؘG’^Ø�Cð˜# ™.Ó(ðä�}‰}˜T×-Ñ-¨uÓ5Ð5rNcó>—|D]\}}|j|||«Œyr)Ú markdataentry)rÚledgerÚoptionsrYr"s rÚ markledgerzdatapack.markledger s"€Û"‰NˆH�dØ × Ñ   x°Õ 6ñ#rcó²—|jj|g«}t|«}|D�chc]3}|js |jsŒ|j |j f’Œ5}}t||z «dk(r\|j|jvrCtj|jd¬«tj|jd¬«yyycc}w)NrT)Ú ignoremissing)Úsourcesr#ÚsetÚ datarepackedÚgcedrYr"rkrÚcreatedrÚ unlinkpathÚ indexpathÚpackpath)rr�ÚentriesÚallkeysÚeÚ repackedkeyss rÚcleanupzdatapack.cleanups­€Ø—.‘.×$Ñ$ T¨2Ó.ˆÜ�d“)ˆá*1ó Ù*1 Q°Q·^²^ÀqÇvÃvˆQ�Z‰Z˜Ÿ™Ò ¨'ð ð ô ˆw˜Ñ%Ó &¨!Ò +Ø�y‰y §¡Ñ.Ü—‘ §¡¸dÕCÜ—‘ § ¡ ¸TÖBð/ð ,ùò  s ¬CÁ Cc#óLK—|j«D] \}}}}||f–—Œy­wr)Ú iterentries)rÚfÚnÚ deltabaserts rÚ__iter__zdatapack.__iter__s+èø€Ø)-×)9Ñ)9Ö);Ñ %ˆAˆq�)˜XØ�Q�$‹Jñ*<ùs‚"$c#óÈK—d}|j}||jk�r@|}tjd|||dz«d}|dz }||||z}||z }|||tj z}|tj z }|||tj z}|tj z }|||dz}tjd|«d} |dz }t |j|||| z««} || z }tjd||«d} |d| zz }|||| f–—|xj||z z c_ |j«r |j}||jkr�Œ?yy­w) NrrFr<rrHrGrIrJ) rKÚdatasizerLrbr ÚNODESIZErkrmrMrjrW) rrPr2Ú oldoffsetrorYr"r¦rsrtÚuncompressedlenrSs rr£zdatapack.iterentriessŒèø€àˆØ�z‰zˆØ�t—}‘}Ó$؈Iô!Ÿ-™-¨¨t°F¸VÀa¹ZÐ/HÓIÈ!ÑLˆKØ �a‰KˆFؘF V¨kÑ%9Ð:ˆHØ �kÑ !ˆF𘠬)×*<Ñ*<Ñ!<Ð=ˆDØ ”i×(Ñ(Ñ (ˆFà˜V f¬y×/AÑ/AÑ&AÐBˆIØ ”i×(Ñ(Ñ (ˆFð˜v¨°© Ð3ˆKÜ—}‘} U¨KÓ8¸Ñ;ˆHØ �a‰KˆFô"Ø× Ñ   f¨v¸Ñ/@Ð!AÓBóˆOð �hÑ ˆFô×(Ñ(¨°°fÓ=¸aÑ@ˆGØ �a˜'‘kÑ !ˆFà˜T 9¨oÐ>Ò >ð �MŠM˜V iÑ/Ñ /�MØ�‰Ô Ø—z‘z�ðK�t—}‘}Ö$ùs ‚EE"Å E")Fr)r4r5r6r7r8rcr^ÚSUPPORTED_VERSIONSrCr#r&r-r/rVrmr3r>r’r¡r§r£©rrrrZsg„Ø€KØ€Jð€KØÐà˜Ðòò ò ò* 4òóB8òB%òMò+6óZ7ò Còó)"rrcób—eZdZdZeZeZejZejZdgZ d„Z dd„Z d„Z y)ÚmutabledatapackaÎ A class for constructing and serializing a datapack file and index. A datapack is a pair of files that contain the revision contents for various file revisions in Mercurial. It contains only revision contents (like file contents), not any history information. It consists of two files, with the following format. All bytes are in network byte order (big endian). .datapack The pack itself is a series of revision deltas with some basic header information on each. A revision delta may be a fulltext, represented by a deltabasenode equal to the nullid. datapack = [,...] revision = [1] [1] metadata-list = [, ...] metadata-item = metadata-key could be METAKEYFLAG or METAKEYSIZE or other single byte value in the future. .dataidx The index file consists of two parts, the fanout and the index. The index is a list of index entries, sorted by node (one per revision in the pack). Each entry has: - node (The 20 byte node of the entry; i.e. the commit hash, file node hash, etc) - deltabase index offset (The location in the index of the deltabase for this entry. The deltabase is the next delta in the chain, with the chain eventually terminating in a full-text, represented by a deltabase offset of -1. This lets us compute delta chains from the index, then do sequential reads from the pack if the revision are nearby on disk.) - pack entry offset (The location of this entry in the datapack) - pack content size (The on-disk length of this entry's pack data) The fanout is a quick lookup table to reduce the number of steps for bisecting the index. It is a series of 4 byte pointers to positions within the index. It has 2^16 entries, which corresponds to hash prefixes [0000, 0001,..., FFFE, FFFF]. Example: the pointer in slot 4F0A points to the index position of the first revision whose node starts with 4F0A. This saves log(2^16)=16 bisect steps. dataidx = fanouttable = [,...] (2^16 entries) index = [,...] indexentry = [1]: new in version 1. r<có,—tj|«Sr)rxÚcompressrzs rÚ _compresszmutabledatapack._compressœs€Ü�}‰}˜TÓ"Ð"rNc ó‚—t|«dkDrttd«|z«‚t|«dk7rttd«|z«‚||jvry|j |«}dj t jdt|««|||t jdt|««|f«}tj|«}|t jdt|««z }||z }|jj«}t|«} ||| f|j|<|j|«y) Nisname too long %sr snode should be 20 bytes %srrFrGrI) rkrrr�r³ÚjoinrLr*r Ú buildpackmetaÚpackfpÚtellÚwriteraw) rr!r"rZr[ÚmetadataÚrawdatarvrPrQs rr3zmutabledatapack.addŸs€ä ˆt‹9�wÒ ÜœqÐ!4Ó5¸Ñ<Ó=Ð =Ü ˆt‹9˜Š?ÜœqÐ!>Ó?À$ÑFÓGÐ Gà �4—<‘<Ñ à 𗑘uÓ%ˆà—(‘(ä— ‘ ˜E¤3 t£9Ó-ØØØÜ— ‘ ˜E¤3 u£:Ó.Øð  ó  ˆô×+Ñ+¨HÓ5ˆØ”6—;‘;˜u¤c¨'£lÓ3Ñ3ˆØ�7Ñˆà—‘×!Ñ!Ó#ˆä�7‹|ˆà+¨V°TÐ:ˆ� ‰ �TÑà � ‰ �gÕrcó*—td„|jj«D««}d}|j}|D]U\}}}} |tj k(rt } n|j|t«} tj||| || «} || z }ŒW|S)Nc3ó6K—|]\}\}}}||||f–—Œy­wrr®)Ú.0r¥ÚdbÚoÚss rÚ z.mutabledatapack.createindex..Æs'èø€ð Ù/C™m˜a¡ " a¨ˆQ��A�qŒMÑ/Cùs‚r) Úsortedr�ÚitemsrcrÚnullidr_r#r`rLr*) rÚ nodelocationsÚ indexoffsetr�ÚrawindexÚfmtr"r¦rPrQÚdeltabaselocationrXs rÚ createindexzmutabledatapack.createindexÅs¢€Üñ Ø/3¯|©|×/AÑ/AÔ/Có ó ˆðˆØ×шÛ-4Ñ )ˆD�)˜V TØÔ-×4Ñ4Ò4Ü$5Ñ!ð%2×$5Ñ$5Øœó%Ð!ô—K‘K  TÐ+<¸fÀdÓKˆEØ ˜Ñ ‰Hð.5ðˆrr) r4r5r6Ú__doc__r7r8rrcr^r­r³r3rËr®rrr°r°KsH„ñDðL€KØ€Jð×&Ñ&€KØ×0Ñ0Ðð˜Ðò#ó$óLrr°)rLrxÚmercurial.noderrÚmercurial.i18nrÚ mercurialrÚrr r rlr_r`r7r8Ú basepackstorerrÚmutablebasepackr°r®rrÚrÓs~ðÛ Û ÷õõ÷ñð € ðÐØ€à€ Ø € ô;;�H×*Ñ*ô;;ô|n"ˆx× Ñ ôn"ôbN�h×.Ñ.õNr