
    6hT                       S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKJr  SSK	J
r
  SSKJrJrJrJrJrJrJrJr  SSKJr  \R.                  (       a  S SKJr  \R2                  r\R4                  r\R6                  rS	 r " S
 S5      r SS jrS r " S S\R@                  5      r!S r" " S S\RF                  5      r$ " S S\RJ                  5      r&S r'S\RP                  S4S jr) SS jr*g)    )annotationsN)futures   )_)bundle2errorhttpconnectionpycompatstatichttprepourlutilwireprotov1peer)urlutil)Setc           
     ,   [         R                  " U5      S-   nU[        US-  5      -
  [        S5      -
  n/ nSn[        S[        U 5      U5       H?  nUS-  nUR	                  U[        U5      -  [         R                  " XXt-    5      45        MA     U$ )aK  Encode a string value into multiple HTTP headers.

``value`` will be encoded into 1 or more HTTP headers with the names
``header-<N>`` where ``<N>`` is an integer starting at 1. Each header
name + value will be at most ``limit`` bytes long.

Returns an iterable of 2-tuples consisting of header names and
values as native strings.
z-%s000s   : 
r   r   )r
   strurllenrangeappendstr)valueheaderlimitfmtvaluelenresultnis           4/usr/lib/python3/dist-packages/mercurial/httppeer.pyencodevalueinheadersr!   )   s     //&
!F
*C s3;''#i.8HF	A1c%j(+	QsSV|X__Uq|5L%MNO , M    c                  T    \ rS rSrS r\S 5       rSS jr\R                  4S jr
Srg)	
_multifileF   c                ~    U H*  n[        US5      (       a  M  [        S[        U5      U5      e   Xl        SU l        g )NlengthsO   _multifile only supports file objects that have a length but this one does not:r   )hasattr
ValueErrortype	_fileobjs_index)selffileobjsfs      r    __init___multifile.__init__G   sC    A1h'' <G	   "r"   c                :    [        S U R                   5       5      $ )Nc              3  8   #    U  H  oR                   v   M     g 7fN)r'   .0r/   s     r    	<genexpr>$_multifile.length.<locals>.<genexpr>U   s     4^88^s   )sumr+   r-   s    r    r'   _multifile.lengthS   s    4T^^444r"   Nc                   US::  a"  SR                  S U R                   5       5      $ / nU(       a  U R                  [        U R                  5      :  a  UR	                  U R                  U R                     R                  U5      5        [        US   5      nX1:  a  U =R                  S-  sl        X-  nU(       a%  U R                  [        U R                  5      :  a  M  SR                  U5      $ )Nr   r"   c              3  @   #    U  H  oR                  5       v   M     g 7fr4   )readr5   s     r    r7   "_multifile.read.<locals>.<genexpr>Y   s     =nFFHHns   r   )joinr+   r,   r   r   r>   )r-   amtpartsgots       r    r>   _multifile.readW   s    !888=dnn===dkkC$77LL499#>?eBi.Cyq JC dkkC$77 xxr"   c                    U[         R                  :w  a  [        S5      eUS:w  a  [        S5      eU R                   H  nUR	                  S5        M     SU l        g )NsP   _multifile does not support anything other than os.SEEK_SET for whence on seek()r   sQ   _multifile only supports seeking to start, but that could be fixed if you need it)osSEEK_SETNotImplementedErrorr+   seekr,   )r-   offsetwhencer/   s       r    rJ   _multifile.seekc   s]    R[[ %:  Q;%1  AFF1I  r"   )r+   r,   r4   )__name__
__module____qualname____firstlineno__r0   propertyr'   r>   rG   rH   rJ   __static_attributes__ r"   r    r$   r$   F   s.    
 5 5
 #%++ r"   r$   Fc                r   US:X  a  SUS'   UR                  SS5      nUR                  S0 5      n	U R                  SU-  5        SU4/n
U(       a  U
R                  S5        S	nUSL=(       a    S
U;   nU(       a  U(       a  [        R	                  [        UR                  5       5      5      nU(       d  UnOn[        U[        5      (       a(  [        R                  " U5      n[        U5      Ul        Un[        R                  " U5      n[        U5      Ul        [        X5      n[        U5      U	S'   OU(       a  US:w  d   eU" S5      nU(       a  [        UR                  SS5      S	   5      nUS	:  aI  [        R	                  [        UR                  5       5      5      n[!        USU5       H  u  nnUU	U'   M     OU
[        UR                  5       5      -  n
S[        R	                  U
5      -  nSUU4-  nS	n[#        US5      (       a  UR                  nOUb  [        U5      nUb  SU	;  a  SU	S'   [%        5       n[%        5       nUbK  U" S5      nU(       a+  UR'                  S5        [%        UR                  S5      5      nUR'                  S5        SU;   a  UR'                  S5        SU;   a  U" S5      (       ax  [(        R*                  R-                  [(        R.                  5       Vs/ s H  nUR1                  5       R2                  PM     nnUR'                  SSR5                  U5      -  5        U(       a?  [!        SR5                  [        U5      5      SU=(       d    S5      nU H  u  nnUU	U'   M     / nU	 H:  nUR7                  5       R9                  S 5      (       d  M)  UR                  U5        M<     U(       a  S!R5                  [        U5      5      U	S"'   U" [:        R<                  " U5      X5      nUb)  U R                  S#U-  5        UR?                  S$S%U-  5        UUU4$ s  snf )&a?  Make an HTTP request to run a command for a version 1 client.

``caps`` is a set of known server capabilities. The value may be
None if capabilities are not yet known.

``capablefn`` is a function to evaluate a capability.

``cmd``, ``args``, and ``data`` define the command, its arguments, and
raw data to pass to it.
s   pushkeyr"   s   dataNs   headerss   sending %s command
s   cmd)zaccess-hidden1r      httppostargszX-HgArgs-Post   capabilitiess
   httpheader   ,r   s   X-HgArgs   ?%ss   %s%sr'   Content-Typeapplication/mercurial-0.1s   httpmediatypes   0.1s   partial-pulls   0.2txs   0.2s   compressions   comp=%s    s	   X-HgProto   zx-hg,Varys   sending %d bytes
zContent-Lengthz%d) popdebugr   urlreq	urlencodesorteditems
isinstancebytesioBytesIOr   r'   r$   intsplitr!   r(   setaddr   compenginessupportedwireengines
CLIENTROLEwireprotosupportnamerA   lower
startswithr
   r   add_unredirected_header)uirequestbuildercaps	capablefnrepobaseurlcmdargsremotehiddendataheadersq
headersize
postargsokstrargsr   argsio
httpheaderencoded_argsr   r   qscusizeprotoparams
mediatypesmtecompsprotoheadersvaryheadersreqs                                  r    makev1commandrequestr   s   s   ( jW88GT"Dhhz2&GHH$s*+
#A	'(J T!=o&=J d""6$**,#78D$&&JJt$t9ZZ(FLFMf+D#&w< 	 o%%%}-
Z--dA6q9:J >!++F4::<,@AL!5j*" #(" 

%%A	&""1%	%B	K$	$BDtX{{		4yN'9"= %KJ'(OOF#RXXd^,J(::)N";"; %%::4??K
K  %%K 	 
 	
TYYu%556+IIf[)*L*:L
 *MFE#GFO * K<<>$$V,,v&  ((6+#67
,d
<C
&-.##$4dTkBB;7
s   1$P4c                H   U R                   nSnU R                  (       GaT  U R                  SS5      (       Ga<  U" US-  [        R                  " UR                  5       5      [        R                  " UR                  5       5      4-  5        Sn[        UR                  5       5       Hk  u  pg[        R                  " U5      n[        R                  " U5      nUR                  S5      (       a  Uc  SnU[        U5      -  nM\  U" US-  Xg4-  5        Mm     Ub  U" US	-  U-  5        UR                  nUb)  [        US
S5      n	U	c  [        U5      n	U" US-  U	-  5        [        R                  " 5       n
Sn UR                  U5      n U R                  (       aR  U R                  SS5      (       a;  U(       a  UR$                  OSnU" US-  [        R                  " 5       W
-
  U4-  5        [8        R:                  " U5        U$ ! [         R"                   a5  nUR$                  S:X  a  [&        R(                  " [+        S5      5      ee SnAf[,        R.                   aW  nU R                  S[0        R2                  " UR                  5       5      -  5        U R5                  5         [7        SU5      eSnAff = f! U R                  (       aT  U R                  SS5      (       a<  U(       a  UR$                  OSnU" US-  [        R                  " 5       W
-
  U4-  5        f f f = f)z<Send a prepared HTTP request.

Returns the response object.
s   devel-peer-request: %s
s   devels   debug.peer-requests   %s %sNs   X-hgarg-r   s     %s %ss+     %d bytes of commands arguments in headersr'   s     %d bytes of datai  s   authorization faileds   http error requesting %s
r@   s     finished in %.4f seconds (%d))ra   	debugflag
configboolr
   bytesurl
get_methodget_full_urlrd   header_itemsrt   r   r~   getattrr   timeropenurlerr	httperrorcoder   Abortr   httplibHTTPExceptionr   hidepassword	tracebackOSErrorurlmodwrapresponse)rv   openerr   dbgline
hgargssizer   r   r~   r'   startresinstr   s                 r    sendrequestr      s   
 ((C&D	|||h0EFF !!#.."23!!#"2"2"45	
 
#C$4$4$67MF&&v.F%%e,E  --%!"Jc%j(
D:%78 8 !@A
 xxT8T2F~T,,v56


Ckk# <<BMM(4IJJ"388D45::<%'./ J/  99++a 7899   "
)""3#3#3#567	
 	dD!!" <<BMM(4IJJ"388D45::<%'./ K<s2   8H J70I		J7 AJ22J77J: :A'L!c                  (   ^  \ rS rSrU 4S jrSrU =r$ )RedirectedRepoErroriA  c                0   > [         TU ]  U5        X l        g r4   )superr0   respurl)r-   msgr   	__class__s      r    r0   RedirectedRepoError.__init__B  s    r"   )r   )rN   rO   rP   rQ   r0   rS   __classcell__r   s   @r    r   r   A  s     r"   r   c                   Sn[         R                  " UR                  5       5      nUR                  U5      (       a  US [	        U5      *  nSnOSnUR                  S5      UR                  S5      :w  a0  SnU R                  (       d  U R                  [        S5      U-  5         [         R                  " UR                  SS5      5      n	[        R                  " U5      n
U	R                  S5      (       a$  [         R"                  " UR%                  5       5      eU	R                  S5      (       d  U R'                  S	[        R                  " U5      -  5        [        S
5      X=(       d    SUR%                  S5      4-  nU(       a  U(       a  [)        X5      e[         R*                  " U5      e U	R-                  SS5      S   n[/        UR-                  S5       Vs/ s H  n[1        U5      PM     sn5      nUS:X  a*  U(       a"  [4        R6                  S   R9                  U5      nOUS:X  av  [:        R<                  " S[4        R>                  " US5      5      S   n[4        R>                  " XO5      n[4        R6                  RA                  U5      nUR9                  U5      nO#[         R*                  " [        S5      X4-  5      eXyU4$ ! [         a4    [         R                  " UR                  R                  SS5      5      n	 GN?f = fs  snf ! [2         a$    [         R*                  " [        S5      X4-  5      ef = f)NFT   /s   real URL is %s
zcontent-type s   application/hg-error   application/mercurial-s   requested URL: '%s'
sI   '%s' does not appear to be an hg repository:
---%%<--- (%s)
%s
---%%<---
s   no content-typer]      -r      .s+   '%s' sent a broken Content-Type header (%s))r   r   s   zlib)r         Br   s   '%s' uses newer protocol %s)!r
   r   geturlendswithr   rstripquietwarnr   	getheaderAttributeErrorr   getr   r   rt   r   OutOfBandErrorr>   ra   r   	RepoErrorrk   tuplerj   r)   r   rn   decompressorreaderstructunpackreadexactlyforwiretype)rv   baseurlrequrlr   respcompressible
redirectedr   	qsdroppedprotosafeurlr   subtyper   version_infoelenenameengines                     r    parsev1commandresponser   G  s   J.G*SWH%		~~dw~~d33
xxGGA)*W45H!!$.."DE ""7+G/00""499;// 566
)G,@,@,HHI/
 11499T?CD )%c33//#&&
++dA&q)gmmD.AB.Ac!f.ABC v##G,??ED		 }}T4#3#3D!#<=a@  ,!!--e4((.oo,-0BB
 	
 4g  H!!$,,"2"2>2"FGH4 C 
oo<=@PP
 	

s0   &&K 2-L L4L :LLL .Mc                     ^  \ rS rSr SU 4S jjrS rS rS rS rS r	SS jr
S	 rSS
 jrS rS rS rS rS rSrU =r$ )httppeeri  c                   > [         TU ]  XUS9  X0l        X`l        US L=(       a    SU;  U l        X@l        XPl        Xpl        g )N)pathr}   rW   )r   r0   _url_capslimitedarguments
_urlopener_requestbuilder_remotehidden)	r-   rv   r   r   r   rw   rx   r}   r   s	           r    r0   httppeer.__init__  sI     	\B	
 $D 0 P_D5P -)r"   c                    U R                   R                   H&  nUR                  5         [        USS 5      " 5         M(     g )N	close_allc                     g r4   rT   rT   r"   r    <lambda>"httppeer.__del__.<locals>.<lambda>  s    Dr"   )r   handlerscloser   )r-   hs     r    __del__httppeer.__del__  s.    ))AGGIA{L13 *r"   c                .    U R                   R                  $ r4   )r   locr:   s    r    r   httppeer.url  s    yy}}r"   c                    g r4   rT   r:   s    r    localhttppeer.local      r"   c                    g)NTrT   r:   s    r    canpushhttppeer.canpush  r   r"   c                     U R                   R                  U R                   R                  U R                   R                  p2nU R
                  R                  [        S5      XU4-  5        g ! [         a     g f = f)NsE   (sent %d HTTP requests and %d bytes; received %d bytes in responses)
)r   requestscountsentbytescountreceivedbytescountr   rv   noter   )r-   reqssentrecvs       r    r   httppeer.close  sw    	--..22 D 	5 4 	!	
  		s   AA- -
A:9A:c                    U R                   $ r4   )r   r:   s    r    capabilitieshttppeer.capabilities  s    zzr"   c                    UR                  S5      nU(       a0  U R                  [        R                  " [	        S5      U5      5        g g )Nr      unexpected response:)r>   _abortr   ResponseErrorr   )r-   streamchunks      r    _finish_inline_clone_bundle$httppeer._finish_inline_clone_bundle  s8     AKK++A.E,FNO r"   c           
     j   [         R                  " U5      n[        U R                  U R                  U R
                  U R                  U R                  UUU R                  5      u  pEn[        U R                  U R                  U5      n[        U R                  U R                  XVXr5      u  U l        pU$ r4   )r
   byteskwargsr   rv   r   r   capabler   r   r   r   r   )	r-   r{   _compressibler|   r   r   r   r   cts	            r    _callstreamhttppeer._callstream  s    ##D)*GG  JJLLII	
 477DOOS94GGTYY
	2 r"   c                    U R                   " U40 UD6n UR                  5       UR                  5         $ ! UR                  5         f = fr4   )r  r>   r   )r-   r{   r|   fps       r    _callhttppeer._call  s:    c*T*	779 HHJBHHJs	   5 Ac                   U R                  S5      n UR                  S5      nSnU H  nU[        R                  ;   d  M  Un  O   [        R
                  " U R                  US U5      n[        R                  " U R                  US5      nSS0n	 U R                  " U4XS.UD6n
U
R                  SS	5      n[        U5      S
:  a   [        R                  " [        S5      U
5      eUUR                  5         [        R                   " U5        $ ! [         a    S/n Nf = f! ["        R$                   a    e [&         a  nUR(                  S   [*        R,                  [*        R.                  4;   a/  [        R0                  " [        S5      UR(                  S	   -  5      e[        R0                  " UR(                  S	   5      eS nAff = f! UR                  5         [        R                   " U5        f = f)Ns   unbundlerY   r"      rbrZ   r[   r~   r      
r   r   r  r   s   push failed: %s)r  rk   r   r   bundletypeswritebundlerv   r	   httpsendfiler  r   r   r  r   r   rG   unlinkr   r   r   r|   errno
ECONNRESETEPIPEr   )r-   r{   cgr|   typesr*   xtempnamer  r   rvalserrs                r    	_callpushhttppeer._callpush  s    [)	KK%E AG''' 
 &&twwD$?(((EB!#>?	 

3ARADAA775!$D4y1}))!,C*DaHH HHJIIhE  	 EE		.  	  	+xx{u//==kk!$6"7#((1+"EFF++chhqk**	+
 HHJIIhs7   D AD" DD"G BGGG (G3c                X   [         R                  " SSS9u  pE [        R                  " US5       nUR	                  S5      nU(       a+  UR                  U5        UR	                  S5      nU(       a  M+  S S S 5        [        R                  " U R                  US5       nSS0n	U R                  " U4XS	.UD6sS S S 5        [        R                  " U5        $ ! , (       d  f       Ni= f! , (       d  f       O= f [        R                  " U5        g ! [        R                  " U5        f = f)
Ns
   hg-bundle-s   .hg)prefixsuffixwbi   r  rZ   r[   r   )r
   mkstemprG   fdopenr>   writer	   r$  rv   r  r%  )
r-   r{   r  r|   fdfilenamefhdfp_r   s
             r    _calltwowaystreamhttppeer._calltwowaystream  s    ''}VL	 2t$GGDMHHQKA a %  ,,TWWhF#)+FG''O#O$O GF IIh %$ GFF IIhBIIhs;   D AC4*D C(7	D 
C%!D (
C62D D)c                ,    U R                   " U4SS0UD6$ )Nr  T)r  )r-   r{   r|   s      r    _callcompressablehttppeer._callcompressable$  s    @4@4@@r"   c                    Uer4   rT   )r-   	exceptions     r    r  httppeer._abort'  s    r"   )r   r   r   r   r   r   F)returnz
Set[bytes])rN   rO   rP   rQ   r0   r   r   r   r   r   r	  r  r  r  r0  r>  rA  r  rS   r   r   s   @r    r   r     sT    HM	*4
*
P,) V  A r"   r   c                  "    \ rS rSrSrSS jrSrg)queuedcommandfuturei+  z@Wraps result() on command futures to trigger submission on call.Nc                    U R                  5       (       a  [        R                  R                  X5      $ U R                  R                  5         U R                  U5      $ r4   )doner   Futurer   _peerexecutorsendcommands)r-   timeouts     r    r   queuedcommandfuture.result.  sE    99;;>>((77'') {{7##r"   rT   r4   )rN   rO   rP   rQ   __doc__r   rS   rT   r"   r    rI  rI  +  s
    J$r"   rI  c           
        S nS n0 n[        XXEUSU5      u  pxn	[        XU5      n
 [        XXU
SS9u  pn
 U
R                  5       nU
R                  5         UR                  S5      (       d  [        R                  " SU-  5      eS[        UR                  5       5      0nX4$ ! [         aA  n[        XXEUR                  SU5      u  pxn	[        XU5      n
[        XXU
SS9u  pn
 S nANS nAff = f! U
R                  5         f = f)Nc                .    [         R                  " S5      e)Ns   should not be called)r   ProgrammingError)r+  s    r    r  !performhandshake.<locals>.capable>  s    $$%<==r"   rX   F)r   r   s   unexpected content-type: %s   v1capabilities)r   r   r   r   r   r>   r   rt   r   rT  rl   rk   )rv   r   r   rw   rx   r  r|   r   r   r   r   r   r  r   rawdatainfos                   r    performhandshakerY  9  s    D> D*
D3OC r3'D
2VE
T))+

==233$$%Cb%HIIs7==?34D='  
.qyy/4
R 2s+2VE
T
 	

s"   B$ C2 $
C/.7C**C/2Dc           
        UR                   R                  (       d  UR                   R                  (       aV  [        S5      nXQR                   R                  =(       d    UR                   R                  -  n[        R
                  " U5      eUR                   R                  5       u  pgU R                  SU-  5        U=(       d    [        R                  " X5      n[        XX#5      u  p[        U UUUUU	S   US9$ )a  Construct an appropriate HTTP peer instance.

``opener`` is an ``url.opener`` that should be used to establish
connections, perform HTTP requests.

``requestbuilder`` is the type used for constructing HTTP requests.
It exists as an argument so extensions can override the default.
s   unsupported URL component: "%s"s	   using %s
rV  r}   )r   queryfragmentr   r   r   authinfora   r   r   rY  r   )
rv   r   r   rw   r}   r   r   r^  r   rX  s
             r    
_make_peerr_  n  s     xx~~**23xx~~2!2!22kk# HH%%'MCHH]S !2v}}R2F$RfEMG
! r"   c                   U(       a  [         R                  " [        S5      5      e UR                  R                  S:X  a4  [
        R                  (       d  [         R                  " [        S5      5      e[        XUS9nU$ ! [         R                   at  n UR                  SUR                  -   S9n[        R                  " XU5      nU R                  [        S5      5        Us S nA$ ! [         R                   a    Uef = fS nAff = f)Ns!   cannot create new http repositorys   httpss1   Python support for SSL and HTTPS is not installedr[  s   static-)new_raw_locations   (falling back to static-http)
)r   r   r   r   schemer   	has_httpsr_  r   copyrawlocr   	make_peerr  )	rv   r   createintents
createoptsr}   r   httpexceptionr-  s	            r    rf  rf    s     kk!@ABB 88??h&v/?/?++FG  ">??  	 99j4;;.F9GD((6:AGGA89:H 	 	  s+   AB D
AC+%D
+DDD
rF  )NNF)+
__future__r   r&  rh   rG   r   typing
concurrentr   i18nr   r   r   r   r	   r
   r   r   r   r   r   utilsr   TYPE_CHECKINGr   r   r   rb   r!   r$   r   r   r   r   r   wirepeerr   rL  rI  rY  requestr_  rf  rT   r"   r    <module>rs     s    #  	 	    	 	 	 	 ,,		:* *j BJFR%// D NZ'' Zz$'.. $2l &..u H CH r"   