Ë +ŒM]ÏîrãóF—dZddlZddlZddlZddlZddlZddlZddlZddlZddl m Z m Z m Z m Z mZmZddlmZddlmZddlmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,ddl-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4dd l5m6Z6dd l7m8Z8m9Z9m:Z:m;Z;mZ>m?Z?dd l@mAZAm?ZBdd l=mCZDmEZFmGZGmHZImJZJmKZKmLZLmMZNdd lOmPZPmQZQe$e%e'eeee)e*e+e&e(e3e/e2e0e.e1e4ed}d6„Z?d}d7„Z@dxd8„ZAd9„ZBd:„ZCd}d;„ZDd<„ZEd=„ZFd>„ZGd?„ZHd@„ZIdydA„ZJdB„ZKdC„ZLdD„ZMdE„ZNd~dF„ZOdG„ZPdxdH„ZQdxdI„ZRd}dJ„ZSdK„ZTdL„ZUdM„ZVdN„ZWdxdO„ZXdxdP„ZYddQ„ZZdxdR„Z[dS„Z\dxdT„Z]dU„Z^d€dV„Z_e`dW„«Zad�dX„ZbdY„Zcej6dZ„«Zdej6d[„«Zed\„Zfddegddfd]„Zh d€d^„Zid_„Zjd`„Zk d‚da„Zldb„Zmdc„Zn dƒdd„Zode„Zpdf„Zqdg„Zrdh„Zsdi„Ztdj„Zudddevjîddfdk„ZxdlZydmZzdnZ{doZ|hdp£Z}dezddfdq„Z~dr„Zd„ds„Z€dt„Z� d…du„Z‚dv„Zƒy)†rAak the underlying revision storage object A revlog consists of two parts, an index and the revision data. The index is a file with a fixed record size containing information on each revision, including its nodeid (hash), the nodeids of its parents, the position and offset of its data within the data file, and the revision it's based on. Finally, each entry contains a linkrev entry that can serve as a pointer to external data. The revision data itself is a linear collection of data chunks. Each chunk represents a revision and is usually represented as a delta against the previous chunk. To bound lookup time, runs of deltas are limited to about 2 times the length of the original version data. This makes retrieval of a version proportional to its size, or O(1) relative to the number of revisions. Both pieces of the revlog are written to in an append-only fashion, which means we never need to rewrite a file to insert or remove data, and can use some simple techniques to avoid the need for locking while reading. If checkambig, indexfile is opened with checkambig=True at writing, to avoid file stat ambiguity. If mmaplargeindex is True, and an mmapindexthreshold is set, the index will be mmapped rather than read if it is larger than the configured threshold. If censorable is True, the revlog can have censored revisions. If `upperboundcomp` is not None, this is the expected maximal gain from compression for the data content. `concurrencychecker` is an optional function that receives 3 arguments: a file handle, a filename, and an expected position. It should check whether the current position in the file handle is valid, and log/warn/fail (by raising). See mercurial/revlogutils/contants.py for details about the content of an index entry. cón—tj|«d}|dz}|dz}t|}|d|«S)Nréÿÿéÿÿóinline)rÚunpackr)Ú header_bytesÚheaderÚ _format_flagsÚ_format_versionÚfeaturess rHÚis_inline_indexzrevlog.is_inline_index%sF€ä×$Ñ$ \Ó2°1Ñ5ˆà Ñ(ˆ Ø  6™/ˆä& Ñ7ˆØ"ˆx˜ Ñ" =Ó1Ð1rKNFcó(—||_||_d|_d|_d|_d|_d|_||_| |_| |_ ||_ | rtj|«|_|dtvsJ‚t|«dk(sJ‚||_||_||_||_d|_t)j*d«|_d|_d|_d|_d|_d|_d|_d|_d|_d|_i|_ d |_!i|_"d |_#d|_$d|_%d|_&d |_'d |_(d|_)tUtVjX«|_-d|_.d|_/|ja«| |_1| |_2y) aJ create a revlog object opener is a function that abstracts the file opening operation and can be used to implement COW semantics or the like. `target`: a (KIND, ID) tuple that identify the content stored in this revlog. It help the rest of the code to understand what the revlog is about without having to resort to heuristic and index filename analysis. Note: that this must be reliably be set by normal code, but that test, debug, or performance measurement code might not set this to accurate value. Nrééd)rrKéTFszlibéÿÿÿÿgà?i)3ÚupperboundcompÚradixÚ _docket_fileÚ _indexfileÚ _datafileÚ _sidedatafileÚ _nodemap_fileÚpostfixÚ _trypendingÚ _try_splitÚopenerÚ nodemaputilÚget_nodemap_filer ÚlenÚtargetÚ _checkambigÚ_mmaplargeindexÚ _censorableÚ_revisioncacher4Ú lrucachedictÚ_chainbasecacheÚ _chunkcacheÚ_chunkcachesizeÚ _maxchainlenÚ_deltabothparentsÚ_candidate_group_chunk_sizeÚ _debug_deltartÚ_docketÚ_nodemap_docketÚ_pcacheÚ _compengineÚ_compengineoptsÚ_maxdeltachainspanÚ_withsparsereadÚ _sparserevlogÚ hassidedataÚ_srdensitythresholdÚ _srmingapsizeÚ _compute_rankÚdictr8ÚflagprocessorsÚ_flagprocessorsÚ_writinghandlesÚ _adding_groupÚ _loadindexÚ_concurrencycheckerÚcanonical_parent_order)ÚselfrŸr£r–rœÚ checkambigÚmmaplargeindexÚ censorabler•ÚpersistentnodemapÚconcurrencycheckerÚ trypendingÚ try_splitrÃs rHÚ__init__zrevlog.__init__/s¦€ð:-ˆÔàˆŒ à ˆÔØˆŒØˆŒØ!ˆÔØ!ˆÔ؈Œ Ø%ˆÔØ#ˆŒØˆŒ Ù Ü!,×!=Ñ!=¸dÓ!CˆDÔ à�a‰yœIÑ%Ð%Ð%Ü�6‹{˜aÒÐÐØˆŒ ð&ˆÔØ-ˆÔØ%ˆÔà"ˆÔä#×0Ñ0°Ó5ˆÔà#ˆÔà$ˆÔØ ˆÔØ!%ˆÔØ+,ˆÔ(Ø!ˆÔ؈Œ ؈Œ Ø#ˆÔàˆŒ à"ˆÔØ!ˆÔØ"$ˆÔØ$ˆÔØ"ˆÔØ ˆÔØ#'ˆÔ Ø#ˆÔð #ˆÔô $¤H×$;Ñ$;Ó<ˆÔð $ˆÔà!ˆÔà �‰Ôà#5ˆÔ ð'=ˆÕ#rKcó(—d}|jj}d|vr1|jtk(rt}|j dd«|_nOd|vrt}nDd|vrttz}d|vr/|tz}n%d|jjvrt}nt}d |vr |d |_ d |vr |d |_d |vr |d |_|j d «}|r||_t#|j d d««|_d|_|j$r t#|j dd««|_d|vr |d|_d|vr |d|_d|vr|d|j,d<d|vr|d|j,d<d|vr |d|_|j0r d|vr|d}t#|j dd««|_t#|j dd««}|j2xs||_d|vr |d|_d|vr |d|_|j d«rt:|j<t><|j di«jA«D]&\}}tCjD|||j<«Œ(|jdkr+tGjHtKd«|jz«‚|j|jdz zr+tGjHtKd«|jz«‚|j d d«}|||fS)!aprocess options (from above/config) to setup associated default revlog mode These values might be affected when actually reading on disk information. The relevant values are returned for use in _loadindex(). * newversionflags: version header to use if we need to create a new revlog * mmapindexthreshold: minimal index size for start to use mmap * force_nodemap: force the usage of a "development" version of the nodemap code Ns changelogv2schangelogv2.compute-rankTsrevlogv2srevlogv1ó generaldeltasrevlogv0schunkcachesizes maxchainlensdeltabothparentss.delta-parent-search.candidate-group-chunk-sizes lazydeltaFs lazydeltabases debug-deltas compengines zlib.levels zstd.levelsmaxdeltachainspansmmapindexthresholds sparse-revlogswith-sparse-readssparse-read-density-thresholdssparse-read-min-gap-sizesenableellipsissflagprocessorsrs0revlog chunk cache size %r is not greater than 0rs.revlog chunk cache size %r is not a power of 2sdevel-force-nodemap)&rŸÚoptionsÚ revlog_kindrr Úgetr»rrrrrr"r«r¬r­r®ÚboolÚ _lazydeltaÚ_lazydeltabaser¯r³r´rµr¥r·r¶r¹rºÚellipsisprocessorr¾r%Úitemsr8Úinsertflagprocessorr.Ú RevlogErrorr ) rÄÚmmapindexthresholdÚoptsÚ new_headerÚdps_cgdsÚwithsparsereadÚflagÚ processorÚ force_nodemaps rHÚ _init_optszrevlog._init_opts˜s0€ð "ÐØ�{‰{×"Ñ"ˆà ˜TÑ ! d×&6Ñ&6¼.Ò&HÜ$ˆJØ!%§¡Ð*EÀtÓ!LˆDÕ Ø ˜DÑ Ü!‰JØ ˜DÑ Ü!Ô$4Ñ4ˆJØ $Ñ&ØÔ/Ñ/‘ Ø ˜DŸK™K×/Ñ/Ñ /Ü!‰Jä/ˆJà  Ñ $Ø#'Ð(9Ñ#:ˆDÔ Ø ˜TÑ !Ø $ ^Ñ 4ˆDÔ Ø  $Ñ &Ø%)Ð*=Ñ%>ˆDÔ "Ø—8‘8ÐMÓNˆÙ Ø/7ˆDÔ ,ܘtŸx™x¨ °dÓ;Ó<ˆŒØ#ˆÔØ �?Š?Ü"& t§x¡xÐ0@À%Ó'HÓ"IˆDÔ Ø ˜TÑ !Ø $ ^Ñ 4ˆDÔ Ø ˜DÑ Ø# MÑ2ˆDÔ Ø ˜DÑ Ø26°}Ñ2EˆD× Ñ  Ñ /Ø ˜DÑ Ø26°}Ñ2EˆD× Ñ  Ñ /Ø  4Ñ 'Ø&*Ð+?Ñ&@ˆDÔ #Ø × Ò Ð$9¸TÑ$AØ!%Ð&;Ñ!<Ð Ü! $§(¡(Ð+;¸UÓ"CÓDˆÔܘdŸh™hÐ':¸EÓBÓCˆà#×1Ñ1ÒC°^ˆÔØ +¨tÑ 3Ø'+Ð,LÑ'MˆDÔ $Ø &¨$Ñ .Ø!%Ð&AÑ!BˆDÔ Ø �8‰8Ð%Ô &Ü4EˆD× Ñ ¤Ñ 1ð $Ÿx™xÐ(9¸2Ó>×DÑDÖF‰OˆD�)Ü × (Ñ (¨¨y¸$×:NÑ:NÕ Oð Gð × Ñ  1Ò $Ü×#Ñ#ÜÐEÓFØ×&Ñ&ñ'óð ð× !Ñ ! T×%9Ñ%9¸AÑ%=Ò >Ü×#Ñ#ÜÐCÓDØ×&Ñ&ñ'óð ðŸ™Ð!7¸Ó?ˆ ØÐ-¨}Ð<Ð.get_stream"saøèø€Ø—]‘]”_¨Ø’JØ%¨ Ñ1�Dؘu’}Ø Ÿg™g d›mÓ+ä#'×#5Ñ#5°bÀÔ#E×EÐE÷ %�_ð Fø÷ %�_üs.ƒA-”=A!ÁAÁA!Á A-ÁA!Á!A*Á&A-c3óœ•K—‰j«5}d–—t‰«D]�}‰jj|«}|dk(rP‰j€D‰j }|‰j z}|tz}‰jj|«}||z}|–—‰j|||¬«d–—Œ‘ ddd«y#1swYyxYw­w)Nr©Údfr) Ú_datafpÚrangertÚ entry_binaryr°rŒr�rÚ pack_headerÚ_getsegmentforrevs)Úfp_dÚrevÚidxr‹ÚnrÄs €€rHrúz&revlog.get_streams..get_stream2s·øèø€Ø—\‘\”^ tØ’Jä$ Qžx˜Ø"Ÿj™j×5Ñ5°cÓ:˜Ø !š8¨¯ © Ð(<à%)×%7Ñ%7˜FØ" d×&:Ñ&:Ñ:˜FØ"Ô&6Ñ6˜FØ%)§Z¡Z×%;Ñ%;¸FÓ%C˜FØ"(¨3¡,˜CØ!š Ø"×5Ñ5°c¸3À4Ð5ÓHÈÑKÓKñ (÷$—^‘^üsƒC ”B"CÂ7 C ÃC ÃC c3óÔ•K—‰j«5}d–—‰dkr|j‰«–—ntj|‰¬«Ed{–—†ddd«y7Œ #1swYyxYw­wrórõ)rírùrÄs €€rHÚget_index_streamz,revlog.get_streams..get_index_streamIsYøèø€Ø—]‘]”_¨Ø’JØ! UÒ*Ø Ÿg™g jÓ1Ó1ä#'×#5Ñ#5°bÀ Ô#K×KÐK÷ %�_ð Lø÷ %�_üó.ƒA(”8AÁ AÁ AÁ A(ÁAÁA%Á!A(c3óÔ•K—‰j«5}d–—‰dkr|j‰«–—ntj|‰¬«Ed{–—†ddd«y7Œ #1swYyxYw­wró)rþrèr4r÷)rírørÄs €€rHÚget_data_streamz+revlog.get_streams..get_data_streamQsYøèø€Ø—\‘\”^ rØ’JØ  EÒ)Ø Ÿg™g iÓ0Ó0ä#'×#5Ñ#5°bÀ Ô#J×JÐJ÷ $�^ð Kø÷ $�^ür )r¢rtÚ entry_sizeÚendÚ_inlineÚnextr˜r™)rÄÚ max_linkrevÚ force_inlinertÚlinkrevrúÚ inline_streamrr Ú index_streamÚ data_streamrørùrs` @@@rHÚ get_streamszrevlog.get_streamssEû€Ü �‹IˆØ— ‘ ˆØ�!ŠeؘA ™E‘l 1‘oˆGؘÒ$Øð�A‘ˆAð�!‹eð �Š6àˆIؘ×)Ñ)Ñ)ˆ Ø—H‘H˜Q ™U“Oˆ ð �<Š<ö Fñ'›LˆMÜ �Ô à—‘ -°¸iÑ1GÐHðð ñõ Lñ '›LˆMÜ �Ô à—‘ -°¸iÑ1GÐHðð õ  Lõ Kñ,Ó-ˆLÜ �Ô Ù)Ó+ˆKÜ �Ô à—‘ ¨iÐ8Ø—‘ ,° Ð;ðð rKcó¸ —|j«\}}}|j�d|j|jfz}n‘|jr8|jj d|jz«rd|jz}nM|j r2|jj |j«r |j}nd|jz}|�||_||_ �nÍd|_ |j||«}t|«dkDr#tj|dd«d}d|_ n|}|dz|_|d z|_t#j$|j «}|€;t'd «} | |j |j(fz} t+j,| «‚|j|zrKt'd «} |jd z } | | |j |j(fz} t+j,| «‚t.|j } | d |j«|_| d|j«|_| d|_| ds ||_|} nV||_ |jrt9j:||«|_n't9j<|||j¬«|_|j�¸|jj?«|_d} |jj@} | dkDrg|j|j6|| ¬«} t| «| kr;t'd«} | |j(t| «| fz} t+j,| «‚d|_d|_d|_!|j�?|jjE«|_#|jjI«|_%nA|j€d|jz|_#n d|j|jfz|_#tL|_'|jNjP|_(|j2sd|_)d|_*|jBxr |xrtVdu}d}tX�4|jB�d}n%|jjZj%d«}t\|_/|j t`k(rtbjd|_/nY|j tfk(r th|_/n:|j tjk(r tl|_/n|r tV|_/n |r tn|_/ |j_ |j0«}|\}}|j0 xr&|jBduxrtqjr|d«}|rotujv|«}|�X|d}t|d«|jxkDr8|d|jxd|jzk(r||_>|j~|Ž||_Bt‡j†|j|j0r |j6n |jF|jˆ|«|_Et‡j†|j|jJ|jˆ«|_FtqjŽd«|_Hi|_Iy#t€t‚f$r,t+j,t'd«|j(z«‚wxYw)Ns%s.i.%ss%s.i.as%s.iTrrñFr†r‡s!unknown version (%d) in revlog %ss-unknown flags (%#04x) in version %d revlog %sérˆrÎssidedatasdocket)Ú use_pendingrK)rìs.too few index data for %s: got %d, expected %ds%s.ds%s.d.%ss rust.indexÚupdate_nodemap_dataésindex %s is corruptedéô)Jrárœr–r�rŸÚexistsržÚ_split_index_filer°r—Ú _initemptyrïr¢rr‰rŒr�r#rÑr Ú display_idr.rØrrÚ _generaldeltar¸r˜Ú docketutilÚdefault_docketÚ parse_docketÚindex_filepathÚ index_endr›Ú data_filepathr™Úsidedata_filepathršrÚ nodeconstantsÚnullidr·Ú_storedeltachainsrr�rÏrvÚ _parse_indexrr;Úparse_index_v0rrzr r|rƒr4Ú safehasattrr Úpersisted_dataÚtip_revÚtip_noder±rÚ ValueErrorÚ IndexErrorrtr:r«Ú _segmentfileÚ_segmentfile_sidedatar¨Ú_chaininfocacheÚ_decompressors)rÄr7rÛrÙràÚ entry_pointÚ entry_datar‹Úsupported_flagsÚmsgÚ display_flagrŽÚ index_datarùÚ devel_nodemapÚuse_rust_indexÚdrtÚ chunkcacheÚ use_nodemapÚ nodemap_datas rHrÁzrevlog._loadindexbs€à8<¿¹Ó8IÑ5ˆ Ð&¨ à �<‰<Ð #Ø$¨¯ © °D·L±LÐ'AÑA‰KØ × Ò  $§+¡+×"4Ñ"4°YÀÇÁÑ5KÔ"LØ# d§j¡jÑ0‰KØ �_Š_ §¡×!3Ñ!3°D×4JÑ4JÔ!KØ×0Ñ0‰Kà! D§J¡JÑ.ˆKà Ð Ø!ˆDŒLØ +ˆDÖ à"ˆDŒOØŸ™¨ Ð5GÓHˆJÜ�:‹ Ò"Ü%×,Ñ,¨Z¸¸¨^Ó<¸QÑ?�Ø"'�•à#�à!'¨'Ñ!1ˆDÔ Ø#)¨F¡?ˆDÔ ä-×1Ñ1°$×2FÑ2FÓGˆOØÐ&ÜÐ<Ó=�ؘ×,Ñ,¨d¯o©oÐ>Ñ>�Ü×'Ñ'¨Ó,Ð,Ø×#Ñ# Ð&6Ò6ÜÐHÓI�Ø#×1Ñ1°RÑ7� ؘ  d×&:Ñ&:¸D¿O¹OÐLÑL�Ü×'Ñ'¨Ó,Ð,ä*¨4×+?Ñ+?Ñ@ˆHØ.˜8 IÑ.¨t×/AÑ/AÓBˆDŒLØ!: ¨/Ñ!:¸4×;MÑ;MÓ!NˆDÔ Ø'¨ Ñ4ˆDÔ à˜IÒ&Ø"-�”Ø'‘ à$/�Ô!Ø—?’?Ü#-×#<Ñ#<¸TÀ6Ó#J�D•Lä#-×#:Ñ#:ؘj°d×6FÑ6Fô$�D”Lð �<‰<Ð #Ø"Ÿl™l×9Ñ9Ó;ˆDŒO؈JØŸ™×/Ñ/ˆJؘAŠ~Ø!Ÿ^™^Ø—O‘OÐ%7¸jð,ó� ô�z“? ZÒ/ÜÐMÓN�CؘDŸO™O¬S°«_¸jÐIÑI�CÜ×+Ñ+¨CÓ0Ð0à ˆDŒLà!%ˆDÔ ð"&ˆDÔ à �<‰<Ð #Ø!Ÿ\™\×7Ñ7Ó9ˆDŒNØ!%§¡×!?Ñ!?Ó!AˆDÕ Ø �\‰\Ð !Ø$ t§z¡zÑ1ˆD�Nà'¨4¯:©:°t·|±|Ð*DÑDˆDŒNä.ˆÔØ×(Ñ(×/Ñ/ˆŒ ð×!Ò!Ø!&ˆDÔ à!%ˆÔð × Ñ ò 3Øò 3ä&¨dÐ2ð ð ˆÜ Ð !Ø×!Ñ!Ð-Ø!%‘à!%§¡×!4Ñ!4×!8Ñ!8¸Ó!G�ä*ˆÔØ × Ñ ¤8Ò +Ü (× 7Ñ 7ˆDÕ Ø × !Ñ !¤XÒ -Ü .ˆDÕ Ø × !Ñ !¤[Ò 0Ü 1ˆDÕ Ù Ü 6ˆDÕ Ù Ü 4ˆDÔ ð Ø×!Ñ! *¨d¯l©lÓ;ˆAØ !Ñ ˆE�:à—L‘LÐ òCØ×&Ñ&¨dÐ2òCä×$Ñ$ UÐ,AÓBð ñ Ü*×9Ñ9¸$Ó?� ØÐ+Ø)¨!™_�Fä˜A˜a™D›  F§N¡NÒ2ؘa™D §¡Ñ0°Ñ3°v·±ÒFð06˜Ô,Ø1˜×1Ñ1°<Ñ@𠈌 Ü,×=Ñ=Ø �K‰KØ $§ ¢ ˆT�_Š_°$·.±.Ø × Ñ Ø ó  ˆÔô &6×%FÑ%FØ �K‰KØ × Ñ Ø × Ñ ó& ˆÔ"ô $×0Ñ0°Ó5ˆÔà ˆÕøô'œJÐ'ò Ü×#Ñ#ÜÐ*Ó+¨d¯o©oÑ=óð ð ús Ô!CZÚ;[có—|S)zÐ !à—:‘:Ð rKcó\— |j|}|S#t$r� tjj |«}|j |j «}||j|<Y|S#t$r5tjtd«tj|«z«‚wxYwwxYw)Nsunknown compression type %s) r7ÚKeyErrorr4Ú compenginesÚforrevlogheaderÚrevlogcompressorr´r.rØr ÚbinasciiÚhexlify)rÄÚtÚ compressorÚengines rHÚ_get_decompressorzrevlog._get_decompressors¶€ð Ø×,Ñ,¨QÑ/ˆJðÐøôò ð Ü×)Ñ)×9Ñ9¸!Ó<�Ø#×4Ñ4°T×5IÑ5IÓJ� Ø)3�×#Ñ# AÒ&ð Ðøô ò Ü×'Ñ'ÜÐ4Ó5¼×8HÑ8HÈÓ8KÑKóðð úð  ús‚“ B+�A A)Á)>B'Â'B+cór—tj|j}|j|j«Sro)r4rLr³rNr´)rÄrSs rHÚ _compressorzrevlog._compressors/€ä×!Ñ! $×"2Ñ"2Ñ3ˆØ×&Ñ& t×';Ñ';Ó<Й>°ˆ{Ó5Ð5rKc#ó°K—|jr|jd–—y|j|j«5}|–—ddd«y#1swYyxYw­w)z%file object suitable to read sidedatar‘N)r¿rŸrš)rÄrís rHÚ_sidedatareadfpzrevlog._sidedatareadfpNsFèø€ð × Ò Ø×&Ñ& qÑ)Ó )à—‘˜T×/Ñ/Ô0°BØ’÷1×0Ñ0üs‚:A¼A Á AÁ AÁAcó2—t|j«dz S©Nr©r¢rtrEs rHÚtiprevz revlog.tiprevWs€Ü�4—:‘:‹ Ñ"Ð"rKcó@—|j|j««Sro)rVrsrEs rHÚtipz revlog.tipZs€Ø�y‰y˜Ÿ™›Ó'Ð'rKcó4—d|cxkxrt|«kScSrH)r¢©rÄrs rHÚ __contains__zrevlog.__contains__]s€Ø�CÖ#œ#˜d›)Ñ#Ð#Ñ#Ð#rKcó,—t|j«SrorrrEs rHÚ__len__zrevlog.__len__`s€Ü�4—:‘:‹ÐrKcó<—ttt|«««Sro)Úiterrÿr¢rEs rHÚ__iter__zrevlog.__iter__cs€Ü”Eœ#˜d›)Ó$Ó%Ð%rKcóD—tjt|«||¬«S)z8iterate over all rev in this revlog (from start to stop)©ÚstartÚstop)r>Úiterrevsr¢)rÄr€r�s rHÚrevsz revlog.revsfs€ä×#Ñ#¤C¨£I°UÀÔFÐFrKcóF— |j|«y#t$rYywxYw)NTF)rrK©rÄrVs rHÚhasnodezrevlog.hasnodejs'€ð Ø �H‰H�TŒNØøÜò Ùð ús ‚” Ÿ cóf—|j|«tzs|j|«tzryy)z;whether two revisions (baserev, rev) can be delta-ed or notFT)rer*)rÄÚbaserevrs rHÚcandeltazrevlog.candeltaqs-€ð �J‰J�wÓ Ô"?Ò ?Ø �J‰J�s‹OÔ;Ò ;àØrKcóz—|j�/|€tj|«ytj||«yyro)r›r Úupdate_persistent_nodemapÚsetup_persistent_nodemap©rÄÚ transactions rHÚ update_cacheszrevlog.update_caches~s7€Ø × Ñ Ð )ØÐ"Ü×5Ñ5°dÕ;ä×4Ñ4°[À$ÕGð *rKcóø—d|_|jj«|jj «|j j «i|_d|_|jj«|j xr0|jduxr tj|jd«}|r‘> $Ó'Ð 'øÜò Ø Ü× Ñ ò Jð˜×*Ñ*×1Ñ1Ò1ؘ4×-Ñ-×=Ñ=Ñ=ä×+Ñ+Ð+Ü×#Ñ# D¨$¯/©/¼1¸Z»=ÓIÐ Ið Jús ‚�BB%có>—t|j|ddz «S)Nrr)Úintrtrws rHr€z revlog.start¬s€Ü�4—:‘:˜c‘? 1Ñ%¨Ñ+Ó,Ð,rKcóš—|j|d}|dk7r|Sd|kr-|j|}|ddk7r |d|dzS|dz}d|krŒ-y)Néré r©rt)rÄrÚ sd_cut_offÚes rHÚsidedata_cut_offzrevlog.sidedata_cut_off¯sk€Ø—Z‘Z ‘_ QÑ'ˆ Ø ˜Š?ØÐ ð�3ŠhØ— ‘ ˜3‘ˆAØ�‰t�qŠyؘ‘t˜a ™d‘{Ð"Ø �1‰HˆCð �3‹hð rKcó,—|j|ddzS)Nrr‡r rws rHrez revlog.flagsÀs€Ø�z‰z˜#‰˜qÑ! FÑ*Ð*rKcó&—|j|dSrqr rws rHÚlengthz revlog.lengthÃó€Ø�z‰z˜#‰˜qÑ!Ð!rKcó@—|jsy|j|dS)NrrŸ)r¸rtrws rHÚsidedata_lengthzrevlog.sidedata_lengthÆs!€Ø×ÒØØ�z‰z˜#‰˜qÑ!Ð!rKcól—|j|d}|dk\r|S|j|«}t|«S)z?return the length of the uncompressed text for a given revisionr‘r)rtÚrawdatar¢)rÄrÚlrQs rHÚrawsizezrevlog.rawsizeËs7€à �J‰J�s‰O˜AÑ ˆØ �Š6؈Hà �L‰L˜Ó ˆÜ�1‹vˆ rKcó´—|j|«}|tjtz zdk(r|j |«St |j |««S)z=length of non-raw text (processed by a "read" flag processor)r)rer8ÚREVIDX_KNOWN_FLAGSr%r­r¢rS)rÄrres rHrìz revlog.sizeÔsL€ð— ‘ ˜3“ˆØ ”H×/Ñ/´/ÑAÑ BÀaÒ GØ—<‘< Ó$Ð $ä�4—=‘= Ó%Ó&Ð&rKcó€—|j|t}|jtk7s |tk(ry|t k(ry|S)aØReturn the rank of a revision if already known, or None otherwise. The rank of a revision is the size of the sub-graph it defines as a head. Equivalently, the rank of a revision `r` is the size of the set `ancestors(r)`, `r` included. This method returns the rank retrieved from the revlog in constant time. It makes no attempt at computing unknown values for versions of the revlog which do not persist the rank. Nr)rtrr�r rr)rÄrÚranks rHÚ fast_rankzrevlog.fast_rankÞs=€ð�z‰z˜#‰œzÑ*ˆØ × Ñ ¤;Ò .°$¼,Ò2FØØ ”'Š>ØØˆ rKcó¸—|jj|«}|�|S|j}|}||d}||k7r|}||d}||k7rŒ||j|<|S)Né)r©rÑrt)rÄrÚbasertÚiterrevs rHÚ chainbasezrevlog.chainbaseðsy€Ø×#Ñ#×'Ñ'¨Ó,ˆØ Р؈Kà— ‘ ˆØˆØ�W‰~˜aÑ ˆØ�gŠo؈Gؘ‘> !Ñ$ˆDð�g‹oð%)ˆ×јSÑ!؈ rKcó&—|j|dS)Nrñr rws rHrzrevlog.linkrevÿr§rKcóÈ— |j|}|j r|dt k(r |d|dfS|d|dfS#t$r|tk(rtj‚‚wxYw)Néé)rtr3r r.r™rÃr)rÄrÚentrys rHÚ parentrevszrevlog.parentrevssw€ð Ø—J‘J˜s‘OˆEð × &Ò &¨5°©8´wÒ+>ؘ‘8˜U 1™XÐ%Ð %à˜‘8˜U 1™XÐ%Ð %øôò Ø”gŠ~Ü×+Ñ+Ð+Ø ð ús ‚=½$A!cóv— |j|dS#t$r|tk(rtj‚‚wxYw)Nr)rtr3r r.r™rws rHrVz revlog.nodes?€ð Ø—:‘:˜c‘? 1Ñ%Ð %øÜò Ø”gŠ~Ü×+Ñ+Ð+Ø ð ús‚”$8cóH—|j|«|j|«zSro)r€r¦rws rHr z revlog.ends€Ø�z‰z˜#‹ §¡¨SÓ!1Ñ1Ð1rKcóÖ—|j}||j|«}|jr(|d|jk(r||dd||ddfS||dd||ddfS)Nrºr»r)rtrrÃr*)rÄrVÚir@s rHÚparentszrevlog.parentss{€Ø �J‰JˆØ ˆd�h‰h�t‹nÑ ˆà × &Ò &¨1¨Q©4°4·;±;Ò+>Ø�Q�q‘T‘7˜1‘:˜q  1¡™w q™zÐ)Ð )à�Q�q‘T‘7˜1‘:˜q  1¡™w q™zÐ)Ð )rKcó*—|j|«dSrH)Ú _chaininforws rHÚchainlenzrevlog.chainlen(s€Ø�‰˜sÓ# AÑ&Ð&rKcó,—|j}||vr||S|j}|j}|}||}d}d}||dk7rB|dz }||dz }|r|d}n|dz}||vr||} || dz }|| dz }n||}||dk7rŒB||dz }||f} | ||<| S)Nrr´r)r6rtr!) rÄrÚchaininfocachertÚ generaldeltar¶r¢ÚclenÚcompresseddeltalenrQÚrs rHrÄzrevlog._chaininfo+s÷€Ø×-Ñ-ˆØ �.Ñ Ø! #Ñ&Ð &Ø— ‘ ˆØ×)Ñ)ˆ ØˆØ �'‰NˆØˆØÐؘ˜1™ŠoØ �A‰IˆDØ  ! A¡$Ñ &Ð ÙØ˜A™$‘à˜1‘ �ؘ.Ñ(Ø" 7Ñ+�ؘ˜!™‘ �Ø" a¨¡dÑ*Ð"ØØ�g‘ˆAð˜˜1™‹oð  ! A¡$Ñ &Ð Ø Ð%Ð &ˆØˆ�sÑØˆrKcóŒ— |jj|||j«S#t$rYnwxYwg}|j}|j}|}||}||dk7r6||k7r1|j |«|r|d}n|dz}||}||dk7r||k7rŒ1||k(rd}n|j |«d}|j «||fS)aWObtain the delta chain for a revision. ``stoprev`` specifies a revision to stop at. If not specified, we stop at the base of the chain. Returns a 2-tuple of (chain, stopped) where ``chain`` is a list of revs in ascending order and ``stopped`` is a bool indicating whether ``stoprev`` was hit. r´rTF)rtÚ deltachainr!ÚAttributeErrorÚappendÚreverse) rÄrÚstoprevÚchainrtrÈr¶r¢Ústoppeds rHÚ _deltachainzrevlog._deltachainJsæ€ð Ø—:‘:×(Ñ(¨¨g°t×7IÑ7IÓJÐ JøÜò Ù ð úðˆð— ‘ ˆØ×)Ñ)ˆ àˆØ �'‰NˆØ˜˜1™Šo '¨WÒ"4Ø �L‰L˜Ô !ÙØ˜A™$‘à˜1‘ �Ø�g‘ˆA𠘘1™Šo '¨WÓ"4ð �gÒ Ø‰Gà �L‰L˜Ô !؈Gà � ‰ ŒØ�gˆ~Ðs ‚&)© 5´5có—t|«}|j}|D] }||«Œ t�3|jjrtj }|j}nt j}|j}|||||¬«S)zºGenerate the ancestors of 'revs' in reverse revision order. Does not generate revs lower than stoprev. See the documentation for ancestor.lazyancestors for more details.)rÑÚ inclusive) ÚlistrVÚ rustancestorrtÚrust_ext_compatÚ LazyAncestorsr,Ú lazyancestorsÚ_uncheckedparentrevs)rÄrƒrÑrÖÚcheckrevrËrÛÚargs rHÚ ancestorszrevlog.ancestorsssv€ô�D‹zˆØ—9‘9ˆÛˆAÙ �Q�Kðô Ð #¨¯ © ×(BÒ(BÜ(×6Ñ6ˆMØ—*‘*‰Cä$×2Ñ2ˆMØ×+Ñ+ˆCÙ˜S $°À9ÔMÐMrKcóX—tj||j|j«Sro)r-Údescendantrevsrƒr½©rÄrƒs rHÚ descendantszrevlog.descendantsˆs€Ü×#Ñ# D¨$¯)©)°T·_±_ÓEÐErKcóà‡ —|€ |jg}|€|j«}|D�cgc]}|j|«‘Œ}}|D�cgc]}|j|«‘Œ}}Gd„d«}||j|««Š ‰ j t «‰ j |«t«}tjˆ fd„|D««}|rU|j«}||vrŒ|j |«|j|«D]}|‰ vsŒ|j|«Œ|rŒUt|«}|j«‰ |D� cgc]} |j| «‘Œc} fScc}wcc}wcc} w)aØReturn a tuple of the ancestors of common and the ancestors of heads that are not ancestors of common. In revset terminology, we return the tuple: ::common, (::heads) - (::common) The list is sorted by revision number, meaning it is topologically sorted. 'heads' and 'common' are both lists of node IDs. If heads is not supplied, uses all of the revlog's heads. If common is not supplied, uses nullid.có*—eZdZd„Zd„Zd„Zd„Zd„Zy)ú)revlog.findcommonmissing..lazysetcó0—t«|_||_yro)ÚsetÚ addedvaluesÚ lazyvalues)rÄrês rHrÌz2revlog.findcommonmissing..lazyset.__init__¢s€Ü#&£5�Ô Ø",�•rKcó>—||jvxs||jvSro©rérê©rÄÚvalues rHrxz6revlog.findcommonmissing..lazyset.__contains__¦s!€Ø × 0Ñ 0Ð0ÒL°E¸T¿_¹_Ð4LÐLrKc3ónK—|j}|D]}|–—Œ|jD] }||vsŒ|–—Œ y­wrorì)rÄÚaddedrËs rHr}z2revlog.findcommonmissing..lazyset.__iter__©s:èø€Ø×(Ñ(�Û�AØ“GðàŸœ�AØ š:Ø›ñ)ùs‚+5®5có:—|jj|«yro)rérRrís rHrRz-revlog.findcommonmissing..lazyset.add±s€Ø× Ñ ×$Ñ$ UÕ+rKcó:—|jj|«yro)réÚupdate)rÄÚvaluess rHróz0revlog.findcommonmissing..lazyset.update´s€Ø× Ñ ×'Ñ'¨Õ/rKN)r^r_r`rÌrxr}rRrórDrKrHÚlazysetræ¡s„ò -ò Mò ò ,ó 0rKrõc3ó,•K—|] }|‰vsŒ|–—Œ y­wrorD)Ú.0rËÚhass €rHÚ z+revlog.findcommonmissing..½søèø€Ð!C©U¨°a¸s²l¤!©Uùsƒ �)r*ÚheadsrrßrRrrórèÚ collectionsÚdequeÚpopleftr½rÏr×ÚsortrV) rÄÚcommonrúrrõÚmissingÚvisitrËÚpÚmissrøs @rHÚfindcommonmissingzrevlog.findcommonmissing‹sEø€ð ˆ>Ø—k‘k�]ˆFØ ˆ=Ø—J‘J“LˆEá'-Ó.¡v !�$—(‘(˜1•+ vˆÐ.Ù&+Ó,¡e �—‘˜!• eˆÐ,÷ 0ñ 0ñ,�d—n‘n VÓ,Ó-ˆØ �‰”ÔØ � ‰ �6Ôô“%ˆÜ×!Ñ!Ó!C©UÓ!CÓCˆÙØ— ‘ “ˆAØ�G‰|Øà— ‘ ˜A”ØŸ™¨Ö+�AØ ’|ØŸ ™  Q�ð,ò ô�w“-ˆØ� ‰ ŒØ±Ó9±¨�T—Y‘Y˜t•_°Ñ9Ð9Ð9ùòY/ùÚ,ùòV:s§E!ÁE&ÅE+cóÌ—|€tg}t�6|jjr tj |j|«St j |j|«S)aOReturn an object that can be used to incrementally compute the revision numbers of the ancestors of arbitrary sets that are not ancestors of common. This is an ancestor.incrementalmissingancestors object. 'common' is a list of revision numbers. If common is not supplied, uses nullrev. )rrØrtrÙÚMissingAncestorsr,Úincrementalmissingancestorsr½)rÄrÿs rHÚincrementalmissingrevszrevlog.incrementalmissingrevsËsP€ð ˆ>Ü�YˆFä Ð #¨¯ © ×(BÒ(BÜ×0Ñ0°·±¸VÓDÐ DÜ×3Ñ3°D·O±OÀVÓLÐLrKcó~—|€tg}|€|j«}|j|¬«}|j|«S)axReturn the revision numbers of the ancestors of heads that are not ancestors of common. More specifically, return a list of revision numbers corresponding to nodes N such that every N satisfies the following constraints: 1. N is an ancestor of some node in 'heads' 2. N is not an ancestor of any node in 'common' The list is sorted by revision number, meaning it is topologically sorted. 'heads' and 'common' are both lists of revision numbers. If heads is not supplied, uses all of the revlog's heads. If common is not supplied, uses nullid.©rÿ)rÚheadrevsrÚmissingancestors)rÄrÿrúÚincs rHÚfindmissingrevszrevlog.findmissingrevsÛsD€ð ˆ>Ü�YˆFØ ˆ=Ø—M‘M“OˆEà×)Ñ)°Ð)Ó8ˆØ×#Ñ# EÓ*Ð*rKcóZ—|€ |jg}|€|j«}|D�cgc]}|j|«‘Œ}}|D�cgc]}|j|«‘Œ}}|j|¬«}|j |«D�cgc]}|j |«‘Œc}Scc}wcc}wcc}w)a.Return the ancestors of heads that are not ancestors of common. More specifically, return a list of nodes N such that every N satisfies the following constraints: 1. N is an ancestor of some node in 'heads' 2. N is not an ancestor of any node in 'common' The list is sorted by revision number, meaning it is topologically sorted. 'heads' and 'common' are both lists of node IDs. If heads is not supplied, uses all of the revlog's heads. If common is not supplied, uses nullid.r )r*rúrrr rV)rÄrÿrúrr rËs rHÚ findmissingzrevlog.findmissingós§€ð ˆ>Ø—k‘k�]ˆFØ ˆ=Ø—J‘J“LˆEá'-Ó.¡v !�$—(‘(˜1•+ vˆÐ.Ù&+Ó,¡e �—‘˜!• eˆÐ,à×)Ñ)°Ð)Ó8ˆØ&)×&:Ñ&:¸5Ô&AÓBÑ&A �— ‘ ˜!• Ð&AÑBÐBùò /ùÚ,ùòCs¦BÁB#ÂB(cóv—gggf}|�8t|«}|s|St|D�cgc]}|j|«‘Œc}«}n|jg}t}|tk(rF|€D|D�cgc]}|j |«‘Œc}|jgt|j ««fS|€t|«dz }d}i}�ngt|«}|s|St«}tj|d«}t|«} t| D�cgc]}|j|«‘Œc}«}| r¢| j«}||jk(rŒ"|j|«}||k\ri||vrP|j|«| j|j|«D� cgc]} | |jk7sŒ| ‘Œc} «n||vr|j|«| rŒ¢|s|S|tkDrA|D� cgc] } | |vsŒ| ‘Œ }} |r)t|D� cgc]} |j| «‘Œc} «}n|St}|jg}t|«} | j!«}g} |j#t|d«|dz¬«D]÷}|j |«}d}|tk(rd}n|| vr@d}||vrut%|j|««} | d| vs| d| vrM|j'|«n;t%|j|««} | d| vs| d| vr| j|«d}|sŒ¤|�||vsŒ«| j)|«|� ||vrd||<ŒÈ|�ŒËd||<|j|«D]} |j| d«ŒŒù|j+«D��cgc] \}}|sŒ |‘Œ }}}t|«}| sJ‚|sJ‚|sJ‚| ||fScc}wcc}wcc}wcc} wcc} wcc} wcc}}w)a�Return a topological path from 'roots' to 'heads'. Return a tuple (nodes, outroots, outheads) where 'nodes' is a topologically sorted list of all nodes N that satisfy both of these constraints: 1. N is a descendant of some node in 'roots' 2. N is an ancestor of some node in 'heads' Every node is considered to be both a descendant and an ancestor of itself, so every reachable node in 'roots' and 'heads' will be included in 'nodes'. 'outroots' is the list of reachable nodes in 'roots', i.e., the subset of 'roots' that is returned in 'nodes'. Likewise, 'outheads' is the subset of 'heads' that is also in 'nodes'. 'roots' and 'heads' are both lists of node IDs. If 'roots' is unspecified, uses nullid as the only root. If 'heads' is unspecified, uses list of all of the revlog's heads.NrFrrT)r×rårr*rrVrúr¢rèr¼ÚfromkeysÚmaxÚpoprRrórÂÚcopyrƒÚtupleÚremoverÏrÖ)rÄÚrootsrúÚnonodesrÚ lowestrevrËÚ highestrevrßÚ nodestotagrÚrootrãÚ orderedoutÚ isdescendantÚheadrÞs rHÚ nodesbetweenzrevlog.nodesbetween sÞ€ð*�r˜2�,ˆØ Рܘ“KˆEÙØ�ܱ%Ó8±%¨Q˜TŸX™X a�[°%Ñ8Ó9‰Ià—[‘[�MˆE܈IØ œÒ  u }ñ(,Ó,¡t !�—‘˜1• tÑ,Ø—‘� Ü�T—Z‘Z“\Ó"ðð ð ˆ=ô˜T› Q™ˆJàˆIàŠE䘓KˆEÙØ�Ü›ˆIô—M‘M %¨Ó/ˆEä˜U›ˆJä±:Ó>±:¨a˜dŸh™h q�k°:Ñ>Ó?ˆJÙà—N‘NÓ$�à˜Ÿ ™ Ò#Øð—H‘H˜Q“K�ؘ ’>Ø  Ñ)ð"Ÿ ™  aÔ(à"×)Ñ)Ø(,¯ © °Q¬ÓL© 1¸1ÀÇ Á Ó;KšQ¨ÑLõð˜e™ðŸ ™  !œ ò+ñ,Ø�ð œ7Ò"ñ +0ÓE©% $°4¸9Ò3Dš¨%�ÐEáÜ #ÁÓ$FÁ¸ T§X¡X¨d¥^ÀÑ$FÓ G‘Ið#�Nô$� ØŸ™˜ �ä˜%“jˆ ð× Ñ Ó"ˆàˆ 𗑤 Y°Ó!2¸Àa¹�ÖHˆAØ— ‘ ˜!“ ˆAØ ˆLØœGÒ#Ø#‘ Ø�kÑ!à#� ð˜‘:ä˜dŸl™l¨1›oÓ.�Aà˜!™  Ñ+°°1±¸Ñ1DØŸ ™  Q�ä˜$Ÿ,™, q›/Ó*�ð�a‘D˜KÑ'¨Q¨q©T°[Ñ-@Ø—O‘O AÔ&Ø#'�LÚ )Ð"3¸¸iºà×!Ñ! !Ô$ØÐ)°°U± ð $�E˜!’HØÑ&ð $�E˜!‘Hà!Ÿ\™\¨!ž_˜ØŸ ™  ! TÕ*ñ-ðMIðP).¯ © ¬ Ô>© ™*˜$ º’¨ ˆÑ>Ü�U“ ˆÙЈzÙˆ ˆuÙˆ ˆuؘE 5Ð)Ð)ùòI9ùò-ùò0?ùò"Mùò"Fùò%Gùóv?s; NÁ"NÃ;N!ÆN&ÆN&Ç N+ÇN+Ç*N0Í) N5Í4N5có2—|€ |jj«St�6|jj r tj|j|«St j||j«S#t$r|j«cYSwxYwro)rtr rÎÚ _headrevsÚ rustdagoprÙr-rÜrâs rHr zrevlog.headrevs­s€Ø ˆ<ð (Ø—z‘z×*Ñ*Ó,Ð,ô Ð  T§Z¡Z×%?Ò%?Ü×%Ñ% d§j¡j°$Ó7Ð 7Ü�~‰~˜d D×$=Ñ$=Ó>Ð>øô "ò (Ø—~‘~Ó'Ò'ð (ús„A:Á:BÂBcó8—|jj|«Sro)rtÚcomputephasesmapsets)rÄrs rHÚ computephaseszrevlog.computephases·s€Ø�z‰z×.Ñ.¨uÓ5Ð5rKcóä—t|«}|stgSdg|dzz}|j}|D]}d||<||}dx||d<||d<Œt|«D��cgc] \}}|sŒ |‘Œ c}}Scc}}w)Nrrrºr»)r¢rrtÚ enumerate)rÄÚcountÚisheadrtrËr¢Úvals rHr#zrevlog._headrevsºsŒ€Ü�D“ ˆÙÜ�9Ð à�˜ ™ Ñ"ˆØ— ‘ ˆÛˆA؈F�1‰IØ�a‘ˆAØ*+Ð +ˆF�1�Q‘4‰L˜6 ! A¡$š<ðô!*¨&Ô 1Ô9Ñ 1‘f�a˜²S’Ð 1Ò9Ð9ùÓ9s Á A,Á$A,có—|€G|€Et|«s |jgS|j«D�cgc]}|j|«‘Œc}S|€t}n|j |«}|xsgD�chc]}|j |«’Œ}}t j|j|j||¬«}|D�cgc]}|j|«‘Œc}Scc}wcc}wcc}w)areturn the list of all nodes that have no children if start is specified, only heads that are descendants of start will be returned if stop is specified, it will consider all the revs from stop as if they had no children )ÚstartrevÚstoprevs) r¢r*r rVrrr-Úheadrevssubsetrƒr½)rÄr€r�rËrr/rƒrs rHrúz revlog.headsÇsË€ð ˆ=˜T˜\Ü�t”9ØŸ ™ �}Ð$Ø*.¯-©-¬/Ó:©/ Q�D—I‘I˜a•L¨/Ñ:Ð :à ˆ=܉Eà—H‘H˜U“OˆEà)-ª°¨Ó4© A�D—H‘H˜Q•K¨ˆÐ4ä×#Ñ#Ø �I‰I�t—‘°Àô ˆñ+/Ó/©$ 3�— ‘ ˜#•¨$Ñ/Ð/ùò;ùò5ùò 0s¯CÁ,CÂ7Ccón—g}|j|«}|j|dz¬«D]„}|j|«D�cgc]}|tk7sŒ |‘Œ}}|r.|D](}||k(sŒ |j |j |««Œ*Œ[|tk(sŒe|j |j |««Œ†|Scc}w)z!find the children of a given noder)r€)rrƒr½rrÏrV)rÄrVrZrrËÚprÚprevss rHÚchildrenzrevlog.childrenás¤€à ˆØ �H‰H�T‹NˆØ—‘  Q¡�Ö'ˆAØ"&§/¡/°!Ô"4ÓFÑ"4˜B¸¼g» ’RÐ"4ˆEÐFÙÛ�BؘQ“wØŸ™ §¡¨1£Õ.ñ ð”g“Ø—‘˜Ÿ™ 1›Õ&ð(ðˆùòGs ¿B2ÁB2cóª—|j|«|j|«}}|j||«}tj|j|«S)z@calculate all the heads of the common ancestors of nodes a and b)rÚ_commonancestorsheadsr1ÚmaplistrV©rÄÚaÚbÚancss rHÚcommonancestorsheadszrevlog.commonancestorsheadsïsD€à�x‰x˜‹{˜DŸH™H Q›Kˆ1ˆØ×)Ñ)¨!¨QÓ/ˆÜ×Ñ § ¡ ¨4Ó0Ð0rKcó¦— |jj|Ž}|S#ttf$r$t j|j g|¢­Ž}Y|SwxYw)z7calculate all the heads of the common ancestors of revs)rtr<rÎÚ OverflowErrorr,r½)rÄrƒr;s rHr6zrevlog._commonancestorsheadsõs[€ð IØ2�4—:‘:×2Ñ2°DÐ9ˆDðˆ øô¤ Ð.ò IÜ×0Ñ0°·±ÐHÀ4ÒH‰D؈ ð Iús‚�/AÁAcój—|j|«|j|«}}|j||«S)zgreturn True if node a is an ancestor of node b A revision is considered an ancestor of itself.)rÚ isancestorrev©rÄr9r:s rHÚ isancestorzrevlog.isancestorýs0€ð�x‰x˜‹{˜DŸH™H Q›Kˆ1ˆØ×!Ñ! ! QÓ'Ð'rKcón—|tk(ry||k(ry||kDryt|j||g|gd¬««S)zÌreturn True if revision a is an ancestor of revision b A revision is considered an ancestor of itself. The implementation of this is trivial but the use of reachableroots is not.TF)Ú includepath)rrÒÚreachablerootsrAs rHr@zrevlog.isancestorrevsE€ð ”Š<ØØ �!ŠVØØ �ŠUØÜ�D×'Ñ'¨¨A¨3°°ÀÐ'ÓGÓHÐHrKcó¤— |jj||||«S#t$r&tj|j ||||«cYSwxYw)zlreturn (heads(::( and ::))) If includepath is True, return (::).)rtÚreachableroots2rÎr-Ú_reachablerootspurer½)rÄÚminrootrúrrDs rHrEzrevlog.reachablerootssZ€ð Ø—:‘:×-Ñ-ؘ  {óð øôò Ü×,Ñ,Ø—‘ ¨%°¸ óò ð ús‚  ,AÁAcóF—|j|«|j|«}} |jj||«}|rtt|j|««S|jS#ttf$r$t j|j ||«}YŒ_wxYw)z5calculate the "best" common ancestor of nodes a and b) rrtrßrÎr>r,r½råÚmaprVr*r8s rHr,zrevlog.ancestor s‹€ð�x‰x˜‹{˜DŸH™H Q›Kˆ1ˆð =Ø—:‘:×'Ñ'¨¨1Ó-ˆDñ ä”s˜4Ÿ9™9 dÓ+Ó,Ð ,Ø�{‰{Ðøô ¤ Ð.ò =Ü×%Ñ% d§o¡o°q¸!Ó<ŠDð =ús¤A-Á-0B ÂB cóš—t|t«r|j|«St|«|jj k(r |}|j |«|S t|«}d|z|k7rt‚|dkrt|«|z}|dks|t|«k\rt‚|j|«S#tj$rYŒlwxYw#ttf$rYnwxYwt|«d|jj zk(rH t|«}|j |«|S#tjtjf$rYywxYwy)Ns%drr‘)Ú isinstancerœrVr¢r)Únodelenrr.ršr2r>rrOÚError)rÄÚidrVrs rHÚ_matchz revlog._match-s9€Ü �bœ#Ô à—9‘9˜R“=Ð Ü ˆr‹7�d×(Ñ(×0Ñ0Ò 0ð Ø�Ø—‘˜”Ø� ð ä�b“'ˆCØ�s‰{˜bÒ Ü Ð Ø�QŠwܘ$“i #‘o�Ø�QŠw˜#¤ T£Ò*Ü Ð Ø—9‘9˜S“>Ð !øô×$Ñ$ò Ùð ûôœMÐ*ò Ù ð úä ˆr‹7�a˜$×,Ñ,×4Ñ4Ñ4Ò 4ð ä˜2“w�Ø—‘˜”Ø� øÜ—N‘N¤E×$5Ñ$5Ð6ò Ùð úð 5s7ÁB1ÁAC Â1CÃCà CÃCÄD#Ä##E ÅE có—|jjj|«}d} |jj |«}|r|j |«r|rd}n|S|rt j‚y |r*t j||jtd««‚||jvr|j|St!|«dk�r\t!|«dzdz} t!|«dzdkDr |dt"vryt%|d|«}|jD�cgc]}|d j|«sŒ|d ‘Œ}}|D� cgc]1} t'| «j|«sŒ|j | «sŒ0| ‘Œ3}} |jj(j|«r|j+|j,«t!|«dkDrQt!|«d k(r|s|d|j|<|dSt j||jtd««‚|rt j‚yy#t j$rt|dd«sd}Y�ŒÚttf$rY�ŒëwxYwcc}wcc} w#t.j0$rYywxYw) NFTÚ filteredrevssambiguous identifieré(r‘rr”rr)r)ÚwdirhexÚ startswithrtÚ partialmatchr†r.r™rØr rÎr2ÚAmbiguousPrefixLookupErrorr r r²r¢Ú hexdigitsrrÚnullhexrÏr*rOrO) rÄrPÚ maybewdirÚ ambiguousÚpartialr¬Úprefixr¢Únlrs rHÚ _partialmatchzrevlog._partialmatchOsb€à×&Ñ&×.Ñ.×9Ñ9¸"Ó=ˆ ؈ ð Ø—j‘j×-Ñ-¨bÓ1ˆGÙ˜4Ÿ<™<¨Ô0Ùà $‘Ià"�NÙä×+Ñ+Ð+àðñ" Ü×2Ñ2Ø�D—O‘O¤QÐ'>Ó%?óð ð �—‘Ñ Ø—<‘< Ñ#Ð #ä ˆr‹7�b‹=ä�B“˜1‘ ˜qÑ ˆAð ô�r“7˜Q‘; ’?ؘr™F¤iÑ/Ø#ܘR  ˜V›�ð%)§J¢JÓJ¡J˜q°!°A±$·/±/À&Õ2I�a˜“d J�ÐJá!óÙ!˜!¤S¨£V×%6Ñ%6°rÕ%:¸t¿|¹|ÈA½’A˜rððð×%Ñ%×-Ñ-×8Ñ8¸Ô<Ø—I‘I˜dŸk™kÔ*Ü�r“7˜Q’;ܘ2“w !’|©IØ+-¨a©5˜Ÿ ™  RÑ(Ø! !™u˜ Ü×:Ñ:ؘDŸO™O¬QÐ/FÓ-GóðñÜ×/Ñ/Ð/Øð9 øô#× Ñ ò !ô˜4 °Ô6Ø � úä¤ Ð+ò â ð üò0Kùòøô —>‘>ò Ùð úsS©4H'ÁH'ÃI+Ã9I+ÄI!Ä/I!Ä<I&ÅI&Å.I&È'"IÉ IÉIÉ+JÊJcóª—|j|«}|�|S|j|«}|r|Stj||jt d««‚)z{locate a node based on: - revision number or str(revision number) - nodeid or subset of hex nodeid sno match found)rQr`r.ršr r )rÄrPrs rHÚlookupz revlog.lookup�sR€ð �K‰K˜‹OˆØ ˆ=؈HØ × Ñ ˜rÓ "ˆÙ ؈Hä×Ñ  D§O¡O´QÐ7HÓ5IÓJÐJrKcóx‡‡‡—ˆˆfd„}d„Št‰«}ˆfd„}t‰dd«s/ t‰jj ‰«|«}|||«S‰‰jjk(r.t|t|«dz«D]}|d|}||«sŒ|cSt|t|«dz«D]}|d|}||«sŒ|||«cSy#t j $rF‰‰jjk7r*t j‰‰jtd««‚YŒÕt$rYŒßwxYw)z7Find the shortest unambiguous prefix that matches node.cóÜ•— ‰j|«}|€*tj‰‰j t d««‚y#tj$rYytj$rYywxYw)NFTr•)r`r.rXr™ršr r )r^Ú matchednoderVrÄs €€rHÚisvalidz revlog.shortest..isvalid skø€ð Ø"×0Ñ0°Ó8� ð Ð"Ü×'Ñ'¨¨d¯o©o¼qÀ»}ÓMÐMØøô×3Ñ3ò ÙÜ×(Ñ(ò áð úsƒAÁA+ÁA+Á*A+cóL—td„tj|«D««S)Nc3ó&K—|] }|dk(–—Œ y­w)ófNrD)r÷rZs rHrùz5revlog.shortest..maybewdir..­sèø€ÐGÑ*F Q�q˜D•yÑ*Fùs‚)Úallr1Ú iterbytestr)r^s rHr[z"revlog.shortest..maybewdir¬s€ÜÑG¬(×*>Ñ*>¸vÔ*FÓGÓGÐ GrKcób•—t|t|«dz«D]}|d|}‰|«rŒ|cSy)zDisambiguate against wdirid.rN)rÿr¢)ÚhexnodeÚ minlengthr¦r^r[s €rHÚ disambiguatez%revlog.shortest..disambiguate±s6ø€ä  ¬3¨w«<¸!Ñ+;Ö<�Ø   &Ð)�Ù  Õ(Ø!’Mñ=rKrSNr•r)rr rrtÚshortestr.rØr)r—ršr r rÎrÿr¢) rÄrVrnrfrmror¦r^r[s `` @rHrpzrevlog.shortest�s<ú€õ ò Hô�d“)ˆô "ô�t˜^¨TÔ2ð ܘTŸZ™Z×0Ñ0°Ó6¸ ÓB�Ù# G¨VÓ4Ð4ð �4×%Ñ%×,Ñ,Ò ,Ü  ¬3¨w«<¸!Ñ+;Ö<�Ø   &Ð)�Ù˜6•?Ø!’Mð=ô ˜I¤s¨7£|°aÑ'7Ö8ˆFؘW˜fÐ%ˆFÙ�v�Ù# G¨VÓ4Ò4ñ9øô×$Ñ$ò ؘ4×-Ñ-×4Ñ4Ò4Ü×+Ñ+ؘdŸo™o¬q°«}óðñ5ô"ò áð ús«-CÃAD9Ä.D9Ä8D9có^—|j|«\}}tj|||«|k7S)zpcompare text with a given file revision returns True if text is different than what is stored. )rÂr>Úhashrevisionsha1)rÄrVrGÚp1Úp2s rHÚcmpz revlog.cmpÐs0€ð —‘˜dÓ#‰ˆˆBÜ×+Ñ+¨D°"°bÓ9¸TÑAÐArKcóv—|j}||}t|ddz «}||k(r ||dz}n||}t|ddz «|dz}|jr>||dz|jjzz }||dz|jjzz }||z } ||jj || |«fS)a«Obtain a segment of raw data corresponding to a range of revisions. Accepts the start and end revisions and an optional already-open file handle to be used for reading. If the file handle is read, its seek position will not be preserved. Requests for data may be satisfied by a cache. Returns a 2-tuple of (offset, data) for the requested range of revisions. Offset is the integer offset from the beginning of the revlog and data is a str or buffer of the raw byte data. Callers will need to call ``self.start(rev)`` and ``self.length(rev)`` to determine where each revision's data begins and ends. rrr)rtrœrr r4Ú read_chunk) rÄr.ÚendrevrýrtÚistartr€r Úiendr¦s rHrzrevlog._getsegmentforrevsØsÌ€ð$— ‘ ˆØ�x‘ˆÜ�F˜1‘I ‘OÓ$ˆØ �vÒ Ø˜& ™)Ñ#‰Cà˜‘=ˆDÜ�d˜1‘g ‘mÓ$ t¨A¡wÑ.ˆCà �<Š<Ø �h ‘l d§j¡j×&;Ñ&;Ñ;Ñ ;ˆEØ �F˜Q‘J $§*¡*×"7Ñ"7Ñ7Ñ 7ˆCØ�u‘ˆà�d×'Ñ'×2Ñ2°5¸&À"ÓEÐEÐErKcó —|j|d}|j|||¬«d}|tk(r|S|tk(r|j |«S|t k(r|j |«Sd}||z}tj|«‚)a<Obtain a single decompressed chunk for a revision. Accepts an integer revision and an optional already-open file handle to be used for reading. If used, the seek position of the file will not be preserved. Returns a str holding uncompressed data for the requested revision. é rüróunknown compression mode %d) rtrrrr[rrYr.rØ)rÄrrýÚcompression_moderrr;s rHÚ_chunkz revlog._chunkús“€ð Ÿ:™: c™?¨2Ñ.ÐØ×&Ñ& s¨C°BÐ&Ó7¸Ñ:ˆØ œÒ .؈KØ Ô!2Ò 2Ø×%Ñ% dÓ+Ð +Ø Ô!1Ò 1Ø—?‘? 4Ó(Ð (à0ˆCØ Ð#Ñ #ˆCÜ×#Ñ# CÓ(Ð (rKc ój—|sgS|j}|j}|j}|jj}t j }g} | j} |js|f} ntj|||¬«} | D]ñ} | d} | ddd…D]}||«dk7sŒn |j| |¬«\}}|j}|j}| D]›}||«}|r ||dz|zz }||«}|j|d}||||z |«}|t k(r | |«ŒQ|t"k(r| ||««Œi|t$k(r| ||««Œ�d}||z}t'j(|«‚Œó| S#t$r,| D�cgc]}|j||¬«‘Œncc}wc}cYcSwxYw) aïObtain decompressed chunks for the specified revisions. Accepts an iterable of numeric revisions that are assumed to be in ascending order. Also accepts an optional already-open file handle to be used for reading. If used, the seek position of the file will not be preserved. This function is similar to calling ``self._chunk()`` multiple times, but is faster. Returns a list with decompressed data for each requested revision. )Ú targetsizerNr”rürr|r})r€r¦rrtr r4rærÏr¶Ú deltautilÚ slicechunkrr>rrYr[rrrr.rØ)rÄrƒrýr�r€r¦rsÚiosizerær¬ÚladdÚ slicedchunksÚ revschunkÚfirstrevÚlastrevÚoffsetrrrÚdecompÚ def_decompÚ chunkstartÚ chunklengthÚ comp_moderZr;s rHÚ_chunkszrevlog._chunkssЀñ؈IØ— ‘ ˆØ—‘ˆØ—‘ˆØ—‘×&Ñ&ˆÜ—‘ˆà ˆØ�x‰xˆà×#Ò#Ø ˜7‰Lä$×/Ñ/Ø�d zôˆLó&ˆIØ  ‘|ˆHà$¡T r Tœ?�Ù˜'“? aÓ'Ùð+ð FØ#×6Ñ6°xÀÈRÐ6ÓP‘ �˜ð —_‘_ˆFà×+Ñ+ˆJÛ �Ù" 3›Z� ÙØ 3¨¡7¨fÑ"4Ñ4�JÙ$ S›k� Ø ŸJ™J s™O¨BÑ/� Ù˜4 ¨fÑ!4°kÓB�ؤÒ/Ù˜•GØÔ"2Ò2Ù™ ›•OØÔ"3Ò3Ù™ A›Õ'à8�Cؘ9Ñ$�CÜ×+Ñ+¨CÓ0Ð0ñ!!ð#&ðFˆøô5!ò FñØØ— ‘ ˜3‘ˆØ�Q‰xˆØ �3Š;ØØ ”7Š?ØØ �1‰XˆØ�k‰k˜"‹o Ò"Ø× Ñ  Ó$ˆAØ�BŠwØØˆBð �k‰k˜"‹o Ó"ð �1‰XˆØ�k‰k˜"‹o Ò"Ø× Ñ  Ó$ˆAØ�BŠwØØˆBð �k‰k˜"‹o Ó"ð �2Š:˜ šØØ�‰˜tÓ$Ð$rKcóŽ—|j|«stjd«‚t|j |«d«dz S)z/number of snapshot in the chain before this onesrevision %d not a snapshotrr)r”r.ÚProgrammingErrorr¢rÔrws rHÚ snapshotdepthzrevlog.snapshotdepth~s@€à�‰˜sÔ#Ü×(Ñ(Ð)FÓGÐ GÜ�4×#Ñ# CÓ(¨Ñ+Ó,¨qÑ0Ð0rKcóØ—|tk7r.|j|«|k(rt|j|««St j |j |«|j |««S)zÓreturn or calculate a delta between two revisions The delta calculated is in binary form and is intended to be written to revlog data directly. So this function needs raw revision data. )rr’Úbytesrr/Útextdiffr«)rÄÚrev1Úrev2s rHÚrevdiffzrevlog.revdiff„sT€ð ”7Š?˜t×/Ñ/°Ó5¸Ò=ܘŸ™ TÓ*Ó+Ð +ä�~‰~˜dŸl™l¨4Ó0°$·,±,¸tÓ2DÓEÐErKcó&—|j||«S)z™return an uncompressed revision of a given node or revision number. _df - an existing file handle to read from. (internal-only) ©Ú _revisiondata©rÄÚ nodeorrevÚ_dfs rHrSzrevlog.revision�s€ð ×!Ñ! )¨SÓ1Ð1rKcól—t|t«r|}n|j|«}|j|«S)züa map of extra data related to the changeset but not part of the hash This function currently return a dictionary. However, more advanced mapping object will likely be used in the future for a more efficient/lazy code. )rMrœrÚ _sidedata)rÄr¢r£rs rHr=zrevlog.sidedata—s0€ô �i¤Ô %؉Cà—(‘(˜9Ó%ˆCØ�~‰~˜cÓ"Ð"rKcóÈ—t|t«r|}|j|«}n|}d}||jk(ry|j |||¬«\}}}|r|r|S|€|j |«}|j |«}|r |tk(r|S|rtj|||«} |} ntj|||«} | \} } | r|j| ||¬«|s |||f|_ | S)NrK)r£)r) rMrœrVr*Ú_rawtextrrer$r8ÚprocessflagsrawÚprocessflagsreadÚ checkhashr§) rÄr¢r£ÚrawrrVÚrawtextÚ validatedreÚ validatehashrGrËs rHr zrevlog._revisiondata¥sù€ä �i¤Ô %؈CØ—9‘9˜S“>‰DàˆD؈Cð �4—;‘;Ò Øð#'§-¡-°°c¸s -Ó"CшˆW�iá ‘9ðˆNØ ˆ;Ø—(‘(˜4“.ˆCð— ‘ ˜3“ˆá ˜Ô"6Ò6àˆNá Ü#×3Ñ3°D¸'À5ÓIˆL؉Dä×)Ñ)¨$°¸Ó?ˆAØ!"Ñ ˆD�,Ù Ø �N‰N˜4 ¨3ˆNÔ /ÙØ#'¨¨gÐ"6ˆDÔ àˆ rKcóЗd}d}|jr3|jd|k(r||jddfS|jd}|€|j|«}|j||¬«\}}|r|jd}d|_d}|j|d} d| krd| z}|j |||¬«} |€t | d«}| dd} t j|| «} ~|| d fS) zjreturn the possibly unvalidated rawtext for a revision returns (rev, rawtext, validated) Nrr‘Tr)rÑrñ)rýr�F)r§rrÔrtr�r™r/Úpatches) rÄrVrr£Ú cachedrevÚbasetextrÒrÓr�r­Úbinsr¬s rHr§zrevlog._rawtextÑs€ðˆ àˆð × Ò Ø×"Ñ" 1Ñ%¨Ò-ؘT×0Ñ0°Ñ3°TÐ:Ð:Ø×+Ñ+¨AÑ.ˆIà ˆ;Ø—(‘(˜4“.ˆCà×)Ñ)¨#°yÐ)ÓA‰ˆˆwÙ Ø×*Ñ*¨1Ñ-ˆHð#ˆÔàˆ Ø—*‘*˜S‘/ !Ñ$ˆØ �Š<ؘW™ˆJà�|‰|˜E c°jˆ|ÓAˆØ РܘT !™W“~ˆHؘ˜�8ˆDä—-‘- ¨$Ó/ˆØ Ø�W˜eÐ$Ð$rKcó¦—|j|}|d}|d}|jr||jjd|zzz }|dk(riS|jj||zkrH|j }|jj}|}|}t ||||fz} tj| «‚|jj||«} |j|d} | tk(r| } nR| tk(r|j| «} n7| tk(r|j| «} nd} | | z} tj| «‚t!j"| «}|S)z0Return the sidedata for a given revision number.ržrŸrré r})rtrr r°Ú sidedata_endršÚFILE_TOO_SHORT_MSGr.rØr5rwrrr[rrYÚ sidedatautilÚdeserialize_sidedata)rÄrÚ index_entryÚsidedata_offsetÚ sidedata_sizeÚfilenamer rŠr¦ÚmÚ comp_segmentÚcompÚsegmentr;r=s rHr¥zrevlog._sidedataüsQ€à—j‘j ‘oˆ Ø% a™.ˆØ# A™ˆ à �<Š<Ø ˜tŸz™z×4Ñ4¸¸C¹Ñ@Ñ @ˆOØ ˜AÒ ØˆIà �<‰<× $Ñ $ ¸Ñ'FÒ FØ×)Ñ)ˆHØ—,‘,×+Ñ+ˆCØ$ˆFØ"ˆFÜ" h°¸ÀÐ%DÑDˆAÜ×#Ñ# AÓ&Ð &à×1Ñ1×<Ñ<Ø ˜]ó ˆ ð�z‰z˜#‰˜rÑ"ˆØ ”?Ò "Ø"‰GØ Ô&Ò &Ø×(Ñ(¨Ó6‰GØ Ô%Ò %Ø—o‘o lÓ3‰Gà0ˆCØ �4‰KˆCÜ×#Ñ# CÓ(Ð (ä×4Ñ4°WÓ=ˆØˆrKcó*—|j||d¬«S)z‘return an uncompressed raw data of a given node or revision number. _df - an existing file handle to read from. (internal-only) T)r«rŸr¡s rHr«zrevlog.rawdata"s€ð ×!Ñ! )¨S°dÐ!Ó;Ð;rKcó0—tj|||«S)zyCompute a node hash. Available as a function so that subclasses can replace the hash as needed. )r>rr)rÄrGrsrts rHÚhashz revlog.hash)s€ô ×+Ñ+¨D°"°bÓ9Ð9rKcó$— |€|€|j|«\}}||j|||«k7r‡|jr|jd|k(rd|_|}|€tjt |««}t jtd«|jtj|«fz«‚y#t j$rD|jr6tj|«r!t j|j||«‚‚wxYw)z�Check node hash integrity. Available as a function so that subclasses can extend hash mismatch behaviors as needed. Nrsintegrity check failed on %s:%s)rÂrÄr§r3rrr.rØr r r1Úbytestrr¦r>ÚiscensoredtextÚCensoredNodeError)rÄrGrVrsrtrÚ revornodes rHrªzrevlog.checkhash1s€ð  ؈z˜b˜jØŸ™ dÓ+‘��BØ�t—y‘y  r¨2Ó.Ò.ð×&Ò&¨4×+>Ñ+>¸qÑ+AÀTÒ+IØ*.�DÔ'à� ØÐ$Ü /× 5Ñ 5´c¸$³iÓ @�IÜ×'Ñ'ÜÐ8Ó9Ø—‘¬×(8Ñ(8¸Ó(CÐDñEóðð/øô"× Ñ ò Ø×Ò¤K×$>Ñ$>¸tÔ$DÜ×-Ñ-¨d¯o©o¸tÀTÓJÐJØ ð ús ‚B5B8Â8ADcóä—tjj|j«}t |«dkDr+|ddz}tjj |g|dd¢­ŽS|jdzS)zÇthe path where to expect the index of an ongoing splitting operation The file will only exist if a splitting operation is in progress, but it is always expected at the same location.rrs-sNs.i.s)rdÚpathÚsplitr–r¢Újoin)rÄÚpartsr s rHrzrevlog._split_index_filePsb€ô —‘— ‘ ˜dŸj™jÓ)ˆÜ ˆu‹:˜Š>à˜‘8˜eÑ#ˆDÜ—7‘7—<‘< Ð1 u¨Q¨R yÒ1Ð 1ð—:‘: Ñ'Ð 'rKc óú‡‡‡‡—t|«dz }|j|«|j|«z}|jr |tkry|j |j «}|€+tjtd«|j z«‚|r|j|j d¬«|j|jd«d}|j�Id}|jd}|j«|j«d|_ d|j _|r­|j Š|j$Š|j&Št)j*|«Šˆˆˆˆfd„}ˆˆfd „} |j-‰«|j.d�d |j.z} nd |j.dz} |j1| |«|j3| | «|j5d «} | j7d« |j9«5} |D](} | j;|j=| | | ¬ «d«Œ*| j«ddd«|r‰|_|j?«5}|xj@tBzc_ d|_|D]x}|jDjG|«}|dk(rE|jH€9|j@|jJz}|jDjM|«}||z}|j;|«Œz|jH�|jO«|jH_(ddd«tSjT||«tWjV|j&|j|jX«|_|r-|j[«}|| df|_ | |j _d} | �| j«yy#1swY�ŒˆxYw#1swYŒ©xYw#| �| j«wwxYw)aCheck if the revlog is too big for inline and convert if so. This should be called after revisions are added to the revlog. If the revlog has grown too large to be an inline revlog, it will convert it to use multiple index and data files. rNs%s not found in the transactionT)Ú for_offsetrFcóP•—‰j‰‰d¬«‰«}|�‰|_yy)NT)rÅ)Úrenamer˜)ÚtrÚ maybe_selfÚnew_index_file_pathÚold_index_file_pathrŸÚ weak_selfs €€€€rHÚfinalize_callbackz4revlog._enforceinlinesize..finalize_callback‰s9ø€Ø— ‘ Ø'Ø'Ø#ðôñ '›[� ØÐ)Ø,?�JÕ)ð*rKcó(•—‰«}|�‰|_yyro)r˜)rÓrÔrÖr×s €€rHÚabort_callbackz1revlog._enforceinlinesize..abort_callback“sø€Ù&›[� ØÐ)Ø,?�JÕ)ð*rKs000-revlog-split-%d-%ss000-revlog-split-%drbrü).r¢r€r¦rÚ _maxinlineÚ findoffsetr˜r.rØr Ú addbackuprRr™r¿ÚflushÚcloser4Úwriting_handlerrŸÚweakrefÚrefÚ registertmpr£Ú addfinalizeÚaddabortrþÚtruncateröÚwriterÚ_revlog__index_new_fprŒrrtrr°r�rÚtellr&r rŒr:r«Ú_revlog__index_write_fp)rÄrÓÚ side_writersÚ total_sizeÚtroffsetÚexisting_handlesrírØrÚÚ callback_idÚnew_dfhÚread_ifhrËrÁr¢r‹ÚifhrÕrÖrŸr×s @@@@rHÚ_enforceinlinesizezrevlog._enforceinlinesize`snû€ô�T“˜Q‘ˆØ—Z‘Z Ó'¨$¯+©+°fÓ*=Ñ=ˆ Ø�|Š|˜z¬JÒ6Ø à—=‘= §¡Ó1ˆØ Ð Ü×#Ñ#ÜÐ4Ó5¸¿¹ÑGóð ñ Ø �L‰L˜Ÿ™°TˆLÔ :Ø �‰ˆt�~‰~˜qÔ!à ÐØ × Ñ Ð +Ø#Ð Ø×%Ñ% aÑ(ˆBØ �H‰HŒJØ �H‰HŒJð$(ˆDÔ Ø/3ˆD× Ñ Ô ,ñ Ø"&§/¡/Ð Ø"&×"8Ñ"8Ð Ø—[‘[ˆFÜŸ ™  DÓ)ˆI÷ @õ @ð �N‰NÐ.Ô /Ø�{‰{˜1‰~Ð)Ø7¸$¿+¹+ÑE‘ à4°t·{±{À1±~ÑE� Ø �N‰N˜;Ð(9Ô :Ø �K‰K˜  ^Ô 4à—,‘,˜uÓ%ˆØ×јÔð* Ø—‘” HÛ�AØ—M‘M $×"9Ñ"9¸!¸QÀ8Ð"9Ó"LÈQÑ"OÕPðà— ‘ ”÷!ñ Ø"5�”Ø×$Ñ$Ô&¨"Ø×"Ò"Ô'7Ð&7Ñ7Õ"Ø$�” Û�AØŸ ™ ×/Ñ/°Ó2�AؘA’v $§,¡,Ð"6Ø!%×!3Ñ!3°d×6JÑ6JÑ!J˜Ø!%§¡×!7Ñ!7¸Ó!?˜Ø" Q™J˜Ø—H‘H˜Q•Kð ð—<‘<Ð+Ø-/¯W©W«Y�D—L‘LÔ*÷'ô × 0Ñ 0°°TÔ :Ü 0× AÑ AØ— ‘ Ø—‘Ø×$Ñ$ó!ˆDÔ ñ  à×+Ñ+Ó-�Ø(+¨W°dÐ';�Ô$Ø3:�×!Ñ!Ô0Ø�ð Ð"Ø— ‘ •ð#÷Q!‘ú÷'Ð&ûðBÐ"Ø— ‘ •ð#ús>Ç8O%È>O É!O%É'C OÌ1BO%Ï OÏO%ÏO"ÏO%Ï%O:có—y)z0called when trying to add a node already stored.NrD)rÄrŽrVs rHÚ_nodeduplicatecallbackzrevlog._nodeduplicatecallbackÎs�rKc#óÐK—|jj«5|jj«5d–—ddd«ddd«y#1swYŒxYw#1swYyxYw­w)zCContext manager that keeps data and sidedata files open for readingN)r4Úreadingr5rEs rHr÷zrevlog.readingÑsKèø€ð× Ñ × &Ñ &Õ (Ø×+Ñ+×3Ñ3Õ5Û÷6÷)Ð (ß5Ð5ú÷)Ð (üs2‚A&�A¸A½AÁ A&ÁA ÁAÁA#ÁA&c#óK—|jr&d}||jz}tj|«‚|j�d–—ydx}x}} t |«}d}|r|j |dz «}d}|js� |jd«}|j€!|jdtj«n4|j|jjtj«|j!|j"|«|j$�†|€J‚ |j'|j$d¬«}|j|jj(tj«|j!|j$|jj(«||j*j,z}|j/«}|jr |j!|j0||z«n|j!|j0|«|||f|_|jr|n||j2_||j6_d–—|j�|j9|«d|_d|j2_d|j6_|�|j;«|�|j;«|�|j;«yy#t$r|jd«}Y�ŒøwxYw#t$r!|j'|j$d¬«}Y�Œ§wxYw#d|_d|j2_d|j6_|�|j;«|�|j;«|�|j;«wwxYw­w)Ns)try to write in a `trypending` revlog: %srrrarbr^)r�r r.r–r¿r¢r rrþr°rcrdreÚdata_endrfrérRr™ršrŸr¶rtr rêr˜r4ràr5Ú _write_docketrß) rÄrŽr;ròÚdfhÚsdfhrËÚdsizeÚisizes rHÚ_writingzrevlog._writingØsïèø€à × Ò Ø>ˆCØ �4—?‘?Ñ "ˆCÜ×(Ñ(¨Ó-Ð -Ø × Ñ Ð +Ü à#Ð #ˆCÐ #�#˜ð6 ܘ“I�à�ÙØ ŸH™H Q¨¡U›O�EØ�Ø—|’|ð2Ø"Ÿl™l¨5Ó1˜ØŸ<™<Ð/ØŸH™H Q¬¯ © Õ4àŸH™H T§\¡\×%:Ñ%:¼B¿K¹KÔHð —O‘O D§N¡N°EÔ:Ø×%Ñ%Ð1à˜?Ð*˜?ðKØ#Ÿ{™{¨4×+=Ñ+=ÀE˜{ÓJ˜ØŸ™ §¡×!:Ñ!:¼B¿K¹KÔHð —O‘OØ×*Ñ*¨D¯L©L×,EÑ,Eôð ˜DŸJ™J×1Ñ1Ñ1�Ø×+Ñ+Ó-�Ø—<’<Ø—O‘O D§O¡O°U¸U±]ÕCà—O‘O D§O¡O°UÔ;à(+¨S°$Ð'7�Ô$Ø:>¿,º,±3ÈC�×!Ñ!Ô0Ø<@�×*Ñ*Ô9ÛØ—<‘<Ð+Ø×&Ñ& {Ô3à'+�Ô$Ø37�×!Ñ!Ô0Ø<@�×*Ñ*Ô9Ø�?Ø—I‘I”KØÐ#Ø—J‘J”Lð�?Ø—I‘I•Kð#øôO-ò2Ø"Ÿl™l¨5Ó1›ð2ûô-òKØ#Ÿ{™{¨4×+=Ñ+=ÀE˜{ÓJ›ðKûð*(,�Ô$Ø37�×!Ñ!Ô0Ø<@�×*Ñ*Ô9Ø�?Ø—I‘I”KØÐ#Ø—J‘J”Lð�?Ø—I‘I•Kð#üsk‚A M?Á 1LÁ?A2K Ã1,LÄAK-Å/Ct|«dk(r0|j6r|j8rt:}nt<}|d|d|f}t?j@|||||||«}| jC|| «}tD}|jF�1|jFjH}t3jJ||«}|\}}tD}| r§|jLr›tN}tQjR| «} |jFjT}!|jW| «\}"}#|"d k7rU|#ddd k7rMt|#«t| «kr6|"rJ‚|#dd|jFjHk(r tX}|#} n tD}|#} nd } d}!tZ}$|j\rë||ft^t^fk(rd}$n×|t^k7r|t^k(rd|ja|«z}$n°|t^k(r|t^k7rd|ja|«z}$n‰tb�8|jjdr"tbjg|j||«}$nKti||f«\}%}&d|ja|&«z}$|$tkd „|jm|&g|%g«D««z }$t?jn|||jp|||jr|||||!t| «||$¬ «}'|jju|'«|jjw|«}(|dk(rE|jF€9|jx|jzz})|jj}|)«})|)|(z}(|j||(|j€||| |!«|d}| r|€| jƒ|| «}t…|«t†k(r |||f|_D|jŠ|jŒ|<|S)aÁinternal function to add revisions to the log see addrevision for argument descriptions. note: "addrevision" takes non-raw text, "_addrevision" takes raw text. if "deltacomputer" is not provided or None, a defaultdeltacomputer will be used. invariants: - rawtext is optional (can be None); if not set, cachedelta must be set. if both are set, they must correspond to each other. s %s: attempt to add null revisions %s: attempt to add wdir revisionNó1adding revision outside `revlog._writing` contextrr©Ú write_debugr‘rrrKc3ó K—|]}d–—Œy­w)rNrD)r÷r s rHrùz&revlog._addrevision..s sèø€ÐPÑ+O a¤Ñ+Oùs‚ )reÚ data_offsetÚdata_compressed_lengthÚdata_uncompressed_lengthÚdata_compression_modeÚdata_delta_baseÚlink_revÚ parent_rev_1Ú parent_rev_2Únode_idr»Úsidedata_compressed_lengthÚsidedata_compression_moder±)Gr*r.rØr r r)r—r˜r¿r–rr¢Ú_get_data_offsetrÂr˜rtr r™rr/Ú patchedsizerArìr¯Ú_reportr‚rr!rÔrrr2Ú revisioninfoÚ finddeltainforr°rXÚdelta_compressionr¸rr¸Úserialize_sidedatar¶rrrr»rr²r$rÙr±ÚsortedÚsumrr¼ÚdeltalenrµrÏrrŒr�rÚ _writeentryrrÚ buildtextÚtyper™r§r·r©)*rÄrVr¬rŽrrsrtrerÚ alwayscacherr=r;ÚfhÚbtextÚcurrÚprevrŠròrûrüÚp1rÚp2rÚtextlenrÚdelta_base_reuseÚrevinfoÚ deltainfor~Ú default_comprËr&Úserialized_sidedatar»ÚhÚ comp_sidedatar±ÚpminÚpmaxr¢r¼r‹s* rHr zrevlog._addrevisionÑ s›€ð6 �4—;‘;Ò Ü×#Ñ#ÜÐ5Ó6¸¿¹ÑHóð ð �D×&Ñ&×-Ñ-Ò -Ø�t×)Ñ)×9Ñ9Ñ9ä×#Ñ#ÜÐ5Ó6¸¿¹ÑHóð ð × Ñ Ð 'ØFˆCÜ×(Ñ(¨Ó-Ð -à �<Š<Ø×%Ñ% aÑ(‰Bà×%Ñ% aÑ(ˆBà� ˆä�4‹yˆØ�a‰xˆà×&Ñ& tÓ,ˆà × #Ò #Ø!×1Ñ1‰NˆC��dà�|Š|ð×(Ñ(ؘŸ™¨&°4¸$¿*¹*×:OÑ:OÑ3OÑ*Oõð ×(Ñ(ؘŸ™¨$°·±×1FÑ1FÑ*Fôð×(Ñ(¨¨d¯n©n¸fÔEà—8‘8˜B“< §¡¨"£ˆSˆð ˆ?ô×'Ñ'Ü— ‘ ˜D *¨Q¡-Ó0°*¸Q±-ó‰Gô˜'“lˆGà Р؈KØ× Ò Ø)×1Ñ1� Ü%×3Ñ3Ø +ôˆMð Ð !¤c¨*£o¸Ò&:ð×!Ò! d×&9Ò&9Ü#7Ñ ä#6Ð Ø$ Q™-¨°A©Ð8HÐIˆJä×*Ñ*Ø Ø Ø Ø Ø Ø Ø ó ˆð"×/Ñ/°¸Ó<ˆ ä+ÐØ �<‰<Ð #ØŸ<™<×BÑBˆLÜ×+Ñ+¨L¸)ÓDˆAØ*+Ñ 'Ð ˜iä$4Ð!Ù ˜×(Ò(Ü(7Ð %Ü".×"AÑ"AÀ(Ó"KÐ Ø"Ÿl™l×7Ñ7ˆOØ#Ÿ}™}Ð-@ÓAÑ ˆAˆ}à�T’ Ø! ! AÐ&¨%Ò/ܘ Ó&¬Ð-@Ó)AÒAá� �uà! ! AÐ&Ø—|‘|×>Ñ>ò?ô1BÐ-Ø*7Ñ'ä0@Ð-Ø*7Ñ'à"%Ð ð ˆOäˆØ × Ò Ø�Sˆzœg¤wÐ/Ò/ؑ؜’ C¬7¢Nؘ4Ÿ>™>¨#Ó.Ñ.‘Øœ’ C¬7¢Nؘ4Ÿ>™>¨#Ó.Ñ.‘äÐ(¨T¯Z©Z×-GÒ-GÜ$Ÿ>™>¨$¯*©*°c¸3Ó?‘Dä!'¨¨c¨ Ó!3‘J�D˜$ؘtŸ~™~¨dÓ3Ñ3�DØœCÑP¨4×+?Ñ+?ÀÀÈÈÔ+OÓPÓPÑP�Dä × Ñ ØØØ#,×#5Ñ#5Ø%,Ø"2Ø%ŸN™NØØØØØ+Ü'*Ð+>Ó'?Ø&?Øô ˆð" � ‰ ×ј!ÔØ— ‘ ×'Ñ'¨Ó-ˆØ �1Š9˜Ÿ™Ð-Ø×'Ñ'¨$×*>Ñ*>Ñ>ˆFØ—Z‘Z×+Ñ+¨FÓ3ˆFؘU‘NˆEØ ×ÑØ Ø Ø �N‰NØ Ø Ø Ø ô ð˜‘(ˆá ˜7˜?Ø#×-Ñ-¨g°rÓ:ˆGä �‹=œEÒ !Ø#'¨¨wÐ"7ˆDÔ Ø%.×%8Ñ%8ˆ×јTÑ"؈ rKcóh—|j€|j|«S|jjS)aReturns the current offset in the (in-transaction) data file. Versions < 2 of the revlog can get this 0(1), revlog v2 needs a docket file to store that information: since sidedata can be rewritten to the end of the data file within a transaction, you can have cases where, for example, rev `n` does not have sidedata while rev `n - 1` does, leading to `n - 1`'s sidedata being written after `n`'s data. TODO cache this in a docket file before getting out of experimental.)r°r rù)rÄr8s rHr'zrevlog._get_data_offset  s,€ð �<‰<Ð Ø—8‘8˜D“>Ð !à—<‘<×(Ñ(Ð (rKcóŠ—|j€d}tj|«‚|j\} } } |j€!| j dt j «n4| j |jjt j«| ra|j€!| j dt j «n4| j |jjt j«| r4| j |jjt j«t|«dz } |js¾|j|j|«|jr|j|j|«|j|j | t|«z«|dr| j#|d«| j#|d«|r| j#|«| j#|«n†|| |j$j&zz }|j|j |«| j#|«| j#|d«| j#|d«|rJ‚|j)|«|j�–|jd} |jd}|jd}| €J‚|€J‚|€J‚| j+«|j_|j+«|j_ |j+«|j_ t-j.||«y)Nrrrr‘)r¿r.r–r°rcrdrer&rfrùr¶r¢rrRr™ršr˜rçrtr rórér rŒ)rÄrŽr¼rrrrŠr=r»r;ròrûrür7Úwh1Úwh2Úwh3s rHr1zrevlog._writeentry® st€ð × Ñ Ð 'ØFˆCÜ×(Ñ(¨Ó-Ð -Ø×-Ñ-‰ˆˆS�$Ø �<‰<Ð Ø �H‰H�QœŸ ™ Õ $à �H‰H�T—\‘\×+Ñ+¬R¯[©[Ô 9Ù Ø�|‰|Ð#Ø—‘˜œBŸK™KÕ(à—‘˜Ÿ™×.Ñ.´· ± Ô<Ù Ø �I‰I�d—l‘l×/Ñ/´·±Ô =ä�4‹y˜1‰}ˆØ�|Š|Ø �O‰O˜DŸN™N¨FÔ 3Ø×!Ò!Ø—‘ × 2Ñ 2°OÔDØ �O‰O˜DŸO™O¨T´C¸³JÑ->Ô ?Ø�AŠwØ— ‘ ˜$˜q™'Ô"Ø �I‰I�d˜1‘gÔ ÙØ— ‘ ˜8Ô$Ø �I‰I�eÕ à �d˜TŸZ™Z×2Ñ2Ñ2Ñ 2ˆFØ �O‰O˜DŸO™O¨VÔ 4Ø �I‰I�eÔ Ø �I‰I�d˜1‘gÔ Ø �I‰I�d˜1‘gÔ ÙÐ �<Ø × #Ñ # KÔ 0Ø �<‰<Ð #à×&Ñ& qÑ)ˆCØ×&Ñ& qÑ)ˆCØ×&Ñ& qÑ)ˆCØ�?Ð "�?Ø�?Ð "�?Ø�?Ð "�?Ø%(§X¡X£ZˆD�L‰LÔ "Ø$'§H¡H£JˆD�L‰LÔ !Ø(+¯©« ˆD�L‰LÔ %ä×,Ñ,¨[¸$Õ?rKc óV—|jrtjd«‚|€%|jr|jrt }nt }d|_d} |j|«5d} |jr |j} tj|| |¬«} |D�]ã} | \} }}}}}}}||«}|xst}|jj| «}|� |j||«|r |||«d} Œ^||fD]G}|jj!|«rŒtj"||j$t'd««‚|jj!|«s*tj"||j(t'd««‚|j+|«}|t,k7r�|j/|«rt1j2d«}|j5|«}t7|«|z }|d|t9j:||«k7r/tj<|j(|j?|««‚|s|jA||«r |tBz}|jE| d||||||||f|| |¬ « }|r |||«d} �Œæ ddd«d|_| S#1swYŒxYw#d|_wxYw) a\ add a delta group given a set of deltas, add them to the revision log. the first delta is against its parent, which should be in our log, the rest are against the previous delta. If ``addrevisioncb`` is defined, it will be called with arguments of this revlog and the node that was added. scannot nest addgroup() callsNT)rÚ debug_infoFsunknown parentsunknown delta bases>lll)r4rr=)#rÀr.r–r!rÔrrrÿr¯r)r‚rr$rtrrõÚhas_noderšr–r r rrÚ iscensoredÚstructÚcalcsizer­r¢r/ÚreplacediffheaderÚCensoredBaseErrorrVÚ_peek_iscensoredr)r )rÄr6Ú linkmapperrŽr4Ú addrevisioncbÚduplicaterevisioncbrKÚdelta_base_reuse_policyÚemptyrrrrrVrsrtriÚ deltabasergrer=rrrrˆÚhlenÚoldlenÚnewlens rHÚaddgroupzrevlog.addgroupï sÊ€ð, × Ò Ü×(Ñ(Ð)HÓIÐ Ið #Ð *Ø×!Ò! d×&9Ò&9Ü*>Ñ'ä*=Ð'à!ˆÔ؈ðX 'Ø—‘˜{Õ+Ø"� Ø×$Ò$Ø"-×"5Ñ"5�KÜ )× 7Ñ 7ØØ +Ø)ô!� ô #�Dðñ ØØØØ Ø!ØØØ á% hÓ/�DØ!Ò9Ô%9�EàŸ*™*×,Ñ,¨TÓ2�CØ�à×3Ñ3°KÀÔEÙ.Ù/°°cÔ:Ø %˜Ø à  "›X˜Ø#Ÿz™z×2Ñ2°1Õ5Ü"'×"3Ñ"3Ø ! 4§:¡:¬qÐ1BÓ/Có#ðð&ð  Ÿ:™:×.Ñ.¨yÔ9Ü#×/Ñ/Ø% t§¡¼Ð:OÓ8Póðð#Ÿh™h yÓ1�Gà¤'Ò)¨d¯o©o¸gÔ.Fô &Ÿ™¨wÓ7˜Ø!%§¡¨gÓ!6˜Ü!$ U£¨dÑ!2˜Ø   $˜<¬5×+BÑ+BØ" Fó,òô#(×"9Ñ"9Ø $§¡°·±¸7Ó1Có#ðñ! T×%:Ñ%:¸7ÀEÔ%JØÔ!2Ñ2˜ð×+Ñ+ØØØ#ØØØØØ  %Ð)@ÐAØ$/Ø&3Ø!)ð,ó �Cñ%Ù% d¨CÔ0Ø!’EñW#÷,ðn"'ˆDÔ ØˆyÐ÷q,Ð+ûðn"'ˆDÕ ús,ÁJÁ$B5JÄE&JÊJÊJÊJÊ J(cóL—|jsy|j|«tzS)z%Check if a file revision is censored.F)r¦rer)rws rHrMzrevlog.iscensoredm s"€à×ÒØà�z‰z˜#‹Ô!2Ñ2Ð2rKcó^—|jsytj|||j«S)z6Quickly check if a delta produces a censored revision.F)r¦r>Údeltaiscensoredr­)rÄrˆrgs rHrRzrevlog._peek_iscensoredt s'€à×ÒØä×*Ñ*¨5°'¸4¿<¹<ÓHÐHrKcó�—tj|t|«dz |j«|j|j «S)zÐfind the minimum rev that must be stripped to strip the linkrev Returns a tuple containing the minimum rev and a set of all revs that have linkrevs that will be broken by this strip. r)r>Úresolvestripinfor¢r rr½)rÄÚminlinks rHÚ getstrippointzrevlog.getstrippoint{ s<€ô ×+Ñ+Ø Ü �‹I˜‰MØ �M‰M‹OØ �L‰LØ �O‰Oó  ð rKcóp—t|«dk(ry|j|«\}}|t|«k(ry|j|«}|js6|j |j |«||j jz}n|||j jzz}|jr-|j|«}|j |j|«|j |j|«|j�P||j_ ||j_ |j_|jj|d¬«d|_t#j$d«|_|j(j+«|j,j+«|j |d…=y)a7truncate the revlog on the first revision with a linkrev >= minlink This function is called when we're stripping revision minlink and its descendants from the repository. We have to remove all revisions with linkrev >= minlink, because the equivalent changelog revisions will be renumbered after the strip. So we truncate the revlog on the first of these revisions, and trust that the caller has saved the revisions that shouldn't be removed and that it'll re-add them after this truncation. rNT)Ú strippingrr”)r¢rcr€rrRr™rtr ršr£r˜r°r&rùr¶rçr§r4r¨r6r4r’r5)rÄrbrŽrr rùr r¶s rHÚstripz revlog.strip‰ sa€ô ˆt‹9˜Š>Ø à×#Ñ# GÓ,‰ˆˆQØ ”#�d“)Ò Ø ð—:‘:˜c“?ˆØ�|Š|Ø �O‰O˜DŸN™N¨HÔ 5ؘŸ ™ ×-Ñ-Ñ-‰Cà˜c D§J¡J×$9Ñ$9Ñ9Ñ:ˆCà × Ò Ø×0Ñ0°Ó5ˆLØ �O‰O˜D×.Ñ.° Ô =à�‰˜Ÿ™¨Ô-Ø �<‰<Ð #ð&)ˆD�L‰LÔ "Ø$,ˆD�L‰LÔ !Ø(4ˆD�L‰LÔ %Ø �L‰L× Ñ ˜{°dÐ Ô ;ð#ˆÔÜ#×0Ñ0°Ó5ˆÔØ ×Ñ×%Ñ%Ô'Ø ×"Ñ"×.Ñ.Ô0à �J‰J�s˜2�vÑ rKcó—d}t|«r'td|jt|«dz ««} |j«5}|j dt j «|j«}ddd«|z } |j|j«}|j dt j «|j«}|j«|jj}td||z«}|||zz }|jr=d}|D] } |td|j| ««z }Œ"d}|t|«|zz |z }||fS#1swYŒäxYw#t$rd}YŒïwxYw#t$rd}Y||fSwxYw)zØCheck size of index and data files return a (dd, di) tuple. - dd: extra bytes for the "data" file - di: extra bytes for the "index" file A healthy revlog will return (0, 0). rrN)r¢rr rþrcÚiorerérérŸr˜rßrtr rr¦) rÄÚexpectedrgÚactualÚddÚsrÁÚdiÚ databytesrËs rHÚ checksizezrevlog.checksize» sf€ðˆÜ ˆtŒ9ܘ1˜dŸh™h¤s¨4£y°1¡}Ó5Ó6ˆHð Ø—‘” 1Ø—‘�qœ"Ÿ+™+Ô&ØŸ™›�÷ ð˜(Ñ"ˆBð Ø— ‘ ˜DŸO™OÓ,ˆAØ �F‰F�1”b—k‘kÔ "Ø—V‘V“XˆFØ �G‰GŒIØ— ‘ ×%Ñ%ˆAÜ�A�v ‘{Ó#ˆAؘ1˜q™5Ñ!ˆBØ�|Š|Ø� Û�Aؤ Q¨¯ © °A«Ó!7Ñ7‘Iðà�Øœc $›i¨!™mÑ+¨iÑ7�ð�Bˆxˆ÷1 �ûô!ò ØŠBð ûô"!ò ؉Bà�Bˆxˆð ús<¶E&Á1EÁ7 E&ÂCE7ÅE#ÅE&Å& E4Å3E4Å7 FÆFcó†—|jg}|j€)|js|j|j«|S|j|j«|j |j jd¬««|j jr|j|j«|j |j jd¬««|j jr|j|j«|j |j jd¬««|S)NF)Ú include_empty) r˜r—rrÏr™Úextendr°Úold_index_filepathsrùÚold_data_filepathsr¶ršÚold_sidedata_filepaths)rÄÚress rHÚfilesz revlog.filesã sç€Ø�‰ÐˆØ × Ñ Ð $Ø—<’<Ø— ‘ ˜4Ÿ>™>Ô*ðˆ ð �J‰J�t×(Ñ(Ô )Ø �J‰J�t—|‘|×7Ñ7ÀeÐ7ÓLÔ MØ�|‰|×$Ò$Ø— ‘ ˜4Ÿ>™>Ô*Ø �J‰J�t—|‘|×6Ñ6ÀUÐ6ÓKÔ LØ�|‰|×(Ò(Ø— ‘ ˜4×-Ñ-Ô.Ø �J‰J�t—|‘|×:Ñ:ÈÐ:ÓOÔ P؈ rKcój—|dvrtjd|z«‚|€|jsd}|js#|tj k7rtj }tj|||t|j|j|j|j|j|||||¬«S)N)snodesóstorageslinearNs"unhandled value for nodesorder: %sry) Ú deltaparentfnÚ candeltafnÚ rawsizefnÚ revdifffnÚflagsfnÚ deltamodeÚ revisiondataÚassumehaveparentrevisionsÚsidedata_helpersrK)r.r–r!r+r5ÚCG_DELTAMODE_PREVÚCG_DELTAMODE_FULLr>Ú emitrevisionsr[r’r‰r­r�re)rÄÚnodesÚ nodesorderr€r�rr‚rKs rHr…zrevlog.emitrevisionsó s´€ð ÐDÑ DÜ×(Ñ(Ø5¸ ÑBóð ð Ð  d×&8Ò&8Ø#ˆJð×&Ò&ØœZ×9Ñ9Ò9ä"×4Ñ4ˆIä×(Ñ(Ø Ø Ø Ü Ø×*Ñ*Ø—}‘}Ø—l‘lØ—l‘lØ—J‘JØØ%Ø&?Ø-Ø!ô ð rKóalwaysósamerevsóneverófulladd>rŠrˆr‹r‰có¬—||jvrttd«|z«‚t|«rttd««‚t |dd«rttd««‚t |dd«rttd««‚|j }|j }|j} ||jk(rd|_d|_n;||jk(rd|_d|_n||jk(rd|_d|_|xs| |_|j||||||«||_||_| |_y#||_||_| |_wxYw) a]Copy this revlog to another, possibly with format changes. The destination revlog will contain the same revisions and nodes. However, it may not be bit-for-bit identical due to e.g. delta encoding differences. The ``deltareuse`` argument control how deltas from the existing revlog are preserved in the destination revlog. The argument can have the following values: DELTAREUSEALWAYS Deltas will always be reused (if possible), even if the destination revlog would not select the same revisions for the delta. This is the fastest mode of operation. DELTAREUSESAMEREVS Deltas will be reused if the destination revlog would pick the same revisions for the delta. This mode strikes a balance between speed and optimization. DELTAREUSENEVER Deltas will never be reused. This is the slowest mode of execution. This mode can be used to recompute deltas (e.g. if the diff/delta algorithm changes). DELTAREUSEFULLADD Revision will be re-added as if their were new content. This is slower than DELTAREUSEALWAYS but allow more mechanism to kicks in. eg: large file detection and handling. Delta computation can be slow, so the choice of delta reuse policy can significantly affect run time. The default policy (``DELTAREUSESAMEREVS``) strikes a balance between two extremes. Deltas will be reused if they are appropriate. But if the delta could choose a better revision, it will do so. This means if you are converting a non-generaldelta revlog to a generaldelta revlog, deltas will be recomputed if the delta's parent isn't a parent of the revision. In addition to the delta policy, the ``forcedeltabothparents`` argument controls whether to force compute deltas against both parents for merges. By default, the current default is used. See `revlogutil.sidedata.get_sidedata_helpers` for the doc on `sidedata_helpers`. s value for deltareuse invalid: %ssdestination revlog is not emptyrSNs$source revlog has filtered revisionss)destination revlog has filtered revisionsTF) Ú DELTAREUSEALLr2r r¢r rÓrÔr­ÚDELTAREUSEALWAYSÚDELTAREUSESAMEREVSÚDELTAREUSENEVERÚ_clone) rÄrÓÚ destrevlogrTÚ deltareuseÚforcedeltabothparentsr‚Ú oldlazydeltaÚoldlazydeltabaseÚoldamds rHÚclonez revlog.clone$ sf€ðj ˜T×/Ñ/Ñ /ÜÜÐ5Ó6¸ÑCóð ô ˆzŒ?ÜœQÐAÓBÓCÐ Cä �4˜¨Ô .ÜœQÐFÓGÓHÐ HÜ �:˜~¨tÔ 4ÜœQÐKÓLÓMÐ Mð"×,Ñ,ˆ Ø%×4Ñ4ÐØ×-Ñ-ˆð 2ؘT×2Ñ2Ò2Ø,0� Ô)Ø(,� Õ%ؘt×6Ñ6Ò6Ø,1� Ô)Ø(,� Õ%ؘt×3Ñ3Ò3Ø,1� Ô)Ø(-� Ô%à+@Ò+JÀFˆJÔ (à �K‰KØØØØØ%Ø ô  ð%1ˆJÔ !Ø(8ˆJÔ %Ø+1ˆJÕ (øð%1ˆJÔ !Ø(8ˆJÔ %Ø+1ˆJÕ (ús Â,A:D<Ä<EcóЗd}|jr |j}tj||¬«}|j} |D�]—} | | } | ddz} | d} | | dd}| | dd}| d}d}d}||j k(rj|j | «}|j| «}|�*tj|||| «\}}| |d|d zz} |j||| ||||| ||¬ « nÜ|jr6|j| «}|tk7r|t|j| ««f}d}|s"|j | «}|j| «}|€|j| «}|�*tj|||| «\}}| |d|d zz} |j!|«5|j#|||| ||| |||¬ « ddd«|s�ŒŽ||| |«�Œšy#1swYŒxYw) zBperform the core duty of `revlog.clone` after parameter processingNrrr‡rñrºrr»r)rrVrerr=r )r¯r)r‚rrtÚDELTAREUSEFULLADDr r=r¸Úrun_sidedata_helpersr rÓr’rr™rrÿr )rÄrÓr’rTr“r”r‚rrrtrr¼rerrsrtrVrr¬rGr=Ú new_flagsÚdps rHr‘z revlog._clone‡ sR€ðˆ Ø × Ò ØŸ*™*ˆKÜ!×/Ñ/Ø Ø#ô ˆ ð— ‘ ˆÜˆCؘ#‘JˆEð˜!‘H˜vÑ%ˆEؘA‘hˆGØ�u˜Q‘x‘ Ñ#ˆBØ�u˜Q‘x‘ Ñ#ˆBؘ‘8ˆDðˆJ؈GؘT×3Ñ3Ò3Ø×)Ñ)¨#Ó.�ØŸ=™=¨Ó-�à#Ð/Ü,8×,MÑ,MØÐ.°¸#ó-Ñ)�X˜yð" I¨a¡L°I¸a±L°=Ñ$@Ñ@�Eà×&Ñ&ØØØØØØ)ØØØ"/Ø%ð'õ ð×(Ò(Ø×)Ñ)¨#Ó.�BØœW’}Ø&(¬%°· ± ¸CÓ0@Ó*AÐ%B˜ à�Ù!Ø"×0Ñ0°Ó5�GØ#Ÿ}™}¨SÓ1�HØÐ#Ø#Ÿ}™}¨SÓ1�Hà#Ð/Ü,8×,MÑ,MØÐ.°¸#ó-Ñ)�X˜yð" I¨a¡L°I¸a±L°=Ñ$@Ñ@�Eà×(Ñ(¨Õ,Ø×+Ñ+ØØØØØØØØ"Ø&3Ø!)ð,ô ÷-óÙ˜d C¨Ö.ñO÷p-Ð,ús Æ&GÇG% có—|jtk(r+tjt d«|jz«‚|jt k(rt j||||«yt j||||«y)Ns%cannot censor with version %d revlogs) r�rr.rØr rr<Ú v1_censorÚ v2_censor)rÄrÓÚ censornodeÚ tombstones rHÚcensorrevisionzrevlog.censorrevisionâ sr€Ø × Ñ ¤8Ò +Ü×#Ñ#ÜÐ:Ó;Ø×&Ñ&ñ'óð ð× !Ñ !¤XÒ -Ü × Ñ ˜d B¨ °IÕ >ä × Ñ ˜d B¨ °IÕ >rKc #óÜK—|j«\}}|rttd«|z¬«–—|rttd«|z¬«–—|j}||dk7r*ttd«|j||dfz¬«–—t «|d<t «|d<|D]—}|j |«} |jd d «}|r||j|«z}t||||«|j|«}t|j|««} || k7rttd «| |fz|¬ «–—Œ™y#tj$r4|d r,ttd«|¬ «–—|dj|«YŒát $rX} ttd«t#|«t%j&| «fz|¬ «–—|dj|«Yd} ~ �ŒˆDðd -Ø!ŸI™I l°AÓ6� ÙØ §¡¨C£Ñ0�Iä   y°%¸Ô>à—\‘\ #Ó&�ܘŸ™ dÓ+Ó,�à˜’8Ü'ÜÐ CÓDÈÈBÀxÑOØ!ôòøñ}øôF×*Ñ*ò 1ØÐ+Ò,Ü'ÜÐ 5Ó6¸Tôòð˜+Ñ&×*Ñ*¨4Ô0ùÜò -Ü#ÜÐ/Ó0ܘT“{¤J×$;Ñ$;¸AÓ$>Ð?ñ@àôòð �kÑ"×&Ñ& t×,Ò,ûð  -üs?‚B:G,Â=BEÅG,ÅAG)ÆG,Æ G)ÆA G$ÇG,Ç$G)Ç)G,c󊇗i}|rR‰j‰jfg|d<‰js*|dj‰j‰jf«|rg|d<|rt ‰«|d<|r+t t‰jt‰«««|d<|r%t ˆfd„‰j«D««|d<|S)Nsexclusivefiless sharedfilessrevisionscounts trackedsizec3óh•K—|])}‰jj|«j–—Œ+y­wro)rŸÚstaträ)r÷rËrÄs €rHrùz%revlog.storageinfo..o s*øèø€ð#Ù;G°4�— ‘ × Ñ  Ó&×.Õ.¹<ùsƒ/2s storedsize) rŸr˜rrÏr™r¢r/rKr­r|rw)rÄÚexclusivefilesÚ sharedfilesÚrevisionscountÚ trackedsizeÚ storedsizer@s` rHÚ storageinfozrevlog.storageinfoV s¼ø€ð ˆá Ø%)§[¡[°$·/±/Ð$BÐ#CˆAÐÑ Ø—<’<ØÐ#Ñ$×+Ñ+¨T¯[©[¸$¿.¹.Ð,IÔJá Ø "ˆAˆnÑ á Ü#& t£9ˆAÐÑ á Ü #¤C¨¯ © ´d¸4³jÓ$AÓ BˆAˆnÑ á Ü"ó#Ø;?¿:¹:¼<ó#ó ˆAˆmÑ ðˆrKcó—|jsy|jrJ‚|ds|dsyg}|j|«5|j\}}}|j |j j tj«|j«} t||dz«D�]}} |j| } tj||i| ¬«\} } tj| «}t}|r{|jrot }|j#|«\}}|dk7rP|ddk7rHt%|«t%|«kr1|rJ‚|d|j j&k(r t(}|}nt}|}| ddk7s| ddk7rd }t+j,|«‚| d| d| dzz}| t%|«||f}|j | tj«|j/|«|j1|«| t%|«z } |j«|j _�Œ€|j ||jj2z«t5|«D]�\}}||z} |jj6| g|¢­Ž|jj9| «}| dk(rE|j €9|j:|j<z}|jj?|«}||z}|j/|«ŒŸ ddd«y#1swYyxYw) Nrr‘)Ústorer‚r=rrrrržrŸs0rewriting existing sidedata is not supported yet) r¸rrÿr¿rcr°r¶rdrfrérÿrtr¸r›r-rrrr¢rXrr.ÚAbortrçrÏr r)Úreplace_sidedata_inforrŒr�r)rÄrŽÚhelpersr.rxÚ new_entriesròrûrüÚcurrent_offsetrr¼Ú new_sidedatarer@r&rArBr;Únew_offset_flagsÚ entry_updaterÁr¢Úpackedr‹s rHÚrewrite_sidedatazrevlog.rewrite_sidedatau sØ€Ø×ÒØ à—<’<ÐÐØ�qŠz '¨!¢*à àˆ à �]‰]˜;Õ 'Ø!×1Ñ1‰NˆC��dØ �H‰H�T—\‘\×.Ñ.´· ± Ô <à!ŸY™Y›[ˆNܘX v°¡z×2�ØŸ ™  3™�Ü&2×&GÑ&GØØ%,ØØô 'Ñ#� ˜eô'3×&EÑ&EØ ó'Ð#ô-=Ð)Ù&¨4×+;Ò+;Ü0?Ð-Ø'+§}¡}Ð5HÓ'IÑ$�A�}à˜Tš Ø)¨!Ñ,°Ò5Ü  Ó.´Ð5HÓ1IÒIá#$˜ ˜uà)¨!Ñ,Ø#Ÿ|™|×FÑFòGô9JÐ5Ø2?Ñ/ä8HÐ5Ø2?Ð/ؘ‘8˜q’= E¨!¡H°¢MðN�CÜŸ+™+ cÓ*Ð*ð$)¨¡8¨e°A©h¸%À¹(¸Ñ.BÑ#BÐ à"ÜÐ+Ó,Ø$Ø-ð  � ð— ‘ ˜.¬"¯+©+Ô6Ø— ‘ Ð.Ô/Ø×"Ñ" <Ô0ؤ#Ð&9Ó":Ñ:�Ø,0¯I©I«K�— ‘ Ö)ðm3ðr �H‰H�X § ¡ × 5Ñ 5Ñ5Ô 6Ü! +Ö.‘��1Ø ‘l�Ø0�— ‘ ×0Ñ0°Ð9°qÓ9ØŸ™×0Ñ0°Ó5�ؘ!’8 § ¡ Ð 4Ø!×/Ñ/°$×2FÑ2FÑF�FØ!ŸZ™Z×3Ñ3°FÓ;�FØ# f™_�FØ— ‘ ˜&Õ!ñ/÷(× 'Ñ 'ús ºJ8K<Ë<L) NFFFNFNFFTro)F)r])rN)rF)NN)rrC)NNN)T)FNN)FNNNN)rK)FFFFF)„r^r_r`Ú__doc__r.rØÚ_flagserrorclassÚ staticmethodr�rÌrárïrrÁrFr4Ú propertycacherÐr rTrVr[rörêrèrþÚ contextlibÚcontextmanagerrorsrurxrzr}rƒr†r‰r�r“rr€r£rer¦r©r­rìr²r·rr½rÜrVr rÂrÅrÄrÔrßrãrrrrr!r r'r#rúr4r<r6rBr@rEr,rQr`rbrprurrr�r’r”r—r�rSr=r r§r¥r«rÄrªÚpropertyrrórõr÷rÿrúr$r rrrYr r'r1r\rMrRrcrfrorwr5ÚCG_DELTAMODE_STDr…rŽr�r�ršr�r˜r‘r£r©r²r¾rDrKrHrArAõsÛ„ñ+ðZ×(Ñ(Ðàñ2óð2ðØØØØØØØØØ#óg=òRT=óló2Yóv[!òzð ×Ññóðð ×Ññóðò ð ×Ññ=óð=ð ×Ññóðò7òò  ó6ð×Ññóðò#ò(ò$òò&óGòò òHò>ò* Jò$-òò"+ò"ò"ò ò'òò$ ò"ò &ð&Ðòò2ò*ò'òó>'óRNò*Fó>:ó@Mó +ó0Có4^*ó@?ò6ò :ó0ò4 ò1ò ò(ò Ió ò ò òD>ò@ Kó15òfBó FóD)ó,BòHò%ò@1ò Fó2ó #ó*óX)%òV$óL<ò:óð>ñ (óð (ól ò\?ð×Ññóðð ×Ññ? óð? òB(ð Ø Ø"ØØóL ðnØØóò> ò0+ðxØØóMò^ )ò?@ðLØØ ØØ $ó|ò|3òIò  ò0òd&òPð&ØØ"'Ø×-Ñ-ØØó' ðR!ÐØ$ÐØ€Oà"ÐâB€Mð Ø%Ø"Øóa2òFY/óv ?òg-ðVØØØØó ó>R"rK)qr¿rOrûrÃrhrdrNrárrVrrrrrr Úi18nr r1r Úrevlogutils.constantsr r rrrrrrrrrrrrrrrrrrr r!r"r#Úrevlogutils.flagutilr$r%r&r'r(r)r*Ú thirdpartyr+Úr,r-r.r/r0r2r3r4Ú interfacesr5Ú interfaceutilr6r‚r7r"r8r9r r:r;r<r=r¸Úutilsr>r?Ú importmodr@Ú importrustrØr$r�rYrrÛrIrMrOrÕrWr.ÚHAS_FAST_PERSISTENT_NODEMAPÚ implementerÚirevisiondeltarlr[Úiverifyproblemrlrvrzr|rrƒrr·rYrArDrKrHÚrÕsTðñóÛÛÛ Û Û ÛÛ ÷÷õÝ÷÷÷÷÷÷ó÷4÷ñõ÷ ÷ õ ÷÷ ÷ ó ÷ñ ÙÙÙ ÙÙÙÙÙÙÙÙÙÙÙÙÙÙà ˆ&× Ñ ˜9Ó %€Ø ˆv× Ñ  Ó,€ Ø ˆF× Ñ ˜gÓ &€ Ø ˆV× Ñ ˜xÓ (€ ð—/‘/€ð€ òòòð ØØðÐòð)°Ð4òÐ8H¸×8HÑ8HØ Ð ó9Ðð €×ј:×4Ñ4Ó5Ø€‡�ˆdÔ÷ %ð %óó6ð %ð€×ј:×4Ñ4Ó5Ø€‡�ˆtÔ÷!ð!óó6ð!ò ò ò ð €4×Ñ�GÐ8Ô9óð "Ðò/ð€ áð;óÐð &€ ÷R3"òR3"rK