
    6h:                   B   S SK Jr  S SKrS SKrS SKrSSKJr  SSKJrJ	r	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  SSKJr  SS	KJr  SS
KJr  \R<                  " S5      r\R<                  " S5      r \R<                  " S5      r!\R<                  " S5      r"Sr#\RH                  r$S r%S r&S r'S r(S=S jr)   S>S jr*S r+S r, " S S5      r- " S S\-5      r. " S S\.5      r/ " S S\/5      r0 " S  S!5      r1S" r2S# r3S$ r4       S?S% jr5S& r6S' r7S(r8     S@S) jr9S* r: " S+ S,5      r;     SAS- jr<     SAS. jr=     SAS/ jr>     SAS0 jr?\<\-4\=\.4\>\/4\?\04S1.r@S2 rAS3 rBS4 rCS5 rDS6 rE        SBS7 jrFS=S8 jrGS9 rH  SCS: jrI    SDS; jrJ   S>S< jrKg)E    )annotationsN   )_)hexnullrevshort)errormatchmdiffphasespycompatrequirementsscmutilutil)
repository)sidedata)	constants)storageutils   20s20s20s20ss   20s20s20s20s20ss   >20s20s20s20s20sHs   >B20s20s20s20s20sHs   lfsc                    [        U S5      n[        R                  " SU5      S   nUS::  a*  U(       a"  [        R                  " [        S5      U-  5      eg[        XS-
  5      $ )z-return the next chunk from stream as a string      >lr      invalid chunk length %d    )readexactlystructunpackr	   Abortr   )streamdls      7/usr/lib/python3/dist-packages/mercurial/changegroup.pygetchunkr"   /   sY    FAAeQ"AAv++a :;a?@@v1u%%r   c                6    [         R                  " SU S-   5      $ )z*return a changegroup chunk header (string)r   r   r   pack)lengths    r!   chunkheaderr'   :   s    ;;ufqj))r   c                 0    [         R                  " SS5      $ )zBreturn a changegroup chunk header (string) for a zero-length chunkr   r   r$    r   r!   
closechunkr*   ?   s    ;;ua  r   c                0    [        [        U 5      5      U -   $ )z3Obtain a changegroup chunk header for a named path.)r'   len)paths    r!   _fileheaderr.   D   s    s4y!D((r   c                D   SnSn U(       a(  U(       a  UR                  US5      nO<[        USS5      nO.[        R                  " SSS9u  pb[        R                  " US5      nUnU H  nUR                  U5        M     SnUUb  UR                  5         Ub7  U(       a  U(       a  UR                  U5        $ [        R                  " U5        $ $ ! Ub  UR                  5         Ub7  U(       a  U(       a  UR                  U5        f [        R                  " U5        f f = f)zWrite chunks to a file and return its filename.

The stream is assumed to be a bundle file.
Existing files will not be overwritten.
If no filename is specified, a temporary file is created.
Ns   wbwbi   s
   hg-bundle-s   .hg)prefixsuffix)openr   mkstemposfdopenwritecloseunlink)uichunksfilenamevfsfhcleanupfdcs           r!   writechunksrB   I   s     
BG#XXh. (D&1#++=PLB2t$BAHHQK >HHJC

7#		'"	  >HHJC

