
    q&f                     f   d dl Z ddlmZ ddlmZ ddlmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZ ddlmZ ej,                  Zej.                  Z G d d      Z G d	 d
e      Z G d dej6                        Zd Z G d de	j<                        Z G d de	j@                  e	jB                        Z"	 ddZ#y)    N   )_)sha1nodeconstants)	branchmap	changelogerror	localrepomanifest
namespacespathutilpycompatrequirementsurlutilvfs)urlutilc                   >    e Zd Zd Zd Zd Zd Zd
dZd Zd Z	d	 Z
y)httprangereaderc                 <    || _         d| _        || _        || _        y )Nr   )r   posopenername)selfr   r   s      :/usr/lib/python3/dist-packages/mercurial/statichttprepo.py__init__zhttprangereader.__init__&   s    	    c                     | S N r   s    r   	__enter__zhttprangereader.__enter__-   s    r   c                 $    | j                          y r   )close)r   exc_type	exc_value	tracebacks       r   __exit__zhttprangereader.__exit__0   s    

r   c                     || _         y r   )r   )r   r   s     r   seekzhttprangereader.seek3   s	    r   Nc                    t         j                  t        j                  | j                              }d}|r| j
                  |z   dz
  }| j
                  s|r!|j                  dd| j
                  |fz         	 | j                  j                  |      }|j                         }|j                  }|dk(  r/|r|| j
                  | j
                  |z    }n|| j
                  d  }n|r|d | }| xj
                  t'        |      z  c_        |S # t        j                  $ r?}|j                  dk(  xr t        j                  xs d }t        |t!        |            d }~wt        j"                  $ r}t        d |j$                        d }~ww xY w)Nr   r   Rangezbytes=%d-%si     )urlreqrequestr   strurlr   r   
add_headerr   openreadcodeurlerr	httperrorerrnoENOENTIOErrorstrurlerrorreasonlen)	r   bytesreqendfdatar3   instnums	            r   r2   zhttprangereader.read6   sJ   nnX__TXX67((U"Q&C88sNN7MTXXsO$CD	-  %A668D66D 3; DHHtxx%'78DHHJ'<DCI'  	*))s"3u||;tC #s4y)) 	-$,,	-s$   97D F	:EF	.FF	c                 @    | j                         j                  d      S )NT)r2   
splitlinesr    s    r   	readlineszhttprangereader.readlinesW   s    yy{%%d++r   c                 4    t        | j                               S r   )iterrF   r    s    r   __iter__zhttprangereader.__iter__Z   s    DNN$%%r   c                      y r   r   r    s    r   r#   zhttprangereader.close]       r   r   )__name__
__module____qualname__r   r!   r'   r)   r2   rF   rI   r#   r   r   r   r   r   %   s+    B,&r   r   c                       e Zd ZdZy)_RangeErrorz6Error raised when an unsatisfiable range is requested.N)rL   rM   rN   __doc__r   r   r   rP   rP   d   s    @r   rP   c                       e Zd ZdZd Zd Zy)_HTTPRangeHandlera  Handler that enables HTTP Range headers.

    This was extremely simple. The Range header is a HTTP feature to
    begin with so all this class does is tell urllib2 that the
    "206 Partial Content" response from the HTTP server is what we
    expected.
    c                 l    t         j                  |||j                               }||_        ||_        |S r   )r-   
addinfourlget_full_urlr3   msg)r   r>   fpr3   rW   hdrsrs          r   http_error_206z _HTTPRangeHandler.http_error_206q   s2    b$(8(8(:;r   c                     t        d      )NzRequested Range Not Satisfiable)rP   )r   r>   rX   r3   rW   rY   s         r   http_error_416z _HTTPRangeHandler.http_error_416x   s    ;<<r   N)rL   rM   rN   rQ   r[   r]   r   r   r   rS   rS   h   s    =r   rS   c                     t        j                  | |      j                  t                       G fddt        j
                        }|S )Nc                   &    e Zd Zd Zd fd	Zd Zy)#build_opener.<locals>.statichttpvfsc                      || _         i | _        y r   )baseoptions)r   rb   s     r   r   z,build_opener.<locals>.statichttpvfs.__init__   s    DIDLr   c                     |dvrt        d      dj                  | j                  t        j	                  |      f      }t        |      S )N)   rs   rbzPermission denied   /)r8   joinrb   r-   quoter   )r   pathmodeargskwr@   	urlopeners         r   __call__z,build_opener.<locals>.statichttpvfs.__call__   sD    =(122		499fll4&89:A"1i00r   c                 `    |r!t        j                  | j                  |g| S | j                  S r   )r   rg   rb   )r   ri   insidefs      r   rg   z(build_opener.<locals>.statichttpvfs.join   s)    }}TYY?w??yy r   N)re   )rL   rM   rN   r   rn   rg   )rm   s   r   statichttpvfsr`      s    		1	!r   rq   )r   r   add_handlerrS   vfsmodabstractvfs)uiauthinforq   rm   s      @r   build_openerrw   }   s?    

