
    	^cc                       d dl Z d dlZd dlZddlmZ ddlmZmZmZ ddl	m
Z
 ddlmZmZmZmZm	Z	mZmZmZ ddlmZ ddlmZ dd	lmZ dd
lmZ  ej        d          Z ej        d          Z ej        d          Z  ej        d          Z!dZ"ej#        Z#d Z$d Z%d Z&d Z'd6dZ( G d d          Z) G d de)          Z* G d de*          Z+ G d de+          Z, G d d          Z-d Z.d  Z/d! Z0	 	 	 	 	 	 d7d#Z1 G d$ d%          Z2	 	 	 	 	 d8d&Z3	 	 	 	 	 d8d'Z4	 	 	 	 	 d8d(Z5	 	 	 	 	 d8d)Z6e3e)fe4e*fe5e+fe6e,fd*Z7d+ Z8d, Z9d- Z:d. Z;d/ Z<	 	 	 	 	 	 	 	 d9d0Z=d6d1Z>d2 Z?	 d:d3Z@	 	 	 	 d;d4ZA	 d6d5ZBdS )<    N   )_)hexnullrevshort)open)errormatchmdiffphasespycompatrequirementsscmutilutil)
repository)sidedata)	constants)storageutils   20s20s20s20ss   20s20s20s20s20ss   >20s20s20s20s20sHs   >B20s20s20s20s20sHs   lfsc                     t          | d          }t          j        d|          d         }|dk    r(|r$t          j        t          d          |z            dS t          | |dz
            S )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"   /   sp    FAAeQ"AAvv 	A+a :;;a?@@@svq1u%%%r   c                 2    t          j        d| dz             S )z*return a changegroup chunk header (string)r   r   r   pack)lengths    r!   chunkheaderr'   :   s    ;ufqj)))r   c                  ,    t          j        dd          S )zBreturn a changegroup chunk header (string) for a zero-length chunkr   r   r$    r   r!   
closechunkr*   ?   s    ;ua   r   c                 @    t          t          |                     | z   S )z3Obtain a changegroup chunk header for a named path.)r'   len)paths    r!   _fileheaderr.   D   s    s4yy!!D((r   c                 (   d}d}	 |r+|r|                     |d          }n@t          |dd          }n.t          j        dd          \  }}t          j        |d          }|}|D ]}|                    |           d}|||                                 |/|r|r|                    |           S t          j        |           S S # ||                                 |/|r|r|                    |           w t          j        |           w w xY w)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   wbi   s
   hg-bundle-s   .hg)prefixsuffixwb)r   r   mkstemposfdopenwritecloseunlink)uichunksfilenamevfsfhcleanupfdcs           r!   writechunksrA   I   sR    
BG# 		% 3XXh.. (E622#+=PPPLB2t$$B 	 	AHHQKKKK>HHJJJ #C #

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

7####	'""""	 s   A:C A	Dc                       e Zd ZdZeZej        ZdZdZ	ddZ
d Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd ZddZej        ddfdZd ZdS )cg1unpackera  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                 ,   |d}|t           j        j        vr$t          j        t          d          |z            |dk    rd}t           j                            |          }|                    |          | _        || _	        |pi | _
        d | _        d S )N   UNs#   unknown stream compression type: %ss   BZs   _truncatedBZ)r   compenginessupportedbundletypesr	   r   r   forbundletypedecompressorreader_stream_typeextrascallback)selfr=   algrM   
