Ë y>X%¹_G£ãóz—ddlZddlZddlZddlZddlmZddlmZddlm Z ddl m Z dZ dZ dZGd„d «Zd „Zy) éN)Úhex)Úopen)Úerrorééécó‚—eZdZdZdZdd„Zd„Zed„«Zdd„Z d„Z d „Z d „Z d „Z dd „Zd „Zd„Zd„Zed„«Zd„Zy)Úrevmapz~trivial hg bin hash - linelog rev bidirectional map also stores a flag (uint8) for each revision, and track renames. sREVMAP1Ncóô—||_dg|_dg|_i|_dg|_dg|_d|_|rAtjj|«r|j«y|j«yy)a=create or load the revmap, optionally associate to a file if path is None, the revmap is entirely in-memory. the caller is responsible for locking. concurrent writes to a same file is unsafe. the caller needs to make sure one file is associated to at most one revmap object at a time.Nróéÿÿÿÿ) ÚpathÚ_rev2hshÚ _rev2flagÚ_hsh2revÚ _renamerevsÚ _renamepathsÚ _lastmaxrevÚosÚexistsÚ_loadÚflush)Úselfrs ú=usr/lib/python3.12/site-packages/hgext/fastannotate/revmap.pyÚ__init__zrevmap.__init__:sn€ðˆŒ ؘˆŒ ؘˆŒØˆŒ ð˜3ˆÔØ ˜EˆÔ؈ÔÙ Ü�w‰w�~‰~˜dÔ#Ø— ‘ • ð— ‘ • ð r cóð—|jdd|_|jdd|_|jj«|_|jdd|_|j dd|_d|_y)z>copy the map data from another revmap. do not affect self.pathNr )rrrÚcopyrrr)rÚrhss rÚcopyfromzrevmap.copyfromQsa€àŸ ™ ¡Q˜ˆŒ ØŸ™¡qÐ)ˆŒØŸ ™ ×)Ñ)Ó+ˆŒ ØŸ?™?©1Ð-ˆÔØ×,Ñ,©QÐ/ˆÔ؈Õr có2—t|j«dz S)z"return max linelog revision numberr)Úlenr)rs rÚmaxrevz revmap.maxrevZs€ô�4—=‘=Ó! AÑ%Ð%r cóX—||jvr!tjdt|«z«‚t |«t k7rt jdt z«‚t |j«}d}|r |tz}|�Q||jdk7r?|tz}|jj|«|jj|«|jj|«|jj|«||j|<|r|j«|S)z~add a binary hg hash and return the mapped linelog revision. if flush is True, incrementally update the file. s%r is in revmap alreadyshsh must be %d-char longrr )rrÚCorruptedFileErrorrr!Ú_hshlenÚhgerrorÚProgrammingErrorrÚsidebranchflagrÚ renameflagrÚappendrr)rÚhshÚ sidebranchrrÚidxÚflags rr*z revmap.append_s€ð �$—-‘-Ñ Ü×*Ñ*Ø*¬S°«XÑ5óð ô ˆs‹8”wÒ Ü×*Ñ*Ø+¬gÑ5óð ô�$—-‘-Ó ˆØˆÙ Ø ”NÑ "ˆDØ Ð  ¨×(9Ñ(9¸"Ñ(=Ò =Ø ”JÑ ˆDØ × Ñ × #Ñ # CÔ (Ø × Ñ × $Ñ $ TÔ *Ø � ‰ ×јSÔ!Ø �‰×јdÔ#Ø ˆ� ‰ �cÑÙ Ø �J‰JŒL؈ r cóJ—||jkDs|dkry|j|S)z>convert linelog revision to hg hash. return None if not found.rN)r"r©rÚrevs rÚrev2hshzrevmap.rev2hshzs&€à �—‘Ò   a¢ØØ�}‰}˜SÑ!Ð!r cóJ—||jkDs|dkry|j|S)zkget the flag (uint8) for a given linelog revision. return None if revision does not exist. rN)r"rr0s rÚrev2flagzrevmap.rev2flag€s(€ð �—‘Ò   a¢ØØ�~‰~˜cÑ"Ð"r có�—||jkDs|dkrytj|j|«dz }|j|S)zcget the path for a given linelog revision. return None if revision does not exist. rNr)r"ÚbisectÚ bisect_rightrr)rr1r-s rÚrev2pathzrevmap.rev2pathˆsG€ð �—‘Ò   a¢ØÜ×!Ñ! $×"2Ñ"2°CÓ8¸1Ñ<ˆØ× Ñ  Ñ%Ð%r có8—|jj|«S)z>convert hg hash to linelog revision. return None if not found.)rÚget)rr+s rÚhsh2revzrevmap.hsh2rev‘s€à�}‰}× Ñ  Ó%Ð%r cóv—dg|_dg|_i|_dg|_d|_|r|j «yy)z3make the map empty. if flush is True, write to diskNr r )rrrÚ _rev2pathrr)rrs rÚclearz revmap.clear•s?€ð˜ˆŒ ؘˆŒØˆŒ ؘˆŒØˆÔÙ Ø �J‰J�Lð r có8—|jsy|jdk(rrt|jd«5}|j|j«t dt |j««D]}|j||«Œ ddd«nct|jd«5}t |jdzt |j««D]}|j||«Œ ddd«|j|_y#1swYŒxYw#1swYŒ'xYw)z write the state down to the fileNr swbrsab) rrrÚwriteÚHEADERÚranger!rÚ _writerevr")rÚfÚis rrz revmap.flush sÕ€à�yŠyØ Ø × Ñ ˜rÒ !Ü�d—i‘i Ô'¨1Ø—‘˜Ÿ ™ Ô$ܘq¤# d§m¡mÓ"4Ö5�AØ—N‘N 1 aÕ(ñ6÷(Ð'ô �d—i‘i Ô'¨1ܘt×/Ñ/°!Ñ3´S¸¿¹Ó5GÖH�AØ—N‘N 1 aÕ(ñI÷(ð Ÿ;™;ˆÕ÷(Ð'ú÷ (Ð'ús³ADÂ%ADÄD ÄDcóR—|jsyd}t}t|jd«5}|jt |j ««|j k7rt j«‚|jd¬« |j|«}|snét|«}t |j«}|tzrG|j|«}|jj|«|jj|«|j|«}t |«|k7rt j«‚||j |<|j"j|«|jj|«Œý ddd«|j$|_y#1swYŒxYw)zload state from fileNrórbF)r)rr%rÚreadr!rArr$r>Úordrr)Ú _readcstrrr*rrrr"r) rÚflaglenÚhshlenrDÚbufr.r1rr+s rrz revmap._load¯sN€à�yŠyØ ðˆÜˆÜ �$—)‘)˜UÔ # qØ�v‰v”c˜$Ÿ+™+Ó&Ó'¨4¯;©;Ò6Ü×.Ñ.Ó0Ð0Ø �J‰J˜UˆJÔ #ØØ—f‘f˜W“o�ÙØÜ˜3“x�ܘ$Ÿ-™-Ó(�Øœ*Ò$ØŸ>™>¨!Ó,�DØ×$Ñ$×+Ñ+¨CÔ0Ø×%Ñ%×,Ñ,¨TÔ2Ø—f‘f˜V“n�Ü�s“8˜vÒ%Ü×2Ñ2Ó4Ð4Ø%(�— ‘ ˜cÑ"Ø—‘×%Ñ% dÔ+Ø— ‘ ×$Ñ$ SÔ)ðð÷$ð( Ÿ;™;ˆÕ÷)$Ð #ús ¬EFÆF&có<—|j|}|j|}|jtjd|««|t zr?|j |«}|€tjd|z«‚|j|dz«|j|«y)zappend a revision data to fileóBNscannot find path for %só) rrr@ÚstructÚpackr)r8rr$)rr1rDr.r+rs rrCzrevmap._writerevÍs‚€à�~‰~˜cÑ"ˆØ�m‰m˜CÑ ˆØ �‰”— ‘ ˜D $Ó'Ô(Ø ”*Ò Ø—=‘= Ó%ˆD؈|Ü×.Ñ.Ð/IÈCÑ/OÓPÐPØ �G‰G�D˜5‘LÔ !Ø �‰�� r cór—d} |jd«}|stj«‚|dk(r |S||z }Œ5)z,read a C-language-like ''-terminated stringr rrP)rHrr$)rDrMÚchs rrJzrevmap._readcstrÙsJ€ðˆØØ—‘˜“ˆBÙÜ×.Ñ.Ó0Ð0Ø�UŠ{Øàˆ ð �2‰IˆCð r cóú—t|t«r|\}}n |j«|j«}}|j |«}|€y|�||j |«k7ry|j |«tzdk(S)z­(fctx or (node, path)) -> bool. test if (node, path) is in the map, and is not in a side branch. f can be either a tuple of (node, path), or a fctx. Fr)Ú isinstanceÚtupleÚnoderr;r8r4r()rrDr+rr1s rÚ __contains__zrevmap.__contains__æst€ô �aœÔ ؉IˆC‘àŸ™› !§&¡&£(�ˆCØ�l‰l˜3ÓˆØ ˆ;ØØ Ð  ¨¯ © °cÓ(:Ò :ØØ— ‘ ˜cÓ"¤^Ñ3¸Ñ9Ð9r )N)FNF)F)Ú__name__Ú __module__Ú __qualname__Ú__doc__rArrÚpropertyr"r*r2r4r8r;r>rrrCÚ staticmethodrJrY©r rr r 2sr„ñð €Fóò.ðñ&óð&óò6"ò #ò&ò&ó ò 'ò'ò< ðñ óð ó:r r có8—d} t|d«5}|jt tj«|j «t tj«kDr|jt«}ddd«|S#1swY|SxYw#t$rY|SwxYw)z—return the last hash in a revmap, without loading its full content. this is equivalent to `m = revmap(path); m.rev2hsh(m.maxrev)`, but faster. NrG) rÚseekr%ÚioÚSEEK_ENDÚtellr!r rArHÚIOError)rr+rDs rÚ getlastnoderg÷sƒ€ð €Cð Ü �$˜Ô  !Ø �F‰F”G�8œRŸ[™[Ô )Ø�v‰v‹xœ#œfŸm™mÓ,Ò,Ø—f‘fœW“o�÷ð €J÷ ð €Jûô ò Ø Ø €Jð ús/„ B �A%A?Á5B Á?B ÂB  B  BÂB)r6rcrrQÚmercurial.noderÚmercurial.pycompatrÚ mercurialrr&Úr(r)r%r rgr`r rÚrlsJðóÛ Û Û åÝ#õõð,€ð€ ð €÷B:ñB:óJ r