ó
    6°hs  ã                  óÎ   • S SK Jr  S SKrS SKrS SKJr  S SKJrJrJ	r	J
r
JrJr  S SKJr  SSKJr  S rS	 rS
 rS rS rS rS r\R0                  S 5       rSS jrS rS rS rg)é    )ÚannotationsN)Ú_)ÚerrorÚ
extensionsÚhgÚutilÚwireprotov1peerÚwireprotov1server)Úurlutilé   )Úcontextc                óv   • U R                  SS5      nU(       d  [        R                  " [        S5      5      eU$ )z)get the mainbranch, and enforce it is setó   fastannotates
   mainbranchsF   fastannotate.mainbranch is required for both the client and the server)Úconfigr   ÚAbortr   )ÚuiÚmasters     Ú=/usr/lib/python3/dist-packages/hgext/fastannotate/protocol.pyÚ
_getmasterr      s:   € à�Y‰Y�¨Ó6€FÞÜ�kŠkÜð6óó
ð 	
ð €Mó    c                ó8   • U " X5      nUR                  S5        U$ )Nó   getannotate)Úappend)ÚorigÚrepoÚprotoÚresults       r   Ú_capabilitiesr   -   s   € Ù�$Ó€FØ
‡M�M�.Ô!Ø€Mr   c                óª  • SnU R                   R                  SSS5      n[        R                  " X5       nU(       aM  [	        U R                   5      n UR                  U5      (       d  UR                  Xw5        UR                  5         UR                  U:w  a¤  UR                  UR                  4 Hˆ  n[        R                  R                  U5      (       d  M)  [!        US5       n	U	R#                  5       n
S S S 5        [%        U R&                  R(                  S-   5      nX‹S  nUSU[%        W
5      U
4-  -  nMŠ     S S S 5        U$ ! [         aG    UR                  5          UR                  Xw5         Nü! [         a    UR                  5           GNf = ff = f! UR                  5         f = f! , (       d  f       N¿= f! , (       d  f       U$ = f)Nr   r   s   serverbuildondemandTÚrbó   /s   %s %d %s)r   Ú
configboolr   Úannotatecontextr   Ú
isuptodateÚannotateÚ	ExceptionÚrebuildÚcloseÚlastnodeÚ
revmappathÚlinelogpathÚosÚpathÚexistsÚopenÚreadÚlenÚvfsÚbase)r   r   r-   r)   r   ÚbuildondemandÚactxr   ÚpÚfÚcontentÚ
vfsbaselenÚrelpaths                r   Ú_getannotater;   3   s|  € ð €FØ—G‘G×&Ñ&ØÐ/°ó€Mô 
×	 Ò	  Ô	,°Þä §¡Ó(ˆFðØ—‘ v×.Ñ.Ø—M‘M &Ô1ð —
‘
”ð
 �=‰=˜HÓ$Ø—o‘o t×'7Ñ'7Ó8�Ü—w‘w—~‘~ a×(Ñ(ÙÜ˜!˜T”] aØŸf™f›h�G÷ #ä  §¡§¡°Ñ!5Ó6�
Ø˜K˜.�Ø˜-¨7´C¸³LÀ'Ð*JÑJÑJ’ñ 9÷1 
-ð@ €Møô3 ó #à—‘”ð#Ø—M‘M &Ö1øÜ ó #Ø—L‘L—N�Nð#úð#ûð —
‘
•ú÷ #•]ú÷7 
-Ô	,ð@ €Múss   ¶GÁ'E	Á;A-GÃ(F2Ã9AGÅ	FÅ$E7Å5FÅ7FÆFÆFÆFÆFÆFÆF/Æ/GÆ2
G Æ<GÇ
Gc                 óp   • S[         R                  ;   a  g [         R                  " SS5      " [        5        g )Nr   s   path lastnode)r
   ÚcommandsÚwireprotocommandr;   © r   r   Ú_registerwireprotocommandr@   ^   s-   € ØÔ*×3Ñ3Ó3ØÜ×&Ò& ~Ð7GÔHÜõr   c                óX   • [        5         [        R                  " [        S[        5        g )Nr   )r@   r   Úwrapfunctionr
   r   ©r   s    r   ÚserveruisetuprD   f   s   € ÜÔÜ×ÒÔ-¨ÄÕNr   c                ó  • 0 nSn[        U 5      S-
  nSnS=pVX#:  ai  XUS-    nUS:X  a;  US:X  a,  XS-   US-   [        U5      -    X'   U[        U5      -  nSnS=pVOUS:X  a  SnOUS:X  a  Xg-  nO
US:X  a  XW-  nUS-  nX#:  a  Mi  U$ )Nr   r   r   ó    )r1   Úint)Úpayloadr   ÚiÚlÚstateÚvfspathÚsizeÚchs           r   Ú_parseresponserO   n   sÁ   € Ø€FØ	€AÜˆG‹�qÑ€AØ€EØÐ€GØ
‹%Ø˜˜Q™ÐˆØ�‹;Ø˜‹zØ")¨a©%°!°a±%¼#¸d»)Ñ2CÐ"D�‘Ø”S˜“Y‘�Ø�Ø!$Ð$�˜$Ø˜!“Ø�øà˜‹zØ‘
‘Ø˜!“Ø‘�Ø	ˆQ‰ˆð �%ð  €Mr   c                óB   ^ •  " U 4S jSUR                   5      nX!l         g )Nc                  óD   >• \ rS rSr\R
                  SU 4S jj5       rSrg)Ú#peersetup.<locals>.fastannotatepeeréˆ   Nc                ó�   >• U R                  S5      (       d  TR                  [        S5      5        gX=(       d    SS.nU[        4$ )Nr   s*   remote peer cannot provide annotate cache
©NNr   ©s   paths   lastnode)ÚcapableÚwarnr   rO   )Úselfr-   r)   Úargsr   s       €r   ÚgetannotateÚ/peersetup.<locals>.fastannotatepeer.getannotate‰   s>   ø€ à—<‘< ×/Ñ/Ø—‘œÐHÓIÔJØ!à!%·OÀÑD�Øœ^Ð+Ð+r   r?   ©N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r	   Ú	batchabler[   Ú__static_attributes__rC   s   €r   ÚfastannotatepeerrR   ˆ   s   ø† Ø	×	"Ñ	"ö	,ó 
#ó	,r   rd   ©Ú	__class__)r   Úpeerrd   s   `  r   Ú	peersetuprh   ‡   s   ø€ ÷,˜4Ÿ>™>ô ,ð &…Nr   c              #  óþ   #   • U R                   nUR                  SSS5      n[        R                  " SUU5      n[        R
                  " U0 U5      n Uv •  UR                  5         g ! UR                  5         f = f7f)Nr   s
   remotepaths   default)r   r   r   Úget_unique_pull_path_objr   rg   r(   )r   r   Ú
remotedestÚ
remotepathrg   s        r   Úannotatepeerrm   •   si   é € à	�‰€Bà—‘˜?¨M¸:ÓF€JÜ×1Ò1ØØ
Øó€Jô
 �7Š7�2�r˜:Ó&€DðØŠ
à�
‰
�øˆ�
‰
�üs   ‚AA=ÁA( ÁA=Á(A:Á:A=c                óB  • U(       d  gUc!  [        U 5       n[        XX#5      sSSS5        $ Uc  0 nU R                  n/ nUR                  5        nUR	                  S[        U5      -  5        U H5  nUR                  UR                  SXrR                  U5      S.5      5        M7     U GH,  nUR                  5       n	U	R                  5        VV
s0 s H  u  pz[        R                  " U5      U
_M     n	nn
[        U	5       HÐ  nUR                  S5      (       a	  SUS-   ;   a  UR	                  SU-  5        M8  X›   nUR                  (       a  UR	                  S	[        U5      U4-  5        U R                   R#                  [$        R&                  R)                  U5      5        U R!                  US
5       nUR+                  U5        SSS5        MÒ     GM/     SSS5        g! , (       d  f       GNÇ= fs  sn
nf ! , (       d  f       GM
  = f! , (       d  f       g= f)z1download annotate cache from the server for pathsNs"   fastannotate: requesting %d files
r   rV   s   fastannotate/s   /../r!   s(   fastannotate: ignored malicious path %s
s%   fastannotate: writing %d bytes to %s
s   wb)rm   Úclientfetchr   ÚcommandexecutorÚdebugr1   r   ÚcallcommandÚgetr   Úitemsr   ÚpconvertÚsortedÚ
startswithÚ	debugflagr2   Úmakedirsr,   r-   ÚdirnameÚwrite)r   ÚpathsÚlastnodemaprg   r   ÚresultsÚbatcherr6   r   ÚrÚvr-   r8   r7   s                 r   ro   ro   §   sÀ  € æØà�|Ü˜$Ô 4Ü˜t¨KÓ>÷  Ñð ÑØˆà	�‰€BØ€GØ	×	Ñ	Ô	 7Ø
�‰Ð7¼#¸e»*ÑDÔEÛˆAØ�N‰NØ×#Ñ#Ø"Ø¯o©o¸aÓ.@ÑAóöñ ô ˆFØ—‘“ˆAà12·±´Ô;²©¨”—’˜qÓ! 1Ò$±ˆAÑ;Ü˜qž	�à—‘Ð'7×8Ñ8¸GØ˜4‘Kó=ð —H‘HØDÀtÑKôñ Ø™'�Ø—<—<Ø—H‘HØAÜ˜w›<¨Ð.ñ/ôð —‘×!Ñ!¤"§'¡'§/¡/°$Ó"7Ô8Ø—X‘X˜d EÔ*¨aØ—G‘G˜GÔ$÷ +Ñ*ô! "ñ	 ÷ 
 Ð	÷  Öüó* <÷" +×*ú÷= 
 Õ	úsC   —G%ÁBHÃ#G7
Ã5CHÆ9G=	ÇHÇ%
G4Ç7HÇ=
HÈ	HÈ
Hc                ó  • U R                   R                  SSS5      nUS::  a  U$ / nU H5  n [        U R                  U5      5      U:¼  a  UR	                  U5        M5  M7     U$ ! [
         a    UR	                  U5         MY  f = f)z�return a subset of paths whose history is long and need to fetch linelog
from the server. works with remotefilelog and non-remotefilelog repos.
r   s   clientfetchthresholdé
   r   )r   Ú	configintr1   Úfiler   r&   )r   r|   Ú	thresholdr   r-   s        r   Ú_filterfetchpathsr‡   ×   s‡   € ð —‘×!Ñ! /Ð3JÈBÓO€IØ�Aƒ~Øˆà€FÛˆð	 Ü�4—9‘9˜T“?Ó# yÓ0Ø—‘˜dÖ#ñ 1ñ ð €Møô ó 	 Ø�M‰M˜$×ð	 ús   ®/A%Á%BÂBc                ó:   •  " S SUR                   5      nX!l         g )Nc                  ó   • \ rS rSrSS jrSrg)Ú(localreposetup.<locals>.fastannotaterepoéë   Nc                ó¸  • [        U R                  5      n/ n0 n [        X5       HV  n[        R                  " X5       nUR                  USS9(       d  UR                  U5        UR                  XV'   S S S 5        MX     U(       a  [        XXR5        g g ! , (       d  f       M~  = f! [         a(  nU R                  R                  SU-  5         S nAg S nAff = f)NF)Ústricts"   fastannotate: prefetch failed: %r
)r   r   r‡   r   r#   r$   r   r)   ro   r&   rq   )	rY   r|   rg   r   Úneedupdatepathsr}   r-   r5   Úexs	            r   ÚprefetchfastannotateÚ=localreposetup.<locals>.fastannotaterepo.prefetchfastannotateì   sº   € Ü §¡Ó(ˆFØ ˆOØˆKð
KÜ-¨dÖ:�DÜ ×0Ò0°Ô<ÀØ#Ÿ™¨v¸e˜ÖDØ+×2Ñ2°4Ô8Ø04·±˜KÑ-÷ =Ñ<ñ ;ö
 #Ü °{ÕIð #÷	 =Ö<ûô ó Kà—‘—‘ÐDÀrÑI×JÑJûðKús.   ›$B' ¿5BÁ4B' Â
B$	ÂB' Â'
CÂ1CÃCr?   r]   )r^   r_   r`   ra   r�   rc   r?   r   r   ÚfastannotatereporŠ   ë   s   † ÷	Kr   r’   re   )r   r   r’   s      r   Úlocalreposetupr“   ê   s   € ôK˜4Ÿ>™>ô Kð" &…Nr   c                óÐ   • [        5         UR                  5       (       a  [        X5        [        [        R
                  ;  a$  [        R
                  R                  [        5        g g r]   )r@   Úlocalr“   rh   r   Úwirepeersetupfuncsr   )r   r   s     r   Úclientreposetupr—   ÿ   sD   € ÜÔØ‡z�z‡|�|Ü�rÔ ô œ×-Ñ-Ó-Ü
×Ñ×$Ñ$¤YÕ/ð .r   rU   )Ú
__future__r   Ú
contextlibr,   Úmercurial.i18nr   Ú	mercurialr   r   r   r   r	   r
   Úmercurial.utilsr   Ú r   r   r   r;   r@   rD   rO   rh   Úcontextmanagerrm   ro   r‡   r“   r—   r?   r   r   Ú<module>rŸ      s{   ðõ #ã Û 	å ÷÷ õõ ò

ò ò(òVòOòò2&ð ×Ññó ðô"-%ò`ò&&ó*0r   