compengines        r!   __init__zcg1unpacker.__init__   s    ;Cd&;;;+a FGG#MNNN%<<!C%33C88
!44R88
lr   c                 *    | j         d uo
| j         dk    S )NrF   )rL   rO   s    r!   
compressedzcg1unpacker.compressed   s    z%=$**==r   c                 6    | j                             |          S N)rK   read)rO   r    s     r!   rX   zcg1unpacker.read   s    |  ###r   c                 6    | j                             |          S rW   )rK   seek)rO   poss     r!   rZ   zcg1unpacker.seek   s    |  %%%r   c                 4    | j                                         S rW   )rK   tellrT   s    r!   r]   zcg1unpacker.tell   s    |  """r   c                 4    | j                                         S rW   )rK   r7   rT   s    r!   r7   zcg1unpacker.close   s    |!!###r   c                     t          | j        d          }t          j        d|          d         }|dk    r(|r$t	          j        t          d          |z            dS | j        r|                                  |dz
  S )Nr   r   r   r   )r   rK   r   r   r	   r   r   rN   )rO   r   r    s      r!   _chunklengthzcg1unpacker._chunklength   s~    a((M%##A&66 Ek!$>"?"?!"CDDD1= 	MMOOO1ur   c                     i S )z*v10 does not have a changelog header chunkr)   rT   s    r!   changelogheaderzcg1unpacker.changelogheader       	r   c                     i S )z)v10 does not have a manifest header chunkr)   rT   s    r!   manifestheaderzcg1unpacker.manifestheader   rc   r   c                 d    |                                  }|si S t          | j        |          }d|iS )zBreturn the header of the filelogs chunk, v10 only has the filename   filename)r`   r   rK   )rO   r    fnames      r!   filelogheaderzcg1unpacker.filelogheader   s<     	IDL!,,U##r   c                 8    |\  }}}}||}n|}d}d}	|||||||	fS Nr   r)   )
rO   headertupleprevnodenodep1p2cs	deltabaseflagsprotocol_flagss
             r!   _deltaheaderzcg1unpacker._deltaheader   sA    &b"bII IRYE>AAr   c           	      *   |                                  }|si S t          | j        | j                  }| j                            |          }t          | j        || j        z
            }|                     ||          }|\  }}}}	}
}}||||
|	||i |f	S rW   )r`   r   rK   deltaheadersizedeltaheaderr   ru   )rO   rm   r    
headerdataheaderdeltarn   ro   rp   rr   rq   rs   rt   s                r!   
deltachunkzcg1unpacker.deltachunk   s     	I t/CDD
!((44DL!d.B*BCC""6844=C:b"iUNRRE5"nLLr   c              #   r  K   d}|d| j         z   k     rd}	 t          |           }|s|dk     r|dz  }n|r|dz  }n\d}t          t          |                    V  d}|t          |          k     r&|dz   }|||         V  |}|t          |          k     &t	                      V  |d| j         z   k     dS dS )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      Tr   Fi   N)_grouplistcountr"   r'   r,   r*   )rO   parts	noentrieschunkr[   nexts         r!   	getchunkszcg1unpacker.getchunks   s	     & a$....I   qyy
" #
!	!#e**-----CJJ&&=DD/)))C CJJ&&#* ,,/ a$........r   c                 
   |j         | _        |                                  |                                 }|j                            d          }|                    ||||           |                                 d | _        d S )Nr   addrevisioncb)	incrementrN   re   	deltaitermanifestlog
getstorageaddgroupcomplete)rO   reporevmaptrpprogr   deltasstorages           r!   _unpackmanifestszcg1unpacker._unpackmanifests  sy    
 	!!"--c22MJJJr   c           	      :  ()*+,-./01                                  t          j        j        v pt          j        j        v o| j        dk    o|dk    }|r&t          j        |pt                      d          }	nd}	)fd}
)fd}	 |j        	                    d|          }|j        	                    d	|            j
        	 d,ddit          j        |j                   j        ))                    |           t          )                                          .t!          j        |          }j                            t)          d                     t+          )          *j                            t)          d          t)          d          |          }|j        | _        t                      ,g +*+fd},fd}|                                  |                                 })                    ||
|d||          sj                            dd           t+          ,          }t+          )          }|*z
  }|                                 ~d,d| _        i 1i 0j                            t)          d                     j                            t)          d          t)          d          |          }d}|	rt<          j        |	d         v r1fd}|                      ||||           i }j        !                    dd          rj        )j"        }tG          *|          D ]})$                    |          j%        }||         &                                }|'                                D ]:\  }}|	                    |t                                (                    |           ;d}|	rt<          j)        |	d         v r0fd}j                            t)          d                     tU          | |||||          \  }}|	rt<          j+        |	d         v r),                    ||	*|dz
             1'                                D ] \  }\  } }!|,                    ||	| |!           !0'                                D ] \  }"\  } }!|",                    ||	| |!           !|j-        	                    dd            |j-        	                    d!d            |j-        	                    d"d            |j-        	                    d#d            j        j.        s?|j-        dxx         |z  cc<   |j-        d!xx         |z  cc<   |j-        d"xx         |z  cc<   d }#.r^)                                }$|#t+          |$          t+          .          z
  z  }#|$D ]%}%|%.vr|%         /                                r|#dz  }#&j        j.        s|j-        d#xx         |#z  cc<   0                                 |d k    rd$|j        vrltc          )2                    *                    |j        d$<   tc          )2                    |dz
                      |j        d%<   tg          |j                  -natg          |j                  -tc          )2                    *                    -d$<   tc          )2                    |dz
                      -d%<    j
        	 d-ddit          j        -           tG          *|          (d}&|d'v r14                                rtj          j6        x}}&ntj          j7        x}}&(rtk          j8        ||(           |&5+r+9                    (           n(+tk          j:        ||&g +(           g +|d k    r'()*-.fd)/|;                    d**z  /fd+           j        <                                 n# j        <                                 w xY w|#d k     r|#dz
  }'n|#dz   }'|'S ).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.
           04s   pullT)pullNc                 v    j                             dt          |           z             t                    S )Ns   add changeset %s
)r9   debugr   r,   )xclr   s    r!   csmapz cg1unpacker.apply.<locals>.csmap:  s.    GMM/%((:;;;r77Nr   c                 .                         |           S rW   rev)r   r   s    r!   r   z!cg1unpacker.apply.<locals>.revmap>  s    66!99r   s   sources   url   prechangegroupthrows   adding changesets

   changesets   chunksunittotalc                 B    |k     r                     |           d S d S rW   )append)r   r   clstartduprevss     r!   ondupchangelogz)cg1unpacker.apply.<locals>.ondupchangelog^  s+    ==NN3''''' !=r   c                     |                      |          }J                     |j                                       ||           d S rW   )changelogrevisionupdatefilesregister_changeset)r   r   ctx	efilessetr   s      r!   onchangelogz&cg1unpacker.apply.<locals>.onchangelogb  sT    **3// ,,,  +++''S11111r   )alwayscacher   duplicaterevisioncbs(   applied empty changelog from changegroups   warn-empty-changegroup)configs   adding manifests
	   manifestsr   c                                          |           }|s	||f| <   d S ||d         dz   k    sJ |d         |f| <   d S Nr   r   get)manifestr   rangetouched_manifestss      r!   on_manifest_revz*cg1unpacker.apply.<locals>.on_manifest_rev  sf     1 5 5h ? ?$ J;>*-h777#&%(Q,#6#6#6#6;@8S/-h777r   r   s   servers   validatec                                          |           }|s	||f| <   d S ||d         dz   k    sJ |d         |f| <   d S r   r   )filelogr   r   touched_filelogss      r!   on_filelog_revz)cg1unpacker.apply.<locals>.on_filelog_rev  sf     0 4 4W = =$ H9<c
,W555#&%(Q,#6#6#6#69>q3,W555r   s   adding file changes
s   changegroup-count-changesetsr   s   changegroup-count-revisionss   changegroup-count-filess   changegroup-count-heads   node	   node_last   pretxnchangegroup)s   pushs   serve)revsc           	         t          	          k    rd S  	j        d	i t          j                   D ]]}                                }t                              |                    |d<   |d=  	j        d
i t          j        |           ^fd	                                D             }	j        	                    ddt                    d
                    d |D                                  d S )N   changegroupr   r      incomingc                     g | ]}|v|	S r)   r)   ).0holdheadss     r!   
<listcomp>z7cg1unpacker.apply.<locals>.runhooks.<locals>.<listcomp>.  s#    MMMa1H;L;L;L;L;Lr   s$   %d incoming changes - new heads: %s
s   , c                 <    g | ]}t          |d d                   S )N   )r   )r   r@   s     r!   r   z7cg1unpacker.apply.<locals>.runhooks.<locals>.<listcomp>3  s&    #A#A#A1C"1"JJ#A#A#Ar   )r   )r   )r,   hookr   	strkwargscopyr   rn   headsr9   logjoin)
unused_successr   argsnewheadsaddedr   r   hookargsr   r   s
       r!   runhooksz#cg1unpacker.apply.<locals>.runhooks  s    #d))++DIMM0B80L0LMMM$ K K'}}(+BGGCLL(9(9W .!	JJ1CD1I1IJJJJMMMM4::<<MMMHGKK#@E



#A#A#A#A#ABB	    r   s   changegroup-runhooks-%020ic                 .                                   S rW   )
_afterlock)trr   r   s    r!   <lambda>z#cg1unpacker.apply.<locals>.<lambda>8  s    tx88 r   )r   )r   )=
unfilteredr   REVLOGV2_REQUIREMENTCHANGELOGV2_REQUIREMENTversionsidedatamodget_sidedata_helperssetr   
setdefaultr   r   r   	changelogdelayupdater   weakrefproxyr9   statusr   r,   makeprogressr   rN   rb   r   r   	develwarnr   revlog_constantsKIND_MANIFESTLOGr   
configboolr   r   r   r   	readdeltaitemsaddKIND_FILELOG_addchangegroupfilesKIND_CHANGELOGrewrite_sidedatachangesquietclosesbranchinvalidatevolatilesetsr   rn   dict
publishingr   publicdraftregisternewextendadvanceboundaryaddpostcloseflush)2rO   r   r   srctypeurltargetphaseexpectedtotalsidedata_categoriesadding_sidedatasidedata_helpersr   r   r   progressr   r   r   efilesclend
changesetsr   	needfilesmlcsetmfnodemfestfnr   newrevsnewfilesmfstartrevendrevfl
deltaheadsr   r   phaseallretr   r   r   r   r   r   r   r   r   r   s2    `                                      @@@@@@@@@@r!   applyzcg1unpacker.apply  s	   .    1T5FF M74;LL# %	#
 7" 	  	$*?#,suu       $	 	 	 	 	 		 	 	 	 	z	
 k,,Y@@GK""63///DI! )-191CBK1P1P   BNN2288::H-##CGNN1344555"ggGw++-  q||= ,  H %.DMIG( ( ( ( ( (2 2 2 2 2 2   """^^%%F;; )$2     !!?4 "    ^^FGGEJ I DM !#! GNN1233444 w++,a	ll* ,  H #O 	J#48H8KKKJ J J J J !!- "    Iw!!)[99 	>^%!'511 > >D11$77@FvJ0022E % > >1!,,Q66::1====> "N 	H#04DQ4GGGH H H H H GNN1566777 4,! ! !GX   Q#26Fq6III''-w	   /@.E.E.G.G Q Q*B*6''-=xPPPP.>.D.D.F.F Q Q*B*6''-=xPPPP J!!"A1EEEJ!!"@!DDDJ!!"<a@@@J!!"<a@@@ 7= C
