Ë ñ^aë]�,|ãó@—dZddlZddlmZddlmZddlmZm Z m Z m Z m Z m Z mZmZmZmZddlmZdZiZe j,e«Ze j.«Ze j0«Zedd d ¬ «edd d ¬ «edd d¬ «Gd„dej2j4«ZGd„d«Zd„Zd„Zd„Zedddh¬«d„«Z edddh¬«d„«Z!edddh¬«d„«Z"d„Z#ed«d „«Z$ed!«d"„«Z%ed#«d$„«Z&y)%a@ showing remotebookmarks and remotebranches in UI (EXPERIMENTAL) By default both remotebookmarks and remotebranches are turned on. Config knob to control the individually are as follows. Config options to tweak the default behaviour: remotenames.bookmarks Boolean value to enable or disable showing of remotebookmarks (default: True) remotenames.branches Boolean value to enable or disable showing of remotebranches (default: True) remotenames.hoistedpeer Name of the peer whose remotebookmarks should be hoisted into the top-level namespace (default: 'default') éN)Ú_)Úbin) Ú bookmarksÚerrorÚ extensionsÚ logexchangeÚ namespacesÚ registrarÚ revsetlangÚsmartsetÚ templateutilÚutil)Ú stringutilsships-with-hg-coreó remotenamesó bookmarksT)Údefaultóbranchesó hoistedpeersdefaultcóV—eZdZdZd„Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z d „Z d „Z d „ZeZy )Úlazyremotenamedictaü Read-only dict-like Class to lazily resolve remotename entries We are doing that because remotenames startup was slow. We lazily read the remotenames file once to figure out the potential entries and store them in self.potentialentries. Then when asked to resolve an entry, if it is not in self.potentialentries, then it isn't there, if it is in self.potentialentries we resolve it and store the result in self.cache. We cannot be lazy is when asked all the entries (keys). cóJ—i|_i|_||_||_d|_y)NF)ÚcacheÚpotentialentriesÚ_kindÚ_repoÚloaded)ÚselfÚkindÚrepos ú5usr/lib/python3.12/site-packages/hgext/remotenames.pyÚ__init__zlazyremotenamedict.__init__Xs&€ØˆŒ Ø "ˆÔ؈Œ ؈Œ ؈� ócó°—d|_|j}tj||j«D] \}}}|dz|z}|||f|j |<Œ"y)z?Read the remotenames file, store entries matching selected kindTó/N)rrrÚreadremotenamefilerr)rrÚnodeÚrpathÚrnameÚnames r Ú_loadzlazyremotenamedict._load_s^€àˆŒ Ø�z‰zˆÜ"-×"@Ñ"@Ø �$—*‘*ö# Ñ ˆD�%˜ð˜4‘< %Ñ'ˆDØ+/°¸Ð*=ˆD× !Ñ ! $Ò 'ñ # r"có—||jvry|j|\}}}|j}t|«} |jj |«|j dk(r||j«ry|gS#t $rYywxYw)z;Check that the node for potentialentry exists and return itNr)rrrÚ changelogÚrevÚ LookupErrorrÚ closesbranch)rÚpotentialentryr&Úremoter)rÚbinnodes r Ú _resolvedatazlazyremotenamedict._resolvedatais�€à ×!6Ñ!6Ñ6ØØ!×2Ñ2°>ÑBшˆf�dØ�z‰zˆÜ�d“)ˆð Ø �N‰N× Ñ ˜wÔ 'ð �:‰:˜Ò $¨¨g©×)CÑ)CÔ)EØØˆyÐøô ò Ùð ús»A<Á< BÂBcóx—|js|j«|j|«}|�|St«‚©N)rr*Ú_fetchandcacheÚKeyError©rÚkeyÚvals r Ú __getitem__zlazyremotenamedict.__getitem__zs4€Ø�{Š{Ø �J‰JŒLØ×!Ñ! #Ó&ˆØ ˆ?؈Jä“*Ð r"có,—t|j«Sr5)Úiterr©rs r Ú__iter__zlazyremotenamedict.__iter__ƒs€Ü�D×)Ñ)Ó*Ð*r"có,—t|j«Sr5)Úlenrr>s r Ú__len__zlazyremotenamedict.__len__†s€Ü�4×(Ñ(Ó)Ð)r"có—t‚r5©ÚNotImplementedErrorr>s r Ú __setitem__zlazyremotenamedict.__setitem__‰ó€Ü!Ð!r"có—t‚r5rDr>s r Ú __delitem__zlazyremotenamedict.__delitem__ŒrGr"có†—||jvr|j|S|j|«}|�||j|<|Syr5)rr3r8s r r6z!lazyremotenamedict._fetchandcache�sF€Ø �$—*‘*Ñ Ø—:‘:˜c‘?Ð "Ø×Ñ Ó$ˆØ ˆ?Ø!ˆD�J‰J�s‰O؈Jàr"cón—|js|j«|jj«S)z&Get a list of bookmark or branch names)rr*rÚkeysr>s r rLzlazyremotenamedict.keys™s'€à�{Š{Ø �J‰JŒLØ×$Ñ$×)Ñ)Ó+Ð+r"c#ó®K—|js|j«|jj«D]\}}|t |d«gf–—Œy­w)z Iterate over (name, node) tuplesrN)rr*rÚitemsr)rÚkÚvtups r Ú iteritemszlazyremotenamedict.iteritemsŸsJèø€ð�{Š{Ø �J‰JŒLà×,Ñ,×2Ñ2Ö4‰GˆAˆtØ”s˜4 ™7“|�nÐ%Ó %ñ5ùs‚AAN)Ú__name__Ú __module__Ú __qualname__Ú__doc__r!r*r3r;r?rBrFrIr6rLrQrN©r"r rrLsE„ñ òò>òò"ò+ò*ò"ò"òò,ò &ð �Er"rcóF—eZdZdZd„Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z d „Z y ) Ú remotenamesa% This class encapsulates all the remotenames state. It also contains methods to access that state in convenient ways. Remotenames are lazy loaded. Whenever client code needs to ensure the freshest copy of remotenames, use the `clearnames` method to force an eventual load. có2—||_|j«yr5)rÚ clearnames)rrÚargss r r!zremotenames.__init__³s€ØˆŒ Ø �‰Õr"có�—td|j«|_td|j«|_|j «y)zClear all remote names staterrN)rrrÚbranchesÚ_invalidatecacher>s r rZzremotenames.clearnames·s2€ä+¨L¸$¿*¹*ÓEˆŒÜ*¨;¸¿ ¹ ÓCˆŒ Ø ×ÑÕr"có<—d|_d|_d|_d|_yr5)Ú _nodetobmarksÚ _nodetobranchÚ _hoisttonodesÚ _nodetohoistsr>s r r^zremotenames._invalidatecache½s"€Ø!ˆÔØ!ˆÔØ!ˆÔØ!ˆÕr"có—|jSr5)rr>s r Ú bmarktonodeszremotenames.bmarktonodesÃs €Ø�~‰~Ðr"cóì—|js]|j«}i|_|j«D]3\}}|jj|dg«j |«Œ5|jS)Nr)r`rerNÚ setdefaultÚappend)rrer)r&s r Ú nodetobmarkszremotenames.nodetobmarksÆsi€Ø×!Ò!Ø×,Ñ,Ó.ˆLØ!#ˆDÔ Ø*×0Ñ0Ö2‘ ��dØ×"Ñ"×-Ñ-¨d°1©g°rÓ:×AÑAÀ$ÕGð3à×!Ñ!Ð!r"có—|jSr5)r]r>s r Ú branchtonodeszremotenames.branchtonodesÎs €Ø�}‰}Ðr"cóô—|jsa|j«}i|_|j«D]7\}}|D]-}|jj|g«j |«Œ/Œ9|jSr5)rarkrNrgrh)rrkr)Únodesr&s r Ú nodetobranchzremotenames.nodetobranchÑsq€Ø×!Ò!Ø ×.Ñ.Ó0ˆMØ!#ˆDÔ Ø,×2Ñ2Ö4‘ ��eÛ!�DØ×&Ñ&×1Ñ1°$¸Ó;×BÑBÀ4ÕHñ"ð 5ð×!Ñ!Ð!r"cóø—|jsc|j«}i|_|dz }|j«D]4\}}|j|«sŒ|t |«d}||j|<Œ6|jS)Nr$)rbrerNÚ startswithrA©rÚhoistÚ marktonodesr)r&s r Ú hoisttonodeszremotenames.hoisttonodesÚs{€Ø×!Ò!Ø×+Ñ+Ó-ˆKØ!#ˆDÔ Ø �T‰MˆEØ)×/Ñ/Ö1‘ ��dØ—?‘? 5Õ)ؤ E£   Ð-�DØ/3�D×&Ñ& tÒ,ð2ð×!Ñ!Ð!r"có6—|js‚|j«}i|_|dz }|j«D]S\}}|j|«sŒ|t |«d}|jj |dg«j |«ŒU|jS)Nr$r)rcrerNrprArgrhrqs r Ú nodetohoistszremotenames.nodetohoistsås�€Ø×!Ò!Ø×+Ñ+Ó-ˆKØ!#ˆDÔ Ø �T‰MˆEØ)×/Ñ/Ö1‘ ��dØ—?‘? 5Õ)ؤ E£   Ð-�DØ×&Ñ&×1Ñ1°$°q±'¸2Ó>×EÑEÀdÕKð2ð×!Ñ!Ð!r"N) rRrSrTrUr!rZr^rerirkrnrtrvrVr"r rXrX«s4„ñòò ò "ò ò"òò"ò "ó "r"rXcóÄ—d|jvry|jd}|j|«D]$}|j||«}|sŒ|d}|ddf||<Œ&|||||«S)Nóremotebookmarksró r")ÚnamesÚ listnamesrm) ÚorigÚuirÚfmÚbmarksÚnsr)rmr&s r Úwrapprintbookmarksr�ñsu€Ø §¡Ñ+ØØ �‰Ð&Ñ '€Bà— ‘ ˜TÖ"ˆØ—‘˜˜tÓ$ˆÙØ Ø�Q‰xˆà˜d CÐ(ˆˆtŠ ð #ñ ��D˜"˜fÓ %Ð%r"cóB—tjtdt«y)Ns_printbookmarks)rÚ wrapfunctionrr�)r}s r Úextsetupr„s€Ü×ÑœIÐ'9Ô;MÕNr"c ó0‡—|jjdddd«|j«syt|«|_t j }|jdd«rt|ddddd „d „d „¬ «}|jj|«|jdd «Š‰r3|ddddˆfd„ˆfd„ˆfd„¬ «}|jj|«|jdd«r.|ddddd„d„d„¬ «}|jj|«yy)Ns experimentalrTsremotenames-extrrxóremotebookmarksremote bookmark: %s cóR—|jj«j«Sr5)Ú _remotenamesrerL©rs r Úzreposetup..s€ 4×#4Ñ#4×#AÑ#AÓ#C×#HÑ#HÔ#Jr"cóV—|jj«j|g«Sr5)rˆreÚget©rr)s r rŠzreposetup..ó#€ t×'8Ñ'8×'EÑ'EÓ'G×'KÑ'KØ�bô(r"cóV—|jj«j|g«Sr5)rˆrirŒ©rr&s r rŠzreposetup..rŽr")Ú templatenameÚ colornameÚlogfmtr{ÚnamemapÚnodemaprs hoistednamess hoistednameshoisted name: %s cóV•—|jj‰«j«Sr5)rˆrtrL)rrrs €r rŠzreposetup..(s%ø€ t×'8Ñ'8×'EÑ'EØó(ç‘$“&ð(r"cóZ•—|jj‰«j|g«Sr5)rˆrtrŒ)rr)rrs €r rŠzreposetup..+ó)ø€¨4×+<Ñ+<×+IÑ+IØó,ç‘#�d˜B“-ð, r"cóZ•—|jj‰«j|g«Sr5)rˆrvrŒ)rr&rrs €r rŠzreposetup...r˜r"róremotebranchesó remotebranchsremote branch: %s cóR—|jj«j«Sr5)rˆrkrLr‰s r rŠzreposetup..:s€ 4×#4Ñ#4×#BÑ#BÓ#D×#IÑ#IÔ#Kr"cóV—|jj«j|g«Sr5)rˆrkrŒr�s r rŠzreposetup..;s#€ t×'8Ñ'8×'FÑ'FÓ'H×'LÑ'LØ�bô(r"cóV—|jj«j|g«Sr5)rˆrnrŒr�s r rŠzreposetup..>rŽr") r}Ú setconfigÚlocalrXrˆr Ú namespaceÚ configboolrzÚ addnamespaceÚconfig)r}rr€ÚremotebookmarknsÚ hoistednamensÚremotebranchnsrrs @r Ú reposetupr¨s!ø€ð ‡G�G×Ñ�o ~°tÐ=OÔPà �:‰:Œ<Øä# DÓ)€DÔÜ × Ñ €Bà ‡}�}�^ \Ô2ÙØ Ø+Ø'Ø,ÙJññô  Ðð � ‰ ×ÑÐ 0Ô1ð— ‘ ˜.¨.Ó9ˆÙ ÙØØ,Ø(Ø-óó ó ôˆMð �J‰J× #Ñ # MÔ 2à ‡}�}�^ [Ô1ÙØ Ø*Ø%Ø*ÙKññô  ˆð � ‰ ×Ñ Õ/ð2r"órepoóctx)Úrequirescót—|j|d«}|j|d«}g}d|jvr-|jdj||j««}d|jvr0||jdj||j««z }tj||d|d¬«S)zz_revsetutil..–s$øèø€Ð 6™u˜!¨¯ © °1­ ˆB�F‰F�1�I™uùsƒ0š0)r ÚgetargsrrÚ stringmatcherÚ getstringrÚalwaysÚsetr,rzr{ÚupdatermrÚRepoLookupErrorr Úbaseset)rÚsubsetÚxÚrtypesr[rÚpatternÚmatcherrmÚrtyper€r)ÚrevsrÂs @r Ú _revsetutilrÓ}sø€ä × Ñ ˜a  A¤qÐ)FÓ'GÓ H€DÙ Ü!+×!9Ñ!9Ü × Ñ   a¡¬!Ð,HÓ*IÓ Jó" шˆg‘wðЈˆwÜ—+‘+ˆä ‹E€EØ �‰€BÛˆØ �D—J‘JÒ Ø—‘˜EÑ"ˆBØŸ ™  TÖ*�Ù˜t”}ØØ— ‘ ˜RŸX™X d¨DÓ1Õ2ñ+ðð ˆzÒ¡%Ü×#Ñ#Ü Ð0Ó 1°GÑ ;ó ð ó 7™uÓ 6€DØ ”H×$Ñ$ TÓ*Ñ *Ð*r"sremotenames([name])có—t|||d«S)zÜAll changesets which have a remotename on them. If `name` is specified, only remotenames of matching remote paths are considered. Pattern matching is supported for `name`. See :hg:`help revisions.patterns`. )rxrš©rÓ©rrÌrÍs r Úremotenamesrevsetrךs€ô �t˜V QÐ(OÓ PÐPr"sremotebranches([name])có—t|||d«S)zÞAll changesets which are branch heads on remotes. If `name` is specified, only remotenames of matching remote paths are considered. Pattern matching is supported for `name`. See :hg:`help revisions.patterns`. )ršrÕrÖs r ÚremotebranchesrevsetrÙ¤s€ô �t˜V QÐ(<Ó =Ð=r"sremotebookmarks([name])có—t|||d«S)zÜAll changesets which have bookmarks on remotes. If `name` is specified, only remotenames of matching remote paths are considered. Pattern matching is supported for `name`. See :hg:`help revisions.patterns`. )rxrÕrÖs r ÚremotebmarksrevsetrÛ®s€ô �t˜V QÐ(=Ó >Ð>r")'rUÚcollections.abcÚ collectionsÚmercurial.i18nrÚmercurial.noderÚ mercurialrrrrr r r r r rÚmercurial.utilsrÚ testedwithÚ configtableÚ configitemÚtemplatekeywordÚrevsetpredicateÚabcÚMutableMappingrrXr�r„r¨rµr¸r»rÓr×rÙrÛrVr"r ÚrésŽðñó&åå÷ ÷ ÷ õ'ð #€ à€ Ø !ˆY× !Ñ ! +Ó .€ Ø+�)×+Ñ+Ó-€Ø+�)×+Ñ+Ó-€á ØØØ õñ  ØØØ õñ  ØØØ õô\˜Ÿ™×7Ñ7ô\÷~C"ñC"òL &ò Oò=0ñ@�¨7°FÐ*;Ô<ñó=ðñ"Ð#¨w¸Ð.?Ô@ñóAðñ$Ð"¨g°vÐ->Ô?ñó@ðò$+ñ:Ð'Ó(ñQó)ðQñÐ*Ó+ñ>ó,ð>ñÐ+Ó,ñ?ó-ñ?r"