
    6h:                        S SK Jr  S SKrS SKJr  S SKJr  S SKJr  S SK	J
r
JrJrJr  S SKJr  S SKJr  S S	KJr  S
SKJrJr   " S S5      r " S S5      rg)    )annotationsN)Iterator)bin)_)ancestorerrormdiffrevlog)
repository)storageutil)flagutil   )	constantsshallowutilc                  &    \ rS rSrS rS rS rSrg)remotefilelognodemap%   c                    Xl         X l        g N	_filename_store)selffilenamestores      C/usr/lib/python3/dist-packages/hgext/remotefilelog/remotefilelog.py__init__remotefilelognodemap.__init__&   s    !    c                r    U R                   R                  U R                  U4/5      n[        U5      (       + $ r   )r   
getmissingr   bool)r   nodemissings      r   __contains__!remotefilelognodemap.__contains__*   s/    ++((4>>4*@)AB=  r   c                &    X;  a  [        U5      eU$ r   )KeyErrorr   r#   s     r   __get__remotefilelognodemap.__get__.   s    4. r   r   N)__name__
__module____qualname____firstlineno__r   r%   r*   __static_attributes__ r   r   r   r   %   s    !r   r   c                  <   \ rS rSr\R
                  rS rS rS$S jr	S r
SS\R                  S4S jr  S$S jrS	 rS
 r\rS rS r\rS rS rS rS rS rS rS rS r       S% S&S jjrS rS rS r S r!S'S jr"S r#S r$S r%S r&S r'S  r(S! r)S" r*S#r+g)(remotefilelog4   c                    Xl         X l        X0l        [        U R                  UR                  5      U l        SU l        [        [        R                  5      U l
        g )Nr   )openerr   repor   contentstorenodemapversiondictr   flagprocessors_flagprocessors)r   r6   pathr7   s       r   r   remotefilelog.__init__7   sC    	+DMM4;L;LM#H$;$;<r   c                    U R                  U5      nUR                  S5      (       d  U$ UR                  SS5      nX#S-   S $ )z&returns the file contents at this nodes   
   N)revision
startswithindex)r   r#   tss       r   readremotefilelog.readA   sB    MM$||G$$HGGGQQzr   Nc           	         [         R                  " XR                  S5      UR                  S5      5      n[        R                  " XuU5      nU R                  XsXEXhS9$ )N   copy   copyrev)r#   )r   createrevlogtextgetr   hashrevisionsha1addrevision)	r   textmetatransactionlinknodep1p2hashtextr#   s	            r   addremotefilelog.addI   s\    //((7#TXXj%9
 ++H"=8   
 	