:;;;zI;;;
9:::gE:::
5666(B666J (

c%jj3x==88
 ( (A((T!W-A-A-C-C("a
 7= E
5666*D666'')))A~~"+--+.rwww/?/?+@+@BK(03BGGEAI4F4F0G0GBK-#BK00HH#BK00H(+BGGG,<,<(=(=HW%-01C1C-D-DH\*	(  (22   '5))EH--- ??$$ 	:-3]:K(( .4\9K( A"4[%@@@# $NN5))))#G&tR2GLLLLA~~         . 1G;88888  
 GMMOOOODGMMOOOO>>q.CCq.C
s   ]_, ,`c              #   h    K   dt           fdi           D ]}|dd         V  |d         dS )z
        returns an iterator of the deltas in this changegroup

        Useful for passing to the underlying storage system to be stored.
        Nc                  .                                    S rW   )r|   )chainrO   s   r!   r   z'cg1unpacker.deltaiter.<locals>.<lambda>J  s    dooe&<&< r      r   )iter)rO   	chunkdatar&  s   ` @r!   r   zcg1unpacker.deltaiterC  s^       <<<<<bAA 	! 	!IBQB-aLEE	! 	!r   rW   )__name__
__module____qualname____doc___CHANGEGROUPV1_DELTA_HEADERrx   sizerw   r   r   rR   rU   rX   rZ   r]   r7   r`   rb   re   ri   ru   r|   r   r   r   r  r#  r   r)   r   r!   rC   rC   l   sO        $ .K!&OGO    > > >$ $ $& & &# # #$ $ $	 	 	    $ $ $B B B
M 
M 
M+ + +Z   & L s s s sj	
! 
! 
! 
! 
!r   rC   c                   .    e Zd ZdZeZej        ZdZd Z	dS )cg2unpackerzUnpacker 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                 ,    |\  }}}}}d}d}	|||||||	fS rk   r)   
rO   rl   rm   rn   ro   rp   rr   rq   rs   rt   s
             r!   ru   zcg2unpacker._deltaheader\  s1    &1#b"iRYE>AAr   N)
r*  r+  r,  r-  _CHANGEGROUPV2_DELTA_HEADERrx   r/  rw   r   ru   r)   r   r!   r1  r1  P  sF          .K!&OGB B B B Br   r1  c                   D     e Zd ZdZeZej        ZdZdZ	d Z
d fd	Z xZS )cg3unpackerzUnpacker 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.
       03r~   c                 *    |\  }}}}}}d}	|||||||	fS rk   r)   r4  s
             r!   ru   zcg3unpacker._deltaheaderp  s.    -8*b"iURYE>AAr   Nc                    t          t          |                               |||||           t          | j        i           D ]}|d         }|j                            d|z             |                                 }|j        	                    |          
                    ||||          s!t          j        t          d                    d S )Nr   rg      adding %s revisions
s"   received dir revlog group is empty)superr7  r   r(  ri   r9   r   r   r   r   r   r	   r   r   )
rO   r   r   r   r   r   r)  r   r   	__class__s
            r!   r   zcg3unpacker._unpackmanifestsu  s    k4  11&#t= 	2 	
 	
 	
 d0"55 	L 	LI+&AGMM2Q6777^^%%F#..q11::= ;   L k!$I"J"JKKKL	L 	Lr   rW   )r*  r+  r,  r-  _CHANGEGROUPV3_DELTA_HEADERrx   r/  rw   r   r   ru   r   __classcell__r=  s   @r!   r7  r7  c  s|          .K!&OGOB B B
L L L L L L L L L Lr   r7  c                   >     e Zd ZdZeZej        ZdZd Z	 fdZ
 xZS )cg4unpackerzTUnpacker for cg4 streams.

    cg4 streams add support for exchanging sidedata.
    r   c                 (    |\  }}}}}}}	||||||	|fS rW   r)   )
rO   rl   rm   rt   rn   ro   rp   rr   rq   rs   s
             r!   ru   zcg4unpacker._deltaheader  s+    =H:b"iURYE>AAr   c           	         t          t          |                               |          }|s|S |\	  }}}}}}}	}
}|
rJ i }
|t          j        z  r(t          | j                  }t          j        |          }
|||||||	|
|f	S rW   )	r<  rB  r|   r   CG_FLAG_SIDEDATAr"   rK   r   deserialize_sidedata)rO   rm   resrn   ro   rp   rq   rr   r{   rs   r   rt   sidedata_rawr=  s                r!   r|   zcg4unpacker.deltachunk  s    K&&11(;; 	J 
	
K88 	F#DL11L"7EEH 

 
	
r   )r*  r+  r,  r-  _CHANGEGROUPV4_DELTA_HEADERrx   r/  rw   r   ru   r|   r?  r@  s   @r!   rB  rB    sh         
 .K!&OGB B B!
 !
 !
 !
 !
 !
 !
 !
 !
r   rB  c                       e Zd Zd Zd ZdS )headerlessfixupc                 "    || _         || _        d S rW   )_h_fh)rO   r=   r   s      r!   rR   zheaderlessfixup.__init__  s    r   c                     | j         ra| j         d |         | j         |d          c}| _         t          |          |k     r(|t          | j        |t          |          z
            z  }|S t          | j        |          S rW   )rM  r,   r   rN  )rO   r  r   s      r!   rX   zheaderlessfixup.read  ss    7 	!dgabbkJAtw1vvzz[1s1vv:666H48Q'''r   N)r*  r+  r,  rR   rX   r)   r   r!   rK  rK    s2          ( ( ( ( (r   rK  c              #   &  K   |j         
d|j         }}ng|j        | j        k    r)|j        }t	          j        t          |                    }n.|j        }t	          j        |j        t          |                    } ||          }t          t          |          t          |          z   t          |          z             V  |V  |r|V  |V  |j
        t          j        z  r+|j        }t          t          |                    V  |V  dS dS )z0Serialize a revisiondelta to changegroup chunks.Nr   )r{   basenodenullidrevisionr   trivialdiffheaderr,   replacediffheaderbaserevisionsizer'   rt   r   rE  r   )r   r{   headerfnr0   datametar   s          r!   _revisiondeltatochunksrZ    s      {EK	4;	&	&~(T33~()?TKK8E??D
c$ii#f++-D		9
:
::::
JJJ 
JJJk::  >#h--((((( r   c                 4    fd}t          ||          S )z&Sort nodes for changegroup generation.c                 @                          |                     S rW   r   )r  r   lookups    r!   r   z$_sortnodesellipsis.<locals>.<lambda>  s    BFF66!99%% r   key)sorted)storenodesr   r]  r_  s     `` r!   _sortnodesellipsisrc    s*    $ &
%
%
%
%C%S!!!!r   c	                     |         }	 fd|	r%                               t          t          fk    rt          t          }}
nVt          |	          dk    r%t          fd|	D                       \  }
t          }nt          fd|	D                       \  }
}                    |
                              |          }}|||fS )Nc                 2   | t           k    rt           S r| S | g}|r|d         }|dd         }|v r|         S |v r3|                    d                     |          D                        n|	v r&|                    d 	|         D                        ntt          
dd          D ]}                    |          | k    r|c S  t          j        d          rj        }nj        j        }t          j
        d|
| fz            |t           S )	a  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   Nc                 (    g | ]}|t           k    |S r)   r   r   pps     r!   r   z=_resolvenarrowrevisioninfo.<locals>.local.<locals>.<listcomp>*  s    LLLBbGmmRmmmr   c                 (    g | ]}|t           k    |S r)   rg  rh  s     r!   r   z=_resolvenarrowrevisioninfo.<locals>.local.<locals>.<listcomp>-  s    JJJBB'MMRMMMr   targets?   unable to resolve parent while packing '%s' %r for changeset %r)r   r  
parentrevsr   linkrevr   safehasattr
display_id_revlogr	   r   )clrevwalkpirl  r   clrevtolocalrevfullclnodesischangelogprecomputedellipsisr   ra  s        r!   localz)_resolvenarrowrevisioninfo.<locals>.local	  s    GN 	L w &	QA8DO##&q))k!!LL"--*:*:LLLMMMM)))JJ"5a"8JJJ     sAr** ! !A}}Q''500  1 #E844 6"-FF #]5Fk),2C+?@  G  &	P r   r   c              3   .   K   | ]} |          V  d S rW   r)   r   rt  rz  s     r!   	<genexpr>z-_resolvenarrowrevisioninfo.<locals>.<genexpr>Q  s+      55AuuQxx555555r   c              3   .   K   | ]} |          V  d S rW   r)   r|  s     r!   r}  z-_resolvenarrowrevisioninfo.<locals>.<genexpr>T  s+      66Qa666666r   )rm  r   r,   r`  rn   )r   ra  rx  r   rn  linknoderv  rw  ry  linkparentsro   rp   p1nodep2noderz  s   ````  ```     @r!   _resolvenarrowrevisioninfor    s    &g.KC C C C C C C C C C CJ  75++C00Wg4FFF'B	[		Q		5555555556666+66666BZZ^^UZZ^^FF68##r   Fc              #     K   |sdS | j         }|rd}n|rt          ||||          }d}nd}|rg }i }i }|D ]}|                    |          } ||          }|                    |          }|||<   ||	v r|||<   n,||
vrKt          ||||||||	|
	  	        \  }}}||f||<   |||<   |                    |           |}d}|7| j                            |t          d          t          |                    }| j        	                    dd          }|dvr,t          d	          }| j        
                    ||z             t          j        }|rt          j        }n%|d
k    rt          j        }n|dk    rt          j        }|                    ||d| ||          }t#          |          D ]\  }}|r|                    |dz              |rO||j                 }|j        |v r8||j                 \  }}||_        ||_        |xj        t          j        z  c_        n ||j                  }||_        |V  |r|                                 dS dS )a6  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      p1   fulls0   config "devel.bundle.delta" as unknown value: %sr  r  T)
nodesorderrevisiondataassumehaveparentrevisions	deltamoder  r   )r   rc  r   r  r   r9   r   r   r,   r   warnr   CG_DELTAMODE_STDCG_DELTAMODE_PREVCG_DELTAMODE_P1CG_DELTAMODE_FULLemitrevisions	enumerater   rn   r  r  rs   REVISION_FLAG_ELLIPSISr  r   )r   ra  rb  rx  r]  forcedeltaparentprevtopicellipsesrv  rw  ry  r  r   r  filteredadjustedparents	linknodesrn   r   r  rn  r  r  r  configtargetmsgr  	revisionsru  rS  s                                 r!   
deltagroupr  [  s     0  	B   

	 "5%V<<


  )	 "	" "	"D))D//Cvd||HffX&&G'*OG$ ;&&"*	$  333
 ,F#'
, 
,( *0(8%"*	$OOD!!!! H7'')CJJ ( 
 
 7>>(O<<L000GHHS<'(((+I 10					.				 	 0	##&.,) $  I !++  8 	#OOAE""" 
	- /H}//!0!?"("(*"CC vhm,,H$  r   c                   R    e Zd Z	 	 	 	 	 	 	 d
dZ	 ddZ	 ddZ	 ddZd Z	 dd	ZdS )cgpackerFNc                    |sJ |sJ || _         || _        || _        || _        || _        || _        |	| _        |t                      }|| _        |t                      }|| _	        |
| _
        || _        || _        || _        | j        j        j        r)| j        j        j        s| j        j        j        | _        dS d | _        dS )a
  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                     d S rW   r)   )ss    r!   r   z#cgpacker.__init__.<locals>.<lambda>>  s    $ r   )_oldmatcher_matcherr   _forcedeltaparentprev_builddeltaheader_manifestsend	_ellipsesr   _bundlecaps_remote_sidedata
_isshallow_fullclnodes_precomputedellipsis_repor9   verbose	debugflagnote_verbosenote)rO   r   
oldmatchermatcherr   builddeltaheadermanifestsendr  
bundlecapsr  shallowellipsisroots	fullnodesremote_sidedatas                 r!   rR   zcgpacker.__init__  s    d %%9"!1)! J%"!eeO /!% %2!
:=  	/)@ 	/ $
 2D .Dr   Tc           
   #   (  K   | j         j        |                     t          d                     d}d}| j        dk    r)| j        }|dk    rj        }t          j        |          }| 	                    |||          \  }	}
|
D ]6}t          | j         || j                  D ]}|t          |          z  }|V  7t                      }|t          |          z  }t                      V  |                     t          d          |z             |	d         }|	d	         }|	d
         }|ot          j                   }i }d}|                     |||||||	d         |          }|D ]\  }}
|r0| j        dv sJ t#          |          }|t          |          z  }|V  |
D ]8}t          | j         || j                  }|D ]}|t          |          z  }|V  9t                      }|t          |          z  }|V  |                     t          d          |z             | j        V  d}| j        r'| j        r fdt+          j        |          D             }|                                 fd|D             }|                     ||||||||          }|D ]\  }}
t#          |          }t          |          }|V  |
D ]8}t          | j         || j                  }|D ]}|t          |          z  }|V  9t                      }|t          |          z  }|V  |                     t          d          ||fz             t                      V  |r-                    dt5          |d                   |           dS dS )zYield a sequence of changegroup byte chunks.
        If changelog is False, changelog data won't be added to changegroup
        s%   uncompressed size of bundle content:
r   Nr   s   strip)generater  s   %8.i (changelog)

   clrevorderr      changedfiles   clrevtomanifestrev)r  )r8  r   s   %8.i (manifests)
c                 X    g | ]&\  }}j         |                                         |f'S r)   )r   rX   )r   r  lrr   s      r!   r   z%cgpacker.generate.<locals>.<listcomp>  sF       Q !!$))++R0  r   c                 :    h | ]}                     |          S r)   r   )r   r   r   s     r!   	<setcomp>z$cgpacker.generate.<locals>.<setcomp>  s#    ---"&&))---r   s	   %8.i  %s
s   outgoing)rn   source)r  r   r  r   r   r  _wanted_sidedatar   r   _generatechangelogrZ  r  r,   r*   r   istreemanifestgeneratemanifestsr.   r  r  r  r   	iteritemscleargeneratefilesr   r   )rO   
commonrevsclnodesfastpathlinkrevr  r   r/  r  r  clstater   r{   r   r7   
clrevorder	manifestschangedfilesfnodesittreer:   mfdictsclrevsr-   r   r   r   s                            @@r!   r  zcgpacker.generate@  s      z^!EFFGGG<5  "3O!! #'"7*?o    11-	 2 
 
  	 	E/
E4#9    E

"	 E

ll!122T9:::]+
L)	/( *N'2H2N2N.N##)*- $ 	
 	
  	 	LD& |~5555#D))E

"    /Jt'=  $    ECJJ&DKKKK  LLECJJDKKKK!122T9:::    > 	do 	   '1)<<  G
 	----W----   	
 	
  	? 	?LD&D!!Aq66DGGG    /Jt'=  $    ECJJ&DKKKK  LLECJJDKKKa..$=>>>>ll 	HIIkGAJIGGGGG	H 	Hr   c                    
 i i  j         j        t                      
i 
d}|s j        s{t	          |j                  }|D ]^}                    |          }t                    |<                       |j	        |           

                    |j                   _|dfS 
 fd}t           j         |d| j         j        t          d          i  j         j        |          }	||	fS )a  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  r  r^  r)   c                                         |           }t                    | <   	j        r| 	j        v s                    |           	j        v rY|j        }                    ||                                                    |                               |                     	j        rE	                    |j                 
                                                                           nP	                    |j                   n5                    |j        |            	                    |j                   | S rW   )r   r,   r  r  r   r  r   r   r  r   rX   keysr   )
r   r@   manifestnoder  r   r  clrevtomanifestrevr  mflrO   s
      r!   lookupclz-cgpacker._generatechangelog.<locals>.lookupcl  s>   $$Q''A
OOJqM~  - ***vvayyD$=== $%:L ((q999
 '11q		377<#8#8  
 ? 1 ''AJ(<(<(>(>(C(C(E(EFFFF ''0000 $$QZ333 ##AG,,,Hr   Tr   r  r  rv  rw  ry  r  )r  r   r   r  r`  r   r   r,   r   r   r   r   r  r  r   r  r  )rO   r   rb  r  r  statern   r@   r  genr  r  r  r  r  s   ``        @@@@@r!   r  zcgpacker._generatechangelog  sq    
	j$uu &#)#5	
 
  	DN 	5bf---E - -((..#&z??
4 $$QZ666 ##AG,,,,"9
&	 &	 &	 &	 &	 &	 &	 &	 &	 &	 &	P J&^M"") $ 9-
 
 
 czr   c	              #   T  K   | j         }	|	j        difd}
r                                 \  }}| j                            |dd                   }|r|sA                    |          }|sg }n|                     |||          }|r|sw |
||          }t          | j         ||d|| j        | j	        t          d          || j        | j        |          }| j                            |j        dd                   s||fV  n|D ]}|s|g fV  dS dS )a8  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                 :     r rJ j         S  fd}|S )Nc                    |          }                     |                               d          }|                                D ]\  }}}|dk    rL|z   dz   }                    |i           }|                    ||          }|         |         k     r|||<   X|z   }	                    |	i           }
|
                    ||          }|         |         k     r||
