Ë 8–#¾WBêãó—ddlZddlZddlZddlZddlZddlZddlZddlmZddl m Z ddl m Z m Z m Z mZddlmZd„Zej$d„«Zd „ZGd „d «Zd „Zy) éNé)Ú_)Úgetattr)ÚencodingÚerrorÚpycompatÚutil)Úprocutilcó—tjtj««}tj j d«r( |dtjd«jzz }|S|S#tttf$rY|SwxYw)a Return a string which is used to differentiate pid namespaces It's useful to detect "dead" processes and remove stale locks with confidence. Typically it's just hostname. On modern linux, we include an extra Linux-specific pid namespace identifier. slinuxs/%xs/proc/self/ns/pid) rÚ strtolocalÚsocketÚ gethostnamerÚ sysplatformÚ startswithÚosÚstatÚst_inoÚFileNotFoundErrorÚPermissionErrorÚNotADirectoryError)Úresults ú2usr/lib/python3.12/site-packages/mercurial/lock.pyÚ_getlockprefixrs�€ô× Ñ ¤×!3Ñ!3Ó!5Ó 6€FÜ×Ñ×&Ñ& xÔ0ð Ø �fœrŸw™wÐ';Ó<×CÑCÑCÑ CˆFð €Mˆ6€Møô"¤?Ô4FÐGò Ø Ø €Mð úsÁ%A1Á1B ÂB c#ó4‡‡‡K—gŠdŠi}d„Šˆˆˆfd„} dD]3}tt|d«}|sŒ||vsŒtj|«||<Œ5 |D]}tj||«Œ dŠd–—dŠ |j «D]\}}tj||«Œ ‰r ‰‰d«yy#t$rYŒRwxYw#t$rYŒ)wxYw#dŠ |j «D]\}}tj||«Œw#t$rYwwxYwxYw­w)a@Block signal interrupt while doing something critical This makes sure that the code block wrapped by this context manager won't be interrupted. For Windows developers: It appears not possible to guard time.sleep() from CTRL_C_EVENT, so please don't use time.sleep() to test if this is working. Fcó~—|ttdd«k(s|ttdd«k(rt‚tj‚)NÚSIGINTÚ CTRL_C_EVENT)rÚsignalÚKeyboardInterruptrÚSignalInterrupt)Únums rÚraiseinterruptz)_delayedinterrupt..raiseinterrupt=s<€Ø ”'œ& (¨DÓ1Ò 1°S¼GÜ �N Dó= ò6 ô$Ð #ä×'Ñ'Ð 'ócó>•—‰r‰j|«y‰|«y©N)Úappend)r!ÚframeÚ assertedsigsÚblockedr"s €€€rÚ catchtermz$_delayedinterrupt..catchtermEsø€Ù Ø × Ñ  Õ $á ˜3Õ r#)rrÚSIGBREAKÚSIGHUPÚSIGTERMNTr)rrÚ getsignalÚ ValueErrorÚitems)Ú orighandlersr*Únamer!Úhandlerr(r)r"s @@@rÚ_delayedinterruptr4.s9úèø€ð€LØ€GØ€Lò(ö ð ó ˆDôœ& $¨Ó-ˆCÚ�s ,Ò.Ü$*×$4Ñ$4°SÓ$9� ˜SÒ!ð ð Û#�Ü— ‘ ˜c 9Õ-ñ$ð ˆÛ ð ˆð Ø ,× 2Ñ 2Ö 4‘ ��WÜ— ‘ ˜c 7Õ+ñ!5ñÙ�| A‘Õ'ðøô%ò Ù ð ûôò Ù ð ûð ˆð Ø ,× 2Ñ 2Ö 4‘ ��WÜ— ‘ ˜c 7Õ+ñ!5øäò Ù ð ÿs’…D—C°CµCÁB5Á-CÁ4DÁ7.CÂ%DÂ5 CÂ>CÃCÃCà Cà DÃCÃDÃDÃ.DÄDÄ DÄDÄDÄDÄDcó4‡ —ˆ fd„}t||dg|¢­ddi|¤ŽŠ |r|rdnd}d} |sd} n|r|} d} ‰ j« | ‰ _ ‰ jr^d| cxkr‰ jkr+nn(|j td«‰ jz«n|j d‰ jz«‰ jr‰ j«‰ S#tj$r±} | |k(r||j| j «| | k(r||j | j «|| krDtjtj| j‰ j| j «‚tjd«| dz } Yd} ~ nd} ~ wwxYw�Œj) z·return an acquired lock or raise an a LockHeld exception This function is responsible to issue warnings and or debug messages about the held lock while trying to acquires it.cóL•—d|vrj|jdd«\}}td«tj‰j«tj|«tj|«fz}n-td«‰jtj|«fz}||«y)z=issue the usual "waiting on lock" message through any channeló:rs5waiting for lock on %s held by process %r on host %r s"waiting for lock on %s held by %r N)ÚsplitrrÚbytestrÚdesc)ÚprinterÚlockerÚhostÚpidÚmsgÚls €rÚ printwarningztrylock..printwarningwsœø€ð �6‰>ØŸ ™  T¨1Ó-‰IˆD�#ÜØIóô× Ñ  §¡Ó(Ü× Ñ  Ó%Ü× Ñ  Ó&ðñ‰CôÐ:Ó;Ø—‘Ü× Ñ  Ó(ð?ñˆCñ �� r#rÚdolockFéÿÿÿÿrNsgot lock after %d seconds )ÚlockÚ_trylockrÚLockHeldÚdebugr<ÚwarnÚerrnoÚ ETIMEDOUTÚfilenamer:ÚtimeÚsleepÚdelayrÚ acquirefn) ÚuiÚvfsÚlocknameÚtimeoutÚ warntimeoutÚargsÚkwargsrAÚdebugidxÚ warningidxrNÚinstr@s @rÚtrylockrZqs^ø€ô ô& ˆS�(˜AÐ= Ò=¨UÐ=°fÑ=€Aá ¡W‰q°2€HØ€J٠؉ Ù Ø ˆ à €EØ ð Ø �J‰JŒLØ ð€A„G؇w‚wØ � Ô %˜aŸg™gÕ %Ø �G‰G”AÐ4Ó5¸¿¹Ñ?Õ @à �H‰HÐ3°a·g±gÑ=Ô >؇{‚{Ø � ‰ Œ Ø €Høô)�~‰~ò Ø˜Ò Ù˜RŸX™X t§{¡{Ô3ؘ Ò"Ù˜RŸW™W d§k¡kÔ2ؘ%ÒÜ—n‘nÜ—O‘O T§]¡]°A·F±F¸D¿K¹Kóðô �J‰J�qŒMØ �Q‰J�Eûð úñ s±CÃFÃ$B'FÆFcól—eZdZdZdZ dd„Zd„Zd„Zd„Zd„Z d„Z d „Z d „Z d „Z d „Zd „Zdd„Zy)rDaŠAn advisory lock held by one process to control access to a set of files. Non-cooperating processes or incorrectly written scripts can ignore Mercurial's locking scheme and stomp all over the repository, so don't do that. Typically used via localrepository.lock() to lock the repository store (.hg/store/) or localrepository.wlock() to lock everything else under .hg/.Nc óN—||_||_d|_||_||_||_||_|r t|_ntj|_g|_ |j«|_ |r3|j«|_|j r|j «yyy)Nr)rQÚfÚheldrSÚ releasefnrOr:r4Ú_maybedelayedinterruptr ÚnullcontextmanagerÚ postreleaseÚ_getpidr>rDrN) ÚselfrQÚfnamerSr_rOr:Ú signalsaferBs rÚ__init__z lock.__init__ÃsŽ€ðˆŒØˆŒØˆŒ ؈Œ Ø"ˆŒØ"ˆŒØˆŒ Ù Ü*;ˆDÕ 'ä*.×*AÑ*AˆDÔ 'ØˆÔØ—<‘<“>ˆŒÙ ØŸ™›ˆDŒJØ�~Š~Ø—‘Õ ðð r#có—|Sr%©©rds rÚ __enter__zlock.__enter__às€Øˆ r#cóR—td„|||fD««}|j|¬«y)Nc3ó$K—|]}|du–—Œ y­wr%ri)Ú.0Úas rÚ z lock.__exit__..äsèø€ÐGÑ)F A�a˜4”iÑ)Fùs‚)Úsuccess)ÚallÚrelease)rdÚexc_typeÚ exc_valueÚexc_tbrqs rÚ__exit__z lock.__exit__ãs'€ÜÑG¨(°I¸vÑ)FÓGÓGˆØ � ‰ ˜Wˆ Õ%r#có‚—|jr#tjdtd¬«d|_|j «y)Nz$use lock.release instead of del locké)ÚcategoryÚ stacklevelr)r^ÚwarningsrHÚDeprecationWarningrsrjs rÚ__del__z lock.__del__çs0€Ø �9Š9Ü �M‰MØ6Ü+Øõ ðˆDŒIà � ‰ �r#có*—tj«Sr%)r Úgetpidrjs rrcz lock._getpidõs€ä�‰Ó Ð r#cól—|j} |j«|j|z S#tj$rr}|dk7r$t j d«|dkDr|dz}Yd}~Œ]tjt j|j|j|j«‚d}~wwxYw)Nrr) rSrErrFrLrMrIrJrKr:r<)rdrSrYs rrDz lock.lockùsŽ€Ø—,‘,ˆØð Ø— ‘ ”Ø—|‘| gÑ-Ð-øÜ—>‘>ò ؘa’<Ü—J‘J˜q”MØ ’{Ø 1™ ˜ÜÜ—n‘nÜ—O‘O T§]¡]°D·I±I¸t¿{¹{óðûð  ús�.®B3Á$B.Á*AB.Â.B3cóh—|jr|xjdz c_ytj€t«t_dtj|jfz}d}|js]|r[|dz} |j «5|j j||j«d|_ddd«|js|rŒ[|jsStj tj"|j j%|j«|j&d«‚y#1swYŒxxYw#ttf$ræ}|jtjk(r~|j«}|€Yd}~�Œ|j|«}|�“tj tj"|j j%|j«|j&|«‚tj(|j|j*|j,|j&«‚Yd}~�Œkd}~wwxYw)Nrs%s:%dér#)r^rDÚ_hostrr>r`rQÚmakelockr]ÚOSErrorÚIOErrorrIÚEEXISTÚ _readlockÚ _testlockrrFÚEAGAINÚjoinr:ÚLockUnavailableÚstrerrorrK)rdrRÚretryÚwhyr<s rrEz lock._trylock sž€Ø �9Š9Ø �IŠI˜‰N�IØ Ü �:‰:Ð Ü'Ó)ŒDŒJØœtŸz™z¨4¯8©8Ð4Ñ4ˆØˆØ—)’)¡Ø �Q‰JˆEð Ø×0Ñ0Õ2Ø—H‘H×%Ñ% h°·±Ô7Ø !�D”I÷3ð—)’)¢ð2�yŠyô—.‘.Ü— ‘ ˜dŸh™hŸm™m¨D¯F©FÓ3°T·Y±YÀóð ð÷-3Ð2ûôœWÐ%ò Ø—9‘9¤§ ¡ Ò,Ø!Ÿ^™^Ó-�FØ�~Ý à!Ÿ^™^¨FÓ3�FØÐ)Ü#Ÿn™nÜ!ŸL™LØ ŸH™HŸM™M¨$¯&©&Ó1Ø ŸI™IØ"ó ðô ×/Ñ/ØŸ ™  3§<¡<°·±¸t¿y¹yóðõ*ûð ús7Á;D< .D0Â9D<Ä0D9Ä5D<Ä<H1Å /H,ÆB&H,È,H1cól— |jj|j«S#t$rYywxYw)z“read lock and return its value Returns None if no lock exists, pid for old-style locks, and host:pid for new-style locks. N)rQÚreadlockr]rrjs rr‰zlock._readlock1s2€ð  Ø—8‘8×$Ñ$ T§V¡VÓ,Ð ,øÜ ò Ùð ús ‚$'§ 3²3cóÞ—|€y |jdd«\}}|tjk7ry t |«}t j |«ryy#t$rYywxYw#t$rYywxYw)NFr7rT)r8r/rDr„Úintr Útestpid)rdr<r=r>s rÚ_lockshouldbebrokenzlock._lockshouldbebroken<s€Ø ˆ>Øð ØŸ ™  T¨1Ó-‰IˆD�#ð ”4—:‘:Ò Øð Ü�c“(ˆCô × Ñ ˜CÔ ØØøôò Ùð ûô ò Ùð ús"…A¯ A Á AÁAÁ A,Á+A,cóx—|j|«s|S t|j|jdzd¬«5|j «}|j|«s |cddd«S|jj |j«ddd«y#1swYyxYw#t j$r|cYSwxYw)Ns.breakr)rS)r–rDrQr]r‰ÚunlinkrÚ LockError©rdr<s rrŠzlock._testlockMs“€Ø×'Ñ'¨Ô/؈Mð Ü�d—h‘h §¡¨Ñ 2¸AÖ>ØŸ™Ó)�Ø×/Ñ/°Ô7Ø!÷?Ñ>ð—‘—‘ §¡Ô'÷ ?×>Ñ>ûô �‰ò ØŠMð ús:•%B!º#BÁ B!Á'%B B!ÂBÂB!ÂB!Â!B9Â8B9cóD—|j«}|j|«S)aoreturn id of locker if lock is valid, else None. If old-style lock, we cannot tell what machine locker is on. with new-style lock, if locker is on this machine, we can see if locker is alive. If locker is on this machine but not alive, we can safely break lock. The lock file is only deleted when None is returned. )r‰rŠršs rÚtestlockz lock.testlock\s€ð—‘Ó!ˆØ�~‰~˜fÓ%Ð%r#có—|jdkDr|xjdzc_y|jdk(r‰d|_|j«|jk7ry |jr|j« |jj |j «|jD] }||«Œ d|_yy#t$rYŒ-wxYw# |jj |j «w#t$rYwwxYwxYw)z¬release the lock and execute callback function if any If the lock has been acquired multiple times, the actual release is delayed to the last release call.rrN) r^rcr>r_rQr˜r]r†rb)rdrqÚcallbacks rrsz lock.releasejsÚ€ð �9‰9�qŠ=Ø �IŠI˜‰NŽIØ �Y‰Y˜!Š^؈DŒIØ�|‰|‹~ §¡Ò)àð Ø—>’>Ø—N‘NÔ$ðØ—H‘H—O‘O D§F¡FÔ+ð !×,Ô,�Ù˜Õ!ð-ð $ˆDÕ ð%øôòÙðûðØ—H‘H—O‘O D§F¡FÕ+øÜòÙðýsBÁCÁ8%B?Â? C à C ÃDÃ%C6Ã5DÃ6 DÃ?DÄDÄD)rCNNNTT)T)Ú__name__Ú __module__Ú __qualname__Ú__doc__r„rgrkrwr~rcrDrEr‰r–rŠrœrsrir#rrDrD¯s_„ñð" €Eð ØØØ ØØó!ò:ò&ò ò!òò &òP òò" ò &ô$r#rDcó8—|D]}|€Œ|j«Œyr%)rs)ÚlocksrDs rrsrs†s€ÛˆØ Ñ Ø �L‰L�Nñr#)Ú contextlibrIrrr rLr|Úi18nrrrÚrrr Úutilsr rÚcontextmanagerr4rZrDrsrir#rÚrªsiðóÛ Û Û Û Û ÛåÝ÷óõò ð  ×Ññ?(óð?(òD; ÷|T$ñT$ónr#