r   c                &   [         R                  " [        U5      U5      nSX4-  n	Un
SnU(       a  SU;   a  US   n[        US   5      n
U	SXjXWU4-  -  n	[	        5       n0 n/ nXR
                  R                  :w  ak  U nU(       a   [        U R                  XR
                  5      nUR                  UR                  U
5      5        UR                  U
5        UR                  U
5        XPR
                  R                  :w  aB  UR                  U R                  U5      5        UR                  U5        UR                  U5        SnU(       a  UR                  S5      nUU   u  nnnnU=(       d    SnUSUUUUU4-  -  nUU R
                  R                  :w  a(  UU;  a"  UR                  U5        UR                  U5        UU R
                  R                  :w  a(  UU;  a"  UR                  U5        UR                  U5        U(       a  M  U	U-  n	U	$ )Ns   %s %sr   rJ   rK   s   %s%s%s%s%s r   )r   buildfileblobheaderlenr   setr7   nullidr3   r6   updateancestormapappendrW   pop)r   rP   rQ   flagsrT   rU   r#   rS   headerdatarealp1copyfromvisited
pancestorsqueuep1flogancestortextcpa1pa2ancestorlinknode
pacopyfroms                         r   _createfileblobremotefilelog._createfileblobS   s   00TEBF>)GtOG}Hj)*F4x"HHH%
YY%%%F&t{{HiiHf0089LL KK!!!d..r23LLKKO 		!A5?]2C&
#*sJO /  L dii&&&3g+=S!C dii&&&3g+=S!C % e( 	r   c
                    Uc  [         R                  " XU5      n[         R                  " U5      u  p[        R                  " U UU5      u  pU R                  UUUUUUUUX4S9	$ )N)
_metatuple)r   rN   	parsemetar   processflagswriteaddrawrevision)r   rP   rR   rS   rT   rU   
cachedeltar#   rb   sidedatarQ   
metaoffsetrawtextvalidatehashs                 r   rO   remotefilelog.addrevision   s     <//"=D&006 ( : :!

 "") # 

 
	
r   c
           	        U	(       a  U	u  pO[         R                  " U5      u  pUS:w  a  SnU(       a  XS  nOUnU R                  XXtXVU5      nU R                  R                  R                  U R                  Xm5        U$ )Nr   )r   ru   rq   r7   r8   addremotefilelognoder   )r   r{   rR   rS   rT   rU   r#   rb   rx   rt   rQ   rz   blobtextrd   s                 r   rw   remotefilelog.addrawrevision   s       *D*  +44W=DA: J {+HH##Er
 			33DMM4Nr   c                    U R                   R                  R                  U R                  U5      nX!   u  p4pVU(       a  Xc4$ gNFr7   metadatastoregetancestorsr   )r   r#   	ancestorsrT   rU   rS   rf   s          r   renamedremotefilelog.renamed   s<    II++88M	%._">!r   c                6    [        U R                  U5      5      $ )z#return the size of a given revision)r[   rG   r)   s     r   sizeremotefilelog.size   s    499T?##r   c                `    XR                   R                  :X  a  gU R                  U5      nX2:g  $ )z`compare text with a given file revision

returns True if text is different than what is stored.
T)r7   r]   rG   )r   r#   rP   nodetexts       r   cmpremotefilelog.cmp   s-     99###99T?r   c                    g)NTr1   r   s    r   __nonzero__remotefilelog.__nonzero__       r   c                :    U R                   S;   a  g[        S5      e)N)s   .hgtagss   .hgsubs   .hgsubstater   s   len not supported)r   RuntimeErrorr   s    r   __len__remotefilelog.__len__   s     ==CC
 /00r   c                    / $ r   r1   r   s    r   headsremotefilelog.heads  s    	r   c                    gr   r1   r   s    r   emptyremotefilelog.empty  s    r   c                    [        U[        5      (       a  [        R                  " S5      eU R                  R
                  nUR                  U R                  U5      R                  [        R                  S5      $ )Ns3   remotefilelog does not accept integer rev for flagsr   )
isinstanceintr   ProgrammingErrorr7   r8   getmetar   rM   r   METAKEYFLAG)r   r#   r   s      r   rb   remotefilelog.flags
  s^    dC  ((F  		&&}}T]]D155i6K6KQOOr   c                :   XR                   R                  :X  a,  U R                   R                  U R                   R                  4$ U R                   R                  R                  U R                  U5      nX!   u  p4pVU(       a  U R                   R                  nX44$ r   )r7   r]   r   r   r   r   r#   r_   rT   rU   rS   rf   s          r   parentsremotefilelog.parents  sw    99###99##TYY%5%555ii--::4==$O%0%6"!!Bvr   c                $    U R                  U5      $ r   )r   r   revs     r   
parentrevsremotefilelog.parentrevs  s     ||C  r   c                t    U R                   R                  R                  U R                  U5      nX!   u  p4pVU$ r   r   r   s          r   rS   remotefilelog.linknode"  s4    ii--::4==$O%0%6"r   c                    U R                   R                  5       R                  R                  U R	                  U5      5      $ r   )r7   
unfiltered	changelogr   rS   r)   s     r   linkrevremotefilelog.linkrev'  s/    yy##%//33DMM$4GHHr   c	              #    #    AAAAAS n	U H  n
U R                  U
5      u  pU	c  U=pWU
:X  a  U R                  R                  nXR                  R                  :w  a  S nU R                  X5      nOU R	                  U
5      nS n[
        R                  " U
UUU R                  U
5      UU R                  U
5      S UUS SS9v   M     g 7f)Nr   )r#   p1nodep2noderS   basenoderb   baserevisionsizerB   deltary   protocol_flags)	r   r7   r]   revdiffrawdatar
   revlogrevisiondeltarS   rb   )r   nodes
nodesorderrevisiondataassumehaveparentrevisionsdeltaprevious	deltamodesidedata_helpers
debug_infoprevnoder#   rT   rU   r   rB   r   s                   r   emitrevisionsremotefilelog.emitrevisions*  s      &?D\\$'FB&((499++99+++X4<<-,,t,!jj&!%!   s   CCc                l    [         R                  " U R                  U5      U R                  U5      5      $ r   )r	   textdiffr   )r   node1node2s      r   r   remotefilelog.revdiffU  s%    ~~dll514<<3FGGr   c                    [        U5      S:X  a  [        U5      n[        U5      S:w  a*  [        R                  " XR                  [        S5      5      eU$ )N(      s   invalid lookup input)r[   r   r   LookupErrorr   r   r)   s     r   lookupremotefilelog.lookupX  sJ    t9?t9Dt9?##mmQ'>%?  r   c                    U$ r   r1   r)   s     r   r   remotefilelog.revb  s    r   c                \    [        U[        5      (       a  [        R                  " S5      eU$ )Ns2   remotefilelog does not convert integer rev to node)r   r   r   r   r   s     r   r#   remotefilelog.nodef  s,    c3((E  
r   c                   XR                   R                  :X  a  g[        U5      S:w  a*  [        R                  " XR
                  [        S5      5      eXR                   R                  R                  :X  d#  XR                   R                  R                  ;   a  [        R                  eU R                   R                  nUR                  U R
                  U5      nU(       a  U$ UR                  U R
                  U5      R                  [        R                  S5      nUS:X  a  U$ [         R"                  " XU5      S   $ )zreturns the revlog contents at this node.
this includes the meta data traditionally included in file revlogs.
this is generally only used for bundling and communicating with vanilla
hg clients.
r   r   s   invalid revision inputr   )r7   r]   r[   r   r   r   r   nodeconstantswdiridwdirfilenodeidsWdirUnsupportedr8   rM   r   r   r   r   processflagsread)r   r#   rawr   r{   rb   s         r   rB   remotefilelog.revisionn  s     99###t9?##mmQ'@%A  II++222yy..>>>'''		&&))DMM40NdmmT266y7L7LaPA:N((>qAAr   c                "    U R                  USS9$ )NF)r   )rB   r)   s     r   r   remotefilelog.rawdata  s    }}Tu}--r   c                b    U R                   R                  R                  U R                  U5      $ r   r   r)   s     r   r_   remotefilelog.ancestormap  s#    yy&&33DMM4HHr   c                   XR                   R                  :X  d  X R                   R                  :X  a  U R                   R                  $ U R                  X5      u  p4UR                  5        VVs0 s H  u  pVXe_M	     nnn[        R
                  " XCU   X2   5      nU(       a  [        [        UR                  U5      5      $ U R                   R                  $ s  snnf r   )	r7   r]   _buildrevgraphitemsr   r   minmap__getitem__	r   abrevmap
parentfunckvr9   ancss	            r   r   remotefilelog.ancestor  s    		   A)9)9$999###!006&,lln5nFQ14n5!!*QiCs7..566yy 6s   /Cc                p   XR                   R                  :X  d  X R                   R                  :X  a  U R                   R                  $ U R                  X5      u  p4UR                  5        VVs0 s H  u  pVXe_M	     nnn[        R
                  " XCU   X2   5      n[        UR                  U5      $ s  snnf )z@calculate all the heads of the common ancestors of nodes a and b)r7   r]   r   r   r   commonancestorsheadsr   r   r   s	            r   r   "remotefilelog.commonancestorsheads  s     		   A)9)9$999###!006&,lln5nFQ14n5,,ZFIN7&&-- 6s   /B2c                  ^ U R                  U5      nU R                  U5      n[        R                  " [        5      n[	        5       mX44 H  nUR                  5        H  u  pxXW   n	Uu  ppXR                  R                  :w  a)  U(       d"  U	R                  U