|<   |S )aP  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.
                T)r     t   /)r   readfastiterentriesr   )r   clnodemdatart  r  r  subtree
tmfclnodes	tmfclnoder  fclnodesfclnoder  r  r  rb  tmfnodesr  s               r!   lookupmflinknodezRcgpacker.generatemanifests.<locals>.makelookupmflinknode.<locals>.lookupmflinknode]  s	     qa((11$1?? % 1 1 3 3 1 1HAq"Tzz"&(T/%-%8%8"%E%E
$.$9$9!V$D$D	%f-
90EEE,2JqM 1H#)#4#4Q#;#;"*"5"5a"@"@%f-
70CCC*0HQKr   )__getitem__)	r  rb  r  r  r  r  r  r  r  s	   `` r!   makelookupmflinknodez8cgpacker.generatemanifests.<locals>.makelookupmflinknodeU  s\     - !,,         B $#r   Nrk  Fr   r  )r  r   popitemr  visitdirr   _prunemanifestsr  r  r  r   r  r  r  r  )rO   r  r  r  r  r  r  rv  r  r   r  r  rb  should_visitra  prunednodeslookupfnr   r   r  r  s     ````             @@r!   r  zcgpacker.generatemanifests;  s     & z#
)	$ )	$ )	$ )	$ )	$ )	$ )	$ )	$ )	$ )	$V  2	#"**,,KD%=11$ss)<<L L NN4((E 
M
 !
 #225%LL K ++D%88H