7#		'"	 s   A<C ADc                   SnUSSU-  -  -  nUS-  nSnUbd  [        U5      S-   SU-  -   [        ::  d   eXbR                  [        SU-  -
  5      -  n[        U[        5      (       a	  USU-  -  nOUS	U-  -  nS
nOXb-  nUb)  Xg-  nSnUc   eUS-  U-  nUb  USUU4-  -  nOUSU-  -  nUS-  nU R                  U5        g)z+Print one line of debug_unbundle_debug_infos   DEBUG-UNBUNDLING:           :r   Nr   s   %14.3f seconds   %10ds               d   s    (%3d%% of %s)s    (%3d%%)   
)r,   _KEY_PART_WIDTHljust
isinstancefloat	write_err)	r:   indentkey
base_valuepercentage_basepercentage_keylinepadding
percentages	            r!   _dbg_ubdl_linerW   l   s    !DDAJD4KCG3x!|q6z*o===		/QZ899j%((%
22DGj((D%G"%%%#%8
%%)  D
 K*,,DEMDLLr   c                (    U (       d  g[        U 5      $ )Ng        )sum)itemss    r!   _sumfr[      s     u:r   c           
     l   / n/ n/ nSU4SU4SU4/nU H@  nU H2  u  pxUS   R                  U5      (       d  M   UR                  U5          M9      S5       e   SU4SU4SU4/n	[        U S	S
[        U5      5        U	 H/  u  pU(       d  M  [        U SU
[        U5      [        U5      5        M1     U Vs/ s H  ofS   PM	     nnUR	                  5         [        U5      n[        U S	SU5        U	 HJ  u  pU(       d  M  U Vs/ s H  ofS   PM	     nnUR	                  5         [        U SU
[        U5      U5        ML     0 nU	 HJ  u  pS	S	S	S	S	S	S	S	S.=X'   nU H0  nXS   ==   S-  ss'   US   (       d  M  XS   S-   ==   S-  ss'   M2     ML     SnU(       a  [        U S	S5        U	 H]  u  pU(       a  [        U SU
5        X   nU H:  nUU   (       d  M  US-   n[        U SUUU   5        [        U SSUU   UU   5        M<     M_     0 nU	 H  u  p/ / / / / / / / S.=UU
'   nU HF  nUUS      R                  US   5        US   (       d  M)  UUS   S-      R                  US   5        MH     [        UR                  5       5       H$  u  nnUR	                  5         [        U5      UU'   M&     M     U(       a  [        U S	S5        U	 H`  u  pU(       a  [        U SU
5        UU
   nUnU H:  nUU   (       d  M  US-   n[        U SUUU   US5        [        U SSUU   US5        M<     Mb     gs  snf s  snf )z3display an unbundling report from debug informations
   CHANGELOG:s   MANIFESTLOG:s   FILELOG:ztarget-revlogunreachable	   changelog	   manifests   filesr   	   revisionsr   durations
   total-time)   fulls   full-cached   snapshots   snapshot-cached   deltas   delta-cached   unknowns   unknown-cachedtypezusing-cached-bases   -cached)rc   rd   re   rf   s
   type-countrE      s   cacheds	   type-times   totalN)
startswithappendrW   r,   sortr[   listrZ   )r:   
debug_infocl_infomn_infofl_info	_dispatcher1   info	each_inforP   all_durationstotal_duration	durations
each_typestypesEXPECTED_TYPESttntceach_type_timet_keyvaluetds                           r!   display_unbundle_debug_infor      s   GGG	 	'"	gI
 %LF!,,V44A &
 (-'5  
w	w	7I 2q,J8	r1c3t9c*o>  -77Jqz]JM7=)N2q-8	,01Dqz]D	1r1c5#3^D  J	 ! 	#
 		

% AF)!$%%i*,-2-    BNr1m,	2q#&O Buu*_r1b!B%0r1i2">	 !	  N	 "!	#
 		
sa AaiL*.$%%!F)j()00:?  !OLE5JJLU|AeH , & r1l+	2q#&3 Buu*_r1b!B%X>r1i2HE	 ! E 8 2s   3L, L1c                      \ rS rSrSr\r\R                  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S rS rS r   SS jr\R4                  SSS4S jrS rSrg)cg1unpackeri
  a  Unpacker for cg1 changegroup streams.

A changegroup unpacker handles the framing of the revision data in
the wire format. Most consumers will want to use the apply()
method to add the changes from the changegroup to a repository.

If you're forwarding a changegroup unmodified to another consumer,
use getchunks(), which returns an iterator of changegroup
chunks. This is mostly useful for cases where you need to know the
data stream has ended by observing the end of the changegroup.

deltachunk() is useful only if you're applying delta data. Most
consumers should prefer apply() instead.

A few other public methods exist. Those are used only for
bundlerepo and some debug commands - their use is discouraged.
   01r   Nc                B   Uc  SnU[         R                  R                  ;  a"  [        R                  " [        S5      U-  5      eUS:X  a  Sn[         R                  R                  U5      nUR                  U5      U l        X l	        U=(       d    0 U l
        S U l        g )N   UNs#   unknown stream compression type: %ss   BZs   _truncatedBZ)r   compenginessupportedbundletypesr	   r   r   forbundletypedecompressorreader_stream_typeextrascallback)selfr>   algr   
compengines        r!   __init__cg1unpacker.__init__"  s    ;Cd&&;;;++a FG#MNN%<!C%%33C8
!44R8
lr   c                J    U R                   S L=(       a    U R                   S:g  $ )Nr   )r   r   s    r!   
compressedcg1unpacker.compressed2  s    zz%=$***==r   c                8    U R                   R                  U5      $ N)r   read)r   r    s     r!   r   cg1unpacker.read5  s    ||  ##r   c                8    U R                   R                  U5      $ r   )r   seek)r   poss     r!   r   cg1unpacker.seek8  s    ||  %%r   c                6    U R                   R                  5       $ r   )r   tellr   s    r!   r   cg1unpacker.tell;  s    ||  ""r   c                6    U R                   R                  5       $ r   )r   r8   r   s    r!   r8   cg1unpacker.close>  s    ||!!##r   c                   [        U R                  S5      n[        R                  " SU5      S   nUS::  a*  U(       a"  [        R
                  " [        S5      U-  5      egU R                  (       a  U R                  5         US-
  $ )Nr   r   r   r   )r   r   r   r   r	   r   r   r   )r   r   r    s      r!   _chunklengthcg1unpacker._chunklengthA  sg    a(MM%#A&6kk!$>"?!"CDD==MMO1ur   c                    0 $ )z*v10 does not have a changelog header chunkr)   r   s    r!   changelogheadercg1unpacker.changelogheaderL      	r   c                    0 $ )z)v10 does not have a manifest header chunkr)   r   s    r!   manifestheadercg1unpacker.manifestheaderP  r   r   c                h    U R                  5       nU(       d  0 $ [        U R                  U5      nSU0$ )zBreturn the header of the filelogs chunk, v10 only has the filename   filename)r   r   r   )r   r    fnames      r!   filelogheadercg1unpacker.filelogheaderT  s3    IDLL!,U##r   c                0    Uu  p4pVUc  UnOUnSnSn	X4XWXhU	4$ Nr   r)   )
r   headertupleprevnodenodep1p2cs	deltabaseflagsprotocol_flagss
             r!   _deltaheadercg1unpacker._deltaheader\  s5    &"I I>AAr   c           	     .   U R                  5       nU(       d  0 $ [        U R                  U R                  5      nU R                  R                  U5      n[        U R                  X R                  -
  5      nU R                  XA5      nUu  pgppnXgXXU0 U4	$ r   )r   r   r   deltaheadersizedeltaheaderr   r   )r   r   r    
headerdataheaderdeltar   r   r   r   r   r   r   s                r!   
deltachunkcg1unpacker.deltachunkf  s    I t/C/CD
!!((4DLL!.B.B*BC""64=C:"N5"nLLr   c              #  h  #    SnUSU R                   -   :  a  Sn [        U 5      nU(       d  US:  a  US-  nOU(       a  US-  nOISn[        [        U5      5      v   SnU[        U5      :  a  US-   nX4U v   UnU[        U5      :  a  M  Mt  [	        5       v   USU R                   -   :  a  M  gg7f)a  returns all the chunks contains in the bundle

Used when you need to forward the binary stream to a file or another
network API. To do so, it parse the changegroup data, otherwise it will
block in case of sshrepo because it don't know the end of the stream.
r   rE   Tr   Fi   N)_grouplistcountr"   r'   r,   r*   )r   parts	noentrieschunkr   nexts         r!   	getchunkscg1unpacker.getchunksr  s     & a$....I  qy
"
!	!#e*--CJ&;DD/)C CJ&# * ,/ a$....s   B	B2!B20B2c           	         UR                   U l        U R                  5         U R                  5       nUR                  R                  S5      n	U	R                  UUUUUUS9  UR                  5         S U l        g )Nr   addrevisioncbrm   delta_base_reuse_policy)	incrementr   r   	deltaitermanifestlog
getstorageaddgroupcomplete)
r   reporevmaptrpprogr   rm   r   deltasstorages
             r!   _unpackmanifestscg1unpacker._unpackmanifests  sv     
 	!""--c2'!$; 	 	
 	r   c	                  ^^,^-^.^/^0^1^2^3^4^5 TR                  5       mSn	TR                  R                  SS5      (       a  / n	[        R                  TR                  ;   =(       d    [        R
                  TR                  ;   =(       a    U R                  S:H  =(       a    US:H  n
U
(       a(  [        R                  " TU=(       d
    [        5       SS9nOSnU-U4S jnU-4S	 jn UR                  R                  S
U5      nUR                  R                  SU5        TR                  "  S,SS0[        R                  " UR                  5      D6  TR                  m-T-R!                  U5        [#        T-5      n[$        R&                  " U5      nTR                  R)                  [+        S5      5        [#        T-5      m.TR                  R-                  [+        S5      [+        S5      US9nUR.                  U l        [        5       m0/ m/U.U/4S jnU0U4S jnU R3                  5         U R5                  5       nT-R7                  UUUSUUU	US9(       d  TR                  R9                  SSS9  [#        T05      n[#        T-5      nUT.-
  nUR;                  5         ASm0SU l        0 m50 m4TR                  R)                  [+        S5      5        TR                  R-                  [+        S5      [+        S5      US9nSnU(       a  [<        R>                  US   ;   a  U54S jnU RA                  TUUUUU	US9  0 nTR                  R                  SS5      (       a  TR                  m-TRB                  n[E        T.U5       Ht  nT-RG                  U5      RH                  nUU   RK                  5       nURM                  5        H/  u  nnUR                  U[        5       5      RO                  U5        M1     Mv     SnU(       a  [<        RP                  US   ;   a  U44S jnTR                  R)                  [+        S5      5        [S        TU UUUUUU	US9	u  n n!U(       a  [<        RT                  US   ;   a  T-RW                  XT.US-
  5        T5RM                  5        H  u  n"u  n#n$U"RW                  XU#U$5        M     T4RM                  5        H  u  n%u  n#n$U%RW                  XU#U$5        M     URX                  R                  S S!5        URX                  R                  S"S!5        URX                  R                  S#S!5        URX                  R                  S$S!5        TR                  RZ                  (       dE  URX                  S ==   U-  ss'   URX                  S"==   U -  ss'   URX                  S#==   U!-  ss'   S!n&[#        T-5      n'T-R]                  UU'5      u  n(m1U&[#        T15      [#        U(5      -
  -  n&T1 H"  n)TU)   R_                  5       (       d  M  U&S-  n&M$     TR                  RZ                  (       d  URX                  S$==   U&-  ss'   TRa                  5         US!:  a  S%UR                  ;  ag  [c        T-Re                  T.5      5      UR                  S%'   [c        T-Re                  US-
  5      5      UR                  S&'   [g        UR                  5      m2OR[g        UR                  5      m2[c        T-Re                  T.5      5      T2S%'   [c        T-Re                  US-
  5      5      T2S&'   TR                  "  S-SS0[        R                  " T25      D6  [E        T.U5      m,Sn*US';   a:  TRi                  5       (       a  [j        Rl                  =nn*O[j        Rn                  =nn*T,(       a  [j        Rp                  " TX%T,5        U*b5  T/(       a  T/Rs                  T,5        OT,m/[j        Rt                  " TUU*/ T/S(9  / m/US!:  a%  U,U-U.U1U2U4S) jm3URw                  S*T.-  UU34S+ j5        U	b  [y        TR                  U	5        TR                  R{                  5         U&S!:  a  U&S-
  n+U+$ U&S-   n+U+$ ! TR                  R{                  5         f = f).a  Add the changegroup returned by source.read() to this repo.
srctype is a string like 'push', 'pull', or 'unbundle'.  url is
the URL of the repo where this changegroup is coming from.

Return an integer summarizing the change to this repo:
- nothing changed or no source: 0
- more heads than before: 1+added heads (2..n)
- fewer heads than before: -1-removed heads (-2..-n)
- number of heads stays the same: 1

`sidedata_categories` is an optional set of the remote's sidedata wanted
categories.

`delta_base_reuse_policy` is an optional argument, when set to a value
it will control the way the delta contained into the bundle are reused
when applied in the revlog.

See `DELTA_BASE_REUSE_*` entry in mercurial.revlogutils.constants.
N   debugs   unbundling-stats   04s   pullT)pullc                h   > TR                   R                  S[        U 5      -  5        [        T5      $ )Ns   add changeset %s
)r:   debugr   r,   )xclr   s    r!   csmap cg1unpacker.apply.<locals>.csmap  s&    GGMM/%(:;r7Nr   c                &   > TR                  U 5      $ r   rev)r   r   s    r!   r   !cg1unpacker.apply.<locals>.revmap  s    66!9r   s   sources   urlthrows   adding changesets

   changesets   chunksunittotalc                6   > UT:  a  TR                  U5        g g r   )rj   )r   r   clstartduprevss     r!   ondupchangelog)cg1unpacker.apply.<locals>.ondupchangelog  s    =NN3' !r   c                   > U R                  U5      nTc   eTR                  UR                  5        TR                  X5        g r   )changelogrevisionupdatefilesregister_changeset)r   r   ctx	efilessetr   s      r!   onchangelog&cg1unpacker.apply.<locals>.onchangelog  s?    **3/ ,,,  +''1r   )alwayscacher   duplicaterevisioncbrm   r   s(   applied empty changelog from changegroups   warn-empty-changegroup)configs   adding manifests
r_   r   c                r   > TR                  U 5      nU(       d  X4TU '   g XS   S-   :X  d   eUS   U4TU '   g Nr   r   get)manifestr   rangetouched_manifestss      r!   on_manifest_rev*cg1unpacker.apply.<locals>.on_manifest_revM  sJ     1 5 5h ?$;>*-h7#&(Q,#66#6;@8S/-h7r   r   s   servers   validatec                r   > TR                  U 5      nU(       d  X4TU '   g XS   S-   :X  d   eUS   U4TU '   g r
  r  )filelogr   r  touched_filelogss      r!   on_filelog_rev)cg1unpacker.apply.<locals>.on_filelog_revo  sJ     0 4 4W =$9<
,W5#&(Q,#66#69>q3,W5r   s   adding file changes
s   changegroup-count-changesetsr   s   changegroup-count-revisionss   changegroup-count-filess   changegroup-count-heads   node	   node_last)s   pushs   serve)revsc                  > T[        T	5      :  a  g T	R                  " S0 [        R                  " T5      D6  T HY  nTR	                  5       n[        TR                  U5      5      US'   US	 T	R                  " S0 [        R                  " U5      D6  M[     T	R                  R                  SS[        T5      SR                  T Vs/ s H  n[        US S 5      PM     sn5      5        g s  snf )	Nr  r     incomings$   %d incoming changes - new heads: %s
s   ,    )s   changegroup)r  )
r,   hookr   	strkwargscopyr   r   r:   logjoin)
unused_successr   argsrA   addedr   r   heads_addedhookargsr   s
       r!   runhooks#cg1unpacker.apply.<locals>.runhooks  s     #d)+IIM0B0B80LM$'}}(+BGGCL(9W .		J1C1CD1IJ	  % GGKK#@E


#D1C"1J#DE	 $Es   C+s   changegroup-runhooks-%020ic                &   > TR                  T5      $ r   )
_afterlock)trr   r'  s    r!   <lambda>#cg1unpacker.apply.<locals>.<lambda>  s    tx8r   )s   prechangegroup)s   pretxnchangegroup)>
unfilteredr:   
configboolr   REVLOGV2_REQUIREMENTCHANGELOGV2_REQUIREMENTversionsidedatamodget_sidedata_helperssetr&  
setdefaultr  r   r  	changelogdelayupdater,   weakrefproxystatusr   makeprogressr   r   r   r   r   	develwarnr   revlog_constantsKIND_MANIFESTLOGr   r   r  r   r  read_delta_new_entriesrZ   addKIND_FILELOG_addchangegroupfilesKIND_CHANGELOGrewrite_sidedatachangesquiet	diffheadsclosesbranchinvalidatevolatilesetsr   r   dict
publishingr   publicdraftregisternewextendadvanceboundaryaddpostcloser   flush)6r   r   r+  srctypeurltargetphaseexpectedtotalsidedata_categoriesr   rm   adding_sidedatasidedata_helpersr   r   oldrevcountr   progressr   r  r   efilesclend
changesetsr  	needfilesmlcsetmfnodemfestfnr  newrevsnewfilesmfstartrevendrevfl
deltaheadsnewrevcountheads_removedhphaseallretr$  r   r   r   r  r%  r&  r'  r  r  s6    `                                          @@@@@@@@@@r!   applycg1unpacker.apply  s   <  
77h(;<<J 11T5F5FF M774;L;LL# %	#
 7" 	 *??#,su   $		A	
 kk,,Y@GKK""63/II!)-191C1CBKK1P BNN2b'K--#CGGNN1345"gGww++- q|= , H %..DMIG(2   "^^%F;; )$2%(?  	 !!?4 "  ^FGEJ I DM !#! GGNN1234 ww++,a	l* , H #O#448H8KKJ !!-%(? "  Iww!!)[99^^%%!'51D11$7@@FvJ==?E %1!,,Q6::1= !.	 2 "N#004DQ4GGH GGNN1567 4,%(?
!GX  #226Fq6II''w	 /@.E.E.G*B*6''xP /H.>.D.D.F*B*6''xP /G JJ!!"A1EJJ!!"@!DJJ!!"<a@JJ!!"<a@ 77==

:;zI;

9:gE:

56(B6Jb'K)+k;)O&M;#k*S-???J 7''))!OJ !
 77==

56*D6'')A~"++-+.rwww/?+@BKK(03BGGEAI4F0GBKK-#BKK0H#BKK0H(+BGGG,<(=HW%-01C-DH\*		( ((2 '5)EH-- ??$$-3]]:K( .4\\9K(""4%@#NN5)#G&&tR2GLA~ , 1G;8 %+DGGZ@GGMMO>q.C 
 q.C
 GGMMOs   #T"a# 	H,a# #a?c              #  \   ^ ^#    Sm[        UU 4S j0 5       H  nUSS v   US   mM     g7f)zz
returns an iterator of the deltas in this changegroup

Useful for passing to the underlying storage system to be stored.
Nc                 &   > TR                  T 5      $ r   )r   )chainr   s   r!   r,  'cg1unpacker.deltaiter.<locals>.<lambda>
  s    dooe&<r      r   )iter)r   	chunkdatarw  s   ` @r!   r   cg1unpacker.deltaiter  s5      <bAIBQ-aLE Bs   (,)r   r   r   r   r   NNN)__name__
__module____qualname____firstlineno____doc___CHANGEGROUPV1_DELTA_HEADERr   sizer   r2  r   r   r   r   r   r   r8   r   r   r   r   r   r   r   r   r   rN  rs  r   __static_attributes__r)   r   r!   r   r   
  s    $ .K!&&OGO >$&#$	$B
M+f  $F LL  $EN

!r   r   c                  >    \ rS rSrSr\r\R                  rSr	S r
Srg)cg2unpackeri  zUnpacker for cg2 streams.

cg2 streams add support for generaldelta, so the delta header
format is slightly different. All other features about the data
remain the same.
   02c                "    Uu  p4pVnSnSn	X4XVXxU	4$ r   r)   
r   r   r   r   r   r   r   r   r   r   s
             r!   r   cg2unpacker._deltaheader  s'    &1#">AAr   r)   N)r~  r  r  r  r  _CHANGEGROUPV2_DELTA_HEADERr   r  r   r2  r   r  r)   r   r!   r  r    s$     .K!&&OGBr   r  c                  `   ^  \ rS rSrSr\r\R                  rSr	Sr
S r   SU 4S jjrSrU =r$ )	cg3unpackeri#  zUnpacker for cg3 streams.

cg3 streams add support for exchanging treemanifests and revlog
flags. It adds the revlog flags to the delta header and an empty chunk
separating manifests and files.
   03rE   c                    Uu  p4pVpxSn	X4XVXxU	4$ r   r)   r  s
             r!   r   cg3unpacker._deltaheader0  s"    -8*">AAr   c           
     n  > [         TU ]  UUUUUUUS9  [        U R                  0 5       H  nUS   n	UR                  R                  SU	-  5        U R                  5       n
UR                  R                  U	5      R                  U
UUUUUS9(       a  Mj  [        R                  " [        S5      5      e   g )Nr   r      adding %s revisions
s"   received dir revlog group is empty)superr   rz  r   r:   r   r   r   r   r   r	   r   r   )r   r   r   r   r   r   rm   r   r{  r   r   	__class__s              r!   r   cg3unpacker._unpackmanifests5  s     	 '!$; 	! 	
 d00"5I+&AGGMM2Q67^^%F##..q1::+%(? ;   kk!$I"JKK 6r   r)   r}  )r~  r  r  r  r  _CHANGEGROUPV3_DELTA_HEADERr   r  r   r2  r   r   r   r  __classcell__r  s   @r!   r  r  #  sA     .K!&&OGOB  $ L  Lr   r  c                  R   ^  \ rS rSrSr\r\R                  rSr	S r
U 4S jrSrU =r$ )cg4unpackeriX  zLUnpacker for cg4 streams.

cg4 streams add support for exchanging sidedata.
r   c                    Uu  p4pVpxn	XEXgXU4$ r   r)   )
r   r   r   r   r   r   r   r   r   r   s
             r!   r   cg4unpacker._deltaheaderb  s    =H:biU>AAr   c           	        > [         TU ]  U5      nU(       d  U$ Uu	  nnnnnnn	n
nU
(       a   e0 n
U[        R                  -  (       a+  [	        U R
                  5      n[        R                  " U5      n
UUUUUUU	U
U4	$ r   )r  r   r   CG_FLAG_SIDEDATAr"   r   r3  deserialize_sidedata)r   r   resr   r   r   r   r   r   r   r   r   sidedata_rawr  s                r!   r   cg4unpacker.deltachunkf  s    g *J 
	
|K888#DLL1L"77EH 

 
	
r   r)   )r~  r  r  r  r  _CHANGEGROUPV4_DELTA_HEADERr   r  r   r2  r   r   r  r  r  s   @r!   r  r  X  s/    
 .K!&&OGB!
 !
r   r  c                       \ rS rSrS rS rSrg)headerlessfixupi  c                    X l         Xl        g r   )_h_fh)r   r>   rp  s      r!   r   headerlessfixup.__init__  s    r   c                   U R                   (       aY  U R                   S U U R                   US  so l         [        U5      U:  a%  U[        U R                  U[        U5      -
  5      -  nU$ [        U R                  U5      $ r   )r  r,   r   r  )r   rf  r   s      r!   r   headerlessfixup.read  sf    77!dggabkJAw1vz[1s1v:66H488Q''r   )r  r  N)r~  r  r  r  r   r   r  r)   r   r!   r  r    s    (r   r  c              #  ^  #    UR                   b  SUR                   pCO|UR                  U R                  :X  a,  UR                  n[        R
                  " [        U5      5      nO6UR                  n[        R                  " UR                  [        U5      5      nU" U5      n[        [        U5      [        U5      -   [        U5      -   5      v   Uv   U(       a  Uv   Uv   UR                  [        R                  -  (       a'  UR                  n[        [        U5      5      v   Uv   gg7f)z0Serialize a revisiondelta to changegroup chunks.Nr   )r   basenodenullidrevisionr   trivialdiffheaderr,   replacediffheaderbaserevisionsizer'   r   r   r  r   )r   r   headerfnr1   datametar   s          r!   _revisiondeltatochunksr    s      {{EKK	4;;	&~~((T3~~(()?)?TKE?D
c$i#f+-D	9
::
J
Jk::: >>#h-(( ;s   D+D-c                &   ^^ UU4S jn[        XS9$ )z&Sort nodes for changegroup generation.c                2   > TR                  T" U 5      5      $ r   r   )rf  r   lookups    r!   r,  $_sortnodesellipsis.<locals>.<lambda>  s    BFF6!9%r   rP   )sorted)storenodesr   r  rP   s     `` r!   _sortnodesellipsisr    s    $ &C%!!r   c	                j  ^ ^^^^^^^ TU   n	U UUUUUU4S jmU	(       a  TR                  T5      [        [        4:X  a  [        [        pOD[        U	5      S:X  a  [        U4S jU	 5       5      u  n
[        nO[        U4S jU	 5       5      u  pTR	                  U
5      TR	                  U5      pXU4$ )Nc                  > U [         :X  a  [         $ T	(       a  U $ U /nU(       Ga  US   nUSS nUT;   a  TU   $ UT;   a=  UR                  TR                  U5       Vs/ s H  o3[         :w  d  M  UPM     sn5        OUT
;   a1  UR                  T
U    Vs/ s H  o3[         :w  d  M  UPM     sn5        O}[        TSS5       H  nTR	                  U5      U :X  d  M  Us  $    [        TS5      (       a  TR                  nOTR                  R                  n[        R                  " SUTU 4-  5      eU(       a  GM  [         $ s  snf s  snf )aM  Turn a changelog revnum into a local revnum.

The ellipsis dag is stored as revnums on the changelog,
but when we're producing ellipsis entries for
non-changelog revlogs, we need to turn those numbers into
something local. This does that for us, and during the
changelog sending phase will also expand the stored
mappings as needed.
r   r   Ntargets?   unable to resolve parent while packing '%s' %r for changeset %r)
r   rP  
parentrevsr  linkrevhasattr
display_id_revlogr	   r   )clrevwalkpppir  r   clrevtolocalrevfullclnodesischangelogprecomputedellipsisr   r  s         r!   local)_resolvenarrowrevisioninfo.<locals>.local  sJ    GNL wQA8DO#&q))k!"--*:L*:BGmR*:LM))"5a"8J"8B'MR"8J  sAr*A}}Q'50  +
 5(++"--F #]]55Fkk),2C+?@ G dP E M Ks   E0EE'Er   c              3  4   >#    U  H  nT" U5      v   M     g 7fr   r)   .0r  r  s     r!   	<genexpr>-_resolvenarrowrevisioninfo.<locals>.<genexpr>%  s     5AuQxx   c              3  4   >#    U  H  nT" U5      v   M     g 7fr   r)   r  s     r!   r  r  (  s     6+Qa+r  )r  r   r,   r  r   )r   r  r  r   r  linknoder  r  r  linkparentsr   r   p1nodep2noder  s   ````  ```     @r!   _resolvenarrowrevisioninfor    s     &g.KC CJ 5++C0Wg4FF'B	[	Q	5556+66ZZ^UZZ^F8##r   c              #    #    U(       d  gU R                   nU(       a  SnOU(       a  [        XX5      nSnOSnU(       a  / n0 n0 nU Hz  nUR                  U5      nU" U5      nUR                  U5      nUUU'   UU	;   a  UUU'   O+UU
;  a  MF  [        UUUUUUUU	U
5	      u  nnnUU4UU'   UUU'   UR	                  U5        M|     UnSnUb-  U R
                  R                  U[        S5      [        U5      S9nU R
                  R                  SS5      nUS;  a)  [        S	5      nU R
                  R                  UU-  5        [        R                  nU(       a  [        R                  nO-US
:X  a  [        R                  nOUS:X  a  [        R                  nUR!                  UUSU(       + UUUS9n[#        U5       H  u  nnU(       a  UR%                  US-   5        U(       ac  WUR&                     nUR&                  W;   aC  UUR&                     u  nnUUl        UUl        U=R,                  [        R.                  -  sl        OU" UR&                  5      nUUl        Uv   M     U(       a  UR3                  5         gg7f)a  Calculate deltas for a set of revisions.

Is a generator of ``revisiondelta`` instances.

If topic is not None, progress detail will be generated using this
topic name (e.g. changesets, manifests, etc).

See `revlogutil.sidedata.get_sidedata_helpers` for the doc on
`sidedata_helpers`.
Ns   storages   nodesr   r   s   devels   bundle.delta)r      p1rc   s0   config "devel.bundle.delta" as unknown value: %sr  rc   T)
nodesorderrevisiondataassumehaveparentrevisions	deltamoderZ  rm   r   )r7  r  r   r  rj   r:   r<  r   r,   r  warnr   CG_DELTAMODE_STDCG_DELTAMODE_PREVCG_DELTAMODE_P1CG_DELTAMODE_FULLemitrevisions	enumerater   r   r  r  r   REVISION_FLAG_ELLIPSISr  r   )r   r  r  r  r  forcedeltaparentprevtopicellipsesr  r  r  rZ  rm   r   r  filteredadjustedparents	linknodesr   r   r  r  r  r  r\  configtargetmsgr  	revisionsr  r  s                                  r!   
deltagroupr  /  s    2 	B  
	"5<

 	D))D/Cd|HffX&G'*OG$ ;&"*	$  33
 ,F#'
,( *0(8%"*	$OOD!E H  H77'')CJ ( 
 77>>(O<L00GHS<'(++I00			..			 00	##&.,) $ I !+8OOAE" /H}}/!0!?"("(*"C"CC hmm,H$# ,&  s   JJc                 &    SSSSSSSSSSSSSSSS.$ )zs"build a "new" debug_info dictionnary

That dictionnary can be used to gather information about the bundle process
r   )revision-totalrevision-changelogrevision-manifestrevision-files
file-countmerge-totalavailable-deltaavailable-fulldelta-against-prev
delta-fulldelta-against-p1denied-delta-candeltafndenied-base-not-availablereused-storage-deltacomputed-deltar)   r)   r   r!   make_debug_infor	    s;     #$%& ! r   c                2    S H  nX==   X   -  ss'   M     g)zmerge the debug information from <other> into <base>

This function can be used to gather lower level information into higher level ones.
)r  r  r  r  r  r   r  r  r  r  r  r  r  r  Nr)   )baseotherrP   s      r!   merge_debug_infor    s    
  		UZ	!r      c                X   SnUSSU-  -  -  nUS-  nUbD  [        U5      S-   SU-  -   [        ::  d   eXR                  [        SU-  -
  5      -  nUSU-  -  nOX-  nUb$  Uc   eUS-  U-  n	Ub  US	U	UU4-  -  nOUS
U	-  -  nU(       a	  US-  nX-  nUS-  nU R                  U5        g)z)Print one line of debug_bundle_debug_infos   DEBUG-BUNDLING: rD   rE   rF   Nr   rG   rH   s    (%d%% of %s %d)s    (%d%%)rI   )r,   rJ   rK   rN   )
r:   rO   rP   rQ   rR   rS   percentage_refextrarT   rV   s
             r!   _dbg_bdl_liner    s     DDAJD4KC3x!|q6z*o===		/QZ899*$$"%%%#%8
%'+  D J++DEMDLLr   c                   UnUnUnUnSSU4SSU4SSU4/n	[        U SSUS	   5        [        U S
SUS   5        [        U S
SUS   5        SUS   -  n
[        U S
SUS   U
S9  US   (       a  [        U S
SUS   US	   5        U	 H&  u  pnUS   (       d  M  [        U SXS   US	   5        M(     [        U SS5        [        U S
SUS   US   SUS   S9  US   (       a  [        U SSUS   5        U	 H"  u  pnUS   (       d  M  [        U SXS   5        M$     US   (       a  [        U SSUS   5        U	 H"  u  pnUS   (       d  M  [        U SXS   5        M$     US    (       a  [        U S
S!US    5        US"   (       a  [        U SS#US$   US"   S%US"   S9  U	 H*  u  pnUS"   (       d  M  [        U SUUS$   US"   S%US"   S9  M,     US&   (       a  [        U SS'US&   5        U	 H"  u  pnUS&   (       d  M  [        U SXS&   5        M$     US(   (       a  [        U SS)US&   5        U	 H"  u  pnUS(   (       d  M  [        U SXS(   5        M$     g*)+zAdisplay debug information gathered during a bundling through `ui`r^   s   clr_   s   mnr`   s   flr   ra   r  r   r  s   manifestr  s   (for %d revlogs)r  r  )r  r  s   mergerE   s   deltass   from-storager  r   s	   available)rR   rS   r  r  s	   denied-fnrh   r  s	   denied-nbr  s   computedr  rc   r  s   nativer  s   previousr  s   parent-1N)r  )r:   rm   cl_debug_infomn_debug_infofl_debug_infor   rA   mre  all_infor  k__vs                 r!   display_bundling_debug_infor     s    	AAAA	ua 	ua 	5!H
 "aq)9':;"aq)='>?"aa(;&<=!L/1E"a1%5#6eDb!Xq'7;K9LMq]"am$4a8H6IJ  "a#
		
 !+,#*+ 		"#b!\1-F+GHq&''"a&?$@A  		$%b!\1-H+IJq())"a&A$BC  		b![!,<*=>	lO./$-.	
 q, !"2 3( !12  		b![!,@*ABq!"""a&:$;<  		b![!,@*ABq  "a&8$9: r   c                  j    \ rS rSr       S
S jr SS jr   SS jr  SS jrS r  SS jr	S	r
g)cgpackeriy  Nc                   U(       d   eU(       d   eX l         X0l        X@l        Xpl        XPl        X`l        Xl        Uc
  [        5       nXl        Uc
  [        5       nXl	        Xl
        Xl        Xl        Xl        U R                  R                  R                  (       aK  U R                  R                  R                   (       d&  U R                  R                  R"                  U l        gS U l        g)aR  Given a source repo, construct a bundler.

oldmatcher is a matcher that matches on files the client already has.
These will not be included in the changegroup.

matcher is a matcher that matches on files to include in the
changegroup. Used to facilitate sparse changegroups.

forcedeltaparentprev indicates whether delta parents must be against
the previous revision in a delta group. This should only be used for
compatibility with changegroup version 1.

builddeltaheader is a callable that constructs the header for a group
delta.

manifestsend is a chunk to send after manifests have been fully emitted.

ellipses indicates whether ellipsis serving mode is enabled.

bundlecaps is optional and can be used to specify the set of
capabilities which can be used to build the bundle. While bundlecaps is
unused in core Mercurial, extensions rely on this feature to communicate
capabilities to customize the changegroup packer.

shallow indicates whether shallow data might be sent. The packer may
need to pack file contents not introduced by the changes being packed.

fullnodes is the set of changelog nodes which should not be ellipsis
nodes. We store this rather than the set of nodes that should be
ellipsis because for very large histories we expect this to be
significantly smaller.

remote_sidedata is the set of sidedata categories wanted by the remote.
Nc                    g r   r)   )ss    r!   r,  #cgpacker.__init__.<locals>.<lambda>  s    $r   )_oldmatcher_matcherr2  _forcedeltaparentprev_builddeltaheader_manifestsend	_ellipsesr5  _bundlecaps_remote_sidedata
_isshallow_fullclnodes_precomputedellipsis_repor:   verbose	debugflagnote_verbosenote)r   r   
oldmatchermatcherr2  builddeltaheadermanifestsendr  
bundlecapsr  shallowellipsisroots	fullnodesremote_sidedatas                 r!   r   cgpacker.__init__z  s    d zw%%9"!1)! J%"!eO /!% %2!
::==  )@)@ $

 2 2D .Dr   c              #  .	  #    SnU R                   nUR                  R                  SS5      (       a
  [        5       nUR                  nU R                  [        S5      5        Sn	Sn
U R                  S:X  a5  U R                  nUS:X  a  UR                  n[        R                  " UU5      n
SnUb
  [        5       nU R                  UUUU
US9u  pU H<  n[        U R                   XR                  5       H  nU	[        U5      -  n	Uv   M     M>     [!        5       nU	[        U5      -  n	[!        5       v   Ub  [#        Xl5        US	   US
'   U R                  [        S5      U	-  5        US   nUS   nUS   nUb  [        U5      US'   U=(       a    [$        R&                  " U5      (       + n0 nSn	SnUb
  [        5       nU R)                  UUUUUUUS   U
US9	nU H  u  nnU(       a/  U R                  S;   d   e[+        U5      nU	[        U5      -  n	Uv   U H>  n[        U R                   XR                  5      nU H  nU	[        U5      -  n	Uv   M     M@     [!        5       nU	[        U5      -  n	Uv   M     Ub  [#        UU5        US	   US'   U R                  [        S5      U	-  5        U R,                  v   SnU R.                  (       aY  U R0                  (       aH  [2        R4                  " U5       VVs/ s H%  u  nnUR6                  U   R9                  5       U4PM'     nnnUR;                  5         U Vs1 s H  nUR=                  U5      iM     nnSnUb
  [        5       nU R?                  UUUUUUUU
US9	nU H  u  n n[+        U 5      n![        U!5      n	U!v   U H>  n[        U R                   XR                  5      nU H  nU	[        U5      -  n	Uv   M     M@     [!        5       nU	[        U5      -  n	Uv   U R                  [        S5      U	U 4-  5        M     [!        5       v   Ub  [#        UU5        US	   US'   Ub  [A        UR                  UUUU5        U(       a  URC                  S[E        US   5      US9  ggs  snnf s  snf 7f)zqYield a sequence of changegroup byte chunks.
If changelog is False, changelog data won't be added to changegroup
Nr   s   bundling-statss%   uncompressed size of bundle content:
r   r   s   strip)generaterZ  rm   r  r  s   %8.i (changelog)

   clrevorderr_      changedfilesr     clrevtomanifestrev)rZ  rm   )r  r   r  s   %8.i (manifests)
s	   %8.i  %s
r  s   outgoing)r   source)#r.  r:   r/  r	  r7  r2  r   r2  r*  _wanted_sidedatar3  r4  _generatechangelogr  r&  r,   r*   r  r   istreemanifestgeneratemanifestsr.   r'  r(  r+  r   	iteritemsr   r   clearr   generatefilesr  r  r   )"r   
commonrevsclnodesfastpathlinkrevrB  r7  rm   r   r   r  rZ  r;  r  clstater   r   r   r8   
clrevorder	manifestschangedfilesfnodesr  ittreer;   mfdictsrf  lrr   clrevsr  r-   rp  s"                                     r!   r>  cgpacker.generate  s     
zz77h(9::(*J^^!EFG<<5 "33O! #'"7"7*?? 
 !+-M11-$ 2 
 E/

E#9#9 E
"	  E
l!Z7/<=M/NJ+,!12T9:]+
L)	/!'*<'8J|$( *N'2H2H2N.N!+-M##)*-$ $ 

 LD&||~555#D)E
"/JJ'='= $ECJ&DK $	   LECJDK# $ !Z7.;<L.MJ*+!12T9:   >>doo  (11)<<GQ !!!$))+R0<  
 	%,-W"&&)W-!+-M-$   

 LD&D!Aq6DG/JJ'='= $ECJ&DK $	   LECJDKa.$=># & l!Z7+89I+JJ'(!' IIkGAJIG q .s   K8R:,R
&R=RD=Rc                F  ^ ^^^^^^ 0 m0 mT R                   R                  m[        5       m0 mTTTTS.nU(       d  T R                  (       dw  [	        UTR
                  S9nU HY  nTR                  U5      n[        T5      TU'   TR                  UR                  U5        TR                  UR                  5        M[     US4$ UUUUUUU 4S jn	[        T R                   TUSU	T R                  T R                  [        S5      0 T R                  T R                   UUS9n
Xj4$ )ax  Generate data for changelog chunks.

Returns a 2-tuple of a dict containing state and an iterable of
byte chunks. The state will not be fully populated until the
chunk stream has been fully consumed.

if generate is False, the state will be fully populated and no chunk
stream will be yielded

See `revlogutil.sidedata.get_sidedata_helpers` for the doc on
`sidedata_helpers`.
)r?  r_   r@  rA  r  r)   c                  > TR                  U 5      n[        T5      TU '   T	R                  (       a  U T	R                  ;   d  TR	                  U 5      T	R
                  ;   aM  UR                  nTR                  X 5        TR                  TR	                  U 5      TR	                  U5      5        T	R                  (       a<  TR                  TUR                     R                  5       R                  5       5        U $ TR                  UR                  5         U $ TR                  UR                  U 5        TR                  UR                  5        U $ r   )r   r,   r(  r,  r   r-  r  r6  r+  r   r   keysr   )
r   rA   manifestnoderP  r   rN  clrevtomanifestrevrO  mflr   s
      r!   lookupcl-cgpacker._generatechangelog.<locals>.lookupcl  s   $$Q'A
OJqM~~ ***vvayD$=$==#$::L ((9
 '11q	377<#8
 ?? ''AJJ(<(<(>(C(C(EF H !''0 H $$QZZ3 ##AGG,Hr   Tr   r  r  r  r  r  rZ  rm   )r.  r   r5  r(  r  r   r   r,   r6  r  r   r   r  r%  r   r,  r-  )r   r   r  r>  rZ  rm   stater   rA   r^  genrP  rN  r\  rO  r]  s   ``         @@@@@r!   rD  cgpacker._generatechangelog  s   ( 
	jj$$u &#)#5	
 DNN5bff-E((.#&z?
4 $$QZZ6 ##AGG,  "9
%	 %	N JJ&&^^M")) $ 9 9-!
  zr   c
              #    ^^^^^^#    U R                   n
U
R                  mST0mUUUUUU4S jnT(       Ga*  TR                  5       u  pU R                  R	                  USS 5      nU(       a	  U(       d  MH  TR                  U5      nU(       d  / nOU R                  XU5      nU(       a	  U(       d  M  U" X5      n[        U R                   UUSUU R                  U R                  [        S5      UU R                  U R                  UU	S9nU R                  R	                  UR                  SS 5      (       d  UU4v   OU H  nM     U(       d  U/ 4v   T(       a  GM)  gg7f)a  Returns an iterator of changegroup chunks containing manifests.

`source` is unused here, but is used by extensions like remotefilelog to
change what is sent based in pulls vs pushes, etc.

See `revlogutil.sidedata.get_sidedata_helpers` for the doc on
`sidedata_helpers`.
r   c                Z   >^ ^ T(       a  T (       a   eTR                   $ UUUUUU 4S jnU$ )Nc                  > TU    nTR                  TU 5      nUR                  SSS9nUR                  5        H  u  pEnUS:X  a?  TU-   S-   nTR                  U0 5      nUR                  XQ5      n	TU   TU	   :  a  XU'   MI  MK  TU-   n
TR                  U
0 5      nUR                  XQ5      nTU   TU   :  d  M  XU'   M     U$ )a  Callback for looking up the linknode for manifests.

Returns the linkrev node for the specified manifest.

SIDE EFFECT:

1) fclnodes gets populated with the list of relevant
   file nodes if we're not using fastpathlinkrev
2) When treemanifests are in use, collects treemanifest nodes
   to send

Note that this means manifests must be completely sent to
the client before you can trust the list of files and
treemanifests to send.
TF)r8  exact   t   /)r  read_delta_parentsiterentriesr6  )r   clnodemctxmdatar  rf  rl  subtree
tmfclnodes	tmfclnodere  fclnodesfclnoderN  rQ  r]  r  tmfnodesrS  s                r!   lookupmflinknodeRcgpacker.generatemanifests.<locals>.makelookupmflinknode.<locals>.lookupmflinknode  s      qwwtQ'//E/J % 1 1 3HA"Tz"&(T/%-%8%8"%E
$.$9$9!$D	%f-
90EE,2qM F !1H#)#4#4Q#;"*"5"5a"@%f-
70CC*0QK !4 r   )__getitem__)	rS  r  ru  rN  rL  rQ  rO  r]  rt  s	   `` r!   makelookupmflinknode8cgpacker.generatemanifests.<locals>.makelookupmflinknode  s.    x !,,,   D $#r   Nr  Fr_   r`  )r.  r   popitemr$  visitdirr   _prunemanifestsr  r%  r(  r   r,  r-  r#  rS  )r   rJ  rN  rL  rO  rQ  rB  r  rZ  rm   r   rx  rS  r  should_visitr  prunednodeslookupfnr   r   r]  rt  s     ````              @@r!   rF  cgpacker.generatemanifests  sE    ( zz#
*	$ *	$X "**,KD==11$s)<LLNN4(E
 !
 #225LK+D8H

**o / --$($=$=!1%F  ##,,UZZ_==Fl"
  A  (Ng hs   EE#!E#c                    U R                   (       d  UR                  5       $ UR                  UR                  pTU Vs/ s H  oe" U" U5      5      U;  d  M  UPM     sn$ s  snf r   )r(  r  r   r  )r   r  r  rJ  frevflrrf  s          r!   r|  cgpacker._prunemanifestsq  sO    ~~ ::< IIu}}c C5aCQL
$B5CCCs   AAc
              #    ^^^^^^^^^#    U V
s/ s H5  n
U R                  U
5      (       d  M  U R                  U
5      (       a  M3  U
PM7     nn
U(       d  U4S jmO'U R                  R                  R                  mUU4S jm0 mU R
                  (       aJ  U Vs/ s H  oR                  U   PM     snmU R                  R                  R                  mUUUUU4S jnOTnU R                  nUR                  R                  [        S5      [        S5      [        U5      S9n[        [        U5      5       GH  u  nnUR                  U5      nU(       d"  [        R                  " [        S5      U-  5      eTR!                  5         U" UU5      mU4S jnUR                  UR"                  nnT Vs/ s H  nU" U" U5      5      U;  d  M  UPM     nnU(       d  M  UR%                  US-   US	9  ['        U R                  UUS
UU R(                  U R*                  TU R,                  U R.                  UU	S9nUU4v   GM	     UR1                  5         g s  sn
f s  snf s  snf 7f)Nc                (   > TR                  U0 5      $ r   r  )unusedr   rQ  s     r!   normallinknodes/cgpacker.generatefiles.<locals>.normallinknodes  s    zz%,,r   c                   >^ U R                   mU R                  nU4S jU  5       nU VVs0 s H  u  pEUT;   d  M  U" U5      T" U5      _M     snn$ s  snnf )Nc              3  6   >#    U  H  oT" U5      4v   M     g 7fr   r)   )r  rflinkrevs     r!   r  Bcgpacker.generatefiles.<locals>.normallinknodes.<locals>.<genexpr>  s     8%QHQK(%s   )r  r   )	r  r   fnoder  r  rU  r  clnrV  s	         @r!   r  r    sO     ==

8%87;LtearV|)a#b')tLLLs
   AAc                x  > T	 H7  n UR                  U5      nU R                  U5      TUR                  5       '   M9     T" X5      n[	        U5      [	        T
5      :w  a@  T
 H:  u  pVUR                  US 5      nX4;   a  [        XC   UTS9XC'   M-  U(       d  M6  XdU'   M<     U$ ! [        R                   a     M  f = f)Nr  )filenoder   r	   ManifestLookupErrorr,   r  min)flogr   rA   r  linksri  rU  r  r  
commonctxsrT  r  s          r!   r  )cgpacker.generatefiles.<locals>.linknodes  s    #A !

5 13788E?0 $ (4u:W-") "ud 3 >+.u|RU+KEL"U+-%L #*  !44 s   3B!!B98B9r`   r   s!   empty or missing file data for %sc                   > TU    $ r   r)   )r   linkrevnodess    r!   lookupfilelog-cgpacker.generatefiles.<locals>.lookupfilelog  s    #A&r   r   )itemF)r  r  r  r  rZ  rm   )r$  r#  r.  r7  r   r+  r   r:   r<  r   r,   r  r  filer	   r   rH  r  r   r  r%  r(  r,  r-  r   )r   rP  rJ  rB  rT  rL  rQ  rV  rZ  rm   re  rA   r  r   r\  r  r   
filerevlogr  r  r  rf  	filenodesr   r  r  r  r  r  r  s       ` ``                @@@@@@r!   rI  cgpacker.generatefiles  s1     "
!}}Q (,(8(8(; ! 	 
 - **&&++CM ?? 2<<A**Q-<JJJ((,,E $ (Izz77''hKak\1B ( 
 "&"67HAu5)Jkk:;eC  !!#$Z7L' #
(:(:#D ('a3tAw<z+I<   OOAEO.

** / --$($=$=!1%F -[ 8^ 	I
4 =`s<   I#IIIAI#I2DI#4IIBI#)r&  r)  r(  r%  r,  r+  r'  r$  r#  r-  r*  r.  r2  r2  )FNFFNNN)T)TNN)NN)r~  r  r  r  r   r>  rD  rF  r|  rI  r  r)   r   r!   r  r  y  sb     #O/n }HF ih z#xD2 pr   r  c	                0    S n	[        U UUSU	SSUUUUUS9$ )Nc                    [         R                  U R                  U R                  U R                  U R
                  5      $ r   )r  r%   r   r  r  r  r   s    r!   r,   _makecg1packer.<locals>.<lambda>  s)    !<!A!A	!((AJJ"r   r   r   T)r5  r6  r  r7  r  r8  r9  r:  r  
r   r3  r4  r7  r  r8  r9  r:  r;  r5  s
             r!   _makecg1packerr    s=     )!# r   c	                .    S n	[        U UUSU	SUUUUUS9$ )Nc                    [         R                  U R                  U R                  U R                  U R
                  U R                  5      $ r   )r  r%   r   r  r  r  r  r  s    r!   r,   _makecg2packer.<locals>.<lambda>  s/    !<!A!A	!((AJJ

"r   r  r   r5  r6  r7  r  r8  r9  r:  r  r  s
             r!   _makecg2packerr    s:     )# r   c	                >    S n	[        U UUSU	[        5       UUUUUS9$ )Nc                    [         R                  U R                  U R                  U R                  U R
                  U R                  U R                  5      $ r   )r  r%   r   r  r  r  r  r   r  s    r!   r,   _makecg3packer.<locals>.<lambda><  s5    !<!A!A	!((AJJ

AGG"r   r  r  r  r*   r  s
             r!   _makecg3packerr  1  s<     )\# r   c	                @    S n	[        U UUSU	[        5       UUUUUUS9$ )Nc           	         [         R                  U R                  U R                  U R                  U R
                  U R                  U R                  U R                  5      $ r   )	r  r%   r   r   r  r  r  r  r   r  s    r!   r5  (_makecg4packer.<locals>.builddeltaheader\  sH    *//FFHHHHJJJJGG
 	
r   r   )r5  r6  r7  r  r8  r9  r:  r;  r  r  s
             r!   _makecg4packerr  O  s<    	
 )\#' r   )r   r  r  r   c                *   [        [        R                  5       5      nSnU R                  R	                  SS5      (       d<  U R                  R	                  SS5      (       d  [
        R                  " U 5      (       a  SnU(       d  UR                  S5        U R                  R	                  SS5      =(       dA    [        R                  U R                  ;   =(       d    [        R                  U R                  ;   nU(       d  UR                  S5        U$ )	NFs   experimentals   changegroup3s   treemanifestTr  s   changegroup4r   )r5  
_packermaprZ  r:   r/  r   rE  discardr   r0  r1  )r   versionsneedv03want_v4s       r!   allsupportedversionsr    s    :??$%HG?O<<77o??!!$'' ?O< 	E,,0A0AA	E//43D3DD 
 Or   c                    [        U 5      $ r   )r  r   s    r!   supportedincomingversionsr    s    %%r   c                   [        U 5      n[        R                  " U 5      (       a"  UR                  S5        UR                  S5        [        R
                  U R                  ;   a"  UR                  S5        UR                  S5        [        U R                  ;   a"  UR                  S5        UR                  S5        U$ )Nr   r  )r  r   rE  r  r   NARROW_REQUIREMENTLFS_REQUIREMENTr   r  s     r!   supportedoutgoingversionsr    s    #D)Hd## 	&&$*;*;; 	$+++ 	Or   c                *    [        [        U 5      5      $ r   )maxr  r  s    r!   localversionr    s     (.//r   c                    [        U 5      n[        R                  U R                  ;   a  UR                  S5        U(       d   e[	        U5      $ )Nr   )r  r   GENERALDELTA_REQUIREMENTr  r  r  s     r!   safeversionr    sA     ).H,,0A0AAO8x=r   c
                   U [        U5      ;   d   eUc  [        R                  " 5       nUc  [        R                  " 5       nU S:X  a+  UR                  5       (       d  [        R
                  " S5      eU(       a(  U S;   a"  [        R                  " [        S5      U -  5      eUR                  U5      n[        U    S   n
U
" UUUUUUUUU	S9	$ )Nr   s;   version 01 changegroups do not support sparse file matchers)r   r  sS   ellipsis nodes require at least cg3 on client and server, but negotiated version %sr   )r  r8  r9  r:  r;  )
r  matchmodalwaysneverr	   ProgrammingErrorr   r   narrowmatchr  )r2  r   r7  r3  r4  r  r8  r9  r:  r;  fns              r!   
getbundlerr    s     /5555//#^^%
% 0 0$$J
 	
 G~-kk- 	
 	
 w'G	G	Q	B#'
 
r   c                $    [         U    S   " XUS9$ )Nr   )r   )r  )r2  r>   r   r   s       r!   getunbundlerr   	  s    gq!"&99r   c                t   U R                   R                  (       d  US:X  a0  U R                   R                  [        S5      [	        U5      -  5        U R                   R
                  (       aL  U R                   R                  S5        U H*  nU R                   R                  S[        U5      -  5        M,     g g )Ns   bundles   %d changesets found
s   list of changesets:
s   %s
)r:   r/  r;  r   r,   r0  r   r   )r   r  rB  r   s       r!   _changegroupinfor  	  sy    ww&I-q12SZ?@ww./DGGMM'CI-.  r   c           	         [        U UUUUUS9n[        U[        R                  " U5      S S[	        UR
                  5      05      $ )N)fastpathr7  s   clcount)
makestreamr  r   chunkbufferr,   missing)r   outgoingr2  rB  r  r7  cgstreams          r!   makechangegroupr  	  sV     H "	S))*+	 r   c                z   [        UU UUUS9nU R                  5       n UR                  n	UR                  n
UR                  nUR                  5         U=(       d1    U R                  S L =(       a    U[        U R                  5       5      :H  nU R                  SSUS9  [        X
U5        UR                  U	U
UU5      $ )N)r7  r4  r;  s   preoutgoingT)r   rB  )r  r.  commonr  ancestorsofrk   
filternamer  headsr  r  r>  )r   r  r2  rB  r  r7  r4  r;  bundlerrJ  csetsr  rL  s                r!   r  r  %	  s     'G ??DJE  E 
JJL 4AEVDJJL-A$A  	IInDI8T&)	 r   c	           
        Sn	Sn
U R                   R                  [        S5      [        S5      US9n[        UR                  0 5       GH/  nU
S-  n
US   nU R                   R                  SU-  5        UR                  5         U R                  U5      n[        U5      n UR                  5       nUR                  UUUUUUS9nU(       d  [        R                  " [        S5      5      e U	[        U5      U-
  -  n	X;   d  M  X]   n[        U[        U5      5       HJ  nUR                  U5      nUU;   a  UR!                  U5        M-  [        R                  " [        S
5      5      e   U(       a  GM-  X]	 GM2     UR#                  5         UR%                  5        H2  u  nnU R                  U5      nU H  n UR'                  U5        M     M4     X4$ ! [        R                   a'  n[        R                  " [        S	5      U-  5      eS nAff = f! [        R(                   a.    [        R                  " [        S5      U[+        U5      4-  5      ef = f)Nr   r`   r   r   r   r  r   s#   received file revlog group is emptys#   received delta base is censored: %ss#   received spurious file revlog entrys+   missing file data for %s:%s - run hg verify)r:   r<  r   rz  r   r   r   r  r,   r   r   r	   r   CensoredBaseErrorr  r   remover   rZ   r   LookupErrorr   )r   rB  r   r   expectedfilesr`  r   rm   r   r  r   r\  r{  re  rl  or   r$  rr   needsnewrf  s                         r!   rC  rC  M	  s1    IEww##	(!H+] $ H &..3	
k".23YYq\G	M%%'FKK+%(?   E kk!$J"KLL  	SWq[ 	>LEQB(GGCL:LLO++a(N&OPP ) 5L? 4@ OO%5YYq\Aq	  & 5 && 	M++a FG!KLL	M( $$ kkDE#a&k" s&   !A
G9HH)"HHAIr   r}  )NFNNNNN)NNNNN)FFNNN)NNNFFNNN)FN)FNNN)L
__future__r   r5   r   r9  i18nr   r   r   r   r    r	   r
   r  r   r   r   r   r   r   
interfacesr   revlogutilsr   r3  r   r>  utilsr   Structr  r  r  r  r  r   r"   r'   r*   r.   rB   rW   r[   r   r   r  r  r  r  r  r  r  r  r	  r  rJ   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rC  r)   r   r!   <module>r     sj   # 	    	 	 	 # 0 6 $mmO< $mm,>? $mm,@A $mm,AB &*
!
)
 #N &RjFZC! C!LB+ B&2L+ 2Lj/
+ /
d( (D",\$L Rj0 0  
&RV;rx	 x	@ H F F %R K(K(K(K(
:&
00 0f:/ : %^  =r   