5        TR                  U
5        XR                  R                  :w  d  Mk  U	R                  U5        TR                  U5        M     M     [        R                  " [        5      n0 n[        R                  " U4S jU 5       5      nU(       a  UR                  5       u  nnUU;   a   U(       a  UU   R                  UU   5        M@  [        U5      [        U5      -
  S-
  nUUU'   U(       a  UU   R                  U5        UR                  U5       H  nUR                  UU45        M     U(       a  M  XR                  4$ )ztBuilds a numeric revision graph for the given two nodes.
Returns a node->rev map and a rev->[revs] parent function.
c              3  :   >#    U  H  oT;  d  M
  S U4v   M     g 7fr   r1   ).0n
allparentss     r   	<genexpr>/remotefilelog._buildrevgraph.<locals>.<genexpr>  s      "
)!j-@IT1Izs   	r   )r_   collectionsdefaultdictlistr\   r   r7   r]   r`   rW   dequera   r[   rM   
appendleftr   )r   r   r   amapbmap
parentsmapmappingr#   pdatar   rT   rU   rS   rf   r   r   ri   prevrevcurrent
currentrevparentr   s                        @r   r   remotefilelog._buildrevgraph  s    "" !,,T2
U
|G&}}$*-2* )))(NN2&NN2&)))NN2&NN2&  / $ !,,T2
!! "
)"
 
 $yy{GW& w'..vg? Z3v;6:J(F7O7#**:6$..1  *f!56 2 e$ ----r   c                    g r   r1   )r   minlinkrR   s      r   stripremotefilelog.strip  s    r   c                    / $ r   r1   r   s    r   filesremotefilelog.files  s    	r   c                    g)N)r   r   r1   r   s    r   	checksizeremotefilelog.checksize  r   r   )r=   r   r9   r6   r7   r:   )NN)NFFFNNN)returnz#Iterator[repository.irevisiondelta])F),r,   r-   r.   r/   r   RevlogError_flagserrorclassr   rG   rW   rq   r
   REVIDX_DEFAULT_FLAGSrO   rw   r   r   rawsizer   r   __bool__r   r   r   rb   r   r   rS   r   r   r   r   r   r#   rB   r   r_   r   r   r   r  r  r  r0   r1   r   r   r3   r3   4   s   ((=
7@ )) 
V *X$ G
  H1P	!

I "') 
-)VHB6.I 
./.br   r3   )
__future__r   r   typingr   mercurial.noder   mercurial.i18nr   	mercurialr   r   r	   r
   mercurial.interfacesr   mercurial.utilsr   mercurial.revlogutilsr    r   r   r   r3   r1   r   r   <module>r(     sL    #     ( * m mr   