*oo / -$($=!1  F #,,UZ_== 	#Fl""""
    A #(NNNe  2	# 2	# 2	# 2	# 2	#r   c                 |    | j         s|                                S |j        |j        cfd|D             S )Nc                 @    g | ]}  |                    v|S r)   r)   r   r  r  flrfrevs     r!   r   z,cgpacker._prunemanifests.<locals>.<listcomp>  s3    CCCaCCQLL
$B$B$B$B$Br   )r  r   r   rn  )rO   ra  rb  r  r  r  s      `@@r!   r  zcgpacker._prunemanifests  sP    ~ 	  ::<< Iu}	cCCCCCC5CCCCr   c	              #      K    fd|D             }|sfdn j         j        j        fdi  j        r) fdD              j         j        j        fd}	n}	 j         }
|
j                            t          d          t          d          t          |                    }t          t          |                    D ]\  }}|
                    |          }|s$t          j        t          d          |z                                              |	||          fd	}|j        |j        cfd
D             }|s|                    |dz   |           t#           j         ||d| j         j         j         j        |          }||fV  |                                 d S )Nc                 h    g | ].}                     |                              |          ,|/S r)   )r  r  )r   r  rO   s     r!   r   z*cgpacker.generatefiles.<locals>.<listcomp>  sS     
 
 
}}Q
 )-(8(8(;(;

 
 
r   c                 0                         |i           S rW   r   )unusedrh   r  s     r!   normallinknodesz/cgpacker.generatefiles.<locals>.normallinknodes  s    zz%,,,r   c                 `    | j         | j        fd| D             }fd|D             S )Nc              3   2   K   | ]}| |          fV  d S rW   r)   )r   rflinkrevs     r!   r}  zBcgpacker.generatefiles.<locals>.normallinknodes.<locals>.<genexpr>  s0      88QHHQKK(888888r   c                 H    i | ]\  }}|v 	 |           |          S r)   r)   )r   r  r  clnr  fnodes      r!   
<dictcomp>zCcgpacker.generatefiles.<locals>.normallinknodes.<locals>.<dictcomp>  s4    LLLearV||a##b''|||r   )rn  rn   )ra  rh   r   r  r
  r	  r  s      @@r!   r  z/cgpacker.generatefiles.<locals>.normallinknodes  sL     =
