
    6h53                        S SK Jr  S SKrS SKJrJr  S SKJrJr  SSK	J
r
JrJr   " S S5      r " S	 S
\
R                  5      r " S S\
R                  5      r " S S5      r " S S5      rg)    )annotationsN)hexsha1nodeconstants)mdiffrevlog   )	basestore	constantsshallowutilc                  ,    \ rS rSrSrSrSrSrSrSr	Sr
g	)
ChainIndicies   z>A static class for easy reference to the delta chain indicies.r   r             N)__name__
__module____qualname____firstlineno____doc__NAMENODEBASENAMEBASENODEDATA__static_attributes__r       B/usr/lib/python3/dist-packages/hgext/remotefilelog/contentstore.pyr   r      s$    H DD H HDr   r   c                     ^  \ rS rSrU 4S jrS r\R                  R                  S 5       r	S r
\R                  R                  S 5       rS r\R                  R                  S 5       rS	 rS
 rS rSS jrSrU =r$ )unioncontentstore&   c                   > [         TU ]  " U0 UD6  Xl        UR                  S5      U l        UR                  SS5      U l        g )N
writestoreallowincompleteF)super__init__storesgetr$   r%   selfargskwargs	__class__s      r   r'   unioncontentstore.__init__'   s@    $)&) **\2
  &zz*;UCr   c                z   U R                  X5      nUS   [        R                     [        R                  :w  a  [        U[        U5      45      eUR                  5       [        R                     nUnU(       aA  UR                  5       [        R                     n[        R                  " XV/5      nU(       a  MA  U$ )zFetches the full text revision contents of the given name+node pair.
If the full text doesn't exist, throws a KeyError.

Under the hood, this uses getdeltachain() across all the stores to build
up a full chain to produce the full text.
)getdeltachainr   r   r   nullidKeyErrorr   popr   r   patches)r+   namenodechainfulltexttextdeltas          r   r)   unioncontentstore.get2   s     ""4.9]++,0A0H0HHD#d),-- 99;}112IIK 2 23E==w/D e r   c                    U R                    H  n UR                  X5      s  $    [        U[        U5      45      e! [         a     M<  f = f)z;Return the single delta entry for the given name/node pair.)r(   getdeltar4   r   r+   r7   r8   stores       r   r?   unioncontentstore.getdeltaJ   sP     [[E~~d11 ! c$i())     <
A
	A
c                j   U R                  X5      nUS   [        R                     [        R                  :w  aV  US   u    pEpd U R                  XV5      nUR                  U5        US   [        R                     [        R                  :w  a  MV  U$ ! [         a    U R                  (       d  e  U$ f = f)zReturns the deltachain for the given name/node pair.

Returns an ordered list of:

  [(name, node, deltabasename, deltabasenode, deltacontent),...]

where the chain is terminated by a full text entry with a nullid
deltabasenode.
r1   )_getpartialchainr   r   r   r3   extendr4   r%   )r+   r7   r8   r9   xdeltabasenamedeltabasenode	morechains           r   r2   unioncontentstore.getdeltachainU   s     %%d1Bi../3D3K3KK49"I1Aq 11-O	Y'	 Bi../3D3K3KK   ++s   "B B21B2c                    U R                    H  n UR                  X5      s  $    [        U[        U5      45      e! [         a     M<  f = f)z)Returns the metadata dict for given node.)r(   getmetar4   r   r@   s       r   rM   unioncontentstore.getmetam   sP     [[E}}T00 !
 c$i())  rC   c                    U R                    Vs/ s H  oR                  5       PM     nn[        R                  " U6 $ s  snf N)r(   
getmetricsr   sumdicts)r+   smetricss      r   rQ   unioncontentstore.getmetricsw   s4    +/;;7;a<<>;7##W-- 8s   =c                    U R                    H  n UR                  X5      s  $    [        U[        U5      45      e! [         a     M<  f = f)zReturns a partial delta chain for the given name/node pair.

A partial chain is a chain that may not be terminated in a full-text.
)r(   r2   r4   r   r@   s       r   rE   "unioncontentstore._getpartialchain{   sR     [[E**466 ! c$i())  rC   c                    [        S5      eNs5   cannot add content only to remotefilelog contentstoreRuntimeErrorr+   r7   r8   datas       r   addunioncontentstore.add       D
 	
r   c                d    UnU R                    H  nU(       d  M  UR                  U5      nM     U$ rP   )r(   
getmissing)r+   keysmissingrA   s       r   rb   unioncontentstore.getmissing   s1    [[Ew**73 ! r   c                t    U R                   (       a  U R                   R                  XU5        g [        S5      e)Ns   no writable store configured)r$   addremotefilelognoder[   r\   s       r   rg   &unioncontentstore.addremotefilelognode   s)    ??OO00TB>??r   c                L    U R                    H  nUR                  X5        M     g rP   )r(   
markledger)r+   ledgeroptionsrA   s       r   rj   unioncontentstore.markledger   s    [[EV- !r   )r%   r(   r$   rP   )r   r   r   r   r'   r)   r	   baseunionstore	retriabler?   r2   rM   rQ   rE   r^   rb   rg   rj   r   __classcell__r.   s   @r   r!   r!   &   s    	D0 ''* (*0 ''* (*. ''* (*

@. .r   r!   c                  R   ^  \ rS rSrU 4S jrS rS rS rS rS r	S r
S	 rS
rU =r$ )remotefilelogcontentstore   c                Z   > [         TU ]  " U0 UD6  [        R                  " 5       U l        g rP   )r&   r'   	threadinglocal_threaddatar*   s      r   r'   "remotefilelogcontentstore.__init__   s$    $)&)$??,r   c                P   U R                  X5      n[        R                  " U5      u  pEnX4XE-    n[        R                  " U5      nX   u  ppS nU(       a  [	        U	5      nU R                  X%U5        U[        R                  -  (       a  S =p[        R                  " X|U5      nU$ rP   )	_getdatar   parsesizeflagsancestormapr   _updatemetacacher   REVIDX_EXTSTOREDcreaterevlogtext)r+   r7   r8   r]   offsetsizeflagscontentr}   p1p2linknodecopyfromcopyrevrevisions                  r   r)   remotefilelogcontentstore.get   s    }}T()88>e.!--d3%0%6""gGd%0 6***!%%G//7Kr   c                j    U R                  X5      nUU[        R                  U R                  X5      4$ rP   )r)   r   r3   rM   r+   r7   r8   r   s       r   r?   "remotefilelogcontentstore.getdelta   s7     88D'$$LL$	
 	
r   c                N    U R                  X5      nXS [        R                  U4/$ rP   r)   r   r3   r   s       r   r2   'remotefilelogcontentstore.getdeltachain   +    
 88D'T#4#;#;XFGGr   c                   U R                  5         X R                  R                  S   :w  a<  U R                  X5      n[        R
                  " U5      u  pEnU R                  X%U5        U R                  R                  S   $ Nr   r   )_sanitizemetacacherx   	metacacher{   r   r|   r~   )r+   r7   r8   r]   r   r   r   s          r   rM   !remotefilelogcontentstore.getmeta   so    !##--a00==,D"-"<"<T"BF%!!$e4))!,,r   c                    [        S5      erY   rZ   r\   s       r   r^   remotefilelogcontentstore.add   r`   r   c                \    [        U R                  SS 5      nUc  SU R                  l        g g )Nr   )NN)getattrrx   r   )r+   r   s     r   r   ,remotefilelogcontentstore._sanitizemetacache   s/    D,,k4@	)5D& r   c                    U R                  5         XR                  R                  S   :X  a  g [        R                  U[        R
                  U0nX4U R                  l        g )Nr   )r   rx   r   r
   METAKEYFLAGMETAKEYSIZE)r+   r8   r   r   metas        r   r~   *remotefilelogcontentstore._updatemetacache   sR    !##--a00%%ui.C.CTJ&*\"r   )rx   )r   r   r   r   r'   r)   r?   r2   rM   r^   r   r~   r   rp   rq   s   @r   rs   rs      s1    -,	
