Ë ÞXJY¯±ŠãóÞ—ddlZddlZddlmZddlmZddlmZmZmZm Z m Z m Z ddl m Z mZmZd„Zdd„ZGd „d «Zd „Z dd „Zd „Zd„ZGd„de j.«Z dd„Z dd„Zy)éNé)Ú_)Úgetattr)ÚerrorÚpycompatÚutilÚwireprototypesÚwireprotov1peerÚwireprotov1server)ÚprocutilÚ stringutilÚurlutilcód—|s|Stjd|«r|Sd|jdd«zS)z=quote a string for the remote shell ... which we assume is shs[a-zA-Z0-9@%_+=:,./-]*$s'%s'ó's'\'')ÚreÚmatchÚreplace)Úss ú5usr/lib/python3.12/site-packages/mercurial/sshpeer.pyÚ _serverquoters4€á ØˆÜ ‡x�xÐ*¨AÔ.ØˆØ �Q—Y‘Y˜t XÓ.Ñ .Ð.ócóØ—|rh|js[tj|«}|rC|r |jn |j}|j «D]}|t d«|d«Œyyyy)zYdisplay all data currently available on pipe as remote output. This is non blocking.óremote: ó N)Úclosedr ÚreadpipeÚwarnÚstatusÚ splitlinesr)ÚuiÚpiperrÚdisplayÚls rÚ_forwardoutputr$&s]€ñ �D—K’KÜ × Ñ ˜dÓ #ˆÙ Ù!%�b—g’g¨2¯9©9ˆGØ—\‘\–^�Ùœ˜+›¨¨5Õ1ñ$ð ð €trcóX—eZdZdZd„Zd„Zd„Zd„Zd„Zd„Z d d „Z d „Z e d „«Z d „Zy)Ú doublepipea3Operate a side-channel pipe in addition of a main one The side-channel pipe contains server output to be forwarded to the user input. The double pipe will behave as the "main" pipe, but will ensure the content of the "side" pipe is properly processed while we wait for blocking call on the "main" pipe. If large amounts of data are read from "main", the forward will cease after the first bytes start to appear. This simplifies the implementation without affecting actual output of sshpeer too much as we rarely issue large read for data not yet emitted by the server. The main pipe is expected to be a 'bufferedinputpipe' from the util module that handle all the os specific bits. This class lives in this module because it focus on behavior specific to the ssh protocol.có.—||_||_||_y©N)Ú_uiÚ_mainÚ_side)Úselfr ÚmainÚsides rÚ__init__zdoublepipe.__init__Cs€ØˆŒØˆŒ ؈� rcóž—t|jtj«r|jjry|jj «|j j «g} tj|«}|jj «|v|j j «|vfS#t$r|}YŒEwxYw)zÉwait until some data are available on main or side return a pair of boolean (ismainready, issideready) (This will only wait for data if the setup is supported by `util.poll`) )TT) Ú isinstancer*rÚbufferedinputpipeÚ hasbufferÚfilenor+ÚpollÚNotImplementedError)r,ÚfdsÚacts rÚ_waitzdoublepipe._waitHs§€ô �t—z‘z¤4×#9Ñ#9Ô :Ø— ‘ ×$Ò$ðà�z‰z× Ñ Ó" D§J¡J×$5Ñ$5Ó$7Ð8ˆð Ü—)‘)˜C“.ˆCð— ‘ ×!Ñ!Ó# sÐ*¨D¯J©J×,=Ñ,=Ó,?À3Ð,FÐGÐGøô#ò àŠCð úsÁ1B>Â> C à C có&—|jd|«S)Nswrite©Ú_call)r,Údatas rÚwritezdoublepipe.write^s€Ø�z‰z˜( DÓ)Ð)rcóx—|jd|«}|dk7r"|s t|j|j«|S)Nsreadr©r<r$r)r+©r,ÚsizeÚrs rÚreadzdoublepipe.readas4€Ø �J‰J�w Ó %ˆØ �1Š9™Qô ˜4Ÿ8™8 T§Z¡ZÔ 0؈rcóx—|jd|«}|dk7r"|s t|j|j«|S)Nsunbufferedreadrr@rAs rÚunbufferedreadzdoublepipe.unbufferedreadls5€Ø �J‰JÐ(¨$Ó /ˆØ �1Š9™Qô ˜4Ÿ8™8 T§Z¡ZÔ 0؈rcó$—|jd«S)Nsreadliner;©r,s rÚreadlinezdoublepipe.readlinews€Ø�z‰z˜+Ó&Ð&rNcó8—|�|r|jjr!t|j|j«y |j «\}}|r t|j|j«|r't |j|«}|€|«S||«SŒ_)zBcall on "main", forward output of "side" while blockingr)r*rr$r)r+r9r)r,Úmethnamer=Ú mainreadyÚ sidereadyÚmeths rr<zdoublepipe._callzsƒ€ð Ð ¡T¨d¯j©j×.?Ò.?Ü ˜4Ÿ8™8 T§Z¡ZÔ 0ØØØ#'§:¡:£<Ñ ˆI�yÙܘtŸx™x¨¯©Ô4ÙܘtŸz™z¨8Ó4�Ø�<Ù›6�Má ›:Ð%ðrcó6—|jj«Sr()r*ÚcloserHs rrPzdoublepipe.close‹ó€Ø�z‰z×ÑÓ!Ð!rcó.—|jjSr()r*rrHs rrzdoublepipe.closedŽs€à�z‰z× Ñ Ð rcó6—|jj«Sr()r*ÚflushrHs rrTzdoublepipe.flush’rQrr()Ú__name__Ú __module__Ú __qualname__Ú__doc__r/r9r>rDrFrIr<rPÚpropertyrrT©rrr&r&2sJ„ñBò ò Hò,*ò ò ò'ó&ò""ðñ!óð!ó"rr&cón—d}|r|jsd}|j«|r|jsd}|j«|rB|js6d} |D]}|jtd«|«Œ |j«|r|�|j d|z«yyy#tt f$rYŒ.badresponseâs=ø€ô �r˜6¨Õ-äÐ6Ó7ˆØ�y‰y˜ Ó0ˆÜ�o‰o˜c¨Ô-Ð-ródevelódebug.peer-requests%s-%s)ó(0000000000000000000000000000000000000000r‘shello sbetween s pairs %d s"devel-peer-request: hello+between s&devel-peer-request: pairs: %d bytes ssending hello command ssending between command rs^upgraded %s (.*)$sdummyiôéÿÿÿÿTr‡rsprotocol upgraded to %s s1 rrs capabilities:ó:)Ú configboolrÚsysbytesÚstrÚuuidÚuuid4Úlenrjr>r€rTr\r ÚSSHV1rÚcompiler ÚreescaperIr$rÚgroupÚappendÚsetÚreversedÚ startswithÚupdateÚsplit)r rsrtrurŽÚ requestlogÚtokenÚpairsargÚ handshakeÚ protonameÚ reupgradedÚlinesÚ max_noiser#ÚmÚcapss` ` rÚ_performhandshaker®ás[ù€õ .ð@—‘˜xÐ)>Ó?€Jô × Ñ œc¤$§*¡*£,Ó/Ó 0€EðØÐ4Ñ4ˆà Ø Ø œC ›MÑ )Ø ð  ˆ ñ Ø �H‰HÐ;Ô <Ø �H‰HÐ?Ä#ÀhÃ-ÑOÔ PØ �‰Ð+Ô,Ø �‰Ð-Ô.à � ‰ �C—H‘H˜YÓ'Ô(Ø � ‰ Œ ô ×$Ñ$€IÜ—‘Ð1´J×4GÑ4GÈÓ4NÑNÓO€Jà �(ˆO€EØ€IØ �Š)™ ð Ø—‘Ó!ˆAÜ ˜2˜v¨DÕ 1ð× Ñ  Ó#ˆAÙØŸG™G A›J� Ø—‘Ð5¸ ÑAÔBðð �R‰y˜FÒ" q¨E¢zØÙØ—‘˜ aÔ(Ø �L‰L˜ŒOØ ˜‰NˆIð1 �Š)š ñ8 Œ ä ‹5€Dð”N×(Ñ(Ò(ܘ%–ˆAð�|‰|Ð,Õ-Ø— ‘ ˜A˜c˜r˜FŸL™L¨Ó.¨qÑ1×7Ñ7Ó9Ô:Ùð !ñ ÙŒ ô�2�v DÕ)à �dˆ?Ðøô òÙ� ðûôDò Ù ŽMð ús2Á BIÄ.AI2Æ I2Æ*I2ÉI/É.I/É2JÊJc󜇗eZdZ dˆfd„ ZdhZd„Zd„Zd„Zd„Zd„Z d„Z d „Z dd „Z d „Z dd „Zd „Zd„Zd„Zd„Zd„Zd„Zd„Zdd„ZˆxZS)Ú sshv1peerc ó<•—t‰ |�||| ¬«||_|r-t|t j |«|«}t|||«}||_||_||_||_ ||_ djt jd««|_ | |_y)aŽCreate a peer from an existing SSH connection. ``proc`` is a handle on the underlying SSH process. ``stdin``, ``stdout``, and ``stderr`` are handles on the stdio pipes for that process. ``caps`` is a set of capabilities supported by the remote. ``autoreadstderr`` denotes whether to automatically read from stderr and to forward its output. )rorqrrN)Úsuperr/Ú _subprocessr&rr2Ú_pipeoÚ_pipeiÚ_pipeeÚ_capsÚ_autoreadstderrr€ÚgetstackframesÚ _initstackÚ _remotehidden) r,r rorvrsrtrur­ÚautoreadstderrrqÚ __class__s €rr/zsshv1peer.__init__|s–ø€ô* ‰Ñ˜ $°\ÐÔBð ˆÔñ Ü ¤D×$:Ñ$:¸6Ó$BÀFÓKˆFܘr 5¨&Ó1ˆEàˆŒ ؈Œ ؈Œ ؈Œ Ø-ˆÔØŸ(™(¤4×#6Ñ#6°qÓ#9Ó:ˆŒØ)ˆÕrsbatchcó.—|jjSr()roÚlocrHs rÚurlz sshv1peer.url¬s€Ø�y‰y�}‰}Ðrcó—yr(rZrHs rÚlocalzsshv1peer.local¯ó€Ørcó—y)NTrZrHs rÚcanpushzsshv1peer.canpush²rÃrcó$—|j«yr(©Ú_cleanuprHs rrPzsshv1peer.closeµs €Ø � ‰ �rcó—|jSr()r·rHs rÚ capabilitieszsshv1peer.capabilities¼s €Ø�z‰zÐrcóD—t|j|j«yr()r$r r¶rHs rÚ_readerrzsshv1peer._readerrÁs€Ü�t—w‘w § ¡ Õ,rcó&—|j«|‚r(rÇ)r,Ú exceptions rÚ_abortzsshv1peer._abortÄs€Ø � ‰ ŒØˆrcót—t|j|j|j|j|¬«y©Nr‡)rcr rµr´r¶)r,rs rrÈzsshv1peer._cleanupÈs"€Ü�d—g‘g˜tŸ{™{¨D¯K©K¸¿¹È4ÖPrcó<—|j|j¬«yrÑ)rÈrºrHs rÚ__del__zsshv1peer.__del__Ës€Ø � ‰ ˜4Ÿ?™?ˆ Õ+rc ó—|jjrÅ|jjdd«r©|jj}d}|||z«t |j ««D]j\}}t |t«s||dz|t|«fz«Œ0t |j ««D]\}} ||dz||t| «fz«Œ!Œl|jjd|z«|jjd|z«tj|\} } | j«} i} | D]}|dk(r|| d<n ||| |<||=Œt | j ««D]¶\}}|jjd |t|«fz«t |t«r]|j «D]I\}} |jjd |t| «fz«|jj| «ŒKŒœ|jj|«Œ¸|jj«|r0|j«}t!j"|j$|«S|j$S) Nr�r�sdevel-peer-request: %s s %s: %d bytess %s-%s: %dssending %s command s%s ó*s%s %d )r Ú debugflagr”rjÚsortedÚitemsr1Údictr™r´r>r Úcommandsr£rTÚ _getamountrÚ cappedreaderrµ)r,rrrmÚframedÚdbgÚlineÚkeyÚvalueÚdkÚdvÚ_funcÚnamesÚkeysÚwireargsÚkÚvÚamounts rÚ _sendrequestzsshv1peer._sendrequestÎs€Ø �7‰7× Ò  §¡×!3Ñ!3Ø Ð+ô" ð—'‘'—-‘-ˆCØ.ˆDÙ ��s‘ ŒOÜ$ T§Z¡Z£\Ö2‘ ��UÜ! %¬Ô.Ù˜Ð0Ñ0°C¼¸U»Ð3DÑDÕEä"(¨¯©«Ö"7™˜˜BÙ˜D >Ñ1°S¸"¼cÀ"»gÐ4FÑFÕGñ#8ð 3ð �‰� ‰ Ð-°Ñ3Ô4Ø � ‰ ×ј' C™-Ô(Ü(×1Ñ1°#Ñ6‰ ˆˆuØ�{‰{‹}ˆØˆÛˆAØ�DŠyØ!%�˜‘Ùà" 1™g�˜‘ ؘ‘Gð ô˜8Ÿ>™>Ó+Ö,‰DˆAˆqØ �K‰K× Ñ ˜j¨A¬s°1«v¨;Ñ6Ô 7ܘ!œTÔ"ØŸg™gži‘F�B˜Ø—K‘K×%Ñ% j°B¼¸B»°=Ñ&@ÔAØ—K‘K×%Ñ% bÕ)ñ(ð— ‘ ×!Ñ! !Õ$ð-ð � ‰ ×ÑÔñ Ø—_‘_Ó&ˆFÜ×$Ñ$ T§[¡[°&Ó9Ð 9à�{‰{Ðrc ól—tj|«}|j||||jv¬«S©N©rÝ©rÚ byteskwargsrëÚ_FRAMED_COMMANDS©r,rrrms rÚ _callstreamzsshv1peer._callstreamûó5€Ü×#Ñ# DÓ)ˆØ× Ñ   d°3¸$×:OÑ:OÐ3OÐ ÓPÐPrc ól—tj|«}|j||||jv¬«Srírïròs rÚ_callcompressablezsshv1peer._callcompressableÿrôrc óp—tj|«}|j||d¬«j«S)NTrî)rrðrërDròs rr<zsshv1peer._calls3€Ü×#Ñ# DÓ)ˆØ× Ñ   d°4Ð Ó8×=Ñ=Ó?Ð?rc óö‡—|j|fi|¤Ž}|rd|fStˆfd„d«D]}|j|«Œ|jdd¬«|j«}|rd|fS|j«dfS)Nrcó&•—‰jd«S©Ni©rD©Úfps€rÚz%sshv1peer._callpush..ó ø€˜bŸg™g dœmrT©rT)r<ÚiterÚ _writeframedÚ _readframed©r,rrrýrmrCÚds ` rÚ _callpushzsshv1peer._callpushs‹ø€ð ˆD�J‰J�sÑ #˜dÑ #ˆÙ ؘ�6ˆMôÓ+¨SÖ1ˆAØ × Ñ ˜aÕ ð2à ×ј# TÐÔ*ð × Ñ Ó ˆÙ ؘ�6ˆMØ×ÑÓ! 3Ð&Ð&rc óø‡—|j|fi|¤Ž}|r!tjtd«|z«‚t ˆfd„d«D]}|j |«Œ|j dd¬«|j S)Nsunexpected remote reply: %scó&•—‰jd«Srúrûrüs€rrþz-sshv1peer._calltwowaystream..&rÿrrTr)r<rÚAbortrrrrµrs ` rÚ_calltwowaystreamzsshv1peer._calltwowaystreamsvø€ð ˆD�J‰J�sÑ #˜dÑ #ˆÙ ä—+‘+œaÐ >Ó?À!ÑCÓDÐ DôÓ+¨SÖ1ˆAØ × Ñ ˜aÕ ð2à ×ј# TÐÔ*à�{‰{Ðrcó¢—|jj«}|dk(rL|jr|j«t d«}|j t j|¬««|jr|j« t|«S#t$r1|j t jt d«|««YywxYw)Nrscheck previous remote outputr‰sunexpected response:) rµrIr¸rÌrrÏrÚOutOfBandErrorÚintr]Ú ResponseError)r,r#r�s rrÛzsshv1peer._getamount,s €Ø �K‰K× Ñ Ó "ˆØ �Š:Ø×#Ò#Ø— ‘ ”ÜÐ3Ó4ˆCØ �K‰Kœ×,Ñ,°#Ô6Ô 7Ø × Ò Ø �M‰MŒOð LÜ�q“6ˆMøÜò LØ �K‰Kœ×+Ñ+¬AÐ.EÓ,FÈÓJÖ Kð Lús BÂ7Cà Ccó^—|j«}|sy|jj|«S)Nr)rÛrµrD)r,rBs rrzsshv1peer._readframed:s)€Ø�‰Ó ˆÙØà�{‰{×Ñ Ó%Ð%rcóþ—|jjdt|«z«|r|jj|«|r|jj«|jr|j «yy)Ns%d )r´r>r™rTr¸rÌ)r,r=rTs rrzsshv1peer._writeframedAs\€Ø � ‰ ×ј'¤C¨£IÑ-Ô.Ù Ø �K‰K× Ñ ˜dÔ #Ù Ø �K‰K× Ñ Ô Ø × Ò Ø �M‰M�Oð r©TFr(©F)rUrVrWr/rñrÀrÂrÅrPrÊrÌrÏrÈrÓrërórör<rr rÛrrÚ __classcell__)r½s@rr°r°{s~ø„ðØõ&*ðV ðÐò òòòòò -òóQò,ó+òZQòQò@ò'ò*ò Lò&÷rr°c ó— t||||«\}} |tjk(rt ||||||| ||¬« St||||d¬«t jtd«|z«‚#t$rt||||d¬«‚wxYw)añMake a peer instance from existing pipes. ``path`` and ``proc`` are stored on the eventual peer instance and may not be used for anything meaningful. ``stdin``, ``stdout``, and ``stderr`` are the pipes connected to the SSH server's stdio handles. This function is factored out to allow creating peers that don't actually spawn a new process. It is useful for starting SSH protocol servers and clients via non-standard means, which can be useful for testing. Nr‡)r¼rqs#unknown version of SSH protocol: %s) r®Ú Exceptionrcr ršr°rrŒr) r rorvrsrtrur¼rqr¨r­s rÚ _make_peerrKs¨€ð.Ü+¨B°°v¸vÓF‰ˆ �4ð ”N×(Ñ(Ò(ÜØ Ø Ø Ø Ø Ø Ø Ø)Ø%ô  ð ô �b˜& %¨°dÕ;Ü�o‰oÜ Ð4Ó 5¸ Ñ Aó ð øô% òÜ�b˜& %¨°dÕ;Ø ðús ‚A+Á+Bc ó4—tj|jdd¬«}|jdk7s|jr |j €!t jtd«|z«‚tj|j«|j�t jtd««‚|jdd«}|jdd«}t|jd««} tj| «} |j xsd } tj ||j|j"|j$«} |r�|rt jtd ««‚d || tj&d t)|«t)| «fz«fz} |j+d | z«|j-| d| ¬«}|dk7rt jtd««‚t/||| || | |¬«\}}}}t1|||||||¬«}d|j3«vr6 |j5ddj7t9t;«««¬«|S|S#t<$r/|j?«t jtd««‚wxYw)ziCreate an SSH peer. The returned object conforms to the ``wireprotov1peer.wirepeer`` interface. F)Ú parsequeryÚ parsefragmentssshscouldn't parse location %sspassword in URL not supportedrˆs remotecmdssshenvó.s8cannot create remote SSH repositories with extra optionsres %s init %srfssshpeer)Ú blockedtagÚenvironrscould not create remote repo)rqs protocapsó )r­scapability exchange failed) rrÀr¿ÚschemeÚhostrorrŒrÚ checksafesshÚpasswdr‹rÙÚ configitemsr Ú shellenvironÚsshargsÚuserÚportrirrjÚsystemrwrrÊr<r€r×r„r\rÈ)r roÚcreateÚintentsÚ createoptsrqÚurlrnÚ sshaddenvrpÚ remotepathrmrrÚresrvrsrtruÚpeers rÚ make_peerr0{sZ€ô � ‰ �D—H‘H¨¸eÔD€A؇x�x�6Ò §¢¨1¯6©6¨>Ü�o‰oœaÐ =Ó>ÀÑEÓFÐFä ×јŸ™Ô"à‡x�xÐÜ�o‰oœaÐ @ÓAÓBÐBà �Y‰Y�u˜fÓ %€FØ— ‘ ˜% Ó.€IÜ�R—^‘^ IÓ.Ó/€IÜ × "Ñ " 9Ó -€FØ—‘’˜4€Jä × Ñ ˜F A§F¡F¨A¯F©F°A·F±FÓ ;€Dá ñ Ü—/‘/Üð*óóð ðØ Ø Ü × Ñ ØÜ  Ó*¬L¸Ó,DÐEñFó ð ñ ˆð �‰� 3Ñ&Ô'Ø�i‰i˜¨ ¸FˆiÓCˆØ �!Š8Ü—/‘/¤!Ð$CÓ"DÓEÐ Eä"1Ø ØØ ØØØØ!ô#Ñ€Dˆ%�˜ô Ø ˆD�$˜˜v v¸Lô €Dð �t×(Ñ(Ó*Ñ*ð DØ �J‰JØ 4§9¡9¬VÔ4GÓ4IÓ-JÓ#Kð ô ð €Kˆ4€Køô ò DØ �M‰MŒOÜ—/‘/¤!Ð$AÓ"BÓCÐ Cð Dús È(3IÉ8Jr)NFr)NNF)rr—Úi18nrrrÚrrr r r Úutilsr r rrr$r&rcrwr„r®Úwirepeerr°rr0rZrrÚr5sŒðó Û åÝ÷÷÷ñò/ó 2÷a"ña"òHPð>BGó'ò> òWôtM�×(Ñ(ôMðnØó- ðbCHôKr