2x(I+-.!** !" r   c                       e Zd Zd Zd Zy)statichttppeerc                      y r   r   r    s    r   localzstatichttppeer.local   s    r   c                      yNFr   r    s    r   canpushzstatichttppeer.canpush       r   N)rL   rM   rN   r{   r~   r   r   r   ry   ry      s    r   ry   c                   z     e Zd Zej                  j
                  Zd Z fdZd Z	d Z
d	dZd
dZd
dZd Z xZS )statichttprepositoryc                 f   || _         || _        || _        t        j                  |j                  d      dz         }|j                         \  | _        }t        ||      } || j                        | _	         || j                  j                  d            | _        g | _        t        j                         | _        d | _        d | _        t#               | _        t#               | _        	 t#        | j                  j)                  d      j+                               }t6        j8                  |v rL || j                  j                  d            }	|t#        |	j)                  d      j+                               z  }t;        j<                  |      }
t;        j>                  ||
       t;        j@                  ||       tB        | _"        | jD                  jF                  | _#        t;        jH                  || j                  |      | _%        | jJ                  j                  | _&        | jJ                  jN                  | _(        | jJ                  j                  | _)        i | _*        || _+        tY        jZ                  | jD                  | jP                        }tY        j\                  | jP                  | || j_                               | _.        ta        j`                  | jP                        | _0        d | _1        d | _2        tg        jh                         | _5        d | _6        d | _7        d | _8        d | _9        d | _:        y # t,        $ rr t#               }	 | j                  d      }|j)                  d       |j/                          n0# t,        $ r$ t1        d      |z  }t3        j4                  |      w xY wY w xY w)	Nrf   s   /.hgs   caches   requiress   00changelog.ir   s+   '%s' does not appear to be an hg repositorys   store);_urlru   rootr   r   rstriprv   ri   rw   r   rg   cachevfs_phasedefaultsr   names
filtername_extrafilteridset_wanted_sidedatafeaturesr2   rE   FileNotFoundErrorr#   r   r   	RepoErrorrequirementsmodSHARESAFE_REQUIREMENTr	   gathersupportedrequirementsensurerequirementsrecognizedensurerequirementscompatibler   nodeconstantsnullid	makestorestorespathr   svfssjoin
_filecacher   r
   manifestrevlogmanifestlognarrowmatchr   _tagsnodetagscacher   BranchMapCache_branchcaches_revbranchcache
encodepats
decodepats	_transref	_dirstate)r   ru   ri   urv   vfsclassr   rX   rW   storevfssupportedrequirementsrootmanifests               r   r   zstatichttprepository.__init__   s   		KKD)G34jjl	8H-DII& x!89 **,
" #	+txx}}[9DDFGL 00L@h 78HCk : E E GHHL ) E Eb I../	
 	..r<@.((// ((tyy(K
ZZ__
JJ%%	ZZ__
(..t/A/A499M#//IIt\4+;+;+=
 #,,TYY7
!&557#Y ! 	+5L+XX./

$ +FG$Nooc**+ 	+s*   +2L5 5N0	2M<;N0<-N))N0/N0c                 N    t         t        |   |      }|j                  dg      S )Ns   pushkey)superr   _restrictcapabilities
difference)r   caps	__class__s     r   r   z*statichttprepository._restrictcapabilities   s&    )4FtL
|,,r   c                     | j                   S r   )r   r    s    r   r   zstatichttprepository.url   s    yyr   c                      yr}   r   r    s    r   r{   zstatichttprepository.local   r   r   c                     t        | ||      S )Nri   remotehidden)ry   )r   ri   r   s      r   peerzstatichttprepository.peer   s    dLIIr   c                 |    t        j                  dt        j                  t	        d            dt	        d            Nr   s   lock not availables   locks"   cannot lock static-http repositoryr   LockUnavailabler   sysstrr   r   waits     r   wlockzstatichttprepository.wlock   6    ##OOA34534	
 	
r   c                 |    t        j                  dt        j                  t	        d            dt	        d            r   r   r   s     r   lockzstatichttprepository.lock   r   r   c                      y r   r   r    s    r   _writecachesz!statichttprepository._writecaches  rK   r   r}   )T)rL   rM   rN   r	   localrepository_basesupported	supportedr   r   r   r{   r   r   r   r   __classcell__)r   s   @r   r   r      sA     ))88IAF-J

r   r   c                     |rt        j                  t        d            |j                  dd  }t	        | |      j                  ||      S )Ns(   cannot create new static-http repository   r   )r   Abortr   locr   r   )ru   ri   createintents
createoptsr   r   s          r   	make_peerr     sO     kk!GHII
((12,CC(-- .  r   )NNF)$r6   i18nr   noder    r   r   r   r	   r
   r   r   r   r   r   r   r   r   rs   utilsr   r4   r-   r   r8   rP   basehandlerrS   rw   	localpeerry   r   revlogfilestorager   r   r   r   r   <module>r      s      #    
	9 9~A' A=** =*2Y(( fy::fT CHr   