8888%888LLLLLLtLLLLr   c                 *    g | ]}j         |         S r)   )r  )r   r@   rO   s     r!   r   z*cgpacker.generatefiles.<locals>.<listcomp>  s    <<<A$*Q-<<<r   c                    	D ]W}	 |                     |          }|                     |          |                                <   C# t          j        $ r Y Tw xY w | |          }t	          |          t	          
          k    rE
D ]B\  }}|                    |d           }||v rt          ||         |          ||<   ;|r|||<   C|S )Nr^  )filenoder   r	   ManifestLookupErrorr,   r   min)flogrh   r@   r
  linksr  r  rr  rv  
commonctxsr  r  s          r!   r  z)cgpacker.generatefiles.<locals>.linknodes  s    #  A !

5 1 13788E??00 4   'e44u::W--") . .B "ud 3 3 E>>+.uU|RU+K+K+KE%LL" .+-E%Ls   ?AAA   filesr   s!   empty or missing file data for %sc                     |          S rW   r)   )r   linkrevnodess    r!   lookupfilelogz-cgpacker.generatefiles.<locals>.lookupfilelog  s    #A&r   c                 @    g | ]}  |                    v|S r)   r)   r  s     r!   r   z*cgpacker.generatefiles.<locals>.<listcomp>  s:       33ttAww<<z+I+I+I+I+Ir   r   )itemF)r  rv  rw  ry  r  )r  r   rn   r  r   r9   r   r   r,   r  r`  filer	   r   r  rn  r   r  r  r  r  r  r   )rO   r  r  r  r  r  r  r  r  r  r   r  ru  rh   
filerevlogr  	filenodesr   r	  rr  rv  r  r  r  r  r  s   ` ` ` ``          @@@@@@@@r!   r  zcgpacker.generatefiles  s     
 
 
 
!
 
 
  	M- - - - - - *&+CM M M M M M ? 	( =<<<<<<JJ(,E         $ (Iz7''hKKakk\1B1B ( 
 
 "&"6"677 +	  +	 HAu5))J k:;;eC   !!###$9Z77L' ' ' ' ' #
(:ID#
     '  I  OOAEO...
* / -$($=!1  F -r   )FNFFNNN)T)TNrW   )	r*  r+  r,  rR   r  r  r  r  r  r)   r   r!   r  r    s         #O/ O/ O/ O/d GKSH SH SH SHl :>d d d d^ w# w# w# w#rD D D2 m m m m m mr   r  c	                 >    d }	t          | ||d|	dd|||||          S )Nc                 d    t                               | j        | j        | j        | j                  S rW   )r.  r%   rn   r  r  r  r   s    r!   r   z _makecg1packer.<locals>.<lambda>?  s(    !<!A!A	!(AJ" " r   rD   r   T)r  r  r  r  r  r  r  r  r  
r   r  r  r  r  r  r  r  r  r  s
             r!   _makecg1packerr"  4  sL      )!#   r   c	                 <    d }	t          | ||d|	d|||||          S )Nc                 p    t                               | j        | j        | j        | j        | j                  S rW   )r5  r%   rn   r  r  rQ  r  r  s    r!   r   z _makecg2packer.<locals>.<lambda>^  s,    !<!A!A	!(AJ
" " r   r2  r   r  r  r  r  r  r  r  r   r!  s
             r!   _makecg2packerr&  S  sI      )#   r   c	                 T    d }	t          | ||d|	t                      |||||          S )Nc                 |    t                               | j        | j        | j        | j        | j        | j                  S rW   )r>  r%   rn   r  r  rQ  r  rs   r  s    r!   r   z _makecg3packer.<locals>.<lambda>|  s0    !<!A!A	!(AJ
AG" " r   r8  r%  r  r*   r!  s
             r!   _makecg3packerr*  q  sM      )\\#   r   c	                 V    d }	t          | ||d|	t                      ||||||          S )Nc           	          t                               | j        | j        | j        | j        | j        | j        | j                  S rW   )	rI  r%   rt   rn   r  r  rQ  r  rs   r  s    r!   r  z(_makecg4packer.<locals>.builddeltaheader  s>    *//FHHJJG
 
 	
r   r   )r  r  r  r  r  r  r  r  r)  r!  s
             r!   _makecg4packerr-    sR    	
 	
 	
 )\\#'   r   )rD   r2  r8  r   c                    t          t                                                    }d}| j                            dd          s/| j                            dd          st          j        |           rd}|s|                    d           | j                            dd          p%t          j	        | j        v pt          j
        | j        v }|s|                    d           |S )	NFs   experimentals   changegroup3s   treemanifestTr8  s   changegroup4r   )r   
_packermapr  r9   r   r   r  discardr   r   r   )r   versionsneedv03want_v4s       r!   allsupportedversionsr4    s    :??$$%%HG?O<<7o?? !$''   ?O<< 	E,0AA	E/43DD 
   Or   c                      t          |           S rW   )r4  r   s    r!   supportedincomingversionsr7    s    %%%r   c                    t          |           }t          j        |           r*|                    d           |                    d           t          j        | j        v r*|                    d           |                    d           t          | j        v r*|                    d           |                    d           |S )NrD   r2  )r4  r   r  r0  r   NARROW_REQUIREMENTLFS_REQUIREMENTr   r1  s     r!   supportedoutgoingversionsr<    s    #D))Hd##   	&$*;;; 	$+++ 	Or   c                 :    t          t          |                     S rW   )maxr<  r6  s    r!   localversionr?    s     (..///r   c                     t          |           }t          j        | j        v r|                    d           |sJ t	          |          S )NrD   )r<  r   GENERALDELTA_REQUIREMENTr0  r  r;  s     r!   safeversionrB    sK     )..H,0AAAOOOx==r   c
                    | t          |          v sJ |t          j                    }|t          j                    }| dk    r(|                                st	          j        d          |r(| dv r$t	          j        t          d          | z            |                    |          }t          |          d         }
 |
|||||||||		  	        S )NrD   s;   version 01 changegroups do not support sparse file matchers)rD   r2  sS   ellipsis nodes require at least cg3 on client and server, but negotiated version %sr   )r  r  r  r  r  )
r<  matchmodalwaysneverr	   ProgrammingErrorr   r   narrowmatchr/  )r   r   r  r  r  r  r  r  r  r  fns              r!   
getbundlerrJ    s    /555555/##^%%
% 0 0$J
 
 	
  
G~--k-  	
 
 	
 w''G	G	Q	B2#'
 
 
 
r   c                 >    t          |          d         |||          S )Nr   )rM   )r/  )r   r=   rP   rM   s       r!   getunbundlerrL  @  s!    gq!"c&9999r   c                 F   | j         j        s|dk    r7| j                             t          d          t	          |          z             | j         j        rI| j                             d           |D ].}| j                             dt          |          z             -d S d S )Ns   bundles   %d changesets found
s   list of changesets:
s   %s
)r9   r  r   r   r,   r  r   r   )r   rb  r  rn   s       r!   _changegroupinforN  D  s    w A&I--q122SZZ?@@@w /./// 	/ 	/DGMM'CII-..../ /	/ 	/r   c           	          t          | |||||          }t          |t          j        |          d dt	          |j                  i          S )N)fastpathr  s   clcount)
makestreamrL  r   chunkbufferr,   missing)r   outgoingr   r  rP  r  cgstreams          r!   makechangegrouprV  M  se       H ""	S)**+	  r   c                    t          || |||          }|                                 } |j        }	|j        }
|j        }|                                 |p-| j        d u o$|t          |                                           k    }| 	                    dd|           t          | |
|           |                    |	|
||          S )N)r  r  r  s   preoutgoingT)r   r  )rJ  r   commonrS  ancestorsofsort
filternamer`  r   r   rN  r  )r   rT  r   r  rP  r  r  r  bundlerr  csetsr   r  s                r!   rQ  rQ  `  s     '  G ??DJE E 
JJLLL 4AEVDJJLL-A-A$A  	IInDI888T5&)))JGGGr   c           
         d}d}| j                             t          d          t          d          |          }	t          |j        i           D ]}
|dz  }|
d         }| j                             d|z             |	                                 |                     |          }t          |          }	 |	                                }|
                    ||||          }|s!t          j        t          d                    n;# t          j        $ r)}t          j        t          d	          |z            d }~ww xY w|t          |          |z
  z  }||v r|||         }t          |t          |                    D ]Q}|                    |          }||v r|                    |           1t          j        t          d
                    |s||= |	                                 |                                D ]{\  }}|                     |          }|D ]^}	 |                    |           # t          j        $ r4 t          j        t          d          |t+          |          fz            w xY w|||fS )Nr   r  r   r   rg   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)r9   r   r   r(  ri   r   r   r  r,   r   r   r	   r   CensoredBaseErrorr   rn   remover   r   r   LookupErrorr   )r   r  r   r   expectedfilesr  r   r  r   r  r)  r  r  or   r   eneedsnewr  s                       r!   r   r     s    IEw##	(!H++] $  H &.33 ! !	
k".2333YYq\\GG	M%%''FKK+	    E  Mk!$J"K"KLLLM& 	M 	M 	M+a FGG!KLLL	MSWWq[ 		>>aLEQB(( Q QGGCLL::LLOOOO+a(N&O&OPPP !aLOO%% 	 	5YYq\\ 	 	Aq				$   kDEE#a&&k"  	 es&   7ADE $D;;E !H77AI:rW   )NFNNNN)FFNNN)NNNFFNNN)FN)FNNN)Cr4   r   r   i18nr   rn   r   r   r   r   r    r	   r
   rD  r   r   r   r   r   
interfacesr   revlogutilsr   r   r   r   utilsr   Structr.  r5  r>  rI  r:  r   r"   r'   r*   r.   rA   rC   r1  r7  rB  rK  rZ  rc  r  r  r  r"  r&  r*  r-  r/  r4  r7  r<  r?  rB  rJ  rL  rN  rV  rQ  r   r)   r   r!   <module>rm     s   
			                 
      	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 # " " " " " 0 0 0 0 0 0 6 6 6 6 6 6      +fmO<< +fm,>?? +fm,@AA +fm,ABB & & &* * *
! ! !
) ) )
 #  #  #  #Fa! a! a! a! a! a! a! a!HB B B B B+ B B B&L L L L L+ L L LB/
 /
 /
 /
 /
+ /
 /
 /
d( ( ( ( ( ( ( (  D" " ",\$ \$ \$L P P P PfC	 C	 C	 C	 C	 C	 C	 C	V    H    F    F % % % %R K(K(K(K( 
  :& & &
  00 0 0   0 0 0 0f: : : :/ / / AE   0  H  H  H  HT 9 9 9 9 9 9r   