Ë ÆfÖ 8ìO$ãó0—ddlZddlZddlZddlZddlmZmZddlmZddl m Z m Z m Z ddl m Zddl mZej"Zej&Zej*Zej.Zej2ZdZd Zd Zd ZdZd Z d Z!d Z"dZ#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+dZ,dZ-ej\dd¬«Gd„d««Z/d„Z0Gd„d «Z1Gd!„d"e1«Z2Gd#„d$e2«Z3Gd%„d&e1«Z4ejjfd'„Z6d(„Z7Gd)„d*e2«Z8Gd+„d,e8«Z9d-„Z:d.„Z;d/„ZÐ >Ø �dŠ]Ø”wŠÙ d°DÔ9Ð9ØœÒ"Ù d°tÔ<Ð<Øœ.Ò(ÙØ#Ø#Ø).Ø$(¨$°Ð#?ô ðñØ#Ø#Ø$(¨$°¸¸5Ð0AÐ#Bôðô Ð3°eÑ;Ó<Ð Qó>ir có.—|jjSrf)Ú index_formatrFr[s r.Ú entry_sizezBaseIndexObject.entry_sizeRs€à× Ñ ×%Ñ%Ð%r0có¦—tjtjti«}t dt |««D]}||d}|||<Œ|S)Nré)Ú nodemaputilÚNodeMaprÚnullidrÚrangeÚlen)r%r ÚrÚns r.Ú_nodemapzBaseIndexObject._nodemapVsP€ä×%Ñ%Ô'8×'?Ñ'?ÄÐ&IÓJˆÜ�qœ#˜d›)Ö$ˆAØ�Q‘˜‘ ˆA؈G�AŠJð%ðˆr0có—||jvS)z*return True if the node exist in the index©r¹©r%Únodes r.Úhas_nodezBaseIndexObject.has_node^s€à�t—}‘}Ð$Ð$r0có —|j|S)zQreturn a revision for a node If the node is unknown, raise a RevlogErrorr»r¼s r.ÚrevzBaseIndexObject.revbs€ð�}‰}˜TÑ"Ð"r0có8—|jj|«S)zIreturn a revision for a node If the node is unknown, return None)r¹Úgetr¼s r.Úget_revzBaseIndexObject.get_revhs€ð�}‰}× Ñ  Ó&Ð&r0có~—dt|«vr0t|t|««D]}||d}|j|=Œyy©Nr¹r±)Úvarsrµr¶r¹)r%Ústartr·r¸s r.Ú _stripnodeszBaseIndexObject._stripnodesnsA€Ø œ˜d›Ñ #ܘ5¤# d£)Ö,�ؘ‘G˜A‘J�Ø—M‘M !Ñ$ñ-ð $r0có<—|jjdd«y)Nr¹)Ú__dict__Úpopr[s r.Ú clearcacheszBaseIndexObject.clearcachests€Ø � ‰ ×ј* dÕ+r0cóF—|jt|j«zSrf)Ú_lgtr¶Ú_extrar[s r.Ú__len__zBaseIndexObject.__len__ws€Ø�y‰yœ3˜tŸ{™{Ó+Ñ+Ð+r0cóÀ—dt|«vrt|«|j|d<|jt|«|«}|jj |«yrÅ)rÆr¶r¹Ú _pack_entryrÏÚappend)r%ÚtupÚdatas r.rÓzBaseIndexObject.appendzsL€Ø œ˜d›Ñ #Ü$'¨£IˆD�M‰M˜#˜a™&Ñ !Ø×Ѥ D£ ¨3Ó/ˆØ � ‰ ×ј4Õ r0cób—|ddk(sJ‚|ddk(sJ‚|jj|ddŽS)Nrré ©r®Úpack©r%rÀÚentrys r.rÒzBaseIndexObject._pack_entry€sA€Ø�Q‰x˜1Š}Ј}Ø�Q‰x˜1Š}Ј}Ø%ˆt× Ñ ×%Ñ% u¨R¨a yÐ1Ð1r0cóv—t|t«s td«‚|dks|t|«k\r t |«‚y)Nsexpecting int indexesr)Ú isinstancer§Ú TypeErrorr¶Ú IndexError©r%Úis r.Ú _check_indexzBaseIndexObject._check_index…s8€Ü˜!œSÔ!ÜÐ4Ó5Ð 5Ø ˆqŠ5�Aœ˜T›’NܘQ“-Ð ð#r0có˜—|dk(r |jS|j|«||jk\r|j||jz }n-|j |«}|j |||j z}|j||«}|jr0|dk(r+tjdt|d««}|f|ddz}|S)Nr rr) Ú null_itemrârÎrÏÚ_calculate_indexÚ_datar¯Ú _unpack_entryrÚ offset_typer©)r%rárÕÚindexr·Úoffsets r.Ú __getitem__zBaseIndexObject.__getitem__‹s»€Ø �Š7Ø—>‘>Ð !Ø ×ј!ÔØ �— ‘ Š>Ø—;‘;˜q 4§9¡9™}Ñ-‰Dà×)Ñ)¨!Ó,ˆEØ—:‘:˜e e¨d¯o©oÑ&=Ð>ˆDØ × Ñ ˜q $Ó 'ˆØ �9Š9˜˜ašÜ ×,Ñ,¨Q´¸¸!¹³ Ó>ˆFØ� ˜A˜a˜b˜EÑ!ˆA؈r0có¤—|jj|«}|ddtjtjtjfz}|S©Nr)r®ÚunpackÚrevlog_constantsÚCOMP_MODE_INLINEÚ RANK_UNKNOWN)r%rÀrÕr·s r.rçzBaseIndexObject._unpack_entryšsO€Ø × Ñ × $Ñ $ TÓ *ˆØ Ø Ø Ü × -Ñ -Ü × -Ñ -Ü × )Ñ )ð  ñ ˆðˆr0cóD—tj}|j|«S)ú!pack header information as binary)rïÚ INDEX_HEADERrÙ)r%ÚheaderÚv_fmts r.Ú pack_headerzBaseIndexObject.pack_header¥s€ä ×-Ñ-ˆØ�z‰z˜&Ó!Ð!r0có’—||}tjj|ddŽ}|dk(r|tjjd}|S)ú4return the raw binary string representing a revisionNrr)rïÚINDEX_ENTRY_V1rÙrôrF)r%rÀrÛÚps r.Ú entry_binaryzBaseIndexObject.entry_binaryªsM€à�S‘ ˆÜ × +Ñ +× 0Ñ 0°%¸¸°)Ð <ˆØ �!Š8ØÔ"×/Ñ/×4Ñ4Ð6Ð7ˆA؈r0N)!r�ržrŸÚrust_ext_compatrïrúr®ÚstructÚcalcsizeÚ big_int_sizeÚint_sizerr´rðrñrär Ú propertycacher¯r¹r¾rÀrÃrÈrÌrÐrÓrÒrârërçr÷rür¥r0r.r«r«8sï„à€Oà#×2Ñ2€Là"�6—?‘? 5Ó)€Làˆv�‰˜uÓ%€Hð Ø Ø Ø Ø Ø Ø Ø× Ñ Ø Ø Ø×)Ñ)Ø×)Ñ)Ø×%Ñ%ð€Ið  ×Ññ&óð&ð ×Ññóðò%ò#ò 'ò %ò ,ò,ò!ò 2ò  ò ò ò"ó r0r«có—eZdZd„Zd„Zd„Zy)Ú IndexObjectcóö—t|«|jzdk(s3Jt|«|jt|«|jzf«‚||_t|«|jz|_g|_yrí)r¶r¯rærÎrÏ)r%rÕs r.r/zIndexObject.__init__´sk€Ü�4‹y˜4Ÿ?™?Ñ*¨aÒ/ð Ü �‹IØ �O‰OÜ �‹I˜Ÿ™Ñ 'ð2 ó Ð/𠈌 ܘ“I §¡Ñ0ˆŒ ؈� r0có —||jzSrf)r¯ràs r.råzIndexObject._calculate_index¾s€Ø�4—?‘?Ñ"Ð"r0cóŒ—t|t«r|jdk(r |j� t d«‚|j }|j |«|j|«||jkr0|jd||jz|_ ||_g|_ y|jd||jz |_ y©Nr s.deleting slices only supports a:-1 with step 1) rÝÚsliceÚstopÚstepÚ ValueErrorrÇrârÈrÎrær¯rÏràs r.Ú __delitem__zIndexObject.__delitem__ÁsŸ€Ü˜!œUÔ#¨1¯6©6°Rª<¸1¿6¹6Ð;MÜÐNÓOÐ OØ �G‰GˆØ ×ј!ÔØ ×Ñ˜ÔØ ˆt�y‰yŠ=ØŸ™Ð$9 a¨$¯/©/Ñ&9Ð:ˆDŒJ؈DŒI؈D�KàŸ+™+ o¨¨D¯I©I© Ð6ˆD�Kr0N)r�ržrŸr/rår r¥r0r.rr³s„òò#ó 7r0rcó"—eZdZdZd„Zd„Zd„Zy)ÚPersistentNodeMapIndexObjectaa Debug oriented class to test persistent nodemap We need a simple python object to test API and higher level behavior. See the Rust implementation for more serious usage. This should be used only through the dedicated `devel.persistent-nodemap` config. có,—tj|«S)z’Return bytes containing a full serialization of a nodemap The nodemap should be valid for the full set of revisions in the index.)r²Úpersistent_datar[s r.Únodemap_data_allz-PersistentNodeMapIndexObject.nodemap_data_all×s€ô ×*Ñ*¨4Ó0Ð0r0cóî—|j€y|j}tj||j|j|jj «\}}dx|_x|_|_|||fS)zÎReturn bytes containing a incremental update to persistent nodemap This containst the data for an append-only update of the data provided in the last call to `update_nodemap_data`. N)Ú_nm_rootÚ _nm_docketr²Úupdate_persistent_dataÚ _nm_max_idxÚtip_rev)r%ÚdocketÚchangedrÕs r.Únodemap_data_incrementalz5PersistentNodeMapIndexObject.nodemap_data_incrementalÞsq€ð �=‰=Ð ØØ—‘ˆÜ#×:Ñ:Ø �$—-‘- ×!1Ñ!1°4·?±?×3JÑ3Jó ‰ ˆ�ð>BÐAˆŒ ÐA˜Ô(¨4¬?Ø�w Ð$Ð$r0có —|�Ltj|«\|_|_|jr||_ydx|_x|_|_yy)z¨provide full block of persisted binary data for a nodemap The data are expected to come from disk. See `nodemap_data_all` for a produceur of such data.N)r²Ú parse_datarrr)r%rÚnm_datas r.Úupdate_nodemap_dataz0PersistentNodeMapIndexObject.update_nodemap_dataîsM€ð Ð Ü.9×.DÑ.DÀWÓ.MÑ +ˆDŒM˜4Ô+Ø�}Š}Ø"(�•àEIÐI�” ÐI Ô 0°4µ?ð r0N)r�ržrŸr rrrr¥r0r.rrÏs„ñò1ò%ó Jr0rcó&—eZdZdd„Zd„Zd„Zd„Zy)ÚInlinedIndexObjectcó‚—||_|jd«|_|j|j«g|_yrf)ræÚ _inline_scanrÎrÏ)r%rÕÚinlines r.r/zInlinedIndexObject.__init__üs4€ØˆŒ Ø×%Ñ% dÓ+ˆŒ Ø ×ј$Ÿ)™)Ô$؈� r0cóÖ—d}|� dg|z|_d}|t|j«|jz kr�||jz}t j d|j|||jz«\}|�||j|<|dz }||j|zz }|t|j«|jz krŒ�|t|j«k7r td«‚|S)Nrr¬rscorrupted data) Ú_offsetsr¶rær¯rrþrîrr )r%ÚlgtÚoffÚcountrÇÚss r.r#zInlinedIndexObject._inline_scansà€ØˆØ ˆ?ؘC #™IˆDŒM؈ؔS˜Ÿ™“_ t§¡Ñ6Ò6ؘ$×+Ñ+Ñ+ˆEÜ—=‘=ØØ— ‘ ˜5 5¨4¯=©=Ñ#8Ð9ó‰DˆQðˆØ'*�— ‘ ˜eÑ$Ø �Q‰JˆEØ �4—?‘? QÑ&Ñ &ˆCð”S˜Ÿ™“_ t§¡Ñ6Ó6ð ”#�d—j‘j“/Ò !ÜÐ.Ó/Ð /؈ r0cór—t|t«r|jdk(r |j� t d«‚|j }|j |«|j|«||jkr#|jd||_ ||_g|_ y|jd||jz |_ yr) rÝr r r r rÇrârÈrÎr&rÏràs r.r zInlinedIndexObject.__delitem__s•€Ü˜!œUÔ#¨1¯6©6°Rª<¸1¿6¹6Ð;MÜÐNÓOÐ OØ �G‰GˆØ ×ј!ÔØ ×Ñ˜ÔØ ˆt�y‰yŠ=Ø ŸM™M¨"¨1Ð-ˆDŒM؈DŒI؈D�KàŸ+™+ o¨¨D¯I©I© Ð6ˆD�Kr0có —|j|Srf)r&ràs r.råz#InlinedIndexObject._calculate_index"s€Ø�}‰}˜QÑÐr0N©r)r�ržrŸr/r#r rår¥r0r.r!r!ûs„óò ò& 7ó r0r!có¼—|tjk(r t|«S|s*|tjk(rt}nt }||«dfSt }|||«d|ffSrí)rïÚ CHANGELOGV2Úparse_index_cl_v2ÚREVLOGV2Ú IndexObject2rr!)rÕr$ÚformatrDs r.Ú parse_index2r4&sa€Ø Ô!×-Ñ-Ò-Ü  Ó&Ð&Ù Ø Ô%×.Ñ.Ò .܉CäˆCÙ�4‹y˜$ˆÐÜ €CÙ ˆt�VÓ ˜q $˜iÐ 'Ð'r0có—t|«dfSrf)ÚIndexChangelogV2)rÕs r.r0r03s€Ü ˜DÓ ! 4Ð 'Ð'r0cóB—eZdZejZd„Zd„Zd„Zd„Z d„Z y)r2có*—|dkrt‚|j|«||jkr d}t|«‚t||«}||d<||d<||d<||d<t |«}|j ||«}||j ||jz <y)zï Replace an existing index entry's sidedata offset and length with new ones. This cannot be used outside of the context of sidedata rewriting, inside the transaction that creates the revision `rev`. rs2cannot rewrite entries outside of this transactionrr×é N)ÚKeyErrorrârÎÚlistÚtuplerÒrÏ) r%rÀÚsidedata_offsetÚsidedata_lengthÚ offset_flagsÚcompression_modeÚmsgrÛÚnews r.Úreplace_sidedata_infoz"IndexObject2.replace_sidedata_info:sš€ð �Š7܈NØ ×ј#ÔØ �—‘Š?ØGˆCܘ3“-Р䘘c™“OˆEØ#ˆE�!‰HØ&ˆE�!‰HØ&ˆE�!‰HØ(ˆE�"‰Iܘ%“LˆEØ×"Ñ" 3¨Ó.ˆCØ+.ˆD�K‰K˜˜dŸi™i™Ò (r0có”—|jj|«}|dd}|ddz}|ddzdz }|||tjfzS)Né éé r)r®rîrïrñ)r%rÀrÕrÛÚ data_compÚ sidedata_comps r.rçzIndexObject2._unpack_entryXs\€Ø× Ñ ×'Ñ'¨Ó-ˆØ�S�b� ˆØ˜‘H˜q‘Lˆ ؘb™ VÑ,°Ñ2ˆ ؘ  =Ô2B×2OÑ2OÐPÑPÐPr0cóv—|dd}|ddz}|ddzdz}|||zfz }|jj|ŽS)NrErFr9rrØ)r%rÀrÛrÕrHrIs r.rÒzIndexObject2._pack_entry_sW€Ø�S�bˆzˆØ˜"‘I ‘Mˆ ؘr™ Q™¨1Ñ,ˆ Ø �˜]Ñ*Ð,Ñ,ˆà%ˆt× Ñ ×%Ñ% tÐ,Ð,r0có0—||}|j||«S)rù)rÒrÚs r.rüzIndexObject2.entry_binarygs€à�S‘ ˆØ×Ñ  UÓ+Ð+r0có:—d}||z}tj|«‚)róz9version header should go in the docket, not the index: %d)rÚProgrammingError)r%rõrAs r.r÷zIndexObject2.pack_headerls!€àIˆØ ˆv‰ ˆÜ×$Ñ$ SÓ)Ð)r0N) r�ržrŸrïÚINDEX_ENTRY_V2r®rCrçrÒrür÷r¥r0r.r2r27s'„Ø#×2Ñ2€Lò/ò<Qò-ò,ó *r0r2cóž—eZdZejZejdejdzejejdzZdd„Z d„Z y)r6Nr-cóÞ—|jj|«}|tj|tj|tj |||tj |tj|tj|tj|tj|tjdz|tjdz dz|tjf S©NrFr) r®rîrïÚINDEX_ENTRY_V2_IDX_OFFSETÚ$INDEX_ENTRY_V2_IDX_COMPRESSED_LENGTHÚ&INDEX_ENTRY_V2_IDX_UNCOMPRESSED_LENGTHÚINDEX_ENTRY_V2_IDX_PARENT_1ÚINDEX_ENTRY_V2_IDX_PARENT_2ÚINDEX_ENTRY_V2_IDX_NODEIDÚ"INDEX_ENTRY_V2_IDX_SIDEDATA_OFFSETÚ-INDEX_ENTRY_V2_IDX_SIDEDATA_COMPRESSED_LENGTHÚ#INDEX_ENTRY_V2_IDX_COMPRESSION_MODEÚINDEX_ENTRY_V2_IDX_RANK)r%rÀrÕr·Úitemss r.rçzIndexChangelogV2._unpack_entry|sã€Ø×!Ñ!×(Ñ(¨Ó.ˆà Ô"×<Ñ<Ñ =Ø Ô"×GÑGÑ HØ Ô"×IÑIÑ JØ Ø Ø Ô"×>Ñ>Ñ ?Ø Ô"×>Ñ>Ñ ?Ø Ô"×<Ñ<Ñ =Ø Ô"×EÑEÑ FØ Ü ×NÑNñ ð Ô"×FÑFÑ GÈ!Ñ KØ Ô#×GÑGÑ HÈAÑ MØñ à Ô"×:Ñ:Ñ ;ð! ð r0c ó^—|tj}|tj}||k(s J||f«‚||k(s J||f«‚|tj|tj|tj |tj |tj|tj|tj|tj|tjdz|tjdzdzz|tjf }|jj|ŽSrQ)rïÚENTRY_DELTA_BASEÚENTRY_LINK_REVÚENTRY_DATA_OFFSETÚENTRY_DATA_COMPRESSED_LENGTHÚENTRY_DATA_UNCOMPRESSED_LENGTHÚENTRY_PARENT_1ÚENTRY_PARENT_2Ú ENTRY_NODE_IDÚENTRY_SIDEDATA_OFFSETÚ ENTRY_SIDEDATA_COMPRESSED_LENGTHÚENTRY_DATA_COMPRESSION_MODEÚENTRY_SIDEDATA_COMPRESSION_MODEÚ ENTRY_RANKr®rÙ)r%rÀrÛÚbaseÚlink_revrÕs r.rÒzIndexChangelogV2._pack_entry‘s.€àÔ%×6Ñ6Ñ7ˆØÔ)×8Ñ8Ñ9ˆØ�sŠ{Ð'˜T 3˜KÓ'ˆ{ؘ3ŠÐ/ ¨3 Ó/ˆà Ô"×4Ñ4Ñ 5Ø Ô"×?Ñ?Ñ @Ø Ô"×AÑAÑ BØ Ô"×1Ñ1Ñ 2Ø Ô"×1Ñ1Ñ 2Ø Ô"×0Ñ0Ñ 1Ø Ô"×8Ñ8Ñ 9Ø Ô"×CÑCÑ DØ Ô"×>Ñ>Ñ ?À!Ñ CØÔ%×EÑEÑFÈÑJØññ ð Ô"×-Ñ-Ñ .ð  ˆð&ˆt× Ñ ×%Ñ% tÐ,Ð,r0)T) r�ržrŸrïÚINDEX_ENTRY_CL_V2r®r2rärjrçrÒr¥r0r.r6r6ss\„Ø#×5Ñ5€Lð ×ÑÐ<Ð!1×!<Ñ!<Ð=Ø ñ à × Ñ Ð!1×!<Ñ!<Ð!>Ð ?ñ @ðó  ó*-r0r6có—t|«dfS)zBlike parse_index2, but alway return a PersistentNodeMapIndexObjectN)r)rÕr$s r.Úparse_index_devel_nodemapro¨s€ä '¨Ó -¨tÐ 3Ð3r0có$—|dd|ddg}d}tj|«}d}t|«}||kr\||z}td|||«} || dz}|||} d| vr| j d«\} } | || <t j | ddŽ|| <||krŒ\|S)Néé(ó>cllllró)rþrÿr¶Ú_unpackÚsplitrrY) ÚdmapÚcopymapÚstÚparentsr3Úe_sizeÚpos1ÚlÚpos2ÚeÚfÚcs r.Úparse_dirstater‚­sÀ€Ø�#�2ˆw˜˜2˜b˜ Ð"€Gà €FÜ �_‰_˜VÓ $€FØ €DÜ ˆB‹€Að �Š(Ø�f‰}ˆÜ �I˜r $ t˜}Ó -ˆØ�a˜‘d‰{ˆØ ˆt�DˆMˆØ �A‰:Ø—7‘7˜5“>‰DˆAˆq؈G�A‰JÜ×+Ñ+¨Q¨r°¨UÐ3ˆˆQ‰ð �‹(ð €Nr0c óŠ—t«}|j}|dj|««|j«D]t\}}||vr d|||fz}t d|j «|j «|j«|j«t|««}||«||«Œv|j«S)Nr0s%s%srs) ÚstringioÚwriteÚjoinr\Ú_packrwrgrjrlr¶Úgetvalue)rwrxÚplÚcsr…r€rs r.Ú pack_dirstater‹Âs¥€Ü ‹€BØ �H‰H€EÙ ˆ#�(‰(�2‹,ÔØ— ‘ – ‰ˆˆ1Ø �‰<ؘQ ¨¡ ˜OÑ+ˆAÜ Ø Ø �K‰K‹MØ �J‰J‹LØ �J‰J‹LØ �K‰K‹MÜ �‹Fó  ˆñ ˆaŒÙ ˆa�ðð �;‰;‹=Ðr0)=Úior:rþÚzlibr½rrÚ thirdpartyrÚrrr r r²r rïÚBytesIOr„rÙr‡rîruÚcompressÚ _compressÚ decompressÚ _decompressrTrSrUrArBrCr<r=r6r7r8r9r5r3r4r@ÚDIRSTATE_V2_DIRECTORYÚ DIRSTATE_V2_ALL_UNKNOWN_RECORDEDÚ DIRSTATE_V2_ALL_IGNORED_RECORDEDr*rr©r«rrr!ÚREVLOGV1r4r0r2r6ror‚r‹r¥r0r.Úr™swðó Û Û Û ÷õ÷ñõ 1Ý7à �:‰:€ð � ‰ €Ø �-‰-€Ø �M‰M€ Ø�o‰o€ ð €ð € ð€ð"ÐØÐØÐØ#ÐØ$ÐØ &ÐØ"ÐØ#)Ð Ø%ÐØ)/Ð&Ø 'ÐØÐØ%,Ð"ØÐØ#*Ð Ø#*Ð ð€‡�ˆd˜Ô÷o!ðo!ó ðo!òd÷xñxôv7�/ô7ô8)J ;ô)JôX( ˜ô( ðV'7×&?Ñ&?ó (ò(ô9*�;ô9*ôx2-�|ô2-òj4ò ó*r0