H-

6
2 2r   rs   c                  H    \ rS rSrS rS rS rS rS rS r	S r
SS
 jrSrg	)remotecontentstore   c                    X l         X0l        g rP   _fileservice_shared)r+   uifileserviceshareds       r   r'   remotecontentstore.__init__   s    'r   c                    U R                   R                  U[        U5      4/SSS9  U R                  R	                  X5      $ NT)force	fetchdata)r   prefetchr   r   r)   r+   r7   r8   s      r   r)   remotecontentstore.get   sE    ""CItt 	# 	
 ||++r   c                ~    U R                  X5      nUU[        R                  U R                  R	                  X5      4$ rP   )r)   r   r3   r   rM   r   s       r   r?   remotecontentstore.getdelta   s;    88D'$$LL  ,	
 	
r   c                N    U R                  X5      nXS [        R                  U4/$ rP   r   r   s       r   r2    remotecontentstore.getdeltachain   r   r   c                    U R                   R                  U[        U5      4/SSS9  U R                  R	                  X5      $ r   )r   r   r   r   rM   r   s      r   rM   remotecontentstore.getmeta  sE    ""CItt 	# 	
 ||##D//r   c                    [        S5      e)Ns   cannot add to a remote storerZ   r\   s       r   r^   remotecontentstore.add      :;;r   c                    U$ rP   r   )r+   rc   s     r   rb   remotecontentstore.getmissing  s    r   Nc                    g rP   r   )r+   rk   rl   s      r   rj   remotecontentstore.markledger      r   r   rP   )r   r   r   r   r'   r)   r?   r2   rM   r^   rb   rj   r   r   r   r   r   r      s+    
,
H0<r   r   c                  j    \ rS rSrS rS rS rS rS rSS jr	S	 r
S
 rS rS rS rSS jrS rSrg)manifestrevlogstorei  c                    UR                   U l        UR                  U l        [	        5       U l        [        R                  " U R                  SS9U l        SU l        g )Ns   00changelog.iradixr   )	rA   _storesvfs_svfsdict_revlogsr   _cl_repackstartlinkrev)r+   repos     r   r'   manifestrevlogstore.__init__  s@    jjYY
==3CD#$ r   c                B    U R                  U5      R                  U5      $ rP   )_revlograwdatar   s      r   r)   manifestrevlogstore.get  s    ||D!))$//r   c                t    U R                  X5      nX1U R                  R                  U R                  X5      4$ rP   )r)   r   r3   rM   r   s       r   r?   manifestrevlogstore.getdelta   s.    88D'txxT0HHHr   c                Z    U R                  X5      nXS U R                  R                  U4/$ rP   )r)   r   r3   r   s       r   r2   !manifestrevlogstore.getdeltachain$  s*    88D'T488??H=>>r   c                    U R                  U5      nUR                  U5      n[        R                  UR	                  U5      [        R
                  UR                  U5      0$ rP   )r   revr
   r   r   r   rawsize)r+   r7   r8   rlr   s        r   rM   manifestrevlogstore.getmeta(  sM    \\$ffTl!!288C=!!2::c?
 	
r   Nc                b   Uc
  [        5       nX#;   a  / $ U R                  U5      n0 nU1nUR                  UR                  U5      /SS9 H  nUR	                  U5      nUR                  U5        UR                  U5      u  pXR                  R                  :w  a  X;  a  UR                  U	5        XR                  R                  :w  a  X;  a  UR                  U
5        U R                  R	                  UR                  U5      5      nXUS4XTR	                  U5      '   U(       a  M    U$    U$ )NT)	inclusiver   )setr   	ancestorsr   r8   discardparentsr   r3   r^   linkrev)r+   r7   r8   knownr   r   rd   ancrevancnoder   r   r   s               r   getancestors manifestrevlogstore.getancestors0  s    =EE=I\\$	&llBFF4L>TlBFggfoGOOG$ZZ(FBXX__$BXX__$Bxx}}RZZ%78H*,(C)@Iggfo&7 C r   c                    U R                   nU R                  U5      nUR                  U5      nUR                  UR	                  U5      5      nUS   US   UR                  U5      S 4$ r   )r   r   r   r   r   r8   )r+   r7   r8   clr   r   r   s          r   getnodeinfomanifestrevlogstore.getnodeinfoI  s]    XX\\$**T"**RVVD\*
GAJ(8$??r   c                    [        S5      e)Ns   cannot add to a revlog storerZ   )r+   r,   s     r   r^   manifestrevlogstore.addP  r   r   c                    U R                   R                  U5      nUc:  SnUS:w  a  SU-  n[        R                  " U R                  US9nX R                   U'   U$ )N   00manifesttreer   s   meta/%s/00manifestr   )r   r)   r   r   )r+   r7   r   
revlognames       r   r   manifestrevlogstore._revlogS  sV    ]]t$:*Js{2T9
tzz<B"$MM$	r   c                    / nU H9  u  p4U R                  U5      nXER                  ;  d  M'  UR                  X445        M;     U$ rP   )r   nodemapappend)r+   rc   rd   r7   r8   mfrevlogs         r   rb   manifestrevlogstore.getmissing]  sB    JD||D)H+++|, 
 r   c                    Xl         X l        g rP   )r   _repackendlinkrev)r+   startrevendrevs      r   setrepacklinkrevrange)manifestrevlogstore.setrepacklinkrevrangef  s    #+ !'r   c                r   U(       a%  UR                  [        R                  5      (       a  g Sn[        R                  " U R                  SS9nU R
                  nU R                  n[        [        U5      S-
  SS5       HW  nUR                  U5      nX:  a    O@X:  a  M"  UR                  U5      n	UR                  XU	5        UR                  XU	5        MY     U R                  R                  5        H  u  pnUS S S:w  d	  USS  S	:w  a  M  US[        S
5      *  n[        R                  " U R                  US S S9n[        [        U5      S-
  SS5       HX  nUR                  U5      nX:  a    M  X:  a  M#  UR                  U5      n	UR                  XU	5        UR                  XU	5        MZ     M     g )Nr   r   r   r   r1      s   meta/s   .is   /00manifest)	indexfile)r)   r
   OPTION_PACKSONLYr   r   r   r   rangelenr   r8   markdataentrymarkhistoryentryr   data_entries)r+   rk   rl   treenamer   startlinkrev
endlinkrevr   r   r8   tpathr   s                r   rj   manifestrevlogstore.markledgerj  s   w{{9#=#=>>]]4::->?//++
R1b"-CjjoG%#773<D  6##DD9 . "[[557MATBQx8#tBCyE'9A^!4 45HtzzT#2Y?BSWq["b1**S/)'wws|$$TT:''= 2 8r   c                    g rP   r   )r+   rk   s     r   cleanupmanifestrevlogstore.cleanup  r   r   )r   r   r   r   r   r   rP   )r   r   r   r   r'   r)   r?   r2   rM   r   r   r^   r   rb   r   rj   r  r   r   r   r   r   r     sF    %0I?
2@<( >Dr   r   )
__future__r   rv   mercurial.noder   r   	mercurialr   r    r	   r
   r   r   rn   r!   rs   r   r   r   r   r   <module>r     sj    "   $w.	00 w.tE2	 3 3 E2P* *Zx xr   